<?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>217028</bug_id>
          
          <creation_ts>2020-09-26 22:21:33 -0700</creation_ts>
          <short_desc>Refactor test runner code to cut down on copy/paste code and long-winded repetitive idioms</short_desc>
          <delta_ts>2020-09-29 14:40:22 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1692302</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-26 22:21:33 -0700</bug_when>
    <thetext>Refactor test runner code to cut down on copy/paste code and long-winded repetitive idioms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692425</commentid>
    <comment_count>1</comment_count>
      <attachid>409849</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 11:46:40 -0700</bug_when>
    <thetext>Created attachment 409849
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692426</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 11:47:06 -0700</bug_when>
    <thetext>Not setting review? yet because I must have made at least one mistake in all the global replaces and refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692429</commentid>
    <comment_count>3</comment_count>
      <attachid>409850</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 11:51:48 -0700</bug_when>
    <thetext>Created attachment 409850
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692430</commentid>
    <comment_count>4</comment_count>
      <attachid>409851</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 11:57:09 -0700</bug_when>
    <thetext>Created attachment 409851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692435</commentid>
    <comment_count>5</comment_count>
      <attachid>409853</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 12:44:44 -0700</bug_when>
    <thetext>Created attachment 409853
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692437</commentid>
    <comment_count>6</comment_count>
      <attachid>409854</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 12:50:39 -0700</bug_when>
    <thetext>Created attachment 409854
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692438</commentid>
    <comment_count>7</comment_count>
      <attachid>409855</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 12:55:13 -0700</bug_when>
    <thetext>Created attachment 409855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692453</commentid>
    <comment_count>8</comment_count>
      <attachid>409860</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 15:02:47 -0700</bug_when>
    <thetext>Created attachment 409860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692471</commentid>
    <comment_count>9</comment_count>
      <attachid>409864</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 18:46:52 -0700</bug_when>
    <thetext>Created attachment 409864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692472</commentid>
    <comment_count>10</comment_count>
      <attachid>409865</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 18:55:49 -0700</bug_when>
    <thetext>Created attachment 409865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692480</commentid>
    <comment_count>11</comment_count>
      <attachid>409868</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 21:47:45 -0700</bug_when>
    <thetext>Created attachment 409868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692488</commentid>
    <comment_count>12</comment_count>
      <attachid>409870</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-27 23:06:47 -0700</bug_when>
    <thetext>Created attachment 409870
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692576</commentid>
    <comment_count>13</comment_count>
      <attachid>409891</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-28 09:57:13 -0700</bug_when>
    <thetext>Created attachment 409891
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692800</commentid>
    <comment_count>14</comment_count>
      <attachid>409952</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-28 19:35:47 -0700</bug_when>
    <thetext>Created attachment 409952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693100</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-29 13:12:12 -0700</bug_when>
    <thetext>Working now, so ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693145</commentid>
    <comment_count>16</comment_count>
      <attachid>409952</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-29 14:15:06 -0700</bug_when>
    <thetext>Comment on attachment 409952
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=409952&amp;action=review

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:96
&gt; +static JSContextRef mainJSContext()

I would prefer this be called mainFrameJSContext, just because main on its own is so ambiguous, but I feel this in a very minor way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693159</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-29 14:39:03 -0700</bug_when>
    <thetext>Committed r267761: &lt;https://trac.webkit.org/changeset/267761&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693161</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-29 14:40:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/69764444&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409849</attachid>
            <date>2020-09-27 11:46:40 -0700</date>
            <delta_ts>2020-09-27 11:54:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200927114639.patch</filename>
            <type>text/plain</type>
            <size>692627</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggNjc5ZGE2ZjVjNjA3MTA3OTg2YjI3OTA3ODhmYzI5OWI4MGI4NDUyYi4u
ZjM1NmE4ODFjZDc5NTNjN2ZiNjNhMDJjNDJiZjI2YTUzYjFlZjUwNCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0MSBAQAorMjAy
MC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlmeWluZywgYnV0IGV2ZW4g
bW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVzdAorICAgICAgICBjb2Rl
IGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkgYW5kIHBhc3RlIHJhdGhl
ciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0ZXIgdGhlIHJlZmFjdG9y
aW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlzIGNvZGUgaXMgd3JpdHRl
biB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGluZyBmb3IgZWFjaCBmdW5j
dGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0
KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0NsYXNzIHdpdGggdGhpcy4g
UmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBjbGVhciB0aGlzIHBhc3Nl
cyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKHVp
RWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBSZW1vdmVkIHVubmVlZGVk
IGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3aGljaCBzdGFydHMgb3V0
IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9y
RHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IpOiBV
c2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoX3JldHVybkV4
cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2UgYW5kIGF1dG8uCisgICAg
ICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAo
Z2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChHQ0NvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6IFJlcGxhY2VkIGdldEpT
Q2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFpblB0ciB0byBtYWtlIGl0
IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVyLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKGVuY29kZUhv
c3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChleGVjQ29tbWFu
ZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAob3Zl
cnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKHF1ZXVlTG9hZENhbGxi
YWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5nQ2FsbGJhY2spOiBEaXR0
by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFs
T2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKTogUmVw
bGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRy
IHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisg
ICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25z
dCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAg
ICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQpOiBTaW1wbGlmaWVk
IHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sp
OiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAorICAgICAgICB0YWJsZSB2
YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBuZWVkIHRvIGJlIG9iamVj
dHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogRGl0dG8u
CisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4K
KyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTogVXNlIGFycmF5TGVuZ3Ro
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDogVXBkYXRlZCBmb3IgdGhl
IGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3Jt
TmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoY3JlYXRlRW1w
dHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50
TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
bGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
VmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oOiBSZW1vdmVkIHVubmVl
ZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGguCisgICAgICAgIFJlbW92
ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIgSlNWYWx1ZUlzT2JqZWN0
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSBj
b25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoY3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09iamVjdC4KKyAgICAgICAg
KHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSBjb25zdCk6
IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRnJh
bWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERlbGVnYXRlIGRpZENsZWFy
V2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6CisgICAgICAgIFVzZSBhdXRv
LiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LiBTaW1wbGlmaWVkIG9i
amVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0TlMgaW5zdGVhZCBvZiBy
ZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRDbGVhcldpbmRvd09iamVj
dEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNlIGNyZWF0ZUpTU3RyaW5n
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAg
ICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVuZ3RoLgorCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHA6CisgICAgICAgIChXVFI6
OnRvT3B0aW9uYWxCb29sKTogUmVuYW1lZCBmcm9tIEpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbC4K
KyAgICAgICAgKFdUUjo6dG9PcHRpb25hbERvdWJsZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpt
YWtlVmFsdWUpOiBBZGRlZCB3aXRoIG92ZXJsb2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAg
ICAgUmVwbGFjZWQgSlNWYWx1ZVRvTnVsbGFibGVCb29sZWFuIGFuZCBKU1ZhbHVlTWFrZVN0cmlu
Z09yTnVsbC4KKyAgICAgICAgKFdUUjo6Y3JlYXRlSlNTdHJpbmcpOiBBZGRlZCB3aXRoIG92ZXJs
b2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAgICAgKFdUUjo6cHJvcGVydHkpOiBBZGRlZC4K
KyAgICAgICAgKFdUUjo6c3RyaW5nUHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Ym9v
bGVhblByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChXVFI6Om51bWVyaWNQcm9wZXJ0eSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjpvYmplY3RQcm9wZXJ0eSk6IFJlZmFjdG9yZWQgdG8gY2FsbCBw
cm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBBZGRlZC4KKyAgICAgICAgKFdU
Ujo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Y2FsbCk6
IFJlZmFjdG9yZWQgdG8gbGV0IG9iamVjdFByb3BlcnR5IGRvIG1vcmUgb2YgdGhlIG51bGwgY2hl
Y2tpbmcuCisgICAgICAgIChXVFI6OmNhbGxDb25zdHJ1Y3Rvcik6IERpdHRvLgorICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaDogVXBkYXRlZCBmb3IgdGhlIGFi
b3ZlLgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5o
OiBSZWR1Y2VkIGluY2x1ZGVzIGEgYml0LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU1dyYXBwZXIuaDogQWRkZWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisKKyAg
ICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQu
Y3BwOgorICAgICAgICAoVUlTY3JpcHRDb250ZXh0OjpVSVNjcmlwdENvbnRleHQpOiBQYXNzIGZl
d2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LgorICAgICAgICAoVUlTY3JpcHRDb250
ZXh0OjpydW5VSVNjcmlwdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKFVJU2NyaXB0
Q29udGV4dDo6b2JqZWN0RnJvbVJlY3QgY29uc3QpOiBVc2Ugc2V0UHJvcGVydHkuCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmg6
IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHA6CisgICAgICAgIChXVFI6
OnRvRGV2aWNlT3JpZW50YXRpb24pOiBVc2UgY3JlYXRlSlNTdHJpbmcgYW5kIEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcuCisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6bWFr
ZVdpbmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKworICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbToKKyAgICAg
ICAgKC1bTGF5b3V0VGVzdFNwZWxsQ2hlY2tlciBzZXRSZXN1bHRzRnJvbUpTVmFsdWU6aW5Db250
ZXh0Ol0pOiBVc2UgY3JlYXRlSlNTdHJpbmcKKyAgICAgICAgYW5kIHJlbW92ZWQgdW5uZWVkZWQg
dXNlIG9mIGxyb3VuZGwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlG
dW5jdGlvbnMuaDogQWRkZWQuIENvbnRhaW5zIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworICAgICAg
ICBmb3IgZGVhbGluZyB3aXRoIFdLRGljdGlvbmFyeVJlZi4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oOiBJbml0aWFsaXplIGRhdGEgbWVtYmVycy4KKwor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwOgor
ICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9uKTogVXNlIE9wdGlv
bmFsIGluc3RlYWQgb2Ygc2VwYXJhdGUgYm9vbC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdp
bmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG06CisgICAgICAgIChf
Z2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZpbGUpOiBVc2Ugc3RhdGljIGluaXRpYWxpemF0aW9uIGFu
ZCBhIGxhbWJkYSBpbnN0ZWFkIG9mCisgICAgICAgIGFuIGlmIHN0YXRlbWVudCB0byBpbml0aWFs
aXplLgorICAgICAgICAoX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yKTogVXNlIHRvT3B0aW9uYWxC
b29sIGFuZCBjcmVhdGVKU1N0cmluZy4gQWxzbyBhZGRlZAorICAgICAgICBzdXBwb3J0IGZvciBu
dWxsYWJsZSBkb3VibGVzIGFuZCB1c2VkIGF1dG8gYSBiaXQgbW9yZS4KKyAgICAgICAgKF9yZXR1
cm5FeHByZXNzaW9uKTogVXNlIG1ha2VWYWx1ZS4KKworICAgICAgICAqIEluamVjdGVkQnVuZGxl
L0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOiBNYWRlIHRoZSBvcHRpb25hbCBhcmd1bWVudHMgdG8g
dGhlCisgICAgICAgIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIGZ1bmN0aW9uICJkb3VibGU/
IiBpbnN0ZWFkIG9mICJvYmplY3QiLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6Z2V0
TWVudUl0ZW1DaGlsZHJlbkNhbGxiYWNrKTogVXNlIGF1dG8gYW5kIG5vdCBKU1ZhbHVlVG9PYmpl
Y3QuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogTW92ZWQgdG8gSlNCYXNpY3MuaC9jcHAu
CisgICAgICAgIChXVFI6OnBhcnNlVG91Y2hNb2RpZmllcik6IEFkZGVkLiBGYWN0b3JlZCBvdXQg
b2YgdGhlCisgICAgICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9kaWZpZXIg
ZnVuY3Rpb24uCisgICAgICAgIChXVFI6OnBhcnNlTW9kaWZpZXJBcnJheSk6IFVzZSBjcmVhdGVK
U1N0cmluZyBhbmQgcmVtb3ZlIHVubmVlZGVkIGlnbm9yZWQKKyAgICAgICAgZXhjZXB0aW9uIG91
dCBhcmd1bWVudCwgc2luY2UgdGhhdCBpcyBvcHRpb25hbC4gQWxzbyBhZGRlZCBvdmVybG9hZCB0
aGF0CisgICAgICAgIGdldHMgdGhlIGNvbnRleHQuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp+RXZlbnRTZW5kaW5nQ29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgIChXVFI6OmNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkpOiBVc2UgYWRvcHRX
SyBhbmQgc2V0VmFsdWUuIFJldHVybiBhIFdLUmV0YWluUHRyLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZURvd24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlVXApOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8p
OiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlcy4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNsaWNrKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnN0YXJ0QW5kQ2Fu
Y2VsTW91c2VGb3JjZUNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6Om1vdXNlRm9yY2VEb3duKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VVcCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpsZWFwRm9yd2FyZCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNr
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlS2V5RG93bk1lc3Nh
Z2VCb2R5KTogVXNlIHNldFZhbHVlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjprZXlEb3duKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24p
OiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZVNjcm9sbEJ5KTogVXNlIHNldFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcyk6IFVzZQorICAgICAgICBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3Vz
TW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQKKyAgICAgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRl
eHRDbGljayk6IFVzZSBhdXRvIGFuZCBub3QgSlNWYWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RS
Ojp0b01vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMpOiBVc2UgYm9vbGVhblByb3BlcnR5LgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjphZGRUb3VjaFBvaW50KTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6dXBkYXRlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoUG9pbnRSYWRpdXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hTdGFy
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaE1v
dmUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hF
bmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hD
YW5jZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2xl
YXJUb3VjaFBvaW50cyk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpyZWxlYXNlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9F
dmVudFNlbmRpbmdDb250cm9sbGVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAgICAg
RGVsZXRlZCB2YXJpb3VzIHVubmVlZGVkIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6
R0NDb250cm9sbGVyOjpHQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0Nv
bnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0NvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgIEFsc28gbWFya2VkIHRoZSBjbGFzcyBm
aW5hbC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkQ3JlYXRlUGFn
ZSk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRS
ZWNlaXZlTWVzc2FnZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cG9zdFBhZ2VNZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpy
ZXBvcnRMaXZlRG9jdW1lbnRzKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKTogVXNlIGRpY3Rpb25hcnlW
YWx1ZSwKKyAgICAgICAgYm9vbGVhblZhbHVlLCBwb3N0UGFnZU1lc3NhZ2UsIHZhbHVlLCBhbmQg
bW9yZSB0byBzdHJlYW1saW5lLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6Ym9vbGVh
bkZvcktleSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzdHJpbmdG
b3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0
aW5nKTogVXNlIGJvb2xlYW5WYWx1ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRv
bmUpOiBVc2Ugc3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpjbG9z
ZU90aGVyUGFnZXMpOiBVc2Ugc2V0VmFsdWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpkdW1wVG9TdGRFcnIpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlCisgICAgICAgIChX
VFI6OkluamVjdGVkQnVuZGxlOjpvdXRwdXRUZXh0KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUpOiBVc2UgcG9z
dFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdEFkZENocm9t
ZUlucHV0RmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RS
ZW1vdmVDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0Rm9jdXNXZWJWaWV3KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpwb3N0U2V0V2luZG93SXNLZXkpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRWaWV3U2l6ZSk6IFVzZSBzZXRWYWx1ZSBhbmQgdG9X
Sy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNh
dGlvbkNsaWNrKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnBvc3RTZXRBZGRzVmlzaXRlZExpbmtzKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UsCisgICAgICAgIGFuZCB1c2UgT3B0aW9uYWwgaW5z
dGVhZCBvZiBib29sL2RvdWJsZSBwYWlycy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFVzZSBwb3N0UGFn
ZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjppc0dlb2xvY2F0aW9uUHJv
dmlkZXJBY3RpdmUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQgY29uc3Qp
OiBVc2UgdG9XSyBhbmQgdWludDY0VmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
OjpzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1p
c3Npb25Gb3JPcmlnaW4pOiBVc2Ugc2V0VmFsdWUKKyAgICAgICAgYW5kIHBvc3RQYWdlTWVzc2Fn
ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbik6IFVz
ZXQgc2V0VmFsdWUKKyAgICAgICAgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUpOiBVc2Ugc2V0VmFsdWUgYW5kIHBv
c3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEhpZGRlbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0Q2FjaGVNb2RlbCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1
ZSBjb25zdCk6IFVzZSB0b1dLIGFuZCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpwcm9jZXNzV29ya1F1ZXVlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlQmFja05hdmlnYXRpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24pOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZCk6IFVzZSBzZXRWYWx1
ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cXVldWVSZWxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVl
TG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVOb25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OnBvc3RNZXNzYWdlKTog
QWRkZWQuIE92ZXJsb2FkcyBmb3IgbWFueSB0eXBlcyB0byBrZWVwIGNhbGxlciBjb2RlIHN0cmVh
bWxpbmVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OnBvc3RQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaDogVXBkYXRlZCBmb3IgdGhlIGFib3Zl
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6cHJvcGVy
dHlWYWx1ZURvdWJsZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlSW50KTog
RGl0dG8uCisgICAgICAgIChXVFI6Om51bWVyaWNXaW5kb3dQcm9wZXJ0eSk6IFJlbmFtZWQgZnJv
bSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZSBmb3IgYnJldml0eQorICAgICAgICBhbmQgZm9y
IGNvbnNpc3RlbmN5IHdpdGggSlNCYXNpY3MuaCBmdW5jdGlvbnMuCisgICAgICAgIChXVFI6OmR1
bXBQYXRoKTogVXNlIHN0cmluZ1Byb3BlcnR5LCBvYmplY3RQcm9wZXJ0eSwgYW5kIG1ha2VTdHJp
bmcuCisgICAgICAgIChXVFI6OnJhbmdlVG9TdHIpOiBVc2UgYXV0bywgbnVtZXJpY1Byb3BlcnR5
LCBhbmQgbWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6TmF2aWdhdGlvblR5cGVUb1N0cmluZyk6
IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpzdHJpbmcpOiBSZW5hbWVkIGZyb20gc2VjdXJpdHlP
cmlnaW5Ub1N0ci4gVXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OmZyYW1lVG9TdHIpOiBV
c2UgYXV0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVz
dCk6IFJlbW92ZWQgdW5uZWVkZWQgbG9jYWwuCisgICAgICAgIChXVFI6OmR1bXBGcmFtZURlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OmR1
bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6ZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBVc2Ug
YXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOiBV
cGRhdGUgZm9yIG5hbWUgY2hhbmdlLgorICAgICAgICAoV1RSOjp0b0pTKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6aGFzRG9j
dW1lbnRFbGVtZW50KTogVXNlIG9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHksCisgICAgICAgIGFuZCBwYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93
T2JqZWN0LgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24pOiBTdHJlYW1saW5lIGNvZGUgYSBiaXQuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOiBVc2UgbWFrZVN0
cmluZy4KKyAgICAgICAgKFdUUjo6bGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5RdW90YSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKTogRGl0dG8uCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpUZXN0UnVubmVyKTogVXNlIHRvV0suCisgICAgICAgIChX
VFI6OnBhZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6bWFpbkZyYW1lKTogQWRkZWQuCisgICAg
ICAgIChXVFI6Om1haW5KU0NvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNwbGF5
QW5kVHJhY2tSZXBhaW50cyk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjp0b1dLKTogQWRkZWQg
b3ZlcmxvYWQgZm9yIGRvdWJsZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlV0tEaWN0aW9uYXJ5KTog
QWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0dXJuVmFs
dWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmlu
Z0Jvb2xlYW4pOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VXaXRoUmV0dXJuVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRkZWQuCisgICAgICAgIChX
VFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdVSW50NjQpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNob3VsZER1bXBQaXhlbHMgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldER1bXBQaXhl
bHMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6d2hhdFRvRHVtcCBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5n
VUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXaGF0VG9EdW1wKTogVXNlIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdhaXRV
bnRpbERvbmUpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2hvdWxkV2FpdFVudGlsRG9uZSBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hv
dWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmV4ZWNDb21tYW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OmZpbmRPcHRpb25zRnJv
bUFycmF5KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLCBhbmQgY3JlYXRlSlNTdHJp
bmcuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmcpOiBVc2UgcGFnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZmluZFN0cmluZ01hdGNoZXNJblBhZ2UpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVwbGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKTog
VXNlIG1haW5KU0NvbnRleHQgYW5kIGFycmF5TGVuZ3RoIGFuZAorICAgICAgICByZW1vdmVkIHVu
bmVlZGVkIGNhbGwgdG8gc3RkOjpyb3VuZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBbGxEYXRhYmFzZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKTogVXNlIHBhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VG
b3JPcmlnaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6c3RyaW5nQXJyYXlUb0pTKTogVHdlYWtl
ZCBjb2Rpbmcgc3R5bGUgYSBiaXQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om9yaWdpbnNX
aXRoQXBwbGljYXRpb25DYWNoZSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc0NvbW1hbmRFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dENhbk9wZW5XaW5kb3dzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TWVkaWFEZXZpY2VzRW5hYmxlZCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJSVENNRE5TSUNFQ2FuZGlk
YXRlc0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0Q3VzdG9t
VXNlckFnZW50KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9kZXJuTWVkaWFDb250cm9sc0Vu
YWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViR0wyRW5hYmxl
ZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXcml0YWJsZVN0cmVhbUFQ
SUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VHJhbnNmb3Jt
U3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRS
ZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRHZW5lcmljQ3VlQVBJRW5hYmxlZCk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSk6IFVz
ZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFBs
dWdpbnNFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVyZW5jZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNQYWdlQm94VmlzaWJsZSk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcik6IFJlbW92ZWQgbG9jYWwuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldEF1ZGlvUmVzdWx0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVy
dHkuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IpOiBVc2UgcGFn
ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQpOiBVc2UgcmFuZ2Ut
YmFzZWQgZm9yIGxvb3AuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKTogVXNlIG1haW5GcmFtZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGV4dERpcmVjdGlvbik6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiBj
b25zdCk6CisgICAgICAgIFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyRGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKToKKyAgICAgICAgVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayk6
IENoYW5nZWQgbWFwIHRvIHN0b3JlIG9iamVjdHMgaW5zdGVhZCBvZiB2YWx1ZXMuCisgICAgICAg
IChXVFI6OmNhbGxUZXN0UnVubmVyQ2FsbGJhY2spOiBTaW1wbGlmeSBzaW5jZSBtYXAgaGFzIG9i
amVjdHMuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
clRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0QWx3YXlzQWNjZXB0Q29va2llcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMpOiBV
c2UgYXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxl
U2hlZXRFbmFibGVkKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24pOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpkZW55V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25Q
ZXJtaXNzaW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIE9wdGlvbmFsPGRvdWJs
ZT4gaW5zdGVhZCBvZiBib29sL2RvdWJsZQorICAgICAgICBwYWlycywgbGV0dGluZyB0aGUgSURM
IGJpbmRpbmdzIGRvIHRoZSB3b3JrIGZvciB1cy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKTogUmVtb3ZlZCBsb2Nh
bC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNEb2luZ01lZGlhQ2FwdHVyZSBjb25zdCk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3Jp
Z2luKTogUmVtb3ZlZCBsb2NhbHMuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9y
T3JpZ2luKTogREl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlldyk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnF1
ZXVlTG9hZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1M
U3RyaW5nKTogUmVtb3ZlZCBhIGxvY2FsLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1
ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVldWVO
b25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFJl
amVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cyk6CisgICAgICAgIFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGRM
b2dEb3dubG9hZENhbGxiYWNrcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCBjb25zdCk6IFVzZSBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEJsb2NrQWxsUGx1Z2lucyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6ZmFpbE5leHROZXdDb2RlQmxvY2spOiBVc2UgbWFpbkpTQ29udGV4
dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdDb21waWxlcyk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpuZXZlcklubGluZUZ1bmN0aW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xp
Y3lBZnRlckRlbGF5KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVM
aW1pdHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkRG93bmxv
YWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOiBV
c2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHQpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0Q2FsbGJhY2spOiBVc2UgbWFpbkpT
Q29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dlZE1lbnVBY3Rpb25z
KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLAorICAgICAgICBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppbnN0YWxsQ3VzdG9tTWVudUFjdGlv
bik6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFy
U3RhdGlzdGljc0RhdGFGb3JEb21haW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRh
YmFzZSk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlz
U3RhdGlzdGljc0VwaGVtZXJhbCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVy
bmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1
Z01vZGUpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljKTog
RGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
VmVyeVByZXZhbGVudFJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpp
c1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlSVRQRGF0YWJhc2UpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJl
ZCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbik6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1l
dHJ5Q2FsbGJhY2spOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Vw
ZGF0ZUNvb2tpZUJsb2NraW5nKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5KTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRp
c3RpY3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBVc2UgcG9zdE1l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RlbGV0ZUNvb2tp
ZXNGb3JIb3N0KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpoYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9u
KTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVy
KTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3Rh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6bWFrZURvbWFpbnNWYWx1ZSk6IEZhY3Rv
cmVkIG91dC4gVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNh
bGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayk6IFVzZSBtYWtlRG9t
YWluc1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpsb2FkZWRTdWJyZXNvdXJjZURv
bWFpbnMpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxE
aWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2spOiBVc2UgbWFrZURvbWFp
bnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNs
ZWFyTW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpy
ZW1vdmVNb2NrTWVkaWFEZXZpY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
cmVzZXRNb2NrTWVkaWFEZXZpY2VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjppc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCk6IFVzZQorICAgICAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6Y29ubmVjdE1vY2tHYW1lcGFkKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZERldGFpbHMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRCdXR0b25W
YWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxl
cyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAg
ICAgIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9w
ZW5QYW5lbEZpbGVzTWVkaWFJY29uKTogVXNlIG1haW5KU0NvbnRleHQgYW5kIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRp
YWxzKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRP
TUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyRE9NQ2FjaGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
Omhhc0RPTUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9v
bGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9tQ2FjaGVTaXplKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKTogVXNlIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1h
bmlmZXN0VGhlbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
aW5qZWN0VXNlclNjcmlwdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZv
clRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphZGRU
ZXN0S2V5VG9LZXljaGFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
blVwS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6a2V5RXhpc3Rz
SW5LZXljaGFpbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxi
YWNrQ2FsbHNDb3VudCk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJu
aW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREaXNtaXNzSmF2
YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KTogVXNlCisgICAgICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFib3J0TW9kYWwpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbik6IFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBZENsaWNrQXR0cmlidXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRB
ZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRl
c3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T2Zmc2NyZWVuQ2Fu
dmFzRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6Omhhc0FwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwQm91
bmRTZXNzaW9uKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFwcEJvdW5kRG9tYWlucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxl
bmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAgICAgIGFuZCB0b1dLLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpwb3N0TWVzc2FnZSk6IEFkZGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4g
QWxzbyBjaGFuZ2VkCisgICAgICAgIG92ZXJyaWRlUHJlZmVyZW5jZSBvdCBhIHN0YXRpYyBtZW1i
ZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXh0SW5wdXRDb250cm9s
bGVyOjpUZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6flRleHRJbnB1dENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2Jh
bE9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IERlbGV0ZWQuIFVz
ZSB0aGUgb25lIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChXVFI6OmNyZWF0ZUNvbXBv
c2l0aW9uSGlnaGxpZ2h0RGF0YSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3Ig
dGhlIGFib3ZlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9p
b3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoV1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVs
ZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMp
OiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9m
QXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb21wdXRlZFJvbGVTdHJpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24gY29uc3Qp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNj
cmlwdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0ZvY3VzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5k
c0ZvclJhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJv
d3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mVmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4gY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVl
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZG9jdW1lbnRVUkkpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbiBjb25z
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxh
cHNlZCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NpbmdsZUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNNdWx0aUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2UpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OkV2ZW50U2VuZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0
aW9uLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSk6
IERlbGV0ZWQuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21h
Yy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tOgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5hbWVkIGZyb20gbWFrZUFycmF5UmVmRm9yQXJyYXku
CisgICAgICAgIChXVFI6Om1ha2VKU09iamVjdCk6IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5h
bWVkIGZyb20gbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkuCisgICAgICAgIChXVFI6Om1ha2VW
YWx1ZVJlZkZvclZhbHVlKTogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICAoV1RSOjpz
ZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBV
c2UgdG9XVEZTdHJpbmcKKyAgICAgICAgYW5kIGFycmF5TGVuZ3RoLgorCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5h
bWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAo
V1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVsZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZy
b20gSlNCYXNpY3MuaCBpbnN0ZWFkLgorICAgICAgICAoV1RSOjpjb252ZXJ0VmVjdG9yVG9PYmpl
Y3RBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6Om1ha2VKU0FycmF5KTogUmVuYW1lZCBm
cm9tIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5LgorICAgICAgICAoV1RSOjpzZWxlY3RUZXh0
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nIGFuZCBh
cnJheUxlbmd0aC4KKyAgICAgICAgKFdUUjo6c2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVGb3JDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dIZWFkZXJzIGNvbnN0KTogVXNlIG1ha2VKU0FycmF5LgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEFycmF5QXR0cmlidXRl
VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBVc2UgY3JlYXRlSlNT
dHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9j
dW1lbnRVUkkpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlu
c3BlY3RvclRlc3RTdHViVVJMKTogUmVtb3ZlIGxvY2Fscy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmg6IEFkZGVkIHRvV0tTdHJpbmcgb3ZlcmxvYWQgdGhh
dCBjb252ZXJ0cyBmcm9tCisgICAgICAgIGEgSlNWYWx1ZVJlZiwgSlNTdHJpbmdSZWYsIG9yIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhbmQgdG9XSyBvdmVybG9hZCB0aGF0IGNvbnZlcnRzCisg
ICAgICAgIGZyb20gYSBjb25zdCBjaGFyKi4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVD
b250ZXh0Q29uZmlndXJhdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6
IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUxpdmVE
b2N1bWVudHNBZnRlclRlc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmNoZWNrRm9yV29ybGRMZWFrcyk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpjb250ZW50RXh0
ZW5zaW9uSlNPTlBhdGgpOiBVc2UgdG9TVEQuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
Ojpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdCk6IFVzZSB0b1dLLgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIHN0cmluZ1ZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdCk6IFVz
ZSBkaWN0aW9uYXJ5VmFsdWUgYW5kCisgICAgICAgIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOiBV
c2UgZGljdGlvbmFyeVZhbHVlLAorICAgICAgICBzdHJpbmdWYWx1ZSwgdWludDY0VmFsdWUsIGRv
dWJsZVZhbHVlLCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
aWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgdG9X
Sy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBVc2UgYXV0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24pOiBSZW1vdmVkIGxvY2FsLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogVXNl
IGF1dG8gYW5kIHRvV1RGU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2YgdG9TVEQuCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBP
cHRpb25hbCBpbnN0ZWFkIG9mIHBhaXJzCisgICAgICAgIG9mIGJvb2wgYW5kIGRvdWJsZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2VyTWVkaWFQZXJtaXNz
aW9uRm9yT3JpZ2luKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
ZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJ
bk5ldHdvcmtQcm9jZXNzKTogVXNlIHRvV0suCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6cG9zdFBhZ2VN
ZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpUZXN0SW5jb3Zh
dGlvbik6IFVzZSB0b1dURlN0cmluZy4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmNy
ZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOiBVc2UgYXV0byBhbmQgc2V0VmFsdWUuCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjppbnZva2UpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFu
ZCBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlIHBvc3RQYWdlTWVzc2FnZQorICAgICAgICBhbmQg
c3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3lu
Y2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlCisgICAgICAgIGRpY3Rpb25h
cnlWYWx1ZSwgYm9vbGVhblZhbHVlLCB2YWx1ZSwgc3RyaW5nVmFsdWUsIGRvdWJsZVZhbHVlLCBh
bmQKKyAgICAgICAgb3B0aW9uYWxEb3VibGVWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OnVpU2NyaXB0RGlkQ29tcGxldGUpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFuZCBzZXRW
YWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZEJlZ2luU3dpcGUpOiBVc2Ug
cG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6d2lsbEVuZFN3
aXBlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRFbmRTd2lwZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3ZlU3dpcGVTbmFw
c2hvdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6bm90aWZ5RG93bmxv
YWREb25lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0
YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVt
b3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxk
RG93bmdyYWRlUmVmZXJyZXIpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdEludm9jYXRpb246OmRpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRUb1NhbWVTaXRl
U3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
U2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
SW52b2NhdGlvbjo6ZGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QmxvY2tDb29r
aWVzRm9ySG9zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
U3RhdGlzdGljc0RlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlv
bjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldExhc3RTZWVuKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRNZXJnZVN0YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0RXhwaXJlZFN0YXRpc3RpYyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0SGFzSGFk
VXNlckludGVyYWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpk
aWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92ZUFsbFNlc3Npb25DcmVk
ZW50aWFscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QXBw
Qm91bmREb21haW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpwZXJm
b3JtQ3VzdG9tTWVudUFjdGlvbik6IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFk
ZGVkIEpTQmFzaWNzLmggdG8gRGljdGlvbmFyeUZ1bmN0aW9ucy5oIHRvIGFwcHJvcHJpYXRlIHRh
cmdldHMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV1RSOjpTY3JpcHRJdGVtOjpTY3JpcHRJdGVtKTogVXNlIHRvV0suCisgICAg
ICAgIChXVFI6OldvcmtRdWV1ZU1hbmFnZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29j
b2EuaDogTWFrZSBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbToKKyAgICAgICAgKFdUUjo6
VUlTY3JpcHRDb250cm9sbGVyQ29jb2E6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IFVzZSB0b1dURlN0
cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5oOiBNYXJrZWQgdGhlIGNsYXNzIGZpbmFsIGFuZCBtYWRlCisgICAgICAgIG1vc3QgZnVu
Y3Rpb25zIHByaXZhdGUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogRGVsZXRlZC4g
VXNlIHRoZSBvbmUgaW4gSlNCYXNpY3MuaC4KKyAgICAgICAgKFdUUjo6cGFyc2VNb2RpZmllckFy
cmF5KTogVXNlIHRoZSBuZXcgdG9XVEZTdHJpbmcgb3ZlcmxvYWQuCisgICAgICAgIChXVFI6OlVJ
U2NyaXB0Q29udHJvbGxlcklPUzo6dHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZCk6
IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94
eS5tbToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eSk6
IEluaXRpYWxpemUgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIChXVFI6OkV2ZW50
U2VuZGVyUHJveHk6OmtleURvd24pOiBVc2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaDogTWFya2VkIHRoZSBjbGFz
cyBmaW5hbCBhbmQgbWFkZQorICAgICAgICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCiAyMDIw
LTA5LTI1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2Ug
ZHVtcEFzVGV4dCB0byBzdHJpcCB0cmFpbGluZyBzcGFjZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCAxYTBjMTY3MDZiMmFlNDI2
MGUzMmQyOTA0NDliZjJkNjVjZmEzZGZhLi45ZTI0MGU1NTljYTQ1MjMzNzQ3OTg0YTZiYTkzNTE1
NGFhY2NkN2RkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
IgorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAKIC8vIFN0YXRpYyBWYWx1ZSBHZXR0ZXJzCiAKQEAg
LTQ3LDE1ICs0OCw5IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFJvb3RFbGVtZW50Q2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPCiAKIC8vIE9iamVjdCBDcmVh
dGlvbgogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmpl
Y3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlclN0ciA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2Nlc3NpYmls
aXR5Q29udHJvbGxlciIpKTsKLSAgICAKLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlND
bGFzcygpOwotICAgIEpTVmFsdWVSZWYgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJPYmplY3QgPSBK
U09iamVjdE1ha2UoY29udGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNl
KGNsYXNzUmVmKTsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2Jq
ZWN0LCBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlclN0ci5nZXQoKSwgYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJPYmplY3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQ
cm9wZXJ0eShjb250ZXh0LCAiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCBKU09iamVjdE1ha2Uo
Y29udGV4dCwgY3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlzKSk7CiB9CiAKIHN0YXRpYyBKU1Zh
bHVlUmVmIGxvZ0ZvY3VzRXZlbnRzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RS
ZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBK
U1ZhbHVlUmVmKikKQEAgLTE1Miw5ICsxNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRQbGF0
Zm9ybU5hbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpcwog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBwbGF0Zm9ybU5hbWUuZ2V0KCkp
OwogfQogCi1KU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkK
K0pTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpjcmVhdGVK
U0NsYXNzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNb
XSA9IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10g
PSB7CiAgICAgICAgIHsgImxvZ0ZvY3VzRXZlbnRzIiwgbG9nRm9jdXNFdmVudHNDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJsb2dWYWx1ZUNoYW5nZUV2ZW50cyIsIGxvZ1ZhbHVlQ2hhbmdl
RXZlbnRzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAibG9nU2Nyb2xsaW5nU3RhcnRFdmVu
dHMiLCBsb2dTY3JvbGxpbmdTdGFydEV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkBAIC0xNjYsMjEg
KzE2MSwxOCBAQCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNz
KCkKICAgICAgICAgeyAiZW5hYmxlRW5oYW5jZWRBY2Nlc3NpYmlsaXR5IiwgZW5hYmxlRW5oYW5j
ZWRBY2Nlc3NpYmlsaXR5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAg
ICB9OwotCi0gICAgc3RhdGljIEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBKU1N0YXRpY1ZhbHVlIHZhbHVlc1tdID0gewogICAgICAgICB7ICJm
b2N1c2VkRWxlbWVudCIsIGdldEZvY3VzZWRFbGVtZW50Q2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICAgICAgeyAicm9vdEVsZW1lbnQiLCBnZXRSb290RWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgImVuaGFuY2VkQWNjZXNzaWJpbGl0eUVuYWJsZWQiLCBnZXRFbmhhbmNlZEFj
Y2Vzc2liaWxpdHlFbmFibGVkQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAicGxhdGZv
cm1OYW1lIiwgZ2V0UGxhdGZvcm1OYW1lQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAw
LCAwLCAwLCAwIH0KICAgICB9OwotCi0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNz
RGVmaW5pdGlvbiA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAg
ICBzdGF0aWMgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAg
MCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCAwLCB2
YWx1ZXMsIGZ1bmN0aW9ucywKICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MAogICAgIH07Ci0KLSAgICByZXR1cm4gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsK
KyAgICByZXR1cm4gYWRvcHQoSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbikpOwogfQogCiB2b2lk
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IDFkYzdk
M2I1NjNhMTU0ZjRjZTliZjdhMzAzMGM4YzVhNzY5N2YzOWEuLjhhMjg3YzQ4YjFkZjUzNmI0NzVi
NjE4NDE3YzI2MTM1ZmIzODYxMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAg
ICBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwogICAgIH5BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cigpOwogCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9p
ZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBDb250cm9sbGVyIE1l
dGhvZHMgLSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMKICAgICBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50IHJvb3RFbGVtZW50KCk7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoK
ICNlbmRpZgogCiBwcml2YXRlOgotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsK
KyAgICBzdGF0aWMgSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gY3JlYXRlSlNDbGFzcygpOwogCiAj
aWYgUExBVEZPUk0oV0lOKQogICAgIEhXSU5FVkVOVEhPT0sgbV9mb2N1c0V2ZW50SG9vayB7IG51
bGxwdHIgfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5jcHAKaW5kZXggMGU1YTUwZjZiOWQzY2U1Y2E3N2JhNDQ4Njg3YzAwOWNiYjE3NWQyMC4uOGVm
ODVlZWRmMDg0ZDY3NjIyNzFjYWYyYzhmNDRhYjg1NDc5MjY3MSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiB1aUVsZW1lbnRDb3VudEZvclNlYXJjaFByZWRpY2F0ZUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LAogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHN0
YXJ0RWxlbWVudCA9IG51bGxwdHI7CiAgICAgYm9vbCBpc0RpcmVjdGlvbk5leHQgPSB0cnVlOwog
ICAgIEpTVmFsdWVSZWYgc2VhcmNoS2V5ID0gbnVsbHB0cjsKLSAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gc2VhcmNoVGV4dCA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHNlYXJjaFRleHQ7CiAgICAgYm9vbCB2aXNpYmxlT25seSA9IGZhbHNlOwogICAgIGJvb2wg
aW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5ID0gZmFsc2U7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQg
Pj0gNSAmJiBhcmd1bWVudENvdW50IDw9IDYpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbSBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQppbmRl
eCBlY2U1MWVhMzlhNTE2ODM1NGJkNTY5NDYzNTkwODZkOTAyMmVhMTlkLi4xNGM2MjcwZjgyMzFk
YzBmMjZhMDVlNjk1ZGE4NDdiZGY4ZTQ4YzhlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCkBA
IC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzMSwxMCArNDMx
LDEwIEBAIHN1YiBfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IKIHsKICAgICBteSAoJHNlbGYsICR0
eXBlLCAkYXJndW1lbnROYW1lKSA9IEBfOwogCi0gICAgcmV0dXJuICJKU1ZhbHVlVG9OdWxsYWJs
ZUJvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29s
ZWFuIiAmJiAkdHlwZS0+aXNOdWxsYWJsZTsKKyAgICByZXR1cm4gInRvT3B0aW9uYWxCb29sKGNv
bnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHR5
cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsICRh
cmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuICIk
YXJndW1lbnROYW1lIiBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKLSAgICByZXR1cm4gImFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikp
IiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0
dXJuICJjcmVhdGVKU1N0cmluZyhjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJCRzZWxme2Nv
ZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOwogICAgIHJldHVybiAiSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIpIiBpZiAkJHNlbGZ7Y29kZUdl
bmVyYXRvcn0tPklzUHJpbWl0aXZlVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuICJ0byIgLiBfaW1w
bGVtZW50YXRpb25DbGFzc05hbWUoJHR5cGUpIC4gIihjb250ZXh0LCAkYXJndW1lbnROYW1lKSI7
CiB9CkBAIC00NzIsMTEgKzQ3MiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBteSAo
JHNlbGYsICRyZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAiSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1bmRl
ZmluZWQiOwotICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQsICR7
ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVy
blR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHBy
ZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlw
ZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJl
dHVybiAiJHtleHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7CiAg
ICAgcmV0dXJuICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYg
JCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwotICAg
IHJldHVybiAiSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufS5n
ZXQoKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBl
KTsKKyAgICByZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIg
aWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwogICAg
IHJldHVybiAidG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwogfQog
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcAppbmRleCA0YTM3YmYzYTEzZGE0Y2Fl
ZWE0MGEwY2Y4YTcwOWZlNThkMzRlYTRjLi5lZDJjNmMxOWU1MzNlZTBmMmZlNDk4ZjNlNTUzMDY0
NDcwOGNiMzBkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIu
Y3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNzIgKzI5
LDQ5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0KLUdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKCkK
LXsKLX0KLQotR0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKCkKLXsKLX0KKyNpbXBvcnQgIkpT
QmFzaWNzLmgiCiAKIC8vIFN0YXRpYyBGdW5jdGlvbnMKIAogc3RhdGljIEpTVmFsdWVSZWYgY29s
bGVjdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBHQ0NvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3QoKTsKKyAgICBh
dXRvJiBjb250cm9sbGVyID0gKnN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0KCk7CiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJl
ZiBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCiB7Ci0gICAgYm9vbCB3YWl0VW50aWxEb25lID0gZmFsc2U7Ci0gICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPiAwKQotICAgICAgICB3YWl0VW50aWxEb25lID0gSlNWYWx1ZVRvQm9vbGVhbihj
b250ZXh0LCBhcmd1bWVudHNbMF0pOwotCi0gICAgR0NDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKLSAgICBjb250cm9sbGVyLT5jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVudGlsRG9u
ZSk7Ci0KKyAgICBhdXRvJiBjb250cm9sbGVyID0gKnN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgYm9vbCB3YWl0VW50aWxEb25l
ID0gYXJndW1lbnRDb3VudCA+IDAgJiYgSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVu
dHNbMF0pOworICAgIGNvbnRyb2xsZXIuY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKHdhaXRVbnRp
bERvbmUpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAog
c3RhdGljIEpTVmFsdWVSZWYgZ2V0SlNPYmplY3RDb3VudENhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAg
IHNpemVfdCBqc09iamVjdENvdW50ID0gY29udHJvbGxlci0+Z2V0SlNPYmplY3RDb3VudCgpOwot
Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGpzT2JqZWN0Q291bnQpOwor
ICAgIGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dCwgY29udHJvbGxlci5nZXRKU09iamVjdENvdW50KCkpOwogfQogCiAvLyBPYmplY3Qg
Q3JlYXRpb24KIAotdm9pZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQordm9pZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNv
bnRleHQpCiB7Ci0gICAgYXV0byBnY0NvbnRyb2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiR0NDb250cm9sbGVyIikpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFz
c1JlZiA9IGdldEpTQ2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGdjQ29udHJvbGxlck9iamVjdCA9
IEpTT2JqZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVh
c2UoY2xhc3NSZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dP
YmplY3QsIGdjQ29udHJvbGxlclN0ci5nZXQoKSwgZ2NDb250cm9sbGVyT2JqZWN0LCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBl
eGNlcHRpb24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgIkdD
Q29udHJvbGxlciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCks
IHRoaXMpKTsKIH0KIAotSlNDbGFzc1JlZiBHQ0NvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQorSlNS
ZXRhaW5QdHI8SlNDbGFzc1JlZj4gR0NDb250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKCkKIHsKLSAg
ICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CiAgICAgICAgIHsg
ImNvbGxlY3QiLCBjb2xsZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiY29sbGVjdE9u
QWx0ZXJuYXRlVGhyZWFkIiwgY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAiZ2V0SlNPYmplY3RDb3VudCIsIGdldEpTT2JqZWN0Q291bnRDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07Ci0KLSAgICBzdGF0aWMgSlND
bGFzc0RlZmluaXRpb24gY2xhc3NEZWZpbml0aW9uID0gewotICAgICAgICAwLCBrSlNDbGFzc0F0
dHJpYnV0ZU5vbmUsICJHQ0NvbnRyb2xsZXIiLCAwLCAwLCBzdGF0aWNGdW5jdGlvbnMsCisgICAg
c3RhdGljIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAgIDAs
IGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIGZ1bmN0aW9ucywK
ICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICAgIH07Ci0KLSAgICBy
ZXR1cm4gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gYWRvcHQo
SlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbikpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvR0NDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xs
ZXIuaAppbmRleCA2NDI0Mzg0ZGY1MzBlOGMxZmRhZThmYjYxMzExYmYwYWRjNGE2YThmLi4zN2Fh
NDZhNzc0Y2UzZTcwYjg3ODlkNDQzZjFlNDE4MTRhYzU4ZjVjIDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9H
Q0NvbnRyb2xsZXIuaApAQCAtMjYsMTkgKzI2LDE1IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
Zm5kZWYgR0NDb250cm9sbGVyX2gKLSNkZWZpbmUgR0NDb250cm9sbGVyX2gKKyNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CiAKIGNsYXNzIEdDQ29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgR0NDb250cm9sbGVyKCk7Ci0gICAgfkdDQ29udHJvbGxlcigpOwotCi0gICAg
dm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3
aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93
T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBDb250cm9sbGVyIE1ldGhvZHMgLSBwbGF0
ZnJvbSBpbmRlcGVuZGFudCBpbXBsZW1lbnRhdGlvbnMKICAgICB2b2lkIGNvbGxlY3QoKSBjb25z
dDsKQEAgLTQ2LDcgKzQyLDUgQEAgcHVibGljOgogICAgIHNpemVfdCBnZXRKU09iamVjdENvdW50
KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygp
OworICAgIHN0YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7CiB9
OwotCi0jZW5kaWYgLy8gR0NDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5j
cHAKaW5kZXggNWU1MzVhZjFkZWFkODQyZDJlZjRmNWY3NjYwMmM4M2E5NTBiNzY1Mi4uMzdmNjkx
Y2I3OTZiNTYzOTI2MjgwNGVlM2Y0MDFjYWJkYWU4ZjBlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVz
dFJ1bm5lci5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXN0UnVubmVyLmgiCiAKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogI2luY2x1ZGUgIldl
YkNvcmVUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogI2luY2x1ZGUgIldv
cmtRdWV1ZUl0ZW0uaCIKQEAgLTM4LDEwICszOSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSGVhcElubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5QnVmZmVy
Vmlldy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ1Rlc3RSdW5uZXJVdGlscy5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTT2JqZWN0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1ZNSW5saW5lcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9nSW5p
dGlhbGl6YXRpb24uaD4KQEAgLTQ4OSw3ICs0ODcsNiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkaXNw
bGF5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
UwogCiBzdGF0aWMgSlNWYWx1ZVJlZiBkaXNwbGF5QW5kVHJhY2tSZXBhaW50c0NhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBp
bXBsZW1lbnRhdGlvbgogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxU
ZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9s
bGVyLT5kaXNwbGF5QW5kVHJhY2tSZXBhaW50cygpOwogCkBAIC00OTgsMTIgKzQ5NSwxMCBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBkaXNwbGF5QW5kVHJhY2tSZXBhaW50c0NhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBlbmNvZGVIb3N0TmFt
ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgbWFj
IGltcGxlbWVudGF0aW9uCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9w
dChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpT
U3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAgICAgYXV0byBlbmNvZGVkSG9zdE5hbWUgPSBjb250cm9sbGVyLT5jb3B5RW5jb2Rl
ZEhvc3ROYW1lKG5hbWUuZ2V0KCkpOwpAQCAtNTEyLDIyICs1MDcsMTIgQEAgc3RhdGljIEpTVmFs
dWVSZWYgZW5jb2RlSG9zdE5hbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3QKIAogc3RhdGljIEpTVmFsdWVSZWYgZXhlY0NvbW1hbmRDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgLy8gSGFzIE1hYyAmIFdpbmRvd3MgaW1w
bGVtZW50YXRpb25zLgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byBuYW1lID0gYWRvcHQo
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwot
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpT
U3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CiAgICAgLy8gSWdub3JpbmcgdGhlIHNlY29u
ZCBwYXJhbWV0ZXIgKHVzZXJJbnRlcmZhY2UpLCBhcyB0aGlzIGNvbW1hbmQgZW11bGF0ZXMgYSBt
YW51YWwgYWN0aW9uLgotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHZhbHVlOwotICAg
IGlmIChhcmd1bWVudENvdW50ID49IDMpIHsKLSAgICAgICAgdmFsdWUgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgICAg
IEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZhbHVlID0gYWRvcHQo
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLQorICAgIGF1dG8gdmFsdWUgPSBX
VFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50Q291bnQgPiAyID8gYXJndW1lbnRz
WzJdIDogbnVsbHB0cik7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29u
dHJvbGxlci0+ZXhlY0NvbW1hbmQobmFtZS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwpAQCAtNTQxLDEx
ICs1MjYsOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBmaW5kU3RyaW5nQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLAogICAgIGlmIChhcmd1bWVudENvdW50
IDwgMikKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0g
ICAgYXV0byB0YXJnZXQgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIEpT
T2JqZWN0UmVmIG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFd
LCBleGNlcHRpb24pOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byB0YXJnZXQg
PSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgYXV0byBv
cHRpb25zID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgbnVsbHB0cik7
CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
Qm9vbGVhbihjb250ZXh0LCBjb250cm9sbGVyLT5maW5kU3RyaW5nKGNvbnRleHQsIHRhcmdldC5n
ZXQoKSwgb3B0aW9ucykpOwpAQCAtNTY2LDggKzU0OCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGlz
Q29tbWFuZEVuYWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9wdChKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJU
KCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRl
eHQsIGFyZ3VtZW50c1swXSk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKQEAg
LTU3OSwxMCArNTYwLDggQEAgc3RhdGljIEpTVmFsdWVSZWYgb3ZlcnJpZGVQcmVmZXJlbmNlQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGYKICAgICBpZiAoYXJndW1l
bnRDb3VudCA8IDIpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKIAotICAgIGF1dG8ga2V5ID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBh
cmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAg
YXV0byB2YWx1ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRz
WzFdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8ga2V5
ID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOworICAgIGF1dG8g
dmFsdWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1sxXSk7CiAKICAg
ICAvLyBTaG91bGQgdXNlIGA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3
YXJkQ2FjaGU9dHJ1ZSBdIC0tPmAgaW5zdGVhZC4KICAgICBSRUxFQVNFX0FTU0VSVCghSlNTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXkuZ2V0KCksICJXZWJLaXRVc2VzQmFja0ZvcndhcmRD
YWNoZVByZWZlcmVuY2VLZXkiKSk7CkBAIC02NjIsMTUgKzY0MSwxMCBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBxdWV1ZUxvYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIHVybCA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBh
dXRvIHVybCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAg
ICBBU1NFUlQoISpleGNlcHRpb24pOwogCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRh
cmdldDsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA+PSAyKSB7Ci0gICAgICAgIHRhcmdldCA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24p
KTsKLSAgICAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGFy
Z2V0ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKyAgICBhdXRv
IHRhcmdldCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDEg
PyBhcmd1bWVudHNbMV0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBjb250cm9sbGVyLT5xdWV1ZUxvYWQodXJsLmdldCgpLCB0YXJnZXQuZ2V0KCkpOwpA
QCAtNjkyLDcgKzY2Niw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZEhUTUxTdHJpbmdD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYKICAgICAgICAgYmFzZVVS
TCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pKTsKICAgICAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgYmFzZVVSTCA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7Cisg
ICAgICAgIGJhc2VVUkwgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiAKICAgICBUZXN0UnVubmVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CiAKQEAgLTIwNDUsMzQgKzIwMTksMjQgQEAgc3RhdGljIEpTVmFsdWVS
ZWYgcnVuVUlTY3JpcHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYs
IEpTT2JqZWMKIAogc3RhdGljIHZvaWQgdGVzdFJ1bm5lck9iamVjdEZpbmFsaXplKEpTT2JqZWN0
UmVmIG9iamVjdCkKIHsKLSAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBjb250cm9sbGVy
LT5kZXJlZigpOworICAgIHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZh
dGUob2JqZWN0KSktPmRlcmVmKCk7CiB9CiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12b2lkIFRl
c3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXN0UnVubmVy
OjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gdGVz
dFJ1bm5lclN0ciA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXN0UnVu
bmVyIikpOwogICAgIHJlZigpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpTQ2xh
c3MoKTsKLSAgICBKU1ZhbHVlUmVmIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QgPSBKU09iamVj
dE1ha2UoY29udGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNz
UmVmKTsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCB0
ZXN0UnVubmVyU3RyLmdldCgpLCBsYXlvdXRUZXN0Q29udG9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNl
cHRpb24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRlc3RS
dW5uZXIiLCBKU09iamVjdE1ha2UoY29udGV4dCwgY3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlz
KSk7CiB9CiAKLUpTQ2xhc3NSZWYgVGVzdFJ1bm5lcjo6Z2V0SlNDbGFzcygpCitKU1JldGFpblB0
cjxKU0NsYXNzUmVmPiBUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKCkKIHsKLSAgICBzdGF0aWMg
SlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzID0gVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCk7
Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9IFRlc3RSdW5u
ZXI6OnN0YXRpY0Z1bmN0aW9ucygpOwotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFz
c0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIlRlc3RS
dW5uZXIiLCAwLCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBzdGF0aWMgY29u
c3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NB
dHRyaWJ1dGVOb25lLCAiVGVzdFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcygpLCBzdGF0aWNGdW5j
dGlvbnMoKSwKICAgICAgICAgMCwgdGVzdFJ1bm5lck9iamVjdEZpbmFsaXplLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwCiAgICAgfTsKLQotICAgIHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFz
c0RlZmluaXRpb24pOworICAgIHJldHVybiBhZG9wdChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9u
KSk7CiB9CiAKIC8vIENvbnN0YW50cwpAQCAtMjEwNyw5ICsyMDcxLDkgQEAgc3RhdGljIEpTVmFs
dWVSZWYgZ2V0UkVOREVSX1RSRUVfU0hPV19MQVlFUl9GUkFHTUVOVFMoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2IKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgMzIpOwog
fQogCi1KU1N0YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQorY29uc3QgSlNT
dGF0aWNWYWx1ZSogVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCkKIHsKLSAgICBzdGF0aWMgSlNT
dGF0aWNWYWx1ZSBzdGF0aWNWYWx1ZXNbXSA9IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTU3Rh
dGljVmFsdWUgdmFsdWVzW10gPSB7CiAgICAgICAgIHsgImRpZENhbmNlbENsaWVudFJlZGlyZWN0
IiwgZ2V0RGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAidGlt
ZW91dCIsIGdldFRpbWVvdXRDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJnbG9iYWxG
bGFnIiwgZ2V0R2xvYmFsRmxhZ0NhbGxiYWNrLCBzZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlTm9uZSB9LApAQCAtMjEyNywxMiArMjA5MSwxMiBAQCBKU1N0YXRpY1Zh
bHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogICAgICAgICB7ICJSRU5ERVJfVFJFRV9T
SE9XX0xBWUVSX0ZSQUdNRU5UUyIsIGdldFJFTkRFUl9UUkVFX1NIT1dfTEFZRVJfRlJBR01FTlRT
LCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgMCwgMCwgMCwgMCB9CiAgICAgfTsKLSAgICByZXR1cm4g
c3RhdGljVmFsdWVzOworICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKLUpTU3RhdGljRnVuY3Rpb24q
IFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCitjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBU
ZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMoKQogewotICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0
aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNG
dW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKICAgICAgICAgeyAiYWJvcnRNb2RhbCIsIGFib3J0TW9k
YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJhZGREaXNhbGxvd2VkVVJMIiwgYWRkRGlz
YWxsb3dlZFVSTENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZFVSTFRvUmVkaXJlY3Qi
LCBhZGRVUkxUb1JlZGlyZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKQEAgLTIyOTcsNyArMjI2MSw3IEBA
IEpTU3RhdGljRnVuY3Rpb24qIFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAg
IHsgMCwgMCwgMCB9CiAgICAgfTsKIAotICAgIHJldHVybiBzdGF0aWNGdW5jdGlvbnM7CisgICAg
cmV0dXJuIGZ1bmN0aW9uczsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3Ry
aW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCkBAIC0yMzQyLDE0
ICsyMzA2LDExIEBAIHZvaWQgVGVzdFJ1bm5lcjo6aWdub3JlTGVnYWN5V2ViTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RzKCkKIAogdm9pZCBUZXN0UnVubmVyOjp3YWl0VG9EdW1wV2F0Y2hk
b2dUaW1lckZpcmVkKCkKIHsKLSAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gIkZBSUw6IFRpbWVk
IG91dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIjsKLSAgICBmcHJpbnRm
KHRlc3RSZXN1bHQsICIlcyIsIG1lc3NhZ2UpOworICAgIGZwdXRzKCJGQUlMOiBUaW1lZCBvdXQg
d2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcbiIsIHRlc3RSZXN1bHQpOwogCi0g
ICAgYXV0byBhY2N1bXVsYXRlZExvZ3MgPSBnZXRBbmRSZXNldEFjY3VtdWxhdGVkTG9ncygpOwot
ICAgIGlmICghYWNjdW11bGF0ZWRMb2dzLmlzRW1wdHkoKSkgewotICAgICAgICBjb25zdCBjaGFy
KiBtZXNzYWdlID0gIkxvZ3MgYWNjdW11bGF0ZWQgZHVyaW5nIHRlc3QgcnVuOlxuIjsKLSAgICAg
ICAgZnByaW50Zih0ZXN0UmVzdWx0LCAiJXMlc1xuIiwgbWVzc2FnZSwgYWNjdW11bGF0ZWRMb2dz
LnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KKyAgICBhdXRvIGxvZ3MgPSBnZXRBbmRSZXNldEFjY3Vt
dWxhdGVkTG9ncygpOworICAgIGlmICghbG9ncy5pc0VtcHR5KCkpCisgICAgICAgIGZwcmludGYo
dGVzdFJlc3VsdCwgIkxvZ3MgYWNjdW11bGF0ZWQgZHVyaW5nIHRlc3QgcnVuOlxuJXNcbiIsIGxv
Z3MudXRmOCgpLmRhdGEoKSk7CiAKICAgICBub3RpZnlEb25lKCk7CiB9CkBAIC0yNDAzLDI0ICsy
MzY0LDI1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjdW1tdWxhdGVMb2dzRm9yQ2hhbm5lbChK
U1N0cmluZ1JlZiBjaGFubmVsKQogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TG9nQ2hhbm5l
bFRvQWNjdW11bGF0ZSh7IGJ1ZmZlci5nZXQoKSB9KTsKIH0KIAotdHlwZWRlZiBXVEY6Okhhc2hN
YXA8dW5zaWduZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFwOwordXNpbmcgQ2FsbGJhY2tNYXAg
PSBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTT2JqZWN0UmVmPjsKIHN0YXRpYyBDYWxsYmFja01h
cCYgY2FsbGJhY2tNYXAoKQogewogICAgIHN0YXRpYyBDYWxsYmFja01hcCYgbWFwID0gKm5ldyBD
YWxsYmFja01hcDsKICAgICByZXR1cm4gbWFwOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmNhY2hl
VGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQor
dm9pZCBUZXN0UnVubmVyOjpjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwg
SlNWYWx1ZVJlZiBjYWxsYmFja1ZhbHVlKQogewotICAgIGlmICghY2FsbGJhY2spCisgICAgYXV0
byBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgaWYgKCFjYWxsYmFja1ZhbHVl
IHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2FsbGJhY2tWYWx1ZSkpCiAgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvIGNhbGxiYWNrID0gKEpTT2JqZWN0UmVmKWNhbGxiYWNrVmFsdWU7CiAK
ICAgICBpZiAoY2FsbGJhY2tNYXAoKS5jb250YWlucyhpbmRleCkpIHsKLSAgICAgICAgZnByaW50
ZihzdGRlcnIsICJGQUlMOiBUcmllZCB0byBpbnN0YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIgY2Fs
bGJhY2sgZm9yIHRoZSBzYW1lIGV2ZW50IChpZCAlZClcbiIsIGluZGV4KTsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJGQUlMOiBUcmllZCB0byBpbnN0YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIg
Y2FsbGJhY2sgZm9yIHRoZSBzYW1lIGV2ZW50IChpZCAldSlcbiIsIGluZGV4KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkZyYW1lSlND
b250ZXh0KCk7CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogICAgIGNh
bGxiYWNrTWFwKCkuYWRkKGluZGV4LCBjYWxsYmFjayk7CiB9CkBAIC0yNDMwLDIyICsyMzkyLDE4
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbFRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRl
eCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvCiAgICAgaWYgKCFjYWxsYmFja01hcCgpLmNvbnRh
aW5zKGluZGV4KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQg
PSBtYWluRnJhbWVKU0NvbnRleHQoKTsKLSAgICBpZiAoSlNPYmplY3RSZWYgY2FsbGJhY2sgPSBK
U1ZhbHVlVG9PYmplY3QoY29udGV4dCwgY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSwgMCkpIHsK
LSAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaywgSlNDb250
ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIDAp
OworICAgIGF1dG8gY29udGV4dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOworICAgIGlmIChhdXRv
IGNhbGxiYWNrID0gY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSkgeworICAgICAgICBKU09iamVj
dENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmpl
Y3QoY29udGV4dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7CiAgICAgICAg
IEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogICAgIH0KIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MoKQogewotICAgIEpTQ29udGV4dFJl
ZiBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0ZXIg
OiBjYWxsYmFja01hcCgpKSB7Ci0gICAgICAgIGlmIChKU09iamVjdFJlZiBjYWxsYmFjayA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCBpdGVyLnZhbHVlLCAwKSkKLSAgICAgICAgICAgIEpTVmFs
dWVVbnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIH0KLQorICAgIGF1dG8gY29udGV4
dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOworICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBjYWxs
YmFja01hcCgpLnZhbHVlcygpKQorICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIGNh
bGxiYWNrKTsKICAgICBjYWxsYmFja01hcCgpLmNsZWFyKCk7CiB9CiAKQEAgLTI1MDgsMTYgKzI0
NjYsMTEgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxlcyhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogewogICAgIGlmICghSlNWYWx1ZUlzQXJy
YXkoY29udGV4dCwgZmlsZXNWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0
UmVmIGZpbGVzID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGZpbGVzVmFsdWUsIG51bGxwdHIp
OwotICAgIHN0YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGZpbGVzTGVuZ3RoVmFs
dWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGZpbGVzLCBsZW5ndGhQcm9wZXJ0eS5n
ZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgZmlsZXNM
ZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGZpbGVzID0gKEpTT2JqZWN0
UmVmKWZpbGVzVmFsdWU7CisgICAgYXV0byBmaWxlc0xlbmd0aCA9IFdUUjo6YXJyYXlMZW5ndGgo
Y29udGV4dCwgZmlsZXMpOwogCiAgICAgbV9vcGVuUGFuZWxGaWxlcy5jbGVhcigpOwotICAgIGF1
dG8gZmlsZXNMZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBmaWxlc0xlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmaWxlc0xlbmd0aDsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZp
bGVzTGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZVJlZiBmaWxlVmFsdWUgPSBKU09iamVj
dEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBmaWxlcywgaSwgbnVsbHB0cik7CiAgICAgICAg
IGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1ZSkpCiAgICAgICAgICAgICBj
b250aW51ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAppbmRleCAxNjcxMjA1OGExMGNlOTg5
YTNjOGQ0M2Q2NDRmOWE5ZTMwMGQ0MGRlLi5lODU3YWE0ZGNkYTI5N2M0ZmUzZTc2YWM3ZTllYWYw
NWEwOWM4MGIwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCkBAIC01NCw3ICs1NCw3IEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNsZWFudXAoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRv
d09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsK
IAogICAgIHZvaWQgYWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpOwogICAgIGNvbnN0
IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgYWxsb3dlZEhvc3RzKCkgY29uc3QgeyByZXR1cm4gbV9h
bGxvd2VkSG9zdHM7IH0KQEAgLTQ5Nyw3ICs0OTcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dmVj
dG9yPGNoYXI+IG1fb3BlblBhbmVsRmlsZXNNZWRpYUljb247CiAjZW5kaWYKIAotICAgIHN0YXRp
YyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3Rh
dGljVmFsdWVzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9u
cygpOworICAgIHN0YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7
CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlcygpOworICAgIHN0
YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKIH07CmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJ
T1MubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJ
T1MubW0KaW5kZXggNjFlMDFmNWVkNzY3NWE4MzBiYTZmMzhmOGVjZjU4NDBmYmM4MzljYi4uOTQ0
OTNjMTRjOTgzOTdmYzNhYjhiODA1OTkzMDJiMWU5ZmI1MzBiOCAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbQpAQCAt
MTU1LDUgKzE1NSw1IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVuaGFuY2VkQWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJpb3MiKSk7CisgICAgcmV0dXJuIFdUUjo6
Y3JlYXRlSlNTdHJpbmcoImlvcyIpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQppbmRleCBlM2M5MDlkNmRkMjcwMzky
ODNlYWNjZDMyYWU0MDkyNmNlOGE5ZTY0Li4yMjY1NzAzMzNjODNjNzhmYWVjOTZlYTMwNWI1OWE4
NDNhOGMxOGMwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudElPUy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudElPUy5tbQpAQCAtMTEyLDExICsxMTIsNiBAQCBAaW50ZXJmYWNlIE5T
T2JqZWN0IChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlclByaXZhdGUpCiAtIChDR1BhdGhS
ZWYpX2FjY2Vzc2liaWxpdHlQYXRoOwogQGVuZAogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKQotewotICAgIHJldHVybiBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApKTsKLX0KLQogc3RhdGljIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBjb25jYXRlbmF0ZUF0dHJpYnV0ZUFuZFZhbHVlKE5TU3RyaW5nICph
dHRyaWJ1dGUsIE5TU3RyaW5nICp2YWx1ZSkKIHsKICAgICBWZWN0b3I8VW5pQ2hhcj4gYnVmZmVy
KFthdHRyaWJ1dGUgbGVuZ3RoXSk7CkBAIC01NTgsNyArNTUzLDcgQEAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclRleHRNYXJrZXJSYW5n
ZShBY2Nlc3MKIHsKICAgICBpZCB0ZXh0TWFya2VycyA9IG1hcmtlclJhbmdlLT5wbGF0Zm9ybVRl
eHRNYXJrZXJSYW5nZSgpOwogICAgIGlmICghdGV4dE1hcmtlcnMgfHwgIVt0ZXh0TWFya2VycyBp
c0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVy
biBbW21fZWxlbWVudCBzdHJpbmdGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNT
dHJpbmdSZWZdOwogfQogCkBAIC02ODEsMjIgKzY3NiwyMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmdldERvY3VtZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
JiBlbAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3Vt
ZW50TGlua3MoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0
dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbigpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0
dHJpYnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0
dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRy
aWJ1dGUpCkBAIC03MTYsNyArNzExLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmUKICAgICBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhhdHRyaWJ1dGUsICJBWFRleHR1YWxDb250
ZXh0IikpCiAgICAgICAgIHJldHVybiBbW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5VGV4dHVhbENv
bnRleHRdIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlK
U1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzUHJlc3NBY3Rpb25TdXBwb3J0ZWQoKQpAQCAtNzU1LDE3ICs3
NTAsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRl
ZChKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQogewotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzY3JvbGxQYWdlVXAoKQpAQCAtNzg5LDE3ICs3ODQsMTcgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxQYWdlUmlnaHQoKQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVK
U1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlK
U1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUoKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
ZXNjcmlwdGlvbigpCkBAIC04MDksNyArODA0LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0
cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nVmFsdWUoKQpAQCAtODE5LDcgKzgxNCw3IEBAIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCiB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJp
bmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmhlbHBUZXh0KCkgY29uc3QKQEAgLTg0OSw3ICs4NDQsNyBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNldFZhbHVlKEpTU3RyaW5nUmVmIHZhbHVlVGV4dCkKIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24o
KQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0
ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Q
b2ludExpbmVOdW1iZXIoKQpAQCAtOTA4LDcgKzkwMyw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAogewotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50IGlu
ZGV4KQpAQCAtOTE4LDM3ICs5MTMsMzcgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxp
bmVGb3JJbmRleChpbnQgaW5kZXgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWdu
ZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0
dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mUm93SGVhZGVycygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpT
U3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0
cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNl
bGxzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRl
RW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93Q291bnQoKQpAQCAtMTAwMiw3ICs5OTcsNyBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGlu
dCB5KQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2VsZWN0ZWRUZXh0UmFuZ2UoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7
CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXNzaXN0aXZlVGVjaG5vbG9neVNpbXVsYXRlZEZvY3VzKCkKQEAgLTEwMzYsNyAr
MTAzMSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1
ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIHZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKQEAg
LTEwNDYsMTIgKzEwNDEsMTIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNl
bGVjdGVkQ2hpbGRyZW4oKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJ
KCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVh
dGVKU1N0cmluZygpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlm
aWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaAppbmRleCAzODUw
YjQxNDQ2M2UwMTVjNjdkNTZlZjA0YTU5MzhjOTkxYzQ3ZWQ4Li4xNWJmNTFmODRkM2U4MTgxYzAy
Y2Y2NjNjNzU1MzlkYzI4YWQ5ZGQ0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgKQEAgLTQxLDQgKzQxLDQgQEAgQGludGVyZmFjZSBO
U1N0cmluZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCiAtIChKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4pY3JlYXRlSlNTdHJpbmdSZWY7CiBAZW5kCiAKLWV4dGVybiBOU0RpY3Rpb25hcnkgKnNlYXJj
aFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRl
eHRSZWYsIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVj
dGlvbk5leHQsIHVuc2lnbmVkIHJlc3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFyY2hLZXksIEpT
U3RyaW5nUmVmIHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1tZWRpYXRlRGVz
Y2VuZGFudHNPbmx5KTsKK05TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlZiwgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCAqc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgdW5zaWduZWQgcmVz
dWx0c0xpbWl0LCBKU1ZhbHVlUmVmIHNlYXJjaEtleSwgSlNTdHJpbmdSZWYgc2VhcmNoVGV4dCwg
Ym9vbCB2aXNpYmxlT25seSwgYm9vbCBpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0g
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQppbmRl
eCA3OTQwNzM4YTMzOTBlYjI3MGE2MDhiZmQwNTllMTcyYWY0Yjc5MDkyLi4wMzA2N2UyZDA4OTIx
NGZiZTg0NjY3YjI4MjRmOGNlMzE0ODBmOTg3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2lt
cG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAKKyNp
bXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNG
Lmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCkBA
IC01Niw3ICs1Nyw2IEBAIE5TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlCiAgICAgICAgIFtwYXJhbWV0
ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpzdGFydEVsZW1lbnQtPnBsYXRmb3JtVUlFbGVtZW50
KCkgZm9yS2V5OkAiQVhTdGFydEVsZW1lbnQiXTsKIAogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmli
dXRlIHNldE9iamVjdDooaXNEaXJlY3Rpb25OZXh0KSA/IEAiQVhEaXJlY3Rpb25OZXh0IiA6IEAi
QVhEaXJlY3Rpb25QcmV2aW91cyIgZm9yS2V5OkAiQVhEaXJlY3Rpb24iXTsKLQogICAgIFtwYXJh
bWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKHJlc3VsdHNMaW1pdCkgZm9yS2V5OkAiQVhS
ZXN1bHRzTGltaXQiXTsKIAogICAgIGlmIChzZWFyY2hLZXkpIHsKQEAgLTY2LDE0ICs2Niw4IEBA
IE5TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNl
YXJjaENyaXRlcmlhKEpTQ29udGV4dFJlCiAgICAgICAgICAgICBpZiAoc2VhcmNoS2V5U3RyaW5n
KQogICAgICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtOU1N0cmluZyBzdHJpbmdX
aXRoSlNTdHJpbmdSZWY6c2VhcmNoS2V5U3RyaW5nLmdldCgpXTsKICAgICAgICAgfSBlbHNlIGlm
IChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoS2V5KSkgewotICAgICAgICAgICAgSlNP
YmplY3RSZWYgc2VhcmNoS2V5QXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNo
S2V5LCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaEtleUFycmF5TGVuZ3Ro
ID0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmlu
ZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAg
ICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5n
ZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1
ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSkp
Ci0gICAgICAgICAgICAgICAgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUs
IG51bGxwdHIpKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNo
S2V5QXJyYXkgPSAoSlNPYmplY3RSZWYpc2VhcmNoS2V5OworICAgICAgICAgICAgdW5zaWduZWQg
c2VhcmNoS2V5QXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaEtl
eUFycmF5KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hLZXlB
cnJheUxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaEtleUFycmF5
LCBpLCBudWxscHRyKTsKICAgICAgICAgICAgICAgICBKU1N0cmluZ1JlZiBzZWFyY2hLZXlTdHJp
bmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaEtleVZhbHVlLCBudWxscHRy
KTsKQEAgLTg4LDEyICs4MiwxMSBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICBp
ZiAoc2VhcmNoS2V5UGFyYW1ldGVyKQogICAgICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1
dGUgc2V0T2JqZWN0OnNlYXJjaEtleVBhcmFtZXRlciBmb3JLZXk6QCJBWFNlYXJjaEtleSJdOwog
ICAgIH0KLSAgICAKKwogICAgIGlmIChzZWFyY2hUZXh0ICYmIEpTU3RyaW5nR2V0TGVuZ3RoKHNl
YXJjaFRleHQpKQogICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6W05T
U3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hUZXh0XSBmb3JLZXk6QCJBWFNlYXJj
aFRleHQiXTsKLSAgICAKKwogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpA
KHZpc2libGVPbmx5KSBmb3JLZXk6QCJBWFZpc2libGVPbmx5Il07Ci0gICAgCiAgICAgW3BhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OkAoaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KSBm
b3JLZXk6QCJBWEltbWVkaWF0ZURlc2NlbmRhbnRzT25seSJdOwogICAgIAogICAgIHJldHVybiBw
YXJhbWV0ZXJpemVkQXR0cmlidXRlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCmluZGV4IDUxZjAzMWRkYmJjZDg1M2Fk
YjRmZTcxNDdkODVhNTI1NzZhMDA3OGIuLjk1YTA2ZjNhNDBhMDQ4OWUzZTBiMGIzMTY1NzRjM2Zj
YmYyZWNmMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIkFjY2Vz
c2liaWxpdHlDb21tb25NYWMuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25I
YW5kbGVyLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisjaW1wb3J0ICJK
U0Jhc2ljcy5oIgogI2ltcG9ydCA8QXBwS2l0L05TQ29sb3IuaD4KICNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
QEAgLTE1OCw1ICsxNTksNSBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNl
ZEFjY2Vzc2liaWxpdHlFbmFibGVkKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibWFjIikpOworICAgIHJldHVybiBX
VFI6OmNyZWF0ZUpTU3RyaW5nKCJtYWMiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KaW5kZXggZTFlZmQ3ZjRlMTYx
YWZmZGVlMjI0Y2M0NTM4NDhiMzljYjQ5NzA2My4uNjQ5MWEyZDBhNWZhNGM3NGU3MjE3OTI3OGY3
ZTFjYTk5ZDc2OGQ2YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkFj
Y2Vzc2liaWxpdHlDb21tb25NYWMuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyLmgiCiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgorI2ltcG9ydCAiSlNCYXNp
Y3MuaCIKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lLmg+CkBA
IC04MCwxMSArODEsNiBAQCAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9HbG9iYWxQb2lu
dDooTlNQb2ludClwb2ludDsKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFs
dWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZTsKIEBlbmQKIAotc3RhdGlj
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVFbXB0eUpTU3RyaW5nKCkKLXsKLSAgICBy
ZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhudWxscHRyLCAwKSk7Ci19
Ci0KIHN0YXRpYyBPcHRpb25hbDxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBtYWtlVmVjdG9yRWxl
bWVudChjb25zdCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiwgaWQgZWxlbWVudCkKIHsKICAgICBy
ZXR1cm4geyB7IGVsZW1lbnQgfSB9OwpAQCAtMjIxLDE0ICsyMTcsOCBAQCBzdGF0aWMgTlNEaWN0
aW9uYXJ5ICpzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29u
dGV4dFJlZiBjbwogICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9i
amVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcu
Z2V0KCldXTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29u
dGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0
cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxs
cHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAg
ICAgSlNWYWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmlu
Zy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVu
Z3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmlu
Z3NBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAg
IGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaFN0cmluZ3M7Cisg
ICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IFdUUjo6YXJyYXlMZW5n
dGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAg
ICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3Ry
aW5nc0FycmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgICAgIGlmIChz
ZWFyY2hTdHJpbmdzU3RyaW5nKQpAQCAtMjYyLDE0ICsyNTIsOCBAQCBzdGF0aWMgTlNEaWN0aW9u
YXJ5ICpzZWFyY2hUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4
dFJlZiBjbwogICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCiAgICAgICAgICAg
ICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdX
aXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwogICAgICAgICB9IGVs
c2UgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgewotICAgICAg
ICAgICAgSlNPYmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAgICAgICAgICAgdW5zaWduZWQgc2Vh
cmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gMDsKLQotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9w
ZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgi
KSk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVl
ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGxlbmd0
aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hT
dHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNo
U3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaFN0cmluZ3NB
cnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLQorICAgICAgICAg
ICAgYXV0byBzZWFyY2hTdHJpbmdzQXJyYXkgPSAoSlNPYmplY3RSZWYpc2VhcmNoU3RyaW5nczsK
KyAgICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gV1RSOjphcnJheUxl
bmd0aChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXkpOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aDsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hT
dHJpbmdzQXJyYXksIGksIG51bGxwdHIpLCBudWxscHRyKSk7CiAgICAgICAgICAgICAgICAgaWYg
KHNlYXJjaFN0cmluZ3NTdHJpbmcpCkBAIC0xNDQ2LDEzICsxNDMwLDEzIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRy
ZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMgZnVuY3Rpb24uCiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gV1RSOjpjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCkBAIC0xNDYzLDcgKzE0NDcsNyBAQCBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNv
ZGluZygpCiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVO
RF9BWF9PQkpDX0VYQ0VQVElPTlMKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCkBAIC0x
NDc0LDcgKzE0NTgsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZG9jdW1lbnRVUkkoKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3Ry
aW5nUmVmXTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwog
fQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJs
KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0
ZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQppbmRl
eCAzNjcxNDkzOWZkYTBhNTY3NDljNzk5ODg2YTFlYTQzODkyMTg5YTRhLi4zNDJiM2EwMWRjN2Vh
ODc5YWYxYjU0YjBlZTI3M2Q2ODEyZjhmN2E3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCkBAIC0zMTEsNTQgKzMxMSwyNiBAQCBJR05PUkVfV0FS
TklOR1NfRU5ECiAKIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RJblN0YW5kYXJkV29ybGRG
b3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQogewotICAgIC8vIE1ha2UgTmV3LVN0eWxlIFRlc3RS
dW5uZXIKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFtmcmFtZSBnbG9iYWxDb250ZXh0XTsK
LSAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3Qo
Y29udGV4dCk7Ci0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGF1dG8gY29udGV4
dCA9IFtmcmFtZSBnbG9iYWxDb250ZXh0XTsKKyAgICBhdXRvIHdlYlZpZXcgPSBbZnJhbWUgd2Vi
Vmlld107CisgICAgYXV0byB3aW5kb3dPYmplY3QgPSBbZnJhbWUgd2luZG93T2JqZWN0XTsKIAot
ICAgIEFTU0VSVChnVGVzdFJ1bm5lcik7Ci0gICAgZ1Rlc3RSdW5uZXItPm1ha2VXaW5kb3dPYmpl
Y3QoY29udGV4dCwgZ2xvYmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2Vw
dGlvbik7Ci0KLSAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xv
YmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCBnbG9iYWxP
YmplY3QsICZleGNlcHRpb24pOwotICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKyAgICBnVGVzdFJ1
bm5lci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKKyAgICBnY0NvbnRyb2xsZXItPm1ha2VX
aW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VX
aW5kb3dPYmplY3QoY29udGV4dCk7CiAKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdElu
dGVybmFsc09iamVjdChjb250ZXh0KTsKIAotICAgIC8vIE1ha2UgT2xkLVN0eWxlIGNvbnRyb2xs
ZXJzCi0KLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW2ZyYW1lIHdlYlZpZXddOwotICAgIFdlYlNj
cmlwdE9iamVjdCAqb2JqID0gW2ZyYW1lIHdpbmRvd09iamVjdF07Ci0jaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgQXBwbGVTY3JpcHRDb250cm9sbGVyICphc2MgPSBbW0FwcGxlU2NyaXB0
Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddOwotICAgIFtvYmogc2V0
VmFsdWU6YXNjIGZvcktleTpAImFwcGxlU2NyaXB0Q29udHJvbGxlciJdOwotICAgIFthc2MgcmVs
ZWFzZV07CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRv
cHROUyhbW0FwcGxlU2NyaXB0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZp
ZXddKS5nZXQoKSBmb3JLZXk6QCJhcHBsZVNjcmlwdENvbnRyb2xsZXIiXTsKICNlbmRpZgogCi0g
ICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlciAqZXNjID0gW1tFdmVudFNlbmRpbmdDb250cm9sbGVy
IGFsbG9jXSBpbml0XTsKLSAgICBbb2JqIHNldFZhbHVlOmVzYyBmb3JLZXk6QCJldmVudFNlbmRl
ciJdOwotICAgIFtlc2MgcmVsZWFzZV07Ci0gICAgCi0gICAgW29iaiBzZXRWYWx1ZTpnTmF2aWdh
dGlvbkNvbnRyb2xsZXIgZm9yS2V5OkAibmF2aWdhdGlvbkNvbnRyb2xsZXIiXTsKLSAgICAKLSAg
ICBPYmpDQ29udHJvbGxlciAqb2NjID0gW1tPYmpDQ29udHJvbGxlciBhbGxvY10gaW5pdF07Ci0g
ICAgW29iaiBzZXRWYWx1ZTpvY2MgZm9yS2V5OkAib2JqQ0NvbnRyb2xsZXIiXTsKLSAgICBbb2Nj
IHJlbGVhc2VdOwotCi0gICAgT2JqQ1BsdWdpbiAqcGx1Z2luID0gW1tPYmpDUGx1Z2luIGFsbG9j
XSBpbml0XTsKLSAgICBbb2JqIHNldFZhbHVlOnBsdWdpbiBmb3JLZXk6QCJvYmpDUGx1Z2luIl07
Ci0gICAgW3BsdWdpbiByZWxlYXNlXTsKLSAgICAKLSAgICBPYmpDUGx1Z2luRnVuY3Rpb24gKnBs
dWdpbkZ1bmN0aW9uID0gW1tPYmpDUGx1Z2luRnVuY3Rpb24gYWxsb2NdIGluaXRdOwotICAgIFtv
Ymogc2V0VmFsdWU6cGx1Z2luRnVuY3Rpb24gZm9yS2V5OkAib2JqQ1BsdWdpbkZ1bmN0aW9uIl07
Ci0gICAgW3BsdWdpbkZ1bmN0aW9uIHJlbGVhc2VdOwotCi0gICAgVGV4dElucHV0Q29udHJvbGxl
ciAqdGljID0gW1tUZXh0SW5wdXRDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2Vi
Vmlld107Ci0gICAgW29iaiBzZXRWYWx1ZTp0aWMgZm9yS2V5OkAidGV4dElucHV0Q29udHJvbGxl
ciJdOwotICAgIFt0aWMgcmVsZWFzZV07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9w
dE5TKFtbRXZlbnRTZW5kaW5nQ29udHJvbGxlciBhbGxvY10gaW5pdF0pLmdldCgpIGZvcktleTpA
ImV2ZW50U2VuZGVyIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTpnTmF2aWdhdGlvbkNv
bnRyb2xsZXIgZm9yS2V5OkAibmF2aWdhdGlvbkNvbnRyb2xsZXIiXTsKKyAgICBbd2luZG93T2Jq
ZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tPYmpDQ29udHJvbGxlciBhbGxvY10gaW5pdF0pLmdldCgp
IGZvcktleTpAIm9iakNDb250cm9sbGVyIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTph
ZG9wdE5TKFtbT2JqQ1BsdWdpbiBhbGxvY10gaW5pdF0pLmdldCgpIGZvcktleTpAIm9iakNQbHVn
aW4iXTsKKyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tPYmpDUGx1Z2luRnVu
Y3Rpb24gYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDUGx1Z2luRnVuY3Rpb24iXTsK
KyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tUZXh0SW5wdXRDb250cm9sbGVy
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlld10pLmdldCgpIGZvcktleTpAInRleHRJbnB1
dENvbnRyb2xsZXIiXTsKIH0KIAogLSAodm9pZClkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1l
OihXZWJGcmFtZSAqKWZyYW1lIGluSXNvbGF0ZWRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3Js
ZApAQCAtMzcxLDcgKzM0Myw3IEBAIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFt
ZTooV2ViRnJhbWUgKilmcmFtZSBpbklzb2xhdGVkV29ybGQ6KFdlYlNjcmlwCiAgICAgaWYgKCFn
bG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVydHko
Y3R4LCBnbG9iYWxPYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJf
X3dvcmxkSUQiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKGN0eCwgd29ybGRJREZvcldvcmxk
KHdvcmxkKSksIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOworICAgIEpTT2JqZWN0
U2V0UHJvcGVydHkoY3R4LCBnbG9iYWxPYmplY3QsIFdUUjo6Y3JlYXRlSlNTdHJpbmcoIl9fd29y
bGRJRCIpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHdvcmxkSURGb3JXb3JsZCh3b3Js
ZCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKIH0KIAogLSAodm9pZCl3ZWJW
aWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWU6KFdlYkZy
YW1lICopZnJhbWUgaW5TY3JpcHRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZApkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCBlYmEwOTNlZTE4N2NkMzEw
ZDA1MWIyMzBhZWQyYTMwMGZlNzk0OWMwLi5lMjEwNzBhYzMxYjM0Y2ZjYmI1NzlkNzc3NWI3NjE5
OTExNGFiZGZkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5l
ck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpA
QCAtMzIsNiArMzIsNyBAQAogCiAjaW1wb3J0ICJEZWZhdWx0UG9saWN5RGVsZWdhdGUuaCIKICNp
bXBvcnQgIkVkaXRpbmdEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQg
IkxheW91dFRlc3RTcGVsbENoZWNrZXIuaCIKICNpbXBvcnQgIk1vY2tHZW9sb2NhdGlvblByb3Zp
ZGVyLmgiCiAjaW1wb3J0ICJNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaCIKQEAgLTY3MCwx
NSArNjcxLDEwIEBAIGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlCiB7CiAgICAgV2ViRmluZE9wdGlv
bnMgb3B0aW9ucyA9IDA7CiAKLSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBs
ZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBs
ZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNv
bnRleHQsIGxlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiB0YXJnZXRDRlN0cmluZyA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZT
dHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGFyZ2V0KSk7CisgICAgYXV0byBsZW5ndGggPSBX
VFI6OmFycmF5TGVuZ3RoKGNvbnRleHQsIG9wdGlvbnNBcnJheSk7CisgICAgYXV0byB0YXJnZXRD
RlN0cmluZyA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgdGFyZ2V0KSk7CiAKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihK
U1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFBy
b3BlcnR5QXRJbmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApOwogICAgICAgICBpZiAo
IUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3Bw
IGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKaW5kZXggZmZm
MGI3NDk5MGFmYjllMTJhYzlkMDFhNzEwYTRjNTI4MGUxZTkwOC4uOTk1YWRlMDY2MDAxOGM5OGM2
MmU0NGU1NmY2ZjhmOTYyOTI5ZTgyMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5k
aW5ncy9KU0Jhc2ljcy5jcHAKQEAgLTI4LDE5ICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgV1RSIHsK
IAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIE9wdGlvbmFsPGJvb2w+IHZhbHVlKQorT3B0aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2wo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZh
bHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1
ZU1ha2VOdWxsKGNvbnRleHQpOworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4
dCwgdmFsdWUpIHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0
IDogbWFrZU9wdGlvbmFsKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKTsKK30KKwor
T3B0aW9uYWw8ZG91YmxlPiB0b09wdGlvbmFsRG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U1ZhbHVlUmVmIHZhbHVlKQoreworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4
dCwgdmFsdWUpIHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0
IDogbWFrZU9wdGlvbmFsKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikp
OwogfQogCi1PcHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0Nv
bnRleHRSZWYgY29udGV4dCwgT3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEpT
VmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0
LCB2YWx1ZSkgPyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDxib29sPihKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIHZhbHVlKSk7CisgICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFu
KGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQog
Ci1KU1ZhbHVlUmVmIEpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1N0cmluZ1JlZiBzdHJpbmdPck51bGwpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgc3RyaW5nKQogewotICAgIHJldHVybiBzdHJpbmdP
ck51bGwgPyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdPck51bGwpIDogSlNWYWx1
ZU1ha2VOdWxsKGNvbnRleHQpOworICAgIHJldHVybiBzdHJpbmcgPyBKU1ZhbHVlTWFrZVN0cmlu
Zyhjb250ZXh0LCBzdHJpbmcpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQpA
QCAtNDgsMTkgKzUzLDQzIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmlu
Zyhjb25zdCBjaGFyKiBzdHJpbmcpCiAgICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHN0cmluZykpOwogfQogCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3Jl
YXRlSlNTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7Cisg
ICAgYXV0byBzdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVl
LCBudWxscHRyKSk7CisgICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZyA6IGNyZWF0ZUpTU3RyaW5n
KCIiKTsKK30KKwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHN0cmluZykKIHsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4
dCwgY3JlYXRlSlNTdHJpbmcoc3RyaW5nKS5nZXQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgcHJvcGVy
dHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciog
bmFtZSkKK3sKKyAgICByZXR1cm4gb2JqZWN0ID8gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0
LCBvYmplY3QsIGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBudWxscHRyKSA6IG51bGxwdHI7
Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IHJldHVybiBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3Qs
IG5hbWUpKTsKK30KKworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUp
Cit7CisgICAgYXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7Cisg
ICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgOiBkZWZh
dWx0VmFsdWU7Cit9CisKK2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBhdXRvIHZh
bHVlID0gcHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4gdmFsdWUg
PyBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogMDsKK30KKwogSlNP
YmplY3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29u
dGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgbnVsbHB0cik7Ci0gICAg
aWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUpOworICAgIGF1
dG8gdmFsdWUgPSBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAgIHJldHVybiB2
YWx1ZSA/IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3Qs
IG5hbWUpLCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIG9iamVjdFByb3Bl
cnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gbmFtZXMpCkBAIC03MCwyNyArOTksMzYgQEAgSlNPYmpl
Y3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9i
amVjdCwgc3RkOjppbml0aWEKICAgICByZXR1cm4gb2JqZWN0OwogfQogCit1bnNpZ25lZCBhcnJh
eUxlbmd0aChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAg
IHJldHVybiBudW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIik7Cit9CisK
IHZvaWQgc2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVj
dCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBKU09iamVjdFNldFByb3Bl
cnR5KGNvbnRleHQsIG9iamVjdCwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIEpTVmFsdWVN
YWtlQm9vbGVhbihjb250ZXh0LCB2YWx1ZSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVs
bHB0cik7CiB9CiAKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSlNPYmpl
Y3RTZXRQcm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCks
IGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCB2YWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgbnVsbHB0cik7Cit9CisK
K3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0
IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0
eShjb250ZXh0LCBuYW1lLCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCB2YWx1ZSkpOworfQor
CiBKU1ZhbHVlUmVmIGNhbGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVj
dCwgY29uc3QgY2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFsdWVSZWY+IGFy
Z3VtZW50cykKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgYXV0byBmdW5jdGlvbiA9IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7
Ci0gICAgaWYgKCFmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwgYXJndW1l
bnRzLnNpemUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBmdW5j
dGlvbiA/IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwg
YXJndW1lbnRzLnNpemUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpIDogbnVsbHB0cjsK
IH0KIAogSlNPYmplY3RSZWYgY2FsbENvbnN0cnVjdG9yKEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4g
YXJndW1lbnRzKQogewogICAgIGF1dG8gY29uc3RydWN0b3IgPSBvYmplY3RQcm9wZXJ0eShjb250
ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHsgbmFtZSB9KTsKLSAgICBp
ZiAoIWNvbnN0cnVjdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gSlNP
YmplY3RDYWxsQXNDb25zdHJ1Y3Rvcihjb250ZXh0LCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzLnNp
emUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBjb25zdHJ1Y3Rv
ciA/IEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dCwgY29uc3RydWN0b3IsIGFyZ3Vt
ZW50cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU0Jhc2ljcy5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jh
c2ljcy5oCmluZGV4IDExZGRhNTI0N2E1YWI2YzA0MDk2M2RmMTlhYjBmNWUwMjk2Y2ViODIuLjY1
ZjE4ZDdlY2Q4MDE2ODMzMzM0ZGY1ZWI4ODhjY2M0YTBiMjFkNTMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaAorKysgYi9Ub29scy9UZXN0UnVu
bmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmgKQEAgLTMyLDE2ICszMiwyOCBAQAogCiBuYW1l
c3BhY2UgV1RSIHsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250
ZXh0UmVmLCBPcHRpb25hbDxib29sPik7Ci1PcHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJs
ZUJvb2xlYW4oSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKK09wdGlvbmFsPGJvb2w+IHRvT3B0
aW9uYWxCb29sKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitPcHRpb25hbDxkb3VibGU+IHRv
T3B0aW9uYWxEb3VibGUoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAotSlNWYWx1ZVJlZiBK
U1ZhbHVlTWFrZVN0cmluZ09yTnVsbChKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmKTsKK0pTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiA9ICIiKTsKK0pT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhKU0NvbnRleHRSZWYsIEpTVmFs
dWVSZWYpOwogCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3Qg
Y2hhciopOwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmLCBjb25zdCBjaGFyKik7
CitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYsIE9wdGlvbmFsPGJvb2w+KTsKK0pT
VmFsdWVSZWYgbWFrZVZhbHVlKEpTQ29udGV4dFJlZiwgSlNTdHJpbmdSZWYpOworCitKU1ZhbHVl
UmVmIHByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUp
OworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3Qg
Y2hhciogbmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUgPSBmYWxzZSk7Citkb3VibGUgbnVtZXJpY1By
b3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOworSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZ1Byb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmpl
Y3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOwordW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0
UmVmLCBKU09iamVjdFJlZik7CiBKU09iamVjdFJlZiBvYmplY3RQcm9wZXJ0eShKU0NvbnRleHRS
ZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKIEpTT2JqZWN0UmVmIG9iamVjdFBy
b3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxj
b25zdCBjaGFyKj4gbmFtZXMpOworCiB2b2lkIHNldFByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNP
YmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBzZXRHbG9iYWxP
YmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYp
Owordm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIq
IG5hbWUsIGRvdWJsZSB2YWx1ZSk7CisKIEpTVmFsdWVSZWYgY2FsbChKU0NvbnRleHRSZWYsIEpT
T2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1
ZVJlZj4gYXJndW1lbnRzKTsKIEpTT2JqZWN0UmVmIGNhbGxDb25zdHJ1Y3RvcihKU0dsb2JhbENv
bnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVl
UmVmPiBhcmd1bWVudHMpOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0Jp
bmRpbmdzL0pTV3JhcHBhYmxlLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pT
V3JhcHBhYmxlLmgKaW5kZXggOWUwZjA3ZGY1OTMyYWIzMDMzMWQ3YjYxZDE3MzUzYWU2ZTAxYzQ3
My4uNTliZTFkYWVhMjc3NTRlZTQ3NzViNGYzZTdhNWQ2ODJmYjFkNWYxZSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCisrKyBiL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGFibGUuaApAQCAtMjUsOSArMjUsMTAg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAordHlwZWRlZiBzdHJ1Y3QgT3BhcXVl
SlNDbGFzcyogSlNDbGFzc1JlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNzIEpTV3JhcHBh
YmxlIDogcHVibGljIFJlZkNvdW50ZWQ8SlNXcmFwcGFibGU+IHsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmggYi9Ub29scy9UZXN0UnVubmVy
U2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBlci5oCmluZGV4IGY2Nzk4Zjk5YTRmZWM2NzU2M2QwOTE1
NjNiNTA1MDlkZmM4NTcyZGEuLjliNmJhZDhhZjA0NGIyMDJmZjg3MjdhY2VkN2NiOWZmYjJjZWM1
MmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVy
LmgKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaApAQCAt
NTAsNCArNTAsOSBAQCBpbmxpbmUgdm9pZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcgogICAgIEpTT2JqZWN0U2V0UHJv
cGVydHkoY29udGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhwcm9wZXJ0eU5hbWUpLmdldCgp
LCBKU1dyYXBwZXI6OndyYXAoY29udGV4dCwgdmFsdWUpLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24p
OwogfQogCitpbmxpbmUgdm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYg
Y29udGV4dCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU1dyYXBwYWJsZSogdmFsdWUpCit7
CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgcHJvcGVydHlOYW1lLCBKU1dy
YXBwZXI6OndyYXAoY29udGV4dCwgdmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9tYWMv
RXZlbnRTZXJpYWxpemVyTWFjLm1tIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9FdmVudFNlcmlh
bGl6YXRpb24vbWFjL0V2ZW50U2VyaWFsaXplck1hYy5tbQppbmRleCAwZjE3YjJjZDYzOWE2MzA2
M2E0ODhkZjNhMzNhMzVlMzJhMmVjY2MxLi5iZGQyMDdiZDQwOWYwNGVlNWYzODIzMTk0ZmEyNGU2
MzI4ODU4OTE3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFs
aXphdGlvbi9tYWMvRXZlbnRTZXJpYWxpemVyTWFjLm1tCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvRXZlbnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMubW0KQEAgLTE5
NSw3ICsxOTUsNyBAQCBAaW1wbGVtZW50YXRpb24gRXZlbnRTZXJpYWxpemVyCiAKICsgKE5TRGlj
dGlvbmFyeSAqKWRpY3Rpb25hcnlGb3JFdmVudDooQ0dFdmVudFJlZilyYXdFdmVudCByZWxhdGl2
ZVRvVGltZTooQ0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRh
aW5QdHI8Q0dFdmVudFJlZj4gcGxhaW5FdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZShOVUxM
KSk7CisgICAgYXV0byBwbGFpbkV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsK
ICAgICBDR0V2ZW50UmVmIHJhd1BsYWluRXZlbnQgPSBwbGFpbkV2ZW50LmdldCgpOwogCiAgICAg
TlNNdXRhYmxlRGljdGlvbmFyeSAqZGljdCA9IFtbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2Nd
IGluaXRdIGF1dG9yZWxlYXNlXTsKQEAgLTIyNiw3ICsyMjYsNyBAQCArIChOU0RpY3Rpb25hcnkg
KilkaWN0aW9uYXJ5Rm9yRXZlbnQ6KENHRXZlbnRSZWYpcmF3RXZlbnQgcmVsYXRpdmVUb1RpbWU6
KENHRXZlbgogCiArIChSZXRhaW5QdHI8Q0dFdmVudFJlZj4pY3JlYXRlRXZlbnRGb3JEaWN0aW9u
YXJ5OihOU0RpY3Rpb25hcnkgKilkaWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyByZWxh
dGl2ZVRvVGltZTooQ0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBS
ZXRhaW5QdHI8Q0dFdmVudFJlZj4gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkp
OworICAgIGF1dG8gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOwogICAgIENH
RXZlbnRSZWYgcmF3RXZlbnQgPSBldmVudC5nZXQoKTsKIAogICAgIEZPUl9FQUNIX0NHRVZFTlRf
SU5URUdFUl9GSUVMRChTVE9SRV9JTlRFR0VSX0ZJRUxEX1RPX0VWRU5UKTsKQEAgLTI2NCw3ICsy
NjQsNyBAQCBjb25zdCBmbG9hdCBldmVudERpc3BhdGNoVGltZXJSYXRlID0gMS4gLyAxMjAuOwog
CiArICh2b2lkKXBsYXlTdHJlYW06KE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICopZXZlbnREaWN0
cyB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKCkp
Y29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBSZXRhaW5QdHI8RXZlbnRTdHJlYW1QbGF5ZXI+IHBs
YXllciA9IGFkb3B0TlMoW1tFdmVudFN0cmVhbVBsYXllciBhbGxvY10gaW5pdF0pOworICAgIGF1
dG8gcGxheWVyID0gYWRvcHROUyhbW0V2ZW50U3RyZWFtUGxheWVyIGFsbG9jXSBpbml0XSk7CiAK
ICAgICBwbGF5ZXItPl9yZW1haW5pbmdFdmVudERpY3Rpb25hcmllcyA9IGFkb3B0TlMoW2V2ZW50
RGljdHMgbXV0YWJsZUNvcHldKTsKICAgICBwbGF5ZXItPl93aW5kb3cgPSB3aW5kb3c7CkBAIC0y
ODIsNyArMjgyLDcgQEAgLSAodm9pZClwbGF5YmFja1RpbWVyRmlyZWQ6KE5TVGltZXIgKil0aW1l
cgogICAgIGF1dG8gcmVtb3ZlTGlzdCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwogICAgIE5TRXZlbnQgKm5zRXZlbnQgPSBuaWw7CiAgICAgZm9yIChpZCBldmVudERp
Y3QgaW4gX3JlbWFpbmluZ0V2ZW50RGljdGlvbmFyaWVzLmdldCgpKSB7Ci0gICAgICAgIFJldGFp
blB0cjxDR0V2ZW50UmVmPiBldmVudCA9IFtFdmVudFNlcmlhbGl6ZXIgY3JlYXRlRXZlbnRGb3JE
aWN0aW9uYXJ5OmV2ZW50RGljdCBpbldpbmRvdzpfd2luZG93LmdldCgpIHJlbGF0aXZlVG9UaW1l
Ol9zdGFydFRpbWVdOworICAgICAgICBhdXRvIGV2ZW50ID0gW0V2ZW50U2VyaWFsaXplciBjcmVh
dGVFdmVudEZvckRpY3Rpb25hcnk6ZXZlbnREaWN0IGluV2luZG93Ol93aW5kb3cuZ2V0KCkgcmVs
YXRpdmVUb1RpbWU6X3N0YXJ0VGltZV07CiAgICAgICAgIGlmIChDR0V2ZW50R2V0VGltZXN0YW1w
KGV2ZW50LmdldCgpKSA8IG1hY2hfYWJzb2x1dGVfdGltZSgpKSB7CiAgICAgICAgICAgICBuc0V2
ZW50ID0gW05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpldmVudC5nZXQoKV07CiAgICAgICAgICAg
ICBbTlNBcHAgcG9zdEV2ZW50Om5zRXZlbnQgYXRTdGFydDpOT107CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250ZXh0LmNw
cAppbmRleCAyNzA1YjM5YTI0N2RkMjU3ZDVjNmQ1OGM0NzBlOTYzM2E5MTlkZmQ0Li41ZGNmYjdj
OTg3MmYzOTlmMTU2NzRkOTcxMGRlYjI4OWIyZDEyMThkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwCisrKyBiL1Rv
b2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAK
QEAgLTI2LDkgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJVSVNjcmlw
dENvbnRleHQuaCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRD
b250cm9sbGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RmxvYXRSZWN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVFI7CkBAIC00MywxMSArNDIsNyBAQCBV
SVNjcmlwdENvbnRleHQ6OlVJU2NyaXB0Q29udGV4dChVSVNjcmlwdENvbnRleHREZWxlZ2F0ZSYg
ZGVsZWdhdGUsIFVJU2NyaXB0Q29udAogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKIHsKICAg
ICBtX2NvbnRyb2xsZXIgPSBmYWN0b3J5KCp0aGlzKTsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2Jh
bE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChtX2NvbnRleHQuZ2V0KCkpOwotCi0g
ICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgIG1fY29udHJvbGxlci0+bWFr
ZVdpbmRvd09iamVjdChtX2NvbnRleHQuZ2V0KCksIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7
CisgICAgbV9jb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KG1fY29udGV4dC5nZXQoKSk7CiB9
CiAKIFVJU2NyaXB0Q29udGV4dDo6flVJU2NyaXB0Q29udGV4dCgpCkBAIC02Niw5ICs2MSw3IEBA
IHZvaWQgVUlTY3JpcHRDb250ZXh0OjpydW5VSVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwg
dW5zaWduZWQgc2NyaXB0Q2FsbGJhY2tJCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1
YXRlU2NyaXB0KG1fY29udGV4dC5nZXQoKSwgc3RyaW5nUmVmLmdldCgpLCAwLCAwLCAxLCAmZXhj
ZXB0aW9uKTsKICAgICAKICAgICBpZiAoIWhhc091dHN0YW5kaW5nQXN5bmNUYXNrcygpKSB7Ci0g
ICAgICAgIEpTVmFsdWVSZWYgc3RyaW5naWZ5RXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAg
YXV0byBzdHJpbmdpZmllZCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkobV9jb250ZXh0Lmdl
dCgpLCByZXN1bHQsICZzdHJpbmdpZnlFeGNlcHRpb24pKTsKLSAgICAgICAgcmVxdWVzdFVJU2Ny
aXB0Q29tcGxldGlvbihzdHJpbmdpZmllZC5nZXQoKSk7CisgICAgICAgIHJlcXVlc3RVSVNjcmlw
dENvbXBsZXRpb24oY3JlYXRlSlNTdHJpbmcobV9jb250ZXh0LmdldCgpLCByZXN1bHQpLmdldCgp
KTsKICAgICAgICAgdHJ5VG9Db21wbGV0ZVVJU2NyaXB0Rm9yQ3VycmVudFBhcmVudENhbGxiYWNr
KCk7CiAgICAgfQogfQpAQCAtMTg5LDEwICsxODIsMTAgQEAgSlNPYmplY3RSZWYgVUlTY3JpcHRD
b250ZXh0OjpvYmplY3RGcm9tUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpIGNv
bnMKIHsKICAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2UobV9jb250ZXh0Lmdl
dCgpLCBudWxscHRyLCBudWxscHRyKTsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9jb250
ZXh0LmdldCgpLCBvYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJs
ZWZ0IikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QueCgp
KSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNldFBy
b3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygidG9wIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0
KCksIHJlY3QueSgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBK
U09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygid2lkdGgiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVy
KG1fY29udGV4dC5nZXQoKSwgcmVjdC53aWR0aCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25l
LCBudWxscHRyKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2Jq
ZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpLmdldCgp
LCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QuaGVpZ2h0KCkpLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOworICAgIHNldFByb3BlcnR5KG1fY29udGV4
dC5nZXQoKSwgb2JqZWN0LCAibGVmdCIsIHJlY3QueCgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2Nv
bnRleHQuZ2V0KCksIG9iamVjdCwgInRvcCIsIHJlY3QueSgpKTsKKyAgICBzZXRQcm9wZXJ0eSht
X2NvbnRleHQuZ2V0KCksIG9iamVjdCwgIndpZHRoIiwgcmVjdC53aWR0aCgpKTsKKyAgICBzZXRQ
cm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgImhlaWdodCIsIHJlY3QuaGVpZ2h0KCkp
OwogICAgIAogICAgIHJldHVybiBvYmplY3Q7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVu
bmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCmluZGV4
IGE1YThkN2NjMmZjYzlmZWQ2ZmY1NTIyY2M5ZWQ2N2NlNDI5OGNhODEuLjM1MjRiNjBiZDgxY2Q5
Y2FiMzEwYWExYjU2OGYyM2ZkNTE2OGRjZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCkBAIC02
Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgd2FpdEZvck91dHN0YW5kaW5nQ2FsbGJhY2tzKCkgeyAvKiBub3RJbXBsZW1l
bnRlZCgpOyAqLyB9CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9p
ZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBUcmFuc2FjdGlvbiBo
ZWxwZXJzCiAgICAgCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0
Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNo
YXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyU2hhcmVkLmNwcAppbmRleCBj
NmViMTQwYWEzNTZjNjZkOGM0NTAyMTRlN2RiMmM4NWFkM2E3MWEzLi5iZmY0ZjM0MzNkYmQyOTU3
NWQ2MjViNzM5NGU2ZDlkMzgxY2FlYzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwCisrKyBiL1Rv
b2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNo
YXJlZC5jcHAKQEAgLTQxLDIwICs0MSwxNSBAQCBEZXZpY2VPcmllbnRhdGlvbiogdG9EZXZpY2VP
cmllbnRhdGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKICAgICAg
ICAgRGV2aWNlT3JpZW50YXRpb246OkxhbmRzY2FwZUxlZnQsCiAgICAgICAgIERldmljZU9yaWVu
dGF0aW9uOjpMYW5kc2NhcGVSaWdodAogICAgIH07Ci0KLSAgICBhdXRvIG9wdGlvbiA9IGFkb3B0
KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKLSAgICBpZiAo
b3B0aW9uLT5zdHJpbmcoKSA9PSAicG9ydHJhaXQiKQorICAgIGF1dG8gb3B0aW9uID0gY3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgdmFsdWUpOworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG9wdGlvbi5nZXQoKSwgInBvcnRyYWl0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVz
WzBdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gInBvcnRyYWl0LXVwc2lkZWRvd24i
KQorICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgInBv
cnRyYWl0LXVwc2lkZWRvd24iKSkKICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbMV07Ci0KLSAgICBp
ZiAob3B0aW9uLT5zdHJpbmcoKSA9PSAibGFuZHNjYXBlLWxlZnQiKQorICAgIGlmIChKU1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgImxhbmRzY2FwZS1sZWZ0IikpCiAg
ICAgICAgIHJldHVybiAmdmFsdWVzWzJdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0g
ImxhbmRzY2FwZS1yaWdodCIpCisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
b3B0aW9uLmdldCgpLCAibGFuZHNjYXBlLXJpZ2h0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVz
WzNdOwotCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTY4LDkgKzYzLDkgQEAgdm9pZCBV
SVNjcmlwdENvbnRyb2xsZXI6OmNvbnRleHREZXN0cm95ZWQoKQogICAgIG1fY29udGV4dCA9IG51
bGxwdHI7CiB9CiAKLXZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgInVpQ29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xv
YmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInVpQ29udHJvbGxlciIsIHRoaXMpOwogfQogCiBK
U0NsYXNzUmVmIFVJU2NyaXB0Q29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbSBi
L1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbQpp
bmRleCA4ZmMwMjExNjdhYWMyMjE1MzZhMTc2NmU1MzkwMTlmZTY0NDA1OGUxLi5kODZlZjk1NmY4
MGRmYTE5MjI5NTRlMTE3OWFmMmIzNTJiOTgzOTI0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVu
bmVyU2hhcmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIubW0KKysrIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9jb2NvYS9MYXlvdXRUZXN0U3BlbGxDaGVja2VyLm1tCkBAIC0yNiw3ICsy
Niw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkxheW91dFRlc3RTcGVsbENoZWNr
ZXIuaCIKIAotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbXBvcnQg
IkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KQEAgLTIxMiwxMSArMjEyLDExIEBA
IC0gKHZvaWQpc2V0UmVzdWx0czooVGV4dENoZWNraW5nUmVzdWx0c0RpY3Rpb25hcnkgKilyZXN1
bHRzCiAtICh2b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFs
dWUgaW5Db250ZXh0OihKU0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1dG8gcmVzdWx0c09i
amVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCByZXN1bHRzVmFsdWUsIG51bGxwdHIpOwot
ICAgIGF1dG8gZnJvbVByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJmcm9tIikpOwotICAgIGF1dG8gdG9Qcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidG8iKSk7Ci0gICAgYXV0byB0eXBlUHJvcGVydHlOYW1l
ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInR5cGUiKSk7Ci0gICAgYXV0
byByZXBsYWNlbWVudFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJyZXBsYWNlbWVudCIpKTsKLSAgICBhdXRvIGRldGFpbHNQcm9wZXJ0eU5hbWUgPSBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGV0YWlscyIpKTsKKyAgICBhdXRv
IGZyb21Qcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJmcm9tIik7CisgICAgYXV0
byB0b1Byb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoInRvIik7CisgICAgYXV0byB0
eXBlUHJvcGVydHlOYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZygidHlwZSIpOworICAgIGF1dG8g
cmVwbGFjZW1lbnRQcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJyZXBsYWNlbWVu
dCIpOworICAgIGF1dG8gZGV0YWlsc1Byb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmco
ImRldGFpbHMiKTsKICAgICBhdXRvIHJlc3VsdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlv
bmFyeSBhbGxvY10gaW5pdF0pOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIHRoZSBPYmplY3RpdmUt
QyBBUEkgd291bGQgbWFrZSB0aGlzIGxvZ2ljIGVhc2llciB0byBmb2xsb3cuCkBAIC0yMjgsMTUg
KzIyOCwxMyBAQCAtICh2b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1
bHRzVmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHRSZWYpYwogICAgICAgICBhdXRvIHJlc3VsdHNG
b3JXb3JkID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBKU1Byb3BlcnR5TmFt
ZUFycmF5R2V0Q291bnQocmVzdWx0c0FycmF5UHJvcGVydHlOYW1lcyk7ICsrcmVzdWx0SW5kZXgp
IHsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0c09iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250
ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCByZXN1bHRzQXJyYXksIHJl
c3VsdEluZGV4LCBudWxscHRyKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBsb25nIGZyb21WYWx1
ZSA9IGxyb3VuZGwoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgcmVzdWx0c09iamVjdCwgZnJvbVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciks
IG51bGxwdHIpKTsKLSAgICAgICAgICAgIGxvbmcgdG9WYWx1ZSA9IGxyb3VuZGwoSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVj
dCwgdG9Qcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAg
ICBhdXRvIHR5cGVWYWx1ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0eXBlUHJvcGVydHlOYW1l
LmdldCgpLCBudWxscHRyKSwgbnVsbHB0cikpOworICAgICAgICAgICAgbG9uZyBmcm9tVmFsdWUg
PSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBy
ZXN1bHRzT2JqZWN0LCBmcm9tUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwgbnVsbHB0cik7
CisgICAgICAgICAgICBsb25nIHRvVmFsdWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0b1Byb3BlcnR5TmFtZS5n
ZXQoKSwgbnVsbHB0ciksIG51bGxwdHIpOworICAgICAgICAgICAgYXV0byB0eXBlVmFsdWUgPSBX
VFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
cmVzdWx0c09iamVjdCwgdHlwZVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cikpOwogICAgICAg
ICAgICAgYXV0byByZXBsYWNlbWVudFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0
LCByZXN1bHRzT2JqZWN0LCByZXBsYWNlbWVudFByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cik7
CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHJlcGxhY2VtZW50VGV4dDsKLSAg
ICAgICAgICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHJlcGxhY2VtZW50VmFs
dWUpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXBsYWNlbWVudEpTU3RyaW5nID0gYWRvcHQo
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlLCBudWxscHRyKSk7
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRUZXh0ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZXBsYWNlbWVudEpTU3RyaW5nLmdldCgpKSk7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250
ZXh0LCByZXBsYWNlbWVudFZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRleHQg
PSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFdUUjo6
Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgcmVwbGFjZW1lbnRWYWx1ZSkuZ2V0KCkpKTsKICAgICAg
ICAgICAgIGF1dG8gZGV0YWlscyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dF0pOwogICAgICAgICAgICAgYXV0byBkZXRhaWxzVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIGRldGFpbHNQcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxw
dHIpOwogICAgICAgICAgICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgZGV0YWls
c1ZhbHVlKSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5
RnVuY3Rpb25zLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlGdW5jdGlvbnMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lNTUxOGFiMzgxMzhkNmI3YmZhYTAzNTlmNzgyY2VjZDg3MzZmOTA5Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rp
b25zLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgorCituYW1lc3BhY2UgV1RSIHsKKworV0tEaWN0aW9u
YXJ5UmVmIGRpY3Rpb25hcnlWYWx1ZShXS1R5cGVSZWYpOworCitib29sIGJvb2xlYW5WYWx1ZShX
S1R5cGVSZWYpOworYm9vbCBib29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiYpOworCitkb3VibGUgZG91YmxlVmFsdWUoV0tUeXBlUmVmKTsKK09wdGlvbmFsPGRvdWJsZT4g
b3B0aW9uYWxEb3VibGVWYWx1ZShXS1R5cGVSZWYpOworCitXS1N0cmluZ1JlZiBzdHJpbmdWYWx1
ZShXS1R5cGVSZWYpOworV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoV0tUeXBlUmVmKTsKKwordWlu
dDY0X3QgdWludDY0VmFsdWUoV0tUeXBlUmVmKTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKGNvbnN0
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4mKTsKKworV0tUeXBlUmVmIHZhbHVlKFdLRGljdGlvbmFy
eVJlZiwgY29uc3QgY2hhcioga2V5KTsKKworYm9vbCBib29sZWFuVmFsdWUoV0tEaWN0aW9uYXJ5
UmVmLCBjb25zdCBjaGFyKiBrZXkpOworZG91YmxlIGRvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJl
ZiwgY29uc3QgY2hhcioga2V5KTsKK1dLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLRGljdGlvbmFy
eVJlZiwgY29uc3QgY2hhcioga2V5KTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFy
eVJlZiwgY29uc3QgY2hhcioga2V5KTsKKworT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJs
ZVZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgT3B0aW9uYWw8VD4mIHZhbHVlKTsKK3Zv
aWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBj
b25zdCBjaGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBib29s
IHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKTsKK3ZvaWQgc2V0
VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBj
aGFyKiBrZXksIHVpbnQ2NF90IHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGRvdWJsZSB2YWx1
ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlS
ZWY+JiwgY29uc3QgY2hhcioga2V5LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUpOworCitpbmxp
bmUgYm9vbCBib29sZWFuVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1
ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkgJiYgV0tCb29s
ZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPih2YWx1ZSkpOworfQorCitpbmxp
bmUgYm9vbCBib29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUp
Cit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZSh2YWx1ZS5nZXQoKSk7Cit9CisKK2lubGluZSBX
S0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRGljdGlvbmFyeUdldFR5cGVJ
RCgpID8gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPih2YWx1ZSkgOiBudWxscHRyOworfQor
CitpbmxpbmUgZG91YmxlIGRvdWJsZVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRG91YmxlR2V0VHlwZUlEKCkgPyBX
S0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPih2YWx1ZSkpIDogMDsKK30K
KworaW5saW5lIE9wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS1R5cGVSZWYg
dmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS0Rv
dWJsZUdldFR5cGVJRCgpID8gbWFrZU9wdGlvbmFsKFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tEb3VibGVSZWY+KHZhbHVlKSkpIDogV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgV0tT
dHJpbmdSZWYgc3RyaW5nVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1
ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSA/IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxpbmUgV1RGOjpTdHJp
bmcgdG9XVEZTdHJpbmcoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB0b1dURlN0cmlu
ZyhzdHJpbmdWYWx1ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUo
V0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dldFR5cGVJRCh2YWx1
ZSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSA/IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KHZhbHVlKSkgOiAwOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFs
dWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7CisgICAgcmV0dXJuIHVp
bnQ2NFZhbHVlKHZhbHVlLmdldCgpKTsKK30KKworaW5saW5lIFdLVHlwZVJlZiB2YWx1ZShXS0Rp
Y3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHRvV0soa2V5KS5nZXQoKSk7Cit9
CisKK2lubGluZSBib29sIGJvb2xlYW5WYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwg
Y29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUodmFsdWUoZGljdGlv
bmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBkb3VibGUgZG91YmxlVmFsdWUoV0tEaWN0aW9uYXJ5
UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gZG91YmxlVmFs
dWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBXS1N0cmluZ1JlZiBzdHJp
bmdWYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQorewor
ICAgIHJldHVybiBzdHJpbmdWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5s
aW5lIHVpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25z
dCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHZhbHVlKGRpY3Rpb25hcnks
IGtleSkpOworfQorCitpbmxpbmUgT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVl
KFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0
dXJuIG9wdGlvbmFsRG91YmxlVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lu
bGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlS
ZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHRvV0soa2V5KS5nZXQoKSwg
dmFsdWUpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011
dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBib29sIHZh
bHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtl
eSwgdG9XSyh2YWx1ZSkuZ2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hh
cioga2V5LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlv
bmFyeSwga2V5LCB0b1dLKHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVl
KGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBj
b25zdCBjaGFyKiBrZXksIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25h
cnksIGtleSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKworaW5s
aW5lIHZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4mIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSwgZG91YmxlIHZhbHVlKQoreworICAgIHNl
dFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpLmdl
dCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhciog
a2V5LCBjb25zdCBPcHRpb25hbDxUPiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQorICAgICAg
ICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXksICp2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaAppbmRleCA2NDQ3
NjAzOTY4ZDIwNjQyMGJlYjk0Mjc3M2IyNGI3ODk2NDFiNWM5Li5mYTNhODhkM2FmMzkzNGQ0Yzg4
MjBiZjUwZmU5Zjg5N2IzOGZkMDRhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0V2ZW50U2VuZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaApAQCAtMTEyLDE4ICsxMTIsMTkgQEAgcHJpdmF0ZToKICAgICBQT0lOVCBwb3Np
dGlvbkluUG9pbnQoKSBjb25zdCB7IHJldHVybiB7IHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRp
b24ueCksIHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueSkgfTsgfQogI2VuZGlmCiAKLSAg
ICBkb3VibGUgbV90aW1lOwotICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKLSAgICBib29sIG1fbGVm
dE1vdXNlQnV0dG9uRG93bjsKLSAgICBpbnQgbV9jbGlja0NvdW50OwotICAgIGRvdWJsZSBtX2Ns
aWNrVGltZTsKLSAgICBXS1BvaW50IG1fY2xpY2tQb3NpdGlvbjsKLSAgICBXS0V2ZW50TW91c2VC
dXR0b24gbV9jbGlja0J1dHRvbjsKKyAgICBkb3VibGUgbV90aW1lIHsgMCB9OworICAgIFdLUG9p
bnQgbV9wb3NpdGlvbiB7IH07CisgICAgYm9vbCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24geyBmYWxz
ZSB9OworICAgIGludCBtX2NsaWNrQ291bnQgeyAwIH07CisgICAgZG91YmxlIG1fY2xpY2tUaW1l
IHsgMCB9OworICAgIFdLUG9pbnQgbV9jbGlja1Bvc2l0aW9uIHsgfTsKKyAgICBXS0V2ZW50TW91
c2VCdXR0b24gbV9jbGlja0J1dHRvbiB7IGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbiB9Owog
ICAgIHVuc2lnbmVkIG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB7IDAgfTsKICNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBpbnQgZXZlbnROdW1iZXI7Ci0jZWxpZiBQTEFURk9STShXUEUpCi0g
ICAgdWludDMyX3QgbV9idXR0b25TdGF0ZTsKKyAgICBpbnQgZXZlbnROdW1iZXIgeyAwIH07Cisj
ZW5kaWYKKyNpZiBQTEFURk9STShXUEUpCisgICAgdWludDMyX3QgbV9idXR0b25TdGF0ZSB7IDAg
fTsKICAgICBWZWN0b3I8c3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+IG1fdG91Y2hF
dmVudHM7CiAgICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+LCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV91cGRhdGVkVG91Y2hF
dmVudHM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9j
YXRpb25Qcm92aWRlck1vY2suY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlv
blByb3ZpZGVyTW9jay5jcHAKaW5kZXggNmY5M2NhMjczMDMwZjU3NzZlMzE4ZjllNDU2OTAyMmNl
ZTE0YjkwZC4uYzQyNTFiMzAxZmI1NTRjN2VhZTYwMzE2Mjc1OTZmNTBiNzhhMjU5ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAK
QEAgLTYzLDkgKzYzLDkgQEAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6On5HZW9sb2NhdGlvblBy
b3ZpZGVyTW9jaygpCiAgICAgV0tHZW9sb2NhdGlvbk1hbmFnZXJTZXRQcm92aWRlcihtX2dlb2xv
Y2F0aW9uTWFuYWdlciwgMCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNl
dFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRl
c0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVz
SGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVk
LCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIEdlb2xv
Y2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBs
b25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0
aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcs
IE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsK
LSAgICBtX3Bvc2l0aW9uLmFkb3B0KFdLR2VvbG9jYXRpb25Qb3NpdGlvbkNyZWF0ZV9jKFdhbGxU
aW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgbGF0aXR1ZGUsIGxvbmdp
dHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0
dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywg
cHJvdmlkZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCkpOwor
ICAgIG1fcG9zaXRpb24uYWRvcHQoV0tHZW9sb2NhdGlvblBvc2l0aW9uQ3JlYXRlX2MoV2FsbFRp
bWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpLCBsYXRpdHVkZSwgbG9uZ2l0
dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGUuaGFzVmFsdWUoKSwgYWx0aXR1ZGUudmFsdWVPcigwKSwg
YWx0aXR1ZGVBY2N1cmFjeS5oYXNWYWx1ZSgpLCBhbHRpdHVkZUFjY3VyYWN5LnZhbHVlT3IoMCks
IGhlYWRpbmcuaGFzVmFsdWUoKSwgaGVhZGluZy52YWx1ZU9yKDApLCBzcGVlZC5oYXNWYWx1ZSgp
LCBzcGVlZC52YWx1ZU9yKDApLCBmbG9vckxldmVsLmhhc1ZhbHVlKCksIGZsb29yTGV2ZWwudmFs
dWVPcigwKSkpOwogCiAgICAgbV9oYXNFcnJvciA9IGZhbHNlOwogICAgIG1fZXJyb3JNZXNzYWdl
LmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9u
UHJvdmlkZXJNb2NrLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlk
ZXJNb2NrLmgKaW5kZXggMWVkNGFkZjliMzkzOTNhMzMzYWEzMjUxMDk3YjllM2FhNDJjYzM2Yi4u
OWJmNjMzODRhZTI3ZGIyOGM1ZjU0MDU2ODViODhmNzViZWQ3YjUxNiAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaApAQCAtMzcsNyArMzcs
NyBAQCBwdWJsaWM6CiAgICAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2soV0tDb250ZXh0UmVmKTsK
ICAgICB+R2VvbG9jYXRpb25Qcm92aWRlck1vY2soKTsKIAotICAgIHZvaWQgc2V0UG9zaXRpb24o
ZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wg
cHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVB
Y2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBk
b3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJv
dmlkZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRQb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0
aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5
LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlv
bmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRQb3NpdGlvblVuYXZhaWxhYmxl
RXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKIAogICAgIHZvaWQgc3RhcnRVcGRhdGlu
ZyhXS0dlb2xvY2F0aW9uTWFuYWdlclJlZik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Y3BwCmluZGV4IDZhMDhhYWE2YjYzOWYzZjU1YzhjNDZhOTRjMmZlOTVkYjU0N2Y3ODIuLmFkNGEy
NWFlNWIwN2I3NThlMmUwYTkxZmFmMWI1MjgzMDNlYjg0OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuY3BwCkBAIC03NSw5ICs3NSw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnVwZGF0ZUlzb2xhdGVkVHJlZU1vZGUoKQogfQogI2VuZGlmCiAKLXZvaWQgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFs
T2JqZWN0UHJvcGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgdGhpcyk7
CiB9CiAKIEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygp
CkBAIC05NiwxNyArOTYsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5j
ZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZCgpCiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKKwogUmVm
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxl
bWVudCgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3Qg
PSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVj
dChwYWdlKSk7Ci0KICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHJv
b3QpOwogfQogCiBSZWY8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmZvY3VzZWRFbGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2Ug
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgUGxhdGZv
cm1VSUVsZW1lbnQgZm9jdXNlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVu
dD4oV0tBY2Nlc3NpYmlsaXR5Rm9jdXNlZE9iamVjdChwYWdlKSk7CiAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShmb2N1c2VkRWxlbWVudCk7CiB9CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmgKaW5kZXggNjZjMzQzODIyYmJiYzY5NTk5YmFmNmE0NzY2MGExMzg3
ZWUyNTFiMC4uZDljMmYxMjZmODcxY2UyZWVmMDdiMDAzNTgwZjZkYWNlNmM1NDIzNSAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgfkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250
ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAgICAgdmlydHVhbCBK
U0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOwogICAgIAogICAgIC8vIEVuaGFuY2VkIGFjY2Vzc2li
aWxpdHkuCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQpp
bmRleCBiOWY1ZWVmZmE0NjQ5ZjQxN2Y4MmIxNjE3MDlmNGFiYWUwOTk5MWYyLi41MmUzZWZhOTkx
YjlkZDZjMTc1ZGJiOGU0MTBlNmZlY2ZhYzMwMTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVy
LnBtCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3Mv
Q29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG0KQEAgLTI2MSw4ICsyNjEsNyBAQCAke2ltcGxlbWVu
dGF0aW9uQ2xhc3NOYW1lfSogdG8ke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfShKU0NvbnRleHRS
ZWYgY29udGV4dCwgSgogCiBKU0NsYXNzUmVmICR7Y2xhc3NOYW1lfTo6JHtjbGFzc1JlZkdldHRl
cn0oKQogewotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7Ci0gICAgaWYgKCFqc0NsYXNz
KSB7CisgICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NSZWYganNDbGFzcyA9IFtdIHsKICAgICAgICAg
SlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5Owog
ICAgICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJAe1skdHlwZS0+bmFtZV19IjsKICAgICAg
ICAgZGVmaW5pdGlvbi5wYXJlbnRDbGFzcyA9IEB7WyRzZWxmLT5fcGFyZW50Q2xhc3NSZWZHZXR0
ZXJFeHByZXNzaW9uKCRpbnRlcmZhY2UpXX07CkBAIC0yNzQsOCArMjczLDggQEAgRU9GCiAgICAg
cHVzaChAY29udGVudHMsICIgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBmaW5hbGl6ZTtc
biIpIHVubGVzcyBfcGFyZW50SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCiAgICAgcHVzaChAY29u
dGVudHMsIDw8RU9GKTsKLSAgICAgICAganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRp
b24pOwotICAgIH0KKyAgICAgICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwor
ICAgIH0oKTsKICAgICByZXR1cm4ganNDbGFzczsKIH0KIApAQCAtNDc3LDEwICs0NzYsMTEgQEAg
c3ViIF9wbGF0Zm9ybVR5cGVDb25zdHJ1Y3RvcgogewogICAgIG15ICgkc2VsZiwgJHR5cGUsICRh
cmd1bWVudE5hbWUpID0gQF87CiAKLSAgICByZXR1cm4gIkpTVmFsdWVUb051bGxhYmxlQm9vbGVh
bihjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYm
ICR0eXBlLT5pc051bGxhYmxlOworICAgIHJldHVybiAidG9PcHRpb25hbEJvb2woY29udGV4dCwg
JGFyZ3VtZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkdHlwZS0+aXNO
dWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50
TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gIiRhcmd1bWVu
dE5hbWUiIGlmICR0eXBlLT5uYW1lIGVxICJvYmplY3QiOwotICAgIHJldHVybiAiYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSkiIGlmICQk
c2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gImNy
ZWF0ZUpTU3RyaW5nKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVy
YXRvcn0tPklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsRG91Ymxl
KGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJp
bWl0aXZlVHlwZSgkdHlwZSkgJiYgJHR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikiIGlmICQkc2VsZntj
b2RlR2VuZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gInRvIiAu
IF9pbXBsZW1lbnRhdGlvbkNsYXNzTmFtZSgkdHlwZSkgLiAiKGNvbnRleHQsICRhcmd1bWVudE5h
bWUpIjsKIH0KQEAgLTQ5OSwxOCArNDk5LDE2IEBAIHN1YiBfcGxhdGZvcm1UeXBlVmFyaWFibGVE
ZWNsYXJhdGlvbgogICAgICAgICAiSlNWYWx1ZVJlZiIgPT4gMSwKICAgICApOwogCi0gICAgbXkg
JG51bGxWYWx1ZSA9ICIwIjsKKyAgICBteSAkbnVsbFZhbHVlID0gIm51bGxwdHIiOwogICAgIGlm
ICgkcGxhdGZvcm1UeXBlIGVxICJKU1ZhbHVlUmVmIikgewogICAgICAgICAkbnVsbFZhbHVlID0g
IkpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpIjsKLSAgICB9IGVsc2lmIChkZWZpbmVkICRu
b25Qb2ludGVyVHlwZXN7JHBsYXRmb3JtVHlwZX0gJiYgJHBsYXRmb3JtVHlwZSBuZSAiZG91Ymxl
IikgewotICAgICAgICAkbnVsbFZhbHVlID0gIiRwbGF0Zm9ybVR5cGUoKSI7CisgICAgfSBlbHNp
ZiAoZGVmaW5lZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9KSB7CisgICAgICAgICRu
dWxsVmFsdWUgPSAkdHlwZS0+aXNOdWxsYWJsZSA/ICJXVEY6Om51bGxvcHQiIDogIiRwbGF0Zm9y
bVR5cGUoKSI7CiAgICAgfQogCi0gICAgJHBsYXRmb3JtVHlwZSAuPSAiKiIgdW5sZXNzIGRlZmlu
ZWQgJG5vblBvaW50ZXJUeXBlc3skcGxhdGZvcm1UeXBlfTsKLQotICAgIHJldHVybiAiJHBsYXRm
b3JtVHlwZSAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiAmJiAkY29uc3RydWN0b3I7IiBpZiAk
Y29uZGl0aW9uICYmICRwbGF0Zm9ybVR5cGUgZXEgImJvb2wiOwotICAgIHJldHVybiAiJHBsYXRm
b3JtVHlwZSAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiA/ICRjb25zdHJ1Y3RvciA6ICRudWxs
VmFsdWU7IiBpZiAkY29uZGl0aW9uOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAkdmFyaWFi
bGVOYW1lID0gJGNvbnN0cnVjdG9yOyI7CisgICAgcmV0dXJuICJib29sICR2YXJpYWJsZU5hbWUg
PSAkY29uZGl0aW9uICYmICRjb25zdHJ1Y3RvcjsiIGlmICRjb25kaXRpb24gJiYgJHBsYXRmb3Jt
VHlwZSBlcSAiYm9vbCI7CisgICAgcmV0dXJuICJhdXRvICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0
aW9uID8gJGNvbnN0cnVjdG9yIDogJG51bGxWYWx1ZTsiIGlmICRjb25kaXRpb247CisgICAgcmV0
dXJuICJhdXRvICR2YXJpYWJsZU5hbWUgPSAkY29uc3RydWN0b3I7IjsKIH0KIAogc3ViIF9yZXR1
cm5FeHByZXNzaW9uCkBAIC01MTgsMTEgKzUxNiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24K
ICAgICBteSAoJHNlbGYsICRyZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJl
dHVybiAiSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1l
IGVxICJ1bmRlZmluZWQiOwotICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNv
bnRleHQsICR7ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIg
JiYgJHJldHVyblR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4
dCwgJHtleHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAk
cmV0dXJuVHlwZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihj
b250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4i
OwogICAgIHJldHVybiAiJHtleHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9i
amVjdCI7CiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Np
b259KSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5
cGUpOwotICAgIHJldHVybiAiSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHBy
ZXNzaW9ufS5nZXQoKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRy
ZXR1cm5UeXBlKTsKKyAgICByZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259
LmdldCgpKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5
cGUpOwogICAgIHJldHVybiAidG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259
KSkiOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAppbmRleCBmYmVmMzk2ZjVmNmYzYmZm
NGY5OWM4YTU2YTZlNjJhYzAxNDBmZmE0Li5mMzdlMDA2Nzc1YjhlMzA2MWM3Y2VjOGY5YjVlZjc4
ODYxODA5MTBhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKQEAgLTIxNSw3ICsyMTUsNyBA
QCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAKICAgICAvLyBHZW9sb2NhdGlvbgogICAgIHVuZGVm
aW5lZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhbiB2YWx1ZSk7Ci0gICAgdW5kZWZp
bmVkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxv
bmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgYWx0aXR1ZGUsIG9wdGlv
bmFsIG9iamVjdCBhbHRpdHVkZUFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgaGVhZGluZywgb3B0
aW9uYWwgb2JqZWN0IHNwZWVkLCBvcHRpb25hbCBvYmplY3QgZmxvb3JMZXZlbCk7CisgICAgdW5k
ZWZpbmVkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91Ymxl
IGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBkb3VibGU/IGFsdGl0dWRlLCBv
cHRpb25hbCBkb3VibGU/IGFsdGl0dWRlQWNjdXJhY3ksIG9wdGlvbmFsIGRvdWJsZT8gaGVhZGlu
Zywgb3B0aW9uYWwgZG91YmxlPyBzcGVlZCwgb3B0aW9uYWwgZG91YmxlPyBmbG9vckxldmVsKTsK
ICAgICB1bmRlZmluZWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9y
KERPTVN0cmluZyBlcnJvck1lc3NhZ2UpOwogICAgIGJvb2xlYW4gaXNHZW9sb2NhdGlvblByb3Zp
ZGVyQWN0aXZlKCk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDU1M2Zk
MDVlZjE2OWYzNTIzYTA0MzFmMTMxNzQyZmJjMjIxNzA0MDkuLmZjZDBkNWJmODg2YmIzMjczMjhi
MDUzZmVmZjZmY2EzYTIyNjAwZjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcApA
QCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRT
ZW5kaW5nQ29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgog
I2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdl
LmgiCiAjaW5jbHVkZSAiSlNFdmVudFNlbmRpbmdDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU3Ry
aW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW5jbHVkZSA8
V2ViS2l0L1dLQnVuZGxlRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUHJp
dmF0ZS5oPgpAQCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgTWVudUl0ZW1Qcml2YXRlRGF0YSB7CiB9
OwogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCisKIHN0YXRpYyBKU1ZhbHVlUmVmIG1lbnVJ
dGVtQ2xpY2tDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVm
KikKIHsKICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0
PE1lbnVJdGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpA
QCAtNjIsNyArNjMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNrQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iagogc3RhdGljIEpTVmFsdWVS
ZWYgZ2V0TWVudUl0ZW1UaXRsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewogICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRhID0gc3RhdGljX2Nh
c3Q8TWVudUl0ZW1Qcml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZSA9IGFkb3B0V0soV0tDb250ZXh0TWVu
dUl0ZW1Db3B5VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQoKSkpOworICAgIGF1dG8gd2tU
aXRsZSA9IGFkb3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5VGl0bGUocHJpdmF0ZURhdGEtPm1f
aXRlbS5nZXQoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0b0pT
KHdrVGl0bGUpLmdldCgpKTsKIH0KIApAQCAtNzMsMTggKzc0LDE3IEBAIHN0YXRpYyBKU1ZhbHVl
UmVmIGdldE1lbnVJdGVtQ2hpbGRyZW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYKICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19j
YXN0PE1lbnVJdGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CiAg
ICAgYXV0byBjaGlsZHJlbiA9IGFkb3B0V0soV0tDb250ZXh0TWVudUNvcHlTdWJtZW51SXRlbXMo
cHJpdmF0ZURhdGEtPm1faXRlbS5nZXQoKSkpOwogCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3Vs
dCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOworICAgIGF1dG8gYXJyYXkg
PSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAoIVdLQXJyYXlH
ZXRTaXplKGNoaWxkcmVuLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAg
ICAgICByZXR1cm4gYXJyYXk7CiAKLSAgICBKU09iamVjdFJlZiBhcnJheU9iamVjdCA9IEpTVmFs
dWVUb09iamVjdChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBXS0FycmF5R2V0U2l6ZShjaGlsZHJlbi5nZXQoKSk7ICsraSkgewogICAgICAgICBh
dXRvIGl0ZW0gPSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0
ZW1BdEluZGV4KGNoaWxkcmVuLmdldCgpLCBpKSk7CiAgICAgICAgIGF1dG8qIHByaXZhdGVEYXRh
ID0gbmV3IE1lbnVJdGVtUHJpdmF0ZURhdGEoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBpdGVtKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgo
Y29udGV4dCwgYXJyYXlPYmplY3QsIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRNZW51SXRl
bUNsYXNzKCksIHByaXZhdGVEYXRhKSwgMCk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlB
dEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0
ZW1DbGFzcygpLCBwcml2YXRlRGF0YSksIDApOwogICAgIH0KIAotICAgIHJldHVybiBhcnJheVJl
c3VsdDsKKyAgICByZXR1cm4gYXJyYXk7CiB9CiAKIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0
YXRpY01lbnVJdGVtRnVuY3Rpb25zW10gPSB7CkBAIC0xMjYsNiArMTI2LDcgQEAgc3RhdGljIEpT
Q2xhc3NSZWYgZ2V0TWVudUl0ZW1DbGFzcygpCiAKICAgICByZXR1cm4gbWVudUl0ZW1DbGFzczsK
IH0KKwogI2VuZGlmCiAKIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXIoSlNT
dHJpbmdSZWYgbW9kaWZpZXIpCkBAIC0xNTAsMjUgKzE1MSwzMSBAQCBzdGF0aWMgV0tFdmVudE1v
ZGlmaWVycyBwYXJzZU1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyKQogICAgIHJldHVybiAw
OwogfQogCi1zdGF0aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGFycmF5KQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK3N0YXRpYyBX
S0V2ZW50TW9kaWZpZXJzIHBhcnNlVG91Y2hNb2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllcikK
IHsKLSAgICBhdXRvIGxlbmd0aFN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0
R2V0UHJvcGVydHkoY29udGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgMCk7Ci0gICAg
aWYgKCFsZW5ndGhWYWx1ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsK
KyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImN0cmwiKSkK
KyAgICAgICAgcmV0dXJuIGtXS0V2ZW50TW9kaWZpZXJzQ29udHJvbEtleTsKKyAgICBpZiAoSlNT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgInNoaWZ0IikpCisgICAgICAgIHJl
dHVybiBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5OworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1vZGlmaWVyLCAiYWx0IikpCisgICAgICAgIHJldHVybiBrV0tFdmVudE1v
ZGlmaWVyc0FsdEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2Rp
ZmllciwgIm1ldGFLZXkiKSkKKyAgICAgICAgcmV0dXJuIGtXS0V2ZW50TW9kaWZpZXJzTWV0YUtl
eTsKKyAgICByZXR1cm4gMDsKIH0KIAorI2VuZGlmCisKIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJz
IHBhcnNlTW9kaWZpZXJBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhcnJh
eVZhbHVlKQogewogICAgIGlmICghYXJyYXlWYWx1ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAvLyBUaGUgdmFsdWUgbWF5IGVpdGhlciBiZSBhIHN0cmluZyB3aXRoIGEgc2luZ2xlIG1vZGlm
aWVyIG9yIGFuIGFycmF5IG9mIG1vZGlmaWVycy4KLSAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNv
bnRleHQsIGFycmF5VmFsdWUpKSB7Ci0gICAgICAgIGF1dG8gc3RyaW5nID0gYWRvcHQoSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcnJheVZhbHVlLCAwKSk7Ci0gICAgICAgIHJldHVybiBw
YXJzZU1vZGlmaWVyKHN0cmluZy5nZXQoKSk7Ci0gICAgfQorICAgIGlmIChKU1ZhbHVlSXNTdHJp
bmcoY29udGV4dCwgYXJyYXlWYWx1ZSkpCisgICAgICAgIHJldHVybiBwYXJzZU1vZGlmaWVyKGNy
ZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpLmdldCgpKTsKIAogICAgIGlmICghSlNW
YWx1ZUlzT2JqZWN0KGNvbnRleHQsIGFycmF5VmFsdWUpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTE3NiwyOSArMTgzLDIwIEBAIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXJB
cnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhcnJhCiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOwogICAgIFdLRXZlbnRNb2RpZmll
cnMgbW9kaWZpZXJzID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgICAgICBKU1ZhbHVl
UmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGks
ICZleGNlcHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGF1dG8gc3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCB2YWx1ZSwgJmV4Y2VwdGlvbikpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIG1vZGlmaWVycyB8PSBwYXJzZU1vZGlmaWVyKHN0cmlu
Zy5nZXQoKSk7CisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0
SW5kZXgoY29udGV4dCwgYXJyYXksIGksIG51bGxwdHIpKQorICAgICAgICAgICAgbW9kaWZpZXJz
IHw9IHBhcnNlTW9kaWZpZXIoY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIG1vZGlmaWVyczsKIH0KIAotUmVmPEV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI+IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRXZlbnRTZW5kaW5nQ29udHJvbGxlcik7Ci19Ci0KLUV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKQorc3RhdGljIFdLRXZlbnRNb2RpZmll
cnMgcGFyc2VNb2RpZmllckFycmF5KEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKKyAgICByZXR1
cm4gcGFyc2VNb2RpZmllckFycmF5KFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChX
S0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpKSksIGFycmF5VmFsdWUpOwogfQogCi1FdmVudFNlbmRpbmdDb250cm9sbGVyOjp+
RXZlbnRTZW5kaW5nQ29udHJvbGxlcigpCitSZWY8RXZlbnRTZW5kaW5nQ29udHJvbGxlcj4gRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6Y3JlYXRlKCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBFdmVudFNlbmRpbmdDb250cm9sbGVyKTsKIH0KIAogSlNDbGFzc1JlZiBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQpAQCAtMjA2LDIzNyArMjA0LDExNiBAQCBKU0NsYXNz
UmVmIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIEpT
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6ZXZlbnRTZW5kaW5nQ29udHJvbGxlckNsYXNzKCk7CiB9
CiAKLWVudW0gTW91c2VTdGF0ZSB7Ci0gICAgTW91c2VVcCwKLSAgICBNb3VzZURvd24KLX07Citl
bnVtIE1vdXNlU3RhdGUgeyBNb3VzZVVwLCBNb3VzZURvd24gfTsKIAotc3RhdGljIFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWYgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVN0YXRlIHN0YXRlLCBp
bnQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycykKK3N0YXRpYyBXS1JldGFpblB0
cjxXS0RpY3Rpb25hcnlSZWY+IGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VTdGF0ZSBzdGF0
ZSwgaW50IGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMpCiB7Ci0gICAgV0tNdXRh
YmxlRGljdGlvbmFyeVJlZiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RhdGUgPT0gTW91c2VVcCA/ICJNb3VzZVVw
IiA6ICJNb3VzZURvd24iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiBidXR0b25SZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgYnV0dG9uS2V5Lmdl
dCgpLCBidXR0b25SZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1v
ZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlm
aWVycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJzUmVmID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHksIG1vZGlmaWVyc0tleS5nZXQoKSwgbW9kaWZpZXJzUmVm
LmdldCgpKTsKLQotICAgIHJldHVybiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5OworICAgIGF1dG8g
Ym9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiU3ViTWVzc2FnZSIsIHN0YXRlID09IE1vdXNlVXAgPyAiTW91c2VVcCIgOiAiTW91
c2VEb3duIik7CisgICAgc2V0VmFsdWUoYm9keSwgIkJ1dHRvbiIsIGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoYnV0dG9uKSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJNb2RpZmllcnMiLCBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpLmdldCgpKTsKKyAgICByZXR1cm4gYm9k
eTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZURvd24oaW50IGJ1dHRv
biwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5KSAKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSA9IGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwotICAg
IFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNvbnRleHQs
IG1vZGlmaWVyQXJyYXkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJF
dmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1v
dXNlRG93biwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UsIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0
KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VE
b3duLCBidXR0b24sIHBhcnNlTW9kaWZpZXJBcnJheShtb2RpZmllckFycmF5KSkuZ2V0KCkpOwog
fQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlVXAoaW50IGJ1dHRvbiwgSlNW
YWx1ZVJlZiBtb2RpZmllckFycmF5KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUp
OwotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNv
bnRleHQsIG1vZGlmaWVyQXJyYXkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3VzZU1lc3NhZ2VC
b2R5KE1vdXNlVXAsIGJ1dHRvbiwgbW9kaWZpZXJzKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJF
dmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBwYXJz
ZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJheSkpLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHkpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlTW92
ZVRvIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0g
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VNb3ZlVG8iKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiWCIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiWSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKICAgICBt
X3Bvc2l0aW9uID0gV0tQb2ludE1ha2UoeCwgeSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgi
RXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZUZvcmNlQ2xpY2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlQ2xpY2siKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdl
S2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJN
b3VzZUZvcmNlQ2xpY2siKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRT
ZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpz
dGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljaygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1l
c3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNz
YWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXJ0QW5kQ2FuY2VsTW91c2VG
b3JjZUNsaWNrIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwot
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUo
Ym9keSwgIlN1Yk1lc3NhZ2UiLCAiU3RhcnRBbmRDYW5jZWxNb3VzZUZvcmNlQ2xpY2siKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsK
IH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlRG93bigpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik1vdXNlRm9yY2VEb3duIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0
KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1l
c3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBh
dXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0
VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZURvd24iKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlVXAoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNl
VXAiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0
KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
U3ViTWVzc2FnZSIsICJNb3VzZUZvcmNlVXAiKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjptb3VzZUZvcmNlQ2hhbmdlZChkb3VibGUgZm9yY2UpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlRm9y
Y2VDaGFuZ2VkIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZvcmNlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRm9yY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3Vi
bGVSZWY+IGZvcmNlUmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShmb3JjZSkpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgZm9yY2VLZXku
Z2V0KCksIGZvcmNlUmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIk1vdXNlRm9yY2VD
aGFuZ2VkIik7CisgICAgc2V0VmFsdWUoYm9keSwgIkZvcmNlIiwgZm9yY2UpOworICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsK
LSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkxlYXBGb3J3YXJkIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUu
Z2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lSW5NaWxsaXNlY29uZHMiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHRpbWVSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKG1pbGxpc2Vjb25kcykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgdGltZUtleS5nZXQoKSwgdGltZVJlZi5nZXQoKSk7Ci0KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0
KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
U3ViTWVzc2FnZSIsICJMZWFwRm9yd2FyZCIpOworICAgIHNldFZhbHVlKGJvZHksICJUaW1lSW5N
aWxsaXNlY29uZHMiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1pbGxpc2Vjb25kcykpLmdldCgp
KTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5Lmdl
dCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJv
bm91c0NsaWNrKCkKIHsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IDA7Ci0gICAg
aW50IGJ1dHRvbiA9IDA7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2
ZW50U2VuZGVyIikpOwotCi0gICAgLy8gQXN5bmNocm9ub3VzIG1vdXNlIGRvd24uCi0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbW91c2VEb3duTWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VEb3duLCBidXR0b24sIG1vZGlmaWVy
cykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgbW91c2VE
b3duTWVzc2FnZUJvZHkuZ2V0KCkpOwotCi0gICAgLy8gQXN5bmNocm9ub3VzIG1vdXNlIHVwLgot
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1vdXNlVXBNZXNzYWdlQm9k
eSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBidXR0b24sIG1vZGlm
aWVycykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgbW91
c2VVcE1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZURvd24sIDAsIDApLmdldCgpKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3Vz
ZVVwLCAwLCAwKS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoSlNTdHJpbmdSZWYga2V5LCBXS0V2
ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgaW50IGxvY2F0aW9uKQogewotICAgIFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5RG93biIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBrZXlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJLZXkiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCBrZXlLZXkuZ2V0KCksIHRvV0soa2V5KS5nZXQoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXJzIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiBtb2RpZmllcnNSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
bW9kaWZpZXJzS2V5LmdldCgpLCBtb2RpZmllcnNSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGxvY2F0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTG9jYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGxv
Y2F0aW9uUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShsb2NhdGlvbikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgbG9jYXRpb25LZXku
Z2V0KCksIGxvY2F0aW9uUmVmLmdldCgpKTsKLQotICAgIHJldHVybiBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJLZXlEb3duIik7CisgICAg
c2V0VmFsdWUoYm9keSwgIktleSIsIHRvV0soa2V5KS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9k
eSwgIk1vZGlmaWVycyIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kaWZpZXJzKSkuZ2V0KCkp
OworICAgIHNldFZhbHVlKGJvZHksICJMb2NhdGlvbiIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
bG9jYXRpb24pKS5nZXQoKSk7CisgICAgcmV0dXJuIGJvZHk7CiB9CiAKIHZvaWQgRXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6a2V5RG93bihKU1N0cmluZ1JlZiBrZXksIEpTVmFsdWVSZWYgbW9kaWZp
ZXJBcnJheSwgaW50IGxvY2F0aW9uKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUp
OwotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNv
bnRleHQsIG1vZGlmaWVyQXJyYXkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBrZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoa2V5LCBt
b2RpZmllcnMsIGxvY2F0aW9uKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwga2V5RG93bk1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVh
dGVLZXlEb3duTWVzc2FnZUJvZHkoa2V5LCBwYXJzZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJh
eSksIGxvY2F0aW9uKS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
c2NoZWR1bGVBc3luY2hyb25vdXNLZXlEb3duKEpTU3RyaW5nUmVmIGtleSkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGtleURvd25NZXNzYWdlQm9keSA9IGNyZWF0ZUtl
eURvd25NZXNzYWdlQm9keShrZXksIDAgLyogbW9kaWZpZXJzICovLCAwIC8qIGxvY2F0aW9uICov
KTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwga2V5RG93
bk1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwg
Y3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgMCwgMCkuZ2V0KCkpOwogfQogCiB2b2lkIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5KQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJN
b3VzZVNjcm9sbEJ5IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVm
PiB4UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJl
Zj4geVJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQo
KSk7Ci0KICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsgLy8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcgdHJlZSBjb21t
aXQuCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpKTsKKworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIs
ICJNb3VzZVNjcm9sbEJ5Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRl
ciIsIGJvZHkuZ2V0KCkpOwogfQogCiBzdGF0aWMgdWludDY0X3QgY2dFdmVudFBoYXNlRnJvbVN0
cmluZyhKU1N0cmluZ1JlZiBwaGFzZVN0cikKQEAgLTQ3NSw5MCArMzUyLDU4IEBAIHN0YXRpYyB1
aW50NjRfdCBjZ0V2ZW50TW9tZW50dW1QaGFzZUZyb21TdHJpbmcoSlNTdHJpbmdSZWYgcGhhc2VT
dHIpCiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeVdpdGhXaGVl
bEFuZE1vbWVudHVtUGhhc2VzKGludCB4LCBpbnQgeSwgSlNTdHJpbmdSZWYgcGhhc2VTdHIsIEpT
U3RyaW5nUmVmIG1vbWVudHVtU3RyKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2Fn
ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2Ui
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VTY3JvbGxCeVdpdGhXaGVlbEFu
ZE1vbWVudHVtUGhhc2VzIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0
KCkpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rv
dWJsZVJlZj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJl
Zi5nZXQoKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRy
PFdLRG91YmxlUmVmPiB5UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgp
LCB5UmVmLmdldCgpKTsKLQogICAgIHVpbnQ2NF90IHBoYXNlID0gY2dFdmVudFBoYXNlRnJvbVN0
cmluZyhwaGFzZVN0cik7CiAgICAgdWludDY0X3QgbW9tZW50dW0gPSBjZ0V2ZW50TW9tZW50dW1Q
aGFzZUZyb21TdHJpbmcobW9tZW50dW1TdHIpOwotICAgIAorCiAgICAgaWYgKHBoYXNlID09IDQg
Lyoga0NHU2Nyb2xsUGhhc2VFbmRlZCAqLyB8fCBwaGFzZSA9PSA4IC8qIGtDR1Njcm9sbFBoYXNl
Q2FuY2VsbGVkICovKQogICAgICAgICBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgPSB0cnVl
OwotICAgIAogICAgIGlmIChtb21lbnR1bSA9PSAzIC8qIGtDR01vbWVudHVtU2Nyb2xsUGhhc2VF
bmQgKi8pCiAgICAgICAgIG1fc2VudFdoZWVsTW9tZW50dW1QaGFzZUVuZCA9IHRydWU7CiAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGhhc2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJQaGFzZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4gcGhhc2VSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHBoYXNlKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwaGFzZUtleS5nZXQo
KSwgcGhhc2VSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vbWVu
dHVtS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9tZW50dW0i
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vbWVudHVtUmVmID0gYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShtb21lbnR1bSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgbW9tZW50dW1LZXkuZ2V0KCksIG1vbWVudHVtUmVmLmdl
dCgpKTsKLQogICAgIFdLQnVuZGxlUGFnZUZvcmNlUmVwYWludChJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOyAvLyBUcmlnZ2VycyBhIHNjcm9sbGluZyB0cmVlIGNv
bW1pdC4KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCkpOworCisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdl
IiwgIk1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIpOworICAgIHNldFZh
bHVlKGJvZHksICJYIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSkuZ2V0KCkpOworICAgIHNl
dFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSkuZ2V0KCkpOworICAg
IHNldFZhbHVlKGJvZHksICJQaGFzZSIsIHBoYXNlKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTW9t
ZW50dW0iLCBtb21lbnR1bSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJv
ZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRpbnVvdXNN
b3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSwgYm9vbCBwYWdlZCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ29udGludW91c01v
dXNlU2Nyb2xsQnkiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+
IHhSZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVm
PiB5UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYWdlZEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBhZ2VkIikpOwotICAgIFdLUmV0YWluUHRyPFdL
VUludDY0UmVmPiBwYWdlZFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUocGFnZWQpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHBhZ2Vk
S2V5LmdldCgpLCBwYWdlZFJlZi5nZXQoKSk7Ci0KKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3Nh
Z2UiLCAiQ29udGludW91c01vdXNlU2Nyb2xsQnkiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIs
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
WSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiUGFnZWQiLCBwYWdlZCk7CiAgICAgLy8gRklYTUU6IFRoaXMgbWVzc2FnZSBzaG91bGQgYmUg
YXN5bmNocm9ub3VzLCBhcyBzY3JvbGxpbmcgaXMgaW50cmluc2ljYWxseSBhc3luY2hyb25vdXMu
CiAgICAgLy8gU2VlIGFsc286IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ4MjU2Pi4KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwor
ICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkp
OwogfQogCiBKU1ZhbHVlUmVmIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRleHRDbGljaygp
CiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAjaWYgRU5B
QkxFKENPTlRFWFRfTUVOVVMpCi0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gbWVudUVudHJp
ZXMgPSBhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUF0UG9pbnRJbldpbmRvdyhw
YWdlLCBtX3Bvc2l0aW9uKSk7Ci0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0
TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOworICAgIGF1dG8gbWVudUVudHJpZXMgPSBhZG9w
dFdLKFdLQnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUF0UG9pbnRJbldpbmRvdyhwYWdlLCBtX3Bv
c2l0aW9uKSk7CisgICAgYXV0byBhcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAs
IDAsIDApOwogICAgIGlmICghbWVudUVudHJpZXMpCi0gICAgICAgIHJldHVybiBhcnJheVJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogCi0gICAgSlNPYmplY3RSZWYgYXJyYXlPYmogPSBK
U1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJyYXlSZXN1bHQsIDApOwogICAgIHNpemVfdCBlbnRy
aWVzU2l6ZSA9IFdLQXJyYXlHZXRTaXplKG1lbnVFbnRyaWVzLmdldCgpKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGVudHJpZXNTaXplOyArK2kpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZW51RW50cmllcy5nZXQoKSwgaSkpID09IFdL
Q29udGV4dE1lbnVJdGVtR2V0VHlwZUlEKCkpOwogCiAgICAgICAgIFdLQ29udGV4dE1lbnVJdGVt
UmVmIGl0ZW0gPSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0
ZW1BdEluZGV4KG1lbnVFbnRyaWVzLmdldCgpLCBpKSk7CiAgICAgICAgIE1lbnVJdGVtUHJpdmF0
ZURhdGEqIHByaXZhdGVEYXRhID0gbmV3IE1lbnVJdGVtUHJpdmF0ZURhdGEocGFnZSwgaXRlbSk7
Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2JqLCBp
LCBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFzcygpLCBwcml2YXRlRGF0YSks
IDApOworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwg
aSwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEp
LCAwKTsKICAgICB9CiAKLSAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgcmV0dXJuIGFycmF5
OwogI2Vsc2UKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAjZW5k
aWYKQEAgLTYxNSwyMSArNDYwLDE0IEBAIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMqIHRvTW9u
aXRvcldoZWVsRXZlbnRzT3B0aW9ucyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWCiAgICAgaWYg
KCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgYXJndW1lbnQpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIGF1dG8gcmVzZXRMYXRjaGluZ1N0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJyZXNldExhdGNoaW5nIikpOwotICAgIGF1dG8gcmVzZXRMYXRj
aGluZ1ZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgYXJndW1lbnQsIG51bGxwdHIpLCByZXNldExhdGNoaW5nU3RyaW5nLmdldCgpLCBu
dWxscHRyKTsKLQotICAgIGJvb2wgcmVzZXRMYXRjaGluZyA9IHRydWU7Ci0gICAgaWYgKHJlc2V0
TGF0Y2hpbmdWYWx1ZSAmJiBKU1ZhbHVlSXNCb29sZWFuKGNvbnRleHQsIHJlc2V0TGF0Y2hpbmdW
YWx1ZSkpCi0gICAgICAgIHJlc2V0TGF0Y2hpbmcgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQs
IHJlc2V0TGF0Y2hpbmdWYWx1ZSk7Ci0KICAgICBzdGF0aWMgTW9uaXRvcldoZWVsRXZlbnRzT3B0
aW9ucyBvcHRpb25zOwotICAgIG9wdGlvbnMucmVzZXRMYXRjaGluZyA9IHJlc2V0TGF0Y2hpbmc7
CisgICAgb3B0aW9ucy5yZXNldExhdGNoaW5nID0gYm9vbGVhblByb3BlcnR5KGNvbnRleHQsIChK
U09iamVjdFJlZilhcmd1bWVudCwgInJlc2V0TGF0Y2hpbmciLCB0cnVlKTsKICAgICByZXR1cm4g
Jm9wdGlvbnM7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW9uaXRvcldoZWVs
RXZlbnRzKE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMqIG9wdGlvbnMpCiB7Ci0gICAgV0tCdW5k
bGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpOwogICAgIAogICAgIG1fc2VudFdoZWVsUGhhc2VFbmRPckNhbmNlbCA9IGZhbHNlOwog
ICAgIG1fc2VudFdoZWVsTW9tZW50dW1QaGFzZUVuZCA9IGZhbHNlOwpAQCAtNjYzLDcgKzUwMSw3
IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FsbEFmdGVyU2Nyb2xsaW5nQ29tcGxl
dGVzKEpTVmFsdWVSZWYgZnVuY3Rpb25DYWxsCiAgICAgaWYgKCFmdW5jdGlvbkNhbGxiYWNrKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgV0tCdW5kbGVGcmFtZVJl
ZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAgICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZy
YW1lKTsKICAgICAKQEAgLTY4MywxOTkgKzUyMSwxMDIgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250
cm9sbGVyOjpjYWxsQWZ0ZXJTY3JvbGxpbmdDb21wbGV0ZXMoSlNWYWx1ZVJlZiBmdW5jdGlvbkNh
bGwKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6YWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011
dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
dWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFkZFRvdWNoUG9pbnQi
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJT
dWJNZXNzYWdlIiwgIkFkZFRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIHgp
OworICAgIHNldFZhbHVlKGJvZHksICJZIiwgeSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5n
Q29udHJvbGxlcjo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVXBkYXRlVG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1l
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgIFdLUmV0YWlu
UHRyPFdLVUludDY0UmVmPiBpbmRleFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IGluZGV4S2V5LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZ
IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwg
IlVwZGF0ZVRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiSW5kZXgiLCBpbmRleCk7
CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCB4KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIsIHkp
OworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0
KCkpOwogfQogCi12b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9kaWZpZXIo
Y29uc3QgSlNTdHJpbmdSZWYgJm1vZGlmaWVyLCBib29sIGVuYWJsZSkKK3ZvaWQgRXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllciwgYm9v
bCBlbmFibGUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNl
bmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldFRvdWNoTW9kaWZpZXIiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBz
dWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZCA9IDA7Ci0g
ICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJjdHJsIikpCi0g
ICAgICAgIG1vZCA9IGtXS0V2ZW50TW9kaWZpZXJzQ29udHJvbEtleTsKLSAgICBpZiAoSlNTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgInNoaWZ0IikpCi0gICAgICAgIG1vZCA9
IGtXS0V2ZW50TW9kaWZpZXJzU2hpZnRLZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobW9kaWZpZXIsICJhbHQiKSkKLSAgICAgICAgbW9kID0ga1dLRXZlbnRNb2RpZmll
cnNBbHRLZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIs
ICJtZXRhIikpCi0gICAgICAgIG1vZCA9IGtXS0V2ZW50TW9kaWZpZXJzTWV0YUtleTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcktleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiBtb2RpZmllclJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBtb2RpZmll
cktleS5nZXQoKSwgbW9kaWZpZXJSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGVuYWJsZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkVuYWJsZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gZW5hYmxlUmVmID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShlbmFibGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGVuYWJsZUtleS5nZXQoKSwgZW5hYmxlUmVmLmdl
dCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAg
YXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNl
dFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlNldFRvdWNoTW9kaWZpZXIiKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiTW9kaWZpZXIiLCBwYXJzZVRvdWNoTW9kaWZpZXIobW9kaWZpZXIpKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiRW5hYmxlIiwgZW5hYmxlKTsKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAotCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoUG9pbnRSYWRpdXMoaW50IHJhZGl1c1gsIGludCBy
YWRpdXNZKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5k
ZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRUb3VjaFBvaW50UmFkaXVzIikpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwg
c3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNYIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShyYWRpdXNYKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
UmFkaXVzWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geVJlZiA9IGFkb3B0V0so
V0tVSW50NjRDcmVhdGUocmFkaXVzWSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0
KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
U3ViTWVzc2FnZSIsICJTZXRUb3VjaFBvaW50UmFkaXVzIik7CisgICAgc2V0VmFsdWUoYm9keSwg
IlJhZGl1c1giLCByYWRpdXNYKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUmFkaXVzWSIsIHJhZGl1
c1kpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHku
Z2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoU3RhcnQoKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJUb3VjaFN0YXJ0IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0
KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1l
c3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBh
dXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0
VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiVG91Y2hTdGFydCIpOworICAgIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoTW92ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFi
bGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1
Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJN
ZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvdWNoTW92ZSIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdl
IiwgIlRvdWNoTW92ZSIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNl
bmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRv
dWNoRW5kKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2Vu
ZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG91Y2hFbmQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdl
TmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50
U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDAp
OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJUb3VjaEVuZCIpOworICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hDYW5j
ZWwiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0
KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
U3ViTWVzc2FnZSIsICJUb3VjaENhbmNlbCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OmNsZWFyVG91Y2hQb2ludHMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2Fn
ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhclRvdWNoUG9pbnRzIikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3Vi
TWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3Nh
Z2UiLCAiQ2xlYXJUb3VjaFBvaW50cyIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdl
KCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OnJlbGVhc2VUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0
YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0
YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1
Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVsZWFzZVRvdWNoUG9p
bnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4g
aW5kZXhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwg
aW5kZXhSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiUmVsZWFzZVRvdWNoUG9pbnQi
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiSW5kZXgiLCBpbmRleCk7CisgICAgcG9zdFN5bmNocm9u
b3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNh
bmNlbFRvdWNoUG9pbnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1VJbnQ2NFJlZj4gaW5kZXhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBpbmRl
eEtleS5nZXQoKSwgaW5kZXhSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiQ2FuY2Vs
VG91Y2hQb2ludCIpOworICAgIHNldFZhbHVlKGJvZHksICJJbmRleCIsIGluZGV4KTsKKyAgICBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0K
KwogI2VuZGlmCiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12b2lkIEV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAg
IHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgImV2ZW50U2VuZGVyIiwgdGhpcywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSwgZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAi
ZXZlbnRTZW5kZXIiLCB0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRy
b2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5k
aW5nQ29udHJvbGxlci5oCmluZGV4IDlhMmFmZDk1OGNjZDcwZWNkMjFlYzRlM2IzZmVjNGNmN2Nj
ODViYTguLmVhNDM3ZmJkYmUwYzM0ODkwNTdlMzE2MDc1YWRlYTY1M2FkYjUxMGQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29u
dHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZl
bnRTZW5kaW5nQ29udHJvbGxlci5oCkBAIC0zMCwyNyArMzAsMjMgQEAKICNpbmNsdWRlIDxXZWJL
aXQvV0tHZW9tZXRyeS5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAordHlwZWRlZiBjb25zdCBz
dHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFx
dWVKU1N0cmluZyogSlNTdHJpbmdSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1Zh
bHVlKiBKU1ZhbHVlUmVmOworCiBuYW1lc3BhY2UgV1RSIHsKIAogc3RydWN0IE1vbml0b3JXaGVl
bEV2ZW50c09wdGlvbnMgewotICAgIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMoYm9vbCByZXNl
dExhdGNoaW5nID0gdHJ1ZSkKLSAgICAgICAgOiByZXNldExhdGNoaW5nKHJlc2V0TGF0Y2hpbmcp
Ci0gICAgeyB9Ci0KICAgICBib29sIHJlc2V0TGF0Y2hpbmcgeyB0cnVlIH07CiB9OwogCiBNb25p
dG9yV2hlZWxFdmVudHNPcHRpb25zKiB0b01vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMoSlNDb250
ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAotY2xhc3MgRXZlbnRTZW5kaW5nQ29udHJvbGxlciA6IHB1
YmxpYyBKU1dyYXBwYWJsZSB7CitjbGFzcyBFdmVudFNlbmRpbmdDb250cm9sbGVyIGZpbmFsIDog
cHVibGljIEpTV3JhcHBhYmxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXIoKTsKLQotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0
UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIAotICAgIC8vIEpTV3Jh
cHBhYmxlCi0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOworICAgIHZvaWQg
bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgdm9pZCBtb3VzZURvd24oaW50
IGJ1dHRvbiwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5KTsKICAgICB2b2lkIG1vdXNlVXAoaW50
IGJ1dHRvbiwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5KTsKQEAgLTczLDcgKzY5LDYgQEAgcHVi
bGljOgogICAgIHZvaWQga2V5RG93bihKU1N0cmluZ1JlZiBrZXksIEpTVmFsdWVSZWYgbW9kaWZp
ZXJBcnJheSwgaW50IGxvY2F0aW9uKTsKICAgICB2b2lkIHNjaGVkdWxlQXN5bmNocm9ub3VzS2V5
RG93bihKU1N0cmluZ1JlZiBrZXkpOwogCi0gICAgLy8gWm9vbSBmdW5jdGlvbnMuCiAgICAgdm9p
ZCB0ZXh0Wm9vbUluKCk7CiAgICAgdm9pZCB0ZXh0Wm9vbU91dCgpOwogICAgIHZvaWQgem9vbVBh
Z2VJbigpOwpAQCAtODEsMTAgKzc2LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2NhbGVQYWdlQnko
ZG91YmxlIHNjYWxlLCBkb3VibGUgeCwgZG91YmxlIHkpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKLSAgICAvLyBUb3VjaCBldmVudHMuCiAgICAgdm9pZCBhZGRUb3VjaFBvaW50KGludCB4
LCBpbnQgeSk7CiAgICAgdm9pZCB1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGlu
dCB5KTsKLSAgICB2b2lkIHNldFRvdWNoTW9kaWZpZXIoY29uc3QgSlNTdHJpbmdSZWYgJm1vZGlm
aWVyLCBib29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRUb3VjaE1vZGlmaWVyKEpTU3RyaW5nUmVm
IG1vZGlmaWVyLCBib29sIGVuYWJsZSk7CiAgICAgdm9pZCBzZXRUb3VjaFBvaW50UmFkaXVzKGlu
dCByYWRpdXNYLCBpbnQgcmFkaXVzWSk7CiAgICAgdm9pZCB0b3VjaFN0YXJ0KCk7CiAgICAgdm9p
ZCB0b3VjaE1vdmUoKTsKQEAgLTk2LDcgKzkwLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKTsKKyAgICBFdmVudFNlbmRpbmdDb250
cm9sbGVyKCkgPSBkZWZhdWx0OworCisgICAgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKSBmaW5h
bDsKKwogICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKICAgICBib29sIG1fc2VudFdoZWVsUGhhc2VF
bmRPckNhbmNlbCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3NlbnRXaGVlbE1vbWVudHVtUGhhc2VF
bmQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDkzNThmNGEwZGU1YjNkOWJjMzE2YjVlMGFk
ZmQwNDEyNjY0MjU4ZmYuLmRiNDI1ZTc1ZTgwYjA1NDA4YmRmM2UzZTM2NDc2NTEwOTYzMGQzZmQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250
cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dD
Q29udHJvbGxlci5jcHAKQEAgLTM3LDE0ICszNyw2IEBAIFJlZjxHQ0NvbnRyb2xsZXI+IEdDQ29u
dHJvbGxlcjo6Y3JlYXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHQ0NvbnRyb2xsZXIp
OwogfQogCi1HQ0NvbnRyb2xsZXI6OkdDQ29udHJvbGxlcigpCi17Ci19Ci0KLUdDQ29udHJvbGxl
cjo6fkdDQ29udHJvbGxlcigpCi17Ci19Ci0KIEpTQ2xhc3NSZWYgR0NDb250cm9sbGVyOjp3cmFw
cGVyQ2xhc3MoKQogewogICAgIHJldHVybiBKU0dDQ29udHJvbGxlcjo6Z0NDb250cm9sbGVyQ2xh
c3MoKTsKQEAgLTY1LDExICs1Nyw5IEBAIHNpemVfdCBHQ0NvbnRyb2xsZXI6OmdldEpTT2JqZWN0
Q291bnQoKQogICAgIHJldHVybiBXS0J1bmRsZUdldEphdmFTY3JpcHRPYmplY3RzQ291bnQoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpKTsKIH0KIAotLy8gT2JqZWN0IENyZWF0
aW9uCi0KLXZvaWQgR0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3ZvaWQgR0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0
KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgIkdDQ29udHJvbGxl
ciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHko
Y29udGV4dCwgIkdDQ29udHJvbGxlciIsIHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250
cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJv
bGxlci5oCmluZGV4IGQzNDljMWNlOTkwZTg3ZDdkZjJmY2I4YzgyODg1YmNhMzA1NzJhMGIuLjM0
YWIyNDI1MTM4YzFkNzVmYjI0YTI1MTA3NDM2NzhkODE5ZWRjMjIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmgKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaApAQCAtMjYs
MjYgKzI2LDI2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTV3JhcHBhYmxlLmgiCi0j
aW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK3R5cGVkZWYg
Y29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwogCiBuYW1lc3BhY2Ug
V1RSIHsKIAotY2xhc3MgR0NDb250cm9sbGVyIDogcHVibGljIEpTV3JhcHBhYmxlIHsKK2NsYXNz
IEdDQ29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxHQ0NvbnRyb2xsZXI+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfkdDQ29udHJv
bGxlcigpOwotCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmpl
Y3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCi0gICAgLy8gSlNX
cmFwcGFibGUKLSAgICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CisgICAgdm9p
ZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICB2b2lkIGNvbGxlY3QoKTsK
ICAgICB2b2lkIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZChib29sIHdhaXRVbnRpbERvbmUpOwog
ICAgIHNpemVfdCBnZXRKU09iamVjdENvdW50KCk7CiAKIHByaXZhdGU6Ci0gICAgR0NDb250cm9s
bGVyKCk7CisgICAgR0NDb250cm9sbGVyKCkgPSBkZWZhdWx0OworCisgICAgSlNDbGFzc1JlZiB3
cmFwcGVyQ2xhc3MoKSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmNwcAppbmRleCA3YWU4MWJiNGI1OTA5NmM1OGM4YjVhMTRjODhjNGMzM2Y4YzE0NTcxLi43ZjE2
MjE1MDc0YTAyOTdmMmE2NzljMTk1NDgzYWQyOTgwOWY4YTIyIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApA
QCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmF0ZUZvbnRzLmgiCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2lu
Y2x1ZGUgIkluamVjdGVkQnVuZGxlUGFnZS5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5o
IgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL09wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGUuaD4KQEAgLTExOCwxOCAr
MTE4LDEzIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZENyZWF0ZVBhZ2UoV0tCdW5kbGVQYWdl
UmVmIHBhZ2UpCiAgICAgaWYgKCFpc01haW5QYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5pdGlhbGl6YXRpb24iKSk7CiAgICAgV0tUeXBlUmVmIHJl
c3VsdCA9IG51bGxwdHI7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4K
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UobV9idW5kbGUsIG1lc3NzYWdlTmFt
ZS5nZXQoKSwgbnVsbHB0ciwgJnJlc3VsdCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKG1fYnVuZGxlLCB0b1dLKCJJbml0aWFsaXphdGlvbiIpLmdldCgpLCBudWxscHRyLCAm
cmVzdWx0KTsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmVzdWx0KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkgPSBh
ZG9wdFdLKHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4ocmVzdWx0KSk7CisgICAgYXV0byBp
bml0aWFsaXphdGlvbkRpY3Rpb25hcnkgPSBhZG9wdFdLKGRpY3Rpb25hcnlWYWx1ZShyZXN1bHQp
KTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXN1bWVUZXN0aW5nS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzdW1lVGVzdGluZyIpKTsKLSAg
ICBXS1R5cGVSZWYgcmVzdW1lVGVzdGluZ1ZhbHVlID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkuZ2V0KCksIHJlc3VtZVRlc3RpbmdLZXkuZ2V0KCkp
OwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXN1bWVUZXN0aW5nVmFsdWUpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICBpZiAoV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihyZXN1bWVUZXN0aW5nVmFsdWUpKSkKKyAgICBpZiAoYm9vbGVhblZhbHVlKGlu
aXRpYWxpemF0aW9uRGljdGlvbmFyeS5nZXQoKSwgIlJlc3VtZVRlc3RpbmciKSkKICAgICAgICAg
YmVnaW5UZXN0aW5nKGluaXRpYWxpemF0aW9uRGljdGlvbmFyeS5nZXQoKSwgQmVnaW5nVGVzdGlu
Z01vZGU6OlJlc3VtZSk7CiB9CiAKQEAgLTE3OSwxNiArMTc0LDE5IEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnJlc2V0TG9jYWxTZXR0aW5ncygpCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwog
fQogCi12b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZShXS1N0cmluZ1JlZiBt
ZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQordm9pZCBJbmplY3RlZEJ1bmRsZTo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoV0tTdHJpbmdSZWYsIFdLVHlwZVJlZikKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkVycm9yIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBlcnJvck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVW5rbm93biIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKG1fYnVuZGxlLCBlcnJvck1l
c3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRsZVBv
c3RNZXNzYWdlKG1fYnVuZGxlLCB0b1dLKCJFcnJvciIpLmdldCgpLCB0b1dLKCJVbmtub3duIiku
Z2V0KCkpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0UGFnZU1lc3NhZ2UoV0tCdW5k
bGVQYWdlUmVmIHBhZ2UsIGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiBib2R5KQoreworICAg
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIHRvV0sobmFtZSkuZ2V0KCksIGJvZHkpOwog
fQogCiBzdGF0aWMgdm9pZCBwb3N0R0NUYXNrKHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgV0tCdW5k
bGVQYWdlUmVmIHBhZ2UgPSByZWludGVycHJldF9jYXN0PFdLQnVuZGxlUGFnZVJlZj4oY29udGV4
dCk7CisgICAgYXV0byBwYWdlID0gcmVpbnRlcnByZXRfY2FzdDxXS0J1bmRsZVBhZ2VSZWY+KGNv
bnRleHQpOwogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXBvcnRMaXZlRG9jdW1l
bnRzKHBhZ2UpOwogICAgIFdLUmVsZWFzZShwYWdlKTsKIH0KQEAgLTE5OSw2NyArMTk3LDQ0IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlcG9ydExpdmVEb2N1bWVudHMoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UpCiAgICAgV0tCdW5kbGVSZWxlYXNlTWVtb3J5KG1fYnVuZGxlKTsKIAogICAgIGNvbnN0
IGJvb2wgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwID0gdHJ1ZTsKLSAgICBhdXRvIGRvY3Vt
ZW50VVJMcyA9IGFkb3B0V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBt
X3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwKSk7Ci0gICAgYXV0byBhY2tN
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxpdmVE
b2N1bWVudHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVzc2Fn
ZU5hbWUuZ2V0KCksIGRvY3VtZW50VVJMcy5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKHBh
Z2UsICJMaXZlRG9jdW1lbnRzIiwgYWRvcHRXSyhXS0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMo
bV9idW5kbGUsIG1fcGFnZUdyb3VwLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXApKSk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxl
UGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VC
b2R5KQogewogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiQmVnaW5UZXN0IikpIHsKICAgICAgICAgQVNTRVJUKG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gZHVtcFBpeGVsc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkR1bXBQaXhlbHMiKSk7Ci0gICAgICAgIG1fZHVtcFBpeGVscyA9IFdL
Qm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGR1bXBQaXhlbHNLZXkuZ2V0KCkpKSk7
Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVvdXRLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lb3V0IikpOwotICAgICAgICBtX3Rp
bWVvdXQgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKFdLVUludDY0R2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB0aW1lb3V0S2V5LmdldCgpKSkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikpOwotICAg
ICAgICBtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycktleS5nZXQoKSkpKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2siKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBhY2tNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkJlZ2luVGVzdCIpKTsKLSAgICAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3Nh
Z2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGFja01lc3NhZ2VCb2R5LmdldCgpKTsKLQor
ICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNz
YWdlQm9keSk7CisgICAgICAgIG1fZHVtcFBpeGVscyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJEdW1wUGl4ZWxzIik7CisgICAgICAgIG1fdGltZW91dCA9IFNlY29uZHM6
OmZyb21NaWxsaXNlY29uZHMoV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVGltZW91dCIpKSkpOworICAgICAgICBt
X2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNz
YWdlKHBhZ2UsICJBY2siLCAiQmVnaW5UZXN0Iik7CiAgICAgICAgIGJlZ2luVGVzdGluZyhtZXNz
YWdlQm9keURpY3Rpb25hcnksIEJlZ2luZ1Rlc3RpbmdNb2RlOjpOZXcpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJSZXNldCIpKSB7CiAgICAgICAgIEFTU0VSVChtZXNzYWdlQm9keSk7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSlNDT3B0aW9ucyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGpzY09wdGlvbnNTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGpzY09wdGlvbnNLZXku
Z2V0KCkpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5
VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGpzY09wdGlvbnNTdHJpbmcgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSlNDT3B0
aW9ucyIpKTsKICAgICAgICAgaWYgKGpzY09wdGlvbnNTdHJpbmcpIHsKICAgICAgICAgICAgIFN0
cmluZyBvcHRpb25zID0gdG9XVEZTdHJpbmcoanNjT3B0aW9uc1N0cmluZyk7CiAgICAgICAgICAg
ICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9ucy51dGY4KCkuZGF0YSgpKTsKICAgICAg
ICAgfQotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzaG91bGRHQ0tleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNob3VsZEdDIikpOwotICAgICAg
ICBib29sIHNob3VsZEdDID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc2hv
dWxkR0NLZXkuZ2V0KCkpKSk7CisgICAgICAgIGJvb2wgc2hvdWxkR0MgPSBib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU2hvdWxkR0MiKTsKICAgICAgICAgaWYgKHNob3VsZEdD
KQogICAgICAgICAgICAgV0tCdW5kbGVHYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKG1f
YnVuZGxlKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheElzb2xhdGVkTW9kZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWUi
KSk7Ci0gICAgICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUgPSBXS0Jvb2xlYW5H
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBheElzb2xhdGVkTW9kZUtleS5nZXQoKSkpKTsKKyAg
ICAgICAgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSA9IGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIik7CiAjZW5kaWYK
ICAgICAgICAgCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbGxvd2VkSG9zdHNL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBbGxvd2VkSG9zdHMi
KSk7Ci0gICAgICAgIFdLVHlwZVJlZiBhbGxvd2VkSG9zdHNWYWx1ZSA9IFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhbGxvd2VkSG9zdHNLZXkuZ2V0KCkp
OworICAgICAgICBhdXRvIGFsbG93ZWRIb3N0c1ZhbHVlID0gdmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiQWxsb3dlZEhvc3RzIik7CiAgICAgICAgIGlmIChhbGxvd2VkSG9zdHNWYWx1ZSAm
JiBXS0dldFR5cGVJRChhbGxvd2VkSG9zdHNWYWx1ZSkgPT0gV0tBcnJheUdldFR5cGVJRCgpKSB7
CiAgICAgICAgICAgICBtX2FsbG93ZWRIb3N0cy5jbGVhcigpOwotCi0gICAgICAgICAgICBXS0Fy
cmF5UmVmIGFsbG93ZWRIb3N0c0FycmF5ID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4oYWxsb3dl
ZEhvc3RzVmFsdWUpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBXS0Fy
cmF5R2V0U2l6ZShhbGxvd2VkSG9zdHNBcnJheSk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChhbGxvd2VkSG9z
dHNBcnJheSwgaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRl
bSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9hbGxvd2Vk
SG9zdHMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBhcnJheSA9IHN0YXRpY19jYXN0PFdL
QXJyYXlSZWY+KGFsbG93ZWRIb3N0c1ZhbHVlKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBzaXplID0gV0tBcnJheUdldFNpemUoYXJyYXkpOyBpIDwgc2l6ZTsgKytpKQorICAgICAg
ICAgICAgICAgIG1fYWxsb3dlZEhvc3RzLmFwcGVuZCh0b1dURlN0cmluZyhXS0FycmF5R2V0SXRl
bUF0SW5kZXgoYXJyYXksIGkpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBtX3N0YXRlID0gSWRs
ZTsKQEAgLTI3NSw5ICsyNTAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVz
c2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRMaXZlRG9jdW1l
bnRzIikpIHsKICAgICAgICAgY29uc3QgYm9vbCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXAg
PSBmYWxzZTsKLSAgICAgICAgYXV0byBkb2N1bWVudFVSTHMgPSBhZG9wdFdLKFdLQnVuZGxlR2V0
TGl2ZURvY3VtZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJ
blBhZ2VHcm91cCkpOwotICAgICAgICBhdXRvIGFja01lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGl2ZURvY3VtZW50cyIpKTsKLSAgICAgICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGRvY3VtZW50
VVJMcy5nZXQoKSk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiTGl2ZURvY3VtZW50cyIsIGFk
b3B0V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwg
ZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC00MjgsNyArNDAxLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3Nh
Z2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICAgICAgVmVj
dG9yPFN0cmluZz4gZG9tYWluczsKICAgICAgICAgZG9tYWlucy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHNpemUpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWlu
c0FycmF5LCBpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChkb21haW5zQXJyYXksIGkpOwogICAgICAgICAgICAgaWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQo
aXRlbSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSkKICAgICAgICAgICAgICAgICBkb21haW5zLmFw
cGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKICAgICAg
ICAgfQpAQCAtNDQ2LDcgKzQxOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVN
ZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IGRvbWFpbnM7CiAgICAgICAgIGRvbWFpbnMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShzaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRv
bWFpbnNBcnJheSwgaSk7CisgICAgICAgICAgICBhdXRvIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0
SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKICAgICAgICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlw
ZUlEKGl0ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpCiAgICAgICAgICAgICAgICAgZG9tYWlu
cy51bmNoZWNrZWRBcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0
ZW0pKSk7CiAgICAgICAgIH0KQEAgLTQ2NywxNyArNDQwLDEwIEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmlu
Z1JlZiBtCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJDYWxsVUlTaWRlU2NyaXB0Q2FsbGJhY2siKSkgewotICAgICAgICBXS0RpY3Rp
b25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5
UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJl
c3VsdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc3VsdCIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwotCi0gICAg
ICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGNhbGxiYWNrSURLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdS
ZWYgcmVzdWx0U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCByZXN1bHRLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgYXV0byByZXN1bHRKU1N0cmluZyA9IHRvSlMocmVzdWx0U3RyaW5nKTsKLQotICAgICAg
ICBtX3Rlc3RSdW5uZXItPnJ1blVJU2NyaXB0Q2FsbGJhY2soY2FsbGJhY2tJRCwgcmVzdWx0SlNT
dHJpbmcuZ2V0KCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rp
b25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gY2FsbGJhY2tJRCA9IHVpbnQ2
NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNhbGxiYWNrSUQiKTsKKyAgICAgICAgYXV0
byByZXN1bHRTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJSZXN1
bHQiKTsKKyAgICAgICAgbV90ZXN0UnVubmVyLT5ydW5VSVNjcmlwdENhbGxiYWNrKGNhbGxiYWNr
SUQsIHRvSlMocmVzdWx0U3RyaW5nKS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTQ5OCwyOSArNDY0LDE3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNz
YWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQiKSkgewotICAgICAgICBXS0RpY3Rpb25h
cnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVm
PihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG51bWJl
ck9mUHJldmFsZW50UmVzb3VyY2VzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMiKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOdW1iZXJP
ZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJO
dW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2Vy
SW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJh
Y3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJj
ZVdpdGhVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJNZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdp
dGhVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0
b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuU3ViRnJh
bWVXaXRob3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJU
b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUlLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUki
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuVW5pcXVlUmVk
aXJlY3RzV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUlL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVkaWFuRGF0
YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJIikpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzS2V5LmdldCgpKSkpOwot
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG51bWJl
ck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpKTsKLSAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVy
YWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1i
ZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7
Ci0gICAgICAgIHVuc2lnbmVkIHRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlv
bkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5
c1NpbmNlVXNlckludGVyYWN0aW9uS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCBtZWRp
YW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJh
Y3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1lZGlh
bkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFj
dGlvbktleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9wM051bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVJID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUlLZXkuZ2V0KCkpKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIHRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSSA9ICh1bnNpZ25lZClX
S1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91
dFVJS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VX
aXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRv
cDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSUtleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWdu
ZWQgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2
NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhv
dXRVSUtleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9wM01lZGlhbkRhdGFSZWNvcmRz
UmVtb3ZlZFdpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSUtleS5nZXQoKSkpKTsK
KyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVz
c2FnZUJvZHkpOworICAgICAgICBhdXRvIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzID0gdWlu
dDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXMiKTsKKyAgICAgICAgYXV0byBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJOdW1iZXJPZlBy
ZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBudW1i
ZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhv
dXRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byB0b3BQcmV2YWxlbnRSZXNvdXJjZVdp
dGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJh
Y3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBtZWRpYW5EYXlz
U2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24g
PSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJNZWRpYW5EYXlzU2luY2VVc2Vy
SW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAg
ICAgYXV0byB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkgPSB1aW50NjRWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNX
aXRoVUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkgPSB1aW50
NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0
VUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkgPSB1aW50
NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRo
b3V0VUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJ
ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM01lZGlhblVuaXF1ZVJl
ZGlyZWN0c1dpdGhvdXRVSSIpOworICAgICAgICBhdXRvIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1Jl
bW92ZWRXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3Az
TWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJIik7CiAKICAgICAgICAgbV90ZXN0UnVu
bmVyLT5zdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sobnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXMsIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwg
bnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB0b3BQcmV2
YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24s
IG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJ
bnRlcmFjdGlvbiwgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJLCB0b3AzTWVk
aWFuU3ViRnJhbWVXaXRob3V0VUksIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSwgdG9w
M01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVt
b3ZlZFdpdGhvdXRVSSk7CiAgICAgICAgIHJldHVybjsKQEAgLTU0MSwzMSArNDk1LDcgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXJyb3IiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGVycm9yTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJVbmtub3duIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGVycm9y
TWVzc2FnZU5hbWUuZ2V0KCksIGVycm9yTWVzc2FnZUJvZHkuZ2V0KCkpOwotfQotCi1ib29sIElu
amVjdGVkQnVuZGxlOjpib29sZWFuRm9yS2V5KFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBj
b25zdCBjaGFyKiBrZXkpCi17Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhrZXkpKTsKLSAgICBXS1R5cGVS
ZWYgdmFsdWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHdrS2V5Lmdl
dCgpKTsKLSAgICBpZiAoV0tHZXRUeXBlSUQodmFsdWUpICE9IFdLQm9vbGVhbkdldFR5cGVJRCgp
KSB7Ci0gICAgICAgIG91dHB1dFRleHQobWFrZVN0cmluZygiQm9vbGVhbiB2YWx1ZSBmb3Iga2V5
Iiwga2V5LCAiIG5vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5XG4iKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4odmFsdWUpKTsKLX0KLQotU3RyaW5nIEluamVjdGVkQnVuZGxlOjpzdHJpbmdG
b3JLZXkoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKLXsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKGtleSkpOwotICAgIFdLU3RyaW5nUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoZGljdGlvbmFyeSwgd2tL
ZXkuZ2V0KCkpKTsKLSAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgIG91dHB1dFRleHQobWFrZVN0
cmluZygiU3RyaW5nIHZhbHVlIGZvciBrZXkiLCBrZXksICIgbm90IGZvdW5kIGluIGRpY3Rpb25h
cnlcbiIpKTsKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVy
biB0b1dURlN0cmluZyh2YWx1ZSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFcnJvciIsICJVbmtu
b3duIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmJlZ2luVGVzdGluZyhXS0RpY3Rpb25h
cnlSZWYgc2V0dGluZ3MsIEJlZ2luZ1Rlc3RpbmdNb2RlIHRlc3RpbmdNb2RlKQpAQCAtNTk4LDEx
ICs1MjgsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0aW5nKFdLRGljdGlvbmFy
eVJlZiBzZXR0aW5ncywgQmVnaW5nVGVzdGluZ01vZGUgdGUKICAgICBXS0J1bmRsZVNldEFsbG93
U3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMUyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGZhbHNlKTsK
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgV0tCdW5kbGVQYWdlU2V0VXNlVGVzdGlu
Z1ZpZXdwb3J0Q29uZmlndXJhdGlvbihwYWdlKCktPnBhZ2UoKSwgIWJvb2xlYW5Gb3JLZXkoc2V0
dGluZ3MsICJVc2VGbGV4aWJsZVZpZXdwb3J0IikpOworICAgIFdLQnVuZGxlUGFnZVNldFVzZVRl
c3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24ocGFnZSgpLT5wYWdlKCksICFib29sZWFuVmFsdWUo
c2V0dGluZ3MsICJVc2VGbGV4aWJsZVZpZXdwb3J0IikpOwogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzRm9yVGVzdGluZyhzdHJpbmdGb3JLZXkoc2V0dGluZ3MsICJhZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlcyIpKTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyh0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShz
ZXR0aW5ncywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIikpKTsKICNlbmRpZgogCiAg
ICAgbV90ZXN0UnVubmVyLT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVlKTsKQEAgLTY2MCwyNSArNTkw
LDE1IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRvbmUoKQogICAgIG1fYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXItPnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKICNlbmRpZgogCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGRvbmVNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkRvbmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gZG9uZU1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVzdWx0SXNQ
ZW5kaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxS
ZXN1bHRJc1BlbmRpbmciKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwaXhlbFJl
c3VsdElzUGVuZGluZyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fcGl4ZWxSZXN1bHRJc1Bl
bmRpbmcpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwg
cGl4ZWxSZXN1bHRJc1BlbmRpbmdLZXkuZ2V0KCksIHBpeGVsUmVzdWx0SXNQZW5kaW5nLmdldCgp
KTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
CiAKLSAgICBpZiAoIW1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpIHsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHQiKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCBwaXhlbFJlc3VsdEtleS5nZXQoKSwgbV9waXhlbFJl
c3VsdC5nZXQoKSk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlcGFp
bnRSZWN0c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlcGFp
bnRSZWN0cyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQo
KSwgcmVwYWludFJlY3RzS2V5LmdldCgpLCBtX3JlcGFpbnRSZWN0cy5nZXQoKSk7CisgICAgc2V0
VmFsdWUoYm9keSwgIlBpeGVsUmVzdWx0SXNQZW5kaW5nIiwgbV9waXhlbFJlc3VsdElzUGVuZGlu
Zyk7CisgICAgaWYgKCFtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKQorICAgICAgICBzZXRWYWx1ZShi
b2R5LCAiUGl4ZWxSZXN1bHQiLCBtX3BpeGVsUmVzdWx0LmdldCgpKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiUmVwYWludFJlY3RzIiwgbV9yZXBhaW50UmVjdHMuZ2V0KCkpOworICAgIHNldFZhbHVl
KGJvZHksICJBdWRpb1Jlc3VsdCIsIG1fYXVkaW9SZXN1bHQuZ2V0KCkpOwogCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGF1ZGlvUmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQXVkaW9SZXN1bHQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIGF1ZGlvUmVzdWx0S2V5LmdldCgpLCBtX2F1ZGlvUmVz
dWx0LmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5
bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgZG9uZU1lc3NhZ2VOYW1lLmdldCgpLCBkb25l
TWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdG
dWxseVN5bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgdG9XSygiRG9uZSIpLmdldCgpLCBi
b2R5LmdldCgpKTsKIAogICAgIGNsb3NlT3RoZXJQYWdlcygpOwogCkBAIC02OTEsOSArNjExLDgg
QEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6Y2xvc2VPdGhlclBhZ2VzKCkKICAgICBzaXplX3Qgc2l6
ZSA9IG1fcGFnZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytp
KQogICAgICAgICBwYWdlc1RvQ2xvc2UuYXBwZW5kKG1fcGFnZXNbaV0tPnBhZ2UoKSk7Ci0gICAg
c2l6ZSA9IHBhZ2VzVG9DbG9zZS5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpCi0gICAgICAgIFdLQnVuZGxlUGFnZUNsb3NlKHBhZ2VzVG9DbG9zZVtpXSk7Cisg
ICAgZm9yIChhdXRvJiBwYWdlIDogcGFnZXNUb0Nsb3NlKQorICAgICAgICBXS0J1bmRsZVBhZ2VD
bG9zZShwYWdlKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZHVtcEJhY2tGb3J3YXJkTGlz
dHNGb3JBbGxQYWdlcyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQpAQCAtNzA5LDEzICs2
MjgsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkdW1wVG9TdGRFcnIoY29uc3QgU3RyaW5nJiBv
dXRwdXQpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAob3V0cHV0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBUb1N0ZEVyciIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHk7Ci0gICAgaWYgKGF1dG8gdXRm
OCA9IG91dHB1dC50cnlHZXRVdGY4KCkpCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1dGY4LT5kYXRhKCkpKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiT3V0IG9mIG1lbW9yeVxuIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIC8v
IEZJWE1FOiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBjb252ZXJ0IHRvIFVURi04IGluc3RlYWQgb2Yg
dXNpbmcgdG9XSz8KKyAgICBhdXRvIHN0cmluZyA9IG91dHB1dC50cnlHZXRVdGY4KCk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJEdW1wVG9TdGRFcnIiLCBzdHJpbmcgPyBzdHJpbmctPmRhdGEoKSA6
ICJPdXQgb2YgbWVtb3J5XG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4
dChjb25zdCBTdHJpbmcmIG91dHB1dCkKQEAgLTcyNCwyODAgKzYzOSwxNTUgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6b3V0cHV0VGV4dChjb25zdCBTdHJpbmcmIG91dHB1dCkKICAgICAgICAgcmV0
dXJuOwogICAgIGlmIChvdXRwdXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVGV4dE91dHB1dCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZUJvZHk7Ci0gICAgaWYgKGF1dG8gdXRmOCA9IG91dHB1dC50cnlHZXRVdGY4
KCkpCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyh1dGY4LT5kYXRhKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiT3V0IG9mIG1lbW9yeVxuIikp
OworICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBjb252ZXJ0IHRvIFVURi04IGlu
c3RlYWQgb2YgdXNpbmcgdG9XSz8KKyAgICBhdXRvIHN0cmluZyA9IG91dHB1dC50cnlHZXRVdGY4
KCk7CiAgICAgLy8gV2UgdXNlIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5
bmNocm9ub3VzTW9kZSgpIGluc3RlYWQgb2YgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoKSB0byBt
YWtlIHN1cmUgdGhhdCBhbGwgdGV4dCBvdXRwdXQKICAgICAvLyBpcyBkb25lIHZpYSBhc3luY2hy
b25vdXMgSVBDLCBldmVuIGlmIHRoZSBjb25uZWN0aW9uIGlzIGluIGZ1bGx5IHN5bmNocm9ub3Vz
IG1vZGUgZHVlIHRvIGEgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoKQogICAgIC8vIGNhbGwuIE90aGVyd2lzZSwgbWVzc2FnZXMgbG9nZ2VkIHZpYSBzeW5jIGFu
ZCBhc3luYyBJUEMgbWF5IGVuZCB1cCBvdXQgb2Ygb3JkZXIgYW5kIGNhdXNlIGZsYWtpbmVzcy4K
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUo
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNNb2RlKHBh
Z2UoKS0+cGFnZSgpLCB0b1dLKCJUZXh0T3V0cHV0IikuZ2V0KCksIHRvV0soc3RyaW5nID8gc3Ry
aW5nLT5kYXRhKCkgOiAiT3V0IG9mIG1lbW9yeVxuIikuZ2V0KCkpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbCB2YWx1ZSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkJlZm9yZVVubG9hZFJldHVyblZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUodmFsdWUpKS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RBZGRDaHJv
bWVJbnB1dEZpZWxkKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRDaHJvbWVJbnB1
dEZpZWxkIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJBZGRDaHJvbWVJbnB1
dEZpZWxkIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RSZW1vdmVDaHJvbWVJbnB1
dEZpZWxkKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZW1vdmVDaHJvbWVJbnB1dEZp
ZWxkIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJSZW1vdmVDaHJvbWVJbnB1
dEZpZWxkIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RGb2N1c1dlYlZpZXcoKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvY3VzV2ViVmlldyIpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiRm9jdXNXZWJWaWV3Iik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnBvc3RTZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlIGJhY2tpbmdTY2FsZUZhY3Rv
cikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRCYWNraW5nU2NhbGVGYWN0b3IiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rv
dWJsZUNyZWF0ZShiYWNraW5nU2NhbGVGYWN0b3IpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEJhY2tpbmdTY2FsZUZhY3RvciIsIGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoYmFja2luZ1NjYWxlRmFjdG9yKSkpOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlOjpwb3N0U2V0V2luZG93SXNLZXkoYm9vbCBpc0tleSkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRXaW5kb3dJc0tleSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5S
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNLZXkpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9X
SygiU2V0V2luZG93SXNLZXkiKS5nZXQoKSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNLZXkp
KS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRWaWV3U2l6ZShk
b3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0Vmlld1NpemUiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aWR0aCIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVpZ2h0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxl
RGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gd2lkdGhXSyA9IGFkb3B0
V0soV0tEb3VibGVDcmVhdGUod2lkdGgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCB3aWR0aEtleS5nZXQoKSwgd2lkdGhXSy5nZXQoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS0RvdWJsZVJlZj4gaGVpZ2h0V0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGhl
aWdodCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGhlaWdo
dEtleS5nZXQoKSwgaGVpZ2h0V0suZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJ3aWR0aCIsIHdpZHRo
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiaGVpZ2h0IiwgaGVpZ2h0KTsKKyAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygi
U2V0Vmlld1NpemUiKS5nZXQoKSwgYm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKHVpbnQ2NF90IG5vdGlmaWNh
dGlvbklEKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNpbXVsYXRlV2ViTm90aWZpY2F0
aW9uQ2xpY2siKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShub3RpZmljYXRpb25JRCkpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2ltdWxhdGVXZWJOb3RpZmljYXRpb25D
bGljayIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90aWZpY2F0aW9uSUQpKSk7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRBZGRzVmlzaXRlZExpbmtzKGJvb2wgYWRkc1Zpc2l0
ZWRMaW5rcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBZGRzVmlzaXRlZExpbmtz
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShhZGRzVmlzaXRlZExpbmtzKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRBZGRzVmlzaXRlZExpbmtzIiwgYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoYWRkc1Zpc2l0ZWRMaW5rcykpKTsKIH0KIAogdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRHZW9sb2NhdGlvblBlcm1pc3Npb24iKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKGVuYWJsZWQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIlNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGVuYWJsZWQpKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRl
c0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVz
SGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVk
LCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIEluamVj
dGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRv
dWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVk
ZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhl
YWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZl
bCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
biIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGxhdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJsYXRpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJl
Zj4gbGF0aXR1ZGVXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUobGF0aXR1ZGUpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBsYXRpdHVkZUtleVdLLmdldCgp
LCBsYXRpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsb25n
aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxvbmdp
dHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbG9uZ2l0dWRlV0sgPSBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKGxvbmdpdHVkZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
bWVzc2FnZUJvZHkuZ2V0KCksIGxvbmdpdHVkZUtleVdLLmdldCgpLCBsb25naXR1ZGVXSy5nZXQo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNjdXJhY3lLZXlXSyA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFjY3VyYWN5IikpOwotICAgIFdLUmV0
YWluUHRyPFdLRG91YmxlUmVmPiBhY2N1cmFjeVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShh
Y2N1cmFjeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFj
Y3VyYWN5S2V5V0suZ2V0KCksIGFjY3VyYWN5V0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBwcm92aWRlc0FsdGl0dWRlV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShwcm92aWRlc0FsdGl0dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9k
eS5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZUtleVdLLmdldCgpLCBwcm92aWRlc0FsdGl0dWRlV0su
Z2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRlS2V5V0sgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVkZSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RvdWJsZVJlZj4gYWx0aXR1ZGVXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVh
dGUoYWx0aXR1ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgp
LCBhbHRpdHVkZUtleVdLLmdldCgpLCBhbHRpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lLZXlXSyA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eVdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5KSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNBbHRp
dHVkZUFjY3VyYWN5S2V5V0suZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVkZUFjY3VyYWN5S2V5V0sg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVkZUFjY3VyYWN5
IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBhbHRpdHVkZUFjY3VyYWN5V0sgPSBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGFsdGl0dWRlQWNjdXJhY3kpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhbHRpdHVkZUFjY3VyYWN5S2V5V0suZ2V0KCks
IGFsdGl0dWRlQWNjdXJhY3lXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gcHJvdmlkZXNIZWFkaW5nS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJwcm92aWRlc0hlYWRpbmciKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBwcm92aWRlc0hlYWRpbmdXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzSGVh
ZGluZykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHByb3Zp
ZGVzSGVhZGluZ0tleVdLLmdldCgpLCBwcm92aWRlc0hlYWRpbmdXSy5nZXQoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVhZGluZ0tleVdLID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVhZGluZyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJs
ZVJlZj4gaGVhZGluZ1dLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShoZWFkaW5nKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgaGVhZGluZ0tleVdLLmdldCgp
LCBoZWFkaW5nV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3Zp
ZGVzU3BlZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBy
b3ZpZGVzU3BlZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc1Nw
ZWVkV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92aWRlc1NwZWVkKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNTcGVlZEtleVdLLmdl
dCgpLCBwcm92aWRlc1NwZWVkV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHNwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJz
cGVlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gc3BlZWRXSyA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoc3BlZWQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VC
b2R5LmdldCgpLCBzcGVlZEtleVdLLmdldCgpLCBzcGVlZFdLLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0Zsb29yTGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzRmxvb3JMZXZlbCIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzRmxvb3JMZXZlbFdLID0gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNGbG9vckxldmVsKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNGbG9vckxldmVsS2V5V0suZ2V0KCksIHBy
b3ZpZGVzRmxvb3JMZXZlbFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBmbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJmbG9vckxldmVsIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBmbG9vckxldmVs
V0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGZsb29yTGV2ZWwpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBmbG9vckxldmVsS2V5V0suZ2V0KCksIGZsb29y
TGV2ZWxXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUo
Ym9keSwgImxhdGl0dWRlIiwgbGF0aXR1ZGUpOworICAgIHNldFZhbHVlKGJvZHksICJsb25naXR1
ZGUiLCBsb25naXR1ZGUpOworICAgIHNldFZhbHVlKGJvZHksICJhY2N1cmFjeSIsIGFjY3VyYWN5
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiYWx0aXR1ZGUiLCBhbHRpdHVkZSk7CisgICAgc2V0VmFs
dWUoYm9keSwgImFsdGl0dWRlQWNjdXJhY3kiLCBhbHRpdHVkZUFjY3VyYWN5KTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiaGVhZGluZyIsIGhlYWRpbmcpOworICAgIHNldFZhbHVlKGJvZHksICJzcGVl
ZCIsIHNwZWVkKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiZmxvb3JMZXZlbCIsIGZsb29yTGV2ZWwp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iLCBib2R5
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25V
bmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3Ii
KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBlcnJvck1lc3NhZ2UpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yIiwgZXJyb3JNZXNzYWdlKTsKIH0KIAog
Ym9vbCBJbmplY3RlZEJ1bmRsZTo6aXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29uc3QK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikp
OwotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgMCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBp
c0FjdGl2ZSA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXN1bHRUb1Bhc3Mp
KTsKLQotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShpc0FjdGl2ZS5nZXQoKSk7CisgICAg
V0tUeXBlUmVmIHJlc3VsdCA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIklzR2VvbG9jYXRpb25D
bGllbnRBY3RpdmUiKS5nZXQoKSwgMCwgJnJlc3VsdCk7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1
ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOwogfQogCiB1bnNpZ25lZCBJbmplY3RlZEJ1bmRsZTo6
aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkIikpOwotICAgIFdLVHlwZVJl
ZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgJnJlc3Vs
dFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGltYWdlQ291bnQgPSBhZG9w
dFdLKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXN1bHRUb1Bhc3MpKTsKLSAgICAKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoaW1hZ2VDb3VudC5n
ZXQoKSkpOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJJ
bWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCIpLmdldCgpLCAwLCAmcmVzdWx0KTsKKyAgICBy
ZXR1cm4gdWludDY0VmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdldCgpKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAg
YXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFVzZXJNZWRpYVBlcm1pc3Npb24iKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFVzZXJNZWRpYVBlcm1pc3Npb24iLCBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShlbmFibGVkKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNl
dFVzZXJNZWRpYVBlcm1pc3Npb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb24i
KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJlc2V0VXNlck1lZGlhUGVybWlz
c2lvbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50
UGVybWlzc2lvbkZvck9yaWdpbihib29sIHBlcm1pc3Npb24sIFdLU3RyaW5nUmVmIG9yaWdpbiwg
V0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRVc2VyTWVkaWFQZXJzaXN0ZW50
UGVybWlzc2lvbkZvck9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJtaXNzaW9uS2V5V0sgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwZXJtaXNzaW9uIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcGVybWlzc2lvbldLID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUocGVybWlzc2lvbikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHku
Z2V0KCksIHBlcm1pc3Npb25LZXlXSy5nZXQoKSwgcGVybWlzc2lvbldLLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KG1lc3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5nZXQoKSwgb3JpZ2luKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJlbnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFy
ZW50T3JpZ2luKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAicGVybWlzc2lvbiIsIHBlcm1pc3Npb24pOworICAgIHNldFZhbHVlKGJvZHksICJvcmlnaW4i
LCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJvZHksICJwYXJlbnRPcmlnaW4iLCBwYXJlbnRPcmln
aW4pOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Np
b25Gb3JPcmlnaW4iLCBib2R5KTsKIH0KIAogdW5zaWduZWQgSW5qZWN0ZWRCdW5kbGU6OnVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oV0tTdHJpbmdSZWYgb3JpZ2luLCBX
S1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBvcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9y
aWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBvcmln
aW5LZXlXSy5nZXQoKSwgb3JpZ2luKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBw
YXJlbnRPcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
InBhcmVudE9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5Lmdl
dCgpLCBwYXJlbnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFyZW50T3JpZ2luKTsKLQotICAgIFdLVHlw
ZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiBjb3VudCA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJlc3VsdFRvUGFzcykp
OwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdldFZhbHVlKGNv
dW50LmdldCgpKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJvcmlnaW4iLCBvcmlnaW4pOworICAgIHNl
dFZhbHVlKGJvZHksICJwYXJlbnRPcmlnaW4iLCBwYXJlbnRPcmlnaW4pOworICAgIFdLVHlwZVJl
ZiByZXN1bHQgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJVc2VyTWVkaWFQZXJtaXNzaW9uUmVx
dWVzdENvdW50Rm9yT3JpZ2luIikuZ2V0KCksIGJvZHkuZ2V0KCksICZyZXN1bHQpOworICAgIHJl
dHVybiB1aW50NjRWYWx1ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4o
V0tTdHJpbmdSZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9y
T3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVz
c2FnZUJvZHkuZ2V0KCksIG9yaWdpbktleVdLLmdldCgpLCBvcmlnaW4pOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBhcmVudE9yaWdpbktleVdLLmdldCgpLCBwYXJlbnRP
cmlnaW4pOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJv
cmlnaW4iLCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJvZHksICJwYXJlbnRPcmlnaW4iLCBwYXJl
bnRPcmlnaW4pOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdENvdW50Rm9yT3JpZ2luIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEN1c3RvbVBvbGljeURlbGVnYXRlIikpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gZW5hYmxlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiZW5hYmxlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGVuYWJs
ZWRXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBlbmFibGVkS2V5V0suZ2V0KCksIGVuYWJsZWRX
Sy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGVybWlzc2l2ZUtleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGVybWlzc2l2ZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBlcm1pc3NpdmVXSyA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKHBlcm1pc3NpdmUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCBwZXJtaXNzaXZlS2V5V0suZ2V0KCksIHBlcm1pc3NpdmVXSy5nZXQoKSk7
Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgImVuYWJsZWQi
LCBlbmFibGVkKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGVybWlzc2l2ZSIsIHBlcm1pc3NpdmUp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiLCBib2R5KTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0SGlkZGVuKGJvb2wgaGlkZGVuKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEhpZGRlbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011
dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc0luaXRpYWxL
ZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhpZGRlbiIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlzSW5pdGlhbFdLID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaGlkZGVuKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9k
eS5nZXQoKSwgaXNJbml0aWFsS2V5V0suZ2V0KCksIGlzSW5pdGlhbFdLLmdldCgpKTsKLQotICAg
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiaGlkZGVuIiwgaGlkZGVu
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEhpZGRlbiIsIGJvZHkuZ2V0KCkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpzZXRDYWNoZU1vZGVsKGludCBtb2RlbCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRDYWNoZU1vZGVsIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kZWwpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBh
Z2UoKSwgdG9XSygiU2V0Q2FjaGVNb2RlbCIpLmdldCgpLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KG1vZGVsKSkuZ2V0KCksIG51bGxwdHIpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlOjpzaG91
bGRQcm9jZXNzV29ya1F1ZXVlKCkgY29uc3QKQEAgLTEwMDUsMTEwICs3OTUsNzMgQEAgYm9vbCBJ
bmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1ZSgpIGNvbnN0CiAgICAgaWYgKCFt
X3VzZVdvcmtRdWV1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSXNXb3JrUXVldWVFbXB0eSIpKTsKLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNz
ID0gMDsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhw
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsICZyZXN1bHRUb1Bhc3MpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gaXNFbXB0eSA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihyZXN1bHRUb1Bhc3MpKTsKKyAgICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVs
bHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhw
YWdlKCktPnBhZ2UoKSwgdG9XSygiSXNXb3JrUXVldWVFbXB0eSIpLmdldCgpLCAwLCAmcmVzdWx0
KTsKIAogICAgIC8vIFRoZSBJUEMgZmFpbGVkLiBUaGlzIGhhcHBlbnMgd2hlbiBzd2FwcGluZyBw
cm9jZXNzZXMgb24gbmF2aWdhdGlvbiBiZWNhdXNlIHRoZSBXZWJQYWdlUHJveHkgdW5yZWdpc3Rl
cnMgaXRzZWxmCiAgICAgLy8gYXMgYSBNZXNzYWdlUmVjZWl2ZXIgZnJvbSB0aGUgb2xkIFdlYlBy
b2Nlc3NQcm94eSBhbmQgcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlIG5ldyBXZWJQcm9jZXNzUHJv
eHkgaW5zdGVhZC4KLSAgICBpZiAoIWlzRW1wdHkpCisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiAhV0tCb29sZWFuR2V0VmFsdWUoaXNFbXB0eS5n
ZXQoKSk7CisgICAgYXV0byBpc0VtcHR5ID0gYm9vbGVhblZhbHVlKGFkb3B0V0socmVzdWx0KS5n
ZXQoKSk7CisgICAgcmV0dXJuICFpc0VtcHR5OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpw
cm9jZXNzV29ya1F1ZXVlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcm9jZXNzV29y
a1F1ZXVlIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJQcm9jZXNzV29ya1F1
ZXVlIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlQmFja05hdmlnYXRpb24odW5z
aWduZWQgaG93RmFyQmFja3dhcmQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVCYWNrTmF2aWdhdGlvbiIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KGhvd0ZhckJhY2t3YXJkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJRdWV1ZUJhY2tOYXZpZ2F0aW9uIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSho
b3dGYXJCYWNrd2FyZCkpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVGb3J3YXJk
TmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJGb3J3YXJkKQogewogICAgIG1fdXNlV29ya1F1ZXVl
ID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlRm9yd2FyZE5hdmlnYXRp
b24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShob3dGYXJGb3J3YXJkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUZvcndhcmROYXZpZ2F0aW9uIiwgYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShob3dGYXJGb3J3YXJkKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjpxdWV1ZUxvYWQoV0tTdHJpbmdSZWYgdXJsLCBXS1N0cmluZ1JlZiB0YXJnZXQsIGJvb2wg
c2hvdWxkT3BlbkV4dGVybmFsVVJMcykKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZUxvYWQiKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBsb2FkRGF0YSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1cmwiKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgdXJsS2V5LmdldCgpLCB1cmwpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRhcmdldEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoInRhcmdldCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KGxvYWREYXRhLmdldCgpLCB0YXJnZXRLZXkuZ2V0KCksIHRhcmdldCk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc2hvdWxkT3BlbkV4dGVybmFsVVJMc0tleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWUg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgc2hvdWxkT3BlbkV4dGVybmFsVVJM
c0tleS5nZXQoKSwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1ZhbHVlLmdldCgpKTsKLQotICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bG9hZERhdGEuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAidXJsIiwgdXJsKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAidGFyZ2V0IiwgdGFyZ2V0KTsKKyAgICBzZXRWYWx1ZShib2R5LCAic2hvdWxk
T3BlbkV4dGVybmFsVVJMcyIsIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiUXVldWVMb2FkIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoV0tTdHJpbmdSZWYgY29udGVudCwgV0tTdHJpbmdSZWYg
YmFzZVVSTCwgV0tTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkwpCiB7CiAgICAgbV91c2VXb3JrUXVl
dWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVMb2FkSFRNTFN0cmlu
ZyIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGxvYWREYXRh
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGNvbnRlbnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJjb250ZW50IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEu
Z2V0KCksIGNvbnRlbnRLZXkuZ2V0KCksIGNvbnRlbnQpOwotCi0gICAgaWYgKGJhc2VVUkwpIHsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJiYXNlVVJMIikpOwotICAgICAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCBiYXNlVVJMS2V5LmdldCgpLCBiYXNlVVJMKTsK
LSAgICB9Ci0KLSAgICBpZiAodW5yZWFjaGFibGVVUkwpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygidW5yZWFjaGFibGVVUkwiKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0obG9hZERhdGEuZ2V0KCksIHVucmVhY2hhYmxlVVJMS2V5LmdldCgpLCB1bnJlYWNoYWJs
ZVVSTCk7Ci0gICAgfQotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBsb2FkRGF0YS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHks
ICJjb250ZW50IiwgY29udGVudCk7CisgICAgaWYgKGJhc2VVUkwpCisgICAgICAgIHNldFZhbHVl
KGJvZHksICJiYXNlVVJMIiwgYmFzZVVSTCk7CisgICAgaWYgKHVucmVhY2hhYmxlVVJMKQorICAg
ICAgICBzZXRWYWx1ZShib2R5LCAidW5yZWFjaGFibGVVUkwiLCB1bnJlYWNoYWJsZVVSTCk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUxvYWRIVE1MU3RyaW5nIiwgYm9keSk7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlUmVsb2FkKCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9
IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZVJlbG9hZCIpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVSZWxvYWQiKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6cXVldWVMb2FkaW5nU2NyaXB0KFdLU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAg
ICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1
ZUxvYWRpbmdTY3JpcHQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBzY3JpcHQpOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
UXVldWVMb2FkaW5nU2NyaXB0Iiwgc2NyaXB0KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6
cXVldWVOb25Mb2FkaW5nU2NyaXB0KFdLU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBtX3VzZVdv
cmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZU5vbkxvYWRp
bmdTY3JpcHQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBzY3JpcHQpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVO
b25Mb2FkaW5nU2NyaXB0Iiwgc2NyaXB0KTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZTo6aXNB
bGxvd2VkSG9zdChXS1N0cmluZ1JlZiBob3N0KQpAQCAtMTE0Myw0ICs4OTYsNzIgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZygpCiAgICAgbV90ZXN0UnVubmVy
LT50ZXh0RmllbGREaWRFbmRFZGl0aW5nQ2FsbGJhY2soKTsKIH0KIAordm9pZCBJbmplY3RlZEJ1
bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiBib2R5KQor
eworICAgIHBvc3RQYWdlTWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbmFtZSwgYm9keSk7Cit9CisK
K3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBjaGFyKiBib2R5KQoreworICAgIHBvc3RQYWdlTWVzc2FnZShuYW1lLCB0b1dLKGJvZHkp
KTsKK30KKwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFs
dWUpCit7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlKTsKK30KKwordm9pZCBwb3N0TWVz
c2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSkKK3sKKyAgICBwb3N0TWVzc2Fn
ZShuYW1lLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCit2b2lk
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVl
KQoreworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlLCBudWxscHRyKTsK
K30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wg
dmFsdWUpCit7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNz
YWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsK
K30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2ln
bmVkIHZhbHVlKQoreworICAgIHVpbnQ2NF90IHByb21vdGVkVmFsdWUgPSB2YWx1ZTsKKyAgICBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIHByb21vdGVkVmFsdWUpOworfQorCit2b2lkIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVlKQorewor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2
YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFt
ZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIGlmIChhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpKQorICAgICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShw
YWdlLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlKTsKK30KKwordm9pZCBwb3N0UGFn
ZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBwb3N0UGFnZU1l
c3NhZ2UobmFtZSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisK
K3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBl
UmVmIHZhbHVlKQoreworICAgIGlmIChhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpKQorICAgICAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhwYWdlLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlLCBudWxscHRy
KTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1l
LCBib29sIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKG5hbWUsIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuaAppbmRleCBiNzYwMTQzNmYwYzY3Mjg1NjMzYTA4ZTI1Zjk0MmE4YWE5
OGQ5NzBiLi43YTRmNWQ2NTlmYzBhYTEwZTI3ZjQ4NTk0NzRiZTFjNDkyZGQwNDIyIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEdlb2xvY2F0aW9uLgog
ICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wpOwotICAgIHZvaWQgc2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBk
b3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJv
b2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBk
b3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7
CisgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRv
dWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVk
ZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhl
YWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZl
bCk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3Io
V0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKICAgICBib29sIGlzR2VvbG9jYXRpb25Qcm92aWRl
ckFjdGl2ZSgpIGNvbnN0OwogCkBAIC0xNjksOCArMTY5LDExIEBAIHByaXZhdGU6CiAgICAgZW51
bSBjbGFzcyBCZWdpbmdUZXN0aW5nTW9kZSB7IE5ldywgUmVzdW1lIH07CiAgICAgdm9pZCBiZWdp
blRlc3RpbmcoV0tEaWN0aW9uYXJ5UmVmIGluaXRpYWxTZXR0aW5ncywgQmVnaW5nVGVzdGluZ01v
ZGUpOwogCi0gICAgYm9vbCBib29sZWFuRm9yS2V5KFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hh
cioga2V5KTsKLSAgICBTdHJpbmcgc3RyaW5nRm9yS2V5KFdLRGljdGlvbmFyeVJlZiwgY29uc3Qg
Y2hhcioga2V5KTsKKyAgICBzdGF0aWMgdm9pZCBwb3N0UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdl
UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgYm9keSk7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RhdGljIHZvaWQgcG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiwgY29u
c3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkpOworICAgIHZvaWQgcG9z
dFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiBib2R5ID0gbnVsbHB0cik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hh
ciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkpOworICAgIHZvaWQgcG9zdFBhZ2VN
ZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGJvZHkpOwogCiAgICAgV0tCdW5k
bGVSZWYgbV9idW5kbGUgeyBudWxscHRyIH07CiAgICAgV0tCdW5kbGVQYWdlR3JvdXBSZWYgbV9w
YWdlR3JvdXAgeyBudWxscHRyIH07CkBAIC0yMTAsNCArMjEzLDI5IEBAIHByaXZhdGU6CiAgICAg
c2l6ZV90IG1fdXNlclNjcmlwdEluamVjdGVkQ291bnQgeyAwIH07CiB9OwogCit2b2lkIHBvc3RN
ZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9p
ZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSk7CisKK3ZvaWQg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUg
PSBudWxscHRyKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1l
LCBib29sIHZhbHVlKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBu
YW1lLCB1aW50NjRfdCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3Qg
Y2hhciogbmFtZSwgdW5zaWduZWQgdmFsdWUpOwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSk7CisKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdl
KGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0
UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7CisKK3ZvaWQgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0g
bnVsbHB0cik7Cit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5h
bWUsIGJvb2wgdmFsdWUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCBj
aGFyKiBuYW1lLCBjb25zdCBXS1JldGFpblB0cjxUPiYgYm9keSkKK3sKKyAgICBwb3N0UGFnZU1l
c3NhZ2UocGFnZSwgbmFtZSwgYm9keS5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBXS1JldGFpblB0cjxUPiYgYm9keSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UobmFtZSwg
Ym9keS5nZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2Uu
Y3BwCmluZGV4IGQ4OWZlYWY5YjZkYWU0Yzk2ODUzMWYwYWI2Mzg1ODkxYjE0Zjk4ZjguLjJmNTY0
Mjc3MzExNmQ5ZjEwMjRmYTZmYmU5ZGMzNTIwYjE1ZTE4YTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFn
ZS5jcHAKQEAgLTYwLDUwICs2MCwxOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgV1RSIHsKIAotc3RhdGljIEpTVmFsdWVSZWYgcHJvcGVydHlWYWx1ZShKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUpCitz
dGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0eShXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4g
MDsKLSAgICBhdXRvIHByb3BlcnR5TmFtZVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHByb3BlcnR5TmFtZSkpOwotICAgIHJldHVybiBKU09iamVjdEdldFByb3Bl
cnR5KGNvbnRleHQsIG9iamVjdCwgcHJvcGVydHlOYW1lU3RyaW5nLmdldCgpLCAwKTsKLX0KLQot
c3RhdGljIGRvdWJsZSBwcm9wZXJ0eVZhbHVlRG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKLXsKLSAgICBKU1Zh
bHVlUmVmIHZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFt
ZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCk7ICAgIAotfQotCi1zdGF0aWMgaW50IHByb3Bl
cnR5VmFsdWVJbnQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29u
c3QgY2hhciogcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBy
b3BlcnR5VmFsdWVEb3VibGUoY29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsgICAgCi19
Ci0KLXN0YXRpYyBkb3VibGUgbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQotewotICAgIEpTR2xvYmFsQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1l
KTsKLSAgICByZXR1cm4gcHJvcGVydHlWYWx1ZURvdWJsZShjb250ZXh0LCBKU0NvbnRleHRHZXRH
bG9iYWxPYmplY3QoY29udGV4dCksIHByb3BlcnR5TmFtZSk7CisgICAgYXV0byBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKKyAgICByZXR1cm4gbnVt
ZXJpY1Byb3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwg
bmFtZSk7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBkdW1wUGF0aChKU0dsb2JhbENvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgbm9kZVZhbHVlKQogewotICAgIEpTVmFsdWVSZWYgbm9k
ZU5hbWVWYWx1ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgbm9kZVZhbHVlLCAibm9kZU5hbWUi
KTsKLSAgICBhdXRvIGpzU3RyaW5nTm9kZU5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIG5vZGVOYW1lVmFsdWUsIDApKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbm9kZU5hbWUgPSB0b1dLKGpzU3RyaW5nTm9kZU5hbWUpOwotCi0gICAgSlNWYWx1ZVJlZiBw
YXJlbnROb2RlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBub2RlVmFsdWUsICJwYXJlbnROb2Rl
Iik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodG9XVEZTdHJpbmcobm9kZU5hbWUpKTsKLQotICAgIGlmIChwYXJlbnROb2RlICYm
IEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBwYXJlbnROb2RlKSkgewotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiA+ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChkdW1wUGF0aChjb250ZXh0LCAoSlNPYmplY3RSZWYpcGFyZW50Tm9kZSkpOwotICAgIH0KLQot
ICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgYXV0byBuYW1lID0gdG9X
VEZTdHJpbmcoc3RyaW5nUHJvcGVydHkoY29udGV4dCwgbm9kZVZhbHVlLCAibm9kZU5hbWUiKSk7
CisgICAgaWYgKGF1dG8gcGFyZW50Tm9kZSA9IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIG5vZGVW
YWx1ZSwgInBhcmVudE5vZGUiKSkKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcobmFtZSwgIiA+
ICIsIGR1bXBQYXRoKGNvbnRleHQsIHBhcmVudE5vZGUpKTsKKyAgICByZXR1cm4gbmFtZTsKIH0K
IAogc3RhdGljIFdURjo6U3RyaW5nIGR1bXBQYXRoKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1
bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZSkKQEAg
LTEyNiw1MyArOTQsNDAgQEAgc3RhdGljIFdURjo6U3RyaW5nIHJhbmdlVG9TdHIoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQKICAgICBpZiAoIXJhbmdl
UmVmKQogICAgICAgICByZXR1cm4gIihudWxsKSI7CiAKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotCi0gICAgSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3Js
ZChmcmFtZSwgd29ybGQpOwotICAgIEpTVmFsdWVSZWYgcmFuZ2VWYWx1ZSA9IFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0V3JhcHBlckZvclJhbmdlRm9yV29ybGQoZnJhbWUsIHJhbmdlUmVmLCB3
b3JsZCk7CisgICAgYXV0byBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsK
KyAgICBhdXRvIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JX
b3JsZChmcmFtZSwgd29ybGQpOworICAgIGF1dG8gcmFuZ2VWYWx1ZSA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0V3JhcHBlckZvclJhbmdlRm9yV29ybGQoZnJhbWUsIHJhbmdlUmVmLCB3b3Js
ZCk7CiAgICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCByYW5nZVZhbHVlKSk7Ci0g
ICAgSlNPYmplY3RSZWYgcmFuZ2VPYmplY3QgPSAoSlNPYmplY3RSZWYpcmFuZ2VWYWx1ZTsKLQot
ICAgIEpTVmFsdWVSZWYgc3RhcnROb2RlVmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIHJh
bmdlT2JqZWN0LCAic3RhcnRDb250YWluZXIiKTsKLSAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0
KGNvbnRleHQsIHN0YXJ0Tm9kZVZhbHVlKSk7Ci0gICAgSlNPYmplY3RSZWYgc3RhcnROb2RlT2Jq
ZWN0ID0gKEpTT2JqZWN0UmVmKXN0YXJ0Tm9kZVZhbHVlOwotCi0gICAgSlNWYWx1ZVJlZiBlbmRO
b2RlVmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kQ29udGFp
bmVyIik7Ci0gICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBlbmROb2RlVmFsdWUp
KTsKLSAgICBKU09iamVjdFJlZiBlbmROb2RlT2JqZWN0ID0gKEpTT2JqZWN0UmVmKWVuZE5vZGVW
YWx1ZTsKLQotICAgIGludCBzdGFydE9mZnNldCA9IHByb3BlcnR5VmFsdWVJbnQoY29udGV4dCwg
cmFuZ2VPYmplY3QsICJzdGFydE9mZnNldCIpOwotICAgIGludCBlbmRPZmZzZXQgPSBwcm9wZXJ0
eVZhbHVlSW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zmc2V0Iik7Ci0KLSAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJyYW5nZSBmcm9tICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHN0YXJ0T2Zm
c2V0KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChjb250ZXh0LCBzdGFydE5vZGVPYmplY3QpKTsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0byAiKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZE51bWJlcihlbmRPZmZzZXQpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiIG9mICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGR1bXBQYXRoKGNvbnRleHQsIGVu
ZE5vZGVPYmplY3QpKTsKLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAg
IGF1dG8gcmFuZ2VPYmplY3QgPSAoSlNPYmplY3RSZWYpcmFuZ2VWYWx1ZTsKKworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJyYW5nZSBmcm9tICIsCisgICAgICAgIG51bWVyaWNQcm9wZXJ0eShjb250
ZXh0LCByYW5nZU9iamVjdCwgInN0YXJ0T2Zmc2V0IiksCisgICAgICAgICIgb2YgIiwKKyAgICAg
ICAgZHVtcFBhdGgoY29udGV4dCwgb2JqZWN0UHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3Qs
ICJzdGFydENvbnRhaW5lciIpKSwKKyAgICAgICAgIiB0byAiLAorICAgICAgICBudW1lcmljUHJv
cGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRPZmZzZXQiKSwKKyAgICAgICAgIiBvZiAi
LAorICAgICAgICBkdW1wUGF0aChjb250ZXh0LCBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCByYW5n
ZU9iamVjdCwgImVuZENvbnRhaW5lciIpKQorICAgICk7CiB9CiAKIHN0YXRpYyBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0ZyYW1lTmF2aWdhdGlvblR5
cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdh
dGlvblR5cGVMaW5rQ2xpY2tlZDoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImxpbmsgY2xpY2tlZCIpKTsKKyAgICAgICAgcmV0dXJuIHRvV0so
ImxpbmsgY2xpY2tlZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZUZvcm1TdWJt
aXR0ZWQ6Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJmb3JtIHN1Ym1pdHRlZCIpKTsKKyAgICAgICAgcmV0dXJuIHRvV0soImZvcm0gc3VibWl0
dGVkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlQmFja0ZvcndhcmQ6Ci0gICAg
ICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJiYWNrL2Zv
cndhcmQiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJiYWNrL2ZvcndhcmQiKTsKICAgICBjYXNl
IGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVSZWxvYWQ6Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJyZWxvYWQiKSk7CisgICAgICAgIHJldHVybiB0
b1dLKCJyZWxvYWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVGb3JtUmVzdWJt
aXR0ZWQ6Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJmb3JtIHJlc3VibWl0dGVkIikpOworICAgICAgICByZXR1cm4gdG9XSygiZm9ybSByZXN1
Ym1pdHRlZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZU90aGVyOgotICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3RoZXIiKSk7
CisgICAgICAgIHJldHVybiB0b1dLKCJvdGhlciIpOwogICAgIH0KLSAgICByZXR1cm4gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaWxsZWdhbCB2YWx1ZSIpKTsKKyAgICBy
ZXR1cm4gdG9XSygiaWxsZWdhbCB2YWx1ZSIpOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgc3R5
bGVEZWNUb1N0cihXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUpCkBAIC0xODUs
MjMgKzE0MCwxNCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgc3R5bGVEZWNUb1N0cihXS0J1bmRsZUNT
U1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUpCiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5nIHNlY3VyaXR5T3JpZ2luVG9TdHIoV0tT
ZWN1cml0eU9yaWdpblJlZiBvcmlnaW4pCitzdGF0aWMgV1RGOjpTdHJpbmcgc3RyaW5nKFdLU2Vj
dXJpdHlPcmlnaW5SZWYgb3JpZ2luKQogewotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgneycpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlQcm90b2NvbChvcmln
aW4pKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5
SG9zdChvcmlnaW4pKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihXS1NlY3VyaXR5T3JpZ2luR2V0UG9ydChv
cmlnaW4pKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnfScpOwotCi0gICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygneycsIHRvV1RG
U3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlQcm90b2NvbChvcmlnaW4pKSksICIs
ICIsIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlIb3N0KG9yaWdpbikp
KSwgIiwgIiwgV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSwgJ30nKTsKIH0KIAogc3Rh
dGljIFdURjo6U3RyaW5nIGZyYW1lVG9TdHIoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNv
cHlOYW1lKGZyYW1lKSk7CisgICAgYXV0byBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29w
eU5hbWUoZnJhbWUpKTsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgaWYg
KFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpIHsKICAgICAgICAgaWYgKCFXS1N0cmlu
Z0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKQEAgLTIzNSwxMiArMTgxLDEyIEBAIHN0YXRpYyBpbmxp
bmUgV1RGOjpTdHJpbmcgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlZiBmaWxlVXJs
KQogICAgIGlmICghZmlsZVVybCkKICAgICAgICAgcmV0dXJuICIobnVsbCkiOwogCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjaGVtZVN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U2No
ZW1lKGZpbGVVcmwpKTsKKyAgICBhdXRvIHNjaGVtZVN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5
U2NoZW1lKGZpbGVVcmwpKTsKICAgICBpZiAoIWlzTG9jYWxGaWxlU2NoZW1lKHNjaGVtZVN0cmlu
Zy5nZXQoKSkpCiAgICAgICAgIHJldHVybiB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0
cmluZyhmaWxlVXJsKSkpOwogCiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gbWFpbkZyYW1lVVJMID0gYWRvcHRX
SyhXS0J1bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUpKTsKKyAgICBhdXRvIG1haW5GcmFtZVVS
TCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7CiAgICAgaWYgKCFt
YWluRnJhbWVVUkwpCiAgICAgICAgIG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFt
ZUNvcHlQcm92aXNpb25hbFVSTChtYWluRnJhbWUpKTsKIApAQCAtNDM0LDggKzM4MCw3IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVzdCgpCiAgICAgLy8gKHNlZSA8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODMzND4pLCBob3dldmVyIGZv
ciB0ZXN0cywgd2Ugd2FudCB0byBzdGFydCBlYWNoIG9uZSB3aXRoIGEgY2xlYW4gc3RhdGUuCiAg
ICAgV0tCdW5kbGVGcmFtZUZvY3VzKGZyYW1lKTsKIAotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBX
ZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOworICAgIFdl
YkNvcmVUZXN0U3VwcG9ydDo6cmVzZXRJbnRlcm5hbHNPYmplY3QoV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0KGZyYW1lKSk7CiAgICAgYXNzaWduZWRVcmxzQ2FjaGUoKS5jbGVhcigp
OwogCiAgICAgLy8gVXNlciBzY3JpcHRzIG5lZWQgdG8gYmUgcmVtb3ZlZCBhZnRlciB0aGUgdGVz
dCBhbmQgYmVmb3JlIGxvYWRpbmcgYWJvdXQ6YmxhbmssIGFzIG90aGVyd2lzZSB0aGV5IHdvdWxk
IHJ1biBpbiBhYm91dDpibGFuaywgYW5kIHBvdGVudGlhbGx5IGxlYWsgcmVzdWx0cyBpbnRvIGEg
c3Vic2VxdWVzdCB0ZXN0LgpAQCAtNDUxLDcgKzM5Niw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpyZXNldEFmdGVyVGVzdCgpCiAvLyBTdHJpbmcgb3V0cHV0IG11c3QgYmUgaWRlbnRpY2Fs
IHRvIC1bV2ViRnJhbWUgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF0uCiBz
dGF0aWMgdm9pZCBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29w
eU5hbWUoZnJhbWUpKTsKKyAgICBhdXRvIG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5
TmFtZShmcmFtZSkpOwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7
CiAgICAgICAgIGlmIChXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKICAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSIpOwpAQCAtNDg2LDI3ICs0
MzEsMjEgQEAgc3RhdGljIHZvaWQgZHVtcExvYWRFdmVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCBjb25zdCBjaGFyKiBldmVudE5hbWUpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVxdWVz
dERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0
LCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwotICAgIFdL
UmV0YWluUHRyPFdLVVJMUmVmPiBmaXJzdFBhcnR5ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5
Rmlyc3RQYXJ0eUZvckNvb2tpZXMocmVxdWVzdCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBodHRwTWV0aG9kID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1
ZXN0KSk7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxOU1VSTFJlcXVlc3Qg
VVJMICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1
bHQodXJsLmdldCgpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIG1haW4g
ZG9jdW1lbnQgVVJMICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhdGhTdWl0YWJsZUZv
clRlc3RSZXN1bHQoZmlyc3RQYXJ0eS5nZXQoKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiLCBodHRwIG1ldGhvZCAiKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxS
ZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CisgICAgYXV0byBmaXJzdFBhcnR5ID0gYWRvcHRXSyhX
S1VSTFJlcXVlc3RDb3B5Rmlyc3RQYXJ0eUZvckNvb2tpZXMocmVxdWVzdCkpOworICAgIGF1dG8g
aHR0cE1ldGhvZCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkp
OwogCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU1VSTFJlcXVlc3QgVVJMICIsIHBhdGhT
dWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwgIiwgbWFpbiBkb2N1bWVudCBVUkwgIiwg
cGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChmaXJzdFBhcnR5LmdldCgpKSwgIiwgaHR0cCBtZXRo
b2QgIik7CiAgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShodHRwTWV0aG9kLmdldCgpKSkKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobm9uZSkiKTsKICAgICBlbHNlCiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGh0dHBNZXRob2QpKTsKLQogICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1w
UmVzcG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlc3BvbnNlUmVm
IHJlc3BvbnNlLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBib29sIHNob3VsZER1bXBS
ZXNwb25zZUhlYWRlcnMgPSBmYWxzZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJs
ID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8gdXJs
ID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwogICAgIGlmICghdXJs
KSB7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG51bGwpIik7CiAgICAg
ICAgIHJldHVybjsKQEAgLTUzNSwzMSArNDc0LDIwIEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxl
UGFnZTo6cmVzcG9uc2VIZWFkZXJDb3VudChXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQogCiBz
dGF0aWMgaW5saW5lIHZvaWQgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQoV0tFcnJvclJlZiBlcnJvciwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JEb21haW4gPSBhZG9wdFdLKFdLRXJyb3JD
b3B5RG9tYWluKGVycm9yKSk7Ci0gICAgaW50IGVycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNv
ZGUoZXJyb3IpOworICAgIGF1dG8gZXJyb3JEb21haW4gPSB0b1dURlN0cmluZyhhZG9wdFdLKFdL
RXJyb3JDb3B5RG9tYWluKGVycm9yKSkpOworICAgIGF1dG8gZXJyb3JDb2RlID0gV0tFcnJvckdl
dEVycm9yQ29kZShlcnJvcik7CiAKICAgICAvLyBXZSBuZWVkIHRvIGRvIHNvbWUgZXJyb3IgbWFw
cGluZyBoZXJlIHRvIG1hdGNoIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyAoTWFjIGVycm9yIG5hbWVz
IGFyZSBleHBlY3RlZCkuCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZXJy
b3JEb21haW4uZ2V0KCksICJXZWJLaXROZXR3b3JrRXJyb3IiKSkgewotICAgICAgICBlcnJvckRv
bWFpbiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk5TVVJMRXJyb3JE
b21haW4iKSk7CisgICAgaWYgKGVycm9yRG9tYWluID09ICJXZWJLaXROZXR3b3JrRXJyb3IiKSB7
CisgICAgICAgIGVycm9yRG9tYWluID0gIk5TVVJMRXJyb3JEb21haW4iOwogICAgICAgICBlcnJv
ckNvZGUgPSAtOTk5OwogICAgIH0KKyAgICBpZiAoZXJyb3JEb21haW4gPT0gICJXZWJLaXRQb2xp
Y3lFcnJvciIpCisgICAgICAgIGVycm9yRG9tYWluID0gIldlYktpdEVycm9yRG9tYWluIjsKIAot
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGVycm9yRG9tYWluLmdldCgpLCAi
V2ViS2l0UG9saWN5RXJyb3IiKSkKLSAgICAgICAgZXJyb3JEb21haW4gPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRFcnJvckRvbWFpbiIpKTsKLQotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPE5TRXJyb3IgZG9tYWluICIpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGVycm9yRG9tYWluKSk7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIsIGNvZGUgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRO
dW1iZXIoZXJyb3JDb2RlKTsKLQotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9w
dFdLKFdLRXJyb3JDb3B5RmFpbGluZ1VSTChlcnJvcikpOwotICAgIGlmICh1cmwuZ2V0KCkpIHsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tV
UkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIiwgZmFpbGluZyBVUkwgXCIiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
dG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCci
Jyk7Ci0gICAgfQotCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU0Vycm9yIGRvbWFpbiAi
LCBlcnJvckRvbWFpbiwgIiwgY29kZSAiLCBlcnJvckNvZGUpOworICAgIGlmIChhdXRvIHVybCA9
IGFkb3B0V0soV0tFcnJvckNvcHlGYWlsaW5nVVJMKGVycm9yKSkpCisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCIsIGZhaWxpbmcgVVJMIFwiIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VS
TENvcHlTdHJpbmcodXJsLmdldCgpKSkpLCAnIicpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCc+Jyk7CiB9CiAKQEAgLTY5NSw3ICs2MjMsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
dGVzdFVSTCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB0ZXN0VVJMID0gYWRv
cHRXSyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKGZyYW1lKSk7CisgICAgICAgIGF1
dG8gdGVzdFVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVSTChmcmFt
ZSkpOwogICAgICAgICBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNldFRlc3RVUkwodGVz
dFVSTC5nZXQoKSk7CiAgICAgfQogCkBAIC03NzQsMTMgKzcwMiwxMyBAQCBlbnVtIEZyYW1lTmFt
ZVBvbGljeSB7IFNob3VsZE5vdEluY2x1ZGVGcmFtZU5hbWUsIFNob3VsZEluY2x1ZGVGcmFtZU5h
bWUgfTsKIAogc3RhdGljIHZvaWQgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgRnJhbWVOYW1lUG9saWN5
IHNob3VsZEluY2x1ZGVGcmFtZU5hbWUgPSBTaG91bGROb3RJbmNsdWRlRnJhbWVOYW1lKQogewot
ICAgIGRvdWJsZSB4ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUoZnJhbWUsICJwYWdlWE9m
ZnNldCIpOwotICAgIGRvdWJsZSB5ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUoZnJhbWUs
ICJwYWdlWU9mZnNldCIpOworICAgIGRvdWJsZSB4ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5KGZy
YW1lLCAicGFnZVhPZmZzZXQiKTsKKyAgICBkb3VibGUgeSA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0
eShmcmFtZSwgInBhZ2VZT2Zmc2V0Iik7CiAgICAgaWYgKGZhYnMoeCkgPD0gMC4wMDAwMDAwMSAm
JiBmYWJzKHkpIDw9IDAuMDAwMDAwMDEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91
bGRJbmNsdWRlRnJhbWVOYW1lKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBu
YW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKKyAgICAgICAgYXV0
byBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSAnIik7CiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCInICIpOwpAQCAtNzk0LDcgKzcyMiw3IEBAIHN0YXRpYyB2b2lkIGR1bXBG
cmFtZVNjcm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXIm
IHN0cmluCiAKIHN0YXRpYyB2b2lkIGR1bXBEZXNjZW5kYW50RnJhbWVTY3JvbGxQb3NpdGlvbnMo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsK
LSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBjaGlsZEZyYW1lcyA9IGFkb3B0V0soV0tCdW5k
bGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOworICAgIGF1dG8gY2hpbGRGcmFtZXMgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsKICAgICBzaXplX3Qg
c2l6ZSA9IFdLQXJyYXlHZXRTaXplKGNoaWxkRnJhbWVzLmdldCgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIHN1YmZy
YW1lID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4
KGNoaWxkRnJhbWVzLmdldCgpLCBpKSk7CkBAIC04MTAsMjggKzczOCwxMCBAQCB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRpb25zKFN0cmluZ0J1aWxkZXIm
IHN0cmluZ0J1aWxkZQogICAgIGR1bXBEZXNjZW5kYW50RnJhbWVTY3JvbGxQb3NpdGlvbnMoZnJh
bWUsIHN0cmluZ0J1aWxkZXIpOwogfQogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IHRvSlMoY29uc3QgY2hhciogc3RyaW5nKQotewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKLX0KLQogc3RhdGljIGJvb2wgaGFzRG9jdW1l
bnRFbGVtZW50KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwot
ICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChj
b250ZXh0KTsKLQotICAgIEpTVmFsdWVSZWYgZG9jdW1lbnRWYWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkoY29udGV4dCwgZ2xvYmFsT2JqZWN0LCB0b0pTKCJkb2N1bWVudCIpLmdldCgpLCAwKTsK
LSAgICBpZiAoIWRvY3VtZW50VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFT
U0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgZG9jdW1lbnRWYWx1ZSkpOwotICAgIEpTT2Jq
ZWN0UmVmIGRvY3VtZW50ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGRvY3VtZW50VmFsdWUs
IDApOwotCi0gICAgSlNWYWx1ZVJlZiBkb2N1bWVudEVsZW1lbnRWYWx1ZSA9IEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwgZG9jdW1lbnQsIHRvSlMoImRvY3VtZW50RWxlbWVudCIpLmdldCgp
LCAwKTsKLSAgICBpZiAoIWRvY3VtZW50RWxlbWVudFZhbHVlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBkb2N1bWVudEVsZW1l
bnRWYWx1ZSk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0KGZyYW1lKTsKKyAgICByZXR1cm4gb2JqZWN0UHJvcGVydHkoY29udGV4dCwgSlNDb250
ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCB7ICJkb2N1bWVudCIsICJkb2N1bWVudEVsZW1l
bnQiIH0pOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCkBAIC04NTQsMTEgKzc2NCwxMSBAQCBzdGF0
aWMgdm9pZCBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxk
ZXImIGJ1aWxkZXIpCiAKIHN0YXRpYyB2b2lkIGR1bXBEZXNjZW5kYW50RnJhbWVzVGV4dChXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAg
IFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGNoaWxkRnJhbWVzID0gYWRvcHRXSyhXS0J1bmRsZUZy
YW1lQ29weUNoaWxkRnJhbWVzKGZyYW1lKSk7CisgICAgYXV0byBjaGlsZEZyYW1lcyA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOwogICAgIHNpemVfdCBzaXpl
ID0gV0tBcnJheUdldFNpemUoY2hpbGRGcmFtZXMuZ2V0KCkpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgc3ViZnJhbWUg
PSBzdGF0aWNfY2FzdDxXS0J1bmRsZUZyYW1lUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoY2hp
bGRGcmFtZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1
YmZyYW1lTmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKHN1YmZyYW1lKSk7Cisg
ICAgICAgIGF1dG8gc3ViZnJhbWVOYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUo
c3ViZnJhbWUpKTsKIAogICAgICAgICAvLyBEdW1wUmVuZGVyVHJlZSBpZ25vcmVzIGVtcHR5IGZy
YW1lcywgc28gZG8gdGhlIHNhbWUgdGhpbmcgaGVyZS4KICAgICAgICAgaWYgKCFoYXNEb2N1bWVu
dEVsZW1lbnQoc3ViZnJhbWUpKQpAQCAtODg0LDkgKzc5NCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkdW1wQWxsRnJhbWVzVGV4dChTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQog
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBET01Bc1dlYkFyY2hpdmUoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKICNpZiBVU0UoQ0Yp
ICYmICFQTEFURk9STShXSU5fQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCi0gICAgV0tSZXRhaW5Q
dHI8V0tEYXRhUmVmPiB3a0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5V2ViQXJjaGl2
ZShmcmFtZSkpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YSA9IGFkb3B0Q0YoQ0ZE
YXRhQ3JlYXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNpemUo
d2tEYXRhLmdldCgpKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZTdHJpbmcgPSBh
ZG9wdENGKFdlYkNvcmVUZXN0U3VwcG9ydDo6Y3JlYXRlWE1MU3RyaW5nRnJvbVdlYkFyY2hpdmVE
YXRhKGNmRGF0YS5nZXQoKSkpOworICAgIGF1dG8gd2tEYXRhID0gYWRvcHRXSyhXS0J1bmRsZUZy
YW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZE
YXRhQ3JlYXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNpemUo
d2tEYXRhLmdldCgpKSkpOworICAgIGF1dG8gY2ZTdHJpbmcgPSBhZG9wdENGKFdlYkNvcmVUZXN0
U3VwcG9ydDo6Y3JlYXRlWE1MU3RyaW5nRnJvbVdlYkFyY2hpdmVEYXRhKGNmRGF0YS5nZXQoKSkp
OwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNmU3RyaW5nLmdldCgpKTsKICNlbmRpZgogfQpA
QCAtOTAyLDkgKzgxMiw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKCkKICAgICBX
S0J1bmRsZVBhZ2VGbHVzaFBlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0ZShtX3BhZ2UpOwogCiAgICAg
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2Up
OwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmxSZWYgPSBhZG9wdFdLKFdLQnVuZGxlRnJh
bWVDb3B5VVJMKGZyYW1lKSk7CisgICAgYXV0byB1cmxSZWYgPSBhZG9wdFdLKFdLQnVuZGxlRnJh
bWVDb3B5VVJMKGZyYW1lKSk7CiAgICAgU3RyaW5nIHVybCA9IHRvV1RGU3RyaW5nKGFkb3B0V0so
V0tVUkxDb3B5U3RyaW5nKHVybFJlZi5nZXQoKSkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWltZVR5cGUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JSZXNv
dXJjZVdpdGhVUkwoZnJhbWUsIHVybFJlZi5nZXQoKSkpOworICAgIGF1dG8gbWltZVR5cGUgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JSZXNvdXJjZVdpdGhVUkwoZnJhbWUs
IHVybFJlZi5nZXQoKSkpOwogICAgIGlmICh1cmwuZmluZCgiZHVtcEFzVGV4dC8iKSAhPSBub3RG
b3VuZCB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1pbWVUeXBlLmdldCgpLCAidGV4
dC9wbGFpbiIpKQogICAgICAgICBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmR1bXBBc1Rl
eHQoZmFsc2UpOwogCkBAIC0xMDE4LDIxICs5MjgsMTkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tCdW5k
bGUKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0
SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQpOwotICAgIEpTT2JqZWN0UmVm
IHdpbmRvdyA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KTsKKyAgICBhdXRvIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwg
d29ybGQpOwogCiAgICAgaWYgKFdLQnVuZGxlU2NyaXB0V29ybGROb3JtYWxXb3JsZCgpICE9IHdv
cmxkKSB7Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93LCB0b0pT
KCJfX3dvcmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgVGVzdFJ1bm5l
cjo6d29ybGRJREZvcldvcmxkKHdvcmxkKSksIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHks
IDApOworICAgICAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAiX193b3JsZElE
IiwgVGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKHdvcmxkKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywg
JmV4Y2VwdGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuZ2NDb250cm9sbGVyKCktPm1ha2VXaW5k
b3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRs
ZS5ldmVudFNlbmRpbmdDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2lu
ZG93LCAmZXhjZXB0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS50ZXh0SW5wdXRDb250cm9sbGVy
KCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKKyAgICBp
bmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7Cisg
ICAgaW5qZWN0ZWRCdW5kbGUuZ2NDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4
dCk7CisgICAgaW5qZWN0ZWRCdW5kbGUuZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtlV2lu
ZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLnRleHRJbnB1dENvbnRyb2xs
ZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkp
Ci0gICAgaW5qZWN0ZWRCdW5kbGUuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+bWFrZVdpbmRv
d09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOworICAgIGluamVjdGVkQnVuZGxl
LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CiAj
ZW5kaWYKIAogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNv
bnRleHQpOwpAQCAtMTEzNiw3ICsxMDQ0LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRp
ZEluaXRpYXRlTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmQKICAg
ICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdL
VVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VS
TFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKICAgICBhc3NpZ25lZFVybHNDYWNoZSgpLmFkZChp
ZGVudGlmaWVyLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSkpOwogfQogCkBA
IC0xMTc1LDE2ICsxMDgzLDE2IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6
OndpbGxTZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgaWYgKGlu
amVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VS
TFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8gcmVkaXJlY3RVUkwgPSBhZG9w
dFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CiAgICAgaWYgKGluamVjdGVkQnVu
ZGxlLmlzVGVzdFJ1bm5pbmcoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndpbGxT
ZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCgpICYmIHJlZGlyZWN0VVJMKSB7CiAgICAg
ICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoIlJldHVybmluZyBudWxsIGZvciB0aGlzIHJl
ZGlyZWN0XG4iKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgV0tSZXRh
aW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3QgPSBhZG9wdFdLKFdLVVJMQ29w
eUhvc3ROYW1lKHVybC5nZXQoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY2hl
bWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdl
dCgpKSk7CisgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVz
dCkpOworICAgIGF1dG8gaG9zdCA9IGFkb3B0V0soV0tVUkxDb3B5SG9zdE5hbWUodXJsLmdldCgp
KSk7CisgICAgYXV0byBzY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkp
KTsKKyAgICBhdXRvIHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQo
KSkpOwogICAgIGlmIChob3N0ICYmICFXS1N0cmluZ0lzRW1wdHkoaG9zdC5nZXQoKSkKICAgICAg
ICAgJiYgaXNIVFRQT3JIVFRQU1NjaGVtZShzY2hlbWUuZ2V0KCkpCiAgICAgICAgICYmICFXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGhvc3QuZ2V0KCksICIyNTUuMjU1LjI1NS4yNTUiKSAv
LyBVc2VkIGluIHNvbWUgdGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJhY2sgYW4gZXJyb3IuCkBA
IC0xMTkyLDEyICsxMTAwLDEyIEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6
OndpbGxTZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgICAgIGJv
b2wgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGZhbHNlOwogICAgICAgICBpZiAoaW5qZWN0ZWRCdW5k
bGUuaXNUZXN0UnVubmluZygpKSB7CiAgICAgICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOwotICAgICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tVUkxSZWY+IG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNv
cHlVUkwobWFpbkZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG1haW5GcmFtZVVSTCA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7CiAgICAgICAgICAgICBpZiAoIW1h
aW5GcmFtZVVSTCB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGFkb3B0V0soV0tVUkxD
b3B5U3RyaW5nKG1haW5GcmFtZVVSTC5nZXQoKSkpLmdldCgpLCAiYWJvdXQ6YmxhbmsiKSkKICAg
ICAgICAgICAgICAgICBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJv
dmlzaW9uYWxVUkwobWFpbkZyYW1lKSk7CiAKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtYWluRnJhbWVIb3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFtZShtYWluRnJh
bWVVUkwuZ2V0KCkpKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtYWlu
RnJhbWVTY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShtYWluRnJhbWVVUkwuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGF1dG8gbWFpbkZyYW1lSG9zdCA9IGFkb3B0V0soV0tVUkxDb3B5SG9z
dE5hbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7CisgICAgICAgICAgICBhdXRvIG1haW5GcmFtZVNj
aGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKG1haW5GcmFtZVVSTC5nZXQoKSkpOwogICAg
ICAgICAgICAgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGlzSFRUUE9ySFRUUFNTY2hlbWUobWFpbkZy
YW1lU2NoZW1lLmdldCgpKSAmJiAhaXNMb2NhbEhvc3QobWFpbkZyYW1lSG9zdC5nZXQoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKCFtYWluRnJhbWVJc0V4dGVybmFsICYmICFpc0FsbG93ZWRI
b3N0KGhvc3QuZ2V0KCkpKSB7CkBAIC0xMjE0LDcgKzExMjIsNyBAQCBXS1VSTFJlcXVlc3RSZWYg
SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZQogICAgICAgICBTdHJpbmcgYm9keSA9IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+d2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHkoKTsKICAgICAgICAgaWYgKCFib2R5LmlzRW1wdHko
KSkgewogICAgICAgICAgICAgQ1N0cmluZyBjQm9keSA9IGJvZHkudXRmOCgpOwotICAgICAgICAg
ICAgV0tSZXRhaW5QdHI8V0tEYXRhUmVmPiBib2R5ID0gYWRvcHRXSyhXS0RhdGFDcmVhdGUocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY0JvZHkuZGF0YSgpKSwgY0JvZHku
bGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tEYXRhQ3JlYXRl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGNCb2R5LmRhdGEoKSksIGNC
b2R5Lmxlbmd0aCgpKSk7CiAgICAgICAgICAgICByZXR1cm4gV0tVUkxSZXF1ZXN0Q29weVNldHRp
bmdIVFRQQm9keShyZXF1ZXN0LCBib2R5LmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEy
NDIsOSArMTE1MCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlUmVzcG9u
c2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCCiAgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVz
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBh
ZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25l
bnQodXJsLmdldCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlU3Ry
aW5nID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHJlc3BvbnNlKSk7CisgICAg
YXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CisgICAg
YXV0byB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5n
ZXQoKSkpOworICAgIGF1dG8gbWltZVR5cGVTdHJpbmcgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VD
b3B5TUlNRVR5cGUocmVzcG9uc2UpKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKQEAg
LTEzNTAsMTAgKzEyNTgsOCBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgICAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiIC0gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblxuIik7CiAgICAgICAgIGR1
bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCwgc3RyaW5n
QnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIG1haW4g
ZnJhbWUgLSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV0tCdW5kbGVGcmFtZUlz
TWFpbkZyYW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXRTaG91bGRP
cGVuRXh0ZXJuYWxVUkxzKG5hdmlnYXRpb25BY3Rpb24pID8gInllcyIgOiAibm8iKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiBpcyBtYWluIGZyYW1lIC0gIiwgV0tCdW5kbGVGcmFt
ZUlzTWFpbkZyYW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIik7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5IC0gIiwgV0tCdW5kbGVOYXZp
Z2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9uKSA/
ICJ5ZXMiIDogIm5vIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAg
ICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CiAgICAgfQpAQCAtMTM2MSwyNCArMTI2NywyMSBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24g
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgog
ICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5pc1BvbGljeURlbGVnYXRlRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uUGFzc1Rocm91
Z2g7CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVl
c3RDb3B5VVJMKHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU2No
ZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CisgICAgYXV0byB1cmwg
PSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1dG8gdXJsU2No
ZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CiAKICAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJQ
b2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQgdG8gbG9hZCAiKTsKLSAgICBpZiAoaXNMb2NhbEZpbGVT
Y2hlbWUodXJsU2NoZW1lLmdldCgpKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZmlsZW5hbWUgPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQo
KSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhmaWxlbmFtZSkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJp
bmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgfQorICAgIGlmIChp
c0xvY2FsRmlsZVNjaGVtZSh1cmxTY2hlbWUuZ2V0KCkpKQorICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVy
bC5nZXQoKSkpKSk7CisgICAgZWxzZQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKSkpOwogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwnIik7CiAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoTmF2aWdhdGlvblR5cGVUb1N0cmluZyhX
S0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9u
KSkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwnIik7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmPiBoaXRUZXN0UmVzdWx0UmVmID0gYWRvcHRX
SyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25Db3B5SGl0VGVzdFJlc3VsdChuYXZpZ2F0aW9uQWN0
aW9uKSk7CisgICAgYXV0byBoaXRUZXN0UmVzdWx0UmVmID0gYWRvcHRXSyhXS0J1bmRsZU5hdmln
YXRpb25BY3Rpb25Db3B5SGl0VGVzdFJlc3VsdChuYXZpZ2F0aW9uQWN0aW9uKSk7CiAgICAgaWYg
KGhpdFRlc3RSZXN1bHRSZWYpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVOb2RlSGFu
ZGxlUmVmPiBub2RlSGFuZGxlUmVmID0gYWRvcHRXSyhXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5
Tm9kZUhhbmRsZShoaXRUZXN0UmVzdWx0UmVmLmdldCgpKSk7CisgICAgICAgIGF1dG8gbm9kZUhh
bmRsZVJlZiA9IGFkb3B0V0soV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0
VGVzdFJlc3VsdFJlZi5nZXQoKSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiBvcmlnaW5hdGluZyBmcm9tICIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChk
dW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGVIYW5kbGVSZWYuZ2V0KCkpKTsKICAg
ICB9CkBAIC0xNDAwLDEyICsxMzAzLDcgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVj
dGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoV0tCdW5kbGVQYWcKIHsKICAg
ICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAg
ICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpICYmIGluamVjdGVkQnVuZGxlLnRlc3RS
dW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSAmJiBXS1VSTFJlc3BvbnNlSXNBdHRh
Y2htZW50KHJlc3BvbnNlKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmaWxlbmFtZSA9IGFkb3B0V0soV0tV
UkxSZXNwb25zZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShyZXNwb25zZSkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlBvbGljeSBkZWxlZ2F0ZTogcmVzb3VyY2UgaXMgYW4g
YXR0YWNobWVudCwgc3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyhmaWxlbmFtZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIlwnXG4iKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWFrZVN0cmluZygiUG9saWN5IGRlbGVn
YXRlOiByZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIiwg
dG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKHJl
c3BvbnNlKSkpLCAiXCdcbiIpKTsKICAgICB9CiAKICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9s
aWN5QWN0aW9uUGFzc1Rocm91Z2g7CkBAIC0xNDcxLDEwICsxMzY5LDEwIEBAIHN0YXRpYyBXVEY6
OlN0cmluZyBhZGRMZWFkaW5nU3BhY2VTdHJpcFRyYWlsaW5nU3BhY2VzQWRkTmV3bGluZShjb25z
dCBXVEY6OlN0cmluCiAKIHN0YXRpYyBXVEY6OlN0cmluZyBsYXN0RmlsZVVSTFBhdGhDb21wb25l
bnQoY29uc3QgV1RGOjpTdHJpbmcmIHBhdGgpCiB7Ci0gICAgc2l6ZV90IHBvcyA9IHBhdGguZmlu
ZCgiZmlsZTovLyIpOworICAgIGF1dG8gcG9zID0gcGF0aC5maW5kKCJmaWxlOi8vIik7CiAgICAg
QVNTRVJUKFdURjo6bm90Rm91bmQgIT0gcG9zKTsKIAotICAgIFdURjo6U3RyaW5nIHRtcFBhdGgg
PSBwYXRoLnN1YnN0cmluZyhwb3MgKyA3KTsKKyAgICBhdXRvIHRtcFBhdGggPSBwYXRoLnN1YnN0
cmluZyhwb3MgKyA3KTsKICAgICBpZiAodG1wUGF0aC5sZW5ndGgoKSA8IDIpIC8vIEtlZXAgdGhl
IGxvbmUgc2xhc2ggdG8gYXZvaWQgZW1wdHkgb3V0cHV0LgogICAgICAgICByZXR1cm4gdG1wUGF0
aDsKIApAQCAtMTUyMSwxMSArMTQxOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxs
U2V0U3RhdHVzYmFyVGV4dChXS1N0cmluZ1JlZiBzdGF0dXNiYXJUZXh0KQogICAgIGlmICghaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzog
c2V0U3RhdHVzVGV4dDoiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhz
dGF0dXNiYXJUZXh0KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgaW5q
ZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGlu
amVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgU1RBVFVTIENB
TExCQUNLOiBzZXRTdGF0dXNUZXh0OiIsIHRvV1RGU3RyaW5nKHN0YXR1c2JhclRleHQpLCAnXG4n
KSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdEFsZXJ0
KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYpCkBAIC0xNTU5LDE1ICsxNDUz
LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlYWNoQXBwbGljYXRpb25DYWNoZU9y
aWdpblF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYKICAgICAgICAgLy8gUm91bmRpbmcgdXAgb3Ig
ZG93biBkb2VzIG5vdCByZWFsbHkgbWF0dGVyIGZvciB0aGVzZSB0ZXN0cy4gSXQncwogICAgICAg
ICAvLyBzdWZmaWNpZW50IHRvIGp1c3QgZ2V0IGEgcmFuZ2Ugb2YgMTAwMDAgdG8gZGV0ZXJtaW5l
IGlmIHdlIHdlcmUKICAgICAgICAgLy8gYWJvdmUgb3IgYmVsb3cgYSB0aHJlc2hvbGQuCi0gICAg
ICAgIGludDY0X3QgdHJ1bmNhdGVkU3BhY2VOZWVkZWQgPSAodG90YWxCeXRlc05lZWRlZCAvIDEw
MDAwKSAqIDEwMDAwOwotCi0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBBUFBMSUNBVElP
TiBDQUNIRSBDQUxMQkFDSzogZXhjZWVkZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFGb3JT
ZWN1cml0eU9yaWdpbjoiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VjdXJpdHlP
cmlnaW5Ub1N0cihvcmlnaW4pKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgdG90YWxTcGFjZU5lZWRlZDp+Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVt
YmVyKHRydW5jYXRlZFNwYWNlTmVlZGVkKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKKyAgICAgICAgYXV0byB0cnVuY2F0ZWRTcGFjZU5lZWRlZCA9ICh0b3RhbEJ5
dGVzTmVlZGVkIC8gMTAwMDApICogMTAwMDA7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1
dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgQVBQTElDQVRJT04gQ0FDSEUgQ0FMTEJBQ0s6
IGV4Y2VlZGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iiwg
c3RyaW5nKG9yaWdpbiksICIgdG90YWxTcGFjZU5lZWRlZDp+IiwgdHJ1bmNhdGVkU3BhY2VOZWVk
ZWQsICdcbicpKTsKICAgICB9CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5zaG91bGREaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkpCkBAIC0x
NTgwLDE1ICsxNDY3LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlYWNoQXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYKIHVpbnQ2NF90IEluamVj
dGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVm
IG9yaWdpbiwgV0tTdHJpbmdSZWYgZGF0YWJhc2VOYW1lLCBXS1N0cmluZ1JlZiBkYXRhYmFzZURp
c3BsYXlOYW1lLCB1aW50NjRfdCBjdXJyZW50UXVvdGFCeXRlcywgdWludDY0X3QgY3VycmVudE9y
aWdpblVzYWdlQnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnREYXRhYmFzZVVzYWdlQnl0ZXMsIHVpbnQ2
NF90IGV4cGVjdGVkVXNhZ2VCeXRlcykKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VRdW90YUZv
clNlY3VyaXR5T3JpZ2luOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZWN1cml0
eU9yaWdpblRvU3RyKG9yaWdpbikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiBkYXRhYmFzZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJp
bmcoZGF0YWJhc2VOYW1lKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwot
ICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KSk7Ci0gICAgfQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBEYXRhYmFzZUNhbGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0
KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFi
YXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiLCBzdHJpbmcob3JpZ2luKSwgIiBkYXRhYmFzZToi
LCB0b1dURlN0cmluZyhkYXRhYmFzZU5hbWUpLCAnXG4nKSk7CiAKICAgICB1aW50NjRfdCBkZWZh
dWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7CiAgICAgZG91YmxlIHRlc3REZWZhdWx0UXVvdGEg
PSBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmRhdGFiYXNlRGVmYXVsdFF1b3RhKCk7CkBA
IC0xNjAxLDEyICsxNDgxLDcgQEAgdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNl
ZWREYXRhYmFzZVF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luLAogICAgIGlmIChtYXhR
dW90YSA+PSAwKSB7CiAgICAgICAgIGlmIChkZWZhdWx0UXVvdGEgPCBleHBlY3RlZFVzYWdlQnl0
ZXMgJiYgZXhwZWN0ZWRVc2FnZUJ5dGVzIDw9IG1heFF1b3RhKSB7CiAgICAgICAgICAgICBuZXdR
dW90YSA9IGV4cGVjdGVkVXNhZ2VCeXRlczsKLQotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJV
SSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVhc2VkIHF1b3RhIHRvICIpOwotICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIobmV3UXVvdGEpOwotICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBpbmplY3RlZEJ1bmRs
ZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBpbmpl
Y3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIERBVEFCQVNFIENB
TExCQUNLOiBpbmNyZWFzZWQgcXVvdGEgdG8gIiwgbmV3UXVvdGEsICdcbicpKTsKICAgICAgICAg
fQogICAgIH0KICAgICByZXR1cm4gbmV3UXVvdGE7CkBAIC0xNjc1LDEzICsxNTUwLDggQEAgYm9v
bCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdGluZyhXS0J1bmRsZVJhbmdlSGFu
ZGxlUmVmIHJhbmdlKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBy
YW5nZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5q
ZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0K
KyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmco
IkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6IiwgcmFuZ2VU
b1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOwogICAgIHJldHVybiBp
bmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCkBA
IC0xNjkxLDEzICsxNTYxLDggQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEVuZEVk
aXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICBpZiAoIWluamVjdGVkQnVu
ZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5E
T01SYW5nZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3Bh
Z2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKSk7Ci0gICAgfQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgICAgIGluamVjdGVkQnVuZGxlLm91
dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0lu
RE9NUmFuZ2U6IiwgcmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xu
JykpOwogICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93
RWRpdGluZygpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCBhNjI1NTg5NzI3YmM3MWI3NDFlY2YyNTY1MTUy
MWVmYjRmNDk5N2YzLi4zMWU5YzUzMmQ4MDlhNzkzMGMwZDI4OWE5NTY0N2IzZmNlMDI0NmM1IDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXN0UnVubmVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAj
aW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2Uu
aCIKICNpbmNsdWRlICJKU1Rlc3RSdW5uZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcu
aCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ1Rlc3RSdW5uZXJVdGlscy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC02OSw3ICs2OSw3IEBA
IFJlZjxUZXN0UnVubmVyPiBUZXN0UnVubmVyOjpjcmVhdGUoKQogfQogCiBUZXN0UnVubmVyOjpU
ZXN0UnVubmVyKCkKLSAgICA6IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbihhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSkpCisgICAgOiBtX3VzZXJTdHlsZVNoZWV0TG9j
YXRpb24odG9XSygiIikpCiB7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiB9CkBAIC04Mywz
NCArODMsMTAyIEBAIEpTQ2xhc3NSZWYgVGVzdFJ1bm5lcjo6d3JhcHBlckNsYXNzKCkKICAgICBy
ZXR1cm4gSlNUZXN0UnVubmVyOjp0ZXN0UnVubmVyQ2xhc3MoKTsKIH0KIAorc3RhdGljIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlKCkKK3sKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOworfQorCitzdGF0aWMgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUoKQoreworICAgIHJldHVybiBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSgpKTsKK30K
Kworc3RhdGljIEpTQ29udGV4dFJlZiBtYWluSlNDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSgpKTsKK30KKwogdm9pZCBU
ZXN0UnVubmVyOjpkaXNwbGF5KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZVBhZ2VG
b3JjZVJlcGFpbnQocGFnZSk7CisgICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KHBhZ2UoKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheUFuZFRyYWNrUmVwYWludHMoKQogewotICAg
IFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IFdUUjo6cGFnZSgpOwogICAgIFdLQnVuZGxlUGFn
ZUZvcmNlUmVwYWludChwYWdlKTsKICAgICBXS0J1bmRsZVBhZ2VTZXRUcmFja3NSZXBhaW50cyhw
YWdlLCB0cnVlKTsKICAgICBXS0J1bmRsZVBhZ2VSZXNldFRyYWNrZWRSZXBhaW50cyhwYWdlKTsK
IH0KIAorc3RhdGljIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB0b1dLKGRvdWJsZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpOworfQorCitzdGF0
aWMgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBjcmVhdGVXS0RpY3Rpb25hcnkoc3RkOjpp
bml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxjb25zdCBjaGFyKiwgV0tSZXRhaW5QdHI8V0tUeXBl
UmVmPj4+IHBhaXJzKQoreworICAgIGF1dG8gc2l6ZSA9IHBhaXJzLnNpemUoKTsKKyAgICBWZWN0
b3I8V0tTdHJpbmdSZWY+IGtleXMoc2l6ZSk7CisgICAgVmVjdG9yPFdLVHlwZVJlZj4gdmFsdWVz
KHNpemUpOworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IHN0cmluZ3Moc2l6
ZSk7CisgICAgZm9yIChhdXRvJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgYXV0byBrZXkgPSB0
b1dLKHBhaXIuZmlyc3QpOworICAgICAgICBrZXlzLmFwcGVuZChrZXkuZ2V0KCkpOworICAgICAg
ICB2YWx1ZXMuYXBwZW5kKHBhaXIuc2Vjb25kLmdldCgpKTsKKyAgICAgICAgc3RyaW5ncy5hcHBl
bmQoV1RGTW92ZShrZXkpKTsKKyAgICB9CisgICAgcmV0dXJuIGFkb3B0V0soV0tEaWN0aW9uYXJ5
Q3JlYXRlKGtleXMuZGF0YSgpLCB2YWx1ZXMuZGF0YSgpLCBzaXplKSk7Cit9CisKK3N0YXRpYyBX
S1JldGFpblB0cjxXS1R5cGVSZWY+IHBvc3RTeW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0dXJuVmFs
dWUoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICBX
S1R5cGVSZWYgcmF3UmV0dXJuVmFsdWUgPSBudWxscHRyOworICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0so
bmFtZSkuZ2V0KCksIHZhbHVlLCAmcmF3UmV0dXJuVmFsdWUpOworICAgIHJldHVybiBhZG9wdFdL
KHJhd1JldHVyblZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4oY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVs
bHB0cikKK3sKKyAgICByZXR1cm4gYm9vbGVhblZhbHVlKHBvc3RTeW5jaHJvbm91c01lc3NhZ2VX
aXRoUmV0dXJuVmFsdWUobmFtZSwgdmFsdWUpKTsKK30KKworc3RhdGljIFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRoUmV0dXJuVmFsdWUoY29uc3Qg
Y2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICBXS1R5cGVSZWYg
cmF3UmV0dXJuVmFsdWUgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUsICZyYXdS
ZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIGFkb3B0V0socmF3UmV0dXJuVmFsdWUpOworfQorCitz
dGF0aWMgYm9vbCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oY29u
c3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICByZXR1cm4g
Ym9vbGVhblZhbHVlKHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5h
bWUsIHZhbHVlKSk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZVJldHVybmluZ1VJbnQ2NChjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBu
dWxscHRyKQoreworICAgIHJldHVybiB1aW50NjRWYWx1ZShwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQorCitzdGF0aWMgdWludDY0X3Qg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2NChjb25zdCBjaGFyKiBuYW1lKQor
eworICAgIHJldHVybiB1aW50NjRWYWx1ZShwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVy
blZhbHVlKG5hbWUpKTsKK30KKworc3RhdGljIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0
IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgYXV0byYgYnVuZGxlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZv
clRlc3RSdW5uZXIoYnVuZGxlLmJ1bmRsZSgpLCBidW5kbGUucGFnZUdyb3VwKCksIHRvV0sobmFt
ZSkuZ2V0KCksIHZhbHVlKTsKK30KKwogYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wUGl4ZWxz
KCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXREdW1wUGl4ZWxzIikpOwot
ICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5
cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdL
Qm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5E
YXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5n
Qm9vbGVhbigiR2V0RHVtcFBpeGVscyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldER1bXBQ
aXhlbHMoYm9vbCBkdW1wUGl4ZWxzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldER1
bXBQaXhlbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGR1bXBQaXhlbHMpKTsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIlNldER1bXBQaXhlbHMiLCBkdW1wUGl4ZWxzKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpkdW1wQXNUZXh0KGJvb2wgZHVtcFBpeGVscykKQEAgLTEyMiwxOCArMTkw
LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dChib29sIGR1bXBQaXhlbHMpCiAgICAg
CiBXaGF0VG9EdW1wIFRlc3RSdW5uZXI6OndoYXRUb0R1bXAoKSBjb25zdAogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkdldFdoYXRUb0R1bXAiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRh
dGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
LCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdL
VUludDY0R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXaGF0VG9EdW1wPihX
S1VJbnQ2NEdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVybkRh
dGEpKS5nZXQoKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXaGF0VG9EdW1wPihwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KCJHZXRXaGF0VG9EdW1wIikpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFdoYXRUb0R1bXAoV2hhdFRvRHVtcCB3aGF0VG9EdW1wKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFdoYXRUb0R1bXAiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzdGF0
aWNfY2FzdDx1aW50NjRfdD4od2hhdFRvRHVtcCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlNldFdoYXRUb0R1bXAiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4od2hhdFRv
RHVtcCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJv
b2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQpAQCAtMTU4LDI2ICsyMjAsMTkgQEAgdm9pZCBU
ZXN0UnVubmVyOjp3YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCkKIAogdm9pZCBUZXN0UnVubmVy
Ojp3YWl0VW50aWxEb25lKCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmplY3RlZEJ1bmRsZS5p
c1Rlc3RSdW5uaW5nKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpOwogCiAgICAgc2V0V2FpdFVudGlsRG9uZSh0cnVlKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VW50aWxEb25lKGJvb2wgdmFsdWUpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0V2FpdFVudGlsRG9uZSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFdhaXRVbnRp
bERvbmUiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkV2FpdFVudGlsRG9u
ZSgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldFdhaXRVbnRpbERvbmUi
KSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChX
S0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0
dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihy
ZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0
dXJuaW5nQm9vbGVhbigiR2V0V2FpdFVudGlsRG9uZSIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
Om5vdGlmeURvbmUoKQpAQCAtMjEwLDE4ICsyNjUsMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpmb3Jj
ZUltbWVkaWF0ZUNvbXBsZXRpb24oKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZER1bXBG
cmFtZUxvYWRDYWxsYmFja3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXREdW1wRnJhbWVMb2FkQ2FsbGJh
Y2tzIiwgdmFsdWUpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OnNob3VsZER1bXBGcmFtZUxvYWRD
YWxsYmFja3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKTsKIH0K
IAogdW5zaWduZWQgVGVzdFJ1bm5lcjo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSBj
b25zdApAQCAtMjMxLDE4ICsyODAsMTQgQEAgdW5zaWduZWQgVGVzdFJ1bm5lcjo6aW1hZ2VDb3Vu
dEluR2VuZXJhbFBhc3RlYm9hcmQoKSBjb25zdAogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJT
Y3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVz
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3VyY2VXSyA9IHRvV0soc291cmNl
KTsKLQotICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTY3JpcHQoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBzb3VyY2VXSy5nZXQoKSwKKyAgICBXS0J1bmRsZVBhZ2VB
ZGRVc2VyU2NyaXB0KHBhZ2UoKSwgdG9XSyhzb3VyY2UpLmdldCgpLAogICAgICAgICAocnVuQXRT
dGFydCA/IGtXS0luamVjdEF0RG9jdW1lbnRTdGFydCA6IGtXS0luamVjdEF0RG9jdW1lbnRFbmQp
LAogICAgICAgICAoYWxsRnJhbWVzID8ga1dLSW5qZWN0SW5BbGxGcmFtZXMgOiBrV0tJbmplY3RJ
blRvcEZyYW1lT25seSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0
KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHNvdXJjZVdLID0gdG9XSyhzb3VyY2UpOwotCi0gICAgV0tCdW5kbGVQYWdl
QWRkVXNlclN0eWxlU2hlZXQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBzb3VyY2VXSy5nZXQoKSwKKyAgICBXS0J1bmRsZVBhZ2VBZGRVc2VyU3R5bGVTaGVldChw
YWdlKCksIHRvV0soc291cmNlKS5nZXQoKSwKICAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVj
dEluQWxsRnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsKIH0KIApAQCAtMjUzLDI5
ICsyOTgsMTcgQEAgdm9pZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgpCiAKIHZvaWQgVGVz
dFJ1bm5lcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgc2hvd1VJ
LCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0Nv
bW1hbmQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5h
bWUpLmdldCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlRXhlY3V0ZUVk
aXRpbmdDb21tYW5kKHBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyh2YWx1ZSkuZ2V0KCkp
OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8V0tGaW5kT3B0aW9ucz4gZmluZE9wdGlvbnNGcm9tQXJy
YXkoSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogewotICAgIGF1dG8mIGluamVjdGVk
QnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBh
Z2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlO
YW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAg
ICBKU09iamVjdFJlZiBvcHRpb25zQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3B0
aW9uc0FycmF5QXNWYWx1ZSwgMCk7Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUu
Z2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVl
KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQorICAgIGF1dG8gY29udGV4dCA9IG1h
aW5KU0NvbnRleHQoKTsKKyAgICBhdXRvIG9wdGlvbnNBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBvcHRpb25zQXJyYXlBc1ZhbHVlLCBudWxscHRyKTsKKyAgICBhdXRvIGxlbmd0aCA9
IGFycmF5TGVuZ3RoKGNvbnRleHQsIG9wdGlvbnNBcnJheSk7CiAgICAgV0tGaW5kT3B0aW9ucyBv
cHRpb25zID0gMDsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApOwotICAg
ICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBhdXRvIG9wdGlvbk5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7Ci0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byBvcHRpb25OYW1lID0gY3JlYXRlSlNTdHJp
bmcoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0Fy
cmF5LCBpLCAwKSk7CiAgICAgICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9w
dGlvbk5hbWUuZ2V0KCksICJDYXNlSW5zZW5zaXRpdmUiKSkKICAgICAgICAgICAgIG9wdGlvbnMg
fD0ga1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7CiAgICAgICAgIGVsc2UgaWYgKEpTU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkF0V29yZFN0YXJ0cyIp
KQpAQCAtMjk2LDcgKzMyOSw3IEBAIHN0YXRpYyBPcHRpb25hbDxXS0ZpbmRPcHRpb25zPiBmaW5k
T3B0aW9uc0Zyb21BcnJheShKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFzVmFsCiBib29sIFRlc3RS
dW5uZXI6OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVmIG9wdGlvbnNB
cnJheUFzVmFsdWUpCiB7CiAgICAgaWYgKGF1dG8gb3B0aW9ucyA9IGZpbmRPcHRpb25zRnJvbUFy
cmF5KG9wdGlvbnNBcnJheUFzVmFsdWUpKQotICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmlu
ZFN0cmluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0so
dGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMpOworICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmlu
ZFN0cmluZyhwYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMpOwogCiAgICAgcmV0
dXJuIGZhbHNlOwogfQpAQCAtMzA0LDI4ICszMzcsMjMgQEAgYm9vbCBUZXN0UnVubmVyOjpmaW5k
U3RyaW5nKEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVl
KQogdm9pZCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nTWF0Y2hlc0luUGFnZShKU1N0cmluZ1JlZiB0
YXJnZXQsIEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHsKICAgICBpZiAoYXV0byBv
cHRpb25zID0gZmluZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9uc0FycmF5QXNWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nTWF0Y2hlcyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMp
OworICAgICAgICBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nTWF0Y2hlcyhwYWdlKCksIHRvV0sodGFy
Z2V0KS5nZXQoKSwgKm9wdGlvbnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlcGxhY2VGaW5k
TWF0Y2hlc0F0SW5kaWNlcyhKU1ZhbHVlUmVmIG1hdGNoSW5kaWNlc0FzVmFsdWUsIEpTU3RyaW5n
UmVmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCBzZWxlY3Rpb25Pbmx5KQogewogICAgIGF1dG8mIGJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBhdXRvIG1haW5GcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShidW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIGF1
dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUp
OwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0
KCk7CiAgICAgYXV0byBtYXRjaEluZGljZXNPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCwgbWF0Y2hJbmRpY2VzQXNWYWx1ZSwgMCk7Ci0gICAgYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0LCBsZW5ndGhQcm9wZXJ0
eU5hbWUuZ2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0
aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gbGVuZ3RoID0gYXJyYXlMZW5ndGgo
Y29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0KTsKIAogICAgIGF1dG8gaW5kaWNlcyA9IGFkb3B0
V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG1hdGNoSW5kaWNlc09iamVj
dCwgaSwgMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBt
YXRjaEluZGljZXNPYmplY3QsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFsdWVJc051
bWJlcihjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBh
dXRvIGluZGV4ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzdGQ6OnJvdW5kKEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpKSk7CisgICAgICAgIGF1dG8gaW5kZXggPSBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVs
bHB0cikpKTsKICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oaW5kaWNlcy5nZXQoKSwgaW5kZXgu
Z2V0KCkpOwogICAgIH0KICAgICBXS0J1bmRsZVBhZ2VSZXBsYWNlU3RyaW5nTWF0Y2hlcyhidW5k
bGUucGFnZSgpLT5wYWdlKCksIGluZGljZXMuZ2V0KCksIHRvV0socmVwbGFjZW1lbnRUZXh0KS5n
ZXQoKSwgc2VsZWN0aW9uT25seSk7CkBAIC0zMzQsMTEgKzM2Miw3IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6cmVwbGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKEpTVmFsdWVSZWYgbWF0Y2hJbmRpY2VzQXNW
YWx1ZSwgSlNTCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKICAgICBX
S0J1bmRsZUNsZWFyQWxsRGF0YWJhc2VzKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEZWxldGVBbGxJbmRleGVkRGF0YWJh
c2VzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIkRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMiLCB0cnVlKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1b3RhKQpAQCAtMzQ4LDI5ICsz
NzIsMjcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1b3Rh
KQogCiB2b2lkIFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN5bmNMb2NhbFN0b3JhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN5bmNMb2NhbFN0b3JhZ2UiLCB0cnVl
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKIHsK
LSAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGUoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0
aW9uQ2FjaGUocGFnZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9u
Q2FjaGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLQnVuZGxlUGFnZUNs
ZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlQ2xl
YXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKHBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVpbnQ2NF90IHNp
emUpCiB7Ci0gICAgV0tCdW5kbGVQYWdlU2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHNpemUpOworICAgIFdLQnVuZGxlUGFn
ZVNldEFwcENhY2hlTWF4aW11bVNpemUocGFnZSgpLCBzaXplKTsKIH0KIAogbG9uZyBsb25nIFRl
c3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYg
b3JpZ2luKQogewotICAgIHJldHVybiBXS0J1bmRsZVBhZ2VHZXRBcHBDYWNoZVVzYWdlRm9yT3Jp
Z2luKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhvcmln
aW4pLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlR2V0QXBwQ2FjaGVVc2FnZUZvck9y
aWdpbihwYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpCkBAIC0zODEsMTU4ICs0
MDMsMTA4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9u
Q2FjaGVRdW90YSgpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWVSZWYgc3RyaW5nQXJyYXlUb0pTKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBXS0FycmF5UmVmIHN0cmluZ3MpCiB7CiAgICAgY29uc3Qgc2l6
ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUoc3RyaW5ncyk7Ci0KLSAgICBKU1ZhbHVlUmVmIGFy
cmF5UmVzdWx0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7Ci0gICAgSlNP
YmplY3RSZWYgYXJyYXlPYmogPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJyYXlSZXN1bHQs
IDApOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCBu
dWxscHRyKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgc3RyaW5nUmVmID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJy
YXlHZXRJdGVtQXRJbmRleChzdHJpbmdzLCBpKSk7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBzdHJpbmdKUyA9IHRvSlMoc3RyaW5nUmVmKTsKLSAgICAgICAgSlNPYmplY3RTZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXlPYmosIGksIEpTVmFsdWVNYWtlU3RyaW5nKGNv
bnRleHQsIHN0cmluZ0pTLmdldCgpKSwgMCk7CisgICAgICAgIGF1dG8gc3RyaW5nUmVmID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChzdHJpbmdzLCBpKSk7
CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBK
U1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHN0cmluZ1JlZikuZ2V0KCkpLCBudWxscHRy
KTsKICAgICB9Ci0KLSAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgcmV0dXJuIGFycmF5Owog
fQogCiBKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZSgp
CiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBvcmlnaW5z
ID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKHBh
Z2UpKTsKLQotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nQXJy
YXlUb0pTKGNvbnRleHQsIG9yaWdpbnMuZ2V0KCkpOworICAgIHJldHVybiBzdHJpbmdBcnJheVRv
SlMobWFpbkpTQ29udGV4dCgpLCBhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlPcmlnaW5zV2l0aEFw
cGxpY2F0aW9uQ2FjaGUocGFnZSgpKSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6Omlz
Q29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVQ
YWdlSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdl
SXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQocGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldENhbk9wZW5XaW5kb3dzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0Q2FuT3BlbldpbmRvd3MiLCB0cnVl
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFhTU0F1ZGl0b3JFbmFibGVkIikpOwotICAg
IGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAg
IFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5k
bGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJs
ZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxl
ZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1lZGlhRGV2aWNlc0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRNZWRpYURldmljZXNF
bmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5u
ZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBr
ZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRN
ZWRpYURldmljZXNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiV2ViS2l0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkIikpOwotICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdL
QnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUu
YnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQp
OworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJSVENNRE5TSUNFQ2FuZGlk
YXRlc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRDdXN0b21V
c2VyQWdlbnQoSlNTdHJpbmdSZWYgdXNlckFnZW50KQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldEN1c3RvbVVzZXJBZ2VudCIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgdG9XSyh1c2VyQWdlbnQpLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTZXRDdXN0b21Vc2VyQWdlbnQiLCB0b1dLKHVzZXJBZ2VudCkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5h
YmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V2ViQVBJU3RhdGlzdGljc0VuYWJsZWQi
KSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmpl
Y3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQo
KSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkFQSVN0
YXRpc3RpY3NFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9k
ZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3Rl
ZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJy
aWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBp
bmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6
Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCBl
bmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXZWJHTDJFbmFibGVkKGJvb2wgZW5h
YmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V2ViR0wyRW5hYmxlZCIpKTsKLSAgICBh
dXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBX
S0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxl
LmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVk
KTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViR0wyRW5hYmxlZCIsIGVu
YWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxl
ZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdyaXRhYmxlU3RyZWFt
QVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0
UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAo
KSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2Vi
S2l0V3JpdGFibGVTdHJlYW1BUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0VHJhbnNmb3JtU3RyZWFtQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIldlYktpdFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0
byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tC
dW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5i
dW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7
CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFRyYW5zZm9ybVN0cmVhbUFQSUVu
YWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRSZWFkYWJsZUJ5dGVT
dHJlYW1BUElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0
UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3Rl
ZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCIsIGVuYWJs
ZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZChi
b29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdEVuY3J5cHRlZE1lZGlhQVBJ
RW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVu
bmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwg
a2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0
RW5jcnlwdGVkTWVkaWFBUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJXZWJLaXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRv
JiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1
bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1
bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsK
KyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0UGljdHVyZUluUGljdHVyZUFQSUVu
YWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW5lcmljQ3VlQVBJ
RW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdEdlbmVyaWND
dWVBUElFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRl
c3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91
cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJX
ZWJLaXRHZW5lcmljQ3VlQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBhdXRv
JiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBpbmpl
Y3RlZEJ1bmRsZS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShlbmFibGVkKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShlbmFibGVkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGVuYWJsZWQpOworICAgIHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSIsIGVuYWJsZWQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uKGJvb2wgc2hvdWxkU3dhcCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShzaG91bGRTd2FwKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoIlNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHRO
YXZpZ2F0aW9uIiwgc2hvdWxkU3dhcCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxk
U3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJvb2wgc2hvdWxkU3dhcCkKIHsK
LSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9u
T25OZXh0TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkU3dhcCkpOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVkQnVuZGxlLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRTaG91bGRTd2FwVG9EZWZh
dWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iLCBzaG91bGRTd2FwKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQp
CkBAIC01NTUsOSArNTI3LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXROZWVkc1N0b3JhZ2VBY2Nl
c3NGcm9tRmlsZVVSTHNRdWlyayhib29sIG5lZWRzUXVpcmspCiAgICAgCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
V2ViS2l0UGx1Z2luc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJl
bmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUu
cGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZl
cmVuY2UoIldlYktpdFBsdWdpbnNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZWQpCkBAIC01
OTEsOCArNTYxLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NBbGxvd0xp
c3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3QKIGJvb2wgVGVzdFJ1bm5lcjo6
aXNQYWdlQm94VmlzaWJsZShpbnQgcGFnZUluZGV4KQogewogICAgIGF1dG8mIGluamVjdGVkQnVu
ZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYg
bWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2Uo
KS0+cGFnZSgpKTsKLSAgICByZXR1cm4gV0tCdW5kbGVJc1BhZ2VCb3hWaXNpYmxlKGluamVjdGVk
QnVuZGxlLmJ1bmRsZSgpLCBtYWluRnJhbWUsIHBhZ2VJbmRleCk7CisgICAgcmV0dXJuIFdLQnVu
ZGxlSXNQYWdlQm94VmlzaWJsZShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkZyYW1lKCks
IHBhZ2VJbmRleCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyaW5nUmVmIHZhbHVlKQpA
QCAtNjAwLDE2ICs1NjksMTQgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHIKICAgICBpZiAoIWVs
ZW1lbnQgfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBlbGVtZW50KSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVOb2RlSGFuZGxlUmVmPiBub2RlSGFuZGxl
ID0gYWRvcHRXSyhXS0J1bmRsZU5vZGVIYW5kbGVDcmVhdGUoY29udGV4dCwgY29uc3RfY2FzdDxK
U09iamVjdFJlZj4oZWxlbWVudCkpKTsKLSAgICBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5w
dXRFbGVtZW50VmFsdWVGb3JVc2VyKG5vZGVIYW5kbGUuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgp
KTsKKyAgICBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JVc2Vy
KGFkb3B0V0soV0tCdW5kbGVOb2RlSGFuZGxlQ3JlYXRlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNP
YmplY3RSZWY+KGVsZW1lbnQpKSkuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRBdWRpb1Jlc3VsdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1
ZVJlZiBkYXRhKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpOwogICAgIC8vIEZJWE1FICgxMjMwNTgpOiBVc2UgYSBKU0MgQVBJIHRvIGdl
dCBidWZmZXIgY29udGVudHMgb25jZSBzdWNoIGlzIGV4cG9zZWQuCi0gICAgV0tSZXRhaW5QdHI8
V0tEYXRhUmVmPiBhdWRpb0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJ
bnQ4QXJyYXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKTsKLSAgICBp
bmplY3RlZEJ1bmRsZS5zZXRBdWRpb1Jlc3VsdChhdWRpb0RhdGEuZ2V0KCkpOworICAgIGluamVj
dGVkQnVuZGxlLnNldEF1ZGlvUmVzdWx0KGFkb3B0V0soV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9t
VUludDhBcnJheShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgY29udGV4dCwgZGF0YSkpLmdldCgp
KTsKICAgICBzZXRXaGF0VG9EdW1wKFdoYXRUb0R1bXA6OkF1ZGlvKTsKICAgICBzZXREdW1wUGl4
ZWxzKGZhbHNlKTsKIH0KQEAgLTYyMSwzMyArNTg4LDMwIEBAIHVuc2lnbmVkIFRlc3RSdW5uZXI6
OndpbmRvd0NvdW50KCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgp
CiB7Ci0gICAgV0tCdW5kbGVDbGVhckhpc3RvcnlGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVDbGVhckhpc3RvcnlGb3JU
ZXN0aW5nKHBhZ2UoKSk7CiB9CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIFRlc3RSdW5u
ZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdp
bmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXN0UnVubmVyOjptYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNv
bnRleHQsIHdpbmRvd09iamVjdCwgInRlc3RSdW5uZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24p
OworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJ0ZXN0UnVubmVyIiwgdGhp
cyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3RvcigpCiB7Ci0gICAgV0tC
dW5kbGVJbnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvclNo
b3coV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKLSAgICBXS0J1bmRsZUluc3BlY3RvckNsb3NlKFdL
QnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvckNsb3NlKFdLQnVuZGxlUGFnZUdldElu
c3BlY3RvcihwYWdlKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZUluV2ViSW5z
cGVjdG9yKEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc2NyaXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgV0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0
ZVNjcmlwdEZvclRlc3QoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSksIHNjcmlwdFdLLmdldCgpKTsKKyAgICBXS0J1bmRs
ZUluc3BlY3RvckV2YWx1YXRlU2NyaXB0Rm9yVGVzdChXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3Io
cGFnZSgpKSwgdG9XSyhzY3JpcHQpLmdldCgpKTsKIH0KIAotdHlwZWRlZiBXVEY6Okhhc2hNYXA8
dW5zaWduZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+ID4gV29ybGRNYXA7
Cit1c2luZyBXb3JsZE1hcCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgV0tSZXRhaW5QdHI8V0tC
dW5kbGVTY3JpcHRXb3JsZFJlZj4+Owogc3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCiB7CiAg
ICAgc3RhdGljIFdvcmxkTWFwJiBtYXAgPSAqbmV3IFdvcmxkTWFwOwpAQCAtNjU2LDEyICs2MjAs
MTEgQEAgc3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6
OndvcmxkSURGb3JXb3JsZChXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQogewotICAgIFdv
cmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwotICAgIGZvciAo
V29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKLSAgICAgICAgICAg
IHJldHVybiBpdC0+a2V5OworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRoZSBhbnRpLXBhdHRlcm4g
b2YgaXRlcmF0aW5nIGFuIGVudGlyZSBtYXAuIFR5cGljYWxseSB3ZSB1c2UgYSBwYWlyIG9mIG1h
cHMgb3IganVzdCBhIHZlY3RvciBpbiBhIGNhc2UgbGlrZSB0aGlzLgorICAgIGZvciAoYXV0byYg
bWFwRW50cnkgOiB3b3JsZE1hcCgpKSB7CisgICAgICAgIGlmIChtYXBFbnRyeS52YWx1ZSA9PSB3
b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBtYXBFbnRyeS5rZXk7CiAgICAgfQotCiAgICAgcmV0
dXJuIDA7CiB9CiAKQEAgLTY4MSw3ICs2NDQsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkKEpTQ29udGV4dFJlZiBjb250ZXh0LCB1bnNpZ25lZCB3bwog
CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlRnJhbWVGb3JKYXZhU2NyaXB0
Q29udGV4dChjb250ZXh0KTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICBmcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCkpOworICAgICAgICBmcmFtZSA9IG1haW5GcmFtZSgpOwogCiAgICAgSlNHbG9iYWxDb250
ZXh0UmVmIGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldv
cmxkKGZyYW1lLCB3b3JsZC5nZXQoKSk7CiAgICAgSlNFdmFsdWF0ZVNjcmlwdChqc0NvbnRleHQs
IHNjcmlwdCwgMCwgMCwgMCwgMCk7IApAQCAtNjk2LDggKzY1OSw3IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0UE9TSVhMb2NhbGUoSlNTdHJpbmdSZWYgbG9jYWxlKQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQogewotICAgIFdLQnVuZGxl
RnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlRnJh
bWVTZXRUZXh0RGlyZWN0aW9uKG1haW5GcmFtZSwgdG9XSyhkaXJlY3Rpb24pLmdldCgpKTsKKyAg
ICByZXR1cm4gV0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24obWFpbkZyYW1lKCksIHRvV0so
ZGlyZWN0aW9uKS5nZXQoKSk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN0
YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGJvb2wgc2hvdWxkU3RheU9uUGFnZSkK
QEAgLTcwNywxNyArNjY5LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFn
ZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoYm9vbCBzaG91bGRTdGF5T25QCiAKIGJvb2wgVGVz
dFJ1bm5lcjo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9u
KCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEaWRSZWNlaXZlU2VydmVyUmVk
aXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRh
dGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBl
SUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jv
b2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0
YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5p
bmdCb29sZWFuKCJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRp
b24iKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVj
dEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Q2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSk7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkNsZWFy
RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIik7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoSlNTdHJpbmdSZWYgc3RhdGUpCkBA
IC03MzAsNyArNjg3LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkK
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGZhbHNlKTsKIH0KIAot
dHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFwOwor
dXNpbmcgQ2FsbGJhY2tNYXAgPSBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTT2JqZWN0UmVmPjsK
IHN0YXRpYyBDYWxsYmFja01hcCYgY2FsbGJhY2tNYXAoKQogewogICAgIHN0YXRpYyBDYWxsYmFj
a01hcCYgbWFwID0gKm5ldyBDYWxsYmFja01hcDsKQEAgLTc4MywzOCArNzQwLDMyIEBAIHN0YXRp
YyB2b2lkIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVm
IGNhbGxiYWNrKQogewogICAgIGlmICghY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKLQorICAg
IGF1dG8gY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKKyAgICBpZiAoIUpTVmFsdWVJc09iamVj
dChjb250ZXh0LCBjYWxsYmFjaykpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoY2FsbGJhY2tN
YXAoKS5jb250YWlucyhpbmRleCkpIHsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLm91dHB1dFRleHQobWFrZVN0cmluZygiRkFJTDogVHJpZWQgdG8gaW5zdGFsbCBhIHNlY29u
ZCBUZXN0UnVubmVyIGNhbGxiYWNrIGZvciB0aGUgc2FtZSBldmVudCAoaWQgIiwgaW5kZXgsICIp
XG5cbiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIFdLQnVuZGxlRnJhbWVSZWYg
bWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICAgICBKU1ZhbHVlUHJv
dGVjdChjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgY2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNh
bGxiYWNrKTsKKyAgICBjYWxsYmFja01hcCgpLmFkZChpbmRleCwgY29uc3RfY2FzdDxKU09iamVj
dFJlZj4oY2FsbGJhY2spKTsKIH0KIAogc3RhdGljIHZvaWQgY2FsbFRlc3RSdW5uZXJDYWxsYmFj
ayh1bnNpZ25lZCBpbmRleCwgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSAwLCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdID0gbnVsbHB0cikKIHsKLSAgICBpZiAoIWNhbGxiYWNrTWFwKCkuY29u
dGFpbnMoaW5kZXgpKQorICAgIGF1dG8gY2FsbGJhY2sgPSBjYWxsYmFja01hcCgpLnRha2UoaW5k
ZXgpOworICAgIGlmICghY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKLSAgICBXS0J1bmRsZUZy
YW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgSlNP
YmplY3RSZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgY2FsbGJhY2tNYXAo
KS50YWtlKGluZGV4KSwgMCk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwog
ICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdl
dEdsb2JhbE9iamVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCAwKTsKICAg
ICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MoKQogewotICAgIGZvciAoYXV0byYgaXRlciA6
IGNhbGxiYWNrTWFwKCkpIHsKLSAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBX
S0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpKTsKLSAgICAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1l
R2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAgICAgSlNPYmplY3RSZWYgY2Fs
bGJhY2sgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgaXRlci52YWx1ZSwgMCk7Ci0gICAgICAg
IEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIH0KLQorICAgIGF1dG8g
Y29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogY2FsbGJh
Y2tNYXAoKS52YWx1ZXMoKSkKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBKU1Zh
bHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKICAgICBjYWxsYmFja01hcCgp
LmNsZWFyKCk7CiB9CiAKQEAgLTg5NCwyMCArODQ1LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6b3Zl
cnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVmIHZhbHVl
KQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhY2NlcHQp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWx3YXlzQWNjZXB0Q29va2llcyIpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShhY2NlcHQpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiU2V0QWx3YXlzQWNjZXB0Q29va2llcyIsIGFjY2VwdCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0T25seUFjY2VwdEZpcnN0UGFydHlDb29raWVzKGJvb2wgYWNjZXB0KQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29va2llcyIpKTsK
LSAgICAKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoYWNjZXB0KSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKCJTZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMiLCBhY2NlcHQpOwog
fQogCiBkb3VibGUgVGVzdFJ1bm5lcjo6cHJlY2lzZVRpbWUoKQpAQCAtOTI0LDE1ICs4NjcsMTUg
QEAgdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBlbmFibGVk
KQogewogICAgIG1fdXNlclN0eWxlU2hlZXRFbmFibGVkID0gZW5hYmxlZDsKIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBlbXB0eVVybCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIiIpKTsKLSAgICBXS1N0cmluZ1JlZiBsb2NhdGlvbiA9IGVuYWJsZWQgPyBt
X3VzZXJTdHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVVybC5nZXQoKTsKKyAgICBhdXRv
IGVtcHR5U3RyaW5nID0gdG9XSygiIik7CisgICAgYXV0byBsb2NhdGlvbiA9IGVuYWJsZWQgPyBt
X3VzZXJTdHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVN0cmluZy5nZXQoKTsKICAgICBh
dXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBX
S0J1bmRsZVNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCks
IGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBsb2NhdGlvbik7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBsb2NhdGlvbikKIHsK
LSAgICBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKGxvY2F0aW9uKSk7CisgICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gdG9X
Syhsb2NhdGlvbik7CiAKICAgICBpZiAobV91c2VyU3R5bGVTaGVldEVuYWJsZWQpCiAgICAgICAg
IHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVlKTsKQEAgLTk0Niw4ICs4ODksNyBAQCB2b2lk
IFRlc3RSdW5uZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgZW5h
YmxlZCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKTsKLSAgICBXS0J1bmRsZVNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhpbmpl
Y3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIGVuYWJs
ZWQpOworICAgIFdLQnVuZGxlU2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgcGFnZSgpLCBlbmFibGVkKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoKQpAQCAtOTczLDM2ICs5MTUsMjgg
QEAgdm9pZCBUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6Z3JhbnRXZWJOb3RpZmljYXRpb25QZXJt
aXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRp
b25QZXJtaXNzaW9uKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdl
KCktPnBhZ2UoKSwgb3JpZ2luV0suZ2V0KCksIHRydWUpOworICAgIFdLQnVuZGxlU2V0V2ViTm90
aWZpY2F0aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IHBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpkZW55V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAg
IGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAg
IFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihpbmplY3RlZEJ1bmRsZS5idW5k
bGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG9yaWdpbldLLmdldCgpLCBmYWxz
ZSk7CisgICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgcGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCksIGZh
bHNlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJt
aXNzaW9ucygpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVSZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNz
aW9ucyhpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdl
KCkpOworICAgIFdLQnVuZGxlUmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soSlNWYWx1ZVJlZiBub3RpZmlj
YXRpb24pCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCk7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VH
ZXRNYWluRnJhbWUoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4
dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFt
ZSk7Ci0gICAgdWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSBXS0J1bmRsZUdldFdlYk5vdGlmaWNh
dGlvbklEKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBjb250ZXh0LCBub3RpZmljYXRpb24pOwot
ICAgIGluamVjdGVkQnVuZGxlLnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKG5vdGlm
aWNhdGlvbklEKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5wb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRp
b25DbGljayhXS0J1bmRsZUdldFdlYk5vdGlmaWNhdGlvbklEKGluamVjdGVkQnVuZGxlLmJ1bmRs
ZSgpLCBtYWluSlNDb250ZXh0KCksIG5vdGlmaWNhdGlvbikpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAgLy8gRklY
TUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihlbmFibGVkKTsKIH0KIApAQCAtMTAxMSwxMDIgKzk0NSw1
MSBAQCBib29sIFRlc3RSdW5uZXI6OmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpCiAgICAg
cmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc0dlb2xvY2F0aW9uUHJvdmlkZXJB
Y3RpdmUoKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNW
YWx1ZVJlZiBqc0FsdGl0dWRlLCBKU1ZhbHVlUmVmIGpzQWx0aXR1ZGVBY2N1cmFjeSwgSlNWYWx1
ZVJlZiBqc0hlYWRpbmcsIEpTVmFsdWVSZWYganNTcGVlZCwgSlNWYWx1ZVJlZiBqc0Zsb29yTGV2
ZWwpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBs
YXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3Vi
bGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFs
PGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91Ymxl
PiBmbG9vckxldmVsKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBK
U0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dCht
YWluRnJhbWUpOwotCi0gICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlID0gZmFsc2U7Ci0gICAgZG91
YmxlIGFsdGl0dWRlID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwg
anNBbHRpdHVkZSkpIHsKLSAgICAgICAgcHJvdmlkZXNBbHRpdHVkZSA9IHRydWU7Ci0gICAgICAg
IGFsdGl0dWRlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzQWx0aXR1ZGUsIDApOwotICAg
IH0KLQotICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5ID0gZmFsc2U7Ci0gICAgZG91
YmxlIGFsdGl0dWRlQWNjdXJhY3kgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChj
b250ZXh0LCBqc0FsdGl0dWRlQWNjdXJhY3kpKSB7Ci0gICAgICAgIHByb3ZpZGVzQWx0aXR1ZGVB
Y2N1cmFjeSA9IHRydWU7Ci0gICAgICAgIGFsdGl0dWRlQWNjdXJhY3kgPSBKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwganNBbHRpdHVkZUFjY3VyYWN5LCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHBy
b3ZpZGVzSGVhZGluZyA9IGZhbHNlOwotICAgIGRvdWJsZSBoZWFkaW5nID0gMC47Ci0gICAgaWYg
KCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNIZWFkaW5nKSkgewotICAgICAgICBwcm92
aWRlc0hlYWRpbmcgPSB0cnVlOwotICAgICAgICBoZWFkaW5nID0gSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGpzSGVhZGluZywgMCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc1NwZWVkID0g
ZmFsc2U7Ci0gICAgZG91YmxlIHNwZWVkID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmlu
ZWQoY29udGV4dCwganNTcGVlZCkpIHsKLSAgICAgICAgcHJvdmlkZXNTcGVlZCA9IHRydWU7Ci0g
ICAgICAgIHNwZWVkID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzU3BlZWQsIDApOwotICAg
IH0KLQotICAgIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsID0gZmFsc2U7Ci0gICAgZG91YmxlIGZs
b29yTGV2ZWwgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCBqc0Zs
b29yTGV2ZWwpKSB7Ci0gICAgICAgIHByb3ZpZGVzRmxvb3JMZXZlbCA9IHRydWU7Ci0gICAgICAg
IGZsb29yTGV2ZWwgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNGbG9vckxldmVsLCAwKTsK
LSAgICB9Ci0KLSAgICBpbmplY3RlZEJ1bmRsZS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihs
YXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUs
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFk
aW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJvdmlkZXNGbG9vckxldmVsLCBm
bG9vckxldmVsKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLCBh
bHRpdHVkZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCwgZmxvb3JMZXZlbCk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKEpT
U3RyaW5nUmVmIG1lc3NhZ2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VXSyA9IHRvV0sobWVzc2FnZSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihtZXNzYWdlV0suZ2V0KCkp
OworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvblVuYXZhaWxhYmxlRXJyb3IodG9XSyhtZXNzYWdlKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0VXNlck1lZGlhUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAgLy8g
RklYTUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnNldFVzZXJNZWRpYVBlcm1pc3Npb24oZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQg
YmUgZG9uZSBieSBmcmFtZS4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBieSBm
cmFtZS4KICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucmVzZXRVc2VyTWVkaWFQZXJt
aXNzaW9uKCk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNEb2luZ01lZGlhQ2FwdHVyZSgpIGNv
bnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNEb2luZ01lZGlhQ2FwdHVyZSIpKTsK
LSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEp
OwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBl
SUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzRG9pbmdNZWRpYUNhcHR1cmUiKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZv
ck9yaWdpbihib29sIHBlcm1pc3Npb24sIEpTU3RyaW5nUmVmIG9yaWdpbiwgSlNTdHJpbmdSZWYg
cGFyZW50T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9
IHRvV0sob3JpZ2luKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2lu
V0sgPSB0b1dLKHBhcmVudE9yaWdpbik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Npb24sIG9y
aWdpbldLLmdldCgpLCBwYXJlbnRPcmlnaW5XSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBl
cm1pc3Npb24sIHRvV0sob3JpZ2luKS5nZXQoKSwgdG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsK
IH0KIAogdW5zaWduZWQgVGVzdFJ1bm5lcjo6dXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3Vu
dEZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdpbikg
Y29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9y
aWdpbik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9X
SyhwYXJlbnRPcmlnaW4pOwotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
dXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihvcmlnaW5XSy5nZXQoKSwg
cGFyZW50T3JpZ2luV0suZ2V0KCkpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkudXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbih0b1dLKG9yaWdp
bikuZ2V0KCksIHRvV0socGFyZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKEpTU3RyaW5n
UmVmIG9yaWdpbiwgSlNTdHJpbmdSZWYgcGFyZW50T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luV0sgPSB0b1dLKHBhcmVudE9yaWdpbik7Ci0gICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RD
b3VudEZvck9yaWdpbihvcmlnaW5XSy5nZXQoKSwgcGFyZW50T3JpZ2luV0suZ2V0KCkpOworICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0Q291bnRGb3JPcmlnaW4odG9XSyhvcmlnaW4pLmdldCgpLCB0b1dLKHBhcmVudE9yaWdpbiku
Z2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygp
CiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBy
ZXR1cm4gV0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhtYWluRnJhbWUpOwor
ICAgIHJldHVybiBXS0J1bmRsZUZyYW1lQ2FsbFNob3VsZENsb3NlT25XZWJWaWV3KG1haW5GcmFt
ZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKHVuc2lnbmVk
IGhvd0ZhckJhY2t3YXJkKQpAQCAtMTEyMiwyMCArMTAwNSwxNyBAQCB2b2lkIFRlc3RSdW5uZXI6
OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24odW5zaWduZWQgaG93RmFyRm9yd2FyZCkKIHZvaWQgVGVz
dFJ1bm5lcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBi
b29sIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IGJhc2VVUkxXSyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwoV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKSkpOwotICAgIFdLUmV0YWlu
UHRyPFdLVVJMUmVmPiB1cmxXSyA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNl
VVJMV0suZ2V0KCksIHRvV1RGU3RyaW5nKHRvV0sodXJsKSkudXRmOCgpLmRhdGEoKSkpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmdXSyA9IGFkb3B0V0soV0tVUkxDb3B5
U3RyaW5nKHVybFdLLmdldCgpKSk7Ci0KKyAgICBhdXRvIGJhc2VVUkxXSyA9IGFkb3B0V0soV0tC
dW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKCkpKTsKKyAgICBhdXRvIHVybFdLID0gYWRvcHRX
SyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkxXSy5nZXQoKSwgdG9XVEZTdHJpbmcodXJs
KS51dGY4KCkuZGF0YSgpKSk7CisgICAgYXV0byB1cmxTdHJpbmdXSyA9IGFkb3B0V0soV0tVUkxD
b3B5U3RyaW5nKHVybFdLLmdldCgpKSk7CiAgICAgaW5qZWN0ZWRCdW5kbGUucXVldWVMb2FkKHVy
bFN0cmluZ1dLLmdldCgpLCB0b1dLKHRhcmdldCkuZ2V0KCksIHNob3VsZE9wZW5FeHRlcm5hbFVS
THMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoSlNTdHJpbmdS
ZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCwgSlNTdHJpbmdSZWYgdW5yZWFjaGFibGVV
UkwpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNvbnRlbnRXSyA9IHRvV0soY29u
dGVudCk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxXSyA9IGJhc2VVUkwg
PyB0b1dLKGJhc2VVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMV0sgPSB1bnJlYWNoYWJsZVVSTCA/IHRv
V0sodW5yZWFjaGFibGVVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7Ci0KLSAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkSFRNTFN0cmluZyhjb250ZW50V0su
Z2V0KCksIGJhc2VVUkxXSy5nZXQoKSwgdW5yZWFjaGFibGVVUkxXSy5nZXQoKSk7CisgICAgYXV0
byBiYXNlVVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJMKSA6IFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPigpOworICAgIGF1dG8gdW5yZWFjaGFibGVVUkxXSyA9IHVucmVhY2hhYmxlVVJMID8g
dG9XSyh1bnJlYWNoYWJsZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKKyAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkSFRNTFN0cmluZyh0b1dLKGNvbnRl
bnQpLmdldCgpLCBiYXNlVVJMV0suZ2V0KCksIHVucmVhY2hhYmxlVVJMV0suZ2V0KCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKQEAgLTExNDUsMTYzICsxMDI1LDExOSBA
QCB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1
ZUxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucXVldWVMb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgpKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkaW5nU2NyaXB0KHRvV0soc2NyaXB0KS5n
ZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KEpTU3Ry
aW5nUmVmIHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sg
PSB0b1dLKHNjcmlwdCk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTm9u
TG9hZGluZ1NjcmlwdChzY3JpcHRXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCh0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdl
KCJTZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZXMiLCB2YWx1ZSk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldEhhbmRsZXNB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoYm9vbCBoYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEhhbmRsZXNBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZXMpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VzIiwgaGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShi
b29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZExvZ0NhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRM
b2dEb3dubG9hZENhbGxiYWNrcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIikpOwotICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIiwgdmFs
dWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUoSlNT
dHJpbmdSZWYgdXNlcm5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QXV0aGVu
dGljYXRpb25Vc2VybmFtZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHVzZXJuYW1lKSk7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiU2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIsIHRvV0sodXNlcm5h
bWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblBhc3N3
b3JkKEpTU3RyaW5nUmVmIHBhc3N3b3JkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhwYXNzd29y
ZCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiLCB0b1dL
KHBhc3N3b3JkKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1
dElzRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2VjdXJlRXZl
bnRJbnB1dElzRW5hYmxlZCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRh
KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVl
KGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOwor
ICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIlNl
Y3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRCbG9j
a0FsbFBsdWdpbnMoYm9vbCBzaG91bGRCbG9jaykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRCbG9ja0FsbFBsdWdpbnMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHNob3VsZEJsb2NrKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiU2V0QmxvY2tBbGxQbHVnaW5zIiwgc2hvdWxkQmxvY2spOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUoSlNTdHJpbmdSZWYgbW9kZSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcobW9kZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFBsdWdp
blN1cHBvcnRlZE1vZGUiLCB0b1dLKG1vZGUpLmdldCgpKTsKIH0KIAogSlNWYWx1ZVJlZiBUZXN0
UnVubmVyOjpmYWlsTmV4dE5ld0NvZGVCbG9jaygpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBt
YWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVu
ZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHJldHVybiBKU0M6
OmZhaWxOZXh0TmV3Q29kZUJsb2NrKGNvbnRleHQpOworICAgIHJldHVybiBKU0M6OmZhaWxOZXh0
TmV3Q29kZUJsb2NrKG1haW5KU0NvbnRleHQoKSk7CiB9CiAKLUpTVmFsdWVSZWYgVGVzdFJ1bm5l
cjo6bnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKQorSlNWYWx1ZVJl
ZiBUZXN0UnVubmVyOjpudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWVSZWYgZnVuY3Rpb24pCiB7
Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJh
bWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0Nv
bnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWlu
RnJhbWUpOwotICAgIHJldHVybiBKU0M6Om51bWJlck9mREZHQ29tcGlsZXMoY29udGV4dCwgdGhl
RnVuY3Rpb24pOworICAgIHJldHVybiBKU0M6Om51bWJlck9mREZHQ29tcGlsZXMobWFpbkpTQ29u
dGV4dCgpLCBmdW5jdGlvbik7CiB9CiAKLUpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bmV2ZXJJbmxp
bmVGdW5jdGlvbihKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKQorSlNWYWx1ZVJlZiBUZXN0UnVubmVy
OjpuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgZnVuY3Rpb24pCiB7Ci0gICAgV0tCdW5k
bGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29u
dGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAg
IHJldHVybiBKU0M6OnNldE5ldmVySW5saW5lKGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKKyAgICBy
ZXR1cm4gSlNDOjpzZXROZXZlcklubGluZShtYWluSlNDb250ZXh0KCksIGZ1bmN0aW9uKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJE
ZWxheShib29sIHZhbHVlKQogewogICAgIG1fc2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFm
dGVyRGVsYXkgPSB2YWx1ZTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGREZWNp
ZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxh
eSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVSZXNwb25z
ZVBvbGljeUFmdGVyRGVsYXkoYm9vbCB2YWx1ZSkKIHsKICAgICBtX3Nob3VsZERlY2lkZVJlc3Bv
bnNlUG9saWN5QWZ0ZXJEZWxheSA9IHZhbHVlOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFm
dGVyRGVsYXkiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TmF2aWdhdGlvbkdl
c3R1cmVzRW5hYmxlZChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiU2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZCIsIHZhbHVlKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhib29sIHZh
bHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldElnbm9yZXNWaWV3cG9ydFNjYWxl
TGltaXRzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEln
bm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29sIHZhbHVlKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1J
TUVUeXBlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRT
aG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vz
cyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZEFsbG93
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1v
dGlvbkFjY2VzcyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjp0ZXJtaW5hdGVOZXR3
b3JrUHJvY2VzcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGVybWluYXRlTmV0d29y
a1Byb2Nlc3MiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UoIlRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRl
cm1pbmF0ZVNlcnZpY2VXb3JrZXJzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlKCJUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyIpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB2YWx1
ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0VXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyIsIHZhbHVlKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIG5leHRVSVNj
cmlwdENhbGxiYWNrSUQoKQpAQCAtMTMxNCw5NyArMTE1MCw0OCBAQCB2b2lkIFRlc3RSdW5uZXI6
OnJ1blVJU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsK
ICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbmV4dFVJU2NyaXB0Q2FsbGJhY2tJRCgpOwogICAg
IGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKGNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlJ1blVJUHJvY2Vzc1NjcmlwdCIpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IHRlc3REaWN0aW9uYXJ5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHNjcmlwdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNjcmlw
dCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0VmFsdWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHNjcmlwdCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBj
YWxsYmFja0lEVmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQpKTsKLQot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0odGVzdERpY3Rpb25hcnkuZ2V0KCksIHNjcmlwdEtleS5n
ZXQoKSwgc2NyaXB0VmFsdWUuZ2V0KCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0odGVzdERp
Y3Rpb25hcnkuZ2V0KCksIGNhbGxiYWNrSURLZXkuZ2V0KCksIGNhbGxiYWNrSURWYWx1ZS5nZXQo
KSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCB0ZXN0RGljdGlvbmFyeS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJSdW5VSVByb2Nlc3NTY3JpcHQiLCBjcmVhdGVX
S0RpY3Rpb25hcnkoeworICAgICAgICB7ICJTY3JpcHQiLCB0b1dLKHNjcmlwdCkgfSwKKyAgICAg
ICAgeyAiQ2FsbGJhY2tJRCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpLmdl
dCgpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0
SW1tZWRpYXRlbHkoSlNTdHJpbmdSZWYgc2NyaXB0LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewog
ICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBuZXh0VUlTY3JpcHRDYWxsYmFja0lEKCk7CiAgICAg
Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soY2FsbGJhY2tJRCwgY2FsbGJhY2spOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUnVuVUlQcm9jZXNzU2NyaXB0SW1tZWRpYXRlbHkiKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiB0ZXN0RGljdGlvbmFyeSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTY3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFZhbHVl
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJ
bnQ2NFJlZj4gY2FsbGJhY2tJRFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjYWxsYmFj
a0lEKSk7Ci0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBz
Y3JpcHRLZXkuZ2V0KCksIHNjcmlwdFZhbHVlLmdldCgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBjYWxsYmFja0lES2V5LmdldCgpLCBjYWxsYmFja0lE
VmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgdGVzdERp
Y3Rpb25hcnkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUnVuVUlQcm9jZXNzU2NyaXB0
SW1tZWRpYXRlbHkiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJTY3JpcHQiLCB0
b1dLKHNjcmlwdCkgfSwKKyAgICAgICAgeyAiQ2FsbGJhY2tJRCIsIGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoY2FsbGJhY2tJRCkpLmdldCgpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnJ1blVJU2NyaXB0Q2FsbGJhY2sodW5zaWduZWQgY2FsbGJhY2tJRCwgSlNTdHJp
bmdSZWYgcmVzdWx0KQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNj
cmlwdENvbnRleHQobWFpbkZyYW1lKTsKLQotICAgIEpTVmFsdWVSZWYgcmVzdWx0VmFsdWUgPSBK
U1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCByZXN1bHQpOworICAgIEpTVmFsdWVSZWYgcmVzdWx0
VmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtYWluSlNDb250ZXh0KCksIHJlc3VsdCk7CiAgICAg
Y2FsbFRlc3RSdW5uZXJDYWxsYmFjayhjYWxsYmFja0lELCAxLCAmcmVzdWx0VmFsdWUpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93ZWRNZW51QWN0aW9ucyhKU1ZhbHVlUmVmIGFjdGlv
bnMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWxsb3dlZE1lbnVBY3Rpb25zIikp
OwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0KLSAgICBhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgYXV0byBtYWluRnJhbWUgPSBX
S0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgYXV0byBjb250ZXh0ID0gV0tCdW5k
bGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgYXV0byBsZW5ndGhQ
cm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOworICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRl
KCkpOworICAgIGF1dG8gY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKICAgICBhdXRvIGFjdGlv
bnNBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhY3Rpb25zLCBudWxscHRyKTsKLSAg
ICBhdXRvIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBhY3Rpb25z
QXJyYXksIGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1Zh
bHVlSXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgo
Y29udGV4dCwgYWN0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJp
bmcoY29udGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0
byBhY3Rpb25OYW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwg
MCkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWN0aW9uID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhhY3Rpb25OYW1lLmdldCgpKSk7Ci0gICAgICAgIFdL
QXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhY3Rpb24uZ2V0KCkpOworICAgIGF1
dG8gbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYWN0aW9uc0FycmF5KTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9
IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFjdGlvbnNBcnJheSwgaSwgbnVs
bHB0cik7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB0b1dL
U3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CiAgICAgfQotCi0gICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEFsbG93ZWRNZW51QWN0aW9ucyIsIG1lc3NhZ2VCb2R5
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0YWxsQ3VzdG9tTWVudUFjdGlvbihK
U1N0cmluZ1JlZiBuYW1lLCBib29sIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHksIEpTVmFsdWVSZWYg
Y2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soQ3VzdG9tTWVudUFjdGlv
bkNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluc3Rh
bGxDdXN0b21NZW51QWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJuYW1lIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBuYW1lVmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKG5h
bWUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBuYW1lS2V5
LmdldCgpLCBuYW1lVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IikpOwotICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gZGlzbWlzc2VzQXV0b21hdGljYWxseVZhbHVlID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoZGlzbWlzc2VzQXV0b21hdGljYWxseSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlLZXkuZ2V0KCksIGRp
c21pc3Nlc0F1dG9tYXRpY2FsbHlWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJJ
bnN0YWxsQ3VzdG9tTWVudUFjdGlvbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsg
Im5hbWUiLCB0b1dLKG5hbWUpIH0sCisgICAgICAgIHsgImRpc21pc3Nlc0F1dG9tYXRpY2FsbHki
LCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkaXNtaXNzZXNBdXRvbWF0aWNhbGx5KSkuZ2V0KCkg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFsbERpZEJlZ2lu
U3dpcGVDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQpAQCAtMTQ0OSw1OCArMTIzNiwzMCBA
QCB2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2soKQog
CiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4oSlNTdHJpbmdS
ZWYgZG9tYWluKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyU3RhdGlzdGljc0Rh
dGFGb3JEb21haW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhkb21haW4pKTsKLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4i
LCB0b1dLKGRvbWFpbikuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmRvZXNTdGF0aXN0
aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UodW5zaWduZWQgZG9tYWluSUQpCiB7Ci0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRG9tYWluSUQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkb21haW5JRCkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmlu
Z1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFs
dWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAg
ICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rp
Y3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMu
c2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEp
ID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUo
YWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiRG9l
c1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7
CisgICAgICAgIHsgIkRvbWFpbklEIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkb21haW5JRCkp
IH0KKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0Vu
YWJsZWQoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0
aWNzRW5hYmxlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NFbmFibGVkIiwgdmFsdWUpOwogfQogCiBib29s
IFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0VwaGVtZXJhbCgpCiB7Ci0gICAgYXV0byBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGlj
c0VwaGVtZXJhbCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0
V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJl
dHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlz
dGljc0VwaGVtZXJhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1
Z01vZGUoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBj
YWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzRGVidWdNb2RlQ2FsbGJhY2tJRCwg
Y29tcGxldGlvbkhhbmRsZXIpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlz
dGljc0RlYnVnTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGlj
c0RlYnVnTW9kZSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2Fs
bERpZFNldERlYnVnTW9kZUNhbGxiYWNrKCkKQEAgLTE1MTEsMTAgKzEyNzAsNyBAQCB2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0RGVidWdNb2RlQ2FsbGJhY2soKQogdm9pZCBU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoSlNT
dHJpbmdSZWYgaG9zdE5hbWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9y
RGVidWdNb2RlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tCdW5kbGVQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFByZXZhbGVudFJlc291
cmNlRm9yRGVidWdNb2RlQ2FsbGJhY2soKQpAQCAtMTUyNiwyNyArMTI4MiwxMCBAQCB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NMYXN0U2VlbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgZG91
YmxlIHNlY29uZHMsIEpTVgogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRp
c3RpY3NMYXN0U2VlbkNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZh
bHVlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25k
cykpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkp
OwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
cmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVl
c1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3Rh
dGlzdGljc0xhc3RTZWVuIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3
VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGlj
c0xhc3RTZWVuIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0
b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIHRvV0soc2Vjb25kcykgfSwKKyAg
ICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRM
YXN0U2VlbkNhbGxiYWNrKCkKQEAgLTE1NTgsNDkgKzEyOTcsMTggQEAgdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3Ry
aW5nUmVmIHQKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzTWVy
Z2VTdGF0aXN0aWNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1l
RG9tYWluMSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKHRvcEZyYW1lRG9tYWluMSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjIiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BG
cmFtZURvbWFpbjIpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJMYXN0U2VlbiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKGxhc3RTZWVuKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhZFVzZXJJbnRlcmFjdGlv
bikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIk1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSkpOwotCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNH
cmFuZGZhdGhlcmVkIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKGlzR3JhbmRmYXRoZXJlZCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkpOwotCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNWZXJ5UHJldmFs
ZW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzVmVy
eVByZXZhbGVudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkRhdGFSZWNvcmRzUmVtb3ZlZCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpKTsKLQotICAgIFZl
Y3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlw
ZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdl
dCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rp
Y3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMu
c2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyIsIGNyZWF0ZVdLRGlj
dGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAg
ICAgeyAiVG9wRnJhbWVEb21haW4xIiwgdG9XSyh0b3BGcmFtZURvbWFpbjEpIH0sCisgICAgICAg
IHsgIlRvcEZyYW1lRG9tYWluMiIsIHRvV0sodG9wRnJhbWVEb21haW4yKSB9LAorICAgICAgICB7
ICJMYXN0U2VlbiIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUobGFzdFNlZW4pKSB9LAorICAgICAg
ICB7ICJIYWRVc2VySW50ZXJhY3Rpb24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYWRVc2Vy
SW50ZXJhY3Rpb24pKSB9LAorICAgICAgICB7ICJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIiwg
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSkgfSwKKyAg
ICAgICAgeyAiSXNHcmFuZGZhdGhlcmVkIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFu
ZGZhdGhlcmVkKSkgfSwKKyAgICAgICAgeyAiSXNQcmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShpc1ByZXZhbGVudCkpIH0sCisgICAgICAgIHsgIklzVmVyeVByZXZhbGVudCIsIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzVmVyeVByZXZhbGVudCkpIH0sCisgICAgICAgIHsgIkRh
dGFSZWNvcmRzUmVtb3ZlZCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZGF0YVJlY29yZHNSZW1v
dmVkKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGlj
c0NhbGxEaWRTZXRNZXJnZVN0YXRpc3RpY0NhbGxiYWNrKCkKQEAgLTE2MTIsMzEgKzEzMjAsMTIg
QEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyhKU1N0cmlu
Z1JlZiBob3N0TmFtZSwgYm9vbCBoYWRVc2UKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFj
ayhTZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpY0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5k
bGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5h
bWUpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJIYWRVc2VySW50ZXJhY3Rpb24iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkpOwotCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTY2hlZHVsZWRGb3JB
bGxCdXRDb29raWVEYXRhUmVtb3ZhbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKSkpOwot
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SXNQcmV2YWxlbnQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaXNQcmV2YWxlbnQpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlz
KGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNp
emUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tp
XSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9u
YXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMu
ZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxl
UG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0
aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsg
Ikhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSGFkVXNlckludGVyYWN0
aW9uIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkgfSwKKyAg
ICAgICAgeyAiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCIsIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpKSB9
LAorICAgICAgICB7ICJJc1ByZXZhbGVudCIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJl
dmFsZW50KSkgfQorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0
aWNzQ2FsbERpZFNldEV4cGlyZWRTdGF0aXN0aWNDYWxsYmFjaygpCkBAIC0xNjQ4LDI5ICsxMzM3
LDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpT
U3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2Fs
bGJhY2soU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlQ2FsbGJhY2tJRCwgY29tcGxldGlv
bkhhbmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyho
b3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJh
d0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVz
aXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwot
ICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAg
ICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0g
dmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0
aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tl
eXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tC
dW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAg
ICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2VDYWxs
YmFjaygpCkBAIC0xNjgyLDI5ICsxMzUyLDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2CiB7
CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOwot
ICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBl
UmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJh
d1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ld
LmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQot
ICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50
UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMu
ZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzVmVyeVBy
ZXZhbGVudFJlc291cmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5h
bWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NhbGxEaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFjaygpCkBA
IC0xNzE0LDEzOCArMTM2NSw1MSBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlk
U2V0VmVyeVByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQogICAgIAogdm9pZCBUZXN0UnVubmVy
OjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAg
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoImR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIik7
CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNT
dHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkp
OwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
JnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0so
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVy
biBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGlj
c1ByZXZhbGVudFJlc291cmNlIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiBib29sIFRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBo
b3N0TmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NWZXJ5UHJl
dmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAg
IFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVy
bkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0
UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKEpTU3RyaW5n
UmVmIHN1YnJlc291cmNlSG9zdCwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0KQogewotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJyZXNvdXJjZUhvc3QiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJyZXNvdXJj
ZUhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0KSkpOwotICAgIAotICAg
IFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdL
VHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5
c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAg
IH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVk
QXNTdWJyZXNvdXJjZVVuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwg
cmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJu
RGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
IHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU3VicmVzb3VyY2VIb3N0
IiwgdG9XSyhzdWJyZXNvdXJjZUhvc3QpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lSG9zdCIsIHRv
V0sodG9wRnJhbWVIb3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVy
Ojppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKEpTU3RyaW5nUmVmIHN1YkZy
YW1lSG9zdCwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0KQogewotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN1YkZyYW1lSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHN1YkZyYW1lSG9zdCkpKTsKLSAgICAKLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFt
ZUhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhK
U1N0cmluZyh0b3BGcmFtZUhvc3QpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBy
YXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFs
dWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1Zh
bHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyIikpOwotICAgIFdLUmV0
YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFy
eUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkp
KTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
ICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tC
b29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdL
KHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1
cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3Rp
Y3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAg
ICAgeyAiU3ViRnJhbWVIb3N0IiwgdG9XSyhzdWJGcmFtZUhvc3QpIH0sCisgICAgICAgIHsgIlRv
cEZyYW1lSG9zdCIsIHRvV0sodG9wRnJhbWVIb3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAog
Ym9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKEpT
U3RyaW5nUmVmIGhvc3RSZWRpcmVjdGVkRnJvbSwgSlNTdHJpbmdSZWYgaG9zdFJlZGlyZWN0ZWRU
bykKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdFJlZGlyZWN0ZWRG
cm9tIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoaG9zdFJlZGlyZWN0ZWRGcm9tKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkVG8iKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0
UmVkaXJlY3RlZFRvKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhr
ZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXpl
KCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0g
PSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3Jl
YXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwot
ICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJl
dHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7
ICJIb3N0UmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3RSZWRpcmVjdGVkRnJvbSkgfSwKKyAgICAg
ICAgeyAiSG9zdFJlZGlyZWN0ZWRUbyIsIHRvV0soaG9zdFJlZGlyZWN0ZWRUbykgfSwKKyAgICB9
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0
aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIp
OwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5h
bWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUodmFsdWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlz
OwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShr
ZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
cmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVl
c1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3Rh
dGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rp
b25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5
cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgCi0gICAg
V0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2Uo
IlNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iLCBjcmVhdGVXS0RpY3Rpb25hcnko
eworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZh
bHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRl
cmFjdGlvbkNhbGxiYWNrKCkKQEAgLTE4NTUsMjYxICsxNDE5LDk1IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NhbGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb25DYWxsYmFjaygpCiAK
IGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3Ry
aW5nUmVmIGhvc3ROYW1lKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1l
KSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRX
SyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0
dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0
aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIik7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0
aXN0aWNzT25seUluRGF0YWJhc2VPbmNlKEpTU3RyaW5nUmVmIHN1Ykhvc3QsIEpTU3RyaW5nUmVm
IHRvcEhvc3QpCiB7Ci0gICAgCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4g
a2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViSG9z
dCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKHN1Ykhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEhvc3QpKSk7Ci0gICAgCi0gICAgVmVj
dG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBl
UmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0
KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAg
ICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlIikpOwotICAgIGF1dG8gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVz
LmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51
bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRU
eXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBX
S0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJu
RGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UiLCBjcmVhdGVXS0Rp
Y3Rpb25hcnkoeworICAgICAgICB7ICJTdWJIb3N0IiwgdG9XSyhzdWJIb3N0KSB9LAorICAgICAg
ICB7ICJUb3BIb3N0IiwgdG9XSyh0b3BIb3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChKU1N0cmluZ1JlZiBob3N0
TmFtZSwgYm9vbCB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAg
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAg
IHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVl
cy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7
ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3
VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVh
dGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0g
ICAgCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzR3Jh
bmRmYXRoZXJlZCIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwg
dG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0VXNlSVRQRGF0YWJhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgCi0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRVc2VJVFBEYXRhYmFzZSIsIHZhbHVlKTsK
IH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKEpTU3RyaW5n
UmVmIGhvc3ROYW1lKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc0dy
YW5kZmF0aGVyZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdL
VHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRh
dGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc0dyYW5kZmF0
aGVyZWQiLCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihKU1N0cmluZ1JlZiBob3N0TmFt
ZSwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+
PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3RO
YW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcodG9wRnJhbWVIb3N0TmFtZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+
IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2
YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAg
IHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbiIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJh
d0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRT
dGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luIiwgY3JlYXRlV0tEaWN0aW9uYXJ5
KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJU
b3BGcmFtZUhvc3ROYW1lIiwgdG9XSyh0b3BGcmFtZUhvc3ROYW1lKSB9LAorICAgIH0pLmdldCgp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2luKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiB0b3BGcmFtZUhv
c3ROYW1lKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZUhvc3ROYW1lKSkp
OwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0g
ICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdL
ZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ld
LmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0
aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShy
YXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW4iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0
TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lSG9zdE5hbWUiLCB0
b1dLKHRvcEZyYW1lSG9zdE5hbWUpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oSlNTdHJpbmdS
ZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKQogewotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAg
IAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ikhvc3ROYW1lUmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkVG8pKSk7Ci0gICAgCi0g
ICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8
V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBr
ZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0g
ICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0VG8iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0
TmFtZSkgfSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVkVG8iLCB0b1dLKGhvc3ROYW1l
UmVkaXJlY3RlZFRvKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShKU1N0cmluZ1JlZiBo
b3N0TmFtZSwgSlNTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkKIHsKLSAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAK
LSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
b3N0TmFtZVJlZGlyZWN0ZWRGcm9tIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkpKTsKLSAgICAK
LSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3Rv
cjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9
IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsK
LSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RGcm9tIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFy
eVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRh
dGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9X
Syhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIsIHRvV0so
aG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhKU1N0cmluZ1Jl
ZiBob3N0TmFtZSwgSlNTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8pCiB7Ci0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAg
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdE5hbWVSZWRpcmVjdGVkVG8iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZVJlZGlyZWN0ZWRUbykpKTsKLSAgICAKLSAg
ICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxX
S1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtl
eXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAg
ICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1RvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJh
d1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvIiwgY3Jl
YXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9
LAorICAgICAgICB7ICJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIsIHRvV0soaG9zdE5hbWVSZWRpcmVj
dGVkVG8pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNT
dHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+
PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGly
ZWN0ZWRGcm9tIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkpKTsKLSAgICAKLSAgICBWZWN0b3I8
V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+
IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0
KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAg
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVk
aXJlY3RGcm9tIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVz
LmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIsIGNyZWF0ZVdL
RGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAg
ICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIsIHRvV0soaG9zdE5hbWVSZWRpcmVjdGVk
RnJvbSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oSlNTdHJpbmdSZWYgZnJvbUhvc3Qs
IEpTU3RyaW5nUmVmIHRvSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRnJvbUhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyhmcm9tSG9zdCkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb0hvc3QiKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b0hvc3QpKSk7Ci0gICAg
Ci0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0
b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0g
PSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7
Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NDcm9z
c1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlz
LmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExp
bmtEZWNvcmF0aW9uIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiRnJvbUhvc3Qi
LCB0b1dLKGZyb21Ib3N0KSB9LAorICAgICAgICB7ICJUb0hvc3QiLCB0b1dLKHRvSG9zdCkgfSwK
KyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNy
ZWF0ZShzZWNvbmRzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRT
dGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiIsIHNlY29uZHMpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFj
ayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQpAQCAtMjE0NywxMiArMTU0NSw5IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhKU1ZhbHVlUmVm
IGNhbGxiYWNrKQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1l
dHJ5Q2FsbGJhY2sodW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMsIHVuc2lnbmVk
IG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQg
bnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB1bnNpZ25l
ZCB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50
ZXJhY3Rpb24sIHVuc2lnbmVkIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVu
dFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wM051bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzV2l0aFVJLCB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUks
IHVuc2lnbmVkIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSwgdW5zaWduZWQgdG9wM01l
ZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwgdW5zaWduZWQgdG9wM01lZGlhbkRhdGFSZWNv
cmRzUmVtb3ZlZFdpdGhvdXRVSSkKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdl
dEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgCiAgICAgU3RyaW5nIHN0cmluZyA9
IG1ha2VTdHJpbmcoInsgXCJudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1wiIDogIiwgbnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXMsICIsIFwibnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VXNlckludGVyYWN0aW9uXCIgOiAiLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2Vy
SW50ZXJhY3Rpb24sICIsIFwibnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uXCIgOiAiLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb24sICIsIFwidG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5
c1NpbmNlVXNlckludGVyYWN0aW9uXCIgOiAiLCB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2Vy
SW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24sICIsIFwibWVkaWFuRGF5c1NpbmNl
VXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uXCIgOiAi
LCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2Vy
SW50ZXJhY3Rpb24sICIsIFwidG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJXCIg
OiAiLCB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUksICIsIFwidG9wM01lZGlh
blN1YkZyYW1lV2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUksICIs
IFwidG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuU3ViUmVz
b3VyY2VXaXRob3V0VUksICIsIFwidG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSVwi
IDogIiwgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwgIiwgXCJ0b3AzTWVkaWFu
RGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuRGF0YVJlY29yZHNS
ZW1vdmVkV2l0aG91dFVJLCAiIH0iKTsKICAgICAKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpT
VmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7CisgICAgSlNWYWx1ZVJl
ZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKG1haW5KU0NvbnRleHQoKSwgY3Jl
YXRlSlNTdHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpLmdldCgpKTsKIAogICAgIGNhbGxUZXN0
UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrSUQsIDEsICZy
ZXN1bHQpOwogfQpAQCAtMjE2NCwxNiArMTU1OSwxNCBAQCBib29sIFRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NOb3RpZnlPYnNlcnZlcigpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Byb2Nl
c3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzIikpOwotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jk
cyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2lu
ZyhKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNh
bGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0Q2FsbGJhY2tJRCwgY29t
cGxldGlvbkhhbmRsZXIpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1Vw
ZGF0ZUNvb2tpZUJsb2NraW5nIikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7
CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1VwZGF0ZUNvb2tpZUJsb2NraW5nIik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRCbG9ja0Nvb2tpZXNG
b3JIb3N0Q2FsbGJhY2soKQpAQCAtMjE4MywxMzUgKzE1NzYsODMgQEAgdm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzQ2FsbERpZFNldEJsb2NrQ29va2llc0Zvckhvc3RDYWxsYmFjaygpCiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSgpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSIpKTsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSIpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc05v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVl
KSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNzTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdChib29sIHZhbHVlKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0IikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlz
dGljc1NldElzUnVubmluZ1Rlc3QiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
KGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1Nob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIikpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGlj
c1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIiwgdmFsdWUp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoIlNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiLCBz
ZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJp
bmdUaW1lKGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0
YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJp
bmdUaW1lIiwgc2Vjb25kcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01h
eFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkIGVudHJpZXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZW50cmllcykpOwot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TWF4U3RhdGlzdGljc0VudHJp
ZXMiLCBlbnRyaWVzKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1By
dW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCBlbnRyaWVzKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldFBydW5lRW50cmllc0Rvd25UbyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShlbnRyaWVzKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRQcnVuZUVudHJpZXNEb3duVG8iLCBl
bnRyaWVzKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50U3RvcmUoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRl
c3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRT
dG9yZUNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0
YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpOwotICAgIFdLQnVuZGxl
UG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc0Ns
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
dGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vy
cyh1bnNpZ25lZCBob3VycywgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RS
dW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9y
ZUNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRp
c3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzIikp
OwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGhvdXJzKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnMiLCBob3Vycyk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbChKU1ZhbHVl
UmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NE
aWRDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWxDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0g
ICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0NsZWFyVGhyb3VnaFdlYnNp
dGVEYXRhUmVtb3ZhbCIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAg
IFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92
YWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhv
c3QoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcykKIHsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwot
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SW5jbHVkZUh0dHBPbmx5Q29va2llcyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSkpOwotCi0gICAgVmVjdG9yPFdL
U3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAg
ICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1
ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsr
aSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFs
dWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUo
cmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zv
ckhvc3QiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0so
aG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiLCBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSkgfSwKKyAgICB9KS5nZXQo
KSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlKEpT
U3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2Ui
KSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0
dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5H
ZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdl
dCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuKCJJc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiLCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwKGRvdWJs
ZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NDYWNo
ZU1heEFnZUNhcCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCIsIHNlY29uZHMpOwog
fQogCiBib29sIFRlc3RSdW5uZXI6Omhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24oSlNTdHJp
bmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24iKSk7
Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJu
RGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRW
YWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgp
KTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
KCJIYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJl
cihib29sIHZhbHVlLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjMyMCw5ICsx
NjYxLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVm
ZXJyZXIoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb20KICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlckNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJl
ciIsIHZhbHVlKTsKICAgICBtX2hhc1NldERvd25ncmFkZVJlZmVycmVyQ2FsbGJhY2sgPSB0cnVl
OwogfQogCkBAIC0yMzM4LDExICsxNjc3LDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NE
aWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhh
bmRsZXIpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTaG91bGRCbG9j
a1RoaXJkUGFydHlDb29raWVzIikpOworICAgIGF1dG8gbWVzc2FnZU5hbWUgPSAiU2V0U3RhdGlz
dGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiOwogICAgIGlmIChvbmx5T25TaXRlc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQ
YXJ0eUNvb2tpZXNPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICAgICAgbWVzc2FnZU5hbWUgPSAiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNv
b2tpZXNPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiI7CisgICAgcG9zdE1lc3NhZ2UobWVz
c2FnZU5hbWUsIHZhbHVlKTsKICAgICBtX2hhc1NldEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNDYWxs
YmFjayA9IHRydWU7CiB9CiAKQEAgLTIzNTgsOSArMTY5Niw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKGJvb2wgdmFsdWUs
IEpTVmFsCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0
YXRpc3RpY3NEaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUNhbGxiYWNrSUQs
IGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0
aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVl
KSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSIs
IHZhbHVlKTsKICAgICBtX2hhc1NldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlQ2Fs
bGJhY2sgPSB0cnVlOwogfQogCkBAIC0yMzgzLDEwICsxNzE5LDcgQEAgdm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzQ2FsbENsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbENhbGxiYWNrKCkK
IHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzKEpT
U3RyaW5nUmVmIGhvc3ROYW1lLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRUb1NhbWVTaXRlU3RyaWN0
Q29va2llc0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIGF1dG8gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNz
U2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS0J1bmRs
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU3RhdGlz
dGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmlj
dENvb2tpZXNDYWxsYmFjaygpCkBAIC0yMzk4LDI3ICsxNzMxLDEwIEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NhbGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0NhbGxiYWNrKCkK
IHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4o
SlNTdHJpbmdSZWYgZmlyc3RQYXJ0eVVSTFN0cmluZywgSlNTdHJpbmdSZWYgY25hbWVVUkxTdHJp
bmcsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVy
Q2FsbGJhY2soU3RhdGlzdGljc0RpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFj
a0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7
Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRmlyc3RQYXJ0eVVSTCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGZpcnN0UGFydHlVUkxTdHJpbmcpKSk7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ05BTUUi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
ZyhjbmFtZVVSTFN0cmluZykpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tl
eXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMu
c2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1Zh
bHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldEZp
cnN0UGFydHlIb3N0Q05BTUVEb21haW4iKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCBy
YXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENO
QU1FRG9tYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiRmlyc3RQYXJ0eVVS
TCIsIHRvV0soZmlyc3RQYXJ0eVVSTFN0cmluZykgfSwKKyAgICAgICAgeyAiQ05BTUUiLCB0b1dL
KGNuYW1lVVJMU3RyaW5nKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFjaygp
CkBAIC0yNDI5LDEwICsxNzQ1LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERp
ZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4oSlNTdHJpbmdSZWYgY25hbWVVUkxT
dHJpbmcsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVu
bmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbkNhbGxiYWNr
SUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNO
QU1FRG9tYWluIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aEpTU3RyaW5nKGNuYW1lVVJMU3RyaW5nKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRUaGly
ZFBhcnR5Q05BTUVEb21haW4iLCB0b1dLKGNuYW1lVVJMU3RyaW5nKS5nZXQoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW5D
YWxsYmFjaygpCkBAIC0yNDQzLDkgKzE3NTYsOCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3Rp
Y3NDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShKU1ZhbHVlUmVmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRS
ZXNldFRvQ29uc2lzdGVudFN0YXRlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotICAg
IAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0
YXRlIikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBXVFI6OnBv
c3RNZXNzYWdlKCJTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSIpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUNhbGxi
YWNrKCkKQEAgLTI0ODYsOTUgKzE3OTgsNDYgQEAgdm9pZCBUZXN0UnVubmVyOjp0ZXh0RmllbGRE
aWRFbmRFZGl0aW5nQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpnZXRBbGxTdG9yYWdlQWNj
ZXNzRW50cmllcyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNh
bGxiYWNrKEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAg
IAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzIikp
OwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVzc2Fn
ZSgiR2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpj
YWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2soVmVjdG9yPFN0cmlu
Zz4mIGRvbWFpbnMpCitzdGF0aWMgSlNWYWx1ZVJlZiBtYWtlRG9tYWluc1ZhbHVlKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBkb21haW5zKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1l
ID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1l
R2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAKLSAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJbIik7Cisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCdbJyk7CiAgICAg
Ym9vbCBmaXJzdERvbWFpbiA9IHRydWU7CiAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5z
KSB7Ci0gICAgICAgIGlmIChmaXJzdERvbWFpbikKLSAgICAgICAgICAgIGZpcnN0RG9tYWluID0g
ZmFsc2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiLCAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkb21haW4pOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIlwiIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZpcnN0RG9t
YWluID8gIlwiIiA6ICIsIFwiIiwgZG9tYWluLCAnIicpOworICAgICAgICBmaXJzdERvbWFpbiA9
IGZhbHNlOwogICAgIH0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIl0iKTsKLSAg
ICAKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoY29u
dGV4dCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0KKyAgICBidWlsZGVyLmFwcGVuZCgn
XScpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKG1haW5KU0NvbnRleHQo
KSwgY3JlYXRlSlNTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpLmdldCgp
KTsKK30KK3ZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50
cmllc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQoreworICAgIGF1dG8gcmVzdWx0
ID0gbWFrZURvbWFpbnNWYWx1ZShkb21haW5zKTsKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNr
KEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6bG9hZGVkU3VicmVzb3VyY2VEb21haW5zKEpTVmFsdWVSZWYgY2FsbGJh
Y2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soTG9hZGVkU3VicmVzb3VyY2VEb21h
aW5zQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkxvYWRlZFN1YnJlc291cmNlRG9tYWlucyIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkxvYWRlZFN1YnJlc291cmNlRG9tYWlucyIp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VE
b21haW5zQ2FsbGJhY2soVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKQogewotICAgIFdLQnVuZGxl
RnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAK
LSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1snKTsKLSAgICBib29sIGlzRmlyc3REb21haW4gPSB0cnVlOwotICAgIGZvciAoYXV0byYg
ZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBpZiAoaXNGaXJzdERvbWFpbikKLSAgICAgICAg
ICAgIGlzRmlyc3REb21haW4gPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlwiIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGRvbWFpbik7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKLSAgICB9Ci0gICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ10nKTsKLSAgICAKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9
IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKS5n
ZXQoKSk7Ci0KKyAgICBhdXRvIHJlc3VsdCA9IG1ha2VEb21haW5zVmFsdWUoZG9tYWlucyk7CiAg
ICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnNDYWxsYmFj
a0lELCAxLCAmcmVzdWx0KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrTWVkaWFEZXZp
Y2UoSlNTdHJpbmdSZWYgcGVyc2lzdGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbCwgY29uc3QgY2hh
ciogdHlwZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQZXJzaXN0ZW50SUQi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhwZXJzaXN0ZW50SWQpKTsKLQotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxhYmVsIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKHRvV0sobGFiZWwpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlR5cGUiKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0eXBlKSkpOwotCi0g
ICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJh
d1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVz
LnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAg
ICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkFkZE1vY2tNZWRpYURldmljZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUo
cmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkFkZE1vY2tNZWRpYURldmljZSIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlBlcnNpc3RlbnRJRCIsIHRvV0socGVyc2lz
dGVudElkKSB9LAorICAgICAgICB7ICJMYWJlbCIsIHRvV0sobGFiZWwpIH0sCisgICAgICAgIHsg
IlR5cGUiLCB0b1dLKHR5cGUpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OmFkZE1vY2tDYW1lcmFEZXZpY2UoSlNTdHJpbmdSZWYgcGVyc2lzdGVudElkLCBKU1N0cmlu
Z1JlZiBsYWJlbCkKQEAgLTI1OTQsMTUzICsxODU3LDcyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6YWRk
TW9ja1NjcmVlbkRldmljZShKU1N0cmluZ1JlZiBwZXJzaXN0ZW50SWQsIEpTU3RyaW5nUmVmIGxh
YmVsCiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJNb2NrTWVkaWFEZXZpY2VzKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhck1vY2tNZWRpYURldmljZXMiKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoIkNsZWFyTW9ja01lZGlhRGV2aWNlcyIpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnJlbW92ZU1vY2tNZWRpYURldmljZShKU1N0cmluZ1JlZiBwZXJzaXN0ZW50SWQpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVtb3ZlTW9ja01lZGlhRGV2aWNlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkodG9XSyhwZXJzaXN0ZW50SWQpKTsK
LQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiUmVtb3ZlTW9ja01lZGlhRGV2
aWNlIiwgdG9XSyhwZXJzaXN0ZW50SWQpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZXNldE1v
Y2tNZWRpYURldmljZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc2V0TW9ja01l
ZGlhRGV2aWNlcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiUmVzZXRNb2NrTWVkaWFE
ZXZpY2VzIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0NhbWVyYU9yaWVudGF0aW9u
KHVuc2lnbmVkIG9yaWVudGF0aW9uKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24i
KSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUob3JpZW50
YXRpb24pKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldE1vY2tDYW1l
cmFPcmllbnRhdGlvbiIsIG9yaWVudGF0aW9uKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc01v
Y2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgpCiB7Ci0gICAgYXV0byBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzTW9ja1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRh
ID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlE
KHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29s
ZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEp
KS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuKCJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCIpOwogfQogCiAjaWYg
UExBVEZPUk0oTUFDKQorCiB2b2lkIFRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCh1bnNp
Z25lZCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDb25uZWN0TW9ja0dhbWVw
YWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiQ29ubmVjdE1vY2tHYW1lcGFkIiwgaW5kZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJEaXNjb25uZWN0TW9ja0dhbWVwYWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLQot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiRGlzY29ubmVjdE1vY2tHYW1lcGFk
IiwgaW5kZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkRGV0YWlscyh1
bnNpZ25lZCBpbmRleCwgSlNTdHJpbmdSZWYgZ2FtZXBhZElELCBKU1N0cmluZ1JlZiBtYXBwaW5n
LCB1bnNpZ25lZCBheGlzQ291bnQsIHVuc2lnbmVkIGJ1dHRvbkNvdW50KQogewotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJRCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0
b1dLKGdhbWVwYWRJRCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiTWFwcGluZyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKG1h
cHBpbmcpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKGluZGV4KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXhpc0NvdW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhpc0NvdW50KSkpOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uQ291bnQiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25Db3VudCkpKTsK
LQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVm
PiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1Zh
bHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7
Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZERldGFpbHMiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5
Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkp
OwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZERl
dGFpbHMiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJHYW1lcGFkSUQiLCB0b1dL
KGdhbWVwYWRJRCkgfSwKKyAgICAgICAgeyAiTWFwcGluZyIsIHRvV0sobWFwcGluZykgfSwKKyAg
ICAgICAgeyAiR2FtZXBhZEluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpIH0s
CisgICAgICAgIHsgIkF4aXNDb3VudCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhpc0NvdW50
KSkgfSwKKyAgICAgICAgeyAiQnV0dG9uQ291bnQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1
dHRvbkNvdW50KSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
TW9ja0dhbWVwYWRBeGlzVmFsdWUodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGF4aXNJbmRleCwg
ZG91YmxlIHZhbHVlKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtl
eXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJ
bmRleCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4
KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQXhpc0luZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoYXhpc0luZGV4KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3
S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNp
emUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
cmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVl
c1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2Ft
ZXBhZEF4aXNWYWx1ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1Zh
bHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5
KHsKKyAgICAgICAgeyAiR2FtZXBhZEluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRl
eCkpIH0sCisgICAgICAgIHsgIkF4aXNJbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhp
c0luZGV4KSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZh
bHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dh
bWVwYWRCdXR0b25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgYnV0dG9uSW5kZXgsIGRv
dWJsZSB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlz
OwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5k
ZXgiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkp
KTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkJ1dHRvbkluZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoYnV0dG9uSW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBy
YXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJl
c2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsK
LQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAg
ICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFs
dWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1vY2tH
YW1lcGFkQnV0dG9uVmFsdWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCBy
YXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlIiwgY3JlYXRlV0tEaWN0
aW9uYXJ5KHsKKyAgICAgICAgeyAiR2FtZXBhZEluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShpbmRleCkpIH0sCisgICAgICAgIHsgIkJ1dHRvbkluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShidXR0b25JbmRleCkpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0RvdWJs
ZUNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQorCiAjZWxzZQorCiB2b2lkIFRl
c3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCkKIHsKIH0KQEAgLTI3NjAsMzAg
KzE5NDIsMjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSh1bnNp
Z25lZCwgdW5zaWduZWQsIGRvdWJsZSkKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRC
dXR0b25WYWx1ZSh1bnNpZ25lZCwgdW5zaWduZWQsIGRvdWJsZSkKIHsKIH0KKwogI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxlcyhKU1Zh
bHVlUmVmIGZpbGVzVmFsdWUpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgSlNDb250ZXh0UmVmIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKHBhZ2UpKTsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IG1haW5KU0NvbnRl
eHQoKTsKIAogICAgIGlmICghSlNWYWx1ZUlzQXJyYXkoY29udGV4dCwgZmlsZXNWYWx1ZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0UmVmIGZpbGVzID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHQsIGZpbGVzVmFsdWUsIG51bGxwdHIpOwotICAgIHN0YXRpYyBhdXRvIGxlbmd0aFBy
b3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsK
LSAgICBKU1ZhbHVlUmVmIGZpbGVzTGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIGZpbGVzLCBsZW5ndGhQcm9wZXJ0eS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFK
U1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgZmlsZXNMZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVy
bjsKLQorICAgIGF1dG8gZmlsZXMgPSAoSlNPYmplY3RSZWYpZmlsZXNWYWx1ZTsKICAgICBhdXRv
IGZpbGVVUkxzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBhdXRvIGZp
bGVzTGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
ZmlsZXNMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOworICAgIGF1dG8gZmlsZXNMZW5ndGggPSBhcnJh
eUxlbmd0aChjb250ZXh0LCBmaWxlcyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
c0xlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWVSZWYgZmlsZVZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgZmlsZXMsIGksIG51bGxwdHIpOwogICAgICAgICBp
ZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBmaWxlVmFsdWUpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgYXV0byBmaWxlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBmaWxlVmFsdWUsIG51bGxwdHIpKTsKKyAgICAgICAgYXV0byBmaWxlID0gY3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgZmlsZVZhbHVlKTsKICAgICAgICAgc2l6ZV90IGZpbGVCdWZmZXJT
aXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGZpbGUuZ2V0KCkpICsgMTsK
ICAgICAgICAgYXV0byBmaWxlQnVmZmVyID0gbWFrZVVuaXF1ZUFycmF5PGNoYXI+KGZpbGVCdWZm
ZXJTaXplKTsKICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhmaWxlLmdldCgpLCBmaWxl
QnVmZmVyLmdldCgpLCBmaWxlQnVmZmVyU2l6ZSk7CkBAIC0yNzk3LDIyICsxOTc0LDE1IEBAIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXMoSlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQog
CiAgICAgfQogCi0gICAgc3RhdGljIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRPcGVuUGFuZWxGaWxlVVJMcyIpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBtZXNzYWdlTmFtZS5nZXQoKSwgZmlsZVVSTHMuZ2V0
KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0T3BlblBhbmVsRmlsZVVSTHMiLCBmaWxlVVJM
cy5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXNNZWRpYUlj
b24oSlNWYWx1ZVJlZiBkYXRhKQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNj
cmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpKTsKLQotICAgIGF1dG8m
IGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwogICAgIC8vIEZJ
WE1FICgxMjMwNTgpOiBVc2UgYSBKU0MgQVBJIHRvIGdldCBidWZmZXIgY29udGVudHMgb25jZSBz
dWNoIGlzIGV4cG9zZWQuCi0gICAgV0tSZXRhaW5QdHI8V0tEYXRhUmVmPiBpY29uRGF0YSA9IGFk
b3B0V0soV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhBcnJheShpbmplY3RlZEJ1bmRsZS5i
dW5kbGUoKSwgY29udGV4dCwgZGF0YSkpOwotCi0gICAgc3RhdGljIGF1dG8gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRPcGVuUGFuZWxGaWxl
VVJMc01lZGlhSWNvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBtZXNz
YWdlTmFtZS5nZXQoKSwgaWNvbkRhdGEuZ2V0KCkpOworICAgIGF1dG8gaWNvbkRhdGEgPSBhZG9w
dFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtYWluSlNDb250ZXh0KCksIGRhdGEpKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIlNldE9wZW5QYW5lbEZpbGVVUkxzTWVkaWFJY29uIi5nZXQoKSwgaWNvbkRhdGEu
Z2V0KCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGF0YSk7CiAjZW5kaWYKQEAgLTI4MjEs
MTEgKzE5OTEsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzTWVkaWFJY29u
KEpTVmFsdWVSZWYgZGF0YSkKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZWRl
bnRpYWxzKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJh
Y2soRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwot
ICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFs
cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUodHJ1ZSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJSZW1vdmVBbGxTZXNzaW9uQ3Jl
ZGVudGlhbHMiLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlQWxs
U2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2soKQpAQCAtMjgzNSw0OSArMjAwMSwzMyBAQCB2b2lk
IFRlc3RSdW5uZXI6OmNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFjaygp
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJET01DYWNoZShKU1N0cmluZ1JlZiBvcmlnaW4pCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJET01DYWNoZSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKG9yaWdpbikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
Q2xlYXJET01DYWNoZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2xlYXJET01DYWNoZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRE9N
Q2FjaGVzIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhckRPTUNhY2hlcyIpOwog
fQogCiBib29sIFRlc3RSdW5uZXI6Omhhc0RPTUNhY2hlKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYXNET01DYWNoZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpT
U3RyaW5nKG9yaWdpbikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1
cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdl
dFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0
KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4oIkhhc0RPTUNhY2hlIiwgdG9XSyhvcmlnaW4pLmdldCgpKTsKIH0KIAogdWludDY0X3QgVGVz
dFJ1bm5lcjo6ZG9tQ2FjaGVTaXplKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJET01DYWNoZVNpemUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmln
aW4pKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCksICZyZXR1cm5EYXRhKTsKLSAgICByZXR1cm4gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4ocmV0dXJuRGF0YSkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NCgiRE9NQ2FjaGVTaXplIiwgdG9XSyhvcmlnaW4pLmdl
dCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNl
KGJvb2wgd2lsbEluY3JlYXNlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFsbG93
U3RvcmFnZVF1b3RhSW5jcmVhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHdpbGxJbmNyZWFzZSkpOwotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldEFsbG93U3RvcmFnZVF1b3Rh
SW5jcmVhc2UiLCB3aWxsSW5jcmVhc2UpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmdldEFwcGxp
Y2F0aW9uTWFuaWZlc3RUaGVuKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2soR2V0QXBwbGljYXRpb25NYW5pZmVzdENhbGxiYWNrSUQsIGNhbGxiYWNr
KTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRBcHBsaWNhdGlvbk1hbmlmZXN0
IikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVz
c2FnZSgiR2V0QXBwbGljYXRpb25NYW5pZmVzdCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRp
ZEdldEFwcGxpY2F0aW9uTWFuaWZlc3QoKQpAQCAtMjg5NywyMjEgKzIwNDcsMTMwIEBAIHNpemVf
dCBUZXN0UnVubmVyOjp1c2VyU2NyaXB0SW5qZWN0ZWRDb3VudCgpIGNvbnN0CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6aW5qZWN0VXNlclNjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSW5qZWN0VXNlclNjcmlwdCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKHNjcmlwdCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKCJJbmplY3RVc2VyU2NyaXB0IiwgdG9XSyhzY3JpcHQpLmdldCgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2Fn
ZUZvclRlc3RpbmcoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNlbmREaXNwbGF5Q29u
ZmlndXJhdGlvbkNoYW5nZWRNZXNzYWdlRm9yVGVzdGluZyIpKTsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZSgiU2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5n
Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dChk
b3VibGUgc2Vjb25kcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTZXJ2aWNlV29y
a2VyRmV0Y2hUaW1lb3V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dCIsIHNlY29u
ZHMpOwogfQogCiAvLyBXZWJBdXRobgogdm9pZCBUZXN0UnVubmVyOjphZGRUZXN0S2V5VG9LZXlj
aGFpbihKU1N0cmluZ1JlZiBwcml2YXRlS2V5QmFzZTY0LCBKU1N0cmluZ1JlZiBhdHRyTGFiZWws
IEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uVGFnQmFzZTY0KQogewotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlByaXZhdGVLZXkiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhwcml2
YXRlS2V5QmFzZTY0KSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhh
dHRyTGFiZWwpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uVGFnIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0so
YXBwbGljYXRpb25UYWdCYXNlNjQpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5
czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUo
a2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3
S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tp
XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRUZXN0S2V5VG9L
ZXljaGFpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5k
YXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIkFkZFRlc3RLZXlUb0tleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAg
ICAgeyAiUHJpdmF0ZUtleSIsIHRvV0socHJpdmF0ZUtleUJhc2U2NCkgfSwKKyAgICAgICAgeyAi
QXR0ckxhYmVsIiwgdG9XSyhhdHRyTGFiZWwpIH0sCisgICAgICAgIHsgIkFwcGxpY2F0aW9uVGFn
IiwgdG9XSyhhcHBsaWNhdGlvblRhZ0Jhc2U2NCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6Y2xlYW5VcEtleWNoYWluKEpTU3RyaW5nUmVmIGF0dHJMYWJlbCwgSlNT
dHJpbmdSZWYgYXBwbGljYXRpb25MYWJlbEJhc2U2NCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+
PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJBdHRyTGFiZWwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhhdHRyTGFi
ZWwpKTsKLQotICAgIGlmIChhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB7Ci0gICAgICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9u
TGFiZWwiKSkpOwotICAgICAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXBwbGljYXRpb25MYWJlbEJh
c2U2NCkpOwotICAgIH0KLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBW
ZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXpl
KCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9
IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsK
KyAgICBpZiAoIWFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpIHsKKyAgICAgICAgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZSgiQ2xlYW5VcEtleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAg
ICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAgICB9KS5nZXQo
KSk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
bGVhblVwS2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdW
YWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKCJDbGVhblVwS2V5Y2hhaW4iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAg
ICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAgICAgeyAiQXBwbGlj
YXRpb25MYWJlbCIsIHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgfSwKKyAgICB9KS5nZXQo
KSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6a2V5RXhpc3RzSW5LZXljaGFpbihKU1N0cmluZ1Jl
ZiBhdHRyTGFiZWwsIEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpCiB7Ci0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkpOwotCi0gICAgVmVjdG9yPFdLU3Ry
aW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICBy
YXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMu
c2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkg
ewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVz
W2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IktleUV4aXN0c0luS2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tUeXBlUmVmIHJl
dHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChy
ZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVh
bkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSku
Z2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVh
bigiS2V5RXhpc3RzSW5LZXljaGFpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsg
IkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAgICB7ICJBcHBsaWNhdGlvbkxh
YmVsIiwgdG9XSyhhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB9LAorICAgIH0pLmdldCgpKTsKIH0K
IAogdW5zaWduZWQgbG9uZyBUZXN0UnVubmVyOjpzZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFj
a0NhbGxzQ291bnQoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNlcnZlclRydXN0RXZh
bHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9
IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChy
ZXR1cm5EYXRhKSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tVSW50NjRH
ZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXR1cm5EYXRhKSkuZ2V0
KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KCJT
ZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KGJv
b2wgc2hvdWxkRGlzbWlzc0FzeW5jaHJvbm91c2x5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHNob3VsZERpc21pc3NBc3luY2hyb25vdXNseSkpOwotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiU2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25v
dXNseSIsIHNob3VsZERpc21pc3NBc3luY2hyb25vdXNseSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6YWJvcnRNb2RhbCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWJvcnRNb2RhbCIp
KTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQWJvcnRNb2RhbCIpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wQWRDbGlja0F0
dHJpYnV0aW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VN
ZXNzYWdlKCJEdW1wQWRDbGlja0F0dHJpYnV0aW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhckFkQ2xpY2tBdHRyaWJ1dGlv
biIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgi
Q2xlYXJBZENsaWNrQXR0cmlidXRpb24iKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFk
Q2xpY2tBdHRyaWJ1dGlvbnNUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsKCkKIHsKLSAgICBhdXRv
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xl
YXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpKTsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNp
dGVEYXRhUmVtb3ZhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3Rpbmci
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBZENs
aWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhKU1N0cmluZ1JlZiB1cmxTdHJp
bmcpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvblVSTEZvclRlc3RpbmciKSk7Ci0gICAgYXV0byB3dGZVUkxTdHJpbmcgPSB0b1dURlN0
cmluZyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh1cmxTdHJpbmcpKTsKLSAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHd0ZlVSTFN0cmluZy51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRBZENsaWNrQXR0cmli
dXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyIsCisgICAgICAgIGFkb3B0V0soV0tVUkxDcmVh
dGVXaXRoVVRGOENTdHJpbmcodG9XVEZTdHJpbmcodXJsU3RyaW5nKS51dGY4KCkuZGF0YSgpKSkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVk
Rm9yVGVzdGluZygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWFya0FkQ2xpY2tBdHRy
aWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmciKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRPZmZzY3JlZW5DYW52YXNF
bmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiT2Zmc2NyZWVuQ2FudmFz
RW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVu
bmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwg
a2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiT2Zmc2Ny
ZWVuQ2FudmFzRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiBib29sIFRlc3RSdW5uZXI6Omhhc0Fw
cEJvdW5kU2Vzc2lvbigpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhc0FwcEJvdW5kU2Vzc2lvbiIpKTsKLSAgICBXS1R5
cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFT
U0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0K
LSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSGFzQXBwQm91bmRTZXNzaW9uIik7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBCb3VuZFNlc3Npb24oKQogewotICAgIGF1dG8gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhckFwcEJv
dW5kU2Vzc2lvbiIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJBcHBCb3VuZFNl
c3Npb24iKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBcHBCb3VuZERvbWFpbnMoSlNWYWx1
ZVJlZiBvcmlnaW5BcnJheSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBj
YWNoZVRlc3RSdW5uZXJDYWxsYmFjayhEaWRTZXRBcHBCb3VuZERvbWFpbnNDYWxsYmFja0lELCBj
b21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxl
RnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAKICAgICBpZiAoIUpTVmFsdWVJc0FycmF5KGNv
bnRleHQsIG9yaWdpbkFycmF5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNPYmplY3RSZWYg
b3JpZ2lucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBvcmlnaW5BcnJheSwgbnVsbHB0cik7
Ci0gICAgc3RhdGljIGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgb3JpZ2luc0xlbmd0aFZh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcmlnaW5zLCBsZW5ndGhQcm9wZXJ0
eS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgb3Jp
Z2luc0xlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgYXV0byBvcmlnaW5zID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9yaWdpbkFycmF5LCBudWxscHRyKTsKICAgICBhdXRv
IG9yaWdpblVSTHMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIGF1dG8g
b3JpZ2luc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIG9yaWdpbnNMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb3JpZ2luc0xlbmd0aDsgKytpKSB7CisgICAgYXV0byBvcmlnaW5zTGVuZ3RoID0gYXJy
YXlMZW5ndGgoY29udGV4dCwgb3JpZ2lucyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG9yaWdpbnNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIG9yaWdpblZhbHVlID0g
SlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3JpZ2lucywgaSwgbnVsbHB0cik7
CiAgICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIG9yaWdpblZhbHVlKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gb3JpZ2luID0gYWRvcHQoSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCBvcmlnaW5WYWx1ZSwgbnVsbHB0cikpOworICAgICAgICBh
dXRvIG9yaWdpbiA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIG9yaWdpblZhbHVlKTsKICAgICAg
ICAgc2l6ZV90IG9yaWdpbkJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmlu
Z1NpemUob3JpZ2luLmdldCgpKSArIDE7CiAgICAgICAgIGF1dG8gb3JpZ2luQnVmZmVyID0gbWFr
ZVVuaXF1ZUFycmF5PGNoYXI+KG9yaWdpbkJ1ZmZlclNpemUpOwogICAgICAgICBKU1N0cmluZ0dl
dFVURjhDU3RyaW5nKG9yaWdpbi5nZXQoKSwgb3JpZ2luQnVmZmVyLmdldCgpLCBvcmlnaW5CdWZm
ZXJTaXplKTsKQEAgLTMxMTksNyArMjE3OCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQm91
bmREb21haW5zKEpTVmFsdWVSZWYgb3JpZ2luQXJyYXksIEpTVmFsdWVSZWYgY29tcGxldGlvCiAg
ICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG9yaWdpblVSTHMuZ2V0KCksIGFkb3B0V0soV0tVUkxD
cmVhdGVXaXRoVVRGOENTdHJpbmcob3JpZ2luQnVmZmVyLmdldCgpKSkuZ2V0KCkpOwogICAgIH0K
IAotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRBcHBCb3VuZERvbWFpbnMiKSk7CisgICAgYXV0byBtZXNzYWdlTmFtZSA9IHRv
V0soIlNldEFwcEJvdW5kRG9tYWlucyIpOwogICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgb3JpZ2lu
VVJMcy5nZXQoKSk7CiB9CiAKQEAgLTMxMjgsNiArMjE4NywxMSBAQCB2b2lkIFRlc3RSdW5uZXI6
OmRpZFNldEFwcEJvdW5kRG9tYWluc0NhbGxiYWNrKCkKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxi
YWNrKERpZFNldEFwcEJvdW5kRG9tYWluc0NhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RSdW5u
ZXI6OnBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgV0tC
dW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRv
V0sobmFtZSkuZ2V0KCksIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOwor
fQorCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogfSAvLyBuYW1lc3BhY2Ug
V1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5oCmluZGV4IGMwYTE0MDkwNWVkZjNkZGE0YTc2MWFiNjIwN2Q5N2I0MzYyMDg2YmIuLmFh
ZWI0MTBlM2VkMDdmYjZjYTRmOWYwM2JmZjdkZTM3MjI1MjdmNzAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCkBAIC00Niw3ICs0
Niw3IEBAIHB1YmxpYzoKICAgICAvLyBKU1dyYXBwYWJsZQogICAgIHZpcnR1YWwgSlNDbGFzc1Jl
ZiB3cmFwcGVyQ2xhc3MoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRS
ZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAg
ICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIGJvb2wgaXNJT1NG
YW1pbHkoKSBjb25zdAogICAgIHsKQEAgLTI1Myw3ICsyNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChib29sIGYpIHsgbV93aWxsU2VuZFJlcXVl
c3RSZXR1cm5zTnVsbCA9IGY7IH0KICAgICBib29sIHdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxs
T25SZWRpcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxP
blJlZGlyZWN0OyB9CiAgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVk
aXJlY3QoYm9vbCBmKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0ID0g
ZjsgfQotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0QWRkc0hUVFBCb2R5KEpTU3RyaW5nUmVm
IGJvZHkpIHsgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keSA9IHRvV1RGU3RyaW5nKHRvV0soYm9k
eSkpOyB9CisgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RBZGRzSFRUUEJvZHkoSlNTdHJpbmdS
ZWYgYm9keSkgeyBtX3dpbGxTZW5kUmVxdWVzdEhUVFBCb2R5ID0gdG9XVEZTdHJpbmcoYm9keSk7
IH0KICAgICBTdHJpbmcgd2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHkoKSBjb25zdCB7IHJldHVybiBt
X3dpbGxTZW5kUmVxdWVzdEhUVFBCb2R5OyB9CiAKICAgICB2b2lkIHNldFRleHREaXJlY3Rpb24o
SlNTdHJpbmdSZWYpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbGxG
b2N1c1dlYlZpZXdDYWxsYmFjaygpOwogICAgIHZvaWQgY2FsbFNldEJhY2tpbmdTY2FsZUZhY3Rv
ckNhbGxiYWNrKCk7CiAKLSAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBw
cmVmZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgb3ZlcnJpZGVQ
cmVmZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVmIHZhbHVlKTsKIAog
ICAgIC8vIENvb2tpZXMgdGVzdGluZwogICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhi
b29sKTsKQEAgLTMwNCw3ICszMDQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBHZW9sb2NhdGlvbi4K
ICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sKTsKLSAgICB2b2lkIHNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBKU1ZhbHVlUmVmIGFsdGl0dWRlLCBKU1ZhbHVlUmVmIGFsdGl0dWRl
QWNjdXJhY3ksIEpTVmFsdWVSZWYgaGVhZGluZywgSlNWYWx1ZVJlZiBzcGVlZCwgSlNWYWx1ZVJl
ZiBmbG9vckxldmVsKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJs
ZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxk
b3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlv
bmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91
YmxlPiBmbG9vckxldmVsKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5h
dmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdlKTsKICAgICBib29sIGlzR2VvbG9jYXRp
b25Qcm92aWRlckFjdGl2ZSgpOwogCkBAIC0zMzUsOCArMzM1LDggQEAgcHVibGljOgogICAgIGJv
b2wgc2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCgpIGNvbnN0OwogCiAgICAgSlNWYWx1ZVJlZiBm
YWlsTmV4dE5ld0NvZGVCbG9jaygpOwotICAgIEpTVmFsdWVSZWYgbnVtYmVyT2ZERkdDb21waWxl
cyhKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKTsKLSAgICBKU1ZhbHVlUmVmIG5ldmVySW5saW5lRnVu
Y3Rpb24oSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbik7CisgICAgSlNWYWx1ZVJlZiBudW1iZXJPZkRG
R0NvbXBpbGVzKEpTVmFsdWVSZWYgZnVuY3Rpb24pOworICAgIEpTVmFsdWVSZWYgbmV2ZXJJbmxp
bmVGdW5jdGlvbihKU1ZhbHVlUmVmIGZ1bmN0aW9uKTsKIAogICAgIGJvb2wgc2hvdWxkRGVjaWRl
TmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZERlY2lk
ZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5OyB9CiAgICAgdm9pZCBzZXRTaG91bGREZWNpZGVO
YXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheShib29sKTsKQEAgLTU0OSw2ICs1NDksOCBAQCBwcml2
YXRlOgogCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1fdGVzdFVSTDsgLy8gU2V0IGJ5IElu
amVjdGVkQnVuZGxlUGFnZSBvbmNlIHByb3Zpc2lvbmFsIGxvYWQgc3RhcnRzLgogCisgICAgdm9p
ZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sKTsKKwogICAgIFN0cmluZyBtX3dp
bGxTZW5kUmVxdWVzdEhUVFBCb2R5OwogICAgIFdURjo6U2Vjb25kcyBtX3RpbWVvdXQgeyAzMF9z
IH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGV4dElucHV0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCmluZGV4IDY0YWM4MTk3MTUzYWFlMGEwYWI3
MWViYmMyOTQyNDg0YTM1ZTY1YWQuLjZlMDBkOTkyMjVkMWYxYWFiMjYxNTZjODkyNWIwNTY2YTM2
NmQ3MjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGV4dElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKIAorI2lu
Y2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5o
IgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUGFnZS5oIgogI2luY2x1ZGUgIkpTVGV4dElucHV0
Q29udHJvbGxlci5oIgpAQCAtNDAsMzAgKzQxLDE0IEBAIFJlZjxUZXh0SW5wdXRDb250cm9sbGVy
PiBUZXh0SW5wdXRDb250cm9sbGVyOjpjcmVhdGUoKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFRleHRJbnB1dENvbnRyb2xsZXIpOwogfQogCi1UZXh0SW5wdXRDb250cm9sbGVyOjpUZXh0SW5w
dXRDb250cm9sbGVyKCkKLXsKLX0KLQotVGV4dElucHV0Q29udHJvbGxlcjo6flRleHRJbnB1dENv
bnRyb2xsZXIoKQotewotfQotCiBKU0NsYXNzUmVmIFRleHRJbnB1dENvbnRyb2xsZXI6OndyYXBw
ZXJDbGFzcygpCiB7CiAgICAgcmV0dXJuIEpTVGV4dElucHV0Q29udHJvbGxlcjo6dGV4dElucHV0
Q29udHJvbGxlckNsYXNzKCk7CiB9CiAKLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdp
bmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VX
aW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgc2V0UHJvcGVydHkoY29u
dGV4dCwgd2luZG93T2JqZWN0LCAidGV4dElucHV0Q29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4
Y2VwdGlvbik7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBhcnJheUxlbmd0aChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgYXJyYXkpCi17Ci0gICAgYXV0byBsZW5ndGhTdHJpbmcgPSBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGlmIChh
dXRvIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBhcnJheSwgbGVu
Z3RoU3RyaW5nLmdldCgpLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsK
LSAgICByZXR1cm4gMDsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGV4
dElucHV0Q29udHJvbGxlciIsIHRoaXMpOwogfQogCiBzdGF0aWMgV0tBcnJheVJlZiBjcmVhdGVD
b21wb3NpdGlvbkhpZ2hsaWdodERhdGEoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYg
anNIaWdobGlnaHRzVmFsdWUpCkBAIC03Miw1MCArNTcsMTkgQEAgc3RhdGljIFdLQXJyYXlSZWYg
Y3JlYXRlQ29tcG9zaXRpb25IaWdobGlnaHREYXRhKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIHJlc3VsdCA9IFdLTXV0
YWJsZUFycmF5Q3JlYXRlKCk7Ci0gICAgYXV0byBqc0hpZ2hsaWdodHNBcnJheSA9IGNvbnN0X2Nh
c3Q8SlNPYmplY3RSZWY+KGpzSGlnaGxpZ2h0c1ZhbHVlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcnJheUxlbmd0aChjb250ZXh0LCBqc0hpZ2hsaWdodHNBcnJheSk7Ci0gICAgaWYgKCFsZW5n
dGgpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBhdXRvIGpzRnJvbUtleSA9IGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmcm9tIikpOwotICAgIGF1dG8ganNMZW5n
dGhLZXkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwot
ICAgIGF1dG8ganNDb2xvcktleSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJjb2xvciIpKTsKLQotICAgIGF1dG8gd2tGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiZnJvbSIpKTsKLSAgICBhdXRvIHdrTGVuZ3RoS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGF1dG8gd2tD
b2xvcktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbG9yIikp
OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8ganNPYmplY3RWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGpzSGlnaGxpZ2h0c0FycmF5
LCBpLCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbiB8fCAhSlNWYWx1ZUlzT2Jq
ZWN0KGNvbnRleHQsIGpzT2JqZWN0VmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgYXV0byBqc09iamVjdCA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGpzT2JqZWN0VmFs
dWUpOwotICAgICAgICBhdXRvIGpzRnJvbVZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250
ZXh0LCBqc09iamVjdCwganNGcm9tS2V5LmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFq
c0Zyb21WYWx1ZSB8fCAhSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGpzRnJvbVZhbHVlKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8ganNMZW5ndGhWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwganNPYmplY3QsIGpzTGVuZ3RoS2V5LmdldCgpLCBudWxs
cHRyKTsKLSAgICAgICAgaWYgKCFqc0xlbmd0aFZhbHVlIHx8ICFKU1ZhbHVlSXNOdW1iZXIoY29u
dGV4dCwganNMZW5ndGhWYWx1ZSkpCisgICAgYXV0byBhcnJheSA9IGNvbnN0X2Nhc3Q8SlNPYmpl
Y3RSZWY+KGpzSGlnaGxpZ2h0c1ZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheUxl
bmd0aChjb250ZXh0LCBhcnJheSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRl
eChjb250ZXh0LCBhcnJheSwgaSwgbnVsbHB0cik7CisgICAgICAgIGlmICghdmFsdWUgfHwgIUpT
VmFsdWVJc09iamVjdChjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBhdXRvIGpzQ29sb3JWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
anNPYmplY3QsIGpzQ29sb3JLZXkuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICBpZiAoIWpzQ29s
b3JWYWx1ZSB8fCAhSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGpzQ29sb3JWYWx1ZSkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIGNvbG9yID0gYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBqc0NvbG9yVmFsdWUsIG51bGxwdHIpKTsKLSAgICAgICAgYXV0
byB3a0NvbG9yID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhjb2xvci5nZXQo
KSkpOwotICAgICAgICBhdXRvIHdrRnJvbSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobHJvdW5k
KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc0Zyb21WYWx1ZSwgbnVsbHB0cikpKSk7Ci0gICAg
ICAgIGF1dG8gd2tMZW5ndGggPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxyb3VuZChKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwganNMZW5ndGhWYWx1ZSwgbnVsbHB0cikpKSk7Ci0KKyAgICAgICAg
YXV0byBvYmplY3QgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPih2YWx1ZSk7CiAgICAgICAgIGF1
dG8gZGljdGlvbmFyeSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLSAg
ICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkaWN0aW9uYXJ5LmdldCgpLCB3a0Zyb21LZXkuZ2V0
KCksIHdrRnJvbS5nZXQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFy
eS5nZXQoKSwgd2tMZW5ndGhLZXkuZ2V0KCksIHdrTGVuZ3RoLmdldCgpKTsKLSAgICAgICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShkaWN0aW9uYXJ5LmdldCgpLCB3a0NvbG9yS2V5LmdldCgpLCB3a0Nv
bG9yLmdldCgpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImZyb20iLCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4obnVtZXJpY1Byb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgImZyb20iKSkp
OworICAgICAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCAibGVuZ3RoIiwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJsZW5ndGgiKSkpOworICAg
ICAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCAiY29sb3IiLCB0b1dLKHN0cmluZ1Byb3BlcnR5KGNv
bnRleHQsIG9iamVjdCwgImNvbG9yIikpLmdldCgpKTsKICAgICAgICAgV0tBcnJheUFwcGVuZEl0
ZW0ocmVzdWx0LCBkaWN0aW9uYXJ5LmdldCgpKTsKICAgICB9Ci0KICAgICByZXR1cm4gcmVzdWx0
OwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1RleHRJbnB1dENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5oCmluZGV4IDU1OGMyZTYxMTQwODE3ODVlM2I3Y2Fl
MTlmZWZkMzk2YWViMzdhOTQuLmE0NGMyOGU4NDQzOTE3MjkyYTliMzdiY2I3ZTI1NTJkMTIxNDRj
YTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4
dElucHV0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5oCkBAIC0yOCwxNyArMjgsMTcgQEAKICNpbmNsdWRl
ICJKU1dyYXBwYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAordHlwZWRlZiBjb25zdCBz
dHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFx
dWVKU1N0cmluZyogSlNTdHJpbmdSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1Zh
bHVlKiBKU1ZhbHVlUmVmOworCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVGV4dElucHV0Q29u
dHJvbGxlciA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CitjbGFzcyBUZXh0SW5wdXRDb250cm9sbGVy
IGZpbmFsIDogcHVibGljIEpTV3JhcHBhYmxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFRl
eHRJbnB1dENvbnRyb2xsZXI+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgflRleHRJbnB1dENvbnRy
b2xsZXIoKTsKLQotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdy
YXBwZXJDbGFzcygpOwogCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwg
SlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZv
aWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgdm9pZCBzZXRNYXJrZWRU
ZXh0KEpTU3RyaW5nUmVmIHRleHQsIGludCBmcm9tLCBpbnQgbGVuZ3RoLCBib29sIHN1cHByZXNz
VW5kZXJsaW5lLCBKU1ZhbHVlUmVmIGhpZ2hsaWdodHMpOwogICAgIGJvb2wgaGFzTWFya2VkVGV4
dCgpOwpAQCAtNDYsNyArNDYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRUZXh0KEpTU3Ry
aW5nUmVmIHRleHQpOwogCiBwcml2YXRlOgotICAgIFRleHRJbnB1dENvbnRyb2xsZXIoKTsKKyAg
ICBUZXh0SW5wdXRDb250cm9sbGVyKCkgPSBkZWZhdWx0OworCisgICAgSlNDbGFzc1JlZiB3cmFw
cGVyQ2xhc3MoKSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRz
Q29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0Fj
dGl2YXRlRm9udHNDb2NvYS5tbQppbmRleCAwMjRmZTYwNTczYjhmMmM1OTJlYmZkYjM1ZjNhNDQ0
ODVjZGI5NzU2Li41YTViNzdlYzE5NGRhNWZlM2ZmZjk5MTM3Y2U5YWNkMjZkZmU0YzFlIDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0FjdGl2
YXRlRm9udHNDb2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2NvY29hL0FjdGl2YXRlRm9udHNDb2NvYS5tbQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQg
YWN0aXZhdGVGb250cygpCiAKIHZvaWQgaW5zdGFsbEZha2VIZWx2ZXRpY2EoV0tTdHJpbmdSZWYg
Y29uZmlndXJhdGlvbikKIHsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvbmZpZ3VyYXRp
b25TdHJpbmcgPSBhZG9wdENGKFdLU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIGNvbmZpZ3VyYXRpb24pKTsKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb25TdHJpbmcgPSBhZG9w
dENGKFdLU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRp
b24pKTsKICAgICBOU1VSTCAqcmVzb3VyY2VVUkwgPSBbcmVzb3VyY2VzRGlyZWN0b3J5VVJMKCkg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
RmFrZUhlbHZldGljYS0lQC50dGYiLCBjb25maWd1cmF0aW9uU3RyaW5nLmdldCgpXSBpc0RpcmVj
dG9yeTpOT107CiAgICAgQ0ZFcnJvclJlZiBlcnJvciA9IG51bGxwdHI7CiAgICAgaWYgKCFDVEZv
bnRNYW5hZ2VyUmVnaXN0ZXJGb250c0ZvclVSTCgoX19icmlkZ2UgQ0ZVUkxSZWYpcmVzb3VyY2VV
UkwsIGtDVEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJyb3IpKSB7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxl
UGFnZUNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2Nv
YS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbQppbmRleCA4MTc2MTgyN2E4ODFkMDZkZmU3MGE5
YmQzMjI0NzMyYWUxOWJjZjI4Li45MWQyNDljNzI3ZjY4NzVlZDRhNGNjZjE1OWMwZjc3ZDcyZjg1
YmQ1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2Nv
Y29hL0luamVjdGVkQnVuZGxlUGFnZUNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0KQEAgLTQ3
LDEzICs0NywxMyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cGxhdGZvcm1EaWRTdGFydFBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZQogCiBTdHJpbmcgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpwbGF0Zm9ybVJlc3BvbnNlTWltZVR5cGUoV0tVUkxSZXNwb25zZVJlZiByZXNw
b25zZSkKIHsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gbnNVUkxSZXNwb25zZSA9IGFk
b3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CisgICAgYXV0
byBuc1VSTFJlc3BvbnNlID0gYWRvcHROUyhXS1VSTFJlc3BvbnNlQ29weU5TVVJMUmVzcG9uc2Uo
cmVzcG9uc2UpKTsKICAgICByZXR1cm4gW25zVVJMUmVzcG9uc2UuZ2V0KCkgTUlNRVR5cGVdOwog
fQogCiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVyQ291bnQoV0tV
UkxSZXNwb25zZVJlZiByZXNwb25zZSkKIHsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4g
bnNVUkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJl
c3BvbnNlKSk7CisgICAgYXV0byBuc1VSTFJlc3BvbnNlID0gYWRvcHROUyhXS1VSTFJlc3BvbnNl
Q29weU5TVVJMUmVzcG9uc2UocmVzcG9uc2UpKTsKICAgICBpZiAoIVtuc1VSTFJlc3BvbnNlIGlz
S2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiB7
IH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
aW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KaW5kZXgg
ODdjY2QyMWNhOWE3N2FhMmQwYTIxYTRjYWI1MjFjYWVlZmE5YzRhMi4uYzQxODIzMGYzYjRmZGU3
MTlhYzZjY2M4NGI3NDJkYmVjYTE0ZDI0YSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJJT1MubW0KQEAgLTYyLDcgKzYyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJpb3MiKSk7CisgICAg
cmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoImlvcyIpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKQEAgLTg5LDcgKzg5LDcgQEAg
c3RhdGljIGlkIGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChpZCBvYmosIE5TU3RyaW5nICppZEF0
dHJpYnV0ZSkKIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWRBdHRyaWJ1dGUp
CiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIGlkIHJvb3QgPSBzdGF0aWNfY2FzdDxQbGF0Zm9y
bVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7CiAKICAgICBpZCBy
ZXN1bHQgPSBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQocm9vdCwgW05TU3RyaW5nIHN0cmluZ1dp
dGhKU1N0cmluZ1JlZjppZEF0dHJpYnV0ZV0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW0KaW5kZXggNTIyMzRhYTRkNzQ3MmNkZTA3MWQ5ZTg2OTY5MGQ5MzU1Mjlh
MjBkMi4uYmJjOGJiMTZjODY0YmMyNjEwY2ZhYTY5YTA2ZmQ4MTNjNzY5NWQwNCAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudElPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCkBAIC0xMzYsMTEgKzEzNiw2IEBA
IEBlbmQKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkpOwotfQotCiBzdGF0aWMgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGNvbmNhdGVuYXRlQXR0cmlidXRlQW5kVmFsdWUoTlNTdHJpbmcgKmF0dHJp
YnV0ZSwgTlNTdHJpbmcgKnZhbHVlKQogewogICAgIFZlY3RvcjxVbmlDaGFyPiBidWZmZXIoW2F0
dHJpYnV0ZSBsZW5ndGhdKTsKQEAgLTMzMCwyNyArMzI1LDI3IEBAIFJlZlB0cjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNjbG9zZWRCeVJvdygpCiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5r
cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKIHsKLSAgICByZXR1cm4gY3JlYXRl
RW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRl
cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnN0cmluZ0Rlc2NyaXB0aW9uT2ZBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1Jl
ZiBhdHRyaWJ1dGUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0
dHJpYnV0ZSkKQEAgLTM4Miw3ICszNzcsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZQogICAg
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGF0dHJpYnV0ZSwgIkFYVGV4dHVhbENv
bnRleHQiKSkKICAgICAgICAgcmV0dXJuIFtbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlUZXh0dWFs
Q29udGV4dF0gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGRvdWJsZSBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBh
dHRyaWJ1dGUpCkBAIC00NDMsMTcgKzQzOCwxNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIAogSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGVOYW1lcygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm9sZURlc2NyaXB0aW9uKCkKQEAgLTQ2MywxMyArNDU4LDEyIEBAIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24oKQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRS
b2xlU3RyaW5nKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKCkKIHsK
LSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0
cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZGVzY3JpcHRpb24oKQpAQCAtNDc5LDcgKzQ3Myw3IEBAIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKQEAgLTQ4OSw3ICs0ODMsNyBAQCBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUoKQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2Uo
KQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0
ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpoZWxwVGV4dCgpIGNvbnN0CkBAIC01NDksNyArNTQzLDcgQEAgZG91YmxlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24oKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1i
ZXIoKQpAQCAtNTg0LDcgKzU3OCw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNS
ZXF1aXJlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2Vk
KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC01OTYsMTMgKzU4OSwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
U2VsZWN0ZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0
ZWRPcHRpb25BY3RpdmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVy
bWluYXRlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCkBAIC02MzgsNyArNjI5LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphcmlhSXNHcmFiYmVkKCkgY29uc3QKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogLy8gcGFyYW1ldGVyaXplZCBhdHRyaWJ1dGVzCkBAIC02NTksNyArNjUwLDcgQEAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yUG9zaXRp
b24oaW50IHgsIGludCB5KQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxl
bmd0aCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVk
IGxlbmd0aCkKQEAgLTcxMywzMiArNzA0LDMyIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RUZXh0V2l0aENyaXRlcmlhKEpTQ29udGV4CiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVzT2ZDb2x1bW5IZWFkZXJzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpT
U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVK
U1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRl
RW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
SGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dHJhaXRzKCkKQEAgLTkwMywyMyArODk0LDIxIEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hp
bGRyZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29k
aW5nKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpT
U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXNzaXN0aXZlVGVjaG5vbG9neVNpbXVsYXRlZEZvY3VzKCkKQEAg
LTEwMTYsMzEgKzEwMDUsMjYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3Vz
YWJsZSgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxl
KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0NvbGxhcHNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIApAQCAtMTA1MiwxMyArMTAzNiwxMSBAQCBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTaW5nbGVMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVs
dGlMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCkBAIC0xMDc0LDIyICsxMDU2LDE4IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpwb3B1cFZhbHVlKCkgY29uc3QKIAogdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YWRkU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiB9CiAKIC8vIFRleHQgbWFya2VycwpAQCAtMTEzNiw3ICsxMTE0LDcgQEAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0Zv
clRleHRNYXJrZXJSYW5nZShBY2Nlc3MKIHsKICAgICBpZCB0ZXh0TWFya2VycyA9IG1hcmtlclJh
bmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpOwogICAgIGlmICghW3RleHRNYXJrZXJzIGlz
S2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiAgICAgcmV0dXJu
IFtbbV9lbGVtZW50IHN0cmluZ0ZvclRleHRNYXJrZXJzOnRleHRNYXJrZXJzXSBjcmVhdGVKU1N0
cmluZ1JlZl07CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tCmluZGV4IGNhYjNm
MThiMzY1OWY0OTE2YmQ1MDA4NzkyODZkNmEyN2MwYzlmOTEuLjk4MWExZmQwZGM3NTgwY2YwMTJk
MzE1NmI4ZjlkZjk4OTMwMTFiZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0KKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvRXZlbnRTZW5kZXJQcm94eUlPUy5tbQpA
QCAtMzYsMjQgKzM2LDEyIEBAIG5hbWVzcGFjZSBXVFIgewogCiBFdmVudFNlbmRlclByb3h5OjpF
dmVudFNlbmRlclByb3h5KFRlc3RDb250cm9sbGVyKiB0ZXN0Q29udHJvbGxlcikKICAgICA6IG1f
dGVzdENvbnRyb2xsZXIodGVzdENvbnRyb2xsZXIpCi0gICAgLCBtX3RpbWUoMCkKLSAgICAsIG1f
cG9zaXRpb24oKQotICAgICwgbV9sZWZ0TW91c2VCdXR0b25Eb3duKGZhbHNlKQotICAgICwgbV9j
bGlja0NvdW50KDApCi0gICAgLCBtX2NsaWNrVGltZSgwKQotICAgICwgbV9jbGlja1Bvc2l0aW9u
KCkKLSAgICAsIG1fY2xpY2tCdXR0b24oa1dLRXZlbnRNb3VzZUJ1dHRvbk5vQnV0dG9uKQotICAg
ICwgZXZlbnROdW1iZXIoMCkKIHsKICAgICBVTlVTRURfUEFSQU0obV90ZXN0Q29udHJvbGxlcik7
CiAgICAgVU5VU0VEX1BBUkFNKG1fbGVmdE1vdXNlQnV0dG9uRG93bik7CiAgICAgVU5VU0VEX1BB
UkFNKGV2ZW50TnVtYmVyKTsKIH0KIAotRXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2VuZGVyUHJv
eHkoKQotewotfQotCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JC
dXR0b24oaW50IGJ1dHRvbikKIHsKICAgICBpZiAobV90aW1lIC0gbV9jbGlja1RpbWUgPCAxICYm
IG1fcG9zaXRpb24gPT0gbV9jbGlja1Bvc2l0aW9uICYmIGJ1dHRvbiA9PSBtX2NsaWNrQnV0dG9u
KSB7CkBAIC03MCwxNyArNTgsMTQgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVDbGlj
a0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91
c2VEb3duKHVuc2lnbmVkIGJ1dHRvbk51bWJlciwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMp
CiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VV
cCh1bnNpZ25lZCBidXR0b25OdW1iZXIsIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQogewot
ICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlTW92ZVRv
KGRvdWJsZSB4LCBkb3VibGUgeSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVu
dFNlbmRlclByb3h5OjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQpAQCAtOTAsNzkgKzc1
LDY2IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25k
cykKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjprZXlEb3duKFdLU3RyaW5nUmVmIGtleSwgV0tF
dmVudE1vZGlmaWVycyBtb2RpZmllcnMsIHVuc2lnbmVkIGtleUxvY2F0aW9uKQogewotICAgIC8v
IFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnkoaW50
IHgsIGludCB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQgeCwgaW50IHks
IGludCBwaGFzZSwgaW50IG1vbWVudHVtKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSwg
Ym9vbCBwYWdlZCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCisKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2ludChpbnQgeCwgaW50
IHkpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBk
YXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKIHsKLSAgICAvLyBXcml0ZSBt
ZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdLRXZlbnRN
b2RpZmllcnMsIGJvb2wgZW5hYmxlKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2
ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoUG9pbnRSYWRpdXMoaW50IHJhZGl1c1gsIGludCByYWRp
dXNZKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRv
dWNoU3RhcnQoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6OnRvdWNoTW92ZSgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6dG91Y2hFbmQoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9p
ZCBFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKCkKIHsKLSAgICAvLyBXcml0ZSBt
ZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpyZWxlYXNlVG91Y2hQb2ludChpbnQgaW5k
ZXgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y2Fu
Y2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CisKICNlbmRp
ZgogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0gYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFj
Lm1tCmluZGV4IDI1ZTBjM2QwMGU0OWJiMmI1ZWQyMDNlMTkwY2YxZWNjOTBkZjNhZjQuLjM1NGE4
ZjY1NTVjNmMwMDI2NWY1NjgxYTZiMzcxNTJhODRhNTYyYzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMu
bW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNz
aWJpbGl0eUNvbW1vbk1hYy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJp
bGl0eUNvbW1vbk1hYy5oIgogCiAjaW1wb3J0ICJKU1dyYXBwZXIuaCIKKyNpbXBvcnQgIlN0cmlu
Z0Z1bmN0aW9ucy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgog
I2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAKQEAgLTYxLDI2ICs2MiwyMiBAQCBDbGFzcyB3ZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKCkKICAgICByZXR1cm4gY2xzOwogfQogCi1z
dGF0aWMgSlNWYWx1ZVJlZiBtYWtlQXJyYXlSZWZGb3JBcnJheShKU0NvbnRleHRSZWYgY29udGV4
dCwgTlNBcnJheSAqYXJyYXkpCitzdGF0aWMgSlNPYmplY3RSZWYgbWFrZUpTQXJyYXkoSlNDb250
ZXh0UmVmIGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQogewogICAgIE5TVUludGVnZXIgY291bnQg
PSBhcnJheS5jb3VudDsKICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tjb3VudF07Ci0KICAgICBm
b3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICBhcmd1bWVudHNb
aV0gPSBtYWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBbYXJyYXkgb2JqZWN0QXRJbmRleDpp
XSk7Ci0KICAgICByZXR1cm4gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgY291bnQsIGFyZ3Vt
ZW50cywgbnVsbHB0cik7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIG1ha2VPYmplY3RSZWZGb3JE
aWN0aW9uYXJ5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkp
CitzdGF0aWMgSlNPYmplY3RSZWYgbWFrZUpTT2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBO
U0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkpCiB7Ci0gICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNP
YmplY3RNYWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIpOwotCisgICAgYXV0byBvYmplY3Qg
PSBKU09iamVjdE1ha2UoY29udGV4dCwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgW2RpY3Rpb25h
cnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNTdHJpbmcgKmtleSwgaWQg
b2JqLCBCT09MICopIHsKICAgICAgICAgaWYgKEpTVmFsdWVSZWYgcHJvcGVydHlWYWx1ZSA9IG1h
a2VWYWx1ZVJlZkZvclZhbHVlKGNvbnRleHQsIG9iaikpCiAgICAgICAgICAgICBKU09iamVjdFNl
dFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgW2tleSBjcmVhdGVKU1N0cmluZ1JlZl0uZ2V0KCks
IHByb3BlcnR5VmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7CiAgICAg
fV07Ci0KICAgICByZXR1cm4gb2JqZWN0OwogfQogCkBAIC05Niw5ICs5Myw5IEBAIEpTVmFsdWVS
ZWYgbWFrZVZhbHVlUmVmRm9yVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGlkIHZhbHVlKQog
ICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczp3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckNsYXNzKCldKQogICAgICAgICByZXR1cm4gdG9KUyhjb250ZXh0LCBXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4odmFsdWUp
KS5wdHIoKSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xh
c3NdXSkKLSAgICAgICAgcmV0dXJuIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KGNvbnRleHQs
IHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG1ha2VKU09iamVjdChjb250ZXh0LCB2YWx1ZSk7CiAg
ICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCi0gICAgICAgIHJl
dHVybiBtYWtlQXJyYXlSZWZGb3JBcnJheShjb250ZXh0LCB2YWx1ZSk7CisgICAgICAgIHJldHVy
biBtYWtlSlNBcnJheShjb250ZXh0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
QEAgLTExNSwyOCArMTEyLDE2IEBAIE5TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1l
dGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlCiAKICAgICBpZiAo
c2VhcmNoS2V5KSB7CiAgICAgICAgIGlkIHNlYXJjaEtleVBhcmFtZXRlciA9IG5pbDsKLSAgICAg
ICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hLZXkpKSB7Ci0gICAgICAgICAg
ICBhdXRvIHNlYXJjaEtleVN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgc2VhcmNoS2V5LCBudWxscHRyKSk7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoS2V5U3RyaW5n
KQotICAgICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtOU1N0cmluZyBzdHJpbmdX
aXRoSlNTdHJpbmdSZWY6c2VhcmNoS2V5U3RyaW5nLmdldCgpXTsKLSAgICAgICAgfSBlbHNlIGlm
IChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoS2V5KSkgeworICAgICAgICBpZiAoSlNW
YWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaEtleSkpCisgICAgICAgICAgICBzZWFyY2hLZXlQ
YXJhbWV0ZXIgPSB0b1dURlN0cmluZyhjb250ZXh0LCBzZWFyY2hLZXkpOworICAgICAgICBlbHNl
IGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoS2V5KSkgewogICAgICAgICAgICAg
SlNPYmplY3RSZWYgc2VhcmNoS2V5QXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2Vh
cmNoS2V5LCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaEtleUFycmF5TGVu
Z3RoID0gMDsKLQotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmluZyA9IGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgICAgICAgICBK
U1ZhbHVlUmVmIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1Zh
bHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAgICAg
ICAgICAgICAgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIp
KTsKLQorICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSBhcnJheUxl
bmd0aChjb250ZXh0LCBzZWFyY2hLZXlBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2VhcmNoS2V5QXJyYXlMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWYgc2VhcmNoS2V5VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChj
b250ZXh0LCBzZWFyY2hLZXlBcnJheSwgaSwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgSlNT
dHJpbmdSZWYgc2VhcmNoS2V5U3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBz
ZWFyY2hLZXlWYWx1ZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0
cmluZykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXNlYXJjaEtleVBhcmFtZXRlcikKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtOU011dGFibGVBcnJh
eSBhcnJheV07Ci0gICAgICAgICAgICAgICAgICAgIFtzZWFyY2hLZXlQYXJhbWV0ZXIgYWRkT2Jq
ZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoS2V5U3RyaW5nXV07Ci0g
ICAgICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVsZWFzZShzZWFyY2hLZXlTdHJpbmcpOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaEtleSA9IHRvV1RGU3Ry
aW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaEtl
eUFycmF5LCBpLCBudWxscHRyKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hLZXlQYXJh
bWV0ZXIpCisgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtOU011dGFi
bGVBcnJheSBhcnJheV07CisgICAgICAgICAgICAgICAgW3NlYXJjaEtleVBhcmFtZXRlciBhZGRP
YmplY3Q6c2VhcmNoS2V5XTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAo
c2VhcmNoS2V5UGFyYW1ldGVyKQpAQCAtMTQ0LDEwICsxMjksOSBAQCBOU0RpY3Rpb25hcnkgKnNl
YXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0Nv
bnRleHRSZQogICAgIH0KIAogICAgIGlmIChzZWFyY2hUZXh0ICYmIEpTU3RyaW5nR2V0TGVuZ3Ro
KHNlYXJjaFRleHQpKQotICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6
W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hUZXh0XSBmb3JLZXk6QCJBWFNl
YXJjaFRleHQiXTsKKyAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OnRv
V1RGU3RyaW5nKHNlYXJjaFRleHQpIGZvcktleTpAIkFYU2VhcmNoVGV4dCJdOwogCiAgICAgW3Bh
cmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OkAodmlzaWJsZU9ubHkpIGZvcktleTpAIkFY
VmlzaWJsZU9ubHkiXTsKLQogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpA
KGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSkgZm9yS2V5OkAiQVhJbW1lZGlhdGVEZXNjZW5kYW50
c09ubHkiXTsKIAogICAgIHJldHVybiBwYXJhbWV0ZXJpemVkQXR0cmlidXRlOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRleCA5MTNhZTBmNzVjZGI0ZWQ1
ZGVkZGViOTI1ZjZjOTUwMThkZGQxNzA0Li5hODg3ZGU1Yzg1ZDUwMjg0ZmQyNDQ3MTI1MTZlODlj
OTk4YzNhYTVmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5t
bQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1
bmRsZVBhZ2UuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KU1N0cmluZ1JlZkNGLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS0J1bmRsZVBhZ2UuaD4KQEAgLTk2LDcgKzk3LDcgQEAgc3RhdGljIGlkIGZpbmRB
Y2Nlc3NpYmxlT2JqZWN0QnlJZChpZCBvYmosIE5TU3RyaW5nICppZEF0dHJpYnV0ZSkKIAogUmVm
UHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nl
c3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWRBdHRyaWJ1dGUpCiB7Ci0gICAgV0tCdW5k
bGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3QgPSBzdGF0aWNfY2FzdDxQbGF0Zm9y
bVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7CiAKICAgICBSZXRh
aW5QdHI8aWQ+IHJlc3VsdDsKQEAgLTExMSw3ICsxMTIsNyBAQCBSZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJ
ZChKUwogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnBsYXRmb3JtTmFtZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJtYWMiKSk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoIm1hYyIp
OwogfQogCiAvLyBBWFRocmVhZCBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1h
Yy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW0KaW5kZXggNTBiM2UwMjIwYjhkMTIyYWQyMmJjOTZkNDI0Y2Zk
ODMzMWI2NWY1OS4uMmVmZjQ1NGU2Njc5MWQ2OThmOTViZWM3Njk0YTA5ZmIyY2NmMGExMSAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudE1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC0zMiw3ICszMiw3
IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCiAjaW1wb3J0ICJJbmplY3Rl
ZEJ1bmRsZS5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCi0KKyNpbXBvcnQgIkpT
QmFzaWNzLmgiCiAjaW1wb3J0IDxBcHBLaXQvTlNBY2Nlc3NpYmlsaXR5Lmg+CiAjaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
UmVmQ0YuaD4KQEAgLTg3LDExICs4Nyw2IEBAIEBlbmQKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0
YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkp
OwotfQotCiBSZWZQdHI8QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnNfY29udHJvbGxlcjsKIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudChpZCBlbGVtZW50KQpAQCAtMjA2LDcgKzIwMSw3IEBAIHN0YXRpYyBOU1N0
cmluZyogZGVzY3JpcHRpb25PZlZhbHVlKGlkIHZhbHVlT2JqZWN0LCBpZCBlbGVtZW50KQogCiBz
dGF0aWMgTlNTdHJpbmcgKmF0dHJpYnV0ZXNPZkVsZW1lbnQoaWQgYWNjZXNzaWJpbGl0eU9iamVj
dCkKIHsKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gYXR0cmlidXRlcyA9IHN1cHBvcnRlZEF0dHJp
YnV0ZXMoYWNjZXNzaWJpbGl0eU9iamVjdCk7CisgICAgYXV0byBhdHRyaWJ1dGVzID0gc3VwcG9y
dGVkQXR0cmlidXRlcyhhY2Nlc3NpYmlsaXR5T2JqZWN0KTsKIAogICAgIE5TTXV0YWJsZVN0cmlu
ZyogYXR0cmlidXRlc1N0cmluZyA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKICAgICBmb3Ig
KE5TU3RyaW5nKiBhdHRyaWJ1dGUgaW4gYXR0cmlidXRlcy5nZXQoKSkgewpAQCAtMjI3LDE2ICsy
MjIsMTMgQEAgc3RhdGljIE5TU3RyaW5nICphdHRyaWJ1dGVzT2ZFbGVtZW50KGlkIGFjY2Vzc2li
aWxpdHlPYmplY3QpCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXNTdHJpbmc7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1zdGF0aWMgSlNWYWx1ZVJlZiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJh
eShKU0NvbnRleHRSZWYgY29udGV4dCwgVmVjdG9yPFQ+IGNvbnN0JiBlbGVtZW50cykKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBKU09iamVjdFJlZiBtYWtlSlNBcnJheShKU0NvbnRleHRS
ZWYgY29udGV4dCwgY29uc3QgVmVjdG9yPFQ+JiBlbGVtZW50cykKIHsKLSAgICBKU1ZhbHVlUmVm
IGFycmF5UmVzdWx0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7Ci0gICAg
SlNPYmplY3RSZWYgYXJyYXlPYmogPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJyYXlSZXN1
bHQsIDApOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAw
LCAwKTsKICAgICBzaXplX3QgZWxlbWVudENvdW50ID0gZWxlbWVudHMuc2l6ZSgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZWxlbWVudENvdW50OyArK2kpCi0gICAgICAgIEpTT2JqZWN0
U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2JqLCBpLCBKU09iamVjdE1ha2UoY29u
dGV4dCwgZWxlbWVudHNbaV0tPndyYXBwZXJDbGFzcygpLCBlbGVtZW50c1tpXS5nZXQoKSksIDAp
OwotCi0gICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5
QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGVsZW1lbnRz
W2ldLT53cmFwcGVyQ2xhc3MoKSwgZWxlbWVudHNbaV0uZ2V0KCkpLCAwKTsKKyAgICByZXR1cm4g
YXJyYXk7CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY29uY2F0ZW5hdGVB
dHRyaWJ1dGVBbmRWYWx1ZShOU1N0cmluZyogYXR0cmlidXRlLCBOU1N0cmluZyogdmFsdWUpCkBA
IC0yNzMsMjUgKzI2NSwxMyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpzZWxlY3RUZXh0UGFyYW1l
dGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJlZiBjbwogICAgIAogICAgIGlm
IChzZWFyY2hTdHJpbmdzKSB7CiAgICAgICAgIE5TTXV0YWJsZUFycmF5ICpzZWFyY2hTdHJpbmdz
UGFyYW1ldGVyID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgaWYgKEpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgewotICAgICAgICAgICAgYXV0byBzZWFy
Y2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFy
Y2hTdHJpbmdzLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0cmlu
ZykKLSAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6W05T
U3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5nLmdldCgpXV07
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNl
YXJjaFN0cmluZ3MpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2Vh
cmNoU3RyaW5ncykpCisgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmpl
Y3Q6dG9XVEZTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncyldOworICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJheSA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hTdHJp
bmdzQXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgc2VhcmNo
U3RyaW5nc0FycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0gICAg
ICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVt
YmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAg
ICAgICBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlLCBudWxs
cHRyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8g
c2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
SlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBp
LCBudWxscHRyKSwgbnVsbHB0cikpOwotICAgICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdz
U3RyaW5nKQotICAgICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRP
YmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5n
LmdldCgpXV07Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJp
bmdzQXJyYXlMZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXkp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJh
eUxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFk
ZE9iamVjdDp0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxwdHIpKV07CiAgICAgICAgIH0KICAg
ICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OnNlYXJjaFN0cmluZ3NQYXJh
bWV0ZXIgZm9yS2V5OkAiQVhTZWxlY3RUZXh0U2VhcmNoU3RyaW5ncyJdOwogICAgIH0KQEAgLTMx
NCwyNCArMjk0LDEzIEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnNlYXJjaFRleHRQYXJhbWV0ZXJp
emVkQXR0cmlidXRlRm9yQ3JpdGVyaWEoSlNDb250ZXh0UmVmIGNvCiAKICAgICBpZiAoc2VhcmNo
U3RyaW5ncykgewogICAgICAgICBOU011dGFibGVBcnJheSAqc2VhcmNoU3RyaW5nc1BhcmFtZXRl
ciA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmco
Y29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5n
c1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgc2VhcmNoU3RyaW5n
cywgbnVsbHB0cikpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0gICAg
ICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBz
dHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAg
ICB9IGVsc2UgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgewor
ICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKQorICAg
ICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MpXTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKU09i
amVjdFJlZiBzZWFyY2hTdHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2Vh
cmNoU3RyaW5ncywgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGggPSAwOwotCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5n
ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAg
ICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVj
dEdldFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlT
dHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJh
eUxlbmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJy
YXlMZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hT
dHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJj
aFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmlu
Z3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2Vh
cmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdW5z
aWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgc2Vh
cmNoU3RyaW5nc0FycmF5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
ZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBbc2VhcmNoU3Ry
aW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmcoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSld
OwogICAgICAgICB9CiAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpz
ZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGZvcktleTpAIkFYU2VhcmNoVGV4dFNlYXJjaFN0cmluZ3Mi
XTsKICAgICB9CkBAIC00MDEsNyArMzcwLDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpyb3dIZWFkZXJzKCkgY29uc3QKICAgICBpZCB2YWx1ZSA9IGF0dHJpYnV0ZVZhbHVl
KG1fZWxlbWVudC5nZXQoKSwgTlNBY2Nlc3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJp
YnV0ZSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCiAg
ICAgICAgIGVsZW1lbnRzID0gbWFrZVZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4+KHZhbHVlKTsKLSAgICByZXR1cm4gY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVmUHRy
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pihjb250ZXh0LCBlbGVtZW50cyk7CisgICAgcmV0dXJu
IG1ha2VKU0FycmF5KGNvbnRleHQsIGVsZW1lbnRzKTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJ
T05TCiB9CiAKQEAgLTQxNSw3ICszODQsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbHVtbkhlYWRlcnMoKSBjb25zdAogICAgIGlkIHZhbHVlID0gYXR0cmlidXRlVmFs
dWUobV9lbGVtZW50LmdldCgpLCBOU0FjY2Vzc2liaWxpdHlDb2x1bW5IZWFkZXJVSUVsZW1lbnRz
QXR0cmlidXRlKTsKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3Nd
XSkKICAgICAgICAgZWxlbWVudHMgPSBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Pj4odmFsdWUpOwotICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheTxS
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KGNvbnRleHQsIGVsZW1lbnRzKTsKKyAgICBy
ZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgZWxlbWVudHMpOwogICAgIEVORF9BWF9PQkpDX0VY
Q0VQVElPTlMKIH0KICAgICAKQEAgLTYwNyw3ICs1NzYsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEFycmF5QXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYg
YXR0cgogCiAgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4gZWxlbWVu
dHM7CiAgICAgZ2V0VUlFbGVtZW50c1dpdGhBdHRyaWJ1dGUoYXR0cmlidXRlLCBlbGVtZW50cyk7
Ci0gICAgcmV0dXJuIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5PFJlZlB0cjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Pj4oY29udGV4dCwgZWxlbWVudHMpOworICAgIHJldHVybiBtYWtlSlNBcnJh
eShjb250ZXh0LCBlbGVtZW50cyk7CiB9CiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShKU1N0cmlu
Z1JlZiBhdHRyaWJ1dGUpIGNvbnN0CkBAIC05NzYsNyArOTQ1LDYgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMjI5LDcgKzExOTcsNyBAQCBK
U1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlYXJjaFRleHRXaXRoQ3JpdGVyaWEo
SlNDb250ZXh0UmVmIGNvbnRleHQsCiAgICAgTlNEaWN0aW9uYXJ5ICpwYXJhbWV0ZXJpemVkQXR0
cmlidXRlID0gc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShjb250
ZXh0LCBzZWFyY2hTdHJpbmdzLCBzdGFydEZyb20sIGRpcmVjdGlvbik7CiAgICAgaWQgcmVzdWx0
ID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWFNlYXJjaFRleHRX
aXRoQ3JpdGVyaWEiIGZvclBhcmFtZXRlcjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKICAgICBp
ZiAoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCi0gICAgICAgIHJldHVy
biBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheTxSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZT4+KGNvbnRleHQsIG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2U+PihyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNvbnRleHQs
IG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+PihyZXN1bHQp
KTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTE1NDYsMTMgKzE1MTQsMTEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVT
ZWxlY3Rpb25BdEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAogCiB2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4g
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQpAQCAtMTU2Miw4ICsxNTI4LDcgQEAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50
RW5jb2RpbmcoKQogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0cmluZ1JlZl07CiAgICAgRU5EX0FY
X09CSkNfRVhDRVBUSU9OUwotICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7
CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCkBAIC0xNTczLDggKzE1
MzgsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
ZG9jdW1lbnRVUkkoKQogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xh
c3NdXSkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0cmluZ1JlZl07CiAgICAgRU5E
X0FYX09CSkNfRVhDRVBUSU9OUwotICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQpAQCAtMTU4Myw3ICsxNTQ3LDYg
QEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCgp
CiAgICAgTlNVUkwgKnVybCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
Ok5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV07CiAgICAgcmV0dXJuIFtbdXJsIGFic29sdXRl
U3RyaW5nXSBjcmVhdGVKU1N0cmluZ1JlZl07ICAgIAogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElP
TlMKLSAgICAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMTYyMiw3ICsxNTg1LDYgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiAgICAgQkVH
SU5fQVhfT0JKQ19FWENFUFRJT05TCiAgICAgcmVzdWx0ID0gW21fZWxlbWVudCBhY2Nlc3NpYmls
aXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTpOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXTsK
ICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCi0gICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtMTY0OCwxOSArMTYxMCwxNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
TXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE2NzUsMTMg
KzE2MzQsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25z
dAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSgpIGNvbnN0CiB7
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTcxNCwxNyArMTY3MSwx
NCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCiAKIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigp
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQog
CiAvLyBUZXh0IG1hcmtlcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCmluZGV4IDQwM2Y0ZmY4MzJlZTBl
ZjdjM2NmYWJkZjBmODdlMmNjYmU2MTRmOGEuLmFkYmI0YjdiNWQ1NGZiMTRhOWM0YmRlOGE5MjI3
NWYxMWMxNDE2ZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtNDYsMTYgKzQ2LDExIEBAIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjppbnNwZWN0b3JUZXN0U3R1YlVSTCgp
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICByZXR1cm4gbnVsbHB0cjsKICNlbHNlCi0g
ICAgQ0ZCdW5kbGVSZWYgaW5zcGVjdG9yQnVuZGxlID0gQ0ZCdW5kbGVHZXRCdW5kbGVXaXRoSWRl
bnRpZmllcihDRlNUUigiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIikpOworICAgIGF1dG8gaW5z
cGVjdG9yQnVuZGxlID0gQ0ZCdW5kbGVHZXRCdW5kbGVXaXRoSWRlbnRpZmllcihDRlNUUigiY29t
LmFwcGxlLldlYkluc3BlY3RvclVJIikpOwogICAgIGlmICghaW5zcGVjdG9yQnVuZGxlKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsID0gYWRv
cHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChpbnNwZWN0b3JCdW5kbGUsIENGU1RSKCJUZXN0
U3R1YiIpLCBDRlNUUigiaHRtbCIpLCBOVUxMKSk7Ci0gICAgaWYgKCF1cmwpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nID0gQ0ZVUkxHZXRTdHJp
bmcodXJsLmdldCgpKTsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJp
bmcodXJsU3RyaW5nKSk7CisgICAgYXV0byByZXNvdXJjZVVSTCA9IGFkb3B0Q0YoQ0ZCdW5kbGVD
b3B5UmVzb3VyY2VVUkwoaW5zcGVjdG9yQnVuZGxlLCBDRlNUUigiVGVzdFN0dWIiKSwgQ0ZTVFIo
Imh0bWwiKSwgTlVMTCkpOworICAgIHJldHVybiByZXNvdXJjZVVSTCA/IGFkb3B0KEpTU3RyaW5n
Q3JlYXRlV2l0aENGU3RyaW5nKENGVVJMR2V0U3RyaW5nKHJlc291cmNlVVJMLmdldCgpKSkpIDog
bnVsbHB0cjsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1N0cmluZ0Z1bmN0aW9ucy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlv
bnMuaAppbmRleCAxYmMwNWMwYTVmM2E4MDRjMGIxNDFiODk2OTBiNzVkMjc3MTBlNzYxLi42N2Yz
OWU2OWYxNTQwOGI5MmVhM2FlOTQ3YzlmYTkyZmVlYTEyOGNkIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDE1ICsyNCwxMiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU3RyaW5nRnVuY3Rpb25zX2gKLSNkZWZpbmUg
U3RyaW5nRnVuY3Rpb25zX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+
CisjaW5jbHVkZSAiSlNCYXNpY3MuaCIKICNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5QdHIuaD4K
ICNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmdQ
cml2YXRlLmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1dLVVJMLmg+CiAjaW5jbHVkZSA8c3N0cmVhbT4K
ICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CkBAIC00NCw3ICs0
MSw4IEBACiAKIG5hbWVzcGFjZSBXVFIgewogCi0vLyBDb252ZXJzaW9uIGZ1bmN0aW9ucworV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0tTdHJpbmcoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVm
KTsKK1dURjo6U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAK
IGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhKU1N0cmluZ1JlZiBzdHJpbmcp
CiB7CkBAIC01Niw5ICs1NCwxNCBAQCBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRv
V0soY29uc3QgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+JiBzdHJpbmcpCiAgICAgcmV0dXJuIHRv
V0soc3RyaW5nLmdldCgpKTsKIH0KIAoraW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0
b1dLKGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKK30KKwogaW5saW5lIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB0b1dLKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICByZXR1cm4gdG9XSyhzdHJpbmcudXRmOCgpLmRhdGEoKSk7CiB9CiAKIGlubGlu
ZSBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdG9KUyhXS1N0cmluZ1JlZiBzdHJpbmcpCkBAIC05
OSw2ICsxMDIsMjUgQEAgaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiYgc3RyaW5nKQogICAgIHJldHVybiB0b1dURlN0cmluZyhzdHJp
bmcuZ2V0KCkpOwogfQogCi19IC8vIG5hbWVzcGFjZSBXVFIKK2lubGluZSBXVEY6OlN0cmluZyB0
b1dURlN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvV1RGU3RyaW5n
KHRvV0soc3RyaW5nKSk7Cit9CiAKLSNlbmRpZiAvLyBTdHJpbmdGdW5jdGlvbnNfaAoraW5saW5l
IFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiYg
c3RyaW5nKQoreworICAgIHJldHVybiB0b1dURlN0cmluZyhzdHJpbmcuZ2V0KCkpOworfQorCitp
bmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0tTdHJpbmcoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvV0soY3JlYXRlSlNTdHJp
bmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsKK30KKworaW5saW5lIFdURjo6U3RyaW5nIHRvV1RG
U3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIC8v
IEZJWE1FOiBDb3VsZCBtYWtlIHRoaXMgZWZmaWNpZW50IGJ5IHVzaW5nIHRoZSBXVEZTdHJpbmcg
aW5zaWRlIE9wYXF1ZUpTU3RyaW5nIGlmIHdlIHdhbnRlZCB0by4KKyAgICByZXR1cm4gdG9XVEZT
dHJpbmcoY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDEz
NDVjNDJjMTFlNjJkYzA4OGM2ZjJkMzhiOTliMDkzNTY0ZTAxMzguLjc1ZDlmYjYwNDQ0MTQ1ZjFl
Y2RmYWVmZDk5MDhhYWUyNjg4NTRlZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9u
cy5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGVyUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25zLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25z
LmgiCiAjaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1
cHBvcnQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+
CkBAIC00OTQsOCArNDk0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQg
YXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5zdGFs
bE1vY2tHYW1lcGFkUHJvdmlkZXIoKTsKICNlbmRpZgogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHBhZ2VHcm91cElkZW50aWZpZXIgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJXZWJLaXRUZXN0UnVubmVyUGFnZUdyb3VwIikpOwotICAgIG1fcGFnZUdyb3Vw
LmFkb3B0KFdLUGFnZUdyb3VwQ3JlYXRlV2l0aElkZW50aWZpZXIocGFnZUdyb3VwSWRlbnRpZmll
ci5nZXQoKSkpOworICAgIG1fcGFnZUdyb3VwLmFkb3B0KFdLUGFnZUdyb3VwQ3JlYXRlV2l0aElk
ZW50aWZpZXIodG9XSygiV2ViS2l0VGVzdFJ1bm5lclBhZ2VHcm91cCIpLmdldCgpKSk7CiAKICAg
ICBtX2V2ZW50U2VuZGVyUHJveHkgPSBtYWtlVW5pcXVlPEV2ZW50U2VuZGVyUHJveHk+KHRoaXMp
OwogfQpAQCAtNTA3LDkgKzUwNiw5IEBAIFdLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRp
b25SZWY+IFRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0CiAgICAgV0tD
b250ZXh0Q29uZmlndXJhdGlvblNldEZ1bGx5U3luY2hyb25vdXNNb2RlSXNBbGxvd2VkRm9yVGVz
dGluZyhjb25maWd1cmF0aW9uLmdldCgpLCB0cnVlKTsKICAgICBXS0NvbnRleHRDb25maWd1cmF0
aW9uU2V0SWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0c0ZvclRlc3RpbmcoY29uZmln
dXJhdGlvbi5nZXQoKSwgb3B0aW9ucy5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRz
KTsKIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBvdmVycmlkZUxhbmd1YWdl
cyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byBvdmVycmlkZUxh
bmd1YWdlcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgZm9yIChhdXRv
JiBsYW5ndWFnZSA6IG9wdGlvbnMub3ZlcnJpZGVMYW5ndWFnZXMpCi0gICAgICAgIFdLQXJyYXlB
cHBlbmRJdGVtKG92ZXJyaWRlTGFuZ3VhZ2VzLmdldCgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7CisgICAgICAg
IFdLQXJyYXlBcHBlbmRJdGVtKG92ZXJyaWRlTGFuZ3VhZ2VzLmdldCgpLCB0b1dLKGxhbmd1YWdl
KS5nZXQoKSk7CiAgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldE92ZXJyaWRlTGFuZ3VhZ2Vz
KGNvbmZpZ3VyYXRpb24uZ2V0KCksIG92ZXJyaWRlTGFuZ3VhZ2VzLmdldCgpKTsKIAogICAgIGlm
IChvcHRpb25zLnNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkpIHsKQEAgLTg0
MywzMSArODQyLDI0IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0Nv
bnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvCiAgICAgV0tQcmVmZXJlbmNl
c1Jlc2V0QWxsSW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKHByZWZlcmVuY2VzKTsKIAogICAgIC8vIFNl
dCBpbnRlcm5hbCBmZWF0dXJlcyB0aGF0IGhhdmUgZGlmZmVyZW50IGRlZmF1bHQgdmFsdWVzIGZv
ciB0ZXN0aW5nLgotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBhc3luY092ZXJmbG93U2Nyb2xsaW5n
RmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBc3luY092ZXJmbG93U2Ny
b2xsaW5nRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVy
ZUZvcktleShwcmVmZXJlbmNlcywgZmFsc2UsIGFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdGZWF0dXJl
KTsKIAotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBhc3luY0ZyYW1lU2Nyb2xsaW5nRmVhdHVyZSA9
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBc3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxl
ZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVm
ZXJlbmNlcywgZmFsc2UsIGFzeW5jRnJhbWVTY3JvbGxpbmdGZWF0dXJlKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCB0
b1dLKCJBc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCIpLmdldCgpKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCB0
b1dLKCJBc3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZCIpLmdldCgpKTsKIAogI2lmIEVOQUJMRShJ
TlBVVF9UWVBFX0RBVEUpCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0VHlwZURhdGVGZWF0
dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZURhdGVFbmFibGVk
Iik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZl
cmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVEYXRlRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1Nl
dEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1
dFR5cGVEYXRlRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBF
X0RBVEVUSU1FTE9DQUwpCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0VHlwZURhdGVUaW1l
TG9jYWxGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZURh
dGVUaW1lTG9jYWxFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdG
ZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVEYXRlVGltZUxvY2FsRmVh
dHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHBy
ZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVEYXRlVGltZUxvY2FsRW5hYmxlZCIpLmdl
dCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX01PTlRIKQotICAgIHN0YXRpYyBX
S1N0cmluZ1JlZiBpbnB1dFR5cGVNb250aEZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSW5wdXRUeXBlTW9udGhFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldElu
dGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVNb250
aEZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktl
eShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlTW9udGhFbmFibGVkIikuZ2V0KCkp
OwogI2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRSkKLSAgICBzdGF0aWMgV0tTdHJp
bmdSZWYgaW5wdXRUeXBlVGltZUZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSW5wdXRUeXBlVGltZUVuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxE
ZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlwZVRpbWVGZWF0dXJl
KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVy
ZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZVRpbWVFbmFibGVkIikuZ2V0KCkpOwogI2VuZGlm
CiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfV0VFSykKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5w
dXRUeXBlV2Vla0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5wdXRU
eXBlV2Vla0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlwZVdlZWtGZWF0dXJlKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRy
dWUsIHRvV0soIklucHV0VHlwZVdlZWtFbmFibGVkIikuZ2V0KCkpOwogI2VuZGlmCiAKICAgICBm
b3IgKGNvbnN0IGF1dG8mIGludGVybmFsRGVidWdGZWF0dXJlIDogb3B0aW9ucy5pbnRlcm5hbERl
YnVnRmVhdHVyZXMpCkBAIC05MjAsMjUgKzkxMiwxNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpy
ZXNldFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRp
bwogICAgIFdLUHJlZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2Rl
KHByZWZlcmVuY2VzLCBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUp
OwogICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUpOwogCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGRl
ZmF1bHRUZXh0RW5jb2RpbmcgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSVNPLTg4
NTktMSIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShwcmVm
ZXJlbmNlcywgZGVmYXVsdFRleHRFbmNvZGluZyk7Ci0KLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYg
c3RhbmRhcmRGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVz
Iik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGN1cnNpdmVGb250RmFtaWx5ID0gV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxlIENoYW5jZXJ5Iik7Ci0gICAgc3RhdGljIFdLU3Ry
aW5nUmVmIGZhbnRhc3lGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlBhcHlydXMiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgZml4ZWRGb250RmFtaWx5ID0gV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNvdXJpZXIiKTsKLSAgICBzdGF0aWMgV0tTdHJp
bmdSZWYgcGljdG9ncmFwaEZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQXBwbGUgQ29sb3IgRW1vamkiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgc2Fuc1Nlcmlm
Rm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIZWx2ZXRpY2EiKTsK
LSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgc2VyaWZGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRpbWVzIik7CisgICAgV0tQcmVmZXJlbmNlc1NldERlZmF1bHRUZXh0
RW5jb2RpbmdOYW1lKHByZWZlcmVuY2VzLCB0b1dLKCJJU08tODg1OS0xIikuZ2V0KCkpOwogCiAg
ICAgV0tQcmVmZXJlbmNlc1NldE1pbmltdW1Gb250U2l6ZShwcmVmZXJlbmNlcywgMCk7Ci0gICAg
V0tQcmVmZXJlbmNlc1NldFN0YW5kYXJkRm9udEZhbWlseShwcmVmZXJlbmNlcywgc3RhbmRhcmRG
b250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0Q3Vyc2l2ZUZvbnRGYW1pbHkocHJlZmVy
ZW5jZXMsIGN1cnNpdmVGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0RmFudGFzeUZv
bnRGYW1pbHkocHJlZmVyZW5jZXMsIGZhbnRhc3lGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVu
Y2VzU2V0Rml4ZWRGb250RmFtaWx5KHByZWZlcmVuY2VzLCBmaXhlZEZvbnRGYW1pbHkpOwotICAg
IFdLUHJlZmVyZW5jZXNTZXRQaWN0b2dyYXBoRm9udEZhbWlseShwcmVmZXJlbmNlcywgcGljdG9n
cmFwaEZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRTYW5zU2VyaWZGb250RmFtaWx5
KHByZWZlcmVuY2VzLCBzYW5zU2VyaWZGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0
U2VyaWZGb250RmFtaWx5KHByZWZlcmVuY2VzLCBzZXJpZkZvbnRGYW1pbHkpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRTdGFuZGFyZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIlRpbWVzIiku
Z2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDdXJzaXZlRm9udEZhbWlseShwcmVmZXJlbmNl
cywgdG9XSygiQXBwbGUgQ2hhbmNlcnkiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEZh
bnRhc3lGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJQYXB5cnVzIikuZ2V0KCkpOworICAg
IFdLUHJlZmVyZW5jZXNTZXRGaXhlZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIkNvdXJp
ZXIiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFBpY3RvZ3JhcGhGb250RmFtaWx5KHBy
ZWZlcmVuY2VzLCB0b1dLKCJBcHBsZSBDb2xvciBFbW9qaSIpLmdldCgpKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0U2Fuc1NlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiSGVsdmV0aWNh
IikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRTZXJpZkZvbnRGYW1pbHkocHJlZmVyZW5j
ZXMsIHRvV0soIlRpbWVzIikuZ2V0KCkpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRBc3luY2hyb25v
dXNTcGVsbENoZWNraW5nRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogI2lmIEVOQUJMRShN
RURJQV9TT1VSQ0UpCiAgICAgV0tQcmVmZXJlbmNlc1NldE1lZGlhU291cmNlRW5hYmxlZChwcmVm
ZXJlbmNlcywgdHJ1ZSk7CkBAIC0xMDEwLDM4ICs5OTMsMjcgQEAgYm9vbCBUZXN0Q29udHJvbGxl
cjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9u
cywgUmUKIAogICAgIFdLUGFnZVNldEN1c3RvbVVzZXJBZ2VudChtX21haW5XZWJWaWV3LT5wYWdl
KCksIG51bGxwdHIpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzZXQiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gcmVzZXRNZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBhdXRvIHJlc2V0TWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CiAKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc2hvdWxkR0NLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTaG91bGRHQyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5S
ZWY+IHNob3VsZEdDVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2djQmV0d2VlblRl
c3RzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5LmdldCgpLCBz
aG91bGRHQ0tleS5nZXQoKSwgc2hvdWxkR0NWYWx1ZS5nZXQoKSk7CisgICAgc2V0VmFsdWUocmVz
ZXRNZXNzYWdlQm9keSwgIlNob3VsZEdDIiwgbV9nY0JldHdlZW5UZXN0cyk7CiAKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gYWxsb3dlZEhvc3RzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWxsb3dlZEhvc3RzIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZUFycmF5UmVmPiBhbGxvd2VkSG9zdHNWYWx1ZSA9IGFkb3B0V0soV0tNdXRhYmxlQXJy
YXlDcmVhdGUoKSk7Ci0gICAgZm9yIChhdXRvJiBob3N0IDogbV9hbGxvd2VkSG9zdHMpIHsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrSG9zdCA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoaG9zdC5jX3N0cigpKSk7Ci0gICAgICAgIFdLQXJyYXlBcHBl
bmRJdGVtKGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpLCB3a0hvc3QuZ2V0KCkpOwotICAgIH0KLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCksIGFsbG93ZWRIb3N0
c0tleS5nZXQoKSwgYWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCkpOworICAgIGF1dG8gYWxsb3dlZEhv
c3RzVmFsdWUgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGZvciAoYXV0
byYgaG9zdCA6IG1fYWxsb3dlZEhvc3RzKQorICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShhbGxv
d2VkSG9zdHNWYWx1ZS5nZXQoKSwgdG9XSyhob3N0LmNfc3RyKCkpLmdldCgpKTsKKyAgICBzZXRW
YWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiQWxsb3dlZEhvc3RzIiwgYWxsb3dlZEhvc3RzVmFsdWUu
Z2V0KCkpOwogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXhJc29sYXRlZE1vZGVLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gYXhJc29sYXRlZE1vZGVWYWx1ZSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCksIGF4SXNvbGF0ZWRN
b2RlS2V5LmdldCgpLCBheElzb2xhdGVkTW9kZVZhbHVlLmdldCgpKTsKKyAgICBzZXRWYWx1ZShy
ZXNldE1lc3NhZ2VCb2R5LCAiQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIsIG1fYWNjZXNzaWJp
bGl0eUlzb2xhdGVkVHJlZU1vZGUpOwogI2VuZGlmCi0gICAgCi0gICAgaWYgKG9wdGlvbnMuanNj
T3B0aW9ucy5sZW5ndGgoKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ganNj
T3B0aW9uc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkpTQ09w
dGlvbnMiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zVmFs
dWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9wdGlvbnMuanNjT3B0
aW9ucy5jX3N0cigpKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0ocmVzZXRNZXNzYWdl
Qm9keS5nZXQoKSwganNjT3B0aW9uc0tleS5nZXQoKSwganNjT3B0aW9uc1ZhbHVlLmdldCgpKTsK
LSAgICB9CisKKyAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKQorICAgICAgICBz
ZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIsIG9wdGlvbnMuanNjT3B0aW9u
cy5jX3N0cigpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdlYkNvcmVUZXN0U3VwcG9y
dDo6c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRk
aXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7CiAjZW5kaWYKIAotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgcmVzZXRNZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHRvV0soIlJlc2V0Iiku
Z2V0KCksIHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCkpOwogCiAgICAgV0tDb250ZXh0U2V0U2hvdWxk
VXNlRm9udFNtb290aGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBm
YWxzZSk7CiAKQEAgLTEyMDMsOCArMTE3NSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0
ZUxpdmVEb2N1bWVudHNBZnRlclRlc3QoKQogCiAgICAgQXN5bmNUYXNrKFtdKCkgewogICAgICAg
ICAvLyBBZnRlciBlYWNoIHRlc3QsIHdlIHVwZGF0ZSB0aGUgbGlzdCBvZiBsaXZlIGRvY3VtZW50
cyBzbyB0aGF0IHdlIGNhbiBkZXRlY3Qgd2hlbiBhbiBhYmFuZG9uZWQgZG9jdW1lbnQgZmlyc3Qg
c2hvd2VkIHVwLgotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRMaXZlRG9jdW1lbnRz
IikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG51bGxwdHIpOworICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygi
R2V0TGl2ZURvY3VtZW50cyIpLmdldCgpLCBudWxscHRyKTsKICAgICB9LCA1X3MpLnJ1bigpOwog
fQogCkBAIC0xMjE1LDggKzExODYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjaGVja0Zvcldv
cmxkTGVha3MoKQogCiAgICAgQXN5bmNUYXNrKFtdKCkgewogICAgICAgICAvLyBUaGlzIHJ1bnMg
YXQgdGhlIGVuZCBvZiBhIHNlcmllcyBvZiB0ZXN0cy4gSXQgY2xlYXJzIGNhY2hlcywgcnVucyBh
IEdDIGFuZCB0aGVuIGZldGNoZXMgdGhlIGxpc3Qgb2YgZG9jdW1lbnRzLgotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJDaGVja0ZvcldvcmxkTGVha3MiKSk7Ci0gICAgICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgICAg
IFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKCJDaGVja0ZvcldvcmxkTGVha3MiKS5n
ZXQoKSwgbnVsbHB0cik7CiAgICAgfSwgMjBfcykucnVuKCk7CiB9CiAKQEAgLTEzMjQsNiArMTI5
NCw3IEBAIGNvbnN0IGNoYXIqIFRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJvY2Vzc05hbWUoKQog
fQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQorCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRBbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sIGFsbG93cykKIHsKICAgICBtX2FsbG93c0FueVNTTENl
cnRpZmljYXRlID0gYWxsb3dzOwpAQCAtMTQwMCw4ICsxMzcxLDggQEAgc3RhdGljIGJvb2wgcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKIAogc3Rh
dGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgo
Y29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQog
ewotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBiYXNlVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0
VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHJlbGF0
aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkwuZ2V0KCksIHZh
bHVlLmNfc3RyKCkpKTsKKyAgICBhdXRvIGJhc2VVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwo
cGF0aE9yVVJMLmNfc3RyKCkpKTsKKyAgICBhdXRvIHJlbGF0aXZlVVJMID0gYWRvcHRXSyhXS1VS
TENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkwuZ2V0KCksIHZhbHVlLmNfc3RyKCkpKTsKICAgICBy
ZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlQYXRoKHJlbGF0aXZlVVJMLmdldCgpKSkpOwog
fQogCkBAIC0xNDE1LDggKzEzODYsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVUZXN0T3B0aW9uc0Zy
b21UZXN0SGVhZGVyKFRlc3RPcHRpb25zJiB0ZXN0T3B0aW9ucywgY29uc3Qgc3RkOgogICAgIHN0
ZDo6c3RyaW5nIGZpbGVuYW1lID0gYWJzb2x1dGVQYXRoOwogICAgIGlmIChmaWxlbmFtZS5lbXB0
eSgpKSB7CiAgICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJlZHVjZSBjb252ZXJzaW9ucyBiZXR3
ZWVuIGFsbCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgotICAgICAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gd2tVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkp
KTsKLSAgICAgICAgZmlsZW5hbWUgPSB0ZXN0UGF0aCh3a1VSTC5nZXQoKSk7CisgICAgICAgIGZp
bGVuYW1lID0gdGVzdFBhdGgoYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigp
KSkuZ2V0KCkpOwogICAgIH0KIAogICAgIGlmIChmaWxlbmFtZS5lbXB0eSgpKQpAQCAtMTYxNSw2
ICsxNTg1LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlVmlld0ZvclRlc3QoY29u
c3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB9CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKSAmJiAhUExBVEZPUk0oQ09DT0EpCisKIHN0cnVjdCBDb250ZW50RXh0ZW5zaW9uU3RvcmVD
YWxsYmFja0NvbnRleHQgewogICAgIGV4cGxpY2l0IENvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxi
YWNrQ29udGV4dChUZXN0Q29udHJvbGxlciYgY29udHJvbGxlcikKICAgICAgICAgOiB0ZXN0Q29u
dHJvbGxlcihjb250cm9sbGVyKQpAQCAtMTY0MiwxNSArMTYxMyw5IEBAIHN0YXRpYyBzdGQ6OnN0
cmluZyBjb250ZW50RXh0ZW5zaW9uSlNPTlBhdGgoV0tVUkxSZWYgdXJsKQogICAgIGlmIChwYXRo
Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gcGF0aCArICIuanNvbiI7CiAKLSAgICBhdXRvIHAg
PSBhZG9wdFdLKFdLVVJMQ29weVBhdGgodXJsKSk7Ci0gICAgYXV0byBidWZmZXIgPSBzdGQ6OnZl
Y3RvcjxjaGFyPihXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUocC5nZXQoKSkpOwot
ICAgIGNvbnN0IGF1dG8gbGVuZ3RoID0gV0tTdHJpbmdHZXRVVEY4Q1N0cmluZyhwLmdldCgpLCBi
dWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKLSAgICByZXR1cm4gc3RkOjpzdHJpbmcoIkxh
eW91dFRlc3RzL2h0dHAvdGVzdHMiKSArIHN0ZDo6c3RyaW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0
aCAtIDEpICsgIi5qc29uIjsKKyAgICByZXR1cm4gIkxheW91dFRlc3RzL2h0dHAvdGVzdHMiICsg
dG9TVEQoYWRvcHRXSyhXS1VSTENvcHlQYXRoKHVybCkpLmdldCgpKSArICIuanNvbiI7CiB9Ci0j
ZW5kaWYKIAotI2lmICFQTEFURk9STShDT0NPQSkKLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRl
c3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7CiAgICAgY29uc3QgY2hhciogY29udGVu
dEV4dGVuc2lvbnNQYXRoID0gbGlicmFyeVBhdGhGb3JUZXN0aW5nKCk7CkBAIC0xNjcwLDEzICsx
NjM1LDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25G
b3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0CiAgICAgfQogCiAgICAgc3RkOjpzdHJp
bmcganNvbkZpbGVDb250ZW50cyB7c3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+KGpzb25G
aWxlKSwgc3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+KCl9OwotICAgIGF1dG8ganNvblNv
dXJjZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoanNvbkZpbGVDb250
ZW50cy5jX3N0cigpKSk7CisgICAgYXV0byBqc29uU291cmNlID0gdG9XSyhqc29uRmlsZUNvbnRl
bnRzLmNfc3RyKCkpOwogCi0gICAgYXV0byBzdG9yZVBhdGggPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGNvbnRlbnRFeHRlbnNpb25zUGF0aCkpOworICAgIGF1dG8gc3Rv
cmVQYXRoID0gdG9XSyhjb250ZW50RXh0ZW5zaW9uc1BhdGgpOwogICAgIGF1dG8gZXh0ZW5zaW9u
U3RvcmUgPSBhZG9wdFdLKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNyZWF0ZShzdG9yZVBh
dGguZ2V0KCkpKTsKICAgICBBU1NFUlQoZXh0ZW5zaW9uU3RvcmUpOwogCi0gICAgYXV0byBmaWx0
ZXJJZGVudGlmaWVyID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGVz
dENvbnRlbnRFeHRlbnNpb24iKSk7CisgICAgYXV0byBmaWx0ZXJJZGVudGlmaWVyID0gdG9XSygi
VGVzdENvbnRlbnRFeHRlbnNpb24iKTsKIAogICAgIENvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxi
YWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKICAgICBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVDb21waWxlKGV4dGVuc2lvblN0b3JlLmdldCgpLCBmaWx0ZXJJZGVudGlmaWVyLmdldCgpLCBq
c29uU291cmNlLmdldCgpLCAmY29udGV4dCwgY29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2sp
OwpAQCAtMTcwMSwxOCArMTY2NiwyMiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldENvbnRl
bnRFeHRlbnNpb25zKCkKIAogICAgIFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxsVXNl
ckNvbnRlbnRGaWx0ZXJzKHVzZXJDb250ZW50Q29udHJvbGxlcigpKTsKIAotICAgIGF1dG8gc3Rv
cmVQYXRoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250ZW50RXh0
ZW5zaW9uc1BhdGgpKTsKKyAgICBhdXRvIHN0b3JlUGF0aCA9IHRvV0soY29udGVudEV4dGVuc2lv
bnNQYXRoKTsKICAgICBhdXRvIGV4dGVuc2lvblN0b3JlID0gYWRvcHRXSyhXS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVDcmVhdGUoc3RvcmVQYXRoLmdldCgpKSk7CiAgICAgQVNTRVJUKGV4dGVu
c2lvblN0b3JlKTsKIAotICAgIGF1dG8gZmlsdGVySWRlbnRpZmllciA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRlc3RDb250ZW50RXh0ZW5zaW9uIikpOworICAgIGF1
dG8gZmlsdGVySWRlbnRpZmllciA9IHRvV0soIlRlc3RDb250ZW50RXh0ZW5zaW9uIik7CiAKICAg
ICBDb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7CiAg
ICAgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVtb3ZlKGV4dGVuc2lvblN0b3JlLmdldCgp
LCBmaWx0ZXJJZGVudGlmaWVyLmdldCgpLCAmY29udGV4dCwgY29udGVudEV4dGVuc2lvblN0b3Jl
Q2FsbGJhY2spOwogICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKICAgICBB
U1NFUlQoIWNvbnRleHQuZmlsdGVyKTsKIH0KLSNlbHNlIC8vIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKSAmJiAhUExBVEZP
Uk0oQ09DT0EpCisKKyNpZiAhRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKwogdm9pZCBUZXN0
Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdElu
dm9jYXRpb24mKQogewogfQpAQCAtMTcyMCwxNCArMTY4OSwxMyBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlv
biYpCiB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldENvbnRlbnRFeHRlbnNpb25zKCkKIHsKIH0K
LSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotI2VuZGlmIC8vICFQTEFURk9S
TShDT0NPQSkKKworI2VuZGlmIC8vICFFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCiBjbGFz
cyBDb21tYW5kVG9rZW5pemVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb21tYW5kVG9rZW5p
emVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCkKICAgICAgICAgOiBtX2lucHV0KGlucHV0KQot
ICAgICAgICAsIG1fcG9zTmV4dFNlcGFyYXRvcigwKQogICAgIHsKICAgICAgICAgcHVtcCgpOwog
ICAgIH0KQEAgLTE3NDAsNyArMTcwOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGNo
YXIga1NlcGFyYXRvciA9ICdcJyc7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7CiAg
ICAgc3RkOjpzdHJpbmcgbV9uZXh0OwotICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3I7Cisg
ICAgc2l6ZV90IG1fcG9zTmV4dFNlcGFyYXRvciB7IDAgfTsKIH07CiAKIHZvaWQgQ29tbWFuZFRv
a2VuaXplcjo6cHVtcCgpCkBAIC0xODE0LDggKzE3ODIsNyBAQCBib29sIFRlc3RDb250cm9sbGVy
OjpydW5UZXN0KGNvbnN0IGNoYXIqIGlucHV0TGluZSkKICAgICAKICAgICBUZXN0T3B0aW9ucyBv
cHRpb25zID0gdGVzdE9wdGlvbnNGb3JUZXN0KGNvbW1hbmQpOwogCi0gICAgV0tSZXRhaW5QdHI8
V0tVUkxSZWY+IHdrVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKGNvbW1hbmQucGF0aE9yVVJM
LmNfc3RyKCkpKTsKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uID0gbWFrZVVuaXF1ZTxUZXN0SW52
b2NhdGlvbj4od2tVUkwuZ2V0KCksIG9wdGlvbnMpOworICAgIG1fY3VycmVudEludm9jYXRpb24g
PSBtYWtlVW5pcXVlPFRlc3RJbnZvY2F0aW9uPihhZG9wdFdLKGNyZWF0ZVRlc3RVUkwoY29tbWFu
ZC5wYXRoT3JVUkwuY19zdHIoKSkpLmdldCgpLCBvcHRpb25zKTsKIAogICAgIGlmIChjb21tYW5k
LnNob3VsZER1bXBQaXhlbHMgfHwgbV9zaG91bGREdW1wUGl4ZWxzRm9yQWxsVGVzdHMpCiAgICAg
ICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldElzUGl4ZWxUZXN0KGNvbW1hbmQuZXhwZWN0ZWRQ
aXhlbEhhc2gpOwpAQCAtMTk0NCwxOCArMTkxMSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6Omdw
dVByb2Nlc3NEaWRDcmFzaChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQcm9jZXNzSUQgcHJvY2Vz
CiAgICAgc3RhdGljX2Nhc3Q8VGVzdENvbnRyb2xsZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGll
bnRJbmZvKSktPmdwdVByb2Nlc3NEaWRDcmFzaChwcm9jZXNzSUQpOwogfQogCi12b2lkIFRlc3RD
b250cm9sbGVyOjpkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tE
aWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYm9vbCBzeW5jaHJvbm91cykKK3Zv
aWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgYm9vbCBzeW5jaHJvbm91cykKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiS2V5IikpOwotICAgIFdLU3RyaW5nUmVmIGtleSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwga2V5S2V5LmdldCgpKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9k
aWZpZXJzIikpOwotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8
V0tFdmVudE1vZGlmaWVycz4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vZGlm
aWVyc0tleS5nZXQoKSkpKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbG9jYXRp
b25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMb2NhdGlvbiIp
KTsKLSAgICB1bnNpZ25lZCBsb2NhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2
NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbG9jYXRpb25LZXkuZ2V0KCkpKSkpOwotCi0gICAg
bV9ldmVudFNlbmRlclByb3h5LT5rZXlEb3duKGtleSwgbW9kaWZpZXJzLCBsb2NhdGlvbik7Cisg
ICAgbV9ldmVudFNlbmRlclByb3h5LT5rZXlEb3duKHN0cmluZ1ZhbHVlKGRpY3Rpb25hcnksICJL
ZXkiKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpLCB1aW50NjRWYWx1ZShk
aWN0aW9uYXJ5LCAiTG9jYXRpb24iKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJl
Y2VpdmVMaXZlRG9jdW1lbnRzTGlzdChXS0FycmF5UmVmIGxpdmVEb2N1bWVudExpc3QpCkBAIC0x
OTY0LDE4ICsxOTIyLDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUxpdmVEb2N1
bWVudHNMaXN0KFdLQXJyYXlSZWYgbGl2ZURvY3VtZW50TGlzdCkKIAogICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFN0cmluZz4gZG9jdW1lbnRJbmZvOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtRG9jdW1lbnRzOyArK2kpIHsKLSAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0
SXRlbUF0SW5kZXgobGl2ZURvY3VtZW50TGlzdCwgaSk7Ci0gICAgICAgIGlmIChpdGVtICYmIFdL
R2V0VHlwZUlEKGl0ZW0pID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKSB7Ci0gICAgICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbGl2ZURvY3VtZW50SXRlbSA9IHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4oaXRlbSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBp
ZEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImlkIikpOwotICAg
ICAgICAgICAgV0tVSW50NjRSZWYgZG9jdW1lbnRJRCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxpdmVEb2N1bWVudEl0ZW0sIGlkS2V5LmdldCgp
KSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1cmwiKSk7Ci0gICAgICAgICAgICBX
S1N0cmluZ1JlZiBkb2N1bWVudFVSTCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KGxpdmVEb2N1bWVudEl0ZW0sIHVybEtleS5nZXQoKSkpOwotCi0g
ICAgICAgICAgICBkb2N1bWVudEluZm8uYWRkKFdLVUludDY0R2V0VmFsdWUoZG9jdW1lbnRJRCks
IHRvV1RGU3RyaW5nKGRvY3VtZW50VVJMKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8g
ZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShXS0FycmF5R2V0SXRlbUF0SW5kZXgobGl2ZURv
Y3VtZW50TGlzdCwgaSkpKQorICAgICAgICAgICAgZG9jdW1lbnRJbmZvLmFkZCh1aW50NjRWYWx1
ZShkaWN0aW9uYXJ5LCAiaWQiKSwgdG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUoZGljdGlvbmFyeSwg
InVybCIpKSk7CiAgICAgfQogCiAgICAgaWYgKCFkb2N1bWVudEluZm8uc2l6ZSgpKSB7CkBAIC0y
MDA3LDYwICsxOTU1LDM1IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIGlmICht
X3N0YXRlICE9IFJ1bm5pbmdUZXN0KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkp
OwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBzdWJNZXNz
YWdlTmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViTWVzc2FnZUtleS5nZXQoKSkpOwotCi0gICAg
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91
c2VEb3duIikgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwg
Ik1vdXNlVXAiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1dHRv
bktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbiIpKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGJ1dHRvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYnV0dG9uS2V5LmdldCgpKSkpKTsKKyAgICAg
ICAgYXV0byBkaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgYXV0byBzdWJNZXNzYWdlTmFtZSA9IHN0cmluZ1ZhbHVlKGRpY3Rpb25hcnksICJTdWJNZXNz
YWdlIik7CiAKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7
Ci0gICAgICAgICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdL
RXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb2RpZmll
cnNLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlByb2Nlc3MK
LSAgICAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VO
YW1lLCAiTW91c2VEb3duIikpCi0gICAgICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5t
b3VzZURvd24oYnV0dG9uLCBtb2RpZmllcnMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VVcChidXR0b24sIG1vZGlmaWVycyk7Cisg
ICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAi
TW91c2VEb3duIikpIHsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VEb3du
KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFsdWUoZGljdGlvbmFy
eSwgIk1vZGlmaWVycyIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCisgICAg
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91
c2VVcCIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlVXAodWludDY0
VmFsdWUoZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9k
aWZpZXJzIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJLZXlEb3duIikp
IHsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRs
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZhbHNlKTsKKyAgICAgICAgICAgIGRpZFJlY2VpdmVL
ZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShkaWN0aW9uYXJ5LCBmYWxzZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlU2Nyb2xsQnkiKSkgewotICAgICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJs
ZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZh
bHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9y
d2FyZCB0byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNl
U2Nyb2xsQnkoeCwgeSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlU2Ny
b2xsQnkoZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKSwgZG91YmxlVmFsdWUoZGljdGlvbmFy
eSwgIlkiKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlU2Nyb2xs
QnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlgiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IFdLRG91YmxlR2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGhhc2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJQaGFzZSIpKTsKLSAgICAgICAgICAgIGludCBwaGFzZSA9IHN0
YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBoYXNlS2V5
LmdldCgpKSkpKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb21lbnR1
bUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vbWVudHVtIikp
OwotICAgICAgICAgICAgaW50IG1vbWVudHVtID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9tZW50dW1LZXkuZ2V0KCkpKSkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlByb2Nlc3MKKyAgICAgICAgICAgIGF1
dG8geCA9IGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIik7CisgICAgICAgICAgICBhdXRvIHkg
PSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpOworICAgICAgICAgICAgYXV0byBwaGFzZSA9
IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJQaGFzZSIpOworICAgICAgICAgICAgYXV0byBtb21l
bnR1bSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb21lbnR1bSIpOwogICAgICAgICAgICAg
bV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFz
ZXMoeCwgeSwgcGhhc2UsIG1vbWVudHVtKTsKLQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTIwODMsNDIgKzIwMDYsMjYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVj
ZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZgogICAg
ICAgICBpZiAobV9zdGF0ZSAhPSBSdW5uaW5nVGVzdCkKICAgICAgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihudWxscHRyKTsKIAotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVz
c2FnZSIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViTWVzc2FnZU5hbWUgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBkaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBzdWJNZXNzYWdlTmFt
ZSA9IHN0cmluZ1ZhbHVlKGRpY3Rpb25hcnksICJTdWJNZXNzYWdlIik7CiAKICAgICAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJLZXlEb3duIikp
IHsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRs
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRydWUpOwotCisgICAgICAgICAgICBkaWRSZWNlaXZl
S2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoZGljdGlvbmFyeSwgdHJ1ZSk7CiAgICAg
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwg
Ik1vdXNlRG93biIpIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5h
bWUsICJNb3VzZVVwIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBi
dXR0b25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b24i
KSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBidXR0b24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
V0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbktleS5nZXQoKSkpKSk7Ci0K
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAgICAg
ICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdLRXZlbnRNb2Rp
ZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb2RpZmllcnNLZXkuZ2V0
KCkpKSkpOworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNz
YWdlTmFtZSwgIk1vdXNlRG93biIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHkt
Pm1vdXNlRG93bih1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiksIHVpbnQ2NFZhbHVl
KGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7CisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIobnVsbHB0cik7CisgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gRm9yd2FyZCB0
byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKQotICAgICAgICAgICAgICAgIG1fZXZlbnRT
ZW5kZXJQcm94eS0+bW91c2VEb3duKGJ1dHRvbiwgbW9kaWZpZXJzKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlVXAoYnV0dG9uLCBt
b2RpZmllcnMpOworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIk1vdXNlVXAiKSkgeworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5
LT5tb3VzZVVwKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFsdWUo
ZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VNb3ZlVG8iKSkgewotICAgICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJs
ZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZh
bHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9y
d2FyZCB0byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNl
TW92ZVRvKHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZU1vdmVU
byhkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpLCBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAi
WSIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAg
ICAgICAgfQogCkBAIC0yMTQ0LDgxICsyMDUxLDQ4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRp
ZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1
Yk1lc3NhZ2VOYW1lLCAiTW91c2VGb3JjZUNoYW5nZWQiKSkgewotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGZvcmNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRm9yY2UiKSk7Ci0gICAgICAgICAgICBkb3VibGUgZm9yY2UgPSBXS0RvdWJs
ZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZm9yY2VLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAg
ICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VGb3JjZUNoYW5nZWQoZm9yY2UpOworICAgICAg
ICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZUZvcmNlQ2hhbmdlZChkb3VibGVWYWx1ZShk
aWN0aW9uYXJ5LCAiRm9yY2UiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIobnVsbHB0cik7CiAgICAgICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICAgICAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJDb250
aW51b3VzTW91c2VTY3JvbGxCeSIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7
Ci0gICAgICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tE
b3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCB4S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
eUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAg
ICAgICAgICBkb3VibGUgeSA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5
LmdldCgpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFnZWRL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQYWdlZCIpKTsKLSAg
ICAgICAgICAgIGJvb2wgcGFnZWQgPSBzdGF0aWNfY2FzdDxib29sPihXS1VJbnQ2NEdldFZhbHVl
KHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgcGFnZWRLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICAvLyBG
b3J3YXJkIHRvIFdlYlByb2Nlc3MKKyAgICAgICAgICAgIGF1dG8geCA9IGRvdWJsZVZhbHVlKGRp
Y3Rpb25hcnksICJYIik7CisgICAgICAgICAgICBhdXRvIHkgPSBkb3VibGVWYWx1ZShkaWN0aW9u
YXJ5LCAiWSIpOworICAgICAgICAgICAgYXV0byBwYWdlZCA9IGJvb2xlYW5WYWx1ZShkaWN0aW9u
YXJ5LCAiUGFnZWQiKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+Y29udGludW91
c01vdXNlU2Nyb2xsQnkoeCwgeSwgcGFnZWQpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJMZWFwRm9yd2FyZCIpKSB7Ci0gICAg
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGltZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVJbk1pbGxpc2Vjb25kcyIpKTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHRpbWUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHRpbWVLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBtX2V2
ZW50U2VuZGVyUHJveHktPmxlYXBGb3J3YXJkKHRpbWUpOworICAgICAgICAgICAgbV9ldmVudFNl
bmRlclByb3h5LT5sZWFwRm9yd2FyZCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiVGltZUluTWls
bGlzZWNvbmRzIikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxw
dHIpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIkFkZFRvdWNoUG9p
bnQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgaW50
IHggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4
S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAg
ICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5
LT5hZGRUb3VjaFBvaW50KHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5h
ZGRUb3VjaFBvaW50KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJYIiksIHVpbnQ2NFZhbHVlKGRp
Y3Rpb25hcnksICJZIikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51
bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoc3ViTWVzc2FnZU5hbWUsICJVcGRhdGVUb3VjaFBvaW50IikpIHsKLSAgICAgICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgICAgICAgICAgaW50IGluZGV4ID0gc3Rh
dGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaW5kZXhLZXku
Z2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgICAgICAg
ICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHhLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0g
ICAgICAgICAgICBpbnQgeSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSkpOwotCisgICAgICAgICAgICBhdXRvIGluZGV4ID0g
dWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkluZGV4Iik7CisgICAgICAgICAgICBhdXRvIHggPSB1
aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAgICAgICAgICAgYXV0byB5ID0gdWludDY0
VmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+
dXBkYXRlVG91Y2hQb2ludChpbmRleCwgeCwgeSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIlNldFRvdWNoTW9kaWZpZXIiKSkg
ewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXIiKSk7Ci0gICAgICAg
ICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyID0gc3RhdGljX2Nhc3Q8V0tFdmVudE1vZGlm
aWVycz4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vZGlmaWVyS2V5LmdldCgp
KSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVuYWJsZUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVuYWJsZSIpKTsKLSAgICAg
ICAgICAgIGJvb2wgZW5hYmxlID0gc3RhdGljX2Nhc3Q8Ym9vbD4oV0tVSW50NjRHZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGVuYWJsZUtleS5nZXQoKSkpKSk7Ci0KKyAgICAgICAgICAgIGF1dG8g
bW9kaWZpZXIgPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXIiKTsKKyAgICAgICAg
ICAgIGF1dG8gZW5hYmxlID0gYm9vbGVhblZhbHVlKGRpY3Rpb25hcnksICJFbmFibGUiKTsKICAg
ICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+c2V0VG91Y2hNb2RpZmllcihtb2RpZmllciwg
ZW5hYmxlKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1
Yk1lc3NhZ2VOYW1lLCAiU2V0VG91Y2hQb2ludFJhZGl1cyIpKSB7Ci0gICAgICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlJhZGl1c1giKSk7Ci0gICAgICAgICAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGlu
dD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSkpOwotCi0g
ICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1kiKSk7Ci0gICAgICAgICAgICBpbnQgeSA9
IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXku
Z2V0KCkpKSkpOwotCisgICAgICAgICAgICBhdXRvIHggPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5
LCAiUmFkaXVzWCIpOworICAgICAgICAgICAgYXV0byB5ID0gdWludDY0VmFsdWUoZGljdGlvbmFy
eSwgIlJhZGl1c1kiKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+c2V0VG91Y2hQ
b2ludFJhZGl1cyh4LCB5KTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihu
dWxscHRyKTsKICAgICAgICAgfQpAQCAtMjI0OSwxNiArMjEyMywxMiBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdL
U3RyaW5nUmVmCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIlJlbGVhc2VUb3VjaFBvaW50IikpIHsKLSAgICAgICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgICAgICAgICAgaW50IGluZGV4ID0g
c3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaW5kZXhL
ZXkuZ2V0KCkpKSkpOwotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5yZWxlYXNlVG91
Y2hQb2ludChpbmRleCk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnJlbGVhc2VU
b3VjaFBvaW50KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJbmRleCIpKTsKICAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiQ2FuY2Vs
VG91Y2hQb2ludCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5k
ZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsK
LSAgICAgICAgICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGluZGV4S2V5LmdldCgpKSkpKTsKLSAgICAgICAgICAgIG1fZXZl
bnRTZW5kZXJQcm94eS0+Y2FuY2VsVG91Y2hQb2ludChpbmRleCk7CisgICAgICAgICAgICBtX2V2
ZW50U2VuZGVyUHJveHktPmNhbmNlbFRvdWNoUG9pbnQodWludDY0VmFsdWUoZGljdGlvbmFyeSwg
IkluZGV4IikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIp
OwogICAgICAgICB9CiAjZW5kaWYKQEAgLTIyNzUsMTQgKzIxNDUsMTYgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShX
S1N0cmluZ1JlZgogICAgIH07CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldEFsd2F5c0FjY2VwdENvb2tpZXMiKSkgewotICAgICAgICBXS0Jv
b2xlYW5SZWYgYWNjZXB0ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBXS0Jvb2xlYW5HZXRW
YWx1ZShhY2NlcHQpID8ga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyA6IGtXS0hUVFBD
b29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKKyAgICAgICAgYXV0
byBwb2xpY3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KSkKKyAgICAgICAgICAgID8ga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5
cworICAgICAgICAgICAgOiBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9j
dW1lbnREb21haW47CiAgICAgICAgIHJldHVybiBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBv
bGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0T25seUFjY2VwdEZpcnN0
UGFydHlDb29raWVzIikpIHsKLSAgICAgICAgV0tCb29sZWFuUmVmIGFjY2VwdCA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS0hUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoYWNjZXB0KSA/IGtXS0hUVFBDb29r
aWVBY2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4gOiBrV0tIVFRQ
Q29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47CisgICAgICAgIGF1
dG8gcG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSkpCisgICAgICAgICAgICA/IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lFeGNs
dXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4KKyAgICAgICAgICAgIDoga1dLSFRUUENvb2tp
ZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAgICAgICByZXR1cm4g
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICB9CiAKQEAgLTI0MDMsMTIgKzIyNzUsOCBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpzZXRCbG9ja0FsbFBsdWdpbnMoYm9vbCBzaG91bGRCbG9jaykKIAogI2lmIFBMQVRGT1JNKE1B
QykKICAgICBhdXRvIHBvbGljeSA9IHNob3VsZEJsb2NrID8ga1dLUGx1Z2luTG9hZENsaWVudFBv
bGljeUJsb2NrIDoga1dLUGx1Z2luTG9hZENsaWVudFBvbGljeUFsbG93OwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVOZXRzY2FwZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4iKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVGbGFzaCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVnaW4iKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVtcHR5U3RyaW5nID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotICAgIFdLQ29udGV4dFNldFBsdWdpbkxvYWRD
bGllbnRQb2xpY3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ksIGVtcHR5U3RyaW5nLmdldCgpLCBu
YW1lTmV0c2NhcGUuZ2V0KCksIGVtcHR5U3RyaW5nLmdldCgpKTsKLSAgICBXS0NvbnRleHRTZXRQ
bHVnaW5Mb2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCBlbXB0eVN0cmlu
Zy5nZXQoKSwgbmFtZUZsYXNoLmdldCgpLCBlbXB0eVN0cmluZy5nZXQoKSk7CisgICAgV0tDb250
ZXh0U2V0UGx1Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRleHQuZ2V0KCksIHBvbGljeSwgdG9X
SygiIikuZ2V0KCksIHRvV0soImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4iKS5nZXQoKSwg
dG9XSygiIikuZ2V0KCkpOworICAgIFdLQ29udGV4dFNldFBsdWdpbkxvYWRDbGllbnRQb2xpY3ko
bV9jb250ZXh0LmdldCgpLCBwb2xpY3ksIHRvV0soIiIpLmdldCgpLCB0b1dLKCJjb20ubWFjcm9t
ZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luIikuZ2V0KCksIHRvV0soIiIpLmdldCgpKTsKICNlbmRp
ZgogfQogCkBAIC0yNDIzLDI5ICsyMjkxLDI0IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFBs
dWdpblN1cHBvcnRlZE1vZGUoY29uc3QgU3RyaW5nJiBtb2RlKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGVtcHR5QXJyYXkgPSBh
ZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBhbGxPcmlnaW5zID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzcGVjaWZpY09yaWdpbiA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxvY2FsaG9zdCIpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZGZOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiTXkgcGVyc29uYWwgUERGIikpOwotICAgIFdLQ29udGV4dEFkZFN1cHBv
cnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIGFsbE9yaWdpbnMuZ2V0KCksIHBkZk5hbWUuZ2V0
KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAgIGF1dG8gZW1wdHlB
cnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbmFtZU5ldHNjYXBlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdpbiIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWltZVR5cGVOZXRzY2FwZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG1pbWVUeXBlc05ldHNjYXBlID0g
YWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBXS0FycmF5QXBwZW5kSXRlbSht
aW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVOZXRzY2FwZS5nZXQoKSk7CisgICAgV0tD
b250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygiIikuZ2V0KCks
IHRvV0soIk15IHBlcnNvbmFsIFBERiIpLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFy
cmF5LmdldCgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lUGRmID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0IGJ1aWx0LWluIFBERiIp
KTsKKyAgICBhdXRvIG5hbWVOZXRzY2FwZSA9IHRvV0soImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVw
bHVnaW4iKTsKKyAgICBhdXRvIG1pbWVUeXBlc05ldHNjYXBlID0gYWRvcHRXSyhXS011dGFibGVB
cnJheUNyZWF0ZSgpKTsKKyAgICBXS0FycmF5QXBwZW5kSXRlbShtaW1lVHlwZXNOZXRzY2FwZS5n
ZXQoKSwgdG9XSygiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2FwZSIpLmdldCgpKTsK
KyAgICBhdXRvIG5hbWVQZGYgPSB0b1dLKCJXZWJLaXQgYnVpbHQtaW4gUERGIik7CiAKICAgICBp
ZiAobV91bnN1cHBvcnRlZFBsdWdpbk1vZGUgPT0gImFsbE9yaWdpbnMiKSB7Ci0gICAgICAgIFdL
Q29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIGFsbE9yaWdpbnMuZ2V0
KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJy
YXkuZ2V0KCkpOwotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0
LmdldCgpLCBhbGxPcmlnaW5zLmdldCgpLCBuYW1lUGRmLmdldCgpLCBlbXB0eUFycmF5LmdldCgp
LCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2lu
KG1fY29udGV4dC5nZXQoKSwgdG9XSygiIikuZ2V0KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgbWlt
ZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAgICAgICBXS0NvbnRl
eHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCIiKS5nZXQoKSwgbmFt
ZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAobV91bnN1cHBvcnRlZFBsdWdpbk1vZGUgPT0gInNw
ZWNpZmljT3JpZ2luIikgewotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9j
b250ZXh0LmdldCgpLCBzcGVjaWZpY09yaWdpbi5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBt
aW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7Ci0gICAgICAgIFdLQ29u
dGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHNwZWNpZmljT3JpZ2luLmdl
dCgpLCBuYW1lUGRmLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsK
KyAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9X
SygibG9jYWxob3N0IikuZ2V0KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVzTmV0c2Nh
cGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0
ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCJsb2NhbGhvc3QiKS5nZXQoKSwgbmFtZVBk
Zi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiB9CkBAIC0yNDkxLDE0ICsyMzU0LDEyIEBAIGJvb2wgVGVzdENvbnRyb2xs
ZXI6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoV0tQYWdlUmVmIHBhZ2Us
IFdLUHJvCiB7CiAgICAgaWYgKG1fc2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZSkKICAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+b3V0cHV0VGV4dCgiY2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZVxuIik7Ci0gICAgV0tQcm90ZWN0aW9u
U3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNhdGlvblNjaGVtZSA9IFdLUHJvdGVj
dGlvblNwYWNlR2V0QXV0aGVudGljYXRpb25TY2hlbWUocHJvdGVjdGlvblNwYWNlKTsKLSAgICAK
LSAgICBpZiAoYXV0aGVudGljYXRpb25TY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVu
dGljYXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQpIHsKLSAgICAgICAg
c3RkOjpzdHJpbmcgaG9zdCA9IHRvU1REKGFkb3B0V0soV0tQcm90ZWN0aW9uU3BhY2VDb3B5SG9z
dChwcm90ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CisgICAgYXV0byBzY2hlbWUgPSBXS1Byb3RlY3Rp
b25TcGFjZUdldEF1dGhlbnRpY2F0aW9uU2NoZW1lKHByb3RlY3Rpb25TcGFjZSk7CisgICAgaWYg
KHNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRy
dXN0RXZhbHVhdGlvblJlcXVlc3RlZCkgeworICAgICAgICBhdXRvIGhvc3QgPSB0b1NURChhZG9w
dFdLKFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSkpOwogICAgICAg
ICByZXR1cm4gaG9zdCA9PSAibG9jYWxob3N0IiB8fCBob3N0ID09ICIxMjcuMC4wLjEiIHx8ICht
X2FsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyAmJiBtX2FsbG93ZWRIb3N0
cy5maW5kKGhvc3QpICE9IG1fYWxsb3dlZEhvc3RzLmVuZCgpKTsKICAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIGF1dGhlbnRpY2F0aW9uU2NoZW1lIDw9IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRp
Y2F0aW9uU2NoZW1lSFRUUERpZ2VzdCB8fCBhdXRoZW50aWNhdGlvblNjaGVtZSA9PSBrV0tQcm90
ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU9BdXRoOworICAgIHJldHVybiBzY2hlbWUg
PD0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQRGlnZXN0IHx8IHNj
aGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU9BdXRoOwogfQog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKFdLUGFnZVJlZiBwYWdl
LCBXS05hdmlnYXRpb25SZWYgbmF2aWdhdGlvbikKQEAgLTI1MDYsOCArMjM2Nyw3IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24oV0tQYWdlUmVmIHBhZ2UsIFdLTmF2
aWdhdGlvblJlZiBuYXZpZ2F0CiAgICAgaWYgKG1fc3RhdGUgIT0gUmVzZXR0aW5nKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkwgPSBhZG9wdFdLKFdL
RnJhbWVDb3B5VVJMKFdLUGFnZUdldE1haW5GcmFtZShwYWdlKSkpOwotICAgIGlmICghV0tVUkxJ
c0VxdWFsKHdrVVJMLmdldCgpLCBibGFua1VSTCgpKSkKKyAgICBpZiAoIVdLVVJMSXNFcXVhbChh
ZG9wdFdLKFdLRnJhbWVDb3B5VVJMKFdLUGFnZUdldE1haW5GcmFtZShwYWdlKSkpLmdldCgpLCBi
bGFua1VSTCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kb25lUmVzZXR0aW5nID0gdHJ1
ZTsKQEAgLTI1MjcsNyArMjM4Nyw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYgcGFnZSwgV0tBdXRoZW50CiAgICAgICAg
IG1fc2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50Kys7CiAKICAgICAgICAg
aWYgKG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGUpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRy
PFdLQ3JlZGVudGlhbFJlZj4gY3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRl
KHRvV0soImFjY2VwdCBzZXJ2ZXIgdHJ1c3QiKS5nZXQoKSwgdG9XSygiIikuZ2V0KCksIGtXS0Ny
ZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpKTsKKyAgICAgICAgICAgIGF1dG8gY3JlZGVudGlhbCA9
IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHRvV0soImFjY2VwdCBzZXJ2ZXIgdHJ1c3QiKS5n
ZXQoKSwgdG9XSygiIikuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpKTsKICAg
ICAgICAgICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlhbChk
ZWNpc2lvbkxpc3RlbmVyLCBjcmVkZW50aWFsLmdldCgpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMjU0MSw5ICsyNDAxLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdLUGFnZVJlZiBwYWdlLCBXS0F1dGhlbnQK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIGhvc3QgPSB0b1NURChh
ZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkp
OworICAgIGF1dG8gaG9zdCA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tQcm90ZWN0aW9uU3BhY2VD
b3B5SG9zdChwcm90ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CiAgICAgaW50IHBvcnQgPSBXS1Byb3Rl
Y3Rpb25TcGFjZUdldFBvcnQocHJvdGVjdGlvblNwYWNlKTsKLSAgICBTdHJpbmcgbWVzc2FnZSA9
IG1ha2VTdHJpbmcoaG9zdC5jX3N0cigpLCAnOicsIHBvcnQsICIgLSBkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgLSAiLCB0b1N0cmluZyhhdXRoZW50aWNhdGlvblNjaGVtZSksICIg
LSAiKTsKKyAgICBTdHJpbmcgbWVzc2FnZSA9IG1ha2VTdHJpbmcoaG9zdCwgJzonLCBwb3J0LCAi
IC0gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIC0gIiwgdG9TdHJpbmcoYXV0aGVu
dGljYXRpb25TY2hlbWUpLCAiIC0gIik7CiAgICAgaWYgKCFtX2hhbmRsZXNBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXMpCiAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCJTaW11bGF0aW5nIGNhbmNlbGxl
ZCBhdXRoZW50aWNhdGlvbiBzaGVldFxuIik7CiAgICAgZWxzZQpAQCAtMjU1NCwxMyArMjQxNCwx
MSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoV0tQYWdlUmVmIHBhZ2UsIFdLQXV0aGVudAogICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVj
aXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgMCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVzZXJuYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhtX2F1dGhlbnRpY2F0aW9uVXNl
cm5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXNz
d29yZCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9hdXRoZW50aWNh
dGlvblBhc3N3b3JkLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS0NyZWRlbnRp
YWxSZWY+IGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh1c2VybmFtZS5n
ZXQoKSwgcGFzc3dvcmQuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24p
KTsKKyAgICBhdXRvIGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh0b1dL
KG1fYXV0aGVudGljYXRpb25Vc2VybmFtZSkuZ2V0KCksIHRvV0sobV9hdXRoZW50aWNhdGlvblBh
c3N3b3JkKS5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikpOwogICAg
IFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlhbChkZWNpc2lvbkxp
c3RlbmVyLCBjcmVkZW50aWFsLmdldCgpKTsKIH0KIAotICAgIAorCiAvLyBXS0NvbnRleHREb3du
bG9hZENsaWVudAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpkb3dubG9hZERpZFN0YXJ0KFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS0Rvd25sb2FkUmVmIGRvd25sb2FkLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQpAQCAtMjcwNCw5ICsyNTYyLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKICAgICBkZWNpZGVQb2xpY3lGb3JHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgpOwogfQogCi12b2lkIFRlc3RDb250
cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJs
ZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3Vi
bGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1
ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHBy
b3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJs
ZSBmbG9vckxldmVsKQordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ks
IE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1
cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBP
cHRpb25hbDxkb3VibGU+IGZsb29yTGV2ZWwpCiB7Ci0gICAgbV9nZW9sb2NhdGlvblByb3ZpZGVy
LT5zZXRQb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRp
dHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFj
eSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJvdmlk
ZXNGbG9vckxldmVsLCBmbG9vckxldmVsKTsKKyAgICBtX2dlb2xvY2F0aW9uUHJvdmlkZXItPnNl
dFBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZSwgYWx0aXR1
ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQsIGZsb29yTGV2ZWwpOwogfQogCiB2b2lkIFRlc3RD
b250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tT
dHJpbmdSZWYgZXJyb3JNZXNzYWdlKQpAQCAtMjg1Niw5ICsyNzE0LDcgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6aGFuZGxlQ2hlY2tPZlVzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4oV0tGcmFt
ZVJlZiBmcmFtZSwKIHsKICAgICBhdXRvIG9yaWdpbkhhc2ggPSB1c2VyTWVkaWFPcmlnaW5IYXNo
KHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCB0b3BMZXZlbERvY3VtZW50T3JpZ2luKTsKICAgICBh
dXRvIHNhbHQgPSBzYWx0Rm9yT3JpZ2luKGZyYW1lLCBvcmlnaW5IYXNoKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc2FsdFN0cmluZyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoc2FsdC51dGY4KCkuZGF0YSgpKSk7Ci0KLSAgICBXS1VzZXJNZWRpYVBlcm1p
c3Npb25DaGVja1NldFVzZXJNZWRpYUFjY2Vzc0luZm8oY2hlY2tSZXF1ZXN0LCBzYWx0U3RyaW5n
LmdldCgpLCBzZXR0aW5nc0Zvck9yaWdpbihvcmlnaW5IYXNoKS5wZXJzaXN0ZW50UGVybWlzc2lv
bigpKTsKKyAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1NldFVzZXJNZWRpYUFjY2Vzc0lu
Zm8oY2hlY2tSZXF1ZXN0LCB0b1dLKHNhbHQpLmdldCgpLCBzZXR0aW5nc0Zvck9yaWdpbihvcmln
aW5IYXNoKS5wZXJzaXN0ZW50UGVybWlzc2lvbigpKTsKIH0KIAogYm9vbCBUZXN0Q29udHJvbGxl
cjo6aGFuZGxlRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0KFdLU2VjdXJp
dHlPcmlnaW5SZWYgb3JpZ2luKQpAQCAtMjkxNCw4ICsyNzcwLDggQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3NpYmxl
KCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tBcnJheVJlZj4gYXVkaW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0QXVkaW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tBcnJheVJlZj4gdmlkZW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0VmlkZW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKKyAgICAgICAgYXV0byBhdWRp
b0RldmljZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RBdWRpb0Rl
dmljZVVJRHMocmVxdWVzdCkpOworICAgICAgICBhdXRvIHZpZGVvRGV2aWNlVUlEcyA9IGFkb3B0
V0soV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFZpZGVvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7
CiAKICAgICAgICAgaWYgKCFXS0FycmF5R2V0U2l6ZSh2aWRlb0RldmljZVVJRHMuZ2V0KCkpICYm
ICFXS0FycmF5R2V0U2l6ZShhdWRpb0RldmljZVVJRHMuZ2V0KCkpKSB7CiAgICAgICAgICAgICBX
S1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0RGVueShyZXF1ZXN0LCBrV0tOb0NvbnN0cmFpbnRz
KTsKQEAgLTI5MjYsMTMgKzI3ODIsMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGVjaWRlUG9s
aWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3NpYmxlKCkKICAgICAgICAgaWYg
KFdLQXJyYXlHZXRTaXplKHZpZGVvRGV2aWNlVUlEcy5nZXQoKSkpCiAgICAgICAgICAgICB2aWRl
b0RldmljZVVJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVt
QXRJbmRleCh2aWRlb0RldmljZVVJRHMuZ2V0KCksIDApKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdmlkZW9EZXZpY2VVSUQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCIiKSk7CisgICAgICAgICAgICB2aWRlb0RldmljZVVJRCA9IHRvV0soIiIpOwogCiAgICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdWRpb0RldmljZVVJRDsKICAgICAgICAgaWYg
KFdLQXJyYXlHZXRTaXplKGF1ZGlvRGV2aWNlVUlEcy5nZXQoKSkpCiAgICAgICAgICAgICBhdWRp
b0RldmljZVVJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVt
QXRJbmRleChhdWRpb0RldmljZVVJRHMuZ2V0KCksIDApKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgYXVkaW9EZXZpY2VVSUQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCIiKSk7CisgICAgICAgICAgICBhdWRpb0RldmljZVVJRCA9IHRvV0soIiIpOwogCiAgICAg
ICAgIFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RBbGxvdyhyZXF1ZXN0LCBhdWRpb0Rldmlj
ZVVJRC5nZXQoKSwgdmlkZW9EZXZpY2VVSUQuZ2V0KCkpOwogICAgIH0KQEAgLTMwNTYsMTIgKzI5
MTIsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0
YShXS05hdmlnYXRpb25EYXRhUmVmIG5hdmlnYXRpbwogICAgIGlmICghbV9zaG91bGRMb2dIaXN0
b3J5Q2xpZW50Q2FsbGJhY2tzKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBVUkwKICAgICBh
dXRvIHVybCA9IGFkb3B0V0soV0tOYXZpZ2F0aW9uRGF0YUNvcHlVUkwobmF2aWdhdGlvbkRhdGEp
KTsKICAgICBhdXRvIHVybFN0cmluZyA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3Ry
aW5nKHVybC5nZXQoKSkpKTsKLSAgICAvLyBUaXRsZQogICAgIGF1dG8gdGl0bGUgPSB0b1dURlN0
cmluZyhhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5VGl0bGUobmF2aWdhdGlvbkRhdGEpKSk7
Ci0gICAgLy8gSFRUUCBtZXRob2QKICAgICBhdXRvIHJlcXVlc3QgPSBhZG9wdFdLKFdLTmF2aWdh
dGlvbkRhdGFDb3B5T3JpZ2luYWxSZXF1ZXN0KG5hdmlnYXRpb25EYXRhKSk7CiAgICAgYXV0byBt
ZXRob2QgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlIVFRQTWV0aG9kKHJl
cXVlc3QuZ2V0KCkpKSk7CiAKQEAgLTMyMDYsNyArMzA1OSw3IEBAIHZvaWQgZ2V0QWxsU3RvcmFn
ZUFjY2Vzc0VudHJpZXNDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSwgV0tBcnJheVJlZiBkb21haW5M
aXN0KQogCiAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0RG9tYWluczsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgV0tBcnJheUdldFNpemUoZG9tYWluTGlzdCk7IGkrKykgewotICAgICAg
ICBhdXRvIGRvbWFpbiA9ICByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0
SXRlbUF0SW5kZXgoZG9tYWluTGlzdCwgaSkpOworICAgICAgICBhdXRvIGRvbWFpbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5MaXN0
LCBpKSk7CiAgICAgICAgIGF1dG8gYnVmZmVyID0gc3RkOjp2ZWN0b3I8Y2hhcj4oV0tTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGRvbWFpbikpOwogICAgICAgICBhdXRvIHN0cmluZ0xl
bmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcoZG9tYWluLCBidWZmZXIuZGF0YSgpLCBidWZm
ZXIuc2l6ZSgpKTsKIApAQCAtMzk3OCw3ICszODMxLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
cmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKCkKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0
ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllcikKIHsKICAgICBJbkFwcEJyb3dzZXJQcml2YWN5Q2FsbGJhY2tDb250ZXh0IGNvbnRl
eHQoKnRoaXMpOwotICAgIFdLV2Vic2l0ZURhdGFTdG9yZVVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJ
bk5ldHdvcmtQcm9jZXNzKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0b3JlKCksIGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVuZGxlSWRlbnRpZmllci51dGY4KCku
ZGF0YSgpKSkuZ2V0KCksICZjb250ZXh0LCBpbkFwcEJyb3dzZXJQcml2YWN5Vm9pZFJlc3VsdENh
bGxiYWNrKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRhdGVCdW5kbGVJZGVudGlmaWVySW5O
ZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpLCB0b1dLKGJ1
bmRsZUlkZW50aWZpZXIpLmdldCgpLCAmY29udGV4dCwgaW5BcHBCcm93c2VyUHJpdmFjeVZvaWRS
ZXN1bHRDYWxsYmFjayk7CiAgICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBub1RpbWVvdXQpOwog
fQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKaW5kZXggZjk0ZDU3YzE0
N2IzMTZmMDc4ZmE4NWYyMjBmNDA3NjA5NDExM2M4Yy4uZmY4Mzk0ZWMwMzg3N2E2ZGJjMGRjNGIz
ZTQ4YzBlZjRmM2YzYjMzOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aApAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBHZW9sb2NhdGlvbi4K
ICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sKTsKLSAgICB2b2lkIHNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwg
Ym9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwg
ZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwp
OworICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBk
b3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1
ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBo
ZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25hbDxkb3VibGU+IGZsb29yTGV2
ZWwpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9y
KFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSk7CiAgICAgdm9pZCBoYW5kbGVHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0KFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFJlZik7CiAgICAg
Ym9vbCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXggYTViNmRkMDU1ODBhZTBjMmQ5NTcwNzdk
ZmU0NTBhNDg2ZTZkMDFlYy4uNTAxMjdmNjc4NDFlMDNjNTU2OGUxOWU5OTExNzk3YzhmYzJkNmI4
MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKQEAgLTI3LDgg
KzI3LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5o
IgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2ViVmlldy5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZVRlc3RTdXBwb3J0LmgiCkBAIC02NiwyMSArNjYsMTcgQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogbmFtZXNwYWNlIFdUUiB7CiAKK3N0YXRpYyB2b2lkIHBvc3RQYWdlTWVzc2FnZShj
b25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgYm9keSA9IG51bGxwdHIpCit7CisgICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIGJvZHkpOworfQorCiBUZXN0
SW52b2NhdGlvbjo6VGVzdEludm9jYXRpb24oV0tVUkxSZWYgdXJsLCBjb25zdCBUZXN0T3B0aW9u
cyYgb3B0aW9ucykKICAgICA6IG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwgbV91cmwodXJsKQog
ICAgICwgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZU
ZXN0SW52b2NhdGlvbjo6d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmco
bV91cmwuZ2V0KCkpKTsKLQotICAgIHNpemVfdCBzdHJpbmdMZW5ndGggPSBXS1N0cmluZ0dldExl
bmd0aCh1cmxTdHJpbmcuZ2V0KCkpOwotCi0gICAgVmVjdG9yPGNoYXI+IHVybFZlY3RvcjsKLSAg
ICB1cmxWZWN0b3IucmVzaXplKHN0cmluZ0xlbmd0aCArIDEpOwotCi0gICAgV0tTdHJpbmdHZXRV
VEY4Q1N0cmluZyh1cmxTdHJpbmcuZ2V0KCksIHVybFZlY3Rvci5kYXRhKCksIHN0cmluZ0xlbmd0
aCArIDEpOwotCi0gICAgbV91cmxTdHJpbmcgPSBTdHJpbmcodXJsVmVjdG9yLmRhdGEoKSwgc3Ry
aW5nTGVuZ3RoKTsKKyAgICBtX3VybFN0cmluZyA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxD
b3B5U3RyaW5nKG1fdXJsLmdldCgpKSkuZ2V0KCkpOwogCiAgICAgLy8gRklYTUU6IEF2b2lkIG11
dGF0aW5nIHRoZSBzZXR0aW5nIHZpYSBhIHRlc3QgZGlyZWN0b3J5IGxpa2UgdGhpcy4KICAgICBt
X2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSB1cmxDb250YWlucygibG9hZGluZy8iKSAmJiAhdXJs
Q29udGFpbnMoIjovL2xvY2FsaG9zdCIpOwpAQCAtMTI5LDI4ICsxMjUsMTIgQEAgYm9vbCBUZXN0
SW52b2NhdGlvbjo6c2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcygpIGNvbnN0CiAKIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IFRlc3RJbnZvY2F0aW9uOjpjcmVhdGVU
ZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1c2VGbGV4aWJs
ZVZpZXdwb3J0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNl
RmxleGlibGVWaWV3cG9ydCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHVzZUZs
ZXhpYmxlVmlld3BvcnRWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG9wdGlvbnMoKS51
c2VGbGV4aWJsZVZpZXdwb3J0KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RN
ZXNzYWdlQm9keS5nZXQoKSwgdXNlRmxleGlibGVWaWV3cG9ydEtleS5nZXQoKSwgdXNlRmxleGli
bGVWaWV3cG9ydFZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBk
dW1wUGl4ZWxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVt
cFBpeGVscyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGR1bXBQaXhlbHNWYWx1
ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcFBpeGVscykpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIGR1bXBQaXhlbHNLZXkuZ2V0
KCksIGR1bXBQaXhlbHNWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gdGltZW91dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRp
bWVvdXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHRpbWVvdXRWYWx1ZSA9IGFk
b3B0V0soV0tVSW50NjRDcmVhdGUobV90aW1lb3V0Lm1pbGxpc2Vjb25kcygpKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgdGltZW91dEtleS5n
ZXQoKSwgdGltZW91dFZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJWYWx1ZSA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgZHVtcEpTQ29uc29sZUxv
Z0luU3RkRXJyS2V5LmdldCgpLCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJWYWx1ZS5nZXQoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
YWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNWYWx1ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcob3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVz
LmNfc3RyKCkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5
LmdldCgpLCBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0tleS5nZXQoKSwgYWRkaXRpb25h
bFN1cHBvcnRlZEltYWdlVHlwZXNWYWx1ZS5nZXQoKSk7Ci0KKyAgICBhdXRvIGJlZ2luVGVzdE1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNl
dFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVXNlRmxleGlibGVWaWV3cG9ydCIsIG9wdGlv
bnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdl
Qm9keSwgIkR1bXBQaXhlbHMiLCBtX2R1bXBQaXhlbHMpOworICAgIHNldFZhbHVlKGJlZ2luVGVz
dE1lc3NhZ2VCb2R5LCAiVGltZW91dCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3RpbWVvdXQu
bWlsbGlzZWNvbmRzKCkpKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1
bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKKyAg
ICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzIiwgb3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkp
OwogICAgIHJldHVybiBiZWdpblRlc3RNZXNzYWdlQm9keTsKIH0KIApAQCAtMTY4LDkgKzE0OCw3
IEBAIHZvaWQgVGVzdEludm9jYXRpb246Omludm9rZSgpCiAKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGNsZWFyIG91dCB2aXNpdGVkIGxpbmtzIGhlcmUuCiAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJCZWdpblRlc3QiKSk7Ci0gICAgYXV0byBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGNyZWF0
ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkoKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIkJlZ2luVGVzdCIsIGNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnko
KS5nZXQoKSk7CiAKICAgICBtX3N0YXJ0ZWRUZXN0aW5nID0gdHJ1ZTsKIApAQCAtMzI3LDE4NSAr
MzA1LDEwNCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21Jbmpl
Y3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWNrIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgbWVzc2FnZUJvZHlTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlQm9keVN0cmluZywgIkJlZ2luVGVzdCIpKSB7CisgICAgICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSwgIkJl
Z2luVGVzdCIpKSB7CiAgICAgICAgICAgICBtX2dvdEluaXRpYWxSZXNwb25zZSA9IHRydWU7CiAg
ICAgICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubm90aWZ5RG9uZSgpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJEb25lIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3Nh
Z2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGl4ZWxSZXN1bHRJ
c1BlbmRpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaXhl
bFJlc3VsdElzUGVuZGluZyIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBpeGVsUmVzdWx0SXNQ
ZW5kaW5nID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGl4ZWxSZXN1bHRJc1BlbmRpbmdLZXkuZ2V0KCkp
KTsKLSAgICAgICAgbV9waXhlbFJlc3VsdElzUGVuZGluZyA9IFdLQm9vbGVhbkdldFZhbHVlKHBp
eGVsUmVzdWx0SXNQZW5kaW5nKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIG1fcGl4ZWxSZXN1bHRJ
c1BlbmRpbmcgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUGl4ZWxSZXN1
bHRJc1BlbmRpbmciKTsKICAgICAgICAgaWYgKCFtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKSB7Ci0g
ICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGl4ZWxSZXN1bHRLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaXhlbFJlc3VsdCIpKTsKLSAgICAg
ICAgICAgIG1fcGl4ZWxSZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0ltYWdlUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGl4ZWxSZXN1bHRLZXkuZ2V0
KCkpKTsKKyAgICAgICAgICAgIG1fcGl4ZWxSZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0ltYWdlUmVm
Pih2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJQaXhlbFJlc3VsdCIpKTsKICAgICAgICAg
ICAgIEFTU0VSVCghbV9waXhlbFJlc3VsdCB8fCBtX2R1bXBQaXhlbHMpOwogICAgICAgICB9Ci0K
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlcGFpbnRSZWN0c0tleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlcGFpbnRSZWN0cyIpKTsKLSAgICAg
ICAgbV9yZXBhaW50UmVjdHMgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcmVwYWludFJlY3RzS2V5LmdldCgp
KSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF1ZGlvUmVzdWx0S2V5ID0g
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF1ZGlvUmVzdWx0IikpOwot
ICAgICAgICBtX2F1ZGlvUmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0tEYXRhUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYXVkaW9SZXN1bHRLZXkuZ2V0
KCkpKTsKLQorICAgICAgICBtX3JlcGFpbnRSZWN0cyA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+
KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlJlcGFpbnRSZWN0cyIpKTsKKyAgICAgICAg
bV9hdWRpb1Jlc3VsdCA9IHN0YXRpY19jYXN0PFdLRGF0YVJlZj4odmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiQXVkaW9SZXN1bHQiKSk7CiAgICAgICAgIGRvbmUoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiVGV4dE91dHB1dCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRl
eHRPdXRwdXQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBtX3RleHRPdXRwdXQuYXBwZW5kKHRvV1RGU3RyaW5nKHRleHRPdXRwdXQpKTsKKyAgICAgICAg
bV90ZXh0T3V0cHV0LmFwcGVuZCh0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRHVtcFRvU3RkRXJyIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgdGV4dE91dHB1dCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCB0b1dURlN0cmluZyh0ZXh0
T3V0cHV0KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIHRv
V1RGU3RyaW5nKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSkudXRmOCgpLmRhdGEoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIkJlZm9yZVVubG9hZFJldHVyblZhbHVlIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiBiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoV0tCb29sZWFuR2V0VmFsdWUoYmVm
b3JlVW5sb2FkUmV0dXJuVmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWRkQ2hyb21lSW5wdXRGaWVsZCIpKSB7CiAgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5hZGRDaHJvbWVJ
bnB1dEZpZWxkKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxBZGRDaHJvbWVJ
bnB1dEZpZWxkQ2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3Rl
ZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbEFk
ZENocm9tZUlucHV0RmllbGRDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZW1vdmVD
aHJvbWVJbnB1dEZpZWxkIikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnJlbW92ZUNocm9tZUlucHV0RmllbGQoKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2FsbFJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFjayIpKTsKLSAg
ICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
KyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxi
YWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJGb2N1c1dlYlZpZXciKSkgewogICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+bWFrZVdlYlZpZXdG
aXJzdFJlc3BvbmRlcigpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRm9jdXNX
ZWJWaWV3Q2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1
bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbEZvY3Vz
V2ViVmlld0NhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEJhY2tpbmdTY2FsZUZh
Y3RvciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
b3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0b3IgPSBX
S0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSkpOwot
ICAgICAgICBXS1BhZ2VTZXRDdXN0b21CYWNraW5nU2NhbGVGYWN0b3IoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgYmFja2luZ1NjYWxlRmFjdG9yKTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsU2V0QmFja2luZ1NjYWxlRmFjdG9y
Q2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCk7CisgICAgICAgIFdLUGFnZVNldEN1c3RvbUJhY2tpbmdTY2FsZUZhY3Rv
cihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBkb3Vi
bGVWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxTZXRC
YWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTaW11bGF0
ZVdlYk5vdGlmaWNhdGlvbkNsaWNrIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgdWludDY0X3Qgbm90
aWZpY2F0aW9uSUQgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPiht
ZXNzYWdlQm9keSkpOworICAgICAgICB1aW50NjRfdCBub3RpZmljYXRpb25JRCA9IHVpbnQ2NFZh
bHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNp
bXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uSUQpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRBZGRzVmlzaXRlZExpbmtzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRMaW5rcyhUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBXS0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVk
V0spKTsKKyAgICAgICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRMaW5rcyhUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihXS0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVk
V0spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEdlb2xvY2F0aW9u
UGVybWlzc2lvbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBsYXRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygibGF0aXR1ZGUiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGxhdGl0dWRlV0sgPSBzdGF0aWNf
Y2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGxhdGl0dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGxhdGl0dWRl
ID0gV0tEb3VibGVHZXRWYWx1ZShsYXRpdHVkZVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbG9uZ2l0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJsb25naXR1ZGUiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGxvbmdpdHVkZVdL
ID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBsb25naXR1ZGVLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3Vi
bGUgbG9uZ2l0dWRlID0gV0tEb3VibGVHZXRWYWx1ZShsb25naXR1ZGVXSyk7Ci0KLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2N1cmFjeSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYg
YWNjdXJhY3lXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYWNjdXJhY3lLZXlXSy5nZXQoKSkpOwotICAg
ICAgICBkb3VibGUgYWNjdXJhY3kgPSBXS0RvdWJsZUdldFZhbHVlKGFjY3VyYWN5V0spOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRlS2V5V0sgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0FsdGl0dWRlIikp
OwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNBbHRpdHVkZVdLID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgcHJvdmlkZXNBbHRpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZSA9IFdLQm9vbGVhbkdldFZhbHVlKHByb3ZpZGVzQWx0aXR1ZGVXSyk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVkZSIpKTsKLSAgICAgICAgV0tEb3Vi
bGVSZWYgYWx0aXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYWx0aXR1ZGVLZXlXSy5nZXQoKSkp
OwotICAgICAgICBkb3VibGUgYWx0aXR1ZGUgPSBXS0RvdWJsZUdldFZhbHVlKGFsdGl0dWRlV0sp
OwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRlQWNj
dXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeVdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNBbHRpdHVkZUFjY3Vy
YWN5S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kg
PSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lXSyk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRlQWNjdXJhY3lLZXlXSyA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFsdGl0dWRlQWNjdXJhY3kiKSk7Ci0g
ICAgICAgIFdLRG91YmxlUmVmIGFsdGl0dWRlQWNjdXJhY3lXSyA9IHN0YXRpY19jYXN0PFdLRG91
YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
YWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBhbHRpdHVkZUFj
Y3VyYWN5ID0gV0tEb3VibGVHZXRWYWx1ZShhbHRpdHVkZUFjY3VyYWN5V0spOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0hlYWRpbmdLZXlXSyA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzSGVhZGluZyIpKTsKLSAgICAg
ICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzSGVhZGluZ1dLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJv
dmlkZXNIZWFkaW5nS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92aWRlc0hlYWRpbmcg
PSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc0hlYWRpbmdXSyk7Ci0KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGhlYWRpbmdLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImhlYWRpbmciKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGhlYWRpbmdX
SyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgaGVhZGluZ0tleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJs
ZSBoZWFkaW5nID0gV0tEb3VibGVHZXRWYWx1ZShoZWFkaW5nV0spOwotCi0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc1NwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc1NwZWVkIikpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgcHJvdmlkZXNTcGVlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNTcGVlZEtl
eVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNTcGVlZCA9IFdLQm9vbGVhbkdldFZh
bHVlKHByb3ZpZGVzU3BlZWRXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHNwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzcGVl
ZCIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc3BlZWRXSyA9IHN0YXRpY19jYXN0PFdLRG91Ymxl
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3Bl
ZWRLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgc3BlZWQgPSBXS0RvdWJsZUdldFZhbHVl
KHNwZWVkV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0Zs
b29yTGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBy
b3ZpZGVzRmxvb3JMZXZlbCIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzRmxvb3JM
ZXZlbFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNGbG9vckxldmVsS2V5V0suZ2V0KCkp
KTsKLSAgICAgICAgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwgPSBXS0Jvb2xlYW5HZXRWYWx1ZShw
cm92aWRlc0Zsb29yTGV2ZWxXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGZsb29yTGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImZsb29yTGV2ZWwiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGZsb29yTGV2ZWxXSyA9IHN0YXRp
Y19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgZmxvb3JMZXZlbEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBmbG9v
ckxldmVsID0gV0tEb3VibGVHZXRWYWx1ZShmbG9vckxldmVsV0spOwotCi0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVk
ZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBo
ZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJvdmlkZXNGbG9vckxldmVsLCBmbG9vckxl
dmVsKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFs
dWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGxhdGl0dWRlID0gZG91YmxlVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAibGF0aXR1ZGUiKTsKKyAgICAgICAgYXV0byBsb25naXR1ZGUg
PSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJsb25naXR1ZGUiKTsKKyAgICAg
ICAgYXV0byBhY2N1cmFjeSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImFj
Y3VyYWN5Iik7CisgICAgICAgIGF1dG8gYWx0aXR1ZGUgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgImFsdGl0dWRlIik7CisgICAgICAgIGF1dG8gYWx0aXR1ZGVB
Y2N1cmFjeSA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiYWx0
aXR1ZGVBY2N1cmFjeSIpOworICAgICAgICBhdXRvIGhlYWRpbmcgPSBvcHRpb25hbERvdWJsZVZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImhlYWRpbmciKTsKKyAgICAgICAgYXV0byBzcGVl
ZCA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAic3BlZWQiKTsK
KyAgICAgICAgYXV0byBmbG9vckxldmVsID0gb3B0aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJmbG9vckxldmVsIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBh
Y2N1cmFjeSwgYWx0aXR1ZGUsIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkLCBmbG9v
ckxldmVsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25V
bmF2YWlsYWJsZUVycm9yIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgZXJyb3JN
ZXNzYWdlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
V0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b25VbmF2YWlsYWJsZUVycm9yKGVycm9yTWVzc2FnZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFVzZXJNZWRpYVBlcm1pc3Npb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVm
IGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVybWlzc2lvbihX
S0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVkV0spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFVzZXJNZWRpYVBlcm1pc3Npb24oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUxNSwxMTcgKzQxMiw2NiBAQCB2b2lk
IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0
cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25G
b3JPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJtaXNzaW9uS2V5V0sg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwZXJtaXNzaW9uIikpOwot
ICAgICAgICBXS0Jvb2xlYW5SZWYgcGVybWlzc2lvbldLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGVy
bWlzc2lvbktleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcGVybWlzc2lvbiA9IFdLQm9vbGVh
bkdldFZhbHVlKHBlcm1pc3Npb25XSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9y
aWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IG9yaWdpbktleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBw
YXJlbnRPcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJw
YXJlbnRPcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbldLID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBwYXJlbnRPcmlnaW5LZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAg
ICAgIGF1dG8gcGVybWlzc2lvbiA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJwZXJtaXNzaW9uIik7CisgICAgICAgIGF1dG8gb3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJvcmlnaW4iKTsKKyAgICAgICAgYXV0byBwYXJlbnRPcmlnaW5X
SyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgInBhcmVudE9yaWdpbiIpOwog
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVyc2lzdGVu
dFBlcm1pc3Npb25Gb3JPcmlnaW4ocGVybWlzc2lvbiwgb3JpZ2luV0ssIHBhcmVudE9yaWdpbldL
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENv
dW50Rm9yT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3Nh
Z2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAgICAg
ICBXS1N0cmluZ1JlZiBvcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgb3JpZ2luS2V5LmdldCgp
KSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBh
cmVudE9yaWdpbktleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IG9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAib3JpZ2luIik7
CisgICAgICAgIGF1dG8gcGFyZW50T3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJwYXJlbnRPcmlnaW4iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihvcmln
aW5XSywgcGFyZW50T3JpZ2luV0spOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRDdXN0b21Qb2xp
Y3lEZWxlZ2F0ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVuYWJsZWRLZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImVuYWJsZWQiKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBlbmFibGVkS2V5
V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBlbmFibGVkID0gV0tCb29sZWFuR2V0VmFsdWUoZW5h
YmxlZFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGVybWlzc2l2ZUtl
eVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGVybWlzc2l2ZSIp
KTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBlcm1pc3NpdmVXSyA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHBlcm1pc3NpdmVLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHBlcm1pc3NpdmUgPSBXS0Jv
b2xlYW5HZXRWYWx1ZShwZXJtaXNzaXZlV0spOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBl
bmFibGVkID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImVuYWJsZWQiKTsK
KyAgICAgICAgYXV0byBwZXJtaXNzaXZlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgInBlcm1pc3NpdmUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGVuYWJsZWQsIHBlcm1pc3NpdmUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRIaWRkZW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc0lu
aXRpYWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhpZGRl
biIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGhpZGRlbldLID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
aXNJbml0aWFsS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBoaWRkZW4gPSBXS0Jvb2xlYW5H
ZXRWYWx1ZShoaWRkZW5XSyk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldEhpZGRlbihoaWRkZW4pOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRIaWRkZW4oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
ImhpZGRlbiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUHJvY2Vzc1dvcmtRdWV1ZSIpKSB7Ci0g
ICAgICAgIGlmIChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigp
LnByb2Nlc3NXb3JrUXVldWUoKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
V29ya1F1ZXVlUHJvY2Vzc2VkQ2FsbGJhY2siKSk7Ci0gICAgICAgICAgICBXS1BhZ2VQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwotICAgICAgICB9CisgICAgICAg
IGlmIChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnByb2Nl
c3NXb3JrUXVldWUoKSkKKyAgICAgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiV29ya1F1ZXVlUHJv
Y2Vzc2VkQ2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVCYWNrTmF2aWdhdGlv
biIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50
NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIHVpbnQ2NF90IHN0ZXBDb3VudCA9IFdLVUludDY0R2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVCYWNrTmF2
aWdhdGlvbihzdGVwQ291bnQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
d29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlQmFja05hdmlnYXRpb24odWludDY0VmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVGb3J3YXJkTmF2aWdhdGlvbiIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIHVpbnQ2NF90IHN0ZXBDb3VudCA9IFdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVGb3J3YXJkTmF2aWdh
dGlvbihzdGVwQ291bnQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29y
a1F1ZXVlTWFuYWdlcigpLnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24odWludDY0VmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVMb2FkIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBsb2FkRGF0YURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdXJsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygidXJsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiB1cmxXSyA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgdXJs
S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRhcmdldEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRhcmdldCIpKTsKLSAg
ICAgICAgV0tTdHJpbmdSZWYgdGFyZ2V0V0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIHRhcmdldEtleS5nZXQo
KSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzaG91bGRPcGVuRXh0ZXJu
YWxVUkxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygic2hvdWxk
T3BlbkV4dGVybmFsVVJMcyIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHNob3VsZE9wZW5FeHRl
cm5hbFVSTHNWYWx1ZVdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc0tl
eS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVl
dWVNYW5hZ2VyKCkucXVldWVMb2FkKHRvV1RGU3RyaW5nKHVybFdLKSwgdG9XVEZTdHJpbmcodGFy
Z2V0V0spLCBXS0Jvb2xlYW5HZXRWYWx1ZShzaG91bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWVXSykp
OworICAgICAgICBhdXRvIGxvYWREYXRhRGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNz
YWdlQm9keSk7CisgICAgICAgIGF1dG8gdXJsID0gdG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUobG9h
ZERhdGFEaWN0aW9uYXJ5LCAidXJsIikpOworICAgICAgICBhdXRvIHRhcmdldCA9IHRvV1RGU3Ry
aW5nKHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgInRhcmdldCIpKTsKKyAgICAgICAg
YXV0byBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzID0gYm9vbGVhblZhbHVlKGxvYWREYXRhRGljdGlv
bmFyeSwgInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWQodXJsLCB0YXJnZXQsIHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUxvYWRIVE1M
U3RyaW5nIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBsb2FkRGF0
YURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY29udGVudEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbnRlbnQiKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIGNvbnRlbnRXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgY29udGVudEtleS5nZXQoKSkpOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBiYXNlVVJMS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYmFzZVVSTCIpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgYmFzZVVSTFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCBiYXNlVVJMS2V5LmdldCgpKSk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidW5yZWFjaGFibGVVUkwiKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIHVucmVhY2hhYmxl
VVJMS2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBsb2FkRGF0YURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGNvbnRlbnRXSyA9IHN0cmlu
Z1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgImNvbnRlbnQiKTsKKyAgICAgICAgYXV0byBiYXNl
VVJMV0sgPSBzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJiYXNlVVJMIik7CisgICAg
ICAgIGF1dG8gdW5yZWFjaGFibGVVUkxXSyA9IHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFy
eSwgInVucmVhY2hhYmxlVVJMIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkSFRNTFN0cmluZyh0b1dURlN0cmluZyhjb250
ZW50V0spLCBiYXNlVVJMV0sgPyB0b1dURlN0cmluZyhiYXNlVVJMV0spIDogU3RyaW5nKCksIHVu
cmVhY2hhYmxlVVJMV0sgPyB0b1dURlN0cmluZyh1bnJlYWNoYWJsZVVSTFdLKSA6IFN0cmluZygp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYzNiwxNTQgKzQ4MiwxMTcgQEAgdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJp
bmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9hZGluZ1NjcmlwdCIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1h
bmFnZXIoKS5xdWV1ZUxvYWRpbmdTY3JpcHQodG9XVEZTdHJpbmcoc2NyaXB0KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9k
eSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIo
KS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQodG9XVEZTdHJpbmcoc2NyaXB0KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFs
dWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250
aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0UmVqZWN0c1Byb3RlY3Rp
b25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRIYW5kbGVzQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkTG9nQ2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZExvZ0NhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZExvZ0NhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZExvZ0Rvd25s
b2FkQ2FsbGJhY2tzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tT
dHJpbmdSZWYgdXNlcm5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkp
OworICAgICAgICBXS1N0cmluZ1JlZiB1c2VybmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEF1dGhlbnRpY2F0aW9u
VXNlcm5hbWUodG9XVEZTdHJpbmcodXNlcm5hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
QXV0aGVudGljYXRpb25QYXNzd29yZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IHBhc3N3b3JkID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgV0tTdHJpbmdSZWYgcGFzc3dvcmQgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBdXRoZW50aWNhdGlvblBhc3N3b3Jk
KHRvV1RGU3RyaW5nKHBhc3N3b3JkKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEJsb2NrQWxs
UGx1Z2lucyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgc2hvdWxkQmxvY2sg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJsb2NrQWxsUGx1Z2lucyhXS0Jvb2xlYW5HZXRWYWx1
ZShzaG91bGRCbG9jaykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
QmxvY2tBbGxQbHVnaW5zKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tT
dHJpbmdSZWYgbW9kZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Cisg
ICAgICAgIFdLU3RyaW5nUmVmIG1vZGUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKHRv
V1RGU3RyaW5nKG1vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkRGVjaWRlTmF2
aWdhdGlvblBvbGljeUFmdGVyRGVsYXkiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFu
UmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9u
UG9saWN5QWZ0ZXJEZWxheShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFm
dGVyRGVsYXkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3Vs
ZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGVjaWRlUmVz
cG9uc2VQb2xpY3lBZnRlckRlbGF5KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TmF2
aWdhdGlvbkdlc3R1cmVzRW5hYmxlZChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxl
ZChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SWdub3Jlc1ZpZXdwb3J0U2Nh
bGVMaW1pdHMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGREb3dubG9hZFVu
ZGlzcGxheWFibGVNSU1FVHlwZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVm
IHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFi
bGVNSU1FVHlwZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBl
cyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hv
dWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3Vs
ZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoV0tCb29sZWFuR2V0VmFsdWUo
dmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZEFs
bG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoYm9vbGVhblZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJk
UGFydHlDb29raWVzT25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1
ZSksIHRydWUpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
KSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1Ro
aXJkUGFydHlDb29raWVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0
eUNvb2tpZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpLCBmYWxzZSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5
Q29va2llcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpLCBmYWxzZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlJ1blVJUHJvY2Vzc1NjcmlwdCIpKSB7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNjcmlwdCIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwotCi0gICAgICAgIFVJU2NyaXB0
SW52b2NhdGlvbkRhdGEqIGludm9jYXRpb25EYXRhID0gbmV3IFVJU2NyaXB0SW52b2NhdGlvbkRh
dGEoKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFs
dWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGludm9jYXRpb25EYXRhID0gbmV3IFVJU2Ny
aXB0SW52b2NhdGlvbkRhdGE7CiAgICAgICAgIGludm9jYXRpb25EYXRhLT50ZXN0SW52b2NhdGlv
biA9IHRoaXM7Ci0gICAgICAgIGludm9jYXRpb25EYXRhLT5jYWxsYmFja0lEID0gKHVuc2lnbmVk
KVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBjYWxsYmFja0lES2V5LmdldCgpKSkp
OwotICAgICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBzY3JpcHRLZXkuZ2V0KCkpKTsKKyAgICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQg
PSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJDYWxsYmFja0lEIik7CisgICAg
ICAgIGludm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJTY3JpcHQiKTsKICAgICAgICAgbV9wZW5kaW5nVUlTY3JpcHRJbnZvY2F0
aW9uRGF0YSA9IGludm9jYXRpb25EYXRhOwogICAgICAgICBXS1BhZ2VDYWxsQWZ0ZXJOZXh0UHJl
c2VudGF0aW9uVXBkYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIGludm9jYXRpb25EYXRhLCBydW5VSVNpZGVTY3JpcHRBZnRlclVwZGF0ZUNhbGxi
YWNrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUnVuVUlQcm9jZXNzU2NyaXB0SW1tZWRpYXRlbHki
KSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBj
YWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bGJhY2tJRCIpKTsKLQotICAgICAgICBVSVNjcmlwdEludm9jYXRpb25EYXRhKiBpbnZvY2F0aW9u
RGF0YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRhKCk7CisgICAgICAgIGF1dG8gbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
YXV0byBpbnZvY2F0aW9uRGF0YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRhOwogICAgICAg
ICBpbnZvY2F0aW9uRGF0YS0+dGVzdEludm9jYXRpb24gPSB0aGlzOwotICAgICAgICBpbnZvY2F0
aW9uRGF0YS0+Y2FsbGJhY2tJRCA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgY2FsbGJhY2tJREtleS5nZXQoKSkpKTsKLSAgICAgICAgaW52b2NhdGlvbkRhdGEt
PnNjcmlwdFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc2NyaXB0S2V5LmdldCgpKSk7CisgICAg
ICAgIGludm9jYXRpb25EYXRhLT5jYWxsYmFja0lEID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiQ2FsbGJhY2tJRCIpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0
U3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU2NyaXB0Iik7CiAg
ICAgICAgIG1fcGVuZGluZ1VJU2NyaXB0SW52b2NhdGlvbkRhdGEgPSBpbnZvY2F0aW9uRGF0YTsK
ICAgICAgICAgcnVuVUlTaWRlU2NyaXB0SW1tZWRpYXRlbHkobnVsbHB0ciwgaW52b2NhdGlvbkRh
dGEpOwogICAgICAgICByZXR1cm47CkBAIC03OTEsMTEgKzYwMCw5IEBAIHZvaWQgVGVzdEludm9j
YXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1l
c3NhZ2VOYW1lCiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIkluc3RhbGxDdXN0b21NZW51QWN0aW9uIikpIHsKICAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJuYW1lIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbmFtZUtleS5nZXQoKSkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZGlzbWlzc2VzQXV0b21hdGljYWxseUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImRpc21pc3Nlc0F1dG9t
YXRpY2FsbHkiKSk7Ci0gICAgICAgIGF1dG8gZGlzbWlzc2VzQXV0b21hdGljYWxseSA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlLZXkuZ2V0KCkpKTsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmluc3RhbGxDdXN0b21NZW51QWN0aW9uKHRvV1RG
U3RyaW5nKG5hbWUuZ2V0KCkpLCBXS0Jvb2xlYW5HZXRWYWx1ZShkaXNtaXNzZXNBdXRvbWF0aWNh
bGx5KSk7CisgICAgICAgIGF1dG8gbmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIm5hbWUiKTsKKyAgICAgICAgYXV0byBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5ID0gYm9v
bGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImRpc21pc3Nlc0F1dG9tYXRpY2FsbHki
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmluc3RhbGxDdXN0b21NZW51
QWN0aW9uKHRvV1RGU3RyaW5nKG5hbWUpLCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtODA1LDcgKzYxMiw3IEBAIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3Nh
Z2VOYW1lCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGFjdGlvbnM7CiAgICAgICAgIGFjdGlvbnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IHNpemU7ICsraW5kZXgpCi0gICAgICAgICAgICBhY3Rpb25zLmFwcGVuZCh0
b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4
KG1lc3NhZ2VCb2R5QXJyYXksIGluZGV4KSkpKTsKKyAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5k
KHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZXNzYWdlQm9k
eUFycmF5LCBpbmRleCkpKSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRBbGxvd2VkTWVudUFjdGlvbnMoYWN0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC04MjgsMTA4ICs2MzUsNjMgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRp
c3RpY3NEZWJ1Z01vZGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRGVidWdNb2RlKFdLQm9vbGVhbkdl
dFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzRGVidWdNb2RlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGhvc3ROYW1l
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0xhc3RTZWVuIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTGFzdFNlZW4oaG9zdE5hbWUsIFdLRG91YmxlR2V0
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB2
YWx1ZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTGFzdFNlZW4oaG9z
dE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc01lcmdlU3Rh
dGlzdGljIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lRG9tYWluMUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lRG9tYWluMSIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lRG9tYWluMktleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lRG9tYWluMiIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxhc3RTZWVuS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGFzdFNlZW4iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBoYWRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzR3JhbmRmYXRoZXJlZEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzR3JhbmRmYXRoZXJlZCIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzUHJldmFsZW50S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNQcmV2YWxlbnQiKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc1ZlcnlQcmV2YWxlbnRLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ZlcnlQcmV2YWxlbnQiKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkYXRhUmVjb3Jkc1JlbW92ZWRLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEYXRhUmVjb3Jkc1JlbW92ZWQiKSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lc0FjY2Vzc2VkRmlyc3RQYXJ0
eUludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VGltZXNBY2Nlc3NlZEZpcnN0UGFydHlJbnRlcmFjdGlvbiIpKTsKLQotICAgICAgICBXS1N0cmlu
Z1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVEb21haW4xID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BG
cmFtZURvbWFpbjFLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVEb21h
aW4yID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZURvbWFpbjJLZXkuZ2V0KCkpKTsKLSAgICAg
ICAgV0tEb3VibGVSZWYgbGFzdFNlZW4gPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxhc3RTZWVuS2V5Lmdl
dCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBoYWRVc2VySW50ZXJhY3Rpb24gPSBzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBoYWRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3Vi
bGVSZWYgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNH
cmFuZGZhdGhlcmVkID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNHcmFuZGZhdGhlcmVkS2V5LmdldCgp
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc1ByZXZhbGVudCA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGlzUHJldmFsZW50S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc1ZlcnlQcmV2
YWxlbnQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1ZlcnlQcmV2YWxlbnRLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tVSW50NjRSZWYgZGF0YVJlY29yZHNSZW1vdmVkID0gc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBk
YXRhUmVjb3Jkc1JlbW92ZWRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKGhvc3ROYW1lLCB0b3BGcmFt
ZURvbWFpbjEsIHRvcEZyYW1lRG9tYWluMiwgV0tEb3VibGVHZXRWYWx1ZShsYXN0U2VlbiksIFdL
Qm9vbGVhbkdldFZhbHVlKGhhZFVzZXJJbnRlcmFjdGlvbiksIFdLRG91YmxlR2V0VmFsdWUobW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbiksIFdLQm9vbGVhbkdldFZhbHVlKGlzR3JhbmRmYXRoZXJl
ZCksIFdLQm9vbGVhbkdldFZhbHVlKGlzUHJldmFsZW50KSwgV0tCb29sZWFuR2V0VmFsdWUoaXNW
ZXJ5UHJldmFsZW50KSwgV0tVSW50NjRHZXRWYWx1ZShkYXRhUmVjb3Jkc1JlbW92ZWQpKTsKKyAg
ICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2Fn
ZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZURvbWFpbjEgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZURvbWFpbjEiKTsKKyAg
ICAgICAgYXV0byB0b3BGcmFtZURvbWFpbjIgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJUb3BGcmFtZURvbWFpbjIiKTsKKyAgICAgICAgYXV0byBsYXN0U2VlbiA9IGRvdWJs
ZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkxhc3RTZWVuIik7CisgICAgICAgIGF1dG8g
aGFkVXNlckludGVyYWN0aW9uID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IkhhZFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24gPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJNb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gaXNHcmFuZGZhdGhlcmVkID0gYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIklzR3JhbmRmYXRoZXJlZCIpOworICAgICAgICBh
dXRvIGlzUHJldmFsZW50ID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIklz
UHJldmFsZW50Iik7CisgICAgICAgIGF1dG8gaXNWZXJ5UHJldmFsZW50ID0gYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIklzVmVyeVByZXZhbGVudCIpOworICAgICAgICBhdXRv
IGRhdGFSZWNvcmRzUmVtb3ZlZCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IkRhdGFSZWNvcmRzUmVtb3ZlZCIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKGhvc3ROYW1lLCB0b3BGcmFtZURvbWFpbjEs
IHRvcEZyYW1lRG9tYWluMiwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJl
dmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBX
S0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0
aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhv
c3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGFkVXNlckludGVy
YWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNl
ckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIk1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTY2hlZHVsZWRGb3JBbGxC
dXRDb29raWVEYXRhUmVtb3ZhbCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGlzUHJldmFsZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SXNQcmV2YWxlbnQiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBoYWRV
c2VySW50ZXJhY3Rpb24gPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBoYWRVc2VySW50ZXJhY3Rpb25LZXku
Z2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc1ByZXZhbGVu
dCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGlzUHJldmFsZW50S2V5LmdldCgpKSk7Ci0KLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGlj
KGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZShoYWRVc2VySW50ZXJhY3Rpb24pLCBXS0Jvb2xl
YW5HZXRWYWx1ZShpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKSwgV0tCb29s
ZWFuR2V0VmFsdWUoaXNQcmV2YWxlbnQpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3RO
YW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAg
ICAgICAgYXV0byBoYWRVc2VySW50ZXJhY3Rpb24gPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiSGFkVXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gaXNTY2hlZHVs
ZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIik7CisgICAg
ICAgIGF1dG8gaXNQcmV2YWxlbnQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiSXNQcmV2YWxlbnQiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljKGhvc3ROYW1lLCBoYWRVc2VySW50ZXJhY3Rpb24s
IGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRU
eXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9
IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFt
ZSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhv
c3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsK
KyAgICAgICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsK
LQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIp
KTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9z
dE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgV0tC
b29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1l
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAg
ICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1
ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Zl
cnlQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC05NDQsNTEgKzcwNiwzNSBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNl
aXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91
cnMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUlu
dDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBob3VycyA9IHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVk
U2luY2VIb3VycyhXS1VJbnQ2NEdldFZhbHVlKGhvdXJzKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9y
ZU1vZGlmaWVkU2luY2VIb3Vycyh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoV0tCb29sZWFuR2V0VmFsdWUodmFs
dWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NT
aG91bGREb3duZ3JhZGVSZWZlcnJlcihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUoYm9v
bGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NT
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUb1NhbWVTaXRl
U3RyaWN0Q29va2llcyhob3N0TmFtZSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXMoc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1NldEZpcnN0UGFydHlI
b3N0Q05BTUVEb21haW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZp
cnN0UGFydHlVUkxTdHJpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJGaXJzdFBhcnR5VVJMIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
Y25hbWVVUkxTdHJpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDTkFNRSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGZpcnN0UGFydHlVUkxT
dHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZpcnN0UGFydHlVUkxTdHJpbmdLZXkuZ2V0KCkpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNu
YW1lVVJMU3RyaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1
dG8gZmlyc3RQYXJ0eVVSTFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkZpcnN0UGFydHlVUkwiKTsKKyAgICAgICAgYXV0byBjbmFtZVVSTFN0cmluZyA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNOQU1FIik7CiAgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFp
bihmaXJzdFBhcnR5VVJMU3RyaW5nLCBjbmFtZVVSTFN0cmluZyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4iKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS1N0cmluZ1JlZiBjbmFtZVVSTFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluKGNuYW1lVVJMU3RyaW5nKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVE
b21haW4oc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMTAxMiw4ICs3NTgsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0QXBwbGljYXRpb25N
YW5pZmVzdCIpKSB7CiAjaWZkZWYgX19CTE9DS1NfXwogICAgICAgICBXS1BhZ2VHZXRBcHBsaWNh
dGlvbk1hbmlmZXN0X2IoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnBhZ2UoKSwgXnsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRpZEdldEFwcGxp
Y2F0aW9uTWFuaWZlc3QiKSk7Ci0gICAgICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJE
aWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0Iik7CiAgICAgICAgIH0pOwogI2Vsc2UKICAgICAgICAg
Ly8gRklYTUU6IEFkZCBBUEkgZm9yIGxvYWRpbmcgdGhlIG1hbmlmZXN0IG9uIG5vbi1fX0JMT0NL
U19fIHBvcnRzLgpAQCAtMTAyMywxNiArNzY4LDEwIEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1l
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7
Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUi
KSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhv
c3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUsIFdL
Qm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFt
ZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAg
ICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFs
dWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NI
YXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTA0Myw4ICs3ODIsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNl
aXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBcHBC
b3VuZERvbWFpbnMiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLQXJyYXlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQXJyYXlSZWYgb3JpZ2luVVJMcyA9
IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldEFwcEJvdW5kRG9tYWlucyhvcmlnaW5VUkxzKTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFwcEJvdW5kRG9tYWlucyhzdGF0aWNf
Y2FzdDxXS0FycmF5UmVmPihtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0xMDU1LDk0ICs3OTMsNzAgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2Nh
dGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKIHsKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkluaXRpYWxpemF0
aW9uIikpIHsKICAgICAgICAgYXV0byBzZXR0aW5ncyA9IGNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rp
b25hcnkoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc3VtZVRlc3RpbmdL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXN1bWVUZXN0aW5n
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3VtZVRlc3RpbmdWYWx1
ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fc3RhcnRlZFRlc3RpbmcpKTsKLSAgICAgICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShzZXR0aW5ncy5nZXQoKSwgcmVzdW1lVGVzdGluZ0tleS5nZXQo
KSwgcmVzdW1lVGVzdGluZ1ZhbHVlLmdldCgpKTsKKyAgICAgICAgc2V0VmFsdWUoc2V0dGluZ3Ms
ICJSZXN1bWVUZXN0aW5nIiwgbV9zdGFydGVkVGVzdGluZyk7CiAgICAgICAgIHJldHVybiBzZXR0
aW5nczsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldER1bXBQaXhlbHMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgbV9kdW1wUGl4
ZWxzID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdl
Qm9keSkpOworICAgICAgICBtX2R1bXBQaXhlbHMgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXREdW1wUGl4ZWxzIikpCiAgICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBQaXhlbHMpKTsKIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0V2hhdFRvRHVtcCIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1fd2hhdFRvRHVtcCA9IHN0YXRpY19jYXN0PFdoYXRUb0R1
bXA+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5
KSkpOworICAgICAgICBtX3doYXRUb0R1bXAgPSBzdGF0aWNfY2FzdDxXaGF0VG9EdW1wPih1aW50
NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRXaGF0
VG9EdW1wIikpCiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHN0YXRpY19j
YXN0PHVpbnQ2NF90PihtX3doYXRUb0R1bXApKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFdhaXRVbnRpbERvbmUiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICAgICAgc2V0V2FpdFVudGlsRG9uZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihX
S0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkp
KTsKKyAgICAgICAgc2V0V2FpdFVudGlsRG9uZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0V2FpdFVudGlsRG9uZSIpKQogICAgICAgICBy
ZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV93YWl0VW50aWxEb25lKSk7CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldER1bXBGcmFt
ZUxvYWRDYWxsYmFja3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgbV9kdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oV0tCb29sZWFuR2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgbV9kdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiR2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKQogICAgICAgICByZXR1
cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKSk7CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldENh
bk9wZW5XaW5kb3dzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1fY2FuT3BlbldpbmRvd3MgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBtX2Nhbk9wZW5XaW5kb3dzID0g
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRXaW5kb3dJc0tleSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNLZXlW
YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+c2V0V2luZG93SXNLZXko
V0tCb29sZWFuR2V0VmFsdWUoaXNLZXlWYWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+c2V0V2luZG93SXNLZXkoYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0Vmlld1NpemUiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3aWR0aEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaGVpZ2h0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiaGVpZ2h0IikpOwotCi0gICAgICAgIFdLRG91YmxlUmVmIHdpZHRoV0sgPSBzdGF0aWNfY2Fz
dDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHdpZHRoS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGhlaWdodFdLID0g
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBoZWlnaHRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cmVzaXplVG8oV0tEb3VibGVHZXRWYWx1
ZSh3aWR0aFdLKSwgV0tEb3VibGVHZXRWYWx1ZShoZWlnaHRXSykpOworICAgICAgICBhdXRvIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAg
ICAgIGF1dG8gd2lkdGggPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJ3aWR0
aCIpOworICAgICAgICBhdXRvIGhlaWdodCA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgImhlaWdodCIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cmVzaXplVG8od2lkdGgsIGhlaWdodCk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIpKSB7Ci0gICAgICAgIGJvb2wgaXNB
Y3RpdmUgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNHZW9sb2NhdGlvblByb3ZpZGVy
QWN0aXZlKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoaXNBY3RpdmUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJ
c0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNHZW9sb2NhdGlvblByb3Zp
ZGVyQWN0aXZlKCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0Q2FjaGVNb2RlbCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIHVpbnQ2NF90
IG1vZGVsID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2Fn
ZUJvZHkpKTsKKyAgICAgICAgdWludDY0X3QgbW9kZWwgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9k
eSk7CiAgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZVNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5
Rm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud2Vic2l0ZURhdGFTdG9yZSgp
LCBtb2RlbCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNXb3JrUXVldWVFbXB0eSIp
KSB7Ci0gICAgICAgIGJvb2wgaXNFbXB0eSA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53
b3JrUXVldWVNYW5hZ2VyKCkuaXNXb3JrUXVldWVFbXB0eSgpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzRW1wdHkpKTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1dvcmtRdWV1ZUVtcHR5IikpCisgICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
d29ya1F1ZXVlTWFuYWdlcigpLmlzV29ya1F1ZXVlRW1wdHkoKSkpOwogCi0gICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEaWRSZWNlaXZlU2VydmVyUmVk
aXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkgewotICAgICAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5h
dmlnYXRpb24oKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpKQorICAgICAgICByZXR1cm4gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVT
ZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpKSk7CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFyRGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpIHsKICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFyRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxOYXZpZ2F0aW9uKCk7CkBAIC0xMTUwLDQwICs4NjQsMzUgQEAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZy
b21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQiKSkgewotI2lmIFBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoSXNTZWN1cmVFdmVu
dElucHV0RW5hYmxlZCgpKSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICByZXR1cm4gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUoSXNTZWN1cmVFdmVudElucHV0RW5hYmxlZCgpKSk7CiAjZWxz
ZQotICAgICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGZhbHNlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShmYWxzZSkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRDdXN0
b21Vc2VyQWdlbnQiKSkgewotICAgICAgICBXS1N0cmluZ1JlZiB1c2VyQWdlbnQgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1BhZ2VTZXRDdXN0b21V
c2VyQWdlbnQoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgdXNlckFnZW50KTsKKyAgICAgICAgV0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50KFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGUiKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRTd2FwVG9FcGhl
bWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdh
dGlvbihXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dh
cFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oYm9vbGVhblZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZFN3YXBUb0Rl
ZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRp
b24oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9k
eSkpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZFN3YXBU
b0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVi
b2FyZCIpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLVUludDY0UmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNvdW50KSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQi
KSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkpKTsKICAgICAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRlbGV0ZUFs
bEluZGV4ZWREYXRhYmFzZXMiKSkgewogICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVB
bGxJbmRleGVkRGF0YWJhc2VzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53ZWJzaXRlRGF0
YVN0b3JlKCksIG51bGxwdHIsIHsgfSk7CkBAIC0xMTkxLDE3ICs5MDAsMTAgQEAgV0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2Fn
ZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkFkZE1vY2tNZWRpYURldmljZSIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwot
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHBlcnNpc3RlbnRJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlBlcnNpc3RlbnRJRCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
TGFiZWwiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0eXBlS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVHlwZSIpKTsKLQotICAgICAgICBh
dXRvIHBlcnNpc3RlbnRJRCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGVyc2lzdGVudElES2V5LmdldCgp
KSk7Ci0gICAgICAgIGF1dG8gbGFiZWwgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxhYmVsS2V5LmdldCgp
KSk7Ci0gICAgICAgIGF1dG8gdHlwZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdHlwZUtleS5nZXQoKSkp
OwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVl
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBwZXJzaXN0ZW50SUQgPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJQZXJzaXN0ZW50SUQiKTsKKyAgICAgICAgYXV0byBsYWJl
bCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkxhYmVsIik7CisgICAgICAg
IGF1dG8gdHlwZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlR5cGUiKTsK
ICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmFkZE1vY2tNZWRpYURldmljZShw
ZXJzaXN0ZW50SUQsIGxhYmVsLCB0eXBlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQpAQCAtMTIxMiw5ICs5MTQsNyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVtb3Zl
TW9ja01lZGlhRGV2aWNlIikpIHsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGVyc2lzdGVudElkID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkucmVtb3ZlTW9ja01lZGlhRGV2aWNlKHBlcnNpc3RlbnRJZCk7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZW1vdmVNb2NrTWVkaWFEZXZp
Y2Uoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCkBAIC0xMjI0LDE0MiArOTI0LDg3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVz
dEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uKFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uKHVpbnQ2NFZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNNb2NrUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQiKSkgewotICAgICAgICBib29sIGlzTW9ja1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlz
TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkKCk7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5h
YmxlZCkpOwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIklzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkIikpCisgICAg
ICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuaXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQoKSkpOwogICAgIAot
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSGFzQXBw
Qm91bmRTZXNzaW9uIikpIHsKLSAgICAgICAgYm9vbCBoYXNBcHBCb3VuZFNlc3Npb24gPSBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzQXBwQm91bmRTZXNzaW9uKCk7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNBcHBCb3VuZFNlc3Npb24pKTsKLSAgICB9
CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJIYXNB
cHBCb3VuZFNlc3Npb24iKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNBcHBCb3VuZFNlc3Npb24oKSkpOwogCiAj
aWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiQ29ubmVjdE1vY2tHYW1lcGFkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLQotICAgICAgICB1
aW50NjRfdCBpbmRleCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6Y29ubmVjdE1vY2tH
YW1lcGFkKGluZGV4KTsKLSAgICAgICAgCisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6Y29u
bmVjdE1vY2tHYW1lcGFkKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiRGlzY29ubmVjdE1vY2tHYW1lcGFkIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLQotICAg
ICAgICB1aW50NjRfdCBpbmRleCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6ZGlzY29u
bmVjdE1vY2tHYW1lcGFkKGluZGV4KTsKLQorICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmRp
c2Nvbm5lY3RNb2NrR2FtZXBhZCh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHYW1lcGFkRGV0YWlscyIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkp
OwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGdhbWVwYWRJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkdhbWVwYWRJRCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1h
cHBpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNYXBwaW5n
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXhpc0NvdW50S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXhpc0NvdW50IikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uQ291bnRLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25Db3VudCIpKTsKLQotICAgICAgICBXS1VJ
bnQ2NFJlZiBnYW1lcGFkSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGdhbWVwYWRJbmRleEtleS5n
ZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBnYW1lcGFkSUQgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGdhbWVwYWRJREtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBtYXBwaW5nID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBtYXBwaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGF4
aXNDb3VudCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYXhpc0NvdW50S2V5LmdldCgpKSk7Ci0gICAgICAg
IFdLVUludDY0UmVmIGJ1dHRvbkNvdW50ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25Db3VudEtl
eS5nZXQoKSkpOwotCi0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRE
ZXRhaWxzKFdLVUludDY0R2V0VmFsdWUoZ2FtZXBhZEluZGV4KSwgdG9XVEZTdHJpbmcoZ2FtZXBh
ZElEKSwgdG9XVEZTdHJpbmcobWFwcGluZyksIFdLVUludDY0R2V0VmFsdWUoYXhpc0NvdW50KSwg
V0tVSW50NjRHZXRWYWx1ZShidXR0b25Db3VudCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8g
Z2FtZXBhZEluZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiR2FtZXBh
ZEluZGV4Iik7CisgICAgICAgIGF1dG8gZ2FtZXBhZElEID0gc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiR2FtZXBhZElEIik7CisgICAgICAgIGF1dG8gbWFwcGluZyA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk1hcHBpbmciKTsKKyAgICAgICAgYXV0byBh
eGlzQ291bnQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJBeGlzQ291bnQi
KTsKKyAgICAgICAgYXV0byBidXR0b25Db3VudCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkJ1dHRvbkNvdW50Iik7CisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0
TW9ja0dhbWVwYWREZXRhaWxzKGdhbWVwYWRJbmRleCwgdG9XVEZTdHJpbmcoZ2FtZXBhZElEKSwg
dG9XVEZTdHJpbmcobWFwcGluZyksIGF4aXNDb3VudCwgYnV0dG9uQ291bnQpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0
YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gZ2FtZXBhZEluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gYXhpc0luZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQXhpc0luZGV4IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIp
KTsKLQotICAgICAgICBXS1VJbnQ2NFJlZiBnYW1lcGFkSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGdhbWVwYWRJbmRleEtleS5nZXQoKSkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBheGlzSW5kZXgg
PSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGF4aXNJbmRleEtleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJs
ZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAg
ICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKFdLVUludDY0R2V0
VmFsdWUoZ2FtZXBhZEluZGV4KSwgV0tVSW50NjRHZXRWYWx1ZShheGlzSW5kZXgpLCBXS0RvdWJs
ZUdldFZhbHVlKHZhbHVlKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGdhbWVwYWRJbmRl
eCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJbmRleCIpOwor
ICAgICAgICBhdXRvIGF4aXNJbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkF4aXNJbmRleCIpOworICAgICAgICBhdXRvIHZhbHVlID0gZG91YmxlVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpz
ZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZShnYW1lcGFkSW5kZXgsIGF4aXNJbmRleCwgdmFsdWUpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSW5kZXhLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBidXR0b25JbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbkluZGV4IikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1VJbnQ2NFJlZiBnYW1lcGFkSW5kZXggPSBz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGdhbWVwYWRJbmRleEtleS5nZXQoKSkpOwotICAgICAgICBXS1VJbnQ2
NFJlZiBidXR0b25JbmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYnV0dG9uSW5kZXhLZXkuZ2V0KCkp
KTsKLSAgICAgICAgV0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5
LmdldCgpKSk7Ci0KLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZEJ1
dHRvblZhbHVlKFdLVUludDY0R2V0VmFsdWUoZ2FtZXBhZEluZGV4KSwgV0tVSW50NjRHZXRWYWx1
ZShidXR0b25JbmRleCksIFdLRG91YmxlR2V0VmFsdWUodmFsdWUpKTsKLQorICAgICAgICBhdXRv
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7Cisg
ICAgICAgIGF1dG8gZ2FtZXBhZEluZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiR2FtZXBhZEluZGV4Iik7CisgICAgICAgIGF1dG8gYnV0dG9uSW5kZXggPSB1aW50NjRW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJCdXR0b25JbmRleCIpOworICAgICAgICBhdXRv
IHZhbHVlID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAg
ICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlKGdhbWVw
YWRJbmRleCwgYnV0dG9uSW5kZXgsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3Vu
dEZvck9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICAgICAg
V0tTdHJpbmdSZWYgb3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG9yaWdpbktleS5nZXQoKSkp
OwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwYXJl
bnRPcmlnaW5LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBv
cmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIm9yaWdpbiIpOwor
ICAgICAgICBhdXRvIHBhcmVudE9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAicGFyZW50T3JpZ2luIik7CiAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JP
cmlnaW4ob3JpZ2luV0ssIHBhcmVudE9yaWdpbldLKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY291bnQpKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJJc0RvaW5nTWVkaWFDYXB0dXJlIikpIHsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNEb2luZ01lZGlhQ2FwdHVyZSgpKSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNv
dW50KSk7CiAgICAgfQorCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJJc0RvaW5nTWVkaWFDYXB0dXJlIikpCisgICAgICAgIHJldHVybiBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNEb2luZ01lZGlh
Q2FwdHVyZSgpKSk7CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgZG9tYWluID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1l
c3NhZ2VCb2R5KTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYXJT
dGF0aXN0aWNzRGF0YUZvckRvbWFpbihkb21haW4pOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuY2xlYXJTdGF0aXN0aWNzRGF0YUZvckRvbWFpbihzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRvZXNTdGF0aXN0aWNzRG9t
YWluSURFeGlzdEluRGF0YWJhc2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZG9tYWlu
SURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb21haW5JRCIp
KTsKLSAgICAgICAgV0tVSW50NjRSZWYgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGRvbWFp
bklES2V5LmdldCgpKSk7Ci0gICAgICAgIGJvb2wgZG9tYWluSURFeGlzdHMgPSBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZShX
S1VJbnQ2NEdldFZhbHVlKGRvbWFpbklEKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZG9tYWluSURFeGlzdHMpKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGRvbWFpbklEID0g
dWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRG9tYWluSUQiKTsKKyAgICAgICAg
Ym9vbCBkb21haW5JREV4aXN0cyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5kb2VzU3Rh
dGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlKGRvbWFpbklEKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRvbWFpbklERXhpc3RzKSk7CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0
aWNzRW5hYmxlZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NFbmFibGVkKFdLQm9vbGVhbkdldFZhbHVl
KHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzRW5hYmxlZChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKSkgewotICAgICAgICBib29sIGlzRXBo
ZW1lcmFsID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0VwaGVtZXJh
bCgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGlzRXBoZW1lcmFsKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuaXNTdGF0aXN0aWNzRXBoZW1lcmFsKCkpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJkdW1wUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyIpKSB7CkBAIC0xMzY4LDIyNCArMTAxMywxMjggQEAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21J
bmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsK
LQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKGlzUHJldmFsZW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGJv
b2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2Uoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3Rp
Y3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAg
V0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBib29sIGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
aXNQcmV2YWxlbnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYm9vbCBpc1By
ZXZhbGVudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NWZXJ5UHJl
dmFsZW50UmVzb3VyY2Uoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7CiAgICAgfQogICAgIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3VicmVzb3VyY2VIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU3VicmVzb3VyY2VIb3N0IikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJp
bmdSZWYgc3VicmVzb3VyY2VIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJyZXNvdXJjZUhvc3RL
ZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVIb3N0ID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB0b3BGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8g
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byBzdWJyZXNvdXJjZUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJTdWJyZXNvdXJjZUhvc3QiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZUhvc3QgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZUhvc3QiKTsKICAgICAg
ICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgPSBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihzdWJy
ZXNvdXJjZUhvc3QsIHRvcEZyYW1lSG9zdCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJyZXNv
dXJjZVVuZGVyKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIpKTsKICAg
ICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJGcmFtZUhvc3RLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJGcmFtZUhvc3QiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3QiKSk7Ci0gICAgICAgIAotICAgICAgICBX
S1N0cmluZ1JlZiBzdWJGcmFtZUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1YkZyYW1lSG9zdEtl
eS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZUhvc3QgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHRvcEZyYW1lSG9zdEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBzdWJGcmFtZUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTdWJG
cmFtZUhvc3QiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZUhvc3QiKTsKICAgICAgICAgYm9vbCBpc1JlZ2lz
dGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0
aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihzdWJGcmFtZUhvc3QsIHRvcEZyYW1lSG9z
dCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKSk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lz
dGVyZWRBc1N1YkZyYW1lVW5kZXIpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNS
ZWRpcmVjdGluZ1RvIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rp
b25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0
UmVkaXJlY3RlZEZyb21LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0UmVkaXJlY3RlZEZyb20iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBob3N0UmVkaXJlY3RlZFRvS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdFJlZGlyZWN0ZWRUbyIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVm
IGhvc3RSZWRpcmVjdGVkRnJvbSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdFJlZGlyZWN0ZWRGcm9t
S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3RSZWRpcmVjdGVkVG8gPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGhvc3RSZWRpcmVjdGVkVG9LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAg
ICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgYXV0byBob3N0UmVkaXJlY3RlZEZyb20gPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJIb3N0UmVkaXJlY3RlZEZyb20iKTsKKyAgICAgICAgYXV0byBo
b3N0UmVkaXJlY3RlZFRvID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9z
dFJlZGlyZWN0ZWRUbyIpOwogICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdU
byA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNS
ZWRpcmVjdGluZ1RvKGhvc3RSZWRpcmVjdGVkRnJvbSwgaG9zdFJlZGlyZWN0ZWRUbyk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8pKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaGFzSGFkVXNl
ckludGVyYWN0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0hh
c0hhZFVzZXJJbnRlcmFjdGlvbihob3N0TmFtZSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzSGFkVXNlckludGVyYWN0
aW9uKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGJvb2wgaGFzSGFkVXNlcklu
dGVyYWN0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0hhc0hh
ZFVzZXJJbnRlcmFjdGlvbihzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAgICByZXR1
cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzSGFkVXNlckludGVyYWN0aW9uKSk7CiAgICAg
fQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiSXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGF1dG8gc3Vi
SG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Ykhvc3Qi
KSk7Ci0gICAgICAgIGF1dG8gdG9wSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlRvcEhvc3QiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBz
dWJIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJIb3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
U3RyaW5nUmVmIHRvcEhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEhvc3RLZXkuZ2V0KCkpKTsK
LQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc3ViSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIlN1Ykhvc3QiKTsKKyAgICAgICAgYXV0byB0b3BIb3N0ID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wSG9zdCIpOwogICAgICAgICBib29sIHN0
YXRpc3RpY0luRGF0YWJhc2VPbmNlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3Rh
dGlzdGljc09ubHlJbkRhdGFiYXNlT25jZShzdWJIb3N0LCB0b3BIb3N0KTsKICAgICAgICAgcmV0
dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHN0YXRpc3RpY0luRGF0YWJhc2VPbmNlKSk7CiAg
ICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAg
ICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVl
IikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9
IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0gICAgICAgIAotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoaG9z
dE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1l
Iik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0
YXRpc3RpY3NHcmFuZGZhdGhlcmVkKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwot
ICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBib29sIGlzR3JhbmRmYXRoZXJlZCA9IFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKGhvc3RO
YW1lKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVyZWQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuaXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhlcmVkKSk7
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRVc2VJVFBEYXRhYmFzZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLQm9vbGVh
blJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlSVRQRGF0YWJhc2UoV0tCb29s
ZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFVzZUlUUERhdGFiYXNlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0TmFtZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdE5hbWUiKSk7
Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVIb3N0
TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0TmFtZUtleS5nZXQoKSkpOwotCisg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVIb3N0TmFtZSA9
IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lSG9zdE5hbWUiKTsK
ICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW4oaG9zdE5hbWUsIHRvcEZyYW1lSG9zdE5hbWUpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rp
b25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0
TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1l
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0TmFtZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdE5h
bWUiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJh
bWVIb3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0TmFtZUtleS5nZXQoKSkp
OwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9u
YXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB0b3BG
cmFtZUhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJh
bWVIb3N0TmFtZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihob3N0TmFtZSwgdG9wRnJhbWVI
b3N0TmFtZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0g
ICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0
TmFtZVJlZGlyZWN0ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhvc3ROYW1lUmVkaXJlY3RlZFRvIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdS
ZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAg
ICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBo
b3N0TmFtZVJlZGlyZWN0ZWRUb0tleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
SG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZFRvIik7CiAgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdFRvKGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20iKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
aG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVj
dGVkRnJvbUtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhv
c3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsK
KyAgICAgICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpOwogICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RGcm9tKGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0
aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lUmVkaXJlY3RlZFRvS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkVG8i
KSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWVS
ZWRpcmVjdGVkVG8gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lUmVkaXJlY3RlZFRvS2V5Lmdl
dCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRv
IGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oaG9zdE5hbWUsIGhv
c3ROYW1lUmVkaXJlY3RlZFRvKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
c3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKSk7Ci0gICAgICAgIAotICAg
ICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXku
Z2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbUtleS5nZXQoKSkpOwotICAgICAg
ICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUo
bWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBob3N0TmFtZVJlZGly
ZWN0ZWRGcm9tID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWVS
ZWRpcmVjdGVkRnJvbSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGhvc3ROYW1lLCBob3N0TmFtZVJl
ZGlyZWN0ZWRGcm9tKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlz
dGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24iKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAg
ICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBz
dGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYXV0byBm
cm9tSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZyb21I
b3N0IikpOwotICAgICAgICBhdXRvIHRvSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRvSG9zdCIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBmcm9tSG9z
dCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgZnJvbUhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgdG9Ib3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b0hvc3RLZXkuZ2V0KCkpKTsKLSAgICAg
ICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVl
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBmcm9tSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIkZyb21Ib3N0Iik7CisgICAgICAgIGF1dG8gdG9Ib3N0ID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9Ib3N0Iik7CiAgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5r
RGVjb3JhdGlvbihmcm9tSG9zdCwgdG9Ib3N0KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oV0tEb3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCkBAIC0xNjAwLDk3ICsxMTQ5LDY5IEBAIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01l
c3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0SXNSdW5uaW5nVGVzdCIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0
YXRpc3RpY3NJc1J1bm5pbmdUZXN0KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdChi
b29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNl
Y29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbChXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxX
S0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShXS0RvdWJsZUdldFZhbHVlKHNl
Y29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlE
KCkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyhXS1VJbnQ2NEdldFZhbHVlKGVudHJpZXMp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNYXhT
dGF0aXN0aWNzRW50cmllcyh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRQcnVuZUVudHJpZXNEb3duVG8iKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NQcnVuZUVudHJpZXNEb3duVG8oV0tVSW50NjRHZXRWYWx1ZShlbnRyaWVzKSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVz
RG93blRvKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0IikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
c3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJ
bmNsdWRlSHR0cE9ubHlDb29raWVzIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYg
aG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiBpbmNsdWRlSHR0cE9ubHlDb29raWVzID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
dmFsdWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QoaG9zdE5hbWUsIFdLQm9vbGVh
bkdldFZhbHVlKGluY2x1ZGVIdHRwT25seUNvb2tpZXMpKTsKKyAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5h
bWUiKTsKKyAgICAgICAgYXV0byBpbmNsdWRlSHR0cE9ubHlDb29raWVzID0gYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiKTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9y
SG9zdChob3N0TmFtZSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcyk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAg
ICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYm9vbCBoYXNMb2NhbFN0b3JhZ2UgPSBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlKGhvc3ROYW1lKTsK
ICAgICAgICAgYXV0byByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNMb2NhbFN0
b3JhZ2UpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NDYWNoZU1h
eEFnZUNhcCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0
aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwKFdLRG91YmxlR2V0VmFs
dWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc0NhY2hlTWF4QWdlQ2FwKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiSGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vzc2lvbiIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGJvb2wgaGFzSXNvbGF0ZWRTZXNzaW9u
ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Np
b24oaG9zdE5hbWUpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKGhhc0lzb2xhdGVkU2Vzc2lvbikpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xl
YXJET01DYWNoZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbiA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KKyAgICAgICAgYXV0byBvcmln
aW4gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5jbGVhckRPTUNhY2hlKG9yaWdpbik7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KQEAgLTE3MDEsMzUgKzEyMjIsMjQgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBU
ZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkhhc0RPTUNhY2hlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2lu
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQorICAgICAgICBhdXRv
IG9yaWdpbiA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYm9vbCBoYXNET01D
YWNoZSA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNET01DYWNoZShvcmlnaW4pOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKGhhc0RPTUNhY2hlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNET01DYWNoZSkpOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRE9NQ2FjaGVT
aXplIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0
cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQorICAgICAgICBhdXRvIG9yaWdpbiA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYXV0byBkb21DYWNoZVNpemUgPSBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZG9tQ2FjaGVTaXplKG9yaWdpbik7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkb21D
YWNoZVNpemUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoZG9tQ2FjaGVTaXplKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBbGxvd1N0b3JhZ2VRdW90
YUluY3JlYXNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIGF1dG8gY2FuSW5jcmVhc2UgPSBXS0Jv
b2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSk7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd1N0b3JhZ2VRdW90YUlu
Y3JlYXNlKGNhbkluY3JlYXNlKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW5qZWN0VXNlclNjcmlwdCIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlu
amVjdFVzZXJTY3JpcHQoc2NyaXB0KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmluamVjdFVzZXJTY3JpcHQoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0xNzM5LDE1ICsxMjQ5LDEyIEBAIFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3Nh
Z2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0IikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91Ymxl
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhXS0RvdWJsZUdldFZhbHVlKHNl
Y29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNlcnZpY2VX
b3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tC
b29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBhdXRvIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KSk7CisgICAgICAgIGF1dG8gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFdLQ29udGV4dFNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNv
bnRleHQoKSwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KQEAgLTE3NjUsNjAgKzEyNzIsMzUgQEAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21J
bmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIkFkZFRlc3RLZXlUb0tleWNoYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiB0ZXN0S2V5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBwcml2YXRlS2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiUHJpdmF0ZUtleSIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcHJpdmF0ZUtleVdLID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdEtleURp
Y3Rpb25hcnksIHByaXZhdGVLZXlLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQXR0ckxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhdHRyTGFiZWxXSyA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3RL
ZXlEaWN0aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gYXBwbGljYXRpb25UYWdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvblRhZyIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
YXBwbGljYXRpb25UYWdXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KHRlc3RLZXlEaWN0aW9uYXJ5LCBhcHBsaWNhdGlvblRhZ0tleS5nZXQoKSkp
OwotCisgICAgICAgIGF1dG8gdGVzdEtleURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVz
c2FnZUJvZHkpOworICAgICAgICBhdXRvIHByaXZhdGVLZXlXSyA9IHN0cmluZ1ZhbHVlKHRlc3RL
ZXlEaWN0aW9uYXJ5LCAiUHJpdmF0ZUtleSIpOworICAgICAgICBhdXRvIGF0dHJMYWJlbFdLID0g
c3RyaW5nVmFsdWUodGVzdEtleURpY3Rpb25hcnksICJBdHRyTGFiZWwiKTsKKyAgICAgICAgYXV0
byBhcHBsaWNhdGlvblRhZ1dLID0gc3RyaW5nVmFsdWUodGVzdEtleURpY3Rpb25hcnksICJBcHBs
aWNhdGlvblRhZyIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuYWRkVGVz
dEtleVRvS2V5Y2hhaW4odG9XVEZTdHJpbmcocHJpdmF0ZUtleVdLKSwgdG9XVEZTdHJpbmcoYXR0
ckxhYmVsV0spLCB0b1dURlN0cmluZyhhcHBsaWNhdGlvblRhZ1dLKSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiQ2xlYW5VcEtleWNoYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLRGljdGlvbmFyeVJlZiB0ZXN0RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBh
dHRyTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdHRy
TGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGF0dHJMYWJlbFdLID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERpY3Rpb25hcnksIGF0
dHJMYWJlbEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBh
cHBsaWNhdGlvbkxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQXBwbGljYXRpb25MYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXBwbGljYXRpb25M
YWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkodGVzdERpY3Rpb25hcnksIGFwcGxpY2F0aW9uTGFiZWxLZXkuZ2V0KCkpKTsKLQorICAgICAg
ICBhdXRvIHRlc3REaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byBhdHRyTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXR0
ckxhYmVsIik7CisgICAgICAgIGF1dG8gYXBwbGljYXRpb25MYWJlbFdLID0gc3RyaW5nVmFsdWUo
dGVzdERpY3Rpb25hcnksICJBcHBsaWNhdGlvbkxhYmVsIik7CiAgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5jbGVhblVwS2V5Y2hhaW4odG9XVEZTdHJpbmcoYXR0ckxhYmVsV0sp
LCBhcHBsaWNhdGlvbkxhYmVsV0sgPyB0b1dURlN0cmluZyhhcHBsaWNhdGlvbkxhYmVsV0spIDog
U3RyaW5nKCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIktleUV4aXN0c0luS2V5Y2hh
aW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIHRlc3REaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJMYWJlbEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgYXR0ckxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleSh0ZXN0RGljdGlvbmFyeSwgYXR0ckxhYmVsS2V5LmdldCgpKSk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFwcGxpY2F0aW9uTGFiZWxLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpOwotICAg
ICAgICBXS1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0RGljdGlvbmFyeSwgYXBwbGljYXRp
b25MYWJlbEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gdGVzdERpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGF0dHJMYWJlbFdLID0gc3Ry
aW5nVmFsdWUodGVzdERpY3Rpb25hcnksICJBdHRyTGFiZWwiKTsKKyAgICAgICAgYXV0byBhcHBs
aWNhdGlvbkxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0RGljdGlvbmFyeSwgIkFwcGxpY2F0aW9u
TGFiZWwiKTsKICAgICAgICAgYm9vbCBrZXlFeGlzdHNJbktleWNoYWluID0gVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmtleUV4aXN0c0luS2V5Y2hhaW4odG9XVEZTdHJpbmcoYXR0ckxhYmVs
V0spLCB0b1dURlN0cmluZyhhcHBsaWNhdGlvbkxhYmVsV0spKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShrZXlFeGlzdHNJ
bktleWNoYWluKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShrZXlFeGlzdHNJbktleWNoYWluKSk7CiAgICAgfQogCi0gICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXJ2ZXJUcnVz
dEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKSkgewotICAgICAgICBXS1JldGFpblB0cjxX
S1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCgpKSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tD
YWxsc0NvdW50IikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxz
Q291bnQoKSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5IikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseShXS0Jvb2xl
YW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseShib29sZWFuVmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0x
ODQ4LDE2ICsxMzMwLDEzIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246
OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBZENsaWNr
QXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRy
aWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRp
b25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVy
c2lvblVSTEZvclRlc3RpbmciKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLVVJMR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1VSTFJlZiB1cmwgPSBzdGF0
aWNfY2FzdDxXS1VSTFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmco
dXJsKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRy
aWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKHN0YXRpY19jYXN0PFdLVVJMUmVmPihtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTE5MDIsMTcg
KzEzODEsMTAgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6cnVuVUlTaWRlU2NyaXB0KFdLU3RyaW5n
UmVmIHNjcmlwdCwgdW5zaWduZWQgc2NyaXB0Q2FsbGJhY2sKIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6dWlTY3JpcHREaWRDb21wbGV0ZShjb25zdCBTdHJpbmcmIHJlc3VsdCwgdW5zaWduZWQgc2Ny
aXB0Q2FsbGJhY2tJRCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsVUlTaWRlU2Ny
aXB0Q2FsbGJhY2siKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzdWx0IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2FsbGJhY2tJRCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gY2FsbGJhY2tJ
RFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzY3JpcHRDYWxsYmFja0lEKSk7Ci0KLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCByZXN1bHRLZXkuZ2V0KCks
IHRvV0socmVzdWx0KS5nZXQoKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9k
eS5nZXQoKSwgY2FsbGJhY2tJREtleS5nZXQoKSwgY2FsbGJhY2tJRFZhbHVlLmdldCgpKTsKLQot
ICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUobWVzc2FnZUJvZHksICJSZXN1bHQiLCBy
ZXN1bHQpOworICAgIHNldFZhbHVlKG1lc3NhZ2VCb2R5LCAiQ2FsbGJhY2tJRCIsIHN0YXRpY19j
YXN0PHVpbnQ2NF90PihzY3JpcHRDYWxsYmFja0lEKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJD
YWxsVUlTaWRlU2NyaXB0Q2FsbGJhY2siLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246Om91dHB1dFRleHQoY29uc3QgV1RGOjpTdHJpbmcmIHRleHQpCkBAIC0x
OTIyLDE3NCArMTM5NCwxNDMgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6b3V0cHV0VGV4dChjb25z
dCBXVEY6OlN0cmluZyYgdGV4dCkKIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkQmVnaW5Td2lw
ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZEJlZ2luU3dpcGVDYWxsYmFj
ayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZEJlZ2luU3dpcGVDYWxsYmFjayIpOwog
fQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjp3aWxsRW5kU3dpcGUoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNhbGxXaWxsRW5kU3dpcGVDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiQ2FsbFdpbGxFbmRTd2lwZUNhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZEVuZFN3aXBlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkRW5k
U3dpcGVDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZEVuZFN3aXBlQ2Fs
bGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3ZlU3dpcGVTbmFwc2hv
dCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlbW92ZVN3aXBlU25hcHNo
b3RDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlbW92ZVN3aXBlU25h
cHNob3RDYWxsYmFjayIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpub3RpZnlEb3dubG9h
ZERvbmUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk5vdGlmeURvd25sb2FkRG9uZSIp
KTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiTm90aWZ5RG93bmxvYWREb25lIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc0luTWVtb3J5QW5kUGVyc2lzdGVudFN0
b3JlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkQ2xlYXJTdGF0aXN0aWNz
SW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxE
aWRDbGVhclN0YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSIpOwogfQogCiB2b2lk
IFRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vic2l0ZURhdGFSZW1v
dmFsKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkQ2xlYXJTdGF0aXN0aWNz
VGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERp
ZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsKIH0KIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlciIpKTsK
LSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyIik7
CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNv
b2tpZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRTaG91bGRCbG9j
a1RoaXJkUGFydHlDb29raWVzIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1
bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlk
U2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0
aW9uOjpkaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSgpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNh
bGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiQ2FsbERpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIik7CiB9CiAKIHZvaWQgVGVz
dEludm9jYXRpb246OmRpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4oKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIikp
OwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0eUhvc3RDTkFN
RURvbWFpbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRUaGlyZFBhcnR5Q05B
TUVEb21haW4oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRUaGlyZFBh
cnR5Q05BTUVEb21haW4iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRU
aGlyZFBhcnR5Q05BTUVEb21haW4iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVz
ZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkNhbGxEaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0ZSIpKTsKLSAgICBXS1Bh
Z2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiQ2FsbERpZFJlc2V0U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlIik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEJsb2NrQ29va2llc0Zvckhvc3QoKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0Iikp
OwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdCIpOwog
fQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlKCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIp
KTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKTsK
IH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1
Z01vZGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRQcmV2YWxlbnRS
ZXNvdXJjZUZvckRlYnVnTW9kZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFBy
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246
OmRpZFNldExhc3RTZWVuKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0
TGFzdFNlZW4iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRMYXN0U2VlbiIpOwog
fQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRNZXJnZVN0YXRpc3RpYygpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZE1lcmdlU3RhdGlzdGljIikpOwotICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJDYWxsRGlkTWVyZ2VTdGF0aXN0aWMiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZGlkU2V0RXhwaXJlZFN0YXRpc3RpYygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Q2FsbERpZFNldEV4cGlyZWRTdGF0aXN0aWMiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxE
aWRTZXRFeHBpcmVkU3RhdGlzdGljIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNl
dFByZXZhbGVudFJlc291cmNlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlk
U2V0UHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRQ
cmV2YWxlbnRSZXNvdXJjZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRWZXJ5
UHJldmFsZW50UmVzb3VyY2UoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRT
ZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVj
dGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRT
ZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlk
U2V0SGFzSGFkVXNlckludGVyYWN0aW9uKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
YWxsRGlkU2V0SGFzSGFkVXNlckludGVyYWN0aW9uIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJD
YWxsRGlkU2V0SGFzSGFkVXNlckludGVyYWN0aW9uIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhWZWN0b3I8U3RyaW5nPiYmIGRv
bWFpbnMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlY2VpdmVBbGxTdG9y
YWdlQWNjZXNzRW50cmllcyIpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJh
eVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAg
IGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAg
IGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKLSAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0o
bWVzc2FnZUJvZHkuZ2V0KCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ZG9tYWluLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0gICAgCi0gICAgV0tQYWdlUG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmll
dygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
ICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB0b1dLKGRvbWFpbikuZ2V0
KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNz
RW50cmllcyIsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWlucyhWZWN0b3I8U3RyaW5nPiYmIGRvbWFp
bnMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlY2VpdmVMb2FkZWRTdWJy
ZXNvdXJjZURvbWFpbnMiKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBh
dXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICBm
b3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpCi0gICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1l
c3NhZ2VCb2R5LmdldCgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGRv
bWFpbi51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCi0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgICAgIFdL
QXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB0b1dLKGRvbWFpbikuZ2V0KCkpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFp
bnMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJl
bW92ZUFsbFNlc3Npb25DcmVkZW50aWFscygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Q2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrIikpOwotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJDYWxsRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2siKTsK
IH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QXBwQm91bmREb21haW5zKCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0QXBwQm91bmREb21haW5zIikpOwotICAg
IFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0QXBwQm91bmREb21haW5zIik7CiB9CiAK
IHZvaWQgVGVzdEludm9jYXRpb246OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkKQEAgLTIx
MDQsOCArMTU0NSw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXBBZENsaWNrQXR0cmlidXRp
b24oKQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpwZXJmb3JtQ3VzdG9tTWVudUFjdGlvbigpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24iKSk7Ci0g
ICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIlBlcmZvcm1DdXN0b21NZW51QWN0aW9uIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVlZGVk
KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRU
ZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTE1ZmMwYTBlOWFmYWUz
NDFjY2NkMDYwMzgzZWQzMDFhNzI0MWI2Yi4uNjE3MThhYzY1NTg4MTc3OGU4M2M5N2ZiZTE3ODI3
OGM4NzBlNmI4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0
UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM1NSw2
ICszNTUsOCBAQAogCQk4NDFDQzAwRDE4MTE4NUJGMDA0MkU5QjYgLyogT3B0aW9ucy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQxQ0MwMEUxODExODVCRjAwNDJFOUI2IC8qIE9wdGlvbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogV2ViS2l0VGVz
dFJ1bm5lciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
ImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0g
V2ViS2l0VGVzdFJ1bm5lcjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJ
OTMzOEQxQkEyNTBBNzlFQjAwRTgyN0Y2IC8qIEpTQmFzaWNzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpT
QmFzaWNzLmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMzhEMUJFMjUwQkQ5REQwMEU4MjdGNiAv
KiBEaWN0aW9uYXJ5RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3Rpb25hcnlGdW5jdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzYyMTBENzM2MDAwQTNE
QUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5Mzc2NDE3NzIxMEQ3MzYxMDBBM0RBQUUgLyogV2ViS2l0VGVzdFJ1
bm5lcldpbmRvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRUZXN0
UnVubmVyV2luZG93Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzc4ODFGMjUw
QzY5RTQwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFJlZnRlc3RGdW5jdGlvbnMuY3BwOyBwYXRoID0gLi4vVGVzdFJ1
bm5lclNoYXJlZC9SZWZ0ZXN0RnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTg5Miw2ICs4OTQsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKIAkJCQkzNzhENDQyMjEzMzQ2RDAwMDA2QTc3N0IgLyogY29uZmlnLmggKi8sCisJCQkJOTMz
OEQxQkUyNTBCRDlERDAwRTgyN0Y2IC8qIERpY3Rpb25hcnlGdW5jdGlvbnMuaCAqLywKIAkJCQlC
Qzk5QTQ4NDEyMDg5MDFBMDA3RTlGMDggLyogU3RyaW5nRnVuY3Rpb25zLmggKi8sCiAJCQkJOUIz
NkEyNzAyMDk0NTNBMDAwM0UwNjUxIC8qIFdoYXRUb0R1bXAuaCAqLywKIAkJCSk7CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCmluZGV4
IDQ1ODY3N2Y1MDliMTE3NDM5M2FlNGMzOGNhMDk0NTdjOGU4MGY4NGMuLmNkNWZjNjYyMTVhNGIw
Mzc5NjgyYzcyYjJlYzFkMWYwYjk4MDczYjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCkBAIC0xMjYsOCArMTI2LDggQEAgdm9p
ZCBXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6Y2xvc2VXZWJOb3RpZmljYXRpb24oV0tOb3RpZmlj
YXRpb25SZWYgbm90aWZpY2F0aW8KIAogICAgIHJlbW92ZUdsb2JhbElERnJvbUlETWFwKG1fbG9j
YWxUb0dsb2JhbE5vdGlmaWNhdGlvbklETWFwLCBpZCk7CiAKLSAgICBXS1JldGFpblB0cjxXS1VJ
bnQ2NFJlZj4gd2tJRCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaWQpKTsKLSAgICBXS1JldGFp
blB0cjxXS011dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3Jl
YXRlKCkpOworICAgIGF1dG8gd2tJRCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaWQpKTsKKyAg
ICBhdXRvIGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICBXS0Fy
cmF5QXBwZW5kSXRlbShhcnJheS5nZXQoKSwgd2tJRC5nZXQoKSk7CiAgICAgV0tOb3RpZmljYXRp
b25NYW5hZ2VyUHJvdmlkZXJEaWRDbG9zZU5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9uTWFuYWdl
ciwgYXJyYXkuZ2V0KCkpOwogfQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgV2ViTm90aWZpY2F0
aW9uUHJvdmlkZXI6OnJlbW92ZU5vdGlmaWNhdGlvbk1hbmFnZXIoV0tOb3RpZmljYXRpb25NYW5h
Z2VyUmVmCiAgICAgYXV0byB0b1JlbW92ZSA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBXS1JldGFp
blB0cjxXS05vdGlmaWNhdGlvbk1hbmFnZXJSZWY+IGd1YXJkKG1hbmFnZXIpOwogICAgIG1fb3du
ZWROb3RpZmljYXRpb25zLnJlbW92ZShpdGVyYXRvcik7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAg
ICBhdXRvIGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICBmb3Ig
KHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEIDogdG9SZW1vdmUpIHsKICAgICAgICAgYm9vbCBzdWNj
ZXNzID0gbV9vd25pbmdNYW5hZ2VyLnJlbW92ZShub3RpZmljYXRpb25JRCk7CiAgICAgICAgIEFT
U0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CkBAIC0xNzMsNyArMTczLDcgQEAgdm9pZCBX
ZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6cmVzZXQoKQogICAgIGZvciAoYXV0byYgbm90aWZpY2F0
aW9uUGFpciA6IG1fb3duZWROb3RpZmljYXRpb25zKSB7CiAgICAgICAgIGlmIChub3RpZmljYXRp
b25QYWlyLnZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBX
S1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFy
cmF5Q3JlYXRlKCkpOworICAgICAgICBhdXRvIGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJh
eUNyZWF0ZSgpKTsKICAgICAgICAgZm9yICh1aW50NjRfdCBub3RpZmljYXRpb25JRCA6IG5vdGlm
aWNhdGlvblBhaXIudmFsdWUpCiAgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShhcnJheS5n
ZXQoKSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShub3RpZmljYXRpb25JRCkpLmdldCgpKTsKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAKaW5kZXggMjBkNWEx
YWFkYjI5ZTMzMmJlMjliMmIxZjRjMjM2MDkxOWJhMGZmMS4uYzlkNDdmZDYzYjg0ZTQ2ZTQ2MmE1
MGZmNGJlMDdiZjM0NjhhY2E2MCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9X
b3JrUXVldWVNYW5hZ2VyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1
ZU1hbmFnZXIuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV29ya1F1ZXVlTWFuYWdl
ci5oIgogCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisjaW5jbHVkZSAiU3RyaW5nRnVu
Y3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxXZWJLaXQv
V0tQYWdlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLUGFnZVByaXZhdGUuaD4KQEAgLTc1LDcgKzc2
LDcgQEAgdGVtcGxhdGUgPFdvcmtRdWV1ZUl0ZW06OlR5cGUgdHlwZT4KIGNsYXNzIFNjcmlwdEl0
ZW0gOiBwdWJsaWMgV29ya1F1ZXVlSXRlbSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU2NyaXB0
SXRlbShjb25zdCBTdHJpbmcmIHNjcmlwdCkKLSAgICAgICAgOiBtX3NjcmlwdChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNjcmlwdC51dGY4KCkuZGF0YSgpKSkpCisgICAg
ICAgIDogbV9zY3JpcHQodG9XSyhzY3JpcHQpKQogICAgIHsKICAgICB9CiAKQEAgLTE2MSw3ICsx
NjIsNyBAQCB2b2lkIFdvcmtRdWV1ZU1hbmFnZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3Qg
U3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmCiAgICAgY2xhc3MgTG9hZEhUTUxTdHJpbmdJ
dGVtIDogcHVibGljIFdvcmtRdWV1ZUl0ZW0gewogICAgIHB1YmxpYzoKICAgICAgICAgTG9hZEhU
TUxTdHJpbmdJdGVtKGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBiYXNlVVJM
LCBjb25zdCBTdHJpbmcmIHVucmVhY2hhYmxlVVJMKQotICAgICAgICAgICAgOiBtX2NvbnRlbnQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250ZW50LnV0ZjgoKS5kYXRh
KCkpKSkKKyAgICAgICAgICAgIDogbV9jb250ZW50KHRvV0soY29udGVudCkpCiAgICAgICAgICAg
ICAsIG1fYmFzZVVSTChhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJhc2VVUkwu
dXRmOCgpLmRhdGEoKSkpKQogICAgICAgICAgICAgLCBtX3VucmVhY2hhYmxlVVJMKGFkb3B0V0so
V0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodW5yZWFjaGFibGVVUkwudXRmOCgpLmRhdGEoKSkp
KQogICAgICAgICB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJ
bnZvY2F0aW9uQ0cuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlv
bkNHLmNwcAppbmRleCA2NzMzOGY0YWE4MjczY2ZiNjg3MjI5YmZiYWQzZmE0ZGRiMzdiNGRmLi4w
MWM1MzFhOWI2YWNlOGU4MTY5NDhmNjc2Y2U2MzFmNTI3OTRiNmM0IDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKQEAgLTUyLDcgKzUyLDcgQEAg
c3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVDR0NvbnRleHRGcm9tQ0dJbWFnZShDR0ltYWdlUmVm
IGltYWdlKQogICAgIHNpemVfdCByb3dCeXRlcyA9ICg0ICogcGl4ZWxzV2lkZSArIDYzKSAmIH42
MzsKIAogICAgIC8vIENyZWF0aW5nIHRoaXMgYml0bWFwIGluIHRoZSBkZXZpY2UgY29sb3Igc3Bh
Y2Ugc2hvdWxkIHByZXZlbnQgYW55IGNvbG9yIGNvbnZlcnNpb24gd2hlbiB0aGUgaW1hZ2Ugb2Yg
dGhlIHdlYiB2aWV3IGlzIGRyYXduIGludG8gaXQuCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFj
ZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkp
OworICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNl
UkdCKCkpOwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KDAsIHBpeGVsc1dpZGUsIHBpeGVsc0hpZ2gsIDgsIHJvd0J5dGVzLCBjb2xvclNwYWNlLmdldCgp
LCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJI
b3N0KTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjMs
NyArNjMsNyBAQCBzdGF0aWMgQ0dDb250ZXh0UmVmIGNyZWF0ZUNHQ29udGV4dEZyb21DR0ltYWdl
KENHSW1hZ2VSZWYgaW1hZ2UpCiAKIHN0YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0
RnJvbUltYWdlKFdLSW1hZ2VSZWYgd2tJbWFnZSkKIHsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2UgPSBhZG9wdENGKFdLSW1hZ2VDcmVhdGVDR0ltYWdlKHdrSW1hZ2UpKTsKKyAgICBh
dXRvIGltYWdlID0gYWRvcHRDRihXS0ltYWdlQ3JlYXRlQ0dJbWFnZSh3a0ltYWdlKSk7CiAgICAg
cmV0dXJuIGNyZWF0ZUNHQ29udGV4dEZyb21DR0ltYWdlKGltYWdlLmdldCgpKTsKIH0KIApAQCAt
MTA5LDkgKzEwOSw5IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dChDR0Nv
bnRleHRSZWYgYml0bWFwQ29udGV4dCwgY2hhciBoYXNoU3RyaW5nCiAKIHN0YXRpYyB2b2lkIGR1
bXBCaXRtYXAoQ0dDb250ZXh0UmVmIGJpdG1hcENvbnRleHQsIGNvbnN0IGNoYXIqIGNoZWNrc3Vt
KQogewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dCkpOwotICAgIFJldGFpblB0cjxDRk11dGFi
bGVEYXRhUmVmPiBpbWFnZURhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkp
OwotICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGltYWdlRGVzdCA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoaW1hZ2VEYXRhLmdldCgpLCBrVVRU
eXBlUE5HLCAxLCAwKSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0
Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dCkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gYWRvcHRD
RihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKyAgICBhdXRvIGltYWdlRGVzdCA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoaW1hZ2VEYXRhLmdldCgpLCBrVVRU
eXBlUE5HLCAxLCAwKSk7CiAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoaW1hZ2VEZXN0
LmdldCgpLCBpbWFnZS5nZXQoKSwgMCk7CiAgICAgQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUo
aW1hZ2VEZXN0LmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9j
b2NvYS9DcmFzaFJlcG9ydGVySW5mby5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
Q3Jhc2hSZXBvcnRlckluZm8ubW0KaW5kZXggNGM3OWFiNWI4NWQ2NDE4OWE3ZTBhMjk2ZWVhOTBj
MWQ4MTE4ZGMzZC4uNDEwZDlmZGNiMzFlMmM2ZTZjYTc2NDk1NjE0NjA2MzhjMDkxMDVlYiAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9DcmFzaFJlcG9ydGVySW5mby5t
bQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0NyYXNoUmVwb3J0ZXJJbmZvLm1t
CkBAIC0zNSwxMiArMzUsMTIgQEAgbmFtZXNwYWNlIFdUUiB7CiAKIHN0YXRpYyBTdHJpbmcgdGVz
dFBhdGhGcm9tVVJMKFdLVVJMUmVmIHVybCkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNm
VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwpKTsK
KyAgICBhdXRvIGNmVVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCB1cmwpKTsKICAgICBpZiAoIWNmVVJMKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
LSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjaGVtZUNGU3RyaW5nID0gYWRvcHRDRihDRlVS
TENvcHlTY2hlbWUoY2ZVUkwuZ2V0KCkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBh
dGhDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5UGF0aChjZlVSTC5nZXQoKSkpOworICAgIGF1
dG8gc2NoZW1lQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVNjaGVtZShjZlVSTC5nZXQoKSkp
OworICAgIGF1dG8gcGF0aENGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlQYXRoKGNmVVJMLmdl
dCgpKSk7CiAKICAgICBTdHJpbmcgc2NoZW1lU3RyaW5nKHNjaGVtZUNGU3RyaW5nLmdldCgpKTsK
ICAgICBTdHJpbmcgcGF0aFN0cmluZyhwYXRoQ0ZTdHJpbmcuZ2V0KCkpOwpAQCAtNTcsNyArNTcs
NyBAQCBzdGF0aWMgU3RyaW5nIHRlc3RQYXRoRnJvbVVSTChXS1VSTFJlZiB1cmwpCiAgICAgaWYg
KCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWVTdHJpbmcsICJodHRwIikgJiYg
IWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0cmluZywgImh0dHBzIikpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9z
dENGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlIb3N0TmFtZShjZlVSTC5nZXQoKSkpOworICAg
IGF1dG8gaG9zdENGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlIb3N0TmFtZShjZlVSTC5nZXQo
KSkpOwogICAgIFN0cmluZyBob3N0U3RyaW5nKGhvc3RDRlN0cmluZy5nZXQoKSk7CiAgICAgaWYg
KGhvc3RTdHJpbmcgPT0gIjEyNy4wLjAuMSIpCiAgICAgICAgIHJldHVybiBwYXRoU3RyaW5nOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNv
Y29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29h
Lm1tCmluZGV4IDM2NTMzN2FkZjk5ZjBiOWNkZDZhZjA5N2ZjMDJiZTg3YTY3MTY2NTcuLjcxMzAz
MjZhM2U2MWNlMmJkMGE3NmRmNzI4OThkOWU0YjAwNjNiMDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KQEAgLTE0Miw3ICsx
NDIsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUo
V0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3QgVAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpw
bGF0Zm9ybUNyZWF0ZVdlYlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3QgVGVzdE9w
dGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+
IGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlv
biBjb3B5XSk7CisgICAgYXV0byBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbZ2xvYmFs
V2ViVmlld0NvbmZpZ3VyYXRpb24gY29weV0pOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICBpZiAob3B0aW9ucy51c2VEYXRhRGV0ZWN0aW9uKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCmluZGV4IDVjODYyZTliMGVj
NzdkMDVlMDc3MjlkY2U2NDc2ZjU4OTIxMjNiMzguLjkxNWY0NzZjNjE1YWU2MTA5MGQ5MGNhNzk3
NmJmOGYyYzk5YjU2NmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VGVzdFJ1bm5lcldLV2ViVmlldy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29h
L1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KQEAgLTkwLDcgKzkwLDcgQEAgSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJkZXByZWNhdGVkLWltcGxlbWVudGF0aW9ucyIpCiAtICh2b2lkKWRyYWdJbWFnZToo
TlNJbWFnZSAqKWFuSW1hZ2UgYXQ6KE5TUG9pbnQpdmlld0xvY2F0aW9uIG9mZnNldDooTlNTaXpl
KWluaXRpYWxPZmZzZXQgZXZlbnQ6KE5TRXZlbnQgKilldmVudCBwYXN0ZWJvYXJkOihOU1Bhc3Rl
Ym9hcmQgKilwYm9hcmQgc291cmNlOihpZClzb3VyY2VPYmogc2xpZGVCYWNrOihCT09MKXNsaWRl
RmxhZwogSUdOT1JFX1dBUk5JTkdTX0VORAogewotICAgIFJldGFpblB0cjxXZWJLaXRUZXN0UnVu
bmVyRHJhZ2dpbmdJbmZvPiBkcmFnZ2luZ0luZm8gPSBhZG9wdE5TKFtbV2ViS2l0VGVzdFJ1bm5l
ckRyYWdnaW5nSW5mbyBhbGxvY10gaW5pdFdpdGhJbWFnZTphbkltYWdlIG9mZnNldDppbml0aWFs
T2Zmc2V0IHBhc3RlYm9hcmQ6cGJvYXJkIHNvdXJjZTpzb3VyY2VPYmpdKTsKKyAgICBhdXRvIGRy
YWdnaW5nSW5mbyA9IGFkb3B0TlMoW1tXZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZvIGFsbG9j
XSBpbml0V2l0aEltYWdlOmFuSW1hZ2Ugb2Zmc2V0OmluaXRpYWxPZmZzZXQgcGFzdGVib2FyZDpw
Ym9hcmQgc291cmNlOnNvdXJjZU9ial0pOwogICAgIFtzZWxmIGRyYWdnaW5nVXBkYXRlZDpkcmFn
Z2luZ0luZm8uZ2V0KCldOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmggYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmgKaW5kZXggYWJjMGE1MGM5NzBj
MWJiMzNmMWZiMTA5MzkzNTJhZjhjYTdlMDQwMy4uY2M5ODEzOTQyNGYyODgwNjQ0Mzk4OTgzNDVj
M2U3ZDRlYTU1MzM3OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9V
SVNjcmlwdENvbnRyb2xsZXJDb2NvYS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29j
b2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaApAQCAtMzIsMTIgKzMyLDE3IEBAIE9CSkNfQ0xB
U1MgVGVzdFJ1bm5lcldLV2ViVmlldzsKIG5hbWVzcGFjZSBXVFIgewogCiBjbGFzcyBVSVNjcmlw
dENvbnRyb2xsZXJDb2NvYSA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb21tb24gewotcHVi
bGljOgorcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29udHJvbGxlckNvY29hKFVJ
U2NyaXB0Q29udGV4dCYpOworICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25z
dDsKKworICAgIHZvaWQgZG9Bc3luY1Rhc2soSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CiAgICAgdm9pZCBzZXRWaWV3U2NhbGUoZG91YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIHNl
dE1pbmltdW1FZmZlY3RpdmVXaWR0aChkb3VibGUpIG92ZXJyaWRlOwogICAgIHZvaWQgYmVjb21l
Rmlyc3RSZXNwb25kZXIoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc2lnbkZpcnN0UmVzcG9uZGVy
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkb0FzeW5jVGFzayhKU1ZhbHVlUmVmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHJlbW92ZVZpZXdGcm9tV2luZG93KEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAg
IHZvaWQgYWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIHZvaWQgb3Zl
cnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikgb3ZlcnJpZGU7CkBAIC01
OSwxMSArNjQsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGluc2VydEF0dGFjaG1lbnRGb3JGaWxl
UGF0aChKU1N0cmluZ1JlZiBmaWxlUGF0aCwgSlNTdHJpbmdSZWYgY29udGVudFR5cGUsIEpTVmFs
dWVSZWYgY2FsbGJhY2spIG92ZXJyaWRlOwogCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgVUlT
Y3JpcHRDb250cm9sbGVyQ29jb2EoVUlTY3JpcHRDb250ZXh0Jik7Ci0gICAgVGVzdFJ1bm5lcldL
V2ViVmlldyAqd2ViVmlldygpIGNvbnN0OwotCi1wcml2YXRlOgogICAgIHZvaWQgY29tcGxldGVU
YXNrQXN5bmNocm9ub3VzbHlBZnRlckFjdGl2aXR5U3RhdGVVcGRhdGUodW5zaWduZWQgY2FsbGJh
Y2tJRCk7CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJ
U2NyaXB0Q29udHJvbGxlckNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9V
SVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQppbmRleCA5OGJiNzRiNDEzYjk1MDNlNjk4ODA3ZWRi
ODYyOThlMzcwZGNkMGYyLi41ODQ3OTc2ZjIxODU3ZjUzZjQ4NWVjYjFmYjFlYjkxMTcyMWE1NmRh
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJv
bGxlckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRD
b250cm9sbGVyQ29jb2EubW0KQEAgLTEzNSwyMiArMTM1LDE4IEBAIHZvaWQgVUlTY3JpcHRDb250
cm9sbGVyQ29jb2E6OmFkZFZpZXdUb1dpbmRvdyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogCiB2b2lk
IFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYg
cHJlZmVyZW5jZVJlZiwgSlNTdHJpbmdSZWYgdmFsdWVSZWYpCiB7Ci0gICAgV0tQcmVmZXJlbmNl
cyAqcHJlZmVyZW5jZXMgPSB3ZWJWaWV3KCkuY29uZmlndXJhdGlvbi5wcmVmZXJlbmNlczsKLQot
ICAgIFN0cmluZyBwcmVmZXJlbmNlID0gdG9XVEZTdHJpbmcodG9XSyhwcmVmZXJlbmNlUmVmKSk7
Ci0gICAgU3RyaW5nIHZhbHVlID0gdG9XVEZTdHJpbmcodG9XSyh2YWx1ZVJlZikpOwotICAgIGlm
IChwcmVmZXJlbmNlID09ICJXZWJLaXRNaW5pbXVtRm9udFNpemUiKQotICAgICAgICBwcmVmZXJl
bmNlcy5taW5pbXVtRm9udFNpemUgPSB2YWx1ZS50b0RvdWJsZSgpOworICAgIGlmICh0b1dURlN0
cmluZyhwcmVmZXJlbmNlUmVmKSA9PSAiV2ViS2l0TWluaW11bUZvbnRTaXplIikKKyAgICAgICAg
d2ViVmlldygpLmNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMubWluaW11bUZvbnRTaXplID0gdG9X
VEZTdHJpbmcodmFsdWVSZWYpLnRvRG91YmxlKCk7CiB9CiAKIHZvaWQgVUlTY3JpcHRDb250cm9s
bGVyQ29jb2E6OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nLCB1bnNpZ25lZCBsb25nIG9w
dGlvbnMsIHVuc2lnbmVkIGxvbmcgbWF4Q291bnQpCiB7Ci0gICAgW3dlYlZpZXcoKSBfZmluZFN0
cmluZzp0b1dURlN0cmluZyh0b1dLKHN0cmluZykpIG9wdGlvbnM6b3B0aW9ucyBtYXhDb3VudDpt
YXhDb3VudF07CisgICAgW3dlYlZpZXcoKSBfZmluZFN0cmluZzp0b1dURlN0cmluZyhzdHJpbmcp
IG9wdGlvbnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3VudF07CiB9CiAKIEpTT2JqZWN0UmVmIFVJ
U2NyaXB0Q29udHJvbGxlckNvY29hOjpjb250ZW50c09mVXNlckludGVyZmFjZUl0ZW0oSlNTdHJp
bmdSZWYgaW50ZXJmYWNlSXRlbSkgY29uc3QKIHsKLSAgICBOU0RpY3Rpb25hcnkgKmNvbnRlbnRE
aWN0aW9uYXJ5ID0gW3dlYlZpZXcoKSBfY29udGVudHNPZlVzZXJJbnRlcmZhY2VJdGVtOnRvV1RG
U3RyaW5nKHRvV0soaW50ZXJmYWNlSXRlbSkpXTsKKyAgICBOU0RpY3Rpb25hcnkgKmNvbnRlbnRE
aWN0aW9uYXJ5ID0gW3dlYlZpZXcoKSBfY29udGVudHNPZlVzZXJJbnRlcmZhY2VJdGVtOnRvV1RG
U3RyaW5nKGludGVyZmFjZUl0ZW0pXTsKICAgICByZXR1cm4gSlNWYWx1ZVRvT2JqZWN0KG1fY29u
dGV4dC0+anNDb250ZXh0KCksIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpjb250ZW50RGljdGlv
bmFyeSBpbkNvbnRleHQ6W0pTQ29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjpt
X2NvbnRleHQtPmpzQ29udGV4dCgpXV0uSlNWYWx1ZVJlZiwgbnVsbHB0cik7CiB9CiAKQEAgLTIx
OSwxMiArMjE1LDEwIEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2E6OnBhc3RlKCkKIHZv
aWQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2E6Omluc2VydEF0dGFjaG1lbnRGb3JGaWxlUGF0aChK
U1N0cmluZ1JlZiBmaWxlUGF0aCwgSlNTdHJpbmdSZWYgY29udGVudFR5cGUsIEpTVmFsdWVSZWYg
Y2FsbGJhY2spCiB7CiAgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG1fY29udGV4dC0+cHJlcGFy
ZUZvckFzeW5jVGFzayhjYWxsYmFjaywgQ2FsbGJhY2tUeXBlTm9uUGVyc2lzdGVudCk7Ci0KLSAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHRlc3RVUkwgPSBhZG9wdENGKFdLVVJMQ29weUNGVVJMKGtD
RkFsbG9jYXRvckRlZmF1bHQsIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jdXJyZW50VGVz
dFVSTCgpKSk7Ci0gICAgUmV0YWluUHRyPE5TVVJMPiBhdHRhY2htZW50VVJMID0gW05TVVJMIGZp
bGVVUkxXaXRoUGF0aDp0b1dURlN0cmluZyh0b1dLKGZpbGVQYXRoKSkgcmVsYXRpdmVUb1VSTDoo
X19icmlkZ2UgTlNVUkwgKil0ZXN0VVJMLmdldCgpXTsKLQotICAgIGF1dG8gZmlsZVdyYXBwZXIg
PSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFdpdGhVUkw6YXR0YWNobWVudFVS
TC5nZXQoKSBvcHRpb25zOjAgZXJyb3I6bmlsXSk7Ci0gICAgW3dlYlZpZXcoKSBfaW5zZXJ0QXR0
YWNobWVudFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlci5nZXQoKSBjb250ZW50VHlwZTp0b1dU
RlN0cmluZyh0b1dLKGNvbnRlbnRUeXBlKSkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2Vzcykgewor
ICAgIGF1dG8gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmN1cnJlbnRUZXN0VVJMKCkpKTsKKyAg
ICBhdXRvIGF0dGFjaG1lbnRVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnRvV1RGU3RyaW5n
KGZpbGVQYXRoKSByZWxhdGl2ZVRvVVJMOihfX2JyaWRnZSBOU1VSTCAqKXRlc3RVUkwuZ2V0KCld
OworICAgIGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10g
aW5pdFdpdGhVUkw6YXR0YWNobWVudFVSTCBvcHRpb25zOjAgZXJyb3I6bmlsXSk7CisgICAgW3dl
YlZpZXcoKSBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlci5nZXQo
KSBjb250ZW50VHlwZTp0b1dURlN0cmluZyhjb250ZW50VHlwZSkgY29tcGxldGlvbjpeKEJPT0wg
c3VjY2VzcykgewogICAgICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgbV9jb250ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShjYWxsYmFja0lEKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IubW0KaW5kZXggZTI5
ODM4YmE4MjhmYjRiZDkwODU3YWI2YmVmMmZkNDY1OWZiNDIxOC4uZDRiMTE0ODExZWU2YmRkMjUx
NWRkZTM1NWVlMTNkZTYyMTEwZDU1MCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvSElERXZlbnRHZW5lcmF0b3IubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvSElERXZlbnRHZW5lcmF0b3IubW0KQEAgLTE4OSw3ICsxODksNyBAQCAtIChpbnN0YW5jZXR5
cGUpaW5pdAogCiAtICh2b2lkKV9zZW5kSU9ISURLZXlib2FyZEV2ZW50Oih1aW50NjRfdCl0aW1l
c3RhbXAgdXNhZ2U6KHVpbnQzMl90KXVzYWdlIGlzS2V5RG93bjooYm9vbClpc0tleURvd24KIHsK
LSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZl
bnRDcmVhdGVLZXlib2FyZEV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsCisgICAgYXV0byBldmVu
dFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0ZUtleWJvYXJkRXZlbnQoa0NGQWxsb2NhdG9y
RGVmYXVsdCwKICAgICAgICAgdGltZXN0YW1wLAogICAgICAgICBrSElEUGFnZV9LZXlib2FyZE9y
S2V5cGFkLAogICAgICAgICB1c2FnZSwKQEAgLTM2MSw3ICszNjEsNyBAQCAtIChJT0hJREV2ZW50
UmVmKV9jcmVhdGVJT0hJREV2ZW50VHlwZTooSGFuZEV2ZW50VHlwZSlldmVudFR5cGUKICAgICAg
ICAgZXZlbnRNYXNrIHw9IGtJT0hJRERpZ2l0aXplckV2ZW50SWRlbnRpdHk7CiAKICAgICB1aW50
NjRfdCBtYWNoVGltZSA9IG1hY2hfYWJzb2x1dGVfdGltZSgpOwotICAgIFJldGFpblB0cjxJT0hJ
REV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0ZURpZ2l0aXplckV2
ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1hY2hUaW1lLAorICAgIGF1dG8gZXZlbnRSZWYgPSBh
ZG9wdENGKElPSElERXZlbnRDcmVhdGVEaWdpdGl6ZXJFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBtYWNoVGltZSwKICAgICAgICAga0lPSElERGlnaXRpemVyVHJhbnNkdWNlclR5cGVIYW5kLAog
ICAgICAgICAwLAogICAgICAgICAwLApAQCAtNDUzLDcgKzQ1Myw3IEBAIC0gKEJPT0wpX3NlbmRI
SURFdmVudDooSU9ISURFdmVudFJlZilldmVudFJlZgogICAgICAgICBfaW9TeXN0ZW1DbGllbnQg
PSBJT0hJREV2ZW50U3lzdGVtQ2xpZW50Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwogCiAg
ICAgaWYgKGV2ZW50UmVmKSB7Ci0gICAgICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBzdHJv
bmdFdmVudCA9IGV2ZW50UmVmOworICAgICAgICBhdXRvIHN0cm9uZ0V2ZW50ID0gZXZlbnRSZWY7
CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CiAg
ICAgICAgICAgICB1aW50MzJfdCBjb250ZXh0SUQgPSBbVUlBcHBsaWNhdGlvbiBzaGFyZWRBcHBs
aWNhdGlvbl0ua2V5V2luZG93Ll9jb250ZXh0SWQ7CiAgICAgICAgICAgICBBU1NFUlQoY29udGV4
dElEKTsKQEAgLTUxMiw3ICs1MTIsNyBAQCAtICh2b2lkKV91cGRhdGVUb3VjaFBvaW50czooQ0dQ
b2ludCopcG9pbnRzIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50CiAgICAgICAgIFtbR2VuZXJhdGVk
VG91Y2hlc0RlYnVnV2luZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvd10gdXBk
YXRlRGVidWdJbmRpY2F0b3JGb3JUb3VjaDppIHdpdGhQb2ludEluV2luZG93Q29vcmRpbmF0ZXM6
cG9pbnRzW2ldIGlzVG91Y2hpbmc6WUVTXTsKICAgICB9CiAgICAgCi0gICAgUmV0YWluUHRyPElP
SElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5
cGU6aGFuZEV2ZW50VHlwZV0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9j
cmVhdGVJT0hJREV2ZW50VHlwZTpoYW5kRXZlbnRUeXBlXSk7CiAgICAgW3NlbGYgX3NlbmRISURF
dmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTUyOSw3ICs1MjksNyBAQCAtICh2b2lkKXRv
dWNoRG93bkF0UG9pbnRzOihDR1BvaW50Kilsb2NhdGlvbnMgdG91Y2hDb3VudDooTlNVSW50ZWdl
cil0b3VjaENvdW50CiAgICAgICAgIFtbR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHNoYXJl
ZEdlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvd10gdXBkYXRlRGVidWdJbmRpY2F0b3JGb3JUb3Vj
aDppbmRleCB3aXRoUG9pbnRJbldpbmRvd0Nvb3JkaW5hdGVzOmxvY2F0aW9uc1tpbmRleF0gaXNU
b3VjaGluZzpZRVNdOwogICAgIH0KIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVu
dFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudFRvdWNo
ZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVu
dFR5cGU6SGFuZEV2ZW50VG91Y2hlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRS
ZWYuZ2V0KCldOwogfQogCkBAIC01NjMsNyArNTYzLDcgQEAgLSAodm9pZClsaWZ0VXBBdFBvaW50
czooQ0dQb2ludCopbG9jYXRpb25zIHRvdWNoQ291bnQ6KE5TVUludGVnZXIpdG91Y2hDb3VudAog
ICAgICAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3Vj
aGVzRGVidWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aW5kZXggd2l0aFBv
aW50SW5XaW5kb3dDb29yZGluYXRlczpDR1BvaW50WmVybyBpc1RvdWNoaW5nOk5PXTsKICAgICB9
CiAgICAgCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihb
c2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6SGFuZEV2ZW50TGlmdGVkXSk7CisgICAgYXV0byBl
dmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudExp
ZnRlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogICAgIAog
ICAgIF9hY3RpdmVQb2ludENvdW50ID0gbmV3UG9pbnRDb3VudDsKQEAgLTY0MSw3ICs2NDEsNyBA
QCAtICh2b2lkKXN0eWx1c0Rvd25BdFBvaW50OihDR1BvaW50KWxvY2F0aW9uIGF6aW11dGhBbmds
ZTooQ0dGbG9hdClhemltdXRoQW5nbGUgYQogICAgIF9hY3RpdmVQb2ludHNbMF0uYXppbXV0aEFu
Z2xlID0gTV9QSSAqIDIgLSBhemltdXRoQW5nbGU7CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRp
dHVkZUFuZ2xlID0gTV9QSV8yIC0gYWx0aXR1ZGVBbmdsZTsKIAotICAgIFJldGFpblB0cjxJT0hJ
REV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBl
OlN0eWx1c0V2ZW50VG91Y2hlZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxm
IF9jcmVhdGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudFRvdWNoZWRdKTsKICAgICBbc2VsZiBf
c2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApAQCAtNjU1LDcgKzY1NSw3IEBAIC0g
KHZvaWQpc3R5bHVzTW92ZVRvUG9pbnQ6KENHUG9pbnQpbG9jYXRpb24gYXppbXV0aEFuZ2xlOihD
R0Zsb2F0KWF6aW11dGhBbmdsZSBhCiAgICAgX2FjdGl2ZVBvaW50c1swXS5hemltdXRoQW5nbGUg
PSBNX1BJICogMiAtIGF6aW11dGhBbmdsZTsKICAgICBfYWN0aXZlUG9pbnRzWzBdLmFsdGl0dWRl
QW5nbGUgPSBNX1BJXzIgLSBhbHRpdHVkZUFuZ2xlOwogCi0gICAgUmV0YWluUHRyPElPSElERXZl
bnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5
bHVzRXZlbnRNb3ZlZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVh
dGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudE1vdmVkXSk7CiAgICAgW3NlbGYgX3NlbmRISURF
dmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTY2OCw3ICs2NjgsNyBAQCAtICh2b2lkKXN0
eWx1c1VwQXRQb2ludDooQ0dQb2ludClsb2NhdGlvbgogICAgIF9hY3RpdmVQb2ludHNbMF0uYXpp
bXV0aEFuZ2xlID0gMDsKICAgICBfYWN0aXZlUG9pbnRzWzBdLmFsdGl0dWRlQW5nbGUgPSAwOwog
Ci0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBf
Y3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRMaWZ0ZWRdKTsKKyAgICBhdXRvIGV2ZW50
UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRMaWZ0
ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApAQCAt
MTAyMSw3ICsxMDIxLDcgQEAgLSAodm9pZClkaXNwYXRjaEV2ZW50V2l0aEluZm86KE5TRGljdGlv
bmFyeSAqKWV2ZW50SW5mbwogewogICAgIEFTU0VSVChbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSk7
CiAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxm
IF9jcmVhdGVJT0hJREV2ZW50V2l0aEluZm86ZXZlbnRJbmZvXSk7CisgICAgYXV0byBldmVudFJl
ZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRXaXRoSW5mbzpldmVudEluZm9dKTsK
ICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmggYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MuaAppbmRleCAy
OGQwNjBjNmRmYzQ3MWE5MDU0OTA2ODM5NWMzZDQwZjZhOWMwOTZiLi44NTQ2NDQ3NjZkOGJjNWE4
MTVkMjY3ZTlhN2JhNGEyMDVkNmU2MTIyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MuaApAQCAtMjUsMTEgKzI1LDExIEBACiAKICNw
cmFnbWEgb25jZQogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwogI2ltcG9ydCAiVUlTY3Jp
cHRDb250cm9sbGVyQ29jb2EuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmxvYXRQb2lu
dDsKIGNsYXNzIEZsb2F0UmVjdDsKQEAgLTM3LDEzICszNywxNCBAQCBjbGFzcyBGbG9hdFJlY3Q7
CiAKIG5hbWVzcGFjZSBXVFIgewogCi1jbGFzcyBVSVNjcmlwdENvbnRyb2xsZXJJT1MgOiBwdWJs
aWMgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EgeworY2xhc3MgVUlTY3JpcHRDb250cm9sbGVySU9T
IGZpbmFsIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBVSVNjcmlwdENvbnRyb2xsZXJJT1MoVUlTY3JpcHRDb250ZXh0JiBjb250ZXh0KQog
ICAgICAgICA6IFVJU2NyaXB0Q29udHJvbGxlckNvY29hKGNvbnRleHQpCiAgICAgewogICAgIH0K
IAorcHJpdmF0ZToKICAgICB2b2lkIHdhaXRGb3JPdXRzdGFuZGluZ0NhbGxiYWNrcygpIG92ZXJy
aWRlOwogICAgIHZvaWQgZG9BZnRlclByZXNlbnRhdGlvblVwZGF0ZShKU1ZhbHVlUmVmKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBkYXRlKEpTVmFs
dWVSZWYpIG92ZXJyaWRlOwpAQCAtMTU2LDcgKzE1Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dERpZEVuZFNjcm9sbGluZ0NhbGxiYWNrKEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIHZvaWQg
Y2xlYXJBbGxDYWxsYmFja3MoKSBvdmVycmlkZTsKIAotcHJpdmF0ZToKICAgICB2b2lkIHdhaXRG
b3JNb2RhbFRyYW5zaXRpb25Ub0ZpbmlzaCgpIGNvbnN0OwogICAgIHZvaWQgd2FpdEZvclNpbmds
ZVRhcFRvUmVzZXQoKSBjb25zdDsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdEZvck1lbnVB
Y3Rpb24oQ0ZTdHJpbmdSZWYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IDEzMGM0OTdjMjQwZDgzOGJiNGFm
ZmZkMjA3MzE0MTc1YTgzZGJiMjYuLjdhZjZlY2Y1MDk4NWYxNWVmNDdjMTkxOGI2NWEyZWJkYTZk
MjZhMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29u
dHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENv
bnRyb2xsZXJJT1MubW0KQEAgLTY4LDI0ICs2OCwxNCBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICp0
b05TRGljdGlvbmFyeShDR1JlY3QgcmVjdCkKICAgICB9OwogfQogCi1zdGF0aWMgdW5zaWduZWQg
YXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGFycmF5KQotewot
ICAgIGF1dG8gbGVuZ3RoU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImxlbmd0aCIpKTsKLSAgICBpZiAoYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkoY29udGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgbnVsbHB0cikpCi0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IGxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBWZWN0
b3I8U3RyaW5nPiBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgYXJyYXlWYWx1ZSkKIHsKICAgICBpZiAoIWFycmF5VmFsdWUpCiAgICAgICAgIHJldHVy
biB7IH07CiAKICAgICAvLyBUaGUgdmFsdWUgbWF5IGVpdGhlciBiZSBhIHN0cmluZyB3aXRoIGEg
c2luZ2xlIG1vZGlmaWVyIG9yIGFuIGFycmF5IG9mIG1vZGlmaWVycy4KLSAgICBpZiAoSlNWYWx1
ZUlzU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpKSB7Ci0gICAgICAgIGF1dG8gc3RyaW5nID0g
dG9XVEZTdHJpbmcodG9XSyhhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFycmF5
VmFsdWUsIG51bGxwdHIpKSkpOwotICAgICAgICByZXR1cm4geyBzdHJpbmcgfTsKLSAgICB9Cisg
ICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIHsgdG9XVEZTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1ZSkgfTsKIAogICAgIGlmICghSlNW
YWx1ZUlzT2JqZWN0KGNvbnRleHQsIGFycmF5VmFsdWUpKQogICAgICAgICByZXR1cm4geyB9OwpA
QCAtOTMsMTYgKzgzLDggQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBhcnNlTW9kaWZpZXJBcnJh
eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhcnJheVYKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBhcnJheSk7CiAgICAgVmVjdG9yPFN0cmluZz4g
bW9kaWZpZXJzOwogICAgIG1vZGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9
IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCAmZXhjZXB0aW9u
KTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUs
ICZleGNlcHRpb24pKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBtb2RpZmllcnMuYXBwZW5kKHRvV1RGU3RyaW5nKHRvV0soc3RyaW5nLmdl
dCgpKSkpOwotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CisgICAgICAgIG1vZGlmaWVycy5hcHBlbmQodG9XVEZTdHJpbmcoY29udGV4dCwgSlNPYmplY3RH
ZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIG51bGxwdHIpKSk7CiAgICAgcmV0
dXJuIG1vZGlmaWVyczsKIH0KIApAQCAtNTE0LDEwICs0OTYsOSBAQCB2b2lkIFVJU2NyaXB0Q29u
dHJvbGxlcklPUzo6dHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZChKU1N0cmluZ1Jl
ZiBjaGFyYQogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBtX2NvbnRleHQtPnByZXBhcmVGb3JB
c3luY1Rhc2soY2FsbGJhY2ssIENhbGxiYWNrVHlwZU5vblBlcnNpc3RlbnQpOwogCiAgICAgLy8g
QXNzdW1lcyB0aGF0IHRoZSBrZXlib2FyZCBpcyBhbHJlYWR5IHNob3duLgotICAgIFtbSElERXZl
bnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVByZXNzOnRvV1RGU3RyaW5n
KHRvV0soY2hhcmFjdGVyKSkgY29tcGxldGlvbkJsb2NrOm1ha2VCbG9ja1B0cihbdGhpcywgc3Ry
b25nVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFja0lEXSB7Ci0gICAgICAgIGlmICghbV9j
b250ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2NvbnRleHQtPmFzeW5jVGFz
a0NvbXBsZXRlKGNhbGxiYWNrSUQpOworICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElE
RXZlbnRHZW5lcmF0b3JdIGtleVByZXNzOnRvV1RGU3RyaW5nKGNoYXJhY3RlcikgY29tcGxldGlv
bkJsb2NrOm1ha2VCbG9ja1B0cihbc3Ryb25nVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFj
a0lEXSB7CisgICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2NvbnRleHQpCisgICAgICAgICAgICBz
dHJvbmdUaGlzLT5tX2NvbnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNrSUQpOwogICAg
IH0pLmdldCgpXTsKIH0KIApAQCAtNTM0LDcgKzUxNSw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9s
bGVySU9TOjpyYXdLZXlEb3duKEpTU3RyaW5nUmVmIGtleSkKIHsKICAgICAvLyBLZXkgY2FuIGJl
IGVpdGhlciBhIHNpbmdsZSBVbmljb2RlIGNvZGUgcG9pbnQgb3IgdGhlIG5hbWUgb2YgYSBzcGVj
aWFsIGtleSAoZS5nLiAiZG93bkFycm93IikuCiAgICAgLy8gSElERXZlbnRHZW5lcmF0b3Iga25v
d3MgaG93IHRvIG1hcCB0aGVzZSBzcGVjaWFsIGtleXMgdG8gdGhlIGFwcHJvcHJpYXRlIGtleWNv
ZGUuCi0gICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0ga2V5
RG93bjp0b1dURlN0cmluZyh0b1dLKGtleSkpXTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNo
YXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlEb3duOnRvV1RGU3RyaW5nKGtleSldOwogICAgIFtb
SElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIHNlbmRNYXJrZXJISURF
dmVudFdpdGhDb21wbGV0aW9uQmxvY2s6XnsgLyogRG8gbm90aGluZyAqLyB9XTsKIH0KIApAQCAt
NTQyLDcgKzUyMyw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjpyYXdLZXlVcChKU1N0
cmluZ1JlZiBrZXkpCiB7CiAgICAgLy8gS2V5IGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgVW5pY29k
ZSBjb2RlIHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lhbCBrZXkgKGUuZy4gImRvd25BcnJv
dyIpLgogICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtub3dzIGhvdyB0byBtYXAgdGhlc2Ugc3Bl
Y2lhbCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXljb2RlLgotICAgIFtbSElERXZlbnRHZW5l
cmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVVwOnRvV1RGU3RyaW5nKHRvV0soa2V5
KSldOworICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtl
eVVwOnRvV1RGU3RyaW5nKGtleSldOwogICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElE
RXZlbnRHZW5lcmF0b3JdIHNlbmRNYXJrZXJISURFdmVudFdpdGhDb21wbGV0aW9uQmxvY2s6Xnsg
LyogRG8gbm90aGluZyAqLyB9XTsKIH0KIApAQCAtNTUwLDcgKzUzMSw3IEBAIHZvaWQgVUlTY3Jp
cHRDb250cm9sbGVySU9TOjprZXlEb3duKEpTU3RyaW5nUmVmIGNoYXJhY3RlciwgSlNWYWx1ZVJl
ZiBtb2RpZmllckFyCiB7CiAgICAgLy8gQ2hhcmFjdGVyIGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUg
VW5pY29kZSBjb2RlIHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lhbCBrZXkgKGUuZy4gImRv
d25BcnJvdyIpLgogICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtub3dzIGhvdyB0byBtYXAgdGhl
c2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXljb2RlLgotICAgIFN0cmluZyBp
bnB1dFN0cmluZyA9IHRvV1RGU3RyaW5nKHRvV0soY2hhcmFjdGVyKSk7CisgICAgYXV0byBpbnB1
dFN0cmluZyA9IHRvV1RGU3RyaW5nKGNoYXJhY3Rlcik7CiAgICAgYXV0byBtb2RpZmllckZsYWdz
ID0gcGFyc2VNb2RpZmllckFycmF5KG1fY29udGV4dC0+anNDb250ZXh0KCksIG1vZGlmaWVyQXJy
YXkpOwogCiAgICAgZm9yIChhdXRvJiBtb2RpZmllckZsYWcgOiBtb2RpZmllckZsYWdzKQpAQCAt
NzI3LDcgKzcwOCw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjphcHBseUF1dG9jb3Jy
ZWN0aW9uKEpTU3RyaW5nUmVmIG5ld1N0cmluZywgSlNTdHJpbmdSCiAgICAgdW5zaWduZWQgY2Fs
bGJhY2tJRCA9IG1fY29udGV4dC0+cHJlcGFyZUZvckFzeW5jVGFzayhjYWxsYmFjaywgQ2FsbGJh
Y2tUeXBlTm9uUGVyc2lzdGVudCk7CiAKICAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3
ID0gdGhpcy0+d2ViVmlldygpOwotICAgIFt3ZWJWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246dG9X
VEZTdHJpbmcodG9XSyhuZXdTdHJpbmcpKSB0b1N0cmluZzp0b1dURlN0cmluZyh0b1dLKG9sZFN0
cmluZykpIHdpdGhDb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9uZ1Ro
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0geworICAgIFt3ZWJWaWV3IGFwcGx5QXV0
b2NvcnJlY3Rpb246dG9XVEZTdHJpbmcobmV3U3RyaW5nKSB0b1N0cmluZzp0b1dURlN0cmluZyhv
bGRTdHJpbmcpIHdpdGhDb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9u
Z1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewogICAgICAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBtYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9u
Z1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewogICAgICAgICAgICAgLy8gYXBw
bHlBdXRvY29ycmVjdGlvbiBjYW4gY2FsbCBpdHMgY29tcGxldGlvbiBoYW5kbGVyIHN5bmNocm9u
b3VzbHksCiAgICAgICAgICAgICAvLyB3aGljaCBtYWtlcyBVSVNjcmlwdENvbnRyb2xsZXIgdW5o
YXBweSAoc2VlIGJ1ZyAxNzI4ODQpLgpAQCAtMTE1Nyw3ICsxMTM4LDcgQEAgYm9vbCBVSVNjcmlw
dENvbnRyb2xsZXJJT1M6OmlzU2hvd2luZ0RhdGFMaXN0U3VnZ2VzdGlvbnMoKSBjb25zdAogCiB2
b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6c2V0S2V5Ym9hcmRJbnB1dE1vZGVJZGVudGlmaWVy
KEpTU3RyaW5nUmVmIGlkZW50aWZpZXIpCiB7Ci0gICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldEtleWJvYXJkSW5wdXRNb2RlSWRlbnRpZmllcih0b1dURlN0cmluZyh0b1dLKGlkZW50
aWZpZXIpKSk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEtleWJvYXJkSW5w
dXRNb2RlSWRlbnRpZmllcih0b1dURlN0cmluZyhpZGVudGlmaWVyKSk7CiB9CiAKIC8vIEZJWE1F
OiBXcml0ZSB0aGlzIGluIHRlcm1zIG9mIEhJREV2ZW50R2VuZXJhdG9yIG9uY2Ugd2Uga25vdyBo
b3cgdG8gcmVzZXQgY2FwcyBsb2NrIHN0YXRlCkBAIC0xMTc4LDcgKzExNTksNyBAQCBib29sIFVJ
U2NyaXB0Q29udHJvbGxlcklPUzo6a2V5Ym9hcmRJc0F1dG9tYXRpY2FsbHlTaGlmdGVkKCkgY29u
c3QKIAogSlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9sbGVySU9TOjphdHRhY2htZW50SW5mbyhK
U1N0cmluZ1JlZiBqc0F0dGFjaG1lbnRJZGVudGlmaWVyKQogewotICAgIGF1dG8gYXR0YWNobWVu
dElkZW50aWZpZXIgPSB0b1dURlN0cmluZyh0b1dLKGpzQXR0YWNobWVudElkZW50aWZpZXIpKTsK
KyAgICBhdXRvIGF0dGFjaG1lbnRJZGVudGlmaWVyID0gdG9XVEZTdHJpbmcoanNBdHRhY2htZW50
SWRlbnRpZmllcik7CiAgICAgX1dLQXR0YWNobWVudCAqYXR0YWNobWVudCA9IFt3ZWJWaWV3KCkg
X2F0dGFjaG1lbnRGb3JJZGVudGlmaWVyOmF0dGFjaG1lbnRJZGVudGlmaWVyXTsKICAgICBfV0tB
dHRhY2htZW50SW5mbyAqYXR0YWNobWVudEluZm8gPSBhdHRhY2htZW50LmluZm87CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW0gYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tCmluZGV4IDA2NzJi
NTgxYmY2NWI1YWQ5YTJiODVmZWE4NjE2NDhmMjIzZWI0YzUuLjEwMjcyODg0MDg0ZDJjMTAyMDhj
ZmEwNzE0ZjFiMTBjNWVmYzBhMGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
bWFjL0V2ZW50U2VuZGVyUHJveHkubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMv
RXZlbnRTZW5kZXJQcm94eS5tbQpAQCAtMjcyLDIwICsyNzIsMTAgQEAgc3RhdGljIE5TVGltZUlu
dGVydmFsIGFic29sdXRlVGltZUZvckV2ZW50VGltZShkb3VibGUgY3VycmVudEV2ZW50VGltZSkK
IAogRXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVz
dENvbnRyb2xsZXIpCiAgICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RDb250cm9sbGVyKQotICAg
ICwgbV90aW1lKDApCi0gICAgLCBtX3Bvc2l0aW9uKCkKLSAgICAsIG1fbGVmdE1vdXNlQnV0dG9u
RG93bihmYWxzZSkKLSAgICAsIG1fY2xpY2tDb3VudCgwKQotICAgICwgbV9jbGlja1RpbWUoMCkK
LSAgICAsIG1fY2xpY2tQb3NpdGlvbigpCi0gICAgLCBtX2NsaWNrQnV0dG9uKGtXS0V2ZW50TW91
c2VCdXR0b25Ob0J1dHRvbikKLSAgICAsIGV2ZW50TnVtYmVyKDApCiB7CiB9CiAKLUV2ZW50U2Vu
ZGVyUHJveHk6On5FdmVudFNlbmRlclByb3h5KCkKLXsKLX0KK0V2ZW50U2VuZGVyUHJveHk6On5F
dmVudFNlbmRlclByb3h5KCkgPSBkZWZhdWx0OwogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVw
ZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKIHsKQEAgLTM5NCw3ICszODQsNyBA
QCBzdGF0aWMgdm9pZCBoYW5kbGVGb3JjZUV2ZW50U3luY2hyb25vdXNseShOU0V2ZW50ICpldmVu
dCkKIAogUmV0YWluUHRyPE5TRXZlbnQ+IEV2ZW50U2VuZGVyUHJveHk6OmJlZ2luUHJlc3N1cmVF
dmVudChpbnQgc3RhZ2UpCiB7Ci0gICAgUmV0YWluUHRyPEV2ZW50U2VuZGVyU3ludGhldGljRXZl
bnQ+IGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGlu
aXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9z
aXRpb24ueSkKKyAgICBhdXRvIGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGlj
RXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bv
c2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAgICAgICAgZ2xvYmFsTG9jYXRpb246KFttX3Rlc3RD
b250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpIGNvbnZlcnRSZWN0VG9T
Y3JlZW46TlNNYWtlUmVjdChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgMSwgMSldLm9yaWdp
bikKICAgICAgICAgc3RhZ2U6c3RhZ2UKICAgICAgICAgcHJlc3N1cmU6MC41CkBAIC00MDksNyAr
Mzk5LDcgQEAgUmV0YWluUHRyPE5TRXZlbnQ+IEV2ZW50U2VuZGVyUHJveHk6OmJlZ2luUHJlc3N1
cmVFdmVudChpbnQgc3RhZ2UpCiAKIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5
OjpwcmVzc3VyZUNoYW5nZUV2ZW50KGludCBzdGFnZSwgZmxvYXQgcHJlc3N1cmUsIEV2ZW50U2Vu
ZGVyUHJveHk6OlByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBSZXRh
aW5QdHI8RXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudD4gZXZlbnQgPSBhZG9wdE5TKFtbRXZlbnRT
ZW5kZXJTeW50aGV0aWNFdmVudCBhbGxvY10gaW5pdFByZXNzdXJlRXZlbnRBdExvY2F0aW9uOk5T
TWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQorICAgIGF1dG8gZXZlbnQgPSBh
ZG9wdE5TKFtbRXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudCBhbGxvY10gaW5pdFByZXNzdXJlRXZl
bnRBdExvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQogICAg
ICAgICBnbG9iYWxMb2NhdGlvbjooW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBs
YXRmb3JtV2luZG93KCkgY29udmVydFJlY3RUb1NjcmVlbjpOU01ha2VSZWN0KG1fcG9zaXRpb24u
eCwgbV9wb3NpdGlvbi55LCAxLCAxKV0ub3JpZ2luKQogICAgICAgICBzdGFnZTpzdGFnZQogICAg
ICAgICBwcmVzc3VyZTpwcmVzc3VyZQpAQCAtNDMxLDEwICs0MjEsMTAgQEAgdm9pZCBFdmVudFNl
bmRlclByb3h5Ojptb3VzZUZvcmNlQ2xpY2soKQogewogICAgIHNlbmRNb3VzZURvd25Ub1N0YXJ0
UHJlc3N1cmVFdmVudHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJl
ID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBwcmVGb3Jj
ZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6
SW5jcmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGZvcmNlQ2xpY2sgPSBwcmVzc3Vy
ZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKLSAg
ICBSZXRhaW5QdHI8TlNFdmVudD4gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2
ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAgICBhdXRvIGJl
Z2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMSk7CisgICAgYXV0byBwcmVGb3JjZUNs
aWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5j
cmVhc2luZyk7CisgICAgYXV0byBmb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQ
cmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byByZWxlYXNpbmdQ
cmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246
OkRlY3JlYXNpbmcpOwogICAgIE5TRXZlbnQgKm1vdXNlVXAgPSBbTlNFdmVudCBtb3VzZUV2ZW50
V2l0aFR5cGU6TlNFdmVudFR5cGVMZWZ0TW91c2VVcAogICAgICAgICBsb2NhdGlvbjpOU01ha2VQ
b2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAgICAgICAgbW9kaWZpZXJGbGFnczow
CkBAIC00NjgsOSArNDU4LDkgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzdGFydEFuZENhbmNl
bE1vdXNlRm9yY2VDbGljaygpCiB7CiAgICAgc2VuZE1vdXNlRG93blRvU3RhcnRQcmVzc3VyZUV2
ZW50cygpOwogCi0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGJlZ2luUHJlc3N1cmUgPSBiZWdpblBy
ZXNzdXJlRXZlbnQoMSk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGluY3JlYXNpbmdQcmVzc3Vy
ZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3Jl
YXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiByZWxlYXNpbmdQcmVzc3VyZSA9IHByZXNz
dXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwor
ICAgIGF1dG8gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKKyAgICBhdXRv
IGluY3JlYXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFu
Z2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gcmVsZWFzaW5nUHJlc3N1cmUgPSBw
cmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5n
KTsKICAgICBOU0V2ZW50ICptb3VzZVVwID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5T
RXZlbnRUeXBlTGVmdE1vdXNlVXAKICAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3Np
dGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIG1vZGlmaWVyRmxhZ3M6MApAQCAtNTAzLDkg
KzQ5Myw5IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZURvd24oKQogewogICAg
IHNlbmRNb3VzZURvd25Ub1N0YXJ0UHJlc3N1cmVFdmVudHMoKTsKIAotICAgIFJldGFpblB0cjxO
U0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFp
blB0cjxOU0V2ZW50PiBwcmVGb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVz
c3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+
IGZvcmNlTW91c2VEb3duID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURp
cmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVz
c3VyZUV2ZW50KDEpOworICAgIGF1dG8gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZl
bnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gZm9y
Y2VNb3VzZURvd24gPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJlQ2hhbmdlRGlyZWN0
aW9uOjpJbmNyZWFzaW5nKTsKIAogICAgIE5TVmlldyAqdGFyZ2V0VmlldyA9IFttX3Rlc3RDb250
cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSBoaXRUZXN0OltiZWdpblByZXNz
dXJlIGxvY2F0aW9uSW5XaW5kb3ddXTsKICAgICB0YXJnZXRWaWV3ID0gdGFyZ2V0VmlldyA/IHRh
cmdldFZpZXcgOiBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXco
KTsKQEAgLTUyNiw5ICs1MTYsOSBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VE
b3duKCkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlVXAoKQogewotICAgIFJl
dGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDIpOwot
ICAgIFJldGFpblB0cjxOU0V2ZW50PiBzdGFnZVR3b0V2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVu
dCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7Ci0gICAgUmV0YWluUHRy
PE5TRXZlbnQ+IHN0YWdlT25lRXZlbnQgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJl
Q2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBi
ZWdpblByZXNzdXJlRXZlbnQoMik7CisgICAgYXV0byBzdGFnZVR3b0V2ZW50ID0gcHJlc3N1cmVD
aGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAg
YXV0byBzdGFnZU9uZUV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5n
ZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CiAKICAgICAvLyBTaW5jZSBBcHBLaXQgZG9lcyBub3Qg
aW1wbGVtZW50IGZvcmNldXAvZG93biBhcyBtb3VzZSBldmVudHMsIHdlIG5lZWQgdG8gc2VuZCB0
d28gcHJlc3N1cmUgZXZlbnRzIHRvIGRldGVjdAogICAgIC8vIHRoZSBjaGFuZ2UgaW4gc3RhZ2Ug
dGhhdCBtYXJrcyB0aG9zZSBtb21lbnRzLgpAQCAtNTUxLDggKzU0MSw4IEBAIHZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6bW91c2VGb3JjZUNoYW5nZWQoZmxvYXQgZm9yY2UpCiB7CiAgICAgaW50IHN0
YWdlID0gZm9yY2UgPCAxID8gMSA6IDI7CiAgICAgZmxvYXQgcHJlc3N1cmUgPSBmb3JjZSA8IDEg
PyBmb3JjZSA6IGZvcmNlIC0gMTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3Vy
ZSA9IGJlZ2luUHJlc3N1cmVFdmVudChzdGFnZSk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IHBy
ZXNzdXJlQ2hhbmdlZEV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudChzdGFnZSwgcHJlc3N1cmUs
IFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJl
c3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoc3RhZ2UpOworICAgIGF1dG8gcHJlc3N1cmVDaGFu
Z2VkRXZlbnQgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KHN0YWdlLCBwcmVzc3VyZSwgUHJlc3N1cmVD
aGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwogCiAgICAgTlNWaWV3ICp0YXJnZXRWaWV3ID0g
W21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpIGhpdFRlc3Q6
W2JlZ2luUHJlc3N1cmUgbG9jYXRpb25JbldpbmRvd11dOwogICAgIHRhcmdldFZpZXcgPSB0YXJn
ZXRWaWV3ID8gdGFyZ2V0VmlldyA6IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBs
YXRmb3JtVmlldygpOwpAQCAtNjExLDggKzYwMSw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojpr
ZXlEb3duKFdLU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIHVuc2ln
bmVkIGtleUxvY2F0aW9uKQogewotICAgIE5TU3RyaW5nKiBjaGFyYWN0ZXIgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aENTdHJpbmc6dG9TVEQoa2V5KS5jX3N0cigpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuY29kaW5nOltOU1N0cmluZyBkZWZhdWx0Q1N0cmluZ0VuY29kaW5n
XV07CisgICAgTlNTdHJpbmcqIGNoYXJhY3RlciA9IHRvV1RGU3RyaW5nKGtleSk7CiAKICAgICBO
U1N0cmluZyAqZXZlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CiAgICAgdW5zaWduZWQgc2hvcnQg
a2V5Q29kZSA9IDA7CkBAIC04MzIsNyArODIxLDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojpr
ZXlEb3duKFdLU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIHVuc2kK
IAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsK
LSAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4gY2dTY3JvbGxFdmVudCA9IGFkb3B0Q0YoQ0dFdmVu
dENyZWF0ZVNjcm9sbFdoZWVsRXZlbnQyKDAsIGtDR1Njcm9sbEV2ZW50VW5pdExpbmUsIDIsIHks
IHgsIDApKTsKKyAgICBhdXRvIGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGVT
Y3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAyLCB5LCB4LCAwKSk7
CiAKICAgICAvLyBTZXQgdGhlIENHRXZlbnQgbG9jYXRpb24gaW4gZmxpcHBlZCBjb29yZHMgcmVs
YXRpdmUgdG8gdGhlIGZpcnN0IHNjcmVlbiwgd2hpY2gKICAgICAvLyBjb21wZW5zYXRlcyBmb3Ig
dGhlIGJlaGF2aW9yIG9mICtbTlNFdmVudCBldmVudFdpdGhDR0V2ZW50Ol0gd2hlbiB0aGUgZXZl
bnQgaGFzCkBAIC04NTksNyArODQ4LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojpjb250aW51
b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiAKIHZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKGludCB4
LCBpbnQgeSwgaW50IHBoYXNlLCBpbnQgbW9tZW50dW0pCiB7Ci0gICAgUmV0YWluUHRyPENHRXZl
bnRSZWY+IGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGVTY3JvbGxXaGVlbEV2
ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAyLCB5LCB4LCAwKSk7CisgICAgYXV0byBj
Z1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVudDIoMCwg
a0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkpOwogCiAgICAgLy8gU2V0IHRoZSBD
R0V2ZW50IGxvY2F0aW9uIGluIGZsaXBwZWQgY29vcmRzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBz
Y3JlZW4sIHdoaWNoCiAgICAgLy8gY29tcGVuc2F0ZXMgZm9yIHRoZSBiZWhhdmlvciBvZiArW05T
RXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpdIHdoZW4gdGhlIGV2ZW50IGhhcwpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCmluZGV4IDY0MTc4MmNh
OTdlMWRhZmI5MDA5MTlkYjE5YjM0NzRhNTU0Mzg4ZTUuLjVhNGU5NmI4MWVhOGNkYTA2YjM3YjQ2
OGU1ODg1OWVmNzFlYjQ2YjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFj
L1BsYXRmb3JtV2ViVmlld01hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9Q
bGF0Zm9ybVdlYlZpZXdNYWMubW0KQEAgLTY0LDcgKzY0LDcgQEAgUGxhdGZvcm1XZWJWaWV3OjpQ
bGF0Zm9ybVdlYlZpZXcoV0tXZWJWaWV3Q29uZmlndXJhdGlvbiogY29uZmlndXJhdGlvbiwgY29u
c3QgVGUKICAgICBpZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSkKICAgICAgICAgW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0VmFsdWU6QFlFUyBmb3JLZXk6
QCJXZWJLaXQyVXNlUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEiXTsKIAotICAgIFJldGFpblB0
cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhb
Y29uZmlndXJhdGlvbiBjb3B5XSk7CisgICAgYXV0byBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRv
cHROUyhbY29uZmlndXJhdGlvbiBjb3B5XSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldFRocmVhZGVk
U2Nyb2xsaW5nRW5hYmxlZCgoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29waWVkQ29uZmln
dXJhdGlvbiBwcmVmZXJlbmNlc10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyk7CiAK
ICAgICBOU1JlY3QgcmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgVGVzdENvbnRyb2xsZXI6OnZpZXdX
aWR0aCwgVGVzdENvbnRyb2xsZXI6OnZpZXdIZWlnaHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQppbmRleCAxNGI3ZGM5ZDBmMjRlYzEwZTc4
YWMyYjBlMDM2NWE5ZWE2NDlhYjI2Li5iMjIyODcxY2QwYTM5MTllMzNlZDYwNmQwZjQ0MTY4ODU2
OTNhMjA1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJv
bGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxl
ck1hYy5tbQpAQCAtMTg0LDcgKzE4NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3Vy
ZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0CiAgICAg
aWYgKCF0ZXN0LnVybENvbnRhaW5zKCJjb250ZW50ZXh0ZW5zaW9ucy8iKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB0ZXN0VVJMID0gYWRvcHRDRihXS1VSTENv
cHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0ZXN0LnVybCgpKSk7CisgICAgYXV0byB0ZXN0
VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0ZXN0LnVy
bCgpKSk7CiAgICAgTlNVUkwgKmZpbHRlclVSTCA9IFsoX19icmlkZ2UgTlNVUkwgKil0ZXN0VVJM
LmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aEV4dGVuc2lvbjpAImpzb24iXTsKIAogICAgIF9fYmxv
Y2sgTlNTdHJpbmcgKmNvbnRlbnRFeHRlbnNpb25TdHJpbmc7CkBAIC0zNzEsMTQgKzM3MSwxNCBA
QCBzdGF0aWMgTlNTZXQgKnN5c3RlbUhpZGRlbkZvbnRGYW1pbHlTZXQoKQogCiBzdGF0aWMgV0tS
ZXRhaW5QdHI8V0tBcnJheVJlZj4gZ2VuZXJhdGVGb250QWxsb3dMaXN0KCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS011dGFibGVBcnJh
eUNyZWF0ZSgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7CiAgICAgZm9yIChOU1N0cmluZyAqZm9udEZhbWlseSBpbiBhbGxvd2VkRm9udEZhbWls
eVNldCgpKSB7CiAgICAgICAgIE5TQXJyYXkgKmZvbnRzRm9yRmFtaWx5ID0gW1tOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBhdmFpbGFibGVNZW1iZXJzT2ZGb250RmFtaWx5OmZvbnRG
YW1pbHldOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmFtaWx5SW5Gb250ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhbZm9udEZhbWlseSBVVEY4U3Ry
aW5nXSkpOworICAgICAgICBhdXRvIGZhbWlseUluRm9udCA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoW2ZvbnRGYW1pbHkgVVRGOFN0cmluZ10pKTsKICAgICAgICAgV0tB
cnJheUFwcGVuZEl0ZW0ocmVzdWx0LmdldCgpLCBmYW1pbHlJbkZvbnQuZ2V0KCkpOwogICAgICAg
ICBmb3IgKE5TQXJyYXkgKmZvbnRJbmZvIGluIGZvbnRzRm9yRmFtaWx5KSB7CiAgICAgICAgICAg
ICAvLyBGb250IG5hbWUgaXMgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBhcnJheS4KLSAgICAgICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb250TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoW1tmb250SW5mbyBvYmplY3RBdEluZGV4OjBdIFVURjhTdHJp
bmddKSk7CisgICAgICAgICAgICBhdXRvIGZvbnROYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhbW2ZvbnRJbmZvIG9iamVjdEF0SW5kZXg6MF0gVVRGOFN0cmluZ10p
KTsKICAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdC5nZXQoKSwgZm9udE5hbWUu
Z2V0KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzk0LDcgKzM5NCw3IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQogICAgIC8vIFRlc3RpbmcgdXNl
cyBhIHByaXZhdGUgc2Vzc2lvbiwgd2hpY2ggaXMgbWVtb3J5IG9ubHkuIEhvd2V2ZXIgY3JlYXRp
bmcgb25lIGluc3RhbnRpYXRlcyBhIHNoYXJlZCBOU1VSTENhY2hlLAogICAgIC8vIGFuZCBpZiB3
ZSBoYXZlbid0IGNyZWF0ZWQgb25lIHlldCwgdGhlIGRlZmF1bHQgb25lIHdpbGwgYmUgY3JlYXRl
ZCBvbiBkaXNrLgogICAgIC8vIE1ha2luZyB0aGUgc2hhcmVkIGNhY2hlIG1lbW9yeS1vbmx5IGF2
b2lkcyB0b3VjaGluZyB0aGUgZmlsZSBzeXN0ZW0uCi0gICAgUmV0YWluUHRyPE5TVVJMQ2FjaGU+
IHNoYXJlZENhY2hlID0KKyAgICBhdXRvIHNoYXJlZENhY2hlID0KICAgICAgICAgYWRvcHROUyhb
W05TVVJMQ2FjaGUgYWxsb2NdIGluaXRXaXRoTWVtb3J5Q2FwYWNpdHk6MTAyNCAqIDEwMjQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlza0NhcGFjaXR5OjAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tQYXRoOm5pbF0pOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFj
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaApp
bmRleCAwZWFiODk0OWU2YmViZmVlNjU5NDc1ODlhZmI5ZThkOWI4YmUxZWM3Li4yZDJkMWQ2Yjg0
NmU2ODc4YjBiMWViZGMxNjY3YzE3NWU5MTU2NjVmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaApAQCAtMzEsMTMgKzMxLDE0IEBA
IE9CSkNfQ0xBU1MgV0tXZWJWaWV3OwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVUlTY3Jp
cHRDb250cm9sbGVyTWFjIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKK2NsYXNz
IFVJU2NyaXB0Q29udHJvbGxlck1hYyBmaW5hbCA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJD
b2NvYSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVyTWFjKFVJU2Ny
aXB0Q29udGV4dCYgY29udGV4dCkKICAgICAgICAgOiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShj
b250ZXh0KQogICAgIHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCByZXBsYWNlVGV4dEF0
UmFuZ2UoSlNTdHJpbmdSZWYsIGludCwgaW50KSBvdmVycmlkZTsKICAgICB2b2lkIHpvb21Ub1Nj
YWxlKGRvdWJsZSwgSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgZG91YmxlIHpvb21TY2FsZSgp
IGNvbnN0IG92ZXJyaWRlOwpAQCAtNjIsNyArNjMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFj
dGl2YXRlQXRQb2ludChsb25nIHgsIGxvbmcgeSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykgb3ZlcnJp
ZGU7CiAKLXByaXZhdGU6CiAgICAgTlNUYWJsZVZpZXcgKmRhdGFMaXN0U3VnZ2VzdGlvbnNUYWJs
ZVZpZXcoKSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
bWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFj
L1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQppbmRleCBjZDExMzI5YTY1NDFkN2I0ZWI3N2Q3ZWMx
NDY4OGU5OTIxZjI3YzUzLi5iNWNiNTE4MTUwNTllN2EwOTNhMTQyMzk5MWU4OTE3ZTNlZDMwOTA4
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xs
ZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9s
bGVyTWFjLm1tCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJNYWM6
OmNvbXBsZXRlQmFja1N3aXBlKEpTVmFsdWVSZWYgY2FsbGJhY2spCiAKIHZvaWQgVUlTY3JpcHRD
b250cm9sbGVyTWFjOjpwbGF5QmFja0V2ZW50U3RyZWFtKEpTU3RyaW5nUmVmIGV2ZW50U3RyZWFt
LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3Ry
ZWFtID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBl
dmVudFN0cmVhbSkpOworICAgIGF1dG8gc3RyZWFtID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0
cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBldmVudFN0cmVhbSkpOwogICAgIHBsYXlCYWNrRXZl
bnRzKHdlYlZpZXcoKSwgbV9jb250ZXh0LCAoX19icmlkZ2UgTlNTdHJpbmcgKilzdHJlYW0uZ2V0
KCksIGNhbGxiYWNrKTsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="425666"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409850</attachid>
            <date>2020-09-27 11:51:48 -0700</date>
            <delta_ts>2020-09-27 11:58:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200927115147.patch</filename>
            <type>text/plain</type>
            <size>692943</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJmZWY0NTFlYS4u
NDE0MjQxMWNiYTZhMmY1NjU2YWU4MDZlZDJjZWYzZDhjOWMxZTBkNCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0MSBAQAorMjAy
MC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlmeWluZywgYnV0IGV2ZW4g
bW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVzdAorICAgICAgICBjb2Rl
IGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkgYW5kIHBhc3RlIHJhdGhl
ciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0ZXIgdGhlIHJlZmFjdG9y
aW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlzIGNvZGUgaXMgd3JpdHRl
biB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGluZyBmb3IgZWFjaCBmdW5j
dGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0
KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0NsYXNzIHdpdGggdGhpcy4g
UmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBjbGVhciB0aGlzIHBhc3Nl
cyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKHVp
RWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBSZW1vdmVkIHVubmVlZGVk
IGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3aGljaCBzdGFydHMgb3V0
IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9y
RHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IpOiBV
c2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoX3JldHVybkV4
cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2UgYW5kIGF1dG8uCisgICAg
ICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAo
Z2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChHQ0NvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6IFJlcGxhY2VkIGdldEpT
Q2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFpblB0ciB0byBtYWtlIGl0
IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVyLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKGVuY29kZUhv
c3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChleGVjQ29tbWFu
ZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAob3Zl
cnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKHF1ZXVlTG9hZENhbGxi
YWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5nQ2FsbGJhY2spOiBEaXR0
by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFs
T2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKTogUmVw
bGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRy
IHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisg
ICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25z
dCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAg
ICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQpOiBTaW1wbGlmaWVk
IHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sp
OiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAorICAgICAgICB0YWJsZSB2
YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBuZWVkIHRvIGJlIG9iamVj
dHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogRGl0dG8u
CisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4K
KyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTogVXNlIGFycmF5TGVuZ3Ro
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDogVXBkYXRlZCBmb3IgdGhl
IGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3Jt
TmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoY3JlYXRlRW1w
dHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50
TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
bGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
VmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oOiBSZW1vdmVkIHVubmVl
ZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGguCisgICAgICAgIFJlbW92
ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIgSlNWYWx1ZUlzT2JqZWN0
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSBj
b25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoY3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09iamVjdC4KKyAgICAgICAg
KHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSBjb25zdCk6
IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRnJh
bWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERlbGVnYXRlIGRpZENsZWFy
V2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6CisgICAgICAgIFVzZSBhdXRv
LiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LiBTaW1wbGlmaWVkIG9i
amVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0TlMgaW5zdGVhZCBvZiBy
ZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRDbGVhcldpbmRvd09iamVj
dEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNlIGNyZWF0ZUpTU3RyaW5n
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAg
ICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVuZ3RoLgorCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHA6CisgICAgICAgIChXVFI6
OnRvT3B0aW9uYWxCb29sKTogUmVuYW1lZCBmcm9tIEpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbC4K
KyAgICAgICAgKFdUUjo6dG9PcHRpb25hbERvdWJsZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpt
YWtlVmFsdWUpOiBBZGRlZCB3aXRoIG92ZXJsb2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAg
ICAgUmVwbGFjZWQgSlNWYWx1ZVRvTnVsbGFibGVCb29sZWFuIGFuZCBKU1ZhbHVlTWFrZVN0cmlu
Z09yTnVsbC4KKyAgICAgICAgKFdUUjo6Y3JlYXRlSlNTdHJpbmcpOiBBZGRlZCB3aXRoIG92ZXJs
b2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAgICAgKFdUUjo6cHJvcGVydHkpOiBBZGRlZC4K
KyAgICAgICAgKFdUUjo6c3RyaW5nUHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Ym9v
bGVhblByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChXVFI6Om51bWVyaWNQcm9wZXJ0eSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjpvYmplY3RQcm9wZXJ0eSk6IFJlZmFjdG9yZWQgdG8gY2FsbCBw
cm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBBZGRlZC4KKyAgICAgICAgKFdU
Ujo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Y2FsbCk6
IFJlZmFjdG9yZWQgdG8gbGV0IG9iamVjdFByb3BlcnR5IGRvIG1vcmUgb2YgdGhlIG51bGwgY2hl
Y2tpbmcuCisgICAgICAgIChXVFI6OmNhbGxDb25zdHJ1Y3Rvcik6IERpdHRvLgorICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaDogVXBkYXRlZCBmb3IgdGhlIGFi
b3ZlLgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5o
OiBSZWR1Y2VkIGluY2x1ZGVzIGEgYml0LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU1dyYXBwZXIuaDogQWRkZWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisKKyAg
ICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQu
Y3BwOgorICAgICAgICAoVUlTY3JpcHRDb250ZXh0OjpVSVNjcmlwdENvbnRleHQpOiBQYXNzIGZl
d2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LgorICAgICAgICAoVUlTY3JpcHRDb250
ZXh0OjpydW5VSVNjcmlwdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKFVJU2NyaXB0
Q29udGV4dDo6b2JqZWN0RnJvbVJlY3QgY29uc3QpOiBVc2Ugc2V0UHJvcGVydHkuCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmg6
IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHA6CisgICAgICAgIChXVFI6
OnRvRGV2aWNlT3JpZW50YXRpb24pOiBVc2UgY3JlYXRlSlNTdHJpbmcgYW5kIEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcuCisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6bWFr
ZVdpbmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKworICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbToKKyAgICAg
ICAgKC1bTGF5b3V0VGVzdFNwZWxsQ2hlY2tlciBzZXRSZXN1bHRzRnJvbUpTVmFsdWU6aW5Db250
ZXh0Ol0pOiBVc2UgY3JlYXRlSlNTdHJpbmcKKyAgICAgICAgYW5kIHJlbW92ZWQgdW5uZWVkZWQg
dXNlIG9mIGxyb3VuZGwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlG
dW5jdGlvbnMuaDogQWRkZWQuIENvbnRhaW5zIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworICAgICAg
ICBmb3IgZGVhbGluZyB3aXRoIFdLRGljdGlvbmFyeVJlZi4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oOiBJbml0aWFsaXplIGRhdGEgbWVtYmVycy4KKwor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwOgor
ICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9uKTogVXNlIE9wdGlv
bmFsIGluc3RlYWQgb2Ygc2VwYXJhdGUgYm9vbC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdp
bmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG06CisgICAgICAgIChf
Z2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZpbGUpOiBVc2Ugc3RhdGljIGluaXRpYWxpemF0aW9uIGFu
ZCBhIGxhbWJkYSBpbnN0ZWFkIG9mCisgICAgICAgIGFuIGlmIHN0YXRlbWVudCB0byBpbml0aWFs
aXplLgorICAgICAgICAoX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yKTogVXNlIHRvT3B0aW9uYWxC
b29sIGFuZCBjcmVhdGVKU1N0cmluZy4gQWxzbyBhZGRlZAorICAgICAgICBzdXBwb3J0IGZvciBu
dWxsYWJsZSBkb3VibGVzIGFuZCB1c2VkIGF1dG8gYSBiaXQgbW9yZS4KKyAgICAgICAgKF9yZXR1
cm5FeHByZXNzaW9uKTogVXNlIG1ha2VWYWx1ZS4KKworICAgICAgICAqIEluamVjdGVkQnVuZGxl
L0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOiBNYWRlIHRoZSBvcHRpb25hbCBhcmd1bWVudHMgdG8g
dGhlCisgICAgICAgIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIGZ1bmN0aW9uICJkb3VibGU/
IiBpbnN0ZWFkIG9mICJvYmplY3QiLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6Z2V0
TWVudUl0ZW1DaGlsZHJlbkNhbGxiYWNrKTogVXNlIGF1dG8gYW5kIG5vdCBKU1ZhbHVlVG9PYmpl
Y3QuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogTW92ZWQgdG8gSlNCYXNpY3MuaC9jcHAu
CisgICAgICAgIChXVFI6OnBhcnNlVG91Y2hNb2RpZmllcik6IEFkZGVkLiBGYWN0b3JlZCBvdXQg
b2YgdGhlCisgICAgICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9kaWZpZXIg
ZnVuY3Rpb24uCisgICAgICAgIChXVFI6OnBhcnNlTW9kaWZpZXJBcnJheSk6IFVzZSBjcmVhdGVK
U1N0cmluZyBhbmQgcmVtb3ZlIHVubmVlZGVkIGlnbm9yZWQKKyAgICAgICAgZXhjZXB0aW9uIG91
dCBhcmd1bWVudCwgc2luY2UgdGhhdCBpcyBvcHRpb25hbC4gQWxzbyBhZGRlZCBvdmVybG9hZCB0
aGF0CisgICAgICAgIGdldHMgdGhlIGNvbnRleHQuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp+RXZlbnRTZW5kaW5nQ29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgIChXVFI6OmNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkpOiBVc2UgYWRvcHRX
SyBhbmQgc2V0VmFsdWUuIFJldHVybiBhIFdLUmV0YWluUHRyLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZURvd24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlVXApOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8p
OiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlcy4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNsaWNrKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnN0YXJ0QW5kQ2Fu
Y2VsTW91c2VGb3JjZUNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6Om1vdXNlRm9yY2VEb3duKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VVcCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpsZWFwRm9yd2FyZCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNr
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlS2V5RG93bk1lc3Nh
Z2VCb2R5KTogVXNlIHNldFZhbHVlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjprZXlEb3duKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24p
OiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZVNjcm9sbEJ5KTogVXNlIHNldFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcyk6IFVzZQorICAgICAgICBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3Vz
TW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQKKyAgICAgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRl
eHRDbGljayk6IFVzZSBhdXRvIGFuZCBub3QgSlNWYWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RS
Ojp0b01vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMpOiBVc2UgYm9vbGVhblByb3BlcnR5LgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjphZGRUb3VjaFBvaW50KTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6dXBkYXRlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoUG9pbnRSYWRpdXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hTdGFy
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaE1v
dmUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hF
bmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hD
YW5jZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2xl
YXJUb3VjaFBvaW50cyk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpyZWxlYXNlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9F
dmVudFNlbmRpbmdDb250cm9sbGVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAgICAg
RGVsZXRlZCB2YXJpb3VzIHVubmVlZGVkIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6
R0NDb250cm9sbGVyOjpHQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0Nv
bnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0NvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgIEFsc28gbWFya2VkIHRoZSBjbGFzcyBm
aW5hbC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkQ3JlYXRlUGFn
ZSk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRS
ZWNlaXZlTWVzc2FnZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cG9zdFBhZ2VNZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpy
ZXBvcnRMaXZlRG9jdW1lbnRzKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKTogVXNlIGRpY3Rpb25hcnlW
YWx1ZSwKKyAgICAgICAgYm9vbGVhblZhbHVlLCBwb3N0UGFnZU1lc3NhZ2UsIHZhbHVlLCBhbmQg
bW9yZSB0byBzdHJlYW1saW5lLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6Ym9vbGVh
bkZvcktleSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzdHJpbmdG
b3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0
aW5nKTogVXNlIGJvb2xlYW5WYWx1ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRv
bmUpOiBVc2Ugc3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpjbG9z
ZU90aGVyUGFnZXMpOiBVc2Ugc2V0VmFsdWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpkdW1wVG9TdGRFcnIpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlCisgICAgICAgIChX
VFI6OkluamVjdGVkQnVuZGxlOjpvdXRwdXRUZXh0KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUpOiBVc2UgcG9z
dFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdEFkZENocm9t
ZUlucHV0RmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RS
ZW1vdmVDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0Rm9jdXNXZWJWaWV3KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpwb3N0U2V0V2luZG93SXNLZXkpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRWaWV3U2l6ZSk6IFVzZSBzZXRWYWx1ZSBhbmQgdG9X
Sy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNh
dGlvbkNsaWNrKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnBvc3RTZXRBZGRzVmlzaXRlZExpbmtzKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UsCisgICAgICAgIGFuZCB1c2UgT3B0aW9uYWwgaW5z
dGVhZCBvZiBib29sL2RvdWJsZSBwYWlycy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFVzZSBwb3N0UGFn
ZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjppc0dlb2xvY2F0aW9uUHJv
dmlkZXJBY3RpdmUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQgY29uc3Qp
OiBVc2UgdG9XSyBhbmQgdWludDY0VmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
OjpzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1p
c3Npb25Gb3JPcmlnaW4pOiBVc2Ugc2V0VmFsdWUKKyAgICAgICAgYW5kIHBvc3RQYWdlTWVzc2Fn
ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbik6IFVz
ZXQgc2V0VmFsdWUKKyAgICAgICAgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUpOiBVc2Ugc2V0VmFsdWUgYW5kIHBv
c3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEhpZGRlbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0Q2FjaGVNb2RlbCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1
ZSBjb25zdCk6IFVzZSB0b1dLIGFuZCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpwcm9jZXNzV29ya1F1ZXVlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlQmFja05hdmlnYXRpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24pOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZCk6IFVzZSBzZXRWYWx1
ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cXVldWVSZWxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVl
TG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVOb25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OnBvc3RNZXNzYWdlKTog
QWRkZWQuIE92ZXJsb2FkcyBmb3IgbWFueSB0eXBlcyB0byBrZWVwIGNhbGxlciBjb2RlIHN0cmVh
bWxpbmVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OnBvc3RQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaDogVXBkYXRlZCBmb3IgdGhlIGFib3Zl
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6cHJvcGVy
dHlWYWx1ZURvdWJsZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlSW50KTog
RGl0dG8uCisgICAgICAgIChXVFI6Om51bWVyaWNXaW5kb3dQcm9wZXJ0eSk6IFJlbmFtZWQgZnJv
bSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZSBmb3IgYnJldml0eQorICAgICAgICBhbmQgZm9y
IGNvbnNpc3RlbmN5IHdpdGggSlNCYXNpY3MuaCBmdW5jdGlvbnMuCisgICAgICAgIChXVFI6OmR1
bXBQYXRoKTogVXNlIHN0cmluZ1Byb3BlcnR5LCBvYmplY3RQcm9wZXJ0eSwgYW5kIG1ha2VTdHJp
bmcuCisgICAgICAgIChXVFI6OnJhbmdlVG9TdHIpOiBVc2UgYXV0bywgbnVtZXJpY1Byb3BlcnR5
LCBhbmQgbWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6TmF2aWdhdGlvblR5cGVUb1N0cmluZyk6
IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpzdHJpbmcpOiBSZW5hbWVkIGZyb20gc2VjdXJpdHlP
cmlnaW5Ub1N0ci4gVXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OmZyYW1lVG9TdHIpOiBV
c2UgYXV0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVz
dCk6IFJlbW92ZWQgdW5uZWVkZWQgbG9jYWwuCisgICAgICAgIChXVFI6OmR1bXBGcmFtZURlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OmR1
bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6ZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBVc2Ug
YXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOiBV
cGRhdGUgZm9yIG5hbWUgY2hhbmdlLgorICAgICAgICAoV1RSOjp0b0pTKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6aGFzRG9j
dW1lbnRFbGVtZW50KTogVXNlIG9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHksCisgICAgICAgIGFuZCBwYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93
T2JqZWN0LgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24pOiBTdHJlYW1saW5lIGNvZGUgYSBiaXQuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOiBVc2UgbWFrZVN0
cmluZy4KKyAgICAgICAgKFdUUjo6bGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5RdW90YSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKTogRGl0dG8uCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpUZXN0UnVubmVyKTogVXNlIHRvV0suCisgICAgICAgIChX
VFI6OnBhZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6bWFpbkZyYW1lKTogQWRkZWQuCisgICAg
ICAgIChXVFI6Om1haW5KU0NvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNwbGF5
QW5kVHJhY2tSZXBhaW50cyk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjp0b1dLKTogQWRkZWQg
b3ZlcmxvYWQgZm9yIGRvdWJsZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlV0tEaWN0aW9uYXJ5KTog
QWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0dXJuVmFs
dWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmlu
Z0Jvb2xlYW4pOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VXaXRoUmV0dXJuVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRkZWQuCisgICAgICAgIChX
VFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdVSW50NjQpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNob3VsZER1bXBQaXhlbHMgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldER1bXBQaXhl
bHMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6d2hhdFRvRHVtcCBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5n
VUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXaGF0VG9EdW1wKTogVXNlIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdhaXRV
bnRpbERvbmUpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2hvdWxkV2FpdFVudGlsRG9uZSBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hv
dWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmV4ZWNDb21tYW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OmZpbmRPcHRpb25zRnJv
bUFycmF5KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLCBhbmQgY3JlYXRlSlNTdHJp
bmcuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmcpOiBVc2UgcGFnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZmluZFN0cmluZ01hdGNoZXNJblBhZ2UpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVwbGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKTog
VXNlIG1haW5KU0NvbnRleHQgYW5kIGFycmF5TGVuZ3RoIGFuZAorICAgICAgICByZW1vdmVkIHVu
bmVlZGVkIGNhbGwgdG8gc3RkOjpyb3VuZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBbGxEYXRhYmFzZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKTogVXNlIHBhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VG
b3JPcmlnaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6c3RyaW5nQXJyYXlUb0pTKTogVHdlYWtl
ZCBjb2Rpbmcgc3R5bGUgYSBiaXQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om9yaWdpbnNX
aXRoQXBwbGljYXRpb25DYWNoZSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc0NvbW1hbmRFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dENhbk9wZW5XaW5kb3dzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TWVkaWFEZXZpY2VzRW5hYmxlZCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJSVENNRE5TSUNFQ2FuZGlk
YXRlc0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0Q3VzdG9t
VXNlckFnZW50KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9kZXJuTWVkaWFDb250cm9sc0Vu
YWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViR0wyRW5hYmxl
ZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXcml0YWJsZVN0cmVhbUFQ
SUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VHJhbnNmb3Jt
U3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRS
ZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRHZW5lcmljQ3VlQVBJRW5hYmxlZCk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSk6IFVz
ZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFBs
dWdpbnNFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVyZW5jZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNQYWdlQm94VmlzaWJsZSk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcik6IFJlbW92ZWQgbG9jYWwuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldEF1ZGlvUmVzdWx0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVy
dHkuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IpOiBVc2UgcGFn
ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQpOiBVc2UgcmFuZ2Ut
YmFzZWQgZm9yIGxvb3AuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKTogVXNlIG1haW5GcmFtZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGV4dERpcmVjdGlvbik6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiBj
b25zdCk6CisgICAgICAgIFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyRGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKToKKyAgICAgICAgVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayk6
IENoYW5nZWQgbWFwIHRvIHN0b3JlIG9iamVjdHMgaW5zdGVhZCBvZiB2YWx1ZXMuCisgICAgICAg
IChXVFI6OmNhbGxUZXN0UnVubmVyQ2FsbGJhY2spOiBTaW1wbGlmeSBzaW5jZSBtYXAgaGFzIG9i
amVjdHMuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
clRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0QWx3YXlzQWNjZXB0Q29va2llcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMpOiBV
c2UgYXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxl
U2hlZXRFbmFibGVkKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24pOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpkZW55V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25Q
ZXJtaXNzaW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIE9wdGlvbmFsPGRvdWJs
ZT4gaW5zdGVhZCBvZiBib29sL2RvdWJsZQorICAgICAgICBwYWlycywgbGV0dGluZyB0aGUgSURM
IGJpbmRpbmdzIGRvIHRoZSB3b3JrIGZvciB1cy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKTogUmVtb3ZlZCBsb2Nh
bC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNEb2luZ01lZGlhQ2FwdHVyZSBjb25zdCk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3Jp
Z2luKTogUmVtb3ZlZCBsb2NhbHMuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9y
T3JpZ2luKTogREl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlldyk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnF1
ZXVlTG9hZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1M
U3RyaW5nKTogUmVtb3ZlZCBhIGxvY2FsLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1
ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVldWVO
b25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFJl
amVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cyk6CisgICAgICAgIFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGRM
b2dEb3dubG9hZENhbGxiYWNrcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCBjb25zdCk6IFVzZSBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEJsb2NrQWxsUGx1Z2lucyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6ZmFpbE5leHROZXdDb2RlQmxvY2spOiBVc2UgbWFpbkpTQ29udGV4
dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdDb21waWxlcyk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpuZXZlcklubGluZUZ1bmN0aW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xp
Y3lBZnRlckRlbGF5KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVM
aW1pdHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkRG93bmxv
YWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOiBV
c2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHQpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0Q2FsbGJhY2spOiBVc2UgbWFpbkpT
Q29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dlZE1lbnVBY3Rpb25z
KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLAorICAgICAgICBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppbnN0YWxsQ3VzdG9tTWVudUFjdGlv
bik6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFy
U3RhdGlzdGljc0RhdGFGb3JEb21haW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRh
YmFzZSk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlz
U3RhdGlzdGljc0VwaGVtZXJhbCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVy
bmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1
Z01vZGUpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljKTog
RGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
VmVyeVByZXZhbGVudFJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpp
c1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlSVRQRGF0YWJhc2UpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJl
ZCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbik6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1l
dHJ5Q2FsbGJhY2spOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Vw
ZGF0ZUNvb2tpZUJsb2NraW5nKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5KTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRp
c3RpY3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBVc2UgcG9zdE1l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RlbGV0ZUNvb2tp
ZXNGb3JIb3N0KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpoYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9u
KTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVy
KTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3Rh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6bWFrZURvbWFpbnNWYWx1ZSk6IEZhY3Rv
cmVkIG91dC4gVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNh
bGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayk6IFVzZSBtYWtlRG9t
YWluc1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpsb2FkZWRTdWJyZXNvdXJjZURv
bWFpbnMpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxE
aWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2spOiBVc2UgbWFrZURvbWFp
bnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNs
ZWFyTW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpy
ZW1vdmVNb2NrTWVkaWFEZXZpY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
cmVzZXRNb2NrTWVkaWFEZXZpY2VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjppc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCk6IFVzZQorICAgICAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6Y29ubmVjdE1vY2tHYW1lcGFkKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZERldGFpbHMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRCdXR0b25W
YWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxl
cyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAg
ICAgIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9w
ZW5QYW5lbEZpbGVzTWVkaWFJY29uKTogVXNlIG1haW5KU0NvbnRleHQgYW5kIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRp
YWxzKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRP
TUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyRE9NQ2FjaGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
Omhhc0RPTUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9v
bGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9tQ2FjaGVTaXplKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKTogVXNlIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1h
bmlmZXN0VGhlbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
aW5qZWN0VXNlclNjcmlwdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZv
clRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphZGRU
ZXN0S2V5VG9LZXljaGFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
blVwS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6a2V5RXhpc3Rz
SW5LZXljaGFpbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxi
YWNrQ2FsbHNDb3VudCk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJu
aW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREaXNtaXNzSmF2
YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KTogVXNlCisgICAgICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFib3J0TW9kYWwpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbik6IFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBZENsaWNrQXR0cmlidXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRB
ZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRl
c3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T2Zmc2NyZWVuQ2Fu
dmFzRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6Omhhc0FwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwQm91
bmRTZXNzaW9uKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFwcEJvdW5kRG9tYWlucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxl
bmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAgICAgIGFuZCB0b1dLLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpwb3N0TWVzc2FnZSk6IEFkZGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4g
QWxzbyBjaGFuZ2VkCisgICAgICAgIG92ZXJyaWRlUHJlZmVyZW5jZSBvdCBhIHN0YXRpYyBtZW1i
ZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXh0SW5wdXRDb250cm9s
bGVyOjpUZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6flRleHRJbnB1dENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2Jh
bE9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IERlbGV0ZWQuIFVz
ZSB0aGUgb25lIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChXVFI6OmNyZWF0ZUNvbXBv
c2l0aW9uSGlnaGxpZ2h0RGF0YSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3Ig
dGhlIGFib3ZlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9p
b3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoV1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVs
ZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMp
OiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9m
QXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb21wdXRlZFJvbGVTdHJpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24gY29uc3Qp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNj
cmlwdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0ZvY3VzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5k
c0ZvclJhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJv
d3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mVmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4gY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVl
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZG9jdW1lbnRVUkkpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbiBjb25z
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxh
cHNlZCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NpbmdsZUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNNdWx0aUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2UpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OkV2ZW50U2VuZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0
aW9uLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSk6
IERlbGV0ZWQuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21h
Yy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tOgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5hbWVkIGZyb20gbWFrZUFycmF5UmVmRm9yQXJyYXku
CisgICAgICAgIChXVFI6Om1ha2VKU09iamVjdCk6IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5h
bWVkIGZyb20gbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkuCisgICAgICAgIChXVFI6Om1ha2VW
YWx1ZVJlZkZvclZhbHVlKTogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICAoV1RSOjpz
ZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBV
c2UgdG9XVEZTdHJpbmcKKyAgICAgICAgYW5kIGFycmF5TGVuZ3RoLgorCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5h
bWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAo
V1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVsZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZy
b20gSlNCYXNpY3MuaCBpbnN0ZWFkLgorICAgICAgICAoV1RSOjpjb252ZXJ0VmVjdG9yVG9PYmpl
Y3RBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6Om1ha2VKU0FycmF5KTogUmVuYW1lZCBm
cm9tIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5LgorICAgICAgICAoV1RSOjpzZWxlY3RUZXh0
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nIGFuZCBh
cnJheUxlbmd0aC4KKyAgICAgICAgKFdUUjo6c2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVGb3JDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dIZWFkZXJzIGNvbnN0KTogVXNlIG1ha2VKU0FycmF5LgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEFycmF5QXR0cmlidXRl
VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBVc2UgY3JlYXRlSlNT
dHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9j
dW1lbnRVUkkpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlu
c3BlY3RvclRlc3RTdHViVVJMKTogUmVtb3ZlIGxvY2Fscy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmg6IEFkZGVkIHRvV0tTdHJpbmcgb3ZlcmxvYWQgdGhh
dCBjb252ZXJ0cyBmcm9tCisgICAgICAgIGEgSlNWYWx1ZVJlZiwgSlNTdHJpbmdSZWYsIG9yIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhbmQgdG9XSyBvdmVybG9hZCB0aGF0IGNvbnZlcnRzCisg
ICAgICAgIGZyb20gYSBjb25zdCBjaGFyKi4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVD
b250ZXh0Q29uZmlndXJhdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6
IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUxpdmVE
b2N1bWVudHNBZnRlclRlc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmNoZWNrRm9yV29ybGRMZWFrcyk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpjb250ZW50RXh0
ZW5zaW9uSlNPTlBhdGgpOiBVc2UgdG9TVEQuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
Ojpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdCk6IFVzZSB0b1dLLgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIHN0cmluZ1ZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdCk6IFVz
ZSBkaWN0aW9uYXJ5VmFsdWUgYW5kCisgICAgICAgIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOiBV
c2UgZGljdGlvbmFyeVZhbHVlLAorICAgICAgICBzdHJpbmdWYWx1ZSwgdWludDY0VmFsdWUsIGRv
dWJsZVZhbHVlLCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
aWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgdG9X
Sy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBVc2UgYXV0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24pOiBSZW1vdmVkIGxvY2FsLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogVXNl
IGF1dG8gYW5kIHRvV1RGU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2YgdG9TVEQuCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBP
cHRpb25hbCBpbnN0ZWFkIG9mIHBhaXJzCisgICAgICAgIG9mIGJvb2wgYW5kIGRvdWJsZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2VyTWVkaWFQZXJtaXNz
aW9uRm9yT3JpZ2luKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
ZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJ
bk5ldHdvcmtQcm9jZXNzKTogVXNlIHRvV0suCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6cG9zdFBhZ2VN
ZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpUZXN0SW5jb3Zh
dGlvbik6IFVzZSB0b1dURlN0cmluZy4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmNy
ZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOiBVc2UgYXV0byBhbmQgc2V0VmFsdWUuCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjppbnZva2UpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFu
ZCBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlIHBvc3RQYWdlTWVzc2FnZQorICAgICAgICBhbmQg
c3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3lu
Y2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlCisgICAgICAgIGRpY3Rpb25h
cnlWYWx1ZSwgYm9vbGVhblZhbHVlLCB2YWx1ZSwgc3RyaW5nVmFsdWUsIGRvdWJsZVZhbHVlLCBh
bmQKKyAgICAgICAgb3B0aW9uYWxEb3VibGVWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OnVpU2NyaXB0RGlkQ29tcGxldGUpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFuZCBzZXRW
YWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZEJlZ2luU3dpcGUpOiBVc2Ug
cG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6d2lsbEVuZFN3
aXBlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRFbmRTd2lwZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3ZlU3dpcGVTbmFw
c2hvdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6bm90aWZ5RG93bmxv
YWREb25lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0
YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVt
b3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxk
RG93bmdyYWRlUmVmZXJyZXIpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdEludm9jYXRpb246OmRpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRUb1NhbWVTaXRl
U3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
U2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
SW52b2NhdGlvbjo6ZGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QmxvY2tDb29r
aWVzRm9ySG9zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
U3RhdGlzdGljc0RlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlv
bjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldExhc3RTZWVuKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRNZXJnZVN0YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0RXhwaXJlZFN0YXRpc3RpYyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0SGFzSGFk
VXNlckludGVyYWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpk
aWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92ZUFsbFNlc3Npb25DcmVk
ZW50aWFscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QXBw
Qm91bmREb21haW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpwZXJm
b3JtQ3VzdG9tTWVudUFjdGlvbik6IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFk
ZGVkIEpTQmFzaWNzLmggdG8gRGljdGlvbmFyeUZ1bmN0aW9ucy5oIHRvIGFwcHJvcHJpYXRlIHRh
cmdldHMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV1RSOjpTY3JpcHRJdGVtOjpTY3JpcHRJdGVtKTogVXNlIHRvV0suCisgICAg
ICAgIChXVFI6OldvcmtRdWV1ZU1hbmFnZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29j
b2EuaDogTWFrZSBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbToKKyAgICAgICAgKFdUUjo6
VUlTY3JpcHRDb250cm9sbGVyQ29jb2E6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IFVzZSB0b1dURlN0
cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5oOiBNYXJrZWQgdGhlIGNsYXNzIGZpbmFsIGFuZCBtYWRlCisgICAgICAgIG1vc3QgZnVu
Y3Rpb25zIHByaXZhdGUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogRGVsZXRlZC4g
VXNlIHRoZSBvbmUgaW4gSlNCYXNpY3MuaC4KKyAgICAgICAgKFdUUjo6cGFyc2VNb2RpZmllckFy
cmF5KTogVXNlIHRoZSBuZXcgdG9XVEZTdHJpbmcgb3ZlcmxvYWQuCisgICAgICAgIChXVFI6OlVJ
U2NyaXB0Q29udHJvbGxlcklPUzo6dHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZCk6
IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94
eS5tbToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eSk6
IEluaXRpYWxpemUgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIChXVFI6OkV2ZW50
U2VuZGVyUHJveHk6OmtleURvd24pOiBVc2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaDogTWFya2VkIHRoZSBjbGFz
cyBmaW5hbCBhbmQgbWFkZQorICAgICAgICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCiAyMDIw
LTA5LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
cnVuLXdlYmtpdC10ZXN0cyBjb2RlIHRoYXQgc3RyaXBzIHRyYWlsaW5nIHNwYWNlcyB3aGVuIGNv
bXBhcmluZyBleHBlY3RlZC50eHQgZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCAxYTBjMTY3MDZiMmFlNDI2MGUzMmQyOTA0
NDliZjJkNjVjZmEzZGZhLi45ZTI0MGU1NTljYTQ1MjMzNzQ3OTg0YTZiYTkzNTE1NGFhY2NkN2Rk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2luY2x1
ZGUgIkpTQmFzaWNzLmgiCiAKIC8vIFN0YXRpYyBWYWx1ZSBHZXR0ZXJzCiAKQEAgLTQ3LDE1ICs0
OCw5IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFJvb3RFbGVtZW50Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPCiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250
ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlclN0ciA9
IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlciIpKTsKLSAgICAKLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlNDbGFzcygpOwot
ICAgIEpTVmFsdWVSZWYgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJPYmplY3QgPSBKU09iamVjdE1h
a2UoY29udGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVm
KTsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlclN0ci5nZXQoKSwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJPYmpl
Y3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShj
b250ZXh0LCAiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCBKU09iamVjdE1ha2UoY29udGV4dCwg
Y3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlzKSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGxv
Z0ZvY3VzRXZlbnRzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVm
KikKQEAgLTE1Miw5ICsxNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRQbGF0Zm9ybU5hbWVD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpcwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBwbGF0Zm9ybU5hbWUuZ2V0KCkpOwogfQogCi1K
U0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWlu
UHRyPEpTQ2xhc3NSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKCkK
IHsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CiAgICAg
ICAgIHsgImxvZ0ZvY3VzRXZlbnRzIiwgbG9nRm9jdXNFdmVudHNDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJsb2dWYWx1ZUNoYW5nZUV2ZW50cyIsIGxvZ1ZhbHVlQ2hhbmdlRXZlbnRzQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAibG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMiLCBsb2dT
Y3JvbGxpbmdTdGFydEV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkBAIC0xNjYsMjEgKzE2MSwxOCBA
QCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKICAgICAg
ICAgeyAiZW5hYmxlRW5oYW5jZWRBY2Nlc3NpYmlsaXR5IiwgZW5hYmxlRW5oYW5jZWRBY2Nlc3Np
YmlsaXR5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAgICB9OwotCi0g
ICAgc3RhdGljIEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBKU1N0YXRpY1ZhbHVlIHZhbHVlc1tdID0gewogICAgICAgICB7ICJmb2N1c2VkRWxl
bWVudCIsIGdldEZvY3VzZWRFbGVtZW50Q2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
cm9vdEVsZW1lbnQiLCBnZXRSb290RWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgImVuaGFuY2VkQWNjZXNzaWJpbGl0eUVuYWJsZWQiLCBnZXRFbmhhbmNlZEFjY2Vzc2liaWxp
dHlFbmFibGVkQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAicGxhdGZvcm1OYW1lIiwg
Z2V0UGxhdGZvcm1OYW1lQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwLCAw
IH0KICAgICB9OwotCi0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlv
biA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBzdGF0aWMg
Y29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xh
c3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCAwLCB2YWx1ZXMsIGZ1
bmN0aW9ucywKICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICAgIH07
Ci0KLSAgICByZXR1cm4gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1
cm4gYWRvcHQoSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbikpOwogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IDFkYzdkM2I1NjNhMTU0
ZjRjZTliZjdhMzAzMGM4YzVhNzY5N2YzOWEuLjhhMjg3YzQ4YjFkZjUzNmI0NzViNjE4NDE3YzI2
MTM1ZmIzODYxMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcigpOwogICAgIH5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwogCi0g
ICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBDb250cm9sbGVyIE1ldGhvZHMgLSBw
bGF0Zm9ybS1pbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMKICAgICBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IHJvb3RFbGVtZW50KCk7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKKyAgICBzdGF0
aWMgSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gY3JlYXRlSlNDbGFzcygpOwogCiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIEhXSU5FVkVOVEhPT0sgbV9mb2N1c0V2ZW50SG9vayB7IG51bGxwdHIgfTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKaW5k
ZXggMGU1YTUwZjZiOWQzY2U1Y2E3N2JhNDQ4Njg3YzAwOWNiYjE3NWQyMC4uOGVmODVlZWRmMDg0
ZDY3NjIyNzFjYWYyYzhmNDRhYjg1NDc5MjY3MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCBzdGF0aWMg
SlNWYWx1ZVJlZiB1aUVsZW1lbnRDb3VudEZvclNlYXJjaFByZWRpY2F0ZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LAogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHN0YXJ0RWxlbWVu
dCA9IG51bGxwdHI7CiAgICAgYm9vbCBpc0RpcmVjdGlvbk5leHQgPSB0cnVlOwogICAgIEpTVmFs
dWVSZWYgc2VhcmNoS2V5ID0gbnVsbHB0cjsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
c2VhcmNoVGV4dCA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNlYXJj
aFRleHQ7CiAgICAgYm9vbCB2aXNpYmxlT25seSA9IGZhbHNlOwogICAgIGJvb2wgaW1tZWRpYXRl
RGVzY2VuZGFudHNPbmx5ID0gZmFsc2U7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gNSAmJiBh
cmd1bWVudENvdW50IDw9IDYpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Jp
bmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbSBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQppbmRleCBlY2U1MWVh
MzlhNTE2ODM1NGJkNTY5NDYzNTkwODZkOTAyMmVhMTlkLi4xNGM2MjcwZjgyMzFkYzBmMjZhMDVl
Njk1ZGE4NDdiZGY4ZTQ4YzhlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9CaW5k
aW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCkBAIC0xLDQgKzEs
NCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzMSwxMCArNDMxLDEwIEBAIHN1
YiBfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IKIHsKICAgICBteSAoJHNlbGYsICR0eXBlLCAkYXJn
dW1lbnROYW1lKSA9IEBfOwogCi0gICAgcmV0dXJuICJKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4o
Y29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAk
dHlwZS0+aXNOdWxsYWJsZTsKKyAgICByZXR1cm4gInRvT3B0aW9uYWxCb29sKGNvbnRleHQsICRh
cmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHR5cGUtPmlzTnVs
bGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5h
bWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuICIkYXJndW1lbnRO
YW1lIiBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKLSAgICByZXR1cm4gImFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikpIiBpZiAkJHNl
bGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJjcmVh
dGVKU1N0cmluZyhjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0
b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOwogICAgIHJldHVybiAiSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0t
PklzUHJpbWl0aXZlVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuICJ0byIgLiBfaW1wbGVtZW50YXRp
b25DbGFzc05hbWUoJHR5cGUpIC4gIihjb250ZXh0LCAkYXJndW1lbnROYW1lKSI7CiB9CkBAIC00
NzIsMTEgKzQ3MiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBteSAoJHNlbGYsICRy
ZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAiSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1bmRlZmluZWQiOwot
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lv
bn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5cGUtPmlz
TnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufSki
IGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlwZS0+aXNOdWxs
YWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAke2V4cHJlc3Np
b259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAiJHtl
eHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7CiAgICAgcmV0dXJu
ICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJCRzZWxme2Nv
ZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwotICAgIHJldHVybiAi
SlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKKyAgICBy
ZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIgaWYgJCRzZWxm
e2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwogICAgIHJldHVybiAi
dG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwogfQogCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvR0NDb250cm9sbGVyLmNwcAppbmRleCA0YTM3YmYzYTEzZGE0Y2FlZWE0MGEwY2Y4
YTcwOWZlNThkMzRlYTRjLi5lZDJjNmMxOWU1MzNlZTBmMmZlNDk4ZjNlNTUzMDY0NDcwOGNiMzBk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNzIgKzI5LDQ5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+Ci0KLUdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKCkKLXsKLX0KLQot
R0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKCkKLXsKLX0KKyNpbXBvcnQgIkpTQmFzaWNzLmgi
CiAKIC8vIFN0YXRpYyBGdW5jdGlvbnMKIAogc3RhdGljIEpTVmFsdWVSZWYgY29sbGVjdENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBHQ0NvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3QoKTsKKyAgICBhdXRvJiBjb250
cm9sbGVyID0gKnN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0KCk7CiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBjb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7
Ci0gICAgYm9vbCB3YWl0VW50aWxEb25lID0gZmFsc2U7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQg
PiAwKQotICAgICAgICB3YWl0VW50aWxEb25lID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMF0pOwotCi0gICAgR0NDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBj
b250cm9sbGVyLT5jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVudGlsRG9uZSk7Ci0KKyAg
ICBhdXRvJiBjb250cm9sbGVyID0gKnN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgYm9vbCB3YWl0VW50aWxEb25lID0gYXJndW1l
bnRDb3VudCA+IDAgJiYgSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pOwor
ICAgIGNvbnRyb2xsZXIuY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKHdhaXRVbnRpbERvbmUpOwog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpT
VmFsdWVSZWYgZ2V0SlNPYmplY3RDb3VudENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKLSAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxHQ0Nv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIHNpemVfdCBq
c09iamVjdENvdW50ID0gY29udHJvbGxlci0+Z2V0SlNPYmplY3RDb3VudCgpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGpzT2JqZWN0Q291bnQpOworICAgIGF1dG8m
IGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwg
Y29udHJvbGxlci5nZXRKU09iamVjdENvdW50KCkpOwogfQogCiAvLyBPYmplY3QgQ3JlYXRpb24K
IAotdm9pZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9p
ZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7
Ci0gICAgYXV0byBnY0NvbnRyb2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiR0NDb250cm9sbGVyIikpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdl
dEpTQ2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGdjQ29udHJvbGxlck9iamVjdCA9IEpTT2JqZWN0
TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NS
ZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIGdj
Q29udHJvbGxlclN0ci5nZXQoKSwgZ2NDb250cm9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24p
OworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgIkdDQ29udHJvbGxl
ciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCksIHRoaXMpKTsK
IH0KIAotSlNDbGFzc1JlZiBHQ0NvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQorSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4gR0NDb250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKCkKIHsKLSAgICBzdGF0aWMg
SlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CiAgICAgICAgIHsgImNvbGxlY3Qi
LCBjb2xsZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiY29sbGVjdE9uQWx0ZXJuYXRl
VGhyZWFkIiwgY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAiZ2V0SlNPYmplY3RDb3VudCIsIGdldEpTT2JqZWN0Q291bnRDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07Ci0KLSAgICBzdGF0aWMgSlNDbGFzc0RlZmlu
aXRpb24gY2xhc3NEZWZpbml0aW9uID0gewotICAgICAgICAwLCBrSlNDbGFzc0F0dHJpYnV0ZU5v
bmUsICJHQ0NvbnRyb2xsZXIiLCAwLCAwLCBzdGF0aWNGdW5jdGlvbnMsCisgICAgc3RhdGljIGNv
bnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtKU0NsYXNz
QXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIGZ1bmN0aW9ucywKICAgICAgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICAgIH07Ci0KLSAgICByZXR1cm4gSlND
bGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gYWRvcHQoSlNDbGFzc0Ny
ZWF0ZSgmZGVmaW5pdGlvbikpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
R0NDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaAppbmRl
eCA2NDI0Mzg0ZGY1MzBlOGMxZmRhZThmYjYxMzExYmYwYWRjNGE2YThmLi4zN2FhNDZhNzc0Y2Uz
ZTcwYjg3ODlkNDQzZjFlNDE4MTRhYzU4ZjVjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9HQ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xs
ZXIuaApAQCAtMjYsMTkgKzI2LDE1IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgR0ND
b250cm9sbGVyX2gKLSNkZWZpbmUgR0NDb250cm9sbGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKIGNsYXNz
IEdDQ29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgR0NDb250cm9sbGVyKCk7Ci0gICAgfkdDQ29udHJvbGxlcigpOwotCi0gICAgdm9pZCBtYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmpl
Y3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZik7CiAKICAgICAvLyBDb250cm9sbGVyIE1ldGhvZHMgLSBwbGF0ZnJvbSBpbmRl
cGVuZGFudCBpbXBsZW1lbnRhdGlvbnMKICAgICB2b2lkIGNvbGxlY3QoKSBjb25zdDsKQEAgLTQ2
LDcgKzQyLDUgQEAgcHVibGljOgogICAgIHNpemVfdCBnZXRKU09iamVjdENvdW50KCkgY29uc3Q7
CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOworICAgIHN0
YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7CiB9OwotCi0jZW5k
aWYgLy8gR0NDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKaW5kZXgg
NWU1MzVhZjFkZWFkODQyZDJlZjRmNWY3NjYwMmM4M2E5NTBiNzY1Mi4uMzdmNjkxY2I3OTZiNTYz
OTI2MjgwNGVlM2Y0MDFjYWJkYWU4ZjBlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5j
cHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UnVubmVyLmgiCiAKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0
U3VwcG9ydC5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZUl0
ZW0uaCIKQEAgLTM4LDEwICszOSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcElu
bGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5QnVmZmVyVmlldy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ1Rlc3RSdW5uZXJVdGlscy5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2Jq
ZWN0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1ZNSW5saW5lcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRp
b24uaD4KQEAgLTQ4OSw3ICs0ODcsNiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkaXNwbGF5Q2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKUwogCiBzdGF0
aWMgSlNWYWx1ZVJlZiBkaXNwbGF5QW5kVHJhY2tSZXBhaW50c0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRh
dGlvbgogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5kaXNw
bGF5QW5kVHJhY2tSZXBhaW50cygpOwogCkBAIC00OTgsMTIgKzQ5NSwxMCBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBkaXNwbGF5QW5kVHJhY2tSZXBhaW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVu
dGF0aW9uCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNv
bnRleHQsIGFyZ3VtZW50c1swXSk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAg
ICAgYXV0byBlbmNvZGVkSG9zdE5hbWUgPSBjb250cm9sbGVyLT5jb3B5RW5jb2RlZEhvc3ROYW1l
KG5hbWUuZ2V0KCkpOwpAQCAtNTEyLDIyICs1MDcsMTIgQEAgc3RhdGljIEpTVmFsdWVSZWYgZW5j
b2RlSG9zdE5hbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3QKIAogc3RhdGljIEpTVmFsdWVSZWYgZXhlY0NvbW1hbmRDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCiB7Ci0gICAgLy8gSGFzIE1hYyAmIFdpbmRvd3MgaW1wbGVtZW50YXRp
b25zLgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byBuYW1lID0gYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7Ci0KKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNv
bnRleHQsIGFyZ3VtZW50c1swXSk7CiAgICAgLy8gSWdub3JpbmcgdGhlIHNlY29uZCBwYXJhbWV0
ZXIgKHVzZXJJbnRlcmZhY2UpLCBhcyB0aGlzIGNvbW1hbmQgZW11bGF0ZXMgYSBtYW51YWwgYWN0
aW9uLgotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHZhbHVlOwotICAgIGlmIChhcmd1
bWVudENvdW50ID49IDMpIHsKLSAgICAgICAgdmFsdWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZhbHVlID0gYWRvcHQoSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLQorICAgIGF1dG8gdmFsdWUgPSBXVFI6OmNyZWF0
ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50Q291bnQgPiAyID8gYXJndW1lbnRzWzJdIDogbnVs
bHB0cik7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+
ZXhlY0NvbW1hbmQobmFtZS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwpAQCAtNTQxLDExICs1MjYsOCBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBmaW5kU3RyaW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byB0
YXJnZXQgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
ZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIEpTT2JqZWN0UmVm
IG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRp
b24pOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byB0YXJnZXQgPSBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgYXV0byBvcHRpb25zID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgbnVsbHB0cik7CiAKICAgICBU
ZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihj
b250ZXh0LCBjb250cm9sbGVyLT5maW5kU3RyaW5nKGNvbnRleHQsIHRhcmdldC5nZXQoKSwgb3B0
aW9ucykpOwpAQCAtNTY2LDggKzU0OCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGlzQ29tbWFuZEVu
YWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuCiAgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKQEAgLTU3OSwxMCAr
NTYwLDggQEAgc3RhdGljIEpTVmFsdWVSZWYgb3ZlcnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGYKICAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDIpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAg
IGF1dG8ga2V5ID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNb
MF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgYXV0byB2YWx1
ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8ga2V5ID0gV1RSOjpj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOworICAgIGF1dG8gdmFsdWUgPSBX
VFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1sxXSk7CiAKICAgICAvLyBTaG91
bGQgdXNlIGA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9
dHJ1ZSBdIC0tPmAgaW5zdGVhZC4KICAgICBSRUxFQVNFX0FTU0VSVCghSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXkuZ2V0KCksICJXZWJLaXRVc2VzQmFja0ZvcndhcmRDYWNoZVByZWZl
cmVuY2VLZXkiKSk7CkBAIC02NjIsMTUgKzY0MSwxMCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1
ZUxvYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIHVybCA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBhdXRvIHVybCA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICBBU1NFUlQo
ISpleGNlcHRpb24pOwogCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRhcmdldDsKLSAg
ICBpZiAoYXJndW1lbnRDb3VudCA+PSAyKSB7Ci0gICAgICAgIHRhcmdldCA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKLSAgICAg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGFyZ2V0ID0gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKyAgICBhdXRvIHRhcmdldCA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDEgPyBhcmd1bWVu
dHNbMV0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5xdWV1ZUxvYWQodXJsLmdldCgpLCB0YXJnZXQuZ2V0KCkpOwpAQCAtNjkyLDcg
KzY2Niw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZEhUTUxTdHJpbmdDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYKICAgICAgICAgYmFzZVVSTCA9IGFkb3B0
KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsK
ICAgICAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKICAgICB9IGVsc2UKLSAgICAgICAgYmFzZVVS
TCA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisgICAgICAgIGJh
c2VVUkwgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAKQEAgLTIwNDUsMzQgKzIwMTksMjQgQEAgc3RhdGljIEpTVmFsdWVSZWYgcnVuVUlT
Y3JpcHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWMK
IAogc3RhdGljIHZvaWQgdGVzdFJ1bm5lck9iamVjdEZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVj
dCkKIHsKLSAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5kZXJlZigp
OworICAgIHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0
KSktPmRlcmVmKCk7CiB9CiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12b2lkIFRlc3RSdW5uZXI6
Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRv
d09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXN0UnVubmVyOjptYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gdGVzdFJ1bm5lclN0
ciA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXN0UnVubmVyIikpOwog
ICAgIHJlZigpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpTQ2xhc3MoKTsKLSAg
ICBKU1ZhbHVlUmVmIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QgPSBKU09iamVjdE1ha2UoY29u
dGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVmKTsKLQot
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCB0ZXN0UnVubmVy
U3RyLmdldCgpLCBsYXlvdXRUZXN0Q29udG9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOwor
ICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRlc3RSdW5uZXIiLCBK
U09iamVjdE1ha2UoY29udGV4dCwgY3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlzKSk7CiB9CiAK
LUpTQ2xhc3NSZWYgVGVzdFJ1bm5lcjo6Z2V0SlNDbGFzcygpCitKU1JldGFpblB0cjxKU0NsYXNz
UmVmPiBUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNW
YWx1ZSogc3RhdGljVmFsdWVzID0gVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCk7Ci0gICAgc3Rh
dGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9IFRlc3RSdW5uZXI6OnN0YXRp
Y0Z1bmN0aW9ucygpOwotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRp
b24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIlRlc3RSdW5uZXIiLCAw
LCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBzdGF0aWMgY29uc3QgSlNDbGFz
c0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVO
b25lLCAiVGVzdFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcygpLCBzdGF0aWNGdW5jdGlvbnMoKSwK
ICAgICAgICAgMCwgdGVzdFJ1bm5lck9iamVjdEZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwCiAgICAgfTsKLQotICAgIHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRp
b24pOworICAgIHJldHVybiBhZG9wdChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKSk7CiB9CiAK
IC8vIENvbnN0YW50cwpAQCAtMjEwNyw5ICsyMDcxLDkgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0
UkVOREVSX1RSRUVfU0hPV19MQVlFUl9GUkFHTUVOVFMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2IKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgMzIpOwogfQogCi1KU1N0
YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQorY29uc3QgSlNTdGF0aWNWYWx1
ZSogVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1
ZSBzdGF0aWNWYWx1ZXNbXSA9IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTU3RhdGljVmFsdWUg
dmFsdWVzW10gPSB7CiAgICAgICAgIHsgImRpZENhbmNlbENsaWVudFJlZGlyZWN0IiwgZ2V0RGlk
Q2FuY2VsQ2xpZW50UmVkaXJlY3QsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAidGltZW91dCIsIGdl
dFRpbWVvdXRDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJnbG9iYWxGbGFnIiwgZ2V0
R2xvYmFsRmxhZ0NhbGxiYWNrLCBzZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlTm9uZSB9LApAQCAtMjEyNywxMiArMjA5MSwxMiBAQCBKU1N0YXRpY1ZhbHVlKiBUZXN0
UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogICAgICAgICB7ICJSRU5ERVJfVFJFRV9TSE9XX0xBWUVS
X0ZSQUdNRU5UUyIsIGdldFJFTkRFUl9UUkVFX1NIT1dfTEFZRVJfRlJBR01FTlRTLCAwLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IH0sCiAgICAgICAgIHsgMCwgMCwgMCwgMCB9CiAgICAgfTsKLSAgICByZXR1cm4gc3RhdGljVmFs
dWVzOworICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKLUpTU3RhdGljRnVuY3Rpb24qIFRlc3RSdW5u
ZXI6OnN0YXRpY0Z1bmN0aW9ucygpCitjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBUZXN0UnVubmVy
OjpzdGF0aWNGdW5jdGlvbnMoKQogewotICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRp
Y0Z1bmN0aW9uc1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNGdW5jdGlvbiBm
dW5jdGlvbnNbXSA9IHsKICAgICAgICAgeyAiYWJvcnRNb2RhbCIsIGFib3J0TW9kYWxDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJhZGREaXNhbGxvd2VkVVJMIiwgYWRkRGlzYWxsb3dlZFVS
TENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZFVSTFRvUmVkaXJlY3QiLCBhZGRVUkxU
b1JlZGlyZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKQEAgLTIyOTcsNyArMjI2MSw3IEBAIEpTU3RhdGlj
RnVuY3Rpb24qIFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsgMCwgMCwg
MCB9CiAgICAgfTsKIAotICAgIHJldHVybiBzdGF0aWNGdW5jdGlvbnM7CisgICAgcmV0dXJuIGZ1
bmN0aW9uczsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKEpTU3Ry
aW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCkBAIC0yMzQyLDE0ICsyMzA2LDEx
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6aWdub3JlTGVnYWN5V2ViTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKCkKIAogdm9pZCBUZXN0UnVubmVyOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZp
cmVkKCkKIHsKLSAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gIkZBSUw6IFRpbWVkIG91dCB3YWl0
aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIjsKLSAgICBmcHJpbnRmKHRlc3RSZXN1
bHQsICIlcyIsIG1lc3NhZ2UpOworICAgIGZwdXRzKCJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBm
b3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcbiIsIHRlc3RSZXN1bHQpOwogCi0gICAgYXV0byBh
Y2N1bXVsYXRlZExvZ3MgPSBnZXRBbmRSZXNldEFjY3VtdWxhdGVkTG9ncygpOwotICAgIGlmICgh
YWNjdW11bGF0ZWRMb2dzLmlzRW1wdHkoKSkgewotICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdl
ID0gIkxvZ3MgYWNjdW11bGF0ZWQgZHVyaW5nIHRlc3QgcnVuOlxuIjsKLSAgICAgICAgZnByaW50
Zih0ZXN0UmVzdWx0LCAiJXMlc1xuIiwgbWVzc2FnZSwgYWNjdW11bGF0ZWRMb2dzLnV0ZjgoKS5k
YXRhKCkpOwotICAgIH0KKyAgICBhdXRvIGxvZ3MgPSBnZXRBbmRSZXNldEFjY3VtdWxhdGVkTG9n
cygpOworICAgIGlmICghbG9ncy5pc0VtcHR5KCkpCisgICAgICAgIGZwcmludGYodGVzdFJlc3Vs
dCwgIkxvZ3MgYWNjdW11bGF0ZWQgZHVyaW5nIHRlc3QgcnVuOlxuJXNcbiIsIGxvZ3MudXRmOCgp
LmRhdGEoKSk7CiAKICAgICBub3RpZnlEb25lKCk7CiB9CkBAIC0yNDAzLDI0ICsyMzY0LDI1IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjdW1tdWxhdGVMb2dzRm9yQ2hhbm5lbChKU1N0cmluZ1Jl
ZiBjaGFubmVsKQogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TG9nQ2hhbm5lbFRvQWNjdW11
bGF0ZSh7IGJ1ZmZlci5nZXQoKSB9KTsKIH0KIAotdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWdu
ZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFwOwordXNpbmcgQ2FsbGJhY2tNYXAgPSBXVEY6Okhh
c2hNYXA8dW5zaWduZWQsIEpTT2JqZWN0UmVmPjsKIHN0YXRpYyBDYWxsYmFja01hcCYgY2FsbGJh
Y2tNYXAoKQogewogICAgIHN0YXRpYyBDYWxsYmFja01hcCYgbWFwID0gKm5ldyBDYWxsYmFja01h
cDsKICAgICByZXR1cm4gbWFwOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmNhY2hlVGVzdFJ1bm5l
ckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQordm9pZCBUZXN0
UnVubmVyOjpjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJl
ZiBjYWxsYmFja1ZhbHVlKQogewotICAgIGlmICghY2FsbGJhY2spCisgICAgYXV0byBjb250ZXh0
ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgaWYgKCFjYWxsYmFja1ZhbHVlIHx8ICFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgY2FsbGJhY2tWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKKyAg
ICBhdXRvIGNhbGxiYWNrID0gKEpTT2JqZWN0UmVmKWNhbGxiYWNrVmFsdWU7CiAKICAgICBpZiAo
Y2FsbGJhY2tNYXAoKS5jb250YWlucyhpbmRleCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJGQUlMOiBUcmllZCB0byBpbnN0YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIgY2FsbGJhY2sgZm9y
IHRoZSBzYW1lIGV2ZW50IChpZCAlZClcbiIsIGluZGV4KTsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJGQUlMOiBUcmllZCB0byBpbnN0YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIgY2FsbGJhY2sg
Zm9yIHRoZSBzYW1lIGV2ZW50IChpZCAldSlcbiIsIGluZGV4KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7
CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFw
KCkuYWRkKGluZGV4LCBjYWxsYmFjayk7CiB9CkBAIC0yNDMwLDIyICsyMzkyLDE4IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6Y2FsbFRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvCiAgICAgaWYgKCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluRnJh
bWVKU0NvbnRleHQoKTsKLSAgICBpZiAoSlNPYmplY3RSZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSwgMCkpIHsKLSAgICAgICAg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaywgSlNDb250ZXh0R2V0R2xv
YmFsT2JqZWN0KGNvbnRleHQpLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIDApOworICAgIGF1
dG8gY29udGV4dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOworICAgIGlmIChhdXRvIGNhbGxiYWNr
ID0gY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSkgeworICAgICAgICBKU09iamVjdENhbGxBc0Z1
bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4
dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7CiAgICAgICAgIEpTVmFsdWVV
bnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogICAgIH0KIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MoKQogewotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0ZXIgOiBjYWxsYmFj
a01hcCgpKSB7Ci0gICAgICAgIGlmIChKU09iamVjdFJlZiBjYWxsYmFjayA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBpdGVyLnZhbHVlLCAwKSkKLSAgICAgICAgICAgIEpTVmFsdWVVbnByb3Rl
Y3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIH0KLQorICAgIGF1dG8gY29udGV4dCA9IG1haW5G
cmFtZUpTQ29udGV4dCgpOworICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBjYWxsYmFja01hcCgp
LnZhbHVlcygpKQorICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsK
ICAgICBjYWxsYmFja01hcCgpLmNsZWFyKCk7CiB9CiAKQEAgLTI1MDgsMTYgKzI0NjYsMTEgQEAg
dm9pZCBUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxlcyhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogewogICAgIGlmICghSlNWYWx1ZUlzQXJyYXkoY29udGV4
dCwgZmlsZXNWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0UmVmIGZpbGVz
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGZpbGVzVmFsdWUsIG51bGxwdHIpOwotICAgIHN0
YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGZpbGVzTGVuZ3RoVmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIGZpbGVzLCBsZW5ndGhQcm9wZXJ0eS5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgZmlsZXNMZW5ndGhWYWx1
ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGZpbGVzID0gKEpTT2JqZWN0UmVmKWZpbGVz
VmFsdWU7CisgICAgYXV0byBmaWxlc0xlbmd0aCA9IFdUUjo6YXJyYXlMZW5ndGgoY29udGV4dCwg
ZmlsZXMpOwogCiAgICAgbV9vcGVuUGFuZWxGaWxlcy5jbGVhcigpOwotICAgIGF1dG8gZmlsZXNM
ZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBmaWxl
c0xlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
c0xlbmd0aDsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbGVzTGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgSlNWYWx1ZVJlZiBmaWxlVmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBmaWxlcywgaSwgbnVsbHB0cik7CiAgICAgICAgIGlmICghSlNW
YWx1ZUlzU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAppbmRleCAxNjcxMjA1OGExMGNlOTg5YTNjOGQ0M2Q2
NDRmOWE5ZTMwMGQ0MGRlLi5lODU3YWE0ZGNkYTI5N2M0ZmUzZTc2YWM3ZTllYWYwNWEwOWM4MGIw
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGNsZWFudXAoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIHZv
aWQgYWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpOwogICAgIGNvbnN0IHN0ZDo6c2V0
PHN0ZDo6c3RyaW5nPiYgYWxsb3dlZEhvc3RzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd2VkSG9z
dHM7IH0KQEAgLTQ5Nyw3ICs0OTcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dmVjdG9yPGNoYXI+
IG1fb3BlblBhbmVsRmlsZXNNZWRpYUljb247CiAjZW5kaWYKIAotICAgIHN0YXRpYyBKU0NsYXNz
UmVmIGdldEpTQ2xhc3MoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVz
KCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOworICAg
IHN0YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7CisgICAgc3Rh
dGljIGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlcygpOworICAgIHN0YXRpYyBjb25z
dCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKIH07CmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0gYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KaW5k
ZXggNjFlMDFmNWVkNzY3NWE4MzBiYTZmMzhmOGVjZjU4NDBmYmM4MzljYi4uYzhiZWRhNWI2MzNk
M2FiNDM0ZDUxMzU3NmI3NDdjNDYyNmY3MzBhOCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbQpAQCAtMzAsNiArMzAs
NyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogI2ltcG9ydCAiQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJIVE1MVmlld1ByaXZhdGUuaD4KQEAgLTE1NSw1ICsxNTYsNSBAQCBib29sIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkKCkKIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5h
bWUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJpb3MiKTsKIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50SU9TLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRJT1MubW0KaW5kZXggZTNjOTA5ZDZkZDI3MDM5MjgzZWFjY2QzMmFlNDA5MjZjZThhOWU2NC4u
MjI2NTcwMzMzYzgzYzc4ZmFlYzk2ZWEzMDViNTlhODQzYThjMThjMCAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KQEAg
LTExMiwxMSArMTEyLDYgQEAgQGludGVyZmFjZSBOU09iamVjdCAoV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJQcml2YXRlKQogLSAoQ0dQYXRoUmVmKV9hY2Nlc3NpYmlsaXR5UGF0aDsKIEBl
bmQKIAotc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCkKLXsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhudWxs
cHRyLCAwKSk7Ci19Ci0KIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY29uY2F0ZW5h
dGVBdHRyaWJ1dGVBbmRWYWx1ZShOU1N0cmluZyAqYXR0cmlidXRlLCBOU1N0cmluZyAqdmFsdWUp
CiB7CiAgICAgVmVjdG9yPFVuaUNoYXI+IGJ1ZmZlcihbYXR0cmlidXRlIGxlbmd0aF0pOwpAQCAt
NTU4LDcgKzU1Myw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAgICAgaWQgdGV4dE1h
cmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKICAgICBpZiAo
IXRleHRNYXJrZXJzIHx8ICFbdGV4dE1hcmtlcnMgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFz
c11dKQotICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgICAgICByZXR1
cm4gY3JlYXRlSlNTdHJpbmcoKTsKICAgICByZXR1cm4gW1ttX2VsZW1lbnQgc3RyaW5nRm9yVGV4
dE1hcmtlcnM6dGV4dE1hcmtlcnNdIGNyZWF0ZUpTU3RyaW5nUmVmXTsKIH0KIApAQCAtNjgxLDIy
ICs2NzYsMjIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXREb2N1bWVudExpbmtz
KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWwKIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVu
dHMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ2hpbGRyZW4oKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5n
QXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQpAQCAtNzE2LDcgKzcxMSw3IEBA
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdB
dHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlCiAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoYXR0cmlidXRlLCAiQVhUZXh0dWFsQ29udGV4dCIpKQogICAgICAgICByZXR1cm4gW1tt
X2VsZW1lbnQgYWNjZXNzaWJpbGl0eVRleHR1YWxDb250ZXh0XSBjcmVhdGVKU1N0cmluZ1JlZl07
CiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNz
QWN0aW9uU3VwcG9ydGVkKCkKQEAgLTc1NSwxNyArNzUwLDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1l
dGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSgpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUo
KQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0
ZUpTU3RyaW5nKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFn
ZVVwKCkKQEAgLTc4OSwxNyArNzg0LDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2Nyb2xsUGFnZVJpZ2h0KCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmlu
ZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnRpdGxlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQpAQCAtODA5LDcgKzgw
NCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
ZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKQEAgLTgx
OSw3ICs4MTQsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nVmFsdWUoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3Ry
aW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCgpIGNvbnN0CkBAIC04
NDksNyArODQ0LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRWYWx1ZShKU1N0
cmluZ1JlZiB2YWx1ZVRleHQpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9uKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1w
dHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkKQEAgLTkwOCw3
ICs5MDMsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFJc0dyYWJiZWQoKSBj
b25zdAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bGluZUZvckluZGV4KGludCBpbmRleCkKQEAgLTkxOCwzNyArOTEzLDM3IEBA
IGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50IGluZGV4KQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9y
UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ29sdW1uSGVhZGVycygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpT
U3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlK
U1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRl
SlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNP
ZkhlYWRlcigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1
cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJv
d0NvdW50KCkKQEAgLTEwMDIsNyArOTk3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQgeSkKIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2ZVRlY2hub2xv
Z3lTaW11bGF0ZWRGb2N1cygpCkBAIC0xMDM2LDcgKzEwMzEsNyBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnByZXNzKCkKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewogICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNs
ZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CkBAIC0xMDQ2LDEyICsxMDQxLDEyIEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50
RW5jb2RpbmcoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0
dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJl
ZiBmdW5jdGlvbkNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5Q29tbW9uTWFjLmgKaW5kZXggMzg1MGI0MTQ0NjNlMDE1YzY3ZDU2ZWYwNGE1OTM4
Yzk5MWM0N2VkOC4uMTViZjUxZjg0ZDNlODE4MWMwMmNmNjYzYzc1NTM5ZGMyOGFkOWRkNCAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5o
CkBAIC00MSw0ICs0MSw0IEBAIEBpbnRlcmZhY2UgTlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRp
b25zKQogLSAoSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KWNyZWF0ZUpTU3RyaW5nUmVmOwogQGVu
ZAogCi1leHRlcm4gTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmVmLCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50ICpzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJlY3Rpb25OZXh0LCB1bnNpZ25lZCByZXN1bHRz
TGltaXQsIEpTVmFsdWVSZWYgc2VhcmNoS2V5LCBKU1N0cmluZ1JlZiBzZWFyY2hUZXh0LCBib29s
IHZpc2libGVPbmx5LCBib29sIGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSk7CitOU0RpY3Rpb25h
cnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJp
YShKU0NvbnRleHRSZWYsIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9v
bCBpc0RpcmVjdGlvbk5leHQsIHVuc2lnbmVkIHJlc3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFy
Y2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1t
ZWRpYXRlRGVzY2VuZGFudHNPbmx5KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KaW5kZXggNzk0MDczOGEzMzkwZWIyNzBhNjA4YmZk
MDU5ZTE3MmFmNGI3OTA5Mi4uMDMwNjdlMmQwODkyMTRmYmU4NDY2N2IyODI0ZjhjZTMxNDgwZjk4
NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21t
b25NYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21t
b25NYWMubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAi
QWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogCiBAaW1wbGVtZW50YXRpb24gTlNT
dHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQpAQCAtNTYsNyArNTcsNiBAQCBOU0RpY3Rpb25h
cnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJp
YShKU0NvbnRleHRSZQogICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6
c3RhcnRFbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVudCgpIGZvcktleTpAIkFYU3RhcnRFbGVtZW50
Il07CiAKICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6KGlzRGlyZWN0aW9u
TmV4dCkgPyBAIkFYRGlyZWN0aW9uTmV4dCIgOiBAIkFYRGlyZWN0aW9uUHJldmlvdXMiIGZvcktl
eTpAIkFYRGlyZWN0aW9uIl07Ci0KICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmpl
Y3Q6QChyZXN1bHRzTGltaXQpIGZvcktleTpAIkFYUmVzdWx0c0xpbWl0Il07CiAKICAgICBpZiAo
c2VhcmNoS2V5KSB7CkBAIC02NiwxNCArNjYsOCBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRp
Y2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQog
ICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0cmluZykKICAgICAgICAgICAgICAgICBzZWFyY2hL
ZXlQYXJhbWV0ZXIgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0
cmluZy5nZXQoKV07CiAgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQs
IHNlYXJjaEtleSkpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hL
ZXlBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hL
ZXlBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAg
ICAgaWYgKHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRl
eHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaEtl
eUFycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAK
KyAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gKEpTT2JqZWN0UmVmKXNl
YXJjaEtleTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gV1RS
OjphcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hLZXlBcnJheSk7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoS2V5QXJyYXlMZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoS2V5VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgaSwgbnVsbHB0cik7CiAgICAgICAgICAg
ICAgICAgSlNTdHJpbmdSZWYgc2VhcmNoS2V5U3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBzZWFyY2hLZXlWYWx1ZSwgbnVsbHB0cik7CkBAIC04OCwxMiArODIsMTEgQEAgTlNE
aWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNo
Q3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICAgICAgaWYgKHNlYXJjaEtleVBhcmFtZXRlcikKICAg
ICAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpzZWFyY2hLZXlQYXJh
bWV0ZXIgZm9yS2V5OkAiQVhTZWFyY2hLZXkiXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoc2Vh
cmNoVGV4dCAmJiBKU1N0cmluZ0dldExlbmd0aChzZWFyY2hUZXh0KSkKICAgICAgICAgW3BhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdS
ZWY6c2VhcmNoVGV4dF0gZm9yS2V5OkAiQVhTZWFyY2hUZXh0Il07Ci0gICAgCisKICAgICBbcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QCh2aXNpYmxlT25seSkgZm9yS2V5OkAiQVhW
aXNpYmxlT25seSJdOwotICAgIAogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVj
dDpAKGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSkgZm9yS2V5OkAiQVhJbW1lZGlhdGVEZXNjZW5k
YW50c09ubHkiXTsKICAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyaXplZEF0dHJpYnV0ZTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ck1hYy5tbQppbmRleCA1MWYwMzFkZGJiY2Q4NTNhZGI0ZmU3MTQ3ZDg1YTUyNTc2YTAwNzhiLi45
NWEwNmYzYTQwYTA0ODllM2UwYjBiMzE2NTc0YzNmY2JmMmVjZjExIDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBA
IC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1w
b3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5oIgorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgPEFwcEtp
dC9OU0NvbG9yLmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CkBAIC0xNTgsNSArMTU5LDUgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5jZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZCgpCiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZv
cm1OYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIm1hYyIpKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygibWFjIik7
CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudE1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50TWFjLm1tCmluZGV4IGUxZWZkN2Y0ZTE2MWFmZmRlZTIyNGNjNDUzODQ4YjM5Y2I0OTcw
NjMuLjY0OTFhMmQwYTVmYTRjNzRlNzIxNzkyNzhmN2UxY2E5OWQ3NjhkNmEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1t
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiRHVt
cFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgpAQCAtODAsMTEgKzgxLDYgQEAgLSAodm9pZClf
YWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9pbnQ6KE5TUG9pbnQpcG9pbnQ7CiAtICh2b2lk
KV9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZhbHVlIGZvckF0dHJpYnV0ZTooTlNTdHJpbmcq
KWF0dHJpYnV0ZU5hbWU7CiBAZW5kCiAKLXN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkpOwotfQotCiBzdGF0aWMgT3B0aW9uYWw8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD4gbWFrZVZlY3RvckVsZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCosIGlkIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIHsgeyBlbGVtZW50IH0gfTsKQEAg
LTIyMSwxNCArMjE3LDggQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqc2VsZWN0VGV4dFBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRleHRSZWYgY28KICAgICAgICAgICAgICAg
ICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhK
U1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5nLmdldCgpXV07CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0g
ICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hTdHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5n
c0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0
cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAg
ICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJl
cihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAg
ICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0
cikpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheSA9
IChKU09iamVjdFJlZilzZWFyY2hTdHJpbmdzOworICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJp
bmdzQXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NB
cnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5n
c0FycmF5TGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NT
dHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJv
cGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51
bGxwdHIpKTsKICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKQEAgLTI2
MiwxNCArMjUyLDggQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqc2VhcmNoVGV4dFBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRleHRSZWYgY28KICAgICAgICAgICAgIGlmIChz
ZWFyY2hTdHJpbmdzU3RyaW5nKQogICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1l
dGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmlu
Z3NTdHJpbmcuZ2V0KCldXTsKICAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29u
dGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0
cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxs
cHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7
Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNWYWx1ZVJl
ZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29u
dGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYg
SlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkK
LSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0
aFZhbHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5
ID0gKEpTT2JqZWN0UmVmKXNlYXJjaFN0cmluZ3M7CisgICAgICAgICAgICBhdXRvIHNlYXJjaFN0
cmluZ3NBcnJheUxlbmd0aCA9IFdUUjo6YXJyYXlMZW5ndGgoY29udGV4dCwgc2VhcmNoU3RyaW5n
c0FycmF5KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJp
bmdzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5n
c1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSwg
bnVsbHB0cikpOwogICAgICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQpAQCAt
MTQ0NiwxMyArMTQzMCwxMyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNl
bGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNz
aWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
ZnVuY3Rpb24uCisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2Rp
bmcoKQpAQCAtMTQ2Myw3ICsxNDQ3LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQogICAgICAgICByZXR1cm4gW3Zh
bHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAg
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQpAQCAtMTQ3NCw3ICsxNDU4LDcgQEAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAg
ICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNf
RVhDRVBUSU9OUwogICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KaW5kZXggMzY3MTQ5MzlmZGEwYTU2NzQ5Yzc5OTg4
NmExZWE0Mzg5MjE4OWE0YS4uMzQyYjNhMDFkYzdlYTg3OWFmMWI1NGIwZWUyNzNkNjgxMmY4Zjdh
NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRl
Lm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQpA
QCAtMzExLDU0ICszMTEsMjYgQEAgSUdOT1JFX1dBUk5JTkdTX0VORAogCiAtICh2b2lkKWRpZENs
ZWFyV2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUK
IHsKLSAgICAvLyBNYWtlIE5ldy1TdHlsZSBUZXN0UnVubmVyCi0gICAgSlNDb250ZXh0UmVmIGNv
bnRleHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07Ci0gICAgSlNPYmplY3RSZWYgZ2xvYmFsT2Jq
ZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYg
ZXhjZXB0aW9uID0gMDsKKyAgICBhdXRvIGNvbnRleHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07
CisgICAgYXV0byB3ZWJWaWV3ID0gW2ZyYW1lIHdlYlZpZXddOworICAgIGF1dG8gd2luZG93T2Jq
ZWN0ID0gW2ZyYW1lIHdpbmRvd09iamVjdF07CiAKLSAgICBBU1NFUlQoZ1Rlc3RSdW5uZXIpOwot
ICAgIGdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIGdsb2JhbE9iamVjdCwg
JmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAgZ2NDb250cm9sbGVy
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0g
ICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1h
a2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBB
U1NFUlQoIWV4Y2VwdGlvbik7CisgICAgZ1Rlc3RSdW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29u
dGV4dCk7CisgICAgZ2NDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOworICAg
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOwogCiAg
ICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiAK
LSAgICAvLyBNYWtlIE9sZC1TdHlsZSBjb250cm9sbGVycwotCi0gICAgV2ViVmlldyAqd2ViVmll
dyA9IFtmcmFtZSB3ZWJWaWV3XTsKLSAgICBXZWJTY3JpcHRPYmplY3QgKm9iaiA9IFtmcmFtZSB3
aW5kb3dPYmplY3RdOwotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIEFwcGxlU2NyaXB0
Q29udHJvbGxlciAqYXNjID0gW1tBcHBsZVNjcmlwdENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3XTsKLSAgICBbb2JqIHNldFZhbHVlOmFzYyBmb3JLZXk6QCJhcHBsZVNj
cmlwdENvbnRyb2xsZXIiXTsKLSAgICBbYXNjIHJlbGVhc2VdOworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tBcHBsZVNjcmlwdENvbnRyb2xs
ZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XSkuZ2V0KCkgZm9yS2V5OkAiYXBwbGVT
Y3JpcHRDb250cm9sbGVyIl07CiAjZW5kaWYKIAotICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIg
KmVzYyA9IFtbRXZlbnRTZW5kaW5nQ29udHJvbGxlciBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBz
ZXRWYWx1ZTplc2MgZm9yS2V5OkAiZXZlbnRTZW5kZXIiXTsKLSAgICBbZXNjIHJlbGVhc2VdOwot
ICAgIAotICAgIFtvYmogc2V0VmFsdWU6Z05hdmlnYXRpb25Db250cm9sbGVyIGZvcktleTpAIm5h
dmlnYXRpb25Db250cm9sbGVyIl07Ci0gICAgCi0gICAgT2JqQ0NvbnRyb2xsZXIgKm9jYyA9IFtb
T2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwotICAgIFtvYmogc2V0VmFsdWU6b2NjIGZvcktl
eTpAIm9iakNDb250cm9sbGVyIl07Ci0gICAgW29jYyByZWxlYXNlXTsKLQotICAgIE9iakNQbHVn
aW4gKnBsdWdpbiA9IFtbT2JqQ1BsdWdpbiBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1
ZTpwbHVnaW4gZm9yS2V5OkAib2JqQ1BsdWdpbiJdOwotICAgIFtwbHVnaW4gcmVsZWFzZV07Ci0g
ICAgCi0gICAgT2JqQ1BsdWdpbkZ1bmN0aW9uICpwbHVnaW5GdW5jdGlvbiA9IFtbT2JqQ1BsdWdp
bkZ1bmN0aW9uIGFsbG9jXSBpbml0XTsKLSAgICBbb2JqIHNldFZhbHVlOnBsdWdpbkZ1bmN0aW9u
IGZvcktleTpAIm9iakNQbHVnaW5GdW5jdGlvbiJdOwotICAgIFtwbHVnaW5GdW5jdGlvbiByZWxl
YXNlXTsKLQotICAgIFRleHRJbnB1dENvbnRyb2xsZXIgKnRpYyA9IFtbVGV4dElucHV0Q29udHJv
bGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddOwotICAgIFtvYmogc2V0VmFsdWU6
dGljIGZvcktleTpAInRleHRJbnB1dENvbnRyb2xsZXIiXTsKLSAgICBbdGljIHJlbGVhc2VdOwor
ICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRvcHROUyhbW0V2ZW50U2VuZGluZ0NvbnRyb2xs
ZXIgYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJldmVudFNlbmRlciJdOworICAgIFt3aW5k
b3dPYmplY3Qgc2V0VmFsdWU6Z05hdmlnYXRpb25Db250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRp
b25Db250cm9sbGVyIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2Jq
Q0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDQ29udHJvbGxlciJd
OworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRvcHROUyhbW09iakNQbHVnaW4gYWxsb2Nd
IGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDUGx1Z2luIl07CisgICAgW3dpbmRvd09iamVjdCBz
ZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ1BsdWdpbkZ1bmN0aW9uIGFsbG9jXSBpbml0XSkuZ2V0KCkg
Zm9yS2V5OkAib2JqQ1BsdWdpbkZ1bmN0aW9uIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1
ZTphZG9wdE5TKFtbVGV4dElucHV0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXddKS5nZXQoKSBmb3JLZXk6QCJ0ZXh0SW5wdXRDb250cm9sbGVyIl07CiB9CiAKIC0gKHZv
aWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZSBpbklzb2xh
dGVkV29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQKQEAgLTM3MSw3ICszNDMsNyBAQCAtICh2
b2lkKWRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUgaW5Jc29s
YXRlZFdvcmxkOihXZWJTY3JpcAogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1
cm47CiAKLSAgICBKU09iamVjdFNldFByb3BlcnR5KGN0eCwgZ2xvYmFsT2JqZWN0LCBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiX193b3JsZElEIikpLmdldCgpLCBKU1ZhbHVl
TWFrZU51bWJlcihjdHgsIHdvcmxkSURGb3JXb3JsZCh3b3JsZCkpLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5LCAwKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGN0eCwgZ2xvYmFsT2Jq
ZWN0LCBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJfX3dvcmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VO
dW1iZXIoY3R4LCB3b3JsZElERm9yV29ybGQod29ybGQpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSwgMCk7CiB9CiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRD
bGVhcldpbmRvd09iamVjdEZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lIGluU2NyaXB0V29ybGQ6
KFdlYlNjcmlwdFdvcmxkICopd29ybGQKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0KaW5kZXggZWJhMDkzZWUxODdjZDMxMGQwNTFiMjMwYWVkMmEzMDBmZTc5NDljMC4u
ZTIxMDcwYWMzMWIzNGNmY2JiNTc5ZDc3NzViNzYxOTkxMTRhYmRmZCAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KQEAgLTMyLDYgKzMyLDcgQEAKIAogI2ltcG9y
dCAiRGVmYXVsdFBvbGljeURlbGVnYXRlLmgiCiAjaW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIK
KyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0ICJMYXlvdXRUZXN0U3BlbGxDaGVja2VyLmgi
CiAjaW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92aWRlci5oIgogI2ltcG9ydCAiTW9ja1dlYk5v
dGlmaWNhdGlvblByb3ZpZGVyLmgiCkBAIC02NzAsMTUgKzY3MSwxMCBAQCBib29sIFRlc3RSdW5u
ZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwg
SlNPYmplY3RSZQogewogICAgIFdlYkZpbmRPcHRpb25zIG9wdGlvbnMgPSAwOwogCi0gICAgYXV0
byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFBy
b3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAw
KTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdGFyZ2V0Q0ZT
dHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQs
IHRhcmdldCkpOworICAgIGF1dG8gbGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBv
cHRpb25zQXJyYXkpOworICAgIGF1dG8gdGFyZ2V0Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5n
Q29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhcmdldCkpOwogCi0gICAgc2l6ZV90
IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxl
bmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBK
U1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0
aW9uc0FycmF5LCBpLCAwKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwg
dmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVu
bmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmNwcCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
QmluZGluZ3MvSlNCYXNpY3MuY3BwCmluZGV4IGZmZjBiNzQ5OTBhZmI5ZTEyYWM5ZDAxYTcxMGE0
YzUyODBlMWU5MDguLjk5NWFkZTA2NjAwMThjOThjNjJlNDRlNTZmNmY4Zjk2MjkyOWU4MjIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwCisr
KyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwCkBAIC0yOCwx
OSArMjgsMjQgQEAKIAogbmFtZXNwYWNlIFdUUiB7CiAKLUpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VC
b29sZWFuT3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBPcHRpb25hbDxib29sPiB2YWx1ZSkK
K09wdGlvbmFsPGJvb2w+IHRvT3B0aW9uYWxCb29sKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmIHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZSA/IEpTVmFsdWVNYWtlQm9vbGVhbihj
b250ZXh0LCB2YWx1ZS52YWx1ZSgpKSA6IEpTVmFsdWVNYWtlTnVsbChjb250ZXh0KTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHZhbHVlKSB8fCBKU1ZhbHVlSXNOdWxs
KGNvbnRleHQsIHZhbHVlKSA/IFdURjo6bnVsbG9wdCA6IG1ha2VPcHRpb25hbChKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHQsIHZhbHVlKSk7Cit9CisKK09wdGlvbmFsPGRvdWJsZT4gdG9PcHRpb25h
bERvdWJsZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHZhbHVlKSB8fCBKU1ZhbHVlSXNOdWxs
KGNvbnRleHQsIHZhbHVlKSA/IFdURjo6bnVsbG9wdCA6IG1ha2VPcHRpb25hbChKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKIH0KIAotT3B0aW9uYWw8Ym9vbD4gSlNW
YWx1ZVRvTnVsbGFibGVCb29sZWFuKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZh
bHVlKQorSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIE9wdGlvbmFs
PGJvb2w+IHZhbHVlKQogewotICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwg
dmFsdWUpIHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDog
T3B0aW9uYWw8Ym9vbD4oSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpOworICAgIHJl
dHVybiB2YWx1ZSA/IEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB2YWx1ZS52YWx1ZSgpKSA6
IEpTVmFsdWVNYWtlTnVsbChjb250ZXh0KTsKIH0KIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZVN0
cmluZ09yTnVsbChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgc3RyaW5nT3JOdWxs
KQorSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVm
IHN0cmluZykKIHsKLSAgICByZXR1cm4gc3RyaW5nT3JOdWxsID8gSlNWYWx1ZU1ha2VTdHJpbmco
Y29udGV4dCwgc3RyaW5nT3JOdWxsKSA6IEpTVmFsdWVNYWtlTnVsbChjb250ZXh0KTsKKyAgICBy
ZXR1cm4gc3RyaW5nID8gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgc3RyaW5nKSA6IEpTVmFs
dWVNYWtlTnVsbChjb250ZXh0KTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0
ZUpTU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykKQEAgLTQ4LDE5ICs1Myw0MyBAQCBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQogICAg
IHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKIH0K
IAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUpTU3RyaW5nKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIGF1dG8gc3RyaW5nID0gYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOworICAgIHJldHVybiBz
dHJpbmcgPyBzdHJpbmcgOiBjcmVhdGVKU1N0cmluZygiIik7Cit9CisKIEpTVmFsdWVSZWYgbWFr
ZVZhbHVlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcpCiB7CiAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGNyZWF0ZUpTU3RyaW5nKHN0cmluZyku
Z2V0KCkpOwogfQogCitKU1ZhbHVlUmVmIHByb3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgcmV0dXJuIG9iamVj
dCA/IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhu
YW1lKS5nZXQoKSwgbnVsbHB0cikgOiBudWxscHRyOworfQorCitKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gc3RyaW5nUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9i
amVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoY29u
dGV4dCwgcHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKSk7Cit9CisKK2Jvb2wgYm9vbGVh
blByb3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0
IGNoYXIqIG5hbWUsIGJvb2wgZGVmYXVsdFZhbHVlKQoreworICAgIGF1dG8gdmFsdWUgPSBwcm9w
ZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAgIHJldHVybiB2YWx1ZSA/IEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpIDogZGVmYXVsdFZhbHVlOworfQorCitkb3VibGUgbnVt
ZXJpY1Byb3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNv
bnN0IGNoYXIqIG5hbWUpCit7CisgICAgYXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9i
amVjdCwgbmFtZSk7CisgICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IHZhbHVlLCBudWxscHRyKSA6IDA7Cit9CisKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUp
CiB7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8g
dmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgY3JlYXRlSlNTdHJp
bmcobmFtZSkuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRl
eHQsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8SlNPYmplY3RSZWY+KHZhbHVlKTsKKyAgICBhdXRvIHZhbHVlID0gcHJvcGVydHkoY29udGV4
dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4gdmFsdWUgPyBKU1ZhbHVlVG9PYmplY3QoY29u
dGV4dCwgcHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKSwgbnVsbHB0cikgOiBudWxscHRy
OwogfQogCiBKU09iamVjdFJlZiBvYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgb2JqZWN0LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IG5h
bWVzKQpAQCAtNzAsMjcgKzk5LDM2IEBAIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIHN0ZDo6aW5pdGlhCiAgICAgcmV0
dXJuIG9iamVjdDsKIH0KIAordW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICByZXR1cm4gbnVtZXJpY1Byb3BlcnR5KGNv
bnRleHQsIG9iamVjdCwgImxlbmd0aCIpOworfQorCiB2b2lkIHNldFByb3BlcnR5KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wg
dmFsdWUpCiB7CiAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIGNyZWF0
ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgdmFsdWUp
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOwogfQogCit2b2lkIHNldEdsb2Jh
bE9iamVjdFByb3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBK
U1ZhbHVlUmVmIHZhbHVlKQoreworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgSlND
b250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQo
KSwgdmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUsIG51bGxwdHIpOworfQorCit2b2lkIHNldEdsb2JhbE9iamVjdFByb3Bl
cnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUp
Cit7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgbmFtZSwgSlNWYWx1ZU1h
a2VOdW1iZXIoY29udGV4dCwgdmFsdWUpKTsKK30KKwogSlNWYWx1ZVJlZiBjYWxsKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlUmVmPiBhcmd1bWVudHMpCiB7Ci0gICAgaWYgKCFvYmpl
Y3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGF1dG8gZnVuY3Rpb24gPSBvYmplY3RQ
cm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOwotICAgIGlmICghZnVuY3Rpb24pCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNv
bnRleHQsIGZ1bmN0aW9uLCBvYmplY3QsIGFyZ3VtZW50cy5zaXplKCksIGFyZ3VtZW50cy5iZWdp
bigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gZnVuY3Rpb24gPyBKU09iamVjdENhbGxBc0Z1bmN0
aW9uKGNvbnRleHQsIGZ1bmN0aW9uLCBvYmplY3QsIGFyZ3VtZW50cy5zaXplKCksIGFyZ3VtZW50
cy5iZWdpbigpLCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIGNhbGxDb25z
dHJ1Y3RvcihKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgY29uc3QgY2hhciogbmFtZSwgc3Rk
Ojppbml0aWFsaXplcl9saXN0PEpTVmFsdWVSZWY+IGFyZ3VtZW50cykKIHsKICAgICBhdXRvIGNv
bnN0cnVjdG9yID0gb2JqZWN0UHJvcGVydHkoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2Jq
ZWN0KGNvbnRleHQpLCB7IG5hbWUgfSk7Ci0gICAgaWYgKCFjb25zdHJ1Y3RvcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29u
dGV4dCwgY29uc3RydWN0b3IsIGFyZ3VtZW50cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBu
dWxscHRyKTsKKyAgICByZXR1cm4gY29uc3RydWN0b3IgPyBKU09iamVjdENhbGxBc0NvbnN0cnVj
dG9yKGNvbnRleHQsIGNvbnN0cnVjdG9yLCBhcmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuYmVn
aW4oKSwgbnVsbHB0cikgOiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaCBiL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaAppbmRleCAxMWRkYTUyNDdhNWFi
NmMwNDA5NjNkZjE5YWIwZjVlMDI5NmNlYjgyLi42NWYxOGQ3ZWNkODAxNjgzMzMzNGRmNWViODg4
Y2NjNGEwYjIxZDUzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdz
L0pTQmFzaWNzLmgKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2lj
cy5oCkBAIC0zMiwxNiArMzIsMjggQEAKIAogbmFtZXNwYWNlIFdUUiB7CiAKLUpTVmFsdWVSZWYg
SlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKEpTQ29udGV4dFJlZiwgT3B0aW9uYWw8Ym9vbD4pOwot
T3B0aW9uYWw8Ym9vbD4gSlNWYWx1ZVRvTnVsbGFibGVCb29sZWFuKEpTQ29udGV4dFJlZiwgSlNW
YWx1ZVJlZik7CitPcHRpb25hbDxib29sPiB0b09wdGlvbmFsQm9vbChKU0NvbnRleHRSZWYsIEpT
VmFsdWVSZWYpOworT3B0aW9uYWw8ZG91YmxlPiB0b09wdGlvbmFsRG91YmxlKEpTQ29udGV4dFJl
ZiwgSlNWYWx1ZVJlZik7CiAKLUpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoSlND
b250ZXh0UmVmLCBKU1N0cmluZ1JlZik7CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRl
SlNTdHJpbmcoY29uc3QgY2hhciogPSAiIik7CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3Jl
YXRlSlNTdHJpbmcoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAotSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IGNyZWF0ZUpTU3RyaW5nKGNvbnN0IGNoYXIqKTsKIEpTVmFsdWVSZWYgbWFrZVZh
bHVlKEpTQ29udGV4dFJlZiwgY29uc3QgY2hhciopOworSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlND
b250ZXh0UmVmLCBPcHRpb25hbDxib29sPik7CitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRl
eHRSZWYsIEpTU3RyaW5nUmVmKTsKKworSlNWYWx1ZVJlZiBwcm9wZXJ0eShKU0NvbnRleHRSZWYs
IEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKK2Jvb2wgYm9vbGVhblByb3BlcnR5KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgZGVmYXVsdFZh
bHVlID0gZmFsc2UpOworZG91YmxlIG51bWVyaWNQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJp
bmdQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsK
K3Vuc2lnbmVkIGFycmF5TGVuZ3RoKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOwogSlNPYmpl
Y3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hh
ciogbmFtZSk7CiBKU09iamVjdFJlZiBvYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IG5hbWVzKTsKKwogdm9p
ZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1l
LCBib29sIHZhbHVlKTsKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVm
LCBjb25zdCBjaGFyKiBuYW1lLCBKU1ZhbHVlUmVmKTsKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkoSlNDb250ZXh0UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpOworCiBK
U1ZhbHVlUmVmIGNhbGwoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFt
ZSwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFsdWVSZWY+IGFyZ3VtZW50cyk7CiBKU09iamVj
dFJlZiBjYWxsQ29uc3RydWN0b3IoSlNHbG9iYWxDb250ZXh0UmVmLCBjb25zdCBjaGFyKiBuYW1l
LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJndW1lbnRzKTsKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oIGIvVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCmluZGV4IDllMGYwN2Rm
NTkzMmFiMzAzMzFkN2I2MWQxNzM1M2FlNmUwMWM0NzMuLjU5YmUxZGFlYTI3NzU0ZWU0Nzc1YjRm
M2U3YTVkNjgyZmIxZDVmMWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmlu
ZGluZ3MvSlNXcmFwcGFibGUuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdz
L0pTV3JhcHBhYmxlLmgKQEAgLTI1LDkgKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTQ2xhc3MqIEpTQ2xhc3NSZWY7CisKIG5h
bWVzcGFjZSBXVFIgewogCiBjbGFzcyBKU1dyYXBwYWJsZSA6IHB1YmxpYyBSZWZDb3VudGVkPEpT
V3JhcHBhYmxlPiB7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdz
L0pTV3JhcHBlci5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIu
aAppbmRleCBmNjc5OGY5OWE0ZmVjNjc1NjNkMDkxNTYzYjUwNTA5ZGZjODU3MmRhLi45YjZiYWQ4
YWYwNDRiMjAyZmY4NzI3YWNlZDdjYjlmZmIyY2VjNTJlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBlci5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmgKQEAgLTUwLDQgKzUwLDkgQEAgaW5saW5lIHZvaWQg
c2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29u
c3QgY2hhciogcHIKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgY3Jl
YXRlSlNTdHJpbmcocHJvcGVydHlOYW1lKS5nZXQoKSwgSlNXcmFwcGVyOjp3cmFwKGNvbnRleHQs
IHZhbHVlKSwgYXR0cmlidXRlcywgZXhjZXB0aW9uKTsKIH0KIAoraW5saW5lIHZvaWQgc2V0R2xv
YmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIqIHByb3Bl
cnR5TmFtZSwgSlNXcmFwcGFibGUqIHZhbHVlKQoreworICAgIHNldEdsb2JhbE9iamVjdFByb3Bl
cnR5KGNvbnRleHQsIHByb3BlcnR5TmFtZSwgSlNXcmFwcGVyOjp3cmFwKGNvbnRleHQsIHZhbHVl
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9FdmVudFNlcmlhbGl6YXRpb24vbWFjL0V2ZW50U2VyaWFsaXplck1hYy5tbSBiL1Rv
b2xzL1Rlc3RSdW5uZXJTaGFyZWQvRXZlbnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6
ZXJNYWMubW0KaW5kZXggMGYxN2IyY2Q2MzlhNjMwNjNhNDg4ZGYzYTMzYTM1ZTMyYTJlY2NjMS4u
YmRkMjA3YmQ0MDlmMDRlZTVmMzgyMzE5NGZhMjRlNjMyODg1ODkxNyAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC9FdmVudFNlcmlhbGl6YXRpb24vbWFjL0V2ZW50U2VyaWFsaXpl
ck1hYy5tbQorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9t
YWMvRXZlbnRTZXJpYWxpemVyTWFjLm1tCkBAIC0xOTUsNyArMTk1LDcgQEAgQGltcGxlbWVudGF0
aW9uIEV2ZW50U2VyaWFsaXplcgogCiArIChOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5Rm9yRXZl
bnQ6KENHRXZlbnRSZWYpcmF3RXZlbnQgcmVsYXRpdmVUb1RpbWU6KENHRXZlbnRUaW1lc3RhbXAp
cmVmZXJlbmNlVGltZXN0YW1wCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IHBsYWluRXZl
bnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOworICAgIGF1dG8gcGxhaW5FdmVudCA9
IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZShOVUxMKSk7CiAgICAgQ0dFdmVudFJlZiByYXdQbGFpbkV2
ZW50ID0gcGxhaW5FdmVudC5nZXQoKTsKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Qg
PSBbW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CkBAIC0y
MjYsNyArMjI2LDcgQEAgKyAoTlNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeUZvckV2ZW50OihDR0V2
ZW50UmVmKXJhd0V2ZW50IHJlbGF0aXZlVG9UaW1lOihDR0V2ZW4KIAogKyAoUmV0YWluUHRyPENH
RXZlbnRSZWY+KWNyZWF0ZUV2ZW50Rm9yRGljdGlvbmFyeTooTlNEaWN0aW9uYXJ5ICopZGljdCBp
bldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgcmVsYXRpdmVUb1RpbWU6KENHRXZlbnRUaW1lc3Rh
bXApcmVmZXJlbmNlVGltZXN0YW1wCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IGV2ZW50
ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsKKyAgICBhdXRvIGV2ZW50ID0gYWRvcHRD
RihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsKICAgICBDR0V2ZW50UmVmIHJhd0V2ZW50ID0gZXZlbnQu
Z2V0KCk7CiAKICAgICBGT1JfRUFDSF9DR0VWRU5UX0lOVEVHRVJfRklFTEQoU1RPUkVfSU5URUdF
Ul9GSUVMRF9UT19FVkVOVCk7CkBAIC0yNjQsNyArMjY0LDcgQEAgY29uc3QgZmxvYXQgZXZlbnRE
aXNwYXRjaFRpbWVyUmF0ZSA9IDEuIC8gMTIwLjsKIAogKyAodm9pZClwbGF5U3RyZWFtOihOU0Fy
cmF5PE5TRGljdGlvbmFyeSAqPiAqKWV2ZW50RGljdHMgd2luZG93OihOU1dpbmRvdyAqKXdpbmRv
dyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSgpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAg
UmV0YWluUHRyPEV2ZW50U3RyZWFtUGxheWVyPiBwbGF5ZXIgPSBhZG9wdE5TKFtbRXZlbnRTdHJl
YW1QbGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHBsYXllciA9IGFkb3B0TlMoW1tFdmVu
dFN0cmVhbVBsYXllciBhbGxvY10gaW5pdF0pOwogCiAgICAgcGxheWVyLT5fcmVtYWluaW5nRXZl
bnREaWN0aW9uYXJpZXMgPSBhZG9wdE5TKFtldmVudERpY3RzIG11dGFibGVDb3B5XSk7CiAgICAg
cGxheWVyLT5fd2luZG93ID0gd2luZG93OwpAQCAtMjgyLDcgKzI4Miw3IEBAIC0gKHZvaWQpcGxh
eWJhY2tUaW1lckZpcmVkOihOU1RpbWVyICopdGltZXIKICAgICBhdXRvIHJlbW92ZUxpc3QgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICBOU0V2ZW50ICpuc0V2
ZW50ID0gbmlsOwogICAgIGZvciAoaWQgZXZlbnREaWN0IGluIF9yZW1haW5pbmdFdmVudERpY3Rp
b25hcmllcy5nZXQoKSkgewotICAgICAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4gZXZlbnQgPSBb
RXZlbnRTZXJpYWxpemVyIGNyZWF0ZUV2ZW50Rm9yRGljdGlvbmFyeTpldmVudERpY3QgaW5XaW5k
b3c6X3dpbmRvdy5nZXQoKSByZWxhdGl2ZVRvVGltZTpfc3RhcnRUaW1lXTsKKyAgICAgICAgYXV0
byBldmVudCA9IFtFdmVudFNlcmlhbGl6ZXIgY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5OmV2ZW50
RGljdCBpbldpbmRvdzpfd2luZG93LmdldCgpIHJlbGF0aXZlVG9UaW1lOl9zdGFydFRpbWVdOwog
ICAgICAgICBpZiAoQ0dFdmVudEdldFRpbWVzdGFtcChldmVudC5nZXQoKSkgPCBtYWNoX2Fic29s
dXRlX3RpbWUoKSkgewogICAgICAgICAgICAgbnNFdmVudCA9IFtOU0V2ZW50IGV2ZW50V2l0aENH
RXZlbnQ6ZXZlbnQuZ2V0KCldOwogICAgICAgICAgICAgW05TQXBwIHBvc3RFdmVudDpuc0V2ZW50
IGF0U3RhcnQ6Tk9dOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlw
dENvbnRleHQvVUlTY3JpcHRDb250ZXh0LmNwcCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAKaW5kZXggMjcwNWIzOWEyNDdkZDI1N2Q1
YzZkNThjNDcwZTk2MzNhOTE5ZGZkNC4uNWRjZmI3Yzk4NzJmMzk5ZjE1Njc0ZDk3MTBkZWIyODli
MmQxMjE4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRl
eHQvVUlTY3JpcHRDb250ZXh0LmNwcAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwCkBAIC0yNiw5ICsyNiw4IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJK
U0Jhc2ljcy5oIgogI2luY2x1ZGUgIlVJU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
VmFsdWVSZWYuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV1RSOwpAQCAtNDMsMTEgKzQyLDcgQEAgVUlTY3JpcHRDb250ZXh0OjpVSVNjcmlwdENv
bnRleHQoVUlTY3JpcHRDb250ZXh0RGVsZWdhdGUmIGRlbGVnYXRlLCBVSVNjcmlwdENvbnQKICAg
ICAsIG1fZGVsZWdhdGUoZGVsZWdhdGUpCiB7CiAgICAgbV9jb250cm9sbGVyID0gZmFjdG9yeSgq
dGhpcyk7Ci0KLSAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9i
YWxPYmplY3QobV9jb250ZXh0LmdldCgpKTsKLQotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0g
bnVsbHB0cjsKLSAgICBtX2NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QobV9jb250ZXh0Lmdl
dCgpLCBnbG9iYWxPYmplY3QsICZleGNlcHRpb24pOworICAgIG1fY29udHJvbGxlci0+bWFrZVdp
bmRvd09iamVjdChtX2NvbnRleHQuZ2V0KCkpOwogfQogCiBVSVNjcmlwdENvbnRleHQ6On5VSVNj
cmlwdENvbnRleHQoKQpAQCAtNjYsOSArNjEsNyBAQCB2b2lkIFVJU2NyaXB0Q29udGV4dDo6cnVu
VUlTY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIHVuc2lnbmVkIHNjcmlwdENhbGxiYWNrSQog
ICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdChtX2NvbnRleHQuZ2V0KCks
IHN0cmluZ1JlZi5nZXQoKSwgMCwgMCwgMSwgJmV4Y2VwdGlvbik7CiAgICAgCiAgICAgaWYgKCFo
YXNPdXRzdGFuZGluZ0FzeW5jVGFza3MoKSkgewotICAgICAgICBKU1ZhbHVlUmVmIHN0cmluZ2lm
eUV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gc3RyaW5naWZpZWQgPSBhZG9wdChK
U1ZhbHVlVG9TdHJpbmdDb3B5KG1fY29udGV4dC5nZXQoKSwgcmVzdWx0LCAmc3RyaW5naWZ5RXhj
ZXB0aW9uKSk7Ci0gICAgICAgIHJlcXVlc3RVSVNjcmlwdENvbXBsZXRpb24oc3RyaW5naWZpZWQu
Z2V0KCkpOworICAgICAgICByZXF1ZXN0VUlTY3JpcHRDb21wbGV0aW9uKGNyZWF0ZUpTU3RyaW5n
KG1fY29udGV4dC5nZXQoKSwgcmVzdWx0KS5nZXQoKSk7CiAgICAgICAgIHRyeVRvQ29tcGxldGVV
SVNjcmlwdEZvckN1cnJlbnRQYXJlbnRDYWxsYmFjaygpOwogICAgIH0KIH0KQEAgLTE4OSwxMCAr
MTgyLDEwIEBAIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udGV4dDo6b2JqZWN0RnJvbVJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KSBjb25zCiB7CiAgICAgSlNPYmplY3RSZWYgb2Jq
ZWN0ID0gSlNPYmplY3RNYWtlKG1fY29udGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAK
LSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVmdCIpKS5nZXQoKSwgSlNWYWx1ZU1ha2VO
dW1iZXIobV9jb250ZXh0LmdldCgpLCByZWN0LngoKSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9u
ZSwgbnVsbHB0cik7Ci0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9i
amVjdCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRvcCIpKS5nZXQoKSwg
SlNWYWx1ZU1ha2VOdW1iZXIobV9jb250ZXh0LmdldCgpLCByZWN0LnkoKSksIGtKU1Byb3BlcnR5
QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7Ci0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShtX2NvbnRl
eHQuZ2V0KCksIG9iamVjdCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndp
ZHRoIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3Qud2lk
dGgoKSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7Ci0gICAgSlNPYmplY3RT
ZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImhlaWdodCIpKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIobV9jb250
ZXh0LmdldCgpLCByZWN0LmhlaWdodCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxs
cHRyKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgImxlZnQiLCBy
ZWN0LngoKSk7CisgICAgc2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsICJ0b3Ai
LCByZWN0LnkoKSk7CisgICAgc2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsICJ3
aWR0aCIsIHJlY3Qud2lkdGgoKSk7CisgICAgc2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBv
YmplY3QsICJoZWlnaHQiLCByZWN0LmhlaWdodCgpKTsKICAgICAKICAgICByZXR1cm4gb2JqZWN0
OwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQv
VUlTY3JpcHRDb250cm9sbGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29u
dGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAppbmRleCBhNWE4ZDdjYzJmY2M5ZmVkNmZmNTUyMmNj
OWVkNjdjZTQyOThjYTgxLi4zNTI0YjYwYmQ4MWNkOWNhYjMxMGFhMWI1NjhmMjNmZDUxNjhkY2Vm
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNj
cmlwdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29u
dGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CiAgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JPdXRzdGFu
ZGluZ0NhbGxiYWNrcygpIHsgLyogbm90SW1wbGVtZW50ZWQoKTsgKi8gfQogCi0gICAgdm9pZCBt
YWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYpOwogCiAgICAgLy8gVHJhbnNhY3Rpb24gaGVscGVycwogICAgIApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVy
U2hhcmVkLmNwcCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2Ny
aXB0Q29udHJvbGxlclNoYXJlZC5jcHAKaW5kZXggYzZlYjE0MGFhMzU2YzY2ZDhjNDUwMjE0ZTdk
YjJjODVhZDNhNzFhMy4uYmZmNGYzNDMzZGJkMjk1NzVkNjI1YjczOTRlNmQ5ZDM4MWNhZWMyNiAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250cm9sbGVyU2hhcmVkLmNwcAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwCkBAIC00MSwyMCArNDEsMTUg
QEAgRGV2aWNlT3JpZW50YXRpb24qIHRvRGV2aWNlT3JpZW50YXRpb24oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiAgICAgICAgIERldmljZU9yaWVudGF0aW9uOjpMYW5k
c2NhcGVMZWZ0LAogICAgICAgICBEZXZpY2VPcmllbnRhdGlvbjo6TGFuZHNjYXBlUmlnaHQKICAg
ICB9OwotCi0gICAgYXV0byBvcHRpb24gPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIHZhbHVlLCBudWxscHRyKSk7Ci0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gInBvcnRy
YWl0IikKKyAgICBhdXRvIG9wdGlvbiA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKTsK
KyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb24uZ2V0KCksICJwb3J0
cmFpdCIpKQogICAgICAgICByZXR1cm4gJnZhbHVlc1swXTsKLQotICAgIGlmIChvcHRpb24tPnN0
cmluZygpID09ICJwb3J0cmFpdC11cHNpZGVkb3duIikKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhvcHRpb24uZ2V0KCksICJwb3J0cmFpdC11cHNpZGVkb3duIikpCiAgICAg
ICAgIHJldHVybiAmdmFsdWVzWzFdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gImxh
bmRzY2FwZS1sZWZ0IikKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRp
b24uZ2V0KCksICJsYW5kc2NhcGUtbGVmdCIpKQogICAgICAgICByZXR1cm4gJnZhbHVlc1syXTsK
LQotICAgIGlmIChvcHRpb24tPnN0cmluZygpID09ICJsYW5kc2NhcGUtcmlnaHQiKQorICAgIGlm
IChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgImxhbmRzY2FwZS1y
aWdodCIpKQogICAgICAgICByZXR1cm4gJnZhbHVlc1szXTsKLQogICAgIHJldHVybiBudWxscHRy
OwogfQogCkBAIC02OCw5ICs2Myw5IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpjb250ZXh0
RGVzdHJveWVkKCkKICAgICBtX2NvbnRleHQgPSBudWxscHRyOwogfQogCi12b2lkIFVJU2NyaXB0
Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFVJU2NyaXB0
Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAg
ICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJ1aUNvbnRyb2xsZXIiLCB0aGlz
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlLCBleGNlcHRpb24pOworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQs
ICJ1aUNvbnRyb2xsZXIiLCB0aGlzKTsKIH0KIAogSlNDbGFzc1JlZiBVSVNjcmlwdENvbnRyb2xs
ZXI6OndyYXBwZXJDbGFzcygpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL2Nv
Y29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIubW0gYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL2Nv
Y29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIubW0KaW5kZXggOGZjMDIxMTY3YWFjMjIxNTM2YTE3
NjZlNTM5MDE5ZmU2NDQwNThlMS4uZDg2ZWY5NTZmODBkZmExOTIyOTU0ZTExNzlhZjJiMzUyYjk4
MzkyNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9jb2NvYS9MYXlvdXRUZXN0
U3BlbGxDaGVja2VyLm1tCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0
VGVzdFNwZWxsQ2hlY2tlci5tbQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgi
CiAjaW1wb3J0ICJMYXlvdXRUZXN0U3BlbGxDaGVja2VyLmgiCiAKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0pTUmV0YWluUHRyLmg+CisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8b2Jq
Yy9ydW50aW1lLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCA8d3RmL0Js
b2NrUHRyLmg+CkBAIC0yMTIsMTEgKzIxMiwxMSBAQCAtICh2b2lkKXNldFJlc3VsdHM6KFRleHRD
aGVja2luZ1Jlc3VsdHNEaWN0aW9uYXJ5ICopcmVzdWx0cwogLSAodm9pZClzZXRSZXN1bHRzRnJv
bUpTVmFsdWU6KEpTVmFsdWVSZWYpcmVzdWx0c1ZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0UmVm
KWNvbnRleHQKIHsKICAgICBhdXRvIHJlc3VsdHNPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29u
dGV4dCwgcmVzdWx0c1ZhbHVlLCBudWxscHRyKTsKLSAgICBhdXRvIGZyb21Qcm9wZXJ0eU5hbWUg
PSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZnJvbSIpKTsKLSAgICBhdXRv
IHRvUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRv
IikpOwotICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJ0eXBlIikpOwotICAgIGF1dG8gcmVwbGFjZW1lbnRQcm9wZXJ0eU5hbWUg
PSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicmVwbGFjZW1lbnQiKSk7Ci0g
ICAgYXV0byBkZXRhaWxzUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImRldGFpbHMiKSk7CisgICAgYXV0byBmcm9tUHJvcGVydHlOYW1lID0gV1RSOjpj
cmVhdGVKU1N0cmluZygiZnJvbSIpOworICAgIGF1dG8gdG9Qcm9wZXJ0eU5hbWUgPSBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCJ0byIpOworICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoInR5cGUiKTsKKyAgICBhdXRvIHJlcGxhY2VtZW50UHJvcGVydHlOYW1lID0g
V1RSOjpjcmVhdGVKU1N0cmluZygicmVwbGFjZW1lbnQiKTsKKyAgICBhdXRvIGRldGFpbHNQcm9w
ZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJkZXRhaWxzIik7CiAgICAgYXV0byByZXN1
bHRzID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKIAogICAg
IC8vIEZJWE1FOiBVc2luZyB0aGUgT2JqZWN0aXZlLUMgQVBJIHdvdWxkIG1ha2UgdGhpcyBsb2dp
YyBlYXNpZXIgdG8gZm9sbG93LgpAQCAtMjI4LDE1ICsyMjgsMTMgQEAgLSAodm9pZClzZXRSZXN1
bHRzRnJvbUpTVmFsdWU6KEpTVmFsdWVSZWYpcmVzdWx0c1ZhbHVlIGluQ29udGV4dDooSlNDb250
ZXh0UmVmKWMKICAgICAgICAgYXV0byByZXN1bHRzRm9yV29yZCA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdF0pOwogICAgICAgICBmb3IgKHNpemVfdCByZXN1bHRJbmRleCA9
IDA7IHJlc3VsdEluZGV4IDwgSlNQcm9wZXJ0eU5hbWVBcnJheUdldENvdW50KHJlc3VsdHNBcnJh
eVByb3BlcnR5TmFtZXMpOyArK3Jlc3VsdEluZGV4KSB7CiAgICAgICAgICAgICBhdXRvIHJlc3Vs
dHNPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0
SW5kZXgoY29udGV4dCwgcmVzdWx0c0FycmF5LCByZXN1bHRJbmRleCwgbnVsbHB0ciksIG51bGxw
dHIpOwotICAgICAgICAgICAgbG9uZyBmcm9tVmFsdWUgPSBscm91bmRsKEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIGZy
b21Qcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBs
b25nIHRvVmFsdWUgPSBscm91bmRsKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIHRvUHJvcGVydHlOYW1lLmdldCgpLCBu
dWxscHRyKSwgbnVsbHB0cikpOwotICAgICAgICAgICAgYXV0byB0eXBlVmFsdWUgPSBhZG9wdChK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
cmVzdWx0c09iamVjdCwgdHlwZVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxwdHIp
KTsKKyAgICAgICAgICAgIGxvbmcgZnJvbVZhbHVlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgZnJvbVByb3BlcnR5
TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxwdHIpOworICAgICAgICAgICAgbG9uZyB0b1ZhbHVl
ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
cmVzdWx0c09iamVjdCwgdG9Qcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIGF1dG8gdHlwZVZhbHVlID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0
LCBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIHR5cGVQcm9wZXJ0
eU5hbWUuZ2V0KCksIG51bGxwdHIpKTsKICAgICAgICAgICAgIGF1dG8gcmVwbGFjZW1lbnRWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgcmVwbGFjZW1l
bnRQcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpOwogICAgICAgICAgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiByZXBsYWNlbWVudFRleHQ7Ci0gICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1Vu
ZGVmaW5lZChjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlKSkgewotICAgICAgICAgICAgICAgIGF1
dG8gcmVwbGFjZW1lbnRKU1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgcmVwbGFjZW1lbnRWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgICAgIHJlcGxhY2Vt
ZW50VGV4dCA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgcmVwbGFjZW1lbnRKU1N0cmluZy5nZXQoKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgcmVwbGFjZW1lbnRWYWx1ZSkpCisg
ICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRUZXh0ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0
cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHJl
cGxhY2VtZW50VmFsdWUpLmdldCgpKSk7CiAgICAgICAgICAgICBhdXRvIGRldGFpbHMgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICAgICAgICAgIGF1dG8gZGV0
YWlsc1ZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCBk
ZXRhaWxzUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmICghSlNW
YWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGRldGFpbHNWYWx1ZSkpIHsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvRGljdGlvbmFyeUZ1bmN0aW9ucy5oIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTU1MThhYjM4MTM4
ZDZiN2JmYWEwMzU5Zjc4MmNlY2Q4NzM2ZjkwOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvRGljdGlvbmFyeUZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsMTc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIK
KworbmFtZXNwYWNlIFdUUiB7CisKK1dLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5VmFsdWUoV0tU
eXBlUmVmKTsKKworYm9vbCBib29sZWFuVmFsdWUoV0tUeXBlUmVmKTsKK2Jvb2wgYm9vbGVhblZh
bHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4mKTsKKworZG91YmxlIGRvdWJsZVZhbHVl
KFdLVHlwZVJlZik7CitPcHRpb25hbDxkb3VibGU+IG9wdGlvbmFsRG91YmxlVmFsdWUoV0tUeXBl
UmVmKTsKKworV0tTdHJpbmdSZWYgc3RyaW5nVmFsdWUoV0tUeXBlUmVmKTsKK1dURjo6U3RyaW5n
IHRvV1RGU3RyaW5nKFdLVHlwZVJlZik7CisKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLVHlwZVJl
Zik7Cit1aW50NjRfdCB1aW50NjRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS1R5cGVSZWY+Jik7
CisKK1dLVHlwZVJlZiB2YWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CisK
K2Jvb2wgYm9vbGVhblZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKK2Rv
dWJsZSBkb3VibGVWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CitXS1N0
cmluZ1JlZiBzdHJpbmdWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7Cit1
aW50NjRfdCB1aW50NjRWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CisK
K09wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNv
bnN0IGNoYXIqIGtleSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2V0VmFsdWUoY29u
c3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXks
IGNvbnN0IE9wdGlvbmFsPFQ+JiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBXS1R5cGVSZWYg
dmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNv
bnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5
LCBjb25zdCBjaGFyKiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCB1aW50NjRfdCB2YWx1ZSk7
Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+
JiwgY29uc3QgY2hhcioga2V5LCBkb3VibGUgdmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25zdCBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgY29u
c3QgV1RGOjpTdHJpbmcmIHZhbHVlKTsKKworaW5saW5lIGJvb2wgYm9vbGVhblZhbHVlKFdLVHlw
ZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpICYmIFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4odmFsdWUpKTsKK30KKworaW5saW5lIGJvb2wgYm9vbGVhblZhbHVlKGNvbnN0
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4mIHZhbHVlKQoreworICAgIHJldHVybiBib29sZWFuVmFs
dWUodmFsdWUuZ2V0KCkpOworfQorCitpbmxpbmUgV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnlW
YWx1ZShXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlE
KHZhbHVlKSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSA/IHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4odmFsdWUpIDogbnVsbHB0cjsKK30KKworaW5saW5lIGRvdWJsZSBkb3VibGVWYWx1
ZShXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZh
bHVlKSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpID8gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS0RvdWJsZVJlZj4odmFsdWUpKSA6IDA7Cit9CisKK2lubGluZSBPcHRpb25hbDxkb3VibGU+
IG9wdGlvbmFsRG91YmxlVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1
ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSA/IG1ha2VPcHRp
b25hbChXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPih2YWx1ZSkpKSA6
IFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFdLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLVHlw
ZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09
IFdLU3RyaW5nR2V0VHlwZUlEKCkgPyBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4odmFsdWUpIDog
bnVsbHB0cjsKK30KKworaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKFdLVHlwZVJlZiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUodmFsdWUpKTsKK30K
KworaW5saW5lIHVpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLVUludDY0R2V0VHlwZUlEKCkg
PyBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPih2YWx1ZSkpIDogMDsK
K30KKworaW5saW5lIHVpbnQ2NF90IHVpbnQ2NFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4mIHZhbHVlKQoreworICAgIHJldHVybiB1aW50NjRWYWx1ZSh2YWx1ZS5nZXQoKSk7Cit9
CisKK2lubGluZSBXS1R5cGVSZWYgdmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNv
bnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShk
aWN0aW9uYXJ5LCB0b1dLKGtleSkuZ2V0KCkpOworfQorCitpbmxpbmUgYm9vbCBib29sZWFuVmFs
dWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICBy
ZXR1cm4gYm9vbGVhblZhbHVlKHZhbHVlKGRpY3Rpb25hcnksIGtleSkpOworfQorCitpbmxpbmUg
ZG91YmxlIGRvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXkpCit7CisgICAgcmV0dXJuIGRvdWJsZVZhbHVlKHZhbHVlKGRpY3Rpb25hcnksIGtleSkp
OworfQorCitpbmxpbmUgV0tTdHJpbmdSZWYgc3RyaW5nVmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRp
Y3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gc3RyaW5nVmFsdWUodmFs
dWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSB1aW50NjRfdCB1aW50NjRWYWx1ZShX
S0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVy
biB1aW50NjRWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5lIE9wdGlv
bmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFy
eSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBvcHRpb25hbERvdWJsZVZhbHVlKHZh
bHVlKGRpY3Rpb25hcnksIGtleSkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hh
cioga2V5LCBXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkaWN0
aW9uYXJ5LmdldCgpLCB0b1dLKGtleSkuZ2V0KCksIHZhbHVlKTsKK30KKworaW5saW5lIHZvaWQg
c2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rp
b25hcnksIGNvbnN0IGNoYXIqIGtleSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBzZXRWYWx1ZShkaWN0
aW9uYXJ5LCBrZXksIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQor
CitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSkK
K3sKKyAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXksIHRvV0sodmFsdWUpLmdldCgpKTsKK30K
KworaW5saW5lIHZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4mIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgV1RGOjpTdHJpbmcm
IHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgdG9XSyh2YWx1ZSkuZ2V0
KCkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFi
bGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCB1aW50NjRfdCB2
YWx1ZSkKK3sKKyAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXksIGFkb3B0V0soV0tVSW50NjRD
cmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXksIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXksIGFk
b3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4mIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgT3B0aW9uYWw8VD4mIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwga2V5
LCAqdmFsdWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9FdmVudFNlbmRlclByb3h5LmgKaW5kZXggNjQ0NzYwMzk2OGQyMDY0MjBiZWI5NDI3NzNiMjRi
Nzg5NjQxYjVjOS4uZmEzYTg4ZDNhZjM5MzRkNGM4ODIwYmY1MGZlOWY4OTdiMzhmZDA0YSAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmgKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmgKQEAgLTExMiwxOCArMTEy
LDE5IEBAIHByaXZhdGU6CiAgICAgUE9JTlQgcG9zaXRpb25JblBvaW50KCkgY29uc3QgeyByZXR1
cm4geyBzdGF0aWNfY2FzdDxMT05HPihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxMT05HPiht
X3Bvc2l0aW9uLnkpIH07IH0KICNlbmRpZgogCi0gICAgZG91YmxlIG1fdGltZTsKLSAgICBXS1Bv
aW50IG1fcG9zaXRpb247Ci0gICAgYm9vbCBtX2xlZnRNb3VzZUJ1dHRvbkRvd247Ci0gICAgaW50
IG1fY2xpY2tDb3VudDsKLSAgICBkb3VibGUgbV9jbGlja1RpbWU7Ci0gICAgV0tQb2ludCBtX2Ns
aWNrUG9zaXRpb247Ci0gICAgV0tFdmVudE1vdXNlQnV0dG9uIG1fY2xpY2tCdXR0b247CisgICAg
ZG91YmxlIG1fdGltZSB7IDAgfTsKKyAgICBXS1BvaW50IG1fcG9zaXRpb24geyB9OworICAgIGJv
b2wgbV9sZWZ0TW91c2VCdXR0b25Eb3duIHsgZmFsc2UgfTsKKyAgICBpbnQgbV9jbGlja0NvdW50
IHsgMCB9OworICAgIGRvdWJsZSBtX2NsaWNrVGltZSB7IDAgfTsKKyAgICBXS1BvaW50IG1fY2xp
Y2tQb3NpdGlvbiB7IH07CisgICAgV0tFdmVudE1vdXNlQnV0dG9uIG1fY2xpY2tCdXR0b24geyBr
V0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b24gfTsKICAgICB1bnNpZ25lZCBtX21vdXNlQnV0dG9u
c0N1cnJlbnRseURvd24geyAwIH07CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaW50IGV2ZW50
TnVtYmVyOwotI2VsaWYgUExBVEZPUk0oV1BFKQotICAgIHVpbnQzMl90IG1fYnV0dG9uU3RhdGU7
CisgICAgaW50IGV2ZW50TnVtYmVyIHsgMCB9OworI2VuZGlmCisjaWYgUExBVEZPUk0oV1BFKQor
ICAgIHVpbnQzMl90IG1fYnV0dG9uU3RhdGUgeyAwIH07CiAgICAgVmVjdG9yPHN0cnVjdCB3cGVf
aW5wdXRfdG91Y2hfZXZlbnRfcmF3PiBtX3RvdWNoRXZlbnRzOwogICAgIEhhc2hTZXQ8dW5zaWdu
ZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1bnNpZ25lZD4+IG1fdXBkYXRlZFRvdWNoRXZlbnRzOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwCmluZGV4IDZm
OTNjYTI3MzAzMGY1Nzc2ZTMxOGY5ZTQ1NjkwMjJjZWUxNGI5MGQuLmM0MjUxYjMwMWZiNTU0Yzdl
YWU2MDMxNjI3NTk2ZjUwYjc4YTI1OWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwCkBAIC02Myw5ICs2Myw5IEBAIEdlb2xvY2F0
aW9uUHJvdmlkZXJNb2NrOjp+R2VvbG9jYXRpb25Qcm92aWRlck1vY2soKQogICAgIFdLR2VvbG9j
YXRpb25NYW5hZ2VyU2V0UHJvdmlkZXIobV9nZW9sb2NhdGlvbk1hbmFnZXIsIDApOwogfQogCi12
b2lkIEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUs
IGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRl
LCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUg
YWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBi
b29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWws
IGRvdWJsZSBmbG9vckxldmVsKQordm9pZCBHZW9sb2NhdGlvblByb3ZpZGVyTW9jazo6c2V0UG9z
aXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ks
IE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1
cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBP
cHRpb25hbDxkb3VibGU+IGZsb29yTGV2ZWwpCiB7Ci0gICAgbV9wb3NpdGlvbi5hZG9wdChXS0dl
b2xvY2F0aW9uUG9zaXRpb25DcmVhdGVfYyhXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBv
Y2goKS5zZWNvbmRzKCksIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0Fs
dGl0dWRlLCBhbHRpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3Vy
YWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkLCBwcm92
aWRlc0Zsb29yTGV2ZWwsIGZsb29yTGV2ZWwpKTsKKyAgICBtX3Bvc2l0aW9uLmFkb3B0KFdLR2Vv
bG9jYXRpb25Qb3NpdGlvbkNyZWF0ZV9jKFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9j
aCgpLnNlY29uZHMoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLmhh
c1ZhbHVlKCksIGFsdGl0dWRlLnZhbHVlT3IoMCksIGFsdGl0dWRlQWNjdXJhY3kuaGFzVmFsdWUo
KSwgYWx0aXR1ZGVBY2N1cmFjeS52YWx1ZU9yKDApLCBoZWFkaW5nLmhhc1ZhbHVlKCksIGhlYWRp
bmcudmFsdWVPcigwKSwgc3BlZWQuaGFzVmFsdWUoKSwgc3BlZWQudmFsdWVPcigwKSwgZmxvb3JM
ZXZlbC5oYXNWYWx1ZSgpLCBmbG9vckxldmVsLnZhbHVlT3IoMCkpKTsKIAogICAgIG1faGFzRXJy
b3IgPSBmYWxzZTsKICAgICBtX2Vycm9yTWVzc2FnZS5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCmluZGV4IDFlZDRhZGY5YjM5
MzkzYTMzM2FhMzI1MTA5N2I5ZTNhYTQyY2MzNmIuLjliZjYzMzg0YWUyN2RiMjhjNWY1NDA1Njg1
Yjg4Zjc1YmVkN2I1MTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9j
YXRpb25Qcm92aWRlck1vY2suaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0
aW9uUHJvdmlkZXJNb2NrLmgKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIEdlb2xvY2F0
aW9uUHJvdmlkZXJNb2NrKFdLQ29udGV4dFJlZik7CiAgICAgfkdlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrKCk7CiAKLSAgICB2b2lkIHNldFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxv
bmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBh
bHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFj
Y3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlk
ZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZs
b29yTGV2ZWwpOworICAgIHZvaWQgc2V0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUg
bG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9w
dGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5n
LCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25hbDxkb3VibGU+IGZsb29yTGV2ZWwpOwog
ICAgIHZvaWQgc2V0UG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVz
c2FnZSk7CiAKICAgICB2b2lkIHN0YXJ0VXBkYXRpbmcoV0tHZW9sb2NhdGlvbk1hbmFnZXJSZWYp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCA2YTA4YWFhNmI2MzlmM2Y1
NWM4YzQ2YTk0YzJmZTk1ZGI1NDdmNzgyLi5hZDRhMjVhZTViMDdiNzU4ZTJlMGE5MWZhZjFiNTI4
MzAzZWI4NDhkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcApAQCAtNzUsOSAr
NzUsOSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp1cGRhdGVJc29sYXRlZFRyZWVN
b2RlKCkKIH0KICNlbmRpZgogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3Qs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om1h
a2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgc2V0UHJvcGVydHko
Y29udGV4dCwgd2luZG93T2JqZWN0LCAiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCB0aGlzLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlLCBleGNlcHRpb24pOworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlciIsIHRoaXMpOwogfQogCiBKU0NsYXNzUmVmIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQpAQCAtOTYsMTcgKzk2LDE3IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVuaGFuY2VkQWNjZXNzaWJpbGl0eUVuYWJsZWQoKQog
fQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisKIFJlZjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnQoKQogewotICAgIFdLQnVuZGxlUGFn
ZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwor
ICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KTsKICAgICBQbGF0Zm9ybVVJRWxlbWVudCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVs
ZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFnZSkpOwotCiAgICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShyb290KTsKIH0KIAogUmVmPEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudCgpCiB7
Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IGZvY3VzZWRFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eUZvY3VzZWRP
YmplY3QocGFnZSkpOwogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUo
Zm9jdXNlZEVsZW1lbnQpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IDY2
YzM0MzgyMmJiYmM2OTU5OWJhZjZhNDc2NjBhMTM4N2VlMjUxYjAuLmQ5YzJmMTI2Zjg3MWNlMmVl
ZjA3YjAwMzU4MGY2ZGFjZTZjNTQyMzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgK
QEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI+IGNyZWF0ZSgpOwogICAgIH5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwogCi0g
ICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93
T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVj
dChKU0NvbnRleHRSZWYpOwogICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsK
ICAgICAKICAgICAvLyBFbmhhbmNlZCBhY2Nlc3NpYmlsaXR5LgpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVz
dFJ1bm5lci5wbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGlu
Z3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG0KaW5kZXggYjlmNWVlZmZhNDY0OWY0MTdmODJi
MTYxNzA5ZjRhYmFlMDk5OTFmMi4uNTJlM2VmYTk5MWI5ZGQ2YzE3NWRiYjhlNDEwZTZmZWNmYWMz
MDEwOCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9C
aW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBt
CkBAIC0yNjEsOCArMjYxLDcgQEAgJHtpbXBsZW1lbnRhdGlvbkNsYXNzTmFtZX0qIHRvJHtpbXBs
ZW1lbnRhdGlvbkNsYXNzTmFtZX0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEoKIAogSlNDbGFzc1Jl
ZiAke2NsYXNzTmFtZX06OiR7Y2xhc3NSZWZHZXR0ZXJ9KCkKIHsKLSAgICBzdGF0aWMgSlNDbGFz
c1JlZiBqc0NsYXNzOwotICAgIGlmICghanNDbGFzcykgeworICAgIHN0YXRpYyBjb25zdCBKU0Ns
YXNzUmVmIGpzQ2xhc3MgPSBbXSB7CiAgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRp
b24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKICAgICAgICAgZGVmaW5pdGlvbi5jbGFzc05h
bWUgPSAiQHtbJHR5cGUtPm5hbWVdfSI7CiAgICAgICAgIGRlZmluaXRpb24ucGFyZW50Q2xhc3Mg
PSBAe1skc2VsZi0+X3BhcmVudENsYXNzUmVmR2V0dGVyRXhwcmVzc2lvbigkaW50ZXJmYWNlKV19
OwpAQCAtMjc0LDggKzI3Myw4IEBAIEVPRgogICAgIHB1c2goQGNvbnRlbnRzLCAiICAgICAgICBk
ZWZpbml0aW9uLmZpbmFsaXplID0gZmluYWxpemU7XG4iKSB1bmxlc3MgX3BhcmVudEludGVyZmFj
ZSgkaW50ZXJmYWNlKTsKIAogICAgIHB1c2goQGNvbnRlbnRzLCA8PEVPRik7Ci0gICAgICAgIGpz
Q2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKLSAgICB9CisgICAgICAgIHJldHVy
biBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKyAgICB9KCk7CiAgICAgcmV0dXJuIGpzQ2xh
c3M7CiB9CiAKQEAgLTQ3NywxMCArNDc2LDExIEBAIHN1YiBfcGxhdGZvcm1UeXBlQ29uc3RydWN0
b3IKIHsKICAgICBteSAoJHNlbGYsICR0eXBlLCAkYXJndW1lbnROYW1lKSA9IEBfOwogCi0gICAg
cmV0dXJuICJKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50TmFtZSki
IGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkdHlwZS0+aXNOdWxsYWJsZTsKKyAgICBy
ZXR1cm4gInRvT3B0aW9uYWxCb29sKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+
bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1Zh
bHVlVG9Cb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAi
Ym9vbGVhbiI7CiAgICAgcmV0dXJuICIkYXJndW1lbnROYW1lIiBpZiAkdHlwZS0+bmFtZSBlcSAi
b2JqZWN0IjsKLSAgICByZXR1cm4gImFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
JGFyZ3VtZW50TmFtZSwgbnVsbHB0cikpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3Ry
aW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJjcmVhdGVKU1N0cmluZyhjb250ZXh0LCAkYXJn
dW1lbnROYW1lKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUp
OworICAgIHJldHVybiAidG9PcHRpb25hbERvdWJsZShjb250ZXh0LCAkYXJndW1lbnROYW1lKSIg
aWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpICYmICR0eXBl
LT5pc051bGxhYmxlOwogICAgIHJldHVybiAiSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsICRhcmd1
bWVudE5hbWUsIG51bGxwdHIpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJpbWl0aXZl
VHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuICJ0byIgLiBfaW1wbGVtZW50YXRpb25DbGFzc05hbWUo
JHR5cGUpIC4gIihjb250ZXh0LCAkYXJndW1lbnROYW1lKSI7CiB9CkBAIC00OTksMTggKzQ5OSwx
NiBAQCBzdWIgX3BsYXRmb3JtVHlwZVZhcmlhYmxlRGVjbGFyYXRpb24KICAgICAgICAgIkpTVmFs
dWVSZWYiID0+IDEsCiAgICAgKTsKIAotICAgIG15ICRudWxsVmFsdWUgPSAiMCI7CisgICAgbXkg
JG51bGxWYWx1ZSA9ICJudWxscHRyIjsKICAgICBpZiAoJHBsYXRmb3JtVHlwZSBlcSAiSlNWYWx1
ZVJlZiIpIHsKICAgICAgICAgJG51bGxWYWx1ZSA9ICJKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KSI7Ci0gICAgfSBlbHNpZiAoZGVmaW5lZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5
cGV9ICYmICRwbGF0Zm9ybVR5cGUgbmUgImRvdWJsZSIpIHsKLSAgICAgICAgJG51bGxWYWx1ZSA9
ICIkcGxhdGZvcm1UeXBlKCkiOworICAgIH0gZWxzaWYgKGRlZmluZWQgJG5vblBvaW50ZXJUeXBl
c3skcGxhdGZvcm1UeXBlfSkgeworICAgICAgICAkbnVsbFZhbHVlID0gJHR5cGUtPmlzTnVsbGFi
bGUgPyAiV1RGOjpudWxsb3B0IiA6ICIkcGxhdGZvcm1UeXBlKCkiOwogICAgIH0KIAotICAgICRw
bGF0Zm9ybVR5cGUgLj0gIioiIHVubGVzcyBkZWZpbmVkICRub25Qb2ludGVyVHlwZXN7JHBsYXRm
b3JtVHlwZX07Ci0KLSAgICByZXR1cm4gIiRwbGF0Zm9ybVR5cGUgJHZhcmlhYmxlTmFtZSA9ICRj
b25kaXRpb24gJiYgJGNvbnN0cnVjdG9yOyIgaWYgJGNvbmRpdGlvbiAmJiAkcGxhdGZvcm1UeXBl
IGVxICJib29sIjsKLSAgICByZXR1cm4gIiRwbGF0Zm9ybVR5cGUgJHZhcmlhYmxlTmFtZSA9ICRj
b25kaXRpb24gPyAkY29uc3RydWN0b3IgOiAkbnVsbFZhbHVlOyIgaWYgJGNvbmRpdGlvbjsKLSAg
ICByZXR1cm4gIiRwbGF0Zm9ybVR5cGUgJHZhcmlhYmxlTmFtZSA9ICRjb25zdHJ1Y3RvcjsiOwor
ICAgIHJldHVybiAiYm9vbCAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiAmJiAkY29uc3RydWN0
b3I7IiBpZiAkY29uZGl0aW9uICYmICRwbGF0Zm9ybVR5cGUgZXEgImJvb2wiOworICAgIHJldHVy
biAiYXV0byAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiA/ICRjb25zdHJ1Y3RvciA6ICRudWxs
VmFsdWU7IiBpZiAkY29uZGl0aW9uOworICAgIHJldHVybiAiYXV0byAkdmFyaWFibGVOYW1lID0g
JGNvbnN0cnVjdG9yOyI7CiB9CiAKIHN1YiBfcmV0dXJuRXhwcmVzc2lvbgpAQCAtNTE4LDExICs1
MTYsMTEgQEAgc3ViIF9yZXR1cm5FeHByZXNzaW9uCiAgICAgbXkgKCRzZWxmLCAkcmV0dXJuVHlw
ZSwgJGV4cHJlc3Npb24pID0gQF87CiAKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAidW5kZWZpbmVkIjsKLSAgICByZXR1
cm4gIkpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYg
JHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICRyZXR1cm5UeXBlLT5pc051bGxhYmxl
OworICAgIHJldHVybiAibWFrZVZhbHVlKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0pIiBpZiAkcmV0
dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5cGUtPmlzTnVsbGFibGU7CiAg
ICAgcmV0dXJuICJKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlm
ICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gIiR7ZXhwcmVzc2lv
bn0iIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJvYmplY3QiOwogICAgIHJldHVybiAiSlNWYWx1
ZU1ha2VOdW1iZXIoY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlmICQkc2VsZntjb2RlR2VuZXJh
dG9yfS0+SXNQcmltaXRpdmVUeXBlKCRyZXR1cm5UeXBlKTsKLSAgICByZXR1cm4gIkpTVmFsdWVN
YWtlU3RyaW5nT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0uZ2V0KCkpIiBpZiAkJHNlbGZ7
Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkcmV0dXJuVHlwZSk7CisgICAgcmV0dXJuICJt
YWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSkiIGlmICQkc2VsZntjb2RlR2Vu
ZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKICAgICByZXR1cm4gInRvSlMoY29u
dGV4dCwgV1RGOjpnZXRQdHIoJHtleHByZXNzaW9ufSkpIjsKIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlk
bCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1
bm5lci5pZGwKaW5kZXggZmJlZjM5NmY1ZjZmM2JmZjRmOTljOGE1NmE2ZTYyYWMwMTQwZmZhNC4u
ZjM3ZTAwNjc3NWI4ZTMwNjFjN2NlYzhmOWI1ZWY3ODg2MTgwOTEwYSAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlk
bAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rl
c3RSdW5uZXIuaWRsCkBAIC0yMTUsNyArMjE1LDcgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewog
CiAgICAgLy8gR2VvbG9jYXRpb24KICAgICB1bmRlZmluZWQgc2V0R2VvbG9jYXRpb25QZXJtaXNz
aW9uKGJvb2xlYW4gdmFsdWUpOwotICAgIHVuZGVmaW5lZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwg
b3B0aW9uYWwgb2JqZWN0IGFsdGl0dWRlLCBvcHRpb25hbCBvYmplY3QgYWx0aXR1ZGVBY2N1cmFj
eSwgb3B0aW9uYWwgb2JqZWN0IGhlYWRpbmcsIG9wdGlvbmFsIG9iamVjdCBzcGVlZCwgb3B0aW9u
YWwgb2JqZWN0IGZsb29yTGV2ZWwpOworICAgIHVuZGVmaW5lZCBzZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFj
eSwgb3B0aW9uYWwgZG91YmxlPyBhbHRpdHVkZSwgb3B0aW9uYWwgZG91YmxlPyBhbHRpdHVkZUFj
Y3VyYWN5LCBvcHRpb25hbCBkb3VibGU/IGhlYWRpbmcsIG9wdGlvbmFsIGRvdWJsZT8gc3BlZWQs
IG9wdGlvbmFsIGRvdWJsZT8gZmxvb3JMZXZlbCk7CiAgICAgdW5kZWZpbmVkIHNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihET01TdHJpbmcgZXJyb3JNZXNzYWdlKTsK
ICAgICBib29sZWFuIGlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpOwogCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRy
b2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNl
bmRpbmdDb250cm9sbGVyLmNwcAppbmRleCA1NTNmZDA1ZWYxNjlmMzUyM2EwNDMxZjEzMTc0MmZi
YzIyMTcwNDA5Li5mY2QwZDViZjg4NmJiMzI3MzI4YjA1M2ZlZmY2ZmNhM2EyMjYwMGY2IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGlu
Z0NvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKQEAgLTI2LDEwICsyNiwxMCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaCIKIAorI2lu
Y2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5o
IgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUGFnZS5oIgogI2luY2x1ZGUgIkpTRXZlbnRTZW5k
aW5nQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUg
PFdlYktpdC9XS0J1bmRsZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0J1bmRsZUZyYW1lLmg+CiAj
aW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlUGFnZVByaXZhdGUuaD4KQEAgLTUyLDYgKzUyLDcgQEAg
c3RydWN0IE1lbnVJdGVtUHJpdmF0ZURhdGEgewogfTsKIAogI2lmIEVOQUJMRShDT05URVhUX01F
TlVTKQorCiBzdGF0aWMgSlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNrQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qs
IGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCiB7CiAgICAgTWVudUl0ZW1Qcml2YXRl
RGF0YSogcHJpdmF0ZURhdGEgPSBzdGF0aWNfY2FzdDxNZW51SXRlbVByaXZhdGVEYXRhKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKQEAgLTYyLDcgKzYzLDcgQEAgc3RhdGljIEpT
VmFsdWVSZWYgbWVudUl0ZW1DbGlja0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiwgSlNPYmoKIHN0YXRpYyBKU1ZhbHVlUmVmIGdldE1lbnVJdGVtVGl0bGVDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0cmluZ1JlZiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBNZW51SXRlbVByaXZh
dGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJdGVtUHJpdmF0ZURhdGEqPihK
U09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHdrVGl0bGUgPSBhZG9wdFdLKFdLQ29udGV4dE1lbnVJdGVtQ29weVRpdGxlKHByaXZhdGVEYXRh
LT5tX2l0ZW0uZ2V0KCkpKTsKKyAgICBhdXRvIHdrVGl0bGUgPSBhZG9wdFdLKFdLQ29udGV4dE1l
bnVJdGVtQ29weVRpdGxlKHByaXZhdGVEYXRhLT5tX2l0ZW0uZ2V0KCkpKTsKICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgdG9KUyh3a1RpdGxlKS5nZXQoKSk7CiB9CiAKQEAg
LTczLDE4ICs3NCwxNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRNZW51SXRlbUNoaWxkcmVuQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmCiAgICAgTWVudUl0ZW1Qcml2
YXRlRGF0YSogcHJpdmF0ZURhdGEgPSBzdGF0aWNfY2FzdDxNZW51SXRlbVByaXZhdGVEYXRhKj4o
SlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwogICAgIGF1dG8gY2hpbGRyZW4gPSBhZG9wdFdL
KFdLQ29udGV4dE1lbnVDb3B5U3VibWVudUl0ZW1zKHByaXZhdGVEYXRhLT5tX2l0ZW0uZ2V0KCkp
KTsKIAotICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250
ZXh0LCAwLCAwLCAwKTsKKyAgICBhdXRvIGFycmF5ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4
dCwgMCwgMCwgMCk7CiAgICAgaWYgKCFXS0FycmF5R2V0U2l6ZShjaGlsZHJlbi5nZXQoKSkpCi0g
ICAgICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogCi0gICAg
SlNPYmplY3RSZWYgYXJyYXlPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJyYXlS
ZXN1bHQsIDApOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV0tBcnJheUdldFNpemUoY2hp
bGRyZW4uZ2V0KCkpOyArK2kpIHsKICAgICAgICAgYXV0byBpdGVtID0gc3RhdGljX2Nhc3Q8V0tD
b250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZHJlbi5nZXQoKSwg
aSkpOwogICAgICAgICBhdXRvKiBwcml2YXRlRGF0YSA9IG5ldyBNZW51SXRlbVByaXZhdGVEYXRh
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgaXRlbSk7Ci0gICAg
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2JqZWN0LCBpLCBK
U09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFzcygpLCBwcml2YXRlRGF0YSksIDAp
OworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwg
SlNPYmplY3RNYWtlKGNvbnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAw
KTsKICAgICB9CiAKLSAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgcmV0dXJuIGFycmF5Owog
fQogCiBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNNZW51SXRlbUZ1bmN0aW9uc1tdID0g
ewpAQCAtMTI2LDYgKzEyNiw3IEBAIHN0YXRpYyBKU0NsYXNzUmVmIGdldE1lbnVJdGVtQ2xhc3Mo
KQogCiAgICAgcmV0dXJuIG1lbnVJdGVtQ2xhc3M7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgV0tF
dmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyKQpAQCAtMTUw
LDI1ICsxNTEsMzEgQEAgc3RhdGljIFdLRXZlbnRNb2RpZmllcnMgcGFyc2VNb2RpZmllcihKU1N0
cmluZ1JlZiBtb2RpZmllcikKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGFy
cmF5TGVuZ3RoKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBhcnJheSkKKyNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorCitzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZVRvdWNo
TW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIpCiB7Ci0gICAgYXV0byBsZW5ndGhTdHJpbmcg
PSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpT
VmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGFycmF5
LCBsZW5ndGhTdHJpbmcuZ2V0KCksIDApOwotICAgIGlmICghbGVuZ3RoVmFsdWUpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobW9kaWZpZXIsICJjdHJsIikpCisgICAgICAgIHJldHVybiBrV0tFdmVudE1v
ZGlmaWVyc0NvbnRyb2xLZXk7CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bW9kaWZpZXIsICJzaGlmdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2RpZmllcnNTaGlm
dEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImFs
dCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2RpZmllcnNBbHRLZXk7CisgICAgaWYgKEpT
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJtZXRhS2V5IikpCisgICAgICAg
IHJldHVybiBrV0tFdmVudE1vZGlmaWVyc01ldGFLZXk7CisgICAgcmV0dXJuIDA7CiB9CiAKKyNl
bmRpZgorCiBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKICAgICBpZiAoIWFycmF5
VmFsdWUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gVGhlIHZhbHVlIG1heSBlaXRoZXIg
YmUgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBvZiBtb2RpZmll
cnMuCi0gICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkgewotICAg
ICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJy
YXlWYWx1ZSwgMCkpOwotICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihzdHJpbmcuZ2V0KCkp
OwotICAgIH0KKyAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpKQor
ICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcnJh
eVZhbHVlKS5nZXQoKSk7CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBhcnJh
eVZhbHVlKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzYsMjkgKzE4MywyMCBAQCBzdGF0aWMg
V0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgYXJyYQogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRl
eHQsIGFycmF5KTsKICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IDA7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYg
ZXhjZXB0aW9uID0gMDsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYg
KGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIHN0cmluZyA9
IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsICZleGNlcHRpb24pKTsK
LSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBt
b2RpZmllcnMgfD0gcGFyc2VNb2RpZmllcihzdHJpbmcuZ2V0KCkpOworICAgICAgICBpZiAoYXV0
byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBu
dWxscHRyKSkKKyAgICAgICAgICAgIG1vZGlmaWVycyB8PSBwYXJzZU1vZGlmaWVyKGNyZWF0ZUpT
U3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CiAgICAgfQogICAgIHJldHVybiBtb2RpZmll
cnM7CiB9CiAKLVJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXIpOwotfQotCi1FdmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNlbmRpbmdDb250
cm9sbGVyKCkKK3N0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXJBcnJheShKU1Zh
bHVlUmVmIGFycmF5VmFsdWUpCiB7CisgICAgcmV0dXJuIHBhcnNlTW9kaWZpZXJBcnJheShXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpLCBhcnJheVZhbHVlKTsK
IH0KIAotRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKQor
UmVmPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNyZWF0
ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXZlbnRTZW5kaW5nQ29udHJvbGxlcik7
CiB9CiAKIEpTQ2xhc3NSZWYgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkK
QEAgLTIwNiwyMzcgKzIwNCwxMTYgQEAgSlNDbGFzc1JlZiBFdmVudFNlbmRpbmdDb250cm9sbGVy
Ojp3cmFwcGVyQ2xhc3MoKQogICAgIHJldHVybiBKU0V2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmV2
ZW50U2VuZGluZ0NvbnRyb2xsZXJDbGFzcygpOwogfQogCi1lbnVtIE1vdXNlU3RhdGUgewotICAg
IE1vdXNlVXAsCi0gICAgTW91c2VEb3duCi19OworZW51bSBNb3VzZVN0YXRlIHsgTW91c2VVcCwg
TW91c2VEb3duIH07CiAKLXN0YXRpYyBXS011dGFibGVEaWN0aW9uYXJ5UmVmIGNyZWF0ZU1vdXNl
TWVzc2FnZUJvZHkoTW91c2VTdGF0ZSBzdGF0ZSwgaW50IGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVy
cyBtb2RpZmllcnMpCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBjcmVhdGVN
b3VzZU1lc3NhZ2VCb2R5KE1vdXNlU3RhdGUgc3RhdGUsIGludCBidXR0b24sIFdLRXZlbnRNb2Rp
ZmllcnMgbW9kaWZpZXJzKQogewotICAgIFdLTXV0YWJsZURpY3Rpb25hcnlSZWYgRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keSA9IFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHN0YXRlID09IE1vdXNlVXAgPyAiTW91c2VVcCIgOiAiTW91c2VEb3duIikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgc3ViTWVzc2FnZUtleS5n
ZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGJ1dHRvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1
dHRvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gYnV0dG9uUmVmID0gYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShidXR0b24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHksIGJ1dHRvbktleS5nZXQoKSwgYnV0dG9uUmVmLmdldCgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tVSW50NjRSZWY+IG1vZGlmaWVyc1JlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kaWZp
ZXJzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LCBt
b2RpZmllcnNLZXkuZ2V0KCksIG1vZGlmaWVyc1JlZi5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRXZl
bnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCBzdGF0
ZSA9PSBNb3VzZVVwID8gIk1vdXNlVXAiIDogIk1vdXNlRG93biIpOworICAgIHNldFZhbHVlKGJv
ZHksICJCdXR0b24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbikpLmdldCgpKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiTW9kaWZpZXJzIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2Rp
ZmllcnMpKS5nZXQoKSk7CisgICAgcmV0dXJuIGJvZHk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5n
Q29udHJvbGxlcjo6bW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJh
eSkgCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCk7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBpbmplY3RlZEJ1bmRsZS5wYWdlKCkt
PnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdl
dEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVy
cyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFycmF5KTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFk
b3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZURvd24sIGJ1dHRvbiwgbW9kaWZpZXJz
KSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhw
YWdlLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIi
LCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBwYXJzZU1vZGlmaWVy
QXJyYXkobW9kaWZpZXJBcnJheSkpLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250
cm9sbGVyOjptb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSkKIHsK
LSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1v
ZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFycmF5KTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBidXR0b24sIG1vZGlm
aWVycykpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVhdGVNb3VzZU1l
c3NhZ2VCb2R5KE1vdXNlVXAsIGJ1dHRvbiwgcGFyc2VNb2RpZmllckFycmF5KG1vZGlmaWVyQXJy
YXkpKS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3Zl
VG8oaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZU1vdmVUbyIpKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCks
IHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
eEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
eUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdl
IiwgIk1vdXNlTW92ZVRvIik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CiAgICAgbV9wb3NpdGlvbiA9IFdLUG9pbnRNYWtlKHgs
IHkpOwotICAgIAotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0
aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7Cisg
ICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7
CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNsaWNrKCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiTW91c2VGb3JjZUNsaWNrIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZUNsaWNrIik7CisgICAgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAK
IHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c3RhcnRBbmRDYW5jZWxNb3VzZUZvcmNlQ2xp
Y2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayIpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXku
Z2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlN0YXJ0
QW5kQ2FuY2VsTW91c2VGb3JjZUNsaWNrIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6bW91c2VGb3JjZURvd24oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlRG93biIpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3Nh
Z2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwg
Ik1vdXNlRm9yY2VEb3duIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50
U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
bW91c2VGb3JjZVVwKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2
ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VGb3JjZVVwIikpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwg
c3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZVVw
Iik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5n
ZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNoYW5n
ZWQoZG91YmxlIGZvcmNlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlQ2hhbmdlZCIpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXku
Z2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZv
cmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBmb3JjZVJlZiA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoZm9yY2UpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGZvcmNlS2V5LmdldCgpLCBmb3JjZVJlZi5nZXQoKSk7Ci0K
LSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5h
bWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9k
eSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZUZvcmNlQ2hhbmdlZCIpOworICAgIHNldFZhbHVlKGJv
ZHksICJGb3JjZSIsIGZvcmNlKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZl
bnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVy
OjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxl
RGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVz
c2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMZWFwRm9yd2FyZCIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB0aW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVGltZUluTWlsbGlzZWNvbmRzIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiB0aW1lUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHRpbWVLZXku
Z2V0KCksIHRpbWVSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTGVhcEZvcndhcmQi
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiVGltZUluTWlsbGlzZWNvbmRzIiwgYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShtaWxsaXNlY29uZHMpKS5nZXQoKSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFn
ZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljaygpCiB7Ci0gICAgV0tFdmVu
dE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOwotICAgIGludCBidXR0b24gPSAwOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLQotICAgIC8vIEFz
eW5jaHJvbm91cyBtb3VzZSBkb3duLgotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IG1vdXNlRG93bk1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3VzZU1lc3NhZ2VC
b2R5KE1vdXNlRG93biwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50
U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlRG93bk1lc3NhZ2VCb2R5LmdldCgpKTsKLQot
ICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSB1cC4KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBtb3VzZVVwTWVzc2FnZUJvZHkgPSBhZG9wdFdLKGNyZWF0ZU1vdXNlTWVz
c2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlVXBNZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHko
TW91c2VEb3duLCAwLCAwKS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRl
ciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgMCwgMCkuZ2V0KCkpOwogfQogCiBz
dGF0aWMgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRlS2V5RG93bk1l
c3NhZ2VCb2R5KEpTU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIGlu
dCBsb2NhdGlvbikKIHsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIktleURvd24iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJN
ZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5IikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwga2V5S2V5Lmdl
dCgpLCB0b1dLKGtleSkuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1v
ZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlm
aWVycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJzUmVmID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyc0tleS5nZXQoKSwgbW9kaWZp
ZXJzUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsb2NhdGlvbktl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxvY2F0aW9uIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBsb2NhdGlvblJlZiA9IGFkb3B0V0soV0tVSW50
NjRDcmVhdGUobG9jYXRpb24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIGxvY2F0aW9uS2V5LmdldCgpLCBsb2NhdGlvblJlZi5nZXQoKSk7
Ci0KLSAgICByZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRvIGJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
IlN1Yk1lc3NhZ2UiLCAiS2V5RG93biIpOworICAgIHNldFZhbHVlKGJvZHksICJLZXkiLCB0b1dL
KGtleSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJNb2RpZmllcnMiLCBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKG1vZGlmaWVycykpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTG9j
YXRpb24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxvY2F0aW9uKSkuZ2V0KCkpOworICAgIHJl
dHVybiBib2R5OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmtleURvd24oSlNT
dHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2NhdGlvbikKIHsK
LSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1v
ZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFycmF5KTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4ga2V5RG93bk1lc3NhZ2VCb2R5ID0g
Y3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgbW9kaWZpZXJzLCBsb2NhdGlvbik7Ci0KLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUu
Z2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwg
cGFyc2VNb2RpZmllckFycmF5KG1vZGlmaWVyQXJyYXkpLCBsb2NhdGlvbikuZ2V0KCkpOwogfQog
CiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93
bihKU1N0cmluZ1JlZiBrZXkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50
U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVm
PiBrZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoa2V5LCAwIC8q
IG1vZGlmaWVycyAqLywgMCAvKiBsb2NhdGlvbiAqLyk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50
U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZUtleURvd25NZXNzYWdlQm9keShr
ZXksIDAsIDApLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3Vz
ZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VTY3JvbGxCeSIpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VL
ZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlki
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCiAgICAgV0tCdW5kbGVQYWdlRm9y
Y2VSZXBhaW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7IC8v
IFRyaWdnZXJzIGEgc2Nyb2xsaW5nIHRyZWUgY29tbWl0LgotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSk7CisK
KyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Cisg
ICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VTY3JvbGxCeSIpOworICAgIHNl
dFZhbHVlKGJvZHksICJYIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSkuZ2V0KCkpOworICAg
IHNldFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSkuZ2V0KCkpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogc3Rh
dGljIHVpbnQ2NF90IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcoSlNTdHJpbmdSZWYgcGhhc2VTdHIp
CkBAIC00NzUsOTAgKzM1Miw1OCBAQCBzdGF0aWMgdWludDY0X3QgY2dFdmVudE1vbWVudHVtUGhh
c2VGcm9tU3RyaW5nKEpTU3RyaW5nUmVmIHBoYXNlU3RyKQogCiB2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQgeCwg
aW50IHksIEpTU3RyaW5nUmVmIHBoYXNlU3RyLCBKU1N0cmluZ1JlZiBtb21lbnR1bVN0cikKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAgCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIk1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3Nh
Z2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLSAgICAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHhSZWYgPSBhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotICAgIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0
V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KICAgICB1aW50
NjRfdCBwaGFzZSA9IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcocGhhc2VTdHIpOwogICAgIHVpbnQ2
NF90IG1vbWVudHVtID0gY2dFdmVudE1vbWVudHVtUGhhc2VGcm9tU3RyaW5nKG1vbWVudHVtU3Ry
KTsKLSAgICAKKwogICAgIGlmIChwaGFzZSA9PSA0IC8qIGtDR1Njcm9sbFBoYXNlRW5kZWQgKi8g
fHwgcGhhc2UgPT0gOCAvKiBrQ0dTY3JvbGxQaGFzZUNhbmNlbGxlZCAqLykKICAgICAgICAgbV9z
ZW50V2hlZWxQaGFzZUVuZE9yQ2FuY2VsID0gdHJ1ZTsKLSAgICAKICAgICBpZiAobW9tZW50dW0g
PT0gMyAvKiBrQ0dNb21lbnR1bVNjcm9sbFBoYXNlRW5kICovKQogICAgICAgICBtX3NlbnRXaGVl
bE1vbWVudHVtUGhhc2VFbmQgPSB0cnVlOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHBoYXNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGhhc2Ui
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHBoYXNlUmVmID0gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShwaGFzZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgcGhhc2VLZXkuZ2V0KCksIHBoYXNlUmVmLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb21lbnR1bUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vbWVudHVtIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiBtb21lbnR1bVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9tZW50dW0pKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1v
bWVudHVtS2V5LmdldCgpLCBtb21lbnR1bVJlZi5nZXQoKSk7Ci0KICAgICBXS0J1bmRsZVBhZ2VG
b3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsg
Ly8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcgdHJlZSBjb21taXQuCi0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpKTsK
KworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZVNjcm9sbEJ5V2l0aFdoZWVs
QW5kTW9tZW50dW1QaGFzZXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIGFkb3B0V0soV0tE
b3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIsIGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUGhhc2UiLCBw
aGFzZSk7CisgICAgc2V0VmFsdWUoYm9keSwgIk1vbWVudHVtIiwgbW9tZW50dW0pOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHks
IGJvb2wgcGFnZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVu
dFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5IikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtl
eS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikp
OwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNy
ZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gcGFnZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJQYWdlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcGFnZWRSZWYgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKHBhZ2VkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwYWdlZEtleS5nZXQoKSwgcGFnZWRSZWYuZ2V0KCkp
OwotCisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkNvbnRpbnVvdXNNb3VzZVNjcm9s
bEJ5Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgp
KS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRl
KHkpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlBhZ2VkIiwgcGFnZWQpOwogICAgIC8v
IEZJWE1FOiBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIGFzeW5jaHJvbm91cywgYXMgc2Nyb2xsaW5n
IGlzIGludHJpbnNpY2FsbHkgYXN5bmNocm9ub3VzLgogICAgIC8vIFNlZSBhbHNvOiA8aHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODI1Nj4uCi0gICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogSlNWYWx1ZVJlZiBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpjb250ZXh0Q2xpY2soKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1
dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAg
ICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShw
YWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChtYWluRnJhbWUpOwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotICAgIFdL
UmV0YWluUHRyPFdLQXJyYXlSZWY+IG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VD
b3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikpOwotICAgIEpT
VmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAw
KTsKKyAgICBhdXRvIG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5Q29udGV4
dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikpOworICAgIGF1dG8gYXJyYXkg
PSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAoIW1lbnVFbnRy
aWVzKQotICAgICAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgICAgIHJldHVybiBhcnJheTsK
IAotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFy
cmF5UmVzdWx0LCAwKTsKICAgICBzaXplX3QgZW50cmllc1NpemUgPSBXS0FycmF5R2V0U2l6ZSht
ZW51RW50cmllcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyaWVzU2l6
ZTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0SXRlbUF0SW5k
ZXgobWVudUVudHJpZXMuZ2V0KCksIGkpKSA9PSBXS0NvbnRleHRNZW51SXRlbUdldFR5cGVJRCgp
KTsKIAogICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJlZiBpdGVtID0gc3RhdGljX2Nhc3Q8V0tD
b250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZW51RW50cmllcy5nZXQo
KSwgaSkpOwogICAgICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IG5ldyBN
ZW51SXRlbVByaXZhdGVEYXRhKHBhZ2UsIGl0ZW0pOwotICAgICAgICBKU09iamVjdFNldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwgaSwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGdl
dE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAwKTsKKyAgICAgICAgSlNPYmplY3RTZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBn
ZXRNZW51SXRlbUNsYXNzKCksIHByaXZhdGVEYXRhKSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJu
IGFycmF5UmVzdWx0OworICAgIHJldHVybiBhcnJheTsKICNlbHNlCiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogI2VuZGlmCkBAIC02MTUsMjEgKzQ2MCwxNCBAQCBN
b25pdG9yV2hlZWxFdmVudHNPcHRpb25zKiB0b01vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVgogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQs
IGFyZ3VtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHJlc2V0TGF0
Y2hpbmdTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicmVzZXRM
YXRjaGluZyIpKTsKLSAgICBhdXRvIHJlc2V0TGF0Y2hpbmdWYWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50LCBudWxscHRy
KSwgcmVzZXRMYXRjaGluZ1N0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAgICBib29sIHJlc2V0
TGF0Y2hpbmcgPSB0cnVlOwotICAgIGlmIChyZXNldExhdGNoaW5nVmFsdWUgJiYgSlNWYWx1ZUlz
Qm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5nVmFsdWUpKQotICAgICAgICByZXNldExhdGNo
aW5nID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5nVmFsdWUpOwotCiAg
ICAgc3RhdGljIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMgb3B0aW9uczsKLSAgICBvcHRpb25z
LnJlc2V0TGF0Y2hpbmcgPSByZXNldExhdGNoaW5nOworICAgIG9wdGlvbnMucmVzZXRMYXRjaGlu
ZyA9IGJvb2xlYW5Qcm9wZXJ0eShjb250ZXh0LCAoSlNPYmplY3RSZWYpYXJndW1lbnQsICJyZXNl
dExhdGNoaW5nIiwgdHJ1ZSk7CiAgICAgcmV0dXJuICZvcHRpb25zOwogfQogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6Om1vbml0b3JXaGVlbEV2ZW50cyhNb25pdG9yV2hlZWxFdmVudHNP
cHRpb25zKiBvcHRpb25zKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICAKICAgICBtX3NlbnRX
aGVlbFBoYXNlRW5kT3JDYW5jZWwgPSBmYWxzZTsKICAgICBtX3NlbnRXaGVlbE1vbWVudHVtUGhh
c2VFbmQgPSBmYWxzZTsKQEAgLTY2Myw3ICs1MDEsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmNhbGxBZnRlclNjcm9sbGluZ0NvbXBsZXRlcyhKU1ZhbHVlUmVmIGZ1bmN0aW9uQ2Fs
bAogICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgCkBAIC02ODMsMTk5ICs1
MjEsMTAyIEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FsbEFmdGVyU2Nyb2xsaW5n
Q29tcGxldGVzKEpTVmFsdWVSZWYgZnVuY3Rpb25DYWxsCiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQorCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmFkZFRvdWNoUG9pbnQoaW50
IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRT
ZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJBZGRUb3VjaFBvaW50IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3Vi
TWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgIFdLUmV0
YWluUHRyPFdLVUludDY0UmVmPiB4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh4KSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5
LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1VJbnQ2NFJlZj4geVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoeSkpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtl
eS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJBZGRUb3VjaFBvaW50
Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCB4KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIs
IHkpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHku
Z2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9p
bnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVwZGF0ZVRvdWNoUG9pbnQiKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJN
ZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJJbmRleCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5kZXhSZWYg
PSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwgaW5kZXhSZWYu
Z2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiB4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVm
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJ
bnQ2NFJlZj4geVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoeSkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJl
Zi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwor
ICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJVcGRhdGVUb3VjaFBvaW50Iik7CisgICAg
c2V0VmFsdWUoYm9keSwgIkluZGV4IiwgaW5kZXgpOworICAgIHNldFZhbHVlKGJvZHksICJYIiwg
eCk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCB5KTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAotdm9pZCBFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyKGNvbnN0IEpTU3RyaW5nUmVmICZtb2RpZmll
ciwgYm9vbCBlbmFibGUpCit2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9k
aWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRUb3VjaE1v
ZGlmaWVyIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0g
ICAgV0tFdmVudE1vZGlmaWVycyBtb2QgPSAwOwotICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1vZGlmaWVyLCAiY3RybCIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlm
aWVyc0NvbnRyb2xLZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9k
aWZpZXIsICJzaGlmdCIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5
OwotICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVyLCAiYWx0Iikp
Ci0gICAgICAgIG1vZCA9IGtXS0V2ZW50TW9kaWZpZXJzQWx0S2V5OwotICAgIGlmIChKU1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVyLCAibWV0YSIpKQotICAgICAgICBtb2QgPSBr
V0tFdmVudE1vZGlmaWVyc01ldGFLZXk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bW9kaWZpZXJLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2Rp
ZmllciIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJSZWYgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKG1vZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgbW9kaWZpZXJLZXkuZ2V0KCksIG1vZGlmaWVyUmVmLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbmFibGVLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFbmFibGUiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tVSW50NjRSZWY+IGVuYWJsZVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZW5hYmxl
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCBlbmFibGVLZXkuZ2V0KCksIGVuYWJsZVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIs
ICJTZXRUb3VjaE1vZGlmaWVyIik7CisgICAgc2V0VmFsdWUoYm9keSwgIk1vZGlmaWVyIiwgcGFy
c2VUb3VjaE1vZGlmaWVyKG1vZGlmaWVyKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIkVuYWJsZSIs
IGVuYWJsZSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwg
Ym9keS5nZXQoKSk7CiB9CiAKLQogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3Vj
aFBvaW50UmFkaXVzKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0VG91Y2hQb2lu
dFJhZGl1cyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUmFkaXVzWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4geFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUocmFkaXVzWCkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJl
Zi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1kiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tVSW50NjRSZWY+IHlSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHJhZGl1c1kpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlL
ZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiU2V0VG91Y2hQb2lu
dFJhZGl1cyIpOworICAgIHNldFZhbHVlKGJvZHksICJSYWRpdXNYIiwgcmFkaXVzWCk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlJhZGl1c1kiLCByYWRpdXNZKTsKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjp0b3VjaFN0YXJ0KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURp
Y3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3Nh
Z2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hTdGFydCIpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3Nh
Z2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwg
IlRvdWNoU3RhcnQiKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5k
ZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3Vj
aE1vdmUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5k
ZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJUb3VjaE1vdmUiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdl
TmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50
U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDAp
OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJUb3VjaE1vdmUiKTsKKyAgICBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAog
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaEVuZCgpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvdWNoRW5kIikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
c3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1l
c3NhZ2UiLCAiVG91Y2hFbmQiKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZl
bnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVy
Ojp0b3VjaENhbmNlbCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJF
dmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvdWNoQ2FuY2VsIikpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwg
c3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiVG91Y2hDYW5jZWwi
KTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5Lmdl
dCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjbGVhclRvdWNoUG9pbnRz
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikp
OwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2xlYXJUb3VjaFBvaW50cyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3Nh
Z2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
MCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkNsZWFyVG91Y2hQb2ludHMiKTsK
KyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgp
KTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpyZWxlYXNlVG91Y2hQb2ludChp
bnQgaW5kZXgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNl
bmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlJlbGVhc2VUb3VjaFBvaW50IikpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwg
c3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlu
ZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5kZXgiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGluZGV4UmVmID0gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShpbmRleCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgaW5kZXhLZXkuZ2V0KCksIGluZGV4UmVmLmdldCgpKTsKLQotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJT
dWJNZXNzYWdlIiwgIlJlbGVhc2VUb3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIklu
ZGV4IiwgaW5kZXgpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRl
ciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNhbmNl
bFRvdWNoUG9pbnQoaW50IGluZGV4KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYW5jZWxUb3VjaFBvaW50IikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2Fn
ZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSW5kZXgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGluZGV4UmVmID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXkuZ2V0KCksIGluZGV4UmVmLmdldCgp
KTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0
byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZh
bHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkNhbmNlbFRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiSW5kZXgiLCBpbmRleCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2Uo
IkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CisKICNlbmRpZgogCiAvLyBPYmplY3QgQ3Jl
YXRpb24KIAotdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3ZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVj
dChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5k
b3dPYmplY3QsICJldmVudFNlbmRlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0
R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgImV2ZW50U2VuZGVyIiwgdGhpcyk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRleCA5YTJh
ZmQ5NThjY2Q3MGVjZDIxZWM0ZTNiM2ZlYzRjZjdjYzg1YmE4Li5lYTQzN2ZiZGJlMGMzNDg5MDU3
ZTMxNjA3NWFkZWE2NTNhZGI1MTBkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaApAQCAt
MzAsMjcgKzMwLDIzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLR2VvbWV0cnkuaD4KICNpbmNsdWRl
IDx3dGYvUmVmLmg+CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlND
b250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVmOwor
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFtZXNw
YWNlIFdUUiB7CiAKIHN0cnVjdCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zIHsKLSAgICBNb25p
dG9yV2hlZWxFdmVudHNPcHRpb25zKGJvb2wgcmVzZXRMYXRjaGluZyA9IHRydWUpCi0gICAgICAg
IDogcmVzZXRMYXRjaGluZyhyZXNldExhdGNoaW5nKQotICAgIHsgfQotCiAgICAgYm9vbCByZXNl
dExhdGNoaW5nIHsgdHJ1ZSB9OwogfTsKIAogTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyogdG9N
b25pdG9yV2hlZWxFdmVudHNPcHRpb25zKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAKLWNs
YXNzIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgeworY2xhc3Mg
RXZlbnRTZW5kaW5nQ29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAg
ICB2aXJ0dWFsIH5FdmVudFNlbmRpbmdDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIG1ha2VXaW5k
b3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7CiAKLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZpcnR1YWwgSlNDbGFz
c1JlZiB3cmFwcGVyQ2xhc3MoKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0
UmVmKTsKIAogICAgIHZvaWQgbW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZp
ZXJBcnJheSk7CiAgICAgdm9pZCBtb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZp
ZXJBcnJheSk7CkBAIC03Myw3ICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGtleURvd24oSlNT
dHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2NhdGlvbik7CiAg
ICAgdm9pZCBzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24oSlNTdHJpbmdSZWYga2V5KTsKIAot
ICAgIC8vIFpvb20gZnVuY3Rpb25zLgogICAgIHZvaWQgdGV4dFpvb21JbigpOwogICAgIHZvaWQg
dGV4dFpvb21PdXQoKTsKICAgICB2b2lkIHpvb21QYWdlSW4oKTsKQEAgLTgxLDEwICs3Niw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNjYWxlUGFnZUJ5KGRvdWJsZSBzY2FsZSwgZG91YmxlIHgsIGRv
dWJsZSB5KTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgLy8gVG91Y2ggZXZlbnRz
LgogICAgIHZvaWQgYWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpOwogICAgIHZvaWQgdXBkYXRl
VG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSk7Ci0gICAgdm9pZCBzZXRUb3VjaE1v
ZGlmaWVyKGNvbnN0IEpTU3RyaW5nUmVmICZtb2RpZmllciwgYm9vbCBlbmFibGUpOworICAgIHZv
aWQgc2V0VG91Y2hNb2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllciwgYm9vbCBlbmFibGUpOwog
ICAgIHZvaWQgc2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOwog
ICAgIHZvaWQgdG91Y2hTdGFydCgpOwogICAgIHZvaWQgdG91Y2hNb3ZlKCk7CkBAIC05Niw3ICs5
MCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBFdmVudFNlbmRpbmdDb250
cm9sbGVyKCk7CisgICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlcigpID0gZGVmYXVsdDsKKworICAg
IEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CisKICAgICBXS1BvaW50IG1fcG9zaXRp
b247CiAgICAgYm9vbCBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9zZW50V2hlZWxNb21lbnR1bVBoYXNlRW5kIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcApp
bmRleCA5MzU4ZjRhMGRlNWIzZDliYzMxNmI1ZTBhZGZkMDQxMjY2NDI1OGZmLi5kYjQyNWU3NWU4
MGIwNTQwOGJkZjNlM2UzNjQ3NjUxMDk2MzBkM2ZkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0zNywxNCAr
MzcsNiBAQCBSZWY8R0NDb250cm9sbGVyPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgR0NDb250cm9sbGVyKTsKIH0KIAotR0NDb250cm9sbGVyOjpHQ0Nv
bnRyb2xsZXIoKQotewotfQotCi1HQ0NvbnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIoKQotewotfQot
CiBKU0NsYXNzUmVmIEdDQ29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKIHsKICAgICByZXR1cm4g
SlNHQ0NvbnRyb2xsZXI6OmdDQ29udHJvbGxlckNsYXNzKCk7CkBAIC02NSwxMSArNTcsOSBAQCBz
aXplX3QgR0NDb250cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkKICAgICByZXR1cm4gV0tCdW5k
bGVHZXRKYXZhU2NyaXB0T2JqZWN0c0NvdW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSk7CiB9CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIEdDQ29udHJvbGxlcjo6
bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93
T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdp
bmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250
ZXh0LCB3aW5kb3dPYmplY3QsICJHQ0NvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24p
OworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJHQ0NvbnRyb2xsZXIiLCB0
aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaAppbmRleCBkMzQ5YzFjZTk5MGU4
N2Q3ZGYyZmNiOGM4Mjg4NWJjYTMwNTcyYTBiLi4zNGFiMjQyNTEzOGMxZDc1ZmIyNGEyNTEwNzQz
Njc4ZDgxOWVkYzIyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0dDQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvR0NDb250cm9sbGVyLmgKQEAgLTI2LDI2ICsyNiwyNiBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJKU1dyYXBwYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRl
eHQqIEpTQ29udGV4dFJlZjsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIEdDQ29udHJvbGxl
ciA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CitjbGFzcyBHQ0NvbnRyb2xsZXIgZmluYWwgOiBwdWJs
aWMgSlNXcmFwcGFibGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R0NDb250cm9sbGVyPiBj
cmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5HQ0NvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQgbWFrZVdp
bmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKTsKIAotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBKU0Ns
YXNzUmVmIHdyYXBwZXJDbGFzcygpOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYpOwogCiAgICAgdm9pZCBjb2xsZWN0KCk7CiAgICAgdm9pZCBjb2xsZWN0T25BbHRlcm5h
dGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKTsKICAgICBzaXplX3QgZ2V0SlNPYmplY3RDb3Vu
dCgpOwogCiBwcml2YXRlOgotICAgIEdDQ29udHJvbGxlcigpOworICAgIEdDQ29udHJvbGxlcigp
ID0gZGVmYXVsdDsKKworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggN2FlODFiYjRiNTkwOTZj
NThjOGI1YTE0Yzg4YzRjMzNmOGMxNDU3MS4uN2YxNjIxNTA3NGEwMjk3ZjJhNjc5YzE5NTQ4M2Fk
Mjk4MDlmOGEyMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRl
ICJJbmplY3RlZEJ1bmRsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgorI2luY2x1
ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2Uu
aCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1
cHBvcnQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcHRpb25zLmg+CiAjaW5jbHVkZSA8
V2ViS2l0L1dLQnVuZGxlLmg+CkBAIC0xMTgsMTggKzExOCwxMyBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlOjpkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIGlmICghaXNNYWlu
UGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluaXRp
YWxpemF0aW9uIikpOwogICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOwogICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKG1fYnVuZGxlLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXN1bHQp
OworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShtX2J1bmRsZSwgdG9XSygiSW5p
dGlhbGl6YXRpb24iKS5nZXQoKSwgbnVsbHB0ciwgJnJlc3VsdCk7CiAgICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJlc3VsdCkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJl
Zj4gaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KHJlc3VsdCkpOworICAgIGF1dG8gaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5ID0g
YWRvcHRXSyhkaWN0aW9uYXJ5VmFsdWUocmVzdWx0KSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gcmVzdW1lVGVzdGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlJlc3VtZVRlc3RpbmciKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VtZVRlc3RpbmdW
YWx1ZSA9IFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5
LmdldCgpLCByZXN1bWVUZXN0aW5nS2V5LmdldCgpKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
cmVzdW1lVGVzdGluZ1ZhbHVlKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgaWYgKFdL
Qm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdW1lVGVzdGluZ1Zh
bHVlKSkpCisgICAgaWYgKGJvb2xlYW5WYWx1ZShpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkuZ2V0
KCksICJSZXN1bWVUZXN0aW5nIikpCiAgICAgICAgIGJlZ2luVGVzdGluZyhpbml0aWFsaXphdGlv
bkRpY3Rpb25hcnkuZ2V0KCksIEJlZ2luZ1Rlc3RpbmdNb2RlOjpSZXN1bWUpOwogfQogCkBAIC0x
NzksMTYgKzE3NCwxOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldExvY2FsU2V0dGluZ3Mo
KQogICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNz
YWdlQm9keSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKFdLU3RyaW5n
UmVmLCBXS1R5cGVSZWYpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFcnJvciIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7Ci0gICAgV0tCdW5k
bGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgdG9XSygi
RXJyb3IiKS5nZXQoKSwgdG9XSygiVW5rbm93biIpLmdldCgpKTsKK30KKwordm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFy
KiBuYW1lLCBXS1R5cGVSZWYgYm9keSkKK3sKKyAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShw
YWdlLCB0b1dLKG5hbWUpLmdldCgpLCBib2R5KTsKIH0KIAogc3RhdGljIHZvaWQgcG9zdEdDVGFz
ayh2b2lkKiBjb250ZXh0KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gcmVpbnRlcnBy
ZXRfY2FzdDxXS0J1bmRsZVBhZ2VSZWY+KGNvbnRleHQpOworICAgIGF1dG8gcGFnZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8V0tCdW5kbGVQYWdlUmVmPihjb250ZXh0KTsKICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucmVwb3J0TGl2ZURvY3VtZW50cyhwYWdlKTsKICAgICBXS1JlbGVhc2Uo
cGFnZSk7CiB9CkBAIC0xOTksNjcgKzE5Nyw0NCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXBv
cnRMaXZlRG9jdW1lbnRzKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIFdLQnVuZGxlUmVsZWFz
ZU1lbW9yeShtX2J1bmRsZSk7CiAKICAgICBjb25zdCBib29sIGV4Y2x1ZGVEb2N1bWVudHNJblBh
Z2VHcm91cCA9IHRydWU7Ci0gICAgYXV0byBkb2N1bWVudFVSTHMgPSBhZG9wdFdLKFdLQnVuZGxl
R2V0TGl2ZURvY3VtZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVu
dHNJblBhZ2VHcm91cCkpOwotICAgIGF1dG8gYWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMaXZlRG9jdW1lbnRzIikpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBkb2N1bWVudFVSTHMu
Z2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZShwYWdlLCAiTGl2ZURvY3VtZW50cyIsIGFkb3B0
V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhj
bHVkZURvY3VtZW50c0luUGFnZUdyb3VwKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpk
aWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYg
bWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKIHsKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkJlZ2luVGVzdCIpKSB7CiAgICAgICAg
IEFTU0VSVChtZXNzYWdlQm9keSk7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGR1bXBQaXhl
bHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wUGl4ZWxz
IikpOwotICAgICAgICBtX2R1bXBQaXhlbHMgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBkdW1wUGl4ZWxzS2V5LmdldCgpKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB0aW1lb3V0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVGltZW91dCIpKTsKLSAgICAgICAgbV90aW1lb3V0ID0gU2Vjb25kczo6ZnJvbU1pbGxp
c2Vjb25kcyhXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdGltZW91dEtleS5nZXQo
KSkpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGR1bXBKU0NvbnNvbGVM
b2dJblN0ZEVycktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1
bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpKTsKLSAgICAgICAgbV9kdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnIgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkdW1wSlNDb25zb2xl
TG9nSW5TdGRFcnJLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGFja01lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQWNrIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWdpblRlc3QiKSk7
Ci0gICAgICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGFja01lc3NhZ2VOYW1lLmdl
dCgpLCBhY2tNZXNzYWdlQm9keS5nZXQoKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBtX2R1bXBQ
aXhlbHMgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRHVtcFBpeGVscyIp
OworICAgICAgICBtX3RpbWVvdXQgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKFdLVUludDY0
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIlRpbWVvdXQiKSkpKTsKKyAgICAgICAgbV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIg
PSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRHVtcEpTQ29uc29sZUxvZ0lu
U3RkRXJyIik7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZShwYWdlLCAiQWNrIiwgIkJlZ2luVGVz
dCIpOwogICAgICAgICBiZWdpblRlc3RpbmcobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBCZWdpbmdU
ZXN0aW5nTW9kZTo6TmV3KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzZXQiKSkgewogICAgICAg
ICBBU1NFUlQobWVzc2FnZUJvZHkpOwotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5
UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ganNjT3B0aW9u
c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkpTQ09wdGlvbnMi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zU3RyaW5nID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBqc2NPcHRpb25zS2V5LmdldCgpKSk7CisgICAgICAgIGF1dG8gbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgYXV0byBqc2NPcHRpb25zU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KHZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkpTQ09wdGlvbnMiKSk7CiAgICAgICAgIGlmIChqc2NP
cHRpb25zU3RyaW5nKSB7CiAgICAgICAgICAgICBTdHJpbmcgb3B0aW9ucyA9IHRvV1RGU3RyaW5n
KGpzY09wdGlvbnNTdHJpbmcpOwogICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpzZXRPcHRpb25z
KG9wdGlvbnMudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc2hvdWxkR0NLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTaG91bGRHQyIpKTsKLSAgICAgICAgYm9vbCBzaG91bGRHQyA9IFdLQm9vbGVh
bkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNob3VsZEdDS2V5LmdldCgpKSkpOworICAgICAg
ICBib29sIHNob3VsZEdDID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlNo
b3VsZEdDIik7CiAgICAgICAgIGlmIChzaG91bGRHQykKICAgICAgICAgICAgIFdLQnVuZGxlR2Fy
YmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cyhtX2J1bmRsZSk7CiAKICNpZiBFTkFCTEUoQUND
RVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gYXhJc29sYXRlZE1vZGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIikpOwotICAgICAgICBtX2FjY2Vzc2liaWxp
dHlJc29sYXRlZFRyZWVNb2RlID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
YXhJc29sYXRlZE1vZGVLZXkuZ2V0KCkpKSk7CisgICAgICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xh
dGVkVHJlZU1vZGUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQWNjZXNz
aWJpbGl0eUlzb2xhdGVkVHJlZSIpOwogI2VuZGlmCiAgICAgICAgIAotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gYWxsb3dlZEhvc3RzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQWxsb3dlZEhvc3RzIikpOwotICAgICAgICBXS1R5cGVSZWYgYWxs
b3dlZEhvc3RzVmFsdWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgYWxsb3dlZEhvc3RzS2V5LmdldCgpKTsKKyAgICAgICAgYXV0byBhbGxvd2VkSG9z
dHNWYWx1ZSA9IHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkFsbG93ZWRIb3N0cyIpOwog
ICAgICAgICBpZiAoYWxsb3dlZEhvc3RzVmFsdWUgJiYgV0tHZXRUeXBlSUQoYWxsb3dlZEhvc3Rz
VmFsdWUpID09IFdLQXJyYXlHZXRUeXBlSUQoKSkgewogICAgICAgICAgICAgbV9hbGxvd2VkSG9z
dHMuY2xlYXIoKTsKLQotICAgICAgICAgICAgV0tBcnJheVJlZiBhbGxvd2VkSG9zdHNBcnJheSA9
IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KGFsbG93ZWRIb3N0c1ZhbHVlKTsKLSAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gV0tBcnJheUdldFNpemUoYWxsb3dlZEhvc3RzQXJy
YXkpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBX
S0FycmF5R2V0SXRlbUF0SW5kZXgoYWxsb3dlZEhvc3RzQXJyYXksIGkpOwotICAgICAgICAgICAg
ICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkp
Ci0gICAgICAgICAgICAgICAgICAgIG1fYWxsb3dlZEhvc3RzLmFwcGVuZCh0b1dURlN0cmluZyhz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGF1dG8gYXJyYXkgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihhbGxvd2VkSG9zdHNWYWx1
ZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IFdLQXJyYXlHZXRTaXpl
KGFycmF5KTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgICAgICBtX2FsbG93ZWRIb3N0cy5h
cHBlbmQodG9XVEZTdHJpbmcoV0tBcnJheUdldEl0ZW1BdEluZGV4KGFycmF5LCBpKSkpOwogICAg
ICAgICB9CiAKICAgICAgICAgbV9zdGF0ZSA9IElkbGU7CkBAIC0yNzUsOSArMjUwLDcgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLU3RyaW5nUmVmIG0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiR2V0TGl2ZURvY3VtZW50cyIpKSB7CiAgICAgICAgIGNvbnN0IGJv
b2wgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwID0gZmFsc2U7Ci0gICAgICAgIGF1dG8gZG9j
dW1lbnRVUkxzID0gYWRvcHRXSyhXS0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUs
IG1fcGFnZUdyb3VwLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXApKTsKLSAgICAgICAgYXV0
byBhY2tNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkxpdmVEb2N1bWVudHMiKSk7Ci0gICAgICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2Us
IGFja01lc3NhZ2VOYW1lLmdldCgpLCBkb2N1bWVudFVSTHMuZ2V0KCkpOworICAgICAgICBwb3N0
UGFnZU1lc3NhZ2UoIkxpdmVEb2N1bWVudHMiLCBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3Vt
ZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91
cCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDI4LDcgKzQwMSw3IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBw
YWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnM7CiAgICAg
ICAgIGRvbWFpbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVt
ID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CisgICAgICAgICAgICBh
dXRvIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKICAgICAg
ICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlE
KCkpCiAgICAgICAgICAgICAgICAgZG9tYWlucy5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAgICAgIH0KQEAgLTQ0Niw3ICs0MTksNyBAQCB2
b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgICAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5zOwog
ICAgICAgICBkb21haW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBXS1R5cGVSZWYg
aXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5zQXJyYXksIGkpOworICAgICAgICAg
ICAgYXV0byBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CiAg
ICAgICAgICAgICBpZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBXS1N0cmluZ0dldFR5
cGVJRCgpKQogICAgICAgICAgICAgICAgIGRvbWFpbnMudW5jaGVja2VkQXBwZW5kKHRvV1RGU3Ry
aW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwogICAgICAgICB9CkBAIC00Njcs
MTcgKzQ0MCwxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFn
ZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2FsbFVJU2lkZVNjcmlw
dENhbGxiYWNrIikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXN1bHQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLQotICAgICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0g
KHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBjYWxsYmFja0lES2V5
LmdldCgpKSkpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIHJlc3VsdFN0cmluZyA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgcmVzdWx0S2V5LmdldCgpKSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0SlNTdHJpbmcg
PSB0b0pTKHJlc3VsdFN0cmluZyk7Ci0KLSAgICAgICAgbV90ZXN0UnVubmVyLT5ydW5VSVNjcmlw
dENhbGxiYWNrKGNhbGxiYWNrSUQsIHJlc3VsdEpTU3RyaW5nLmdldCgpKTsKKyAgICAgICAgYXV0
byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOwor
ICAgICAgICBhdXRvIGNhbGxiYWNrSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJDYWxsYmFja0lEIik7CisgICAgICAgIGF1dG8gcmVzdWx0U3RyaW5nID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUmVzdWx0Iik7CisgICAgICAgIG1fdGVzdFJ1bm5l
ci0+cnVuVUlTY3JpcHRDYWxsYmFjayhjYWxsYmFja0lELCB0b0pTKHJlc3VsdFN0cmluZykuZ2V0
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00OTgsMjkgKzQ2NCwxNyBAQCB2b2lk
IEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYg
cGFnZSwgV0tTdHJpbmdSZWYgbQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUZp
bmlzaGVkIikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc0tleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbnVtYmVyT2ZQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlcklu
dGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9w
UHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVkaWFuRGF5c1NpbmNl
VXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWVkaWFuRGF5c1NpbmNlVXNl
ckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uIikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wM051bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9w
M051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJ
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wM01lZGlhblN1YlJlc291
cmNlV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcDNNZWRpYW5VbmlxdWVSZWRpcmVj
dHNXaXRob3V0VUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVk
aWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSIp
KTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2Vz
ID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlBy
ZXZhbGVudFJlc291cmNlc0tleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhV
c2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiA9ICh1bnNpZ25lZClXS1VJbnQ2
NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3BQcmV2
YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24g
PSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcFByZXZhbGVu
dFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbktleS5n
ZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9u
UHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25Q
cmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAg
IHVuc2lnbmVkIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSA9ICh1bnNpZ25l
ZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM051bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVJS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3AzTWVkaWFu
U3ViRnJhbWVXaXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSUtleS5nZXQoKSkpKTsKLSAgICAgICAg
dW5zaWduZWQgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJID0gKHVuc2lnbmVkKVdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0
VUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVj
dHNXaXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAg
IHVuc2lnbmVkIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkgPSAodW5zaWdu
ZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRpYW5EYXRhUmVjb3Jk
c1JlbW92ZWRXaXRob3V0VUlLZXkuZ2V0KCkpKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBu
dW1iZXJPZlByZXZhbGVudFJlc291cmNlcyA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIk51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzIik7CisgICAgICAgIGF1dG8gbnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
TnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uIik7CisgICAg
ICAgIGF1dG8gdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNl
VXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9w
UHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uIik7CisgICAgICAgIGF1dG8gbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFs
ZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiTWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3Vy
Y2VXaXRoVXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gdG9wM051bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzV2l0aFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
VG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJIik7CisgICAgICAgIGF1dG8gdG9w
M01lZGlhblN1YkZyYW1lV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiVG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJIik7CisgICAgICAgIGF1dG8gdG9wM01l
ZGlhblN1YlJlc291cmNlV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiVG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJIik7CisgICAgICAgIGF1dG8gdG9w
M01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIlRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUkiKTsKKyAgICAg
ICAgYXV0byB0b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJID0gdWludDY0VmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdp
dGhvdXRVSSIpOwogCiAgICAgICAgIG1fdGVzdFJ1bm5lci0+c3RhdGlzdGljc0RpZFJ1blRlbGVt
ZXRyeUNhbGxiYWNrKG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCBudW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2Vz
V2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVy
YWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24sIHRvcDNOdW1iZXJPZlBy
ZXZhbGVudFJlc291cmNlc1dpdGhVSSwgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJLCB0b3Az
TWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUksIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRo
b3V0VUksIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkpOwogICAgICAgICBy
ZXR1cm47CkBAIC01NDEsMzEgKzQ5NSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2Vp
dmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JN
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVycm9y
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5rbm93biIpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBlcnJvck1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1l
c3NhZ2VCb2R5LmdldCgpKTsKLX0KLQotYm9vbCBJbmplY3RlZEJ1bmRsZTo6Ym9vbGVhbkZvcktl
eShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQotewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoa2V5KSk7Ci0gICAgV0tUeXBlUmVmIHZhbHVlID0gV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShkaWN0aW9uYXJ5LCB3a0tleS5nZXQoKSk7Ci0gICAgaWYgKFdLR2V0VHlwZUlE
KHZhbHVlKSAhPSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSkgewotICAgICAgICBvdXRwdXRUZXh0KG1h
a2VTdHJpbmcoIkJvb2xlYW4gdmFsdWUgZm9yIGtleSIsIGtleSwgIiBub3QgZm91bmQgaW4gZGlj
dGlvbmFyeVxuIikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBX
S0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHZhbHVlKSk7Ci19Ci0K
LVN0cmluZyBJbmplY3RlZEJ1bmRsZTo6c3RyaW5nRm9yS2V5KFdLRGljdGlvbmFyeVJlZiBkaWN0
aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCi17Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHdrS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhrZXkpKTsKLSAg
ICBXS1N0cmluZ1JlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHdrS2V5LmdldCgpKSk7Ci0gICAgaWYgKCF2YWx1
ZSkgewotICAgICAgICBvdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlN0cmluZyB2YWx1ZSBmb3Iga2V5
Iiwga2V5LCAiIG5vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5XG4iKSk7Ci0gICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gdG9XVEZTdHJpbmcodmFsdWUpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiRXJyb3IiLCAiVW5rbm93biIpOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlOjpiZWdpblRlc3RpbmcoV0tEaWN0aW9uYXJ5UmVmIHNldHRpbmdzLCBCZWdpbmdUZXN0
aW5nTW9kZSB0ZXN0aW5nTW9kZSkKQEAgLTU5OCwxMSArNTI4LDExIEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OmJlZ2luVGVzdGluZyhXS0RpY3Rpb25hcnlSZWYgc2V0dGluZ3MsIEJlZ2luZ1Rlc3Rp
bmdNb2RlIHRlCiAgICAgV0tCdW5kbGVTZXRBbGxvd1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTFMo
bV9idW5kbGUsIG1fcGFnZUdyb3VwLCBmYWxzZSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIFdLQnVuZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24ocGFn
ZSgpLT5wYWdlKCksICFib29sZWFuRm9yS2V5KHNldHRpbmdzLCAiVXNlRmxleGlibGVWaWV3cG9y
dCIpKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRVc2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9u
KHBhZ2UoKS0+cGFnZSgpLCAhYm9vbGVhblZhbHVlKHNldHRpbmdzLCAiVXNlRmxleGlibGVWaWV3
cG9ydCIpKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV2ViQ29yZVRlc3RT
dXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcoc3RyaW5n
Rm9yS2V5KHNldHRpbmdzLCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKSk7CisgICAg
V2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRl
c3RpbmcodG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUoc2V0dGluZ3MsICJhZGRpdGlvbmFsU3VwcG9y
dGVkSW1hZ2VUeXBlcyIpKSk7CiAjZW5kaWYKIAogICAgIG1fdGVzdFJ1bm5lci0+c2V0UGx1Z2lu
c0VuYWJsZWQodHJ1ZSk7CkBAIC02NjAsMjUgKzU5MCwxNSBAQCB2b2lkIEluamVjdGVkQnVuZGxl
Ojpkb25lKCkKICAgICBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5yZXNldFRvQ29uc2lzdGVu
dFN0YXRlKCk7CiAjZW5kaWYKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkb25lTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb25lIikp
OwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGRvbmVNZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdElzUGVuZGluZ0tleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0SXNQZW5kaW5nIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5Lmdl
dCgpLCBwaXhlbFJlc3VsdElzUGVuZGluZy5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwogCi0gICAgaWYgKCFtX3BpeGVsUmVzdWx0
SXNQZW5kaW5nKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3Vs
dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0
IikpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwg
cGl4ZWxSZXN1bHRLZXkuZ2V0KCksIG1fcGl4ZWxSZXN1bHQuZ2V0KCkpOwotICAgIH0KLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXBhaW50UmVjdHNLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXBhaW50UmVjdHMiKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIHJlcGFpbnRSZWN0c0tleS5nZXQoKSwg
bV9yZXBhaW50UmVjdHMuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJQaXhlbFJlc3VsdElz
UGVuZGluZyIsIG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpOworICAgIGlmICghbV9waXhlbFJlc3Vs
dElzUGVuZGluZykKKyAgICAgICAgc2V0VmFsdWUoYm9keSwgIlBpeGVsUmVzdWx0IiwgbV9waXhl
bFJlc3VsdC5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlJlcGFpbnRSZWN0cyIsIG1fcmVw
YWludFJlY3RzLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiQXVkaW9SZXN1bHQiLCBtX2F1
ZGlvUmVzdWx0LmdldCgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdWRpb1Jl
c3VsdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF1ZGlvUmVz
dWx0IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCBh
dWRpb1Jlc3VsdEtleS5nZXQoKSwgbV9hdWRpb1Jlc3VsdC5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdl
KCksIGRvbmVNZXNzYWdlTmFtZS5nZXQoKSwgZG9uZU1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgp
LT5wYWdlKCksIHRvV0soIkRvbmUiKS5nZXQoKSwgYm9keS5nZXQoKSk7CiAKICAgICBjbG9zZU90
aGVyUGFnZXMoKTsKIApAQCAtNjkxLDkgKzYxMSw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmNs
b3NlT3RoZXJQYWdlcygpCiAgICAgc2l6ZV90IHNpemUgPSBtX3BhZ2VzLnNpemUoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkKICAgICAgICAgcGFnZXNUb0Nsb3NlLmFw
cGVuZChtX3BhZ2VzW2ldLT5wYWdlKCkpOwotICAgIHNpemUgPSBwYWdlc1RvQ2xvc2Uuc2l6ZSgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBXS0J1bmRs
ZVBhZ2VDbG9zZShwYWdlc1RvQ2xvc2VbaV0pOworICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2Vz
VG9DbG9zZSkKKyAgICAgICAgV0tCdW5kbGVQYWdlQ2xvc2UocGFnZSk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OmR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMoU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlcikKQEAgLTcwOSwxMyArNjI4LDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6ZHVtcFRvU3RkRXJyKGNvbnN0IFN0cmluZyYgb3V0cHV0KQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKG91dHB1dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJEdW1wVG9TdGRFcnIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VCb2R5OwotICAgIGlmIChhdXRvIHV0ZjggPSBvdXRwdXQudHJ5R2V0VXRmOCgpKQot
ICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcodXRmOC0+ZGF0YSgpKSk7Ci0gICAgZWxzZQotICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk91dCBvZiBtZW1vcnlcbiIpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IGhhdmUg
dG8gY29udmVydCB0byBVVEYtOCBpbnN0ZWFkIG9mIHVzaW5nIHRvV0s/CisgICAgYXV0byBzdHJp
bmcgPSBvdXRwdXQudHJ5R2V0VXRmOCgpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRHVtcFRvU3Rk
RXJyIiwgc3RyaW5nID8gc3RyaW5nLT5kYXRhKCkgOiAiT3V0IG9mIG1lbW9yeVxuIik7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6Om91dHB1dFRleHQoY29uc3QgU3RyaW5nJiBvdXRwdXQpCkBA
IC03MjQsMjgwICs2MzksMTU1IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6Om91dHB1dFRleHQoY29u
c3QgU3RyaW5nJiBvdXRwdXQpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAob3V0cHV0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRleHRPdXRw
dXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5OwotICAgIGlm
IChhdXRvIHV0ZjggPSBvdXRwdXQudHJ5R2V0VXRmOCgpKQotICAgICAgICBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodXRmOC0+ZGF0YSgpKSk7Ci0g
ICAgZWxzZQotICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIk91dCBvZiBtZW1vcnlcbiIpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVh
bGx5IGhhdmUgdG8gY29udmVydCB0byBVVEYtOCBpbnN0ZWFkIG9mIHVzaW5nIHRvV0s/CisgICAg
YXV0byBzdHJpbmcgPSBvdXRwdXQudHJ5R2V0VXRmOCgpOwogICAgIC8vIFdlIHVzZSBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUoKSBpbnN0ZWFkIG9m
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKCkgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHRleHQgb3V0
cHV0CiAgICAgLy8gaXMgZG9uZSB2aWEgYXN5bmNocm9ub3VzIElQQywgZXZlbiBpZiB0aGUgY29u
bmVjdGlvbiBpcyBpbiBmdWxseSBzeW5jaHJvbm91cyBtb2RlIGR1ZSB0byBhIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKCkKICAgICAvLyBjYWxsLiBPdGhlcndp
c2UsIG1lc3NhZ2VzIGxvZ2dlZCB2aWEgc3luYyBhbmQgYXN5bmMgSVBDIG1heSBlbmQgdXAgb3V0
IG9mIG9yZGVyIGFuZCBjYXVzZSBmbGFraW5lc3MuCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3Nh
Z2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNNb2RlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdl
SWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgdG9XSygiVGV4dE91
dHB1dCIpLmdldCgpLCB0b1dLKHN0cmluZyA/IHN0cmluZy0+ZGF0YSgpIDogIk91dCBvZiBtZW1v
cnlcbiIpLmdldCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVu
bG9hZFJldHVyblZhbHVlKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJCZWZvcmVVbmxvYWRSZXR1
cm5WYWx1ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0QWRkQ2hyb21lSW5wdXRGaWVsZCgpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQWRkQ2hyb21lSW5wdXRGaWVsZCIpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiQWRkQ2hyb21lSW5wdXRGaWVsZCIpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlOjpwb3N0UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlOjpwb3N0Rm9jdXNXZWJWaWV3KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJGb2N1c1dlYlZpZXciKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkZvY3Vz
V2ViVmlldyIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0QmFja2luZ1NjYWxl
RmFjdG9yKGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0b3IpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0QmFja2luZ1NjYWxlRmFjdG9yIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91Ymxl
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYmFja2luZ1NjYWxlRmFj
dG9yKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJT
ZXRCYWNraW5nU2NhbGVGYWN0b3IiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGJhY2tpbmdTY2Fs
ZUZhY3RvcikpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFNldFdpbmRvd0lzS2V5
KGJvb2wgaXNLZXkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0V2luZG93SXNLZXki
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGlzS2V5KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIlNldFdpbmRvd0lzS2V5IikuZ2V0KCks
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzS2V5KSkuZ2V0KCksIDApOwogfQogCiB2b2lkIElu
amVjdGVkQnVuZGxlOjpwb3N0U2V0Vmlld1NpemUoZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFZpZXdTaXplIikpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdpZHRoS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygid2lkdGgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhl
aWdodEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlaWdodCIp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tEb3VibGVSZWY+IHdpZHRoV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHdpZHRoKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgd2lkdGhLZXkuZ2V0
KCksIHdpZHRoV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGhlaWdo
dFdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShoZWlnaHQpKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBoZWlnaHRLZXkuZ2V0KCksIGhlaWdodFdLLmdldCgp
KTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIDApOwor
ICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAid2lkdGgiLCB3aWR0aCk7CisgICAgc2V0VmFsdWUoYm9keSwgImhl
aWdodCIsIGhlaWdodCk7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIlNldFZpZXdTaXplIikuZ2V0KCksIGJvZHku
Z2V0KCksIDApOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2ltdWxhdGVXZWJOb3Rp
ZmljYXRpb25DbGljayh1aW50NjRfdCBub3RpZmljYXRpb25JRCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLVUludDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90
aWZpY2F0aW9uSUQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIlNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2siLCBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKG5vdGlmaWNhdGlvbklEKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0
QWRkc1Zpc2l0ZWRMaW5rcyhib29sIGFkZHNWaXNpdGVkTGlua3MpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0QWRkc1Zpc2l0ZWRMaW5rcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWRkc1Zpc2l0
ZWRMaW5rcykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiU2V0QWRkc1Zpc2l0ZWRMaW5rcyIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGFkZHNWaXNp
dGVkTGlua3MpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEdlb2xvY2F0aW9uUGVy
bWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSkpOwogfQogCi12b2lkIElu
amVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUs
IGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRl
LCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUg
YWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBi
b29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWws
IGRvdWJsZSBmbG9vckxldmVsKQordm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNj
dXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1
ZGVBY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNw
ZWVkLCBPcHRpb25hbDxkb3VibGU+IGZsb29yTGV2ZWwpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsYXRpdHVk
ZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGF0aXR1ZGUi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGxhdGl0dWRlV0sgPSBhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKGxhdGl0dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdl
Qm9keS5nZXQoKSwgbGF0aXR1ZGVLZXlXSy5nZXQoKSwgbGF0aXR1ZGVXSy5nZXQoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbG9uZ2l0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsb25naXR1ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEb3VibGVSZWY+IGxvbmdpdHVkZVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShsb25naXR1
ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBsb25naXR1
ZGVLZXlXSy5nZXQoKSwgbG9uZ2l0dWRlV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJhY2N1cmFjeSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gYWNjdXJh
Y3lXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYWNjdXJhY3kpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhY2N1cmFjeUtleVdLLmdldCgpLCBhY2N1cmFj
eVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0
dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRl
c0FsdGl0dWRlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcHJvdmlkZXNBbHRp
dHVkZVdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNBbHRpdHVkZSkpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVL
ZXlXSy5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBhbHRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiYWx0aXR1ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGFs
dGl0dWRlV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGFsdGl0dWRlKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWx0aXR1ZGVLZXlXSy5nZXQoKSwgYWx0
aXR1ZGVXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
bWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpLCBw
cm92aWRlc0FsdGl0dWRlQWNjdXJhY3lXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gYWx0aXR1ZGVBY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiYWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rv
dWJsZVJlZj4gYWx0aXR1ZGVBY2N1cmFjeVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShhbHRp
dHVkZUFjY3VyYWN5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgYWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpLCBhbHRpdHVkZUFjY3VyYWN5V0suZ2V0KCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzSGVhZGluZ0tleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNIZWFkaW5nIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcHJvdmlkZXNIZWFkaW5nV0sgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92aWRlc0hlYWRpbmcpKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwcm92aWRlc0hlYWRpbmdLZXlXSy5nZXQoKSwgcHJv
dmlkZXNIZWFkaW5nV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhl
YWRpbmdLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlYWRp
bmciKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGhlYWRpbmdXSyA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoaGVhZGluZykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2Fn
ZUJvZHkuZ2V0KCksIGhlYWRpbmdLZXlXSy5nZXQoKSwgaGVhZGluZ1dLLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc1NwZWVkS2V5V0sgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc1NwZWVkIikpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gcHJvdmlkZXNTcGVlZFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUocHJvdmlkZXNTcGVlZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJv
ZHkuZ2V0KCksIHByb3ZpZGVzU3BlZWRLZXlXSy5nZXQoKSwgcHJvdmlkZXNTcGVlZFdLLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzcGVlZEtleVdLID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygic3BlZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEb3VibGVSZWY+IHNwZWVkV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNwZWVkKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgc3BlZWRLZXlXSy5nZXQo
KSwgc3BlZWRXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlk
ZXNGbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJwcm92aWRlc0Zsb29yTGV2ZWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBw
cm92aWRlc0Zsb29yTGV2ZWxXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzRmxv
b3JMZXZlbCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBy
b3ZpZGVzRmxvb3JMZXZlbEtleVdLLmdldCgpLCBwcm92aWRlc0Zsb29yTGV2ZWxXSy5nZXQoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmxvb3JMZXZlbEtleVdLID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZmxvb3JMZXZlbCIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RvdWJsZVJlZj4gZmxvb3JMZXZlbFdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0
ZShmbG9vckxldmVsKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgZmxvb3JMZXZlbEtleVdLLmdldCgpLCBmbG9vckxldmVsV0suZ2V0KCkpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJsYXRpdHVkZSIsIGxhdGl0dWRl
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAibG9uZ2l0dWRlIiwgbG9uZ2l0dWRlKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiYWNjdXJhY3kiLCBhY2N1cmFjeSk7CisgICAgc2V0VmFsdWUoYm9keSwgImFs
dGl0dWRlIiwgYWx0aXR1ZGUpOworICAgIHNldFZhbHVlKGJvZHksICJhbHRpdHVkZUFjY3VyYWN5
IiwgYWx0aXR1ZGVBY2N1cmFjeSk7CisgICAgc2V0VmFsdWUoYm9keSwgImhlYWRpbmciLCBoZWFk
aW5nKTsKKyAgICBzZXRWYWx1ZShib2R5LCAic3BlZWQiLCBzcGVlZCk7CisgICAgc2V0VmFsdWUo
Ym9keSwgImZsb29yTGV2ZWwiLCBmbG9vckxldmVsKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1Jl
ZiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFi
bGVFcnJvciIsIGVycm9yTWVzc2FnZSk7CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OmlzR2Vv
bG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIpKTsKLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9Q
YXNzID0gMDsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsICZyZXN1bHRUb1Bhc3MpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gaXNBY3RpdmUgPSBhZG9wdFdLKHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4ocmVzdWx0VG9QYXNzKSk7Ci0KLSAgICByZXR1cm4gV0tCb29sZWFu
R2V0VmFsdWUoaXNBY3RpdmUuZ2V0KCkpOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRy
OworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2Uo
KS0+cGFnZSgpLCB0b1dLKCJJc0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikuZ2V0KCksIDAsICZy
ZXN1bHQpOworICAgIHJldHVybiBib29sZWFuVmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdldCgpKTsK
IH0KIAogdW5zaWduZWQgSW5qZWN0ZWRCdW5kbGU6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJv
YXJkKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbWFnZUNvdW50SW5HZW5l
cmFsUGFzdGVib2FyZCIpKTsKLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRy
PFdLVUludDY0UmVmPiBpbWFnZUNvdW50ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4ocmVzdWx0VG9QYXNzKSk7Ci0gICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihXS1VJbnQ2NEdldFZhbHVlKGltYWdlQ291bnQuZ2V0KCkpKTsKKyAgICBXS1R5cGVSZWYgcmVz
dWx0ID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiSW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9h
cmQiKS5nZXQoKSwgMCwgJnJlc3VsdCk7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKGFkb3B0V0so
cmVzdWx0KS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBl
cm1pc3Npb24oYm9vbCBlbmFibGVkKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikp
OwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVk
KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRV
c2VyTWVkaWFQZXJtaXNzaW9uIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKCkKIHsK
LSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb24iKTsKIH0KIAogdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4oYm9vbCBw
ZXJtaXNzaW9uLCBXS1N0cmluZ1JlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbikK
IHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4iKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gcGVybWlzc2lvbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygicGVybWlzc2lvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBl
cm1pc3Npb25XSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHBlcm1pc3Npb24pKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwZXJtaXNzaW9uS2V5V0suZ2V0
KCksIHBlcm1pc3Npb25XSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
b3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmln
aW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgb3JpZ2lu
S2V5V0suZ2V0KCksIG9yaWdpbik7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFy
ZW50T3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJw
YXJlbnRPcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgcGFyZW50T3JpZ2luS2V5V0suZ2V0KCksIHBhcmVudE9yaWdpbik7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgInBlcm1pc3Npb24iLCBwZXJtaXNzaW9u
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAib3JpZ2luIiwgb3JpZ2luKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAicGFyZW50T3JpZ2luIiwgcGFyZW50T3JpZ2luKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IlNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luIiwgYm9keSk7CiB9CiAK
IHVuc2lnbmVkIEluamVjdGVkQnVuZGxlOjp1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50
Rm9yT3JpZ2luKFdLU3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luKSBj
b25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0Q291bnRGb3JPcmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgb3JpZ2luS2V5V0suZ2V0KCksIG9yaWdpbik7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5V0sgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGFyZW50T3JpZ2luS2V5V0suZ2V0
KCksIHBhcmVudE9yaWdpbik7Ci0KLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmVzdWx0VG9QYXNz
KTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gY291bnQgPSBhZG9wdFdLKHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihyZXN1bHRUb1Bhc3MpKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShjb3VudC5nZXQoKSkpOworICAgIGF1dG8gYm9k
eSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAib3JpZ2luIiwgb3JpZ2luKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGFyZW50T3JpZ2lu
IiwgcGFyZW50T3JpZ2luKTsKKyAgICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2Uo
KSwgdG9XSygiVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpLmdldCgp
LCBib2R5LmdldCgpLCAmcmVzdWx0KTsKKyAgICByZXR1cm4gdWludDY0VmFsdWUoYWRvcHRXSyhy
ZXN1bHQpLmdldCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVzZXRVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKFdLU3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJp
bmdSZWYgcGFyZW50T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc2V0VXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmln
aW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlX
Sy5nZXQoKSwgb3JpZ2luKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRP
cmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVu
dE9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBw
YXJlbnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFyZW50T3JpZ2luKTsKLQotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAib3JpZ2luIiwgb3JpZ2luKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAicGFyZW50T3JpZ2luIiwgcGFyZW50T3JpZ2luKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIlJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIsIGJv
ZHkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShi
b29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVuYWJsZWRLZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImVuYWJsZWQiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBlbmFibGVkV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShlbmFibGVkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgZW5hYmxlZEtleVdLLmdldCgpLCBlbmFibGVkV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHBlcm1pc3NpdmVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoInBlcm1pc3NpdmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBwZXJtaXNzaXZlV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwZXJtaXNzaXZlKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGVybWlzc2l2ZUtl
eVdLLmdldCgpLCBwZXJtaXNzaXZlV0suZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OworICAgIHNldFZhbHVlKGJvZHksICJlbmFibGVkIiwgZW5hYmxlZCk7CisgICAgc2V0VmFsdWUo
Ym9keSwgInBlcm1pc3NpdmUiLCBwZXJtaXNzaXZlKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNl
dEN1c3RvbVBvbGljeURlbGVnYXRlIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnNldEhpZGRlbihib29sIGhpZGRlbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRI
aWRkZW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gaXNJbml0aWFsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJoaWRkZW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBpc0luaXRpYWxXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhpZGRlbikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGlzSW5pdGlhbEtleVdLLmdl
dCgpLCBpc0luaXRpYWxXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShw
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgImhpZGRlbiIsIGhpZGRlbik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJT
ZXRIaWRkZW4iLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0Q2Fj
aGVNb2RlbChpbnQgbW9kZWwpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Q2FjaGVN
b2RlbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKG1vZGVsKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIlNldENhY2hlTW9kZWwi
KS5nZXQoKSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RlbCkpLmdldCgpLCBudWxscHRyKTsK
IH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1ZSgpIGNvbnN0
CkBAIC0xMDA1LDExMCArNzk1LDczIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nl
c3NXb3JrUXVldWUoKSBjb25zdAogICAgIGlmICghbV91c2VXb3JrUXVldWUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzV29ya1F1ZXVlRW1wdHki
KSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VsdFRvUGFzcyA9IDA7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCAwLCAmcmVzdWx0VG9QYXNzKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IGlzRW1wdHkgPSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdWx0VG9QYXNz
KSk7CisgICAgV0tUeXBlUmVmIHJlc3VsdCA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIklzV29y
a1F1ZXVlRW1wdHkiKS5nZXQoKSwgMCwgJnJlc3VsdCk7CiAKICAgICAvLyBUaGUgSVBDIGZhaWxl
ZC4gVGhpcyBoYXBwZW5zIHdoZW4gc3dhcHBpbmcgcHJvY2Vzc2VzIG9uIG5hdmlnYXRpb24gYmVj
YXVzZSB0aGUgV2ViUGFnZVByb3h5IHVucmVnaXN0ZXJzIGl0c2VsZgogICAgIC8vIGFzIGEgTWVz
c2FnZVJlY2VpdmVyIGZyb20gdGhlIG9sZCBXZWJQcm9jZXNzUHJveHkgYW5kIHJlZ2lzdGVyIGl0
c2VsZiB3aXRoIHRoZSBuZXcgV2ViUHJvY2Vzc1Byb3h5IGluc3RlYWQuCi0gICAgaWYgKCFpc0Vt
cHR5KQorICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gIVdLQm9vbGVhbkdldFZhbHVlKGlzRW1wdHkuZ2V0KCkpOworICAgIGF1dG8gaXNFbXB0eSA9
IGJvb2xlYW5WYWx1ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOworICAgIHJldHVybiAhaXNFbXB0
eTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cHJvY2Vzc1dvcmtRdWV1ZSgpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiUHJvY2Vzc1dvcmtRdWV1ZSIpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiUHJvY2Vzc1dvcmtRdWV1ZSIpOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKHVuc2lnbmVkIGhvd0ZhckJhY2t3YXJkKQogewog
ICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1
ZXVlQmFja05hdmlnYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJCYWNrd2FyZCkpOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVCYWNrTmF2aWdh
dGlvbiIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaG93RmFyQmFja3dhcmQpKSk7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24odW5zaWduZWQgaG93RmFy
Rm9yd2FyZCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJRdWV1ZUZvcndhcmROYXZpZ2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdL
VUludDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaG93RmFyRm9y
d2FyZCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
UXVldWVGb3J3YXJkTmF2aWdhdGlvbiIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaG93RmFyRm9y
d2FyZCkpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVMb2FkKFdLU3RyaW5nUmVm
IHVybCwgV0tTdHJpbmdSZWYgdGFyZ2V0LCBib29sIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpCiB7
CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
UXVldWVMb2FkIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
bG9hZERhdGEgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygidXJsIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEu
Z2V0KCksIHVybEtleS5nZXQoKSwgdXJsKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB0YXJnZXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0YXJn
ZXQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgdGFyZ2V0S2V5
LmdldCgpLCB0YXJnZXQpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZE9w
ZW5FeHRlcm5hbFVSTHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJzaG91bGRPcGVuRXh0ZXJuYWxVUkxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gc2hvdWxkT3BlbkV4dGVybmFsVVJMc1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
c2hvdWxkT3BlbkV4dGVybmFsVVJMcykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERh
dGEuZ2V0KCksIHNob3VsZE9wZW5FeHRlcm5hbFVSTHNLZXkuZ2V0KCksIHNob3VsZE9wZW5FeHRl
cm5hbFVSTHNWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIGxvYWREYXRhLmdldCgpKTsKKyAgICBhdXRv
IGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgInVybCIsIHVybCk7CisgICAgc2V0VmFsdWUoYm9keSwgInRhcmdldCIsIHRhcmdl
dCk7CisgICAgc2V0VmFsdWUoYm9keSwgInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiLCBzaG91bGRP
cGVuRXh0ZXJuYWxVUkxzKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlTG9hZCIsIGJvZHku
Z2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKFdL
U3RyaW5nUmVmIGNvbnRlbnQsIFdLU3RyaW5nUmVmIGJhc2VVUkwsIFdLU3RyaW5nUmVmIHVucmVh
Y2hhYmxlVVJMKQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlF1ZXVlTG9hZEhUTUxTdHJpbmciKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBsb2FkRGF0YSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjb250ZW50S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29udGVudCIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCBjb250ZW50S2V5LmdldCgpLCBj
b250ZW50KTsKLQotICAgIGlmIChiYXNlVVJMKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBiYXNlVVJMS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiYmFzZVVSTCIpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQo
KSwgYmFzZVVSTEtleS5nZXQoKSwgYmFzZVVSTCk7Ci0gICAgfQotCi0gICAgaWYgKHVucmVhY2hh
YmxlVVJMKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJsZVVS
TEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVucmVhY2hhYmxl
VVJMIikpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCB1bnJl
YWNoYWJsZVVSTEtleS5nZXQoKSwgdW5yZWFjaGFibGVVUkwpOwotICAgIH0KLQotICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbG9h
ZERhdGEuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiY29udGVudCIsIGNvbnRlbnQpOworICAg
IGlmIChiYXNlVVJMKQorICAgICAgICBzZXRWYWx1ZShib2R5LCAiYmFzZVVSTCIsIGJhc2VVUkwp
OworICAgIGlmICh1bnJlYWNoYWJsZVVSTCkKKyAgICAgICAgc2V0VmFsdWUoYm9keSwgInVucmVh
Y2hhYmxlVVJMIiwgdW5yZWFjaGFibGVVUkwpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVM
b2FkSFRNTFN0cmluZyIsIGJvZHkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZVJl
bG9hZCgpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiUXVldWVSZWxvYWQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IlF1ZXVlUmVsb2FkIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZGluZ1Nj
cmlwdChXS1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVMb2FkaW5nU2NyaXB0IikpOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
c2NyaXB0KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlTG9hZGluZ1NjcmlwdCIsIHNjcmlw
dCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChXS1N0
cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVOb25Mb2FkaW5nU2NyaXB0IikpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgc2NyaXB0
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIsIHNjcmlwdCk7
CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OmlzQWxsb3dlZEhvc3QoV0tTdHJpbmdSZWYgaG9z
dCkKQEAgLTExNDMsNCArODk2LDcyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnRleHRGaWVsZERp
ZEVuZEVkaXRpbmcoKQogICAgIG1fdGVzdFJ1bm5lci0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZ0Nh
bGxiYWNrKCk7CiB9CiAKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShjb25z
dCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgYm9keSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UocGFn
ZSgpLT5wYWdlKCksIG5hbWUsIGJvZHkpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0
UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogYm9keSkKK3sKKyAgICBw
b3N0UGFnZU1lc3NhZ2UobmFtZSwgdG9XSyhib2R5KSk7Cit9CisKK3ZvaWQgcG9zdE1lc3NhZ2Uo
Y29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdl
dCgpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdW5z
aWduZWQgdmFsdWUpCit7CisgICAgcG9zdE1lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNv
bnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dL
KG5hbWUpLmdldCgpLCB2YWx1ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7
Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1aW50
NjRfdCB2YWx1ZSkKK3sKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIGFkb3B0V0so
V0tVSW50NjRDcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSkKK3sKKyAgICB1aW50NjRf
dCBwcm9tb3RlZFZhbHVlID0gdmFsdWU7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShuYW1l
LCBwcm9tb3RlZFZhbHVlKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0
IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KG5hbWUsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQg
cG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAg
ICBpZiAoYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKSkKKyAg
ICAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdl
dCgpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUs
IGJvb2wgdmFsdWUpCit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VN
ZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0
byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKSkKKyAgICAgICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZS0+cGFnZSgpLCB0
b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9u
b3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkpLmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKaW5kZXggYjc2
MDE0MzZmMGM2NzI4NTYzM2EwOGUyNWY5NDJhOGFhOThkOTcwYi4uN2E0ZjVkNjU5ZmMwYWExMGUy
N2Y0ODU5NDc0YmUxYzQ5MmRkMDQyMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaApAQCAtOTYsNyArOTYsNyBAQCBw
dWJsaWM6CiAKICAgICAvLyBHZW9sb2NhdGlvbi4KICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVy
bWlzc2lvbihib29sKTsKLSAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJs
ZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3Zp
ZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91Ymxl
IGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVz
Rmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpOworICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNj
dXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1
ZGVBY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNw
ZWVkLCBPcHRpb25hbDxkb3VibGU+IGZsb29yTGV2ZWwpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSk7
CiAgICAgYm9vbCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBjb25zdDsKIApAQCAtMTY5
LDggKzE2OSwxMSBAQCBwcml2YXRlOgogICAgIGVudW0gY2xhc3MgQmVnaW5nVGVzdGluZ01vZGUg
eyBOZXcsIFJlc3VtZSB9OwogICAgIHZvaWQgYmVnaW5UZXN0aW5nKFdLRGljdGlvbmFyeVJlZiBp
bml0aWFsU2V0dGluZ3MsIEJlZ2luZ1Rlc3RpbmdNb2RlKTsKIAotICAgIGJvb2wgYm9vbGVhbkZv
cktleShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7Ci0gICAgU3RyaW5nIHN0cmlu
Z0ZvcktleShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CisgICAgc3RhdGljIHZv
aWQgcG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiwgY29uc3QgY2hhciogbmFtZSwgV0tU
eXBlUmVmIGJvZHkpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHBvc3RQ
YWdlTWVzc2FnZShXS0J1bmRsZVBhZ2VSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0
YWluUHRyPFQ+JiBib2R5KTsKKyAgICB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBu
YW1lLCBXS1R5cGVSZWYgYm9keSA9IG51bGxwdHIpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWluUHRy
PFQ+JiBib2R5KTsKKyAgICB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBjaGFyKiBib2R5KTsKIAogICAgIFdLQnVuZGxlUmVmIG1fYnVuZGxlIHsgbnVsbHB0ciB9
OwogICAgIFdLQnVuZGxlUGFnZUdyb3VwUmVmIG1fcGFnZUdyb3VwIHsgbnVsbHB0ciB9OwpAQCAt
MjEwLDQgKzIxMywyOSBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3VzZXJTY3JpcHRJbmplY3Rl
ZENvdW50IHsgMCB9OwogfTsKIAordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBX
S1R5cGVSZWYgdmFsdWUgPSBudWxscHRyKTsKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciog
bmFtZSwgdW5zaWduZWQgdmFsdWUpOworCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29u
c3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cik7Cit2b2lkIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdWludDY0X3QgdmFsdWUpOwordm9p
ZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVl
KTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUg
dmFsdWUpOworCit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVS
ZWYgdmFsdWUgPSBudWxscHRyKTsKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5h
bWUsIGJvb2wgdmFsdWUpOworCit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0
IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2Fn
ZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5Q
dHI8VD4mIGJvZHkpCit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsIG5hbWUsIGJvZHkuZ2V0
KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0
UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkp
Cit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKG5hbWUsIGJvZHkuZ2V0KCkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAppbmRleCBkODlmZWFmOWI2ZGFlNGM5
Njg1MzFmMGFiNjM4NTg5MWIxNGY5OGY4Li4yZjU2NDI3NzMxMTZkOWYxMDI0ZmE2ZmJlOWRjMzUy
MGIxNWUxOGE5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCkBAIC02MCw1MCArNjAsMTggQEAg
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBKU1ZhbHVl
UmVmIHByb3BlcnR5VmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVj
dCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQorc3RhdGljIGRvdWJsZSBudW1lcmljV2luZG93
UHJvcGVydHkoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAg
ICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWVT
dHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwcm9wZXJ0eU5hbWUp
KTsKLSAgICByZXR1cm4gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIHByb3Bl
cnR5TmFtZVN0cmluZy5nZXQoKSwgMCk7Ci19Ci0KLXN0YXRpYyBkb3VibGUgcHJvcGVydHlWYWx1
ZURvdWJsZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBj
aGFyKiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IHByb3BlcnR5VmFs
dWUoY29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUs
IDApOyAgICAKLX0KLQotc3RhdGljIGludCBwcm9wZXJ0eVZhbHVlSW50KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKLXsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihwcm9wZXJ0eVZhbHVlRG91YmxlKGNvbnRleHQs
IG9iamVjdCwgcHJvcGVydHlOYW1lKSk7ICAgIAotfQotCi1zdGF0aWMgZG91YmxlIG51bWVyaWNX
aW5kb3dQcm9wZXJ0eVZhbHVlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNvbnN0IGNoYXIqIHBy
b3BlcnR5TmFtZSkKLXsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxl
RnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5VmFs
dWVEb3VibGUoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBwcm9w
ZXJ0eU5hbWUpOworICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0
Q29udGV4dChmcmFtZSk7CisgICAgcmV0dXJuIG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIG5hbWUpOwogfQogCiBzdGF0aWMgV1RGOjpT
dHJpbmcgZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5v
ZGVWYWx1ZSkKIHsKLSAgICBKU1ZhbHVlUmVmIG5vZGVOYW1lVmFsdWUgPSBwcm9wZXJ0eVZhbHVl
KGNvbnRleHQsIG5vZGVWYWx1ZSwgIm5vZGVOYW1lIik7Ci0gICAgYXV0byBqc1N0cmluZ05vZGVO
YW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBub2RlTmFtZVZhbHVlLCAw
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5vZGVOYW1lID0gdG9XSyhqc1N0cmlu
Z05vZGVOYW1lKTsKLQotICAgIEpTVmFsdWVSZWYgcGFyZW50Tm9kZSA9IHByb3BlcnR5VmFsdWUo
Y29udGV4dCwgbm9kZVZhbHVlLCAicGFyZW50Tm9kZSIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vZGVO
YW1lKSk7Ci0KLSAgICBpZiAocGFyZW50Tm9kZSAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwg
cGFyZW50Tm9kZSkpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgPiAi
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4dCwgKEpTT2Jq
ZWN0UmVmKXBhcmVudE5vZGUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOworICAgIGF1dG8gbmFtZSA9IHRvV1RGU3RyaW5nKHN0cmluZ1Byb3BlcnR5KGNv
bnRleHQsIG5vZGVWYWx1ZSwgIm5vZGVOYW1lIikpOworICAgIGlmIChhdXRvIHBhcmVudE5vZGUg
PSBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBub2RlVmFsdWUsICJwYXJlbnROb2RlIikpCisgICAg
ICAgIHJldHVybiBtYWtlU3RyaW5nKG5hbWUsICIgPiAiLCBkdW1wUGF0aChjb250ZXh0LCBwYXJl
bnROb2RlKSk7CisgICAgcmV0dXJuIG5hbWU7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBkdW1w
UGF0aChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwg
V0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGUpCkBAIC0xMjYsNTMgKzk0LDQwIEBAIHN0YXRpYyBX
VEY6OlN0cmluZyByYW5nZVRvU3RyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlw
dFdvcmxkUmVmIHdvcmxkCiAgICAgaWYgKCFyYW5nZVJlZikKICAgICAgICAgcmV0dXJuICIobnVs
bCkiOwogCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShwYWdlKTsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKLSAgICBKU1Zh
bHVlUmVmIHJhbmdlVmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdyYXBwZXJGb3JS
YW5nZUZvcldvcmxkKGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOworICAgIGF1dG8gZnJhbWUgPSBX
S0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5k
bGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKKyAgICBh
dXRvIHJhbmdlVmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdyYXBwZXJGb3JSYW5n
ZUZvcldvcmxkKGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOwogICAgIEFTU0VSVChKU1ZhbHVlSXNP
YmplY3QoY29udGV4dCwgcmFuZ2VWYWx1ZSkpOwotICAgIEpTT2JqZWN0UmVmIHJhbmdlT2JqZWN0
ID0gKEpTT2JqZWN0UmVmKXJhbmdlVmFsdWU7Ci0KLSAgICBKU1ZhbHVlUmVmIHN0YXJ0Tm9kZVZh
bHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCByYW5nZU9iamVjdCwgInN0YXJ0Q29udGFpbmVy
Iik7Ci0gICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzdGFydE5vZGVWYWx1ZSkp
OwotICAgIEpTT2JqZWN0UmVmIHN0YXJ0Tm9kZU9iamVjdCA9IChKU09iamVjdFJlZilzdGFydE5v
ZGVWYWx1ZTsKLQotICAgIEpTVmFsdWVSZWYgZW5kTm9kZVZhbHVlID0gcHJvcGVydHlWYWx1ZShj
b250ZXh0LCByYW5nZU9iamVjdCwgImVuZENvbnRhaW5lciIpOwotICAgIEFTU0VSVChKU1ZhbHVl
SXNPYmplY3QoY29udGV4dCwgZW5kTm9kZVZhbHVlKSk7Ci0gICAgSlNPYmplY3RSZWYgZW5kTm9k
ZU9iamVjdCA9IChKU09iamVjdFJlZillbmROb2RlVmFsdWU7Ci0KLSAgICBpbnQgc3RhcnRPZmZz
ZXQgPSBwcm9wZXJ0eVZhbHVlSW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRPZmZzZXQi
KTsKLSAgICBpbnQgZW5kT2Zmc2V0ID0gcHJvcGVydHlWYWx1ZUludChjb250ZXh0LCByYW5nZU9i
amVjdCwgImVuZE9mZnNldCIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgicmFuZ2UgZnJvbSAiKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZE51bWJlcihzdGFydE9mZnNldCk7Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgb2YgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgo
Y29udGV4dCwgc3RhcnROb2RlT2JqZWN0KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgdG8gIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoZW5kT2Zmc2V0KTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChkdW1wUGF0aChjb250ZXh0LCBlbmROb2RlT2JqZWN0KSk7Ci0gICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBhdXRvIHJhbmdlT2JqZWN0ID0gKEpTT2Jq
ZWN0UmVmKXJhbmdlVmFsdWU7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygicmFuZ2UgZnJvbSAi
LAorICAgICAgICBudW1lcmljUHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJzdGFydE9m
ZnNldCIpLAorICAgICAgICAiIG9mICIsCisgICAgICAgIGR1bXBQYXRoKGNvbnRleHQsIG9iamVj
dFByb3BlcnR5KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRDb250YWluZXIiKSksCisgICAg
ICAgICIgdG8gIiwKKyAgICAgICAgbnVtZXJpY1Byb3BlcnR5KGNvbnRleHQsIHJhbmdlT2JqZWN0
LCAiZW5kT2Zmc2V0IiksCisgICAgICAgICIgb2YgIiwKKyAgICAgICAgZHVtcFBhdGgoY29udGV4
dCwgb2JqZWN0UHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRDb250YWluZXIiKSkK
KyAgICApOwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IE5hdmlnYXRpb25U
eXBlVG9TdHJpbmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQ6Ci0gICAg
ICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsaW5rIGNs
aWNrZWQiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJsaW5rIGNsaWNrZWQiKTsKICAgICBjYXNl
IGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkOgotICAgICAgICByZXR1cm4gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSBzdWJtaXR0ZWQiKSk7Cisg
ICAgICAgIHJldHVybiB0b1dLKCJmb3JtIHN1Ym1pdHRlZCIpOwogICAgIGNhc2Uga1dLRnJhbWVO
YXZpZ2F0aW9uVHlwZUJhY2tGb3J3YXJkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYmFjay9mb3J3YXJkIikpOworICAgICAgICByZXR1cm4g
dG9XSygiYmFjay9mb3J3YXJkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlUmVs
b2FkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygicmVsb2FkIikpOworICAgICAgICByZXR1cm4gdG9XSygicmVsb2FkIik7CiAgICAgY2FzZSBr
V0tGcmFtZU5hdmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVkOgotICAgICAgICByZXR1cm4gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSByZXN1Ym1pdHRlZCIpKTsK
KyAgICAgICAgcmV0dXJuIHRvV0soImZvcm0gcmVzdWJtaXR0ZWQiKTsKICAgICBjYXNlIGtXS0Zy
YW1lTmF2aWdhdGlvblR5cGVPdGhlcjoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIm90aGVyIikpOworICAgICAgICByZXR1cm4gdG9XSygib3Ro
ZXIiKTsKICAgICB9Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImlsbGVnYWwgdmFsdWUiKSk7CisgICAgcmV0dXJuIHRvV0soImlsbGVnYWwgdmFsdWUi
KTsKIH0KIAogc3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHls
ZURlY2xhcmF0aW9uUmVmIHN0eWxlKQpAQCAtMTg1LDIzICsxNDAsMTQgQEAgc3RhdGljIFdURjo6
U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxl
KQogICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBXVEY6
OlN0cmluZyBzZWN1cml0eU9yaWdpblRvU3RyKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luKQor
c3RhdGljIFdURjo6U3RyaW5nIHN0cmluZyhXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKIHsK
LSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ3snKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdL
U2VjdXJpdHlPcmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJp
bmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRO
dW1iZXIoV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSk7Ci0gICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJ30nKTsKLQotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoJ3snLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlP
cmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkpLCAiLCAiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdL
U2VjdXJpdHlPcmlnaW5Db3B5SG9zdChvcmlnaW4pKSksICIsICIsIFdLU2VjdXJpdHlPcmlnaW5H
ZXRQb3J0KG9yaWdpbiksICd9Jyk7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBmcmFtZVRvU3Ry
KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOworICAgIGF1dG8g
bmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CiAgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUo
ZnJhbWUpKSB7CiAgICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7CkBA
IC0yMzUsMTIgKzE4MSwxMiBAQCBzdGF0aWMgaW5saW5lIFdURjo6U3RyaW5nIHBhdGhTdWl0YWJs
ZUZvclRlc3RSZXN1bHQoV0tVUkxSZWYgZmlsZVVybCkKICAgICBpZiAoIWZpbGVVcmwpCiAgICAg
ICAgIHJldHVybiAiKG51bGwpIjsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY2hl
bWVTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJsKSk7CisgICAgYXV0byBz
Y2hlbWVTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJsKSk7CiAgICAgaWYg
KCFpc0xvY2FsRmlsZVNjaGVtZShzY2hlbWVTdHJpbmcuZ2V0KCkpKQogICAgICAgICByZXR1cm4g
dG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoZmlsZVVybCkpKTsKIAogICAgIFdL
QnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tVUkxSZWY+IG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFp
bkZyYW1lKSk7CisgICAgYXV0byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVD
b3B5VVJMKG1haW5GcmFtZSkpOwogICAgIGlmICghbWFpbkZyYW1lVVJMKQogICAgICAgICBtYWlu
RnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwobWFpbkZy
YW1lKSk7CiAKQEAgLTQzNCw4ICszODAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVz
ZXRBZnRlclRlc3QoKQogICAgIC8vIChzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzgzMzQ+KSwgaG93ZXZlciBmb3IgdGVzdHMsIHdlIHdhbnQgdG8gc3RhcnQg
ZWFjaCBvbmUgd2l0aCBhIGNsZWFuIHN0YXRlLgogICAgIFdLQnVuZGxlRnJhbWVGb2N1cyhmcmFt
ZSk7CiAKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0Q29udGV4dChmcmFtZSk7Ci0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldElu
dGVybmFsc09iamVjdChjb250ZXh0KTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50
ZXJuYWxzT2JqZWN0KFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSkpOwog
ICAgIGFzc2lnbmVkVXJsc0NhY2hlKCkuY2xlYXIoKTsKIAogICAgIC8vIFVzZXIgc2NyaXB0cyBu
ZWVkIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgdGhlIHRlc3QgYW5kIGJlZm9yZSBsb2FkaW5nIGFib3V0
OmJsYW5rLCBhcyBvdGhlcndpc2UgdGhleSB3b3VsZCBydW4gaW4gYWJvdXQ6YmxhbmssIGFuZCBw
b3RlbnRpYWxseSBsZWFrIHJlc3VsdHMgaW50byBhIHN1YnNlcXVlc3QgdGVzdC4KQEAgLTQ1MSw3
ICszOTYsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRlclRlc3QoKQogLy8g
U3RyaW5nIG91dHB1dCBtdXN0IGJlIGlkZW50aWNhbCB0byAtW1dlYkZyYW1lIF9kcnRfZGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdLgogc3RhdGljIHZvaWQgZHVtcEZyYW1lRGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5n
QnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CisgICAgYXV0byBu
YW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKICAgICBpZiAoV0tC
dW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkgewogICAgICAgICBpZiAoV0tTdHJpbmdJc0Vt
cHR5KG5hbWUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIm1haW4gZnJhbWUiKTsKQEAgLTQ4NiwyNyArNDMxLDIxIEBAIHN0YXRpYyB2b2lkIGR1bXBM
b2FkRXZlbnQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogZXZlbnROYW1lKQog
CiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVz
dFJlc3VsdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVp
bGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJl
cXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gZmlyc3RQ
YXJ0eSA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29raWVzKHJlcXVl
c3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaHR0cE1ldGhvZCA9IGFkb3B0V0so
V0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwotCi0gICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCI8TlNVUkxSZXF1ZXN0IFVSTCAiKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSkpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBtYWluIGRvY3VtZW50IFVSTCAiKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0
KCkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgaHR0cCBtZXRob2QgIik7
CisgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwor
ICAgIGF1dG8gZmlyc3RQYXJ0eSA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlG
b3JDb29raWVzKHJlcXVlc3QpKTsKKyAgICBhdXRvIGh0dHBNZXRob2QgPSBhZG9wdFdLKFdLVVJM
UmVxdWVzdENvcHlIVFRQTWV0aG9kKHJlcXVlc3QpKTsKIAorICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCI8TlNVUkxSZXF1ZXN0IFVSTCAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5n
ZXQoKSksICIsIG1haW4gZG9jdW1lbnQgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQo
Zmlyc3RQYXJ0eS5nZXQoKSksICIsIGh0dHAgbWV0aG9kICIpOwogICAgIGlmIChXS1N0cmluZ0lz
RW1wdHkoaHR0cE1ldGhvZC5nZXQoKSkpCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiKG5vbmUpIik7CiAgICAgZWxzZQogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0
b1dURlN0cmluZyhodHRwTWV0aG9kKSk7Ci0KICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicp
OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJs
ZUZvclRlc3RSZXN1bHQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgU3RyaW5nQnVpbGRlciYg
c3RyaW5nQnVpbGRlciwgYm9vbCBzaG91bGREdW1wUmVzcG9uc2VIZWFkZXJzID0gZmFsc2UpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNv
cHlVUkwocmVzcG9uc2UpKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNv
cHlVUkwocmVzcG9uc2UpKTsKICAgICBpZiAoIXVybCkgewogICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIihudWxsKSIpOwogICAgICAgICByZXR1cm47CkBAIC01MzUsMzEgKzQ3
NCwyMCBAQCB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVyQ291bnQo
V0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKIAogc3RhdGljIGlubGluZSB2b2lkIGR1bXBFcnJv
ckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLRXJyb3JSZWYgZXJyb3IsIFN0cmlu
Z0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGVycm9yRG9tYWluID0gYWRvcHRXSyhXS0Vycm9yQ29weURvbWFpbihlcnJvcikpOwotICAgIGlu
dCBlcnJvckNvZGUgPSBXS0Vycm9yR2V0RXJyb3JDb2RlKGVycm9yKTsKKyAgICBhdXRvIGVycm9y
RG9tYWluID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS0Vycm9yQ29weURvbWFpbihlcnJvcikpKTsK
KyAgICBhdXRvIGVycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJyb3IpOwogCiAgICAg
Ly8gV2UgbmVlZCB0byBkbyBzb21lIGVycm9yIG1hcHBpbmcgaGVyZSB0byBtYXRjaCB0aGUgdGVz
dCBleHBlY3RhdGlvbnMgKE1hYyBlcnJvciBuYW1lcyBhcmUgZXhwZWN0ZWQpLgotICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGVycm9yRG9tYWluLmdldCgpLCAiV2ViS2l0TmV0
d29ya0Vycm9yIikpIHsKLSAgICAgICAgZXJyb3JEb21haW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJOU1VSTEVycm9yRG9tYWluIikpOworICAgIGlmIChlcnJvckRv
bWFpbiA9PSAiV2ViS2l0TmV0d29ya0Vycm9yIikgeworICAgICAgICBlcnJvckRvbWFpbiA9ICJO
U1VSTEVycm9yRG9tYWluIjsKICAgICAgICAgZXJyb3JDb2RlID0gLTk5OTsKICAgICB9CisgICAg
aWYgKGVycm9yRG9tYWluID09ICAiV2ViS2l0UG9saWN5RXJyb3IiKQorICAgICAgICBlcnJvckRv
bWFpbiA9ICJXZWJLaXRFcnJvckRvbWFpbiI7CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhlcnJvckRvbWFpbi5nZXQoKSwgIldlYktpdFBvbGljeUVycm9yIikpCi0gICAg
ICAgIGVycm9yRG9tYWluID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
V2ViS2l0RXJyb3JEb21haW4iKSk7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IjxOU0Vycm9yIGRvbWFpbiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
ZyhlcnJvckRvbWFpbikpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBjb2Rl
ICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGVycm9yQ29kZSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS0Vycm9yQ29weUZhaWxpbmdVUkwo
ZXJyb3IpKTsKLSAgICBpZiAodXJsLmdldCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGZhaWxpbmcgVVJMIFwiIik7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgIH0KLQorICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCI8TlNFcnJvciBkb21haW4gIiwgZXJyb3JEb21haW4sICIsIGNvZGUgIiwg
ZXJyb3JDb2RlKTsKKyAgICBpZiAoYXV0byB1cmwgPSBhZG9wdFdLKFdLRXJyb3JDb3B5RmFpbGlu
Z1VSTChlcnJvcikpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCBmYWlsaW5nIFVS
TCBcIiIsIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpKSwg
JyInKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCkBAIC02OTUsNyArNjIz
LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9y
RnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnRlc3RVUkwoKSkgewotICAgICAgICBXS1Jl
dGFpblB0cjxXS1VSTFJlZj4gdGVzdFVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92
aXNpb25hbFVSTChmcmFtZSkpOworICAgICAgICBhdXRvIHRlc3RVUkwgPSBhZG9wdFdLKFdLQnVu
ZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwoZnJhbWUpKTsKICAgICAgICAgaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5zZXRUZXN0VVJMKHRlc3RVUkwuZ2V0KCkpOwogICAgIH0KIApAQCAt
Nzc0LDEzICs3MDIsMTMgQEAgZW51bSBGcmFtZU5hbWVQb2xpY3kgeyBTaG91bGROb3RJbmNsdWRl
RnJhbWVOYW1lLCBTaG91bGRJbmNsdWRlRnJhbWVOYW1lIH07CiAKIHN0YXRpYyB2b2lkIGR1bXBG
cmFtZVNjcm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXIm
IHN0cmluZ0J1aWxkZXIsIEZyYW1lTmFtZVBvbGljeSBzaG91bGRJbmNsdWRlRnJhbWVOYW1lID0g
U2hvdWxkTm90SW5jbHVkZUZyYW1lTmFtZSkKIHsKLSAgICBkb3VibGUgeCA9IG51bWVyaWNXaW5k
b3dQcm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVhPZmZzZXQiKTsKLSAgICBkb3VibGUgeSA9IG51
bWVyaWNXaW5kb3dQcm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVlPZmZzZXQiKTsKKyAgICBkb3Vi
bGUgeCA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0eShmcmFtZSwgInBhZ2VYT2Zmc2V0Iik7CisgICAg
ZG91YmxlIHkgPSBudW1lcmljV2luZG93UHJvcGVydHkoZnJhbWUsICJwYWdlWU9mZnNldCIpOwog
ICAgIGlmIChmYWJzKHgpIDw9IDAuMDAwMDAwMDEgJiYgZmFicyh5KSA8PSAwLjAwMDAwMDAxKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkSW5jbHVkZUZyYW1lTmFtZSkgewotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFt
ZUNvcHlOYW1lKGZyYW1lKSk7CisgICAgICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVG
cmFtZUNvcHlOYW1lKGZyYW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiZnJhbWUgJyIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhu
YW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJyAiKTsKQEAgLTc5
NCw3ICs3MjIsNyBAQCBzdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbgogCiBzdGF0aWMgdm9pZCBkdW1w
RGVzY2VuZGFudEZyYW1lU2Nyb2xsUG9zaXRpb25zKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0
cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJl
Zj4gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJh
bWUpKTsKKyAgICBhdXRvIGNoaWxkRnJhbWVzID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weUNo
aWxkRnJhbWVzKGZyYW1lKSk7CiAgICAgc2l6ZV90IHNpemUgPSBXS0FycmF5R2V0U2l6ZShjaGls
ZEZyYW1lcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
ICAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBzdWJmcmFtZSA9IHN0YXRpY19jYXN0PFdLQnVuZGxl
RnJhbWVSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZEZyYW1lcy5nZXQoKSwgaSkpOwpA
QCAtODEwLDI4ICs3MzgsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBBbGxGcmFt
ZVNjcm9sbFBvc2l0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGUKICAgICBkdW1wRGVz
Y2VuZGFudEZyYW1lU2Nyb2xsUG9zaXRpb25zKGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKIH0KIAot
c3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKGNvbnN0IGNoYXIqIHN0cmluZykK
LXsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5n
KSk7Ci19Ci0KIHN0YXRpYyBib29sIGhhc0RvY3VtZW50RWxlbWVudChXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lKQogewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBKU09iamVjdFJlZiBnbG9iYWxPYmpl
Y3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7Ci0KLSAgICBKU1ZhbHVlUmVm
IGRvY3VtZW50VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGdsb2JhbE9iamVj
dCwgdG9KUygiZG9jdW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFkb2N1bWVudFZhbHVlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRl
eHQsIGRvY3VtZW50VmFsdWUpKTsKLSAgICBKU09iamVjdFJlZiBkb2N1bWVudCA9IEpTVmFsdWVU
b09iamVjdChjb250ZXh0LCBkb2N1bWVudFZhbHVlLCAwKTsKLQotICAgIEpTVmFsdWVSZWYgZG9j
dW1lbnRFbGVtZW50VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGRvY3VtZW50
LCB0b0pTKCJkb2N1bWVudEVsZW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFkb2N1bWVudEVs
ZW1lbnRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgZG9jdW1lbnRFbGVtZW50VmFsdWUpOworICAgIGF1dG8gY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7CisgICAgcmV0dXJu
IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0
KSwgeyAiZG9jdW1lbnQiLCAiZG9jdW1lbnRFbGVtZW50IiB9KTsKIH0KIAogc3RhdGljIHZvaWQg
ZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBidWls
ZGVyKQpAQCAtODU0LDExICs3NjQsMTEgQEAgc3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4dChXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQogCiBzdGF0aWMgdm9p
ZCBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5n
QnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBj
aGlsZEZyYW1lcyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkp
OworICAgIGF1dG8gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRG
cmFtZXMoZnJhbWUpKTsKICAgICBzaXplX3Qgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGNoaWxkRnJh
bWVzLmdldCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAg
ICAgICBXS0J1bmRsZUZyYW1lUmVmIHN1YmZyYW1lID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVGcmFt
ZVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGNoaWxkRnJhbWVzLmdldCgpLCBpKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJmcmFtZU5hbWUgPSBhZG9wdFdLKFdLQnVu
ZGxlRnJhbWVDb3B5TmFtZShzdWJmcmFtZSkpOworICAgICAgICBhdXRvIHN1YmZyYW1lTmFtZSA9
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKHN1YmZyYW1lKSk7CiAKICAgICAgICAgLy8g
RHVtcFJlbmRlclRyZWUgaWdub3JlcyBlbXB0eSBmcmFtZXMsIHNvIGRvIHRoZSBzYW1lIHRoaW5n
IGhlcmUuCiAgICAgICAgIGlmICghaGFzRG9jdW1lbnRFbGVtZW50KHN1YmZyYW1lKSkKQEAgLTg4
NCw5ICs3OTQsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZyYW1lc1RleHQo
U3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
dW1wRE9NQXNXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXIm
IHN0cmluZ0J1aWxkZXIpCiB7CiAjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAm
JiAhVVNFKERJUkVDVDJEKQotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gd2tEYXRhID0gYWRv
cHRXSyhXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKLSAgICBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRl
cyh3a0RhdGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKLSAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IGNmU3RyaW5nID0gYWRvcHRDRihXZWJDb3JlVGVzdFN1cHBvcnQ6
OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKKyAgICBh
dXRvIHdrRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZyYW1lKSk7
CisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRl
cyh3a0RhdGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKKyAgICBhdXRv
IGNmU3RyaW5nID0gYWRvcHRDRihXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zy
b21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChjZlN0cmluZy5nZXQoKSk7CiAjZW5kaWYKIH0KQEAgLTkwMiw5ICs4MTIsOSBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZHVtcCgpCiAgICAgV0tCdW5kbGVQYWdlRmx1c2hQZW5kaW5nRWRp
dG9yU3RhdGVVcGRhdGUobV9wYWdlKTsKIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBX
S0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJl
Zj4gdXJsUmVmID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFtZSkpOworICAgIGF1
dG8gdXJsUmVmID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFtZSkpOwogICAgIFN0
cmluZyB1cmwgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxSZWYuZ2V0
KCkpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlID0gYWRvcHRXSyhX
S0J1bmRsZUZyYW1lQ29weU1JTUVUeXBlRm9yUmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYu
Z2V0KCkpKTsKKyAgICBhdXRvIG1pbWVUeXBlID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU1J
TUVUeXBlRm9yUmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYuZ2V0KCkpKTsKICAgICBpZiAo
dXJsLmZpbmQoImR1bXBBc1RleHQvIikgIT0gbm90Rm91bmQgfHwgV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtaW1lVHlwZS5nZXQoKSwgInRleHQvcGxhaW4iKSkKICAgICAgICAgaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5kdW1wQXNUZXh0KGZhbHNlKTsKIApAQCAtMTAxOCwyMSAr
OTI4LDE5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1l
KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRs
ZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTR2xvYmFsQ29udGV4
dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQo
ZnJhbWUsIHdvcmxkKTsKLSAgICBKU09iamVjdFJlZiB3aW5kb3cgPSBKU0NvbnRleHRHZXRHbG9i
YWxPYmplY3QoY29udGV4dCk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKIAogICAgIGlmIChXS0J1bmRs
ZVNjcmlwdFdvcmxkTm9ybWFsV29ybGQoKSAhPSB3b3JsZCkgewotICAgICAgICBKU09iamVjdFNl
dFByb3BlcnR5KGNvbnRleHQsIHdpbmRvdywgdG9KUygiX193b3JsZElEIikuZ2V0KCksIEpTVmFs
dWVNYWtlTnVtYmVyKGNvbnRleHQsIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZCh3b3JsZCkp
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICAgICAgc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkoY29udGV4dCwgIl9fd29ybGRJRCIsIFRlc3RSdW5uZXI6OndvcmxkSURGb3JX
b3JsZCh3b3JsZCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZiBl
eGNlcHRpb24gPSBudWxscHRyOwotICAgIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+bWFr
ZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwotICAgIGluamVjdGVk
QnVuZGxlLmdjQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywg
JmV4Y2VwdGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuZXZlbnRTZW5kaW5nQ29udHJvbGxlcigp
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgaW5q
ZWN0ZWRCdW5kbGUudGV4dElucHV0Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRl
eHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLmdjQ29udHJv
bGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLmV2
ZW50U2VuZGluZ0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKKyAgICBp
bmplY3RlZEJ1bmRsZS50ZXh0SW5wdXRDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29u
dGV4dCk7CiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotICAgIGluamVjdGVkQnVuZGxlLmFjY2Vz
c2liaWxpdHlDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAm
ZXhjZXB0aW9uKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigp
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOwogI2VuZGlmCiAKICAgICBXZWJDb3JlVGVzdFN1
cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKQEAgLTExMzYsNyArMTA0NCw3
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRJbml0aWF0ZUxvYWRGb3JSZXNvdXJjZShX
S0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3Qp
KTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7
CiAgICAgYXNzaWduZWRVcmxzQ2FjaGUoKS5hZGQoaWRlbnRpZmllciwgcGF0aFN1aXRhYmxlRm9y
VGVzdFJlc3VsdCh1cmwuZ2V0KCkpKTsKIH0KIApAQCAtMTE3NSwxNiArMTA4MywxNiBAQCBXS1VS
TFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShX
S0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5n
KCkgJiYgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5z
TnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVmPiByZWRpcmVjdFVSTCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2Up
KTsKKyAgICBhdXRvIHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChy
ZXNwb25zZSkpOwogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkgJiYgaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVk
aXJlY3QoKSAmJiByZWRpcmVjdFVSTCkgewogICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRU
ZXh0KCJSZXR1cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9w
dFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBob3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFtZSh1cmwuZ2V0KCkpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hl
bWUodXJsLmdldCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9
IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRv
cHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIGhvc3QgPSBhZG9w
dFdLKFdLVVJMQ29weUhvc3ROYW1lKHVybC5nZXQoKSkpOworICAgIGF1dG8gc2NoZW1lID0gYWRv
cHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CisgICAgYXV0byB1cmxTdHJpbmcgPSBh
ZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKICAgICBpZiAoaG9zdCAmJiAhV0tT
dHJpbmdJc0VtcHR5KGhvc3QuZ2V0KCkpCiAgICAgICAgICYmIGlzSFRUUE9ySFRUUFNTY2hlbWUo
c2NoZW1lLmdldCgpKQogICAgICAgICAmJiAhV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyho
b3N0LmdldCgpLCAiMjU1LjI1NS4yNTUuMjU1IikgLy8gVXNlZCBpbiBzb21lIHRlc3RzIHRoYXQg
ZXhwZWN0IHRvIGdldCBiYWNrIGFuIGVycm9yLgpAQCAtMTE5MiwxMiArMTEwMCwxMiBAQCBXS1VS
TFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShX
S0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgICAgICBib29sIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBm
YWxzZTsKICAgICAgICAgaWYgKGluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkgewogICAg
ICAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUobV9wYWdlKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtYWluRnJh
bWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOworICAgICAg
ICAgICAgYXV0byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1h
aW5GcmFtZSkpOwogICAgICAgICAgICAgaWYgKCFtYWluRnJhbWVVUkwgfHwgV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtYWluRnJhbWVVUkwuZ2V0
KCkpKS5nZXQoKSwgImFib3V0OmJsYW5rIikpCiAgICAgICAgICAgICAgICAgbWFpbkZyYW1lVVJM
ID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKG1haW5GcmFtZSkpOwog
Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1lSG9zdCA9IGFk
b3B0V0soV0tVUkxDb3B5SG9zdE5hbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7Ci0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1lU2NoZW1lID0gYWRvcHRXSyhXS1VS
TENvcHlTY2hlbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7CisgICAgICAgICAgICBhdXRvIG1haW5G
cmFtZUhvc3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1lKG1haW5GcmFtZVVSTC5nZXQoKSkp
OworICAgICAgICAgICAgYXV0byBtYWluRnJhbWVTY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNj
aGVtZShtYWluRnJhbWVVUkwuZ2V0KCkpKTsKICAgICAgICAgICAgIG1haW5GcmFtZUlzRXh0ZXJu
YWwgPSBpc0hUVFBPckhUVFBTU2NoZW1lKG1haW5GcmFtZVNjaGVtZS5nZXQoKSkgJiYgIWlzTG9j
YWxIb3N0KG1haW5GcmFtZUhvc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbWFp
bkZyYW1lSXNFeHRlcm5hbCAmJiAhaXNBbGxvd2VkSG9zdChob3N0LmdldCgpKSkgewpAQCAtMTIx
NCw3ICsxMTIyLDcgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNl
bmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAgICAgU3RyaW5nIGJv
ZHkgPSBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVxdWVzdEhUVFBCb2R5
KCk7CiAgICAgICAgIGlmICghYm9keS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENTdHJpbmcg
Y0JvZHkgPSBib2R5LnV0ZjgoKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4g
Ym9keSA9IGFkb3B0V0soV0tEYXRhQ3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGNCb2R5LmRhdGEoKSksIGNCb2R5Lmxlbmd0aCgpKSk7CisgICAgICAgICAgICBh
dXRvIGJvZHkgPSBhZG9wdFdLKFdLRGF0YUNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihjQm9keS5kYXRhKCkpLCBjQm9keS5sZW5ndGgoKSkpOwogICAgICAgICAg
ICAgcmV0dXJuIFdLVVJMUmVxdWVzdENvcHlTZXR0aW5nSFRUUEJvZHkocmVxdWVzdCwgYm9keS5n
ZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjQyLDkgKzExNTAsOSBAQCB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdl
UmVmIHBhZ2UsIFdLQgogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVS
TChyZXNwb25zZSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBh
ZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtaW1lVHlwZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25z
ZUNvcHlNSU1FVHlwZShyZXNwb25zZSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJl
c3BvbnNlQ29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8gdXJsU3RyaW5nID0gYWRvcHRXSyhX
S1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKKyAgICBhdXRvIG1pbWVUeXBl
U3RyaW5nID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHJlc3BvbnNlKSk7CiAK
ICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7CkBAIC0xMzUwLDEwICsxMjU4LDggQEAgV0tCdW5k
bGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbihXS0IKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb25cbiIpOwogICAgICAgICBkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFi
bGVGb3JUZXN0UmVzdWx0KHJlcXVlc3QsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiBpcyBtYWluIGZyYW1lIC0gIik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6
ICJubyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBzaG91bGQgb3Bl
biBVUkxzIGV4dGVybmFsbHkgLSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV0tC
dW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9u
QWN0aW9uKSA/ICJ5ZXMiIDogIm5vIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIg
aXMgbWFpbiBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVz
IiA6ICJubyIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIHNob3VsZCBvcGVuIFVS
THMgZXh0ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5F
eHRlcm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIpOwogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0
VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KQEAgLTEzNjEsMjQgKzEyNjcs
MjEgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIFdL
QnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwogCi0gICAgV0tSZXRhaW5QdHI8V0tV
UkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2No
ZW1lKHVybC5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5
VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2No
ZW1lKHVybC5nZXQoKSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRv
IGxvYWQgIik7Ci0gICAgaWYgKGlzTG9jYWxGaWxlU2NoZW1lKHVybFNjaGVtZS5nZXQoKSkpIHsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZpbGVuYW1lID0gYWRvcHRXSyhXS1VS
TENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJp
bmcodXJsLmdldCgpKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5n
KHVybFN0cmluZykpOwotICAgIH0KKyAgICBpZiAoaXNMb2NhbEZpbGVTY2hlbWUodXJsU2NoZW1l
LmdldCgpKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRX
SyhXS1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKSkpOworICAgIGVsc2UKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlT
dHJpbmcodXJsLmdldCgpKSkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB3
aXRoIG5hdmlnYXRpb24gdHlwZSBcJyIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RG
U3RyaW5nKE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0
TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikpKSk7CiAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJcJyIpOwotICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlSGl0VGVzdFJlc3Vs
dFJlZj4gaGl0VGVzdFJlc3VsdFJlZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9u
Q29weUhpdFRlc3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbikpOworICAgIGF1dG8gaGl0VGVzdFJl
c3VsdFJlZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RSZXN1
bHQobmF2aWdhdGlvbkFjdGlvbikpOwogICAgIGlmIChoaXRUZXN0UmVzdWx0UmVmKSB7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlTm9kZUhhbmRsZVJlZj4gbm9kZUhhbmRsZVJlZiA9IGFk
b3B0V0soV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJlc3VsdFJl
Zi5nZXQoKSkpOworICAgICAgICBhdXRvIG5vZGVIYW5kbGVSZWYgPSBhZG9wdFdLKFdLQnVuZGxl
SGl0VGVzdFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYuZ2V0KCkpKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb3JpZ2luYXRpbmcgZnJvbSAiKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCBub2RlSGFuZGxlUmVmLmdldCgpKSk7CiAgICAgfQpAQCAtMTQwMCwxMiArMTMwMyw3IEBA
IFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGlj
eUZvclJlc3BvbnNlKFdLQnVuZGxlUGFnCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RS
dW5uZXIoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVF
bmFibGVkKCkgJiYgV0tVUkxSZXNwb25zZUlzQXR0YWNobWVudChyZXNwb25zZSkpIHsKLSAgICAg
ICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gZmlsZW5hbWUgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmls
ZW5hbWUocmVzcG9uc2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJQ
b2xpY3kgZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxl
IG5hbWUgXCciKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZmls
ZW5hbWUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcJ1xuIik7Ci0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRw
dXRUZXh0KG1ha2VTdHJpbmcoIlBvbGljeSBkZWxlZ2F0ZTogcmVzb3VyY2UgaXMgYW4gYXR0YWNo
bWVudCwgc3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIsIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxS
ZXNwb25zZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShyZXNwb25zZSkpKSwgIlwnXG4iKSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwpAQCAt
MTQ3MSwxMCArMTM2OSwxMCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgYWRkTGVhZGluZ1NwYWNlU3Ry
aXBUcmFpbGluZ1NwYWNlc0FkZE5ld2xpbmUoY29uc3QgV1RGOjpTdHJpbgogCiBzdGF0aWMgV1RG
OjpTdHJpbmcgbGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KGNvbnN0IFdURjo6U3RyaW5nJiBwYXRo
KQogewotICAgIHNpemVfdCBwb3MgPSBwYXRoLmZpbmQoImZpbGU6Ly8iKTsKKyAgICBhdXRvIHBv
cyA9IHBhdGguZmluZCgiZmlsZTovLyIpOwogICAgIEFTU0VSVChXVEY6Om5vdEZvdW5kICE9IHBv
cyk7CiAKLSAgICBXVEY6OlN0cmluZyB0bXBQYXRoID0gcGF0aC5zdWJzdHJpbmcocG9zICsgNyk7
CisgICAgYXV0byB0bXBQYXRoID0gcGF0aC5zdWJzdHJpbmcocG9zICsgNyk7CiAgICAgaWYgKHRt
cFBhdGgubGVuZ3RoKCkgPCAyKSAvLyBLZWVwIHRoZSBsb25lIHNsYXNoIHRvIGF2b2lkIGVtcHR5
IG91dHB1dC4KICAgICAgICAgcmV0dXJuIHRtcFBhdGg7CiAKQEAgLTE1MjEsMTEgKzE0MTksNyBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQoV0tTdHJpbmdS
ZWYgc3RhdHVzYmFyVGV4dCkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iik7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCkpOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1h
a2VTdHJpbmcoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDoiLCB0
b1dURlN0cmluZyhzdGF0dXNiYXJUZXh0KSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1
bmRsZUZyYW1lUmVmKQpAQCAtMTU1OSwxNSArMTQ1Myw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2lu
UmVmCiAgICAgICAgIC8vIFJvdW5kaW5nIHVwIG9yIGRvd24gZG9lcyBub3QgcmVhbGx5IG1hdHRl
ciBmb3IgdGhlc2UgdGVzdHMuIEl0J3MKICAgICAgICAgLy8gc3VmZmljaWVudCB0byBqdXN0IGdl
dCBhIHJhbmdlIG9mIDEwMDAwIHRvIGRldGVybWluZSBpZiB3ZSB3ZXJlCiAgICAgICAgIC8vIGFi
b3ZlIG9yIGJlbG93IGEgdGhyZXNob2xkLgotICAgICAgICBpbnQ2NF90IHRydW5jYXRlZFNwYWNl
TmVlZGVkID0gKHRvdGFsQnl0ZXNOZWVkZWQgLyAxMDAwMCkgKiAxMDAwMDsKLQotICAgICAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiVUkgREVMRUdBVEUgQVBQTElDQVRJT04gQ0FDSEUgQ0FMTEJBQ0s6IGV4Y2VlZGVk
QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iik7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlY3VyaXR5T3JpZ2luVG9TdHIob3JpZ2luKSk7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvdGFsU3BhY2VOZWVkZWQ6fiIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0cnVuY2F0ZWRTcGFjZU5lZWRlZCk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1
bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGF1dG8g
dHJ1bmNhdGVkU3BhY2VOZWVkZWQgPSAodG90YWxCeXRlc05lZWRlZCAvIDEwMDAwKSAqIDEwMDAw
OworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVH
QVRFIEFQUExJQ0FUSU9OIENBQ0hFIENBTExCQUNLOiBleGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVP
cmlnaW5RdW90YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmluZyhvcmlnaW4pLCAiIHRvdGFsU3Bh
Y2VOZWVkZWQ6fiIsIHRydW5jYXRlZFNwYWNlTmVlZGVkLCAnXG4nKSk7CiAgICAgfQogCiAgICAg
aWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRGlzYWxsb3dJbmNyZWFzZUZv
ckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpKQpAQCAtMTU4MCwxNSArMTQ2Nyw4IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1Nl
Y3VyaXR5T3JpZ2luUmVmCiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEV4Y2VlZERh
dGFiYXNlUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIGRhdGFi
YXNlTmFtZSwgV0tTdHJpbmdSZWYgZGF0YWJhc2VEaXNwbGF5TmFtZSwgdWludDY0X3QgY3VycmVu
dFF1b3RhQnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnRPcmlnaW5Vc2FnZUJ5dGVzLCB1aW50NjRfdCBj
dXJyZW50RGF0YWJhc2VVc2FnZUJ5dGVzLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlQnl0ZXMpCiB7
CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7
Ci0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcERhdGFiYXNl
Q2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIERBVEFCQVNFIENB
TExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihvcmlnaW4pKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZGF0YWJhc2U6Iik7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGRhdGFiYXNlTmFtZSkpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKKyAg
ICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBE
QVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46
Iiwgc3RyaW5nKG9yaWdpbiksICIgZGF0YWJhc2U6IiwgdG9XVEZTdHJpbmcoZGF0YWJhc2VOYW1l
KSwgJ1xuJykpOwogCiAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0
OwogICAgIGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpLT5kYXRhYmFzZURlZmF1bHRRdW90YSgpOwpAQCAtMTYwMSwxMiArMTQ4MSw3IEBAIHVpbnQ2
NF90IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5
T3JpZ2luUmVmIG9yaWdpbiwKICAgICBpZiAobWF4UXVvdGEgPj0gMCkgewogICAgICAgICBpZiAo
ZGVmYXVsdFF1b3RhIDwgZXhwZWN0ZWRVc2FnZUJ5dGVzICYmIGV4cGVjdGVkVXNhZ2VCeXRlcyA8
PSBtYXhRdW90YSkgewogICAgICAgICAgICAgbmV3UXVvdGEgPSBleHBlY3RlZFVzYWdlQnl0ZXM7
Ci0KLSAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJB
Q0s6IGluY3JlYXNlZCBxdW90YSB0byAiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTnVtYmVyKG5ld1F1b3RhKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdc
bicpOwotICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtl
U3RyaW5nKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVhc2VkIHF1b3RhIHRv
ICIsIG5ld1F1b3RhLCAnXG4nKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG5ld1F1
b3RhOwpAQCAtMTY3NSwxMyArMTU1MCw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91
bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICBpZiAoIWlu
amVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxi
YWNrcygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdp
bkVkaXRpbmdJbkRPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5n
ZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpKTsKLSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRC
ZWdpbkVkaXRpbmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgp
LCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTY5MSwxMyArMTU2MSw4IEBAIGJvb2wg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVS
ZWYgcmFuZ2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElO
RyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRC
dW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBp
ZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJ
TkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9w
YWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5k
ZXggYTYyNTU4OTcyN2JjNzFiNzQxZWNmMjU2NTE1MjFlZmI0ZjQ5OTdmMy4uMzFlOWM1MzJkODA5
YTc5MzBjMGQyODlhOTU2NDdiM2ZjZTAyNDZjNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDEx
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCisjaW5j
bHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgi
CiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5jbHVkZSAiSlNUZXN0UnVubmVy
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rp
b25zLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0NUZXN0UnVubmVyVXRpbHMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9y
YWdlU2Vzc2lvbi5oPgpAQCAtNjksNyArNjksNyBAQCBSZWY8VGVzdFJ1bm5lcj4gVGVzdFJ1bm5l
cjo6Y3JlYXRlKCkKIH0KIAogVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcigpCi0gICAgOiBtX3VzZXJT
dHlsZVNoZWV0TG9jYXRpb24oYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
IikpKQorICAgIDogbV91c2VyU3R5bGVTaGVldExvY2F0aW9uKHRvV0soIiIpKQogewogICAgIHBs
YXRmb3JtSW5pdGlhbGl6ZSgpOwogfQpAQCAtODMsMzQgKzgzLDEwMiBAQCBKU0NsYXNzUmVmIFRl
c3RSdW5uZXI6OndyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIEpTVGVzdFJ1bm5lcjo6dGVzdFJ1
bm5lckNsYXNzKCk7CiB9CiAKK3N0YXRpYyBXS0J1bmRsZVBhZ2VSZWYgcGFnZSgpCit7CisgICAg
cmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKK30KKwor
c3RhdGljIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lKCkKK3sKKyAgICByZXR1cm4gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSk7Cit9CisKK3N0YXRpYyBKU0NvbnRleHRSZWYgbWFp
bkpTQ29udGV4dCgpCit7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29u
dGV4dChtYWluRnJhbWUoKSk7Cit9CisKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheSgpCiB7Ci0g
ICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCk7Ci0gICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KHBhZ2UpOworICAgIFdL
QnVuZGxlUGFnZUZvcmNlUmVwYWludChwYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRp
c3BsYXlBbmRUcmFja1JlcGFpbnRzKCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2Ug
PSBXVFI6OnBhZ2UoKTsKICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQocGFnZSk7CiAgICAg
V0tCdW5kbGVQYWdlU2V0VHJhY2tzUmVwYWludHMocGFnZSwgdHJ1ZSk7CiAgICAgV0tCdW5kbGVQ
YWdlUmVzZXRUcmFja2VkUmVwYWludHMocGFnZSk7CiB9CiAKK3N0YXRpYyBXS1JldGFpblB0cjxX
S0RvdWJsZVJlZj4gdG9XSyhkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0V0soV0tE
b3VibGVDcmVhdGUodmFsdWUpKTsKK30KKworc3RhdGljIFdLUmV0YWluUHRyPFdLRGljdGlvbmFy
eVJlZj4gY3JlYXRlV0tEaWN0aW9uYXJ5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8
Y29uc3QgY2hhciosIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+PiBwYWlycykKK3sKKyAgICBhdXRv
IHNpemUgPSBwYWlycy5zaXplKCk7CisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBrZXlzKHNpemUp
OworICAgIFZlY3RvcjxXS1R5cGVSZWY+IHZhbHVlcyhzaXplKTsKKyAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+PiBzdHJpbmdzKHNpemUpOworICAgIGZvciAoYXV0byYgcGFpciA6
IHBhaXJzKSB7CisgICAgICAgIGF1dG8ga2V5ID0gdG9XSyhwYWlyLmZpcnN0KTsKKyAgICAgICAg
a2V5cy5hcHBlbmQoa2V5LmdldCgpKTsKKyAgICAgICAgdmFsdWVzLmFwcGVuZChwYWlyLnNlY29u
ZC5nZXQoKSk7CisgICAgICAgIHN0cmluZ3MuYXBwZW5kKFdURk1vdmUoa2V5KSk7CisgICAgfQor
ICAgIHJldHVybiBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShrZXlzLmRhdGEoKSwgdmFsdWVz
LmRhdGEoKSwgc2l6ZSkpOworfQorCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBwb3N0
U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlw
ZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgV0tUeXBlUmVmIHJhd1JldHVyblZhbHVlID0g
bnVsbHB0cjsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSwgJnJhd1Jl
dHVyblZhbHVlKTsKKyAgICByZXR1cm4gYWRvcHRXSyhyYXdSZXR1cm5WYWx1ZSk7Cit9CisKK3N0
YXRpYyBib29sIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKGNvbnN0IGNo
YXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgcmV0dXJuIGJvb2xl
YW5WYWx1ZShwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5hbWUsIHZhbHVl
KSk7Cit9CisKK3N0YXRpYyBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1
ZSA9IG51bGxwdHIpCit7CisgICAgV0tUeXBlUmVmIHJhd1JldHVyblZhbHVlID0gbnVsbHB0cjsK
KyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCks
IHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlLCAmcmF3UmV0dXJuVmFsdWUpOworICAgIHJldHVybiBh
ZG9wdFdLKHJhd1JldHVyblZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2
YWx1ZSA9IG51bGxwdHIpCit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQorCitzdGF0aWMg
dWludDY0X3QgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50NjQoY29uc3Qg
Y2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICByZXR1cm4gdWlu
dDY0VmFsdWUocG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRoUmV0dXJuVmFsdWUobmFtZSwg
dmFsdWUpKTsKK30KKworc3RhdGljIHVpbnQ2NF90IHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1
cm5pbmdVSW50NjQoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gdWludDY0VmFsdWUo
cG9zdFN5bmNocm9ub3VzTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lKSk7Cit9CisKK3N0YXRp
YyB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQor
eworICAgIGF1dG8mIGJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBX
S0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGJ1bmRsZS5idW5kbGUo
KSwgYnVuZGxlLnBhZ2VHcm91cCgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSk7Cit9CisKIGJv
b2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcFBpeGVscygpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiR2V0RHVtcFBpeGVscyIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9
IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZy
ZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4g
cG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldER1bXBQaXhlbHMiKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXREdW1wUGl4ZWxzKGJvb2wgZHVtcFBpeGVscykKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXREdW1wUGl4ZWxzIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShk
dW1wUGl4ZWxzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXREdW1w
UGl4ZWxzIiwgZHVtcFBpeGVscyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dChi
b29sIGR1bXBQaXhlbHMpCkBAIC0xMjIsMTggKzE5MCwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OmR1
bXBBc1RleHQoYm9vbCBkdW1wUGl4ZWxzKQogICAgIAogV2hhdFRvRHVtcCBUZXN0UnVubmVyOjp3
aGF0VG9EdW1wKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRXaGF0VG9E
dW1wIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VS
VChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V2hhdFRvRHVtcD4oV0tVSW50NjRHZXRWYWx1ZShhZG9wdFdLKHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V2hhdFRvRHVtcD4ocG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJ
bnQ2NCgiR2V0V2hhdFRvRHVtcCIpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXaGF0VG9E
dW1wKFdoYXRUb0R1bXAgd2hhdFRvRHVtcCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRXaGF0VG9EdW1wIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHdoYXRUb0R1
bXApKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRXaGF0VG9EdW1w
Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHdoYXRUb0R1bXApKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2
ZSkKQEAgLTE1OCwyNiArMjIwLDE5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG93bmxv
YWRGaW5pc2hlZCgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG9uZSgpCiB7Ci0gICAg
YXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKTsK
IAogICAgIHNldFdhaXRVbnRpbERvbmUodHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
V2FpdFVudGlsRG9uZShib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFdhaXRVbnRpbERvbmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKCJTZXRXYWl0VW50aWxEb25lIiwgdmFsdWUpOwogfQogCiBib29s
IFRlc3RSdW5uZXI6OnNob3VsZFdhaXRVbnRpbERvbmUoKSBjb25zdAogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJHZXRXYWl0VW50aWxEb25lIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5E
YXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9w
dFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICBy
ZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldFdhaXRVbnRp
bERvbmUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKQEAgLTIxMCwxOCAr
MjY1LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6Zm9yY2VJbW1lZGlhdGVDb21wbGV0aW9uKCkKIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGJvb2wgdmFs
dWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldER1bXBGcmFtZUxvYWRDYWxsYmFj
a3MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZSgiU2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIsIHZhbHVlKTsKIH0KIAogYm9vbCBU
ZXN0UnVubmVyOjpzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiR2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKTsKLSAgICBXS1R5cGVS
ZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVy
bkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0
VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQo
KSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJH
ZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIik7CiB9CiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6Omlt
YWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29uc3QKQEAgLTIzMSwxOCArMjgwLDE0IEBA
IHVuc2lnbmVkIFRlc3RSdW5uZXI6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29u
c3QKIAogdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwg
Ym9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc291cmNlV0sgPSB0b1dLKHNvdXJjZSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VBZGRV
c2VyU2NyaXB0KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc291
cmNlV0suZ2V0KCksCisgICAgV0tCdW5kbGVQYWdlQWRkVXNlclNjcmlwdChwYWdlKCksIHRvV0so
c291cmNlKS5nZXQoKSwKICAgICAgICAgKHJ1bkF0U3RhcnQgPyBrV0tJbmplY3RBdERvY3VtZW50
U3RhcnQgOiBrV0tJbmplY3RBdERvY3VtZW50RW5kKSwKICAgICAgICAgKGFsbEZyYW1lcyA/IGtX
S0luamVjdEluQWxsRnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wg
YWxsRnJhbWVzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3VyY2VXSyA9IHRv
V0soc291cmNlKTsKLQotICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTdHlsZVNoZWV0KEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc291cmNlV0suZ2V0KCksCisgICAg
V0tCdW5kbGVQYWdlQWRkVXNlclN0eWxlU2hlZXQocGFnZSgpLCB0b1dLKHNvdXJjZSkuZ2V0KCks
CiAgICAgICAgIChhbGxGcmFtZXMgPyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6IGtXS0luamVjdElu
VG9wRnJhbWVPbmx5KSk7CiB9CiAKQEAgLTI1MywyOSArMjk4LDE3IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6a2VlcFdlYkhpc3RvcnkoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3Ry
aW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHNob3dVSSwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7Ci0g
ICAgV0tCdW5kbGVQYWdlRXhlY3V0ZUVkaXRpbmdDb21tYW5kKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyh2YWx1ZSkuZ2V0
KCkpOworICAgIFdLQnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChwYWdlKCksIHRvV0so
bmFtZSkuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFdL
RmluZE9wdGlvbnM+IGZpbmRPcHRpb25zRnJvbUFycmF5KEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5
QXNWYWx1ZSkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFn
ZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZy
YW1lKTsKLSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9wdGlvbnNBcnJheUFzVmFsdWUsIDApOwotICAg
IEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9w
dGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFs
dWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CisgICAgYXV0byBv
cHRpb25zQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3B0aW9uc0FycmF5QXNWYWx1
ZSwgbnVsbHB0cik7CisgICAgYXV0byBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBvcHRp
b25zQXJyYXkpOwogICAgIFdLRmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7Ci0gICAgc2l6ZV90IGxl
bmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0
aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewot
ICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29u
dGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmco
Y29udGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBv
cHRpb25OYW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkp
OwotCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
IGF1dG8gb3B0aW9uTmFtZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJv
cGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCkpOwogICAgICAgICBpZiAo
SlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQ2FzZUluc2Vu
c2l0aXZlIikpCiAgICAgICAgICAgICBvcHRpb25zIHw9IGtXS0ZpbmRPcHRpb25zQ2FzZUluc2Vu
c2l0aXZlOwogICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9w
dGlvbk5hbWUuZ2V0KCksICJBdFdvcmRTdGFydHMiKSkKQEAgLTI5Niw3ICszMjksNyBAQCBzdGF0
aWMgT3B0aW9uYWw8V0tGaW5kT3B0aW9ucz4gZmluZE9wdGlvbnNGcm9tQXJyYXkoSlNWYWx1ZVJl
ZiBvcHRpb25zQXJyYXlBc1ZhbAogYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTU3RyaW5n
UmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogewogICAgIGlmIChh
dXRvIG9wdGlvbnMgPSBmaW5kT3B0aW9uc0Zyb21BcnJheShvcHRpb25zQXJyYXlBc1ZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsK
KyAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcocGFnZSgpLCB0b1dLKHRhcmdl
dCkuZ2V0KCksICpvcHRpb25zKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTMwNCwyOCAr
MzM3LDIzIEBAIGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU1N0cmluZ1JlZiB0YXJnZXQs
IEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHZvaWQgVGVzdFJ1bm5lcjo6ZmluZFN0
cmluZ01hdGNoZXNJblBhZ2UoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVmIG9wdGlvbnNB
cnJheUFzVmFsdWUpCiB7CiAgICAgaWYgKGF1dG8gb3B0aW9ucyA9IGZpbmRPcHRpb25zRnJvbUFy
cmF5KG9wdGlvbnNBcnJheUFzVmFsdWUpKQotICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmlu
ZFN0cmluZ01hdGNoZXMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKKyAgICAgICAgV0tCdW5kbGVQYWdlRmlu
ZFN0cmluZ01hdGNoZXMocGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpyZXBsYWNlRmluZE1hdGNoZXNBdEluZGljZXMoSlNWYWx1ZVJl
ZiBtYXRjaEluZGljZXNBc1ZhbHVlLCBKU1N0cmluZ1JlZiByZXBsYWNlbWVudFRleHQsIGJvb2wg
c2VsZWN0aW9uT25seSkKIHsKICAgICBhdXRvJiBidW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCk7Ci0gICAgYXV0byBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
YnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBhdXRvIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1l
R2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICBhdXRvIGxlbmd0aFByb3BlcnR5
TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Cisg
ICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogICAgIGF1dG8gbWF0Y2hJbmRpY2Vz
T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG1hdGNoSW5kaWNlc0FzVmFsdWUsIDAp
OwotICAgIGF1dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG1h
dGNoSW5kaWNlc09iamVjdCwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAo
IUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybjsK
KyAgICBhdXRvIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG1hdGNoSW5kaWNlc09iamVj
dCk7CiAKICAgICBhdXRvIGluZGljZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkp
OwotICAgIGF1dG8gbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJ
bmRleChjb250ZXh0LCBtYXRjaEluZGljZXNPYmplY3QsIGksIDApOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0LCBpLCBudWxs
cHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgdmFsdWUpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBpbmRleCA9IGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoc3RkOjpyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxw
dHIpKSkpOworICAgICAgICBhdXRvIGluZGV4ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKSk7CiAgICAgICAgIFdLQXJyYXlB
cHBlbmRJdGVtKGluZGljZXMuZ2V0KCksIGluZGV4LmdldCgpKTsKICAgICB9CiAgICAgV0tCdW5k
bGVQYWdlUmVwbGFjZVN0cmluZ01hdGNoZXMoYnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBpbmRpY2Vz
LmdldCgpLCB0b1dLKHJlcGxhY2VtZW50VGV4dCkuZ2V0KCksIHNlbGVjdGlvbk9ubHkpOwpAQCAt
MzM0LDExICszNjIsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0SW5k
aWNlcyhKU1ZhbHVlUmVmIG1hdGNoSW5kaWNlc0FzVmFsdWUsIEpTUwogdm9pZCBUZXN0UnVubmVy
OjpjbGVhckFsbERhdGFiYXNlcygpCiB7CiAgICAgV0tCdW5kbGVDbGVhckFsbERhdGFiYXNlcyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcyIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodHJ1ZSkp
OwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJEZWxldGVBbGxJbmRleGVk
RGF0YWJhc2VzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90
YSh1aW50NjRfdCBxdW90YSkKQEAgLTM0OCwyOSArMzcyLDI3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0RGF0YWJhc2VRdW90YSh1aW50NjRfdCBxdW90YSkKIAogdm9pZCBUZXN0UnVubmVyOjpzeW5j
TG9jYWxTdG9yYWdlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTeW5jTG9jYWxTdG9y
YWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTeW5jTG9jYWxTdG9yYWdlIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCiB7Ci0gICAgV0tCdW5kbGVQYWdlQ2xlYXJBcHBs
aWNhdGlvbkNhY2hlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7
CisgICAgV0tCdW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlKHBhZ2UoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpTU3RyaW5nUmVm
IG9yaWdpbikKIHsKLSAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmln
aW4oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG9yaWdp
bikuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZUNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdp
bihwYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1aW50NjRfdCBzaXplKQogewotICAgIFdLQnVuZGxlUGFnZVNl
dEFwcENhY2hlTWF4aW11bVNpemUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBzaXplKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRBcHBDYWNoZU1heGltdW1TaXplKHBh
Z2UoKSwgc2l6ZSk7CiB9CiAKIGxvbmcgbG9uZyBUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hl
RGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICByZXR1cm4gV0tC
dW5kbGVQYWdlR2V0QXBwQ2FjaGVVc2FnZUZvck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CisgICAgcmV0dXJuIFdL
QnVuZGxlUGFnZUdldEFwcENhY2hlVXNhZ2VGb3JPcmlnaW4ocGFnZSgpLCB0b1dLKG9yaWdpbiku
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNh
dGlvbkNhY2hlUXVvdGEoKQpAQCAtMzgxLDE1OCArNDAzLDEwOCBAQCB2b2lkIFRlc3RSdW5uZXI6
OmRpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKQogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlUmVmIHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29udGV4dCwgV0tBcnJh
eVJlZiBzdHJpbmdzKQogewogICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXpl
KHN0cmluZ3MpOwotCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFy
cmF5KGNvbnRleHQsIDAsIDAsIDApOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKKyAgICBhdXRvIGFycmF5ID0gSlNP
YmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgbnVsbHB0cik7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN0cmluZ1JlZiA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoc3RyaW5ncywg
aSkpOwotICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nSlMgPSB0b0pTKHN0
cmluZ1JlZik7Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFy
cmF5T2JqLCBpLCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdKUy5nZXQoKSksIDAp
OworICAgICAgICBhdXRvIHN0cmluZ1JlZiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Fy
cmF5R2V0SXRlbUF0SW5kZXgoc3RyaW5ncywgaSkpOworICAgICAgICBKU09iamVjdFNldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwg
dG9KUyhzdHJpbmdSZWYpLmdldCgpKSwgbnVsbHB0cik7CiAgICAgfQotCi0gICAgcmV0dXJuIGFy
cmF5UmVzdWx0OworICAgIHJldHVybiBhcnJheTsKIH0KIAogSlNWYWx1ZVJlZiBUZXN0UnVubmVy
OjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gb3JpZ2lucyA9IGFkb3B0V0soV0tCdW5kbGVQYWdlQ29w
eU9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShwYWdlKSk7Ci0KLSAgICBXS0J1bmRsZUZyYW1l
UmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKLSAgICBKU0Nv
bnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWlu
RnJhbWUpOwotCi0gICAgcmV0dXJuIHN0cmluZ0FycmF5VG9KUyhjb250ZXh0LCBvcmlnaW5zLmdl
dCgpKTsKKyAgICByZXR1cm4gc3RyaW5nQXJyYXlUb0pTKG1haW5KU0NvbnRleHQoKSwgYWRvcHRX
SyhXS0J1bmRsZVBhZ2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKHBhZ2UoKSkpLmdl
dCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVm
IG5hbWUpCiB7Ci0gICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1hbmRFbmFibGVk
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5n
ZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKHBh
Z2UoKSwgdG9XSyhuYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FuT3Bl
bldpbmRvd3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDYW5PcGVuV2luZG93
cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUodHJ1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlNldENhbk9wZW5XaW5kb3dzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJX
ZWJLaXRYU1NBdWRpdG9yRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZl
cmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRs
ZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJl
ZmVyZW5jZSgiV2ViS2l0WFNTQXVkaXRvckVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRNZWRpYURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiV2ViS2l0TWVkaWFEZXZpY2VzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92
ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgp
LCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBX
VFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0TWVkaWFEZXZpY2VzRW5hYmxlZCIsIGVuYWJs
ZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdlYlJUQ01ETlNJQ0VDYW5kaWRhdGVzRW5h
YmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdlYlJUQ01ETlNJ
Q0VDYW5kaWRhdGVzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVu
Y2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5w
YWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVy
ZW5jZSgiV2ViS2l0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkIiwgZW5hYmxlZCk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tVXNlckFnZW50KEpTU3RyaW5nUmVmIHVzZXJB
Z2VudCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDdXN0b21Vc2VyQWdlbnQiKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHRvV0sodXNlckFnZW50KS5nZXQo
KSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0Q3VzdG9tVXNlckFn
ZW50IiwgdG9XSyh1c2VyQWdlbnQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRX
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IldlYktpdFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVu
ZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVC
b29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVj
dGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3Zl
cnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCIsIGVuYWJsZWQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKGJv
b2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0TW9kZXJuTWVkaWFDb250cm9s
c0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1
bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCks
IGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktp
dE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0V2ViR0wyRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IldlYktpdFdlYkdMMkVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJl
bmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUu
cGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZl
cmVuY2UoIldlYktpdFdlYkdMMkVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJXZWJLaXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYg
aW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5k
bGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5k
bGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7Cisg
ICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxl
ZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRyYW5zZm9ybVN0cmVhbUFQ
SUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBr
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRUcmFuc2Zv
cm1TdHJlYW1BUElFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5j
ZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBh
Z2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJl
bmNlKCJXZWJLaXRUcmFuc2Zvcm1TdHJlYW1BUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFJlYWRhYmxlQnl0ZVN0cmVhbUFQSUVuYWJs
ZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihp
bmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5n
ZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFJlYWRh
YmxlQnl0ZVN0cmVhbUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJXZWJLaXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5q
ZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVP
dmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUo
KSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAg
V1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCIs
IGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBpY3R1cmVJblBpY3R1cmVBUElF
bmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0UGljdHVyZUlu
UGljdHVyZUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNl
Rm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFn
ZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVu
Y2UoIldlYktpdFBpY3R1cmVJblBpY3R1cmVBUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJXZWJLaXRHZW5lcmljQ3VlQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRv
JiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1
bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1
bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsK
KyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0R2VuZXJpY0N1ZUFQSUVuYWJsZWQi
LCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZShib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGUoZW5hYmxlZCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVkQnVuZGxlLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZShlbmFibGVkKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGUiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sIHNob3Vs
ZFN3YXApCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRTd2FwVG9FcGhl
bWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkU3dhcCkp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVj
dGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRTaG91
bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIsIHNob3VsZFN3YXApOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0
TmF2aWdhdGlvbihib29sIHNob3VsZFN3YXApCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHNob3VsZFN3YXApKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZSgiU2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9u
Iiwgc2hvdWxkU3dhcCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxB
Y2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQpAQCAtNTU1LDkgKzUyNyw3IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsoYm9vbCBu
ZWVkc1F1aXJrKQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29s
IGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFBsdWdpbnNFbmFibGVkIikpOwot
ICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwot
ICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRC
dW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVu
YWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRQbHVnaW5zRW5hYmxl
ZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nl
c3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQpAQCAtNTkxLDggKzU2MSw3IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzQWxsb3dMaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNl
T3JpZ2luLCBKU1N0CiBib29sIFRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJ
bmRleCkKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdL
QnVuZGxlSXNQYWdlQm94VmlzaWJsZShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkZyYW1l
LCBwYWdlSW5kZXgpOworICAgIHJldHVybiBXS0J1bmRsZUlzUGFnZUJveFZpc2libGUoaW5qZWN0
ZWRCdW5kbGUuYnVuZGxlKCksIG1haW5GcmFtZSgpLCBwYWdlSW5kZXgpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJl
ZiBlbGVtZW50LCBKU1N0cmluZ1JlZiB2YWx1ZSkKQEAgLTYwMCwxNiArNTY5LDE0IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIGVsZW1lbnQsIEpTU3RyCiAgICAgaWYgKCFlbGVtZW50IHx8ICFKU1ZhbHVlSXNPYmplY3Qo
Y29udGV4dCwgZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdL
QnVuZGxlTm9kZUhhbmRsZVJlZj4gbm9kZUhhbmRsZSA9IGFkb3B0V0soV0tCdW5kbGVOb2RlSGFu
ZGxlQ3JlYXRlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGVsZW1lbnQpKSk7Ci0g
ICAgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNlcihub2Rl
SGFuZGxlLmdldCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CisgICAgV0tCdW5kbGVOb2RlSGFuZGxl
U2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNlcihhZG9wdFdLKFdLQnVuZGxlTm9kZUhhbmRs
ZUNyZWF0ZShjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihlbGVtZW50KSkpLmdldCgp
LCB0b1dLKHZhbHVlKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXVkaW9SZXN1
bHQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZGF0YSkKIHsKICAgICBhdXRvJiBp
bmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICAvLyBGSVhN
RSAoMTIzMDU4KTogVXNlIGEgSlNDIEFQSSB0byBnZXQgYnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3Vj
aCBpcyBleHBvc2VkLgotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYXVkaW9EYXRhID0gYWRv
cHRXSyhXS0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5KGluamVjdGVkQnVuZGxlLmJ1
bmRsZSgpLCBjb250ZXh0LCBkYXRhKSk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0QXVkaW9SZXN1
bHQoYXVkaW9EYXRhLmdldCgpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5zZXRBdWRpb1Jlc3VsdChh
ZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoaW5qZWN0ZWRCdW5kbGUu
YnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKS5nZXQoKSk7CiAgICAgc2V0V2hhdFRvRHVtcChXaGF0
VG9EdW1wOjpBdWRpbyk7CiAgICAgc2V0RHVtcFBpeGVscyhmYWxzZSk7CiB9CkBAIC02MjEsMzMg
KzU4OCwzMCBAQCB1bnNpZ25lZCBUZXN0UnVubmVyOjp3aW5kb3dDb3VudCgpCiAKIHZvaWQgVGVz
dFJ1bm5lcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQogewotICAgIFdLQnVuZGxlQ2xlYXJIaXN0
b3J5Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkp
OworICAgIFdLQnVuZGxlQ2xlYXJIaXN0b3J5Rm9yVGVzdGluZyhwYWdlKCkpOwogfQogCi0vLyBP
YmplY3QgQ3JlYXRpb24KLQotdm9pZCBUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKK3ZvaWQgVGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJ0ZXN0
UnVubmVyIiwgdGhpcywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9w
ZXJ0eShjb250ZXh0LCAidGVzdFJ1bm5lciIsIHRoaXMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNob3dXZWJJbnNwZWN0b3IoKQogewotICAgIFdLQnVuZGxlSW5zcGVjdG9yU2hvdyhXS0J1bmRs
ZVBhZ2VHZXRJbnNwZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3BlY3Rv
cihwYWdlKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYkluc3BlY3RvcigpCiB7
Ci0gICAgV0tCdW5kbGVJbnNwZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAgV0tCdW5kbGVJ
bnNwZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgpKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3RvcihKU1N0cmluZ1JlZiBzY3JpcHQp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQp
OwotICAgIFdLQnVuZGxlSW5zcGVjdG9yRXZhbHVhdGVTY3JpcHRGb3JUZXN0KFdLQnVuZGxlUGFn
ZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkp
LCBzY3JpcHRXSy5nZXQoKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlwdEZv
clRlc3QoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSksIHRvV0soc2NyaXB0KS5nZXQo
KSk7CiB9CiAKLXR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBXS1JldGFpblB0cjxXS0J1
bmRsZVNjcmlwdFdvcmxkUmVmPiA+IFdvcmxkTWFwOwordXNpbmcgV29ybGRNYXAgPSBXVEY6Okhh
c2hNYXA8dW5zaWduZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+PjsKIHN0
YXRpYyBXb3JsZE1hcCYgd29ybGRNYXAoKQogewogICAgIHN0YXRpYyBXb3JsZE1hcCYgbWFwID0g
Km5ldyBXb3JsZE1hcDsKQEAgLTY1NiwxMiArNjIwLDExIEBAIHN0YXRpYyBXb3JsZE1hcCYgd29y
bGRNYXAoKQogCiB1bnNpZ25lZCBUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQoV0tCdW5kbGVT
Y3JpcHRXb3JsZFJlZiB3b3JsZCkKIHsKLSAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gd29ybGRNYXAoKS5lbmQoKTsKLSAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChp
dC0+dmFsdWUgPT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyB0aGUgYW50aS1wYXR0ZXJuIG9mIGl0ZXJhdGluZyBhbiBlbnRpcmUgbWFw
LiBUeXBpY2FsbHkgd2UgdXNlIGEgcGFpciBvZiBtYXBzIG9yIGp1c3QgYSB2ZWN0b3IgaW4gYSBj
YXNlIGxpa2UgdGhpcy4KKyAgICBmb3IgKGF1dG8mIG1hcEVudHJ5IDogd29ybGRNYXAoKSkgewor
ICAgICAgICBpZiAobWFwRW50cnkudmFsdWUgPT0gd29ybGQpCisgICAgICAgICAgICByZXR1cm4g
bWFwRW50cnkua2V5OwogICAgIH0KLQogICAgIHJldHVybiAwOwogfQogCkBAIC02ODEsNyArNjQ0
LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChKU0Nv
bnRleHRSZWYgY29udGV4dCwgdW5zaWduZWQgd28KIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUgPSBXS0J1bmRsZUZyYW1lRm9ySmF2YVNjcmlwdENvbnRleHQoY29udGV4dCk7CiAgICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICAgICAgZnJhbWUgPSBt
YWluRnJhbWUoKTsKIAogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSBXS0J1bmRs
ZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQuZ2V0KCkpOwog
ICAgIEpTRXZhbHVhdGVTY3JpcHQoanNDb250ZXh0LCBzY3JpcHQsIDAsIDAsIDAsIDApOyAKQEAg
LTY5Niw4ICs2NTksNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFBPU0lYTG9jYWxlKEpTU3RyaW5n
UmVmIGxvY2FsZSkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5n
UmVmIGRpcmVjdGlvbikKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCkpOwotICAgIHJldHVybiBXS0J1bmRsZUZyYW1lU2V0VGV4dERpcmVjdGlvbihtYWluRnJh
bWUsIHRvV0soZGlyZWN0aW9uKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVTZXRU
ZXh0RGlyZWN0aW9uKG1haW5GcmFtZSgpLCB0b1dLKGRpcmVjdGlvbikuZ2V0KCkpOwogfQogICAg
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9y
ZVVubG9hZChib29sIHNob3VsZFN0YXlPblBhZ2UpCkBAIC03MDcsMTcgKzY2OSwxMiBAQCB2b2lk
IFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2Fk
KGJvb2wgc2hvdWxkU3RheU9uUAogCiBib29sIFRlc3RSdW5uZXI6OmRpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0
aW9uIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0
dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiRGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24o
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJDbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZv
clByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VW
aXNpYmlsaXR5KEpTU3RyaW5nUmVmIHN0YXRlKQpAQCAtNzMwLDcgKzY4Nyw3IEBAIHZvaWQgVGVz
dFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnNldEhpZGRlbihmYWxzZSk7CiB9CiAKLXR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2ln
bmVkLCBKU1ZhbHVlUmVmPiBDYWxsYmFja01hcDsKK3VzaW5nIENhbGxiYWNrTWFwID0gV1RGOjpI
YXNoTWFwPHVuc2lnbmVkLCBKU09iamVjdFJlZj47CiBzdGF0aWMgQ2FsbGJhY2tNYXAmIGNhbGxi
YWNrTWFwKCkKIHsKICAgICBzdGF0aWMgQ2FsbGJhY2tNYXAmIG1hcCA9ICpuZXcgQ2FsbGJhY2tN
YXA7CkBAIC03ODMsMzggKzc0MCwzMiBAQCBzdGF0aWMgdm9pZCBjYWNoZVRlc3RSdW5uZXJDYWxs
YmFjayh1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBpZiAoIWNh
bGxiYWNrKQogICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250
ZXh0KCk7CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2FsbGJhY2spKQorICAg
ICAgICByZXR1cm47CiAgICAgaWYgKGNhbGxiYWNrTWFwKCkuY29udGFpbnMoaW5kZXgpKSB7CiAg
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmco
IkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBjYWxsYmFjayBmb3Ig
dGhlIHNhbWUgZXZlbnQgKGlkICIsIGluZGV4LCAiKVxuXG4iKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0KLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwot
ICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250
ZXh0KG1haW5GcmFtZSk7CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwot
ICAgIGNhbGxiYWNrTWFwKCkuYWRkKGluZGV4LCBjYWxsYmFjayk7CisgICAgY2FsbGJhY2tNYXAo
KS5hZGQoaW5kZXgsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGNhbGxiYWNrKSk7CiB9CiAKIHN0
YXRpYyB2b2lkIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIHNpemVfdCBh
cmd1bWVudENvdW50ID0gMCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSA9IG51bGxwdHIp
CiB7Ci0gICAgaWYgKCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkKKyAgICBhdXRvIGNh
bGxiYWNrID0gY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KTsKKyAgICBpZiAoIWNhbGxiYWNrKQog
ICAgICAgICByZXR1cm47Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHQsIGNhbGxiYWNrTWFwKCkudGFrZShpbmRleCksIDApOworICAgIGF1
dG8gY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9u
KGNvbnRleHQsIGNhbGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGFy
Z3VtZW50Q291bnQsIGFyZ3VtZW50cywgMCk7CiAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0
LCBjYWxsYmFjayk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJUZXN0UnVubmVyQ2FsbGJh
Y2tzKCkKIHsKLSAgICBmb3IgKGF1dG8mIGl0ZXIgOiBjYWxsYmFja01hcCgpKSB7Ci0gICAgICAg
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5G
cmFtZSk7Ci0gICAgICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIGl0ZXIudmFsdWUsIDApOwotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQs
IGNhbGxiYWNrKTsKLSAgICB9Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7
CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNhbGxiYWNrTWFwKCkudmFsdWVzKCkpCisgICAgICAg
IEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVl
LCBudWxscHRyKSk7CiAgICAgY2FsbGJhY2tNYXAoKS5jbGVhcigpOwogfQogCkBAIC04OTQsMjAg
Kzg0NSwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1Jl
ZiBwcmVmZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRB
bHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWNjZXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldEFsd2F5c0FjY2VwdENvb2tpZXMiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWNjZXB0KSk7Ci0K
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldEFsd2F5c0FjY2VwdENvb2tp
ZXMiLCBhY2NlcHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE9ubHlBY2NlcHRGaXJzdFBh
cnR5Q29va2llcyhib29sIGFjY2VwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRP
bmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMiKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGFjY2VwdCkp
OwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0T25seUFjY2Vw
dEZpcnN0UGFydHlDb29raWVzIiwgYWNjZXB0KTsKIH0KIAogZG91YmxlIFRlc3RSdW5uZXI6OnBy
ZWNpc2VUaW1lKCkKQEAgLTkyNCwxNSArODY3LDE1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNl
clN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3VzZXJTdHlsZVNoZWV0
RW5hYmxlZCA9IGVuYWJsZWQ7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW1wdHlV
cmwgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7Ci0gICAgV0tT
dHJpbmdSZWYgbG9jYXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uLmdl
dCgpIDogZW1wdHlVcmwuZ2V0KCk7CisgICAgYXV0byBlbXB0eVN0cmluZyA9IHRvV0soIiIpOwor
ICAgIGF1dG8gbG9jYXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uLmdl
dCgpIDogZW1wdHlTdHJpbmcuZ2V0KCk7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgV0tCdW5kbGVTZXRVc2VyU3R5bGVTaGVldExv
Y2F0aW9uKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAo
KSwgbG9jYXRpb24pOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9j
YXRpb24oSlNTdHJpbmdSZWYgbG9jYXRpb24pCiB7Ci0gICAgbV91c2VyU3R5bGVTaGVldExvY2F0
aW9uID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhsb2NhdGlvbikpOworICAg
IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IHRvV0sobG9jYXRpb24pOwogCiAgICAgaWYgKG1f
dXNlclN0eWxlU2hlZXRFbmFibGVkKQogICAgICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQo
dHJ1ZSk7CkBAIC05NDYsOCArODg5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTcGF0aWFsTmF2
aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRhYktl
eUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byYgaW5qZWN0
ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVTZXRU
YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVj
dGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBlbmFibGVkKTsKKyAgICBXS0J1bmRsZVNldFRhYktl
eUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIHBhZ2UoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXpl
SFRUUExvYWRzKCkKQEAgLTk3MywzNiArOTE1LDI4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5
bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFRlc3RS
dW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4p
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4p
OwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
OwotICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihpbmplY3RlZEJ1bmRs
ZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG9yaWdpbldLLmdldCgp
LCB0cnVlKTsKKyAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCksIHRvV0sob3JpZ2luKS5nZXQo
KSwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlv
blBlcm1pc3Npb24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2Uo
KS0+cGFnZSgpLCBvcmlnaW5XSy5nZXQoKSwgZmFsc2UpOworICAgIFdLQnVuZGxlU2V0V2ViTm90
aWZpY2F0aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IHBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpLCBmYWxzZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6cmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKQogewotICAgIGF1dG8mIGlu
amVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxl
UmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoaW5qZWN0ZWRCdW5kbGUuYnVuZGxl
KCksIGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVJlbW92ZUFs
bFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25zKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgcGFnZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzaW11bGF0ZVdlYk5vdGlm
aWNhdGlvbkNsaWNrKEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uKQogewogICAgIGF1dG8mIGluamVj
dGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxl
LnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHVpbnQ2NF90IG5vdGlmaWNh
dGlvbklEID0gV0tCdW5kbGVHZXRXZWJOb3RpZmljYXRpb25JRChpbmplY3RlZEJ1bmRsZS5idW5k
bGUoKSwgY29udGV4dCwgbm90aWZpY2F0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5wb3N0U2lt
dWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7CisgICAgaW5qZWN0ZWRC
dW5kbGUucG9zdFNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soV0tCdW5kbGVHZXRXZWJOb3Rp
ZmljYXRpb25JRChpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkpTQ29udGV4dCgpLCBub3Rp
ZmljYXRpb24pKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Np
b24oYm9vbCBlbmFibGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBkb25lIGJ5
IGZyYW1lLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgogICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oZW5h
YmxlZCk7CiB9CiAKQEAgLTEwMTEsMTAyICs5NDUsNTEgQEAgYm9vbCBUZXN0UnVubmVyOjppc0dl
b2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKQogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7CiB9CiAKLXZvaWQgVGVzdFJ1
bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUg
bG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIEpTVmFsdWVSZWYganNBbHRpdHVkZSwgSlNWYWx1
ZVJlZiBqc0FsdGl0dWRlQWNjdXJhY3ksIEpTVmFsdWVSZWYganNIZWFkaW5nLCBKU1ZhbHVlUmVm
IGpzU3BlZWQsIEpTVmFsdWVSZWYganNGbG9vckxldmVsKQordm9pZCBUZXN0UnVubmVyOjpzZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFs
PGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBhdXRv
JiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1
bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3Rl
ZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLQotICAgIGJvb2wgcHJv
dmlkZXNBbHRpdHVkZSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZSA9IDAuOwotICAgIGlm
ICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzQWx0aXR1ZGUpKSB7Ci0gICAgICAgIHBy
b3ZpZGVzQWx0aXR1ZGUgPSB0cnVlOwotICAgICAgICBhbHRpdHVkZSA9IEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCBqc0FsdGl0dWRlLCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5ID0gMC47
Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNBbHRpdHVkZUFjY3VyYWN5
KSkgewotICAgICAgICBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kgPSB0cnVlOwotICAgICAgICBh
bHRpdHVkZUFjY3VyYWN5ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzQWx0aXR1ZGVBY2N1
cmFjeSwgMCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc0hlYWRpbmcgPSBmYWxzZTsKLSAg
ICBkb3VibGUgaGVhZGluZyA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRl
eHQsIGpzSGVhZGluZykpIHsKLSAgICAgICAgcHJvdmlkZXNIZWFkaW5nID0gdHJ1ZTsKLSAgICAg
ICAgaGVhZGluZyA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc0hlYWRpbmcsIDApOwotICAg
IH0KLQotICAgIGJvb2wgcHJvdmlkZXNTcGVlZCA9IGZhbHNlOwotICAgIGRvdWJsZSBzcGVlZCA9
IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzU3BlZWQpKSB7Ci0g
ICAgICAgIHByb3ZpZGVzU3BlZWQgPSB0cnVlOwotICAgICAgICBzcGVlZCA9IEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBqc1NwZWVkLCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3ZpZGVzRmxv
b3JMZXZlbCA9IGZhbHNlOwotICAgIGRvdWJsZSBmbG9vckxldmVsID0gMC47Ci0gICAgaWYgKCFK
U1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNGbG9vckxldmVsKSkgewotICAgICAgICBwcm92
aWRlc0Zsb29yTGV2ZWwgPSB0cnVlOwotICAgICAgICBmbG9vckxldmVsID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGpzRmxvb3JMZXZlbCwgMCk7Ci0gICAgfQotCi0gICAgaW5qZWN0ZWRCdW5k
bGUuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJh
Y3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ks
IGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVl
ZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBs
b25naXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywg
c3BlZWQsIGZsb29yTGV2ZWwpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdlKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlV0sgPSB0b1dLKG1lc3NhZ2UpOwotICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVu
YXZhaWxhYmxlRXJyb3IobWVzc2FnZVdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKHRvV0so
bWVzc2FnZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcm1p
c3Npb24oYm9vbCBlbmFibGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBkb25l
IGJ5IGZyYW1lLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgog
ICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGVu
YWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbigp
CiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbigpOwogfQogCiBib29sIFRlc3RS
dW5uZXI6OmlzRG9pbmdNZWRpYUNhcHR1cmUoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIklzRG9pbmdNZWRpYUNhcHR1cmUiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEg
PSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0
aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
cmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkp
LmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuKCJJc0RvaW5nTWVkaWFDYXB0dXJlIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4oYm9vbCBwZXJtaXNzaW9uLCBK
U1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9XSyhwYXJlbnRPcmlnaW4pOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVy
bWlzc2lvbkZvck9yaWdpbihwZXJtaXNzaW9uLCBvcmlnaW5XSy5nZXQoKSwgcGFyZW50T3JpZ2lu
V0suZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQ
ZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbihwZXJtaXNzaW9uLCB0b1dLKG9yaWdpbikuZ2V0
KCksIHRvV0socGFyZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6
OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3Jp
Z2luLCBKU1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5XSyA9IHRvV0socGFyZW50T3JpZ2luKTsKLSAgICByZXR1
cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
Q291bnRGb3JPcmlnaW4ob3JpZ2luV0suZ2V0KCksIHBhcmVudE9yaWdpbldLLmdldCgpKTsKKyAg
ICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0Q291bnRGb3JPcmlnaW4odG9XSyhvcmlnaW4pLmdldCgpLCB0b1dLKHBhcmVudE9yaWdp
bikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RDb3VudEZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBh
cmVudE9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0
b1dLKG9yaWdpbik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldL
ID0gdG9XSyhwYXJlbnRPcmlnaW4pOwotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5y
ZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4ob3JpZ2luV0suZ2V0
KCksIHBhcmVudE9yaWdpbldLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKHRvV0sob3Jp
Z2luKS5nZXQoKSwgdG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVu
bmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYg
bWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVDYWxsU2hv
dWxkQ2xvc2VPbldlYlZpZXcobWFpbkZyYW1lKTsKKyAgICByZXR1cm4gV0tCdW5kbGVGcmFtZUNh
bGxTaG91bGRDbG9zZU9uV2ViVmlldyhtYWluRnJhbWUoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6cXVldWVCYWNrTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJCYWNrd2FyZCkKQEAgLTExMjIs
MjAgKzEwMDUsMTcgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHVu
c2lnbmVkIGhvd0ZhckZvcndhcmQpCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmlu
Z1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCwgYm9vbCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxz
KQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBiYXNlVVJMV0sgPSBhZG9wdFdLKFdLQnVu
ZGxlRnJhbWVDb3B5VVJMKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5w
YWdlKCktPnBhZ2UoKSkpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsV0sgPSBhZG9w
dFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTFdLLmdldCgpLCB0b1dURlN0cmluZyh0
b1dLKHVybCkpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dXJsU3RyaW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxXSy5nZXQoKSkpOwotCisg
ICAgYXV0byBiYXNlVVJMV0sgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFt
ZSgpKSk7CisgICAgYXV0byB1cmxXSyA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChi
YXNlVVJMV0suZ2V0KCksIHRvV1RGU3RyaW5nKHVybCkudXRmOCgpLmRhdGEoKSkpOworICAgIGF1
dG8gdXJsU3RyaW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxXSy5nZXQoKSkpOwog
ICAgIGluamVjdGVkQnVuZGxlLnF1ZXVlTG9hZCh1cmxTdHJpbmdXSy5nZXQoKSwgdG9XSyh0YXJn
ZXQpLmdldCgpLCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpxdWV1ZUxvYWRIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJh
c2VVUkwsIEpTU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBjb250ZW50V0sgPSB0b1dLKGNvbnRlbnQpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBiYXNlVVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJMKSA6IFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPigpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNo
YWJsZVVSTFdLID0gdW5yZWFjaGFibGVVUkwgPyB0b1dLKHVucmVhY2hhYmxlVVJMKSA6IFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPigpOwotCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29udGVudFdLLmdldCgpLCBiYXNlVVJMV0suZ2V0KCksIHVu
cmVhY2hhYmxlVVJMV0suZ2V0KCkpOworICAgIGF1dG8gYmFzZVVSTFdLID0gYmFzZVVSTCA/IHRv
V0soYmFzZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKKyAgICBhdXRvIHVucmVh
Y2hhYmxlVVJMV0sgPSB1bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5yZWFjaGFibGVVUkwpIDogV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnF1ZXVlTG9hZEhUTUxTdHJpbmcodG9XSyhjb250ZW50KS5nZXQoKSwgYmFzZVVSTFdLLmdldCgp
LCB1bnJlYWNoYWJsZVVSTFdLLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJl
bG9hZCgpCkBAIC0xMTQ1LDE2MyArMTAyNSwxMTkgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJl
bG9hZCgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVm
IHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dL
KHNjcmlwdCk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9hZGluZ1Nj
cmlwdChzY3JpcHRXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1
ZXVlTG9hZGluZ1NjcmlwdCh0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQoc2NyaXB0V0suZ2V0
KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZU5vbkxvYWRpbmdTY3Jp
cHQodG9XSyhzY3JpcHQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRSZWplY3Rz
UHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoYm9v
bCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRSZWplY3RzUHJvdGVjdGlv
blNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFj
ZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwgdmFsdWUpOwogfQogICAg
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJv
b2wgaGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcykKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIikpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShoYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
U2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIGhhbmRsZXNBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZExvZ0NhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNo
b3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiLCB2YWx1ZSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MoYm9vbCB2
YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRMb2dEb3dubG9hZENh
bGxiYWNrcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRT
aG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKEpTU3RyaW5nUmVmIHVzZXJuYW1lKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyh1c2VybmFtZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEF1dGhl
bnRpY2F0aW9uVXNlcm5hbWUiLCB0b1dLKHVzZXJuYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25QYXNzd29yZChKU1N0cmluZ1JlZiBwYXNzd29yZCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcocGFzc3dvcmQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJT
ZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIiwgdG9XSyhwYXNzd29yZCkuZ2V0KCkpOwogfQogCiBi
b29sIFRlc3RSdW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQoKSBjb25zdAogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQiKSk7Ci0gICAg
V0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJTZWN1cmVFdmVudElucHV0SXNFbmFibGVkIik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wgc2hvdWxkQmxv
Y2spCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QmxvY2tBbGxQbHVnaW5zIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShzaG91bGRCbG9jaykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEJsb2NrQWxs
UGx1Z2lucyIsIHNob3VsZEJsb2NrKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5T
dXBwb3J0ZWRNb2RlKEpTU3RyaW5nUmVmIG1vZGUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0UGx1Z2luU3VwcG9ydGVkTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKG1vZGUp
KTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIiwgdG9XSyhtb2Rl
KS5nZXQoKSk7CiB9CiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6ZmFpbE5leHROZXdDb2RlQmxv
Y2soKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0g
ICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0NvZGVCbG9jayhjb250
ZXh0KTsKKyAgICByZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0NvZGVCbG9jayhtYWluSlNDb250ZXh0
KCkpOwogfQogCi1KU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGlsZXMoSlNW
YWx1ZVJlZiB0aGVGdW5jdGlvbikKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdD
b21waWxlcyhKU1ZhbHVlUmVmIGZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRs
ZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpu
dW1iZXJPZkRGR0NvbXBpbGVzKGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4gSlND
OjpudW1iZXJPZkRGR0NvbXBpbGVzKG1haW5KU0NvbnRleHQoKSwgZnVuY3Rpb24pOwogfQogCi1K
U1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiB0aGVG
dW5jdGlvbikKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlvbihKU1Zh
bHVlUmVmIGZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpzZXROZXZlcklubGlu
ZShjb250ZXh0LCB0aGVGdW5jdGlvbik7CisgICAgcmV0dXJuIEpTQzo6c2V0TmV2ZXJJbmxpbmUo
bWFpbkpTQ29udGV4dCgpLCBmdW5jdGlvbik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hv
dWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoYm9vbCB2YWx1ZSkKIHsKICAgICBt
X3Nob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5ID0gdmFsdWU7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVs
YXkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxk
RGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KGJvb2wgdmFs
dWUpCiB7CiAgICAgbV9zaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkgPSB2YWx1
ZTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGlj
eUFmdGVyRGVsYXkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
U2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5IiwgdmFsdWUpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoYm9vbCB2YWx1ZSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVk
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE5hdmlnYXRp
b25HZXN0dXJlc0VuYWJsZWQiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0SWdu
b3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIs
IHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREb3dubG9hZFVuZGlzcGxh
eWFibGVNSU1FVHlwZXMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZh
bHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxl
TUlNRVR5cGVzIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZEFsbG93
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9u
QWNjZXNzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNo
b3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiLCB2YWx1ZSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIikpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJUZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyIpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBu
dWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiVGVybWlu
YXRlU2VydmljZVdvcmtlcnMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIlNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MiLCB2YWx1ZSk7
CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBuZXh0VUlTY3JpcHRDYWxsYmFja0lEKCkKQEAgLTEzMTQs
OTcgKzExNTAsNDggQEAgdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdChKU1N0cmluZ1JlZiBz
Y3JpcHQsIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9
IG5leHRVSVNjcmlwdENhbGxiYWNrSUQoKTsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhj
YWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSdW5VSVBy
b2Nlc3NTY3JpcHQiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVm
PiB0ZXN0RGljdGlvbmFyeSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHNjcmlwdFZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
ZyhzY3JpcHQpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gY2FsbGJhY2tJRFZhbHVlID0gYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShjYWxsYmFja0lEKSk7Ci0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRl
c3REaWN0aW9uYXJ5LmdldCgpLCBzY3JpcHRLZXkuZ2V0KCksIHNjcmlwdFZhbHVlLmdldCgpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBjYWxsYmFja0lE
S2V5LmdldCgpLCBjYWxsYmFja0lEVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgdGVzdERpY3Rpb25hcnkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiUnVuVUlQcm9jZXNzU2NyaXB0IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAi
U2NyaXB0IiwgdG9XSyhzY3JpcHQpIH0sCisgICAgICAgIHsgIkNhbGxiYWNrSUQiLCBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQpKS5nZXQoKSB9LAorICAgIH0pLmdldCgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KEpTU3RyaW5nUmVmIHNj
cmlwdCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0g
bmV4dFVJU2NyaXB0Q2FsbGJhY2tJRCgpOwogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKGNh
bGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJ1blVJUHJv
Y2Vzc1NjcmlwdEltbWVkaWF0ZWx5IikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gdGVzdERpY3Rpb25hcnkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRWYWx1ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoc2NyaXB0KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2Fs
bGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxi
YWNrSUQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGNhbGxiYWNrSURWYWx1ZSA9
IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpOwotCi0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbSh0ZXN0RGljdGlvbmFyeS5nZXQoKSwgc2NyaXB0S2V5LmdldCgpLCBzY3JpcHRWYWx1
ZS5nZXQoKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSh0ZXN0RGljdGlvbmFyeS5nZXQoKSwg
Y2FsbGJhY2tJREtleS5nZXQoKSwgY2FsbGJhY2tJRFZhbHVlLmdldCgpKTsKLQotICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHRlc3REaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlJ1blVJUHJvY2Vzc1NjcmlwdEltbWVkaWF0ZWx5IiwgY3JlYXRlV0tEaWN0
aW9uYXJ5KHsKKyAgICAgICAgeyAiU2NyaXB0IiwgdG9XSyhzY3JpcHQpIH0sCisgICAgICAgIHsg
IkNhbGxiYWNrSUQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQpKS5nZXQoKSB9
LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdENhbGxi
YWNrKHVuc2lnbmVkIGNhbGxiYWNrSUQsIEpTU3RyaW5nUmVmIHJlc3VsdCkKIHsKLSAgICBXS0J1
bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0K
LSAgICBKU1ZhbHVlUmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwg
cmVzdWx0KTsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmco
bWFpbkpTQ29udGV4dCgpLCByZXN1bHQpOwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soY2Fs
bGJhY2tJRCwgMSwgJnJlc3VsdFZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxv
d2VkTWVudUFjdGlvbnMoSlNWYWx1ZVJlZiBhY3Rpb25zKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldEFsbG93ZWRNZW51QWN0aW9ucyIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFi
bGVBcnJheVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkp
OwotCi0gICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpOwotICAgIGF1dG8gbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBh
Z2UpOwotICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChtYWluRnJhbWUpOwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBt
YWluSlNDb250ZXh0KCk7CiAgICAgYXV0byBhY3Rpb25zQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgYWN0aW9ucywgbnVsbHB0cik7Ci0gICAgYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgYWN0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUu
Z2V0KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0
aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFjdGlvbnNBcnJheSwgaSwg
MCk7Ci0gICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gYWN0aW9uTmFtZSA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGFjdGlvbiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
YWN0aW9uTmFtZS5nZXQoKSkpOwotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9k
eS5nZXQoKSwgYWN0aW9uLmdldCgpKTsKKyAgICBhdXRvIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNv
bnRleHQsIGFjdGlvbnNBcnJheSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRl
eChjb250ZXh0LCBhY3Rpb25zQXJyYXksIGksIG51bGxwdHIpOworICAgICAgICBXS0FycmF5QXBw
ZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgdG9XS1N0cmluZyhjb250ZXh0LCB2YWx1ZSkuZ2V0
KCkpOwogICAgIH0KLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRB
bGxvd2VkTWVudUFjdGlvbnMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6aW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24oSlNTdHJpbmdSZWYgbmFtZSwgYm9vbCBkaXNt
aXNzZXNBdXRvbWF0aWNhbGx5LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVz
dFJ1bm5lckNhbGxiYWNrKEN1c3RvbU1lbnVBY3Rpb25DYWxsYmFja0lELCBjYWxsYmFjayk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnN0YWxsQ3VzdG9tTWVudUFjdGlvbiIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBuYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
bmFtZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZVZhbHVlID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhuYW1lKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgbmFtZUtleS5nZXQoKSwgbmFtZVZhbHVlLmdldCgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGlzbWlzc2VzQXV0b21h
dGljYWxseSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGRpc21pc3Nlc0F1dG9t
YXRpY2FsbHlWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRpc21pc3Nlc0F1dG9tYXRp
Y2FsbHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBkaXNt
aXNzZXNBdXRvbWF0aWNhbGx5S2V5LmdldCgpLCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5VmFsdWUu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiSW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24iLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJuYW1lIiwgdG9XSyhuYW1lKSB9LAorICAg
ICAgICB7ICJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
ZGlzbWlzc2VzQXV0b21hdGljYWxseSkpLmdldCgpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxEaWRCZWdpblN3aXBlQ2FsbGJhY2soSlNWYWx1ZVJlZiBj
YWxsYmFjaykKQEAgLTE0NDksNTggKzEyMzYsMzAgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlk
UmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrKCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhclN0
YXRpc3RpY3NEYXRhRm9yRG9tYWluKEpTU3RyaW5nUmVmIGRvbWFpbikKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoZG9tYWluKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIiwgdG9XSyhkb21haW4pLmdldCgpKTsKIH0K
IAogYm9vbCBUZXN0UnVubmVyOjpkb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNl
KHVuc2lnbmVkIGRvbWFpbklEKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRv
bWFpbklEIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZG9t
YWluSUQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkp
OwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdL
ZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ld
LmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvZXNTdGF0aXN0aWNz
RG9tYWluSURFeGlzdEluRGF0YWJhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0
YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLVHlwZVJlZiBy
ZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAg
IEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkRvZXNTdGF0aXN0aWNzRG9tYWluSURFeGlzdElu
RGF0YWJhc2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJEb21haW5JRCIsIGFk
b3B0V0soV0tVSW50NjRDcmVhdGUoZG9tYWluSUQpKSB9CisgICAgfSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgdmFsdWUpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0VuYWJsZWQiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzRW5hYmxlZCIsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NF
cGhlbWVyYWwoKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKSk7Ci0gICAgV0tUeXBl
UmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
IHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUsIEpTVmFsdWVS
ZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0
U3RhdGlzdGljc0RlYnVnTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiLCB2YWx1ZSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFjaygp
CkBAIC0xNTExLDEwICsxMjcwLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERp
ZFNldERlYnVnTW9kZUNhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1ZhbHVl
UmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNhbGxiYWNrSUQsIGNvbXBs
ZXRpb25IYW5kbGVyKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
Zyhob3N0TmFtZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1
Z01vZGUiLCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNhbGxiYWNrKCkK
QEAgLTE1MjYsMjcgKzEyODIsMTAgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFz
dFNlZW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzLCBKU1YKIHsKICAgICBj
YWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzTGFzdFNlZW5DYWxsYmFja0lELCBj
b21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAg
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdL
U3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiBy
YXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgp
OwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rp
b25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6
ZSgpKSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAg
eyAiVmFsdWUiLCB0b1dLKHNlY29uZHMpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0TGFzdFNlZW5DYWxsYmFjaygpCkBAIC0xNTU4
LDQ5ICsxMjk3LDE4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01lcmdlU3RhdGlz
dGljKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiB0CiB7CiAgICAgY2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljQ2FsbGJhY2tJRCwgY29t
cGxldGlvbkhhbmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4g
a2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjEiKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZURvbWFpbjEp
KSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVG9wRnJhbWVEb21haW4yIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVEb21haW4yKSkpOwotCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGFzdFNlZW4i
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShsYXN0U2Vlbikp
KTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShoYWRVc2VySW50ZXJhY3Rpb24pKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlckludGVy
YWN0aW9uIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUobW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzR3JhbmRmYXRoZXJlZCIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVyZWQpKSk7Ci0K
LSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJ
c1ByZXZhbGVudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShpc1ByZXZhbGVudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIklzVmVyeVByZXZhbGVudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ZlcnlQcmV2YWxlbnQpKSk7Ci0KLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEYXRhUmVjb3Jk
c1JlbW92ZWQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShk
YXRhUmVjb3Jkc1JlbW92ZWQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMo
a2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6
ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewot
ICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ld
ID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRT
dGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0
YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzTWVyZ2VTdGF0aXN0aWMiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0
TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lRG9tYWluMSIsIHRv
V0sodG9wRnJhbWVEb21haW4xKSB9LAorICAgICAgICB7ICJUb3BGcmFtZURvbWFpbjIiLCB0b1dL
KHRvcEZyYW1lRG9tYWluMikgfSwKKyAgICAgICAgeyAiTGFzdFNlZW4iLCBhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKGxhc3RTZWVuKSkgfSwKKyAgICAgICAgeyAiSGFkVXNlckludGVyYWN0aW9uIiwg
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkgfSwKKyAgICAgICAg
eyAiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUobW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzR3JhbmRmYXRoZXJlZCIs
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkpIH0sCisgICAgICAgIHsg
IklzUHJldmFsZW50IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKSB9LAor
ICAgICAgICB7ICJJc1ZlcnlQcmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1Zl
cnlQcmV2YWxlbnQpKSB9LAorICAgICAgICB7ICJEYXRhUmVjb3Jkc1JlbW92ZWQiLCBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpIH0sCisgICAgfSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0TWVyZ2VTdGF0aXN0aWND
YWxsYmFjaygpCkBAIC0xNjEyLDMxICsxMzIwLDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc0V4cGlyZWRTdGF0aXN0aWMoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgaGFkVXNl
CiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0
aXN0aWNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVS
ZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9u
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhZFVzZXJJ
bnRlcmFjdGlvbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNTY2hlZHVsZWRG
b3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkpOwotICAgIAot
ICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9y
PFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlz
W2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAg
fQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGlj
IikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwg
cmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMiLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUp
IH0sCisgICAgICAgIHsgIkhhZFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKGhhZFVzZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWwiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1NjaGVkdWxl
ZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKSkgfSwKKyAgICAgICAgeyAiSXNQcmV2YWxlbnQi
LCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpIH0KKyAgICB9KS5nZXQoKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRFeHBpcmVkU3RhdGlz
dGljQ2FsbGJhY2soKQpAQCAtMTY0OCwyOSArMTMzNywxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2
YWx1ZQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSk7Ci0g
ICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVS
ZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3
VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0u
Z2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9z
dE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNz
Q2FsbERpZFNldFByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQpAQCAtMTY4MiwyOSArMTM1Miwx
MCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
SlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdgogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxi
YWNrKFNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFja0lELCBjb21wbGV0
aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlz
OwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdS
ZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tl
eXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXpl
KCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkg
ewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVz
W2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNy
ZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsK
LSAgICAKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIsIGNyZWF0ZVdL
RGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAg
ICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0sCisgICAg
fSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VmVy
eVByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQpAQCAtMTcxNCwxMzggKzEzNjUsNTEgQEAgdm9p
ZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZUNh
bGxiYWNrKCkKICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdl
KCJkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyIpOwogfQogCiBib29sIFRlc3RSdW5uZXI6Omlz
U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0
YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQo
V0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJl
dHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
cmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIsIHRvV0so
aG9zdE5hbWUpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NWZXJ5
UHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51
bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRU
eXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBX
S0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJu
RGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCB0b1dLKGhv
c3ROYW1lKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0
ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihKU1N0cmluZ1JlZiBzdWJyZXNvdXJjZUhvc3QsIEpTU3Ry
aW5nUmVmIHRvcEZyYW1lSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3VicmVzb3VyY2VIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoc3VicmVzb3VyY2VIb3N0KSkpOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9z
dCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKHRvcEZyYW1lSG9zdCkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tl
eXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMu
c2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1Zh
bHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rp
Y3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMu
c2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEp
ID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUo
YWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNT
dGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIsIGNyZWF0ZVdLRGljdGlvbmFy
eSh7CisgICAgICAgIHsgIlN1YnJlc291cmNlSG9zdCIsIHRvV0soc3VicmVzb3VyY2VIb3N0KSB9
LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3QiLCB0b1dLKHRvcEZyYW1lSG9zdCkgfSwKKyAgICB9
KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFz
U3ViRnJhbWVVbmRlcihKU1N0cmluZ1JlZiBzdWJGcmFtZUhvc3QsIEpTU3RyaW5nUmVmIHRvcEZy
YW1lSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJGcmFtZUhvc3Qi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
ZyhzdWJGcmFtZUhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0KSkpOwot
ICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAg
VmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0g
PSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7
Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJh
d1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRh
dGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJU
KFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICBy
ZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRl
ciIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlN1YkZyYW1lSG9zdCIsIHRvV0so
c3ViRnJhbWVIb3N0KSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3QiLCB0b1dLKHRvcEZyYW1l
SG9zdCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhKU1N0cmluZ1JlZiBob3N0UmVkaXJlY3RlZEZy
b20sIEpTU3RyaW5nUmVmIGhvc3RSZWRpcmVjdGVkVG8pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVm
Pj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RSZWRpcmVjdGVkRnJvbSkp
KTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJIb3N0UmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdFJlZGlyZWN0ZWRUbykpKTsKLSAgICAKLSAg
ICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxX
S1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tp
XS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0K
LSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNS
ZWRpcmVjdGluZ1RvIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFs
dWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9
IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVy
biBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0
dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvIiwg
Y3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdFJlZGlyZWN0ZWRGcm9tIiwgdG9X
Syhob3N0UmVkaXJlY3RlZEZyb20pIH0sCisgICAgICAgIHsgIkhvc3RSZWRpcmVjdGVkVG8iLCB0
b1dLKGhvc3RSZWRpcmVjdGVkVG8pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9z
dE5hbWUsIGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlv
bkNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+
IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOwotICAgIAot
ICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiBy
YXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVl
cy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgp
OwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rp
b24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlcklu
dGVyYWN0aW9uIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0
b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NhbGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb25DYWxsYmFjaygpCkBAIC0xODU1
LDI2MSArMTQxOSw5NSBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0SGFz
SGFkVXNlckludGVyYWN0aW9uQ2FsbGJhY2soKQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlz
dGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5E
YXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VS
VChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
cmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIp
OwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZShK
U1N0cmluZ1JlZiBzdWJIb3N0LCBKU1N0cmluZ1JlZiB0b3BIb3N0KQogewotICAgIAotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Ykhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJIb3N0KSkpOwotICAgIAotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEhv
c3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyh0b3BIb3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhr
ZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXpl
KCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0g
PSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc09ubHlJbkRhdGFi
YXNlT25jZSIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlD
cmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7
Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAm
cmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJu
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNz
T25seUluRGF0YWJhc2VPbmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU3Vi
SG9zdCIsIHRvV0soc3ViSG9zdCkgfSwKKyAgICAgICAgeyAiVG9wSG9zdCIsIHRvV0sodG9wSG9z
dCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c0dyYW5kZmF0aGVyZWQoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCiB7Ci0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dmFsdWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZl
Y3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUo
KSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tp
XSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQo
KTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0dy
YW5kZmF0aGVyZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1
ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiLCBjcmVhdGVXS0RpY3Rp
b25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAg
IHsgIlZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdl
dCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVl
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZUlUUERhdGFiYXNlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZSh2YWx1ZSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZSgiU2V0VXNlSVRQRGF0YWJhc2UiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNT
dGF0aXN0aWNzR3JhbmRmYXRoZXJlZChKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxw
dHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBl
SUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jv
b2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0
YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5p
bmdCb29sZWFuKCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIiwgdG9XSyhob3N0TmFtZSkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIHRvcEZyYW1lSG9z
dE5hbWUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
aG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1lSG9zdE5hbWUpKSk7
Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAg
ICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tl
eXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0u
Z2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3Rp
Y3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0
aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tl
eXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwg
dG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVIb3N0TmFtZSIsIHRvV0sodG9w
RnJhbWVIb3N0TmFtZSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihKU1N0cmluZ1JlZiBo
b3N0TmFtZSwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSkKIHsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5
cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFt
ZUhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0TmFtZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJp
bmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1Zh
bHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZU9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5k
YXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNz
YWdlKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luIiwgY3JlYXRl
V0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAor
ICAgICAgICB7ICJUb3BGcmFtZUhvc3ROYW1lIiwgdG9XSyh0b3BGcmFtZUhvc3ROYW1lKSB9LAor
ICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiBo
b3N0TmFtZVJlZGlyZWN0ZWRUbykKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhv
c3ROYW1lUmVkaXJlY3RlZFRvKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3
S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVl
cy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7
ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3
VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
RGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5
cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8iLCBjcmVhdGVXS0RpY3Rpb25hcnkoewor
ICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3RO
YW1lUmVkaXJlY3RlZFRvIiwgdG9XSyhob3N0TmFtZVJlZGlyZWN0ZWRUbykgfSwKKyAgICB9KS5n
ZXQoKSk7CiB9CiAKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdEZyb20oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3RO
YW1lUmVkaXJlY3RlZEZyb20pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
Pj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAg
IAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ikhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhv
c3ROYW1lUmVkaXJlY3RlZEZyb20pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBy
YXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFs
dWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICBy
YXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJh
d0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRT
dGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20iLCBjcmVhdGVXS0RpY3Rpb25h
cnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsg
Ikhvc3ROYW1lUmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pIH0s
CisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0VG8oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhv
c3ROYW1lUmVkaXJlY3RlZFRvKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAg
ICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZFRvIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9z
dE5hbWVSZWRpcmVjdGVkVG8pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdL
ZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVz
LnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdW
YWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8iKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0
aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNp
emUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGlj
c1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAg
IHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRp
cmVjdGVkVG8iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSB9LAorICAgIH0pLmdldCgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3Rl
ZEZyb20pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
aG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMu
c2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0g
PSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlD
cmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzVG9wRnJh
bWVVbmlxdWVSZWRpcmVjdEZyb20iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJI
b3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJlY3Rl
ZEZyb20iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pIH0sCisgICAgfSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtE
ZWNvcmF0aW9uKEpTU3RyaW5nUmVmIGZyb21Ib3N0LCBKU1N0cmluZ1JlZiB0b0hvc3QpCiB7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZyb21Ib3N0IikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoZnJvbUhvc3QpKSk7
Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVG9Ib3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcodG9Ib3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4g
cmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZh
bHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAg
cmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlv
biIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCks
IHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJT
ZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIsIGNyZWF0ZVdLRGlj
dGlvbmFyeSh7CisgICAgICAgIHsgIkZyb21Ib3N0IiwgdG9XSyhmcm9tSG9zdCkgfSwKKyAgICAg
ICAgeyAiVG9Ib3N0IiwgdG9XSyh0b0hvc3QpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJs
ZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24iLCBzZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0YWxsU3RhdGlz
dGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKQEAg
LTIxNDcsMTIgKzE1NDUsOSBAQCB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlk
UnVuVGVsZW1ldHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKICAgICAKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVuc2lnbmVkIG51bWJl
ck9mUHJldmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNl
c1dpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2Vz
V2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRo
VXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCBtZWRpYW5E
YXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rp
b24sIHVuc2lnbmVkIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSwgdW5zaWdu
ZWQgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJLCB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViUmVz
b3VyY2VXaXRob3V0VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0
VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkpCiB7Ci0g
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRl
eHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJh
bWUpOwotICAgIAogICAgIFN0cmluZyBzdHJpbmcgPSBtYWtlU3RyaW5nKCJ7IFwibnVtYmVyT2ZQ
cmV2YWxlbnRSZXNvdXJjZXNcIiA6ICIsIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCAiLCBc
Im51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbnVt
YmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCAiLCBcIm51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbnVtYmVyT2ZQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAiLCBcInRvcFByZXZhbGVu
dFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblwiIDog
IiwgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlcklu
dGVyYWN0aW9uLCAiLCBcIm1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJl
c291cmNlV2l0aFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbWVkaWFuRGF5c1NpbmNlVXNlckludGVy
YWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uLCAiLCBcInRvcDNOdW1i
ZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSVwiIDogIiwgdG9wM051bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVJLCAiLCBcInRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSVwiIDogIiwg
dG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJLCAiLCBcInRvcDNNZWRpYW5TdWJSZXNvdXJjZVdp
dGhvdXRVSVwiIDogIiwgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJLCAiLCBcInRvcDNN
ZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUlcIiA6ICIsIHRvcDNNZWRpYW5VbmlxdWVSZWRp
cmVjdHNXaXRob3V0VUksICIsIFwidG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRV
SVwiIDogIiwgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSwgIiB9Iik7CiAg
ICAgCi0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNv
bnRleHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZy51dGY4KCku
ZGF0YSgpKSkuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9t
SlNPTlN0cmluZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5nKHN0cmluZy51dGY4KCku
ZGF0YSgpKS5nZXQoKSk7CiAKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NE
aWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELCAxLCAmcmVzdWx0KTsKIH0KQEAgLTIxNjQsMTYgKzE1
NTksMTQgQEAgYm9vbCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzTm90aWZ5T2JzZXJ2ZXIoKQogCiB2
b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3Rp
Y3NBbmREYXRhUmVjb3JkcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGlj
c1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzVXBkYXRlQ29va2llQmxvY2tpbmcoSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0Qmxv
Y2tDb29raWVzRm9ySG9zdENhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyIpKTsKLSAg
ICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0
YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NDYWxsRGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdENhbGxiYWNrKCkKQEAgLTIxODMs
MTM1ICsxNTc2LDgzIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRCbG9j
a0Nvb2tpZXNGb3JIb3N0Q2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NT
dWJtaXRUZWxlbWV0cnkoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NT
dWJtaXRUZWxlbWV0cnkiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NT
dWJtaXRUZWxlbWV0cnkiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0lzUnVu
bmluZ1Rlc3QoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0
aWNzU2V0SXNSdW5uaW5nVGVzdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0IiwgdmFs
dWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbCIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBz
ZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NNaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3Vi
bGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzTWluaW11bVRp
bWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIiwgc2Vjb25kcyk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcykKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1l
IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSIsIHNlY29uZHMpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25l
ZCBlbnRyaWVzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1heFN0YXRpc3RpY3NF
bnRyaWVzIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGVudHJpZXMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIlNldE1heFN0YXRpc3RpY3NFbnRyaWVzIiwgZW50cmllcyk7CiB9CiAgICAgCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQg
ZW50cmllcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQcnVuZUVudHJpZXNEb3du
VG8iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoZW50cmllcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiU2V0UHJ1bmVFbnRyaWVzRG93blRvIiwgZW50cmllcyk7CiB9CiAgICAgCiB2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKEpTVmFs
dWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGlj
c0RpZENsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lELCBjYWxsYmFjayk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZSIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAg
IFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0
b3JlIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQgaG91cnMsIEpTVmFsdWVS
ZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0Rp
ZENsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3VycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3VycykpOwotICAgIFdL
QnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdUUjo6cG9zdE1lc3Nh
Z2UoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5j
ZUhvdXJzIiwgaG91cnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhclRo
cm91Z2hXZWJzaXRlRGF0YVJlbW92YWwoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNo
ZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFS
ZW1vdmFsQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tC
dW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJTdGF0aXN0
aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0KEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBi
b29sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFs
dWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaW5jbHVkZUh0dHBP
bmx5Q29va2llcykpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBW
ZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXpl
KCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9
IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsK
LSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRGVsZXRlQ29va2ll
c0Zvckhvc3QiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMu
ZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiU3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0IiwgY3JlYXRlV0tEaWN0aW9uYXJ5
KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJJ
bmNsdWRlSHR0cE9ubHlDb29raWVzIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaW5jbHVkZUh0
dHBPbmx5Q29va2llcykpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6
OmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZShKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAg
ICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tU
eXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0
YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5
cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzSGFzTG9jYWxT
dG9yYWdlIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcChkb3VibGUgc2Vjb25kcykKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShz
ZWNvbmRzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzQ2FjaGVNYXhBZ2VDYXAiLCBzZWNvbmRzKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNT
dGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIGF1
dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
YXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBl
UmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7
Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vz
c2lvbiIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTIzMjAsOSArMTY2MSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKGJvb2wgdmFsdWUsIEpTVmFsdWVS
ZWYgY29tCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFj
ayhTdGF0aXN0aWNzRGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJDYWxsYmFja0lELCBjb21w
bGV0aW9uSGFuZGxlcik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1No
b3VsZERvd25ncmFkZVJlZmVycmVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVu
ZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRT
dGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiLCB2YWx1ZSk7CiAgICAgbV9oYXNTZXRE
b3duZ3JhZGVSZWZlcnJlckNhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjMzOCwxMSArMTY3Nywx
MCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlD
b29raWVzKGJvb2wgdmFsdWUsIEpTVmFsdWVSZQogICAgICAgICByZXR1cm47CiAKICAgICBjYWNo
ZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5
Q29va2llc0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKTsKKyAg
ICBhdXRvIG1lc3NhZ2VOYW1lID0gIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlD
b29raWVzIjsKICAgICBpZiAob25seU9uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uKQotICAg
ICAgICBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgICAgIG1lc3NhZ2VOYW1lID0gIlNldFN0
YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb24iOworICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2VOYW1lLCB2YWx1ZSk7CiAgICAgbV9o
YXNTZXRCbG9ja1RoaXJkUGFydHlDb29raWVzQ2FsbGJhY2sgPSB0cnVlOwogfQogCkBAIC0yMzU4
LDkgKzE2OTYsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZShib29sIHZhbHVlLCBKU1ZhbAogICAgICAgICByZXR1cm47CiAK
ICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0Rmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGVDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzRmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiLCB2YWx1ZSk7CiAgICAgbV9oYXNTZXRGaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUNhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjM4
MywxMCArMTcxOSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxDbGVhclRocm91
Z2hXZWJzaXRlRGF0YVJlbW92YWxDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3Rp
Y3NTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyhKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNWYWx1
ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhT
dGF0aXN0aWNzRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNDYWxsYmFja0lELCBjb21wbGV0
aW9uSGFuZGxlcik7Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVz
IikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpT
U3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRUb1NhbWVTaXRlU3RyaWN0Q29v
a2llcyIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2FsbERpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzQ2FsbGJhY2soKQpAQCAtMjM5
OCwyNyArMTczMSwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VG9T
YW1lU2l0ZVN0cmljdENvb2tpZXNDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3Rp
Y3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKEpTU3RyaW5nUmVmIGZpcnN0UGFydHlVUkxT
dHJpbmcsIEpTU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRG
aXJzdFBhcnR5SG9zdENOQU1FRG9tYWluQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwot
Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZpcnN0UGFydHlVUkwiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhmaXJz
dFBhcnR5VVJMU3RyaW5nKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNOQU1FIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoY25hbWVVUkxTdHJpbmcpKSk7Ci0gICAg
Ci0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0
b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0g
PSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7
Ci0gICAgfQotCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIikp
OwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdL
ZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1
bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdl
KCJTdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgIHsgIkZpcnN0UGFydHlVUkwiLCB0b1dLKGZpcnN0UGFydHlVUkxTdHJp
bmcpIH0sCisgICAgICAgIHsgIkNOQU1FIiwgdG9XSyhjbmFtZVVSTFN0cmluZykgfSwKKyAgICB9
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRGaXJz
dFBhcnR5SG9zdENOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQyOSwxMCArMTc0NSw3IEBAIHZv
aWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9t
YWluQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNO
QU1FRG9tYWluKEpTU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVlUmVmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRT
ZXRUaGlyZFBhcnR5Q05BTUVEb21haW5DYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0K
LSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3RhdGlzdGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKTsKLSAgICBhdXRvIG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhjbmFtZVVSTFN0
cmluZykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAg
IHBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIiwgdG9XSyhj
bmFtZVVSTFN0cmluZykuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3ND
YWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQ0Myw5ICsxNzU2
LDggQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRoaXJkUGFydHlDTkFN
RURvbWFpbkNhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25z
aXN0ZW50U3RhdGUoSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRl
c3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUNhbGxi
YWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSIpKTsKLSAgICBXS0J1bmRsZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIpOworCisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1Jlc2V0
VG9Db25zaXN0ZW50U3RhdGUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2Fs
bERpZFJlc2V0VG9Db25zaXN0ZW50U3RhdGVDYWxsYmFjaygpCkBAIC0yNDg2LDk1ICsxNzk4LDQ2
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZ0NhbGxiYWNrKCkKIHZv
aWQgVGVzdFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoSlNWYWx1ZVJlZiBjYWxs
YmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9yYWdlQWNjZXNzRW50
cmllc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJHZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRy
aWVzIik7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNj
ZXNzRW50cmllc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQorc3RhdGljIEpTVmFs
dWVSZWYgbWFrZURvbWFpbnNWYWx1ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKIHsK
LSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5G
cmFtZSk7Ci0gICAgCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiWyIpOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICBidWlsZGVyLmFwcGVuZCgnWycpOwogICAgIGJvb2wgZmlyc3REb21haW4gPSB0cnVlOwog
ICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBpZiAoZmlyc3REb21h
aW4pCi0gICAgICAgICAgICBmaXJzdERvbWFpbiA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoZG9tYWluKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOwor
ICAgICAgICBidWlsZGVyLmFwcGVuZChmaXJzdERvbWFpbiA/ICJcIiIgOiAiLCBcIiIsIGRvbWFp
biwgJyInKTsKKyAgICAgICAgZmlyc3REb21haW4gPSBmYWxzZTsKICAgICB9Ci0gICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJdIik7Ci0gICAgCi0gICAgSlNWYWx1ZVJlZiByZXN1bHQg
PSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSku
Z2V0KCkpOwotCisgICAgYnVpbGRlci5hcHBlbmQoJ10nKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VGcm9tSlNPTlN0cmluZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5nKGJ1aWxkZXIu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKS5nZXQoKSk7Cit9Cit2b2lkIFRlc3RSdW5uZXI6OmNh
bGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayhWZWN0b3I8U3RyaW5n
PiYgZG9tYWlucykKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1ha2VEb21haW5zVmFsdWUoZG9tYWlu
cyk7CiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9yYWdlQWNjZXNzRW50cmllc0Nh
bGxiYWNrSUQsIDEsICZyZXN1bHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmxvYWRlZFN1YnJl
c291cmNlRG9tYWlucyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5l
ckNhbGxiYWNrKExvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsK
LSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMi
KSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNz
YWdlKCJMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpj
YWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKFZlY3RvcjxTdHJp
bmc+JiYgZG9tYWlucykKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdbJyk7Ci0gICAgYm9vbCBpc0ZpcnN0
RG9tYWluID0gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAg
ICAgaWYgKGlzRmlyc3REb21haW4pCi0gICAgICAgICAgICBpc0ZpcnN0RG9tYWluID0gZmFsc2U7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
LCAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkb21haW4pOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlwiIik7Ci0gICAgfQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCddJyk7
Ci0gICAgCi0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5n
KGNvbnRleHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCisgICAgYXV0byByZXN1bHQg
PSBtYWtlRG9tYWluc1ZhbHVlKGRvbWFpbnMpOwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2so
TG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKEpTU3RyaW5nUmVmIHBlcnNpc3RlbnRJ
ZCwgSlNTdHJpbmdSZWYgbGFiZWwsIGNvbnN0IGNoYXIqIHR5cGUpCiB7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tU
eXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUGVyc2lzdGVudElEIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRv
V0socGVyc2lzdGVudElkKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGxh
YmVsKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJUeXBlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcodHlwZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3
S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNp
emUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
cmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVl
c1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRNb2NrTWVk
aWFEZXZpY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMu
ZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJBZGRNb2NrTWVkaWFEZXZpY2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAg
ICB7ICJQZXJzaXN0ZW50SUQiLCB0b1dLKHBlcnNpc3RlbnRJZCkgfSwKKyAgICAgICAgeyAiTGFi
ZWwiLCB0b1dLKGxhYmVsKSB9LAorICAgICAgICB7ICJUeXBlIiwgdG9XSyh0eXBlKSB9LAorICAg
IH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrQ2FtZXJhRGV2aWNlKEpT
U3RyaW5nUmVmIHBlcnNpc3RlbnRJZCwgSlNTdHJpbmdSZWYgbGFiZWwpCkBAIC0yNTk0LDE1MyAr
MTg1Nyw3MiBAQCB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTY3JlZW5EZXZpY2UoSlNTdHJpbmdS
ZWYgcGVyc2lzdGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbAogCiB2b2lkIFRlc3RSdW5uZXI6OmNs
ZWFyTW9ja01lZGlhRGV2aWNlcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJN
b2NrTWVkaWFEZXZpY2VzIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBu
dWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhck1vY2tN
ZWRpYURldmljZXMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVNb2NrTWVkaWFEZXZp
Y2UoSlNTdHJpbmdSZWYgcGVyc2lzdGVudElkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlJlbW92ZU1vY2tNZWRpYURldmljZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1l
c3NhZ2VCb2R5KHRvV0socGVyc2lzdGVudElkKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlJlbW92ZU1vY2tNZWRpYURldmljZSIsIHRvV0socGVyc2lzdGVudElkKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRNb2NrTWVkaWFEZXZpY2VzKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJSZXNldE1vY2tNZWRpYURldmljZXMiKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoIlJlc2V0TW9ja01lZGlhRGV2aWNlcyIpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbih1bnNpZ25lZCBvcmllbnRhdGlvbikKIHsK
LSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG9yaWVudGF0aW9uKSk7Ci0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iLCBvcmllbnRhdGlv
bik7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ckVuYWJsZWQoKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxl
ZCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVy
bkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0
U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNNb2NrUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlckVuYWJsZWQiKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKKwogdm9pZCBUZXN0
UnVubmVyOjpjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ29ubmVjdE1vY2tHYW1lcGFkIikpOwotICAgIFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0K
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNvbm5lY3RNb2NrR2FtZXBhZCIs
IGluZGV4KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dhbWVwYWQodW5z
aWduZWQgaW5kZXgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlzY29ubmVjdE1vY2tH
YW1lcGFkIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIkRpc2Nvbm5lY3RNb2NrR2FtZXBhZCIsIGluZGV4KTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRNb2NrR2FtZXBhZERldGFpbHModW5zaWduZWQgaW5kZXgsIEpTU3RyaW5nUmVm
IGdhbWVwYWRJRCwgSlNTdHJpbmdSZWYgbWFwcGluZywgdW5zaWduZWQgYXhpc0NvdW50LCB1bnNp
Z25lZCBidXR0b25Db3VudCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAg
ICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1l
cGFkSUQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhnYW1lcGFkSUQpKTsKLQotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1hcHBpbmci
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhtYXBwaW5nKSk7Ci0KLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4
aXNDb3VudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4
aXNDb3VudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkJ1dHRvbkNvdW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoYnV0dG9uQ291bnQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+
IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMu
cmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkp
OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2
YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9j
a0dhbWVwYWREZXRhaWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3
VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiU2V0TW9ja0dhbWVwYWREZXRhaWxzIiwgY3JlYXRlV0tEaWN0aW9uYXJ5
KHsKKyAgICAgICAgeyAiR2FtZXBhZElEIiwgdG9XSyhnYW1lcGFkSUQpIH0sCisgICAgICAgIHsg
Ik1hcHBpbmciLCB0b1dLKG1hcHBpbmcpIH0sCisgICAgICAgIHsgIkdhbWVwYWRJbmRleCIsIGFk
b3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJBeGlzQ291bnQiLCBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNDb3VudCkpIH0sCisgICAgICAgIHsgIkJ1dHRvbkNv
dW50IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25Db3VudCkpIH0sCisgICAgfSkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKHVuc2ln
bmVkIGluZGV4LCB1bnNpZ25lZCBheGlzSW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAgIHZhbHVlcy5hcHBl
bmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNJbmRleCIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpKTsKLQotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVl
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSk7
Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJl
Zj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdW
YWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgp
OwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9u
YXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUo
KSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBh
ZEF4aXNWYWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkdhbWVwYWRJbmRl
eCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJBeGlzSW5k
ZXgiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpIH0sCisgICAgICAgIHsgIlZh
bHVlIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWduZWQg
aW5kZXgsIHVuc2lnbmVkIGJ1dHRvbkluZGV4LCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25JbmRleCIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbkluZGV4KSkpOwotCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFs
dWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkp
KTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBl
UmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJh
d1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0
KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGlj
dGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5z
aXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TW9ja0dh
bWVwYWRCdXR0b25WYWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkdhbWVw
YWRJbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJC
dXR0b25JbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uSW5kZXgpKSB9LAorICAg
ICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSB9LAorICAgIH0p
LmdldCgpKTsKIH0KKwogI2Vsc2UKKwogdm9pZCBUZXN0UnVubmVyOjpjb25uZWN0TW9ja0dhbWVw
YWQodW5zaWduZWQpCiB7CiB9CkBAIC0yNzYwLDMwICsxOTQyLDI1IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUodW5zaWduZWQsIHVuc2lnbmVkLCBkb3VibGUpCiB2
b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWduZWQsIHVuc2ln
bmVkLCBkb3VibGUpCiB7CiB9CisKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXMoSlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogewotICAg
IFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKSk7CisgICAgSlND
b250ZXh0UmVmIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAKICAgICBpZiAoIUpTVmFsdWVJ
c0FycmF5KGNvbnRleHQsIGZpbGVzVmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09i
amVjdFJlZiBmaWxlcyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBmaWxlc1ZhbHVlLCBudWxs
cHRyKTsKLSAgICBzdGF0aWMgYXV0byBsZW5ndGhQcm9wZXJ0eSA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBmaWxlc0xlbmd0
aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBmaWxlcywgbGVuZ3RoUHJvcGVy
dHkuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGZp
bGVzTGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGZpbGVzID0gKEpT
T2JqZWN0UmVmKWZpbGVzVmFsdWU7CiAgICAgYXV0byBmaWxlVVJMcyA9IGFkb3B0V0soV0tNdXRh
YmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgYXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNp
emVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIp
KTsKKyAgICBhdXRvIGZpbGVzTGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgZmlsZXMpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBK
U1ZhbHVlUmVmIGZpbGVWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQs
IGZpbGVzLCBpLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4
dCwgZmlsZVZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gZmls
ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgZmlsZVZhbHVlLCBudWxscHRy
KSk7CisgICAgICAgIGF1dG8gZmlsZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1
ZSk7CiAgICAgICAgIHNpemVfdCBmaWxlQnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVU
RjhDU3RyaW5nU2l6ZShmaWxlLmdldCgpKSArIDE7CiAgICAgICAgIGF1dG8gZmlsZUJ1ZmZlciA9
IG1ha2VVbmlxdWVBcnJheTxjaGFyPihmaWxlQnVmZmVyU2l6ZSk7CiAgICAgICAgIEpTU3RyaW5n
R2V0VVRGOENTdHJpbmcoZmlsZS5nZXQoKSwgZmlsZUJ1ZmZlci5nZXQoKSwgZmlsZUJ1ZmZlclNp
emUpOwpAQCAtMjc5NywyMiArMTk3NCwxNSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5l
bEZpbGVzKEpTVmFsdWVSZWYgZmlsZXNWYWx1ZSkKIAogICAgIH0KIAotICAgIHN0YXRpYyBhdXRv
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
T3BlblBhbmVsRmlsZVVSTHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwg
bWVzc2FnZU5hbWUuZ2V0KCksIGZpbGVVUkxzLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IlNldE9wZW5QYW5lbEZpbGVVUkxzIiwgZmlsZVVSTHMuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKEpTVmFsdWVSZWYgZGF0YSkKIHsKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIEpTQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShwYWdlKSk7Ci0KLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICAvLyBGSVhNRSAoMTIzMDU4KTogVXNlIGEgSlNDIEFQ
SSB0byBnZXQgYnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBleHBvc2VkLgotICAgIFdLUmV0
YWluUHRyPFdLRGF0YVJlZj4gaWNvbkRhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRh
RnJvbVVJbnQ4QXJyYXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKTsK
LQotICAgIHN0YXRpYyBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0T3BlblBhbmVsRmlsZVVSTHNNZWRpYUljb24iKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIGljb25EYXRhLmdl
dCgpKTsKKyAgICBhdXRvIGljb25EYXRhID0gYWRvcHRXSyhXS0J1bmRsZUNyZWF0ZVdLRGF0YUZy
b21VSW50OEFycmF5KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWFpbkpT
Q29udGV4dCgpLCBkYXRhKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRPcGVuUGFuZWxGaWxl
VVJMc01lZGlhSWNvbiIuZ2V0KCksIGljb25EYXRhLmdldCgpKTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKGRhdGEpOwogI2VuZGlmCkBAIC0yODIxLDExICsxOTkxLDcgQEAgdm9pZCBUZXN0UnVu
bmVyOjpzZXRPcGVuUGFuZWxGaWxlc01lZGlhSWNvbihKU1ZhbHVlUmVmIGRhdGEpCiB2b2lkIFRl
c3RSdW5uZXI6OnJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFscyhKU1ZhbHVlUmVmIGNhbGxiYWNr
KQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKERpZFJlbW92ZUFsbFNlc3Npb25DcmVk
ZW50aWFsc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUpKTsK
LSAgICAKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0TWVzc2FnZSgiUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzIiwgdHJ1ZSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNr
KCkKQEAgLTI4MzUsNDkgKzIwMDEsMzMgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3Zl
QWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFy
RE9NQ2FjaGUoSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkNsZWFyRE9NQ2FjaGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyRE9NQ2FjaGUiLCB0b1dLKG9yaWdp
bikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGVzKCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhckRPTUNhY2hlcyIpKTsKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZSgiQ2xlYXJET01DYWNoZXMiKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNE
T01DYWNoZShKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SGFzRE9NQ2FjaGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBXS1R5
cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRh
KTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlw
ZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJIYXNET01DYWNoZSIsIHRvV0sob3Jp
Z2luKS5nZXQoKSk7CiB9CiAKIHVpbnQ2NF90IFRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZShKU1N0
cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRE9NQ2FjaGVTaXpl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcob3JpZ2luKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVy
bkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgcmV0
dXJuIFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVybkRhdGEp
KTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50NjQo
IkRPTUNhY2hlU2l6ZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZShib29sIHdpbGxJbmNyZWFzZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZSh3aWxsSW5jcmVhc2UpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIiwgd2lsbEluY3JlYXNlKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1hbmlmZXN0VGhlbihKU1ZhbHVl
UmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKEdldEFwcGxpY2F0
aW9uTWFuaWZlc3RDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiR2V0QXBwbGljYXRpb25NYW5pZmVzdCIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFwcGxpY2F0aW9uTWFuaWZl
c3QiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0KCkK
QEAgLTI4OTcsMjIxICsyMDQ3LDEzMCBAQCBzaXplX3QgVGVzdFJ1bm5lcjo6dXNlclNjcmlwdElu
amVjdGVkQ291bnQoKSBjb25zdAogCiB2b2lkIFRlc3RSdW5uZXI6OmluamVjdFVzZXJTY3JpcHQo
SlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluamVjdFVz
ZXJTY3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiSW5qZWN0VXNlclNj
cmlwdCIsIHRvV0soc2NyaXB0KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2VuZERp
c3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZv
clRlc3RpbmciKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIs
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNlbmREaXNwbGF5Q29uZmln
dXJhdGlvbkNoYW5nZWRNZXNzYWdlRm9yVGVzdGluZyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dCIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3Jl
YXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFNl
cnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQiLCBzZWNvbmRzKTsKIH0KIAogLy8gV2ViQXV0aG4KIHZv
aWQgVGVzdFJ1bm5lcjo6YWRkVGVzdEtleVRvS2V5Y2hhaW4oSlNTdHJpbmdSZWYgcHJpdmF0ZUtl
eUJhc2U2NCwgSlNTdHJpbmdSZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlvblRh
Z0Jhc2U2NCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcml2YXRlS2V5Iikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0socHJpdmF0ZUtleUJhc2U2NCkpOwotCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVs
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvblRh
ZyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uVGFnQmFzZTY0KSk7Ci0K
LSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4g
cmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1
ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwot
ICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQWRkVGVzdEtleVRvS2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3Jl
YXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwot
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJBZGRUZXN0S2V5VG9LZXljaGFp
biIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlByaXZhdGVLZXkiLCB0b1dLKHBy
aXZhdGVLZXlCYXNlNjQpIH0sCisgICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVs
KSB9LAorICAgICAgICB7ICJBcHBsaWNhdGlvblRhZyIsIHRvV0soYXBwbGljYXRpb25UYWdCYXNl
NjQpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFuVXBLZXlj
aGFpbihKU1N0cmluZ1JlZiBhdHRyTGFiZWwsIEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxC
YXNlNjQpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBpZiAoYXBwbGljYXRp
b25MYWJlbEJhc2U2NCkgewotICAgICAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpKTsKLSAgICAgICAgdmFsdWVz
LmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpKTsKLSAgICB9Ci0KLSAgICBWZWN0
b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVz
OwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXpl
KHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICBy
YXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7CisgICAgaWYgKCFhcHBsaWNhdGlvbkxhYmVs
QmFzZTY0KSB7CisgICAgICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFuVXBLZXljaGFp
biIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dL
KGF0dHJMYWJlbCkgfSwKKyAgICAgICAgfSkuZ2V0KCkpOworICAgICAgICByZXR1cm47CiAgICAg
fQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYW5VcEtleWNoYWluIikpOwotICAgIFdL
UmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlv
bmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXpl
KCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYW5VcEtleWNo
YWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiQXR0ckxhYmVsIiwgdG9XSyhh
dHRyTGFiZWwpIH0sCisgICAgICAgIHsgIkFwcGxpY2F0aW9uTGFiZWwiLCB0b1dLKGFwcGxpY2F0
aW9uTGFiZWxCYXNlNjQpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6
OmtleUV4aXN0c0luS2V5Y2hhaW4oSlNTdHJpbmdSZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBh
cHBsaWNhdGlvbkxhYmVsQmFzZTY0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsK
LQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkF0dHJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGF0dHJMYWJlbCkpOwotCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBw
bGljYXRpb25MYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uTGFi
ZWxCYXNlNjQpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0
b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkp
OwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtl
eXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAg
ICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJLZXlFeGlzdHNJbktleWNoYWluIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
RGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5
cy5zaXplKCkpKTsKLQotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5E
YXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIktleUV4aXN0c0luS2V5Y2hhaW4iLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJl
bCkgfSwKKyAgICAgICAgeyAiQXBwbGljYXRpb25MYWJlbCIsIHRvV0soYXBwbGljYXRpb25MYWJl
bEJhc2U2NCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgVGVzdFJ1bm5l
cjo6c2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50KCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQi
KSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5E
YXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tVSW50NjRHZXRU
eXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLVUludDY0R2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2NCgiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJh
Y2tDYWxsc0NvdW50Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGlzbWlzc0ph
dmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseShib29sIHNob3VsZERpc21pc3NBc3luY2hyb25v
dXNseSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTaG91bGREaXNtaXNzSmF2YVNjcmlw
dEFsZXJ0c0FzeW5jaHJvbm91c2x5IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGREaXNtaXNzQXN5bmNo
cm9ub3VzbHkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNob3VsZERp
c21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkiLCBzaG91bGREaXNtaXNzQXN5bmNo
cm9ub3VzbHkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9kYWwoKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkFib3J0TW9kYWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoIkFib3J0TW9kYWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkdW1wQWRDbGlja0F0dHJp
YnV0aW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRHVtcEFkQ2xpY2tBdHRyaWJ1
dGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCkK
IHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2xlYXJBZENsaWNrQXR0cmlidXRpb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uIik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdl
YnNpdGVEYXRhUmVtb3ZhbCgpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91
Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFy
QWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGlu
Zyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFkQ2xpY2tBdHRy
aWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9v
bGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZSgiU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciLCB2YWx1ZSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVS
TEZvclRlc3RpbmcoSlNTdHJpbmdSZWYgdXJsU3RyaW5nKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIikpOwot
ICAgIGF1dG8gd3RmVVJMU3RyaW5nID0gdG9XVEZTdHJpbmcoV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh3dGZVUkxTdHJpbmcudXRmOCgp
LmRhdGEoKSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0
aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZSgiU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rp
bmciLAorICAgICAgICBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRvV1RGU3Ry
aW5nKHVybFN0cmluZykudXRmOCgpLmRhdGEoKSkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpt
YXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIk1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
ZyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgi
TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0T2Zmc2NyZWVuQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIk9mZnNjcmVlbkNhbnZhc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5q
ZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVP
dmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUo
KSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAg
V1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIk9mZnNjcmVlbkNhbnZhc0VuYWJsZWQiLCBlbmFibGVk
KTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24oKQogewotICAgIGF1
dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
YXNBcHBCb3VuZFNlc3Npb24iKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRy
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0
YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotCi0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZh
bHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkp
OworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4o
Ikhhc0FwcEJvdW5kU2Vzc2lvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQXBwQm91
bmRTZXNzaW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJBcHBCb3VuZFNlc3Npb24iKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoIkNsZWFyQXBwQm91bmRTZXNzaW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0QXBwQm91bmREb21haW5zKEpTVmFsdWVSZWYgb3JpZ2luQXJyYXksIEpTVmFsdWVS
ZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soRGlk
U2V0QXBwQm91bmREb21haW5zQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAg
SlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQo
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSkpOworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgp
OwogCiAgICAgaWYgKCFKU1ZhbHVlSXNBcnJheShjb250ZXh0LCBvcmlnaW5BcnJheSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0UmVmIG9yaWdpbnMgPSBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgb3JpZ2luQXJyYXksIG51bGxwdHIpOwotICAgIHN0YXRpYyBhdXRvIGxlbmd0aFBy
b3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsK
LSAgICBKU1ZhbHVlUmVmIG9yaWdpbnNMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgb3JpZ2lucywgbGVuZ3RoUHJvcGVydHkuZ2V0KCksIG51bGxwdHIpOwotICAgIGlm
ICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIG9yaWdpbnNMZW5ndGhWYWx1ZSkpCi0gICAgICAg
IHJldHVybjsKLQorICAgIGF1dG8gb3JpZ2lucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBv
cmlnaW5BcnJheSwgbnVsbHB0cik7CiAgICAgYXV0byBvcmlnaW5VUkxzID0gYWRvcHRXSyhXS011
dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBhdXRvIG9yaWdpbnNMZW5ndGggPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBvcmlnaW5zTGVuZ3RoVmFsdWUsIG51
bGxwdHIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9yaWdpbnNMZW5ndGg7ICsraSkg
eworICAgIGF1dG8gb3JpZ2luc0xlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG9yaWdpbnMp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5zTGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgSlNWYWx1ZVJlZiBvcmlnaW5WYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIG9yaWdpbnMsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFsdWVJc1N0
cmluZyhjb250ZXh0LCBvcmlnaW5WYWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBhdXRvIG9yaWdpbiA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgb3Jp
Z2luVmFsdWUsIG51bGxwdHIpKTsKKyAgICAgICAgYXV0byBvcmlnaW4gPSBjcmVhdGVKU1N0cmlu
Zyhjb250ZXh0LCBvcmlnaW5WYWx1ZSk7CiAgICAgICAgIHNpemVfdCBvcmlnaW5CdWZmZXJTaXpl
ID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKG9yaWdpbi5nZXQoKSkgKyAxOwog
ICAgICAgICBhdXRvIG9yaWdpbkJ1ZmZlciA9IG1ha2VVbmlxdWVBcnJheTxjaGFyPihvcmlnaW5C
dWZmZXJTaXplKTsKICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhvcmlnaW4uZ2V0KCks
IG9yaWdpbkJ1ZmZlci5nZXQoKSwgb3JpZ2luQnVmZmVyU2l6ZSk7CkBAIC0zMTE5LDcgKzIxNzgs
NyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEFwcEJvdW5kRG9tYWlucyhKU1ZhbHVlUmVmIG9yaWdp
bkFycmF5LCBKU1ZhbHVlUmVmIGNvbXBsZXRpbwogICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShv
cmlnaW5VUkxzLmdldCgpLCBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9yaWdp
bkJ1ZmZlci5nZXQoKSkpLmdldCgpKTsKICAgICB9CiAKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QXBwQm91bmREb21haW5z
IikpOworICAgIGF1dG8gbWVzc2FnZU5hbWUgPSB0b1dLKCJTZXRBcHBCb3VuZERvbWFpbnMiKTsK
ICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG9yaWdpblVSTHMuZ2V0KCkpOwogfQogCkBAIC0zMTI4
LDYgKzIxODcsMTEgQEAgdm9pZCBUZXN0UnVubmVyOjpkaWRTZXRBcHBCb3VuZERvbWFpbnNDYWxs
YmFjaygpCiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhEaWRTZXRBcHBCb3VuZERvbWFpbnND
YWxsYmFja0lEKTsKIH0KIAordm9pZCBUZXN0UnVubmVyOjpwb3N0TWVzc2FnZShjb25zdCBjaGFy
KiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwogQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCBjMGExNDA5MDVlZGYz
ZGRhNGE3NjFhYjYyMDdkOTdiNDM2MjA4NmJiLi5hYWViNDEwZTNlZDA3ZmI2Y2E0ZjlmMDNiZmY3
ZGUzNzIyNTI3ZjcwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL1Rlc3RSdW5uZXIuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gSlNX
cmFwcGFibGUKICAgICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CiAKLSAgICB2
b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmpl
Y3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZik7CiAKICAgICBib29sIGlzSU9TRmFtaWx5KCkgY29uc3QKICAgICB7CkBAIC0y
NTMsNyArMjUzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJu
c051bGwoYm9vbCBmKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwgPSBmOyB9CiAgICAg
Ym9vbCB3aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdDsgfQogICAgIHZvaWQgc2V0
V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZikgeyBtX3dpbGxTZW5k
UmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCA9IGY7IH0KLSAgICB2b2lkIHNldFdpbGxTZW5k
UmVxdWVzdEFkZHNIVFRQQm9keShKU1N0cmluZ1JlZiBib2R5KSB7IG1fd2lsbFNlbmRSZXF1ZXN0
SFRUUEJvZHkgPSB0b1dURlN0cmluZyh0b1dLKGJvZHkpKTsgfQorICAgIHZvaWQgc2V0V2lsbFNl
bmRSZXF1ZXN0QWRkc0hUVFBCb2R5KEpTU3RyaW5nUmVmIGJvZHkpIHsgbV93aWxsU2VuZFJlcXVl
c3RIVFRQQm9keSA9IHRvV1RGU3RyaW5nKGJvZHkpOyB9CiAgICAgU3RyaW5nIHdpbGxTZW5kUmVx
dWVzdEhUVFBCb2R5KCkgY29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keTsg
fQogCiAgICAgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmKTsKQEAgLTI4Niw3ICsy
ODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2soKTsKICAg
ICB2b2lkIGNhbGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaygpOwogCi0gICAgdm9pZCBv
dmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVyZW5jZSwgSlNTdHJpbmdSZWYgdmFs
dWUpOworICAgIHN0YXRpYyB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVm
ZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSk7CiAKICAgICAvLyBDb29raWVzIHRlc3RpbmcKICAg
ICB2b2lkIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCk7CkBAIC0zMDQsNyArMzA0LDcgQEAg
cHVibGljOgogCiAgICAgLy8gR2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBl
cm1pc3Npb24oYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNWYWx1ZVJl
ZiBhbHRpdHVkZSwgSlNWYWx1ZVJlZiBhbHRpdHVkZUFjY3VyYWN5LCBKU1ZhbHVlUmVmIGhlYWRp
bmcsIEpTVmFsdWVSZWYgc3BlZWQsIEpTVmFsdWVSZWYgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBz
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8
ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlv
bmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9p
ZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoSlNTdHJpbmdSZWYg
bWVzc2FnZSk7CiAgICAgYm9vbCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKIApAQCAt
MzM1LDggKzMzNSw4IEBAIHB1YmxpYzoKICAgICBib29sIHNlY3VyZUV2ZW50SW5wdXRJc0VuYWJs
ZWQoKSBjb25zdDsKIAogICAgIEpTVmFsdWVSZWYgZmFpbE5leHROZXdDb2RlQmxvY2soKTsKLSAg
ICBKU1ZhbHVlUmVmIG51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbik7
Ci0gICAgSlNWYWx1ZVJlZiBuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgdGhlRnVuY3Rp
b24pOworICAgIEpTVmFsdWVSZWYgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIGZ1bmN0
aW9uKTsKKyAgICBKU1ZhbHVlUmVmIG5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiBmdW5j
dGlvbik7CiAKICAgICBib29sIHNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5
KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxh
eTsgfQogICAgIHZvaWQgc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXko
Ym9vbCk7CkBAIC01NDksNiArNTQ5LDggQEAgcHJpdmF0ZToKIAogICAgIFdLUmV0YWluUHRyPFdL
VVJMUmVmPiBtX3Rlc3RVUkw7IC8vIFNldCBieSBJbmplY3RlZEJ1bmRsZVBhZ2Ugb25jZSBwcm92
aXNpb25hbCBsb2FkIHN0YXJ0cy4KIAorICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciog
bmFtZSwgYm9vbCk7CisKICAgICBTdHJpbmcgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keTsKICAg
ICBXVEY6OlNlY29uZHMgbV90aW1lb3V0IHsgMzBfcyB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVy
LmNwcAppbmRleCA2NGFjODE5NzE1M2FhZTBhMGFiNzFlYmJjMjk0MjQ4NGEzNWU2NWFkLi42ZTAw
ZDk5MjI1ZDFmMWFhYjI2MTU2Yzg5MjViMDU2NmEzNjZkNzI5IDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJv
bGxlci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25z
LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRs
ZVBhZ2UuaCIKICNpbmNsdWRlICJKU1RleHRJbnB1dENvbnRyb2xsZXIuaCIKQEAgLTQwLDMwICs0
MSwxNCBAQCBSZWY8VGV4dElucHV0Q29udHJvbGxlcj4gVGV4dElucHV0Q29udHJvbGxlcjo6Y3Jl
YXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0SW5wdXRDb250cm9sbGVyKTsKIH0K
IAotVGV4dElucHV0Q29udHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcigpCi17Ci19Ci0KLVRl
eHRJbnB1dENvbnRyb2xsZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKCkKLXsKLX0KLQogSlNDbGFz
c1JlZiBUZXh0SW5wdXRDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogewogICAgIHJldHVybiBK
U1RleHRJbnB1dENvbnRyb2xsZXI6OnRleHRJbnB1dENvbnRyb2xsZXJDbGFzcygpOwogfQogCi12
b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
dm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgInRleHRJ
bnB1dENvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOwotfQotCi1zdGF0aWMgdW5z
aWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGFycmF5
KQotewotICAgIGF1dG8gbGVuZ3RoU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBpZiAoYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0
R2V0UHJvcGVydHkoY29udGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgbnVsbHB0cikp
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIDA7CisgICAgc2V0R2xv
YmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRleHRJbnB1dENvbnRyb2xsZXIiLCB0aGlzKTsK
IH0KIAogc3RhdGljIFdLQXJyYXlSZWYgY3JlYXRlQ29tcG9zaXRpb25IaWdobGlnaHREYXRhKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzSGlnaGxpZ2h0c1ZhbHVlKQpAQCAtNzIs
NTAgKzU3LDE5IEBAIHN0YXRpYyBXS0FycmF5UmVmIGNyZWF0ZUNvbXBvc2l0aW9uSGlnaGxpZ2h0
RGF0YShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgYXV0byByZXN1bHQgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOwotICAgIGF1
dG8ganNIaWdobGlnaHRzQXJyYXkgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hsaWdo
dHNWYWx1ZSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwganNI
aWdobGlnaHRzQXJyYXkpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotCi0gICAgYXV0byBqc0Zyb21LZXkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiZnJvbSIpKTsKLSAgICBhdXRvIGpzTGVuZ3RoS2V5ID0gYWRvcHQoSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBhdXRvIGpzQ29sb3JLZXkgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29sb3IiKSk7Ci0KLSAgICBhdXRvIHdr
RnJvbUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZyb20iKSk7
Ci0gICAgYXV0byB3a0xlbmd0aEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKLSAgICBhdXRvIHdrQ29sb3JLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb2xvciIpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxs
cHRyOwotICAgICAgICBhdXRvIGpzT2JqZWN0VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJ
bmRleChjb250ZXh0LCBqc0hpZ2hsaWdodHNBcnJheSwgaSwgJmV4Y2VwdGlvbik7Ci0gICAgICAg
IGlmIChleGNlcHRpb24gfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBqc09iamVjdFZhbHVl
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8ganNPYmplY3QgPSBjb25z
dF9jYXN0PEpTT2JqZWN0UmVmPihqc09iamVjdFZhbHVlKTsKLSAgICAgICAgYXV0byBqc0Zyb21W
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwganNPYmplY3QsIGpzRnJvbUtleS5n
ZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmICghanNGcm9tVmFsdWUgfHwgIUpTVmFsdWVJc051
bWJlcihjb250ZXh0LCBqc0Zyb21WYWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBhdXRvIGpzTGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGpz
T2JqZWN0LCBqc0xlbmd0aEtleS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmICghanNMZW5n
dGhWYWx1ZSB8fCAhSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGpzTGVuZ3RoVmFsdWUpKQorICAg
IGF1dG8gYXJyYXkgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hsaWdodHNWYWx1ZSk7
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIG51bGxw
dHIpOworICAgICAgICBpZiAoIXZhbHVlIHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFs
dWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBqc0NvbG9yVmFsdWUg
PSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGpzT2JqZWN0LCBqc0NvbG9yS2V5LmdldCgp
LCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFqc0NvbG9yVmFsdWUgfHwgIUpTVmFsdWVJc1N0cmlu
Zyhjb250ZXh0LCBqc0NvbG9yVmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgYXV0byBjb2xvciA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwganNDb2xv
clZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgIGF1dG8gd2tDb2xvciA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoY29sb3IuZ2V0KCkpKTsKLSAgICAgICAgYXV0byB3a0Zyb20g
PSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
anNGcm9tVmFsdWUsIG51bGxwdHIpKSkpOwotICAgICAgICBhdXRvIHdrTGVuZ3RoID0gYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShscm91bmQoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzTGVuZ3Ro
VmFsdWUsIG51bGxwdHIpKSkpOwotCisgICAgICAgIGF1dG8gb2JqZWN0ID0gY29uc3RfY2FzdDxK
U09iamVjdFJlZj4odmFsdWUpOwogICAgICAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
ZGljdGlvbmFyeS5nZXQoKSwgd2tGcm9tS2V5LmdldCgpLCB3a0Zyb20uZ2V0KCkpOwotICAgICAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHdrTGVuZ3RoS2V5LmdldCgp
LCB3a0xlbmd0aC5nZXQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFy
eS5nZXQoKSwgd2tDb2xvcktleS5nZXQoKSwgd2tDb2xvci5nZXQoKSk7CisgICAgICAgIHNldFZh
bHVlKGRpY3Rpb25hcnksICJmcm9tIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bWVyaWNQcm9w
ZXJ0eShjb250ZXh0LCBvYmplY3QsICJmcm9tIikpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlv
bmFyeSwgImxlbmd0aCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihudW1lcmljUHJvcGVydHkoY29u
dGV4dCwgb2JqZWN0LCAibGVuZ3RoIikpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwg
ImNvbG9yIiwgdG9XSyhzdHJpbmdQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJjb2xvciIpKS5n
ZXQoKSk7CiAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdCwgZGljdGlvbmFyeS5nZXQo
KSk7CiAgICAgfQotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmggYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIu
aAppbmRleCA1NThjMmU2MTE0MDgxNzg1ZTNiN2NhZTE5ZmVmZDM5NmFlYjM3YTk0Li5hNDRjMjhl
ODQ0MzkxNzI5MmE5YjM3YmNiN2UyNTUyZDEyMTQ0Y2E0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIu
aApAQCAtMjgsMTcgKzI4LDE3IEBACiAjaW5jbHVkZSAiSlNXcmFwcGFibGUuaCIKICNpbmNsdWRl
IDx3dGYvUmVmLmg+CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlND
b250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVmOwor
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFtZXNw
YWNlIFdUUiB7CiAKLWNsYXNzIFRleHRJbnB1dENvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFi
bGUgeworY2xhc3MgVGV4dElucHV0Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJs
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxUZXh0SW5wdXRDb250cm9sbGVyPiBjcmVhdGUo
KTsKLSAgICB2aXJ0dWFsIH5UZXh0SW5wdXRDb250cm9sbGVyKCk7Ci0KLSAgICAvLyBKU1dyYXBw
YWJsZQotICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKIAotICAgIHZvaWQg
bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250
ZXh0UmVmKTsKIAogICAgIHZvaWQgc2V0TWFya2VkVGV4dChKU1N0cmluZ1JlZiB0ZXh0LCBpbnQg
ZnJvbSwgaW50IGxlbmd0aCwgYm9vbCBzdXBwcmVzc1VuZGVybGluZSwgSlNWYWx1ZVJlZiBoaWdo
bGlnaHRzKTsKICAgICBib29sIGhhc01hcmtlZFRleHQoKTsKQEAgLTQ2LDcgKzQ2LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgaW5zZXJ0VGV4dChKU1N0cmluZ1JlZiB0ZXh0KTsKIAogcHJpdmF0ZToK
LSAgICBUZXh0SW5wdXRDb250cm9sbGVyKCk7CisgICAgVGV4dElucHV0Q29udHJvbGxlcigpID0g
ZGVmYXVsdDsKKworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KaW5kZXgg
MDI0ZmU2MDU3M2I4ZjJjNTkyZWJmZGIzNWYzYTQ0NDg1Y2RiOTc1Ni4uNWE1Yjc3ZWMxOTRkYTVm
ZTNmZmY5OTEzN2NlOWFjZDI2ZGZlNGMxZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29j
b2EubW0KQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIGFjdGl2YXRlRm9udHMoKQogCiB2b2lkIGlu
c3RhbGxGYWtlSGVsdmV0aWNhKFdLU3RyaW5nUmVmIGNvbmZpZ3VyYXRpb24pCiB7Ci0gICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBjb25maWd1cmF0aW9uU3RyaW5nID0gYWRvcHRDRihXS1N0cmlu
Z0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uKSk7CisgICAg
YXV0byBjb25maWd1cmF0aW9uU3RyaW5nID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uKSk7CiAgICAgTlNVUkwgKnJlc291cmNl
VVJMID0gW3Jlc291cmNlc0RpcmVjdG9yeVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkZha2VIZWx2ZXRpY2EtJUAudHRmIiwgY29u
ZmlndXJhdGlvblN0cmluZy5nZXQoKV0gaXNEaXJlY3Rvcnk6Tk9dOwogICAgIENGRXJyb3JSZWYg
ZXJyb3IgPSBudWxscHRyOwogICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JV
UkwoKF9fYnJpZGdlIENGVVJMUmVmKXJlc291cmNlVVJMLCBrQ1RGb250TWFuYWdlclNjb3BlUHJv
Y2VzcywgJmVycm9yKSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbSBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2Eu
bW0KaW5kZXggODE3NjE4MjdhODgxZDA2ZGZlNzBhOWJkMzIyNDczMmFlMTliY2YyOC4uOTFkMjQ5
YzcyN2Y2ODc1ZWQ0YTRjY2YxNTljMGY3N2Q3MmY4NWJkNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2Nv
YS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0lu
amVjdGVkQnVuZGxlUGFnZUNvY29hLm1tCkBAIC00NywxMyArNDcsMTMgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OnBsYXRmb3JtRGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1
bmRsZUZyYW1lUmUKIAogU3RyaW5nIEluamVjdGVkQnVuZGxlUGFnZTo6cGxhdGZvcm1SZXNwb25z
ZU1pbWVUeXBlKFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgUmV0YWluUHRyPE5T
VVJMUmVzcG9uc2U+IG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdLVVJMUmVzcG9uc2VDb3B5TlNV
UkxSZXNwb25zZShyZXNwb25zZSkpOworICAgIGF1dG8gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMo
V0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICAgcmV0dXJuIFtu
c1VSTFJlc3BvbnNlLmdldCgpIE1JTUVUeXBlXTsKIH0KIAogdWludDY0X3QgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpyZXNwb25zZUhlYWRlckNvdW50KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7
Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdL
VVJMUmVzcG9uc2VDb3B5TlNVUkxSZXNwb25zZShyZXNwb25zZSkpOworICAgIGF1dG8gbnNVUkxS
ZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNl
KSk7CiAgICAgaWYgKCFbbnNVUkxSZXNwb25zZSBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNw
b25zZSBjbGFzc11dKQogICAgICAgICByZXR1cm4geyB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVySU9TLm1tCmluZGV4IDg3Y2NkMjFjYTlhNzdhYTJkMGEyMWE0Y2Fi
NTIxY2FlZWZhOWM0YTIuLmM0MTgyMzBmM2I0ZmRlNzE5YWM2Y2NjODRiNzQyZGJlY2ExNGQyNGEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBAIC02Miw3
ICs2Miw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlv
bkxpc3RlbmVyKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQogewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5n
KCJpb3MiKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNp
c3RlbnRTdGF0ZSgpCkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9i
amVjdEJ5SWQoaWQgb2JqLCBOU1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAKIFJlZlB0cjxBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1l
bnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1
dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAg
ICBpZCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0
eVJvb3RPYmplY3QocGFnZSkpOwogCiAgICAgaWQgcmVzdWx0ID0gZmluZEFjY2Vzc2libGVPYmpl
Y3RCeUlkKHJvb3QsIFtOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6aWRBdHRyaWJ1dGVd
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCmluZGV4IDUyMjM0
YWE0ZDc0NzJjZGUwNzFkOWU4Njk2OTBkOTM1NTI5YTIwZDIuLmJiYzhiYjE2Yzg2NGJjMjYxMGNm
YWE2OWEwNmZkODEzYzc2OTVkMDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudElPUy5tbQpAQCAtMTM2LDExICsxMzYsNiBAQCBAZW5kCiAKIG5hbWVzcGFjZSBXVFIgewog
Ci1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKQot
ewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIs
IDApKTsKLX0KLQogc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb25jYXRlbmF0ZUF0
dHJpYnV0ZUFuZFZhbHVlKE5TU3RyaW5nICphdHRyaWJ1dGUsIE5TU3RyaW5nICp2YWx1ZSkKIHsK
ICAgICBWZWN0b3I8VW5pQ2hhcj4gYnVmZmVyKFthdHRyaWJ1dGUgbGVuZ3RoXSk7CkBAIC0zMzAs
MjcgKzMyNSwyNyBAQCBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3coKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MoKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZD
aGlsZHJlbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1
cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlw
dGlvbk9mQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogewotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJp
bmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBAIC0zODIsNyArMzc3LDcg
QEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmUKICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhhdHRyaWJ1dGUsICJBWFRleHR1YWxDb250ZXh0IikpCiAgICAgICAgIHJldHVybiBb
W21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRdIGNyZWF0ZUpTU3RyaW5nUmVm
XTsKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVt
YmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQpAQCAtNDQzLDE3ICs0Mzgs
MTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChK
U1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpy
b2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c3Vicm9sZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCkBAIC00
NjMsMTMgKzQ1OCwxMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZygpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0
dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKQEAgLTQ3
OSw3ICs0NzMsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZGVzY3JpcHRpb24oKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgp
CkBAIC00ODksNyArNDgzLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1w
dHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHQoKSBjb25z
dApAQCAtNTQ5LDcgKzU0Myw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhW
YWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp2YWx1ZURlc2NyaXB0aW9uKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkKQEAgLTU4NCw3ICs1NzgsNiBAQCBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNTk2LDEzICs1ODksMTEgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjM4LDcgKzYyOSw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0CiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRHJv
cEVmZmVjdHMoKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIC8vIHBhcmFtZXRlcml6ZWQgYXR0cmli
dXRlcwpAQCAtNjU5LDcgKzY1MCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpyYW5nZUZvclBvc2l0aW9uKGludCB4LCBpbnQgeSkKIAogSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdl
KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJh
bmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC03MTMsMzIgKzcwNCwz
MiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Vs
ZWN0VGV4dFdpdGhDcml0ZXJpYShKU0NvbnRleAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycygpCiB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJp
bmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpT
U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5z
KCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2li
bGVDZWxscygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1
cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRyYWl0cygp
CkBAIC05MDMsMjMgKzg5NCwyMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92
ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJ
KCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVh
dGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2
ZVRlY2hub2xvZ3lTaW11bGF0ZWRGb2N1cygpCkBAIC0xMDE2LDMxICsxMDA1LDI2IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4o
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAogewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEwNTIs
MTMgKzEwMzYsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBj
b25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSgpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTA3NCwyMiArMTA1
NiwxOCBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cG9wdXBWYWx1ZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZv
Y3VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
fQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigpCiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJl
bW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiAvLyBUZXh0
IG1hcmtlcnMKQEAgLTExMzYsNyArMTExNCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7
CiAgICAgaWQgdGV4dE1hcmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFu
Z2UoKTsKICAgICBpZiAoIVt0ZXh0TWFya2VycyBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNz
XV0pCi0gICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJpbmdGb3JUZXh0
TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclBy
b3h5SU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvRXZl
bnRTZW5kZXJQcm94eUlPUy5tbQppbmRleCBjYWIzZjE4YjM2NTlmNDkxNmJkNTAwODc5Mjg2ZDZh
MjdjMGM5ZjkxLi45ODFhMWZkMGRjNzU4MGNmMDEyZDMxNTZiOGY5ZGY5ODkzMDExYmZmIDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNl
bmRlclByb3h5SU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0KQEAgLTM2LDI0ICszNiwxMiBAQCBuYW1lc3Bh
Y2UgV1RSIHsKIAogRXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0Q29udHJv
bGxlciogdGVzdENvbnRyb2xsZXIpCiAgICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RDb250cm9s
bGVyKQotICAgICwgbV90aW1lKDApCi0gICAgLCBtX3Bvc2l0aW9uKCkKLSAgICAsIG1fbGVmdE1v
dXNlQnV0dG9uRG93bihmYWxzZSkKLSAgICAsIG1fY2xpY2tDb3VudCgwKQotICAgICwgbV9jbGlj
a1RpbWUoMCkKLSAgICAsIG1fY2xpY2tQb3NpdGlvbigpCi0gICAgLCBtX2NsaWNrQnV0dG9uKGtX
S0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbikKLSAgICAsIGV2ZW50TnVtYmVyKDApCiB7CiAgICAg
VU5VU0VEX1BBUkFNKG1fdGVzdENvbnRyb2xsZXIpOwogICAgIFVOVVNFRF9QQVJBTShtX2xlZnRN
b3VzZUJ1dHRvbkRvd24pOwogICAgIFVOVVNFRF9QQVJBTShldmVudE51bWJlcik7CiB9CiAKLUV2
ZW50U2VuZGVyUHJveHk6On5FdmVudFNlbmRlclByb3h5KCkKLXsKLX0KLQogdm9pZCBFdmVudFNl
bmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiB7CiAgICAg
aWYgKG1fdGltZSAtIG1fY2xpY2tUaW1lIDwgMSAmJiBtX3Bvc2l0aW9uID09IG1fY2xpY2tQb3Np
dGlvbiAmJiBidXR0b24gPT0gbV9jbGlja0J1dHRvbikgewpAQCAtNzAsMTcgKzU4LDE0IEBAIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9u
KQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRG93bih1bnNpZ25lZCBidXR0b25OdW1i
ZXIsIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQogewotICAgIC8vIFdyaXRlIG1lLgogfQog
CiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlVXAodW5zaWduZWQgYnV0dG9uTnVtYmVyLCBX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycykKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9p
ZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCiB7Ci0g
ICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQo
aW50IG1pbGxpc2Vjb25kcykKQEAgLTkwLDc5ICs3NSw2NiBAQCB2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94
eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1
bnNpZ25lZCBrZXlMb2NhdGlvbikKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVu
dFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICAvLyBXcml0
ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5V2l0aFdoZWVs
QW5kTW9tZW50dW1QaGFzZXMoaW50IHgsIGludCB5LCBpbnQgcGhhc2UsIGludCBtb21lbnR1bSkK
IHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojpjb250aW51
b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiB7Ci0gICAgLy8gV3Jp
dGUgbWUuCiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5KQogewotICAgIC8vIFdyaXRlIG1lLgog
fQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBp
bnQgeCwgaW50IHkpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6c2V0VG91Y2hNb2RpZmllcihXS0V2ZW50TW9kaWZpZXJzLCBib29sIGVuYWJsZSkKIHsK
LSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaFBv
aW50UmFkaXVzKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKIHsKLSAgICAvLyBXcml0ZSBtZS4K
IH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaFN0YXJ0KCkKIHsKLSAgICAvLyBXcml0
ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaE1vdmUoKQogewotICAgIC8v
IFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoRW5kKCkKIHsKLSAg
ICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaENhbmNlbCgp
CiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y2xlYXJU
b3VjaFBvaW50cygpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6cmVsZWFzZVRvdWNoUG9pbnQoaW50IGluZGV4KQogewotICAgIC8vIFdyaXRlIG1lLgog
fQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQog
ewotICAgIC8vIFdyaXRlIG1lLgogfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nl
c3NpYmlsaXR5Q29tbW9uTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQppbmRleCAyNWUwYzNkMDBlNDliYjJi
NWVkMjAzZTE5MGNmMWVjYzkwZGYzYWY0Li4zNTRhOGY2NTU1YzZjMDAyNjVmNTY4MWE2YjM3MTUy
YTg0YTU2MmMwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KQEAgLTMy
LDYgKzMyLDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlDb21tb25NYWMuaCIKIAogI2ltcG9y
dCAiSlNXcmFwcGVyLmgiCisjaW1wb3J0ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgog
CkBAIC02MSwyNiArNjIsMjIgQEAgQ2xhc3Mgd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJD
bGFzcygpCiAgICAgcmV0dXJuIGNsczsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgbWFrZUFycmF5
UmVmRm9yQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQorc3RhdGlj
IEpTT2JqZWN0UmVmIG1ha2VKU0FycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0FycmF5ICph
cnJheSkKIHsKICAgICBOU1VJbnRlZ2VyIGNvdW50ID0gYXJyYXkuY291bnQ7CiAgICAgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbY291bnRdOwotCiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKICAgICAgICAgYXJndW1lbnRzW2ldID0gbWFrZVZhbHVlUmVmRm9yVmFsdWUo
Y29udGV4dCwgW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pOwotCiAgICAgcmV0dXJuIEpTT2JqZWN0
TWFrZUFycmF5KGNvbnRleHQsIGNvdW50LCBhcmd1bWVudHMsIG51bGxwdHIpOwogfQogCi1zdGF0
aWMgSlNWYWx1ZVJlZiBtYWtlT2JqZWN0UmVmRm9yRGljdGlvbmFyeShKU0NvbnRleHRSZWYgY29u
dGV4dCwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQorc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VK
U09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQog
ewotICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBudWxscHRy
LCBudWxscHRyKTsKLQorICAgIGF1dG8gb2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIG51
bGxwdHIsIG51bGxwdHIpOwogICAgIFtkaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3Rz
VXNpbmdCbG9jazpeKE5TU3RyaW5nICprZXksIGlkIG9iaiwgQk9PTCAqKSB7CiAgICAgICAgIGlm
IChKU1ZhbHVlUmVmIHByb3BlcnR5VmFsdWUgPSBtYWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0
LCBvYmopKQogICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3Qs
IFtrZXkgY3JlYXRlSlNTdHJpbmdSZWZdLmdldCgpLCBwcm9wZXJ0eVZhbHVlLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOwogICAgIH1dOwotCiAgICAgcmV0dXJuIG9iamVjdDsK
IH0KIApAQCAtOTYsOSArOTMsOSBAQCBKU1ZhbHVlUmVmIG1ha2VWYWx1ZVJlZkZvclZhbHVlKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBpZCB2YWx1ZSkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xh
c3M6d2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygpXSkKICAgICAgICAgcmV0dXJu
IHRvSlMoY29udGV4dCwgV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KHZhbHVlKSkucHRyKCkpOwogICAgIGlmIChbdmFsdWUg
aXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBtYWtl
T2JqZWN0UmVmRm9yRGljdGlvbmFyeShjb250ZXh0LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBt
YWtlSlNPYmplY3QoY29udGV4dCwgdmFsdWUpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFz
czpbTlNBcnJheSBjbGFzc11dKQotICAgICAgICByZXR1cm4gbWFrZUFycmF5UmVmRm9yQXJyYXko
Y29udGV4dCwgdmFsdWUpOworICAgICAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgdmFs
dWUpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0xMTUsMjggKzExMiwxNiBAQCBOU0Rp
Y3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hD
cml0ZXJpYShKU0NvbnRleHRSZQogCiAgICAgaWYgKHNlYXJjaEtleSkgewogICAgICAgICBpZCBz
ZWFyY2hLZXlQYXJhbWV0ZXIgPSBuaWw7Ci0gICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29u
dGV4dCwgc2VhcmNoS2V5KSkgewotICAgICAgICAgICAgYXV0byBzZWFyY2hLZXlTdHJpbmcgPSBh
ZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaEtleSwgbnVsbHB0cikpOwot
ICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0cmluZykKLSAgICAgICAgICAgICAgICBzZWFyY2hL
ZXlQYXJhbWV0ZXIgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0
cmluZy5nZXQoKV07Ci0gICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQs
IHNlYXJjaEtleSkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFy
Y2hLZXkpKQorICAgICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gdG9XVEZTdHJpbmcoY29u
dGV4dCwgc2VhcmNoS2V5KTsKKyAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRl
eHQsIHNlYXJjaEtleSkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaEtleUFycmF5
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSwgbnVsbHB0cik7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1
dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxl
bmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwg
bGVuZ3RoUHJvcGVydHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNl
YXJjaEtleUFycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJj
aEtleUFycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFycmF5TGVu
Z3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFy
Y2hLZXlBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAgICAgIHVuc2lnbmVk
IHNlYXJjaEtleUFycmF5TGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgc2VhcmNoS2V5QXJy
YXkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaEtleUFycmF5
TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleVZhbHVl
ID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXksIGks
IG51bGxwdHIpOwotICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVmIHNlYXJjaEtleVN0cmluZyA9
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgc2VhcmNoS2V5VmFsdWUsIG51bGxwdHIpOwot
ICAgICAgICAgICAgICAgIGlmIChzZWFyY2hLZXlTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzZWFyY2hLZXlQYXJhbWV0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWFy
Y2hLZXlQYXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICAgICAgICAg
ICAgICBbc2VhcmNoS2V5UGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpT
U3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZ11dOwotICAgICAgICAgICAgICAgICAgICBKU1N0cmlu
Z1JlbGVhc2Uoc2VhcmNoS2V5U3RyaW5nKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYXV0byBzZWFyY2hLZXkgPSB0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFBy
b3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgaSwgbnVsbHB0cikpOworICAg
ICAgICAgICAgICAgIGlmICghc2VhcmNoS2V5UGFyYW1ldGVyKQorICAgICAgICAgICAgICAgICAg
ICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgICAgICAg
ICAgICAgIFtzZWFyY2hLZXlQYXJhbWV0ZXIgYWRkT2JqZWN0OnNlYXJjaEtleV07CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNlYXJjaEtleVBhcmFtZXRlcikKQEAgLTE0
NCwxMCArMTI5LDkgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVk
QXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICB9CiAKICAgICBpZiAo
c2VhcmNoVGV4dCAmJiBKU1N0cmluZ0dldExlbmd0aChzZWFyY2hUZXh0KSkKLSAgICAgICAgW3Bh
cmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJp
bmdSZWY6c2VhcmNoVGV4dF0gZm9yS2V5OkAiQVhTZWFyY2hUZXh0Il07CisgICAgICAgIFtwYXJh
bWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDp0b1dURlN0cmluZyhzZWFyY2hUZXh0KSBmb3JL
ZXk6QCJBWFNlYXJjaFRleHQiXTsKIAogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9i
amVjdDpAKHZpc2libGVPbmx5KSBmb3JLZXk6QCJBWFZpc2libGVPbmx5Il07Ci0KICAgICBbcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QChpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkp
IGZvcktleTpAIkFYSW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5Il07CiAKICAgICByZXR1cm4gcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJNYWMubW0KaW5kZXggOTEzYWUwZjc1Y2RiNGVkNWRlZGRlYjkyNWY2Yzk1MDE4ZGRkMTcwNC4u
YTg4N2RlNWM4NWQ1MDI4NGZkMjQ0NzEyNTE2ZTg5Yzk5OGMzYWE1ZiAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBv
cnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgiCiAjaW1wb3J0ICJJbmplY3Rl
ZEJ1bmRsZS5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCisjaW1wb3J0ICJKU0Jh
c2ljcy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGVQYWdlLmg+CkBA
IC05Niw3ICs5Nyw3IEBAIHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoaWQgb2Jq
LCBOU1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5n
UmVmIGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBQbGF0Zm9ybVVJRWxl
bWVudCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0
eVJvb3RPYmplY3QocGFnZSkpOwogCiAgICAgUmV0YWluUHRyPGlkPiByZXN1bHQ7CkBAIC0xMTEs
NyArMTEyLDcgQEAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlMKIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQogewotICAgIHJl
dHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibWFjIikpOworICAgIHJl
dHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJtYWMiKTsKIH0KIAogLy8gQVhUaHJlYWQgaW1wbGVt
ZW50YXRpb24KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4
IDUwYjNlMDIyMGI4ZDEyMmFkMjJiYzk2ZDQyNGNmZDgzMzFiNjVmNTkuLjJlZmY0NTRlNjY3OTFk
Njk4Zjk1YmVjNzY5NGEwOWZiMmNjZjBhMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbQpAQCAtMzIsNyArMzIsNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbXBvcnQgIkluamVj
dGVkQnVuZGxlUGFnZS5oIgotCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8QXBwS2l0
L05TQWNjZXNzaWJpbGl0eS5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CkBAIC04NywxMSArODcsNiBA
QCBAZW5kCiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKQotewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApKTsKLX0KLQogUmVmUHRyPEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzX2NvbnRyb2xsZXI7CiAKIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkK
QEAgLTIwNiw3ICsyMDEsNyBAQCBzdGF0aWMgTlNTdHJpbmcqIGRlc2NyaXB0aW9uT2ZWYWx1ZShp
ZCB2YWx1ZU9iamVjdCwgaWQgZWxlbWVudCkKIAogc3RhdGljIE5TU3RyaW5nICphdHRyaWJ1dGVz
T2ZFbGVtZW50KGlkIGFjY2Vzc2liaWxpdHlPYmplY3QpCiB7Ci0gICAgUmV0YWluUHRyPE5TQXJy
YXk+IGF0dHJpYnV0ZXMgPSBzdXBwb3J0ZWRBdHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmplY3Qp
OworICAgIGF1dG8gYXR0cmlidXRlcyA9IHN1cHBvcnRlZEF0dHJpYnV0ZXMoYWNjZXNzaWJpbGl0
eU9iamVjdCk7CiAKICAgICBOU011dGFibGVTdHJpbmcqIGF0dHJpYnV0ZXNTdHJpbmcgPSBbTlNN
dXRhYmxlU3RyaW5nIHN0cmluZ107CiAgICAgZm9yIChOU1N0cmluZyogYXR0cmlidXRlIGluIGF0
dHJpYnV0ZXMuZ2V0KCkpIHsKQEAgLTIyNywxNiArMjIyLDEzIEBAIHN0YXRpYyBOU1N0cmluZyAq
YXR0cmlidXRlc09mRWxlbWVudChpZCBhY2Nlc3NpYmlsaXR5T2JqZWN0KQogICAgIHJldHVybiBh
dHRyaWJ1dGVzU3RyaW5nOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIEpTVmFs
dWVSZWYgY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIFZl
Y3RvcjxUPiBjb25zdCYgZWxlbWVudHMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgSlNP
YmplY3RSZWYgbWFrZUpTQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxU
PiYgZWxlbWVudHMpCiB7Ci0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0TWFr
ZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKKyAgICBhdXRvIGFycmF5ID0g
SlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7CiAgICAgc2l6ZV90IGVsZW1lbnRD
b3VudCA9IGVsZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVsZW1l
bnRDb3VudDsgKytpKQotICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBhcnJheU9iaiwgaSwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGVsZW1lbnRzW2ldLT53cmFwcGVy
Q2xhc3MoKSwgZWxlbWVudHNbaV0uZ2V0KCkpLCAwKTsKLQotICAgIHJldHVybiBhcnJheVJlc3Vs
dDsKKyAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGks
IEpTT2JqZWN0TWFrZShjb250ZXh0LCBlbGVtZW50c1tpXS0+d3JhcHBlckNsYXNzKCksIGVsZW1l
bnRzW2ldLmdldCgpKSwgMCk7CisgICAgcmV0dXJuIGFycmF5OwogfQogCiBzdGF0aWMgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IGNvbmNhdGVuYXRlQXR0cmlidXRlQW5kVmFsdWUoTlNTdHJpbmcq
IGF0dHJpYnV0ZSwgTlNTdHJpbmcqIHZhbHVlKQpAQCAtMjczLDI1ICsyNjUsMTMgQEAgc3RhdGlj
IE5TRGljdGlvbmFyeSAqc2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJp
YShKU0NvbnRleHRSZWYgY28KICAgICAKICAgICBpZiAoc2VhcmNoU3RyaW5ncykgewogICAgICAg
ICBOU011dGFibGVBcnJheSAqc2VhcmNoU3RyaW5nc1BhcmFtZXRlciA9IFtOU011dGFibGVBcnJh
eSBhcnJheV07Ci0gICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoU3Ry
aW5ncykpIHsKLSAgICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cikpOwotICAg
ICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAgICAgICAgW3NlYXJj
aFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdS
ZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgeworICAgICAgICBp
ZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKQorICAgICAgICAgICAg
W3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNvbnRleHQsIHNl
YXJjaFN0cmluZ3MpXTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKU09iamVjdFJlZiBz
ZWFyY2hTdHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5n
cywgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5n
dGggPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3Ry
aW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAg
ICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVy
dHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NB
cnJheUxlbmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVu
Z3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFy
Y2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9w
dChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAgICAgICAg
ICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRo
SlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gYXJyYXlMZW5n
dGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkKKyAgICAgICAgICAg
ICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmcoY29udGV4
dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5
LCBpLCBudWxscHRyKSldOwogICAgICAgICB9CiAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmli
dXRlIHNldE9iamVjdDpzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGZvcktleTpAIkFYU2VsZWN0VGV4
dFNlYXJjaFN0cmluZ3MiXTsKICAgICB9CkBAIC0zMTQsMjQgKzI5NCwxMyBAQCBzdGF0aWMgTlNE
aWN0aW9uYXJ5ICpzZWFyY2hUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpT
Q29udGV4dFJlZiBjbwogCiAgICAgaWYgKHNlYXJjaFN0cmluZ3MpIHsKICAgICAgICAgTlNNdXRh
YmxlQXJyYXkgKnNlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXld
OwotICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7
Ci0gICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpKTsKLSAgICAgICAgICAg
IGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQotICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdz
UGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJj
aFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKLSAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlSXNPYmpl
Y3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKKyAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmlu
Zyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkKKyAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFy
YW1ldGVyIGFkZE9iamVjdDp0b1dURlN0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKV07Cisg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAg
ICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gMDsKLQotICAgICAg
ICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaFN0
cmluZ3NBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFy
Y2hTdHJpbmdzQXJyYXksIGxlbmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAg
ICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNO
dW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAg
ICAgICAgIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUsIG51
bGxwdHIpKTsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaFN0
cmluZ3NBcnJheUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJp
bmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBKU09iamVjdEdl
dFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxwdHIp
LCBudWxscHRyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0g
ICAgICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNT
dHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyAr
K2kpCisgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRv
V1RGU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNl
YXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0cikpXTsKICAgICAgICAgfQogICAgICAgICBbcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c2VhcmNoU3RyaW5nc1BhcmFtZXRlciBmb3JL
ZXk6QCJBWFNlYXJjaFRleHRTZWFyY2hTdHJpbmdzIl07CiAgICAgfQpAQCAtNDAxLDcgKzM3MCw3
IEBAIEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SGVhZGVycygpIGNvbnN0
CiAgICAgaWQgdmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZShtX2VsZW1lbnQuZ2V0KCksIE5TQWNjZXNz
aWJpbGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGUpOwogICAgIGlmIChbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQogICAgICAgICBlbGVtZW50cyA9IG1ha2VWZWN0
b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pih2YWx1ZSk7Ci0gICAgcmV0dXJuIGNv
bnZlcnRWZWN0b3JUb09iamVjdEFycmF5PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4o
Y29udGV4dCwgZWxlbWVudHMpOworICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0LCBlbGVt
ZW50cyk7CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogfQogCkBAIC00MTUsNyArMzg0LDcg
QEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzKCkgY29u
c3QKICAgICBpZCB2YWx1ZSA9IGF0dHJpYnV0ZVZhbHVlKG1fZWxlbWVudC5nZXQoKSwgTlNBY2Nl
c3NpYmlsaXR5Q29sdW1uSGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZSk7CiAgICAgaWYgKFt2YWx1
ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCiAgICAgICAgIGVsZW1lbnRzID0gbWFr
ZVZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KHZhbHVlKTsKLSAgICByZXR1
cm4gY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+Pihjb250ZXh0LCBlbGVtZW50cyk7CisgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNvbnRleHQs
IGVsZW1lbnRzKTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiB9CiAgICAgCkBAIC02MDcs
NyArNTc2LDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRB
cnJheUF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHIKIAogICAgIFZlY3RvcjxSZWZQdHI8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+IGVsZW1lbnRzOwogICAgIGdldFVJRWxlbWVudHNXaXRo
QXR0cmlidXRlKGF0dHJpYnV0ZSwgZWxlbWVudHMpOwotICAgIHJldHVybiBjb252ZXJ0VmVjdG9y
VG9PYmplY3RBcnJheTxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KGNvbnRleHQsIGVs
ZW1lbnRzKTsKKyAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgZWxlbWVudHMpOwogfQog
CiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dWlFbGVtZW50QXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKSBjb25zdApAQCAt
OTc2LDcgKzk0NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZCgp
IGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFj
dGl2ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApAQCAtMTIyOSw3ICsxMTk3LDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzZWFyY2hUZXh0V2l0aENyaXRlcmlhKEpTQ29udGV4dFJlZiBjb250ZXh0LAogICAg
IE5TRGljdGlvbmFyeSAqcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSA9IHNlYXJjaFRleHRQYXJhbWV0
ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgc3RhcnRG
cm9tLCBkaXJlY3Rpb24pOwogICAgIGlkIHJlc3VsdCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOkAiQVhTZWFyY2hUZXh0V2l0aENyaXRlcmlhIiBmb3JQYXJhbWV0ZXI6
cGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07CiAgICAgaWYgKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpb
TlNBcnJheSBjbGFzc11dKQotICAgICAgICByZXR1cm4gY29udmVydFZlY3RvclRvT2JqZWN0QXJy
YXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+Pihjb250ZXh0LCBtYWtlVmVj
dG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPj4ocmVzdWx0KSk7CisgICAg
ICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0LCBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlclJhbmdlPj4ocmVzdWx0KSk7CiAgICAgRU5EX0FYX09CSkNfRVhDRVBU
SU9OUwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNTQ2LDEzICsxNTE0LDExIEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVk
Q2hpbGRyZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlW
YWx1ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVu
Y29kaW5nKCkKQEAgLTE1NjIsOCArMTUyOCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKICAgICBpZiAoW3ZhbHVl
IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBbdmFsdWUg
Y3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZG9jdW1lbnRVUkkoKQpAQCAtMTU3Myw4ICsxNTM4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICBpZiAoW3Zh
bHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBbdmFs
dWUgY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAgICAK
LSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0
cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dXJsKCkKQEAgLTE1ODMsNyArMTU0Nyw2IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQogICAgIE5TVVJMICp1cmwgPSBbbV9lbGVt
ZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1
dGVdOwogICAgIHJldHVybiBbW3VybCBhYnNvbHV0ZVN0cmluZ10gY3JlYXRlSlNTdHJpbmdSZWZd
OyAgICAKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCi0gICAgCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKQEAgLTE2MjIsNyArMTU4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNGb2N1c2FibGUoKSBjb25zdAogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwogICAg
IHJlc3VsdCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUlzQXR0cmlidXRlU2V0dGFibGU6TlNB
Y2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9O
UwotICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE2NDgsMTkgKzE2MTAsMTYgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzT2ZmU2NyZWVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzQ29sbGFwc2VkKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNjc1LDEzICsxNjM0LDExIEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc1NpbmdsZUxpbmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNN
dWx0aUxpbmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKQEAgLTE3MTQsMTcgKzE2NzEsMTQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0YWtlRm9jdXMoKQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VT
ZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphZGRTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24oKQog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogLy8gVGV4dCBtYXJrZXJzCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVy
TWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1
bm5lck1hYy5tbQppbmRleCA0MDNmNGZmODMyZWUwZWY3YzNjZmFiZGYwZjg3ZTJjY2JlNjE0Zjhh
Li5hZGJiNGI3YjVkNTRmYjE0YTljNGJkZThhOTIyNzVmMTFjMTQxNmQ5IDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1t
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0KQEAgLTQ2LDE2ICs0NiwxMSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVz
dFJ1bm5lcjo6aW5zcGVjdG9yVGVzdFN0dWJVUkwoKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgcmV0dXJuIG51bGxwdHI7CiAjZWxzZQotICAgIENGQnVuZGxlUmVmIGluc3BlY3RvckJ1
bmRsZSA9IENGQnVuZGxlR2V0QnVuZGxlV2l0aElkZW50aWZpZXIoQ0ZTVFIoImNvbS5hcHBsZS5X
ZWJJbnNwZWN0b3JVSSIpKTsKKyAgICBhdXRvIGluc3BlY3RvckJ1bmRsZSA9IENGQnVuZGxlR2V0
QnVuZGxlV2l0aElkZW50aWZpZXIoQ0ZTVFIoImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSIpKTsK
ICAgICBpZiAoIWluc3BlY3RvckJ1bmRsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybCA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VV
UkwoaW5zcGVjdG9yQnVuZGxlLCBDRlNUUigiVGVzdFN0dWIiKSwgQ0ZTVFIoImh0bWwiKSwgTlVM
TCkpOwotICAgIGlmICghdXJsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENGU3Ry
aW5nUmVmIHVybFN0cmluZyA9IENGVVJMR2V0U3RyaW5nKHVybC5nZXQoKSk7Ci0gICAgcmV0dXJu
IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHVybFN0cmluZykpOworICAgIGF1dG8g
cmVzb3VyY2VVUkwgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKGluc3BlY3RvckJ1
bmRsZSwgQ0ZTVFIoIlRlc3RTdHViIiksIENGU1RSKCJodG1sIiksIE5VTEwpKTsKKyAgICByZXR1
cm4gcmVzb3VyY2VVUkwgPyBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlVSTEdl
dFN0cmluZyhyZXNvdXJjZVVSTC5nZXQoKSkpKSA6IG51bGxwdHI7CiAjZW5kaWYKIH0KIApkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKaW5kZXggMWJjMDVjMGE1ZjNhODA0
YzBiMTQxYjg5NjkwYjc1ZDI3NzEwZTc2MS4uNjdmMzllNjlmMTU0MDhiOTJlYTNhZTk0N2M5ZmE5
MmZlZWExMjhjZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5j
dGlvbnMuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBT
emVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNCwxNSAr
MjQsMTIgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIFN0cmluZ0Z1bmN0aW9uc19oCi0jZGVmaW5lIFN0cmluZ0Z1bmN0aW9uc19oCisjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAj
aW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nUHJpdmF0ZS5oPgotI2luY2x1ZGUgPFdlYktp
dC9XS1VSTC5oPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgpAQCAtNDQsNyArNDEsOCBAQAogCiBuYW1lc3BhY2UgV1RSIHsK
IAotLy8gQ29udmVyc2lvbiBmdW5jdGlvbnMKK1dLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dL
U3RyaW5nKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitXVEY6OlN0cmluZyB0b1dURlN0cmlu
ZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwogCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHRvV0soSlNTdHJpbmdSZWYgc3RyaW5nKQogewpAQCAtNTYsOSArNTQsMTQgQEAgaW5s
aW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKGNvbnN0IEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiYgc3RyaW5nKQogICAgIHJldHVybiB0b1dLKHN0cmluZy5nZXQoKSk7CiB9CiAKK2lu
bGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBjaGFyKiBzdHJpbmcpCit7
CisgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5n
KSk7Cit9CisKIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBXVEY6
OlN0cmluZyYgc3RyaW5nKQogewotICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJuIHRvV0soc3Ry
aW5nLnV0ZjgoKS5kYXRhKCkpOwogfQogCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IHRvSlMoV0tTdHJpbmdSZWYgc3RyaW5nKQpAQCAtOTksNiArMTAyLDI1IEBAIGlubGluZSBXVEY6
OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmlu
ZykKICAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5nLmdldCgpKTsKIH0KIAotfSAvLyBuYW1l
c3BhY2UgV1RSCitpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoSlNTdHJpbmdSZWYgc3Ry
aW5nKQoreworICAgIHJldHVybiB0b1dURlN0cmluZyh0b1dLKHN0cmluZykpOworfQogCi0jZW5k
aWYgLy8gU3RyaW5nRnVuY3Rpb25zX2gKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhj
b25zdCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4mIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9X
VEZTdHJpbmcoc3RyaW5nLmdldCgpKTsKK30KKworaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b1dLU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQor
eworICAgIHJldHVybiB0b1dLKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7
Cit9CisKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICAvLyBGSVhNRTogQ291bGQgbWFrZSB0aGlzIGVm
ZmljaWVudCBieSB1c2luZyB0aGUgV1RGU3RyaW5nIGluc2lkZSBPcGFxdWVKU1N0cmluZyBpZiB3
ZSB3YW50ZWQgdG8uCisgICAgcmV0dXJuIHRvV1RGU3RyaW5nKGNyZWF0ZUpTU3RyaW5nKGNvbnRl
eHQsIHZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCAxMzQ1YzQyYzExZTYyZGMwODhjNmYyZDM4Yjk5
YjA5MzU2NGUwMTM4Li43NWQ5ZmI2MDQ0NDE0NWYxZWNkZmFlZmQ5OTA4YWFlMjY4ODU0ZWYzIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMjYsMTAgKzI2
LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIK
IAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJFdmVudFNlbmRl
clByb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmll
dy5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0
aW9uLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgpAQCAtNDk0LDggKzQ5NCw3IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkK
ICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6Omluc3RhbGxNb2NrR2FtZXBhZFByb3ZpZGVyKCk7CiAj
ZW5kaWYKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYWdlR3JvdXBJZGVudGlmaWVy
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0VGVzdFJ1bm5l
clBhZ2VHcm91cCIpKTsKLSAgICBtX3BhZ2VHcm91cC5hZG9wdChXS1BhZ2VHcm91cENyZWF0ZVdp
dGhJZGVudGlmaWVyKHBhZ2VHcm91cElkZW50aWZpZXIuZ2V0KCkpKTsKKyAgICBtX3BhZ2VHcm91
cC5hZG9wdChXS1BhZ2VHcm91cENyZWF0ZVdpdGhJZGVudGlmaWVyKHRvV0soIldlYktpdFRlc3RS
dW5uZXJQYWdlR3JvdXAiKS5nZXQoKSkpOwogCiAgICAgbV9ldmVudFNlbmRlclByb3h5ID0gbWFr
ZVVuaXF1ZTxFdmVudFNlbmRlclByb3h5Pih0aGlzKTsKIH0KQEAgLTUwNyw5ICs1MDYsOSBAQCBX
S1JldGFpblB0cjxXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2Vu
ZXJhdGVDb250ZXh0Q29uZmlndXJhdAogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRGdWxs
eVN5bmNocm9ub3VzTW9kZUlzQWxsb3dlZEZvclRlc3RpbmcoY29uZmlndXJhdGlvbi5nZXQoKSwg
dHJ1ZSk7CiAgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldElnbm9yZVN5bmNocm9ub3VzTWVz
c2FnaW5nVGltZW91dHNGb3JUZXN0aW5nKGNvbmZpZ3VyYXRpb24uZ2V0KCksIG9wdGlvbnMuaWdu
b3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyk7CiAKLSAgICBXS1JldGFpblB0cjxXS011
dGFibGVBcnJheVJlZj4gb3ZlcnJpZGVMYW5ndWFnZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5
Q3JlYXRlKCkpOworICAgIGF1dG8gb3ZlcnJpZGVMYW5ndWFnZXMgPSBhZG9wdFdLKFdLTXV0YWJs
ZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAoYXV0byYgbGFuZ3VhZ2UgOiBvcHRpb25zLm92ZXJy
aWRlTGFuZ3VhZ2VzKQotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShvdmVycmlkZUxhbmd1YWdl
cy5nZXQoKSwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhsYW5ndWFnZS51
dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShvdmVycmlk
ZUxhbmd1YWdlcy5nZXQoKSwgdG9XSyhsYW5ndWFnZSkuZ2V0KCkpOwogICAgIFdLQ29udGV4dENv
bmZpZ3VyYXRpb25TZXRPdmVycmlkZUxhbmd1YWdlcyhjb25maWd1cmF0aW9uLmdldCgpLCBvdmVy
cmlkZUxhbmd1YWdlcy5nZXQoKSk7CiAKICAgICBpZiAob3B0aW9ucy5zaG91bGRFbmFibGVQcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbigpKSB7CkBAIC04NDMsMzEgKzg0MiwyNCBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RP
cHRpb25zJiBvcHRpbwogICAgIFdLUHJlZmVyZW5jZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0
dXJlcyhwcmVmZXJlbmNlcyk7CiAKICAgICAvLyBTZXQgaW50ZXJuYWwgZmVhdHVyZXMgdGhhdCBo
YXZlIGRpZmZlcmVudCBkZWZhdWx0IHZhbHVlcyBmb3IgdGVzdGluZy4KLSAgICBzdGF0aWMgV0tT
dHJpbmdSZWYgYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQiKTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNl
LCBhc3luY092ZXJmbG93U2Nyb2xsaW5nRmVhdHVyZSk7CiAKLSAgICBzdGF0aWMgV0tTdHJpbmdS
ZWYgYXN5bmNGcmFtZVNjcm9sbGluZ0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0
SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBhc3luY0ZyYW1l
U2Nyb2xsaW5nRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0
dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBmYWxzZSwgdG9XSygiQXN5bmNPdmVyZmxvd1Njcm9sbGlu
Z0VuYWJsZWQiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0
dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBmYWxzZSwgdG9XSygiQXN5bmNGcmFtZVNjcm9sbGluZ0Vu
YWJsZWQiKS5nZXQoKSk7CiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9EQVRFKQotICAgIHN0YXRp
YyBXS1N0cmluZ1JlZiBpbnB1dFR5cGVEYXRlRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJbnB1dFR5cGVEYXRlRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJ
bnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlRGF0
ZUZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktl
eShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlRGF0ZUVuYWJsZWQiKS5nZXQoKSk7
CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKQotICAgIHN0YXRp
YyBXS1N0cmluZ1JlZiBpbnB1dFR5cGVEYXRlVGltZUxvY2FsRmVhdHVyZSA9IFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1dFR5cGVEYXRlVGltZUxvY2FsRW5hYmxlZCIpOwotICAg
IFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywg
dHJ1ZSwgaW5wdXRUeXBlRGF0ZVRpbWVMb2NhbEZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5w
dXRUeXBlRGF0ZVRpbWVMb2NhbEVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9NT05USCkKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlTW9udGhG
ZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZU1vbnRoRW5h
YmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShw
cmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlTW9udGhGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0so
IklucHV0VHlwZU1vbnRoRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBV
VF9UWVBFX1RJTUUpCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0VHlwZVRpbWVGZWF0dXJl
ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZVRpbWVFbmFibGVkIik7
Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVu
Y2VzLCB0cnVlLCBpbnB1dFR5cGVUaW1lRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldElu
dGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5
cGVUaW1lRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1dF
RUspCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0VHlwZVdlZWtGZWF0dXJlID0gV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZVdlZWtFbmFibGVkIik7Ci0gICAgV0tQ
cmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVl
LCBpbnB1dFR5cGVXZWVrRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVi
dWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVXZWVrRW5h
YmxlZCIpLmdldCgpKTsKICNlbmRpZgogCiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcm5hbERl
YnVnRmVhdHVyZSA6IG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQpAQCAtOTIwLDI1ICs5
MTIsMTYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVu
dFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW8KICAgICBXS1ByZWZlcmVuY2VzU2V0UHVu
Y2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZShwcmVmZXJlbmNlcywgb3B0aW9ucy5wdW5j
aE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0UGFn
ZUNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENhY2hl
KTsKIAotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBkZWZhdWx0VGV4dEVuY29kaW5nID0gV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklTTy04ODU5LTEiKTsKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUocHJlZmVyZW5jZXMsIGRlZmF1bHRUZXh0RW5jb2Rp
bmcpOwotCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHN0YW5kYXJkRm9udEZhbWlseSA9IFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lcyIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1Jl
ZiBjdXJzaXZlRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBs
ZSBDaGFuY2VyeSIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBmYW50YXN5Rm9udEZhbWlseSA9
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQYXB5cnVzIik7Ci0gICAgc3RhdGljIFdL
U3RyaW5nUmVmIGZpeGVkRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDb3VyaWVyIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHBpY3RvZ3JhcGhGb250RmFtaWx5
ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxlIENvbG9yIEVtb2ppIik7Ci0g
ICAgc3RhdGljIFdLU3RyaW5nUmVmIHNhbnNTZXJpZkZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSGVsdmV0aWNhIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHNl
cmlmRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lcyIpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShwcmVmZXJlbmNlcywg
dG9XSygiSVNPLTg4NTktMSIpLmdldCgpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNTZXRNaW5pbXVt
Rm9udFNpemUocHJlZmVyZW5jZXMsIDApOwotICAgIFdLUHJlZmVyZW5jZXNTZXRTdGFuZGFyZEZv
bnRGYW1pbHkocHJlZmVyZW5jZXMsIHN0YW5kYXJkRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldEN1cnNpdmVGb250RmFtaWx5KHByZWZlcmVuY2VzLCBjdXJzaXZlRm9udEZhbWlseSk7
Ci0gICAgV0tQcmVmZXJlbmNlc1NldEZhbnRhc3lGb250RmFtaWx5KHByZWZlcmVuY2VzLCBmYW50
YXN5Rm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEZpeGVkRm9udEZhbWlseShwcmVm
ZXJlbmNlcywgZml4ZWRGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0UGljdG9ncmFw
aEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHBpY3RvZ3JhcGhGb250RmFtaWx5KTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0U2Fuc1NlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgc2Fuc1NlcmlmRm9u
dEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFNlcmlmRm9udEZhbWlseShwcmVmZXJlbmNl
cywgc2VyaWZGb250RmFtaWx5KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0U3RhbmRhcmRGb250RmFt
aWx5KHByZWZlcmVuY2VzLCB0b1dLKCJUaW1lcyIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2Vz
U2V0Q3Vyc2l2ZUZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIkFwcGxlIENoYW5jZXJ5Iiku
Z2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRGYW50YXN5Rm9udEZhbWlseShwcmVmZXJlbmNl
cywgdG9XSygiUGFweXJ1cyIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Rml4ZWRGb250
RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJDb3VyaWVyIikuZ2V0KCkpOworICAgIFdLUHJlZmVy
ZW5jZXNTZXRQaWN0b2dyYXBoRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiQXBwbGUgQ29s
b3IgRW1vamkiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFNhbnNTZXJpZkZvbnRGYW1p
bHkocHJlZmVyZW5jZXMsIHRvV0soIkhlbHZldGljYSIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0U2VyaWZGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJUaW1lcyIpLmdldCgpKTsK
ICAgICBXS1ByZWZlcmVuY2VzU2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQocHJl
ZmVyZW5jZXMsIGZhbHNlKTsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgIFdLUHJlZmVy
ZW5jZXNTZXRNZWRpYVNvdXJjZUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwpAQCAtMTAxMCwz
OCArOTkzLDI3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRW
YWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICBXS1BhZ2VTZXRDdXN0
b21Vc2VyQWdlbnQobV9tYWluV2ViVmlldy0+cGFnZSgpLCBudWxscHRyKTsKIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlJlc2V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rp
b25hcnlSZWY+IHJlc2V0TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgYXV0byByZXNldE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3Vs
ZEdDS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2hvdWxkR0Mi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBzaG91bGRHQ1ZhbHVlID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUobV9nY0JldHdlZW5UZXN0cykpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0ocmVzZXRNZXNzYWdlQm9keS5nZXQoKSwgc2hvdWxkR0NLZXkuZ2V0KCksIHNob3VsZEdD
VmFsdWUuZ2V0KCkpOworICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJTaG91bGRHQyIs
IG1fZ2NCZXR3ZWVuVGVzdHMpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsbG93
ZWRIb3N0c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFsbG93
ZWRIb3N0cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gYWxsb3dlZEhv
c3RzVmFsdWUgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIGZvciAoYXV0
byYgaG9zdCA6IG1fYWxsb3dlZEhvc3RzKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB3a0hvc3QgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGhvc3Qu
Y19zdHIoKSkpOwotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShhbGxvd2VkSG9zdHNWYWx1ZS5n
ZXQoKSwgd2tIb3N0LmdldCgpKTsKLSAgICB9Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNl
dE1lc3NhZ2VCb2R5LmdldCgpLCBhbGxvd2VkSG9zdHNLZXkuZ2V0KCksIGFsbG93ZWRIb3N0c1Zh
bHVlLmdldCgpKTsKKyAgICBhdXRvIGFsbG93ZWRIb3N0c1ZhbHVlID0gYWRvcHRXSyhXS011dGFi
bGVBcnJheUNyZWF0ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGhvc3QgOiBtX2FsbG93ZWRIb3N0cykK
KyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oYWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCksIHRvV0so
aG9zdC5jX3N0cigpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkFs
bG93ZWRIb3N0cyIsIGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpKTsKIAogI2lmIEVOQUJMRShBQ0NF
U1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4
SXNvbGF0ZWRNb2RlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5S
ZWY+IGF4SXNvbGF0ZWRNb2RlVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2FjY2Vz
c2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNl
dE1lc3NhZ2VCb2R5LmdldCgpLCBheElzb2xhdGVkTW9kZUtleS5nZXQoKSwgYXhJc29sYXRlZE1v
ZGVWYWx1ZS5nZXQoKSk7CisgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkFjY2Vzc2li
aWxpdHlJc29sYXRlZFRyZWUiLCBtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKTsKICNl
bmRpZgotICAgIAotICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3RoKCkpIHsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGpzY09wdGlvbnNLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJKU0NPcHRpb25zIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4ganNjT3B0aW9uc1ZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhvcHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSkpOwotICAgICAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCksIGpzY09wdGlvbnNLZXku
Z2V0KCksIGpzY09wdGlvbnNWYWx1ZS5nZXQoKSk7Ci0gICAgfQorCisgICAgaWYgKG9wdGlvbnMu
anNjT3B0aW9ucy5sZW5ndGgoKSkKKyAgICAgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwg
IkpTQ09wdGlvbnMiLCBvcHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSk7CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVz
LmNfc3RyKCkpOwogI2VuZGlmCiAKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLUGFnZVBvc3RN
ZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+cGFnZSgpLCB0b1dLKCJSZXNldCIpLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5Lmdl
dCgpKTsKIAogICAgIFdLQ29udGV4dFNldFNob3VsZFVzZUZvbnRTbW9vdGhpbmcoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwogCkBAIC0xMjAzLDggKzExNzUs
NyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KCkK
IAogICAgIEFzeW5jVGFzayhbXSgpIHsKICAgICAgICAgLy8gQWZ0ZXIgZWFjaCB0ZXN0LCB3ZSB1
cGRhdGUgdGhlIGxpc3Qgb2YgbGl2ZSBkb2N1bWVudHMgc28gdGhhdCB3ZSBjYW4gZGV0ZWN0IHdo
ZW4gYW4gYWJhbmRvbmVkIGRvY3VtZW50IGZpcnN0IHNob3dlZCB1cC4KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiR2V0TGl2ZURvY3VtZW50cyIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgV0tQ
YWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIHRvV0soIkdldExpdmVEb2N1bWVudHMiKS5nZXQoKSwg
bnVsbHB0cik7CiAgICAgfSwgNV9zKS5ydW4oKTsKIH0KIApAQCAtMTIxNSw4ICsxMTg2LDcgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6Y2hlY2tGb3JXb3JsZExlYWtzKCkKIAogICAgIEFzeW5jVGFz
ayhbXSgpIHsKICAgICAgICAgLy8gVGhpcyBydW5zIGF0IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2Yg
dGVzdHMuIEl0IGNsZWFycyBjYWNoZXMsIHJ1bnMgYSBHQyBhbmQgdGhlbiBmZXRjaGVzIHRoZSBs
aXN0IG9mIGRvY3VtZW50cy4KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2hlY2tGb3JX
b3JsZExlYWtzIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgdG9XSygiQ2hlY2tGb3JXb3JsZExlYWtzIikuZ2V0KCksIG51bGxwdHIpOwogICAgIH0sIDIw
X3MpLnJ1bigpOwogfQogCkBAIC0xMzI0LDYgKzEyOTQsNyBAQCBjb25zdCBjaGFyKiBUZXN0Q29u
dHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NOYW1lKCkKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkK
Kwogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCBh
bGxvd3MpCiB7CiAgICAgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGFsbG93czsKQEAgLTE0
MDAsOCArMTM3MSw4IEBAIHN0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZShj
b25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCiAKIHN0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmlu
Z1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwg
Y29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJl
Zj4gYmFzZVVSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpOwot
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVh
dGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7CisgICAgYXV0byBi
YXNlVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7CisgICAg
YXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJM
LmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7CiAgICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxD
b3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKIH0KIApAQCAtMTQxNSw4ICsxMzg2LDcgQEAg
c3RhdGljIHZvaWQgdXBkYXRlVGVzdE9wdGlvbnNGcm9tVGVzdEhlYWRlcihUZXN0T3B0aW9ucyYg
dGVzdE9wdGlvbnMsIGNvbnN0IHN0ZDoKICAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZSA9IGFic29s
dXRlUGF0aDsKICAgICBpZiAoZmlsZW5hbWUuZW1wdHkoKSkgewogICAgICAgICAvLyBHcm9zcy4g
TmVlZCB0byByZWR1Y2UgY29udmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBh
bmQgVVJMcy4KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMID0gYWRvcHRXSyhj
cmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAgICAgIGZpbGVuYW1lID0gdGVz
dFBhdGgod2tVUkwuZ2V0KCkpOworICAgICAgICBmaWxlbmFtZSA9IHRlc3RQYXRoKGFkb3B0V0so
Y3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpLmdldCgpKTsKICAgICB9CiAKICAgICBp
ZiAoZmlsZW5hbWUuZW1wdHkoKSkKQEAgLTE2MTUsNiArMTU4NSw3IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQog
fQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykgJiYgIVBMQVRGT1JNKENPQ09BKQor
CiBzdHJ1Y3QgQ29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0IHsKICAgICBleHBs
aWNpdCBDb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRleHQoVGVzdENvbnRyb2xsZXIm
IGNvbnRyb2xsZXIpCiAgICAgICAgIDogdGVzdENvbnRyb2xsZXIoY29udHJvbGxlcikKQEAgLTE2
NDIsMTUgKzE2MTMsOSBAQCBzdGF0aWMgc3RkOjpzdHJpbmcgY29udGVudEV4dGVuc2lvbkpTT05Q
YXRoKFdLVVJMUmVmIHVybCkKICAgICBpZiAocGF0aC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJu
IHBhdGggKyAiLmpzb24iOwogCi0gICAgYXV0byBwID0gYWRvcHRXSyhXS1VSTENvcHlQYXRoKHVy
bCkpOwotICAgIGF1dG8gYnVmZmVyID0gc3RkOjp2ZWN0b3I8Y2hhcj4oV0tTdHJpbmdHZXRNYXhp
bXVtVVRGOENTdHJpbmdTaXplKHAuZ2V0KCkpKTsKLSAgICBjb25zdCBhdXRvIGxlbmd0aCA9IFdL
U3RyaW5nR2V0VVRGOENTdHJpbmcocC5nZXQoKSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSk7Ci0gICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzIikgKyBz
dGQ6OnN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGggLSAxKSArICIuanNvbiI7CisgICAgcmV0
dXJuICJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzIiArIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0
aCh1cmwpKS5nZXQoKSkgKyAiLmpzb24iOwogfQotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oQ09D
T0EpCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIHZvaWQgVGVzdENvbnRyb2xsZXI6
OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0
ZXN0KQogewogICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRFeHRlbnNpb25zUGF0aCA9IGxpYnJhcnlQ
YXRoRm9yVGVzdGluZygpOwpAQCAtMTY3MCwxMyArMTYzNSwxMyBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlv
biYgdGVzdAogICAgIH0KIAogICAgIHN0ZDo6c3RyaW5nIGpzb25GaWxlQ29udGVudHMge3N0ZDo6
aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPihqc29uRmlsZSksIHN0ZDo6aXN0cmVhbWJ1Zl9pdGVy
YXRvcjxjaGFyPigpfTsKLSAgICBhdXRvIGpzb25Tb3VyY2UgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGpzb25GaWxlQ29udGVudHMuY19zdHIoKSkpOworICAgIGF1dG8g
anNvblNvdXJjZSA9IHRvV0soanNvbkZpbGVDb250ZW50cy5jX3N0cigpKTsKIAotICAgIGF1dG8g
c3RvcmVQYXRoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250ZW50
RXh0ZW5zaW9uc1BhdGgpKTsKKyAgICBhdXRvIHN0b3JlUGF0aCA9IHRvV0soY29udGVudEV4dGVu
c2lvbnNQYXRoKTsKICAgICBhdXRvIGV4dGVuc2lvblN0b3JlID0gYWRvcHRXSyhXS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVDcmVhdGUoc3RvcmVQYXRoLmdldCgpKSk7CiAgICAgQVNTRVJUKGV4
dGVuc2lvblN0b3JlKTsKIAotICAgIGF1dG8gZmlsdGVySWRlbnRpZmllciA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRlc3RDb250ZW50RXh0ZW5zaW9uIikpOworICAg
IGF1dG8gZmlsdGVySWRlbnRpZmllciA9IHRvV0soIlRlc3RDb250ZW50RXh0ZW5zaW9uIik7CiAK
ICAgICBDb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7
CiAgICAgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZShleHRlbnNpb25TdG9yZS5n
ZXQoKSwgZmlsdGVySWRlbnRpZmllci5nZXQoKSwganNvblNvdXJjZS5nZXQoKSwgJmNvbnRleHQs
IGNvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrKTsKQEAgLTE3MDEsMTggKzE2NjYsMjIgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50RXh0ZW5zaW9ucygpCiAKICAgICBXS1Vz
ZXJDb250ZW50Q29udHJvbGxlclJlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVycyh1c2VyQ29udGVu
dENvbnRyb2xsZXIoKSk7CiAKLSAgICBhdXRvIHN0b3JlUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoY29udGVudEV4dGVuc2lvbnNQYXRoKSk7CisgICAgYXV0byBz
dG9yZVBhdGggPSB0b1dLKGNvbnRlbnRFeHRlbnNpb25zUGF0aCk7CiAgICAgYXV0byBleHRlbnNp
b25TdG9yZSA9IGFkb3B0V0soV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ3JlYXRlKHN0b3Jl
UGF0aC5nZXQoKSkpOwogICAgIEFTU0VSVChleHRlbnNpb25TdG9yZSk7CiAKLSAgICBhdXRvIGZp
bHRlcklkZW50aWZpZXIgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJU
ZXN0Q29udGVudEV4dGVuc2lvbiIpKTsKKyAgICBhdXRvIGZpbHRlcklkZW50aWZpZXIgPSB0b1dL
KCJUZXN0Q29udGVudEV4dGVuc2lvbiIpOwogCiAgICAgQ29udGVudEV4dGVuc2lvblN0b3JlQ2Fs
bGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwogICAgIFdLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZVJlbW92ZShleHRlbnNpb25TdG9yZS5nZXQoKSwgZmlsdGVySWRlbnRpZmllci5nZXQoKSwg
JmNvbnRleHQsIGNvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrKTsKICAgICBydW5VbnRpbChj
b250ZXh0LmRvbmUsIG5vVGltZW91dCk7CiAgICAgQVNTRVJUKCFjb250ZXh0LmZpbHRlcik7CiB9
Ci0jZWxzZSAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykgJiYgIVBMQVRGT1JNKENPQ09BKQorCisjaWYgIUVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCisKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRl
bnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJikKIHsKIH0KQEAgLTE3MjAs
MTQgKzE2ODksMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVu
c2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6
cmVzZXRDb250ZW50RXh0ZW5zaW9ucygpCiB7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKLSNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCisKKyNlbmRpZiAvLyAhRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogY2xhc3MgQ29tbWFuZFRva2VuaXplciB7CiBwdWJs
aWM6CiAgICAgZXhwbGljaXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5w
dXQpCiAgICAgICAgIDogbV9pbnB1dChpbnB1dCkKLSAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0
b3IoMCkKICAgICB7CiAgICAgICAgIHB1bXAoKTsKICAgICB9CkBAIC0xNzQwLDcgKzE3MDgsNyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAnXCcnOwogICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBtX2lucHV0OwogICAgIHN0ZDo6c3RyaW5nIG1fbmV4dDsKLSAg
ICBzaXplX3QgbV9wb3NOZXh0U2VwYXJhdG9yOworICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0
b3IgeyAwIH07CiB9OwogCiB2b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAoKQpAQCAtMTgxNCw4
ICsxNzgyLDcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKiBpbnB1
dExpbmUpCiAgICAgCiAgICAgVGVzdE9wdGlvbnMgb3B0aW9ucyA9IHRlc3RPcHRpb25zRm9yVGVz
dChjb21tYW5kKTsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTCA9IGFkb3B0V0so
Y3JlYXRlVGVzdFVSTChjb21tYW5kLnBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAgbV9jdXJyZW50
SW52b2NhdGlvbiA9IG1ha2VVbmlxdWU8VGVzdEludm9jYXRpb24+KHdrVVJMLmdldCgpLCBvcHRp
b25zKTsKKyAgICBtX2N1cnJlbnRJbnZvY2F0aW9uID0gbWFrZVVuaXF1ZTxUZXN0SW52b2NhdGlv
bj4oYWRvcHRXSyhjcmVhdGVUZXN0VVJMKGNvbW1hbmQucGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQo
KSwgb3B0aW9ucyk7CiAKICAgICBpZiAoY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzIHx8IG1fc2hv
dWxkRHVtcFBpeGVsc0ZvckFsbFRlc3RzKQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5z
ZXRJc1BpeGVsVGVzdChjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKQEAgLTE5NDQsMTggKzE5
MTEsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpncHVQcm9jZXNzRGlkQ3Jhc2goV0tDb250ZXh0
UmVmIGNvbnRleHQsIFdLUHJvY2Vzc0lEIHByb2NlcwogICAgIHN0YXRpY19jYXN0PFRlc3RDb250
cm9sbGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5ncHVQcm9jZXNzRGlkQ3Jh
c2gocHJvY2Vzc0lEKTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURv
d25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGJvb2wgc3luY2hyb25vdXMpCit2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNl
aXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rp
b25hcnksIGJvb2wgc3luY2hyb25vdXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGtleUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleSIpKTsK
LSAgICBXS1N0cmluZ1JlZiBrZXkgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGtleUtleS5nZXQoKSkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb2RpZmllcnNLZXkuZ2V0KCkpKSkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvY2F0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiTG9jYXRpb24iKSk7Ci0gICAgdW5zaWduZWQgbG9jYXRpb24g
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGxvY2F0aW9uS2V5LmdldCgpKSkpKTsKLQotICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+a2V5RG93
bihrZXksIG1vZGlmaWVycywgbG9jYXRpb24pOworICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+a2V5
RG93bihzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAiS2V5IiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25h
cnksICJNb2RpZmllcnMiKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkxvY2F0aW9uIikpOwog
fQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50c0xpc3QoV0tB
cnJheVJlZiBsaXZlRG9jdW1lbnRMaXN0KQpAQCAtMTk2NCwxOCArMTkyMiw4IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdChXS0FycmF5UmVmIGxpdmVE
b2N1bWVudExpc3QpCiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+IGRvY3VtZW50SW5m
bzsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bURvY3VtZW50czsgKytpKSB7Ci0gICAg
ICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGxpdmVEb2N1bWVudExp
c3QsIGkpOwotICAgICAgICBpZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSkgewotICAgICAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIGxpdmVEb2N1
bWVudEl0ZW0gPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KGl0ZW0pOwotCi0gICAgICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJpZCIpKTsKLSAgICAgICAgICAgIFdLVUludDY0UmVmIGRvY3Vt
ZW50SUQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShsaXZlRG9jdW1lbnRJdGVtLCBpZEtleS5nZXQoKSkpOwotCi0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdXJsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygidXJsIikpOwotICAgICAgICAgICAgV0tTdHJpbmdSZWYgZG9jdW1lbnRVUkwgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsaXZlRG9j
dW1lbnRJdGVtLCB1cmxLZXkuZ2V0KCkpKTsKLQotICAgICAgICAgICAgZG9jdW1lbnRJbmZvLmFk
ZChXS1VJbnQ2NEdldFZhbHVlKGRvY3VtZW50SUQpLCB0b1dURlN0cmluZyhkb2N1bWVudFVSTCkp
OwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFs
dWUoV0tBcnJheUdldEl0ZW1BdEluZGV4KGxpdmVEb2N1bWVudExpc3QsIGkpKSkKKyAgICAgICAg
ICAgIGRvY3VtZW50SW5mby5hZGQodWludDY0VmFsdWUoZGljdGlvbmFyeSwgImlkIiksIHRvV1RG
U3RyaW5nKHN0cmluZ1ZhbHVlKGRpY3Rpb25hcnksICJ1cmwiKSkpOwogICAgIH0KIAogICAgIGlm
ICghZG9jdW1lbnRJbmZvLnNpemUoKSkgewpAQCAtMjAwNyw2MCArMTk1NSwzNSBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmlu
Z1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBpZiAobV9zdGF0ZSAhPSBSdW5uaW5nVGVzdCkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViTWVzc2FnZU5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCkpKTsKLQotICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpIHx8IFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsKLSAgICAgICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBidXR0b25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b24iKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBidXR0
b24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGJ1dHRvbktleS5nZXQoKSkpKSk7CisgICAgICAgIGF1dG8gZGljdGlvbmFyeSA9IGRpY3Rp
b25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc3ViTWVzc2FnZU5hbWUgPSBz
dHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAiU3ViTWVzc2FnZSIpOwogCi0gICAgICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXJzIikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlm
aWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2FzdDxXS0V2ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9kaWZpZXJzS2V5LmdldCgpKSkpKTsKLQotICAgICAg
ICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKQotICAgICAg
ICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VEb3duKGJ1dHRvbiwgbW9kaWZpZXJz
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHkt
Pm1vdXNlVXAoYnV0dG9uLCBtb2RpZmllcnMpOworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKSB7CisgICAgICAgICAg
ICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRG93bih1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAi
QnV0dG9uIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KIAorICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlVXAiKSkgeworICAgICAgICAgICAgbV9l
dmVudFNlbmRlclByb3h5LT5tb3VzZVVwKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24i
KSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKHN1Yk1lc3NhZ2VOYW1lLCAiS2V5RG93biIpKSB7Ci0gICAgICAgICAgICBkaWRSZWNlaXZl
S2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBm
YWxzZSk7CisgICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGUoZGljdGlvbmFyeSwgZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5h
bWUsICJNb3VzZVNjcm9sbEJ5IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsK
LSAgICAgICAgICAgIGRvdWJsZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Rv
dWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHhLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAg
ICAgICAgIGRvdWJsZSB5ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXku
Z2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAg
ICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVNjcm9sbEJ5KHgsIHkpOworICAgICAgICAg
ICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVNjcm9sbEJ5KGRvdWJsZVZhbHVlKGRpY3Rpb25h
cnksICJYIiksIGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJZIikpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFz
ZXMiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91
YmxlIHggPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAg
ICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQo
KSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHBoYXNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGhhc2Ui
KSk7Ci0gICAgICAgICAgICBpbnQgcGhhc2UgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwaGFzZUtleS5nZXQoKSkpKSk7Ci0gICAgICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9tZW50dW1LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJNb21lbnR1bSIpKTsKLSAgICAgICAgICAgIGludCBtb21lbnR1
bSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1v
bWVudHVtS2V5LmdldCgpKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9yd2Fy
ZCB0byBXZWJQcm9jZXNzCisgICAgICAgICAgICBhdXRvIHggPSBkb3VibGVWYWx1ZShkaWN0aW9u
YXJ5LCAiWCIpOworICAgICAgICAgICAgYXV0byB5ID0gZG91YmxlVmFsdWUoZGljdGlvbmFyeSwg
IlkiKTsKKyAgICAgICAgICAgIGF1dG8gcGhhc2UgPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAi
UGhhc2UiKTsKKyAgICAgICAgICAgIGF1dG8gbW9tZW50dW0gPSB1aW50NjRWYWx1ZShkaWN0aW9u
YXJ5LCAiTW9tZW50dW0iKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VT
Y3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKHgsIHksIHBoYXNlLCBtb21lbnR1bSk7
Ci0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMDgzLDQyICsyMDA2LDI2
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYKICAgICAgICAgaWYgKG1fc3RhdGUgIT0gUnVubmlu
Z1Rlc3QpCiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIHN1Yk1lc3NhZ2VOYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJNZXNzYWdlS2V5LmdldCgp
KSk7CisgICAgICAgIGF1dG8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gc3ViTWVzc2FnZU5hbWUgPSBzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5
LCAiU3ViTWVzc2FnZSIpOwogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKHN1Yk1lc3NhZ2VOYW1lLCAiS2V5RG93biIpKSB7Ci0gICAgICAgICAgICBkaWRSZWNlaXZl
S2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0
cnVlKTsKLQorICAgICAgICAgICAgZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKGRpY3Rpb25hcnksIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSB8fCBXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VVcCIpKSB7Ci0gICAgICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uIikpOwotICAgICAgICAgICAgdW5zaWduZWQg
YnV0dG9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBidXR0b25LZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiTW9kaWZpZXJzIikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2Rp
ZmllcnMgPSBzdGF0aWNfY2FzdDxXS0V2ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgbW9kaWZpZXJzS2V5LmdldCgpKSkpKTsKKyAgICAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSkgewor
ICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZURvd24odWludDY0VmFsdWUoZGlj
dGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJzIikp
OworICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAg
ICB9CiAKLSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURv
d24iKSkKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRG93bihidXR0
b24sIG1vZGlmaWVycyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5tb3VzZVVwKGJ1dHRvbiwgbW9kaWZpZXJzKTsKKyAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsK
KyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VVcCh1aW50NjRWYWx1ZShkaWN0
aW9uYXJ5LCAiQnV0dG9uIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7
CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdl
TmFtZSwgIk1vdXNlTW92ZVRvIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsK
LSAgICAgICAgICAgIGRvdWJsZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Rv
dWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHhLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAg
ICAgICAgIGRvdWJsZSB5ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXku
Z2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAg
ICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZU1vdmVUbyh4LCB5KTsKKyAgICAgICAgICAg
IG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VNb3ZlVG8oZG91YmxlVmFsdWUoZGljdGlvbmFyeSwg
IlgiKSwgZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlkiKSk7CiAgICAgICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIApAQCAtMjE0NCw4MSArMjA1
MSw0OCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmCiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRm9yY2VD
aGFuZ2VkIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb3JjZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvcmNlIikpOwotICAg
ICAgICAgICAgZG91YmxlIGZvcmNlID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Rv
dWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGZvcmNlS2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1v
dXNlRm9yY2VDaGFuZ2VkKGZvcmNlKTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+
bW91c2VGb3JjZUNoYW5nZWQoZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIkZvcmNlIikpOwogICAg
ICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiQ29udGludW91c01vdXNlU2Nyb2xsQnkiKSkgewot
ICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBX
S0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLQotICAgICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBXS0RvdWJs
ZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhZ2VkS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUGFnZWQiKSk7Ci0gICAgICAgICAgICBib29sIHBhZ2VkID0gc3Rh
dGljX2Nhc3Q8Ym9vbD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBhZ2VkS2V5
LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCisgICAg
ICAgICAgICBhdXRvIHggPSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAgICAgICAg
ICAgYXV0byB5ID0gZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKKyAgICAgICAgICAgIGF1
dG8gcGFnZWQgPSBib29sZWFuVmFsdWUoZGljdGlvbmFyeSwgIlBhZ2VkIik7CiAgICAgICAgICAg
ICBtX2V2ZW50U2VuZGVyUHJveHktPmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KHgsIHksIHBhZ2Vk
KTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3Nh
Z2VOYW1lLCAiTGVhcEZvcndhcmQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHRpbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJU
aW1lSW5NaWxsaXNlY29uZHMiKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0aW1lID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0aW1lS2V5
LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5sZWFwRm9yd2Fy
ZCh0aW1lKTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bGVhcEZvcndhcmQodWlu
dDY0VmFsdWUoZGljdGlvbmFyeSwgIlRpbWVJbk1pbGxpc2Vjb25kcyIpKTsKICAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcoc3ViTWVzc2FnZU5hbWUsICJBZGRUb3VjaFBvaW50IikpIHsKLSAgICAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGludCB5ID0gc3RhdGljX2Nhc3Q8
aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKSk7Ci0K
LSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+YWRkVG91Y2hQb2ludCh4LCB5KTsKKyAg
ICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+YWRkVG91Y2hQb2ludCh1aW50NjRWYWx1ZShk
aWN0aW9uYXJ5LCAiWCIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpKTsKICAgICAgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiVXBk
YXRlVG91Y2hQb2ludCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
aW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIp
KTsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGluZGV4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpKTsKLQotICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgaW50IHkgPSBzdGF0aWNf
Y2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkp
KTsKLQorICAgICAgICAgICAgYXV0byBpbmRleCA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJ
bmRleCIpOworICAgICAgICAgICAgYXV0byB4ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlgi
KTsKKyAgICAgICAgICAgIGF1dG8geSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJZIik7CiAg
ICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnVwZGF0ZVRvdWNoUG9pbnQoaW5kZXgsIHgs
IHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVz
c2FnZU5hbWUsICJTZXRUb3VjaE1vZGlmaWVyIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtb2RpZmllcktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIk1vZGlmaWVyIikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2Rp
ZmllciA9IHN0YXRpY19jYXN0PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBtb2RpZmllcktleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBlbmFibGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJFbmFibGUiKSk7Ci0gICAgICAgICAgICBib29sIGVuYWJsZSA9IHN0YXRp
Y19jYXN0PGJvb2w+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBlbmFibGVLZXku
Z2V0KCkpKSkpOwotCisgICAgICAgICAgICBhdXRvIG1vZGlmaWVyID0gdWludDY0VmFsdWUoZGlj
dGlvbmFyeSwgIk1vZGlmaWVyIik7CisgICAgICAgICAgICBhdXRvIGVuYWJsZSA9IGJvb2xlYW5W
YWx1ZShkaWN0aW9uYXJ5LCAiRW5hYmxlIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJv
eHktPnNldFRvdWNoTW9kaWZpZXIobW9kaWZpZXIsIGVuYWJsZSk7CiAgICAgICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIlNldFRvdWNoUG9p
bnRSYWRpdXMiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNYIikpOwotICAg
ICAgICAgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJS
YWRpdXNZIikpOwotICAgICAgICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQorICAgICAgICAgICAg
YXV0byB4ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlJhZGl1c1giKTsKKyAgICAgICAgICAg
IGF1dG8geSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJSYWRpdXNZIik7CiAgICAgICAgICAg
ICBtX2V2ZW50U2VuZGVyUHJveHktPnNldFRvdWNoUG9pbnRSYWRpdXMoeCwgeSk7CiAgICAgICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KQEAgLTIy
NDksMTYgKzIxMjMsMTIgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9u
b3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZgogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJS
ZWxlYXNlVG91Y2hQb2ludCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRl
eCIpKTsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGluZGV4S2V5LmdldCgpKSkpKTsKLSAgICAgICAgICAg
IG1fZXZlbnRTZW5kZXJQcm94eS0+cmVsZWFzZVRvdWNoUG9pbnQoaW5kZXgpOworICAgICAgICAg
ICAgbV9ldmVudFNlbmRlclByb3h5LT5yZWxlYXNlVG91Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0
aW9uYXJ5LCAiSW5kZXgiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
bnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIkNhbmNlbFRvdWNoUG9pbnQiKSkgewotICAgICAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBz
dGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpbmRleEtl
eS5nZXQoKSkpKSk7Ci0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmNhbmNlbFRvdWNo
UG9pbnQoaW5kZXgpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5jYW5jZWxUb3Vj
aFBvaW50KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJbmRleCIpKTsKICAgICAgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0y
Mjc1LDE0ICsyMTQ1LDE2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJv
bm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYKICAgICB9OwogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBbHdheXNB
Y2NlcHRDb29raWVzIikpIHsKLSAgICAgICAgV0tCb29sZWFuUmVmIGFjY2VwdCA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS0hUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoYWNjZXB0KSA/IGtXS0hUVFBDb29r
aWVBY2NlcHRQb2xpY3lBbHdheXMgOiBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21N
YWluRG9jdW1lbnREb21haW47CisgICAgICAgIGF1dG8gcG9saWN5ID0gV0tCb29sZWFuR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpCisgICAgICAgICAgICA/
IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMKKyAgICAgICAgICAgIDoga1dLSFRUUENv
b2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAgICAgICByZXR1
cm4gc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3ksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29va2llcyIpKSB7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiBhY2NlcHQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgV0tIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSA9IFdLQm9vbGVh
bkdldFZhbHVlKGFjY2VwdCkgPyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5RXhjbHVzaXZlbHlG
cm9tTWFpbkRvY3VtZW50RG9tYWluIDoga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9t
TWFpbkRvY3VtZW50RG9tYWluOworICAgICAgICBhdXRvIHBvbGljeSA9IFdLQm9vbGVhbkdldFZh
bHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKQorICAgICAgICAgICAg
PyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9t
YWluCisgICAgICAgICAgICA6IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5E
b2N1bWVudERvbWFpbjsKICAgICAgICAgcmV0dXJuIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
cG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfQogCkBAIC0yNDAzLDEy
ICsyMjc1LDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wg
c2hvdWxkQmxvY2spCiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgYXV0byBwb2xpY3kgPSBzaG91
bGRCbG9jayA/IGtXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3lCbG9jayA6IGtXS1BsdWdpbkxvYWRD
bGllbnRQb2xpY3lBbGxvdzsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lTmV0
c2NhcGUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb20uYXBwbGUu
dGVzdG5ldHNjYXBlcGx1Z2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1l
Rmxhc2ggPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb20ubWFjcm9t
ZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBlbXB0eVN0cmluZyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIp
KTsKLSAgICBXS0NvbnRleHRTZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQo
KSwgcG9saWN5LCBlbXB0eVN0cmluZy5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBlbXB0eVN0
cmluZy5nZXQoKSk7Ci0gICAgV0tDb250ZXh0U2V0UGx1Z2luTG9hZENsaWVudFBvbGljeShtX2Nv
bnRleHQuZ2V0KCksIHBvbGljeSwgZW1wdHlTdHJpbmcuZ2V0KCksIG5hbWVGbGFzaC5nZXQoKSwg
ZW1wdHlTdHJpbmcuZ2V0KCkpOworICAgIFdLQ29udGV4dFNldFBsdWdpbkxvYWRDbGllbnRQb2xp
Y3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ksIHRvV0soIiIpLmdldCgpLCB0b1dLKCJjb20uYXBw
bGUudGVzdG5ldHNjYXBlcGx1Z2luIikuZ2V0KCksIHRvV0soIiIpLmdldCgpKTsKKyAgICBXS0Nv
bnRleHRTZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCB0
b1dLKCIiKS5nZXQoKSwgdG9XSygiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbiIp
LmdldCgpLCB0b1dLKCIiKS5nZXQoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjQyMywyOSArMjI5MSwy
NCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKGNvbnN0IFN0
cmluZyYgbW9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZUFycmF5UmVmPiBlbXB0eUFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0
ZSgpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWxsT3JpZ2lucyA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3BlY2lmaWNPcmlnaW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJsb2NhbGhvc3QiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGRm
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk15IHBlcnNvbmFs
IFBERiIpKTsKLSAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgp
LCBhbGxPcmlnaW5zLmdldCgpLCBwZGZOYW1lLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0
eUFycmF5LmdldCgpKTsKKyAgICBhdXRvIGVtcHR5QXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFy
cmF5Q3JlYXRlKCkpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVOZXRzY2Fw
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbS5hcHBsZS50ZXN0
bmV0c2NhcGVwbHVnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBl
TmV0c2NhcGUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhcHBsaWNh
dGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZUFycmF5UmVmPiBtaW1lVHlwZXNOZXRzY2FwZSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7Ci0gICAgV0tBcnJheUFwcGVuZEl0ZW0obWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIG1p
bWVUeXBlTmV0c2NhcGUuZ2V0KCkpOworICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbiht
X2NvbnRleHQuZ2V0KCksIHRvV0soIiIpLmdldCgpLCB0b1dLKCJNeSBwZXJzb25hbCBQREYiKS5n
ZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CiAKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbmFtZVBkZiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIldlYktpdCBidWlsdC1pbiBQREYiKSk7CisgICAgYXV0byBuYW1lTmV0c2NhcGUg
PSB0b1dLKCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1Z2luIik7CisgICAgYXV0byBtaW1lVHlw
ZXNOZXRzY2FwZSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgV0tBcnJh
eUFwcGVuZEl0ZW0obWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIHRvV0soImFwcGxpY2F0aW9uL3gt
d2Via2l0LXRlc3QtbmV0c2NhcGUiKS5nZXQoKSk7CisgICAgYXV0byBuYW1lUGRmID0gdG9XSygi
V2ViS2l0IGJ1aWx0LWluIFBERiIpOwogCiAgICAgaWYgKG1fdW5zdXBwb3J0ZWRQbHVnaW5Nb2Rl
ID09ICJhbGxPcmlnaW5zIikgewotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4o
bV9jb250ZXh0LmdldCgpLCBhbGxPcmlnaW5zLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1p
bWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKLSAgICAgICAgV0tDb250
ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgYWxsT3JpZ2lucy5nZXQoKSwg
bmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAg
ICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0soIiIp
LmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0
eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29u
dGV4dC5nZXQoKSwgdG9XSygiIikuZ2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0
KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KG1fdW5zdXBwb3J0ZWRQbHVnaW5Nb2RlID09ICJzcGVjaWZpY09yaWdpbiIpIHsKLSAgICAgICAg
V0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgc3BlY2lmaWNPcmln
aW4uZ2V0KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVt
cHR5QXJyYXkuZ2V0KCkpOwotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9j
b250ZXh0LmdldCgpLCBzcGVjaWZpY09yaWdpbi5nZXQoKSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlB
cnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFkZFN1cHBv
cnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0soImxvY2FsaG9zdCIpLmdldCgpLCBuYW1l
TmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgp
KTsKKyAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwg
dG9XSygibG9jYWxob3N0IikuZ2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCks
IGVtcHR5QXJyYXkuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMjQ5MSwx
NCArMjM1NCwxMiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlKFdLUGFnZVJlZiBwYWdlLCBXS1BybwogewogICAgIGlmIChtX3Nob3Vs
ZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpCiAgICAgICAgIG1fY3Vy
cmVudEludm9jYXRpb24tPm91dHB1dFRleHQoImNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2VcbiIpOwotICAgIFdLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWUg
YXV0aGVudGljYXRpb25TY2hlbWUgPSBXS1Byb3RlY3Rpb25TcGFjZUdldEF1dGhlbnRpY2F0aW9u
U2NoZW1lKHByb3RlY3Rpb25TcGFjZSk7Ci0gICAgCi0gICAgaWYgKGF1dGhlbnRpY2F0aW9uU2No
ZW1lID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RF
dmFsdWF0aW9uUmVxdWVzdGVkKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGhvc3QgPSB0b1NURChh
ZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkp
OworICAgIGF1dG8gc2NoZW1lID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRBdXRoZW50aWNhdGlvblNj
aGVtZShwcm90ZWN0aW9uU3BhY2UpOworICAgIGlmIChzY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNw
YWNlQXV0aGVudGljYXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQpIHsK
KyAgICAgICAgYXV0byBob3N0ID0gdG9TVEQoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlI
b3N0KHByb3RlY3Rpb25TcGFjZSkpKTsKICAgICAgICAgcmV0dXJuIGhvc3QgPT0gImxvY2FsaG9z
dCIgfHwgaG9zdCA9PSAiMTI3LjAuMC4xIiB8fCAobV9hbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVG
b3JBbGxvd2VkSG9zdHMgJiYgbV9hbGxvd2VkSG9zdHMuZmluZChob3N0KSAhPSBtX2FsbG93ZWRI
b3N0cy5lbmQoKSk7CiAgICAgfQotICAgIAotICAgIHJldHVybiBhdXRoZW50aWNhdGlvblNjaGVt
ZSA8PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdlc3QgfHwg
YXV0aGVudGljYXRpb25TY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVPQXV0aDsKKyAgICByZXR1cm4gc2NoZW1lIDw9IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdCB8fCBzY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNl
QXV0aGVudGljYXRpb25TY2hlbWVPQXV0aDsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlk
RmluaXNoTmF2aWdhdGlvbihXS1BhZ2VSZWYgcGFnZSwgV0tOYXZpZ2F0aW9uUmVmIG5hdmlnYXRp
b24pCkBAIC0yNTA2LDggKzIzNjcsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hO
YXZpZ2F0aW9uKFdLUGFnZVJlZiBwYWdlLCBXS05hdmlnYXRpb25SZWYgbmF2aWdhdAogICAgIGlm
IChtX3N0YXRlICE9IFJlc2V0dGluZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5Q
dHI8V0tVUkxSZWY+IHdrVVJMID0gYWRvcHRXSyhXS0ZyYW1lQ29weVVSTChXS1BhZ2VHZXRNYWlu
RnJhbWUocGFnZSkpKTsKLSAgICBpZiAoIVdLVVJMSXNFcXVhbCh3a1VSTC5nZXQoKSwgYmxhbmtV
UkwoKSkpCisgICAgaWYgKCFXS1VSTElzRXF1YWwoYWRvcHRXSyhXS0ZyYW1lQ29weVVSTChXS1Bh
Z2VHZXRNYWluRnJhbWUocGFnZSkpKS5nZXQoKSwgYmxhbmtVUkwoKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fZG9uZVJlc2V0dGluZyA9IHRydWU7CkBAIC0yNTI3LDcgKzIzODcsNyBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQ
YWdlUmVmIHBhZ2UsIFdLQXV0aGVudAogICAgICAgICBtX3NlcnZlclRydXN0RXZhbHVhdGlvbkNh
bGxiYWNrQ2FsbHNDb3VudCsrOwogCiAgICAgICAgIGlmIChtX2FsbG93c0FueVNTTENlcnRpZmlj
YXRlKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS0NyZWRlbnRpYWxSZWY+IGNyZWRlbnRp
YWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh0b1dLKCJhY2NlcHQgc2VydmVyIHRydXN0
IikuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSk7
CisgICAgICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0
ZSh0b1dLKCJhY2NlcHQgc2VydmVyIHRydXN0IikuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBrV0tD
cmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSk7CiAgICAgICAgICAgICBXS0F1dGhlbnRpY2F0aW9u
RGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgY3JlZGVudGlh
bC5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1NDEsOSArMjQw
MSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShXS1BhZ2VSZWYgcGFnZSwgV0tBdXRoZW50CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBzdGQ6OnN0cmluZyBob3N0ID0gdG9TVEQoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNv
cHlIb3N0KHByb3RlY3Rpb25TcGFjZSkpLmdldCgpKTsKKyAgICBhdXRvIGhvc3QgPSB0b1dURlN0
cmluZyhhZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSku
Z2V0KCkpOwogICAgIGludCBwb3J0ID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRQb3J0KHByb3RlY3Rp
b25TcGFjZSk7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBtYWtlU3RyaW5nKGhvc3QuY19zdHIoKSwg
JzonLCBwb3J0LCAiIC0gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIC0gIiwgdG9T
dHJpbmcoYXV0aGVudGljYXRpb25TY2hlbWUpLCAiIC0gIik7CisgICAgU3RyaW5nIG1lc3NhZ2Ug
PSBtYWtlU3RyaW5nKGhvc3QsICc6JywgcG9ydCwgIiAtIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSAtICIsIHRvU3RyaW5nKGF1dGhlbnRpY2F0aW9uU2NoZW1lKSwgIiAtICIpOwog
ICAgIGlmICghbV9oYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKQogICAgICAgICBtZXNz
YWdlLmFwcGVuZCgiU2ltdWxhdGluZyBjYW5jZWxsZWQgYXV0aGVudGljYXRpb24gc2hlZXRcbiIp
OwogICAgIGVsc2UKQEAgLTI1NTQsMTMgKzI0MTQsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdLUGFnZVJlZiBwYWdlLCBXS0F1dGhl
bnQKICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFs
KGRlY2lzaW9uTGlzdGVuZXIsIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB1c2VybmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcobV9hdXRoZW50aWNhdGlvblVzZXJuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFzc3dvcmQgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKG1fYXV0aGVudGljYXRpb25QYXNzd29yZC51dGY4KCkuZGF0YSgp
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tDcmVkZW50aWFsUmVmPiBjcmVkZW50aWFsID0gYWRvcHRX
SyhXS0NyZWRlbnRpYWxDcmVhdGUodXNlcm5hbWUuZ2V0KCksIHBhc3N3b3JkLmdldCgpLCBrV0tD
cmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKSk7CisgICAgYXV0byBjcmVkZW50aWFsID0g
YWRvcHRXSyhXS0NyZWRlbnRpYWxDcmVhdGUodG9XSyhtX2F1dGhlbnRpY2F0aW9uVXNlcm5hbWUp
LmdldCgpLCB0b1dLKG1fYXV0aGVudGljYXRpb25QYXNzd29yZCkuZ2V0KCksIGtXS0NyZWRlbnRp
YWxQZXJzaXN0ZW5jZUZvclNlc3Npb24pKTsKICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25M
aXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgY3JlZGVudGlhbC5nZXQoKSk7
CiB9CiAKLSAgICAKKwogLy8gV0tDb250ZXh0RG93bmxvYWRDbGllbnQKIAogdm9pZCBUZXN0Q29u
dHJvbGxlcjo6ZG93bmxvYWREaWRTdGFydChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tEb3dubG9h
ZFJlZiBkb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTI3MDQsOSArMjU2Miw5
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGVu
YWJsZWQpCiAgICAgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdElm
UG9zc2libGUoKTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJh
Y3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNI
ZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQs
IGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCkKK3ZvaWQgVGVzdENv
bnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91
YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRl
LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVh
ZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVs
KQogewotICAgIG1fZ2VvbG9jYXRpb25Qcm92aWRlci0+c2V0UG9zaXRpb24obGF0aXR1ZGUsIGxv
bmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0Fs
dGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGlu
ZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7
CisgICAgbV9nZW9sb2NhdGlvblByb3ZpZGVyLT5zZXRQb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0
dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGUsIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVk
LCBmbG9vckxldmVsKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSkKQEAg
LTI4NTYsOSArMjcxNCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2Vy
TWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luKFdLRnJhbWVSZWYgZnJhbWUsCiB7CiAgICAgYXV0byBv
cmlnaW5IYXNoID0gdXNlck1lZGlhT3JpZ2luSGFzaCh1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwg
dG9wTGV2ZWxEb2N1bWVudE9yaWdpbik7CiAgICAgYXV0byBzYWx0ID0gc2FsdEZvck9yaWdpbihm
cmFtZSwgb3JpZ2luSGFzaCk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNhbHRTdHJp
bmcgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNhbHQudXRmOCgpLmRh
dGEoKSkpOwotCi0gICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tTZXRVc2VyTWVkaWFBY2Nl
c3NJbmZvKGNoZWNrUmVxdWVzdCwgc2FsdFN0cmluZy5nZXQoKSwgc2V0dGluZ3NGb3JPcmlnaW4o
b3JpZ2luSGFzaCkucGVyc2lzdGVudFBlcm1pc3Npb24oKSk7CisgICAgV0tVc2VyTWVkaWFQZXJt
aXNzaW9uQ2hlY2tTZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGNoZWNrUmVxdWVzdCwgdG9XSyhzYWx0
KS5nZXQoKSwgc2V0dGluZ3NGb3JPcmlnaW4ob3JpZ2luSGFzaCkucGVyc2lzdGVudFBlcm1pc3Np
b24oKSk7CiB9CiAKIGJvb2wgVGVzdENvbnRyb2xsZXI6OmhhbmRsZURldmljZU9yaWVudGF0aW9u
QW5kTW90aW9uQWNjZXNzUmVxdWVzdChXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKQEAgLTI5
MTQsOCArMjc3MCw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRlY2lkZVBvbGljeUZvclVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGF1ZGlvRGV2aWNl
VUlEcyA9IGFkb3B0V0soV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdEF1ZGlvRGV2aWNlVUlE
cyhyZXF1ZXN0KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IHZpZGVvRGV2aWNl
VUlEcyA9IGFkb3B0V0soV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFZpZGVvRGV2aWNlVUlE
cyhyZXF1ZXN0KSk7CisgICAgICAgIGF1dG8gYXVkaW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1Vz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0QXVkaW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKKyAgICAg
ICAgYXV0byB2aWRlb0RldmljZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RWaWRlb0RldmljZVVJRHMocmVxdWVzdCkpOwogCiAgICAgICAgIGlmICghV0tBcnJheUdl
dFNpemUodmlkZW9EZXZpY2VVSURzLmdldCgpKSAmJiAhV0tBcnJheUdldFNpemUoYXVkaW9EZXZp
Y2VVSURzLmdldCgpKSkgewogICAgICAgICAgICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dERlbnkocmVxdWVzdCwga1dLTm9Db25zdHJhaW50cyk7CkBAIC0yOTI2LDEzICsyNzgyLDEzIEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0SWZQb3NzaWJsZSgpCiAgICAgICAgIGlmIChXS0FycmF5R2V0U2l6ZSh2aWRlb0Rldmlj
ZVVJRHMuZ2V0KCkpKQogICAgICAgICAgICAgdmlkZW9EZXZpY2VVSUQgPSByZWludGVycHJldF9j
YXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgodmlkZW9EZXZpY2VVSURzLmdl
dCgpLCAwKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZpZGVvRGV2aWNlVUlEID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgICAgICAgICAgdmlk
ZW9EZXZpY2VVSUQgPSB0b1dLKCIiKTsKIAogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gYXVkaW9EZXZpY2VVSUQ7CiAgICAgICAgIGlmIChXS0FycmF5R2V0U2l6ZShhdWRpb0Rldmlj
ZVVJRHMuZ2V0KCkpKQogICAgICAgICAgICAgYXVkaW9EZXZpY2VVSUQgPSByZWludGVycHJldF9j
YXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoYXVkaW9EZXZpY2VVSURzLmdl
dCgpLCAwKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGF1ZGlvRGV2aWNlVUlEID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgICAgICAgICAgYXVk
aW9EZXZpY2VVSUQgPSB0b1dLKCIiKTsKIAogICAgICAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0QWxsb3cocmVxdWVzdCwgYXVkaW9EZXZpY2VVSUQuZ2V0KCksIHZpZGVvRGV2aWNlVUlE
LmdldCgpKTsKICAgICB9CkBAIC0zMDU2LDEyICsyOTEyLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoV0tOYXZpZ2F0aW9uRGF0YVJlZiBuYXZp
Z2F0aW8KICAgICBpZiAoIW1fc2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgLy8gVVJMCiAgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLTmF2aWdh
dGlvbkRhdGFDb3B5VVJMKG5hdmlnYXRpb25EYXRhKSk7CiAgICAgYXV0byB1cmxTdHJpbmcgPSB0
b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKSk7Ci0gICAgLy8g
VGl0bGUKICAgICBhdXRvIHRpdGxlID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS05hdmlnYXRpb25E
YXRhQ29weVRpdGxlKG5hdmlnYXRpb25EYXRhKSkpOwotICAgIC8vIEhUVFAgbWV0aG9kCiAgICAg
YXV0byByZXF1ZXN0ID0gYWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weU9yaWdpbmFsUmVxdWVz
dChuYXZpZ2F0aW9uRGF0YSkpOwogICAgIGF1dG8gbWV0aG9kID0gdG9XVEZTdHJpbmcoYWRvcHRX
SyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1ZXN0LmdldCgpKSkpOwogCkBAIC0zMjA2
LDcgKzMwNTksNyBAQCB2b2lkIGdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2sodm9p
ZCogdXNlckRhdGEsIFdLQXJyYXlSZWYgZG9tYWluTGlzdCkKIAogICAgIFZlY3RvcjxTdHJpbmc+
IHJlc3VsdERvbWFpbnM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdLQXJyYXlHZXRT
aXplKGRvbWFpbkxpc3QpOyBpKyspIHsKLSAgICAgICAgYXV0byBkb21haW4gPSAgcmVpbnRlcnBy
ZXRfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbkxpc3QsIGkp
KTsKKyAgICAgICAgYXV0byBkb21haW4gPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihX
S0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluTGlzdCwgaSkpOwogICAgICAgICBhdXRvIGJ1ZmZl
ciA9IHN0ZDo6dmVjdG9yPGNoYXI+KFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShk
b21haW4pKTsKICAgICAgICAgYXV0byBzdHJpbmdMZW5ndGggPSBXS1N0cmluZ0dldFVURjhDU3Ry
aW5nKGRvbWFpbiwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CiAKQEAgLTM5NzgsNyAr
MzgzMSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlu
cygpCiB2b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3Jr
UHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7CiAgICAgSW5BcHBCcm93
c2VyUHJpdmFjeUNhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKLSAgICBXS1dlYnNpdGVE
YXRhU3RvcmVVcGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJv
bGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIudXRmOCgpLmRhdGEoKSkpLmdldCgpLCAmY29udGV4dCwg
aW5BcHBCcm93c2VyUHJpdmFjeVZvaWRSZXN1bHRDYWxsYmFjayk7CisgICAgV0tXZWJzaXRlRGF0
YVN0b3JlVXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoVGVzdENvbnRyb2xs
ZXI6OndlYnNpdGVEYXRhU3RvcmUoKSwgdG9XSyhidW5kbGVJZGVudGlmaWVyKS5nZXQoKSwgJmNv
bnRleHQsIGluQXBwQnJvd3NlclByaXZhY3lWb2lkUmVzdWx0Q2FsbGJhY2spOwogICAgIHJ1blVu
dGlsKGNvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oCmluZGV4IGY5NGQ1N2MxNDdiMzE2ZjA3OGZhODVmMjIwZjQwNzYwOTQx
MTNjOGMuLmZmODM5NGVjMDM4NzdhNmRiYzBkYzRiM2U0OGMwZWY0ZjNmM2IzMzkgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgLy8gR2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBl
cm1pc3Npb24oYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92
aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3Vy
YWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJs
ZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRl
c0Zsb29yTGV2ZWwsIGRvdWJsZSBmbG9vckxldmVsKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFj
Y3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0
dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBz
cGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKTsKICAgICB2b2lkIHNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2Up
OwogICAgIHZvaWQgaGFuZGxlR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXS0dlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RSZWYpOwogICAgIGJvb2wgaXNHZW9sb2NhdGlvblByb3ZpZGVy
QWN0aXZlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJ
bnZvY2F0aW9uLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
CmluZGV4IGE1YjZkZDA1NTgwYWUwYzJkOTU3MDc3ZGZlNDUwYTQ4NmU2ZDAxZWMuLjUwMTI3ZjY3
ODQxZTAzYzU1NjhlMTllOTkxMTc5N2M4ZmMyZDZiODIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdEludm9jYXRpb24uY3BwCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnlG
dW5jdGlvbnMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNsdWRlICJTdHJp
bmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlVJ
U2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgpAQCAt
NjYsMjEgKzY2LDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXVFIgewog
CitzdGF0aWMgdm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVm
IGJvZHkgPSBudWxscHRyKQoreworICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRs
ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dL
KG5hbWUpLmdldCgpLCBib2R5KTsKK30KKwogVGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9u
KFdLVVJMUmVmIHVybCwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgOiBtX29wdGlv
bnMob3B0aW9ucykKICAgICAsIG1fdXJsKHVybCkKICAgICAsIG1fd2FpdFRvRHVtcFdhdGNoZG9n
VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVGVzdEludm9jYXRpb246OndhaXRUb0R1bXBX
YXRjaGRvZ1RpbWVyRmlyZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0
cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKG1fdXJsLmdldCgpKSk7Ci0KLSAgICBzaXpl
X3Qgc3RyaW5nTGVuZ3RoID0gV0tTdHJpbmdHZXRMZW5ndGgodXJsU3RyaW5nLmdldCgpKTsKLQot
ICAgIFZlY3RvcjxjaGFyPiB1cmxWZWN0b3I7Ci0gICAgdXJsVmVjdG9yLnJlc2l6ZShzdHJpbmdM
ZW5ndGggKyAxKTsKLQotICAgIFdLU3RyaW5nR2V0VVRGOENTdHJpbmcodXJsU3RyaW5nLmdldCgp
LCB1cmxWZWN0b3IuZGF0YSgpLCBzdHJpbmdMZW5ndGggKyAxKTsKLQotICAgIG1fdXJsU3RyaW5n
ID0gU3RyaW5nKHVybFZlY3Rvci5kYXRhKCksIHN0cmluZ0xlbmd0aCk7CisgICAgbV91cmxTdHJp
bmcgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtX3VybC5nZXQoKSkpLmdl
dCgpKTsKIAogICAgIC8vIEZJWE1FOiBBdm9pZCBtdXRhdGluZyB0aGUgc2V0dGluZyB2aWEgYSB0
ZXN0IGRpcmVjdG9yeSBsaWtlIHRoaXMuCiAgICAgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0g
dXJsQ29udGFpbnMoImxvYWRpbmcvIikgJiYgIXVybENvbnRhaW5zKCI6Ly9sb2NhbGhvc3QiKTsK
QEAgLTEyOSwyOCArMTI1LDEyIEBAIGJvb2wgVGVzdEludm9jYXRpb246OnNob3VsZExvZ0hpc3Rv
cnlDbGllbnRDYWxsYmFja3MoKSBjb25zdAogCiBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBUZXN0SW52b2NhdGlvbjo6Y3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gYmVnaW5UZXN0TWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdXNlRmxleGlibGVWaWV3cG9ydEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVzZUZsZXhpYmxlVmlld3BvcnQiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiB1c2VGbGV4aWJsZVZpZXdwb3J0VmFsdWUgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShvcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCkpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIHVzZUZsZXhp
YmxlVmlld3BvcnRLZXkuZ2V0KCksIHVzZUZsZXhpYmxlVmlld3BvcnRWYWx1ZS5nZXQoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZHVtcFBpeGVsc0tleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBQaXhlbHMiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBkdW1wUGl4ZWxzVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShtX2R1bXBQaXhlbHMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3Nh
Z2VCb2R5LmdldCgpLCBkdW1wUGl4ZWxzS2V5LmdldCgpLCBkdW1wUGl4ZWxzVmFsdWUuZ2V0KCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVvdXRLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lb3V0IikpOwotICAgIFdLUmV0YWluUHRy
PFdLVUludDY0UmVmPiB0aW1lb3V0VmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1fdGlt
ZW91dC5taWxsaXNlY29uZHMoKSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0
TWVzc2FnZUJvZHkuZ2V0KCksIHRpbWVvdXRLZXkuZ2V0KCksIHRpbWVvdXRWYWx1ZS5nZXQoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEpTQ29uc29s
ZUxvZ0luU3RkRXJyIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVycikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVz
c2FnZUJvZHkuZ2V0KCksIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycktleS5nZXQoKSwgZHVtcEpT
Q29uc29sZUxvZ0luU3RkRXJyVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzVmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9wdGlvbnMo
KS5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgYWRkaXRpb25hbFN1cHBvcnRl
ZEltYWdlVHlwZXNLZXkuZ2V0KCksIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzVmFsdWUu
Z2V0KCkpOwotCisgICAgYXV0byBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9k
eSwgIlVzZUZsZXhpYmxlVmlld3BvcnQiLCBvcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCk7
CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJEdW1wUGl4ZWxzIiwgbV9kdW1w
UGl4ZWxzKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlRpbWVvdXQiLCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV90aW1lb3V0Lm1pbGxpc2Vjb25kcygpKSk7CisgICAgc2V0
VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBt
X2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2Fn
ZUJvZHksICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIG9wdGlvbnMoKS5hZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKTsKICAgICByZXR1cm4gYmVnaW5UZXN0TWVz
c2FnZUJvZHk7CiB9CiAKQEAgLTE2OCw5ICsxNDgsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpp
bnZva2UoKQogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjbGVhciBvdXQgdmlzaXRlZCBsaW5r
cyBoZXJlLgogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQmVnaW5UZXN0IikpOwotICAgIGF1
dG8gYmVnaW5UZXN0TWVzc2FnZUJvZHkgPSBjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCk7
Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBiZWdp
blRlc3RNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJCZWdpblRlc3Qi
LCBjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCkuZ2V0KCkpOwogCiAgICAgbV9zdGFydGVk
VGVzdGluZyA9IHRydWU7CiAKQEAgLTMyNywxODUgKzMwNSwxMDQgQEAgdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVz
c2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIkFjayIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1lc3Nh
Z2VCb2R5U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZUJvZHlTdHJpbmcs
ICJCZWdpblRlc3QiKSkgeworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSksICJCZWdpblRlc3QiKSkgewogICAgICAgICAgICAg
bV9nb3RJbml0aWFsUmVzcG9uc2UgPSB0cnVlOwogICAgICAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm5vdGlmeURvbmUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRG9uZSIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHRJc1BlbmRpbmciKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiBwaXhlbFJlc3VsdElzUGVuZGluZyA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIG1fcGl4ZWxSZXN1bHRJ
c1BlbmRpbmcgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwaXhlbFJlc3VsdElzUGVuZGluZyk7Ci0KKyAg
ICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2Fn
ZUJvZHkpOworICAgICAgICBtX3BpeGVsUmVzdWx0SXNQZW5kaW5nID0gYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIlBpeGVsUmVzdWx0SXNQZW5kaW5nIik7CiAgICAgICAgIGlm
ICghbV9waXhlbFJlc3VsdElzUGVuZGluZykgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBpeGVsUmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiUGl4ZWxSZXN1bHQiKSk7Ci0gICAgICAgICAgICBtX3BpeGVsUmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8V0tJbWFnZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHBpeGVsUmVzdWx0S2V5LmdldCgpKSk7CisgICAgICAgICAgICBtX3BpeGVs
UmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0tJbWFnZVJlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiUGl4ZWxSZXN1bHQiKSk7CiAgICAgICAgICAgICBBU1NFUlQoIW1fcGl4ZWxSZXN1bHQg
fHwgbV9kdW1wUGl4ZWxzKTsKICAgICAgICAgfQotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiByZXBhaW50UmVjdHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJSZXBhaW50UmVjdHMiKSk7Ci0gICAgICAgIG1fcmVwYWludFJlY3RzID0gc3RhdGlj
X2Nhc3Q8V0tBcnJheVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHJlcGFpbnRSZWN0c0tleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBhdWRpb1Jlc3VsdEtleSA9ICBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJBdWRpb1Jlc3VsdCIpKTsKLSAgICAgICAgbV9hdWRpb1Jlc3VsdCA9IHN0
YXRpY19jYXN0PFdLRGF0YVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGF1ZGlvUmVzdWx0S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgbV9yZXBhaW50
UmVjdHMgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPih2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJSZXBhaW50UmVjdHMiKSk7CisgICAgICAgIG1fYXVkaW9SZXN1bHQgPSBzdGF0aWNfY2Fz
dDxXS0RhdGFSZWY+KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkF1ZGlvUmVzdWx0Iikp
OwogICAgICAgICBkb25lKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlRleHRPdXRwdXQiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0ZXh0T3V0cHV0ID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgbV90ZXh0T3V0cHV0LmFwcGVuZCh0b1dU
RlN0cmluZyh0ZXh0T3V0cHV0KSk7CisgICAgICAgIG1fdGV4dE91dHB1dC5hcHBlbmQodG9XVEZT
dHJpbmcoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkR1
bXBUb1N0ZEVyciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRleHRPdXRwdXQg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiVzIiwgdG9XVEZTdHJpbmcodGV4dE91dHB1dCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keSkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJCZWZvcmVVbmxv
YWRSZXR1cm5WYWx1ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgYmVmb3Jl
VW5sb2FkUmV0dXJuVmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJlZm9yZVVubG9hZFJl
dHVyblZhbHVlKFdLQm9vbGVhbkdldFZhbHVlKGJlZm9yZVVubG9hZFJldHVyblZhbHVlKSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRCZWZvcmVVbmxvYWRSZXR1cm5W
YWx1ZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IkFkZENocm9tZUlucHV0RmllbGQiKSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+YWRkQ2hyb21lSW5wdXRGaWVsZCgpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJDYWxsQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrIikpOwotICAg
ICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwor
ICAgICAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2si
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIpKSB7CiAgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5yZW1vdmVDaHJv
bWVJbnB1dEZpZWxkKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxSZW1vdmVD
aHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9J
bmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgi
Q2FsbFJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiRm9jdXNXZWJWaWV3IikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPm1ha2VXZWJWaWV3Rmlyc3RSZXNwb25kZXIoKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbEZvY3VzV2ViVmlld0NhbGxiYWNrIikpOwotICAgICAg
ICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAg
ICAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxGb2N1c1dlYlZpZXdDYWxsYmFjayIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRCYWNraW5nU2NhbGVGYWN0b3IiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAg
ICBkb3VibGUgYmFja2luZ1NjYWxlRmFjdG9yID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgV0tQYWdlU2V0Q3VzdG9tQmFj
a2luZ1NjYWxlRmFjdG9yKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIGJhY2tpbmdTY2FsZUZhY3Rvcik7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2FsbFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrIikpOwotICAgICAgICBXS1Bh
Z2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBX
S1BhZ2VTZXRDdXN0b21CYWNraW5nU2NhbGVGYWN0b3IoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAg
ICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsU2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2si
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0gV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgdWlu
dDY0X3Qgbm90aWZpY2F0aW9uSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNr
KG5vdGlmaWNhdGlvbklEKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRkc1Zpc2l0ZWRMaW5r
cyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUGFnZVNldEFkZHNW
aXNpdGVkTGlua3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFdLUGFnZVNldEFk
ZHNWaXNpdGVkTGlua3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnBhZ2UoKSwgYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24oV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Rp
Y3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbGF0aXR1ZGVLZXlXSyA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxhdGl0dWRlIikpOwotICAgICAgICBX
S0RvdWJsZVJlZiBsYXRpdHVkZVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBsYXRpdHVkZUtleVdLLmdl
dCgpKSk7Ci0gICAgICAgIGRvdWJsZSBsYXRpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUobGF0aXR1
ZGVXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvbmdpdHVkZUtleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibG9uZ2l0dWRlIikpOwot
ICAgICAgICBXS0RvdWJsZVJlZiBsb25naXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbG9uZ2l0
dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGxvbmdpdHVkZSA9IFdLRG91YmxlR2V0
VmFsdWUobG9uZ2l0dWRlV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBh
Y2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNj
dXJhY3kiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGFjY3VyYWN5V0sgPSBzdGF0aWNfY2FzdDxX
S0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGFjY3VyYWN5S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGFjY3VyYWN5ID0gV0tE
b3VibGVHZXRWYWx1ZShhY2N1cmFjeVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gcHJvdmlkZXNBbHRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygicHJvdmlkZXNBbHRpdHVkZSIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBy
b3ZpZGVzQWx0aXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVzQWx0aXR1ZGVLZXlX
Sy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGUgPSBXS0Jvb2xlYW5HZXRW
YWx1ZShwcm92aWRlc0FsdGl0dWRlV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBhbHRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiYWx0aXR1ZGUiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGFsdGl0dWRlV0sgPSBzdGF0aWNf
Y2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGFsdGl0dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGFsdGl0dWRl
ID0gV0tEb3VibGVHZXRWYWx1ZShhbHRpdHVkZVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kiKSk7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lXSyA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpKSk7Ci0gICAgICAg
IGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5ID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5V0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBhbHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJhbHRpdHVkZUFjY3VyYWN5IikpOwotICAgICAgICBXS0RvdWJsZVJlZiBhbHRpdHVk
ZUFjY3VyYWN5V0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGFsdGl0dWRlQWNjdXJhY3lLZXlXSy5nZXQo
KSkpOwotICAgICAgICBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSA9IFdLRG91YmxlR2V0VmFsdWUo
YWx0aXR1ZGVBY2N1cmFjeVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
cHJvdmlkZXNIZWFkaW5nS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJwcm92aWRlc0hlYWRpbmciKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwcm92aWRlc0hl
YWRpbmdXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVzSGVhZGluZ0tleVdLLmdldCgpKSk7
Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNIZWFkaW5nID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlk
ZXNIZWFkaW5nV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoZWFkaW5n
S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoZWFkaW5nIikp
OwotICAgICAgICBXS0RvdWJsZVJlZiBoZWFkaW5nV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhlYWRp
bmdLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgaGVhZGluZyA9IFdLRG91YmxlR2V0VmFs
dWUoaGVhZGluZ1dLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlk
ZXNTcGVlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJv
dmlkZXNTcGVlZCIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzU3BlZWRXSyA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHByb3ZpZGVzU3BlZWRLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29s
IHByb3ZpZGVzU3BlZWQgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc1NwZWVkV0spOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzcGVlZEtleVdLID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygic3BlZWQiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVm
IHNwZWVkV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNwZWVkS2V5V0suZ2V0KCkpKTsKLSAgICAgICAg
ZG91YmxlIHNwZWVkID0gV0tEb3VibGVHZXRWYWx1ZShzcGVlZFdLKTsKLQotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNGbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0Zsb29yTGV2ZWwiKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiBwcm92aWRlc0Zsb29yTGV2ZWxXSyA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHByb3ZpZGVzRmxvb3JMZXZlbEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNG
bG9vckxldmVsID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNGbG9vckxldmVsV0spOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmbG9vckxldmVsS2V5V0sgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmbG9vckxldmVsIikpOwotICAgICAgICBX
S0RvdWJsZVJlZiBmbG9vckxldmVsV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZsb29yTGV2ZWxLZXlX
Sy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgZmxvb3JMZXZlbCA9IFdLRG91YmxlR2V0VmFsdWUo
Zmxvb3JMZXZlbFdLKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHBy
b3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0
dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3Bl
ZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgICAgIGF1dG8gbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
YXV0byBsYXRpdHVkZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImxhdGl0
dWRlIik7CisgICAgICAgIGF1dG8gbG9uZ2l0dWRlID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAibG9uZ2l0dWRlIik7CisgICAgICAgIGF1dG8gYWNjdXJhY3kgPSBkb3VibGVW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJhY2N1cmFjeSIpOworICAgICAgICBhdXRvIGFs
dGl0dWRlID0gb3B0aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJhbHRp
dHVkZSIpOworICAgICAgICBhdXRvIGFsdGl0dWRlQWNjdXJhY3kgPSBvcHRpb25hbERvdWJsZVZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImFsdGl0dWRlQWNjdXJhY3kiKTsKKyAgICAgICAg
YXV0byBoZWFkaW5nID0gb3B0aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJoZWFkaW5nIik7CisgICAgICAgIGF1dG8gc3BlZWQgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgInNwZWVkIik7CisgICAgICAgIGF1dG8gZmxvb3JMZXZlbCA9
IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiZmxvb3JMZXZlbCIp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLCBhbHRpdHVk
ZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCwgZmxvb3JMZXZlbCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSA9
IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihlcnJvck1l
c3NhZ2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFVzZXJNZWRpYVBlcm1pc3Npb24oV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdL
KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJt
aXNzaW9uKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC01MTUsMTE3ICs0MTIsNjYgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gcGVybWlzc2lvbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygicGVybWlzc2lvbiIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBlcm1p
c3Npb25XSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBlcm1pc3Npb25LZXlXSy5nZXQoKSkpOwotICAg
ICAgICBib29sIHBlcm1pc3Npb24gPSBXS0Jvb2xlYW5HZXRWYWx1ZShwZXJtaXNzaW9uV0spOwot
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIG9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBvcmlnaW5LZXkuZ2V0KCkpKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgICAgICBX
S1N0cmluZ1JlZiBwYXJlbnRPcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGFyZW50T3JpZ2lu
S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHBlcm1pc3Npb24gPSBib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGVybWlzc2lvbiIpOworICAgICAgICBh
dXRvIG9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAib3JpZ2lu
Iik7CisgICAgICAgIGF1dG8gcGFyZW50T3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJwYXJlbnRPcmlnaW4iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1p
c3Npb24sIG9yaWdpbldLLCBwYXJlbnRPcmlnaW5XSyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJl
c2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luV0sgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIG9yaWdpbktleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBhcmVu
dE9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwYXJlbnRPcmlnaW5LZXkuZ2V0KCkpKTsKLSAg
ICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZh
bHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBvcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIm9yaWdpbiIpOworICAgICAgICBhdXRvIHBhcmVudE9yaWdp
bldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGFyZW50T3JpZ2luIik7
CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZXNldFVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4ob3JpZ2luV0ssIHBhcmVudE9yaWdpbldLKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBlbmFibGVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJlbmFibGVkIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdL
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgZW5hYmxlZEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wg
ZW5hYmxlZCA9IFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSyk7Ci0KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHBlcm1pc3NpdmVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoInBlcm1pc3NpdmUiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBw
ZXJtaXNzaXZlV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwZXJtaXNzaXZlS2V5V0suZ2V0KCkpKTsK
LSAgICAgICAgYm9vbCBwZXJtaXNzaXZlID0gV0tCb29sZWFuR2V0VmFsdWUocGVybWlzc2l2ZVdL
KTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1
ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZW5hYmxlZCA9IGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJlbmFibGVkIik7CisgICAgICAgIGF1dG8gcGVybWlzc2l2ZSA9
IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJwZXJtaXNzaXZlIik7CiAgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShl
bmFibGVkLCBwZXJtaXNzaXZlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0SGlkZGVuIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNJbml0aWFsS2V5V0sgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoaWRkZW4iKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiBoaWRkZW5XSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzSW5pdGlhbEtleVdLLmdldCgpKSk7Ci0g
ICAgICAgIGJvb2wgaGlkZGVuID0gV0tCb29sZWFuR2V0VmFsdWUoaGlkZGVuV0spOwotCi0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRIaWRkZW4oaGlkZGVuKTsKKyAgICAg
ICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJv
ZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJoaWRkZW4iKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlByb2Nlc3NXb3JrUXVldWUiKSkgewotICAgICAgICBpZiAoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5wcm9jZXNzV29ya1F1ZXVlKCkpIHsKLSAg
ICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldvcmtRdWV1ZVByb2Nlc3NlZENhbGxiYWNr
IikpOwotICAgICAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCAwKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5wcm9jZXNzV29ya1F1ZXVlKCkpCisgICAgICAgICAg
ICBwb3N0UGFnZU1lc3NhZ2UoIldvcmtRdWV1ZVByb2Nlc3NlZENhbGxiYWNrIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlF1ZXVlQmFja05hdmlnYXRpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1
aW50NjRfdCBzdGVwQ291bnQgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0
UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
d29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlQmFja05hdmlnYXRpb24oc3RlcENvdW50KTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUJh
Y2tOYXZpZ2F0aW9uKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRf
dCBzdGVwQ291bnQgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPiht
ZXNzYWdlQm9keSkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1
ZXVlTWFuYWdlcigpLnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oc3RlcENvdW50KTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUZvcndh
cmROYXZpZ2F0aW9uKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlF1ZXVlTG9hZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYg
bG9hZERhdGFEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVybCIpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgdXJsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIHVybEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0YXJnZXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJ0YXJnZXQiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRhcmdldFdL
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9h
ZERhdGFEaWN0aW9uYXJ5LCB0YXJnZXRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc2hvdWxkT3BlbkV4dGVybmFsVVJMc0tleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWVXSyA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rp
b25hcnksIHNob3VsZE9wZW5FeHRlcm5hbFVSTHNLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZCh0b1dU
RlN0cmluZyh1cmxXSyksIHRvV1RGU3RyaW5nKHRhcmdldFdLKSwgV0tCb29sZWFuR2V0VmFsdWUo
c2hvdWxkT3BlbkV4dGVybmFsVVJMc1ZhbHVlV0spKTsKKyAgICAgICAgYXV0byBsb2FkRGF0YURp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHVy
bCA9IHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgInVybCIpKTsK
KyAgICAgICAgYXV0byB0YXJnZXQgPSB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShsb2FkRGF0YURp
Y3Rpb25hcnksICJ0YXJnZXQiKSk7CisgICAgICAgIGF1dG8gc2hvdWxkT3BlbkV4dGVybmFsVVJM
cyA9IGJvb2xlYW5WYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJzaG91bGRPcGVuRXh0ZXJuYWxV
UkxzIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5h
Z2VyKCkucXVldWVMb2FkKHVybCwgdGFyZ2V0LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVMb2FkSFRNTFN0cmluZyIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbG9hZERhdGFEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGNvbnRlbnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJjb250ZW50IikpOwotICAgICAgICBXS1N0cmluZ1JlZiBjb250ZW50V0sgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rp
b25hcnksIGNvbnRlbnRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gYmFzZVVSTEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImJhc2VVUkwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGJhc2VVUkxXSyA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFy
eSwgYmFzZVVSTEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB1bnJlYWNoYWJsZVVSTEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoInVucmVhY2hhYmxlVVJMIikpOwotICAgICAgICBXS1N0cmluZ1JlZiB1bnJlYWNoYWJsZVVS
TFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bG9hZERhdGFEaWN0aW9uYXJ5LCB1bnJlYWNoYWJsZVVSTEtleS5nZXQoKSkpOwotCisgICAgICAg
IGF1dG8gbG9hZERhdGFEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBjb250ZW50V0sgPSBzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnks
ICJjb250ZW50Iik7CisgICAgICAgIGF1dG8gYmFzZVVSTFdLID0gc3RyaW5nVmFsdWUobG9hZERh
dGFEaWN0aW9uYXJ5LCAiYmFzZVVSTCIpOworICAgICAgICBhdXRvIHVucmVhY2hhYmxlVVJMV0sg
PSBzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJ1bnJlYWNoYWJsZVVSTCIpOwogICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVl
TG9hZEhUTUxTdHJpbmcodG9XVEZTdHJpbmcoY29udGVudFdLKSwgYmFzZVVSTFdLID8gdG9XVEZT
dHJpbmcoYmFzZVVSTFdLKSA6IFN0cmluZygpLCB1bnJlYWNoYWJsZVVSTFdLID8gdG9XVEZTdHJp
bmcodW5yZWFjaGFibGVVUkxXSykgOiBTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC02MzYsMTU0ICs0ODIsMTE3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVN
ZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1
ZUxvYWRpbmdTY3JpcHQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmlu
Z1JlZiBzY3JpcHQgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkaW5nU2NyaXB0
KHRvV1RGU3RyaW5nKHNjcmlwdCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZU5vbkxvYWRp
bmdTY3JpcHQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBz
Y3JpcHQgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVOb25Mb2FkaW5nU2NyaXB0KHRv
V1RGU3RyaW5nKHNjcmlwdCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRSZWplY3RzUHJvdGVj
dGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhhbmRsZXNBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRT
aG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZExvZ0Rvd25sb2FkQ2Fs
bGJhY2tzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyhib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QXV0aGVudGljYXRpb25Vc2Vy
bmFtZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tT
dHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVzZXJuYW1lID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgdXNl
cm5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKHRvV1RGU3RyaW5nKHVzZXJu
YW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBwYXNzd29yZCA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHBhc3N3b3JkID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0QXV0aGVudGljYXRpb25QYXNzd29yZCh0b1dURlN0cmluZyhwYXNzd29yZCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRCbG9ja0FsbFBsdWdpbnMiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIHNob3VsZEJsb2NrID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRC
bG9ja0FsbFBsdWdpbnMoV0tCb29sZWFuR2V0VmFsdWUoc2hvdWxkQmxvY2spKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJsb2NrQWxsUGx1Z2lucyhib29sZWFuVmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0UGx1Z2luU3VwcG9ydGVk
TW9kZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tT
dHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1vZGUgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBtb2RlID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0UGx1Z2luU3VwcG9ydGVkTW9kZSh0b1dURlN0cmluZyhtb2RlKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5Iikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoV0tCb29sZWFu
R2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5KGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBv
bGljeUFmdGVyRGVsYXkiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVy
RGVsYXkoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheShib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TmF2aWdhdGlv
bkdlc3R1cmVzRW5hYmxlZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFs
dWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoV0tC
b29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0
cyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKFdLQm9vbGVhbkdldFZhbHVl
KHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRJZ25vcmVz
Vmlld3BvcnRTY2FsZUxpbWl0cyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKFdLQm9vbGVhbkdldFZh
bHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91
bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25B
bmRNb3Rpb25BY2Nlc3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5k
TW90aW9uQWNjZXNzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90
aW9uQWNjZXNzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc09uU2l0ZXNXaXRob3V0
VXNlckludGVyYWN0aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0
eUNvb2tpZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpLCB0cnVlKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlD
b29raWVzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSksIHRydWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKFdLQm9vbGVhbkdldFZhbHVl
KHZhbHVlKSwgZmFsc2UpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5KSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSdW5VSVByb2Nlc3NTY3JpcHQi
KSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBj
YWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bGJhY2tJRCIpKTsKLQotICAgICAgICBVSVNjcmlwdEludm9jYXRpb25EYXRhKiBpbnZvY2F0aW9u
RGF0YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRhKCk7CisgICAgICAgIGF1dG8gbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
YXV0byBpbnZvY2F0aW9uRGF0YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRhOwogICAgICAg
ICBpbnZvY2F0aW9uRGF0YS0+dGVzdEludm9jYXRpb24gPSB0aGlzOwotICAgICAgICBpbnZvY2F0
aW9uRGF0YS0+Y2FsbGJhY2tJRCA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgY2FsbGJhY2tJREtleS5nZXQoKSkpKTsKLSAgICAgICAgaW52b2NhdGlvbkRhdGEt
PnNjcmlwdFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc2NyaXB0S2V5LmdldCgpKSk7CisgICAg
ICAgIGludm9jYXRpb25EYXRhLT5jYWxsYmFja0lEID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiQ2FsbGJhY2tJRCIpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0
U3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU2NyaXB0Iik7CiAg
ICAgICAgIG1fcGVuZGluZ1VJU2NyaXB0SW52b2NhdGlvbkRhdGEgPSBpbnZvY2F0aW9uRGF0YTsK
ICAgICAgICAgV0tQYWdlQ2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBpbnZvY2F0aW9uRGF0YSwg
cnVuVUlTaWRlU2NyaXB0QWZ0ZXJVcGRhdGVDYWxsYmFjayk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlJ1blVJUHJvY2Vzc1NjcmlwdEltbWVkaWF0ZWx5IikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5
UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0KLSAgICAgICAgVUlT
Y3JpcHRJbnZvY2F0aW9uRGF0YSogaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0
aW9uRGF0YSgpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25h
cnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaW52b2NhdGlvbkRhdGEgPSBuZXcg
VUlTY3JpcHRJbnZvY2F0aW9uRGF0YTsKICAgICAgICAgaW52b2NhdGlvbkRhdGEtPnRlc3RJbnZv
Y2F0aW9uID0gdGhpczsKLSAgICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQgPSAodW5z
aWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNhbGxiYWNrSURLZXkuZ2V0
KCkpKSk7Ci0gICAgICAgIGludm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHNjcmlwdEtleS5nZXQoKSkpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJh
Y2tJRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNhbGxiYWNrSUQiKTsK
KyAgICAgICAgaW52b2NhdGlvbkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIlNjcmlwdCIpOwogICAgICAgICBtX3BlbmRpbmdVSVNjcmlwdElu
dm9jYXRpb25EYXRhID0gaW52b2NhdGlvbkRhdGE7CiAgICAgICAgIHJ1blVJU2lkZVNjcmlwdElt
bWVkaWF0ZWx5KG51bGxwdHIsIGludm9jYXRpb25EYXRhKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
NzkxLDExICs2MDAsOSBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbnN0YWxsQ3VzdG9tTWVudUFj
dGlvbiIpKSB7CiAgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBuYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygibmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIG5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IikpOwotICAgICAgICBhdXRv
IGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkaXNtaXNzZXNBdXRv
bWF0aWNhbGx5S2V5LmdldCgpKSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5pbnN0YWxsQ3VzdG9tTWVudUFjdGlvbih0b1dURlN0cmluZyhuYW1lLmdldCgpKSwgV0tCb29s
ZWFuR2V0VmFsdWUoZGlzbWlzc2VzQXV0b21hdGljYWxseSkpOworICAgICAgICBhdXRvIG5hbWUg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJuYW1lIik7CisgICAgICAgIGF1
dG8gZGlzbWlzc2VzQXV0b21hdGljYWxseSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5pbnN0YWxsQ3VzdG9tTWVudUFjdGlvbih0b1dURlN0cmluZyhuYW1lKSwg
ZGlzbWlzc2VzQXV0b21hdGljYWxseSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTgw
NSw3ICs2MTIsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21J
bmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBhY3Rpb25zOwogICAgICAgICBhY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6
ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyArK2luZGV4
KQotICAgICAgICAgICAgYWN0aW9ucy5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZXNzYWdlQm9keUFycmF5LCBpbmRleCkp
KSk7CisgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZCh0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShX
S0FycmF5R2V0SXRlbUF0SW5kZXgobWVzc2FnZUJvZHlBcnJheSwgaW5kZXgpKSkpOwogICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWxsb3dlZE1lbnVBY3Rpb25zKGFjdGlv
bnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODI4LDEwOCArNjM1LDYzIEBAIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3Ry
aW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc0RlYnVnTW9kZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0RlYnVnTW9kZShib29sZWFu
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwor
ICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsK
ICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZUZvckRlYnVnTW9kZShob3N0TmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFN0YXRpc3RpY3NMYXN0U2VlbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlv
bmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlS
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3RO
YW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3Ry
aW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwot
ICAgICAgICBXS0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0
KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c0xhc3RTZWVuKGhvc3ROYW1lLCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBkb3VibGVWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc0xhc3RTZWVuKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwot
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0
b3BGcmFtZURvbWFpbjFLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJUb3BGcmFtZURvbWFpbjEiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0
b3BGcmFtZURvbWFpbjJLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJUb3BGcmFtZURvbWFpbjIiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBs
YXN0U2VlbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxhc3RT
ZWVuIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGFkVXNlckludGVyYWN0
aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlcklu
dGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBpc0dyYW5kZmF0aGVyZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJJc0dyYW5kZmF0aGVyZWQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBpc1ByZXZhbGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIklzUHJldmFsZW50IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gaXNWZXJ5UHJldmFsZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSXNWZXJ5UHJldmFsZW50IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZGF0YVJlY29yZHNSZW1vdmVkS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRGF0YVJlY29yZHNSZW1vdmVkIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdGltZXNBY2Nlc3NlZEZpcnN0UGFydHlJbnRlcmFjdGlvbktleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVzQWNjZXNzZWRGaXJzdFBhcnR5SW50
ZXJhY3Rpb24iKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1l
RG9tYWluMSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVEb21haW4xS2V5LmdldCgpKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lRG9tYWluMiA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9w
RnJhbWVEb21haW4yS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGxhc3RTZWVuID0g
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBsYXN0U2VlbktleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5S
ZWYgaGFkVXNlckludGVyYWN0aW9uID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGFkVXNlckludGVyYWN0
aW9uS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24gPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0
KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzR3JhbmRmYXRoZXJlZCA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGlzR3JhbmRmYXRoZXJlZEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYg
aXNQcmV2YWxlbnQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1ByZXZhbGVudEtleS5nZXQoKSkpOwot
ICAgICAgICBXS0Jvb2xlYW5SZWYgaXNWZXJ5UHJldmFsZW50ID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
aXNWZXJ5UHJldmFsZW50S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGRhdGFSZWNv
cmRzUmVtb3ZlZCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZGF0YVJlY29yZHNSZW1vdmVkS2V5LmdldCgp
KSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NN
ZXJnZVN0YXRpc3RpYyhob3N0TmFtZSwgdG9wRnJhbWVEb21haW4xLCB0b3BGcmFtZURvbWFpbjIs
IFdLRG91YmxlR2V0VmFsdWUobGFzdFNlZW4pLCBXS0Jvb2xlYW5HZXRWYWx1ZShoYWRVc2VySW50
ZXJhY3Rpb24pLCBXS0RvdWJsZUdldFZhbHVlKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pLCBX
S0Jvb2xlYW5HZXRWYWx1ZShpc0dyYW5kZmF0aGVyZWQpLCBXS0Jvb2xlYW5HZXRWYWx1ZShpc1By
ZXZhbGVudCksIFdLQm9vbGVhbkdldFZhbHVlKGlzVmVyeVByZXZhbGVudCksIFdLVUludDY0R2V0
VmFsdWUoZGF0YVJlY29yZHNSZW1vdmVkKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0
TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7Cisg
ICAgICAgIGF1dG8gdG9wRnJhbWVEb21haW4xID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiVG9wRnJhbWVEb21haW4xIik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVEb21haW4y
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVEb21haW4yIik7
CisgICAgICAgIGF1dG8gbGFzdFNlZW4gPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJMYXN0U2VlbiIpOworICAgICAgICBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIYWRVc2VySW50ZXJhY3Rpb24iKTsKKyAg
ICAgICAgYXV0byBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gZG91YmxlVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBh
dXRvIGlzR3JhbmRmYXRoZXJlZCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJJc0dyYW5kZmF0aGVyZWQiKTsKKyAgICAgICAgYXV0byBpc1ByZXZhbGVudCA9IGJvb2xlYW5W
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc1ByZXZhbGVudCIpOworICAgICAgICBhdXRv
IGlzVmVyeVByZXZhbGVudCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJ
c1ZlcnlQcmV2YWxlbnQiKTsKKyAgICAgICAgYXV0byBkYXRhUmVjb3Jkc1JlbW92ZWQgPSB1aW50
NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJEYXRhUmVjb3Jkc1JlbW92ZWQiKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNZXJnZVN0YXRp
c3RpYyhob3N0TmFtZSwgdG9wRnJhbWVEb21haW4xLCB0b3BGcmFtZURvbWFpbjIsIGxhc3RTZWVu
LCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRm
YXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGlj
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGhhZFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlckludGVy
YWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNTY2hlZHVsZWRG
b3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiKSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc1ByZXZhbGVudEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpOwotCi0gICAgICAg
IFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQo
KSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaGFkVXNlckludGVyYWN0aW9uID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaGFkVXNlckludGVyYWN0aW9uS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbEtleS5nZXQoKSkpOwot
ICAgICAgICBXS0Jvb2xlYW5SZWYgaXNQcmV2YWxlbnQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1By
ZXZhbGVudEtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyhob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFs
dWUoaGFkVXNlckludGVyYWN0aW9uKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNTY2hlZHVsZWRGb3JB
bGxCdXRDb29raWVEYXRhUmVtb3ZhbCksIFdLQm9vbGVhbkdldFZhbHVlKGlzUHJldmFsZW50KSk7
CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1l
c3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaGFkVXNlckludGVyYWN0
aW9uID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhhZFVzZXJJbnRlcmFj
dGlvbiIpOworICAgICAgICBhdXRvIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNTY2hlZHVsZWRGb3JB
bGxCdXRDb29raWVEYXRhUmVtb3ZhbCIpOworICAgICAgICBhdXRvIGlzUHJldmFsZW50ID0gYm9v
bGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIklzUHJldmFsZW50Iik7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3Rp
Yyhob3N0TmFtZSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhv
c3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdL
U3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkp
OwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtl
eS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVl
KSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVl
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShob3N0
TmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzVmVyeVByZXZh
bGVudFJlc291cmNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYg
aG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7
Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NWZXJ5
UHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoaG9zdE5h
bWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTQ0LDUxICs3MDYsMzUg
QEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5k
bGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tVSW50NjRSZWYgaG91cnMgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0NsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnMoV0tVSW50NjRHZXRWYWx1
ZShob3VycykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGlj
c0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModWludDY0
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1No
b3VsZERvd25ncmFkZVJlZmVycmVyIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFk
ZVJlZmVycmVyKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoYm9v
bGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3Rp
Y3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NG
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMi
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5n
R2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXMoaG9zdE5hbWUpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RvU2FtZVNp
dGVTdHJpY3RDb29raWVzKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmaXJzdFBhcnR5VVJMU3RyaW5nS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRmlyc3RQYXJ0eVVSTCIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNuYW1lVVJMU3RyaW5nS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ05BTUUiKSk7Ci0gICAgICAgIAotICAg
ICAgICBXS1N0cmluZ1JlZiBmaXJzdFBhcnR5VVJMU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBm
aXJzdFBhcnR5VVJMU3RyaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGNuYW1l
VVJMU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBjbmFtZVVSTFN0cmluZ0tleS5nZXQoKSkpOwot
ICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5
VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGZpcnN0UGFydHlVUkxTdHJpbmcgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJGaXJzdFBhcnR5VVJMIik7CisgICAg
ICAgIGF1dG8gY25hbWVVUkxTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJDTkFNRSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4oZmlyc3RQYXJ0eVVSTFN0cmluZywgY25h
bWVVUkxTdHJpbmcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0
eUNOQU1FRG9tYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgY25hbWVVUkxT
dHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURv
bWFpbihjbmFtZVVSTFN0cmluZyk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluKHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMTIsOCArNzU4LDcgQEAgdm9p
ZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tT
dHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIkdldEFwcGxpY2F0aW9uTWFuaWZlc3QiKSkgewogI2lmZGVmIF9fQkxP
Q0tTX18KICAgICAgICAgV0tQYWdlR2V0QXBwbGljYXRpb25NYW5pZmVzdF9iKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIF57Ci0gICAgICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJEaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0IikpOwotICAgICAg
ICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
KyAgICAgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiRGlkR2V0QXBwbGljYXRpb25NYW5pZmVzdCIp
OwogICAgICAgICB9KTsKICNlbHNlCiAgICAgICAgIC8vIEZJWE1FOiBBZGQgQVBJIGZvciBsb2Fk
aW5nIHRoZSBtYW5pZmVzdCBvbiBub24tX19CTE9DS1NfXyBwb3J0cy4KQEAgLTEwMjMsMTYgKzc2
OCwxMCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0hhc0hhZFVz
ZXJJbnRlcmFjdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJl
ZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVm
IGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkp
OwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSGFz
SGFkVXNlckludGVyYWN0aW9uKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOwor
ICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNz
YWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGhvc3RO
YW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNDMsOCArNzgyLDcg
QEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5k
bGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QXBwQm91bmREb21haW5zIikpIHsKICAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0FycmF5R2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS0FycmF5UmVmIG9yaWdpblVSTHMgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBcHBC
b3VuZERvbWFpbnMob3JpZ2luVVJMcyk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRBcHBCb3VuZERvbWFpbnMoc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4obWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA1NSw5NCArNzkzLDcwIEBAIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91
c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiB7CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJJbml0aWFsaXphdGlvbiIpKSB7CiAgICAgICAgIGF1dG8gc2V0
dGluZ3MgPSBjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiByZXN1bWVUZXN0aW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUmVzdW1lVGVzdGluZyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiByZXN1bWVUZXN0aW5nVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShtX3N0YXJ0ZWRUZXN0aW5nKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oc2V0dGlu
Z3MuZ2V0KCksIHJlc3VtZVRlc3RpbmdLZXkuZ2V0KCksIHJlc3VtZVRlc3RpbmdWYWx1ZS5nZXQo
KSk7CisgICAgICAgIHNldFZhbHVlKHNldHRpbmdzLCAiUmVzdW1lVGVzdGluZyIsIG1fc3RhcnRl
ZFRlc3RpbmcpOwogICAgICAgICByZXR1cm4gc2V0dGluZ3M7CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXREdW1wUGl4ZWxzIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1fZHVtcFBpeGVscyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgbV9kdW1wUGl4
ZWxzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiR2V0RHVtcFBpeGVscyIpKQogICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUobV9kdW1wUGl4ZWxzKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFdoYXRUb0R1bXAiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBtX3do
YXRUb0R1bXAgPSBzdGF0aWNfY2FzdDxXaGF0VG9EdW1wPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgbV93aGF0VG9EdW1w
ID0gc3RhdGljX2Nhc3Q8V2hhdFRvRHVtcD4odWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0V2hhdFRvRHVtcCIpKQogICAgICAgICByZXR1cm4g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obV93aGF0VG9EdW1w
KSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRXYWl0VW50aWxEb25lIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIHNldFdhaXRVbnRpbERv
bmUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKSk7CisgICAgICAgIHNldFdhaXRVbnRpbERv
bmUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IkdldFdhaXRVbnRpbERvbmUiKSkKICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKG1fd2FpdFVudGlsRG9uZSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpKSk7CisgICAgICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IGJvb2xlYW5W
YWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldER1bXBGcmFt
ZUxvYWRDYWxsYmFja3MiKSkKICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcykpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRDYW5PcGVuV2luZG93cyIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotICAgICAgICBtX2Nhbk9wZW5XaW5kb3dzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
V0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkp
KTsKKyAgICAgICAgbV9jYW5PcGVuV2luZG93cyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0V2luZG93SXNLZXkiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzS2V5VmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnNldFdpbmRvd0lzS2V5KFdLQm9vbGVhbkdldFZhbHVlKGlzS2V5VmFs
dWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnNldFdpbmRvd0lzS2V5KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFZpZXdTaXplIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gd2lkdGhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aWR0
aCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlaWdodEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlaWdodCIpKTsKLQotICAgICAgICBX
S0RvdWJsZVJlZiB3aWR0aFdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB3aWR0aEtleS5nZXQoKSkpOwot
ICAgICAgICBXS0RvdWJsZVJlZiBoZWlnaHRXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGVpZ2h0S2V5
LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnJlc2l6ZVRvKFdLRG91YmxlR2V0VmFsdWUod2lkdGhXSyksIFdLRG91YmxlR2V0VmFs
dWUoaGVpZ2h0V0spKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHdpZHRoID0gZG91YmxlVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAid2lkdGgiKTsKKyAgICAgICAgYXV0byBoZWlnaHQg
PSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJoZWlnaHQiKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnJlc2l6ZVRvKHdpZHRo
LCBoZWlnaHQpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzR2VvbG9jYXRpb25DbGll
bnRBY3RpdmUiKSkgewotICAgICAgICBib29sIGlzQWN0aXZlID0gVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzQWN0aXZl
KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIp
KQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpKSk7CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldENhY2hlTW9kZWwi
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0
R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBtb2RlbCA9IFdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHVpbnQ2NF90
IG1vZGVsID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBXS1dlYnNpdGVEYXRh
U3RvcmVTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLndlYnNpdGVEYXRhU3RvcmUoKSwgbW9kZWwpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIklzV29ya1F1ZXVlRW1wdHkiKSkgewotICAgICAgICBib29sIGlzRW1wdHkg
PSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLmlzV29ya1F1
ZXVlRW1wdHkoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShpc0VtcHR5KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
SXNXb3JrUXVldWVFbXB0eSIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5pc1dvcmtR
dWV1ZUVtcHR5KCkpKTsKIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0
aW9uIikpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiByZXN1bHQgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2
ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkpKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmln
YXRpb24iKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25h
bE5hdmlnYXRpb24oKSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJDbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFs
TmF2aWdhdGlvbiIpKSB7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVh
ckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpOwpAQCAt
MTE1MCw0MCArODY0LDM1IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246
OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZWN1cmVFdmVu
dElucHV0SXNFbmFibGVkIikpIHsKLSNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3VsdCA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKElzU2VjdXJlRXZlbnRJbnB1dEVuYWJsZWQoKSkpOworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKElzU2Vj
dXJlRXZlbnRJbnB1dEVuYWJsZWQoKSkpOwogI2Vsc2UKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShmYWxzZSkpOworICAg
ICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZmFsc2UpKTsKICNlbmRpZgotICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0Q3VzdG9tVXNlckFnZW50IikpIHsKLSAgICAgICAg
V0tTdHJpbmdSZWYgdXNlckFnZW50ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgV0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50KFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHVzZXJBZ2VudCk7CisgICAgICAgIFdL
UGFnZVNldEN1c3RvbVVzZXJBZ2VudChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+cGFnZSgpLCBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlIikpIHsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKFdL
Qm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRp
b24iKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dh
cFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oV0tCb29sZWFuR2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHRO
YXZpZ2F0aW9uKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRp
b24iKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dh
cFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKFdLQm9vbGVhbkdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmln
YXRpb24oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiSW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQiKSkgewotICAgICAgICB1bnNpZ25l
ZCBjb3VudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbWFnZUNvdW50SW5HZW5lcmFs
UGFzdGVib2FyZCgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcmVzdWx0ID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjb3VudCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IkltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkIikpCisgICAgICAgIHJldHVybiBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbWFnZUNvdW50SW5H
ZW5lcmFsUGFzdGVib2FyZCgpKSk7CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJEZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzIikpIHsKICAg
ICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlQWxsSW5kZXhlZERhdGFiYXNlcyhUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkud2Vic2l0ZURhdGFTdG9yZSgpLCBudWxscHRyLCB7IH0pOwpA
QCAtMTE5MSwxNyArOTAwLDEwIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRNb2Nr
TWVkaWFEZXZpY2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYg
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJzaXN0ZW50SURL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQZXJzaXN0ZW50SUQi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsYWJlbEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxhYmVsIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdHlwZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlR5cGUiKSk7Ci0KLSAgICAgICAgYXV0byBwZXJzaXN0ZW50SUQgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHBlcnNpc3RlbnRJREtleS5nZXQoKSkpOwotICAgICAgICBhdXRvIGxhYmVsID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBsYWJlbEtleS5nZXQoKSkpOwotICAgICAgICBhdXRvIHR5cGUgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHR5cGVLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1
dG8gcGVyc2lzdGVudElEID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUGVy
c2lzdGVudElEIik7CisgICAgICAgIGF1dG8gbGFiZWwgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJMYWJlbCIpOworICAgICAgICBhdXRvIHR5cGUgPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJUeXBlIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5hZGRNb2NrTWVkaWFEZXZpY2UocGVyc2lzdGVudElELCBsYWJlbCwgdHlwZSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTEyMTIsOSArOTE0LDcgQEAgV0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3Vz
TWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlbW92ZU1vY2tNZWRpYURldmljZSIpKSB7Ci0gICAg
ICAgIFdLU3RyaW5nUmVmIHBlcnNpc3RlbnRJZCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPiht
ZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJlbW92
ZU1vY2tNZWRpYURldmljZShwZXJzaXN0ZW50SWQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkucmVtb3ZlTW9ja01lZGlhRGV2aWNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTIyNCwxNDIgKzkyNCw4
NyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3lu
Y2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0NhbWVyYU9yaWVudGF0aW9u
IikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tDYW1lcmFP
cmllbnRhdGlvbihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNz
YWdlQm9keSkpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tD
YW1lcmFPcmllbnRhdGlvbih1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIklzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkIikp
IHsKLSAgICAgICAgYm9vbCBpc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCA9
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyRW5hYmxlZCgpOwotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNN
b2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQpKTsKLSAgICB9CisgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc01vY2tSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyRW5hYmxlZCIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzTW9ja1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXJFbmFibGVkKCkpKTsKICAgICAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkhhc0FwcEJvdW5kU2Vzc2lvbiIpKSB7Ci0gICAgICAg
IGJvb2wgaGFzQXBwQm91bmRTZXNzaW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhh
c0FwcEJvdW5kU2Vzc2lvbigpOwotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaGFzQXBwQm91bmRTZXNzaW9uKSk7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSGFzQXBwQm91bmRTZXNzaW9uIikpCisgICAgICAg
IHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuaGFzQXBwQm91bmRTZXNzaW9uKCkpKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNvbm5lY3RNb2NrR2Ft
ZXBhZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tV
SW50NjRHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgdWludDY0X3QgaW5kZXggPSBXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBX
ZWJDb3JlVGVzdFN1cHBvcnQ6OmNvbm5lY3RNb2NrR2FtZXBhZChpbmRleCk7Ci0gICAgICAgIAor
ICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmNvbm5lY3RNb2NrR2FtZXBhZCh1aW50NjRWYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRpc2Nvbm5lY3RN
b2NrR2FtZXBhZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgdWludDY0X3QgaW5kZXggPSBXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAg
ICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZChpbmRleCk7Ci0K
KyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpkaXNjb25uZWN0TW9ja0dhbWVwYWQodWludDY0
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2Nr
R2FtZXBhZERldGFpbHMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSW5k
ZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5k
ZXgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSURLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSUQiKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtYXBwaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWFwcGluZyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGF4aXNDb3VudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkF4aXNDb3VudCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGJ1dHRvbkNvdW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QnV0dG9uQ291bnQiKSk7Ci0KLSAgICAgICAgV0tVSW50NjRSZWYgZ2FtZXBhZEluZGV4ID0gc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSW5kZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgZ2FtZXBhZElEID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSURLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tTdHJpbmdSZWYgbWFwcGluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbWFwcGluZ0tleS5n
ZXQoKSkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBheGlzQ291bnQgPSBzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGF4aXNDb3VudEtleS5nZXQoKSkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBidXR0b25Db3VudCA9
IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgYnV0dG9uQ291bnRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXZWJD
b3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkRGV0YWlscyhXS1VJbnQ2NEdldFZhbHVlKGdh
bWVwYWRJbmRleCksIHRvV1RGU3RyaW5nKGdhbWVwYWRJRCksIHRvV1RGU3RyaW5nKG1hcHBpbmcp
LCBXS1VJbnQ2NEdldFZhbHVlKGF4aXNDb3VudCksIFdLVUludDY0R2V0VmFsdWUoYnV0dG9uQ291
bnQpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFs
dWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGdhbWVwYWRJbmRleCA9IHVpbnQ2NFZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJbmRleCIpOworICAgICAgICBhdXRvIGdh
bWVwYWRJRCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJRCIp
OworICAgICAgICBhdXRvIG1hcHBpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJNYXBwaW5nIik7CisgICAgICAgIGF1dG8gYXhpc0NvdW50ID0gdWludDY0VmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiQXhpc0NvdW50Iik7CisgICAgICAgIGF1dG8gYnV0dG9uQ291
bnQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJCdXR0b25Db3VudCIpOwor
ICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkRGV0YWlscyhnYW1lcGFk
SW5kZXgsIHRvV1RGU3RyaW5nKGdhbWVwYWRJRCksIHRvV1RGU3RyaW5nKG1hcHBpbmcpLCBheGlz
Q291bnQsIGJ1dHRvbkNvdW50KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2Nr
R2FtZXBhZEF4aXNWYWx1ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFy
eVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJ
bmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJ
bmRleCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4aXNJbmRleEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNJbmRleCIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tVSW50NjRSZWYg
Z2FtZXBhZEluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSW5kZXhLZXkuZ2V0KCkpKTsK
LSAgICAgICAgV0tVSW50NjRSZWYgYXhpc0luZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBheGlzSW5k
ZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxX
S0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRN
b2NrR2FtZXBhZEF4aXNWYWx1ZShXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRleCksIFdLVUlu
dDY0R2V0VmFsdWUoYXhpc0luZGV4KSwgV0tEb3VibGVHZXRWYWx1ZSh2YWx1ZSkpOwotCisgICAg
ICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgYXV0byBnYW1lcGFkSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJHYW1lcGFkSW5kZXgiKTsKKyAgICAgICAgYXV0byBheGlzSW5kZXggPSB1
aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJBeGlzSW5kZXgiKTsKKyAgICAgICAg
YXV0byB2YWx1ZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7
CisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUoZ2Ft
ZXBhZEluZGV4LCBheGlzSW5kZXgsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZ2FtZXBhZEluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiR2FtZXBhZEluZGV4IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0
dG9uSW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0
b25JbmRleCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAg
ICAgV0tVSW50NjRSZWYgZ2FtZXBhZEluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSW5k
ZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgYnV0dG9uSW5kZXggPSBzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGJ1dHRvbkluZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHZh
bHVlID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFdlYkNv
cmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZShXS1VJbnQ2NEdldFZhbHVl
KGdhbWVwYWRJbmRleCksIFdLVUludDY0R2V0VmFsdWUoYnV0dG9uSW5kZXgpLCBXS0RvdWJsZUdl
dFZhbHVlKHZhbHVlKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGdhbWVwYWRJbmRleCA9
IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJbmRleCIpOworICAg
ICAgICBhdXRvIGJ1dHRvbkluZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiQnV0dG9uSW5kZXgiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGRvdWJsZVZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6
c2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZShnYW1lcGFkSW5kZXgsIGJ1dHRvbkluZGV4LCB2YWx1
ZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShN
QUMpCiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4iKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbldLID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBvcmlnaW5LZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwYXJlbnRP
cmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGFyZW50T3JpZ2luS2V5LmdldCgpKSk7Ci0gICAg
ICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1
ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gb3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJvcmlnaW4iKTsKKyAgICAgICAgYXV0byBwYXJlbnRPcmlnaW5X
SyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgInBhcmVudE9yaWdpbiIpOwog
ICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS51c2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKG9yaWdpbldLLCBwYXJlbnRPcmln
aW5XSyk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiByZXN1bHQgPSBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKGNvdW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNEb2lu
Z01lZGlhQ2FwdHVyZSIpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlz
RG9pbmdNZWRpYUNhcHR1cmUoKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm4gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjb3VudCkpOwogICAgIH0KKworICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNEb2luZ01lZGlhQ2Fw
dHVyZSIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmlzRG9pbmdNZWRpYUNhcHR1cmUoKSkpOwogICAgIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYXJTdGF0aXN0
aWNzRGF0YUZvckRvbWFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGRvbWFp
biA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4oZG9t
YWluKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFyU3RhdGlzdGlj
c0RhdGFGb3JEb21haW4oc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJEb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRvbWFpbklES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRG9tYWluSUQiKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGRv
bWFpbklEID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkb21haW5JREtleS5nZXQoKSkpOwotICAgICAgICBi
b29sIGRvbWFpbklERXhpc3RzID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRvZXNTdGF0
aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UoV0tVSW50NjRHZXRWYWx1ZShkb21haW5JRCkp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGRvbWFpbklERXhpc3RzKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgYXV0byBkb21haW5JRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkRvbWFpbklEIik7CisgICAgICAgIGJvb2wgZG9tYWluSURFeGlzdHMgPSBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRh
YmFzZShkb21haW5JRCk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShk
b21haW5JREV4aXN0cykpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0VuYWJsZWQiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzRW5hYmxlZChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0VuYWJsZWQoYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzRXBo
ZW1lcmFsIikpIHsKLSAgICAgICAgYm9vbCBpc0VwaGVtZXJhbCA9IFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5pc1N0YXRpc3RpY3NFcGhlbWVyYWwoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0VwaGVtZXJhbCkp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0VwaGVtZXJh
bCgpKSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiKSkgewpAQCAtMTM2OCwy
MjQgKzEwMTMsMTI4IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9z
dE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBi
b29sIGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGlj
c1ByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBl
UmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBib29sIGlzUHJldmFsZW50ID0gVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShpc1ByZXZhbGVudCkpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBpc1ByZXZh
bGVudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoaG9zdE5hbWUpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJl
c3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShp
c1ByZXZhbGVudCkpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
RGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJl
ZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1YnJlc291cmNl
SG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1YnJlc291
cmNlSG9zdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lSG9z
dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9z
dCIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIHN1YnJlc291cmNlSG9zdCA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgc3VicmVzb3VyY2VIb3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIHRvcEZyYW1lSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0S2V5Lmdl
dCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc3VicmVzb3VyY2VIb3N0
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU3VicmVzb3VyY2VIb3N0Iik7
CisgICAgICAgIGF1dG8gdG9wRnJhbWVIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiVG9wRnJhbWVIb3N0Iik7CiAgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJy
ZXNvdXJjZVVuZGVyID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1Jl
Z2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoc3VicmVzb3VyY2VIb3N0LCB0b3BGcmFtZUhvc3Qp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcikpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdp
c3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tE
aWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViRnJhbWVIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U3ViRnJhbWVIb3N0IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJh
bWVIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJh
bWVIb3N0IikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViRnJhbWVIb3N0ID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBzdWJGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgdG9wRnJhbWVIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3RLZXkuZ2V0
KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlW
YWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc3ViRnJhbWVIb3N0ID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU3ViRnJhbWVIb3N0Iik7CisgICAgICAgIGF1dG8g
dG9wRnJhbWVIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJh
bWVIb3N0Iik7CiAgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyID0gVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1l
VW5kZXIoc3ViRnJhbWVIb3N0LCB0b3BGcmFtZUhvc3QpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFz
U3ViRnJhbWVVbmRlcikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKSk7CiAg
ICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdFJlZGlyZWN0ZWRGcm9tS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdFJlZGlyZWN0ZWRGcm9tIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdFJlZGlyZWN0ZWRUb0tleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkVG8iKSk7
Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0UmVkaXJlY3RlZEZyb20gPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGhvc3RSZWRpcmVjdGVkRnJvbUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0
cmluZ1JlZiBob3N0UmVkaXJlY3RlZFRvID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0UmVkaXJlY3Rl
ZFRvS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdFJl
ZGlyZWN0ZWRGcm9tID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdFJl
ZGlyZWN0ZWRGcm9tIik7CisgICAgICAgIGF1dG8gaG9zdFJlZGlyZWN0ZWRUbyA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3RSZWRpcmVjdGVkVG8iKTsKICAgICAgICAg
Ym9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuaXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhob3N0UmVkaXJlY3Rl
ZEZyb20sIGhvc3RSZWRpcmVjdGVkVG8pOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3Rp
bmdUbykpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKSk7CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRp
c3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAg
ICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbiA9IFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5h
bWUpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGhhc0hhZFVzZXJJbnRlcmFjdGlvbikpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbiA9IFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGhhc0hhZFVzZXJJbnRlcmFjdGlvbikpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc09ubHlJbkRhdGFi
YXNlT25jZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5
UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBhdXRvIHN1Ykhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJIb3N0IikpOwotICAgICAgICBhdXRvIHRvcEhvc3RL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BIb3N0IikpOwot
ICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViSG9zdCA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
c3ViSG9zdEtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BIb3N0ID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB0b3BIb3N0S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IHN1Ykhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTdWJIb3N0Iik7
CisgICAgICAgIGF1dG8gdG9wSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIlRvcEhvc3QiKTsKICAgICAgICAgYm9vbCBzdGF0aXN0aWNJbkRhdGFiYXNlT25jZSA9IFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2Uo
c3ViSG9zdCwgdG9wSG9zdCk7CiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShzdGF0aXN0aWNJbkRhdGFiYXNlT25jZSkpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NHcmFuZGZh
dGhlcmVkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdL
U3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkp
OwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtl
eS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2
YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlW
YWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVlID0g
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChob3N0
TmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3Rp
Y3NHcmFuZGZhdGhlcmVkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5n
UmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
aXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChob3N0TmFtZSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhl
cmVkKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGJvb2wgaXNHcmFuZGZhdGhl
cmVkID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0dyYW5kZmF0aGVy
ZWQoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlSVRQRGF0YWJhc2UiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdl
dFR5cGVJRCgpKTsKLQotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFVzZUlUUERhdGFiYXNlKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VJVFBEYXRhYmFzZShib29sZWFu
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwot
ICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHRvcEZyYW1lSG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUb3BGcmFtZUhvc3ROYW1lIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJp
bmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRv
cEZyYW1lSG9zdE5hbWVLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9z
dE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOwor
ICAgICAgICBhdXRvIHRvcEZyYW1lSG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJUb3BGcmFtZUhvc3ROYW1lIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGhvc3RO
YW1lLCB0b3BGcmFtZUhvc3ROYW1lKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
ICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbiIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRvcEZyYW1lSG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3ROYW1lIikpOwotICAgICAgICAKLSAgICAgICAg
V0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgp
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHRvcEZyYW1lSG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8g
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
Ikhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVIb3N0TmFtZSA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lSG9zdE5hbWUiKTsKICAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW4oaG9zdE5hbWUsIHRvcEZyYW1lSG9zdE5hbWUpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIp
KTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJl
ZGlyZWN0ZWRUbyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkuZ2V0
KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGlj
dGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8g
aG9zdE5hbWVSZWRpcmVjdGVkVG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhob3N0TmFtZSwg
aG9zdE5hbWVSZWRpcmVjdGVkVG8pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0
YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwot
ICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIikpOwotICAgICAgICAKLSAg
ICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5
LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20gPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXkuZ2V0KCkpKTsKLSAgICAg
ICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVl
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVSZWRp
cmVjdGVkRnJvbSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1l
UmVkaXJlY3RlZEZyb20iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShob3N0TmFtZSwgaG9zdE5h
bWVSZWRpcmVjdGVkRnJvbSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0
YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8iKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAg
ICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBob3N0TmFtZVJlZGlyZWN0ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZFRvIikpOwotICAgICAgICAKLSAgICAgICAgV0tT
dHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBob3N0TmFtZVJlZGlyZWN0ZWRUb0tleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZFRvIik7
CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVG9wRnJh
bWVVbmlxdWVSZWRpcmVjdFRvKGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5h
bWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lUmVkaXJlY3RlZEZy
b21LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJl
ZGlyZWN0ZWRGcm9tIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lUmVk
aXJlY3RlZEZyb21LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1l
Iik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKTsKICAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShob3N0TmFtZSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtE
ZWNvcmF0aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25h
cnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGF1dG8gZnJvbUhvc3RLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJGcm9tSG9zdCIpKTsKLSAgICAgICAgYXV0byB0b0hv
c3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb0hvc3QiKSk7
Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgZnJvbUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZyb21I
b3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvSG9zdCA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgdG9Ib3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1
dG8gZnJvbUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJGcm9tSG9z
dCIpOworICAgICAgICBhdXRvIHRvSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIlRvSG9zdCIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oZnJvbUhvc3QsIHRvSG9z
dCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRz
ID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91Ymxl
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IApAQCAtMTYwMCw5NyArMTE0OSw2OSBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZv
Y2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3Rh
dGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChXS0Jvb2xlYW5H
ZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGlj
c1NldElzUnVubmluZ1Rlc3QiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZh
bHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdChXS0Jv
b2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc0lzUnVubmluZ1Rlc3QoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChXS0Jvb2xlYW5H
ZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3Vi
bGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoV0tEb3Vi
bGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJs
ZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAg
ICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Rv
dWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NHcmFuZGZh
dGhlcmluZ1RpbWUoV0tEb3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJs
ZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAg
ICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYg
ZW50cmllcyA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0Vu
dHJpZXMoV0tVSW50NjRHZXRWYWx1ZShlbnRyaWVzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModWludDY0VmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0UHJ1
bmVFbnRyaWVzRG93blRvIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgZW50cmll
cyA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKFdL
VUludDY0R2V0VmFsdWUoZW50cmllcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1aW50NjRWYWx1ZShtZXNzYWdl
Qm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NEZWxldGVDb29r
aWVzRm9ySG9zdCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5h
bWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5jbHVkZUh0dHBPbmx5Q29va2llcyIpKTsK
LSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaW5jbHVkZUh0dHBP
bmx5Q29va2llcyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0gICAgICAg
IAotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0RlbGV0ZUNv
b2tpZXNGb3JIb3N0KGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZShpbmNsdWRlSHR0cE9ubHlD
b29raWVzKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFy
eVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaW5jbHVk
ZUh0dHBPbmx5Q29va2llcyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJ
bmNsdWRlSHR0cE9ubHlDb29raWVzIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QoaG9zdE5hbWUsIGluY2x1ZGVIdHRw
T25seUNvb2tpZXMpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0hh
c0xvY2FsU3RvcmFnZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1Jl
ZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAg
ICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGJv
b2wgaGFzTG9jYWxTdG9yYWdlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlz
dGljc0hhc0xvY2FsU3RvcmFnZShob3N0TmFtZSk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzTG9jYWxTdG9yYWdlKSk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NDYWNoZU1heEFnZUNhcChXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcChkb3Vi
bGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkhhc1N0
YXRpc3RpY3NJc29sYXRlZFNlc3Npb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAg
V0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJv
ZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwog
ICAgICAgICBib29sIGhhc0lzb2xhdGVkU2Vzc2lvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5oYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uKGhvc3ROYW1lKTsKICAgICAgICAgYXV0
byByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNJc29sYXRlZFNlc3Npb24pKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFyRE9NQ2FjaGUiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVz
c2FnZUJvZHkpOwotCisgICAgICAgIGF1dG8gb3JpZ2luID0gc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYXJET01DYWNoZShv
cmlnaW4pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xNzAxLDM1ICsxMjIy
LDI0IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVT
eW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJIYXNET01DYWNoZSIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihtZXNzYWdlQm9keSk7Ci0KKyAgICAgICAgYXV0byBvcmlnaW4gPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keSk7CiAgICAgICAgIGJvb2wgaGFzRE9NQ2FjaGUgPSBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuaGFzRE9NQ2FjaGUob3JpZ2luKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBl
UmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNET01DYWNoZSkpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaGFzRE9NQ2FjaGUpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRPTUNhY2hlU2l6ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9k
eSk7Ci0KKyAgICAgICAgYXV0byBvcmlnaW4gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAg
ICAgICAgIGF1dG8gZG9tQ2FjaGVTaXplID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRv
bUNhY2hlU2l6ZShvcmlnaW4pOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3Vs
dCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZG9tQ2FjaGVTaXplKSk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRvbUNhY2hl
U2l6ZSkpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZSIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgICAgICBhdXRvIGNhbkluY3JlYXNlID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZShjYW5JbmNyZWFzZSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd1N0b3JhZ2VRdW90YUluY3Jl
YXNlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkluamVjdFVzZXJTY3JpcHQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBz
Y3JpcHQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbmplY3RVc2VyU2NyaXB0KHNjcmlwdCk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbmplY3RVc2VyU2NyaXB0KHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApA
QCAtMTczOSwxNSArMTI0OSwxMiBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVm
IHNlY29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91
dEZvclRlc3RpbmcoV0tEb3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGlu
Zyhkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAg
ICAgYXV0byB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gV0tCb29sZWFuR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpOworICAgICAgICBhdXRv
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHkpOwogICAgICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xNzY1
LDYwICsxMjcyLDM1IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRUZXN0S2V5VG9L
ZXljaGFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgdGVzdEtl
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJpdmF0ZUtleUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlByaXZhdGVLZXkiKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIHByaXZhdGVLZXlXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3RLZXlEaWN0aW9uYXJ5LCBwcml2YXRlS2V5S2V5Lmdl
dCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJMYWJlbEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKTsKLSAg
ICAgICAgV0tTdHJpbmdSZWYgYXR0ckxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0S2V5RGljdGlvbmFyeSwgYXR0ckxhYmVsS2V5
LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFwcGxpY2F0aW9u
VGFnS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRp
b25UYWciKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGFwcGxpY2F0aW9uVGFnV0sgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0S2V5RGljdGlv
bmFyeSwgYXBwbGljYXRpb25UYWdLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIHRlc3RLZXlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBw
cml2YXRlS2V5V0sgPSBzdHJpbmdWYWx1ZSh0ZXN0S2V5RGljdGlvbmFyeSwgIlByaXZhdGVLZXki
KTsKKyAgICAgICAgYXV0byBhdHRyTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3RLZXlEaWN0aW9u
YXJ5LCAiQXR0ckxhYmVsIik7CisgICAgICAgIGF1dG8gYXBwbGljYXRpb25UYWdXSyA9IHN0cmlu
Z1ZhbHVlKHRlc3RLZXlEaWN0aW9uYXJ5LCAiQXBwbGljYXRpb25UYWciKTsKICAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmFkZFRlc3RLZXlUb0tleWNoYWluKHRvV1RGU3RyaW5n
KHByaXZhdGVLZXlXSyksIHRvV1RGU3RyaW5nKGF0dHJMYWJlbFdLKSwgdG9XVEZTdHJpbmcoYXBw
bGljYXRpb25UYWdXSykpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFuVXBLZXlj
aGFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgdGVzdERpY3Rp
b25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpOwotICAgICAgICBXS1N0cmlu
Z1JlZiBhdHRyTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkpKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXBwbGljYXRpb25MYWJlbEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFiZWwiKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5LCBhcHBsaWNh
dGlvbkxhYmVsS2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byB0ZXN0RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gYXR0ckxhYmVsV0sgPSBz
dHJpbmdWYWx1ZSh0ZXN0RGljdGlvbmFyeSwgIkF0dHJMYWJlbCIpOworICAgICAgICBhdXRvIGFw
cGxpY2F0aW9uTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXBwbGljYXRp
b25MYWJlbCIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYW5VcEtl
eWNoYWluKHRvV1RGU3RyaW5nKGF0dHJMYWJlbFdLKSwgYXBwbGljYXRpb25MYWJlbFdLID8gdG9X
VEZTdHJpbmcoYXBwbGljYXRpb25MYWJlbFdLKSA6IFN0cmluZygpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJLZXlFeGlzdHNJbktleWNoYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiB0ZXN0RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBhdHRyTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
dHRyTGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGF0dHJMYWJlbFdLID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERpY3Rpb25hcnks
IGF0dHJMYWJlbEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBhcHBsaWNhdGlvbkxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQXBwbGljYXRpb25MYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXBwbGljYXRp
b25MYWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkodGVzdERpY3Rpb25hcnksIGFwcGxpY2F0aW9uTGFiZWxLZXkuZ2V0KCkpKTsKLQorICAg
ICAgICBhdXRvIHRlc3REaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBhdHRyTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAi
QXR0ckxhYmVsIik7CisgICAgICAgIGF1dG8gYXBwbGljYXRpb25MYWJlbFdLID0gc3RyaW5nVmFs
dWUodGVzdERpY3Rpb25hcnksICJBcHBsaWNhdGlvbkxhYmVsIik7CiAgICAgICAgIGJvb2wga2V5
RXhpc3RzSW5LZXljaGFpbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5rZXlFeGlzdHNJ
bktleWNoYWluKHRvV1RGU3RyaW5nKGF0dHJMYWJlbFdLKSwgdG9XVEZTdHJpbmcoYXBwbGljYXRp
b25MYWJlbFdLKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUoa2V5RXhpc3RzSW5LZXljaGFpbikpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoa2V5RXhp
c3RzSW5LZXljaGFpbikpOwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0Nv
dW50IikpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXJ2ZXJUcnVzdEV2
YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQoKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCIpKQorICAgICAgICByZXR1
cm4gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50KCkpKTsKIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2hvdWxkRGlzbWlzc0phdmFT
Y3JpcHRBbGVydHNBc3luY2hyb25vdXNseSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERpc21pc3NKYXZhU2Ny
aXB0QWxlcnRzQXN5bmNocm9ub3VzbHkoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERpc21pc3NKYXZhU2NyaXB0
QWxlcnRzQXN5bmNocm9ub3VzbHkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTg0OCwxNiArMTMzMCwxMyBAQCBXS1JldGFp
blB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNz
YWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZv
clRlc3RpbmciKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVz
dGluZyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3Rpbmco
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIikpIHsKICAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VSTEdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tVUkxSZWYgdXJsID0gc3RhdGljX2Nhc3Q8V0tVUkxSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRy
aWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKHVybCk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVz
dGluZyhzdGF0aWNfY2FzdDxXS1VSTFJlZj4obWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCkBAIC0xOTAyLDE3ICsxMzgxLDEwIEBAIHZvaWQgVGVzdEludm9j
YXRpb246OnJ1blVJU2lkZVNjcmlwdChXS1N0cmluZ1JlZiBzY3JpcHQsIHVuc2lnbmVkIHNjcmlw
dENhbGxiYWNrCiAKIHZvaWQgVGVzdEludm9jYXRpb246OnVpU2NyaXB0RGlkQ29tcGxldGUoY29u
c3QgU3RyaW5nJiByZXN1bHQsIHVuc2lnbmVkIHNjcmlwdENhbGxiYWNrSUQpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbFVJU2lkZVNjcmlwdENhbGxiYWNrIikpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHJlc3VsdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc3Vs
dCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IGNhbGxiYWNrSURWYWx1ZSA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoc2NyaXB0Q2FsbGJhY2tJRCkpOwotCi0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNz
YWdlQm9keS5nZXQoKSwgcmVzdWx0S2V5LmdldCgpLCB0b1dLKHJlc3VsdCkuZ2V0KCkpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGNhbGxiYWNrSURLZXkuZ2V0
KCksIGNhbGxiYWNrSURWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNl
dFZhbHVlKG1lc3NhZ2VCb2R5LCAiUmVzdWx0IiwgcmVzdWx0KTsKKyAgICBzZXRWYWx1ZShtZXNz
YWdlQm9keSwgIkNhbGxiYWNrSUQiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2NyaXB0Q2FsbGJh
Y2tJRCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbFVJU2lkZVNjcmlwdENhbGxiYWNrIiwg
bWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpvdXRwdXRUZXh0
KGNvbnN0IFdURjo6U3RyaW5nJiB0ZXh0KQpAQCAtMTkyMiwxNzQgKzEzOTQsMTQzIEBAIHZvaWQg
VGVzdEludm9jYXRpb246Om91dHB1dFRleHQoY29uc3QgV1RGOjpTdHJpbmcmIHRleHQpCiAKIHZv
aWQgVGVzdEludm9jYXRpb246OmRpZEJlZ2luU3dpcGUoKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNhbGxEaWRCZWdpblN3aXBlQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmll
dygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IkNhbGxEaWRCZWdpblN3aXBlQ2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6
d2lsbEVuZFN3aXBlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsV2lsbEVuZFN3
aXBlQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxXaWxsRW5kU3dpcGVDYWxs
YmFjayIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRFbmRTd2lwZSgpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZEVuZFN3aXBlQ2FsbGJhY2siKSk7Ci0gICAgV0tQ
YWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIkNhbGxEaWRFbmRTd2lwZUNhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdElu
dm9jYXRpb246OmRpZFJlbW92ZVN3aXBlU25hcHNob3QoKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNhbGxEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2siKSk7Ci0gICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2siKTsKIH0KIAogdm9p
ZCBUZXN0SW52b2NhdGlvbjo6bm90aWZ5RG93bmxvYWREb25lKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJOb3RpZnlEb3dubG9hZERvbmUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIk5v
dGlmeURvd25sb2FkRG9uZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0
YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbERpZENsZWFyU3RhdGlzdGljc0luTWVtb3J5QW5kUGVyc2lzdGVudFN0b3Jl
IikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
MCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlB
bmRQZXJzaXN0ZW50U3RvcmUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJT
dGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbERpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwi
KSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAw
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vi
c2l0ZURhdGFSZW1vdmFsIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFNob3Vs
ZERvd25ncmFkZVJlZmVycmVyKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlk
U2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxE
aWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlciIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9u
OjpkaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsRGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKTsKLSAg
ICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNv
b2tpZXMiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0Rmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRT
ZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiQ2FsbERpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENv
b2tpZXMiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRUb1NhbWVTaXRl
U3RyaWN0Q29va2llcyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBh
cnR5SG9zdENOQU1FRG9tYWluKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlk
U2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRv
SW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4iKTsKIH0KIAogdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIikpOwotICAgIFdL
UGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlc2V0U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0
YXRlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVzZXRTdGF0aXN0aWNz
VG9Db25zaXN0ZW50U3RhdGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZXNldFN0
YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0ZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpk
aWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
YWxsRGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdCIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRv
SW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2Fs
bERpZFNldEJsb2NrQ29va2llc0Zvckhvc3QiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Q2FsbERpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNh
bGxEaWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246
OmRpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSk7Ci0g
ICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRMYXN0U2VlbigpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldExhc3RTZWVuIikpOwotICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJDYWxsRGlkU2V0TGFzdFNlZW4iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkTWVyZ2VTdGF0aXN0aWMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRN
ZXJnZVN0YXRpc3RpYyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZE1lcmdlU3RhdGlz
dGljIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRFeHBpcmVkU3RhdGlzdGlj
IikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
MCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0RXhwaXJlZFN0YXRpc3RpYyIpOwog
fQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRQcmV2YWxlbnRSZXNvdXJjZSgpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlIikpOwot
ICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2UiKTsKIH0KIAog
dm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlKCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlIikp
OwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlIik7
CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbigp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFj
dGlvbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFj
dGlvbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlQWxsU3RvcmFnZUFj
Y2Vzc0VudHJpZXMoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkNhbGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiKSk7Ci0gICAg
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFp
bnMpCi0gICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGRvbWFpbi51dGY4KCkuZGF0YSgpKSkuZ2V0
KCkpOwotICAgIAotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNz
YWdlQm9keS5nZXQoKSwgdG9XSyhkb21haW4pLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IkNhbGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiLCBtZXNzYWdlQm9keS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJj
ZURvbWFpbnMoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNhbGxEaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zIikpOwotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5z
KQotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkb21haW4udXRmOCgpLmRhdGEoKSkpLmdldCgp
KTsKLQotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9k
eS5nZXQoKSwgdG9XSyhkb21haW4pLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxE
aWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zIiwgbWVzc2FnZUJvZHkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3Jl
ZGVudGlhbHNDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlbW92ZUFs
bFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246
OmRpZFNldEFwcEJvdW5kRG9tYWlucygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bERpZFNldEFwcEJvdW5kRG9tYWlucyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2Fs
bERpZFNldEFwcEJvdW5kRG9tYWlucyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcygpCkBAIC0yMTA0LDggKzE1NDUsNyBAQCB2b2lkIFRlc3RJ
bnZvY2F0aW9uOjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKCkKIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6cGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlBlcmZvcm1DdXN0b21NZW51QWN0aW9uIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJQZXJmb3Jt
Q3VzdG9tTWVudUFjdGlvbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbml0aWFsaXpl
V2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5lZWRlZCgpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGExNWZjMGEwZTlhZmFlMzQxY2NjZDA2MDM4M2VkMzAxYTcyNDFiNmIu
LjYxNzE4YWM2NTU4ODE3NzhlODNjOTdmYmUxNzgyNzhjODcwZTZiOGYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNTUsNiArMzU1LDggQEAKIAkJODQxQ0MwMEQxODEx
ODVCRjAwNDJFOUI2IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MUND
MDBFMTgxMTg1QkYwMDQyRTlCNiAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOERENzZG
QTEwNDg2QUE3NjAwRDk2QjVFIC8qIFdlYktpdFRlc3RSdW5uZXIgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJs
ZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXI7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTkzMzhEMUJBMjUwQTc5RUIwMEU4MjdGNiAv
KiBKU0Jhc2ljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0Jhc2ljcy5oOyBwYXRoID0gLi4vVGVzdFJ1
bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5MzM4RDFCRTI1MEJEOUREMDBFODI3RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEaWN0aW9uYXJ5RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzNzY0MTc2MjEwRDczNjAwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2lu
ZG93Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViS2l0VGVz
dFJ1bm5lcldpbmRvdy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzcy
MTBENzM2MTAwQTNEQUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0M3ODgxRjI1MEM2OUU0MDBDMEFBMjQgLyogUmVmdGVzdEZ1
bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZWZ0ZXN0
RnVuY3Rpb25zLmNwcDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvUmVmdGVzdEZ1bmN0aW9u
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTIsNiArODk0LDcgQEAKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMzc4RDQ0MjIxMzM0NkQwMDAw
NkE3NzdCIC8qIGNvbmZpZy5oICovLAorCQkJCTkzMzhEMUJFMjUwQkQ5REQwMEU4MjdGNiAvKiBE
aWN0aW9uYXJ5RnVuY3Rpb25zLmggKi8sCiAJCQkJQkM5OUE0ODQxMjA4OTAxQTAwN0U5RjA4IC8q
IFN0cmluZ0Z1bmN0aW9ucy5oICovLAogCQkJCTlCMzZBMjcwMjA5NDUzQTAwMDNFMDY1MSAvKiBX
aGF0VG9EdW1wLmggKi8sCiAJCQkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9XZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dl
Yk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcAppbmRleCA0NTg2NzdmNTA5YjExNzQzOTNhZTRjMzhj
YTA5NDU3YzhlODBmODRjLi5jZDVmYzY2MjE1YTRiMDM3OTY4MmM3MmIyZWMxZDFmMGI5ODA3M2Iy
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLmNwcApAQCAtMTI2LDggKzEyNiw4IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6
OmNsb3NlV2ViTm90aWZpY2F0aW9uKFdLTm90aWZpY2F0aW9uUmVmIG5vdGlmaWNhdGlvCiAKICAg
ICByZW1vdmVHbG9iYWxJREZyb21JRE1hcChtX2xvY2FsVG9HbG9iYWxOb3RpZmljYXRpb25JRE1h
cCwgaWQpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHdrSUQgPSBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKGlkKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFy
cmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIHdrSUQgPSBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKGlkKSk7CisgICAgYXV0byBhcnJheSA9IGFkb3B0V0soV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgV0tBcnJheUFwcGVuZEl0ZW0oYXJyYXkuZ2V0KCks
IHdrSUQuZ2V0KCkpOwogICAgIFdLTm90aWZpY2F0aW9uTWFuYWdlclByb3ZpZGVyRGlkQ2xvc2VO
b3RpZmljYXRpb25zKG5vdGlmaWNhdGlvbk1hbmFnZXIsIGFycmF5LmdldCgpKTsKIH0KQEAgLTE0
NCw3ICsxNDQsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyOjpyZW1vdmVOb3RpZmlj
YXRpb25NYW5hZ2VyKFdLTm90aWZpY2F0aW9uTWFuYWdlclJlZgogICAgIGF1dG8gdG9SZW1vdmUg
PSBpdGVyYXRvci0+dmFsdWU7CiAgICAgV0tSZXRhaW5QdHI8V0tOb3RpZmljYXRpb25NYW5hZ2Vy
UmVmPiBndWFyZChtYW5hZ2VyKTsKICAgICBtX293bmVkTm90aWZpY2F0aW9ucy5yZW1vdmUoaXRl
cmF0b3IpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0
V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byBhcnJheSA9IGFkb3B0V0soV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgZm9yICh1aW50NjRfdCBub3RpZmljYXRpb25JRCA6
IHRvUmVtb3ZlKSB7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fb3duaW5nTWFuYWdlci5yZW1v
dmUobm90aWZpY2F0aW9uSUQpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nl
c3MpOwpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6OnJl
c2V0KCkKICAgICBmb3IgKGF1dG8mIG5vdGlmaWNhdGlvblBhaXIgOiBtX293bmVkTm90aWZpY2F0
aW9ucykgewogICAgICAgICBpZiAobm90aWZpY2F0aW9uUGFpci52YWx1ZS5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlS
ZWY+IGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICAgICAgYXV0
byBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgICAgIGZvciAo
dWludDY0X3Qgbm90aWZpY2F0aW9uSUQgOiBub3RpZmljYXRpb25QYWlyLnZhbHVlKQogICAgICAg
ICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oYXJyYXkuZ2V0KCksIGFkb3B0V0soV0tVSW50NjRDcmVh
dGUobm90aWZpY2F0aW9uSUQpKS5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dv
cmtRdWV1ZU1hbmFnZXIuY3BwCmluZGV4IDIwZDVhMWFhZGIyOWUzMzJiZTI5YjJiMWY0YzIzNjA5
MTliYTBmZjEuLmM5ZDQ3ZmQ2M2I4NGU0NmU0NjJhNTBmZjRiZTA3YmYzNDY4YWNhNjAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcApAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIldvcmtRdWV1ZU1hbmFnZXIuaCIKIAogI2luY2x1ZGUgIlBsYXRmb3Jt
V2ViVmlldy5oIgorI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLUGFnZS5oPgogI2luY2x1ZGUgPFdlYktp
dC9XS1BhZ2VQcml2YXRlLmg+CkBAIC03NSw3ICs3Niw3IEBAIHRlbXBsYXRlIDxXb3JrUXVldWVJ
dGVtOjpUeXBlIHR5cGU+CiBjbGFzcyBTY3JpcHRJdGVtIDogcHVibGljIFdvcmtRdWV1ZUl0ZW0g
ewogcHVibGljOgogICAgIGV4cGxpY2l0IFNjcmlwdEl0ZW0oY29uc3QgU3RyaW5nJiBzY3JpcHQp
Ci0gICAgICAgIDogbV9zY3JpcHQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhzY3JpcHQudXRmOCgpLmRhdGEoKSkpKQorICAgICAgICA6IG1fc2NyaXB0KHRvV0soc2NyaXB0
KSkKICAgICB7CiAgICAgfQogCkBAIC0xNjEsNyArMTYyLDcgQEAgdm9pZCBXb3JrUXVldWVNYW5h
Z2VyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3Ry
aW5nJgogICAgIGNsYXNzIExvYWRIVE1MU3RyaW5nSXRlbSA6IHB1YmxpYyBXb3JrUXVldWVJdGVt
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIExvYWRIVE1MU3RyaW5nSXRlbShjb25zdCBTdHJpbmcm
IGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiB1bnJlYWNoYWJs
ZVVSTCkKLSAgICAgICAgICAgIDogbV9jb250ZW50KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoY29udGVudC51dGY4KCkuZGF0YSgpKSkpCisgICAgICAgICAgICA6IG1fY29u
dGVudCh0b1dLKGNvbnRlbnQpKQogICAgICAgICAgICAgLCBtX2Jhc2VVUkwoYWRvcHRXSyhXS1VS
TENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhiYXNlVVJMLnV0ZjgoKS5kYXRhKCkpKSkKICAgICAgICAg
ICAgICwgbV91bnJlYWNoYWJsZVVSTChhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHVucmVhY2hhYmxlVVJMLnV0ZjgoKS5kYXRhKCkpKSkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKaW5kZXggNjczMzhmNGFhODI3
M2NmYjY4NzIyOWJmYmFkM2ZhNGRkYjM3YjRkZi4uMDFjNTMxYTliNmFjZThlODE2OTQ4ZjY3NmNl
NjMxZjUyNzk0YjZjNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0
SW52b2NhdGlvbkNHLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZv
Y2F0aW9uQ0cuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRl
Q0dDb250ZXh0RnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSkKICAgICBzaXplX3Qgcm93Qnl0
ZXMgPSAoNCAqIHBpeGVsc1dpZGUgKyA2MykgJiB+NjM7CiAKICAgICAvLyBDcmVhdGluZyB0aGlz
IGJpdG1hcCBpbiB0aGUgZGV2aWNlIGNvbG9yIHNwYWNlIHNob3VsZCBwcmV2ZW50IGFueSBjb2xv
ciBjb252ZXJzaW9uIHdoZW4gdGhlIGltYWdlIG9mIHRoZSB3ZWIgdmlldyBpcyBkcmF3biBpbnRv
IGl0LgotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENG
KENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICBhdXRvIGNvbG9yU3BhY2UgPSBh
ZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKICAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBwaXhlbHNXaWRlLCBwaXhlbHNIaWdo
LCA4LCByb3dCeXRlcywgY29sb3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCk7CiAgICAgaWYgKCFjb250ZXh0KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIENHQ29udGV4
dFJlZiBjcmVhdGVDR0NvbnRleHRGcm9tQ0dJbWFnZShDR0ltYWdlUmVmIGltYWdlKQogCiBzdGF0
aWMgQ0dDb250ZXh0UmVmIGNyZWF0ZUNHQ29udGV4dEZyb21JbWFnZShXS0ltYWdlUmVmIHdrSW1h
Z2UpCiB7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihXS0ltYWdl
Q3JlYXRlQ0dJbWFnZSh3a0ltYWdlKSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoV0tJbWFn
ZUNyZWF0ZUNHSW1hZ2Uod2tJbWFnZSkpOwogICAgIHJldHVybiBjcmVhdGVDR0NvbnRleHRGcm9t
Q0dJbWFnZShpbWFnZS5nZXQoKSk7CiB9CiAKQEAgLTEwOSw5ICsxMDksOSBAQCB2b2lkIGNvbXB1
dGVTSEExSGFzaFN0cmluZ0ZvckNvbnRleHQoQ0dDb250ZXh0UmVmIGJpdG1hcENvbnRleHQsIGNo
YXIgaGFzaFN0cmluZwogCiBzdGF0aWMgdm9pZCBkdW1wQml0bWFwKENHQ29udGV4dFJlZiBiaXRt
YXBDb250ZXh0LCBjb25zdCBjaGFyKiBjaGVja3N1bSkKIHsKLSAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENv
bnRleHQpKTsKLSAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gaW1hZ2VEYXRhID0gYWRv
cHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZURl
c3RpbmF0aW9uUmVmPiBpbWFnZURlc3QgPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0
ZVdpdGhEYXRhKGltYWdlRGF0YS5nZXQoKSwga1VUVHlwZVBORywgMSwgMCkpOworICAgIGF1dG8g
aW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQp
KTsKKyAgICBhdXRvIGltYWdlRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAw
KSk7CisgICAgYXV0byBpbWFnZURlc3QgPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0
ZVdpdGhEYXRhKGltYWdlRGF0YS5nZXQoKSwga1VUVHlwZVBORywgMSwgMCkpOwogICAgIENHSW1h
Z2VEZXN0aW5hdGlvbkFkZEltYWdlKGltYWdlRGVzdC5nZXQoKSwgaW1hZ2UuZ2V0KCksIDApOwog
ICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGltYWdlRGVzdC5nZXQoKSk7CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0g
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0NyYXNoUmVwb3J0ZXJJbmZvLm1tCmluZGV4
IDRjNzlhYjViODVkNjQxODlhN2UwYTI5NmVlYTkwYzFkODExOGRjM2QuLjQxMGQ5ZmRjYjMxZTJj
NmU2Y2E3NjQ5NTYxNDYwNjM4YzA5MTA1ZWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9DcmFzaFJlcG9ydGVySW5mby5tbQpAQCAtMzUsMTIgKzM1LDEyIEBAIG5hbWVz
cGFjZSBXVFIgewogCiBzdGF0aWMgU3RyaW5nIHRlc3RQYXRoRnJvbVVSTChXS1VSTFJlZiB1cmwp
CiB7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZV
Ukwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7CisgICAgYXV0byBjZlVSTCA9IGFkb3B0Q0Yo
V0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7CiAgICAgaWYgKCFjZlVS
TCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBzY2hlbWVDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5U2NoZW1lKGNmVVJMLmdldCgpKSk7
Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwYXRoQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJM
Q29weVBhdGgoY2ZVUkwuZ2V0KCkpKTsKKyAgICBhdXRvIHNjaGVtZUNGU3RyaW5nID0gYWRvcHRD
RihDRlVSTENvcHlTY2hlbWUoY2ZVUkwuZ2V0KCkpKTsKKyAgICBhdXRvIHBhdGhDRlN0cmluZyA9
IGFkb3B0Q0YoQ0ZVUkxDb3B5UGF0aChjZlVSTC5nZXQoKSkpOwogCiAgICAgU3RyaW5nIHNjaGVt
ZVN0cmluZyhzY2hlbWVDRlN0cmluZy5nZXQoKSk7CiAgICAgU3RyaW5nIHBhdGhTdHJpbmcocGF0
aENGU3RyaW5nLmdldCgpKTsKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIFN0cmluZyB0ZXN0UGF0
aEZyb21VUkwoV0tVUkxSZWYgdXJsKQogICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2Uoc2NoZW1lU3RyaW5nLCAiaHR0cCIpICYmICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShzY2hlbWVTdHJpbmcsICJodHRwcyIpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
LSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGhvc3RDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxD
b3B5SG9zdE5hbWUoY2ZVUkwuZ2V0KCkpKTsKKyAgICBhdXRvIGhvc3RDRlN0cmluZyA9IGFkb3B0
Q0YoQ0ZVUkxDb3B5SG9zdE5hbWUoY2ZVUkwuZ2V0KCkpKTsKICAgICBTdHJpbmcgaG9zdFN0cmlu
Zyhob3N0Q0ZTdHJpbmcuZ2V0KCkpOwogICAgIGlmIChob3N0U3RyaW5nID09ICIxMjcuMC4wLjEi
KQogICAgICAgICByZXR1cm4gcGF0aFN0cmluZzsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQppbmRleCAzNjUzMzdhZGY5OWYwYjlj
ZGQ2YWYwOTdmYzAyYmU4N2E2NzE2NjU3Li43MTMwMzI2YTNlNjFjZTJiZDBhNzZkZjcyODk4ZDll
NGIwMDYzYjA0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RD
b250cm9sbGVyQ29jb2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0
Q29udHJvbGxlckNvY29hLm1tCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1Jbml0aWFsaXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNv
bnN0IFQKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KFdLUGFn
ZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewotICAgIFJl
dGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRv
cHROUyhbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24gY29weV0pOworICAgIGF1dG8gY29waWVk
Q29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uIGNvcHld
KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG9wdGlvbnMudXNlRGF0YURl
dGVjdGlvbikKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1
bm5lcldLV2ViVmlldy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5l
cldLV2ViVmlldy5tbQppbmRleCA1Yzg2MmU5YjBlYzc3ZDA1ZTA3NzI5ZGNlNjQ3NmY1ODkyMTIz
YjM4Li45MTVmNDc2YzYxNWFlNjEwOTBkOTBjYTc5NzZiZjhmMmM5OWI1NjZiIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCkBA
IC05MCw3ICs5MCw3IEBAIElHTk9SRV9XQVJOSU5HU19CRUdJTigiZGVwcmVjYXRlZC1pbXBsZW1l
bnRhdGlvbnMiKQogLSAodm9pZClkcmFnSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGF0OihOU1Bv
aW50KXZpZXdMb2NhdGlvbiBvZmZzZXQ6KE5TU2l6ZSlpbml0aWFsT2Zmc2V0IGV2ZW50OihOU0V2
ZW50ICopZXZlbnQgcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGJvYXJkIHNvdXJjZTooaWQp
c291cmNlT2JqIHNsaWRlQmFjazooQk9PTClzbGlkZUZsYWcKIElHTk9SRV9XQVJOSU5HU19FTkQK
IHsKLSAgICBSZXRhaW5QdHI8V2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mbz4gZHJhZ2dpbmdJ
bmZvID0gYWRvcHROUyhbW1dlYktpdFRlc3RSdW5uZXJEcmFnZ2luZ0luZm8gYWxsb2NdIGluaXRX
aXRoSW1hZ2U6YW5JbWFnZSBvZmZzZXQ6aW5pdGlhbE9mZnNldCBwYXN0ZWJvYXJkOnBib2FyZCBz
b3VyY2U6c291cmNlT2JqXSk7CisgICAgYXV0byBkcmFnZ2luZ0luZm8gPSBhZG9wdE5TKFtbV2Vi
S2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mbyBhbGxvY10gaW5pdFdpdGhJbWFnZTphbkltYWdlIG9m
ZnNldDppbml0aWFsT2Zmc2V0IHBhc3RlYm9hcmQ6cGJvYXJkIHNvdXJjZTpzb3VyY2VPYmpdKTsK
ICAgICBbc2VsZiBkcmFnZ2luZ1VwZGF0ZWQ6ZHJhZ2dpbmdJbmZvLmdldCgpXTsKIH0KICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRy
b2xsZXJDb2NvYS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRy
b2xsZXJDb2NvYS5oCmluZGV4IGFiYzBhNTBjOTcwYzFiYjMzZjFmYjEwOTM5MzUyYWY4Y2E3ZTA0
MDMuLmNjOTgxMzk0MjRmMjg4MDY0NDM5ODk4MzQ1YzNlN2Q0ZWE1NTMzNzggMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29h
LmgKQEAgLTMyLDEyICszMiwxNyBAQCBPQkpDX0NMQVNTIFRlc3RSdW5uZXJXS1dlYlZpZXc7CiBu
YW1lc3BhY2UgV1RSIHsKIAogY2xhc3MgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EgOiBwdWJsaWMg
VUlTY3JpcHRDb250cm9sbGVyQ29tbW9uIHsKLXB1YmxpYzoKK3Byb3RlY3RlZDoKKyAgICBleHBs
aWNpdCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShVSVNjcmlwdENvbnRleHQmKTsKKyAgICBUZXN0
UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3KCkgY29uc3Q7CisKKyAgICB2b2lkIGRvQXN5bmNUYXNr
KEpTVmFsdWVSZWYpIG92ZXJyaWRlOworCitwcml2YXRlOgogICAgIHZvaWQgc2V0Vmlld1NjYWxl
KGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRNaW5pbXVtRWZmZWN0aXZlV2lkdGgoZG91
YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIGJlY29tZUZpcnN0UmVzcG9uZGVyKCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCByZXNpZ25GaXJzdFJlc3BvbmRlcigpIG92ZXJyaWRlOwotICAgIHZvaWQgZG9B
c3luY1Rhc2soSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVWaWV3RnJvbVdp
bmRvdyhKU1ZhbHVlUmVmKSBvdmVycmlkZTsKICAgICB2b2lkIGFkZFZpZXdUb1dpbmRvdyhKU1Zh
bHVlUmVmKSBvdmVycmlkZTsKICAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1Jl
ZiwgSlNTdHJpbmdSZWYpIG92ZXJyaWRlOwpAQCAtNTksMTEgKzY0LDYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBpbnNlcnRBdHRhY2htZW50Rm9yRmlsZVBhdGgoSlNTdHJpbmdSZWYgZmlsZVBhdGgs
IEpTU3RyaW5nUmVmIGNvbnRlbnRUeXBlLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKSBvdmVycmlkZTsK
IAotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29udHJvbGxlckNvY29hKFVJU2Ny
aXB0Q29udGV4dCYpOwotICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsK
LQotcHJpdmF0ZToKICAgICB2b2lkIGNvbXBsZXRlVGFza0FzeW5jaHJvbm91c2x5QWZ0ZXJBY3Rp
dml0eVN0YXRlVXBkYXRlKHVuc2lnbmVkIGNhbGxiYWNrSUQpOwogfTsKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbSBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0K
aW5kZXggOThiYjc0YjQxM2I5NTAzZTY5ODgwN2VkYjg2Mjk4ZTM3MGRjZDBmMi4uNTg0Nzk3NmYy
MTg1N2Y1M2Y0ODVlY2IxZmIxZWI5MTE3MjFhNTZkYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tCkBAIC0xMzUs
MjIgKzEzNSwxOCBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjphZGRWaWV3VG9XaW5k
b3coSlNWYWx1ZVJlZiBjYWxsYmFjaykKIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6
b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2VSZWYsIEpTU3RyaW5nUmVm
IHZhbHVlUmVmKQogewotICAgIFdLUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gd2ViVmlldygp
LmNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXM7Ci0KLSAgICBTdHJpbmcgcHJlZmVyZW5jZSA9IHRv
V1RGU3RyaW5nKHRvV0socHJlZmVyZW5jZVJlZikpOwotICAgIFN0cmluZyB2YWx1ZSA9IHRvV1RG
U3RyaW5nKHRvV0sodmFsdWVSZWYpKTsKLSAgICBpZiAocHJlZmVyZW5jZSA9PSAiV2ViS2l0TWlu
aW11bUZvbnRTaXplIikKLSAgICAgICAgcHJlZmVyZW5jZXMubWluaW11bUZvbnRTaXplID0gdmFs
dWUudG9Eb3VibGUoKTsKKyAgICBpZiAodG9XVEZTdHJpbmcocHJlZmVyZW5jZVJlZikgPT0gIldl
YktpdE1pbmltdW1Gb250U2l6ZSIpCisgICAgICAgIHdlYlZpZXcoKS5jb25maWd1cmF0aW9uLnBy
ZWZlcmVuY2VzLm1pbmltdW1Gb250U2l6ZSA9IHRvV1RGU3RyaW5nKHZhbHVlUmVmKS50b0RvdWJs
ZSgpOwogfQogCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpmaW5kU3RyaW5nKEpTU3Ry
aW5nUmVmIHN0cmluZywgdW5zaWduZWQgbG9uZyBvcHRpb25zLCB1bnNpZ25lZCBsb25nIG1heENv
dW50KQogewotICAgIFt3ZWJWaWV3KCkgX2ZpbmRTdHJpbmc6dG9XVEZTdHJpbmcodG9XSyhzdHJp
bmcpKSBvcHRpb25zOm9wdGlvbnMgbWF4Q291bnQ6bWF4Q291bnRdOworICAgIFt3ZWJWaWV3KCkg
X2ZpbmRTdHJpbmc6dG9XVEZTdHJpbmcoc3RyaW5nKSBvcHRpb25zOm9wdGlvbnMgbWF4Q291bnQ6
bWF4Q291bnRdOwogfQogCiBKU09iamVjdFJlZiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6Y29u
dGVudHNPZlVzZXJJbnRlcmZhY2VJdGVtKEpTU3RyaW5nUmVmIGludGVyZmFjZUl0ZW0pIGNvbnN0
CiB7Ci0gICAgTlNEaWN0aW9uYXJ5ICpjb250ZW50RGljdGlvbmFyeSA9IFt3ZWJWaWV3KCkgX2Nv
bnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTp0b1dURlN0cmluZyh0b1dLKGludGVyZmFjZUl0ZW0p
KV07CisgICAgTlNEaWN0aW9uYXJ5ICpjb250ZW50RGljdGlvbmFyeSA9IFt3ZWJWaWV3KCkgX2Nv
bnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTp0b1dURlN0cmluZyhpbnRlcmZhY2VJdGVtKV07CiAg
ICAgcmV0dXJuIEpTVmFsdWVUb09iamVjdChtX2NvbnRleHQtPmpzQ29udGV4dCgpLCBbSlNWYWx1
ZSB2YWx1ZVdpdGhPYmplY3Q6Y29udGVudERpY3Rpb25hcnkgaW5Db250ZXh0OltKU0NvbnRleHQg
Y29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6bV9jb250ZXh0LT5qc0NvbnRleHQoKV1dLkpT
VmFsdWVSZWYsIG51bGxwdHIpOwogfQogCkBAIC0yMTksMTIgKzIxNSwxMCBAQCB2b2lkIFVJU2Ny
aXB0Q29udHJvbGxlckNvY29hOjpwYXN0ZSgpCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29h
OjppbnNlcnRBdHRhY2htZW50Rm9yRmlsZVBhdGgoSlNTdHJpbmdSZWYgZmlsZVBhdGgsIEpTU3Ry
aW5nUmVmIGNvbnRlbnRUeXBlLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIHVuc2lnbmVk
IGNhbGxiYWNrSUQgPSBtX2NvbnRleHQtPnByZXBhcmVGb3JBc3luY1Rhc2soY2FsbGJhY2ssIENh
bGxiYWNrVHlwZU5vblBlcnNpc3RlbnQpOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB0ZXN0
VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuY3VycmVudFRlc3RVUkwoKSkpOwotICAgIFJldGFpblB0cjxO
U1VSTD4gYXR0YWNobWVudFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6dG9XVEZTdHJpbmco
dG9XSyhmaWxlUGF0aCkpIHJlbGF0aXZlVG9VUkw6KF9fYnJpZGdlIE5TVVJMICopdGVzdFVSTC5n
ZXQoKV07Ci0KLSAgICBhdXRvIGZpbGVXcmFwcGVyID0gYWRvcHROUyhbW05TRmlsZVdyYXBwZXIg
YWxsb2NdIGluaXRXaXRoVVJMOmF0dGFjaG1lbnRVUkwuZ2V0KCkgb3B0aW9uczowIGVycm9yOm5p
bF0pOwotICAgIFt3ZWJWaWV3KCkgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6Zmls
ZVdyYXBwZXIuZ2V0KCkgY29udGVudFR5cGU6dG9XVEZTdHJpbmcodG9XSyhjb250ZW50VHlwZSkp
IGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICBhdXRvIHRlc3RVUkwgPSBhZG9wdENG
KFdLVVJMQ29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1bHQsIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5jdXJyZW50VGVzdFVSTCgpKSk7CisgICAgYXV0byBhdHRhY2htZW50VVJMID0gW05T
VVJMIGZpbGVVUkxXaXRoUGF0aDp0b1dURlN0cmluZyhmaWxlUGF0aCkgcmVsYXRpdmVUb1VSTDoo
X19icmlkZ2UgTlNVUkwgKil0ZXN0VVJMLmdldCgpXTsKKyAgICBhdXRvIGZpbGVXcmFwcGVyID0g
YWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRoVVJMOmF0dGFjaG1lbnRVUkwg
b3B0aW9uczowIGVycm9yOm5pbF0pOworICAgIFt3ZWJWaWV3KCkgX2luc2VydEF0dGFjaG1lbnRX
aXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIuZ2V0KCkgY29udGVudFR5cGU6dG9XVEZTdHJpbmco
Y29udGVudFR5cGUpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKICAgICAgICAgaWYgKCFt
X2NvbnRleHQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fY29udGV4dC0+YXN5bmNU
YXNrQ29tcGxldGUoY2FsbGJhY2tJRCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L0hJREV2ZW50R2VuZXJhdG9yLm1tCmluZGV4IGUyOTgzOGJhODI4ZmI0YmQ5MDg1N2FiNmJlZjJm
ZDQ2NTlmYjQyMTguLmQ0YjExNDgxMWVlNmJkZDI1MTVkZGUzNTVlZTEzZGU2MjExMGQ1NTAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1t
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tCkBA
IC0xODksNyArMTg5LDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXQKIAogLSAodm9pZClfc2VuZElP
SElES2V5Ym9hcmRFdmVudDoodWludDY0X3QpdGltZXN0YW1wIHVzYWdlOih1aW50MzJfdCl1c2Fn
ZSBpc0tleURvd246KGJvb2wpaXNLZXlEb3duCiB7Ci0gICAgUmV0YWluUHRyPElPSElERXZlbnRS
ZWY+IGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlS2V5Ym9hcmRFdmVudChrQ0ZB
bGxvY2F0b3JEZWZhdWx0LAorICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZlbnRD
cmVhdGVLZXlib2FyZEV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsCiAgICAgICAgIHRpbWVzdGFt
cCwKICAgICAgICAga0hJRFBhZ2VfS2V5Ym9hcmRPcktleXBhZCwKICAgICAgICAgdXNhZ2UsCkBA
IC0zNjEsNyArMzYxLDcgQEAgLSAoSU9ISURFdmVudFJlZilfY3JlYXRlSU9ISURFdmVudFR5cGU6
KEhhbmRFdmVudFR5cGUpZXZlbnRUeXBlCiAgICAgICAgIGV2ZW50TWFzayB8PSBrSU9ISUREaWdp
dGl6ZXJFdmVudElkZW50aXR5OwogCiAgICAgdWludDY0X3QgbWFjaFRpbWUgPSBtYWNoX2Fic29s
dXRlX3RpbWUoKTsKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9w
dENGKElPSElERXZlbnRDcmVhdGVEaWdpdGl6ZXJFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBt
YWNoVGltZSwKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlRGln
aXRpemVyRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbWFjaFRpbWUsCiAgICAgICAgIGtJT0hJ
RERpZ2l0aXplclRyYW5zZHVjZXJUeXBlSGFuZCwKICAgICAgICAgMCwKICAgICAgICAgMCwKQEAg
LTQ1Myw3ICs0NTMsNyBAQCAtIChCT09MKV9zZW5kSElERXZlbnQ6KElPSElERXZlbnRSZWYpZXZl
bnRSZWYKICAgICAgICAgX2lvU3lzdGVtQ2xpZW50ID0gSU9ISURFdmVudFN5c3RlbUNsaWVudENy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKIAogICAgIGlmIChldmVudFJlZikgewotICAgICAg
ICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gc3Ryb25nRXZlbnQgPSBldmVudFJlZjsKKyAgICAg
ICAgYXV0byBzdHJvbmdFdmVudCA9IGV2ZW50UmVmOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewogICAgICAgICAgICAgdWludDMyX3QgY29udGV4
dElEID0gW1VJQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dLmtleVdpbmRvdy5fY29udGV4
dElkOwogICAgICAgICAgICAgQVNTRVJUKGNvbnRleHRJRCk7CkBAIC01MTIsNyArNTEyLDcgQEAg
LSAodm9pZClfdXBkYXRlVG91Y2hQb2ludHM6KENHUG9pbnQqKXBvaW50cyBjb3VudDooTlNVSW50
ZWdlciljb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRH
ZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6
aSB3aXRoUG9pbnRJbldpbmRvd0Nvb3JkaW5hdGVzOnBvaW50c1tpXSBpc1RvdWNoaW5nOllFU107
CiAgICAgfQogICAgIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFk
b3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOmhhbmRFdmVudFR5cGVdKTsKKyAgICBh
dXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6aGFuZEV2
ZW50VHlwZV0pOwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQog
CkBAIC01MjksNyArNTI5LDcgQEAgLSAodm9pZCl0b3VjaERvd25BdFBvaW50czooQ0dQb2ludCop
bG9jYXRpb25zIHRvdWNoQ291bnQ6KE5TVUludGVnZXIpdG91Y2hDb3VudAogICAgICAgICBbW0dl
bmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5k
b3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aW5kZXggd2l0aFBvaW50SW5XaW5kb3dD
b29yZGluYXRlczpsb2NhdGlvbnNbaW5kZXhdIGlzVG91Y2hpbmc6WUVTXTsKICAgICB9CiAKLSAg
ICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVh
dGVJT0hJREV2ZW50VHlwZTpIYW5kRXZlbnRUb3VjaGVkXSk7CisgICAgYXV0byBldmVudFJlZiA9
IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudFRvdWNoZWRdKTsK
ICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApAQCAtNTYzLDcg
KzU2Myw3IEBAIC0gKHZvaWQpbGlmdFVwQXRQb2ludHM6KENHUG9pbnQqKWxvY2F0aW9ucyB0b3Vj
aENvdW50OihOU1VJbnRlZ2VyKXRvdWNoQ291bnQKICAgICAgICAgW1tHZW5lcmF0ZWRUb3VjaGVz
RGVidWdXaW5kb3cgc2hhcmVkR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93XSB1cGRhdGVEZWJ1
Z0luZGljYXRvckZvclRvdWNoOmluZGV4IHdpdGhQb2ludEluV2luZG93Q29vcmRpbmF0ZXM6Q0dQ
b2ludFplcm8gaXNUb3VjaGluZzpOT107CiAgICAgfQogICAgIAotICAgIFJldGFpblB0cjxJT0hJ
REV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBl
OkhhbmRFdmVudExpZnRlZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9j
cmVhdGVJT0hJREV2ZW50VHlwZTpIYW5kRXZlbnRMaWZ0ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJ
REV2ZW50OmV2ZW50UmVmLmdldCgpXTsKICAgICAKICAgICBfYWN0aXZlUG9pbnRDb3VudCA9IG5l
d1BvaW50Q291bnQ7CkBAIC02NDEsNyArNjQxLDcgQEAgLSAodm9pZClzdHlsdXNEb3duQXRQb2lu
dDooQ0dQb2ludClsb2NhdGlvbiBhemltdXRoQW5nbGU6KENHRmxvYXQpYXppbXV0aEFuZ2xlIGEK
ICAgICBfYWN0aXZlUG9pbnRzWzBdLmF6aW11dGhBbmdsZSA9IE1fUEkgKiAyIC0gYXppbXV0aEFu
Z2xlOwogICAgIF9hY3RpdmVQb2ludHNbMF0uYWx0aXR1ZGVBbmdsZSA9IE1fUElfMiAtIGFsdGl0
dWRlQW5nbGU7CiAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9w
dENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudFRvdWNoZWRdKTsKKyAg
ICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5
bHVzRXZlbnRUb3VjaGVkXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQo
KV07CiB9CiAKQEAgLTY1NSw3ICs2NTUsNyBAQCAtICh2b2lkKXN0eWx1c01vdmVUb1BvaW50OihD
R1BvaW50KWxvY2F0aW9uIGF6aW11dGhBbmdsZTooQ0dGbG9hdClhemltdXRoQW5nbGUgYQogICAg
IF9hY3RpdmVQb2ludHNbMF0uYXppbXV0aEFuZ2xlID0gTV9QSSAqIDIgLSBhemltdXRoQW5nbGU7
CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRpdHVkZUFuZ2xlID0gTV9QSV8yIC0gYWx0aXR1ZGVB
bmdsZTsKIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0Yo
W3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TW92ZWRdKTsKKyAgICBhdXRv
IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZl
bnRNb3ZlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQog
CkBAIC02NjgsNyArNjY4LDcgQEAgLSAodm9pZClzdHlsdXNVcEF0UG9pbnQ6KENHUG9pbnQpbG9j
YXRpb24KICAgICBfYWN0aXZlUG9pbnRzWzBdLmF6aW11dGhBbmdsZSA9IDA7CiAgICAgX2FjdGl2
ZVBvaW50c1swXS5hbHRpdHVkZUFuZ2xlID0gMDsKIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50
UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1
c0V2ZW50TGlmdGVkXSk7CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0
ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TGlmdGVkXSk7CiAgICAgW3NlbGYgX3NlbmRISURF
dmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTEwMjEsNyArMTAyMSw3IEBAIC0gKHZvaWQp
ZGlzcGF0Y2hFdmVudFdpdGhJbmZvOihOU0RpY3Rpb25hcnkgKilldmVudEluZm8KIHsKICAgICBB
U1NFUlQoW05TVGhyZWFkIGlzTWFpblRocmVhZF0pOwogCi0gICAgUmV0YWluUHRyPElPSElERXZl
bnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFdpdGhJbmZv
OmV2ZW50SW5mb10pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJ
T0hJREV2ZW50V2l0aEluZm86ZXZlbnRJbmZvXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpl
dmVudFJlZi5nZXQoKV07CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
aW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3Mv
VUlTY3JpcHRDb250cm9sbGVySU9TLmgKaW5kZXggMjhkMDYwYzZkZmM0NzFhOTA1NDkwNjgzOTVj
M2Q0MGY2YTljMDk2Yi4uODU0NjQ0NzY2ZDhiYzVhODE1ZDI2N2U5YTdiYTRhMjA1ZDZlNjEyMiAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVy
SU9TLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVy
SU9TLmgKQEAgLTI1LDExICsyNSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisKICNpbXBvcnQgIlVJU2NyaXB0Q29udHJvbGxlckNvY29hLmgiCiAjaW1w
b3J0IDx3dGYvQmxvY2tQdHIuaD4KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CkBAIC0z
NywxMyArMzcsMTQgQEAgY2xhc3MgRmxvYXRSZWN0OwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xh
c3MgVUlTY3JpcHRDb250cm9sbGVySU9TIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29h
IHsKK2NsYXNzIFVJU2NyaXB0Q29udHJvbGxlcklPUyBmaW5hbCA6IHB1YmxpYyBVSVNjcmlwdENv
bnRyb2xsZXJDb2NvYSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVy
SU9TKFVJU2NyaXB0Q29udGV4dCYgY29udGV4dCkKICAgICAgICAgOiBVSVNjcmlwdENvbnRyb2xs
ZXJDb2NvYShjb250ZXh0KQogICAgIHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCB3YWl0
Rm9yT3V0c3RhbmRpbmdDYWxsYmFja3MoKSBvdmVycmlkZTsKICAgICB2b2lkIGRvQWZ0ZXJQcmVz
ZW50YXRpb25VcGRhdGUoSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkb0FmdGVyTmV4
dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZShKU1ZhbHVlUmVmKSBvdmVycmlkZTsKQEAgLTE1Niw3
ICsxNTcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREaWRFbmRTY3JvbGxpbmdDYWxsYmFjayhK
U1ZhbHVlUmVmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsZWFyQWxsQ2FsbGJhY2tzKCkgb3ZlcnJp
ZGU7CiAKLXByaXZhdGU6CiAgICAgdm9pZCB3YWl0Rm9yTW9kYWxUcmFuc2l0aW9uVG9GaW5pc2go
KSBjb25zdDsKICAgICB2b2lkIHdhaXRGb3JTaW5nbGVUYXBUb1Jlc2V0KCkgY29uc3Q7CiAgICAg
V2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RGb3JNZW51QWN0aW9uKENGU3RyaW5nUmVmKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklP
Uy5tbQppbmRleCAxMzBjNDk3YzI0MGQ4MzhiYjRhZmZmZDIwNzMxNDE3NWE4M2RiYjI2Li43YWY2
ZWNmNTA5ODVmMTVlZjQ3YzE5MThiNjVhMmViZGE2ZDI2YTA4IDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBAIC02OCwyNCAr
NjgsMTQgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqdG9OU0RpY3Rpb25hcnkoQ0dSZWN0IHJlY3Qp
CiAgICAgfTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGFycmF5TGVuZ3RoKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBhcnJheSkKLXsKLSAgICBhdXRvIGxlbmd0aFN0cmluZyA9IGFk
b3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgaWYgKGF1
dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGFycmF5LCBsZW5n
dGhTdHJpbmcuZ2V0KCksIG51bGxwdHIpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwot
ICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gcGFyc2VNb2RpZmllckFy
cmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFycmF5VmFsdWUpCiB7CiAgICAg
aWYgKCFhcnJheVZhbHVlKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gVGhlIHZhbHVl
IG1heSBlaXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJh
eSBvZiBtb2RpZmllcnMuCi0gICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZh
bHVlKSkgewotICAgICAgICBhdXRvIHN0cmluZyA9IHRvV1RGU3RyaW5nKHRvV0soYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcnJheVZhbHVlLCBudWxscHRyKSkpKTsKLSAgICAg
ICAgcmV0dXJuIHsgc3RyaW5nIH07Ci0gICAgfQorICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29u
dGV4dCwgYXJyYXlWYWx1ZSkpCisgICAgICAgIHJldHVybiB7IHRvV1RGU3RyaW5nKGNvbnRleHQs
IGFycmF5VmFsdWUpIH07CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBhcnJh
eVZhbHVlKSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTkzLDE2ICs4Myw4IEBAIHN0YXRpYyBW
ZWN0b3I8U3RyaW5nPiBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
VmFsdWVSZWYgYXJyYXlWCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4
dCwgYXJyYXkpOwogICAgIFZlY3RvcjxTdHJpbmc+IG1vZGlmaWVyczsKICAgICBtb2RpZmllcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxw
dHI7Ci0gICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRl
eChjb250ZXh0LCBhcnJheSwgaSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byBzdHJpbmcgPSBhZG9wdChKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAmZXhjZXB0aW9uKSk7Ci0gICAgICAgIGlm
IChleGNlcHRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbW9kaWZpZXJzLmFw
cGVuZCh0b1dURlN0cmluZyh0b1dLKHN0cmluZy5nZXQoKSkpKTsKLSAgICB9CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBtb2RpZmllcnMuYXBwZW5k
KHRvV1RGU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQs
IGFycmF5LCBpLCBudWxscHRyKSkpOwogICAgIHJldHVybiBtb2RpZmllcnM7CiB9CiAKQEAgLTUx
NCwxMCArNDk2LDkgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJV
c2luZ0hhcmR3YXJlS2V5Ym9hcmQoSlNTdHJpbmdSZWYgY2hhcmEKICAgICB1bnNpZ25lZCBjYWxs
YmFja0lEID0gbV9jb250ZXh0LT5wcmVwYXJlRm9yQXN5bmNUYXNrKGNhbGxiYWNrLCBDYWxsYmFj
a1R5cGVOb25QZXJzaXN0ZW50KTsKIAogICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUga2V5Ym9hcmQg
aXMgYWxyZWFkeSBzaG93bi4KLSAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50
R2VuZXJhdG9yXSBrZXlQcmVzczp0b1dURlN0cmluZyh0b1dLKGNoYXJhY3RlcikpIGNvbXBsZXRp
b25CbG9jazptYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
Y2FsbGJhY2tJRF0gewotICAgICAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbV9jb250ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShjYWxsYmFja0lEKTsKKyAg
ICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlQcmVzczp0
b1dURlN0cmluZyhjaGFyYWN0ZXIpIGNvbXBsZXRpb25CbG9jazptYWtlQmxvY2tQdHIoW3N0cm9u
Z1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0geworICAgICAgICBpZiAoc3Ryb25n
VGhpcy0+bV9jb250ZXh0KQorICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9jb250ZXh0LT5hc3lu
Y1Rhc2tDb21wbGV0ZShjYWxsYmFja0lEKTsKICAgICB9KS5nZXQoKV07CiB9CiAKQEAgLTUzNCw3
ICs1MTUsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6cmF3S2V5RG93bihKU1N0cmlu
Z1JlZiBrZXkpCiB7CiAgICAgLy8gS2V5IGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgVW5pY29kZSBj
b2RlIHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lhbCBrZXkgKGUuZy4gImRvd25BcnJvdyIp
LgogICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtub3dzIGhvdyB0byBtYXAgdGhlc2Ugc3BlY2lh
bCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXljb2RlLgotICAgIFtbSElERXZlbnRHZW5lcmF0
b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleURvd246dG9XVEZTdHJpbmcodG9XSyhrZXkp
KV07CisgICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0ga2V5
RG93bjp0b1dURlN0cmluZyhrZXkpXTsKICAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJ
REV2ZW50R2VuZXJhdG9yXSBzZW5kTWFya2VySElERXZlbnRXaXRoQ29tcGxldGlvbkJsb2NrOl57
IC8qIERvIG5vdGhpbmcgKi8gfV07CiB9CiAKQEAgLTU0Miw3ICs1MjMsNyBAQCB2b2lkIFVJU2Ny
aXB0Q29udHJvbGxlcklPUzo6cmF3S2V5VXAoSlNTdHJpbmdSZWYga2V5KQogewogICAgIC8vIEtl
eSBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIFVuaWNvZGUgY29kZSBwb2ludCBvciB0aGUgbmFtZSBv
ZiBhIHNwZWNpYWwga2V5IChlLmcuICJkb3duQXJyb3ciKS4KICAgICAvLyBISURFdmVudEdlbmVy
YXRvciBrbm93cyBob3cgdG8gbWFwIHRoZXNlIHNwZWNpYWwga2V5cyB0byB0aGUgYXBwcm9wcmlh
dGUga2V5Y29kZS4KLSAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJh
dG9yXSBrZXlVcDp0b1dURlN0cmluZyh0b1dLKGtleSkpXTsKKyAgICBbW0hJREV2ZW50R2VuZXJh
dG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlVcDp0b1dURlN0cmluZyhrZXkpXTsKICAg
ICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBzZW5kTWFya2Vy
SElERXZlbnRXaXRoQ29tcGxldGlvbkJsb2NrOl57IC8qIERvIG5vdGhpbmcgKi8gfV07CiB9CiAK
QEAgLTU1MCw3ICs1MzEsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6a2V5RG93bihK
U1N0cmluZ1JlZiBjaGFyYWN0ZXIsIEpTVmFsdWVSZWYgbW9kaWZpZXJBcgogewogICAgIC8vIENo
YXJhY3RlciBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIFVuaWNvZGUgY29kZSBwb2ludCBvciB0aGUg
bmFtZSBvZiBhIHNwZWNpYWwga2V5IChlLmcuICJkb3duQXJyb3ciKS4KICAgICAvLyBISURFdmVu
dEdlbmVyYXRvciBrbm93cyBob3cgdG8gbWFwIHRoZXNlIHNwZWNpYWwga2V5cyB0byB0aGUgYXBw
cm9wcmlhdGUga2V5Y29kZS4KLSAgICBTdHJpbmcgaW5wdXRTdHJpbmcgPSB0b1dURlN0cmluZyh0
b1dLKGNoYXJhY3RlcikpOworICAgIGF1dG8gaW5wdXRTdHJpbmcgPSB0b1dURlN0cmluZyhjaGFy
YWN0ZXIpOwogICAgIGF1dG8gbW9kaWZpZXJGbGFncyA9IHBhcnNlTW9kaWZpZXJBcnJheShtX2Nv
bnRleHQtPmpzQ29udGV4dCgpLCBtb2RpZmllckFycmF5KTsKIAogICAgIGZvciAoYXV0byYgbW9k
aWZpZXJGbGFnIDogbW9kaWZpZXJGbGFncykKQEAgLTcyNyw3ICs3MDgsNyBAQCB2b2lkIFVJU2Ny
aXB0Q29udHJvbGxlcklPUzo6YXBwbHlBdXRvY29ycmVjdGlvbihKU1N0cmluZ1JlZiBuZXdTdHJp
bmcsIEpTU3RyaW5nUgogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBtX2NvbnRleHQtPnByZXBh
cmVGb3JBc3luY1Rhc2soY2FsbGJhY2ssIENhbGxiYWNrVHlwZU5vblBlcnNpc3RlbnQpOwogCiAg
ICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldyA9IHRoaXMtPndlYlZpZXcoKTsKLSAgICBb
d2ViVmlldyBhcHBseUF1dG9jb3JyZWN0aW9uOnRvV1RGU3RyaW5nKHRvV0sobmV3U3RyaW5nKSkg
dG9TdHJpbmc6dG9XVEZTdHJpbmcodG9XSyhvbGRTdHJpbmcpKSB3aXRoQ29tcGxldGlvbkhhbmRs
ZXI6bWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxi
YWNrSURdIHsKKyAgICBbd2ViVmlldyBhcHBseUF1dG9jb3JyZWN0aW9uOnRvV1RGU3RyaW5nKG5l
d1N0cmluZykgdG9TdHJpbmc6dG9XVEZTdHJpbmcob2xkU3RyaW5nKSB3aXRoQ29tcGxldGlvbkhh
bmRsZXI6bWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNh
bGxiYWNrSURdIHsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgbWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNh
bGxiYWNrSURdIHsKICAgICAgICAgICAgIC8vIGFwcGx5QXV0b2NvcnJlY3Rpb24gY2FuIGNhbGwg
aXRzIGNvbXBsZXRpb24gaGFuZGxlciBzeW5jaHJvbm91c2x5LAogICAgICAgICAgICAgLy8gd2hp
Y2ggbWFrZXMgVUlTY3JpcHRDb250cm9sbGVyIHVuaGFwcHkgKHNlZSBidWcgMTcyODg0KS4KQEAg
LTExNTcsNyArMTEzOCw3IEBAIGJvb2wgVUlTY3JpcHRDb250cm9sbGVySU9TOjppc1Nob3dpbmdE
YXRhTGlzdFN1Z2dlc3Rpb25zKCkgY29uc3QKIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6
OnNldEtleWJvYXJkSW5wdXRNb2RlSWRlbnRpZmllcihKU1N0cmluZ1JlZiBpZGVudGlmaWVyKQog
ewotICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRLZXlib2FyZElucHV0TW9kZUlk
ZW50aWZpZXIodG9XVEZTdHJpbmcodG9XSyhpZGVudGlmaWVyKSkpOworICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRLZXlib2FyZElucHV0TW9kZUlkZW50aWZpZXIodG9XVEZTdHJp
bmcoaWRlbnRpZmllcikpOwogfQogCiAvLyBGSVhNRTogV3JpdGUgdGhpcyBpbiB0ZXJtcyBvZiBI
SURFdmVudEdlbmVyYXRvciBvbmNlIHdlIGtub3cgaG93IHRvIHJlc2V0IGNhcHMgbG9jayBzdGF0
ZQpAQCAtMTE3OCw3ICsxMTU5LDcgQEAgYm9vbCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OmtleWJv
YXJkSXNBdXRvbWF0aWNhbGx5U2hpZnRlZCgpIGNvbnN0CiAKIEpTT2JqZWN0UmVmIFVJU2NyaXB0
Q29udHJvbGxlcklPUzo6YXR0YWNobWVudEluZm8oSlNTdHJpbmdSZWYganNBdHRhY2htZW50SWRl
bnRpZmllcikKIHsKLSAgICBhdXRvIGF0dGFjaG1lbnRJZGVudGlmaWVyID0gdG9XVEZTdHJpbmco
dG9XSyhqc0F0dGFjaG1lbnRJZGVudGlmaWVyKSk7CisgICAgYXV0byBhdHRhY2htZW50SWRlbnRp
ZmllciA9IHRvV1RGU3RyaW5nKGpzQXR0YWNobWVudElkZW50aWZpZXIpOwogICAgIF9XS0F0dGFj
aG1lbnQgKmF0dGFjaG1lbnQgPSBbd2ViVmlldygpIF9hdHRhY2htZW50Rm9ySWRlbnRpZmllcjph
dHRhY2htZW50SWRlbnRpZmllcl07CiAgICAgX1dLQXR0YWNobWVudEluZm8gKmF0dGFjaG1lbnRJ
bmZvID0gYXR0YWNobWVudC5pbmZvOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMv
RXZlbnRTZW5kZXJQcm94eS5tbQppbmRleCAwNjcyYjU4MWJmNjViNWFkOWEyYjg1ZmVhODYxNjQ4
ZjIyM2ViNGM1Li4xMDI3Mjg4NDA4NGQyYzEwMjA4Y2ZhMDcxNGYxYjEwYzVlZmMwYTBiIDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW0KQEAgLTI3
MiwyMCArMjcyLDEwIEBAIHN0YXRpYyBOU1RpbWVJbnRlcnZhbCBhYnNvbHV0ZVRpbWVGb3JFdmVu
dFRpbWUoZG91YmxlIGN1cnJlbnRFdmVudFRpbWUpCiAKIEV2ZW50U2VuZGVyUHJveHk6OkV2ZW50
U2VuZGVyUHJveHkoVGVzdENvbnRyb2xsZXIqIHRlc3RDb250cm9sbGVyKQogICAgIDogbV90ZXN0
Q29udHJvbGxlcih0ZXN0Q29udHJvbGxlcikKLSAgICAsIG1fdGltZSgwKQotICAgICwgbV9wb3Np
dGlvbigpCi0gICAgLCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24oZmFsc2UpCi0gICAgLCBtX2NsaWNr
Q291bnQoMCkKLSAgICAsIG1fY2xpY2tUaW1lKDApCi0gICAgLCBtX2NsaWNrUG9zaXRpb24oKQot
ICAgICwgbV9jbGlja0J1dHRvbihrV0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b24pCi0gICAgLCBl
dmVudE51bWJlcigwKQogewogfQogCi1FdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94
eSgpCi17Ci19CitFdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSgpID0gZGVmYXVs
dDsKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGlu
dCBidXR0b24pCiB7CkBAIC0zOTQsNyArMzg0LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlRm9yY2VF
dmVudFN5bmNocm9ub3VzbHkoTlNFdmVudCAqZXZlbnQpCiAKIFJldGFpblB0cjxOU0V2ZW50PiBF
dmVudFNlbmRlclByb3h5OjpiZWdpblByZXNzdXJlRXZlbnQoaW50IHN0YWdlKQogewotICAgIFJl
dGFpblB0cjxFdmVudFNlbmRlclN5bnRoZXRpY0V2ZW50PiBldmVudCA9IGFkb3B0TlMoW1tFdmVu
dFNlbmRlclN5bnRoZXRpY0V2ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246
TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCisgICAgYXV0byBldmVudCA9
IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5bnRoZXRpY0V2ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVF
dmVudEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAg
ICAgICAgIGdsb2JhbExvY2F0aW9uOihbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+
cGxhdGZvcm1XaW5kb3coKSBjb252ZXJ0UmVjdFRvU2NyZWVuOk5TTWFrZVJlY3QobV9wb3NpdGlv
bi54LCBtX3Bvc2l0aW9uLnksIDEsIDEpXS5vcmlnaW4pCiAgICAgICAgIHN0YWdlOnN0YWdlCiAg
ICAgICAgIHByZXNzdXJlOjAuNQpAQCAtNDA5LDcgKzM5OSw3IEBAIFJldGFpblB0cjxOU0V2ZW50
PiBFdmVudFNlbmRlclByb3h5OjpiZWdpblByZXNzdXJlRXZlbnQoaW50IHN0YWdlKQogCiBSZXRh
aW5QdHI8TlNFdmVudD4gRXZlbnRTZW5kZXJQcm94eTo6cHJlc3N1cmVDaGFuZ2VFdmVudChpbnQg
c3RhZ2UsIGZsb2F0IHByZXNzdXJlLCBFdmVudFNlbmRlclByb3h5OjpQcmVzc3VyZUNoYW5nZURp
cmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgUmV0YWluUHRyPEV2ZW50U2VuZGVyU3ludGhldGlj
RXZlbnQ+IGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2Nd
IGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1f
cG9zaXRpb24ueSkKKyAgICBhdXRvIGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhl
dGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludCht
X3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAgICAgICAgZ2xvYmFsTG9jYXRpb246KFttX3Rl
c3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpIGNvbnZlcnRSZWN0
VG9TY3JlZW46TlNNYWtlUmVjdChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgMSwgMSldLm9y
aWdpbikKICAgICAgICAgc3RhZ2U6c3RhZ2UKICAgICAgICAgcHJlc3N1cmU6cHJlc3N1cmUKQEAg
LTQzMSwxMCArNDIxLDEwIEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZUNsaWNr
KCkKIHsKICAgICBzZW5kTW91c2VEb3duVG9TdGFydFByZXNzdXJlRXZlbnRzKCk7CiAKLSAgICBS
ZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsK
LSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZl
bnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0
cjxOU0V2ZW50PiBmb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNo
YW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IHJlbGVh
c2luZ1ByZXNzdXJlID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVj
dGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3Vy
ZUV2ZW50KDEpOworICAgIGF1dG8gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQo
MSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gZm9yY2VD
bGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246Oklu
Y3JlYXNpbmcpOworICAgIGF1dG8gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2
ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKICAgICBOU0V2ZW50
ICptb3VzZVVwID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TRXZlbnRUeXBlTGVmdE1v
dXNlVXAKICAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0
aW9uLnkpCiAgICAgICAgIG1vZGlmaWVyRmxhZ3M6MApAQCAtNDY4LDkgKzQ1OCw5IEBAIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6c3RhcnRBbmRDYW5jZWxNb3VzZUZvcmNlQ2xpY2soKQogewogICAg
IHNlbmRNb3VzZURvd25Ub1N0YXJ0UHJlc3N1cmVFdmVudHMoKTsKIAotICAgIFJldGFpblB0cjxO
U0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFp
blB0cjxOU0V2ZW50PiBpbmNyZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEs
IFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKLSAgICBSZXRhaW5QdHI8TlNF
dmVudD4gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJl
Q2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBi
ZWdpblByZXNzdXJlRXZlbnQoMSk7CisgICAgYXV0byBpbmNyZWFzaW5nUHJlc3N1cmUgPSBwcmVz
c3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsK
KyAgICBhdXRvIHJlbGVhc2luZ1ByZXNzdXJlID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVz
c3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CiAgICAgTlNFdmVudCAqbW91c2VVcCA9
IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0V2ZW50VHlwZUxlZnRNb3VzZVVwCiAgICAg
ICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQogICAg
ICAgICBtb2RpZmllckZsYWdzOjAKQEAgLTUwMyw5ICs0OTMsOSBAQCB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6Om1vdXNlRm9yY2VEb3duKCkKIHsKICAgICBzZW5kTW91c2VEb3duVG9TdGFydFByZXNz
dXJlRXZlbnRzKCk7CiAKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJl
Z2luUHJlc3N1cmVFdmVudCgxKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcHJlRm9yY2VDbGlj
ayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3Jl
YXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBmb3JjZU1vdXNlRG93biA9IHByZXNzdXJl
Q2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAg
IGF1dG8gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKKyAgICBhdXRvIHBy
ZUZvcmNlQ2xpY2sgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0
aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIGZvcmNlTW91c2VEb3duID0gcHJlc3N1cmVDaGFu
Z2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CiAKICAgICBO
U1ZpZXcgKnRhcmdldFZpZXcgPSBbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1WaWV3KCkgaGl0VGVzdDpbYmVnaW5QcmVzc3VyZSBsb2NhdGlvbkluV2luZG93XV07CiAg
ICAgdGFyZ2V0VmlldyA9IHRhcmdldFZpZXcgPyB0YXJnZXRWaWV3IDogbV90ZXN0Q29udHJvbGxl
ci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CkBAIC01MjYsOSArNTE2LDkgQEAgdm9p
ZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlRG93bigpCiAKIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6bW91c2VGb3JjZVVwKCkKIHsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVz
c3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgyKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gc3Rh
Z2VUd29FdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rp
b246OkRlY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBzdGFnZU9uZUV2ZW50ID0g
cHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2lu
Zyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDIpOworICAg
IGF1dG8gc3RhZ2VUd29FdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFu
Z2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOworICAgIGF1dG8gc3RhZ2VPbmVFdmVudCA9IHByZXNz
dXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwog
CiAgICAgLy8gU2luY2UgQXBwS2l0IGRvZXMgbm90IGltcGxlbWVudCBmb3JjZXVwL2Rvd24gYXMg
bW91c2UgZXZlbnRzLCB3ZSBuZWVkIHRvIHNlbmQgdHdvIHByZXNzdXJlIGV2ZW50cyB0byBkZXRl
Y3QKICAgICAvLyB0aGUgY2hhbmdlIGluIHN0YWdlIHRoYXQgbWFya3MgdGhvc2UgbW9tZW50cy4K
QEAgLTU1MSw4ICs1NDEsOCBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VDaGFu
Z2VkKGZsb2F0IGZvcmNlKQogewogICAgIGludCBzdGFnZSA9IGZvcmNlIDwgMSA/IDEgOiAyOwog
ICAgIGZsb2F0IHByZXNzdXJlID0gZm9yY2UgPCAxID8gZm9yY2UgOiBmb3JjZSAtIDE7Ci0gICAg
UmV0YWluUHRyPE5TRXZlbnQ+IGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoc3Rh
Z2UpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBwcmVzc3VyZUNoYW5nZWRFdmVudCA9IHByZXNz
dXJlQ2hhbmdlRXZlbnQoc3RhZ2UsIHByZXNzdXJlLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6
SW5jcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50
KHN0YWdlKTsKKyAgICBhdXRvIHByZXNzdXJlQ2hhbmdlZEV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VF
dmVudChzdGFnZSwgcHJlc3N1cmUsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5n
KTsKIAogICAgIE5TVmlldyAqdGFyZ2V0VmlldyA9IFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2Vi
VmlldygpLT5wbGF0Zm9ybVZpZXcoKSBoaXRUZXN0OltiZWdpblByZXNzdXJlIGxvY2F0aW9uSW5X
aW5kb3ddXTsKICAgICB0YXJnZXRWaWV3ID0gdGFyZ2V0VmlldyA/IHRhcmdldFZpZXcgOiBtX3Rl
c3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKQEAgLTYxMSw4ICs2
MDEsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29u
ZHMpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdL
RXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNpZ25lZCBrZXlMb2NhdGlvbikKIHsKLSAgICBO
U1N0cmluZyogY2hhcmFjdGVyID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDU3RyaW5nOnRvU1REKGtl
eSkuY19zdHIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzpb
TlNTdHJpbmcgZGVmYXVsdENTdHJpbmdFbmNvZGluZ11dOworICAgIE5TU3RyaW5nKiBjaGFyYWN0
ZXIgPSB0b1dURlN0cmluZyhrZXkpOwogCiAgICAgTlNTdHJpbmcgKmV2ZW50Q2hhcmFjdGVyID0g
Y2hhcmFjdGVyOwogICAgIHVuc2lnbmVkIHNob3J0IGtleUNvZGUgPSAwOwpAQCAtODMyLDcgKzgy
MSw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdL
RXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
bW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHkpCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+
IGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50Migw
LCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAyLCB5LCB4LCAwKSk7CisgICAgYXV0byBjZ1Njcm9s
bEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVudDIoMCwga0NHU2Ny
b2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkpOwogCiAgICAgLy8gU2V0IHRoZSBDR0V2ZW50
IGxvY2F0aW9uIGluIGZsaXBwZWQgY29vcmRzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBzY3JlZW4s
IHdoaWNoCiAgICAgLy8gY29tcGVuc2F0ZXMgZm9yIHRoZSBiZWhhdmlvciBvZiArW05TRXZlbnQg
ZXZlbnRXaXRoQ0dFdmVudDpdIHdoZW4gdGhlIGV2ZW50IGhhcwpAQCAtODU5LDcgKzg0OCw3IEBA
IHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50IHgsIGlu
dCB5LCBib29sIHBhZ2VkKQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlX
aXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQgeCwgaW50IHksIGludCBwaGFzZSwgaW50IG1v
bWVudHVtKQogewotICAgIFJldGFpblB0cjxDR0V2ZW50UmVmPiBjZ1Njcm9sbEV2ZW50ID0gYWRv
cHRDRihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0
TGluZSwgMiwgeSwgeCwgMCkpOworICAgIGF1dG8gY2dTY3JvbGxFdmVudCA9IGFkb3B0Q0YoQ0dF
dmVudENyZWF0ZVNjcm9sbFdoZWVsRXZlbnQyKDAsIGtDR1Njcm9sbEV2ZW50VW5pdExpbmUsIDIs
IHksIHgsIDApKTsKIAogICAgIC8vIFNldCB0aGUgQ0dFdmVudCBsb2NhdGlvbiBpbiBmbGlwcGVk
IGNvb3JkcyByZWxhdGl2ZSB0byB0aGUgZmlyc3Qgc2NyZWVuLCB3aGljaAogICAgIC8vIGNvbXBl
bnNhdGVzIGZvciB0aGUgYmVoYXZpb3Igb2YgK1tOU0V2ZW50IGV2ZW50V2l0aENHRXZlbnQ6XSB3
aGVuIHRoZSBldmVudCBoYXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFj
L1BsYXRmb3JtV2ViVmlld01hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRm
b3JtV2ViVmlld01hYy5tbQppbmRleCA2NDE3ODJjYTk3ZTFkYWZiOTAwOTE5ZGIxOWIzNDc0YTU1
NDM4OGU1Li41YTRlOTZiODFlYThjZGEwNmIzN2I0NjhlNTg4NTllZjcxZWI0NmI4IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCkBAIC02
NCw3ICs2NCw3IEBAIFBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLV2ViVmlld0Nv
bmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24sIGNvbnN0IFRlCiAgICAgaWYgKG1fb3B0aW9ucy51
c2VSZW1vdGVMYXllclRyZWUpCiAgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2Vy
RGVmYXVsdHNdIHNldFZhbHVlOkBZRVMgZm9yS2V5OkAiV2ViS2l0MlVzZVJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhIl07CiAKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4g
Y29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOworICAg
IGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0p
OwogICAgIFdLUHJlZmVyZW5jZXNTZXRUaHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdl
IFdLUHJlZmVyZW5jZXNSZWYpW2NvcGllZENvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCBtX29w
dGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcpOwogCiAgICAgTlNSZWN0IHJlY3QgPSBOU01ha2VS
ZWN0KDAsIDAsIFRlc3RDb250cm9sbGVyOjp2aWV3V2lkdGgsIFRlc3RDb250cm9sbGVyOjp2aWV3
SGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250
cm9sbGVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJN
YWMubW0KaW5kZXggMTRiN2RjOWQwZjI0ZWMxMGU3OGFjMmIwZTAzNjVhOWVhNjQ5YWIyNi4uYjIy
Mjg3MWNkMGEzOTE5ZTMzZWQ2MDZkMGY0NDE2ODg1NjkzYTIwNSAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KQEAgLTE4NCw3ICsxODQsNyBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChj
b25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdAogICAgIGlmICghdGVzdC51cmxDb250YWlucygiY29u
dGVudGV4dGVuc2lvbnMvIikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxDRlVS
TFJlZj4gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgdGVzdC51cmwoKSkpOworICAgIGF1dG8gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZV
Ukwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGVzdC51cmwoKSkpOwogICAgIE5TVVJMICpmaWx0ZXJV
UkwgPSBbKF9fYnJpZGdlIE5TVVJMICopdGVzdFVSTC5nZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhF
eHRlbnNpb246QCJqc29uIl07CiAKICAgICBfX2Jsb2NrIE5TU3RyaW5nICpjb250ZW50RXh0ZW5z
aW9uU3RyaW5nOwpAQCAtMzcxLDE0ICszNzEsMTQgQEAgc3RhdGljIE5TU2V0ICpzeXN0ZW1IaWRk
ZW5Gb250RmFtaWx5U2V0KCkKIAogc3RhdGljIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGdlbmVy
YXRlRm9udEFsbG93TGlzdCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+
IHJlc3VsdCA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byByZXN1
bHQgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAoTlNTdHJpbmcg
KmZvbnRGYW1pbHkgaW4gYWxsb3dlZEZvbnRGYW1pbHlTZXQoKSkgewogICAgICAgICBOU0FycmF5
ICpmb250c0ZvckZhbWlseSA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gYXZh
aWxhYmxlTWVtYmVyc09mRm9udEZhbWlseTpmb250RmFtaWx5XTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGZhbWlseUluRm9udCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoW2ZvbnRGYW1pbHkgVVRGOFN0cmluZ10pKTsKKyAgICAgICAgYXV0byBmYW1p
bHlJbkZvbnQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFtmb250RmFt
aWx5IFVURjhTdHJpbmddKSk7CiAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdC5nZXQo
KSwgZmFtaWx5SW5Gb250LmdldCgpKTsKICAgICAgICAgZm9yIChOU0FycmF5ICpmb250SW5mbyBp
biBmb250c0ZvckZhbWlseSkgewogICAgICAgICAgICAgLy8gRm9udCBuYW1lIGlzIHRoZSBmaXJz
dCBlbnRyeSBpbiB0aGUgYXJyYXkuCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZm9udE5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFtbZm9u
dEluZm8gb2JqZWN0QXRJbmRleDowXSBVVEY4U3RyaW5nXSkpOworICAgICAgICAgICAgYXV0byBm
b250TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW1tmb250SW5m
byBvYmplY3RBdEluZGV4OjBdIFVURjhTdHJpbmddKSk7CiAgICAgICAgICAgICBXS0FycmF5QXBw
ZW5kSXRlbShyZXN1bHQuZ2V0KCksIGZvbnROYW1lLmdldCgpKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxp
emVDb250ZXh0KCkKICAgICAvLyBUZXN0aW5nIHVzZXMgYSBwcml2YXRlIHNlc3Npb24sIHdoaWNo
IGlzIG1lbW9yeSBvbmx5LiBIb3dldmVyIGNyZWF0aW5nIG9uZSBpbnN0YW50aWF0ZXMgYSBzaGFy
ZWQgTlNVUkxDYWNoZSwKICAgICAvLyBhbmQgaWYgd2UgaGF2ZW4ndCBjcmVhdGVkIG9uZSB5ZXQs
IHRoZSBkZWZhdWx0IG9uZSB3aWxsIGJlIGNyZWF0ZWQgb24gZGlzay4KICAgICAvLyBNYWtpbmcg
dGhlIHNoYXJlZCBjYWNoZSBtZW1vcnktb25seSBhdm9pZHMgdG91Y2hpbmcgdGhlIGZpbGUgc3lz
dGVtLgotICAgIFJldGFpblB0cjxOU1VSTENhY2hlPiBzaGFyZWRDYWNoZSA9CisgICAgYXV0byBz
aGFyZWRDYWNoZSA9CiAgICAgICAgIGFkb3B0TlMoW1tOU1VSTENhY2hlIGFsbG9jXSBpbml0V2l0
aE1lbW9yeUNhcGFjaXR5OjEwMjQgKiAxMDI0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpc2tDYXBhY2l0eTowCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXNrUGF0aDpuaWxdKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKaW5kZXggMGVhYjg5NDllNmJlYmZlZTY1OTQ3
NTg5YWZiOWU4ZDliOGJlMWVjNy4uMmQyZDFkNmI4NDZlNjg3OGIwYjFlYmRjMTY2N2MxNzVlOTE1
NjY1ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250
cm9sbGVyTWFjLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250
cm9sbGVyTWFjLmgKQEAgLTMxLDEzICszMSwxNCBAQCBPQkpDX0NMQVNTIFdLV2ViVmlldzsKIAog
bmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIFVJU2NyaXB0Q29udHJvbGxlck1hYyA6IHB1YmxpYyBV
SVNjcmlwdENvbnRyb2xsZXJDb2NvYSB7CitjbGFzcyBVSVNjcmlwdENvbnRyb2xsZXJNYWMgZmlu
YWwgOiBwdWJsaWMgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EgewogcHVibGljOgogICAgIGV4cGxp
Y2l0IFVJU2NyaXB0Q29udHJvbGxlck1hYyhVSVNjcmlwdENvbnRleHQmIGNvbnRleHQpCiAgICAg
ICAgIDogVUlTY3JpcHRDb250cm9sbGVyQ29jb2EoY29udGV4dCkKICAgICB7CiAgICAgfQogCitw
cml2YXRlOgogICAgIHZvaWQgcmVwbGFjZVRleHRBdFJhbmdlKEpTU3RyaW5nUmVmLCBpbnQsIGlu
dCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB6b29tVG9TY2FsZShkb3VibGUsIEpTVmFsdWVSZWYpIG92
ZXJyaWRlOwogICAgIGRvdWJsZSB6b29tU2NhbGUoKSBjb25zdCBvdmVycmlkZTsKQEAgLTYyLDcg
KzYzLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBhY3RpdmF0ZUF0UG9pbnQobG9uZyB4LCBsb25n
IHksIEpTVmFsdWVSZWYgY2FsbGJhY2spIG92ZXJyaWRlOwogCi1wcml2YXRlOgogICAgIE5TVGFi
bGVWaWV3ICpkYXRhTGlzdFN1Z2dlc3Rpb25zVGFibGVWaWV3KCkgY29uc3Q7CiB9OwogCmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMu
bW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0K
aW5kZXggY2QxMTMyOWE2NTQxZDdiNGViNzdkN2VjMTQ2ODhlOTkyMWYyN2M1My4uYjVjYjUxODE1
MDU5ZTdhMDkzYTE0MjM5OTFlODkxN2UzZWQzMDkwOCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQpAQCAtMjE0LDcgKzIxNCw3
IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyTWFjOjpjb21wbGV0ZUJhY2tTd2lwZShKU1ZhbHVl
UmVmIGNhbGxiYWNrKQogCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlck1hYzo6cGxheUJhY2tFdmVu
dFN0cmVhbShKU1N0cmluZ1JlZiBldmVudFN0cmVhbSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsK
LSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0cmVhbSA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5
Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXZlbnRTdHJlYW0pKTsKKyAgICBhdXRvIHN0
cmVhbSA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
ZXZlbnRTdHJlYW0pKTsKICAgICBwbGF5QmFja0V2ZW50cyh3ZWJWaWV3KCksIG1fY29udGV4dCwg
KF9fYnJpZGdlIE5TU3RyaW5nICopc3RyZWFtLmdldCgpLCBjYWxsYmFjayk7CiB9CiAK
</data>
<flag name="commit-queue"
          id="425667"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409851</attachid>
            <date>2020-09-27 11:57:09 -0700</date>
            <delta_ts>2020-09-27 13:01:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200927115708.patch</filename>
            <type>text/plain</type>
            <size>697637</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJmZWY0NTFlYS4u
NDE0MjQxMWNiYTZhMmY1NjU2YWU4MDZlZDJjZWYzZDhjOWMxZTBkNCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0MSBAQAorMjAy
MC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlmeWluZywgYnV0IGV2ZW4g
bW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVzdAorICAgICAgICBjb2Rl
IGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkgYW5kIHBhc3RlIHJhdGhl
ciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0ZXIgdGhlIHJlZmFjdG9y
aW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlzIGNvZGUgaXMgd3JpdHRl
biB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGluZyBmb3IgZWFjaCBmdW5j
dGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0
KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0NsYXNzIHdpdGggdGhpcy4g
UmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBjbGVhciB0aGlzIHBhc3Nl
cyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKHVp
RWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBSZW1vdmVkIHVubmVlZGVk
IGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3aGljaCBzdGFydHMgb3V0
IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9y
RHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IpOiBV
c2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoX3JldHVybkV4
cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2UgYW5kIGF1dG8uCisgICAg
ICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAo
Z2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChHQ0NvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6IFJlcGxhY2VkIGdldEpT
Q2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFpblB0ciB0byBtYWtlIGl0
IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVyLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKGVuY29kZUhv
c3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChleGVjQ29tbWFu
ZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAob3Zl
cnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKHF1ZXVlTG9hZENhbGxi
YWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5nQ2FsbGJhY2spOiBEaXR0
by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFs
T2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKTogUmVw
bGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRy
IHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisg
ICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25z
dCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAg
ICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQpOiBTaW1wbGlmaWVk
IHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sp
OiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAorICAgICAgICB0YWJsZSB2
YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBuZWVkIHRvIGJlIG9iamVj
dHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogRGl0dG8u
CisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4K
KyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTogVXNlIGFycmF5TGVuZ3Ro
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDogVXBkYXRlZCBmb3IgdGhl
IGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3Jt
TmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoY3JlYXRlRW1w
dHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50
TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
bGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
VmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oOiBSZW1vdmVkIHVubmVl
ZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGguCisgICAgICAgIFJlbW92
ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIgSlNWYWx1ZUlzT2JqZWN0
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSBj
b25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoY3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09iamVjdC4KKyAgICAgICAg
KHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSBjb25zdCk6
IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRnJh
bWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERlbGVnYXRlIGRpZENsZWFy
V2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6CisgICAgICAgIFVzZSBhdXRv
LiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LiBTaW1wbGlmaWVkIG9i
amVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0TlMgaW5zdGVhZCBvZiBy
ZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRDbGVhcldpbmRvd09iamVj
dEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNlIGNyZWF0ZUpTU3RyaW5n
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAg
ICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVuZ3RoLgorCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHA6CisgICAgICAgIChXVFI6
OnRvT3B0aW9uYWxCb29sKTogUmVuYW1lZCBmcm9tIEpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbC4K
KyAgICAgICAgKFdUUjo6dG9PcHRpb25hbERvdWJsZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpt
YWtlVmFsdWUpOiBBZGRlZCB3aXRoIG92ZXJsb2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAg
ICAgUmVwbGFjZWQgSlNWYWx1ZVRvTnVsbGFibGVCb29sZWFuIGFuZCBKU1ZhbHVlTWFrZVN0cmlu
Z09yTnVsbC4KKyAgICAgICAgKFdUUjo6Y3JlYXRlSlNTdHJpbmcpOiBBZGRlZCB3aXRoIG92ZXJs
b2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAgICAgKFdUUjo6cHJvcGVydHkpOiBBZGRlZC4K
KyAgICAgICAgKFdUUjo6c3RyaW5nUHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Ym9v
bGVhblByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChXVFI6Om51bWVyaWNQcm9wZXJ0eSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjpvYmplY3RQcm9wZXJ0eSk6IFJlZmFjdG9yZWQgdG8gY2FsbCBw
cm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBBZGRlZC4KKyAgICAgICAgKFdU
Ujo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Y2FsbCk6
IFJlZmFjdG9yZWQgdG8gbGV0IG9iamVjdFByb3BlcnR5IGRvIG1vcmUgb2YgdGhlIG51bGwgY2hl
Y2tpbmcuCisgICAgICAgIChXVFI6OmNhbGxDb25zdHJ1Y3Rvcik6IERpdHRvLgorICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaDogVXBkYXRlZCBmb3IgdGhlIGFi
b3ZlLgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5o
OiBSZWR1Y2VkIGluY2x1ZGVzIGEgYml0LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU1dyYXBwZXIuaDogQWRkZWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisKKyAg
ICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQu
Y3BwOgorICAgICAgICAoVUlTY3JpcHRDb250ZXh0OjpVSVNjcmlwdENvbnRleHQpOiBQYXNzIGZl
d2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LgorICAgICAgICAoVUlTY3JpcHRDb250
ZXh0OjpydW5VSVNjcmlwdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKFVJU2NyaXB0
Q29udGV4dDo6b2JqZWN0RnJvbVJlY3QgY29uc3QpOiBVc2Ugc2V0UHJvcGVydHkuCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmg6
IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHA6CisgICAgICAgIChXVFI6
OnRvRGV2aWNlT3JpZW50YXRpb24pOiBVc2UgY3JlYXRlSlNTdHJpbmcgYW5kIEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcuCisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6bWFr
ZVdpbmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKworICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbToKKyAgICAg
ICAgKC1bTGF5b3V0VGVzdFNwZWxsQ2hlY2tlciBzZXRSZXN1bHRzRnJvbUpTVmFsdWU6aW5Db250
ZXh0Ol0pOiBVc2UgY3JlYXRlSlNTdHJpbmcKKyAgICAgICAgYW5kIHJlbW92ZWQgdW5uZWVkZWQg
dXNlIG9mIGxyb3VuZGwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlG
dW5jdGlvbnMuaDogQWRkZWQuIENvbnRhaW5zIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworICAgICAg
ICBmb3IgZGVhbGluZyB3aXRoIFdLRGljdGlvbmFyeVJlZi4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oOiBJbml0aWFsaXplIGRhdGEgbWVtYmVycy4KKwor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwOgor
ICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9uKTogVXNlIE9wdGlv
bmFsIGluc3RlYWQgb2Ygc2VwYXJhdGUgYm9vbC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdp
bmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG06CisgICAgICAgIChf
Z2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZpbGUpOiBVc2Ugc3RhdGljIGluaXRpYWxpemF0aW9uIGFu
ZCBhIGxhbWJkYSBpbnN0ZWFkIG9mCisgICAgICAgIGFuIGlmIHN0YXRlbWVudCB0byBpbml0aWFs
aXplLgorICAgICAgICAoX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yKTogVXNlIHRvT3B0aW9uYWxC
b29sIGFuZCBjcmVhdGVKU1N0cmluZy4gQWxzbyBhZGRlZAorICAgICAgICBzdXBwb3J0IGZvciBu
dWxsYWJsZSBkb3VibGVzIGFuZCB1c2VkIGF1dG8gYSBiaXQgbW9yZS4KKyAgICAgICAgKF9yZXR1
cm5FeHByZXNzaW9uKTogVXNlIG1ha2VWYWx1ZS4KKworICAgICAgICAqIEluamVjdGVkQnVuZGxl
L0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOiBNYWRlIHRoZSBvcHRpb25hbCBhcmd1bWVudHMgdG8g
dGhlCisgICAgICAgIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIGZ1bmN0aW9uICJkb3VibGU/
IiBpbnN0ZWFkIG9mICJvYmplY3QiLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6Z2V0
TWVudUl0ZW1DaGlsZHJlbkNhbGxiYWNrKTogVXNlIGF1dG8gYW5kIG5vdCBKU1ZhbHVlVG9PYmpl
Y3QuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogTW92ZWQgdG8gSlNCYXNpY3MuaC9jcHAu
CisgICAgICAgIChXVFI6OnBhcnNlVG91Y2hNb2RpZmllcik6IEFkZGVkLiBGYWN0b3JlZCBvdXQg
b2YgdGhlCisgICAgICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9kaWZpZXIg
ZnVuY3Rpb24uCisgICAgICAgIChXVFI6OnBhcnNlTW9kaWZpZXJBcnJheSk6IFVzZSBjcmVhdGVK
U1N0cmluZyBhbmQgcmVtb3ZlIHVubmVlZGVkIGlnbm9yZWQKKyAgICAgICAgZXhjZXB0aW9uIG91
dCBhcmd1bWVudCwgc2luY2UgdGhhdCBpcyBvcHRpb25hbC4gQWxzbyBhZGRlZCBvdmVybG9hZCB0
aGF0CisgICAgICAgIGdldHMgdGhlIGNvbnRleHQuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp+RXZlbnRTZW5kaW5nQ29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgIChXVFI6OmNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkpOiBVc2UgYWRvcHRX
SyBhbmQgc2V0VmFsdWUuIFJldHVybiBhIFdLUmV0YWluUHRyLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZURvd24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlVXApOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8p
OiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlcy4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNsaWNrKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnN0YXJ0QW5kQ2Fu
Y2VsTW91c2VGb3JjZUNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6Om1vdXNlRm9yY2VEb3duKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VVcCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpsZWFwRm9yd2FyZCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNr
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlS2V5RG93bk1lc3Nh
Z2VCb2R5KTogVXNlIHNldFZhbHVlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjprZXlEb3duKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24p
OiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZVNjcm9sbEJ5KTogVXNlIHNldFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcyk6IFVzZQorICAgICAgICBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3Vz
TW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQKKyAgICAgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRl
eHRDbGljayk6IFVzZSBhdXRvIGFuZCBub3QgSlNWYWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RS
Ojp0b01vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMpOiBVc2UgYm9vbGVhblByb3BlcnR5LgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjphZGRUb3VjaFBvaW50KTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6dXBkYXRlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoUG9pbnRSYWRpdXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hTdGFy
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaE1v
dmUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hF
bmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hD
YW5jZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2xl
YXJUb3VjaFBvaW50cyk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpyZWxlYXNlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9F
dmVudFNlbmRpbmdDb250cm9sbGVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAgICAg
RGVsZXRlZCB2YXJpb3VzIHVubmVlZGVkIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6
R0NDb250cm9sbGVyOjpHQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0Nv
bnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0NvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgIEFsc28gbWFya2VkIHRoZSBjbGFzcyBm
aW5hbC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkQ3JlYXRlUGFn
ZSk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRS
ZWNlaXZlTWVzc2FnZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cG9zdFBhZ2VNZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpy
ZXBvcnRMaXZlRG9jdW1lbnRzKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKTogVXNlIGRpY3Rpb25hcnlW
YWx1ZSwKKyAgICAgICAgYm9vbGVhblZhbHVlLCBwb3N0UGFnZU1lc3NhZ2UsIHZhbHVlLCBhbmQg
bW9yZSB0byBzdHJlYW1saW5lLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6Ym9vbGVh
bkZvcktleSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzdHJpbmdG
b3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0
aW5nKTogVXNlIGJvb2xlYW5WYWx1ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRv
bmUpOiBVc2Ugc3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpjbG9z
ZU90aGVyUGFnZXMpOiBVc2Ugc2V0VmFsdWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpkdW1wVG9TdGRFcnIpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlCisgICAgICAgIChX
VFI6OkluamVjdGVkQnVuZGxlOjpvdXRwdXRUZXh0KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUpOiBVc2UgcG9z
dFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdEFkZENocm9t
ZUlucHV0RmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RS
ZW1vdmVDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0Rm9jdXNXZWJWaWV3KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpwb3N0U2V0V2luZG93SXNLZXkpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRWaWV3U2l6ZSk6IFVzZSBzZXRWYWx1ZSBhbmQgdG9X
Sy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNh
dGlvbkNsaWNrKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnBvc3RTZXRBZGRzVmlzaXRlZExpbmtzKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UsCisgICAgICAgIGFuZCB1c2UgT3B0aW9uYWwgaW5z
dGVhZCBvZiBib29sL2RvdWJsZSBwYWlycy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFVzZSBwb3N0UGFn
ZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjppc0dlb2xvY2F0aW9uUHJv
dmlkZXJBY3RpdmUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQgY29uc3Qp
OiBVc2UgdG9XSyBhbmQgdWludDY0VmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
OjpzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1p
c3Npb25Gb3JPcmlnaW4pOiBVc2Ugc2V0VmFsdWUKKyAgICAgICAgYW5kIHBvc3RQYWdlTWVzc2Fn
ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbik6IFVz
ZXQgc2V0VmFsdWUKKyAgICAgICAgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUpOiBVc2Ugc2V0VmFsdWUgYW5kIHBv
c3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEhpZGRlbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0Q2FjaGVNb2RlbCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1
ZSBjb25zdCk6IFVzZSB0b1dLIGFuZCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpwcm9jZXNzV29ya1F1ZXVlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlQmFja05hdmlnYXRpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24pOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZCk6IFVzZSBzZXRWYWx1
ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cXVldWVSZWxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVl
TG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVOb25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OnBvc3RNZXNzYWdlKTog
QWRkZWQuIE92ZXJsb2FkcyBmb3IgbWFueSB0eXBlcyB0byBrZWVwIGNhbGxlciBjb2RlIHN0cmVh
bWxpbmVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OnBvc3RQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaDogVXBkYXRlZCBmb3IgdGhlIGFib3Zl
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6cHJvcGVy
dHlWYWx1ZURvdWJsZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlSW50KTog
RGl0dG8uCisgICAgICAgIChXVFI6Om51bWVyaWNXaW5kb3dQcm9wZXJ0eSk6IFJlbmFtZWQgZnJv
bSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZSBmb3IgYnJldml0eQorICAgICAgICBhbmQgZm9y
IGNvbnNpc3RlbmN5IHdpdGggSlNCYXNpY3MuaCBmdW5jdGlvbnMuCisgICAgICAgIChXVFI6OmR1
bXBQYXRoKTogVXNlIHN0cmluZ1Byb3BlcnR5LCBvYmplY3RQcm9wZXJ0eSwgYW5kIG1ha2VTdHJp
bmcuCisgICAgICAgIChXVFI6OnJhbmdlVG9TdHIpOiBVc2UgYXV0bywgbnVtZXJpY1Byb3BlcnR5
LCBhbmQgbWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6TmF2aWdhdGlvblR5cGVUb1N0cmluZyk6
IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpzdHJpbmcpOiBSZW5hbWVkIGZyb20gc2VjdXJpdHlP
cmlnaW5Ub1N0ci4gVXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OmZyYW1lVG9TdHIpOiBV
c2UgYXV0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVz
dCk6IFJlbW92ZWQgdW5uZWVkZWQgbG9jYWwuCisgICAgICAgIChXVFI6OmR1bXBGcmFtZURlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OmR1
bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6ZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBVc2Ug
YXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOiBV
cGRhdGUgZm9yIG5hbWUgY2hhbmdlLgorICAgICAgICAoV1RSOjp0b0pTKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6aGFzRG9j
dW1lbnRFbGVtZW50KTogVXNlIG9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHksCisgICAgICAgIGFuZCBwYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93
T2JqZWN0LgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24pOiBTdHJlYW1saW5lIGNvZGUgYSBiaXQuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOiBVc2UgbWFrZVN0
cmluZy4KKyAgICAgICAgKFdUUjo6bGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5RdW90YSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKTogRGl0dG8uCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpUZXN0UnVubmVyKTogVXNlIHRvV0suCisgICAgICAgIChX
VFI6OnBhZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6bWFpbkZyYW1lKTogQWRkZWQuCisgICAg
ICAgIChXVFI6Om1haW5KU0NvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNwbGF5
QW5kVHJhY2tSZXBhaW50cyk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjp0b1dLKTogQWRkZWQg
b3ZlcmxvYWQgZm9yIGRvdWJsZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlV0tEaWN0aW9uYXJ5KTog
QWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0dXJuVmFs
dWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmlu
Z0Jvb2xlYW4pOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VXaXRoUmV0dXJuVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRkZWQuCisgICAgICAgIChX
VFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdVSW50NjQpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNob3VsZER1bXBQaXhlbHMgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldER1bXBQaXhl
bHMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6d2hhdFRvRHVtcCBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5n
VUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXaGF0VG9EdW1wKTogVXNlIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdhaXRV
bnRpbERvbmUpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2hvdWxkV2FpdFVudGlsRG9uZSBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hv
dWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmV4ZWNDb21tYW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OmZpbmRPcHRpb25zRnJv
bUFycmF5KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLCBhbmQgY3JlYXRlSlNTdHJp
bmcuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmcpOiBVc2UgcGFnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZmluZFN0cmluZ01hdGNoZXNJblBhZ2UpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVwbGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKTog
VXNlIG1haW5KU0NvbnRleHQgYW5kIGFycmF5TGVuZ3RoIGFuZAorICAgICAgICByZW1vdmVkIHVu
bmVlZGVkIGNhbGwgdG8gc3RkOjpyb3VuZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBbGxEYXRhYmFzZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKTogVXNlIHBhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VG
b3JPcmlnaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6c3RyaW5nQXJyYXlUb0pTKTogVHdlYWtl
ZCBjb2Rpbmcgc3R5bGUgYSBiaXQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om9yaWdpbnNX
aXRoQXBwbGljYXRpb25DYWNoZSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc0NvbW1hbmRFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dENhbk9wZW5XaW5kb3dzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TWVkaWFEZXZpY2VzRW5hYmxlZCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJSVENNRE5TSUNFQ2FuZGlk
YXRlc0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0Q3VzdG9t
VXNlckFnZW50KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9kZXJuTWVkaWFDb250cm9sc0Vu
YWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViR0wyRW5hYmxl
ZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXcml0YWJsZVN0cmVhbUFQ
SUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VHJhbnNmb3Jt
U3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRS
ZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRHZW5lcmljQ3VlQVBJRW5hYmxlZCk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSk6IFVz
ZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFBs
dWdpbnNFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVyZW5jZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNQYWdlQm94VmlzaWJsZSk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcik6IFJlbW92ZWQgbG9jYWwuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldEF1ZGlvUmVzdWx0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVy
dHkuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IpOiBVc2UgcGFn
ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQpOiBVc2UgcmFuZ2Ut
YmFzZWQgZm9yIGxvb3AuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKTogVXNlIG1haW5GcmFtZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGV4dERpcmVjdGlvbik6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiBj
b25zdCk6CisgICAgICAgIFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyRGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKToKKyAgICAgICAgVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayk6
IENoYW5nZWQgbWFwIHRvIHN0b3JlIG9iamVjdHMgaW5zdGVhZCBvZiB2YWx1ZXMuCisgICAgICAg
IChXVFI6OmNhbGxUZXN0UnVubmVyQ2FsbGJhY2spOiBTaW1wbGlmeSBzaW5jZSBtYXAgaGFzIG9i
amVjdHMuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
clRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0QWx3YXlzQWNjZXB0Q29va2llcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMpOiBV
c2UgYXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxl
U2hlZXRFbmFibGVkKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24pOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpkZW55V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25Q
ZXJtaXNzaW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIE9wdGlvbmFsPGRvdWJs
ZT4gaW5zdGVhZCBvZiBib29sL2RvdWJsZQorICAgICAgICBwYWlycywgbGV0dGluZyB0aGUgSURM
IGJpbmRpbmdzIGRvIHRoZSB3b3JrIGZvciB1cy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKTogUmVtb3ZlZCBsb2Nh
bC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNEb2luZ01lZGlhQ2FwdHVyZSBjb25zdCk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3Jp
Z2luKTogUmVtb3ZlZCBsb2NhbHMuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9y
T3JpZ2luKTogREl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlldyk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnF1
ZXVlTG9hZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1M
U3RyaW5nKTogUmVtb3ZlZCBhIGxvY2FsLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1
ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVldWVO
b25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFJl
amVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cyk6CisgICAgICAgIFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGRM
b2dEb3dubG9hZENhbGxiYWNrcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCBjb25zdCk6IFVzZSBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEJsb2NrQWxsUGx1Z2lucyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6ZmFpbE5leHROZXdDb2RlQmxvY2spOiBVc2UgbWFpbkpTQ29udGV4
dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdDb21waWxlcyk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpuZXZlcklubGluZUZ1bmN0aW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xp
Y3lBZnRlckRlbGF5KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVM
aW1pdHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkRG93bmxv
YWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOiBV
c2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHQpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0Q2FsbGJhY2spOiBVc2UgbWFpbkpT
Q29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dlZE1lbnVBY3Rpb25z
KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLAorICAgICAgICBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppbnN0YWxsQ3VzdG9tTWVudUFjdGlv
bik6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFy
U3RhdGlzdGljc0RhdGFGb3JEb21haW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRh
YmFzZSk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlz
U3RhdGlzdGljc0VwaGVtZXJhbCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVy
bmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1
Z01vZGUpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljKTog
RGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
VmVyeVByZXZhbGVudFJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpp
c1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlSVRQRGF0YWJhc2UpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJl
ZCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbik6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1l
dHJ5Q2FsbGJhY2spOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Vw
ZGF0ZUNvb2tpZUJsb2NraW5nKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5KTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRp
c3RpY3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBVc2UgcG9zdE1l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RlbGV0ZUNvb2tp
ZXNGb3JIb3N0KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpoYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9u
KTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVy
KTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3Rh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6bWFrZURvbWFpbnNWYWx1ZSk6IEZhY3Rv
cmVkIG91dC4gVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNh
bGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayk6IFVzZSBtYWtlRG9t
YWluc1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpsb2FkZWRTdWJyZXNvdXJjZURv
bWFpbnMpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxE
aWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2spOiBVc2UgbWFrZURvbWFp
bnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNs
ZWFyTW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpy
ZW1vdmVNb2NrTWVkaWFEZXZpY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
cmVzZXRNb2NrTWVkaWFEZXZpY2VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjppc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCk6IFVzZQorICAgICAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6Y29ubmVjdE1vY2tHYW1lcGFkKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZERldGFpbHMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRCdXR0b25W
YWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxl
cyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAg
ICAgIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9w
ZW5QYW5lbEZpbGVzTWVkaWFJY29uKTogVXNlIG1haW5KU0NvbnRleHQgYW5kIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRp
YWxzKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRP
TUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyRE9NQ2FjaGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
Omhhc0RPTUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9v
bGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9tQ2FjaGVTaXplKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKTogVXNlIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1h
bmlmZXN0VGhlbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
aW5qZWN0VXNlclNjcmlwdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZv
clRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphZGRU
ZXN0S2V5VG9LZXljaGFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
blVwS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6a2V5RXhpc3Rz
SW5LZXljaGFpbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxi
YWNrQ2FsbHNDb3VudCk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJu
aW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREaXNtaXNzSmF2
YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KTogVXNlCisgICAgICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFib3J0TW9kYWwpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbik6IFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBZENsaWNrQXR0cmlidXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRB
ZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRl
c3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T2Zmc2NyZWVuQ2Fu
dmFzRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6Omhhc0FwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwQm91
bmRTZXNzaW9uKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFwcEJvdW5kRG9tYWlucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxl
bmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAgICAgIGFuZCB0b1dLLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpwb3N0TWVzc2FnZSk6IEFkZGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4g
QWxzbyBjaGFuZ2VkCisgICAgICAgIG92ZXJyaWRlUHJlZmVyZW5jZSBvdCBhIHN0YXRpYyBtZW1i
ZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXh0SW5wdXRDb250cm9s
bGVyOjpUZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6flRleHRJbnB1dENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2Jh
bE9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IERlbGV0ZWQuIFVz
ZSB0aGUgb25lIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChXVFI6OmNyZWF0ZUNvbXBv
c2l0aW9uSGlnaGxpZ2h0RGF0YSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3Ig
dGhlIGFib3ZlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9p
b3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoV1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVs
ZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMp
OiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9m
QXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb21wdXRlZFJvbGVTdHJpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24gY29uc3Qp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNj
cmlwdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0ZvY3VzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5k
c0ZvclJhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJv
d3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mVmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4gY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVl
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZG9jdW1lbnRVUkkpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbiBjb25z
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxh
cHNlZCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NpbmdsZUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNNdWx0aUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2UpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OkV2ZW50U2VuZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0
aW9uLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSk6
IERlbGV0ZWQuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21h
Yy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tOgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5hbWVkIGZyb20gbWFrZUFycmF5UmVmRm9yQXJyYXku
CisgICAgICAgIChXVFI6Om1ha2VKU09iamVjdCk6IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5h
bWVkIGZyb20gbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkuCisgICAgICAgIChXVFI6Om1ha2VW
YWx1ZVJlZkZvclZhbHVlKTogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICAoV1RSOjpz
ZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBV
c2UgdG9XVEZTdHJpbmcKKyAgICAgICAgYW5kIGFycmF5TGVuZ3RoLgorCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5h
bWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAo
V1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVsZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZy
b20gSlNCYXNpY3MuaCBpbnN0ZWFkLgorICAgICAgICAoV1RSOjpjb252ZXJ0VmVjdG9yVG9PYmpl
Y3RBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6Om1ha2VKU0FycmF5KTogUmVuYW1lZCBm
cm9tIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5LgorICAgICAgICAoV1RSOjpzZWxlY3RUZXh0
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nIGFuZCBh
cnJheUxlbmd0aC4KKyAgICAgICAgKFdUUjo6c2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVGb3JDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dIZWFkZXJzIGNvbnN0KTogVXNlIG1ha2VKU0FycmF5LgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEFycmF5QXR0cmlidXRl
VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBVc2UgY3JlYXRlSlNT
dHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9j
dW1lbnRVUkkpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlu
c3BlY3RvclRlc3RTdHViVVJMKTogUmVtb3ZlIGxvY2Fscy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmg6IEFkZGVkIHRvV0tTdHJpbmcgb3ZlcmxvYWQgdGhh
dCBjb252ZXJ0cyBmcm9tCisgICAgICAgIGEgSlNWYWx1ZVJlZiwgSlNTdHJpbmdSZWYsIG9yIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhbmQgdG9XSyBvdmVybG9hZCB0aGF0IGNvbnZlcnRzCisg
ICAgICAgIGZyb20gYSBjb25zdCBjaGFyKi4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVD
b250ZXh0Q29uZmlndXJhdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6
IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUxpdmVE
b2N1bWVudHNBZnRlclRlc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmNoZWNrRm9yV29ybGRMZWFrcyk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpjb250ZW50RXh0
ZW5zaW9uSlNPTlBhdGgpOiBVc2UgdG9TVEQuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
Ojpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdCk6IFVzZSB0b1dLLgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIHN0cmluZ1ZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdCk6IFVz
ZSBkaWN0aW9uYXJ5VmFsdWUgYW5kCisgICAgICAgIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOiBV
c2UgZGljdGlvbmFyeVZhbHVlLAorICAgICAgICBzdHJpbmdWYWx1ZSwgdWludDY0VmFsdWUsIGRv
dWJsZVZhbHVlLCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
aWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgdG9X
Sy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBVc2UgYXV0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24pOiBSZW1vdmVkIGxvY2FsLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogVXNl
IGF1dG8gYW5kIHRvV1RGU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2YgdG9TVEQuCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBP
cHRpb25hbCBpbnN0ZWFkIG9mIHBhaXJzCisgICAgICAgIG9mIGJvb2wgYW5kIGRvdWJsZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2VyTWVkaWFQZXJtaXNz
aW9uRm9yT3JpZ2luKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
ZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJ
bk5ldHdvcmtQcm9jZXNzKTogVXNlIHRvV0suCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6cG9zdFBhZ2VN
ZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpUZXN0SW5jb3Zh
dGlvbik6IFVzZSB0b1dURlN0cmluZy4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmNy
ZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOiBVc2UgYXV0byBhbmQgc2V0VmFsdWUuCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjppbnZva2UpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFu
ZCBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlIHBvc3RQYWdlTWVzc2FnZQorICAgICAgICBhbmQg
c3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3lu
Y2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlCisgICAgICAgIGRpY3Rpb25h
cnlWYWx1ZSwgYm9vbGVhblZhbHVlLCB2YWx1ZSwgc3RyaW5nVmFsdWUsIGRvdWJsZVZhbHVlLCBh
bmQKKyAgICAgICAgb3B0aW9uYWxEb3VibGVWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OnVpU2NyaXB0RGlkQ29tcGxldGUpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFuZCBzZXRW
YWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZEJlZ2luU3dpcGUpOiBVc2Ug
cG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6d2lsbEVuZFN3
aXBlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRFbmRTd2lwZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3ZlU3dpcGVTbmFw
c2hvdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6bm90aWZ5RG93bmxv
YWREb25lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0
YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVt
b3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxk
RG93bmdyYWRlUmVmZXJyZXIpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdEludm9jYXRpb246OmRpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRUb1NhbWVTaXRl
U3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
U2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
SW52b2NhdGlvbjo6ZGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QmxvY2tDb29r
aWVzRm9ySG9zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
U3RhdGlzdGljc0RlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlv
bjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldExhc3RTZWVuKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRNZXJnZVN0YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0RXhwaXJlZFN0YXRpc3RpYyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0SGFzSGFk
VXNlckludGVyYWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpk
aWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92ZUFsbFNlc3Npb25DcmVk
ZW50aWFscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QXBw
Qm91bmREb21haW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpwZXJm
b3JtQ3VzdG9tTWVudUFjdGlvbik6IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFk
ZGVkIEpTQmFzaWNzLmggdG8gRGljdGlvbmFyeUZ1bmN0aW9ucy5oIHRvIGFwcHJvcHJpYXRlIHRh
cmdldHMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV1RSOjpTY3JpcHRJdGVtOjpTY3JpcHRJdGVtKTogVXNlIHRvV0suCisgICAg
ICAgIChXVFI6OldvcmtRdWV1ZU1hbmFnZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29j
b2EuaDogTWFrZSBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbToKKyAgICAgICAgKFdUUjo6
VUlTY3JpcHRDb250cm9sbGVyQ29jb2E6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IFVzZSB0b1dURlN0
cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5oOiBNYXJrZWQgdGhlIGNsYXNzIGZpbmFsIGFuZCBtYWRlCisgICAgICAgIG1vc3QgZnVu
Y3Rpb25zIHByaXZhdGUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogRGVsZXRlZC4g
VXNlIHRoZSBvbmUgaW4gSlNCYXNpY3MuaC4KKyAgICAgICAgKFdUUjo6cGFyc2VNb2RpZmllckFy
cmF5KTogVXNlIHRoZSBuZXcgdG9XVEZTdHJpbmcgb3ZlcmxvYWQuCisgICAgICAgIChXVFI6OlVJ
U2NyaXB0Q29udHJvbGxlcklPUzo6dHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZCk6
IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94
eS5tbToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eSk6
IEluaXRpYWxpemUgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIChXVFI6OkV2ZW50
U2VuZGVyUHJveHk6OmtleURvd24pOiBVc2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaDogTWFya2VkIHRoZSBjbGFz
cyBmaW5hbCBhbmQgbWFkZQorICAgICAgICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCiAyMDIw
LTA5LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
cnVuLXdlYmtpdC10ZXN0cyBjb2RlIHRoYXQgc3RyaXBzIHRyYWlsaW5nIHNwYWNlcyB3aGVuIGNv
bXBhcmluZyBleHBlY3RlZC50eHQgZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCAxYTBjMTY3MDZiMmFlNDI2MGUzMmQyOTA0
NDliZjJkNjVjZmEzZGZhLi45ZTI0MGU1NTljYTQ1MjMzNzQ3OTg0YTZiYTkzNTE1NGFhY2NkN2Rk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2luY2x1
ZGUgIkpTQmFzaWNzLmgiCiAKIC8vIFN0YXRpYyBWYWx1ZSBHZXR0ZXJzCiAKQEAgLTQ3LDE1ICs0
OCw5IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFJvb3RFbGVtZW50Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPCiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250
ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlclN0ciA9
IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlciIpKTsKLSAgICAKLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlNDbGFzcygpOwot
ICAgIEpTVmFsdWVSZWYgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJPYmplY3QgPSBKU09iamVjdE1h
a2UoY29udGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVm
KTsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlclN0ci5nZXQoKSwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJPYmpl
Y3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShj
b250ZXh0LCAiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCBKU09iamVjdE1ha2UoY29udGV4dCwg
Y3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlzKSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGxv
Z0ZvY3VzRXZlbnRzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVm
KikKQEAgLTE1Miw5ICsxNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRQbGF0Zm9ybU5hbWVD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpcwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBwbGF0Zm9ybU5hbWUuZ2V0KCkpOwogfQogCi1K
U0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWlu
UHRyPEpTQ2xhc3NSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKCkK
IHsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CiAgICAg
ICAgIHsgImxvZ0ZvY3VzRXZlbnRzIiwgbG9nRm9jdXNFdmVudHNDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJsb2dWYWx1ZUNoYW5nZUV2ZW50cyIsIGxvZ1ZhbHVlQ2hhbmdlRXZlbnRzQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAibG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMiLCBsb2dT
Y3JvbGxpbmdTdGFydEV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkBAIC0xNjYsMjEgKzE2MSwxOCBA
QCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKICAgICAg
ICAgeyAiZW5hYmxlRW5oYW5jZWRBY2Nlc3NpYmlsaXR5IiwgZW5hYmxlRW5oYW5jZWRBY2Nlc3Np
YmlsaXR5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAgICB9OwotCi0g
ICAgc3RhdGljIEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBKU1N0YXRpY1ZhbHVlIHZhbHVlc1tdID0gewogICAgICAgICB7ICJmb2N1c2VkRWxl
bWVudCIsIGdldEZvY3VzZWRFbGVtZW50Q2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
cm9vdEVsZW1lbnQiLCBnZXRSb290RWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgImVuaGFuY2VkQWNjZXNzaWJpbGl0eUVuYWJsZWQiLCBnZXRFbmhhbmNlZEFjY2Vzc2liaWxp
dHlFbmFibGVkQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAicGxhdGZvcm1OYW1lIiwg
Z2V0UGxhdGZvcm1OYW1lQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwLCAw
IH0KICAgICB9OwotCi0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlv
biA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBzdGF0aWMg
Y29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xh
c3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCAwLCB2YWx1ZXMsIGZ1
bmN0aW9ucywKICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICAgIH07
Ci0KLSAgICByZXR1cm4gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1
cm4gYWRvcHQoSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbikpOwogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IDFkYzdkM2I1NjNhMTU0
ZjRjZTliZjdhMzAzMGM4YzVhNzY5N2YzOWEuLjhhMjg3YzQ4YjFkZjUzNmI0NzViNjE4NDE3YzI2
MTM1ZmIzODYxMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcigpOwogICAgIH5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwogCi0g
ICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBDb250cm9sbGVyIE1ldGhvZHMgLSBw
bGF0Zm9ybS1pbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMKICAgICBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IHJvb3RFbGVtZW50KCk7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKKyAgICBzdGF0
aWMgSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gY3JlYXRlSlNDbGFzcygpOwogCiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIEhXSU5FVkVOVEhPT0sgbV9mb2N1c0V2ZW50SG9vayB7IG51bGxwdHIgfTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKaW5k
ZXggMGU1YTUwZjZiOWQzY2U1Y2E3N2JhNDQ4Njg3YzAwOWNiYjE3NWQyMC4uOGVmODVlZWRmMDg0
ZDY3NjIyNzFjYWYyYzhmNDRhYjg1NDc5MjY3MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCBzdGF0aWMg
SlNWYWx1ZVJlZiB1aUVsZW1lbnRDb3VudEZvclNlYXJjaFByZWRpY2F0ZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LAogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHN0YXJ0RWxlbWVu
dCA9IG51bGxwdHI7CiAgICAgYm9vbCBpc0RpcmVjdGlvbk5leHQgPSB0cnVlOwogICAgIEpTVmFs
dWVSZWYgc2VhcmNoS2V5ID0gbnVsbHB0cjsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
c2VhcmNoVGV4dCA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNlYXJj
aFRleHQ7CiAgICAgYm9vbCB2aXNpYmxlT25seSA9IGZhbHNlOwogICAgIGJvb2wgaW1tZWRpYXRl
RGVzY2VuZGFudHNPbmx5ID0gZmFsc2U7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gNSAmJiBh
cmd1bWVudENvdW50IDw9IDYpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Jp
bmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbSBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQppbmRleCBlY2U1MWVh
MzlhNTE2ODM1NGJkNTY5NDYzNTkwODZkOTAyMmVhMTlkLi4xNGM2MjcwZjgyMzFkYzBmMjZhMDVl
Njk1ZGE4NDdiZGY4ZTQ4YzhlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9CaW5k
aW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCkBAIC0xLDQgKzEs
NCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzMSwxMCArNDMxLDEwIEBAIHN1
YiBfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IKIHsKICAgICBteSAoJHNlbGYsICR0eXBlLCAkYXJn
dW1lbnROYW1lKSA9IEBfOwogCi0gICAgcmV0dXJuICJKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4o
Y29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAk
dHlwZS0+aXNOdWxsYWJsZTsKKyAgICByZXR1cm4gInRvT3B0aW9uYWxCb29sKGNvbnRleHQsICRh
cmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHR5cGUtPmlzTnVs
bGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5h
bWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuICIkYXJndW1lbnRO
YW1lIiBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKLSAgICByZXR1cm4gImFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikpIiBpZiAkJHNl
bGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJjcmVh
dGVKU1N0cmluZyhjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0
b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOwogICAgIHJldHVybiAiSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0t
PklzUHJpbWl0aXZlVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuICJ0byIgLiBfaW1wbGVtZW50YXRp
b25DbGFzc05hbWUoJHR5cGUpIC4gIihjb250ZXh0LCAkYXJndW1lbnROYW1lKSI7CiB9CkBAIC00
NzIsMTEgKzQ3MiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBteSAoJHNlbGYsICRy
ZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAiSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1bmRlZmluZWQiOwot
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lv
bn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5cGUtPmlz
TnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufSki
IGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlwZS0+aXNOdWxs
YWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAke2V4cHJlc3Np
b259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAiJHtl
eHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7CiAgICAgcmV0dXJu
ICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJCRzZWxme2Nv
ZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwotICAgIHJldHVybiAi
SlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKKyAgICBy
ZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIgaWYgJCRzZWxm
e2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwogICAgIHJldHVybiAi
dG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwogfQogCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvR0NDb250cm9sbGVyLmNwcAppbmRleCA0YTM3YmYzYTEzZGE0Y2FlZWE0MGEwY2Y4
YTcwOWZlNThkMzRlYTRjLi5lZDJjNmMxOWU1MzNlZTBmMmZlNDk4ZjNlNTUzMDY0NDcwOGNiMzBk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNzIgKzI5LDQ5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+Ci0KLUdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKCkKLXsKLX0KLQot
R0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKCkKLXsKLX0KKyNpbXBvcnQgIkpTQmFzaWNzLmgi
CiAKIC8vIFN0YXRpYyBGdW5jdGlvbnMKIAogc3RhdGljIEpTVmFsdWVSZWYgY29sbGVjdENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBHQ0NvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3QoKTsKKyAgICBhdXRvJiBjb250
cm9sbGVyID0gKnN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0KCk7CiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBjb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7
Ci0gICAgYm9vbCB3YWl0VW50aWxEb25lID0gZmFsc2U7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQg
PiAwKQotICAgICAgICB3YWl0VW50aWxEb25lID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMF0pOwotCi0gICAgR0NDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBj
b250cm9sbGVyLT5jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVudGlsRG9uZSk7Ci0KKyAg
ICBhdXRvJiBjb250cm9sbGVyID0gKnN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgYm9vbCB3YWl0VW50aWxEb25lID0gYXJndW1l
bnRDb3VudCA+IDAgJiYgSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pOwor
ICAgIGNvbnRyb2xsZXIuY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKHdhaXRVbnRpbERvbmUpOwog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpT
VmFsdWVSZWYgZ2V0SlNPYmplY3RDb3VudENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKLSAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxHQ0Nv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIHNpemVfdCBq
c09iamVjdENvdW50ID0gY29udHJvbGxlci0+Z2V0SlNPYmplY3RDb3VudCgpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGpzT2JqZWN0Q291bnQpOworICAgIGF1dG8m
IGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwg
Y29udHJvbGxlci5nZXRKU09iamVjdENvdW50KCkpOwogfQogCiAvLyBPYmplY3QgQ3JlYXRpb24K
IAotdm9pZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9p
ZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7
Ci0gICAgYXV0byBnY0NvbnRyb2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiR0NDb250cm9sbGVyIikpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdl
dEpTQ2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGdjQ29udHJvbGxlck9iamVjdCA9IEpTT2JqZWN0
TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NS
ZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIGdj
Q29udHJvbGxlclN0ci5nZXQoKSwgZ2NDb250cm9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24p
OworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgIkdDQ29udHJvbGxl
ciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCksIHRoaXMpKTsK
IH0KIAotSlNDbGFzc1JlZiBHQ0NvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQorSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4gR0NDb250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKCkKIHsKLSAgICBzdGF0aWMg
SlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CiAgICAgICAgIHsgImNvbGxlY3Qi
LCBjb2xsZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiY29sbGVjdE9uQWx0ZXJuYXRl
VGhyZWFkIiwgY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAiZ2V0SlNPYmplY3RDb3VudCIsIGdldEpTT2JqZWN0Q291bnRDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07Ci0KLSAgICBzdGF0aWMgSlNDbGFzc0RlZmlu
aXRpb24gY2xhc3NEZWZpbml0aW9uID0gewotICAgICAgICAwLCBrSlNDbGFzc0F0dHJpYnV0ZU5v
bmUsICJHQ0NvbnRyb2xsZXIiLCAwLCAwLCBzdGF0aWNGdW5jdGlvbnMsCisgICAgc3RhdGljIGNv
bnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtKU0NsYXNz
QXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIGZ1bmN0aW9ucywKICAgICAgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICAgIH07Ci0KLSAgICByZXR1cm4gSlND
bGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gYWRvcHQoSlNDbGFzc0Ny
ZWF0ZSgmZGVmaW5pdGlvbikpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
R0NDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaAppbmRl
eCA2NDI0Mzg0ZGY1MzBlOGMxZmRhZThmYjYxMzExYmYwYWRjNGE2YThmLi4zN2FhNDZhNzc0Y2Uz
ZTcwYjg3ODlkNDQzZjFlNDE4MTRhYzU4ZjVjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9HQ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xs
ZXIuaApAQCAtMjYsMTkgKzI2LDE1IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgR0ND
b250cm9sbGVyX2gKLSNkZWZpbmUgR0NDb250cm9sbGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKIGNsYXNz
IEdDQ29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgR0NDb250cm9sbGVyKCk7Ci0gICAgfkdDQ29udHJvbGxlcigpOwotCi0gICAgdm9pZCBtYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmpl
Y3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZik7CiAKICAgICAvLyBDb250cm9sbGVyIE1ldGhvZHMgLSBwbGF0ZnJvbSBpbmRl
cGVuZGFudCBpbXBsZW1lbnRhdGlvbnMKICAgICB2b2lkIGNvbGxlY3QoKSBjb25zdDsKQEAgLTQ2
LDcgKzQyLDUgQEAgcHVibGljOgogICAgIHNpemVfdCBnZXRKU09iamVjdENvdW50KCkgY29uc3Q7
CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOworICAgIHN0
YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7CiB9OwotCi0jZW5k
aWYgLy8gR0NDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKaW5kZXgg
NWU1MzVhZjFkZWFkODQyZDJlZjRmNWY3NjYwMmM4M2E5NTBiNzY1Mi4uMzdmNjkxY2I3OTZiNTYz
OTI2MjgwNGVlM2Y0MDFjYWJkYWU4ZjBlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5j
cHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UnVubmVyLmgiCiAKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0
U3VwcG9ydC5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZUl0
ZW0uaCIKQEAgLTM4LDEwICszOSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcElu
bGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5QnVmZmVyVmlldy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ1Rlc3RSdW5uZXJVdGlscy5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2Jq
ZWN0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1ZNSW5saW5lcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRp
b24uaD4KQEAgLTQ4OSw3ICs0ODcsNiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkaXNwbGF5Q2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKUwogCiBzdGF0
aWMgSlNWYWx1ZVJlZiBkaXNwbGF5QW5kVHJhY2tSZXBhaW50c0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRh
dGlvbgogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5kaXNw
bGF5QW5kVHJhY2tSZXBhaW50cygpOwogCkBAIC00OTgsMTIgKzQ5NSwxMCBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBkaXNwbGF5QW5kVHJhY2tSZXBhaW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVu
dGF0aW9uCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNv
bnRleHQsIGFyZ3VtZW50c1swXSk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAg
ICAgYXV0byBlbmNvZGVkSG9zdE5hbWUgPSBjb250cm9sbGVyLT5jb3B5RW5jb2RlZEhvc3ROYW1l
KG5hbWUuZ2V0KCkpOwpAQCAtNTEyLDIyICs1MDcsMTIgQEAgc3RhdGljIEpTVmFsdWVSZWYgZW5j
b2RlSG9zdE5hbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3QKIAogc3RhdGljIEpTVmFsdWVSZWYgZXhlY0NvbW1hbmRDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCiB7Ci0gICAgLy8gSGFzIE1hYyAmIFdpbmRvd3MgaW1wbGVtZW50YXRp
b25zLgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byBuYW1lID0gYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7Ci0KKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNv
bnRleHQsIGFyZ3VtZW50c1swXSk7CiAgICAgLy8gSWdub3JpbmcgdGhlIHNlY29uZCBwYXJhbWV0
ZXIgKHVzZXJJbnRlcmZhY2UpLCBhcyB0aGlzIGNvbW1hbmQgZW11bGF0ZXMgYSBtYW51YWwgYWN0
aW9uLgotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHZhbHVlOwotICAgIGlmIChhcmd1
bWVudENvdW50ID49IDMpIHsKLSAgICAgICAgdmFsdWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZhbHVlID0gYWRvcHQoSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLQorICAgIGF1dG8gdmFsdWUgPSBXVFI6OmNyZWF0
ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50Q291bnQgPiAyID8gYXJndW1lbnRzWzJdIDogbnVs
bHB0cik7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+
ZXhlY0NvbW1hbmQobmFtZS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwpAQCAtNTQxLDExICs1MjYsOCBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBmaW5kU3RyaW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byB0
YXJnZXQgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
ZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIEpTT2JqZWN0UmVm
IG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRp
b24pOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byB0YXJnZXQgPSBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgYXV0byBvcHRpb25zID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgbnVsbHB0cik7CiAKICAgICBU
ZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihj
b250ZXh0LCBjb250cm9sbGVyLT5maW5kU3RyaW5nKGNvbnRleHQsIHRhcmdldC5nZXQoKSwgb3B0
aW9ucykpOwpAQCAtNTY2LDggKzU0OCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGlzQ29tbWFuZEVu
YWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuCiAgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKQEAgLTU3OSwxMCAr
NTYwLDggQEAgc3RhdGljIEpTVmFsdWVSZWYgb3ZlcnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGYKICAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDIpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAg
IGF1dG8ga2V5ID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNb
MF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgYXV0byB2YWx1
ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8ga2V5ID0gV1RSOjpj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOworICAgIGF1dG8gdmFsdWUgPSBX
VFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1sxXSk7CiAKICAgICAvLyBTaG91
bGQgdXNlIGA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9
dHJ1ZSBdIC0tPmAgaW5zdGVhZC4KICAgICBSRUxFQVNFX0FTU0VSVCghSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXkuZ2V0KCksICJXZWJLaXRVc2VzQmFja0ZvcndhcmRDYWNoZVByZWZl
cmVuY2VLZXkiKSk7CkBAIC02NjIsMTUgKzY0MSwxMCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1
ZUxvYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIHVybCA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBhdXRvIHVybCA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICBBU1NFUlQo
ISpleGNlcHRpb24pOwogCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRhcmdldDsKLSAg
ICBpZiAoYXJndW1lbnRDb3VudCA+PSAyKSB7Ci0gICAgICAgIHRhcmdldCA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKLSAgICAg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGFyZ2V0ID0gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKyAgICBhdXRvIHRhcmdldCA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDEgPyBhcmd1bWVu
dHNbMV0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5xdWV1ZUxvYWQodXJsLmdldCgpLCB0YXJnZXQuZ2V0KCkpOwpAQCAtNjkyLDcg
KzY2Niw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZEhUTUxTdHJpbmdDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYKICAgICAgICAgYmFzZVVSTCA9IGFkb3B0
KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsK
ICAgICAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKICAgICB9IGVsc2UKLSAgICAgICAgYmFzZVVS
TCA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisgICAgICAgIGJh
c2VVUkwgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAKQEAgLTIwNDUsMzQgKzIwMTksMjQgQEAgc3RhdGljIEpTVmFsdWVSZWYgcnVuVUlT
Y3JpcHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWMK
IAogc3RhdGljIHZvaWQgdGVzdFJ1bm5lck9iamVjdEZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVj
dCkKIHsKLSAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5kZXJlZigp
OworICAgIHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0
KSktPmRlcmVmKCk7CiB9CiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12b2lkIFRlc3RSdW5uZXI6
Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRv
d09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXN0UnVubmVyOjptYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gdGVzdFJ1bm5lclN0
ciA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXN0UnVubmVyIikpOwog
ICAgIHJlZigpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpTQ2xhc3MoKTsKLSAg
ICBKU1ZhbHVlUmVmIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QgPSBKU09iamVjdE1ha2UoY29u
dGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVmKTsKLQot
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCB0ZXN0UnVubmVy
U3RyLmdldCgpLCBsYXlvdXRUZXN0Q29udG9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOwor
ICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRlc3RSdW5uZXIiLCBK
U09iamVjdE1ha2UoY29udGV4dCwgY3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlzKSk7CiB9CiAK
LUpTQ2xhc3NSZWYgVGVzdFJ1bm5lcjo6Z2V0SlNDbGFzcygpCitKU1JldGFpblB0cjxKU0NsYXNz
UmVmPiBUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNW
YWx1ZSogc3RhdGljVmFsdWVzID0gVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCk7Ci0gICAgc3Rh
dGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9IFRlc3RSdW5uZXI6OnN0YXRp
Y0Z1bmN0aW9ucygpOwotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRp
b24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIlRlc3RSdW5uZXIiLCAw
LCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBzdGF0aWMgY29uc3QgSlNDbGFz
c0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVO
b25lLCAiVGVzdFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcygpLCBzdGF0aWNGdW5jdGlvbnMoKSwK
ICAgICAgICAgMCwgdGVzdFJ1bm5lck9iamVjdEZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwCiAgICAgfTsKLQotICAgIHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRp
b24pOworICAgIHJldHVybiBhZG9wdChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKSk7CiB9CiAK
IC8vIENvbnN0YW50cwpAQCAtMjEwNyw5ICsyMDcxLDkgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0
UkVOREVSX1RSRUVfU0hPV19MQVlFUl9GUkFHTUVOVFMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2IKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgMzIpOwogfQogCi1KU1N0
YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQorY29uc3QgSlNTdGF0aWNWYWx1
ZSogVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1
ZSBzdGF0aWNWYWx1ZXNbXSA9IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTU3RhdGljVmFsdWUg
dmFsdWVzW10gPSB7CiAgICAgICAgIHsgImRpZENhbmNlbENsaWVudFJlZGlyZWN0IiwgZ2V0RGlk
Q2FuY2VsQ2xpZW50UmVkaXJlY3QsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAidGltZW91dCIsIGdl
dFRpbWVvdXRDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJnbG9iYWxGbGFnIiwgZ2V0
R2xvYmFsRmxhZ0NhbGxiYWNrLCBzZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlTm9uZSB9LApAQCAtMjEyNywxMiArMjA5MSwxMiBAQCBKU1N0YXRpY1ZhbHVlKiBUZXN0
UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogICAgICAgICB7ICJSRU5ERVJfVFJFRV9TSE9XX0xBWUVS
X0ZSQUdNRU5UUyIsIGdldFJFTkRFUl9UUkVFX1NIT1dfTEFZRVJfRlJBR01FTlRTLCAwLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IH0sCiAgICAgICAgIHsgMCwgMCwgMCwgMCB9CiAgICAgfTsKLSAgICByZXR1cm4gc3RhdGljVmFs
dWVzOworICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKLUpTU3RhdGljRnVuY3Rpb24qIFRlc3RSdW5u
ZXI6OnN0YXRpY0Z1bmN0aW9ucygpCitjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBUZXN0UnVubmVy
OjpzdGF0aWNGdW5jdGlvbnMoKQogewotICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRp
Y0Z1bmN0aW9uc1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNGdW5jdGlvbiBm
dW5jdGlvbnNbXSA9IHsKICAgICAgICAgeyAiYWJvcnRNb2RhbCIsIGFib3J0TW9kYWxDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJhZGREaXNhbGxvd2VkVVJMIiwgYWRkRGlzYWxsb3dlZFVS
TENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZFVSTFRvUmVkaXJlY3QiLCBhZGRVUkxU
b1JlZGlyZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKQEAgLTIyOTcsNyArMjI2MSw3IEBAIEpTU3RhdGlj
RnVuY3Rpb24qIFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsgMCwgMCwg
MCB9CiAgICAgfTsKIAotICAgIHJldHVybiBzdGF0aWNGdW5jdGlvbnM7CisgICAgcmV0dXJuIGZ1
bmN0aW9uczsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKEpTU3Ry
aW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCkBAIC0yMzQyLDE0ICsyMzA2LDEx
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6aWdub3JlTGVnYWN5V2ViTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKCkKIAogdm9pZCBUZXN0UnVubmVyOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZp
cmVkKCkKIHsKLSAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gIkZBSUw6IFRpbWVkIG91dCB3YWl0
aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIjsKLSAgICBmcHJpbnRmKHRlc3RSZXN1
bHQsICIlcyIsIG1lc3NhZ2UpOworICAgIGZwdXRzKCJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBm
b3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcbiIsIHRlc3RSZXN1bHQpOwogCi0gICAgYXV0byBh
Y2N1bXVsYXRlZExvZ3MgPSBnZXRBbmRSZXNldEFjY3VtdWxhdGVkTG9ncygpOwotICAgIGlmICgh
YWNjdW11bGF0ZWRMb2dzLmlzRW1wdHkoKSkgewotICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdl
ID0gIkxvZ3MgYWNjdW11bGF0ZWQgZHVyaW5nIHRlc3QgcnVuOlxuIjsKLSAgICAgICAgZnByaW50
Zih0ZXN0UmVzdWx0LCAiJXMlc1xuIiwgbWVzc2FnZSwgYWNjdW11bGF0ZWRMb2dzLnV0ZjgoKS5k
YXRhKCkpOwotICAgIH0KKyAgICBhdXRvIGxvZ3MgPSBnZXRBbmRSZXNldEFjY3VtdWxhdGVkTG9n
cygpOworICAgIGlmICghbG9ncy5pc0VtcHR5KCkpCisgICAgICAgIGZwcmludGYodGVzdFJlc3Vs
dCwgIkxvZ3MgYWNjdW11bGF0ZWQgZHVyaW5nIHRlc3QgcnVuOlxuJXNcbiIsIGxvZ3MudXRmOCgp
LmRhdGEoKSk7CiAKICAgICBub3RpZnlEb25lKCk7CiB9CkBAIC0yNDAzLDI0ICsyMzY0LDI1IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjdW1tdWxhdGVMb2dzRm9yQ2hhbm5lbChKU1N0cmluZ1Jl
ZiBjaGFubmVsKQogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TG9nQ2hhbm5lbFRvQWNjdW11
bGF0ZSh7IGJ1ZmZlci5nZXQoKSB9KTsKIH0KIAotdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWdu
ZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFwOwordXNpbmcgQ2FsbGJhY2tNYXAgPSBXVEY6Okhh
c2hNYXA8dW5zaWduZWQsIEpTT2JqZWN0UmVmPjsKIHN0YXRpYyBDYWxsYmFja01hcCYgY2FsbGJh
Y2tNYXAoKQogewogICAgIHN0YXRpYyBDYWxsYmFja01hcCYgbWFwID0gKm5ldyBDYWxsYmFja01h
cDsKICAgICByZXR1cm4gbWFwOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmNhY2hlVGVzdFJ1bm5l
ckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQordm9pZCBUZXN0
UnVubmVyOjpjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJl
ZiBjYWxsYmFja1ZhbHVlKQogewotICAgIGlmICghY2FsbGJhY2spCisgICAgYXV0byBjb250ZXh0
ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgaWYgKCFjYWxsYmFja1ZhbHVlIHx8ICFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgY2FsbGJhY2tWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKKyAg
ICBhdXRvIGNhbGxiYWNrID0gKEpTT2JqZWN0UmVmKWNhbGxiYWNrVmFsdWU7CiAKICAgICBpZiAo
Y2FsbGJhY2tNYXAoKS5jb250YWlucyhpbmRleCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJGQUlMOiBUcmllZCB0byBpbnN0YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIgY2FsbGJhY2sgZm9y
IHRoZSBzYW1lIGV2ZW50IChpZCAlZClcbiIsIGluZGV4KTsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJGQUlMOiBUcmllZCB0byBpbnN0YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIgY2FsbGJhY2sg
Zm9yIHRoZSBzYW1lIGV2ZW50IChpZCAldSlcbiIsIGluZGV4KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7
CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFw
KCkuYWRkKGluZGV4LCBjYWxsYmFjayk7CiB9CkBAIC0yNDMwLDIyICsyMzkyLDE4IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6Y2FsbFRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvCiAgICAgaWYgKCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluRnJh
bWVKU0NvbnRleHQoKTsKLSAgICBpZiAoSlNPYmplY3RSZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSwgMCkpIHsKLSAgICAgICAg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaywgSlNDb250ZXh0R2V0R2xv
YmFsT2JqZWN0KGNvbnRleHQpLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIDApOworICAgIGF1
dG8gY29udGV4dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOworICAgIGlmIChhdXRvIGNhbGxiYWNr
ID0gY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSkgeworICAgICAgICBKU09iamVjdENhbGxBc0Z1
bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4
dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7CiAgICAgICAgIEpTVmFsdWVV
bnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogICAgIH0KIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MoKQogewotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0ZXIgOiBjYWxsYmFj
a01hcCgpKSB7Ci0gICAgICAgIGlmIChKU09iamVjdFJlZiBjYWxsYmFjayA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBpdGVyLnZhbHVlLCAwKSkKLSAgICAgICAgICAgIEpTVmFsdWVVbnByb3Rl
Y3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIH0KLQorICAgIGF1dG8gY29udGV4dCA9IG1haW5G
cmFtZUpTQ29udGV4dCgpOworICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBjYWxsYmFja01hcCgp
LnZhbHVlcygpKQorICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsK
ICAgICBjYWxsYmFja01hcCgpLmNsZWFyKCk7CiB9CiAKQEAgLTI1MDgsMTYgKzI0NjYsMTEgQEAg
dm9pZCBUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxlcyhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogewogICAgIGlmICghSlNWYWx1ZUlzQXJyYXkoY29udGV4
dCwgZmlsZXNWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0UmVmIGZpbGVz
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGZpbGVzVmFsdWUsIG51bGxwdHIpOwotICAgIHN0
YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGZpbGVzTGVuZ3RoVmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIGZpbGVzLCBsZW5ndGhQcm9wZXJ0eS5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgZmlsZXNMZW5ndGhWYWx1
ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGZpbGVzID0gKEpTT2JqZWN0UmVmKWZpbGVz
VmFsdWU7CisgICAgYXV0byBmaWxlc0xlbmd0aCA9IFdUUjo6YXJyYXlMZW5ndGgoY29udGV4dCwg
ZmlsZXMpOwogCiAgICAgbV9vcGVuUGFuZWxGaWxlcy5jbGVhcigpOwotICAgIGF1dG8gZmlsZXNM
ZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBmaWxl
c0xlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
c0xlbmd0aDsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbGVzTGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgSlNWYWx1ZVJlZiBmaWxlVmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBmaWxlcywgaSwgbnVsbHB0cik7CiAgICAgICAgIGlmICghSlNW
YWx1ZUlzU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAppbmRleCAxNjcxMjA1OGExMGNlOTg5YTNjOGQ0M2Q2
NDRmOWE5ZTMwMGQ0MGRlLi5lODU3YWE0ZGNkYTI5N2M0ZmUzZTc2YWM3ZTllYWYwNWEwOWM4MGIw
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGNsZWFudXAoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIHZv
aWQgYWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpOwogICAgIGNvbnN0IHN0ZDo6c2V0
PHN0ZDo6c3RyaW5nPiYgYWxsb3dlZEhvc3RzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd2VkSG9z
dHM7IH0KQEAgLTQ5Nyw3ICs0OTcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dmVjdG9yPGNoYXI+
IG1fb3BlblBhbmVsRmlsZXNNZWRpYUljb247CiAjZW5kaWYKIAotICAgIHN0YXRpYyBKU0NsYXNz
UmVmIGdldEpTQ2xhc3MoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVz
KCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOworICAg
IHN0YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7CisgICAgc3Rh
dGljIGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlcygpOworICAgIHN0YXRpYyBjb25z
dCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKIH07CmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0gYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KaW5k
ZXggNjFlMDFmNWVkNzY3NWE4MzBiYTZmMzhmOGVjZjU4NDBmYmM4MzljYi4uYjU2NjZlMmM2ZGZl
MGQ4YWU4MWY0Yzk0OTNmNDhlODZmNmEwYTE0YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbQpAQCAtMjQsMTIgKzI0
LDEzIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJEdW1wUmVuZGVyVHJl
ZS5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKIAogI2ltcG9ydCAiQWNj
ZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKyNpbXBvcnQg
IkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViSFRNTFZpZXdQcml2YXRlLmg+CkBAIC0zOCw2ICszOSw4IEBAIEBp
bnRlcmZhY2UgV2ViSFRNTFZpZXcgKFByaXZhdGUpCiAtIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNl
ZFVJRWxlbWVudDsKIEBlbmQKIAorbmFtZXNwYWNlIFdUUiB7CisgICAgCiBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQogewogfQpAQCAtMTU1LDUgKzE1
OCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVuaGFuY2VkQWNjZXNzaWJpbGl0
eUVuYWJsZWQoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnBsYXRmb3JtTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJpb3MiKSk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoImlvcyIpOworfQorCiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9p
b3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCmluZGV4IGUzYzkwOWQ2ZGQyNzAzOTI4M2Vh
Y2NkMzJhZTQwOTI2Y2U4YTllNjQuLmFhNmZmYzkxN2IzODQ3ZjAyMmU4ZWI2ZGU3ZmIzZGZhZDJh
OTdlZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50SU9TLm1tCkBAIC0yNCwxMSArMjQsMTEgQEAKICAqLwogCiAjaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmgiCiAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlDb21tb25NYWMuaCIKICNp
bXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgiCisjaW1wb3J0ICJEdW1w
UmVuZGVyVHJlZS5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRH
cmFudWxhcml0eS5oPgpAQCAtNDEsMTEgKzQxLDYgQEAKIAogdHlwZWRlZiB2b2lkICgqQVhQb3N0
ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlv
biwgdm9pZCogY29udGV4dCk7CiAKLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKLSAgICA6IG1fZWxlbWVudChlbGVtZW50KQotewotfQot
CiBAaW50ZXJmYWNlIE5TT2JqZWN0IChVSUFjY2Vzc2liaWxpdHlIaWRkZW4pCiAtIChpZClhY2Nl
c3NpYmlsaXR5SGl0VGVzdDooQ0dQb2ludClwb2ludDsKIC0gKGlkKWFjY2Vzc2liaWxpdHlMaW5r
ZWRFbGVtZW50OwpAQCAtMTEyLDkgKzEwNywxMSBAQCBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlclByaXZhdGUpCiAtIChDR1BhdGhSZWYpX2FjY2Vzc2li
aWxpdHlQYXRoOwogQGVuZAogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKQorbmFtZXNwYWNlIFdUUiB7CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKKyAgICA6IG1fZWxlbWVudChl
bGVtZW50KQogewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KG51bGxwdHIsIDApKTsKIH0KIAogc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb25j
YXRlbmF0ZUF0dHJpYnV0ZUFuZFZhbHVlKE5TU3RyaW5nICphdHRyaWJ1dGUsIE5TU3RyaW5nICp2
YWx1ZSkKQEAgLTE4MCw3ICsxNzcsNiBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmZpZWxkc2V0QW5jZXN0b3JFbGVtZW50KCkKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dXJsKCkKIHsKICAgICBOU1VSTCAqdXJsID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5
VVJMXTsKQEAgLTI5MSw3ICsyODcsNiBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmxpbmtlZEVsZW1lbnQoKQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW5zaWduZWQg
aW5kZXgpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAwOwogfQogCkBA
IC01NTgsNyArNTUzLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3MKIHsKICAgICBpZCB0ZXh0
TWFya2VycyA9IG1hcmtlclJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpOwogICAgIGlm
ICghdGV4dE1hcmtlcnMgfHwgIVt0ZXh0TWFya2VycyBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNs
YXNzXV0pCi0gICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgICAgIHJl
dHVybiBjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJpbmdGb3JU
ZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCkBAIC02ODEs
MjIgKzY3NiwyMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3VtZW50TGlu
a3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbAogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVt
ZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4g
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MoKQogewotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZDaGlsZHJlbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsK
KyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQogewotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJp
bmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBAIC03MTYsNyArNzExLDcg
QEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmUKICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhhdHRyaWJ1dGUsICJBWFRleHR1YWxDb250ZXh0IikpCiAgICAgICAgIHJldHVybiBb
W21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRdIGNyZWF0ZUpTU3RyaW5nUmVm
XTsKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUHJl
c3NBY3Rpb25TdXBwb3J0ZWQoKQpAQCAtNzU1LDE3ICs3NTAsMTcgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBhdHRyaWJ1dGUp
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJh
bWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3Ry
aW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9s
ZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxQ
YWdlVXAoKQpAQCAtNzg5LDE3ICs3ODQsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxQYWdlUmlnaHQoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1w
dHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3Ry
aW5nKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGl0bGUoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCkBAIC04MDksNyAr
ODA0LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRlc2NyaXB0aW9uKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Om9yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlK
U1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUoKQpAQCAt
ODE5LDcgKzgxNCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzdHJpbmdWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0KCkgY29uc3QKQEAg
LTg0OSw3ICs4NDQsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFZhbHVlKEpT
U3RyaW5nUmVmIHZhbHVlVGV4dCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24oKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQpAQCAtODY5
LDcgKzg2NCw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZCgpIGNv
bnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC04OTIs
NyArODg2LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25z
dAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAt
OTA4LDcgKzkwMSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJl
ZCgpIGNvbnN0CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpT
U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50IGluZGV4KQpAQCAtOTE4LDM3ICs5MTEs
MzcgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleChpbnQgaW5kZXgp
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3Vu
ZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0
cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVy
cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZS
b3dzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAg
IHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm93Q291bnQoKQpAQCAtOTg3LDIyICs5ODAsMTkgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNv
bCwKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwgaW50IHkp
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXNzaXN0aXZlVGVjaG5vbG9neVNp
bXVsYXRlZEZvY3VzKCkKQEAgLTEwMzUsMjMgKzEwMjUsMjEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpwcmVzcygpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNs
ZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
fQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9j
dW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spCkBAIC0xMDgzLDQzICsxMDcxLDM2IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogCiBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Nl
bGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlz
aWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbigpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTEzMCwxMyArMTEx
MSwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lKCkgY29uc3QKIHsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMTUyLDI3ICsxMTMxLDIyIEBA
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpwb3B1cFZh
bHVlKCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp0YWtlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2Vs
ZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHVuc2lnbmVkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBzdGFydEVsZW1lbnQsIGJv
b2wgaXNEaXJlY3Rpb25OZXh0LCBKU1ZhbHVlUmVmIHNlYXJjaEtleSwgSlNTdHJpbmdSZWYgc2Vh
cmNoVGV4dCwgYm9vbCB2aXNpYmxlT25seSwgYm9vbCBpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkp
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAwOwogfQogCkBAIC0xMjE0
LDIzICsxMTg4LDE5IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRy
aWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGFzc0xpc3QoKSBjb25zdAogewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVm
LCBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFk
ZXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYpIGNvbnN0CiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0hlYWRl
cnMoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiB9CiAKIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVj
dGVkQ2hpbGRyZW5Db3VudCgpIGNvbnN0CkBAIC0xMjQyLDMgKzEyMTIsNSBAQCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkQ2hpbGRBdEluZGV4
KHVuc2lnbmVkKSBjbwogewogICAgIHJldHVybiAwOwogfQorCit9CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaAppbmRleCAzODUwYjQxNDQ2
M2UwMTVjNjdkNTZlZjA0YTU5MzhjOTkxYzQ3ZWQ4Li4xNWJmNTFmODRkM2U4MTgxYzAyY2Y2NjNj
NzU1MzlkYzI4YWQ5ZGQ0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNj
ZXNzaWJpbGl0eUNvbW1vbk1hYy5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5Q29tbW9uTWFjLmgKQEAgLTQxLDQgKzQxLDQgQEAgQGludGVyZmFjZSBOU1N0cmlu
ZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCiAtIChKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4pY3Jl
YXRlSlNTdHJpbmdSZWY7CiBAZW5kCiAKLWV4dGVybiBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRp
Y2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZWYs
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5l
eHQsIHVuc2lnbmVkIHJlc3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFyY2hLZXksIEpTU3RyaW5n
UmVmIHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1tZWRpYXRlRGVzY2VuZGFu
dHNPbmx5KTsKK05TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJp
YnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlZiwgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCAqc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgdW5zaWduZWQgcmVzdWx0c0xp
bWl0LCBKU1ZhbHVlUmVmIHNlYXJjaEtleSwgSlNTdHJpbmdSZWYgc2VhcmNoVGV4dCwgYm9vbCB2
aXNpYmxlT25seSwgYm9vbCBpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0gYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQppbmRleCA3OTQw
NzM4YTMzOTBlYjI3MGE2MDhiZmQwNTllMTcyYWY0Yjc5MDkyLi4wMzA2N2UyZDA4OTIxNGZiZTg0
NjY3YjI4MjRmOGNlMzE0ODBmOTg3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAi
Y29uZmlnLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAKKyNpbXBvcnQg
IkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAK
IEBpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCkBAIC01Niw3
ICs1Nyw2IEBAIE5TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJp
YnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlCiAgICAgICAgIFtwYXJhbWV0ZXJpemVk
QXR0cmlidXRlIHNldE9iamVjdDpzdGFydEVsZW1lbnQtPnBsYXRmb3JtVUlFbGVtZW50KCkgZm9y
S2V5OkAiQVhTdGFydEVsZW1lbnQiXTsKIAogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNl
dE9iamVjdDooaXNEaXJlY3Rpb25OZXh0KSA/IEAiQVhEaXJlY3Rpb25OZXh0IiA6IEAiQVhEaXJl
Y3Rpb25QcmV2aW91cyIgZm9yS2V5OkAiQVhEaXJlY3Rpb24iXTsKLQogICAgIFtwYXJhbWV0ZXJp
emVkQXR0cmlidXRlIHNldE9iamVjdDpAKHJlc3VsdHNMaW1pdCkgZm9yS2V5OkAiQVhSZXN1bHRz
TGltaXQiXTsKIAogICAgIGlmIChzZWFyY2hLZXkpIHsKQEAgLTY2LDE0ICs2Niw4IEBAIE5TRGlj
dGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENy
aXRlcmlhKEpTQ29udGV4dFJlCiAgICAgICAgICAgICBpZiAoc2VhcmNoS2V5U3RyaW5nKQogICAg
ICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtOU1N0cmluZyBzdHJpbmdXaXRoSlNT
dHJpbmdSZWY6c2VhcmNoS2V5U3RyaW5nLmdldCgpXTsKICAgICAgICAgfSBlbHNlIGlmIChKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoS2V5KSkgewotICAgICAgICAgICAgSlNPYmplY3RS
ZWYgc2VhcmNoS2V5QXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoS2V5LCBu
dWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gMDsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmluZyA9IGFk
b3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgICAgICAg
ICBKU1ZhbHVlUmVmIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwg
bnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSAmJiBK
U1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAg
ICAgICAgICAgICAgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUsIG51bGxw
dHIpKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoS2V5QXJy
YXkgPSAoSlNPYmplY3RSZWYpc2VhcmNoS2V5OworICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNo
S2V5QXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaEtleUFycmF5
KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hLZXlBcnJheUxl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlWYWx1ZSA9
IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBpLCBu
dWxscHRyKTsKICAgICAgICAgICAgICAgICBKU1N0cmluZ1JlZiBzZWFyY2hLZXlTdHJpbmcgPSBK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaEtleVZhbHVlLCBudWxscHRyKTsKQEAg
LTg4LDEyICs4MiwxMSBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICBpZiAoc2Vh
cmNoS2V5UGFyYW1ldGVyKQogICAgICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0
T2JqZWN0OnNlYXJjaEtleVBhcmFtZXRlciBmb3JLZXk6QCJBWFNlYXJjaEtleSJdOwogICAgIH0K
LSAgICAKKwogICAgIGlmIChzZWFyY2hUZXh0ICYmIEpTU3RyaW5nR2V0TGVuZ3RoKHNlYXJjaFRl
eHQpKQogICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6W05TU3RyaW5n
IHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hUZXh0XSBmb3JLZXk6QCJBWFNlYXJjaFRleHQi
XTsKLSAgICAKKwogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKHZpc2li
bGVPbmx5KSBmb3JLZXk6QCJBWFZpc2libGVPbmx5Il07Ci0gICAgCiAgICAgW3BhcmFtZXRlcml6
ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OkAoaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KSBmb3JLZXk6
QCJBWEltbWVkaWF0ZURlc2NlbmRhbnRzT25seSJdOwogICAgIAogICAgIHJldHVybiBwYXJhbWV0
ZXJpemVkQXR0cmlidXRlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCmluZGV4IDUxZjAzMWRkYmJjZDg1M2FkYjRmZTcx
NDdkODVhNTI1NzZhMDA3OGIuLjk1YTA2ZjNhNDBhMDQ4OWUzZTBiMGIzMTY1NzRjM2ZjYmYyZWNm
MTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlDb21tb25NYWMuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisjaW1wb3J0ICJKU0Jhc2lj
cy5oIgogI2ltcG9ydCA8QXBwS2l0L05TQ29sb3IuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KQEAgLTE1
OCw1ICsxNTksNSBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vz
c2liaWxpdHlFbmFibGVkKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibWFjIikpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCJtYWMiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KaW5kZXggZTFlZmQ3ZjRlMTYxYWZmZGVl
MjI0Y2M0NTM4NDhiMzljYjQ5NzA2My4uNjQ5MWEyZDBhNWZhNGM3NGU3MjE3OTI3OGY3ZTFjYTk5
ZDc2OGQ2YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkFjY2Vzc2li
aWxpdHlDb21tb25NYWMuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5k
bGVyLmgiCiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgorI2ltcG9ydCAiSlNCYXNpY3MuaCIK
ICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lLmg+CkBAIC04MCwx
MSArODEsNiBAQCAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9HbG9iYWxQb2ludDooTlNQ
b2ludClwb2ludDsKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9y
QXR0cmlidXRlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZTsKIEBlbmQKIAotc3RhdGljIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVFbXB0eUpTU3RyaW5nKCkKLXsKLSAgICByZXR1cm4g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhudWxscHRyLCAwKSk7Ci19Ci0KIHN0
YXRpYyBPcHRpb25hbDxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBtYWtlVmVjdG9yRWxlbWVudChj
b25zdCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiwgaWQgZWxlbWVudCkKIHsKICAgICByZXR1cm4g
eyB7IGVsZW1lbnQgfSB9OwpAQCAtMjIxLDE0ICsyMTcsOCBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5
ICpzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJl
ZiBjbwogICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpb
TlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCld
XTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwg
c2VhcmNoU3RyaW5ncykpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NB
cnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNW
YWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQo
KSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFs
dWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZh
bHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJh
eUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8g
c2VhcmNoU3RyaW5nc0FycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaFN0cmluZ3M7CisgICAgICAg
ICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IFdUUjo6YXJyYXlMZW5ndGgoY29u
dGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAg
IGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0Fy
cmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgICAgIGlmIChzZWFyY2hT
dHJpbmdzU3RyaW5nKQpAQCAtMjYyLDE0ICsyNTIsOCBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpz
ZWFyY2hUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJlZiBj
bwogICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCiAgICAgICAgICAgICAgICAg
W3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNT
dHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwogICAgICAgICB9IGVsc2UgaWYg
KEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgewotICAgICAgICAgICAg
SlNPYmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQs
IHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3Ry
aW5nc0FycmF5TGVuZ3RoID0gMDsKLQotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0
cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0g
ICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlID0gSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGxlbmd0aFByb3Bl
cnR5U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5n
c0FycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgc2Vh
cmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLQorICAgICAgICAgICAgYXV0
byBzZWFyY2hTdHJpbmdzQXJyYXkgPSAoSlNPYmplY3RSZWYpc2VhcmNoU3RyaW5nczsKKyAgICAg
ICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdz
QXJyYXksIGksIG51bGxwdHIpLCBudWxscHRyKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlYXJj
aFN0cmluZ3NTdHJpbmcpCkBAIC0xNDQ2LDEzICsxNDMwLDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QK
IAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4oKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgZnVuY3Rpb24uCiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCkBAIC0xNDYzLDcgKzE0NDcsNyBAQCBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygp
CiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9BWF9P
QkpDX0VYQ0VQVElPTlMKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOwor
ICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCkBAIC0xNDc0LDcg
KzE0NTgsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZG9jdW1lbnRVUkkoKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVm
XTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbSBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQppbmRleCAzNjcx
NDkzOWZkYTBhNTY3NDljNzk5ODg2YTFlYTQzODkyMTg5YTRhLi4zNDJiM2EwMWRjN2VhODc5YWYx
YjU0YjBlZTI3M2Q2ODEyZjhmN2E3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0Zy
YW1lTG9hZERlbGVnYXRlLm1tCkBAIC0zMTEsNTQgKzMxMSwyNiBAQCBJR05PUkVfV0FSTklOR1Nf
RU5ECiAKIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RJblN0YW5kYXJkV29ybGRGb3JGcmFt
ZTooV2ViRnJhbWUgKilmcmFtZQogewotICAgIC8vIE1ha2UgTmV3LVN0eWxlIFRlc3RSdW5uZXIK
LSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFtmcmFtZSBnbG9iYWxDb250ZXh0XTsKLSAgICBK
U09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4
dCk7Ci0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGF1dG8gY29udGV4dCA9IFtm
cmFtZSBnbG9iYWxDb250ZXh0XTsKKyAgICBhdXRvIHdlYlZpZXcgPSBbZnJhbWUgd2ViVmlld107
CisgICAgYXV0byB3aW5kb3dPYmplY3QgPSBbZnJhbWUgd2luZG93T2JqZWN0XTsKIAotICAgIEFT
U0VSVChnVGVzdFJ1bm5lcik7Ci0gICAgZ1Rlc3RSdW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29u
dGV4dCwgZ2xvYmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7
Ci0KLSAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFsT2Jq
ZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCBnbG9iYWxPYmplY3Qs
ICZleGNlcHRpb24pOwotICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKyAgICBnVGVzdFJ1bm5lci0+
bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKKyAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dP
YmplY3QoY29udGV4dCk7CisgICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dP
YmplY3QoY29udGV4dCk7CiAKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFs
c09iamVjdChjb250ZXh0KTsKIAotICAgIC8vIE1ha2UgT2xkLVN0eWxlIGNvbnRyb2xsZXJzCi0K
LSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW2ZyYW1lIHdlYlZpZXddOwotICAgIFdlYlNjcmlwdE9i
amVjdCAqb2JqID0gW2ZyYW1lIHdpbmRvd09iamVjdF07Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgQXBwbGVTY3JpcHRDb250cm9sbGVyICphc2MgPSBbW0FwcGxlU2NyaXB0Q29udHJv
bGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddOwotICAgIFtvYmogc2V0VmFsdWU6
YXNjIGZvcktleTpAImFwcGxlU2NyaXB0Q29udHJvbGxlciJdOwotICAgIFthc2MgcmVsZWFzZV07
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRvcHROUyhb
W0FwcGxlU2NyaXB0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKS5n
ZXQoKSBmb3JLZXk6QCJhcHBsZVNjcmlwdENvbnRyb2xsZXIiXTsKICNlbmRpZgogCi0gICAgRXZl
bnRTZW5kaW5nQ29udHJvbGxlciAqZXNjID0gW1tFdmVudFNlbmRpbmdDb250cm9sbGVyIGFsbG9j
XSBpbml0XTsKLSAgICBbb2JqIHNldFZhbHVlOmVzYyBmb3JLZXk6QCJldmVudFNlbmRlciJdOwot
ICAgIFtlc2MgcmVsZWFzZV07Ci0gICAgCi0gICAgW29iaiBzZXRWYWx1ZTpnTmF2aWdhdGlvbkNv
bnRyb2xsZXIgZm9yS2V5OkAibmF2aWdhdGlvbkNvbnRyb2xsZXIiXTsKLSAgICAKLSAgICBPYmpD
Q29udHJvbGxlciAqb2NjID0gW1tPYmpDQ29udHJvbGxlciBhbGxvY10gaW5pdF07Ci0gICAgW29i
aiBzZXRWYWx1ZTpvY2MgZm9yS2V5OkAib2JqQ0NvbnRyb2xsZXIiXTsKLSAgICBbb2NjIHJlbGVh
c2VdOwotCi0gICAgT2JqQ1BsdWdpbiAqcGx1Z2luID0gW1tPYmpDUGx1Z2luIGFsbG9jXSBpbml0
XTsKLSAgICBbb2JqIHNldFZhbHVlOnBsdWdpbiBmb3JLZXk6QCJvYmpDUGx1Z2luIl07Ci0gICAg
W3BsdWdpbiByZWxlYXNlXTsKLSAgICAKLSAgICBPYmpDUGx1Z2luRnVuY3Rpb24gKnBsdWdpbkZ1
bmN0aW9uID0gW1tPYmpDUGx1Z2luRnVuY3Rpb24gYWxsb2NdIGluaXRdOwotICAgIFtvYmogc2V0
VmFsdWU6cGx1Z2luRnVuY3Rpb24gZm9yS2V5OkAib2JqQ1BsdWdpbkZ1bmN0aW9uIl07Ci0gICAg
W3BsdWdpbkZ1bmN0aW9uIHJlbGVhc2VdOwotCi0gICAgVGV4dElucHV0Q29udHJvbGxlciAqdGlj
ID0gW1tUZXh0SW5wdXRDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlld107
Ci0gICAgW29iaiBzZXRWYWx1ZTp0aWMgZm9yS2V5OkAidGV4dElucHV0Q29udHJvbGxlciJdOwot
ICAgIFt0aWMgcmVsZWFzZV07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtb
RXZlbnRTZW5kaW5nQ29udHJvbGxlciBhbGxvY10gaW5pdF0pLmdldCgpIGZvcktleTpAImV2ZW50
U2VuZGVyIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTpnTmF2aWdhdGlvbkNvbnRyb2xs
ZXIgZm9yS2V5OkAibmF2aWdhdGlvbkNvbnRyb2xsZXIiXTsKKyAgICBbd2luZG93T2JqZWN0IHNl
dFZhbHVlOmFkb3B0TlMoW1tPYmpDQ29udHJvbGxlciBhbGxvY10gaW5pdF0pLmdldCgpIGZvcktl
eTpAIm9iakNDb250cm9sbGVyIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5T
KFtbT2JqQ1BsdWdpbiBhbGxvY10gaW5pdF0pLmdldCgpIGZvcktleTpAIm9iakNQbHVnaW4iXTsK
KyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tPYmpDUGx1Z2luRnVuY3Rpb24g
YWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDUGx1Z2luRnVuY3Rpb24iXTsKKyAgICBb
d2luZG93T2JqZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tUZXh0SW5wdXRDb250cm9sbGVyIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlld10pLmdldCgpIGZvcktleTpAInRleHRJbnB1dENvbnRy
b2xsZXIiXTsKIH0KIAogLSAodm9pZClkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lOihXZWJG
cmFtZSAqKWZyYW1lIGluSXNvbGF0ZWRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZApAQCAt
MzcxLDcgKzM0Myw3IEBAIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZTooV2Vi
RnJhbWUgKilmcmFtZSBpbklzb2xhdGVkV29ybGQ6KFdlYlNjcmlwCiAgICAgaWYgKCFnbG9iYWxP
YmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY3R4LCBn
bG9iYWxPYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJfX3dvcmxk
SUQiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKGN0eCwgd29ybGRJREZvcldvcmxkKHdvcmxk
KSksIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOworICAgIEpTT2JqZWN0U2V0UHJv
cGVydHkoY3R4LCBnbG9iYWxPYmplY3QsIFdUUjo6Y3JlYXRlSlNTdHJpbmcoIl9fd29ybGRJRCIp
LmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHdvcmxkSURGb3JXb3JsZCh3b3JsZCkpLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKIH0KIAogLSAodm9pZCl3ZWJWaWV3OihX
ZWJWaWV3ICopc2VuZGVyIGRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWU6KFdlYkZyYW1lICop
ZnJhbWUgaW5TY3JpcHRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCBlYmEwOTNlZTE4N2NkMzEwZDA1MWIy
MzBhZWQyYTMwMGZlNzk0OWMwLi5lMjEwNzBhYzMxYjM0Y2ZjYmI1NzlkNzc3NWI3NjE5OTExNGFi
ZGZkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5t
bQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtMzIs
NiArMzIsNyBAQAogCiAjaW1wb3J0ICJEZWZhdWx0UG9saWN5RGVsZWdhdGUuaCIKICNpbXBvcnQg
IkVkaXRpbmdEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgIkxheW91
dFRlc3RTcGVsbENoZWNrZXIuaCIKICNpbXBvcnQgIk1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmgi
CiAjaW1wb3J0ICJNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaCIKQEAgLTY3MCwxNSArNjcx
LDEwIEBAIGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlCiB7CiAgICAgV2ViRmluZE9wdGlvbnMgb3B0
aW9ucyA9IDA7CiAKLSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQ
cm9wZXJ0eU5hbWUuZ2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQs
IGxlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiB0YXJnZXRDRlN0cmluZyA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmco
a0NGQWxsb2NhdG9yRGVmYXVsdCwgdGFyZ2V0KSk7CisgICAgYXV0byBsZW5ndGggPSBXVFI6OmFy
cmF5TGVuZ3RoKGNvbnRleHQsIG9wdGlvbnNBcnJheSk7CisgICAgYXV0byB0YXJnZXRDRlN0cmlu
ZyA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGFy
Z2V0KSk7CiAKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
QXRJbmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApOwogICAgICAgICBpZiAoIUpTVmFs
dWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwIGIvVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKaW5kZXggZmZmMGI3NDk5
MGFmYjllMTJhYzlkMDFhNzEwYTRjNTI4MGUxZTkwOC4uOTk1YWRlMDY2MDAxOGM5OGM2MmU0NGU1
NmY2ZjhmOTYyOTI5ZTgyMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5k
aW5ncy9KU0Jhc2ljcy5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9K
U0Jhc2ljcy5jcHAKQEAgLTI4LDE5ICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSlNW
YWx1ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIE9w
dGlvbmFsPGJvb2w+IHZhbHVlKQorT3B0aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2woSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID8g
SlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VO
dWxsKGNvbnRleHQpOworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFs
dWUpIHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFr
ZU9wdGlvbmFsKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKTsKK30KKworT3B0aW9u
YWw8ZG91YmxlPiB0b09wdGlvbmFsRG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIHZhbHVlKQoreworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFs
dWUpIHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFr
ZU9wdGlvbmFsKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogfQog
Ci1PcHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRS
ZWYgY29udGV4dCwgT3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJ
c1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1
ZSkgPyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDxib29sPihKU1ZhbHVlVG9Cb29sZWFuKGNvbnRl
eHQsIHZhbHVlKSk7CisgICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCi1KU1Zh
bHVlUmVmIEpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0
cmluZ1JlZiBzdHJpbmdPck51bGwpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNTdHJpbmdSZWYgc3RyaW5nKQogewotICAgIHJldHVybiBzdHJpbmdPck51bGwg
PyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdPck51bGwpIDogSlNWYWx1ZU1ha2VO
dWxsKGNvbnRleHQpOworICAgIHJldHVybiBzdHJpbmcgPyBKU1ZhbHVlTWFrZVN0cmluZyhjb250
ZXh0LCBzdHJpbmcpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQpAQCAtNDgs
MTkgKzUzLDQzIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25z
dCBjaGFyKiBzdHJpbmcpCiAgICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHN0cmluZykpOwogfQogCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNT
dHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgYXV0
byBzdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBudWxs
cHRyKSk7CisgICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZyA6IGNyZWF0ZUpTU3RyaW5nKCIiKTsK
K30KKwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNo
YXIqIHN0cmluZykKIHsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY3Jl
YXRlSlNTdHJpbmcoc3RyaW5nKS5nZXQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgcHJvcGVydHkoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkK
K3sKKyAgICByZXR1cm4gb2JqZWN0ID8gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmpl
Y3QsIGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBudWxscHRyKSA6IG51bGxwdHI7Cit9CisK
K0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUp
KTsKK30KKworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUpCit7Cisg
ICAgYXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7CisgICAgcmV0
dXJuIHZhbHVlID8gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgOiBkZWZhdWx0VmFs
dWU7Cit9CisKK2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBhdXRvIHZhbHVlID0g
cHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4gdmFsdWUgPyBKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogMDsKK30KKwogSlNPYmplY3RS
ZWYgb2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVj
dCwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
b2JqZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFK
U1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUpOworICAgIGF1dG8gdmFs
dWUgPSBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAgIHJldHVybiB2YWx1ZSA/
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUp
LCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxjb25zdCBjaGFyKj4gbmFtZXMpCkBAIC03MCwyNyArOTksMzYgQEAgSlNPYmplY3RSZWYg
b2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwg
c3RkOjppbml0aWEKICAgICByZXR1cm4gb2JqZWN0OwogfQogCit1bnNpZ25lZCBhcnJheUxlbmd0
aChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVy
biBudW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIik7Cit9CisKIHZvaWQg
c2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29u
c3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNv
bnRleHQsIG9iamVjdCwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIEpTVmFsdWVNYWtlQm9v
bGVhbihjb250ZXh0LCB2YWx1ZSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7
CiB9CiAKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSlNPYmplY3RTZXRQ
cm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGNyZWF0
ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCB2YWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQg
c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIq
IG5hbWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250
ZXh0LCBuYW1lLCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCB2YWx1ZSkpOworfQorCiBKU1Zh
bHVlUmVmIGNhbGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29u
c3QgY2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFsdWVSZWY+IGFyZ3VtZW50
cykKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYXV0
byBmdW5jdGlvbiA9IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7Ci0gICAg
aWYgKCFmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwgYXJndW1lbnRzLnNp
emUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBmdW5jdGlvbiA/
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwgYXJndW1l
bnRzLnNpemUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpIDogbnVsbHB0cjsKIH0KIAog
SlNPYmplY3RSZWYgY2FsbENvbnN0cnVjdG9yKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBj
b25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJndW1l
bnRzKQogewogICAgIGF1dG8gY29uc3RydWN0b3IgPSBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBK
U0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHsgbmFtZSB9KTsKLSAgICBpZiAoIWNv
bnN0cnVjdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gSlNPYmplY3RD
YWxsQXNDb25zdHJ1Y3Rvcihjb250ZXh0LCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzLnNpemUoKSwg
YXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBjb25zdHJ1Y3RvciA/IEpT
T2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dCwgY29uc3RydWN0b3IsIGFyZ3VtZW50cy5z
aXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5n
cy9KU0Jhc2ljcy5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5o
CmluZGV4IDExZGRhNTI0N2E1YWI2YzA0MDk2M2RmMTlhYjBmNWUwMjk2Y2ViODIuLjY1ZjE4ZDdl
Y2Q4MDE2ODMzMzM0ZGY1ZWI4ODhjY2M0YTBiMjFkNTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL0JpbmRpbmdzL0pTQmFzaWNzLmgKQEAgLTMyLDE2ICszMiwyOCBAQAogCiBuYW1lc3BhY2Ug
V1RSIHsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVm
LCBPcHRpb25hbDxib29sPik7Ci1PcHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xl
YW4oSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKK09wdGlvbmFsPGJvb2w+IHRvT3B0aW9uYWxC
b29sKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitPcHRpb25hbDxkb3VibGU+IHRvT3B0aW9u
YWxEb3VibGUoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVl
TWFrZVN0cmluZ09yTnVsbChKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmKTsKK0pTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiA9ICIiKTsKK0pTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYp
OwogCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciop
OwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmLCBjb25zdCBjaGFyKik7CitKU1Zh
bHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYsIE9wdGlvbmFsPGJvb2w+KTsKK0pTVmFsdWVS
ZWYgbWFrZVZhbHVlKEpTQ29udGV4dFJlZiwgSlNTdHJpbmdSZWYpOworCitKU1ZhbHVlUmVmIHBy
b3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOworYm9v
bCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciog
bmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUgPSBmYWxzZSk7Citkb3VibGUgbnVtZXJpY1Byb3BlcnR5
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOworSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHN0cmluZ1Byb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYs
IGNvbnN0IGNoYXIqIG5hbWUpOwordW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZik7CiBKU09iamVjdFJlZiBvYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpT
T2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBj
aGFyKj4gbmFtZXMpOworCiB2b2lkIHNldFByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RS
ZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBzZXRHbG9iYWxPYmplY3RQ
cm9wZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYpOwordm9p
ZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUs
IGRvdWJsZSB2YWx1ZSk7CisKIEpTVmFsdWVSZWYgY2FsbChKU0NvbnRleHRSZWYsIEpTT2JqZWN0
UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4g
YXJndW1lbnRzKTsKIEpTT2JqZWN0UmVmIGNhbGxDb25zdHJ1Y3RvcihKU0dsb2JhbENvbnRleHRS
ZWYsIGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlUmVmPiBh
cmd1bWVudHMpOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdz
L0pTV3JhcHBhYmxlLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBh
YmxlLmgKaW5kZXggOWUwZjA3ZGY1OTMyYWIzMDMzMWQ3YjYxZDE3MzUzYWU2ZTAxYzQ3My4uNTli
ZTFkYWVhMjc3NTRlZTQ3NzViNGYzZTdhNWQ2ODJmYjFkNWYxZSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCisrKyBiL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGFibGUuaApAQCAtMjUsOSArMjUsMTAgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNDbGFz
cyogSlNDbGFzc1JlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNzIEpTV3JhcHBhYmxlIDog
cHVibGljIFJlZkNvdW50ZWQ8SlNXcmFwcGFibGU+IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L0JpbmRpbmdzL0pTV3JhcHBlci5oCmluZGV4IGY2Nzk4Zjk5YTRmZWM2NzU2M2QwOTE1NjNiNTA1
MDlkZmM4NTcyZGEuLjliNmJhZDhhZjA0NGIyMDJmZjg3MjdhY2VkN2NiOWZmYjJjZWM1MmUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmgKKysr
IGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaApAQCAtNTAsNCAr
NTAsOSBAQCBpbmxpbmUgdm9pZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcgogICAgIEpTT2JqZWN0U2V0UHJvcGVydHko
Y29udGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhwcm9wZXJ0eU5hbWUpLmdldCgpLCBKU1dy
YXBwZXI6OndyYXAoY29udGV4dCwgdmFsdWUpLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOwogfQog
CitpbmxpbmUgdm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU1dyYXBwYWJsZSogdmFsdWUpCit7CisgICAg
c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgcHJvcGVydHlOYW1lLCBKU1dyYXBwZXI6
OndyYXAoY29udGV4dCwgdmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9tYWMvRXZlbnRT
ZXJpYWxpemVyTWFjLm1tIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9FdmVudFNlcmlhbGl6YXRp
b24vbWFjL0V2ZW50U2VyaWFsaXplck1hYy5tbQppbmRleCAwZjE3YjJjZDYzOWE2MzA2M2E0ODhk
ZjNhMzNhMzVlMzJhMmVjY2MxLi5iZGQyMDdiZDQwOWYwNGVlNWYzODIzMTk0ZmEyNGU2MzI4ODU4
OTE3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlv
bi9tYWMvRXZlbnRTZXJpYWxpemVyTWFjLm1tCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
RXZlbnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMubW0KQEAgLTE5NSw3ICsx
OTUsNyBAQCBAaW1wbGVtZW50YXRpb24gRXZlbnRTZXJpYWxpemVyCiAKICsgKE5TRGljdGlvbmFy
eSAqKWRpY3Rpb25hcnlGb3JFdmVudDooQ0dFdmVudFJlZilyYXdFdmVudCByZWxhdGl2ZVRvVGlt
ZTooQ0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5QdHI8
Q0dFdmVudFJlZj4gcGxhaW5FdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZShOVUxMKSk7Cisg
ICAgYXV0byBwbGFpbkV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsKICAgICBD
R0V2ZW50UmVmIHJhd1BsYWluRXZlbnQgPSBwbGFpbkV2ZW50LmdldCgpOwogCiAgICAgTlNNdXRh
YmxlRGljdGlvbmFyeSAqZGljdCA9IFtbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRd
IGF1dG9yZWxlYXNlXTsKQEAgLTIyNiw3ICsyMjYsNyBAQCArIChOU0RpY3Rpb25hcnkgKilkaWN0
aW9uYXJ5Rm9yRXZlbnQ6KENHRXZlbnRSZWYpcmF3RXZlbnQgcmVsYXRpdmVUb1RpbWU6KENHRXZl
bgogCiArIChSZXRhaW5QdHI8Q0dFdmVudFJlZj4pY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5OihO
U0RpY3Rpb25hcnkgKilkaWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyByZWxhdGl2ZVRv
VGltZTooQ0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5Q
dHI8Q0dFdmVudFJlZj4gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOworICAg
IGF1dG8gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOwogICAgIENHRXZlbnRS
ZWYgcmF3RXZlbnQgPSBldmVudC5nZXQoKTsKIAogICAgIEZPUl9FQUNIX0NHRVZFTlRfSU5URUdF
Ul9GSUVMRChTVE9SRV9JTlRFR0VSX0ZJRUxEX1RPX0VWRU5UKTsKQEAgLTI2NCw3ICsyNjQsNyBA
QCBjb25zdCBmbG9hdCBldmVudERpc3BhdGNoVGltZXJSYXRlID0gMS4gLyAxMjAuOwogCiArICh2
b2lkKXBsYXlTdHJlYW06KE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICopZXZlbnREaWN0cyB3aW5k
b3c6KE5TV2luZG93ICopd2luZG93IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKCkpY29tcGxl
dGlvbkhhbmRsZXIKIHsKLSAgICBSZXRhaW5QdHI8RXZlbnRTdHJlYW1QbGF5ZXI+IHBsYXllciA9
IGFkb3B0TlMoW1tFdmVudFN0cmVhbVBsYXllciBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gcGxh
eWVyID0gYWRvcHROUyhbW0V2ZW50U3RyZWFtUGxheWVyIGFsbG9jXSBpbml0XSk7CiAKICAgICBw
bGF5ZXItPl9yZW1haW5pbmdFdmVudERpY3Rpb25hcmllcyA9IGFkb3B0TlMoW2V2ZW50RGljdHMg
bXV0YWJsZUNvcHldKTsKICAgICBwbGF5ZXItPl93aW5kb3cgPSB3aW5kb3c7CkBAIC0yODIsNyAr
MjgyLDcgQEAgLSAodm9pZClwbGF5YmFja1RpbWVyRmlyZWQ6KE5TVGltZXIgKil0aW1lcgogICAg
IGF1dG8gcmVtb3ZlTGlzdCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0p
OwogICAgIE5TRXZlbnQgKm5zRXZlbnQgPSBuaWw7CiAgICAgZm9yIChpZCBldmVudERpY3QgaW4g
X3JlbWFpbmluZ0V2ZW50RGljdGlvbmFyaWVzLmdldCgpKSB7Ci0gICAgICAgIFJldGFpblB0cjxD
R0V2ZW50UmVmPiBldmVudCA9IFtFdmVudFNlcmlhbGl6ZXIgY3JlYXRlRXZlbnRGb3JEaWN0aW9u
YXJ5OmV2ZW50RGljdCBpbldpbmRvdzpfd2luZG93LmdldCgpIHJlbGF0aXZlVG9UaW1lOl9zdGFy
dFRpbWVdOworICAgICAgICBhdXRvIGV2ZW50ID0gW0V2ZW50U2VyaWFsaXplciBjcmVhdGVFdmVu
dEZvckRpY3Rpb25hcnk6ZXZlbnREaWN0IGluV2luZG93Ol93aW5kb3cuZ2V0KCkgcmVsYXRpdmVU
b1RpbWU6X3N0YXJ0VGltZV07CiAgICAgICAgIGlmIChDR0V2ZW50R2V0VGltZXN0YW1wKGV2ZW50
LmdldCgpKSA8IG1hY2hfYWJzb2x1dGVfdGltZSgpKSB7CiAgICAgICAgICAgICBuc0V2ZW50ID0g
W05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpldmVudC5nZXQoKV07CiAgICAgICAgICAgICBbTlNB
cHAgcG9zdEV2ZW50Om5zRXZlbnQgYXRTdGFydDpOT107CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwIGIvVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250ZXh0LmNwcAppbmRl
eCAyNzA1YjM5YTI0N2RkMjU3ZDVjNmQ1OGM0NzBlOTYzM2E5MTlkZmQ0Li41ZGNmYjdjOTg3MmYz
OTlmMTU2NzRkOTcxMGRlYjI4OWIyZDEyMThkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAKQEAgLTI2
LDkgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJVSVNjcmlwdENvbnRl
eHQuaCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250cm9s
bGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRS
ZWN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVFI7CkBAIC00MywxMSArNDIsNyBAQCBVSVNjcmlw
dENvbnRleHQ6OlVJU2NyaXB0Q29udGV4dChVSVNjcmlwdENvbnRleHREZWxlZ2F0ZSYgZGVsZWdh
dGUsIFVJU2NyaXB0Q29udAogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKIHsKICAgICBtX2Nv
bnRyb2xsZXIgPSBmYWN0b3J5KCp0aGlzKTsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVj
dCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChtX2NvbnRleHQuZ2V0KCkpOwotCi0gICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgIG1fY29udHJvbGxlci0+bWFrZVdpbmRv
d09iamVjdChtX2NvbnRleHQuZ2V0KCksIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7CisgICAg
bV9jb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIFVJ
U2NyaXB0Q29udGV4dDo6flVJU2NyaXB0Q29udGV4dCgpCkBAIC02Niw5ICs2MSw3IEBAIHZvaWQg
VUlTY3JpcHRDb250ZXh0OjpydW5VSVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgdW5zaWdu
ZWQgc2NyaXB0Q2FsbGJhY2tJCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRlU2Ny
aXB0KG1fY29udGV4dC5nZXQoKSwgc3RyaW5nUmVmLmdldCgpLCAwLCAwLCAxLCAmZXhjZXB0aW9u
KTsKICAgICAKICAgICBpZiAoIWhhc091dHN0YW5kaW5nQXN5bmNUYXNrcygpKSB7Ci0gICAgICAg
IEpTVmFsdWVSZWYgc3RyaW5naWZ5RXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBz
dHJpbmdpZmllZCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkobV9jb250ZXh0LmdldCgpLCBy
ZXN1bHQsICZzdHJpbmdpZnlFeGNlcHRpb24pKTsKLSAgICAgICAgcmVxdWVzdFVJU2NyaXB0Q29t
cGxldGlvbihzdHJpbmdpZmllZC5nZXQoKSk7CisgICAgICAgIHJlcXVlc3RVSVNjcmlwdENvbXBs
ZXRpb24oY3JlYXRlSlNTdHJpbmcobV9jb250ZXh0LmdldCgpLCByZXN1bHQpLmdldCgpKTsKICAg
ICAgICAgdHJ5VG9Db21wbGV0ZVVJU2NyaXB0Rm9yQ3VycmVudFBhcmVudENhbGxiYWNrKCk7CiAg
ICAgfQogfQpAQCAtMTg5LDEwICsxODIsMTAgQEAgSlNPYmplY3RSZWYgVUlTY3JpcHRDb250ZXh0
OjpvYmplY3RGcm9tUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpIGNvbnMKIHsK
ICAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2UobV9jb250ZXh0LmdldCgpLCBu
dWxscHRyLCBudWxscHRyKTsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9jb250ZXh0Lmdl
dCgpLCBvYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZWZ0Iikp
LmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QueCgpKSwga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5
KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygidG9wIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJl
Y3QueSgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVj
dFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygid2lkdGgiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKG1fY29u
dGV4dC5nZXQoKSwgcmVjdC53aWR0aCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxs
cHRyKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpLmdldCgpLCBKU1Zh
bHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QuaGVpZ2h0KCkpLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOworICAgIHNldFByb3BlcnR5KG1fY29udGV4dC5nZXQo
KSwgb2JqZWN0LCAibGVmdCIsIHJlY3QueCgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQu
Z2V0KCksIG9iamVjdCwgInRvcCIsIHJlY3QueSgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRl
eHQuZ2V0KCksIG9iamVjdCwgIndpZHRoIiwgcmVjdC53aWR0aCgpKTsKKyAgICBzZXRQcm9wZXJ0
eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgImhlaWdodCIsIHJlY3QuaGVpZ2h0KCkpOwogICAg
IAogICAgIHJldHVybiBvYmplY3Q7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGE1YThk
N2NjMmZjYzlmZWQ2ZmY1NTIyY2M5ZWQ2N2NlNDI5OGNhODEuLjM1MjRiNjBiZDgxY2Q5Y2FiMzEw
YWExYjU2OGYyM2ZkNTE2OGRjZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
VUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCkBAIC02Myw3ICs2
Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgd2FpdEZvck91dHN0YW5kaW5nQ2FsbGJhY2tzKCkgeyAvKiBub3RJbXBsZW1lbnRlZCgp
OyAqLyB9CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVj
dFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBUcmFuc2FjdGlvbiBoZWxwZXJz
CiAgICAgCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4
dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9V
SVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyU2hhcmVkLmNwcAppbmRleCBjNmViMTQw
YWEzNTZjNjZkOGM0NTAyMTRlN2RiMmM4NWFkM2E3MWEzLi5iZmY0ZjM0MzNkYmQyOTU3NWQ2MjVi
NzM5NGU2ZDlkMzgxY2FlYzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJ
U2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5j
cHAKQEAgLTQxLDIwICs0MSwxNSBAQCBEZXZpY2VPcmllbnRhdGlvbiogdG9EZXZpY2VPcmllbnRh
dGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKICAgICAgICAgRGV2
aWNlT3JpZW50YXRpb246OkxhbmRzY2FwZUxlZnQsCiAgICAgICAgIERldmljZU9yaWVudGF0aW9u
OjpMYW5kc2NhcGVSaWdodAogICAgIH07Ci0KLSAgICBhdXRvIG9wdGlvbiA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKLSAgICBpZiAob3B0aW9u
LT5zdHJpbmcoKSA9PSAicG9ydHJhaXQiKQorICAgIGF1dG8gb3B0aW9uID0gY3JlYXRlSlNTdHJp
bmcoY29udGV4dCwgdmFsdWUpOworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG9wdGlvbi5nZXQoKSwgInBvcnRyYWl0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzBdOwot
Ci0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gInBvcnRyYWl0LXVwc2lkZWRvd24iKQorICAg
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgInBvcnRyYWl0
LXVwc2lkZWRvd24iKSkKICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbMV07Ci0KLSAgICBpZiAob3B0
aW9uLT5zdHJpbmcoKSA9PSAibGFuZHNjYXBlLWxlZnQiKQorICAgIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgImxhbmRzY2FwZS1sZWZ0IikpCiAgICAgICAg
IHJldHVybiAmdmFsdWVzWzJdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gImxhbmRz
Y2FwZS1yaWdodCIpCisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9u
LmdldCgpLCAibGFuZHNjYXBlLXJpZ2h0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzNdOwot
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTY4LDkgKzYzLDkgQEAgdm9pZCBVSVNjcmlw
dENvbnRyb2xsZXI6OmNvbnRleHREZXN0cm95ZWQoKQogICAgIG1fY29udGV4dCA9IG51bGxwdHI7
CiB9CiAKLXZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwg
InVpQ29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkoY29udGV4dCwgInVpQ29udHJvbGxlciIsIHRoaXMpOwogfQogCiBKU0NsYXNz
UmVmIFVJU2NyaXB0Q29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbSBiL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbQppbmRleCA4
ZmMwMjExNjdhYWMyMjE1MzZhMTc2NmU1MzkwMTlmZTY0NDA1OGUxLi5kODZlZjk1NmY4MGRmYTE5
MjI5NTRlMTE3OWFmMmIzNTJiOTgzOTI0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIubW0KKysrIGIvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9jb2NvYS9MYXlvdXRUZXN0U3BlbGxDaGVja2VyLm1tCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkxheW91dFRlc3RTcGVsbENoZWNrZXIuaCIK
IAotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbXBvcnQgIkpTQmFz
aWNzLmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KQEAgLTIxMiwxMSArMjEyLDExIEBAIC0gKHZv
aWQpc2V0UmVzdWx0czooVGV4dENoZWNraW5nUmVzdWx0c0RpY3Rpb25hcnkgKilyZXN1bHRzCiAt
ICh2b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFsdWUgaW5D
b250ZXh0OihKU0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1dG8gcmVzdWx0c09iamVjdCA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCByZXN1bHRzVmFsdWUsIG51bGxwdHIpOwotICAgIGF1
dG8gZnJvbVByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJmcm9tIikpOwotICAgIGF1dG8gdG9Qcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygidG8iKSk7Ci0gICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInR5cGUiKSk7Ci0gICAgYXV0byByZXBs
YWNlbWVudFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJyZXBsYWNlbWVudCIpKTsKLSAgICBhdXRvIGRldGFpbHNQcm9wZXJ0eU5hbWUgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGV0YWlscyIpKTsKKyAgICBhdXRvIGZyb21Q
cm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJmcm9tIik7CisgICAgYXV0byB0b1By
b3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoInRvIik7CisgICAgYXV0byB0eXBlUHJv
cGVydHlOYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZygidHlwZSIpOworICAgIGF1dG8gcmVwbGFj
ZW1lbnRQcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJyZXBsYWNlbWVudCIpOwor
ICAgIGF1dG8gZGV0YWlsc1Byb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoImRldGFp
bHMiKTsKICAgICBhdXRvIHJlc3VsdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBh
bGxvY10gaW5pdF0pOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIHRoZSBPYmplY3RpdmUtQyBBUEkg
d291bGQgbWFrZSB0aGlzIGxvZ2ljIGVhc2llciB0byBmb2xsb3cuCkBAIC0yMjgsMTUgKzIyOCwx
MyBAQCAtICh2b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFs
dWUgaW5Db250ZXh0OihKU0NvbnRleHRSZWYpYwogICAgICAgICBhdXRvIHJlc3VsdHNGb3JXb3Jk
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgICAgIGZvciAo
c2l6ZV90IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBKU1Byb3BlcnR5TmFtZUFycmF5
R2V0Q291bnQocmVzdWx0c0FycmF5UHJvcGVydHlOYW1lcyk7ICsrcmVzdWx0SW5kZXgpIHsKICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0c09iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBK
U09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCByZXN1bHRzQXJyYXksIHJlc3VsdElu
ZGV4LCBudWxscHRyKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBsb25nIGZyb21WYWx1ZSA9IGxy
b3VuZGwoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4
dCwgcmVzdWx0c09iamVjdCwgZnJvbVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxw
dHIpKTsKLSAgICAgICAgICAgIGxvbmcgdG9WYWx1ZSA9IGxyb3VuZGwoSlNWYWx1ZVRvTnVtYmVy
KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgdG9Q
cm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBhdXRv
IHR5cGVWYWx1ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0eXBlUHJvcGVydHlOYW1lLmdldCgp
LCBudWxscHRyKSwgbnVsbHB0cikpOworICAgICAgICAgICAgbG9uZyBmcm9tVmFsdWUgPSBKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRz
T2JqZWN0LCBmcm9tUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBsb25nIHRvVmFsdWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0b1Byb3BlcnR5TmFtZS5nZXQoKSwg
bnVsbHB0ciksIG51bGxwdHIpOworICAgICAgICAgICAgYXV0byB0eXBlVmFsdWUgPSBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0
c09iamVjdCwgdHlwZVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cikpOwogICAgICAgICAgICAg
YXV0byByZXBsYWNlbWVudFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1
bHRzT2JqZWN0LCByZXBsYWNlbWVudFByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cik7CiAgICAg
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHJlcGxhY2VtZW50VGV4dDsKLSAgICAgICAg
ICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHJlcGxhY2VtZW50VmFsdWUpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byByZXBsYWNlbWVudEpTU3RyaW5nID0gYWRvcHQoSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlLCBudWxscHRyKSk7Ci0gICAg
ICAgICAgICAgICAgcmVwbGFjZW1lbnRUZXh0ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmlu
ZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZXBsYWNlbWVudEpTU3RyaW5nLmdldCgpKSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCBy
ZXBsYWNlbWVudFZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRleHQgPSBhZG9w
dENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgcmVwbGFjZW1lbnRWYWx1ZSkuZ2V0KCkpKTsKICAgICAgICAgICAg
IGF1dG8gZGV0YWlscyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwog
ICAgICAgICAgICAgYXV0byBkZXRhaWxzVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQsIHJlc3VsdHNPYmplY3QsIGRldGFpbHNQcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpOwog
ICAgICAgICAgICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgZGV0YWlsc1ZhbHVl
KSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rp
b25zLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlGdW5jdGlvbnMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lNTUxOGFiMzgxMzhkNmI3YmZhYTAzNTlmNzgyY2VjZDg3MzZmOTA5Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25zLmgK
QEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlN0cmluZ0Z1bmN0aW9ucy5oIgorCituYW1lc3BhY2UgV1RSIHsKKworV0tEaWN0aW9uYXJ5UmVm
IGRpY3Rpb25hcnlWYWx1ZShXS1R5cGVSZWYpOworCitib29sIGJvb2xlYW5WYWx1ZShXS1R5cGVS
ZWYpOworYm9vbCBib29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYpOwor
Citkb3VibGUgZG91YmxlVmFsdWUoV0tUeXBlUmVmKTsKK09wdGlvbmFsPGRvdWJsZT4gb3B0aW9u
YWxEb3VibGVWYWx1ZShXS1R5cGVSZWYpOworCitXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShXS1R5
cGVSZWYpOworV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoV0tUeXBlUmVmKTsKKwordWludDY0X3Qg
dWludDY0VmFsdWUoV0tUeXBlUmVmKTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKGNvbnN0IFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4mKTsKKworV0tUeXBlUmVmIHZhbHVlKFdLRGljdGlvbmFyeVJlZiwg
Y29uc3QgY2hhcioga2V5KTsKKworYm9vbCBib29sZWFuVmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBj
b25zdCBjaGFyKiBrZXkpOworZG91YmxlIGRvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29u
c3QgY2hhcioga2V5KTsKK1dLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLRGljdGlvbmFyeVJlZiwg
Y29uc3QgY2hhcioga2V5KTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiwg
Y29uc3QgY2hhcioga2V5KTsKKworT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVl
KFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVm
PiYsIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgT3B0aW9uYWw8VD4mIHZhbHVlKTsKK3ZvaWQgc2V0
VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBj
aGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBib29sIHZhbHVl
KTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4mLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUo
Y29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBr
ZXksIHVpbnQ2NF90IHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGRvdWJsZSB2YWx1ZSk7Cit2
b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+Jiwg
Y29uc3QgY2hhcioga2V5LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgYm9v
bCBib29sZWFuVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBX
S0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkgJiYgV0tCb29sZWFuR2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPih2YWx1ZSkpOworfQorCitpbmxpbmUgYm9v
bCBib29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIGJvb2xlYW5WYWx1ZSh2YWx1ZS5nZXQoKSk7Cit9CisKK2lubGluZSBXS0RpY3Rp
b25hcnlSZWYgZGljdGlvbmFyeVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpID8g
c3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxp
bmUgZG91YmxlIGRvdWJsZVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFs
dWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRG91YmxlR2V0VHlwZUlEKCkgPyBXS0RvdWJs
ZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPih2YWx1ZSkpIDogMDsKK30KKworaW5s
aW5lIE9wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS1R5cGVSZWYgdmFsdWUp
Cit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS0RvdWJsZUdl
dFR5cGVJRCgpID8gbWFrZU9wdGlvbmFsKFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tE
b3VibGVSZWY+KHZhbHVlKSkpIDogV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgV0tTdHJpbmdS
ZWYgc3RyaW5nVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBX
S0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSA/IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxpbmUgV1RGOjpTdHJpbmcgdG9X
VEZTdHJpbmcoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB0b1dURlN0cmluZyhzdHJp
bmdWYWx1ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUoV0tUeXBl
UmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0g
V0tVSW50NjRHZXRUeXBlSUQoKSA/IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KHZhbHVlKSkgOiAwOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUoY29u
c3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZh
bHVlKHZhbHVlLmdldCgpKTsKK30KKworaW5saW5lIFdLVHlwZVJlZiB2YWx1ZShXS0RpY3Rpb25h
cnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHRvV0soa2V5KS5nZXQoKSk7Cit9CisKK2lu
bGluZSBib29sIGJvb2xlYW5WYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3Qg
Y2hhcioga2V5KQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUodmFsdWUoZGljdGlvbmFyeSwg
a2V5KSk7Cit9CisKK2lubGluZSBkb3VibGUgZG91YmxlVmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRp
Y3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gZG91YmxlVmFsdWUodmFs
dWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBXS1N0cmluZ1JlZiBzdHJpbmdWYWx1
ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJl
dHVybiBzdHJpbmdWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5lIHVp
bnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXkpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHZhbHVlKGRpY3Rpb25hcnksIGtleSkp
OworfQorCitpbmxpbmUgT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdLRGlj
dGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIG9w
dGlvbmFsRG91YmxlVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSB2
b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBk
aWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHRvV0soa2V5KS5nZXQoKSwgdmFsdWUp
OworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBib29sIHZhbHVlKQor
eworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dmFsdWUpKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXks
IGNvbnN0IGNoYXIqIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgdG9X
Syh2YWx1ZSkuZ2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5
LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwg
a2V5LCB0b1dLKHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBj
aGFyKiBrZXksIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtl
eSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKworaW5saW5lIHZv
aWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRp
Y3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSwgZG91YmxlIHZhbHVlKQoreworICAgIHNldFZhbHVl
KGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBj
b25zdCBPcHRpb25hbDxUPiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBzZXRW
YWx1ZShkaWN0aW9uYXJ5LCBrZXksICp2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmggYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaAppbmRleCA2NDQ3NjAzOTY4
ZDIwNjQyMGJlYjk0Mjc3M2IyNGI3ODk2NDFiNWM5Li5mYTNhODhkM2FmMzkzNGQ0Yzg4MjBiZjUw
ZmU5Zjg5N2IzOGZkMDRhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50
U2VuZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJv
eHkuaApAQCAtMTEyLDE4ICsxMTIsMTkgQEAgcHJpdmF0ZToKICAgICBQT0lOVCBwb3NpdGlvbklu
UG9pbnQoKSBjb25zdCB7IHJldHVybiB7IHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueCks
IHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueSkgfTsgfQogI2VuZGlmCiAKLSAgICBkb3Vi
bGUgbV90aW1lOwotICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKLSAgICBib29sIG1fbGVmdE1vdXNl
QnV0dG9uRG93bjsKLSAgICBpbnQgbV9jbGlja0NvdW50OwotICAgIGRvdWJsZSBtX2NsaWNrVGlt
ZTsKLSAgICBXS1BvaW50IG1fY2xpY2tQb3NpdGlvbjsKLSAgICBXS0V2ZW50TW91c2VCdXR0b24g
bV9jbGlja0J1dHRvbjsKKyAgICBkb3VibGUgbV90aW1lIHsgMCB9OworICAgIFdLUG9pbnQgbV9w
b3NpdGlvbiB7IH07CisgICAgYm9vbCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24geyBmYWxzZSB9Owor
ICAgIGludCBtX2NsaWNrQ291bnQgeyAwIH07CisgICAgZG91YmxlIG1fY2xpY2tUaW1lIHsgMCB9
OworICAgIFdLUG9pbnQgbV9jbGlja1Bvc2l0aW9uIHsgfTsKKyAgICBXS0V2ZW50TW91c2VCdXR0
b24gbV9jbGlja0J1dHRvbiB7IGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbiB9OwogICAgIHVu
c2lnbmVkIG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB7IDAgfTsKICNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBpbnQgZXZlbnROdW1iZXI7Ci0jZWxpZiBQTEFURk9STShXUEUpCi0gICAgdWlu
dDMyX3QgbV9idXR0b25TdGF0ZTsKKyAgICBpbnQgZXZlbnROdW1iZXIgeyAwIH07CisjZW5kaWYK
KyNpZiBQTEFURk9STShXUEUpCisgICAgdWludDMyX3QgbV9idXR0b25TdGF0ZSB7IDAgfTsKICAg
ICBWZWN0b3I8c3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+IG1fdG91Y2hFdmVudHM7
CiAgICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV91cGRhdGVkVG91Y2hFdmVudHM7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Q
cm92aWRlck1vY2suY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3Zp
ZGVyTW9jay5jcHAKaW5kZXggNmY5M2NhMjczMDMwZjU3NzZlMzE4ZjllNDU2OTAyMmNlZTE0Yjkw
ZC4uYzQyNTFiMzAxZmI1NTRjN2VhZTYwMzE2Mjc1OTZmNTBiNzhhMjU5ZCAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKQEAgLTYz
LDkgKzYzLDkgQEAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6On5HZW9sb2NhdGlvblByb3ZpZGVy
TW9jaygpCiAgICAgV0tHZW9sb2NhdGlvbk1hbmFnZXJTZXRQcm92aWRlcihtX2dlb2xvY2F0aW9u
TWFuYWdlciwgMCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0
aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0
dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGlu
ZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29s
IHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIEdlb2xvY2F0aW9u
UHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8
ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlv
bmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBt
X3Bvc2l0aW9uLmFkb3B0KFdLR2VvbG9jYXRpb25Qb3NpdGlvbkNyZWF0ZV9jKFdhbGxUaW1lOjpu
b3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwg
YWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNj
dXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlk
ZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCkpOworICAgIG1f
cG9zaXRpb24uYWRvcHQoV0tHZW9sb2NhdGlvblBvc2l0aW9uQ3JlYXRlX2MoV2FsbFRpbWU6Om5v
dygpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBh
Y2N1cmFjeSwgYWx0aXR1ZGUuaGFzVmFsdWUoKSwgYWx0aXR1ZGUudmFsdWVPcigwKSwgYWx0aXR1
ZGVBY2N1cmFjeS5oYXNWYWx1ZSgpLCBhbHRpdHVkZUFjY3VyYWN5LnZhbHVlT3IoMCksIGhlYWRp
bmcuaGFzVmFsdWUoKSwgaGVhZGluZy52YWx1ZU9yKDApLCBzcGVlZC5oYXNWYWx1ZSgpLCBzcGVl
ZC52YWx1ZU9yKDApLCBmbG9vckxldmVsLmhhc1ZhbHVlKCksIGZsb29yTGV2ZWwudmFsdWVPcigw
KSkpOwogCiAgICAgbV9oYXNFcnJvciA9IGZhbHNlOwogICAgIG1fZXJyb3JNZXNzYWdlLmNsZWFy
KCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlk
ZXJNb2NrLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2Nr
LmgKaW5kZXggMWVkNGFkZjliMzkzOTNhMzMzYWEzMjUxMDk3YjllM2FhNDJjYzM2Yi4uOWJmNjMz
ODRhZTI3ZGIyOGM1ZjU0MDU2ODViODhmNzViZWQ3YjUxNiAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaApAQCAtMzcsNyArMzcsNyBAQCBw
dWJsaWM6CiAgICAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2soV0tDb250ZXh0UmVmKTsKICAgICB+
R2VvbG9jYXRpb25Qcm92aWRlck1vY2soKTsKIAotICAgIHZvaWQgc2V0UG9zaXRpb24oZG91Ymxl
IGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUg
aGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNG
bG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8
ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRp
b25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRv
dWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRQb3NpdGlvblVuYXZhaWxhYmxlRXJyb3Io
V0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKIAogICAgIHZvaWQgc3RhcnRVcGRhdGluZyhXS0dl
b2xvY2F0aW9uTWFuYWdlclJlZik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDZhMDhhYWE2YjYzOWYzZjU1YzhjNDZhOTRjMmZlOTVkYjU0N2Y3ODIuLmFkNGEyNWFlNWIw
N2I3NThlMmUwYTkxZmFmMWI1MjgzMDNlYjg0OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuY3BwCkBAIC03NSw5ICs3NSw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnVwZGF0ZUlzb2xhdGVkVHJlZU1vZGUoKQogfQogI2VuZGlmCiAKLXZvaWQgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkK
IHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgdGhpcyk7CiB9CiAK
IEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCkBAIC05
NiwxNyArOTYsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5jZWRBY2Nl
c3NpYmlsaXR5RW5hYmxlZCgpCiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKKwogUmVmPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgp
CiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3QgPSBzdGF0
aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdl
KSk7Ci0KICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHJvb3QpOwog
fQogCiBSZWY8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OmZvY3VzZWRFbGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgUGxhdGZvcm1VSUVs
ZW1lbnQgZm9jdXNlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tB
Y2Nlc3NpYmlsaXR5Rm9jdXNlZE9iamVjdChwYWdlKSk7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNyZWF0ZShmb2N1c2VkRWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmgKaW5kZXggNjZjMzQzODIyYmJiYzY5NTk5YmFmNmE0NzY2MGExMzg3ZWUyNTFi
MC4uZDljMmYxMjZmODcxY2UyZWVmMDdiMDAzNTgwZjZkYWNlNmM1NDIzNSAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgfkFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVm
LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAg
dm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAgICAgdmlydHVhbCBKU0NsYXNz
UmVmIHdyYXBwZXJDbGFzcygpOwogICAgIAogICAgIC8vIEVuaGFuY2VkIGFjY2Vzc2liaWxpdHku
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQppbmRleCBi
OWY1ZWVmZmE0NjQ5ZjQxN2Y4MmIxNjE3MDlmNGFiYWUwOTk5MWYyLi41MmUzZWZhOTkxYjlkZDZj
MTc1ZGJiOGU0MTBlNmZlY2ZhYzMwMTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdl
bmVyYXRvclRlc3RSdW5uZXIucG0KQEAgLTI2MSw4ICsyNjEsNyBAQCAke2ltcGxlbWVudGF0aW9u
Q2xhc3NOYW1lfSogdG8ke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSgogCiBKU0NsYXNzUmVmICR7Y2xhc3NOYW1lfTo6JHtjbGFzc1JlZkdldHRlcn0oKQog
ewotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7Ci0gICAgaWYgKCFqc0NsYXNzKSB7Cisg
ICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NSZWYganNDbGFzcyA9IFtdIHsKICAgICAgICAgSlNDbGFz
c0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OwogICAgICAg
ICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJAe1skdHlwZS0+bmFtZV19IjsKICAgICAgICAgZGVm
aW5pdGlvbi5wYXJlbnRDbGFzcyA9IEB7WyRzZWxmLT5fcGFyZW50Q2xhc3NSZWZHZXR0ZXJFeHBy
ZXNzaW9uKCRpbnRlcmZhY2UpXX07CkBAIC0yNzQsOCArMjczLDggQEAgRU9GCiAgICAgcHVzaChA
Y29udGVudHMsICIgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBmaW5hbGl6ZTtcbiIpIHVu
bGVzcyBfcGFyZW50SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCiAgICAgcHVzaChAY29udGVudHMs
IDw8RU9GKTsKLSAgICAgICAganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwot
ICAgIH0KKyAgICAgICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0o
KTsKICAgICByZXR1cm4ganNDbGFzczsKIH0KIApAQCAtNDc3LDEwICs0NzYsMTEgQEAgc3ViIF9w
bGF0Zm9ybVR5cGVDb25zdHJ1Y3RvcgogewogICAgIG15ICgkc2VsZiwgJHR5cGUsICRhcmd1bWVu
dE5hbWUpID0gQF87CiAKLSAgICByZXR1cm4gIkpTVmFsdWVUb051bGxhYmxlQm9vbGVhbihjb250
ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0eXBl
LT5pc051bGxhYmxlOworICAgIHJldHVybiAidG9PcHRpb25hbEJvb2woY29udGV4dCwgJGFyZ3Vt
ZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkdHlwZS0+aXNOdWxsYWJs
ZTsKICAgICByZXR1cm4gIkpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50TmFtZSki
IGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gIiRhcmd1bWVudE5hbWUi
IGlmICR0eXBlLT5uYW1lIGVxICJvYmplY3QiOwotICAgIHJldHVybiAiYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSkiIGlmICQkc2VsZntj
b2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gImNyZWF0ZUpT
U3RyaW5nKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0t
PklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsRG91YmxlKGNvbnRl
eHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJpbWl0aXZl
VHlwZSgkdHlwZSkgJiYgJHR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikiIGlmICQkc2VsZntjb2RlR2Vu
ZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gInRvIiAuIF9pbXBs
ZW1lbnRhdGlvbkNsYXNzTmFtZSgkdHlwZSkgLiAiKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIjsK
IH0KQEAgLTQ5OSwxOCArNDk5LDE2IEBAIHN1YiBfcGxhdGZvcm1UeXBlVmFyaWFibGVEZWNsYXJh
dGlvbgogICAgICAgICAiSlNWYWx1ZVJlZiIgPT4gMSwKICAgICApOwogCi0gICAgbXkgJG51bGxW
YWx1ZSA9ICIwIjsKKyAgICBteSAkbnVsbFZhbHVlID0gIm51bGxwdHIiOwogICAgIGlmICgkcGxh
dGZvcm1UeXBlIGVxICJKU1ZhbHVlUmVmIikgewogICAgICAgICAkbnVsbFZhbHVlID0gIkpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpIjsKLSAgICB9IGVsc2lmIChkZWZpbmVkICRub25Qb2lu
dGVyVHlwZXN7JHBsYXRmb3JtVHlwZX0gJiYgJHBsYXRmb3JtVHlwZSBuZSAiZG91YmxlIikgewot
ICAgICAgICAkbnVsbFZhbHVlID0gIiRwbGF0Zm9ybVR5cGUoKSI7CisgICAgfSBlbHNpZiAoZGVm
aW5lZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9KSB7CisgICAgICAgICRudWxsVmFs
dWUgPSAkdHlwZS0+aXNOdWxsYWJsZSA/ICJXVEY6Om51bGxvcHQiIDogIiRwbGF0Zm9ybVR5cGUo
KSI7CiAgICAgfQogCi0gICAgJHBsYXRmb3JtVHlwZSAuPSAiKiIgdW5sZXNzIGRlZmluZWQgJG5v
blBvaW50ZXJUeXBlc3skcGxhdGZvcm1UeXBlfTsKLQotICAgIHJldHVybiAiJHBsYXRmb3JtVHlw
ZSAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiAmJiAkY29uc3RydWN0b3I7IiBpZiAkY29uZGl0
aW9uICYmICRwbGF0Zm9ybVR5cGUgZXEgImJvb2wiOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlw
ZSAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiA/ICRjb25zdHJ1Y3RvciA6ICRudWxsVmFsdWU7
IiBpZiAkY29uZGl0aW9uOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAkdmFyaWFibGVOYW1l
ID0gJGNvbnN0cnVjdG9yOyI7CisgICAgcmV0dXJuICJib29sICR2YXJpYWJsZU5hbWUgPSAkY29u
ZGl0aW9uICYmICRjb25zdHJ1Y3RvcjsiIGlmICRjb25kaXRpb24gJiYgJHBsYXRmb3JtVHlwZSBl
cSAiYm9vbCI7CisgICAgcmV0dXJuICJhdXRvICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uID8g
JGNvbnN0cnVjdG9yIDogJG51bGxWYWx1ZTsiIGlmICRjb25kaXRpb247CisgICAgcmV0dXJuICJh
dXRvICR2YXJpYWJsZU5hbWUgPSAkY29uc3RydWN0b3I7IjsKIH0KIAogc3ViIF9yZXR1cm5FeHBy
ZXNzaW9uCkBAIC01MTgsMTEgKzUxNiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBt
eSAoJHNlbGYsICRyZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAi
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1
bmRlZmluZWQiOwotICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQs
ICR7ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJl
dHVyblR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtl
eHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJu
VHlwZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0
LCAke2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAg
IHJldHVybiAiJHtleHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7
CiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIg
aWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwot
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9u
fS5nZXQoKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5U
eXBlKTsKKyAgICByZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgp
KSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwog
ICAgIHJldHVybiAidG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwog
fQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL1Rlc3RSdW5uZXIuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAppbmRleCBmYmVmMzk2ZjVmNmYzYmZmNGY5OWM4
YTU2YTZlNjJhYzAxNDBmZmE0Li5mMzdlMDA2Nzc1YjhlMzA2MWM3Y2VjOGY5YjVlZjc4ODYxODA5
MTBhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL1Rlc3RSdW5uZXIuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKQEAgLTIxNSw3ICsyMTUsNyBAQCBpbnRl
cmZhY2UgVGVzdFJ1bm5lciB7CiAKICAgICAvLyBHZW9sb2NhdGlvbgogICAgIHVuZGVmaW5lZCBz
ZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhbiB2YWx1ZSk7Ci0gICAgdW5kZWZpbmVkIHNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgYWx0aXR1ZGUsIG9wdGlvbmFsIG9i
amVjdCBhbHRpdHVkZUFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgaGVhZGluZywgb3B0aW9uYWwg
b2JqZWN0IHNwZWVkLCBvcHRpb25hbCBvYmplY3QgZmxvb3JMZXZlbCk7CisgICAgdW5kZWZpbmVk
IHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBkb3VibGU/IGFsdGl0dWRlLCBvcHRpb25h
bCBkb3VibGU/IGFsdGl0dWRlQWNjdXJhY3ksIG9wdGlvbmFsIGRvdWJsZT8gaGVhZGluZywgb3B0
aW9uYWwgZG91YmxlPyBzcGVlZCwgb3B0aW9uYWwgZG91YmxlPyBmbG9vckxldmVsKTsKICAgICB1
bmRlZmluZWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKERPTVN0
cmluZyBlcnJvck1lc3NhZ2UpOwogICAgIGJvb2xlYW4gaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0
aXZlKCk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDU1M2ZkMDVlZjE2
OWYzNTIzYTA0MzFmMTMxNzQyZmJjMjIxNzA0MDkuLmZjZDBkNWJmODg2YmIzMjczMjhiMDUzZmVm
ZjZmY2EzYTIyNjAwZjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcApAQCAtMjYs
MTAgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kaW5n
Q29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1
ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAj
aW5jbHVkZSAiSlNFdmVudFNlbmRpbmdDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVu
Y3Rpb25zLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW5jbHVkZSA8V2ViS2l0
L1dLQnVuZGxlRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUHJpdmF0ZS5o
PgpAQCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgTWVudUl0ZW1Qcml2YXRlRGF0YSB7CiB9OwogCiAj
aWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCisKIHN0YXRpYyBKU1ZhbHVlUmVmIG1lbnVJdGVtQ2xp
Y2tDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKIHsK
ICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJ
dGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtNjIs
NyArNjMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNrQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iagogc3RhdGljIEpTVmFsdWVSZWYgZ2V0
TWVudUl0ZW1UaXRsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBv
YmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQog
ewogICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRhID0gc3RhdGljX2Nhc3Q8TWVu
dUl0ZW1Qcml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZSA9IGFkb3B0V0soV0tDb250ZXh0TWVudUl0ZW1D
b3B5VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQoKSkpOworICAgIGF1dG8gd2tUaXRsZSA9
IGFkb3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5n
ZXQoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHdrVGl0
bGUpLmdldCgpKTsKIH0KIApAQCAtNzMsMTggKzc0LDE3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdl
dE1lbnVJdGVtQ2hpbGRyZW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYKICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1l
bnVJdGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CiAgICAgYXV0
byBjaGlsZHJlbiA9IGFkb3B0V0soV0tDb250ZXh0TWVudUNvcHlTdWJtZW51SXRlbXMocHJpdmF0
ZURhdGEtPm1faXRlbS5nZXQoKSkpOwogCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpT
T2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOworICAgIGF1dG8gYXJyYXkgPSBKU09i
amVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAoIVdLQXJyYXlHZXRTaXpl
KGNoaWxkcmVuLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgICAgICBy
ZXR1cm4gYXJyYXk7CiAKLSAgICBKU09iamVjdFJlZiBhcnJheU9iamVjdCA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBXS0FycmF5R2V0U2l6ZShjaGlsZHJlbi5nZXQoKSk7ICsraSkgewogICAgICAgICBhdXRvIGl0
ZW0gPSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdElu
ZGV4KGNoaWxkcmVuLmdldCgpLCBpKSk7CiAgICAgICAgIGF1dG8qIHByaXZhdGVEYXRhID0gbmV3
IE1lbnVJdGVtUHJpdmF0ZURhdGEoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBpdGVtKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4
dCwgYXJyYXlPYmplY3QsIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRNZW51SXRlbUNsYXNz
KCksIHByaXZhdGVEYXRhKSwgMCk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFz
cygpLCBwcml2YXRlRGF0YSksIDApOwogICAgIH0KIAotICAgIHJldHVybiBhcnJheVJlc3VsdDsK
KyAgICByZXR1cm4gYXJyYXk7CiB9CiAKIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY01l
bnVJdGVtRnVuY3Rpb25zW10gPSB7CkBAIC0xMjYsNiArMTI2LDcgQEAgc3RhdGljIEpTQ2xhc3NS
ZWYgZ2V0TWVudUl0ZW1DbGFzcygpCiAKICAgICByZXR1cm4gbWVudUl0ZW1DbGFzczsKIH0KKwog
I2VuZGlmCiAKIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXIoSlNTdHJpbmdS
ZWYgbW9kaWZpZXIpCkBAIC0xNTAsMjUgKzE1MSwzMSBAQCBzdGF0aWMgV0tFdmVudE1vZGlmaWVy
cyBwYXJzZU1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyKQogICAgIHJldHVybiAwOwogfQog
Ci1zdGF0aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGFycmF5KQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK3N0YXRpYyBXS0V2ZW50
TW9kaWZpZXJzIHBhcnNlVG91Y2hNb2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllcikKIHsKLSAg
ICBhdXRvIGxlbmd0aFN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkoY29udGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgMCk7Ci0gICAgaWYgKCFs
ZW5ndGhWYWx1ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKKyAgICBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImN0cmwiKSkKKyAgICAg
ICAgcmV0dXJuIGtXS0V2ZW50TW9kaWZpZXJzQ29udHJvbEtleTsKKyAgICBpZiAoSlNTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgInNoaWZ0IikpCisgICAgICAgIHJldHVybiBr
V0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5OworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1vZGlmaWVyLCAiYWx0IikpCisgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVy
c0FsdEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwg
Im1ldGFLZXkiKSkKKyAgICAgICAgcmV0dXJuIGtXS0V2ZW50TW9kaWZpZXJzTWV0YUtleTsKKyAg
ICByZXR1cm4gMDsKIH0KIAorI2VuZGlmCisKIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNl
TW9kaWZpZXJBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhcnJheVZhbHVl
KQogewogICAgIGlmICghYXJyYXlWYWx1ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBU
aGUgdmFsdWUgbWF5IGVpdGhlciBiZSBhIHN0cmluZyB3aXRoIGEgc2luZ2xlIG1vZGlmaWVyIG9y
IGFuIGFycmF5IG9mIG1vZGlmaWVycy4KLSAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQs
IGFycmF5VmFsdWUpKSB7Ci0gICAgICAgIGF1dG8gc3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBhcnJheVZhbHVlLCAwKSk7Ci0gICAgICAgIHJldHVybiBwYXJzZU1v
ZGlmaWVyKHN0cmluZy5nZXQoKSk7Ci0gICAgfQorICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29u
dGV4dCwgYXJyYXlWYWx1ZSkpCisgICAgICAgIHJldHVybiBwYXJzZU1vZGlmaWVyKGNyZWF0ZUpT
U3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpLmdldCgpKTsKIAogICAgIGlmICghSlNWYWx1ZUlz
T2JqZWN0KGNvbnRleHQsIGFycmF5VmFsdWUpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE3Niwy
OSArMTgzLDIwIEBAIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXJBcnJheShK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhcnJhCiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOwogICAgIFdLRXZlbnRNb2RpZmllcnMgbW9k
aWZpZXJzID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgICAgICBKU1ZhbHVlUmVmIHZh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksICZleGNl
cHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGF1dG8gc3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2
YWx1ZSwgJmV4Y2VwdGlvbikpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIG1vZGlmaWVycyB8PSBwYXJzZU1vZGlmaWVyKHN0cmluZy5nZXQo
KSk7CisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgo
Y29udGV4dCwgYXJyYXksIGksIG51bGxwdHIpKQorICAgICAgICAgICAgbW9kaWZpZXJzIHw9IHBh
cnNlTW9kaWZpZXIoY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsKICAgICB9
CiAgICAgcmV0dXJuIG1vZGlmaWVyczsKIH0KIAotUmVmPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+
IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRXZlbnRTZW5kaW5nQ29udHJvbGxlcik7Ci19Ci0KLUV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKQorc3RhdGljIFdLRXZlbnRNb2RpZmllcnMgcGFy
c2VNb2RpZmllckFycmF5KEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKKyAgICByZXR1cm4gcGFy
c2VNb2RpZmllckFycmF5KFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpKSksIGFycmF5VmFsdWUpOwogfQogCi1FdmVudFNlbmRpbmdDb250cm9sbGVyOjp+RXZlbnRT
ZW5kaW5nQ29udHJvbGxlcigpCitSZWY8RXZlbnRTZW5kaW5nQ29udHJvbGxlcj4gRXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6Y3JlYXRlKCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFdmVu
dFNlbmRpbmdDb250cm9sbGVyKTsKIH0KIAogSlNDbGFzc1JlZiBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjp3cmFwcGVyQ2xhc3MoKQpAQCAtMjA2LDIzNyArMjA0LDExNiBAQCBKU0NsYXNzUmVmIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIEpTRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6ZXZlbnRTZW5kaW5nQ29udHJvbGxlckNsYXNzKCk7CiB9CiAKLWVu
dW0gTW91c2VTdGF0ZSB7Ci0gICAgTW91c2VVcCwKLSAgICBNb3VzZURvd24KLX07CitlbnVtIE1v
dXNlU3RhdGUgeyBNb3VzZVVwLCBNb3VzZURvd24gfTsKIAotc3RhdGljIFdLTXV0YWJsZURpY3Rp
b25hcnlSZWYgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVN0YXRlIHN0YXRlLCBpbnQgYnV0
dG9uLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycykKK3N0YXRpYyBXS1JldGFpblB0cjxXS0Rp
Y3Rpb25hcnlSZWY+IGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VTdGF0ZSBzdGF0ZSwgaW50
IGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMpCiB7Ci0gICAgV0tNdXRhYmxlRGlj
dGlvbmFyeVJlZiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RhdGUgPT0gTW91c2VVcCA/ICJNb3VzZVVwIiA6ICJN
b3VzZURvd24iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiBidXR0b25SZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgYnV0dG9uS2V5LmdldCgpLCBi
dXR0b25SZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVy
c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVycyIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJzUmVmID0gYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHksIG1vZGlmaWVyc0tleS5nZXQoKSwgbW9kaWZpZXJzUmVmLmdldCgp
KTsKLQotICAgIHJldHVybiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5OworICAgIGF1dG8gYm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiU3ViTWVzc2FnZSIsIHN0YXRlID09IE1vdXNlVXAgPyAiTW91c2VVcCIgOiAiTW91c2VEb3du
Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIkJ1dHRvbiIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
YnV0dG9uKSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJNb2RpZmllcnMiLCBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpLmdldCgpKTsKKyAgICByZXR1cm4gYm9keTsKIH0K
IAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZURvd24oaW50IGJ1dHRvbiwgSlNW
YWx1ZVJlZiBtb2RpZmllckFycmF5KSAKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IGlu
amVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwotICAgIFdLRXZl
bnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNvbnRleHQsIG1vZGlm
aWVyQXJyYXkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNl
bmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93
biwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UsIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VN
ZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VEb3duLCBi
dXR0b24sIHBhcnNlTW9kaWZpZXJBcnJheShtb2RpZmllckFycmF5KSkuZ2V0KCkpOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlVXAoaW50IGJ1dHRvbiwgSlNWYWx1ZVJl
ZiBtb2RpZmllckFycmF5KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwotICAg
IFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNvbnRleHQs
IG1vZGlmaWVyQXJyYXkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJF
dmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1v
dXNlVXAsIGJ1dHRvbiwgbW9kaWZpZXJzKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIDApOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNl
bmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBwYXJzZU1vZGlm
aWVyQXJyYXkobW9kaWZpZXJBcnJheSkpLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011
dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
dWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlTW92ZVRvIikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
c3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0gYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0
V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KKyAgICBhdXRv
IGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VNb3ZlVG8iKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiWCIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiWSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKICAgICBtX3Bvc2l0
aW9uID0gV0tQb2ludE1ha2UoeCwgeSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRT
ZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
b3VzZUZvcmNlQ2xpY2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlQ2xpY2siKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5Lmdl
dCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZUZv
cmNlQ2xpY2siKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIi
LCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzdGFydEFu
ZENhbmNlbE1vdXNlRm9yY2VDbGljaygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXJ0QW5kQ2FuY2VsTW91c2VGb3JjZUNs
aWNrIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
IlN1Yk1lc3NhZ2UiLCAiU3RhcnRBbmRDYW5jZWxNb3VzZUZvcmNlQ2xpY2siKTsKKyAgICBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAog
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlRG93bigpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vdXNl
Rm9yY2VEb3duIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwot
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUo
Ym9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZURvd24iKTsKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlVXAoKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Vi
TWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlVXAiKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBz
dWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVz
c2FnZSIsICJNb3VzZUZvcmNlVXAiKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgi
RXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZUZvcmNlQ2hhbmdlZChkb3VibGUgZm9yY2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011
dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
dWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlRm9yY2VDaGFu
Z2VkIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZvcmNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRm9yY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+
IGZvcmNlUmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShmb3JjZSkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgZm9yY2VLZXkuZ2V0KCks
IGZvcmNlUmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIk1vdXNlRm9yY2VDaGFuZ2Vk
Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIkZvcmNlIiwgZm9yY2UpOworICAgIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkxlYXBGb3J3YXJkIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lSW5NaWxsaXNlY29uZHMiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IHRpbWVSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1p
bGxpc2Vjb25kcykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgdGltZUtleS5nZXQoKSwgdGltZVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVz
c2FnZSIsICJMZWFwRm9yd2FyZCIpOworICAgIHNldFZhbHVlKGJvZHksICJUaW1lSW5NaWxsaXNl
Y29uZHMiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1pbGxpc2Vjb25kcykpLmdldCgpKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsK
IH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0Ns
aWNrKCkKIHsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IDA7Ci0gICAgaW50IGJ1
dHRvbiA9IDA7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2Vu
ZGVyIikpOwotCi0gICAgLy8gQXN5bmNocm9ub3VzIG1vdXNlIGRvd24uCi0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbW91c2VEb3duTWVzc2FnZUJvZHkgPSBhZG9wdFdL
KGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VEb3duLCBidXR0b24sIG1vZGlmaWVycykpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgbW91c2VEb3duTWVz
c2FnZUJvZHkuZ2V0KCkpOwotCi0gICAgLy8gQXN5bmNocm9ub3VzIG1vdXNlIHVwLgotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1vdXNlVXBNZXNzYWdlQm9keSA9IGFk
b3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBidXR0b24sIG1vZGlmaWVycykp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgbW91c2VVcE1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3Jl
YXRlTW91c2VNZXNzYWdlQm9keShNb3VzZURvd24sIDAsIDApLmdldCgpKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCAw
LCAwKS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoSlNTdHJpbmdSZWYga2V5LCBXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVycywgaW50IGxvY2F0aW9uKQogewotICAgIFdLUmV0YWluUHRyPFdLTXV0
YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0
YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1
Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5RG93biIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBrZXlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJLZXkiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCBrZXlLZXkuZ2V0KCksIHRvV0soa2V5KS5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiTW9kaWZpZXJzIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiBtb2RpZmllcnNSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgbW9kaWZp
ZXJzS2V5LmdldCgpLCBtb2RpZmllcnNSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGxvY2F0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiTG9jYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGxvY2F0aW9u
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShsb2NhdGlvbikpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgbG9jYXRpb25LZXkuZ2V0KCks
IGxvY2F0aW9uUmVmLmdldCgpKTsKLQotICAgIHJldHVybiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJLZXlEb3duIik7CisgICAgc2V0VmFs
dWUoYm9keSwgIktleSIsIHRvV0soa2V5KS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIk1v
ZGlmaWVycyIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kaWZpZXJzKSkuZ2V0KCkpOworICAg
IHNldFZhbHVlKGJvZHksICJMb2NhdGlvbiIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobG9jYXRp
b24pKS5nZXQoKSk7CisgICAgcmV0dXJuIGJvZHk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6a2V5RG93bihKU1N0cmluZ1JlZiBrZXksIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJh
eSwgaW50IGxvY2F0aW9uKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwotICAg
IFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNvbnRleHQs
IG1vZGlmaWVyQXJyYXkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJF
dmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBr
ZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoa2V5LCBtb2RpZmll
cnMsIGxvY2F0aW9uKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwga2V5RG93bk1lc3NhZ2VCb2R5LmdldCgpLCAwKTsK
KyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVhdGVLZXlE
b3duTWVzc2FnZUJvZHkoa2V5LCBwYXJzZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJheSksIGxv
Y2F0aW9uKS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1
bGVBc3luY2hyb25vdXNLZXlEb3duKEpTU3RyaW5nUmVmIGtleSkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IGtleURvd25NZXNzYWdlQm9keSA9IGNyZWF0ZUtleURvd25N
ZXNzYWdlQm9keShrZXksIDAgLyogbW9kaWZpZXJzICovLCAwIC8qIGxvY2F0aW9uICovKTsKLQot
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwga2V5RG93bk1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRl
S2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgMCwgMCkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5KQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZVNj
cm9sbEJ5IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVm
ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJl
ZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0K
ICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpKTsgLy8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcgdHJlZSBjb21taXQuCi0g
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpKTsKKworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3Vz
ZVNjcm9sbEJ5Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91YmxlQ3Jl
YXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHkpKS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJv
ZHkuZ2V0KCkpOwogfQogCiBzdGF0aWMgdWludDY0X3QgY2dFdmVudFBoYXNlRnJvbVN0cmluZyhK
U1N0cmluZ1JlZiBwaGFzZVN0cikKQEAgLTQ3NSw5MCArMzUyLDU4IEBAIHN0YXRpYyB1aW50NjRf
dCBjZ0V2ZW50TW9tZW50dW1QaGFzZUZyb21TdHJpbmcoSlNTdHJpbmdSZWYgcGhhc2VTdHIpCiAK
IHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1v
bWVudHVtUGhhc2VzKGludCB4LCBpbnQgeSwgSlNTdHJpbmdSZWYgcGhhc2VTdHIsIEpTU3RyaW5n
UmVmIG1vbWVudHVtU3RyKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVu
dHVtUGhhc2VzIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwot
ICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJl
Zj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQo
KSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91
YmxlUmVmPiB5UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVm
LmdldCgpKTsKLQogICAgIHVpbnQ2NF90IHBoYXNlID0gY2dFdmVudFBoYXNlRnJvbVN0cmluZyhw
aGFzZVN0cik7CiAgICAgdWludDY0X3QgbW9tZW50dW0gPSBjZ0V2ZW50TW9tZW50dW1QaGFzZUZy
b21TdHJpbmcobW9tZW50dW1TdHIpOwotICAgIAorCiAgICAgaWYgKHBoYXNlID09IDQgLyoga0NH
U2Nyb2xsUGhhc2VFbmRlZCAqLyB8fCBwaGFzZSA9PSA4IC8qIGtDR1Njcm9sbFBoYXNlQ2FuY2Vs
bGVkICovKQogICAgICAgICBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgPSB0cnVlOwotICAg
IAogICAgIGlmIChtb21lbnR1bSA9PSAzIC8qIGtDR01vbWVudHVtU2Nyb2xsUGhhc2VFbmQgKi8p
CiAgICAgICAgIG1fc2VudFdoZWVsTW9tZW50dW1QaGFzZUVuZCA9IHRydWU7CiAKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcGhhc2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJQaGFzZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcGhh
c2VSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHBoYXNlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwaGFzZUtleS5nZXQoKSwgcGhh
c2VSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vbWVudHVtS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9tZW50dW0iKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vbWVudHVtUmVmID0gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShtb21lbnR1bSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgbW9tZW50dW1LZXkuZ2V0KCksIG1vbWVudHVtUmVmLmdldCgpKTsK
LQogICAgIFdLQnVuZGxlUGFnZUZvcmNlUmVwYWludChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCkpOyAvLyBUcmlnZ2VycyBhIHNjcm9sbGluZyB0cmVlIGNvbW1pdC4K
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCkpOworCisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIk1v
dXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIpOworICAgIHNldFZhbHVlKGJv
ZHksICJYIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSkuZ2V0KCkpOworICAgIHNldFZhbHVl
KGJvZHksICJZIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSkuZ2V0KCkpOworICAgIHNldFZh
bHVlKGJvZHksICJQaGFzZSIsIHBoYXNlKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTW9tZW50dW0i
LCBtb21lbnR1bSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0
KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRpbnVvdXNNb3VzZVNj
cm9sbEJ5KGludCB4LCBpbnQgeSwgYm9vbCBwYWdlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1l
c3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ29udGludW91c01vdXNlU2Ny
b2xsQnkiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHhSZWYg
PSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB5UmVm
ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYWdlZEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlBhZ2VkIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0
UmVmPiBwYWdlZFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUocGFnZWQpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHBhZ2VkS2V5Lmdl
dCgpLCBwYWdlZFJlZi5nZXQoKSk7Ci0KKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAi
Q29udGludW91c01vdXNlU2Nyb2xsQnkiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIGFkb3B0
V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIsIGFk
b3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUGFn
ZWQiLCBwYWdlZCk7CiAgICAgLy8gRklYTUU6IFRoaXMgbWVzc2FnZSBzaG91bGQgYmUgYXN5bmNo
cm9ub3VzLCBhcyBzY3JvbGxpbmcgaXMgaW50cmluc2ljYWxseSBhc3luY2hyb25vdXMuCiAgICAg
Ly8gU2VlIGFsc286IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4
MjU2Pi4KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQog
CiBKU1ZhbHVlUmVmIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRleHRDbGljaygpCiB7Ci0g
ICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAjaWYgRU5BQkxFKENP
TlRFWFRfTUVOVVMpCi0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gbWVudUVudHJpZXMgPSBh
ZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUF0UG9pbnRJbldpbmRvdyhwYWdlLCBt
X3Bvc2l0aW9uKSk7Ci0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFy
cmF5KGNvbnRleHQsIDAsIDAsIDApOworICAgIGF1dG8gbWVudUVudHJpZXMgPSBhZG9wdFdLKFdL
QnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUF0UG9pbnRJbldpbmRvdyhwYWdlLCBtX3Bvc2l0aW9u
KSk7CisgICAgYXV0byBhcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDAp
OwogICAgIGlmICghbWVudUVudHJpZXMpCi0gICAgICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuIGFycmF5OwogCi0gICAgSlNPYmplY3RSZWYgYXJyYXlPYmogPSBKU1ZhbHVl
VG9PYmplY3QoY29udGV4dCwgYXJyYXlSZXN1bHQsIDApOwogICAgIHNpemVfdCBlbnRyaWVzU2l6
ZSA9IFdLQXJyYXlHZXRTaXplKG1lbnVFbnRyaWVzLmdldCgpKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGVudHJpZXNTaXplOyArK2kpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZW51RW50cmllcy5nZXQoKSwgaSkpID09IFdLQ29udGV4
dE1lbnVJdGVtR2V0VHlwZUlEKCkpOwogCiAgICAgICAgIFdLQ29udGV4dE1lbnVJdGVtUmVmIGl0
ZW0gPSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdElu
ZGV4KG1lbnVFbnRyaWVzLmdldCgpLCBpKSk7CiAgICAgICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEq
IHByaXZhdGVEYXRhID0gbmV3IE1lbnVJdGVtUHJpdmF0ZURhdGEocGFnZSwgaXRlbSk7Ci0gICAg
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2JqLCBpLCBKU09i
amVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFzcygpLCBwcml2YXRlRGF0YSksIDApOwor
ICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgSlNP
YmplY3RNYWtlKGNvbnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAwKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgcmV0dXJuIGFycmF5OwogI2Vs
c2UKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAjZW5kaWYKQEAg
LTYxNSwyMSArNDYwLDE0IEBAIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMqIHRvTW9uaXRvcldo
ZWVsRXZlbnRzT3B0aW9ucyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWCiAgICAgaWYgKCFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgYXJndW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIGF1dG8gcmVzZXRMYXRjaGluZ1N0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJyZXNldExhdGNoaW5nIikpOwotICAgIGF1dG8gcmVzZXRMYXRjaGluZ1Zh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCwgYXJndW1lbnQsIG51bGxwdHIpLCByZXNldExhdGNoaW5nU3RyaW5nLmdldCgpLCBudWxscHRy
KTsKLQotICAgIGJvb2wgcmVzZXRMYXRjaGluZyA9IHRydWU7Ci0gICAgaWYgKHJlc2V0TGF0Y2hp
bmdWYWx1ZSAmJiBKU1ZhbHVlSXNCb29sZWFuKGNvbnRleHQsIHJlc2V0TGF0Y2hpbmdWYWx1ZSkp
Ci0gICAgICAgIHJlc2V0TGF0Y2hpbmcgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHJlc2V0
TGF0Y2hpbmdWYWx1ZSk7Ci0KICAgICBzdGF0aWMgTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyBv
cHRpb25zOwotICAgIG9wdGlvbnMucmVzZXRMYXRjaGluZyA9IHJlc2V0TGF0Y2hpbmc7CisgICAg
b3B0aW9ucy5yZXNldExhdGNoaW5nID0gYm9vbGVhblByb3BlcnR5KGNvbnRleHQsIChKU09iamVj
dFJlZilhcmd1bWVudCwgInJlc2V0TGF0Y2hpbmciLCB0cnVlKTsKICAgICByZXR1cm4gJm9wdGlv
bnM7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW9uaXRvcldoZWVsRXZlbnRz
KE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMqIG9wdGlvbnMpCiB7Ci0gICAgV0tCdW5kbGVQYWdl
UmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Cisg
ICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
OwogICAgIAogICAgIG1fc2VudFdoZWVsUGhhc2VFbmRPckNhbmNlbCA9IGZhbHNlOwogICAgIG1f
c2VudFdoZWVsTW9tZW50dW1QaGFzZUVuZCA9IGZhbHNlOwpAQCAtNjYzLDcgKzUwMSw3IEBAIHZv
aWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FsbEFmdGVyU2Nyb2xsaW5nQ29tcGxldGVzKEpT
VmFsdWVSZWYgZnVuY3Rpb25DYWxsCiAgICAgaWYgKCFmdW5jdGlvbkNhbGxiYWNrKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWlu
RnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAgICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsK
ICAgICAKQEAgLTY4MywxOTkgKzUyMSwxMDIgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVy
OjpjYWxsQWZ0ZXJTY3JvbGxpbmdDb21wbGV0ZXMoSlNWYWx1ZVJlZiBmdW5jdGlvbkNhbGwKIH0K
IAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6YWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1l
c3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNz
YWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFkZFRvdWNoUG9pbnQiKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJN
ZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNz
YWdlIiwgIkFkZFRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIHgpOworICAg
IHNldFZhbHVlKGJvZHksICJZIiwgeSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2Uo
IkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1
Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXBk
YXRlVG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgIFdLUmV0YWluUHRyPFdL
VUludDY0UmVmPiBpbmRleFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGluZGV4
S2V5LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZSh5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlVwZGF0
ZVRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiSW5kZXgiLCBpbmRleCk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlgiLCB4KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIsIHkpOworICAg
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwog
fQogCi12b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9kaWZpZXIoY29uc3Qg
SlNTdHJpbmdSZWYgJm1vZGlmaWVyLCBib29sIGVuYWJsZSkKK3ZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllciwgYm9vbCBlbmFi
bGUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIp
KTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldFRvdWNoTW9kaWZpZXIiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNz
YWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZCA9IDA7Ci0gICAgaWYg
KEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJjdHJsIikpCi0gICAgICAg
IG1vZCA9IGtXS0V2ZW50TW9kaWZpZXJzQ29udHJvbEtleTsKLSAgICBpZiAoSlNTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgInNoaWZ0IikpCi0gICAgICAgIG1vZCA9IGtXS0V2
ZW50TW9kaWZpZXJzU2hpZnRLZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobW9kaWZpZXIsICJhbHQiKSkKLSAgICAgICAgbW9kID0ga1dLRXZlbnRNb2RpZmllcnNBbHRL
ZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJtZXRh
IikpCi0gICAgICAgIG1vZCA9IGtXS0V2ZW50TW9kaWZpZXJzTWV0YUtleTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIk1vZGlmaWVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiBtb2RpZmllclJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBtb2RpZmllcktleS5n
ZXQoKSwgbW9kaWZpZXJSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGVuYWJsZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVuYWJs
ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gZW5hYmxlUmVmID0gYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShlbmFibGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGVuYWJsZUtleS5nZXQoKSwgZW5hYmxlUmVmLmdldCgpKTsK
LQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBi
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVl
KGJvZHksICJTdWJNZXNzYWdlIiwgIlNldFRvdWNoTW9kaWZpZXIiKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiTW9kaWZpZXIiLCBwYXJzZVRvdWNoTW9kaWZpZXIobW9kaWZpZXIpKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiRW5hYmxlIiwgZW5hYmxlKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAotCiB2b2lkIEV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OnNldFRvdWNoUG9pbnRSYWRpdXMoaW50IHJhZGl1c1gsIGludCByYWRpdXNZ
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRUb3VjaFBvaW50UmFkaXVzIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVz
c2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNYIikpOwotICAgIFdL
UmV0YWluUHRyPFdLVUludDY0UmVmPiB4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShyYWRp
dXNYKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmFkaXVz
WSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geVJlZiA9IGFkb3B0V0soV0tVSW50
NjRDcmVhdGUocmFkaXVzWSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVz
c2FnZSIsICJTZXRUb3VjaFBvaW50UmFkaXVzIik7CisgICAgc2V0VmFsdWUoYm9keSwgIlJhZGl1
c1giLCByYWRpdXNYKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUmFkaXVzWSIsIHJhZGl1c1kpOwor
ICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkp
OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoU3RhcnQoKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJU
b3VjaFN0YXJ0IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwot
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUo
Ym9keSwgIlN1Yk1lc3NhZ2UiLCAiVG91Y2hTdGFydCIpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OnRvdWNoTW92ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvdWNoTW92ZSIpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VL
ZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlRv
dWNoTW92ZSIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIs
IGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoRW5k
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikp
OwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVG91Y2hFbmQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5n
ZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAg
IGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJUb3VjaEVuZCIpOworICAgIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0
YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0
YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1
Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hDYW5jZWwiKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBz
dWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVz
c2FnZSIsICJUb3VjaENhbmNlbCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJF
dmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OmNsZWFyVG91Y2hQb2ludHMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhclRvdWNoUG9pbnRzIikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2Fn
ZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAi
Q2xlYXJUb3VjaFBvaW50cyIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnJlbGVhc2VUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURp
Y3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3Nh
Z2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVsZWFzZVRvdWNoUG9pbnQiKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBz
dWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5kZXhS
ZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwgaW5kZXhS
ZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsK
KyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Cisg
ICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiUmVsZWFzZVRvdWNoUG9pbnQiKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiSW5kZXgiLCBpbmRleCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFn
ZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbmNlbFRv
dWNoUG9pbnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2
NFJlZj4gaW5kZXhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBpbmRleEtleS5n
ZXQoKSwgaW5kZXhSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiQ2FuY2VsVG91Y2hQ
b2ludCIpOworICAgIHNldFZhbHVlKGJvZHksICJJbmRleCIsIGluZGV4KTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KKwogI2Vu
ZGlmCiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRv
d09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNldFBy
b3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgImV2ZW50U2VuZGVyIiwgdGhpcywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwg
ZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAiZXZlbnRT
ZW5kZXIiLCB0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIu
aCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29u
dHJvbGxlci5oCmluZGV4IDlhMmFmZDk1OGNjZDcwZWNkMjFlYzRlM2IzZmVjNGNmN2NjODViYTgu
LmVhNDM3ZmJkYmUwYzM0ODkwNTdlMzE2MDc1YWRlYTY1M2FkYjUxMGQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5k
aW5nQ29udHJvbGxlci5oCkBAIC0zMCwyNyArMzAsMjMgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tH
ZW9tZXRyeS5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAordHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
T3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1N0
cmluZyogSlNTdHJpbmdSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBK
U1ZhbHVlUmVmOworCiBuYW1lc3BhY2UgV1RSIHsKIAogc3RydWN0IE1vbml0b3JXaGVlbEV2ZW50
c09wdGlvbnMgewotICAgIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMoYm9vbCByZXNldExhdGNo
aW5nID0gdHJ1ZSkKLSAgICAgICAgOiByZXNldExhdGNoaW5nKHJlc2V0TGF0Y2hpbmcpCi0gICAg
eyB9Ci0KICAgICBib29sIHJlc2V0TGF0Y2hpbmcgeyB0cnVlIH07CiB9OwogCiBNb25pdG9yV2hl
ZWxFdmVudHNPcHRpb25zKiB0b01vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMoSlNDb250ZXh0UmVm
LCBKU1ZhbHVlUmVmKTsKIAotY2xhc3MgRXZlbnRTZW5kaW5nQ29udHJvbGxlciA6IHB1YmxpYyBK
U1dyYXBwYWJsZSB7CitjbGFzcyBFdmVudFNlbmRpbmdDb250cm9sbGVyIGZpbmFsIDogcHVibGlj
IEpTV3JhcHBhYmxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKTsK
LQotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdp
bmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIAotICAgIC8vIEpTV3JhcHBhYmxl
Ci0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOworICAgIHZvaWQgbWFrZVdp
bmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgdm9pZCBtb3VzZURvd24oaW50IGJ1dHRv
biwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5KTsKICAgICB2b2lkIG1vdXNlVXAoaW50IGJ1dHRv
biwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5KTsKQEAgLTczLDcgKzY5LDYgQEAgcHVibGljOgog
ICAgIHZvaWQga2V5RG93bihKU1N0cmluZ1JlZiBrZXksIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJh
eSwgaW50IGxvY2F0aW9uKTsKICAgICB2b2lkIHNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93bihK
U1N0cmluZ1JlZiBrZXkpOwogCi0gICAgLy8gWm9vbSBmdW5jdGlvbnMuCiAgICAgdm9pZCB0ZXh0
Wm9vbUluKCk7CiAgICAgdm9pZCB0ZXh0Wm9vbU91dCgpOwogICAgIHZvaWQgem9vbVBhZ2VJbigp
OwpAQCAtODEsMTAgKzc2LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2NhbGVQYWdlQnkoZG91Ymxl
IHNjYWxlLCBkb3VibGUgeCwgZG91YmxlIHkpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
LSAgICAvLyBUb3VjaCBldmVudHMuCiAgICAgdm9pZCBhZGRUb3VjaFBvaW50KGludCB4LCBpbnQg
eSk7CiAgICAgdm9pZCB1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KTsK
LSAgICB2b2lkIHNldFRvdWNoTW9kaWZpZXIoY29uc3QgSlNTdHJpbmdSZWYgJm1vZGlmaWVyLCBi
b29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRUb3VjaE1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlm
aWVyLCBib29sIGVuYWJsZSk7CiAgICAgdm9pZCBzZXRUb3VjaFBvaW50UmFkaXVzKGludCByYWRp
dXNYLCBpbnQgcmFkaXVzWSk7CiAgICAgdm9pZCB0b3VjaFN0YXJ0KCk7CiAgICAgdm9pZCB0b3Vj
aE1vdmUoKTsKQEAgLTk2LDcgKzkwLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgot
ICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKTsKKyAgICBFdmVudFNlbmRpbmdDb250cm9sbGVy
KCkgPSBkZWZhdWx0OworCisgICAgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKSBmaW5hbDsKKwog
ICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKICAgICBib29sIG1fc2VudFdoZWVsUGhhc2VFbmRPckNh
bmNlbCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3NlbnRXaGVlbE1vbWVudHVtUGhhc2VFbmQgeyBm
YWxzZSB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9HQ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDkzNThmNGEwZGU1YjNkOWJjMzE2YjVlMGFkZmQwNDEy
NjY0MjU4ZmYuLmRiNDI1ZTc1ZTgwYjA1NDA4YmRmM2UzZTM2NDc2NTEwOTYzMGQzZmQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVy
LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJv
bGxlci5jcHAKQEAgLTM3LDE0ICszNyw2IEBAIFJlZjxHQ0NvbnRyb2xsZXI+IEdDQ29udHJvbGxl
cjo6Y3JlYXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHQ0NvbnRyb2xsZXIpOwogfQog
Ci1HQ0NvbnRyb2xsZXI6OkdDQ29udHJvbGxlcigpCi17Ci19Ci0KLUdDQ29udHJvbGxlcjo6fkdD
Q29udHJvbGxlcigpCi17Ci19Ci0KIEpTQ2xhc3NSZWYgR0NDb250cm9sbGVyOjp3cmFwcGVyQ2xh
c3MoKQogewogICAgIHJldHVybiBKU0dDQ29udHJvbGxlcjo6Z0NDb250cm9sbGVyQ2xhc3MoKTsK
QEAgLTY1LDExICs1Nyw5IEBAIHNpemVfdCBHQ0NvbnRyb2xsZXI6OmdldEpTT2JqZWN0Q291bnQo
KQogICAgIHJldHVybiBXS0J1bmRsZUdldEphdmFTY3JpcHRPYmplY3RzQ291bnQoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpKTsKIH0KIAotLy8gT2JqZWN0IENyZWF0aW9uCi0K
LXZvaWQgR0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQg
R0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewot
ICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgIkdDQ29udHJvbGxlciIsIHRo
aXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4
dCwgIkdDQ29udHJvbGxlciIsIHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVy
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5o
CmluZGV4IGQzNDljMWNlOTkwZTg3ZDdkZjJmY2I4YzgyODg1YmNhMzA1NzJhMGIuLjM0YWIyNDI1
MTM4YzFkNzVmYjI0YTI1MTA3NDM2NzhkODE5ZWRjMjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaApAQCAtMjYsMjYgKzI2
LDI2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTV3JhcHBhYmxlLmgiCi0jaW5jbHVk
ZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK3R5cGVkZWYgY29uc3Qg
c3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwogCiBuYW1lc3BhY2UgV1RSIHsK
IAotY2xhc3MgR0NDb250cm9sbGVyIDogcHVibGljIEpTV3JhcHBhYmxlIHsKK2NsYXNzIEdDQ29u
dHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxHQ0NvbnRyb2xsZXI+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfkdDQ29udHJvbGxlcigp
OwotCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYg
d2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCi0gICAgLy8gSlNXcmFwcGFi
bGUKLSAgICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CisgICAgdm9pZCBtYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICB2b2lkIGNvbGxlY3QoKTsKICAgICB2
b2lkIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZChib29sIHdhaXRVbnRpbERvbmUpOwogICAgIHNp
emVfdCBnZXRKU09iamVjdENvdW50KCk7CiAKIHByaXZhdGU6Ci0gICAgR0NDb250cm9sbGVyKCk7
CisgICAgR0NDb250cm9sbGVyKCkgPSBkZWZhdWx0OworCisgICAgSlNDbGFzc1JlZiB3cmFwcGVy
Q2xhc3MoKSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApp
bmRleCA3YWU4MWJiNGI1OTA5NmM1OGM4YjVhMTRjODhjNGMzM2Y4YzE0NTcxLi43ZjE2MjE1MDc0
YTAyOTdmMmE2NzljMTk1NDgzYWQyOTgwOWY4YTIyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtMjcs
OCArMjcsOCBAQAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAKICNpbmNsdWRlICJBY3Rp
dmF0ZUZvbnRzLmgiCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IkluamVjdGVkQnVuZGxlUGFnZS5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09w
dGlvbnMuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGUuaD4KQEAgLTExOCwxOCArMTE4LDEz
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZENyZWF0ZVBhZ2UoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UpCiAgICAgaWYgKCFpc01haW5QYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSW5pdGlhbGl6YXRpb24iKSk7CiAgICAgV0tUeXBlUmVmIHJlc3VsdCA9
IG51bGxwdHI7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UobV9idW5kbGUsIG1lc3NzYWdlTmFtZS5nZXQo
KSwgbnVsbHB0ciwgJnJlc3VsdCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KG1fYnVuZGxlLCB0b1dLKCJJbml0aWFsaXphdGlvbiIpLmdldCgpLCBudWxscHRyLCAmcmVzdWx0
KTsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQocmVzdWx0KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkgPSBhZG9wdFdL
KHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4ocmVzdWx0KSk7CisgICAgYXV0byBpbml0aWFs
aXphdGlvbkRpY3Rpb25hcnkgPSBhZG9wdFdLKGRpY3Rpb25hcnlWYWx1ZShyZXN1bHQpKTsKIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXN1bWVUZXN0aW5nS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzdW1lVGVzdGluZyIpKTsKLSAgICBXS1R5
cGVSZWYgcmVzdW1lVGVzdGluZ1ZhbHVlID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShpbml0
aWFsaXphdGlvbkRpY3Rpb25hcnkuZ2V0KCksIHJlc3VtZVRlc3RpbmdLZXkuZ2V0KCkpOwotICAg
IEFTU0VSVChXS0dldFR5cGVJRChyZXN1bWVUZXN0aW5nVmFsdWUpID09IFdLQm9vbGVhbkdldFR5
cGVJRCgpKTsKLSAgICBpZiAoV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihyZXN1bWVUZXN0aW5nVmFsdWUpKSkKKyAgICBpZiAoYm9vbGVhblZhbHVlKGluaXRpYWxp
emF0aW9uRGljdGlvbmFyeS5nZXQoKSwgIlJlc3VtZVRlc3RpbmciKSkKICAgICAgICAgYmVnaW5U
ZXN0aW5nKGluaXRpYWxpemF0aW9uRGljdGlvbmFyeS5nZXQoKSwgQmVnaW5nVGVzdGluZ01vZGU6
OlJlc3VtZSk7CiB9CiAKQEAgLTE3OSwxNiArMTc0LDE5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnJlc2V0TG9jYWxTZXR0aW5ncygpCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogfQogCi12
b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQordm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UoV0tTdHJpbmdSZWYsIFdLVHlwZVJlZikKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkVycm9yIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJv
ck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5r
bm93biIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKG1fYnVuZGxlLCBlcnJvck1lc3NhZ2VO
YW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRsZVBvc3RNZXNz
YWdlKG1fYnVuZGxlLCB0b1dLKCJFcnJvciIpLmdldCgpLCB0b1dLKCJVbmtub3duIikuZ2V0KCkp
OworfQorCit2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdl
UmVmIHBhZ2UsIGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiBib2R5KQoreworICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIHRvV0sobmFtZSkuZ2V0KCksIGJvZHkpOwogfQogCiBz
dGF0aWMgdm9pZCBwb3N0R0NUYXNrKHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgV0tCdW5kbGVQYWdl
UmVmIHBhZ2UgPSByZWludGVycHJldF9jYXN0PFdLQnVuZGxlUGFnZVJlZj4oY29udGV4dCk7Cisg
ICAgYXV0byBwYWdlID0gcmVpbnRlcnByZXRfY2FzdDxXS0J1bmRsZVBhZ2VSZWY+KGNvbnRleHQp
OwogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXBvcnRMaXZlRG9jdW1lbnRzKHBh
Z2UpOwogICAgIFdLUmVsZWFzZShwYWdlKTsKIH0KQEAgLTE5OSw2NyArMTk3LDQ0IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OnJlcG9ydExpdmVEb2N1bWVudHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2Up
CiAgICAgV0tCdW5kbGVSZWxlYXNlTWVtb3J5KG1fYnVuZGxlKTsKIAogICAgIGNvbnN0IGJvb2wg
ZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwID0gdHJ1ZTsKLSAgICBhdXRvIGRvY3VtZW50VVJM
cyA9IGFkb3B0V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VH
cm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwKSk7Ci0gICAgYXV0byBhY2tNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxpdmVEb2N1bWVu
dHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5hbWUu
Z2V0KCksIGRvY3VtZW50VVJMcy5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsICJM
aXZlRG9jdW1lbnRzIiwgYWRvcHRXSyhXS0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5k
bGUsIG1fcGFnZUdyb3VwLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXApKSk7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQog
ewogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQmVn
aW5UZXN0IikpIHsKICAgICAgICAgQVNTRVJUKG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gZHVtcFBpeGVsc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkR1bXBQaXhlbHMiKSk7Ci0gICAgICAgIG1fZHVtcFBpeGVscyA9IFdLQm9vbGVh
bkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGR1bXBQaXhlbHNLZXkuZ2V0KCkpKSk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVvdXRLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lb3V0IikpOwotICAgICAgICBtX3RpbWVvdXQg
PSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCB0aW1lb3V0S2V5LmdldCgpKSkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikpOwotICAgICAgICBt
X2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycktleS5nZXQoKSkpKTsKLQotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2siKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBhY2tNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkJlZ2luVGVzdCIpKTsKLSAgICAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFn
ZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGFja01lc3NhZ2VCb2R5LmdldCgpKTsKLQorICAgICAg
ICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIG1fZHVtcFBpeGVscyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJEdW1wUGl4ZWxzIik7CisgICAgICAgIG1fdGltZW91dCA9IFNlY29uZHM6OmZyb21N
aWxsaXNlY29uZHMoV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4odmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVGltZW91dCIpKSkpOworICAgICAgICBtX2R1bXBK
U0NvbnNvbGVMb2dJblN0ZEVyciA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKHBh
Z2UsICJBY2siLCAiQmVnaW5UZXN0Iik7CiAgICAgICAgIGJlZ2luVGVzdGluZyhtZXNzYWdlQm9k
eURpY3Rpb25hcnksIEJlZ2luZ1Rlc3RpbmdNb2RlOjpOZXcpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJSZXNldCIpKSB7CiAgICAgICAgIEFTU0VSVChtZXNzYWdlQm9keSk7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBqc2NPcHRpb25zS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSlNDT3B0aW9ucyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGpzY09wdGlvbnNTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGpzY09wdGlvbnNLZXkuZ2V0KCkp
KTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUo
bWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGpzY09wdGlvbnNTdHJpbmcgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSlNDT3B0aW9ucyIp
KTsKICAgICAgICAgaWYgKGpzY09wdGlvbnNTdHJpbmcpIHsKICAgICAgICAgICAgIFN0cmluZyBv
cHRpb25zID0gdG9XVEZTdHJpbmcoanNjT3B0aW9uc1N0cmluZyk7CiAgICAgICAgICAgICBKU0M6
Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9ucy51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgfQot
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzaG91bGRHQ0tleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNob3VsZEdDIikpOwotICAgICAgICBib29s
IHNob3VsZEdDID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc2hvdWxkR0NL
ZXkuZ2V0KCkpKSk7CisgICAgICAgIGJvb2wgc2hvdWxkR0MgPSBib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiU2hvdWxkR0MiKTsKICAgICAgICAgaWYgKHNob3VsZEdDKQogICAg
ICAgICAgICAgV0tCdW5kbGVHYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKG1fYnVuZGxl
KTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheElzb2xhdGVkTW9kZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWUiKSk7Ci0g
ICAgICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUgPSBXS0Jvb2xlYW5HZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBheElzb2xhdGVkTW9kZUtleS5nZXQoKSkpKTsKKyAgICAgICAg
bV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIik7CiAjZW5kaWYKICAgICAg
ICAgCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbGxvd2VkSG9zdHNLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBbGxvd2VkSG9zdHMiKSk7Ci0g
ICAgICAgIFdLVHlwZVJlZiBhbGxvd2VkSG9zdHNWYWx1ZSA9IFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhbGxvd2VkSG9zdHNLZXkuZ2V0KCkpOworICAg
ICAgICBhdXRvIGFsbG93ZWRIb3N0c1ZhbHVlID0gdmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiQWxsb3dlZEhvc3RzIik7CiAgICAgICAgIGlmIChhbGxvd2VkSG9zdHNWYWx1ZSAmJiBXS0dl
dFR5cGVJRChhbGxvd2VkSG9zdHNWYWx1ZSkgPT0gV0tBcnJheUdldFR5cGVJRCgpKSB7CiAgICAg
ICAgICAgICBtX2FsbG93ZWRIb3N0cy5jbGVhcigpOwotCi0gICAgICAgICAgICBXS0FycmF5UmVm
IGFsbG93ZWRIb3N0c0FycmF5ID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4oYWxsb3dlZEhvc3Rz
VmFsdWUpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBXS0FycmF5R2V0
U2l6ZShhbGxvd2VkSG9zdHNBcnJheSk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChhbGxvd2VkSG9zdHNBcnJh
eSwgaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRlbSkgPT0g
V0tTdHJpbmdHZXRUeXBlSUQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9hbGxvd2VkSG9zdHMu
YXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBhcnJheSA9IHN0YXRpY19jYXN0PFdLQXJyYXlS
ZWY+KGFsbG93ZWRIb3N0c1ZhbHVlKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBz
aXplID0gV0tBcnJheUdldFNpemUoYXJyYXkpOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAg
ICAgIG1fYWxsb3dlZEhvc3RzLmFwcGVuZCh0b1dURlN0cmluZyhXS0FycmF5R2V0SXRlbUF0SW5k
ZXgoYXJyYXksIGkpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBtX3N0YXRlID0gSWRsZTsKQEAg
LTI3NSw5ICsyNTAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRv
UGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRMaXZlRG9jdW1lbnRzIikp
IHsKICAgICAgICAgY29uc3QgYm9vbCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXAgPSBmYWxz
ZTsKLSAgICAgICAgYXV0byBkb2N1bWVudFVSTHMgPSBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURv
Y3VtZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VH
cm91cCkpOwotICAgICAgICBhdXRvIGFja01lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGl2ZURvY3VtZW50cyIpKTsKLSAgICAgICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGRvY3VtZW50VVJMcy5n
ZXQoKSk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiTGl2ZURvY3VtZW50cyIsIGFkb3B0V0so
V0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVk
ZURvY3VtZW50c0luUGFnZUdyb3VwKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00
MjgsNyArNDAxLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1Bh
Z2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICAgICAgVmVjdG9yPFN0
cmluZz4gZG9tYWluczsKICAgICAgICAgZG9tYWlucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNp
emUpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAg
ICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5
LCBpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21h
aW5zQXJyYXksIGkpOwogICAgICAgICAgICAgaWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRlbSkg
PT0gV0tTdHJpbmdHZXRUeXBlSUQoKSkKICAgICAgICAgICAgICAgICBkb21haW5zLmFwcGVuZCh0
b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKICAgICAgICAgfQpA
QCAtNDQ2LDcgKzQxOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdl
VG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGRvbWFpbnM7CiAgICAgICAgIGRvbWFpbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShzaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNB
cnJheSwgaSk7CisgICAgICAgICAgICBhdXRvIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgo
ZG9tYWluc0FycmF5LCBpKTsKICAgICAgICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0
ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpCiAgICAgICAgICAgICAgICAgZG9tYWlucy51bmNo
ZWNrZWRBcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7
CiAgICAgICAgIH0KQEAgLTQ2NywxNyArNDQwLDEwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRp
ZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBt
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJDYWxsVUlTaWRlU2NyaXB0Q2FsbGJhY2siKSkgewotICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc3VsdEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc3VsdCIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwotCi0gICAgICAgIHVu
c2lnbmVkIGNhbGxiYWNrSUQgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGNhbGxiYWNrSURLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgcmVz
dWx0U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCByZXN1bHRLZXkuZ2V0KCkpKTsKLSAgICAgICAg
YXV0byByZXN1bHRKU1N0cmluZyA9IHRvSlMocmVzdWx0U3RyaW5nKTsKLQotICAgICAgICBtX3Rl
c3RSdW5uZXItPnJ1blVJU2NyaXB0Q2FsbGJhY2soY2FsbGJhY2tJRCwgcmVzdWx0SlNTdHJpbmcu
Z2V0KCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlW
YWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gY2FsbGJhY2tJRCA9IHVpbnQ2NFZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNhbGxiYWNrSUQiKTsKKyAgICAgICAgYXV0byByZXN1
bHRTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJSZXN1bHQiKTsK
KyAgICAgICAgbV90ZXN0UnVubmVyLT5ydW5VSVNjcmlwdENhbGxiYWNrKGNhbGxiYWNrSUQsIHRv
SlMocmVzdWx0U3RyaW5nKS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ5
OCwyOSArNDY0LDE3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9Q
YWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQiKSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYg
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNz
YWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG51bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25L
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOdW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOdW1iZXJP
ZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJh
Y3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUb3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25E
YXlzU2luY2VVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhV
c2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJNZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2Vy
SW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTnVt
YmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUb3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkiKSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuU3ViRnJhbWVXaXRo
b3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVk
aWFuU3ViRnJhbWVXaXRob3V0VUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkiKSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3Rz
V2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9w
M01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUlLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVkaWFuRGF0YVJlY29y
ZHNSZW1vdmVkV2l0aG91dFVJIikpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXMgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzS2V5LmdldCgpKSkpOwotICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24g
PSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG51bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpKTsKLSAgICAgICAg
dW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9u
ID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlBy
ZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAg
ICAgIHVuc2lnbmVkIHRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNT
aW5jZVVzZXJJbnRlcmFjdGlvbiA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNl
VXNlckludGVyYWN0aW9uS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCBtZWRpYW5EYXlz
U2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24g
PSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1lZGlhbkRheXNT
aW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbktl
eS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVJID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0
b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAg
IHVuc2lnbmVkIHRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2
NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJS2V5
LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0
VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRp
YW5TdWJSZXNvdXJjZVdpdGhvdXRVSUtleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9w
M01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZh
bHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSUtl
eS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3Zl
ZFdpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
dG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSUtleS5nZXQoKSkpKTsKKyAgICAg
ICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJv
ZHkpOworICAgICAgICBhdXRvIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzID0gdWludDY0VmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMiKTsK
KyAgICAgICAgYXV0byBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJOdW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBudW1iZXJPZlBy
ZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2Vy
SW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJUb3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25E
YXlzU2luY2VVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBtZWRpYW5EYXlzU2luY2VV
c2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24gPSB1aW50
NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJNZWRpYW5EYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0
byB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkgPSB1aW50NjRWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJUb3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUki
KTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkgPSB1aW50NjRWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkiKTsK
KyAgICAgICAgYXV0byB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkgPSB1aW50NjRWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUki
KTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJID0gdWlu
dDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0
c1dpdGhvdXRVSSIpOworICAgICAgICBhdXRvIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRX
aXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTWVkaWFu
RGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJIik7CiAKICAgICAgICAgbV90ZXN0UnVubmVyLT5z
dGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sobnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXMsIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgbnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB0b3BQcmV2YWxlbnRS
ZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24sIG1lZGlh
bkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFj
dGlvbiwgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJLCB0b3AzTWVkaWFuU3Vi
RnJhbWVXaXRob3V0VUksIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSwgdG9wM01lZGlh
blVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdp
dGhvdXRVSSk7CiAgICAgICAgIHJldHVybjsKQEAgLTU0MSwzMSArNDk1LDcgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2Us
IFdLU3RyaW5nUmVmIG0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRXJyb3IiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVy
cm9yTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJV
bmtub3duIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGVycm9yTWVzc2Fn
ZU5hbWUuZ2V0KCksIGVycm9yTWVzc2FnZUJvZHkuZ2V0KCkpOwotfQotCi1ib29sIEluamVjdGVk
QnVuZGxlOjpib29sZWFuRm9yS2V5KFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBj
aGFyKiBrZXkpCi17Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhrZXkpKTsKLSAgICBXS1R5cGVSZWYgdmFs
dWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHdrS2V5LmdldCgpKTsK
LSAgICBpZiAoV0tHZXRUeXBlSUQodmFsdWUpICE9IFdLQm9vbGVhbkdldFR5cGVJRCgpKSB7Ci0g
ICAgICAgIG91dHB1dFRleHQobWFrZVN0cmluZygiQm9vbGVhbiB2YWx1ZSBmb3Iga2V5Iiwga2V5
LCAiIG5vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5XG4iKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4odmFsdWUpKTsKLX0KLQotU3RyaW5nIEluamVjdGVkQnVuZGxlOjpzdHJpbmdGb3JLZXko
V0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKLXsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKGtleSkpOwotICAgIFdLU3RyaW5nUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoZGljdGlvbmFyeSwgd2tLZXkuZ2V0
KCkpKTsKLSAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgIG91dHB1dFRleHQobWFrZVN0cmluZygi
U3RyaW5nIHZhbHVlIGZvciBrZXkiLCBrZXksICIgbm90IGZvdW5kIGluIGRpY3Rpb25hcnlcbiIp
KTsKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiB0b1dU
RlN0cmluZyh2YWx1ZSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFcnJvciIsICJVbmtub3duIik7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmJlZ2luVGVzdGluZyhXS0RpY3Rpb25hcnlSZWYg
c2V0dGluZ3MsIEJlZ2luZ1Rlc3RpbmdNb2RlIHRlc3RpbmdNb2RlKQpAQCAtNTk4LDExICs1Mjgs
MTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0aW5nKFdLRGljdGlvbmFyeVJlZiBz
ZXR0aW5ncywgQmVnaW5nVGVzdGluZ01vZGUgdGUKICAgICBXS0J1bmRsZVNldEFsbG93U3RvcmFn
ZUFjY2Vzc0Zyb21GaWxlVVJMUyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGZhbHNlKTsKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgV0tCdW5kbGVQYWdlU2V0VXNlVGVzdGluZ1ZpZXdw
b3J0Q29uZmlndXJhdGlvbihwYWdlKCktPnBhZ2UoKSwgIWJvb2xlYW5Gb3JLZXkoc2V0dGluZ3Ms
ICJVc2VGbGV4aWJsZVZpZXdwb3J0IikpOworICAgIFdLQnVuZGxlUGFnZVNldFVzZVRlc3RpbmdW
aWV3cG9ydENvbmZpZ3VyYXRpb24ocGFnZSgpLT5wYWdlKCksICFib29sZWFuVmFsdWUoc2V0dGlu
Z3MsICJVc2VGbGV4aWJsZVZpZXdwb3J0IikpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzRm9yVGVzdGluZyhzdHJpbmdGb3JLZXkoc2V0dGluZ3MsICJhZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlcyIpKTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBw
b3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyh0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShzZXR0aW5n
cywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIikpKTsKICNlbmRpZgogCiAgICAgbV90
ZXN0UnVubmVyLT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVlKTsKQEAgLTY2MCwyNSArNTkwLDE1IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRvbmUoKQogICAgIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXItPnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKICNlbmRpZgogCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGRvbmVNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkRvbmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gZG9uZU1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVzdWx0SXNQZW5kaW5n
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHRJ
c1BlbmRpbmciKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwaXhlbFJlc3VsdElz
UGVuZGluZyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgcGl4ZWxS
ZXN1bHRJc1BlbmRpbmdLZXkuZ2V0KCksIHBpeGVsUmVzdWx0SXNQZW5kaW5nLmdldCgpKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CiAKLSAg
ICBpZiAoIW1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBpeGVsUmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiUGl4ZWxSZXN1bHQiKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZG9u
ZU1lc3NhZ2VCb2R5LmdldCgpLCBwaXhlbFJlc3VsdEtleS5nZXQoKSwgbV9waXhlbFJlc3VsdC5n
ZXQoKSk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlcGFpbnRSZWN0
c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlcGFpbnRSZWN0
cyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgcmVw
YWludFJlY3RzS2V5LmdldCgpLCBtX3JlcGFpbnRSZWN0cy5nZXQoKSk7CisgICAgc2V0VmFsdWUo
Ym9keSwgIlBpeGVsUmVzdWx0SXNQZW5kaW5nIiwgbV9waXhlbFJlc3VsdElzUGVuZGluZyk7Cisg
ICAgaWYgKCFtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKQorICAgICAgICBzZXRWYWx1ZShib2R5LCAi
UGl4ZWxSZXN1bHQiLCBtX3BpeGVsUmVzdWx0LmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
UmVwYWludFJlY3RzIiwgbV9yZXBhaW50UmVjdHMuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHks
ICJBdWRpb1Jlc3VsdCIsIG1fYXVkaW9SZXN1bHQuZ2V0KCkpOwogCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGF1ZGlvUmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQXVkaW9SZXN1bHQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkb25l
TWVzc2FnZUJvZHkuZ2V0KCksIGF1ZGlvUmVzdWx0S2V5LmdldCgpLCBtX2F1ZGlvUmVzdWx0Lmdl
dCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9u
b3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgZG9uZU1lc3NhZ2VOYW1lLmdldCgpLCBkb25lTWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5
bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgdG9XSygiRG9uZSIpLmdldCgpLCBib2R5Lmdl
dCgpKTsKIAogICAgIGNsb3NlT3RoZXJQYWdlcygpOwogCkBAIC02OTEsOSArNjExLDggQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6Y2xvc2VPdGhlclBhZ2VzKCkKICAgICBzaXplX3Qgc2l6ZSA9IG1f
cGFnZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKQogICAg
ICAgICBwYWdlc1RvQ2xvc2UuYXBwZW5kKG1fcGFnZXNbaV0tPnBhZ2UoKSk7Ci0gICAgc2l6ZSA9
IHBhZ2VzVG9DbG9zZS5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIFdLQnVuZGxlUGFnZUNsb3NlKHBhZ2VzVG9DbG9zZVtpXSk7CisgICAgZm9y
IChhdXRvJiBwYWdlIDogcGFnZXNUb0Nsb3NlKQorICAgICAgICBXS0J1bmRsZVBhZ2VDbG9zZShw
YWdlKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JB
bGxQYWdlcyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQpAQCAtNzA5LDEzICs2MjgsOSBA
QCB2b2lkIEluamVjdGVkQnVuZGxlOjpkdW1wVG9TdGRFcnIoY29uc3QgU3RyaW5nJiBvdXRwdXQp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAob3V0cHV0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBUb1N0ZEVyciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHk7Ci0gICAgaWYgKGF1dG8gdXRmOCA9IG91
dHB1dC50cnlHZXRVdGY4KCkpCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1dGY4LT5kYXRhKCkpKTsKLSAgICBlbHNlCi0gICAgICAg
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiT3V0
IG9mIG1lbW9yeVxuIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIC8vIEZJWE1F
OiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBjb252ZXJ0IHRvIFVURi04IGluc3RlYWQgb2YgdXNpbmcg
dG9XSz8KKyAgICBhdXRvIHN0cmluZyA9IG91dHB1dC50cnlHZXRVdGY4KCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJEdW1wVG9TdGRFcnIiLCBzdHJpbmcgPyBzdHJpbmctPmRhdGEoKSA6ICJPdXQg
b2YgbWVtb3J5XG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dChjb25z
dCBTdHJpbmcmIG91dHB1dCkKQEAgLTcyNCwyODAgKzYzOSwxNTUgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6b3V0cHV0VGV4dChjb25zdCBTdHJpbmcmIG91dHB1dCkKICAgICAgICAgcmV0dXJuOwog
ICAgIGlmIChvdXRwdXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVGV4dE91dHB1dCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZUJvZHk7Ci0gICAgaWYgKGF1dG8gdXRmOCA9IG91dHB1dC50cnlHZXRVdGY4KCkpCi0g
ICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
Zyh1dGY4LT5kYXRhKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiT3V0IG9mIG1lbW9yeVxuIikpOworICAg
IC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBjb252ZXJ0IHRvIFVURi04IGluc3RlYWQg
b2YgdXNpbmcgdG9XSz8KKyAgICBhdXRvIHN0cmluZyA9IG91dHB1dC50cnlHZXRVdGY4KCk7CiAg
ICAgLy8gV2UgdXNlIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9u
b3VzTW9kZSgpIGluc3RlYWQgb2YgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoKSB0byBtYWtlIHN1
cmUgdGhhdCBhbGwgdGV4dCBvdXRwdXQKICAgICAvLyBpcyBkb25lIHZpYSBhc3luY2hyb25vdXMg
SVBDLCBldmVuIGlmIHRoZSBjb25uZWN0aW9uIGlzIGluIGZ1bGx5IHN5bmNocm9ub3VzIG1vZGUg
ZHVlIHRvIGEgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoKQog
ICAgIC8vIGNhbGwuIE90aGVyd2lzZSwgbWVzc2FnZXMgbG9nZ2VkIHZpYSBzeW5jIGFuZCBhc3lu
YyBJUEMgbWF5IGVuZCB1cCBvdXQgb2Ygb3JkZXIgYW5kIGNhdXNlIGZsYWtpbmVzcy4KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNNb2RlKHBhZ2UoKS0+
cGFnZSgpLCB0b1dLKCJUZXh0T3V0cHV0IikuZ2V0KCksIHRvV0soc3RyaW5nID8gc3RyaW5nLT5k
YXRhKCkgOiAiT3V0IG9mIG1lbW9yeVxuIikuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbCB2YWx1ZSkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIkJlZm9yZVVubG9hZFJldHVyblZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RBZGRDaHJvbWVJbnB1
dEZpZWxkKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRDaHJvbWVJbnB1dEZpZWxk
IikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJBZGRDaHJvbWVJbnB1dEZpZWxk
Iik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RSZW1vdmVDaHJvbWVJbnB1dEZpZWxk
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZW1vdmVDaHJvbWVJbnB1dEZpZWxkIikp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJSZW1vdmVDaHJvbWVJbnB1dEZpZWxk
Iik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RGb2N1c1dlYlZpZXcoKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvY3VzV2ViVmlldyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiRm9jdXNXZWJWaWV3Iik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnBvc3RTZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlIGJhY2tpbmdTY2FsZUZhY3RvcikKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRCYWNraW5nU2NhbGVGYWN0b3IiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNy
ZWF0ZShiYWNraW5nU2NhbGVGYWN0b3IpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShw
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIlNldEJhY2tpbmdTY2FsZUZhY3RvciIsIGFkb3B0V0soV0tEb3Vi
bGVDcmVhdGUoYmFja2luZ1NjYWxlRmFjdG9yKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
Ojpwb3N0U2V0V2luZG93SXNLZXkoYm9vbCBpc0tleSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRXaW5kb3dJc0tleSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNLZXkpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBhZ2VQ
b3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0
V2luZG93SXNLZXkiKS5nZXQoKSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNLZXkpKS5nZXQo
KSwgMCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRWaWV3U2l6ZShkb3VibGUg
d2lkdGgsIGRvdWJsZSBoZWlnaHQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Vmll
d1NpemUiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aWR0aCIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaGVpZ2h0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiaGVpZ2h0IikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gd2lkdGhXSyA9IGFkb3B0V0soV0tE
b3VibGVDcmVhdGUod2lkdGgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5
LmdldCgpLCB3aWR0aEtleS5nZXQoKSwgd2lkdGhXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS0RvdWJsZVJlZj4gaGVpZ2h0V0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGhlaWdodCkp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGhlaWdodEtleS5n
ZXQoKSwgaGVpZ2h0V0suZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJ3aWR0aCIsIHdpZHRoKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiaGVpZ2h0IiwgaGVpZ2h0KTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0Vmll
d1NpemUiKS5nZXQoKSwgYm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKHVpbnQ2NF90IG5vdGlmaWNhdGlvbklE
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xp
Y2siKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShub3RpZmljYXRpb25JRCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIs
IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90aWZpY2F0aW9uSUQpKSk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OnBvc3RTZXRBZGRzVmlzaXRlZExpbmtzKGJvb2wgYWRkc1Zpc2l0ZWRMaW5r
cykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBZGRzVmlzaXRlZExpbmtzIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShhZGRzVmlzaXRlZExpbmtzKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3Nh
Z2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRBZGRzVmlzaXRlZExpbmtzIiwgYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoYWRkc1Zpc2l0ZWRMaW5rcykpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRHZW9sb2NhdGlvblBlcm1pc3Npb24iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVu
YWJsZWQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IlNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJs
ZWQpKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0
dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGlu
ZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29s
IHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIEluamVjdGVkQnVu
ZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBs
b25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0
aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcs
IE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGxhdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJsYXRpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbGF0
aXR1ZGVXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUobGF0aXR1ZGUpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBsYXRpdHVkZUtleVdLLmdldCgpLCBsYXRp
dHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsb25naXR1ZGVL
ZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxvbmdpdHVkZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbG9uZ2l0dWRlV0sgPSBhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKGxvbmdpdHVkZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2Fn
ZUJvZHkuZ2V0KCksIGxvbmdpdHVkZUtleVdLLmdldCgpLCBsb25naXR1ZGVXSy5nZXQoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFjY3VyYWN5IikpOwotICAgIFdLUmV0YWluUHRy
PFdLRG91YmxlUmVmPiBhY2N1cmFjeVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShhY2N1cmFj
eSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFjY3VyYWN5
S2V5V0suZ2V0KCksIGFjY3VyYWN5V0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHByb3ZpZGVzQWx0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBwcm92aWRlc0FsdGl0dWRlV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92
aWRlc0FsdGl0dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgcHJvdmlkZXNBbHRpdHVkZUtleVdLLmdldCgpLCBwcm92aWRlc0FsdGl0dWRlV0suZ2V0KCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRlS2V5V0sgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVkZSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0RvdWJsZVJlZj4gYWx0aXR1ZGVXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYWx0
aXR1ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhbHRp
dHVkZUtleVdLLmdldCgpLCBhbHRpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5KSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZUFj
Y3VyYWN5S2V5V0suZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLLmdldCgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVkZUFjY3VyYWN5IikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBhbHRpdHVkZUFjY3VyYWN5V0sgPSBhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKGFsdGl0dWRlQWNjdXJhY3kpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhbHRpdHVkZUFjY3VyYWN5S2V5V0suZ2V0KCksIGFsdGl0
dWRlQWNjdXJhY3lXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJv
dmlkZXNIZWFkaW5nS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJwcm92aWRlc0hlYWRpbmciKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92
aWRlc0hlYWRpbmdXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzSGVhZGluZykp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzSGVh
ZGluZ0tleVdLLmdldCgpLCBwcm92aWRlc0hlYWRpbmdXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaGVhZGluZ0tleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiaGVhZGluZyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4g
aGVhZGluZ1dLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShoZWFkaW5nKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgaGVhZGluZ0tleVdLLmdldCgpLCBoZWFk
aW5nV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzU3Bl
ZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVz
U3BlZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc1NwZWVkV0sg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92aWRlc1NwZWVkKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNTcGVlZEtleVdLLmdldCgpLCBw
cm92aWRlc1NwZWVkV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNw
ZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzcGVlZCIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gc3BlZWRXSyA9IGFkb3B0V0soV0tEb3Vi
bGVDcmVhdGUoc3BlZWQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5Lmdl
dCgpLCBzcGVlZEtleVdLLmdldCgpLCBzcGVlZFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBwcm92aWRlc0Zsb29yTGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzRmxvb3JMZXZlbCIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzRmxvb3JMZXZlbFdLID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUocHJvdmlkZXNGbG9vckxldmVsKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSht
ZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNGbG9vckxldmVsS2V5V0suZ2V0KCksIHByb3ZpZGVz
Rmxvb3JMZXZlbFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmbG9v
ckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmbG9v
ckxldmVsIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBmbG9vckxldmVsV0sgPSBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGZsb29yTGV2ZWwpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBmbG9vckxldmVsS2V5V0suZ2V0KCksIGZsb29yTGV2ZWxX
Sy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
ImxhdGl0dWRlIiwgbGF0aXR1ZGUpOworICAgIHNldFZhbHVlKGJvZHksICJsb25naXR1ZGUiLCBs
b25naXR1ZGUpOworICAgIHNldFZhbHVlKGJvZHksICJhY2N1cmFjeSIsIGFjY3VyYWN5KTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiYWx0aXR1ZGUiLCBhbHRpdHVkZSk7CisgICAgc2V0VmFsdWUoYm9k
eSwgImFsdGl0dWRlQWNjdXJhY3kiLCBhbHRpdHVkZUFjY3VyYWN5KTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiaGVhZGluZyIsIGhlYWRpbmcpOworICAgIHNldFZhbHVlKGJvZHksICJzcGVlZCIsIHNw
ZWVkKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiZmxvb3JMZXZlbCIsIGZsb29yTGV2ZWwpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iLCBib2R5KTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWls
YWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IiKSk7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBlcnJvck1lc3NhZ2UpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yIiwgZXJyb3JNZXNzYWdlKTsKIH0KIAogYm9vbCBJ
bmplY3RlZEJ1bmRsZTo6aXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29uc3QKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpOwotICAg
IFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
MCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBpc0FjdGl2
ZSA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXN1bHRUb1Bhc3MpKTsKLQot
ICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShpc0FjdGl2ZS5nZXQoKSk7CisgICAgV0tUeXBl
UmVmIHJlc3VsdCA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIklzR2VvbG9jYXRpb25DbGllbnRB
Y3RpdmUiKS5nZXQoKSwgMCwgJnJlc3VsdCk7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShhZG9w
dFdLKHJlc3VsdCkuZ2V0KCkpOwogfQogCiB1bnNpZ25lZCBJbmplY3RlZEJ1bmRsZTo6aW1hZ2VD
b3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkIikpOwotICAgIFdLVHlwZVJlZiByZXN1
bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgJnJlc3VsdFRvUGFz
cyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGltYWdlQ291bnQgPSBhZG9wdFdLKHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXN1bHRUb1Bhc3MpKTsKLSAgICAKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoaW1hZ2VDb3VudC5nZXQoKSkp
OworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJJbWFnZUNv
dW50SW5HZW5lcmFsUGFzdGVib2FyZCIpLmdldCgpLCAwLCAmcmVzdWx0KTsKKyAgICByZXR1cm4g
dWludDY0VmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdldCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6c2V0VXNlck1lZGlhUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVz
ZXJNZWRpYVBlcm1pc3Npb24iKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIlNldFVzZXJNZWRpYVBlcm1pc3Npb24iLCBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShlbmFibGVkKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJN
ZWRpYVBlcm1pc3Npb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb24iKSk7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJlc2V0VXNlck1lZGlhUGVybWlzc2lvbiIp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlz
c2lvbkZvck9yaWdpbihib29sIHBlcm1pc3Npb24sIFdLU3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJp
bmdSZWYgcGFyZW50T3JpZ2luKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlz
c2lvbkZvck9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJtaXNzaW9uS2V5V0sgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwZXJtaXNzaW9uIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gcGVybWlzc2lvbldLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
cGVybWlzc2lvbikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCks
IHBlcm1pc3Npb25LZXlXSy5nZXQoKSwgcGVybWlzc2lvbldLLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5nZXQoKSwgb3JpZ2luKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJlbnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFyZW50T3Jp
Z2luKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGVy
bWlzc2lvbiIsIHBlcm1pc3Npb24pOworICAgIHNldFZhbHVlKGJvZHksICJvcmlnaW4iLCBvcmln
aW4pOworICAgIHNldFZhbHVlKGJvZHksICJwYXJlbnRPcmlnaW4iLCBwYXJlbnRPcmlnaW4pOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JP
cmlnaW4iLCBib2R5KTsKIH0KIAogdW5zaWduZWQgSW5qZWN0ZWRCdW5kbGU6OnVzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oV0tTdHJpbmdSZWYgb3JpZ2luLCBXS1N0cmlu
Z1JlZiBwYXJlbnRPcmlnaW4pIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmln
aW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlX
Sy5nZXQoKSwgb3JpZ2luKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRP
cmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVu
dE9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBw
YXJlbnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFyZW50T3JpZ2luKTsKLQotICAgIFdLVHlwZVJlZiBy
ZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBjb3Vu
dCA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJlc3VsdFRvUGFzcykpOwotCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdldFZhbHVlKGNvdW50Lmdl
dCgpKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJvcmlnaW4iLCBvcmlnaW4pOworICAgIHNldFZhbHVl
KGJvZHksICJwYXJlbnRPcmlnaW4iLCBwYXJlbnRPcmlnaW4pOworICAgIFdLVHlwZVJlZiByZXN1
bHQgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENv
dW50Rm9yT3JpZ2luIikuZ2V0KCksIGJvZHkuZ2V0KCksICZyZXN1bHQpOworICAgIHJldHVybiB1
aW50NjRWYWx1ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oV0tTdHJp
bmdSZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2lu
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygib3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJv
ZHkuZ2V0KCksIG9yaWdpbktleVdLLmdldCgpLCBvcmlnaW4pOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
bWVzc2FnZUJvZHkuZ2V0KCksIHBhcmVudE9yaWdpbktleVdLLmdldCgpLCBwYXJlbnRPcmlnaW4p
OwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJvcmlnaW4i
LCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJvZHksICJwYXJlbnRPcmlnaW4iLCBwYXJlbnRPcmln
aW4pOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dENvdW50Rm9yT3JpZ2luIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEN1
c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEN1c3RvbVBvbGljeURlbGVnYXRlIikpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gZW5hYmxlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiZW5hYmxlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGVuYWJsZWRXSyA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBlbmFibGVkS2V5V0suZ2V0KCksIGVuYWJsZWRXSy5nZXQo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGVybWlzc2l2ZUtleVdLID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGVybWlzc2l2ZSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBlcm1pc3NpdmVXSyA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHBlcm1pc3NpdmUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5
LmdldCgpLCBwZXJtaXNzaXZlS2V5V0suZ2V0KCksIHBlcm1pc3NpdmVXSy5nZXQoKSk7Ci0KLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgImVuYWJsZWQiLCBlbmFi
bGVkKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGVybWlzc2l2ZSIsIHBlcm1pc3NpdmUpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiU2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiLCBib2R5KTsKIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0SGlkZGVuKGJvb2wgaGlkZGVuKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldEhpZGRlbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc0luaXRpYWxLZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhpZGRlbiIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlzSW5pdGlhbFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUoaGlkZGVuKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgaXNJbml0aWFsS2V5V0suZ2V0KCksIGlzSW5pdGlhbFdLLmdldCgpKTsKLQotICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiaGlkZGVuIiwgaGlkZGVuKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIlNldEhpZGRlbiIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIElu
amVjdGVkQnVuZGxlOjpzZXRDYWNoZU1vZGVsKGludCBtb2RlbCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRDYWNoZU1vZGVsIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kZWwpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwg
dG9XSygiU2V0Q2FjaGVNb2RlbCIpLmdldCgpLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGVs
KSkuZ2V0KCksIG51bGxwdHIpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlOjpzaG91bGRQcm9j
ZXNzV29ya1F1ZXVlKCkgY29uc3QKQEAgLTEwMDUsMTEwICs3OTUsNzMgQEAgYm9vbCBJbmplY3Rl
ZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1ZSgpIGNvbnN0CiAgICAgaWYgKCFtX3VzZVdv
cmtRdWV1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSXNXb3JrUXVldWVFbXB0eSIpKTsKLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gaXNFbXB0eSA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihyZXN1bHRUb1Bhc3MpKTsKKyAgICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVsbHB0cjsK
KyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCkt
PnBhZ2UoKSwgdG9XSygiSXNXb3JrUXVldWVFbXB0eSIpLmdldCgpLCAwLCAmcmVzdWx0KTsKIAog
ICAgIC8vIFRoZSBJUEMgZmFpbGVkLiBUaGlzIGhhcHBlbnMgd2hlbiBzd2FwcGluZyBwcm9jZXNz
ZXMgb24gbmF2aWdhdGlvbiBiZWNhdXNlIHRoZSBXZWJQYWdlUHJveHkgdW5yZWdpc3RlcnMgaXRz
ZWxmCiAgICAgLy8gYXMgYSBNZXNzYWdlUmVjZWl2ZXIgZnJvbSB0aGUgb2xkIFdlYlByb2Nlc3NQ
cm94eSBhbmQgcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlIG5ldyBXZWJQcm9jZXNzUHJveHkgaW5z
dGVhZC4KLSAgICBpZiAoIWlzRW1wdHkpCisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiAhV0tCb29sZWFuR2V0VmFsdWUoaXNFbXB0eS5nZXQoKSk7
CisgICAgYXV0byBpc0VtcHR5ID0gYm9vbGVhblZhbHVlKGFkb3B0V0socmVzdWx0KS5nZXQoKSk7
CisgICAgcmV0dXJuICFpc0VtcHR5OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwcm9jZXNz
V29ya1F1ZXVlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcm9jZXNzV29ya1F1ZXVl
IikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJQcm9jZXNzV29ya1F1ZXVlIik7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlQmFja05hdmlnYXRpb24odW5zaWduZWQg
aG93RmFyQmFja3dhcmQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVCYWNrTmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvd0Zh
ckJhY2t3YXJkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJRdWV1ZUJhY2tOYXZpZ2F0aW9uIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJC
YWNrd2FyZCkpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVGb3J3YXJkTmF2aWdh
dGlvbih1bnNpZ25lZCBob3dGYXJGb3J3YXJkKQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1
ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShob3dGYXJGb3J3YXJkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUZvcndhcmROYXZpZ2F0aW9uIiwgYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShob3dGYXJGb3J3YXJkKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpx
dWV1ZUxvYWQoV0tTdHJpbmdSZWYgdXJsLCBXS1N0cmluZ1JlZiB0YXJnZXQsIGJvb2wgc2hvdWxk
T3BlbkV4dGVybmFsVVJMcykKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZUxvYWQiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011
dGFibGVEaWN0aW9uYXJ5UmVmPiBsb2FkRGF0YSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1cmwiKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgdXJsS2V5LmdldCgpLCB1cmwpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRhcmdldEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoInRhcmdldCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWRE
YXRhLmdldCgpLCB0YXJnZXRLZXkuZ2V0KCksIHRhcmdldCk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc2hvdWxkT3BlbkV4dGVybmFsVVJMc0tleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWUgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc0tleS5n
ZXQoKSwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1ZhbHVlLmdldCgpKTsKLQotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbG9hZERh
dGEuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAidXJsIiwgdXJsKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAidGFyZ2V0IiwgdGFyZ2V0KTsKKyAgICBzZXRWYWx1ZShib2R5LCAic2hvdWxkT3BlbkV4
dGVybmFsVVJMcyIsIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiUXVldWVMb2FkIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1
ZXVlTG9hZEhUTUxTdHJpbmcoV0tTdHJpbmdSZWYgY29udGVudCwgV0tTdHJpbmdSZWYgYmFzZVVS
TCwgV0tTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkwpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0
cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVMb2FkSFRNTFN0cmluZyIpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGxvYWREYXRhID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGNvbnRlbnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJjb250ZW50IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCks
IGNvbnRlbnRLZXkuZ2V0KCksIGNvbnRlbnQpOwotCi0gICAgaWYgKGJhc2VVUkwpIHsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJiYXNlVVJMIikpOwotICAgICAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKGxvYWREYXRhLmdldCgpLCBiYXNlVVJMS2V5LmdldCgpLCBiYXNlVVJMKTsKLSAgICB9
Ci0KLSAgICBpZiAodW5yZWFjaGFibGVVUkwpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHVucmVhY2hhYmxlVVJMS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygidW5yZWFjaGFibGVVUkwiKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
bG9hZERhdGEuZ2V0KCksIHVucmVhY2hhYmxlVVJMS2V5LmdldCgpLCB1bnJlYWNoYWJsZVVSTCk7
Ci0gICAgfQotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBsb2FkRGF0YS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJjb250
ZW50IiwgY29udGVudCk7CisgICAgaWYgKGJhc2VVUkwpCisgICAgICAgIHNldFZhbHVlKGJvZHks
ICJiYXNlVVJMIiwgYmFzZVVSTCk7CisgICAgaWYgKHVucmVhY2hhYmxlVVJMKQorICAgICAgICBz
ZXRWYWx1ZShib2R5LCAidW5yZWFjaGFibGVVUkwiLCB1bnJlYWNoYWJsZVVSTCk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJRdWV1ZUxvYWRIVE1MU3RyaW5nIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OnF1ZXVlUmVsb2FkKCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZVJlbG9hZCIpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVSZWxvYWQiKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6cXVldWVMb2FkaW5nU2NyaXB0KFdLU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBtX3Vz
ZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZUxvYWRp
bmdTY3JpcHQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBzY3JpcHQpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVM
b2FkaW5nU2NyaXB0Iiwgc2NyaXB0KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVO
b25Mb2FkaW5nU2NyaXB0KFdLU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBtX3VzZVdvcmtRdWV1
ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZU5vbkxvYWRpbmdTY3Jp
cHQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBzY3JpcHQpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVOb25Mb2Fk
aW5nU2NyaXB0Iiwgc2NyaXB0KTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZTo6aXNBbGxvd2Vk
SG9zdChXS1N0cmluZ1JlZiBob3N0KQpAQCAtMTE0Myw0ICs4OTYsNzIgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZygpCiAgICAgbV90ZXN0UnVubmVyLT50ZXh0
RmllbGREaWRFbmRFZGl0aW5nQ2FsbGJhY2soKTsKIH0KIAordm9pZCBJbmplY3RlZEJ1bmRsZTo6
cG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiBib2R5KQoreworICAg
IHBvc3RQYWdlTWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbmFtZSwgYm9keSk7Cit9CisKK3ZvaWQg
SW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBj
aGFyKiBib2R5KQoreworICAgIHBvc3RQYWdlTWVzc2FnZShuYW1lLCB0b1dLKGJvZHkpKTsKK30K
Kwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUpCit7
CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlKTsKK30KKwordm9pZCBwb3N0TWVzc2FnZShj
b25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSkKK3sKKyAgICBwb3N0TWVzc2FnZShuYW1l
LCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCit2b2lkIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQorewor
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlLCBudWxscHRyKTsKK30KKwor
dm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUp
Cit7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNv
bnN0IGNoYXIqIG5hbWUsIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UobmFtZSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwor
dm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZh
bHVlKQoreworICAgIHVpbnQ2NF90IHByb21vdGVkVmFsdWUgPSB2YWx1ZTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKG5hbWUsIHByb21vdGVkVmFsdWUpOworfQorCit2b2lkIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVlKQoreworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkp
LmdldCgpKTsKK30KKwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tU
eXBlUmVmIHZhbHVlKQoreworICAgIGlmIChhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpKQorICAgICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLT5w
YWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlKTsKK30KKwordm9pZCBwb3N0UGFnZU1lc3Nh
Z2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
bmFtZSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQg
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZh
bHVlKQoreworICAgIGlmIChhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpKQorICAgICAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhwYWdlLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlLCBudWxscHRyKTsKK30K
Kwordm9pZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29s
IHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKG5hbWUsIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVFIK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuaAppbmRleCBiNzYwMTQzNmYwYzY3Mjg1NjMzYTA4ZTI1Zjk0MmE4YWE5OGQ5NzBi
Li43YTRmNWQ2NTlmYzBhYTEwZTI3ZjQ4NTk0NzRiZTFjNDkyZGQwNDIyIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5o
CkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEdlb2xvY2F0aW9uLgogICAgIHZv
aWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wpOwotICAgIHZvaWQgc2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUg
YWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHBy
b3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJv
dmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUg
c3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAg
dm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBs
b25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0
aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcs
IE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAg
ICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tTdHJp
bmdSZWYgZXJyb3JNZXNzYWdlKTsKICAgICBib29sIGlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2
ZSgpIGNvbnN0OwogCkBAIC0xNjksOCArMTY5LDExIEBAIHByaXZhdGU6CiAgICAgZW51bSBjbGFz
cyBCZWdpbmdUZXN0aW5nTW9kZSB7IE5ldywgUmVzdW1lIH07CiAgICAgdm9pZCBiZWdpblRlc3Rp
bmcoV0tEaWN0aW9uYXJ5UmVmIGluaXRpYWxTZXR0aW5ncywgQmVnaW5nVGVzdGluZ01vZGUpOwog
Ci0gICAgYm9vbCBib29sZWFuRm9yS2V5KFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5
KTsKLSAgICBTdHJpbmcgc3RyaW5nRm9yS2V5KFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhciog
a2V5KTsKKyAgICBzdGF0aWMgdm9pZCBwb3N0UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmLCBj
b25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgYm9keSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RhdGljIHZvaWQgcG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiwgY29uc3QgY2hh
ciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkpOworICAgIHZvaWQgcG9zdFBhZ2VN
ZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiBib2R5ID0gbnVsbHB0cik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFt
ZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkpOworICAgIHZvaWQgcG9zdFBhZ2VNZXNzYWdl
KGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGJvZHkpOwogCiAgICAgV0tCdW5kbGVSZWYg
bV9idW5kbGUgeyBudWxscHRyIH07CiAgICAgV0tCdW5kbGVQYWdlR3JvdXBSZWYgbV9wYWdlR3Jv
dXAgeyBudWxscHRyIH07CkBAIC0yMTAsNCArMjEzLDI5IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90
IG1fdXNlclNjcmlwdEluamVjdGVkQ291bnQgeyAwIH07CiB9OwogCit2b2lkIHBvc3RNZXNzYWdl
KGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0
TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSk7CisKK3ZvaWQgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBudWxs
cHRyKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29s
IHZhbHVlKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1
aW50NjRfdCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciog
bmFtZSwgdW5zaWduZWQgdmFsdWUpOwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0
IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSk7CisKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0
IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0UGFnZU1l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7CisKK3ZvaWQgcG9zdFN5bmNocm9u
b3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0
cik7Cit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJv
b2wgdmFsdWUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBXS1JldGFpblB0cjxUPiYgYm9keSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
cGFnZSwgbmFtZSwgYm9keS5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBX
S1JldGFpblB0cjxUPiYgYm9keSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UobmFtZSwgYm9keS5n
ZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmlu
ZGV4IGQ4OWZlYWY5YjZkYWU0Yzk2ODUzMWYwYWI2Mzg1ODkxYjE0Zjk4ZjguLjJmNTY0Mjc3MzEx
NmQ5ZjEwMjRmYTZmYmU5ZGMzNTIwYjE1ZTE4YTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAK
QEAgLTYwLDUwICs2MCwxOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV1RS
IHsKIAotc3RhdGljIEpTVmFsdWVSZWYgcHJvcGVydHlWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUpCitzdGF0aWMg
ZG91YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0eShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25z
dCBjaGFyKiBuYW1lKQogewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBhdXRvIHByb3BlcnR5TmFtZVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHByb3BlcnR5TmFtZSkpOwotICAgIHJldHVybiBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIG9iamVjdCwgcHJvcGVydHlOYW1lU3RyaW5nLmdldCgpLCAwKTsKLX0KLQotc3RhdGlj
IGRvdWJsZSBwcm9wZXJ0eVZhbHVlRG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKLXsKLSAgICBKU1ZhbHVlUmVm
IHZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCB2YWx1ZSwgMCk7ICAgIAotfQotCi1zdGF0aWMgaW50IHByb3BlcnR5VmFs
dWVJbnQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hh
ciogcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHByb3BlcnR5
VmFsdWVEb3VibGUoY29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsgICAgCi19Ci0KLXN0
YXRpYyBkb3VibGUgbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQotewotICAgIEpTR2xvYmFsQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAg
ICByZXR1cm4gcHJvcGVydHlWYWx1ZURvdWJsZShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxP
YmplY3QoY29udGV4dCksIHByb3BlcnR5TmFtZSk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5k
bGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKKyAgICByZXR1cm4gbnVtZXJpY1By
b3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgbmFtZSk7
CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBkdW1wUGF0aChKU0dsb2JhbENvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgbm9kZVZhbHVlKQogewotICAgIEpTVmFsdWVSZWYgbm9kZU5hbWVW
YWx1ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgbm9kZVZhbHVlLCAibm9kZU5hbWUiKTsKLSAg
ICBhdXRvIGpzU3RyaW5nTm9kZU5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIG5vZGVOYW1lVmFsdWUsIDApKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbm9k
ZU5hbWUgPSB0b1dLKGpzU3RyaW5nTm9kZU5hbWUpOwotCi0gICAgSlNWYWx1ZVJlZiBwYXJlbnRO
b2RlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBub2RlVmFsdWUsICJwYXJlbnROb2RlIik7Ci0K
LSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQodG9XVEZTdHJpbmcobm9kZU5hbWUpKTsKLQotICAgIGlmIChwYXJlbnROb2RlICYmIEpTVmFs
dWVJc09iamVjdChjb250ZXh0LCBwYXJlbnROb2RlKSkgewotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiA+ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1w
UGF0aChjb250ZXh0LCAoSlNPYmplY3RSZWYpcGFyZW50Tm9kZSkpOwotICAgIH0KLQotICAgIHJl
dHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgYXV0byBuYW1lID0gdG9XVEZTdHJp
bmcoc3RyaW5nUHJvcGVydHkoY29udGV4dCwgbm9kZVZhbHVlLCAibm9kZU5hbWUiKSk7CisgICAg
aWYgKGF1dG8gcGFyZW50Tm9kZSA9IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIG5vZGVWYWx1ZSwg
InBhcmVudE5vZGUiKSkKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcobmFtZSwgIiA+ICIsIGR1
bXBQYXRoKGNvbnRleHQsIHBhcmVudE5vZGUpKTsKKyAgICByZXR1cm4gbmFtZTsKIH0KIAogc3Rh
dGljIFdURjo6U3RyaW5nIGR1bXBQYXRoKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNj
cmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZSkKQEAgLTEyNiw1
MyArOTQsNDAgQEAgc3RhdGljIFdURjo6U3RyaW5nIHJhbmdlVG9TdHIoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQKICAgICBpZiAoIXJhbmdlUmVmKQog
ICAgICAgICByZXR1cm4gIihudWxsKSI7CiAKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotCi0gICAgSlNHbG9iYWxDb250ZXh0UmVm
IGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFt
ZSwgd29ybGQpOwotICAgIEpTVmFsdWVSZWYgcmFuZ2VWYWx1ZSA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0V3JhcHBlckZvclJhbmdlRm9yV29ybGQoZnJhbWUsIHJhbmdlUmVmLCB3b3JsZCk7
CisgICAgYXV0byBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKKyAgICBh
dXRvIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChm
cmFtZSwgd29ybGQpOworICAgIGF1dG8gcmFuZ2VWYWx1ZSA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0V3JhcHBlckZvclJhbmdlRm9yV29ybGQoZnJhbWUsIHJhbmdlUmVmLCB3b3JsZCk7CiAg
ICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCByYW5nZVZhbHVlKSk7Ci0gICAgSlNP
YmplY3RSZWYgcmFuZ2VPYmplY3QgPSAoSlNPYmplY3RSZWYpcmFuZ2VWYWx1ZTsKLQotICAgIEpT
VmFsdWVSZWYgc3RhcnROb2RlVmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIHJhbmdlT2Jq
ZWN0LCAic3RhcnRDb250YWluZXIiKTsKLSAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRl
eHQsIHN0YXJ0Tm9kZVZhbHVlKSk7Ci0gICAgSlNPYmplY3RSZWYgc3RhcnROb2RlT2JqZWN0ID0g
KEpTT2JqZWN0UmVmKXN0YXJ0Tm9kZVZhbHVlOwotCi0gICAgSlNWYWx1ZVJlZiBlbmROb2RlVmFs
dWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kQ29udGFpbmVyIik7
Ci0gICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBlbmROb2RlVmFsdWUpKTsKLSAg
ICBKU09iamVjdFJlZiBlbmROb2RlT2JqZWN0ID0gKEpTT2JqZWN0UmVmKWVuZE5vZGVWYWx1ZTsK
LQotICAgIGludCBzdGFydE9mZnNldCA9IHByb3BlcnR5VmFsdWVJbnQoY29udGV4dCwgcmFuZ2VP
YmplY3QsICJzdGFydE9mZnNldCIpOwotICAgIGludCBlbmRPZmZzZXQgPSBwcm9wZXJ0eVZhbHVl
SW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zmc2V0Iik7Ci0KLSAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJyYW5n
ZSBmcm9tICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHN0YXJ0T2Zmc2V0KTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChkdW1wUGF0aChjb250ZXh0LCBzdGFydE5vZGVPYmplY3QpKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0byAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZE51bWJlcihlbmRPZmZzZXQpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG9m
ICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGR1bXBQYXRoKGNvbnRleHQsIGVuZE5vZGVP
YmplY3QpKTsKLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIGF1dG8g
cmFuZ2VPYmplY3QgPSAoSlNPYmplY3RSZWYpcmFuZ2VWYWx1ZTsKKworICAgIHJldHVybiBtYWtl
U3RyaW5nKCJyYW5nZSBmcm9tICIsCisgICAgICAgIG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBy
YW5nZU9iamVjdCwgInN0YXJ0T2Zmc2V0IiksCisgICAgICAgICIgb2YgIiwKKyAgICAgICAgZHVt
cFBhdGgoY29udGV4dCwgb2JqZWN0UHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJzdGFy
dENvbnRhaW5lciIpKSwKKyAgICAgICAgIiB0byAiLAorICAgICAgICBudW1lcmljUHJvcGVydHko
Y29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRPZmZzZXQiKSwKKyAgICAgICAgIiBvZiAiLAorICAg
ICAgICBkdW1wUGF0aChjb250ZXh0LCBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCByYW5nZU9iamVj
dCwgImVuZENvbnRhaW5lciIpKQorICAgICk7CiB9CiAKIHN0YXRpYyBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0ZyYW1lTmF2aWdhdGlvblR5cGUgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5
cGVMaW5rQ2xpY2tlZDoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImxpbmsgY2xpY2tlZCIpKTsKKyAgICAgICAgcmV0dXJuIHRvV0soImxpbmsg
Y2xpY2tlZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZUZvcm1TdWJtaXR0ZWQ6
Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJm
b3JtIHN1Ym1pdHRlZCIpKTsKKyAgICAgICAgcmV0dXJuIHRvV0soImZvcm0gc3VibWl0dGVkIik7
CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlQmFja0ZvcndhcmQ6Ci0gICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJiYWNrL2ZvcndhcmQi
KSk7CisgICAgICAgIHJldHVybiB0b1dLKCJiYWNrL2ZvcndhcmQiKTsKICAgICBjYXNlIGtXS0Zy
YW1lTmF2aWdhdGlvblR5cGVSZWxvYWQ6Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJyZWxvYWQiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJy
ZWxvYWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVGb3JtUmVzdWJtaXR0ZWQ6
Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJm
b3JtIHJlc3VibWl0dGVkIikpOworICAgICAgICByZXR1cm4gdG9XSygiZm9ybSByZXN1Ym1pdHRl
ZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZU90aGVyOgotICAgICAgICByZXR1
cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3RoZXIiKSk7CisgICAg
ICAgIHJldHVybiB0b1dLKCJvdGhlciIpOwogICAgIH0KLSAgICByZXR1cm4gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaWxsZWdhbCB2YWx1ZSIpKTsKKyAgICByZXR1cm4g
dG9XSygiaWxsZWdhbCB2YWx1ZSIpOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgc3R5bGVEZWNU
b1N0cihXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUpCkBAIC0xODUsMjMgKzE0
MCwxNCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgc3R5bGVEZWNUb1N0cihXS0J1bmRsZUNTU1N0eWxl
RGVjbGFyYXRpb25SZWYgc3R5bGUpCiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5nIHNlY3VyaXR5T3JpZ2luVG9TdHIoV0tTZWN1cml0
eU9yaWdpblJlZiBvcmlnaW4pCitzdGF0aWMgV1RGOjpTdHJpbmcgc3RyaW5nKFdLU2VjdXJpdHlP
cmlnaW5SZWYgb3JpZ2luKQogewotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgneycpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRv
V1RGU3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlQcm90b2NvbChvcmlnaW4pKSkp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9zdChv
cmlnaW4pKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihXS1NlY3VyaXR5T3JpZ2luR2V0UG9ydChvcmlnaW4p
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnfScpOwotCi0gICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygneycsIHRvV1RGU3RyaW5n
KGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlQcm90b2NvbChvcmlnaW4pKSksICIsICIsIHRv
V1RGU3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlIb3N0KG9yaWdpbikpKSwgIiwg
IiwgV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSwgJ30nKTsKIH0KIAogc3RhdGljIFdU
Rjo6U3RyaW5nIGZyYW1lVG9TdHIoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1l
KGZyYW1lKSk7CisgICAgYXV0byBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUo
ZnJhbWUpKTsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgaWYgKFdLQnVu
ZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpIHsKICAgICAgICAgaWYgKCFXS1N0cmluZ0lzRW1w
dHkobmFtZS5nZXQoKSkpIHsKQEAgLTIzNSwxMiArMTgxLDEyIEBAIHN0YXRpYyBpbmxpbmUgV1RG
OjpTdHJpbmcgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlZiBmaWxlVXJsKQogICAg
IGlmICghZmlsZVVybCkKICAgICAgICAgcmV0dXJuICIobnVsbCkiOwogCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHNjaGVtZVN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKGZp
bGVVcmwpKTsKKyAgICBhdXRvIHNjaGVtZVN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1l
KGZpbGVVcmwpKTsKICAgICBpZiAoIWlzTG9jYWxGaWxlU2NoZW1lKHNjaGVtZVN0cmluZy5nZXQo
KSkpCiAgICAgICAgIHJldHVybiB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhm
aWxlVXJsKSkpOwogCiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
KTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1
bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUpKTsKKyAgICBhdXRvIG1haW5GcmFtZVVSTCA9IGFk
b3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7CiAgICAgaWYgKCFtYWluRnJh
bWVVUkwpCiAgICAgICAgIG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQ
cm92aXNpb25hbFVSTChtYWluRnJhbWUpKTsKIApAQCAtNDM0LDggKzM4MCw3IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVzdCgpCiAgICAgLy8gKHNlZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODMzND4pLCBob3dldmVyIGZvciB0ZXN0
cywgd2Ugd2FudCB0byBzdGFydCBlYWNoIG9uZSB3aXRoIGEgY2xlYW4gc3RhdGUuCiAgICAgV0tC
dW5kbGVGcmFtZUZvY3VzKGZyYW1lKTsKIAotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXZWJDb3Jl
VGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOworICAgIFdlYkNvcmVU
ZXN0U3VwcG9ydDo6cmVzZXRJbnRlcm5hbHNPYmplY3QoV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRDb250ZXh0KGZyYW1lKSk7CiAgICAgYXNzaWduZWRVcmxzQ2FjaGUoKS5jbGVhcigpOwogCiAg
ICAgLy8gVXNlciBzY3JpcHRzIG5lZWQgdG8gYmUgcmVtb3ZlZCBhZnRlciB0aGUgdGVzdCBhbmQg
YmVmb3JlIGxvYWRpbmcgYWJvdXQ6YmxhbmssIGFzIG90aGVyd2lzZSB0aGV5IHdvdWxkIHJ1biBp
biBhYm91dDpibGFuaywgYW5kIHBvdGVudGlhbGx5IGxlYWsgcmVzdWx0cyBpbnRvIGEgc3Vic2Vx
dWVzdCB0ZXN0LgpAQCAtNDUxLDcgKzM5Niw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpy
ZXNldEFmdGVyVGVzdCgpCiAvLyBTdHJpbmcgb3V0cHV0IG11c3QgYmUgaWRlbnRpY2FsIHRvIC1b
V2ViRnJhbWUgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF0uCiBzdGF0aWMg
dm9pZCBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUo
ZnJhbWUpKTsKKyAgICBhdXRvIG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShm
cmFtZSkpOwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7CiAgICAg
ICAgIGlmIChXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKICAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSIpOwpAQCAtNDg2LDI3ICs0MzEsMjEg
QEAgc3RhdGljIHZvaWQgZHVtcExvYWRFdmVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25z
dCBjaGFyKiBldmVudE5hbWUpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVxdWVzdERlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBTdHJp
bmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1
cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwotICAgIFdLUmV0YWlu
UHRyPFdLVVJMUmVmPiBmaXJzdFBhcnR5ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5Rmlyc3RQ
YXJ0eUZvckNvb2tpZXMocmVxdWVzdCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBo
dHRwTWV0aG9kID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1ZXN0KSk7
Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxOU1VSTFJlcXVlc3QgVVJMICIp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJs
LmdldCgpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIG1haW4gZG9jdW1l
bnQgVVJMICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RS
ZXN1bHQoZmlyc3RQYXJ0eS5nZXQoKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiLCBodHRwIG1ldGhvZCAiKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0
Q29weVVSTChyZXF1ZXN0KSk7CisgICAgYXV0byBmaXJzdFBhcnR5ID0gYWRvcHRXSyhXS1VSTFJl
cXVlc3RDb3B5Rmlyc3RQYXJ0eUZvckNvb2tpZXMocmVxdWVzdCkpOworICAgIGF1dG8gaHR0cE1l
dGhvZCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwogCisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU1VSTFJlcXVlc3QgVVJMICIsIHBhdGhTdWl0YWJs
ZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwgIiwgbWFpbiBkb2N1bWVudCBVUkwgIiwgcGF0aFN1
aXRhYmxlRm9yVGVzdFJlc3VsdChmaXJzdFBhcnR5LmdldCgpKSwgIiwgaHR0cCBtZXRob2QgIik7
CiAgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShodHRwTWV0aG9kLmdldCgpKSkKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobm9uZSkiKTsKICAgICBlbHNlCiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGh0dHBNZXRob2QpKTsKLQogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCc+Jyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzcG9u
c2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlc3BvbnNlUmVmIHJlc3Bv
bnNlLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBib29sIHNob3VsZER1bXBSZXNwb25z
ZUhlYWRlcnMgPSBmYWxzZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRv
cHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8gdXJsID0gYWRv
cHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwogICAgIGlmICghdXJsKSB7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG51bGwpIik7CiAgICAgICAgIHJl
dHVybjsKQEAgLTUzNSwzMSArNDc0LDIwIEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6
cmVzcG9uc2VIZWFkZXJDb3VudChXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQogCiBzdGF0aWMg
aW5saW5lIHZvaWQgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tF
cnJvclJlZiBlcnJvciwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JEb21haW4gPSBhZG9wdFdLKFdLRXJyb3JDb3B5RG9t
YWluKGVycm9yKSk7Ci0gICAgaW50IGVycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJy
b3IpOworICAgIGF1dG8gZXJyb3JEb21haW4gPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLRXJyb3JD
b3B5RG9tYWluKGVycm9yKSkpOworICAgIGF1dG8gZXJyb3JDb2RlID0gV0tFcnJvckdldEVycm9y
Q29kZShlcnJvcik7CiAKICAgICAvLyBXZSBuZWVkIHRvIGRvIHNvbWUgZXJyb3IgbWFwcGluZyBo
ZXJlIHRvIG1hdGNoIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyAoTWFjIGVycm9yIG5hbWVzIGFyZSBl
eHBlY3RlZCkuCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZXJyb3JEb21h
aW4uZ2V0KCksICJXZWJLaXROZXR3b3JrRXJyb3IiKSkgewotICAgICAgICBlcnJvckRvbWFpbiA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk5TVVJMRXJyb3JEb21haW4i
KSk7CisgICAgaWYgKGVycm9yRG9tYWluID09ICJXZWJLaXROZXR3b3JrRXJyb3IiKSB7CisgICAg
ICAgIGVycm9yRG9tYWluID0gIk5TVVJMRXJyb3JEb21haW4iOwogICAgICAgICBlcnJvckNvZGUg
PSAtOTk5OwogICAgIH0KKyAgICBpZiAoZXJyb3JEb21haW4gPT0gICJXZWJLaXRQb2xpY3lFcnJv
ciIpCisgICAgICAgIGVycm9yRG9tYWluID0gIldlYktpdEVycm9yRG9tYWluIjsKIAotICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGVycm9yRG9tYWluLmdldCgpLCAiV2ViS2l0
UG9saWN5RXJyb3IiKSkKLSAgICAgICAgZXJyb3JEb21haW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRFcnJvckRvbWFpbiIpKTsKLQotICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPE5TRXJyb3IgZG9tYWluICIpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGVycm9yRG9tYWluKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIsIGNvZGUgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIo
ZXJyb3JDb2RlKTsKLQotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdL
RXJyb3JDb3B5RmFpbGluZ1VSTChlcnJvcikpOwotICAgIGlmICh1cmwuZ2V0KCkpIHsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5
U3RyaW5nKHVybC5nZXQoKSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IiwgZmFpbGluZyBVUkwgXCIiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZT
dHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7Ci0g
ICAgfQotCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU0Vycm9yIGRvbWFpbiAiLCBlcnJv
ckRvbWFpbiwgIiwgY29kZSAiLCBlcnJvckNvZGUpOworICAgIGlmIChhdXRvIHVybCA9IGFkb3B0
V0soV0tFcnJvckNvcHlGYWlsaW5nVVJMKGVycm9yKSkpCisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCIsIGZhaWxpbmcgVVJMIFwiIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlT
dHJpbmcodXJsLmdldCgpKSkpLCAnIicpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7
CiB9CiAKQEAgLTY5NSw3ICs2MjMsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU3Rh
cnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+dGVzdFVS
TCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB0ZXN0VVJMID0gYWRvcHRXSyhX
S0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKGZyYW1lKSk7CisgICAgICAgIGF1dG8gdGVz
dFVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVSTChmcmFtZSkpOwog
ICAgICAgICBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNldFRlc3RVUkwodGVzdFVSTC5n
ZXQoKSk7CiAgICAgfQogCkBAIC03NzQsMTMgKzcwMiwxMyBAQCBlbnVtIEZyYW1lTmFtZVBvbGlj
eSB7IFNob3VsZE5vdEluY2x1ZGVGcmFtZU5hbWUsIFNob3VsZEluY2x1ZGVGcmFtZU5hbWUgfTsK
IAogc3RhdGljIHZvaWQgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgRnJhbWVOYW1lUG9saWN5IHNob3Vs
ZEluY2x1ZGVGcmFtZU5hbWUgPSBTaG91bGROb3RJbmNsdWRlRnJhbWVOYW1lKQogewotICAgIGRv
dWJsZSB4ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUoZnJhbWUsICJwYWdlWE9mZnNldCIp
OwotICAgIGRvdWJsZSB5ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUoZnJhbWUsICJwYWdl
WU9mZnNldCIpOworICAgIGRvdWJsZSB4ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5KGZyYW1lLCAi
cGFnZVhPZmZzZXQiKTsKKyAgICBkb3VibGUgeSA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0eShmcmFt
ZSwgInBhZ2VZT2Zmc2V0Iik7CiAgICAgaWYgKGZhYnMoeCkgPD0gMC4wMDAwMDAwMSAmJiBmYWJz
KHkpIDw9IDAuMDAwMDAwMDEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91bGRJbmNs
dWRlRnJhbWVOYW1lKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKKyAgICAgICAgYXV0byBuYW1l
ID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSAnIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCInICIpOwpAQCAtNzk0LDcgKzcyMiw3IEBAIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNj
cm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmlu
CiAKIHN0YXRpYyB2b2lkIGR1bXBEZXNjZW5kYW50RnJhbWVTY3JvbGxQb3NpdGlvbnMoV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBX
S1JldGFpblB0cjxXS0FycmF5UmVmPiBjaGlsZEZyYW1lcyA9IGFkb3B0V0soV0tCdW5kbGVGcmFt
ZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOworICAgIGF1dG8gY2hpbGRGcmFtZXMgPSBhZG9wdFdL
KFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsKICAgICBzaXplX3Qgc2l6ZSA9
IFdLQXJyYXlHZXRTaXplKGNoaWxkRnJhbWVzLmdldCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIHN1YmZyYW1lID0g
c3RhdGljX2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGNoaWxk
RnJhbWVzLmdldCgpLCBpKSk7CkBAIC04MTAsMjggKzczOCwxMCBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRpb25zKFN0cmluZ0J1aWxkZXImIHN0cmlu
Z0J1aWxkZQogICAgIGR1bXBEZXNjZW5kYW50RnJhbWVTY3JvbGxQb3NpdGlvbnMoZnJhbWUsIHN0
cmluZ0J1aWxkZXIpOwogfQogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMo
Y29uc3QgY2hhciogc3RyaW5nKQotewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKLX0KLQogc3RhdGljIGJvb2wgaGFzRG9jdW1lbnRFbGVt
ZW50KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwotICAgIEpT
T2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0
KTsKLQotICAgIEpTVmFsdWVSZWYgZG9jdW1lbnRWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgZ2xvYmFsT2JqZWN0LCB0b0pTKCJkb2N1bWVudCIpLmdldCgpLCAwKTsKLSAgICBp
ZiAoIWRvY3VtZW50VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChK
U1ZhbHVlSXNPYmplY3QoY29udGV4dCwgZG9jdW1lbnRWYWx1ZSkpOwotICAgIEpTT2JqZWN0UmVm
IGRvY3VtZW50ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGRvY3VtZW50VmFsdWUsIDApOwot
Ci0gICAgSlNWYWx1ZVJlZiBkb2N1bWVudEVsZW1lbnRWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkoY29udGV4dCwgZG9jdW1lbnQsIHRvSlMoImRvY3VtZW50RWxlbWVudCIpLmdldCgpLCAwKTsK
LSAgICBpZiAoIWRvY3VtZW50RWxlbWVudFZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBkb2N1bWVudEVsZW1lbnRWYWx1
ZSk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0
KGZyYW1lKTsKKyAgICByZXR1cm4gb2JqZWN0UHJvcGVydHkoY29udGV4dCwgSlNDb250ZXh0R2V0
R2xvYmFsT2JqZWN0KGNvbnRleHQpLCB7ICJkb2N1bWVudCIsICJkb2N1bWVudEVsZW1lbnQiIH0p
OwogfQogCiBzdGF0aWMgdm9pZCBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUs
IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCkBAIC04NTQsMTEgKzc2NCwxMSBAQCBzdGF0aWMgdm9p
ZCBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIGJ1
aWxkZXIpCiAKIHN0YXRpYyB2b2lkIGR1bXBEZXNjZW5kYW50RnJhbWVzVGV4dChXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIFdLUmV0
YWluUHRyPFdLQXJyYXlSZWY+IGNoaWxkRnJhbWVzID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29w
eUNoaWxkRnJhbWVzKGZyYW1lKSk7CisgICAgYXV0byBjaGlsZEZyYW1lcyA9IGFkb3B0V0soV0tC
dW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOwogICAgIHNpemVfdCBzaXplID0gV0tB
cnJheUdldFNpemUoY2hpbGRGcmFtZXMuZ2V0KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgc3ViZnJhbWUgPSBzdGF0
aWNfY2FzdDxXS0J1bmRsZUZyYW1lUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoY2hpbGRGcmFt
ZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1YmZyYW1l
TmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKHN1YmZyYW1lKSk7CisgICAgICAg
IGF1dG8gc3ViZnJhbWVOYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoc3ViZnJh
bWUpKTsKIAogICAgICAgICAvLyBEdW1wUmVuZGVyVHJlZSBpZ25vcmVzIGVtcHR5IGZyYW1lcywg
c28gZG8gdGhlIHNhbWUgdGhpbmcgaGVyZS4KICAgICAgICAgaWYgKCFoYXNEb2N1bWVudEVsZW1l
bnQoc3ViZnJhbWUpKQpAQCAtODg0LDkgKzc5NCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkdW1wQWxsRnJhbWVzVGV4dChTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBET01Bc1dlYkFyY2hpdmUoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKICNpZiBVU0UoQ0YpICYmICFQ
TEFURk9STShXSU5fQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCi0gICAgV0tSZXRhaW5QdHI8V0tE
YXRhUmVmPiB3a0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5V2ViQXJjaGl2ZShmcmFt
ZSkpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNpemUod2tEYXRh
LmdldCgpKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZTdHJpbmcgPSBhZG9wdENG
KFdlYkNvcmVUZXN0U3VwcG9ydDo6Y3JlYXRlWE1MU3RyaW5nRnJvbVdlYkFyY2hpdmVEYXRhKGNm
RGF0YS5nZXQoKSkpOworICAgIGF1dG8gd2tEYXRhID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29w
eVdlYkFyY2hpdmUoZnJhbWUpKTsKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNpemUod2tEYXRh
LmdldCgpKSkpOworICAgIGF1dG8gY2ZTdHJpbmcgPSBhZG9wdENGKFdlYkNvcmVUZXN0U3VwcG9y
dDo6Y3JlYXRlWE1MU3RyaW5nRnJvbVdlYkFyY2hpdmVEYXRhKGNmRGF0YS5nZXQoKSkpOwogICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNmU3RyaW5nLmdldCgpKTsKICNlbmRpZgogfQpAQCAtOTAy
LDkgKzgxMiw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKCkKICAgICBXS0J1bmRs
ZVBhZ2VGbHVzaFBlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0ZShtX3BhZ2UpOwogCiAgICAgV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOwotICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmxSZWYgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5
VVJMKGZyYW1lKSk7CisgICAgYXV0byB1cmxSZWYgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5
VVJMKGZyYW1lKSk7CiAgICAgU3RyaW5nIHVybCA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxD
b3B5U3RyaW5nKHVybFJlZi5nZXQoKSkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWltZVR5cGUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JSZXNvdXJjZVdp
dGhVUkwoZnJhbWUsIHVybFJlZi5nZXQoKSkpOworICAgIGF1dG8gbWltZVR5cGUgPSBhZG9wdFdL
KFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JSZXNvdXJjZVdpdGhVUkwoZnJhbWUsIHVybFJl
Zi5nZXQoKSkpOwogICAgIGlmICh1cmwuZmluZCgiZHVtcEFzVGV4dC8iKSAhPSBub3RGb3VuZCB8
fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1pbWVUeXBlLmdldCgpLCAidGV4dC9wbGFp
biIpKQogICAgICAgICBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmR1bXBBc1RleHQoZmFs
c2UpOwogCkBAIC0xMDE4LDIxICs5MjgsMTkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRp
ZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tCdW5kbGUKICAg
ICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNj
cmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQpOwotICAgIEpTT2JqZWN0UmVmIHdpbmRv
dyA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KTsKKyAgICBhdXRvIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQp
OwogCiAgICAgaWYgKFdLQnVuZGxlU2NyaXB0V29ybGROb3JtYWxXb3JsZCgpICE9IHdvcmxkKSB7
Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93LCB0b0pTKCJfX3dv
cmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgVGVzdFJ1bm5lcjo6d29y
bGRJREZvcldvcmxkKHdvcmxkKSksIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOwor
ICAgICAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAiX193b3JsZElEIiwgVGVz
dFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKHdvcmxkKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2Vw
dGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuZ2NDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmpl
Y3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5ldmVu
dFNlbmRpbmdDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAm
ZXhjZXB0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS50ZXh0SW5wdXRDb250cm9sbGVyKCktPm1h
a2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKKyAgICBpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgaW5q
ZWN0ZWRCdW5kbGUuZ2NDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7Cisg
ICAgaW5qZWN0ZWRCdW5kbGUuZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLnRleHRJbnB1dENvbnRyb2xsZXIoKS0+
bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCi0gICAg
aW5qZWN0ZWRCdW5kbGUuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOworICAgIGluamVjdGVkQnVuZGxlLmFjY2Vz
c2liaWxpdHlDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CiAjZW5kaWYK
IAogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQp
OwpAQCAtMTEzNiw3ICsxMDQ0LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEluaXRp
YXRlTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmQKICAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVx
dWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVl
c3RDb3B5VVJMKHJlcXVlc3QpKTsKICAgICBhc3NpZ25lZFVybHNDYWNoZSgpLmFkZChpZGVudGlm
aWVyLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSkpOwogfQogCkBAIC0xMTc1
LDE2ICsxMDgzLDE2IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxT
ZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgaWYgKGluamVjdGVk
QnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndp
bGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VSTFJlc3Bv
bnNlQ29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8gcmVkaXJlY3RVUkwgPSBhZG9wdFdLKFdL
VVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLmlz
VGVzdFJ1bm5pbmcoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVx
dWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCgpICYmIHJlZGlyZWN0VVJMKSB7CiAgICAgICAgIGlu
amVjdGVkQnVuZGxlLm91dHB1dFRleHQoIlJldHVybmluZyBudWxsIGZvciB0aGlzIHJlZGlyZWN0
XG4iKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgV0tSZXRhaW5QdHI8
V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3RO
YW1lKHVybC5nZXQoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY2hlbWUgPSBh
ZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSk7
CisgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwor
ICAgIGF1dG8gaG9zdCA9IGFkb3B0V0soV0tVUkxDb3B5SG9zdE5hbWUodXJsLmdldCgpKSk7Cisg
ICAgYXV0byBzY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkpKTsKKyAg
ICBhdXRvIHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOwog
ICAgIGlmIChob3N0ICYmICFXS1N0cmluZ0lzRW1wdHkoaG9zdC5nZXQoKSkKICAgICAgICAgJiYg
aXNIVFRQT3JIVFRQU1NjaGVtZShzY2hlbWUuZ2V0KCkpCiAgICAgICAgICYmICFXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKGhvc3QuZ2V0KCksICIyNTUuMjU1LjI1NS4yNTUiKSAvLyBVc2Vk
IGluIHNvbWUgdGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJhY2sgYW4gZXJyb3IuCkBAIC0xMTky
LDEyICsxMTAwLDEyIEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxT
ZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgICAgIGJvb2wgbWFp
bkZyYW1lSXNFeHRlcm5hbCA9IGZhbHNlOwogICAgICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUuaXNU
ZXN0UnVubmluZygpKSB7CiAgICAgICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOwotICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tVUkxSZWY+IG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwo
bWFpbkZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tC
dW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7CiAgICAgICAgICAgICBpZiAoIW1haW5GcmFt
ZVVSTCB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3Ry
aW5nKG1haW5GcmFtZVVSTC5nZXQoKSkpLmdldCgpLCAiYWJvdXQ6YmxhbmsiKSkKICAgICAgICAg
ICAgICAgICBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9u
YWxVUkwobWFpbkZyYW1lKSk7CiAKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtYWluRnJhbWVIb3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFtZShtYWluRnJhbWVVUkwu
Z2V0KCkpKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtYWluRnJhbWVT
Y2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShtYWluRnJhbWVVUkwuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGF1dG8gbWFpbkZyYW1lSG9zdCA9IGFkb3B0V0soV0tVUkxDb3B5SG9zdE5hbWUo
bWFpbkZyYW1lVVJMLmdldCgpKSk7CisgICAgICAgICAgICBhdXRvIG1haW5GcmFtZVNjaGVtZSA9
IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKG1haW5GcmFtZVVSTC5nZXQoKSkpOwogICAgICAgICAg
ICAgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGlzSFRUUE9ySFRUUFNTY2hlbWUobWFpbkZyYW1lU2No
ZW1lLmdldCgpKSAmJiAhaXNMb2NhbEhvc3QobWFpbkZyYW1lSG9zdC5nZXQoKSk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKCFtYWluRnJhbWVJc0V4dGVybmFsICYmICFpc0FsbG93ZWRIb3N0KGhv
c3QuZ2V0KCkpKSB7CkBAIC0xMjE0LDcgKzExMjIsNyBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0
ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFn
ZQogICAgICAgICBTdHJpbmcgYm9keSA9IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+d2ls
bFNlbmRSZXF1ZXN0SFRUUEJvZHkoKTsKICAgICAgICAgaWYgKCFib2R5LmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgQ1N0cmluZyBjQm9keSA9IGJvZHkudXRmOCgpOwotICAgICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tEYXRhUmVmPiBib2R5ID0gYWRvcHRXSyhXS0RhdGFDcmVhdGUocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY0JvZHkuZGF0YSgpKSwgY0JvZHkubGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tEYXRhQ3JlYXRlKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGNCb2R5LmRhdGEoKSksIGNCb2R5Lmxl
bmd0aCgpKSk7CiAgICAgICAgICAgICByZXR1cm4gV0tVUkxSZXF1ZXN0Q29weVNldHRpbmdIVFRQ
Qm9keShyZXF1ZXN0LCBib2R5LmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNDIsOSAr
MTE1MCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JS
ZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRs
ZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdL
KFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQodXJs
LmdldCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlU3RyaW5nID0g
YWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHJlc3BvbnNlKSk7CisgICAgYXV0byB1
cmwgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CisgICAgYXV0byB1
cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkp
OworICAgIGF1dG8gbWltZVR5cGVTdHJpbmcgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlN
RVR5cGUocmVzcG9uc2UpKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKQEAgLTEzNTAs
MTAgKzEyNTgsOCBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
IC0gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblxuIik7CiAgICAgICAgIGR1bXBSZXF1
ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRl
cik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIG1haW4gZnJhbWUg
LSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV0tCdW5kbGVGcmFtZUlzTWFpbkZy
YW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXRTaG91bGRPcGVuRXh0
ZXJuYWxVUkxzKG5hdmlnYXRpb25BY3Rpb24pID8gInllcyIgOiAibm8iKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIiBpcyBtYWluIGZyYW1lIC0gIiwgV0tCdW5kbGVGcmFtZUlzTWFp
bkZyYW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5IC0gIiwgV0tCdW5kbGVOYXZpZ2F0aW9u
QWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9uKSA/ICJ5ZXMi
IDogIm5vIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgICAgICBp
bmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAg
fQpAQCAtMTM2MSwyNCArMTI2NywyMSBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgIGlm
ICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5pc1BvbGljeURlbGVnYXRlRW5hYmxlZCgp
KQogICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uUGFzc1Rocm91Z2g7CiAK
LSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5
VVJMKHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU2NoZW1lID0g
YWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CisgICAgYXV0byB1cmwgPSBhZG9w
dFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1dG8gdXJsU2NoZW1lID0g
YWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CiAKICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJQb2xpY3kg
ZGVsZWdhdGU6IGF0dGVtcHQgdG8gbG9hZCAiKTsKLSAgICBpZiAoaXNMb2NhbEZpbGVTY2hlbWUo
dXJsU2NoZW1lLmdldCgpKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmls
ZW5hbWUgPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhmaWxlbmFtZSkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBh
ZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgfQorICAgIGlmIChpc0xvY2Fs
RmlsZVNjaGVtZSh1cmxTY2hlbWUuZ2V0KCkpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQo
KSkpKSk7CisgICAgZWxzZQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
ZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKSkpOwogICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwnIik7CiAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0J1bmRs
ZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9uKSkpKTsK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwnIik7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmPiBoaXRUZXN0UmVzdWx0UmVmID0gYWRvcHRXSyhXS0J1
bmRsZU5hdmlnYXRpb25BY3Rpb25Db3B5SGl0VGVzdFJlc3VsdChuYXZpZ2F0aW9uQWN0aW9uKSk7
CisgICAgYXV0byBoaXRUZXN0UmVzdWx0UmVmID0gYWRvcHRXSyhXS0J1bmRsZU5hdmlnYXRpb25B
Y3Rpb25Db3B5SGl0VGVzdFJlc3VsdChuYXZpZ2F0aW9uQWN0aW9uKSk7CiAgICAgaWYgKGhpdFRl
c3RSZXN1bHRSZWYpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVOb2RlSGFuZGxlUmVm
PiBub2RlSGFuZGxlUmVmID0gYWRvcHRXSyhXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5Tm9kZUhh
bmRsZShoaXRUZXN0UmVzdWx0UmVmLmdldCgpKSk7CisgICAgICAgIGF1dG8gbm9kZUhhbmRsZVJl
ZiA9IGFkb3B0V0soV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJl
c3VsdFJlZi5nZXQoKSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBv
cmlnaW5hdGluZyBmcm9tICIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0
aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGVIYW5kbGVSZWYuZ2V0KCkpKTsKICAgICB9CkBA
IC0xNDAwLDEyICsxMzAzLDcgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoV0tCdW5kbGVQYWcKIHsKICAgICBhdXRv
JiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBpZiAo
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpICYmIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSAmJiBXS1VSTFJlc3BvbnNlSXNBdHRhY2htZW50
KHJlc3BvbnNlKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmaWxlbmFtZSA9IGFkb3B0V0soV0tVUkxSZXNw
b25zZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShyZXNwb25zZSkpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIlBvbGljeSBkZWxlZ2F0ZTogcmVzb3VyY2UgaXMgYW4gYXR0YWNo
bWVudCwgc3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyhmaWxlbmFtZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIlwnXG4iKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWFrZVN0cmluZygiUG9saWN5IGRlbGVnYXRlOiBy
ZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIiwgdG9XVEZT
dHJpbmcoYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3BvbnNl
KSkpLCAiXCdcbiIpKTsKICAgICB9CiAKICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0
aW9uUGFzc1Rocm91Z2g7CkBAIC0xNDcxLDEwICsxMzY5LDEwIEBAIHN0YXRpYyBXVEY6OlN0cmlu
ZyBhZGRMZWFkaW5nU3BhY2VTdHJpcFRyYWlsaW5nU3BhY2VzQWRkTmV3bGluZShjb25zdCBXVEY6
OlN0cmluCiAKIHN0YXRpYyBXVEY6OlN0cmluZyBsYXN0RmlsZVVSTFBhdGhDb21wb25lbnQoY29u
c3QgV1RGOjpTdHJpbmcmIHBhdGgpCiB7Ci0gICAgc2l6ZV90IHBvcyA9IHBhdGguZmluZCgiZmls
ZTovLyIpOworICAgIGF1dG8gcG9zID0gcGF0aC5maW5kKCJmaWxlOi8vIik7CiAgICAgQVNTRVJU
KFdURjo6bm90Rm91bmQgIT0gcG9zKTsKIAotICAgIFdURjo6U3RyaW5nIHRtcFBhdGggPSBwYXRo
LnN1YnN0cmluZyhwb3MgKyA3KTsKKyAgICBhdXRvIHRtcFBhdGggPSBwYXRoLnN1YnN0cmluZyhw
b3MgKyA3KTsKICAgICBpZiAodG1wUGF0aC5sZW5ndGgoKSA8IDIpIC8vIEtlZXAgdGhlIGxvbmUg
c2xhc2ggdG8gYXZvaWQgZW1wdHkgb3V0cHV0LgogICAgICAgICByZXR1cm4gdG1wUGF0aDsKIApA
QCAtMTUyMSwxMSArMTQxOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3Rh
dHVzYmFyVGV4dChXS1N0cmluZ1JlZiBzdGF0dXNiYXJUZXh0KQogICAgIGlmICghaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3Rh
dHVzVGV4dDoiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0dXNi
YXJUZXh0KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgaW5qZWN0ZWRC
dW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGluamVjdGVk
QnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNL
OiBzZXRTdGF0dXNUZXh0OiIsIHRvV1RGU3RyaW5nKHN0YXR1c2JhclRleHQpLCAnXG4nKSk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdEFsZXJ0KFdLU3Ry
aW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYpCkBAIC0xNTU5LDE1ICsxNDUzLDggQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlYWNoQXBwbGljYXRpb25DYWNoZU9yaWdpblF1
b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYKICAgICAgICAgLy8gUm91bmRpbmcgdXAgb3IgZG93biBk
b2VzIG5vdCByZWFsbHkgbWF0dGVyIGZvciB0aGVzZSB0ZXN0cy4gSXQncwogICAgICAgICAvLyBz
dWZmaWNpZW50IHRvIGp1c3QgZ2V0IGEgcmFuZ2Ugb2YgMTAwMDAgdG8gZGV0ZXJtaW5lIGlmIHdl
IHdlcmUKICAgICAgICAgLy8gYWJvdmUgb3IgYmVsb3cgYSB0aHJlc2hvbGQuCi0gICAgICAgIGlu
dDY0X3QgdHJ1bmNhdGVkU3BhY2VOZWVkZWQgPSAodG90YWxCeXRlc05lZWRlZCAvIDEwMDAwKSAq
IDEwMDAwOwotCi0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBBUFBMSUNBVElPTiBDQUNI
RSBDQUxMQkFDSzogZXhjZWVkZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFGb3JTZWN1cml0
eU9yaWdpbjoiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5U
b1N0cihvcmlnaW4pKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG90
YWxTcGFjZU5lZWRlZDp+Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHRy
dW5jYXRlZFNwYWNlTmVlZGVkKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpKTsKKyAgICAgICAgYXV0byB0cnVuY2F0ZWRTcGFjZU5lZWRlZCA9ICh0b3RhbEJ5dGVzTmVl
ZGVkIC8gMTAwMDApICogMTAwMDA7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQo
bWFrZVN0cmluZygiVUkgREVMRUdBVEUgQVBQTElDQVRJT04gQ0FDSEUgQ0FMTEJBQ0s6IGV4Y2Vl
ZGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iiwgc3RyaW5n
KG9yaWdpbiksICIgdG90YWxTcGFjZU5lZWRlZDp+IiwgdHJ1bmNhdGVkU3BhY2VOZWVkZWQsICdc
bicpKTsKICAgICB9CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGREaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkpCkBAIC0xNTgwLDE1
ICsxNDY3LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlYWNoQXBwbGljYXRpb25D
YWNoZU9yaWdpblF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYKIHVpbnQ2NF90IEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdp
biwgV0tTdHJpbmdSZWYgZGF0YWJhc2VOYW1lLCBXS1N0cmluZ1JlZiBkYXRhYmFzZURpc3BsYXlO
YW1lLCB1aW50NjRfdCBjdXJyZW50UXVvdGFCeXRlcywgdWludDY0X3QgY3VycmVudE9yaWdpblVz
YWdlQnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnREYXRhYmFzZVVzYWdlQnl0ZXMsIHVpbnQ2NF90IGV4
cGVjdGVkVXNhZ2VCeXRlcykKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkg
REVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VRdW90YUZvclNlY3Vy
aXR5T3JpZ2luOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZWN1cml0eU9yaWdp
blRvU3RyKG9yaWdpbikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBk
YXRhYmFzZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZGF0
YWJhc2VOYW1lKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Ci0g
ICAgfQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBEYXRh
YmFzZUNhbGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VT
dHJpbmcoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVv
dGFGb3JTZWN1cml0eU9yaWdpbjoiLCBzdHJpbmcob3JpZ2luKSwgIiBkYXRhYmFzZToiLCB0b1dU
RlN0cmluZyhkYXRhYmFzZU5hbWUpLCAnXG4nKSk7CiAKICAgICB1aW50NjRfdCBkZWZhdWx0UXVv
dGEgPSA1ICogMTAyNCAqIDEwMjQ7CiAgICAgZG91YmxlIHRlc3REZWZhdWx0UXVvdGEgPSBpbmpl
Y3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmRhdGFiYXNlRGVmYXVsdFF1b3RhKCk7CkBAIC0xNjAx
LDEyICsxNDgxLDcgQEAgdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRh
YmFzZVF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luLAogICAgIGlmIChtYXhRdW90YSA+
PSAwKSB7CiAgICAgICAgIGlmIChkZWZhdWx0UXVvdGEgPCBleHBlY3RlZFVzYWdlQnl0ZXMgJiYg
ZXhwZWN0ZWRVc2FnZUJ5dGVzIDw9IG1heFF1b3RhKSB7CiAgICAgICAgICAgICBuZXdRdW90YSA9
IGV4cGVjdGVkVXNhZ2VCeXRlczsKLQotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxF
R0FURSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVhc2VkIHF1b3RhIHRvICIpOwotICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIobmV3UXVvdGEpOwotICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBpbmplY3RlZEJ1
bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNL
OiBpbmNyZWFzZWQgcXVvdGEgdG8gIiwgbmV3UXVvdGEsICdcbicpKTsKICAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gbmV3UXVvdGE7CkBAIC0xNjc1LDEzICsxNTUwLDggQEAgYm9vbCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdGluZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVm
IHJhbmdlKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcg
REVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRC
dW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBp
ZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJ
TkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6IiwgcmFuZ2VUb1N0ciht
X3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOwogICAgIHJldHVybiBpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCkBAIC0xNjkx
LDEzICsxNTYxLDggQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEVuZEVkaXRpbmco
V0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlz
VGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAg
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5n
ZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1f
d29ybGQuZ2V0KCksIHJhbmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7Ci0gICAgfQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRl
eHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFu
Z2U6IiwgcmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOwog
ICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGlu
ZygpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcAppbmRleCBhNjI1NTg5NzI3YmM3MWI3NDFlY2YyNTY1MTUyMWVmYjRm
NDk5N2YzLi4zMWU5YzUzMmQ4MDlhNzkzMGMwZDI4OWE5NTY0N2IzZmNlMDI0NmM1IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJU
ZXN0UnVubmVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVk
ZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKICNp
bmNsdWRlICJKU1Rlc3RSdW5uZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNp
bmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ1Rlc3RSdW5uZXJVdGlscy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC02OSw3ICs2OSw3IEBAIFJlZjxU
ZXN0UnVubmVyPiBUZXN0UnVubmVyOjpjcmVhdGUoKQogfQogCiBUZXN0UnVubmVyOjpUZXN0UnVu
bmVyKCkKLSAgICA6IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbihhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCIiKSkpCisgICAgOiBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24o
dG9XSygiIikpCiB7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiB9CkBAIC04MywzNCArODMs
MTAyIEBAIEpTQ2xhc3NSZWYgVGVzdFJ1bm5lcjo6d3JhcHBlckNsYXNzKCkKICAgICByZXR1cm4g
SlNUZXN0UnVubmVyOjp0ZXN0UnVubmVyQ2xhc3MoKTsKIH0KIAorc3RhdGljIFdLQnVuZGxlUGFn
ZVJlZiBwYWdlKCkKK3sKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpOworfQorCitzdGF0aWMgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUoKQor
eworICAgIHJldHVybiBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSgpKTsKK30KKworc3Rh
dGljIEpTQ29udGV4dFJlZiBtYWluSlNDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSgpKTsKK30KKwogdm9pZCBUZXN0UnVu
bmVyOjpkaXNwbGF5KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZVBhZ2VGb3JjZVJl
cGFpbnQocGFnZSk7CisgICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KHBhZ2UoKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheUFuZFRyYWNrUmVwYWludHMoKQogewotICAgIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpOworICAgIGF1dG8gcGFnZSA9IFdUUjo6cGFnZSgpOwogICAgIFdLQnVuZGxlUGFnZUZvcmNl
UmVwYWludChwYWdlKTsKICAgICBXS0J1bmRsZVBhZ2VTZXRUcmFja3NSZXBhaW50cyhwYWdlLCB0
cnVlKTsKICAgICBXS0J1bmRsZVBhZ2VSZXNldFRyYWNrZWRSZXBhaW50cyhwYWdlKTsKIH0KIAor
c3RhdGljIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB0b1dLKGRvdWJsZSB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpOworfQorCitzdGF0aWMgV0tS
ZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBjcmVhdGVXS0RpY3Rpb25hcnkoc3RkOjppbml0aWFs
aXplcl9saXN0PHN0ZDo6cGFpcjxjb25zdCBjaGFyKiwgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4+
IHBhaXJzKQoreworICAgIGF1dG8gc2l6ZSA9IHBhaXJzLnNpemUoKTsKKyAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IGtleXMoc2l6ZSk7CisgICAgVmVjdG9yPFdLVHlwZVJlZj4gdmFsdWVzKHNpemUp
OworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IHN0cmluZ3Moc2l6ZSk7Cisg
ICAgZm9yIChhdXRvJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgYXV0byBrZXkgPSB0b1dLKHBh
aXIuZmlyc3QpOworICAgICAgICBrZXlzLmFwcGVuZChrZXkuZ2V0KCkpOworICAgICAgICB2YWx1
ZXMuYXBwZW5kKHBhaXIuc2Vjb25kLmdldCgpKTsKKyAgICAgICAgc3RyaW5ncy5hcHBlbmQoV1RG
TW92ZShrZXkpKTsKKyAgICB9CisgICAgcmV0dXJuIGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRl
KGtleXMuZGF0YSgpLCB2YWx1ZXMuZGF0YSgpLCBzaXplKSk7Cit9CisKK3N0YXRpYyBXS1JldGFp
blB0cjxXS1R5cGVSZWY+IHBvc3RTeW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0dXJuVmFsdWUoY29u
c3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICBXS1R5cGVS
ZWYgcmF3UmV0dXJuVmFsdWUgPSBudWxscHRyOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSku
Z2V0KCksIHZhbHVlLCAmcmF3UmV0dXJuVmFsdWUpOworICAgIHJldHVybiBhZG9wdFdLKHJhd1Jl
dHVyblZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVy
bmluZ0Jvb2xlYW4oY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikK
K3sKKyAgICByZXR1cm4gYm9vbGVhblZhbHVlKHBvc3RTeW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0
dXJuVmFsdWUobmFtZSwgdmFsdWUpKTsKK30KKworc3RhdGljIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRoUmV0dXJuVmFsdWUoY29uc3QgY2hhciog
bmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICBXS1R5cGVSZWYgcmF3UmV0
dXJuVmFsdWUgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKHBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUsICZyYXdSZXR1cm5W
YWx1ZSk7CisgICAgcmV0dXJuIGFkb3B0V0socmF3UmV0dXJuVmFsdWUpOworfQorCitzdGF0aWMg
Ym9vbCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oY29uc3QgY2hh
ciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICByZXR1cm4gYm9vbGVh
blZhbHVlKHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5hbWUsIHZh
bHVlKSk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ1VJbnQ2NChjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBudWxscHRy
KQoreworICAgIHJldHVybiB1aW50NjRWYWx1ZShwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVdp
dGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQorCitzdGF0aWMgdWludDY0X3QgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2NChjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IHJldHVybiB1aW50NjRWYWx1ZShwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVl
KG5hbWUpKTsKK30KKworc3RhdGljIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IGNoYXIq
IG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgYXV0byYgYnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RS
dW5uZXIoYnVuZGxlLmJ1bmRsZSgpLCBidW5kbGUucGFnZUdyb3VwKCksIHRvV0sobmFtZSkuZ2V0
KCksIHZhbHVlKTsKK30KKwogYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wUGl4ZWxzKCkgY29u
c3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXREdW1wUGl4ZWxzIikpOwotICAgIFdL
VHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChy
ZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVh
bkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSku
Z2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVh
bigiR2V0RHVtcFBpeGVscyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldER1bXBQaXhlbHMo
Ym9vbCBkdW1wUGl4ZWxzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldER1bXBQaXhl
bHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGR1bXBQaXhlbHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlNldER1bXBQaXhlbHMiLCBkdW1wUGl4ZWxzKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpkdW1wQXNUZXh0KGJvb2wgZHVtcFBpeGVscykKQEAgLTEyMiwxOCArMTkwLDEyIEBA
IHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dChib29sIGR1bXBQaXhlbHMpCiAgICAgCiBXaGF0
VG9EdW1wIFRlc3RSdW5uZXI6OndoYXRUb0R1bXAoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkdldFdoYXRUb0R1bXAiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBu
dWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0
dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLVUludDY0
R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXaGF0VG9EdW1wPihXS1VJbnQ2
NEdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVybkRhdGEpKS5n
ZXQoKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXaGF0VG9EdW1wPihwb3N0U3luY2hyb25v
dXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KCJHZXRXaGF0VG9EdW1wIikpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFdoYXRUb0R1bXAoV2hhdFRvRHVtcCB3aGF0VG9EdW1wKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFdoYXRUb0R1bXAiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzdGF0aWNfY2Fz
dDx1aW50NjRfdD4od2hhdFRvRHVtcCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlNldFdoYXRUb0R1bXAiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4od2hhdFRvRHVtcCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5h
YmxlZCwgYm9vbCBwZXJtaXNzaXZlKQpAQCAtMTU4LDI2ICsyMjAsMTkgQEAgdm9pZCBUZXN0UnVu
bmVyOjp3YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCkKIAogdm9pZCBUZXN0UnVubmVyOjp3YWl0
VW50aWxEb25lKCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RS
dW5uaW5nKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5pc1Rlc3RSdW5uaW5nKCkpOwogCiAgICAgc2V0V2FpdFVudGlsRG9uZSh0cnVlKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VW50aWxEb25lKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0V2FpdFVudGlsRG9uZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUp
KTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFdhaXRVbnRpbERvbmUi
LCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkV2FpdFVudGlsRG9uZSgpIGNv
bnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldFdhaXRVbnRpbERvbmUiKSk7Ci0g
ICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nz
YWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5
cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdL
Qm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5E
YXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5n
Qm9vbGVhbigiR2V0V2FpdFVudGlsRG9uZSIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Om5vdGlm
eURvbmUoKQpAQCAtMjEwLDE4ICsyNjUsMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpmb3JjZUltbWVk
aWF0ZUNvbXBsZXRpb24oKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZER1bXBGcmFtZUxv
YWRDYWxsYmFja3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIiwg
dmFsdWUpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFj
a3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXREdW1wRnJhbWVMb2FkQ2FsbGJh
Y2tzIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
IHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4oIkdldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKTsKIH0KIAogdW5z
aWduZWQgVGVzdFJ1bm5lcjo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSBjb25zdApA
QCAtMjMxLDE4ICsyODAsMTQgQEAgdW5zaWduZWQgVGVzdFJ1bm5lcjo6aW1hZ2VDb3VudEluR2Vu
ZXJhbFBhc3RlYm9hcmQoKSBjb25zdAogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQo
SlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3VyY2VXSyA9IHRvV0soc291cmNlKTsKLQot
ICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTY3JpcHQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBzb3VyY2VXSy5nZXQoKSwKKyAgICBXS0J1bmRsZVBhZ2VBZGRVc2Vy
U2NyaXB0KHBhZ2UoKSwgdG9XSyhzb3VyY2UpLmdldCgpLAogICAgICAgICAocnVuQXRTdGFydCA/
IGtXS0luamVjdEF0RG9jdW1lbnRTdGFydCA6IGtXS0luamVjdEF0RG9jdW1lbnRFbmQpLAogICAg
ICAgICAoYWxsRnJhbWVzID8ga1dLSW5qZWN0SW5BbGxGcmFtZXMgOiBrV0tJbmplY3RJblRvcEZy
YW1lT25seSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3Ry
aW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHNvdXJjZVdLID0gdG9XSyhzb3VyY2UpOwotCi0gICAgV0tCdW5kbGVQYWdlQWRkVXNl
clN0eWxlU2hlZXQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBz
b3VyY2VXSy5nZXQoKSwKKyAgICBXS0J1bmRsZVBhZ2VBZGRVc2VyU3R5bGVTaGVldChwYWdlKCks
IHRvV0soc291cmNlKS5nZXQoKSwKICAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVjdEluQWxs
RnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsKIH0KIApAQCAtMjUzLDI5ICsyOTgs
MTcgQEAgdm9pZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgpCiAKIHZvaWQgVGVzdFJ1bm5l
cjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgc2hvd1VJLCBKU1N0
cmluZ1JlZiB2YWx1ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdl
dCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlRXhlY3V0ZUVkaXRpbmdD
b21tYW5kKHBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyh2YWx1ZSkuZ2V0KCkpOwogfQog
CiBzdGF0aWMgT3B0aW9uYWw8V0tGaW5kT3B0aW9ucz4gZmluZE9wdGlvbnNGcm9tQXJyYXkoSlNW
YWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+
cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU09i
amVjdFJlZiBvcHRpb25zQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3B0aW9uc0Fy
cmF5QXNWYWx1ZSwgMCk7Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCks
IDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQorICAgIGF1dG8gY29udGV4dCA9IG1haW5KU0Nv
bnRleHQoKTsKKyAgICBhdXRvIG9wdGlvbnNBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0
LCBvcHRpb25zQXJyYXlBc1ZhbHVlLCBudWxscHRyKTsKKyAgICBhdXRvIGxlbmd0aCA9IGFycmF5
TGVuZ3RoKGNvbnRleHQsIG9wdGlvbnNBcnJheSk7CiAgICAgV0tGaW5kT3B0aW9ucyBvcHRpb25z
ID0gMDsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApOwotICAgICAgICBp
ZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBhdXRvIG9wdGlvbk5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIHZhbHVlLCAwKSk7Ci0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgYXV0byBvcHRpb25OYW1lID0gY3JlYXRlSlNTdHJpbmcoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBp
LCAwKSk7CiAgICAgICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5h
bWUuZ2V0KCksICJDYXNlSW5zZW5zaXRpdmUiKSkKICAgICAgICAgICAgIG9wdGlvbnMgfD0ga1dL
RmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7CiAgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkF0V29yZFN0YXJ0cyIpKQpAQCAt
Mjk2LDcgKzMyOSw3IEBAIHN0YXRpYyBPcHRpb25hbDxXS0ZpbmRPcHRpb25zPiBmaW5kT3B0aW9u
c0Zyb21BcnJheShKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFzVmFsCiBib29sIFRlc3RSdW5uZXI6
OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFz
VmFsdWUpCiB7CiAgICAgaWYgKGF1dG8gb3B0aW9ucyA9IGZpbmRPcHRpb25zRnJvbUFycmF5KG9w
dGlvbnNBcnJheUFzVmFsdWUpKQotICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmluZFN0cmlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sodGFyZ2V0
KS5nZXQoKSwgKm9wdGlvbnMpOworICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmluZFN0cmlu
ZyhwYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMpOwogCiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMzA0LDI4ICszMzcsMjMgQEAgYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5n
KEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogdm9p
ZCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nTWF0Y2hlc0luUGFnZShKU1N0cmluZ1JlZiB0YXJnZXQs
IEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHsKICAgICBpZiAoYXV0byBvcHRpb25z
ID0gZmluZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9uc0FycmF5QXNWYWx1ZSkpCi0gICAgICAgIHJl
dHVybiBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nTWF0Y2hlcyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMpOworICAg
ICAgICBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nTWF0Y2hlcyhwYWdlKCksIHRvV0sodGFyZ2V0KS5n
ZXQoKSwgKm9wdGlvbnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hl
c0F0SW5kaWNlcyhKU1ZhbHVlUmVmIG1hdGNoSW5kaWNlc0FzVmFsdWUsIEpTU3RyaW5nUmVmIHJl
cGxhY2VtZW50VGV4dCwgYm9vbCBzZWxlY3Rpb25Pbmx5KQogewogICAgIGF1dG8mIGJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBhdXRvIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShidW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIGF1dG8gY29u
dGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAg
IGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAg
ICAgYXV0byBtYXRjaEluZGljZXNPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgbWF0
Y2hJbmRpY2VzQXNWYWx1ZSwgMCk7Ci0gICAgYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0LCBsZW5ndGhQcm9wZXJ0eU5hbWUu
Z2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVl
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4
dCwgbWF0Y2hJbmRpY2VzT2JqZWN0KTsKIAogICAgIGF1dG8gaW5kaWNlcyA9IGFkb3B0V0soV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG1hdGNoSW5kaWNlc09iamVjdCwgaSwg
MCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
IGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBtYXRjaElu
ZGljZXNPYmplY3QsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFsdWVJc051bWJlcihj
b250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIGlu
ZGV4ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzdGQ6OnJvdW5kKEpTVmFsdWVUb051bWJlcihj
b250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpKSk7CisgICAgICAgIGF1dG8gaW5kZXggPSBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikp
KTsKICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oaW5kaWNlcy5nZXQoKSwgaW5kZXguZ2V0KCkp
OwogICAgIH0KICAgICBXS0J1bmRsZVBhZ2VSZXBsYWNlU3RyaW5nTWF0Y2hlcyhidW5kbGUucGFn
ZSgpLT5wYWdlKCksIGluZGljZXMuZ2V0KCksIHRvV0socmVwbGFjZW1lbnRUZXh0KS5nZXQoKSwg
c2VsZWN0aW9uT25seSk7CkBAIC0zMzQsMTEgKzM2Miw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cmVw
bGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKEpTVmFsdWVSZWYgbWF0Y2hJbmRpY2VzQXNWYWx1ZSwg
SlNTCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKICAgICBXS0J1bmRs
ZUNsZWFyQWxsRGF0YWJhc2VzKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoIkRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMiLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1b3RhKQpAQCAtMzQ4LDI5ICszNzIsMjcg
QEAgdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1b3RhKQogCiB2
b2lkIFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN5bmNMb2NhbFN0b3JhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUpKTsKLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN5bmNMb2NhbFN0b3JhZ2UiLCB0cnVlKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKIHsKLSAgICBX
S0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2Fj
aGUocGFnZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVG
b3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLQnVuZGxlUGFnZUNsZWFyQXBw
bGljYXRpb25DYWNoZUZvck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlQ2xlYXJBcHBs
aWNhdGlvbkNhY2hlRm9yT3JpZ2luKHBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVpbnQ2NF90IHNpemUpCiB7
Ci0gICAgV0tCdW5kbGVQYWdlU2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHNpemUpOworICAgIFdLQnVuZGxlUGFnZVNldEFw
cENhY2hlTWF4aW11bVNpemUocGFnZSgpLCBzaXplKTsKIH0KIAogbG9uZyBsb25nIFRlc3RSdW5u
ZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2lu
KQogewotICAgIHJldHVybiBXS0J1bmRsZVBhZ2VHZXRBcHBDYWNoZVVzYWdlRm9yT3JpZ2luKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdl
dCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlR2V0QXBwQ2FjaGVVc2FnZUZvck9yaWdpbihw
YWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxs
b3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpCkBAIC0zODEsMTU4ICs0MDMsMTA4
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVR
dW90YSgpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWVSZWYgc3RyaW5nQXJyYXlUb0pTKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBXS0FycmF5UmVmIHN0cmluZ3MpCiB7CiAgICAgY29uc3Qgc2l6ZV90IGNv
dW50ID0gV0tBcnJheUdldFNpemUoc3RyaW5ncyk7Ci0KLSAgICBKU1ZhbHVlUmVmIGFycmF5UmVz
dWx0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7Ci0gICAgSlNPYmplY3RS
ZWYgYXJyYXlPYmogPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJyYXlSZXN1bHQsIDApOwor
ICAgIGF1dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCBudWxscHRy
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgV0tT
dHJpbmdSZWYgc3RyaW5nUmVmID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJ
dGVtQXRJbmRleChzdHJpbmdzLCBpKSk7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBzdHJpbmdKUyA9IHRvSlMoc3RyaW5nUmVmKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eUF0SW5kZXgoY29udGV4dCwgYXJyYXlPYmosIGksIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQs
IHN0cmluZ0pTLmdldCgpKSwgMCk7CisgICAgICAgIGF1dG8gc3RyaW5nUmVmID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChzdHJpbmdzLCBpKSk7CisgICAg
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBKU1ZhbHVl
TWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHN0cmluZ1JlZikuZ2V0KCkpLCBudWxscHRyKTsKICAg
ICB9Ci0KLSAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgcmV0dXJuIGFycmF5OwogfQogCiBK
U1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZSgpCiB7Ci0g
ICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBvcmlnaW5zID0gYWRv
cHRXSyhXS0J1bmRsZVBhZ2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKHBhZ2UpKTsK
LQotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nQXJyYXlUb0pT
KGNvbnRleHQsIG9yaWdpbnMuZ2V0KCkpOworICAgIHJldHVybiBzdHJpbmdBcnJheVRvSlMobWFp
bkpTQ29udGV4dCgpLCBhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlPcmlnaW5zV2l0aEFwcGxpY2F0
aW9uQ2FjaGUocGFnZSgpKSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFu
ZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVQYWdlSXNF
ZGl0aW5nQ29tbWFuZEVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlSXNFZGl0
aW5nQ29tbWFuZEVuYWJsZWQocGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldENhbk9wZW5XaW5kb3dzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0Q2FuT3BlbldpbmRvd3MiLCB0cnVlKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVuYWJsZWQpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFhTU0F1ZGl0b3JFbmFibGVkIikpOwotICAgIGF1dG8m
IGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVu
ZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVu
ZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOwor
ICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZCIsIGVu
YWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1lZGlhRGV2aWNlc0VuYWJsZWQoYm9v
bCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRNZWRpYURldmljZXNFbmFibGVk
IikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5q
ZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0
KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRNZWRpYURl
dmljZXNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2ViUlRD
TUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiV2ViS2l0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkIikpOwotICAgIGF1dG8mIGlu
amVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxl
T3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxl
KCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAg
IFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0Vu
YWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRDdXN0b21Vc2VyQWdl
bnQoSlNTdHJpbmdSZWYgdXNlckFnZW50KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dEN1c3RvbVVzZXJBZ2VudCIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
dG9XSyh1c2VyQWdlbnQpLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNz
YWdlKCJTZXRDdXN0b21Vc2VyQWdlbnQiLCB0b1dLKHVzZXJBZ2VudCkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V2ViQVBJU3RhdGlzdGljc0VuYWJsZWQiKSk7Ci0g
ICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0g
ICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1
bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5h
YmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9kZXJuTWVk
aWFDb250cm9sc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJL
aXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3Rl
ZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCBlbmFibGVk
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXZWJHTDJFbmFibGVkKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V2ViR0wyRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBp
bmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRs
ZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRs
ZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAg
ICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViR0wyRW5hYmxlZCIsIGVuYWJsZWQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxlZChib29s
IGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdyaXRhYmxlU3RyZWFtQVBJRW5h
YmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVy
KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5
LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V3Jp
dGFibGVTdHJlYW1BUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0VHJhbnNmb3JtU3RyZWFtQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIldlYktpdFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5q
ZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVP
dmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUo
KSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAg
V1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQi
LCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRSZWFkYWJsZUJ5dGVTdHJlYW1B
UElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
a2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0UmVhZGFi
bGVCeXRlU3RyZWFtQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZl
cmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRs
ZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJl
ZmVyZW5jZSgiV2ViS2l0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZChib29sIGVu
YWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxl
ZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGlu
amVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5Lmdl
dCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0RW5jcnlw
dGVkTWVkaWFBUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJXZWJLaXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92
ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgp
LCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBX
VFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQi
LCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW5lcmljQ3VlQVBJRW5hYmxl
ZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdEdlbmVyaWNDdWVBUElF
bmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5u
ZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBr
ZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRH
ZW5lcmljQ3VlQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBpbmplY3RlZEJ1
bmRsZS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShlbmFibGVkKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShl
bmFibGVkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGVuYWJsZWQpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSIsIGVuYWJsZWQpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHRO
YXZpZ2F0aW9uKGJvb2wgc2hvdWxkU3dhcCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShzaG91bGRTd2FwKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIlNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0
aW9uIiwgc2hvdWxkU3dhcCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRv
RGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJvb2wgc2hvdWxkU3dhcCkKIHsKLSAgICBh
dXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0
TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkU3dhcCkpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vz
c2lvbk9uTmV4dE5hdmlnYXRpb24iLCBzaG91bGRTd2FwKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCkBAIC01
NTUsOSArNTI3LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXROZWVkc1N0b3JhZ2VBY2Nlc3NGcm9t
RmlsZVVSTHNRdWlyayhib29sIG5lZWRzUXVpcmspCiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFBsdWdpbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0
UGx1Z2luc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9y
VGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdy
b3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2Uo
IldlYktpdFBsdWdpbnNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZWQpCkBAIC01OTEsOCAr
NTYxLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NBbGxvd0xpc3RFbnRy
eShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3QKIGJvb2wgVGVzdFJ1bm5lcjo6aXNQYWdl
Qm94VmlzaWJsZShpbnQgcGFnZUluZGV4KQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFn
ZSgpKTsKLSAgICByZXR1cm4gV0tCdW5kbGVJc1BhZ2VCb3hWaXNpYmxlKGluamVjdGVkQnVuZGxl
LmJ1bmRsZSgpLCBtYWluRnJhbWUsIHBhZ2VJbmRleCk7CisgICAgcmV0dXJuIFdLQnVuZGxlSXNQ
YWdlQm94VmlzaWJsZShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkZyYW1lKCksIHBhZ2VJ
bmRleCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyaW5nUmVmIHZhbHVlKQpAQCAtNjAw
LDE2ICs1NjksMTQgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHIKICAgICBpZiAoIWVsZW1lbnQg
fHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVOb2RlSGFuZGxlUmVmPiBub2RlSGFuZGxlID0gYWRv
cHRXSyhXS0J1bmRsZU5vZGVIYW5kbGVDcmVhdGUoY29udGV4dCwgY29uc3RfY2FzdDxKU09iamVj
dFJlZj4oZWxlbWVudCkpKTsKLSAgICBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVt
ZW50VmFsdWVGb3JVc2VyKG5vZGVIYW5kbGUuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKKyAg
ICBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JVc2VyKGFkb3B0
V0soV0tCdW5kbGVOb2RlSGFuZGxlQ3JlYXRlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RS
ZWY+KGVsZW1lbnQpKSkuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRBdWRpb1Jlc3VsdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBk
YXRhKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpOwogICAgIC8vIEZJWE1FICgxMjMwNTgpOiBVc2UgYSBKU0MgQVBJIHRvIGdldCBidWZm
ZXIgY29udGVudHMgb25jZSBzdWNoIGlzIGV4cG9zZWQuCi0gICAgV0tSZXRhaW5QdHI8V0tEYXRh
UmVmPiBhdWRpb0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJy
YXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKTsKLSAgICBpbmplY3Rl
ZEJ1bmRsZS5zZXRBdWRpb1Jlc3VsdChhdWRpb0RhdGEuZ2V0KCkpOworICAgIGluamVjdGVkQnVu
ZGxlLnNldEF1ZGlvUmVzdWx0KGFkb3B0V0soV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhB
cnJheShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgY29udGV4dCwgZGF0YSkpLmdldCgpKTsKICAg
ICBzZXRXaGF0VG9EdW1wKFdoYXRUb0R1bXA6OkF1ZGlvKTsKICAgICBzZXREdW1wUGl4ZWxzKGZh
bHNlKTsKIH0KQEAgLTYyMSwzMyArNTg4LDMwIEBAIHVuc2lnbmVkIFRlc3RSdW5uZXI6OndpbmRv
d0NvdW50KCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCiB7Ci0g
ICAgV0tCdW5kbGVDbGVhckhpc3RvcnlGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVDbGVhckhpc3RvcnlGb3JUZXN0aW5n
KHBhZ2UoKSk7CiB9CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIFRlc3RSdW5uZXI6Om1h
a2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09i
amVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXN0UnVubmVyOjptYWtlV2luZG93
T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQs
IHdpbmRvd09iamVjdCwgInRlc3RSdW5uZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAg
IHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJ0ZXN0UnVubmVyIiwgdGhpcyk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3RvcigpCiB7Ci0gICAgV0tCdW5kbGVJ
bnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvclNob3coV0tC
dW5kbGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNs
b3NlV2ViSW5zcGVjdG9yKCkKIHsKLSAgICBXS0J1bmRsZUluc3BlY3RvckNsb3NlKFdLQnVuZGxl
UGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvckNsb3NlKFdLQnVuZGxlUGFnZUdldEluc3BlY3Rv
cihwYWdlKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9y
KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2Ny
aXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgV0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlw
dEZvclRlc3QoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSksIHNjcmlwdFdLLmdldCgpKTsKKyAgICBXS0J1bmRsZUluc3Bl
Y3RvckV2YWx1YXRlU2NyaXB0Rm9yVGVzdChXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgp
KSwgdG9XSyhzY3JpcHQpLmdldCgpKTsKIH0KIAotdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWdu
ZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+ID4gV29ybGRNYXA7Cit1c2lu
ZyBXb3JsZE1hcCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgV0tSZXRhaW5QdHI8V0tCdW5kbGVT
Y3JpcHRXb3JsZFJlZj4+Owogc3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCiB7CiAgICAgc3Rh
dGljIFdvcmxkTWFwJiBtYXAgPSAqbmV3IFdvcmxkTWFwOwpAQCAtNjU2LDEyICs2MjAsMTEgQEAg
c3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6Ondvcmxk
SURGb3JXb3JsZChXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQogewotICAgIFdvcmxkTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwotICAgIGZvciAoV29ybGRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKLSAgICAgICAgICAgIHJldHVy
biBpdC0+a2V5OworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRoZSBhbnRpLXBhdHRlcm4gb2YgaXRl
cmF0aW5nIGFuIGVudGlyZSBtYXAuIFR5cGljYWxseSB3ZSB1c2UgYSBwYWlyIG9mIG1hcHMgb3Ig
anVzdCBhIHZlY3RvciBpbiBhIGNhc2UgbGlrZSB0aGlzLgorICAgIGZvciAoYXV0byYgbWFwRW50
cnkgOiB3b3JsZE1hcCgpKSB7CisgICAgICAgIGlmIChtYXBFbnRyeS52YWx1ZSA9PSB3b3JsZCkK
KyAgICAgICAgICAgIHJldHVybiBtYXBFbnRyeS5rZXk7CiAgICAgfQotCiAgICAgcmV0dXJuIDA7
CiB9CiAKQEAgLTY4MSw3ICs2NDQsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKEpTQ29udGV4dFJlZiBjb250ZXh0LCB1bnNpZ25lZCB3bwogCiAgICAg
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlRnJhbWVGb3JKYXZhU2NyaXB0Q29udGV4
dChjb250ZXh0KTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICBmcmFtZSA9IFdLQnVuZGxlUGFn
ZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkp
OworICAgICAgICBmcmFtZSA9IG1haW5GcmFtZSgpOwogCiAgICAgSlNHbG9iYWxDb250ZXh0UmVm
IGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZy
YW1lLCB3b3JsZC5nZXQoKSk7CiAgICAgSlNFdmFsdWF0ZVNjcmlwdChqc0NvbnRleHQsIHNjcmlw
dCwgMCwgMCwgMCwgMCk7IApAQCAtNjk2LDggKzY1OSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
UE9TSVhMb2NhbGUoSlNTdHJpbmdSZWYgbG9jYWxlKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRl
eHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVTZXRU
ZXh0RGlyZWN0aW9uKG1haW5GcmFtZSwgdG9XSyhkaXJlY3Rpb24pLmdldCgpKTsKKyAgICByZXR1
cm4gV0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24obWFpbkZyYW1lKCksIHRvV0soZGlyZWN0
aW9uKS5nZXQoKSk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBh
Z2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGJvb2wgc2hvdWxkU3RheU9uUGFnZSkKQEAgLTcw
NywxNyArNjY5LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVy
SGFuZGxpbmdCZWZvcmVVbmxvYWQoYm9vbCBzaG91bGRTdGF5T25QCiAKIGJvb2wgVGVzdFJ1bm5l
cjo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkgY29u
c3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBu
dWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0
dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5H
ZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdl
dCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuKCJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTmF2aWdhdGlvbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJE
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkNsZWFyRGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoSlNTdHJpbmdSZWYgc3RhdGUpCkBAIC03MzAs
NyArNjg3LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGZhbHNlKTsKIH0KIAotdHlwZWRl
ZiBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFwOwordXNpbmcg
Q2FsbGJhY2tNYXAgPSBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTT2JqZWN0UmVmPjsKIHN0YXRp
YyBDYWxsYmFja01hcCYgY2FsbGJhY2tNYXAoKQogewogICAgIHN0YXRpYyBDYWxsYmFja01hcCYg
bWFwID0gKm5ldyBDYWxsYmFja01hcDsKQEAgLTc4MywzOCArNzQwLDMyIEBAIHN0YXRpYyB2b2lk
IGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxi
YWNrKQogewogICAgIGlmICghY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKLQorICAgIGF1dG8g
Y29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250
ZXh0LCBjYWxsYmFjaykpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoY2FsbGJhY2tNYXAoKS5j
b250YWlucyhpbmRleCkpIHsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91
dHB1dFRleHQobWFrZVN0cmluZygiRkFJTDogVHJpZWQgdG8gaW5zdGFsbCBhIHNlY29uZCBUZXN0
UnVubmVyIGNhbGxiYWNrIGZvciB0aGUgc2FtZSBldmVudCAoaWQgIiwgaW5kZXgsICIpXG5cbiIp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICAgICBKU1ZhbHVlUHJvdGVjdChj
b250ZXh0LCBjYWxsYmFjayk7Ci0gICAgY2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNr
KTsKKyAgICBjYWxsYmFja01hcCgpLmFkZChpbmRleCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4o
Y2FsbGJhY2spKTsKIH0KIAogc3RhdGljIHZvaWQgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayh1bnNp
Z25lZCBpbmRleCwgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSAwLCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdID0gbnVsbHB0cikKIHsKLSAgICBpZiAoIWNhbGxiYWNrTWFwKCkuY29udGFpbnMo
aW5kZXgpKQorICAgIGF1dG8gY2FsbGJhY2sgPSBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpOwor
ICAgIGlmICghY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKLSAgICBXS0J1bmRsZUZyYW1lUmVm
IG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgSlNPYmplY3RS
ZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgY2FsbGJhY2tNYXAoKS50YWtl
KGluZGV4KSwgMCk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogICAgIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdldEdsb2Jh
bE9iamVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCAwKTsKICAgICBKU1Zh
bHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpj
bGVhclRlc3RSdW5uZXJDYWxsYmFja3MoKQogewotICAgIGZvciAoYXV0byYgaXRlciA6IGNhbGxi
YWNrTWFwKCkpIHsKLSAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpKTsKLSAgICAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAgICAgSlNPYmplY3RSZWYgY2FsbGJhY2sg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgaXRlci52YWx1ZSwgMCk7Ci0gICAgICAgIEpTVmFs
dWVVbnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIH0KLQorICAgIGF1dG8gY29udGV4
dCA9IG1haW5KU0NvbnRleHQoKTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogY2FsbGJhY2tNYXAo
KS52YWx1ZXMoKSkKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKICAgICBjYWxsYmFja01hcCgpLmNsZWFy
KCk7CiB9CiAKQEAgLTg5NCwyMCArODQ1LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQ
cmVmZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVmIHZhbHVlKQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhY2NlcHQpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWx3YXlzQWNjZXB0Q29va2llcyIpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShhY2NlcHQpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U2V0QWx3YXlzQWNjZXB0Q29va2llcyIsIGFjY2VwdCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0T25seUFjY2VwdEZpcnN0UGFydHlDb29raWVzKGJvb2wgYWNjZXB0KQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29va2llcyIpKTsKLSAgICAK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoYWNjZXB0KSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMiLCBhY2NlcHQpOwogfQogCiBk
b3VibGUgVGVzdFJ1bm5lcjo6cHJlY2lzZVRpbWUoKQpAQCAtOTI0LDE1ICs4NjcsMTUgQEAgdm9p
ZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewog
ICAgIG1fdXNlclN0eWxlU2hlZXRFbmFibGVkID0gZW5hYmxlZDsKIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBlbXB0eVVybCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIiIpKTsKLSAgICBXS1N0cmluZ1JlZiBsb2NhdGlvbiA9IGVuYWJsZWQgPyBtX3VzZXJT
dHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVVybC5nZXQoKTsKKyAgICBhdXRvIGVtcHR5
U3RyaW5nID0gdG9XSygiIik7CisgICAgYXV0byBsb2NhdGlvbiA9IGVuYWJsZWQgPyBtX3VzZXJT
dHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVN0cmluZy5nZXQoKTsKICAgICBhdXRvJiBp
bmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBXS0J1bmRs
ZVNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVj
dGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBsb2NhdGlvbik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBsb2NhdGlvbikKIHsKLSAgICBt
X3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKGxvY2F0aW9uKSk7CisgICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gdG9XSyhsb2Nh
dGlvbik7CiAKICAgICBpZiAobV91c2VyU3R5bGVTaGVldEVuYWJsZWQpCiAgICAgICAgIHNldFVz
ZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVlKTsKQEAgLTk0Niw4ICs4ODksNyBAQCB2b2lkIFRlc3RS
dW5uZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KTsKLSAgICBXS0J1bmRsZVNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhpbmplY3RlZEJ1
bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIGVuYWJsZWQpOwor
ICAgIFdLQnVuZGxlU2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgcGFnZSgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoKQpAQCAtOTczLDM2ICs5MTUsMjggQEAgdm9p
ZCBUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVu
YWJsZWQpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6Z3JhbnRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9u
KEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3Jp
Z2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJt
aXNzaW9uKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBh
Z2UoKSwgb3JpZ2luV0suZ2V0KCksIHRydWUpOworICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0
aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHBhZ2Uo
KSwgdG9XSyhvcmlnaW4pLmdldCgpLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkZW55
V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIGF1dG8m
IGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVu
ZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwg
aW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG9yaWdpbldLLmdldCgpLCBmYWxzZSk7Cisg
ICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgcGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCksIGZhbHNlKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9u
cygpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCk7Ci0gICAgV0tCdW5kbGVSZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhp
bmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpOwor
ICAgIFdLQnVuZGxlUmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soSlNWYWx1ZVJlZiBub3RpZmljYXRpb24p
CiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCk7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0g
ICAgdWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSBXS0J1bmRsZUdldFdlYk5vdGlmaWNhdGlvbklE
KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBjb250ZXh0LCBub3RpZmljYXRpb24pOwotICAgIGlu
amVjdGVkQnVuZGxlLnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlv
bklEKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5wb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGlj
ayhXS0J1bmRsZUdldFdlYk5vdGlmaWNhdGlvbklEKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBt
YWluSlNDb250ZXh0KCksIG5vdGlmaWNhdGlvbikpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAgLy8gRklYTUU6IHRo
aXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbihlbmFibGVkKTsKIH0KIApAQCAtMTAxMSwxMDIgKzk0NSw1MSBAQCBi
b29sIFRlc3RSdW5uZXI6OmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpCiAgICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUo
KTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNWYWx1ZVJl
ZiBqc0FsdGl0dWRlLCBKU1ZhbHVlUmVmIGpzQWx0aXR1ZGVBY2N1cmFjeSwgSlNWYWx1ZVJlZiBq
c0hlYWRpbmcsIEpTVmFsdWVSZWYganNTcGVlZCwgSlNWYWx1ZVJlZiBqc0Zsb29yTGV2ZWwpCit2
b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFs
dGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJs
ZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9v
ckxldmVsKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRl
eHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJh
bWUpOwotCi0gICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlID0gZmFsc2U7Ci0gICAgZG91YmxlIGFs
dGl0dWRlID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNBbHRp
dHVkZSkpIHsKLSAgICAgICAgcHJvdmlkZXNBbHRpdHVkZSA9IHRydWU7Ci0gICAgICAgIGFsdGl0
dWRlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzQWx0aXR1ZGUsIDApOwotICAgIH0KLQot
ICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5ID0gZmFsc2U7Ci0gICAgZG91YmxlIGFs
dGl0dWRlQWNjdXJhY3kgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0
LCBqc0FsdGl0dWRlQWNjdXJhY3kpKSB7Ci0gICAgICAgIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eSA9IHRydWU7Ci0gICAgICAgIGFsdGl0dWRlQWNjdXJhY3kgPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwganNBbHRpdHVkZUFjY3VyYWN5LCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3ZpZGVz
SGVhZGluZyA9IGZhbHNlOwotICAgIGRvdWJsZSBoZWFkaW5nID0gMC47Ci0gICAgaWYgKCFKU1Zh
bHVlSXNVbmRlZmluZWQoY29udGV4dCwganNIZWFkaW5nKSkgewotICAgICAgICBwcm92aWRlc0hl
YWRpbmcgPSB0cnVlOwotICAgICAgICBoZWFkaW5nID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IGpzSGVhZGluZywgMCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc1NwZWVkID0gZmFsc2U7
Ci0gICAgZG91YmxlIHNwZWVkID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29u
dGV4dCwganNTcGVlZCkpIHsKLSAgICAgICAgcHJvdmlkZXNTcGVlZCA9IHRydWU7Ci0gICAgICAg
IHNwZWVkID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzU3BlZWQsIDApOwotICAgIH0KLQot
ICAgIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsID0gZmFsc2U7Ci0gICAgZG91YmxlIGZsb29yTGV2
ZWwgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCBqc0Zsb29yTGV2
ZWwpKSB7Ci0gICAgICAgIHByb3ZpZGVzRmxvb3JMZXZlbCA9IHRydWU7Ci0gICAgICAgIGZsb29y
TGV2ZWwgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNGbG9vckxldmVsLCAwKTsKLSAgICB9
Ci0KLSAgICBpbmplY3RlZEJ1bmRsZS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVk
ZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBo
ZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJvdmlkZXNGbG9vckxldmVsLCBmbG9vckxl
dmVsKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLCBhbHRpdHVk
ZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCwgZmxvb3JMZXZlbCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKEpTU3RyaW5n
UmVmIG1lc3NhZ2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VXSyA9
IHRvV0sobWVzc2FnZSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihtZXNzYWdlV0suZ2V0KCkpOworICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVu
YXZhaWxhYmxlRXJyb3IodG9XSyhtZXNzYWdlKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0VXNlck1lZGlhUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAgLy8gRklYTUU6
IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldFVz
ZXJNZWRpYVBlcm1pc3Npb24oZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRV
c2VyTWVkaWFQZXJtaXNzaW9uKCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgZG9u
ZSBieSBmcmFtZS4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4K
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9u
KCk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNEb2luZ01lZGlhQ2FwdHVyZSgpIGNvbnN0CiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNEb2luZ01lZGlhQ2FwdHVyZSIpKTsKLSAgICBX
S1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAg
IEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzRG9pbmdNZWRpYUNhcHR1cmUiKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdp
bihib29sIHBlcm1pc3Npb24sIEpTU3RyaW5nUmVmIG9yaWdpbiwgSlNTdHJpbmdSZWYgcGFyZW50
T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0so
b3JpZ2luKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luV0sgPSB0
b1dLKHBhcmVudE9yaWdpbik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldFVz
ZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Npb24sIG9yaWdpbldL
LmdldCgpLCBwYXJlbnRPcmlnaW5XSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Np
b24sIHRvV0sob3JpZ2luKS5nZXQoKSwgdG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsKIH0KIAog
dW5zaWduZWQgVGVzdFJ1bm5lcjo6dXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9y
aWdpbihKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdpbikgY29uc3QK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9XSyhwYXJl
bnRPcmlnaW4pOwotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihvcmlnaW5XSy5nZXQoKSwgcGFyZW50
T3JpZ2luV0suZ2V0KCkpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
dXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbih0b1dLKG9yaWdpbikuZ2V0
KCksIHRvV0socGFyZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVz
ZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9y
aWdpbiwgSlNTdHJpbmdSZWYgcGFyZW50T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gcGFyZW50T3JpZ2luV0sgPSB0b1dLKHBhcmVudE9yaWdpbik7Ci0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZv
ck9yaWdpbihvcmlnaW5XSy5nZXQoKSwgcGFyZW50T3JpZ2luV0suZ2V0KCkpOworICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291
bnRGb3JPcmlnaW4odG9XSyhvcmlnaW4pLmdldCgpLCB0b1dLKHBhcmVudE9yaWdpbikuZ2V0KCkp
OwogfQogCiBib29sIFRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCiB7Ci0g
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICByZXR1cm4g
V0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhtYWluRnJhbWUpOworICAgIHJl
dHVybiBXS0J1bmRsZUZyYW1lQ2FsbFNob3VsZENsb3NlT25XZWJWaWV3KG1haW5GcmFtZSgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKHVuc2lnbmVkIGhvd0Zh
ckJhY2t3YXJkKQpAQCAtMTEyMiwyMCArMTAwNSwxNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVl
Rm9yd2FyZE5hdmlnYXRpb24odW5zaWduZWQgaG93RmFyRm9yd2FyZCkKIHZvaWQgVGVzdFJ1bm5l
cjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBib29sIHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHMpCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IGJhc2VV
UkxXSyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwoV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKSkpOwotICAgIFdLUmV0YWluUHRyPFdL
VVJMUmVmPiB1cmxXSyA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMV0su
Z2V0KCksIHRvV1RGU3RyaW5nKHRvV0sodXJsKSkudXRmOCgpLmRhdGEoKSkpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmdXSyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5n
KHVybFdLLmdldCgpKSk7Ci0KKyAgICBhdXRvIGJhc2VVUkxXSyA9IGFkb3B0V0soV0tCdW5kbGVG
cmFtZUNvcHlVUkwobWFpbkZyYW1lKCkpKTsKKyAgICBhdXRvIHVybFdLID0gYWRvcHRXSyhXS1VS
TENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkxXSy5nZXQoKSwgdG9XVEZTdHJpbmcodXJsKS51dGY4
KCkuZGF0YSgpKSk7CisgICAgYXV0byB1cmxTdHJpbmdXSyA9IGFkb3B0V0soV0tVUkxDb3B5U3Ry
aW5nKHVybFdLLmdldCgpKSk7CiAgICAgaW5qZWN0ZWRCdW5kbGUucXVldWVMb2FkKHVybFN0cmlu
Z1dLLmdldCgpLCB0b1dLKHRhcmdldCkuZ2V0KCksIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoSlNTdHJpbmdSZWYgY29u
dGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCwgSlNTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkwpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNvbnRlbnRXSyA9IHRvV0soY29udGVudCk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxXSyA9IGJhc2VVUkwgPyB0b1dL
KGJhc2VVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMV0sgPSB1bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5y
ZWFjaGFibGVVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7Ci0KLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkSFRNTFN0cmluZyhjb250ZW50V0suZ2V0KCks
IGJhc2VVUkxXSy5nZXQoKSwgdW5yZWFjaGFibGVVUkxXSy5nZXQoKSk7CisgICAgYXV0byBiYXNl
VVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJMKSA6IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PigpOworICAgIGF1dG8gdW5yZWFjaGFibGVVUkxXSyA9IHVucmVhY2hhYmxlVVJMID8gdG9XSyh1
bnJlYWNoYWJsZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKKyAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkSFRNTFN0cmluZyh0b1dLKGNvbnRlbnQpLmdl
dCgpLCBiYXNlVVJMV0suZ2V0KCksIHVucmVhY2hhYmxlVVJMV0suZ2V0KCkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKQEAgLTExNDUsMTYzICsxMDI1LDExOSBAQCB2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRp
bmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucXVldWVMb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkaW5nU2NyaXB0KHRvV0soc2NyaXB0KS5nZXQoKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVm
IHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dL
KHNjcmlwdCk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTm9uTG9hZGlu
Z1NjcmlwdChzY3JpcHRXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCh0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRS
ZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZXMiLCB2YWx1ZSk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldEhhbmRsZXNBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZXMoYm9vbCBoYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwg
aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sIHZh
bHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZExvZ0NhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRMb2dEb3du
bG9hZENhbGxiYWNrcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIiwgdmFsdWUpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUoSlNTdHJpbmdS
ZWYgdXNlcm5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QXV0aGVudGljYXRp
b25Vc2VybmFtZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHVzZXJuYW1lKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiU2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIsIHRvV0sodXNlcm5hbWUpLmdl
dCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKEpT
U3RyaW5nUmVmIHBhc3N3b3JkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEF1dGhl
bnRpY2F0aW9uUGFzc3dvcmQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhwYXNzd29yZCkpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIlNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiLCB0b1dLKHBhc3N3
b3JkKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1dElzRW5h
YmxlZCgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2VjdXJlRXZlbnRJbnB1
dElzRW5hYmxlZCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0
V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJl
dHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIlNlY3VyZUV2
ZW50SW5wdXRJc0VuYWJsZWQiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRCbG9ja0FsbFBs
dWdpbnMoYm9vbCBzaG91bGRCbG9jaykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRC
bG9ja0FsbFBsdWdpbnMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHNob3VsZEJsb2NrKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0QmxvY2tBbGxQbHVnaW5zIiwgc2hvdWxkQmxvY2spOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUoSlNTdHJpbmdSZWYgbW9kZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcobW9kZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFBsdWdpblN1cHBv
cnRlZE1vZGUiLCB0b1dLKG1vZGUpLmdldCgpKTsKIH0KIAogSlNWYWx1ZVJlZiBUZXN0UnVubmVy
OjpmYWlsTmV4dE5ld0NvZGVCbG9jaygpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHJldHVybiBKU0M6OmZhaWxO
ZXh0TmV3Q29kZUJsb2NrKGNvbnRleHQpOworICAgIHJldHVybiBKU0M6OmZhaWxOZXh0TmV3Q29k
ZUJsb2NrKG1haW5KU0NvbnRleHQoKSk7CiB9CiAKLUpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bnVt
YmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKQorSlNWYWx1ZVJlZiBUZXN0
UnVubmVyOjpudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWVSZWYgZnVuY3Rpb24pCiB7Ci0gICAg
V0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRS
ZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUp
OwotICAgIHJldHVybiBKU0M6Om51bWJlck9mREZHQ29tcGlsZXMoY29udGV4dCwgdGhlRnVuY3Rp
b24pOworICAgIHJldHVybiBKU0M6Om51bWJlck9mREZHQ29tcGlsZXMobWFpbkpTQ29udGV4dCgp
LCBmdW5jdGlvbik7CiB9CiAKLUpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5j
dGlvbihKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpuZXZl
cklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgZnVuY3Rpb24pCiB7Ci0gICAgV0tCdW5kbGVGcmFt
ZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9
IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHJldHVy
biBKU0M6OnNldE5ldmVySW5saW5lKGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4g
SlNDOjpzZXROZXZlcklubGluZShtYWluSlNDb250ZXh0KCksIGZ1bmN0aW9uKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheShi
b29sIHZhbHVlKQogewogICAgIG1fc2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVs
YXkgPSB2YWx1ZTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGREZWNpZGVOYXZp
Z2F0aW9uUG9saWN5QWZ0ZXJEZWxheSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJTZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheSIsIHZh
bHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGlj
eUFmdGVyRGVsYXkoYm9vbCB2YWx1ZSkKIHsKICAgICBtX3Nob3VsZERlY2lkZVJlc3BvbnNlUG9s
aWN5QWZ0ZXJEZWxheSA9IHZhbHVlOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3Vs
ZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVs
YXkiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TmF2aWdhdGlvbkdlc3R1cmVz
RW5hYmxlZChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE5hdmln
YXRpb25HZXN0dXJlc0VuYWJsZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZCIsIHZhbHVlKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhib29sIHZhbHVlKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRz
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldElnbm9yZXNW
aWV3cG9ydFNjYWxlTGltaXRzIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNo
b3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29sIHZhbHVlKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBl
cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGRE
b3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzcyhib29s
IHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZEFsbG93RGV2aWNl
T3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFj
Y2VzcyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjp0ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGVybWluYXRlTmV0d29ya1Byb2Nl
c3MiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2Uo
IlRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6dGVybWlu
YXRlU2VydmljZVdvcmtlcnMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyIpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB2YWx1ZSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyIsIHZhbHVlKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIG5leHRVSVNjcmlwdENh
bGxiYWNrSUQoKQpAQCAtMTMxNCw5NyArMTE1MCw0OCBAQCB2b2lkIFRlc3RSdW5uZXI6OnJ1blVJ
U2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICB1
bnNpZ25lZCBjYWxsYmFja0lEID0gbmV4dFVJU2NyaXB0Q2FsbGJhY2tJRCgpOwogICAgIGNhY2hl
VGVzdFJ1bm5lckNhbGxiYWNrKGNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlJ1blVJUHJvY2Vzc1NjcmlwdCIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IHRlc3REaWN0aW9uYXJ5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlw
dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNjcmlwdCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0VmFsdWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHNjcmlwdCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDYWxsYmFja0lEIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBjYWxsYmFj
a0lEVmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQpKTsKLQotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0odGVzdERpY3Rpb25hcnkuZ2V0KCksIHNjcmlwdEtleS5nZXQoKSwg
c2NyaXB0VmFsdWUuZ2V0KCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0odGVzdERpY3Rpb25h
cnkuZ2V0KCksIGNhbGxiYWNrSURLZXkuZ2V0KCksIGNhbGxiYWNrSURWYWx1ZS5nZXQoKSk7Ci0K
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCB0ZXN0RGljdGlvbmFyeS5nZXQoKSk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJSdW5VSVByb2Nlc3NTY3JpcHQiLCBjcmVhdGVXS0RpY3Rp
b25hcnkoeworICAgICAgICB7ICJTY3JpcHQiLCB0b1dLKHNjcmlwdCkgfSwKKyAgICAgICAgeyAi
Q2FsbGJhY2tJRCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpLmdldCgpIH0s
CisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0SW1tZWRp
YXRlbHkoSlNTdHJpbmdSZWYgc2NyaXB0LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIHVu
c2lnbmVkIGNhbGxiYWNrSUQgPSBuZXh0VUlTY3JpcHRDYWxsYmFja0lEKCk7CiAgICAgY2FjaGVU
ZXN0UnVubmVyQ2FsbGJhY2soY2FsbGJhY2tJRCwgY2FsbGJhY2spOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiUnVuVUlQcm9jZXNzU2NyaXB0SW1tZWRpYXRlbHkiKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiB0ZXN0RGljdGlvbmFyeSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
Y3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFZhbHVlID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4gY2FsbGJhY2tJRFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjYWxsYmFja0lEKSk7
Ci0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBzY3JpcHRL
ZXkuZ2V0KCksIHNjcmlwdFZhbHVlLmdldCgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRl
c3REaWN0aW9uYXJ5LmdldCgpLCBjYWxsYmFja0lES2V5LmdldCgpLCBjYWxsYmFja0lEVmFsdWUu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgdGVzdERpY3Rpb25h
cnkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUnVuVUlQcm9jZXNzU2NyaXB0SW1tZWRp
YXRlbHkiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJTY3JpcHQiLCB0b1dLKHNj
cmlwdCkgfSwKKyAgICAgICAgeyAiQ2FsbGJhY2tJRCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
Y2FsbGJhY2tJRCkpLmdldCgpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnJ1blVJU2NyaXB0Q2FsbGJhY2sodW5zaWduZWQgY2FsbGJhY2tJRCwgSlNTdHJpbmdSZWYg
cmVzdWx0KQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7
Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENv
bnRleHQobWFpbkZyYW1lKTsKLQotICAgIEpTVmFsdWVSZWYgcmVzdWx0VmFsdWUgPSBKU1ZhbHVl
TWFrZVN0cmluZyhjb250ZXh0LCByZXN1bHQpOworICAgIEpTVmFsdWVSZWYgcmVzdWx0VmFsdWUg
PSBKU1ZhbHVlTWFrZVN0cmluZyhtYWluSlNDb250ZXh0KCksIHJlc3VsdCk7CiAgICAgY2FsbFRl
c3RSdW5uZXJDYWxsYmFjayhjYWxsYmFja0lELCAxLCAmcmVzdWx0VmFsdWUpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNldEFsbG93ZWRNZW51QWN0aW9ucyhKU1ZhbHVlUmVmIGFjdGlvbnMpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWxsb3dlZE1lbnVBY3Rpb25zIikpOwotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0KLSAgICBhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgYXV0byBtYWluRnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgYXV0byBsZW5ndGhQcm9wZXJ0
eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwor
ICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwor
ICAgIGF1dG8gY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKICAgICBhdXRvIGFjdGlvbnNBcnJh
eSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhY3Rpb25zLCBudWxscHRyKTsKLSAgICBhdXRv
IGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBhY3Rpb25zQXJyYXks
IGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNO
dW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxl
bmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4
dCwgYWN0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29u
dGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBhY3Rp
b25OYW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWN0aW9uID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhhY3Rpb25OYW1lLmdldCgpKSk7Ci0gICAgICAgIFdLQXJyYXlB
cHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhY3Rpb24uZ2V0KCkpOworICAgIGF1dG8gbGVu
Z3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYWN0aW9uc0FycmF5KTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFjdGlvbnNBcnJheSwgaSwgbnVsbHB0cik7
CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB0b1dLU3RyaW5n
KGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CiAgICAgfQotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIlNldEFsbG93ZWRNZW51QWN0aW9ucyIsIG1lc3NhZ2VCb2R5LmdldCgp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0YWxsQ3VzdG9tTWVudUFjdGlvbihKU1N0cmlu
Z1JlZiBuYW1lLCBib29sIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHksIEpTVmFsdWVSZWYgY2FsbGJh
Y2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soQ3VzdG9tTWVudUFjdGlvbkNhbGxi
YWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluc3RhbGxDdXN0
b21NZW51QWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJuYW1lIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBuYW1lVmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKG5hbWUpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBuYW1lS2V5LmdldCgp
LCBuYW1lVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRpc21p
c3Nlc0F1dG9tYXRpY2FsbHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gZGlzbWlzc2VzQXV0b21hdGljYWxseVZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoZGlzbWlzc2VzQXV0b21hdGljYWxseSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVz
c2FnZUJvZHkuZ2V0KCksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlLZXkuZ2V0KCksIGRpc21pc3Nl
c0F1dG9tYXRpY2FsbHlWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJJbnN0YWxs
Q3VzdG9tTWVudUFjdGlvbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIm5hbWUi
LCB0b1dLKG5hbWUpIH0sCisgICAgICAgIHsgImRpc21pc3Nlc0F1dG9tYXRpY2FsbHkiLCBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShkaXNtaXNzZXNBdXRvbWF0aWNhbGx5KSkuZ2V0KCkgfSwKKyAg
ICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFsbERpZEJlZ2luU3dpcGVD
YWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQpAQCAtMTQ0OSw1OCArMTIzNiwzMCBAQCB2b2lk
IFRlc3RSdW5uZXI6OmNhbGxEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2soKQogCiB2b2lk
IFRlc3RSdW5uZXI6OmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4oSlNTdHJpbmdSZWYgZG9t
YWluKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyU3RhdGlzdGljc0RhdGFGb3JE
b21haW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhkb21haW4pKTsKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4iLCB0b1dL
KGRvbWFpbikuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmRvZXNTdGF0aXN0aWNzRG9t
YWluSURFeGlzdEluRGF0YWJhc2UodW5zaWduZWQgZG9tYWluSUQpCiB7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tU
eXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRG9tYWluSUQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShkb21haW5JRCkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4g
cmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZh
bHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdW
YWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25h
cnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgp
KSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRX
SyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0
dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiRG9lc1N0YXRp
c3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAg
ICAgIHsgIkRvbWFpbklEIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkb21haW5JRCkpIH0KKyAg
ICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0VuYWJsZWQo
Ym9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzRW5h
YmxlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NFbmFibGVkIiwgdmFsdWUpOwogfQogCiBib29sIFRlc3RS
dW5uZXI6OmlzU3RhdGlzdGljc0VwaGVtZXJhbCgpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc0VwaGVt
ZXJhbCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJl
dHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc0Vw
aGVtZXJhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUo
Ym9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRl
c3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzRGVidWdNb2RlQ2FsbGJhY2tJRCwgY29tcGxl
dGlvbkhhbmRsZXIpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0Rl
YnVnTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0RlYnVn
TW9kZSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNl
dERlYnVnTW9kZUNhbGxiYWNrKCkKQEAgLTE1MTEsMTAgKzEyNzAsNyBAQCB2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0RGVidWdNb2RlQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoSlNTdHJpbmdS
ZWYgaG9zdE5hbWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVU
ZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlRm9y
RGVidWdNb2RlQ2FsbGJhY2soKQpAQCAtMTUyNiwyNyArMTI4MiwxMCBAQCB2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NMYXN0U2VlbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNl
Y29uZHMsIEpTVgogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NM
YXN0U2VlbkNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpKTsK
LSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAg
IFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5
c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGlj
c0xhc3RTZWVuIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVz
LmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0xhc3RT
ZWVuIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhv
c3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIHRvV0soc2Vjb25kcykgfSwKKyAgICB9KS5n
ZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRMYXN0U2Vl
bkNhbGxiYWNrKCkKQEAgLTE1NTgsNDkgKzEyOTcsMTggQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVm
IHQKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzTWVyZ2VTdGF0
aXN0aWNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVS
ZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lRG9tYWlu
MSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKHRvcEZyYW1lRG9tYWluMSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjIiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZURv
bWFpbjIpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJMYXN0U2VlbiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKGxhc3RTZWVuKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhZFVzZXJJbnRlcmFjdGlvbikpKTsK
LQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZShtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSkpOwotCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNHcmFuZGZh
dGhlcmVkIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlz
R3JhbmRmYXRoZXJlZCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkpOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNWZXJ5UHJldmFsZW50Iikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzVmVyeVByZXZh
bGVudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkRhdGFSZWNvcmRzUmVtb3ZlZCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpKTsKLQotICAgIFZlY3RvcjxX
S1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4g
cmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwot
ICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25h
cnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgp
KSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyIsIGNyZWF0ZVdLRGljdGlvbmFy
eSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAi
VG9wRnJhbWVEb21haW4xIiwgdG9XSyh0b3BGcmFtZURvbWFpbjEpIH0sCisgICAgICAgIHsgIlRv
cEZyYW1lRG9tYWluMiIsIHRvV0sodG9wRnJhbWVEb21haW4yKSB9LAorICAgICAgICB7ICJMYXN0
U2VlbiIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUobGFzdFNlZW4pKSB9LAorICAgICAgICB7ICJI
YWRVc2VySW50ZXJhY3Rpb24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYWRVc2VySW50ZXJh
Y3Rpb24pKSB9LAorICAgICAgICB7ICJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIiwgYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZShtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSkgfSwKKyAgICAgICAg
eyAiSXNHcmFuZGZhdGhlcmVkIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhl
cmVkKSkgfSwKKyAgICAgICAgeyAiSXNQcmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShpc1ByZXZhbGVudCkpIH0sCisgICAgICAgIHsgIklzVmVyeVByZXZhbGVudCIsIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGlzVmVyeVByZXZhbGVudCkpIH0sCisgICAgICAgIHsgIkRhdGFSZWNv
cmRzUmVtb3ZlZCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZGF0YVJlY29yZHNSZW1vdmVkKSkg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxE
aWRTZXRNZXJnZVN0YXRpc3RpY0NhbGxiYWNrKCkKQEAgLTE2MTIsMzEgKzEzMjAsMTIgQEAgdm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyhKU1N0cmluZ1JlZiBo
b3N0TmFtZSwgYm9vbCBoYWRVc2UKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRT
dGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpY0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsK
IAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7
Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIYWRVc2VySW50ZXJhY3Rpb24iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTY2hlZHVsZWRGb3JBbGxCdXRD
b29raWVEYXRhUmVtb3ZhbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKSkpOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNQcmV2
YWxlbnQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQ
cmV2YWxlbnQpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMu
c2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZh
bHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlz
dGljc0V4cGlyZWRTdGF0aXN0aWMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNz
RXhwaXJlZFN0YXRpc3RpYyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3RO
YW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSGFkVXNlckludGVyYWN0aW9uIiwg
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkgfSwKKyAgICAgICAg
eyAiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCIsIGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpKSB9LAorICAg
ICAgICB7ICJJc1ByZXZhbGVudCIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50
KSkgfQorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2Fs
bERpZFNldEV4cGlyZWRTdGF0aXN0aWNDYWxsYmFjaygpCkBAIC0xNjQ4LDI5ICsxMzM3LDEwIEBA
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5n
UmVmIGhvc3ROYW1lLCBib29sIHZhbHVlCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2so
U2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRs
ZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFt
ZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7
Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtl
eXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotICAgIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICBy
YXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVz
W2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0
YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsg
Ikhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2VDYWxsYmFjaygp
CkBAIC0xNjgyLDI5ICsxMzUyLDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Zl
cnlQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2CiB7CiAgICAg
Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+
IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOwotICAgIAot
ICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiBy
YXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVl
cy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgp
OwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVu
dFJlc291cmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0
b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NhbGxEaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFjaygpCkBAIC0xNzE0
LDEzOCArMTM2NSw1MSBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VmVy
eVByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoImR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIik7CiB9CiAK
IGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdS
ZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAg
IFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVy
bkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1ByZXZh
bGVudFJlc291cmNlIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5u
ZXI6OmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFt
ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50
UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlw
ZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEp
OwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBl
SUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZSIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVy
Ojppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKEpTU3RyaW5nUmVmIHN1
YnJlc291cmNlSG9zdCwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0KQogewotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJyZXNvdXJjZUhvc3QiKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJyZXNvdXJjZUhvc3Qp
KSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0KSkpOwotICAgIAotICAgIFZlY3Rv
cjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJl
Zj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5n
ZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAg
ICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJy
ZXNvdXJjZVVuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFs
dWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9
IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVy
biBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0
dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU3VicmVzb3VyY2VIb3N0IiwgdG9X
SyhzdWJyZXNvdXJjZUhvc3QpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lSG9zdCIsIHRvV0sodG9w
RnJhbWVIb3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0
YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKEpTU3RyaW5nUmVmIHN1YkZyYW1lSG9z
dCwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZh
bHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN1YkZyYW1lSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHN1YkZyYW1lSG9zdCkpKTsKLSAgICAKLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3Qi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
Zyh0b3BGcmFtZUhvc3QpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlz
KGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNp
emUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tp
XSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJ
c1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyIikpOwotICAgIFdLUmV0YWluUHRy
PFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0
ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAg
ICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1
cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdp
c3RlcmVkQXNTdWJGcmFtZVVuZGVyIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAi
U3ViRnJhbWVIb3N0IiwgdG9XSyhzdWJGcmFtZUhvc3QpIH0sCisgICAgICAgIHsgIlRvcEZyYW1l
SG9zdCIsIHRvV0sodG9wRnJhbWVIb3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogYm9vbCBU
ZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKEpTU3RyaW5n
UmVmIGhvc3RSZWRpcmVjdGVkRnJvbSwgSlNTdHJpbmdSZWYgaG9zdFJlZGlyZWN0ZWRUbykKIHsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdFJlZGlyZWN0ZWRGcm9tIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
aG9zdFJlZGlyZWN0ZWRGcm9tKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkVG8iKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0UmVkaXJl
Y3RlZFRvKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNp
emUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1
ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3Rh
dGlzdGljc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJh
d0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdL
VHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRh
dGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0
UmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3RSZWRpcmVjdGVkRnJvbSkgfSwKKyAgICAgICAgeyAi
SG9zdFJlZGlyZWN0ZWRUbyIsIHRvV0soaG9zdFJlZGlyZWN0ZWRUbykgfSwKKyAgICB9KS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFj
dGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7
Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUodmFsdWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAg
IFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNp
emUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5
c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRh
KCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgCi0gICAgV0tCdW5k
bGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0
YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAg
ICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVlIiwg
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlv
bkNhbGxiYWNrKCkKQEAgLTE4NTUsMjYxICsxNDE5LDk1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NhbGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb25DYWxsYmFjaygpCiAKIGJvb2wg
VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVm
IGhvc3ROYW1lKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc0hhc0hh
ZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0g
ICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0
dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzSGFz
SGFkVXNlckludGVyYWN0aW9uIik7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNz
T25seUluRGF0YWJhc2VPbmNlKEpTU3RyaW5nUmVmIHN1Ykhvc3QsIEpTU3RyaW5nUmVmIHRvcEhv
c3QpCiB7Ci0gICAgCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViSG9zdCIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHN1
Ykhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG9wSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEhvc3QpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdL
U3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiBy
YXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBhdXRv
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNT
dGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
cmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkp
LmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuKCJJc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UiLCBjcmVhdGVXS0RpY3Rpb25h
cnkoeworICAgICAgICB7ICJTdWJIb3N0IiwgdG9XSyhzdWJIb3N0KSB9LAorICAgICAgICB7ICJU
b3BIb3N0IiwgdG9XSyh0b3BIb3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChKU1N0cmluZ1JlZiBob3N0TmFtZSwg
Ym9vbCB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlz
OwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdS
ZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tl
eXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXpl
KCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkg
ewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVz
W2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rp
Y3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3
S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgCi0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJlZCIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyho
b3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2
YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZUlU
UERhdGFiYXNlKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0VXNl
SVRQRGF0YWJhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRVc2VJVFBEYXRhYmFzZSIsIHZhbHVlKTsKIH0KIAog
Ym9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKEpTU3RyaW5nUmVmIGhv
c3ROYW1lKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc0dyYW5kZmF0
aGVyZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJl
ZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwot
ICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQi
LCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNT
dHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3ROYW1lIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
dG9wRnJhbWVIb3N0TmFtZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tl
eXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMu
c2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1Zh
bHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbiIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rp
Y3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMu
c2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAg
ICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJUb3BGcmFt
ZUhvc3ROYW1lIiwgdG9XSyh0b3BGcmFtZUhvc3ROYW1lKSB9LAorICAgIH0pLmdldCgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2luKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiB0b3BGcmFtZUhvc3ROYW1l
KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0g
ICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RO
YW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZUhvc3ROYW1lKSkpOwotICAg
IAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVj
dG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ld
ID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgp
OwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlz
LmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW4iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIs
IHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lSG9zdE5hbWUiLCB0b1dLKHRv
cEZyYW1lSG9zdE5hbWUpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oSlNTdHJpbmdSZWYgaG9z
dE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKQogewotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RO
YW1lUmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkVG8pKSk7Ci0gICAgCi0gICAgVmVj
dG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBl
UmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ld
LmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQot
ICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdW
YWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkg
fSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVkVG8iLCB0b1dLKGhvc3ROYW1lUmVkaXJl
Y3RlZFRvKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShKU1N0cmluZ1JlZiBob3N0TmFt
ZSwgSlNTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkKIHsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5
cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFt
ZVJlZGlyZWN0ZWRGcm9tIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkpKTsKLSAgICAKLSAgICBW
ZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5
cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNb
aV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9
Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RGcm9tIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwg
cmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJv
bSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0
TmFtZSkgfSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIsIHRvV0soaG9zdE5h
bWVSZWRpcmVjdGVkRnJvbSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhKU1N0cmluZ1JlZiBob3N0
TmFtZSwgSlNTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8pCiB7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tU
eXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWVSZWRpcmVjdGVkVG8iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZVJlZGlyZWN0ZWRUbykpKTsKLSAgICAKLSAgICBWZWN0
b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVS
ZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0u
Z2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVl
UmVkaXJlY3RUbyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVl
cy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvIiwgY3JlYXRlV0tE
aWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAg
ICAgICB7ICJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIsIHRvV0soaG9zdE5hbWVSZWRpcmVjdGVkVG8p
IH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNTdHJpbmdS
ZWYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRG
cm9tIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJp
bmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1Zh
bHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RG
cm9tIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAg
eyAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIsIHRvV0soaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0Ny
b3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oSlNTdHJpbmdSZWYgZnJvbUhvc3QsIEpTU3Ry
aW5nUmVmIHRvSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBr
ZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRnJv
bUhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhK
U1N0cmluZyhmcm9tSG9zdCkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb0hvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b0hvc3QpKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tU
eXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlz
W2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEo
KSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNv
cmF0aW9uIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiRnJvbUhvc3QiLCB0b1dL
KGZyb21Ib3N0KSB9LAorICAgICAgICB7ICJUb0hvc3QiLCB0b1dLKHRvSG9zdCkgfSwKKyAgICB9
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShz
ZWNvbmRzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiIsIHNlY29uZHMpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhKU1Zh
bHVlUmVmIGNhbGxiYWNrKQpAQCAtMjE0NywxMiArMTU0NSw5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
aW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxi
YWNrKQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2Fs
bGJhY2sodW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMsIHVuc2lnbmVkIG51bWJl
ck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgbnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3BQ
cmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rp
b24sIHVuc2lnbmVkIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291
cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wM051bWJlck9mUHJldmFsZW50UmVz
b3VyY2VzV2l0aFVJLCB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUksIHVuc2ln
bmVkIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSwgdW5zaWduZWQgdG9wM01lZGlhblVu
aXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwgdW5zaWduZWQgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVt
b3ZlZFdpdGhvdXRVSSkKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgCiAgICAgU3RyaW5nIHN0cmluZyA9IG1ha2VT
dHJpbmcoInsgXCJudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1wiIDogIiwgbnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXMsICIsIFwibnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uXCIgOiAiLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb24sICIsIFwibnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uXCIgOiAiLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sICIsIFwidG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNl
VXNlckludGVyYWN0aW9uXCIgOiAiLCB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJh
Y3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24sICIsIFwibWVkaWFuRGF5c1NpbmNlVXNlcklu
dGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uXCIgOiAiLCBtZWRp
YW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJh
Y3Rpb24sICIsIFwidG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJXCIgOiAiLCB0
b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUksICIsIFwidG9wM01lZGlhblN1YkZy
YW1lV2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUksICIsIFwidG9w
M01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VX
aXRob3V0VUksICIsIFwidG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSVwiIDogIiwg
dG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwgIiwgXCJ0b3AzTWVkaWFuRGF0YVJl
Y29yZHNSZW1vdmVkV2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVk
V2l0aG91dFVJLCAiIH0iKTsKICAgICAKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVN
YWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiByZXN1
bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKG1haW5KU0NvbnRleHQoKSwgY3JlYXRlSlNT
dHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpLmdldCgpKTsKIAogICAgIGNhbGxUZXN0UnVubmVy
Q2FsbGJhY2soU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrSUQsIDEsICZyZXN1bHQp
OwogfQpAQCAtMjE2NCwxNiArMTU1OSwxNCBAQCBib29sIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NO
b3RpZnlPYnNlcnZlcigpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Byb2Nlc3NTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRp
c3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzIikpOwotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcyIpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyhKU1Zh
bHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNr
KFN0YXRpc3RpY3NEaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0Q2FsbGJhY2tJRCwgY29tcGxldGlv
bkhhbmRsZXIpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1VwZGF0ZUNv
b2tpZUJsb2NraW5nIikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAg
V1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1VwZGF0ZUNvb2tpZUJsb2NraW5nIik7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0
Q2FsbGJhY2soKQpAQCAtMjE4MywxMzUgKzE1NzYsODMgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2FsbERpZFNldEJsb2NrQ29va2llc0Zvckhvc3RDYWxsYmFjaygpCiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSIpKTsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZSgiU3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSIpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJv
b2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc05vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0IikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2
YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc1Nl
dElzUnVubmluZ1Rlc3QiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wg
dmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1Nob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc1Nob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIiwgdmFsdWUpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNl
dFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiLCBzZWNvbmRz
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1l
KGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3Rp
Y3NHcmFuZGZhdGhlcmluZ1RpbWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1l
Iiwgc2Vjb25kcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRp
c3RpY3NFbnRyaWVzKHVuc2lnbmVkIGVudHJpZXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZW50cmllcykpOwotICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiLCBl
bnRyaWVzKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1BydW5lRW50
cmllc0Rvd25Ubyh1bnNpZ25lZCBlbnRyaWVzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFBydW5lRW50cmllc0Rvd25UbyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShlbnRyaWVzKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRQcnVuZUVudHJpZXNEb3duVG8iLCBlbnRyaWVz
KTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmUoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZUNh
bGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3Rp
Y3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpOwotICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc0NsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0
aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNp
Z25lZCBob3VycywgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJD
YWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZUNhbGxi
YWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3ND
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGhvdXJzKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnMiLCBob3Vycyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbChKU1ZhbHVlUmVmIGNh
bGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRDbGVh
clRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWxDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0NsZWFyVGhyb3VnaFdlYnNpdGVEYXRh
UmVtb3ZhbCIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6
cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QoSlNT
dHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcykKIHsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5jbHVk
ZUh0dHBPbmx5Q29va2llcyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5n
UmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdL
ZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6
ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewot
ICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ld
ID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0
YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rp
b25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5
cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3Qi
LCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5h
bWUpIH0sCisgICAgICAgIHsgIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiLCBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9
CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlKEpTU3RyaW5n
UmVmIGhvc3ROYW1lKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiKSk7Ci0g
ICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
aG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0
YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1
ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsK
KyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJ
c1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiLCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwKGRvdWJsZSBzZWNv
bmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NDYWNoZU1heEFn
ZUNhcCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCIsIHNlY29uZHMpOwogfQogCiBi
b29sIFRlc3RSdW5uZXI6Omhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24oSlNTdHJpbmdSZWYg
aG9zdE5hbWUpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24iKSk7Ci0gICAg
YXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9z
dE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShh
ZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAg
ICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJIYXNT
dGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlcihib29s
IHZhbHVlLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjMyMCw5ICsxNjYxLDcg
QEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIo
Ym9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb20KICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGNh
Y2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRTaG91bGREb3duZ3JhZGVSZWZl
cnJlckNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlciIsIHZh
bHVlKTsKICAgICBtX2hhc1NldERvd25ncmFkZVJlZmVycmVyQ2FsbGJhY2sgPSB0cnVlOwogfQog
CkBAIC0yMzM4LDExICsxNjc3LDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1No
b3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlCiAgICAgICAg
IHJldHVybjsKIAogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRT
aG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJk
UGFydHlDb29raWVzIikpOworICAgIGF1dG8gbWVzc2FnZU5hbWUgPSAiU2V0U3RhdGlzdGljc1No
b3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiOwogICAgIGlmIChvbmx5T25TaXRlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24pCi0gICAgICAgIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNv
b2tpZXNPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUp
KTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAgICAg
bWVzc2FnZU5hbWUgPSAiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNP
blNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiI7CisgICAgcG9zdE1lc3NhZ2UobWVzc2FnZU5h
bWUsIHZhbHVlKTsKICAgICBtX2hhc1NldEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNDYWxsYmFjayA9
IHRydWU7CiB9CiAKQEAgLTIzNTgsOSArMTY5Niw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKGJvb2wgdmFsdWUsIEpTVmFs
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3Rp
Y3NEaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUNhbGxiYWNrSUQsIGNvbXBs
ZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzRmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3Nh
Z2UoIlNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSIsIHZhbHVl
KTsKICAgICBtX2hhc1NldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlQ2FsbGJhY2sg
PSB0cnVlOwogfQogCkBAIC0yMzgzLDEwICsxNzE5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2FsbENsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbENhbGxiYWNrKCkKIHZvaWQg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzKEpTU3RyaW5n
UmVmIGhvc3ROYW1lLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hl
VGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2ll
c0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIGF1dG8gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU2V0VG9T
YW1lU2l0ZVN0cmljdENvb2tpZXMiKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS0J1bmRsZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1Nl
dFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tp
ZXNDYWxsYmFjaygpCkBAIC0yMzk4LDI3ICsxNzMxLDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NhbGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0NhbGxiYWNrKCkKIHZvaWQg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4oSlNTdHJp
bmdSZWYgZmlyc3RQYXJ0eVVSTFN0cmluZywgSlNTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcsIEpT
VmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJh
Y2soU3RhdGlzdGljc0RpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFja0lELCBj
b21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAg
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Rmlyc3RQYXJ0eVVSTCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aEpTU3RyaW5nKGZpcnN0UGFydHlVUkxTdHJpbmcpKSk7Ci0gICAgCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ05BTUUiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhjbmFt
ZVVSTFN0cmluZykpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5
cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgp
KTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tp
XSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldEZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW4iKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tE
aWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlz
LnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwor
ICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9t
YWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiRmlyc3RQYXJ0eVVSTCIsIHRv
V0soZmlyc3RQYXJ0eVVSTFN0cmluZykgfSwKKyAgICAgICAgeyAiQ05BTUUiLCB0b1dLKGNuYW1l
VVJMU3RyaW5nKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFjaygpCkBAIC0y
NDI5LDEwICsxNzQ1LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEZp
cnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4oSlNTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcs
IEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2Fs
bGJhY2soU3RhdGlzdGljc0RpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbkNhbGxiYWNrSUQsIGNv
bXBsZXRpb25IYW5kbGVyKTsKLQotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9t
YWluIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKGNuYW1lVVJMU3RyaW5nKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5
Q05BTUVEb21haW4iLCB0b1dLKGNuYW1lVVJMU3RyaW5nKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW5DYWxsYmFj
aygpCkBAIC0yNDQzLDkgKzE3NTYsOCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxs
RGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpz
dGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRSZXNldFRv
Q29uc2lzdGVudFN0YXRlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlIikp
OwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBXVFI6OnBvc3RNZXNz
YWdlKCJTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSIpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUNhbGxiYWNrKCkK
QEAgLTI0ODYsOTUgKzE3OTgsNDYgQEAgdm9pZCBUZXN0UnVubmVyOjp0ZXh0RmllbGREaWRFbmRF
ZGl0aW5nQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNr
KEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzIikpOwotICAg
IFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiR2V0
QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlk
UmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2soVmVjdG9yPFN0cmluZz4mIGRv
bWFpbnMpCitzdGF0aWMgSlNWYWx1ZVJlZiBtYWtlRG9tYWluc1ZhbHVlKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBkb21haW5zKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJbIik7CisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCdbJyk7CiAgICAgYm9vbCBm
aXJzdERvbWFpbiA9IHRydWU7CiAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0g
ICAgICAgIGlmIChmaXJzdERvbWFpbikKLSAgICAgICAgICAgIGZpcnN0RG9tYWluID0gZmFsc2U7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
LCAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkb21haW4pOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlwiIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZpcnN0RG9tYWluID8g
IlwiIiA6ICIsIFwiIiwgZG9tYWluLCAnIicpOworICAgICAgICBmaXJzdERvbWFpbiA9IGZhbHNl
OwogICAgIH0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIl0iKTsKLSAgICAKLSAg
ICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwg
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0KKyAgICBidWlsZGVyLmFwcGVuZCgnXScpOwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKG1haW5KU0NvbnRleHQoKSwgY3Jl
YXRlSlNTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpLmdldCgpKTsKK30K
K3ZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllc0Nh
bGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQoreworICAgIGF1dG8gcmVzdWx0ID0gbWFr
ZURvbWFpbnNWYWx1ZShkb21haW5zKTsKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6bG9hZGVkU3VicmVzb3VyY2VEb21haW5zKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7
CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2Fs
bGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxvYWRl
ZFN1YnJlc291cmNlRG9tYWlucyIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIp
OworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkxvYWRlZFN1YnJlc291cmNlRG9tYWlucyIpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5z
Q2FsbGJhY2soVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKQogewotICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAKLSAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1sn
KTsKLSAgICBib29sIGlzRmlyc3REb21haW4gPSB0cnVlOwotICAgIGZvciAoYXV0byYgZG9tYWlu
IDogZG9tYWlucykgewotICAgICAgICBpZiAoaXNGaXJzdERvbWFpbikKLSAgICAgICAgICAgIGlz
Rmlyc3REb21haW4gPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIlwiIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGRvbWFpbik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKLSAgICB9Ci0gICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJ10nKTsKLSAgICAKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFs
dWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7
Ci0KKyAgICBhdXRvIHJlc3VsdCA9IG1ha2VEb21haW5zVmFsdWUoZG9tYWlucyk7CiAgICAgY2Fs
bFRlc3RSdW5uZXJDYWxsYmFjayhMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnNDYWxsYmFja0lELCAx
LCAmcmVzdWx0KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrTWVkaWFEZXZpY2UoSlNT
dHJpbmdSZWYgcGVyc2lzdGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbCwgY29uc3QgY2hhciogdHlw
ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQZXJzaXN0ZW50SUQiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQodG9XSyhwZXJzaXN0ZW50SWQpKTsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxhYmVsIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKHRvV0sobGFiZWwpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlR5cGUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0eXBlKSkpOwotCi0gICAgVmVj
dG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVl
czsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6
ZSh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAg
cmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkFkZE1vY2tNZWRpYURldmljZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rp
b25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5
cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkFkZE1vY2tNZWRpYURldmljZSIsIGNyZWF0ZVdL
RGljdGlvbmFyeSh7CisgICAgICAgIHsgIlBlcnNpc3RlbnRJRCIsIHRvV0socGVyc2lzdGVudElk
KSB9LAorICAgICAgICB7ICJMYWJlbCIsIHRvV0sobGFiZWwpIH0sCisgICAgICAgIHsgIlR5cGUi
LCB0b1dLKHR5cGUpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFk
ZE1vY2tDYW1lcmFEZXZpY2UoSlNTdHJpbmdSZWYgcGVyc2lzdGVudElkLCBKU1N0cmluZ1JlZiBs
YWJlbCkKQEAgLTI1OTQsMTUzICsxODU3LDcyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1Nj
cmVlbkRldmljZShKU1N0cmluZ1JlZiBwZXJzaXN0ZW50SWQsIEpTU3RyaW5nUmVmIGxhYmVsCiAK
IHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJNb2NrTWVkaWFEZXZpY2VzKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJDbGVhck1vY2tNZWRpYURldmljZXMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIkNsZWFyTW9ja01lZGlhRGV2aWNlcyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnJlbW92ZU1vY2tNZWRpYURldmljZShKU1N0cmluZ1JlZiBwZXJzaXN0ZW50SWQpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVtb3ZlTW9ja01lZGlhRGV2aWNlIikpOwotICAgIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkodG9XSyhwZXJzaXN0ZW50SWQpKTsKLQotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiUmVtb3ZlTW9ja01lZGlhRGV2aWNlIiwg
dG9XSyhwZXJzaXN0ZW50SWQpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZXNldE1vY2tNZWRp
YURldmljZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc2V0TW9ja01lZGlhRGV2
aWNlcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiUmVzZXRNb2NrTWVkaWFEZXZpY2Vz
Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uKHVuc2ln
bmVkIG9yaWVudGF0aW9uKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iKSk7Ci0g
ICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUob3JpZW50YXRpb24p
KTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldE1vY2tDYW1lcmFPcmll
bnRhdGlvbiIsIG9yaWVudGF0aW9uKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc01vY2tSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJFbmFibGVkIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVs
bHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVy
bkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0
VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQo
KSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJ
c01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCIpOwogfQogCiAjaWYgUExBVEZP
Uk0oTUFDKQorCiB2b2lkIFRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBp
bmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDb25uZWN0TW9ja0dhbWVwYWQiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoaW5kZXgpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
Q29ubmVjdE1vY2tHYW1lcGFkIiwgaW5kZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc2Nv
bm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJEaXNjb25uZWN0TW9ja0dhbWVwYWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLQotICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiRGlzY29ubmVjdE1vY2tHYW1lcGFkIiwgaW5k
ZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkRGV0YWlscyh1bnNpZ25l
ZCBpbmRleCwgSlNTdHJpbmdSZWYgZ2FtZXBhZElELCBKU1N0cmluZ1JlZiBtYXBwaW5nLCB1bnNp
Z25lZCBheGlzQ291bnQsIHVuc2lnbmVkIGJ1dHRvbkNvdW50KQogewotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJRCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGdh
bWVwYWRJRCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTWFwcGluZyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKG1hcHBpbmcp
KTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkdhbWVwYWRJbmRleCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGluZGV4KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQXhpc0NvdW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoYXhpc0NvdW50KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uQ291bnQiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25Db3VudCkpKTsKLQotICAg
IFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdW
YWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5y
ZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAg
ICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZERldGFpbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRl
KHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZERldGFpbHMi
LCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJHYW1lcGFkSUQiLCB0b1dLKGdhbWVw
YWRJRCkgfSwKKyAgICAgICAgeyAiTWFwcGluZyIsIHRvV0sobWFwcGluZykgfSwKKyAgICAgICAg
eyAiR2FtZXBhZEluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpIH0sCisgICAg
ICAgIHsgIkF4aXNDb3VudCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhpc0NvdW50KSkgfSwK
KyAgICAgICAgeyAiQnV0dG9uQ291bnQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbkNv
dW50KSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dh
bWVwYWRBeGlzVmFsdWUodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGF4aXNJbmRleCwgZG91Ymxl
IHZhbHVlKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSkpOwot
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QXhpc0luZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
YXhpc0luZGV4KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Rv
dWJsZUNyZWF0ZSh2YWx1ZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsK
LSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5
cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5
c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5n
ZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZEF4
aXNWYWx1ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5k
YXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAg
ICAgICAgeyAiR2FtZXBhZEluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpIH0s
CisgICAgICAgIHsgIkF4aXNJbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhpc0luZGV4
KSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSkg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRC
dXR0b25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgYnV0dG9uSW5kZXgsIGRvdWJsZSB2
YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1
dHRvbkluZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
YnV0dG9uSW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKHZhbHVlKSkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlz
OwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShr
ZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdL
ZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ld
LmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1vY2tHYW1lcGFk
QnV0dG9uVmFsdWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1
ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5
KHsKKyAgICAgICAgeyAiR2FtZXBhZEluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRl
eCkpIH0sCisgICAgICAgIHsgIkJ1dHRvbkluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShi
dXR0b25JbmRleCkpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0
ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQorCiAjZWxzZQorCiB2b2lkIFRlc3RSdW5u
ZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCkKIHsKIH0KQEAgLTI3NjAsMzAgKzE5NDIs
MjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSh1bnNpZ25lZCwg
dW5zaWduZWQsIGRvdWJsZSkKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRCdXR0b25W
YWx1ZSh1bnNpZ25lZCwgdW5zaWduZWQsIGRvdWJsZSkKIHsKIH0KKwogI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxlcyhKU1ZhbHVlUmVm
IGZpbGVzVmFsdWUpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKHBhZ2UpKTsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsK
IAogICAgIGlmICghSlNWYWx1ZUlzQXJyYXkoY29udGV4dCwgZmlsZXNWYWx1ZSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEpTT2JqZWN0UmVmIGZpbGVzID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIGZpbGVzVmFsdWUsIG51bGxwdHIpOwotICAgIHN0YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5
ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBK
U1ZhbHVlUmVmIGZpbGVzTGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQs
IGZpbGVzLCBsZW5ndGhQcm9wZXJ0eS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVl
SXNOdW1iZXIoY29udGV4dCwgZmlsZXNMZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybjsKLQor
ICAgIGF1dG8gZmlsZXMgPSAoSlNPYmplY3RSZWYpZmlsZXNWYWx1ZTsKICAgICBhdXRvIGZpbGVV
UkxzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBhdXRvIGZpbGVzTGVu
Z3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgZmlsZXNM
ZW5ndGhWYWx1ZSwgbnVsbHB0cikpOworICAgIGF1dG8gZmlsZXNMZW5ndGggPSBhcnJheUxlbmd0
aChjb250ZXh0LCBmaWxlcyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlc0xlbmd0
aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWVSZWYgZmlsZVZhbHVlID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eUF0SW5kZXgoY29udGV4dCwgZmlsZXMsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpT
VmFsdWVJc1N0cmluZyhjb250ZXh0LCBmaWxlVmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgYXV0byBmaWxlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCBmaWxlVmFsdWUsIG51bGxwdHIpKTsKKyAgICAgICAgYXV0byBmaWxlID0gY3JlYXRlSlNTdHJp
bmcoY29udGV4dCwgZmlsZVZhbHVlKTsKICAgICAgICAgc2l6ZV90IGZpbGVCdWZmZXJTaXplID0g
SlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGZpbGUuZ2V0KCkpICsgMTsKICAgICAg
ICAgYXV0byBmaWxlQnVmZmVyID0gbWFrZVVuaXF1ZUFycmF5PGNoYXI+KGZpbGVCdWZmZXJTaXpl
KTsKICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhmaWxlLmdldCgpLCBmaWxlQnVmZmVy
LmdldCgpLCBmaWxlQnVmZmVyU2l6ZSk7CkBAIC0yNzk3LDIyICsxOTc0LDE1IEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXMoSlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogCiAgICAg
fQogCi0gICAgc3RhdGljIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRPcGVuUGFuZWxGaWxlVVJMcyIpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlLCBtZXNzYWdlTmFtZS5nZXQoKSwgZmlsZVVSTHMuZ2V0KCkpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0T3BlblBhbmVsRmlsZVVSTHMiLCBmaWxlVVJMcy5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXNNZWRpYUljb24oSlNW
YWx1ZVJlZiBkYXRhKQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7
Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENv
bnRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpKTsKLQotICAgIGF1dG8mIGluamVj
dGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwogICAgIC8vIEZJWE1FICgx
MjMwNTgpOiBVc2UgYSBKU0MgQVBJIHRvIGdldCBidWZmZXIgY29udGVudHMgb25jZSBzdWNoIGlz
IGV4cG9zZWQuCi0gICAgV0tSZXRhaW5QdHI8V0tEYXRhUmVmPiBpY29uRGF0YSA9IGFkb3B0V0so
V0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhBcnJheShpbmplY3RlZEJ1bmRsZS5idW5kbGUo
KSwgY29udGV4dCwgZGF0YSkpOwotCi0gICAgc3RhdGljIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRPcGVuUGFuZWxGaWxlVVJMc01l
ZGlhSWNvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgaWNvbkRhdGEuZ2V0KCkpOworICAgIGF1dG8gaWNvbkRhdGEgPSBhZG9wdFdLKFdL
QnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtYWluSlNDb250ZXh0KCksIGRhdGEpKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIlNldE9wZW5QYW5lbEZpbGVVUkxzTWVkaWFJY29uIi5nZXQoKSwgaWNvbkRhdGEuZ2V0KCkp
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGF0YSk7CiAjZW5kaWYKQEAgLTI4MjEsMTEgKzE5
OTEsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKEpTVmFs
dWVSZWYgZGF0YSkKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxz
KEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soRGlk
UmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFscyIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUodHJ1ZSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlh
bHMiLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlQWxsU2Vzc2lv
bkNyZWRlbnRpYWxzQ2FsbGJhY2soKQpAQCAtMjgzNSw0OSArMjAwMSwzMyBAQCB2b2lkIFRlc3RS
dW5uZXI6OmNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFjaygpCiAKIHZv
aWQgVGVzdFJ1bm5lcjo6Y2xlYXJET01DYWNoZShKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJET01DYWNoZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKG9yaWdpbikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJE
T01DYWNoZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xl
YXJET01DYWNoZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRE9NQ2FjaGVz
IikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhckRPTUNhY2hlcyIpOwogfQogCiBi
b29sIFRlc3RSdW5uZXI6Omhhc0RPTUNhY2hlKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJIYXNET01DYWNoZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KG9yaWdpbikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRh
KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVl
KGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOwor
ICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkhh
c0RPTUNhY2hlIiwgdG9XSyhvcmlnaW4pLmdldCgpKTsKIH0KIAogdWludDY0X3QgVGVzdFJ1bm5l
cjo6ZG9tQ2FjaGVTaXplKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJET01DYWNoZVNpemUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsK
LSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZy
ZXR1cm5EYXRhKTsKLSAgICByZXR1cm4gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4ocmV0dXJuRGF0YSkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZVJldHVybmluZ1VJbnQ2NCgiRE9NQ2FjaGVTaXplIiwgdG9XSyhvcmlnaW4pLmdldCgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGJvb2wg
d2lsbEluY3JlYXNlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFsbG93U3RvcmFn
ZVF1b3RhSW5jcmVhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHdpbGxJbmNyZWFzZSkpOwotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVh
c2UiLCB3aWxsSW5jcmVhc2UpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmdldEFwcGxpY2F0aW9u
TWFuaWZlc3RUaGVuKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVy
Q2FsbGJhY2soR2V0QXBwbGljYXRpb25NYW5pZmVzdENhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAg
ICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRBcHBsaWNhdGlvbk1hbmlmZXN0IikpOwot
ICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgi
R2V0QXBwbGljYXRpb25NYW5pZmVzdCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpZEdldEFw
cGxpY2F0aW9uTWFuaWZlc3QoKQpAQCAtMjg5NywyMjEgKzIwNDcsMTMwIEBAIHNpemVfdCBUZXN0
UnVubmVyOjp1c2VyU2NyaXB0SW5qZWN0ZWRDb3VudCgpIGNvbnN0CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6aW5qZWN0VXNlclNjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSW5qZWN0VXNlclNjcmlwdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHNj
cmlwdCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJJbmplY3RVc2VyU2NyaXB0IiwgdG9XSyhzY3JpcHQpLmdldCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZvclRl
c3RpbmcoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNlbmREaXNwbGF5Q29uZmlndXJh
dGlvbkNoYW5nZWRNZXNzYWdlRm9yVGVzdGluZyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZSgiU2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nIik7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dChkb3VibGUg
c2Vjb25kcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTZXJ2aWNlV29ya2VyRmV0
Y2hUaW1lb3V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dCIsIHNlY29uZHMpOwog
fQogCiAvLyBXZWJBdXRobgogdm9pZCBUZXN0UnVubmVyOjphZGRUZXN0S2V5VG9LZXljaGFpbihK
U1N0cmluZ1JlZiBwcml2YXRlS2V5QmFzZTY0LCBKU1N0cmluZ1JlZiBhdHRyTGFiZWwsIEpTU3Ry
aW5nUmVmIGFwcGxpY2F0aW9uVGFnQmFzZTY0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZh
bHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlByaXZhdGVLZXkiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhwcml2YXRlS2V5
QmFzZTY0KSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJBdHRyTGFiZWwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhhdHRyTGFi
ZWwpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkFwcGxpY2F0aW9uVGFnIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXBwbGlj
YXRpb25UYWdCYXNlNjQpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAg
ICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5z
aXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tp
XSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQo
KTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRUZXN0S2V5VG9LZXljaGFp
biIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCks
IHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IkFkZFRlc3RLZXlUb0tleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAi
UHJpdmF0ZUtleSIsIHRvV0socHJpdmF0ZUtleUJhc2U2NCkgfSwKKyAgICAgICAgeyAiQXR0ckxh
YmVsIiwgdG9XSyhhdHRyTGFiZWwpIH0sCisgICAgICAgIHsgIkFwcGxpY2F0aW9uVGFnIiwgdG9X
SyhhcHBsaWNhdGlvblRhZ0Jhc2U2NCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6Y2xlYW5VcEtleWNoYWluKEpTU3RyaW5nUmVmIGF0dHJMYWJlbCwgSlNTdHJpbmdS
ZWYgYXBwbGljYXRpb25MYWJlbEJhc2U2NCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJBdHRyTGFiZWwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhhdHRyTGFiZWwpKTsK
LQotICAgIGlmIChhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB7Ci0gICAgICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFiZWwi
KSkpOwotICAgICAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkp
OwotICAgIH0KLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8
V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwot
ICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNb
aV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKKyAgICBp
ZiAoIWFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpIHsKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiQ2xlYW5VcEtleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgICAg
IHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAgICB9KS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhblVw
S2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMu
ZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJDbGVhblVwS2V5Y2hhaW4iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7
ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAgICAgeyAiQXBwbGljYXRpb25M
YWJlbCIsIHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9
CiAKIGJvb2wgVGVzdFJ1bm5lcjo6a2V5RXhpc3RzSW5LZXljaGFpbihKU1N0cmluZ1JlZiBhdHRy
TGFiZWwsIEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpCiB7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRv
V0soYXR0ckxhYmVsKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVm
PiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlz
LnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgp
KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAg
ICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0g
dmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleUV4
aXN0c0luS2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdW
YWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tUeXBlUmVmIHJldHVybkRh
dGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5E
YXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZh
bHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkp
OworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiS2V5
RXhpc3RzSW5LZXljaGFpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkF0dHJM
YWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAgICB7ICJBcHBsaWNhdGlvbkxhYmVsIiwg
dG9XSyhhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdW5z
aWduZWQgbG9uZyBUZXN0UnVubmVyOjpzZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxz
Q291bnQoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNlcnZlclRydXN0RXZhbHVhdGlv
bkNhbGxiYWNrQ2FsbHNDb3VudCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxw
dHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5E
YXRhKSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tVSW50NjRHZXRWYWx1
ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOwor
ICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KCJTZXJ2ZXJU
cnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KGJvb2wgc2hv
dWxkRGlzbWlzc0FzeW5jaHJvbm91c2x5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNo
b3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KHNob3VsZERpc21pc3NBc3luY2hyb25vdXNseSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZSgiU2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseSIs
IHNob3VsZERpc21pc3NBc3luY2hyb25vdXNseSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6YWJv
cnRNb2RhbCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWJvcnRNb2RhbCIpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQWJvcnRNb2RhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wQWRDbGlja0F0dHJpYnV0
aW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdl
KCJEdW1wQWRDbGlja0F0dHJpYnV0aW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJB
ZENsaWNrQXR0cmlidXRpb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbiIpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBu
dWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiQ2xlYXJB
ZENsaWNrQXR0cmlidXRpb24iKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFkQ2xpY2tB
dHRyaWJ1dGlvbnNUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsKCkKIHsKLSAgICBhdXRvIG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJBZENs
aWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpKTsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiQ2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRh
UmVtb3ZhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92
ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVy
Rm9yVGVzdGluZyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0
cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhKU1N0cmluZ1JlZiB1cmxTdHJpbmcpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lv
blVSTEZvclRlc3RpbmciKSk7Ci0gICAgYXV0byB3dGZVUkxTdHJpbmcgPSB0b1dURlN0cmluZyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh1cmxTdHJpbmcpKTsKLSAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHd0ZlVSTFN0cmluZy51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRBZENsaWNrQXR0cmlidXRpb25D
b252ZXJzaW9uVVJMRm9yVGVzdGluZyIsCisgICAgICAgIGFkb3B0V0soV0tVUkxDcmVhdGVXaXRo
VVRGOENTdHJpbmcodG9XVEZTdHJpbmcodXJsU3RyaW5nKS51dGY4KCkuZGF0YSgpKSkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVz
dGluZygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWFya0FkQ2xpY2tBdHRyaWJ1dGlv
bnNBc0V4cGlyZWRGb3JUZXN0aW5nIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlKCJNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRl
c3RpbmciKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRPZmZzY3JlZW5DYW52YXNFbmFibGVk
KGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiT2Zmc2NyZWVuQ2FudmFzRW5hYmxl
ZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGlu
amVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5Lmdl
dCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiT2Zmc2NyZWVuQ2Fu
dmFzRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiBib29sIFRlc3RSdW5uZXI6Omhhc0FwcEJvdW5k
U2Vzc2lvbigpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhhc0FwcEJvdW5kU2Vzc2lvbiIpKTsKLSAgICBXS1R5cGVSZWYg
cmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChX
S0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0KLSAgICBy
ZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlUmV0dXJuaW5nQm9vbGVhbigiSGFzQXBwQm91bmRTZXNzaW9uIik7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6Y2xlYXJBcHBCb3VuZFNlc3Npb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhckFwcEJvdW5kU2Vz
c2lvbiIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJBcHBCb3VuZFNlc3Npb24i
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBcHBCb3VuZERvbWFpbnMoSlNWYWx1ZVJlZiBv
cmlnaW5BcnJheSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRl
c3RSdW5uZXJDYWxsYmFjayhEaWRTZXRBcHBCb3VuZERvbWFpbnNDYWxsYmFja0lELCBjb21wbGV0
aW9uSGFuZGxlcik7CiAKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAgSlNDb250ZXh0UmVmIGNvbnRl
eHQgPSBtYWluSlNDb250ZXh0KCk7CiAKICAgICBpZiAoIUpTVmFsdWVJc0FycmF5KGNvbnRleHQs
IG9yaWdpbkFycmF5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNPYmplY3RSZWYgb3JpZ2lu
cyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBvcmlnaW5BcnJheSwgbnVsbHB0cik7Ci0gICAg
c3RhdGljIGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgb3JpZ2luc0xlbmd0aFZhbHVlID0g
SlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcmlnaW5zLCBsZW5ndGhQcm9wZXJ0eS5nZXQo
KSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgb3JpZ2luc0xl
bmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgYXV0byBvcmlnaW5zID0gSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHQsIG9yaWdpbkFycmF5LCBudWxscHRyKTsKICAgICBhdXRvIG9yaWdp
blVSTHMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIGF1dG8gb3JpZ2lu
c0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIG9y
aWdpbnNMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b3JpZ2luc0xlbmd0aDsgKytpKSB7CisgICAgYXV0byBvcmlnaW5zTGVuZ3RoID0gYXJyYXlMZW5n
dGgoY29udGV4dCwgb3JpZ2lucyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9yaWdp
bnNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIG9yaWdpblZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3JpZ2lucywgaSwgbnVsbHB0cik7CiAgICAg
ICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIG9yaWdpblZhbHVlKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gb3JpZ2luID0gYWRvcHQoSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBvcmlnaW5WYWx1ZSwgbnVsbHB0cikpOworICAgICAgICBhdXRvIG9y
aWdpbiA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIG9yaWdpblZhbHVlKTsKICAgICAgICAgc2l6
ZV90IG9yaWdpbkJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUo
b3JpZ2luLmdldCgpKSArIDE7CiAgICAgICAgIGF1dG8gb3JpZ2luQnVmZmVyID0gbWFrZVVuaXF1
ZUFycmF5PGNoYXI+KG9yaWdpbkJ1ZmZlclNpemUpOwogICAgICAgICBKU1N0cmluZ0dldFVURjhD
U3RyaW5nKG9yaWdpbi5nZXQoKSwgb3JpZ2luQnVmZmVyLmdldCgpLCBvcmlnaW5CdWZmZXJTaXpl
KTsKQEAgLTMxMTksNyArMjE3OCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQm91bmREb21h
aW5zKEpTVmFsdWVSZWYgb3JpZ2luQXJyYXksIEpTVmFsdWVSZWYgY29tcGxldGlvCiAgICAgICAg
IFdLQXJyYXlBcHBlbmRJdGVtKG9yaWdpblVSTHMuZ2V0KCksIGFkb3B0V0soV0tVUkxDcmVhdGVX
aXRoVVRGOENTdHJpbmcob3JpZ2luQnVmZmVyLmdldCgpKSkuZ2V0KCkpOwogICAgIH0KIAotICAg
IGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRBcHBCb3VuZERvbWFpbnMiKSk7CisgICAgYXV0byBtZXNzYWdlTmFtZSA9IHRvV0soIlNl
dEFwcEJvdW5kRG9tYWlucyIpOwogICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgb3JpZ2luVVJMcy5n
ZXQoKSk7CiB9CiAKQEAgLTMxMjgsNiArMjE4NywxMSBAQCB2b2lkIFRlc3RSdW5uZXI6OmRpZFNl
dEFwcEJvdW5kRG9tYWluc0NhbGxiYWNrKCkKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKERp
ZFNldEFwcEJvdW5kRG9tYWluc0NhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnBv
c3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgV0tCdW5kbGVQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFt
ZSkuZ2V0KCksIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCiBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5o
CmluZGV4IGMwYTE0MDkwNWVkZjNkZGE0YTc2MWFiNjIwN2Q5N2I0MzYyMDg2YmIuLmFhZWI0MTBl
M2VkMDdmYjZjYTRmOWYwM2JmZjdkZTM3MjI1MjdmNzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCkBAIC00Niw3ICs0Niw3IEBA
IHB1YmxpYzoKICAgICAvLyBKU1dyYXBwYWJsZQogICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFw
cGVyQ2xhc3MoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpT
T2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lk
IG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIGJvb2wgaXNJT1NGYW1pbHko
KSBjb25zdAogICAgIHsKQEAgLTI1Myw3ICsyNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRX
aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChib29sIGYpIHsgbV93aWxsU2VuZFJlcXVlc3RSZXR1
cm5zTnVsbCA9IGY7IH0KICAgICBib29sIHdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRp
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGly
ZWN0OyB9CiAgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Qo
Ym9vbCBmKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0ID0gZjsgfQot
ICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0QWRkc0hUVFBCb2R5KEpTU3RyaW5nUmVmIGJvZHkp
IHsgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keSA9IHRvV1RGU3RyaW5nKHRvV0soYm9keSkpOyB9
CisgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RBZGRzSFRUUEJvZHkoSlNTdHJpbmdSZWYgYm9k
eSkgeyBtX3dpbGxTZW5kUmVxdWVzdEhUVFBCb2R5ID0gdG9XVEZTdHJpbmcoYm9keSk7IH0KICAg
ICBTdHJpbmcgd2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHkoKSBjb25zdCB7IHJldHVybiBtX3dpbGxT
ZW5kUmVxdWVzdEhUVFBCb2R5OyB9CiAKICAgICB2b2lkIHNldFRleHREaXJlY3Rpb24oSlNTdHJp
bmdSZWYpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbGxGb2N1c1dl
YlZpZXdDYWxsYmFjaygpOwogICAgIHZvaWQgY2FsbFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxi
YWNrKCk7CiAKLSAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJl
bmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgb3ZlcnJpZGVQcmVmZXJl
bmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVmIHZhbHVlKTsKIAogICAgIC8v
IENvb2tpZXMgdGVzdGluZwogICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sKTsK
QEAgLTMwNCw3ICszMDQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBHZW9sb2NhdGlvbi4KICAgICB2
b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sKTsKLSAgICB2b2lkIHNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91Ymxl
IGFjY3VyYWN5LCBKU1ZhbHVlUmVmIGFsdGl0dWRlLCBKU1ZhbHVlUmVmIGFsdGl0dWRlQWNjdXJh
Y3ksIEpTVmFsdWVSZWYgaGVhZGluZywgSlNWYWx1ZVJlZiBzcGVlZCwgSlNWYWx1ZVJlZiBmbG9v
ckxldmVsKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+
IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRv
dWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBm
bG9vckxldmVsKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFi
bGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdlKTsKICAgICBib29sIGlzR2VvbG9jYXRpb25Qcm92
aWRlckFjdGl2ZSgpOwogCkBAIC0zMzUsOCArMzM1LDggQEAgcHVibGljOgogICAgIGJvb2wgc2Vj
dXJlRXZlbnRJbnB1dElzRW5hYmxlZCgpIGNvbnN0OwogCiAgICAgSlNWYWx1ZVJlZiBmYWlsTmV4
dE5ld0NvZGVCbG9jaygpOwotICAgIEpTVmFsdWVSZWYgbnVtYmVyT2ZERkdDb21waWxlcyhKU1Zh
bHVlUmVmIHRoZUZ1bmN0aW9uKTsKLSAgICBKU1ZhbHVlUmVmIG5ldmVySW5saW5lRnVuY3Rpb24o
SlNWYWx1ZVJlZiB0aGVGdW5jdGlvbik7CisgICAgSlNWYWx1ZVJlZiBudW1iZXJPZkRGR0NvbXBp
bGVzKEpTVmFsdWVSZWYgZnVuY3Rpb24pOworICAgIEpTVmFsdWVSZWYgbmV2ZXJJbmxpbmVGdW5j
dGlvbihKU1ZhbHVlUmVmIGZ1bmN0aW9uKTsKIAogICAgIGJvb2wgc2hvdWxkRGVjaWRlTmF2aWdh
dGlvblBvbGljeUFmdGVyRGVsYXkoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZERlY2lkZU5hdmln
YXRpb25Qb2xpY3lBZnRlckRlbGF5OyB9CiAgICAgdm9pZCBzZXRTaG91bGREZWNpZGVOYXZpZ2F0
aW9uUG9saWN5QWZ0ZXJEZWxheShib29sKTsKQEAgLTU0OSw2ICs1NDksOCBAQCBwcml2YXRlOgog
CiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1fdGVzdFVSTDsgLy8gU2V0IGJ5IEluamVjdGVk
QnVuZGxlUGFnZSBvbmNlIHByb3Zpc2lvbmFsIGxvYWQgc3RhcnRzLgogCisgICAgdm9pZCBwb3N0
TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sKTsKKwogICAgIFN0cmluZyBtX3dpbGxTZW5k
UmVxdWVzdEhUVFBCb2R5OwogICAgIFdURjo6U2Vjb25kcyBtX3RpbWVvdXQgeyAzMF9zIH07CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElu
cHV0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCmluZGV4IDY0YWM4MTk3MTUzYWFlMGEwYWI3MWViYmMy
OTQyNDg0YTM1ZTY1YWQuLjZlMDBkOTkyMjVkMWYxYWFiMjYxNTZjODkyNWIwNTY2YTM2NmQ3Mjkg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElu
cHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUg
IkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2lu
Y2x1ZGUgIkluamVjdGVkQnVuZGxlUGFnZS5oIgogI2luY2x1ZGUgIkpTVGV4dElucHV0Q29udHJv
bGxlci5oIgpAQCAtNDAsMzAgKzQxLDE0IEBAIFJlZjxUZXh0SW5wdXRDb250cm9sbGVyPiBUZXh0
SW5wdXRDb250cm9sbGVyOjpjcmVhdGUoKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHRJ
bnB1dENvbnRyb2xsZXIpOwogfQogCi1UZXh0SW5wdXRDb250cm9sbGVyOjpUZXh0SW5wdXRDb250
cm9sbGVyKCkKLXsKLX0KLQotVGV4dElucHV0Q29udHJvbGxlcjo6flRleHRJbnB1dENvbnRyb2xs
ZXIoKQotewotfQotCiBKU0NsYXNzUmVmIFRleHRJbnB1dENvbnRyb2xsZXI6OndyYXBwZXJDbGFz
cygpCiB7CiAgICAgcmV0dXJuIEpTVGV4dElucHV0Q29udHJvbGxlcjo6dGV4dElucHV0Q29udHJv
bGxlckNsYXNzKCk7CiB9CiAKLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09i
amVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dP
YmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgc2V0UHJvcGVydHkoY29udGV4dCwg
d2luZG93T2JqZWN0LCAidGV4dElucHV0Q29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlv
bik7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBhcnJheUxlbmd0aChKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgYXJyYXkpCi17Ci0gICAgYXV0byBsZW5ndGhTdHJpbmcgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGlmIChhdXRvIGxl
bmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBhcnJheSwgbGVuZ3RoU3Ry
aW5nLmdldCgpLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICBy
ZXR1cm4gMDsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGV4dElucHV0
Q29udHJvbGxlciIsIHRoaXMpOwogfQogCiBzdGF0aWMgV0tBcnJheVJlZiBjcmVhdGVDb21wb3Np
dGlvbkhpZ2hsaWdodERhdGEoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYganNIaWdo
bGlnaHRzVmFsdWUpCkBAIC03Miw1MCArNTcsMTkgQEAgc3RhdGljIFdLQXJyYXlSZWYgY3JlYXRl
Q29tcG9zaXRpb25IaWdobGlnaHREYXRhKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmUK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIHJlc3VsdCA9IFdLTXV0YWJsZUFy
cmF5Q3JlYXRlKCk7Ci0gICAgYXV0byBqc0hpZ2hsaWdodHNBcnJheSA9IGNvbnN0X2Nhc3Q8SlNP
YmplY3RSZWY+KGpzSGlnaGxpZ2h0c1ZhbHVlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJh
eUxlbmd0aChjb250ZXh0LCBqc0hpZ2hsaWdodHNBcnJheSk7Ci0gICAgaWYgKCFsZW5ndGgpCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBhdXRvIGpzRnJvbUtleSA9IGFkb3B0KEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmcm9tIikpOwotICAgIGF1dG8ganNMZW5ndGhLZXkg
PSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGF1
dG8ganNDb2xvcktleSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb2xv
ciIpKTsKLQotICAgIGF1dG8gd2tGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiZnJvbSIpKTsKLSAgICBhdXRvIHdrTGVuZ3RoS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGF1dG8gd2tDb2xvcktl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbG9yIikpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVl
UmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8ganNPYmplY3RWYWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGpzSGlnaGxpZ2h0c0FycmF5LCBpLCAm
ZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbiB8fCAhSlNWYWx1ZUlzT2JqZWN0KGNv
bnRleHQsIGpzT2JqZWN0VmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
YXV0byBqc09iamVjdCA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGpzT2JqZWN0VmFsdWUpOwot
ICAgICAgICBhdXRvIGpzRnJvbVZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBq
c09iamVjdCwganNGcm9tS2V5LmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFqc0Zyb21W
YWx1ZSB8fCAhSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGpzRnJvbVZhbHVlKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8ganNMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwganNPYmplY3QsIGpzTGVuZ3RoS2V5LmdldCgpLCBudWxscHRyKTsK
LSAgICAgICAgaWYgKCFqc0xlbmd0aFZhbHVlIHx8ICFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwg
anNMZW5ndGhWYWx1ZSkpCisgICAgYXV0byBhcnJheSA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+
KGpzSGlnaGxpZ2h0c1ZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheUxlbmd0aChj
b250ZXh0LCBhcnJheSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250
ZXh0LCBhcnJheSwgaSwgbnVsbHB0cik7CisgICAgICAgIGlmICghdmFsdWUgfHwgIUpTVmFsdWVJ
c09iamVjdChjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBhdXRvIGpzQ29sb3JWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwganNPYmpl
Y3QsIGpzQ29sb3JLZXkuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICBpZiAoIWpzQ29sb3JWYWx1
ZSB8fCAhSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGpzQ29sb3JWYWx1ZSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIGNvbG9yID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBqc0NvbG9yVmFsdWUsIG51bGxwdHIpKTsKLSAgICAgICAgYXV0byB3a0Nv
bG9yID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhjb2xvci5nZXQoKSkpOwot
ICAgICAgICBhdXRvIHdrRnJvbSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobHJvdW5kKEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBqc0Zyb21WYWx1ZSwgbnVsbHB0cikpKSk7Ci0gICAgICAgIGF1
dG8gd2tMZW5ndGggPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxyb3VuZChKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwganNMZW5ndGhWYWx1ZSwgbnVsbHB0cikpKSk7Ci0KKyAgICAgICAgYXV0byBv
YmplY3QgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPih2YWx1ZSk7CiAgICAgICAgIGF1dG8gZGlj
dGlvbmFyeSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLSAgICAgICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShkaWN0aW9uYXJ5LmdldCgpLCB3a0Zyb21LZXkuZ2V0KCksIHdr
RnJvbS5nZXQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQo
KSwgd2tMZW5ndGhLZXkuZ2V0KCksIHdrTGVuZ3RoLmdldCgpKTsKLSAgICAgICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShkaWN0aW9uYXJ5LmdldCgpLCB3a0NvbG9yS2V5LmdldCgpLCB3a0NvbG9yLmdl
dCgpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImZyb20iLCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4obnVtZXJpY1Byb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgImZyb20iKSkpOworICAg
ICAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCAibGVuZ3RoIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJsZW5ndGgiKSkpOworICAgICAgICBz
ZXRWYWx1ZShkaWN0aW9uYXJ5LCAiY29sb3IiLCB0b1dLKHN0cmluZ1Byb3BlcnR5KGNvbnRleHQs
IG9iamVjdCwgImNvbG9yIikpLmdldCgpKTsKICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0ocmVz
dWx0LCBkaWN0aW9uYXJ5LmdldCgpKTsKICAgICB9Ci0KICAgICByZXR1cm4gcmVzdWx0OwogfQog
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJ
bnB1dENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGV4dElucHV0Q29udHJvbGxlci5oCmluZGV4IDU1OGMyZTYxMTQwODE3ODVlM2I3Y2FlMTlmZWZk
Mzk2YWViMzdhOTQuLmE0NGMyOGU4NDQzOTE3MjkyYTliMzdiY2I3ZTI1NTJkMTIxNDRjYTQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0
Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGV4dElucHV0Q29udHJvbGxlci5oCkBAIC0yOCwxNyArMjgsMTcgQEAKICNpbmNsdWRlICJKU1dy
YXBwYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAordHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
T3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1N0
cmluZyogSlNTdHJpbmdSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBK
U1ZhbHVlUmVmOworCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVGV4dElucHV0Q29udHJvbGxl
ciA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CitjbGFzcyBUZXh0SW5wdXRDb250cm9sbGVyIGZpbmFs
IDogcHVibGljIEpTV3JhcHBhYmxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFRleHRJbnB1
dENvbnRyb2xsZXI+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgflRleHRJbnB1dENvbnRyb2xsZXIo
KTsKLQotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBwZXJD
bGFzcygpOwogCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmpl
Y3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFr
ZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgdm9pZCBzZXRNYXJrZWRUZXh0KEpT
U3RyaW5nUmVmIHRleHQsIGludCBmcm9tLCBpbnQgbGVuZ3RoLCBib29sIHN1cHByZXNzVW5kZXJs
aW5lLCBKU1ZhbHVlUmVmIGhpZ2hsaWdodHMpOwogICAgIGJvb2wgaGFzTWFya2VkVGV4dCgpOwpA
QCAtNDYsNyArNDYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRUZXh0KEpTU3RyaW5nUmVm
IHRleHQpOwogCiBwcml2YXRlOgotICAgIFRleHRJbnB1dENvbnRyb2xsZXIoKTsKKyAgICBUZXh0
SW5wdXRDb250cm9sbGVyKCkgPSBkZWZhdWx0OworCisgICAgSlNDbGFzc1JlZiB3cmFwcGVyQ2xh
c3MoKSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2Eu
bW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0FjdGl2YXRl
Rm9udHNDb2NvYS5tbQppbmRleCAwMjRmZTYwNTczYjhmMmM1OTJlYmZkYjM1ZjNhNDQ0ODVjZGI5
NzU2Li41YTViNzdlYzE5NGRhNWZlM2ZmZjk5MTM3Y2U5YWNkMjZkZmU0YzFlIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0FjdGl2YXRlRm9u
dHNDb2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2Nv
Y29hL0FjdGl2YXRlRm9udHNDb2NvYS5tbQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgYWN0aXZh
dGVGb250cygpCiAKIHZvaWQgaW5zdGFsbEZha2VIZWx2ZXRpY2EoV0tTdHJpbmdSZWYgY29uZmln
dXJhdGlvbikKIHsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvbmZpZ3VyYXRpb25TdHJp
bmcgPSBhZG9wdENGKFdLU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNv
bmZpZ3VyYXRpb24pKTsKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb25TdHJpbmcgPSBhZG9wdENGKFdL
U3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRpb24pKTsK
ICAgICBOU1VSTCAqcmVzb3VyY2VVUkwgPSBbcmVzb3VyY2VzRGlyZWN0b3J5VVJMKCkgVVJMQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmFrZUhl
bHZldGljYS0lQC50dGYiLCBjb25maWd1cmF0aW9uU3RyaW5nLmdldCgpXSBpc0RpcmVjdG9yeTpO
T107CiAgICAgQ0ZFcnJvclJlZiBlcnJvciA9IG51bGxwdHI7CiAgICAgaWYgKCFDVEZvbnRNYW5h
Z2VyUmVnaXN0ZXJGb250c0ZvclVSTCgoX19icmlkZ2UgQ0ZVUkxSZWYpcmVzb3VyY2VVUkwsIGtD
VEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJyb3IpKSB7CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFnZUNv
Y29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbQppbmRleCA4MTc2MTgyN2E4ODFkMDZkZmU3MGE5YmQzMjI0
NzMyYWUxOWJjZjI4Li45MWQyNDljNzI3ZjY4NzVlZDRhNGNjZjE1OWMwZjc3ZDcyZjg1YmQ1IDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0lu
amVjdGVkQnVuZGxlUGFnZUNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0KQEAgLTQ3LDEzICs0
NywxMyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cGxhdGZvcm1EaWRTdGFydFByb3Zpc2lv
bmFsTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZQogCiBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpwbGF0Zm9ybVJlc3BvbnNlTWltZVR5cGUoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSkK
IHsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMo
V0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CisgICAgYXV0byBuc1VS
TFJlc3BvbnNlID0gYWRvcHROUyhXS1VSTFJlc3BvbnNlQ29weU5TVVJMUmVzcG9uc2UocmVzcG9u
c2UpKTsKICAgICByZXR1cm4gW25zVVJMUmVzcG9uc2UuZ2V0KCkgTUlNRVR5cGVdOwogfQogCiB1
aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVyQ291bnQoV0tVUkxSZXNw
b25zZVJlZiByZXNwb25zZSkKIHsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gbnNVUkxS
ZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNl
KSk7CisgICAgYXV0byBuc1VSTFJlc3BvbnNlID0gYWRvcHROUyhXS1VSTFJlc3BvbnNlQ29weU5T
VVJMUmVzcG9uc2UocmVzcG9uc2UpKTsKICAgICBpZiAoIVtuc1VSTFJlc3BvbnNlIGlzS2luZE9m
Q2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiB7IH07CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KaW5kZXggODdjY2Qy
MWNhOWE3N2FhMmQwYTIxYTRjYWI1MjFjYWVlZmE5YzRhMi4uYzQxODIzMGYzYjRmZGU3MTlhYzZj
Y2M4NGI3NDJkYmVjYTE0ZDI0YSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJJT1MubW0KQEAgLTYyLDcgKzYyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJpb3MiKSk7CisgICAgcmV0dXJu
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoImlvcyIpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGlj
IGlkIGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChpZCBvYmosIE5TU3RyaW5nICppZEF0dHJpYnV0
ZSkKIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWRBdHRyaWJ1dGUpCiB7Ci0g
ICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpOwogICAgIGlkIHJvb3QgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxl
bWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7CiAKICAgICBpZCByZXN1bHQg
PSBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQocm9vdCwgW05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0
cmluZ1JlZjppZEF0dHJpYnV0ZV0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRJT1MubW0KaW5kZXggNTIyMzRhYTRkNzQ3MmNkZTA3MWQ5ZTg2OTY5MGQ5MzU1MjlhMjBkMi4u
YmJjOGJiMTZjODY0YmMyNjEwY2ZhYTY5YTA2ZmQ4MTNjNzY5NWQwNCAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudElPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCkBAIC0xMzYsMTEgKzEzNiw2IEBAIEBlbmQK
IAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3Jl
YXRlRW1wdHlKU1N0cmluZygpCi17Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMobnVsbHB0ciwgMCkpOwotfQotCiBzdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IGNvbmNhdGVuYXRlQXR0cmlidXRlQW5kVmFsdWUoTlNTdHJpbmcgKmF0dHJpYnV0ZSwg
TlNTdHJpbmcgKnZhbHVlKQogewogICAgIFZlY3RvcjxVbmlDaGFyPiBidWZmZXIoW2F0dHJpYnV0
ZSBsZW5ndGhdKTsKQEAgLTMzMCwyNyArMzI1LDI3IEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNjbG9zZWRCeVJvdygpCiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZM
aW5rZWRVSUVsZW1lbnRzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOwor
ICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlK
U1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnN0cmluZ0Rlc2NyaXB0aW9uT2ZBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRy
aWJ1dGUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4g
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0
ZSkKQEAgLTM4Miw3ICszNzcsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZQogICAgIGlmIChK
U1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGF0dHJpYnV0ZSwgIkFYVGV4dHVhbENvbnRleHQi
KSkKICAgICAgICAgcmV0dXJuIFtbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlUZXh0dWFsQ29udGV4
dF0gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3Ry
aW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1
dGUpCkBAIC00NDMsMTcgKzQzOCwxNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
QXR0cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVOYW1lcygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1
cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3Ry
aW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwog
fQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9s
ZURlc2NyaXB0aW9uKCkKQEAgLTQ2MywxMyArNDU4LDEyIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24oKQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3Ry
aW5nKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
ZGVzY3JpcHRpb24oKQpAQCAtNDc5LDcgKzQ3Myw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKQEAgLTQ4OSw3ICs0ODMsNyBAQCBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUoKQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQogewot
ICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3Ry
aW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpoZWxwVGV4dCgpIGNvbnN0CkBAIC01NDksNyArNTQzLDcgQEAgZG91YmxlIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24oKQogewotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAK
IGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQpA
QCAtNTg0LDcgKzU3OCw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJl
ZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBA
IC01OTYsMTMgKzU4OSwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0
ZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRp
b25BY3RpdmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRl
KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC02MzgsNyArNjI5LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojphcmlh
SXNHcmFiYmVkKCkgY29uc3QKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogLy8g
cGFyYW1ldGVyaXplZCBhdHRyaWJ1dGVzCkBAIC02NTksNyArNjUwLDcgQEAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yUG9zaXRpb24oaW50
IHgsIGludCB5KQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVK
U1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c3RyaW5nRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0
aCkKQEAgLTcxMywzMiArNzA0LDMyIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZWxlY3RUZXh0V2l0aENyaXRlcmlhKEpTQ29udGV4CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZD
b2x1bW5IZWFkZXJzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAg
IHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycygpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmco
KTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlK
U1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVy
KCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dHJhaXRzKCkKQEAgLTkwMywyMyArODk0LDIxIEBAIHZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29u
c3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4o
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpT
U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVK
U1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZG9jdW1lbnRVUkkoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXNzaXN0aXZlVGVjaG5vbG9neVNpbXVsYXRlZEZvY3VzKCkKQEAgLTEwMTYs
MzEgKzEwMDUsMjYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSgp
IGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxlKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc09mZlNjcmVlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0Nv
bGxhcHNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtMTA1MiwxMyArMTAzNiwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNTaW5nbGVMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5l
KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC0xMDc0LDIyICsxMDU2LDE4IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpwb3B1cFZhbHVlKCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0K
IAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRk
U2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50CiB9CiAKIC8vIFRleHQgbWFya2VycwpAQCAtMTEzNiw3ICsxMTE0LDcgQEAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclRleHRN
YXJrZXJSYW5nZShBY2Nlc3MKIHsKICAgICBpZCB0ZXh0TWFya2VycyA9IG1hcmtlclJhbmdlLT5w
bGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpOwogICAgIGlmICghW3RleHRNYXJrZXJzIGlzS2luZE9m
Q2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiAgICAgcmV0dXJuIFtbbV9l
bGVtZW50IHN0cmluZ0ZvclRleHRNYXJrZXJzOnRleHRNYXJrZXJzXSBjcmVhdGVKU1N0cmluZ1Jl
Zl07CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tCmluZGV4IGNhYjNmMThiMzY1
OWY0OTE2YmQ1MDA4NzkyODZkNmEyN2MwYzlmOTEuLjk4MWExZmQwZGM3NTgwY2YwMTJkMzE1NmI4
ZjlkZjk4OTMwMTFiZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvRXZlbnRTZW5kZXJQcm94eUlPUy5tbQpAQCAtMzYs
MjQgKzM2LDEyIEBAIG5hbWVzcGFjZSBXVFIgewogCiBFdmVudFNlbmRlclByb3h5OjpFdmVudFNl
bmRlclByb3h5KFRlc3RDb250cm9sbGVyKiB0ZXN0Q29udHJvbGxlcikKICAgICA6IG1fdGVzdENv
bnRyb2xsZXIodGVzdENvbnRyb2xsZXIpCi0gICAgLCBtX3RpbWUoMCkKLSAgICAsIG1fcG9zaXRp
b24oKQotICAgICwgbV9sZWZ0TW91c2VCdXR0b25Eb3duKGZhbHNlKQotICAgICwgbV9jbGlja0Nv
dW50KDApCi0gICAgLCBtX2NsaWNrVGltZSgwKQotICAgICwgbV9jbGlja1Bvc2l0aW9uKCkKLSAg
ICAsIG1fY2xpY2tCdXR0b24oa1dLRXZlbnRNb3VzZUJ1dHRvbk5vQnV0dG9uKQotICAgICwgZXZl
bnROdW1iZXIoMCkKIHsKICAgICBVTlVTRURfUEFSQU0obV90ZXN0Q29udHJvbGxlcik7CiAgICAg
VU5VU0VEX1BBUkFNKG1fbGVmdE1vdXNlQnV0dG9uRG93bik7CiAgICAgVU5VU0VEX1BBUkFNKGV2
ZW50TnVtYmVyKTsKIH0KIAotRXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2VuZGVyUHJveHkoKQot
ewotfQotCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24o
aW50IGJ1dHRvbikKIHsKICAgICBpZiAobV90aW1lIC0gbV9jbGlja1RpbWUgPCAxICYmIG1fcG9z
aXRpb24gPT0gbV9jbGlja1Bvc2l0aW9uICYmIGJ1dHRvbiA9PSBtX2NsaWNrQnV0dG9uKSB7CkBA
IC03MCwxNyArNTgsMTQgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50
Rm9yQnV0dG9uKGludCBidXR0b24pCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VEb3du
KHVuc2lnbmVkIGJ1dHRvbk51bWJlciwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMpCiB7Ci0g
ICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VVcCh1bnNp
Z25lZCBidXR0b25OdW1iZXIsIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQogewotICAgIC8v
IFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlTW92ZVRvKGRvdWJs
ZSB4LCBkb3VibGUgeSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRl
clByb3h5OjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQpAQCAtOTAsNzkgKzc1LDY2IEBA
IHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKIAog
dm9pZCBFdmVudFNlbmRlclByb3h5OjprZXlEb3duKFdLU3RyaW5nUmVmIGtleSwgV0tFdmVudE1v
ZGlmaWVycyBtb2RpZmllcnMsIHVuc2lnbmVkIGtleUxvY2F0aW9uKQogewotICAgIC8vIFdyaXRl
IG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnkoaW50IHgsIGlu
dCB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1v
dXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQgeCwgaW50IHksIGludCBw
aGFzZSwgaW50IG1vbWVudHVtKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSwgYm9vbCBw
YWdlZCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CisKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpCiB7
Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91
Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0K
IAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdLRXZlbnRNb2RpZmll
cnMsIGJvb2wgZW5hYmxlKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnNldFRvdWNoUG9pbnRSYWRpdXMoaW50IHJhZGl1c1gsIGludCByYWRpdXNZKQog
ewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoU3Rh
cnQoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRv
dWNoTW92ZSgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94
eTo6dG91Y2hFbmQoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVu
dFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0K
IAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpyZWxlYXNlVG91Y2hQb2ludChpbnQgaW5kZXgpCiB7
Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y2FuY2VsVG91
Y2hQb2ludChpbnQgaW5kZXgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CisKICNlbmRpZgogCiB9
IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0gYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tCmlu
ZGV4IDI1ZTBjM2QwMGU0OWJiMmI1ZWQyMDNlMTkwY2YxZWNjOTBkZjNhZjQuLjM1NGE4ZjY1NTVj
NmMwMDI2NWY1NjgxYTZiMzcxNTJhODRhNTYyYzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbW1vbk1hYy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNv
bW1vbk1hYy5oIgogCiAjaW1wb3J0ICJKU1dyYXBwZXIuaCIKKyNpbXBvcnQgIlN0cmluZ0Z1bmN0
aW9ucy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9y
dCA8b2JqYy9ydW50aW1lLmg+CiAKQEAgLTYxLDI2ICs2MiwyMiBAQCBDbGFzcyB3ZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKCkKICAgICByZXR1cm4gY2xzOwogfQogCi1zdGF0aWMg
SlNWYWx1ZVJlZiBtYWtlQXJyYXlSZWZGb3JBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgTlNB
cnJheSAqYXJyYXkpCitzdGF0aWMgSlNPYmplY3RSZWYgbWFrZUpTQXJyYXkoSlNDb250ZXh0UmVm
IGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQogewogICAgIE5TVUludGVnZXIgY291bnQgPSBhcnJh
eS5jb3VudDsKICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tjb3VudF07Ci0KICAgICBmb3IgKE5T
VUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICBhcmd1bWVudHNbaV0gPSBt
YWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7Ci0K
ICAgICByZXR1cm4gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgY291bnQsIGFyZ3VtZW50cywg
bnVsbHB0cik7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9u
YXJ5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkpCitzdGF0
aWMgSlNPYmplY3RSZWYgbWFrZUpTT2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0RpY3Rp
b25hcnkgKmRpY3Rpb25hcnkpCiB7Ci0gICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNPYmplY3RN
YWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIpOwotCisgICAgYXV0byBvYmplY3QgPSBKU09i
amVjdE1ha2UoY29udGV4dCwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgW2RpY3Rpb25hcnkgZW51
bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNTdHJpbmcgKmtleSwgaWQgb2JqLCBC
T09MICopIHsKICAgICAgICAgaWYgKEpTVmFsdWVSZWYgcHJvcGVydHlWYWx1ZSA9IG1ha2VWYWx1
ZVJlZkZvclZhbHVlKGNvbnRleHQsIG9iaikpCiAgICAgICAgICAgICBKU09iamVjdFNldFByb3Bl
cnR5KGNvbnRleHQsIG9iamVjdCwgW2tleSBjcmVhdGVKU1N0cmluZ1JlZl0uZ2V0KCksIHByb3Bl
cnR5VmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7CiAgICAgfV07Ci0K
ICAgICByZXR1cm4gb2JqZWN0OwogfQogCkBAIC05Niw5ICs5Myw5IEBAIEpTVmFsdWVSZWYgbWFr
ZVZhbHVlUmVmRm9yVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGlkIHZhbHVlKQogICAgIGlm
IChbdmFsdWUgaXNLaW5kT2ZDbGFzczp3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNz
KCldKQogICAgICAgICByZXR1cm4gdG9KUyhjb250ZXh0LCBXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4odmFsdWUpKS5wdHIo
KSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkK
LSAgICAgICAgcmV0dXJuIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KGNvbnRleHQsIHZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIG1ha2VKU09iamVjdChjb250ZXh0LCB2YWx1ZSk7CiAgICAgaWYg
KFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBt
YWtlQXJyYXlSZWZGb3JBcnJheShjb250ZXh0LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBtYWtl
SlNBcnJheShjb250ZXh0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTEx
NSwyOCArMTEyLDE2IEBAIE5TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlCiAKICAgICBpZiAoc2VhcmNo
S2V5KSB7CiAgICAgICAgIGlkIHNlYXJjaEtleVBhcmFtZXRlciA9IG5pbDsKLSAgICAgICAgaWYg
KEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hLZXkpKSB7Ci0gICAgICAgICAgICBhdXRv
IHNlYXJjaEtleVN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgc2Vh
cmNoS2V5LCBudWxscHRyKSk7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoS2V5U3RyaW5nKQotICAg
ICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtOU1N0cmluZyBzdHJpbmdXaXRoSlNT
dHJpbmdSZWY6c2VhcmNoS2V5U3RyaW5nLmdldCgpXTsKLSAgICAgICAgfSBlbHNlIGlmIChKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoS2V5KSkgeworICAgICAgICBpZiAoSlNWYWx1ZUlz
U3RyaW5nKGNvbnRleHQsIHNlYXJjaEtleSkpCisgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0
ZXIgPSB0b1dURlN0cmluZyhjb250ZXh0LCBzZWFyY2hLZXkpOworICAgICAgICBlbHNlIGlmIChK
U1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoS2V5KSkgewogICAgICAgICAgICAgSlNPYmpl
Y3RSZWYgc2VhcmNoS2V5QXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoS2V5
LCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaEtleUFycmF5TGVuZ3RoID0g
MDsKLQotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVl
UmVmIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQsIHNlYXJjaEtleUFycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7
Ci0gICAgICAgICAgICBpZiAoc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNO
dW1iZXIoY29udGV4dCwgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAg
ICAgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLQor
ICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSBhcnJheUxlbmd0aChj
b250ZXh0LCBzZWFyY2hLZXlBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2VhcmNoS2V5QXJyYXlMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWYgc2VhcmNoS2V5VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBzZWFyY2hLZXlBcnJheSwgaSwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgSlNTdHJpbmdS
ZWYgc2VhcmNoS2V5U3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hL
ZXlWYWx1ZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0cmluZykg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoIXNlYXJjaEtleVBhcmFtZXRlcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtOU011dGFibGVBcnJheSBhcnJh
eV07Ci0gICAgICAgICAgICAgICAgICAgIFtzZWFyY2hLZXlQYXJhbWV0ZXIgYWRkT2JqZWN0OltO
U1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoS2V5U3RyaW5nXV07Ci0gICAgICAg
ICAgICAgICAgICAgIEpTU3RyaW5nUmVsZWFzZShzZWFyY2hLZXlTdHJpbmcpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaEtleSA9IHRvV1RGU3RyaW5nKGNv
bnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaEtleUFycmF5
LCBpLCBudWxscHRyKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hLZXlQYXJhbWV0ZXIp
CisgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtOU011dGFibGVBcnJh
eSBhcnJheV07CisgICAgICAgICAgICAgICAgW3NlYXJjaEtleVBhcmFtZXRlciBhZGRPYmplY3Q6
c2VhcmNoS2V5XTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoc2VhcmNo
S2V5UGFyYW1ldGVyKQpAQCAtMTQ0LDEwICsxMjksOSBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFBy
ZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRS
ZQogICAgIH0KIAogICAgIGlmIChzZWFyY2hUZXh0ICYmIEpTU3RyaW5nR2V0TGVuZ3RoKHNlYXJj
aFRleHQpKQotICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6W05TU3Ry
aW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hUZXh0XSBmb3JLZXk6QCJBWFNlYXJjaFRl
eHQiXTsKKyAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OnRvV1RGU3Ry
aW5nKHNlYXJjaFRleHQpIGZvcktleTpAIkFYU2VhcmNoVGV4dCJdOwogCiAgICAgW3BhcmFtZXRl
cml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OkAodmlzaWJsZU9ubHkpIGZvcktleTpAIkFYVmlzaWJs
ZU9ubHkiXTsKLQogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKGltbWVk
aWF0ZURlc2NlbmRhbnRzT25seSkgZm9yS2V5OkAiQVhJbW1lZGlhdGVEZXNjZW5kYW50c09ubHki
XTsKIAogICAgIHJldHVybiBwYXJhbWV0ZXJpemVkQXR0cmlidXRlOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRleCA5MTNhZTBmNzVjZGI0ZWQ1ZGVkZGVi
OTI1ZjZjOTUwMThkZGQxNzA0Li5hODg3ZGU1Yzg1ZDUwMjg0ZmQyNDQ3MTI1MTZlODljOTk4YzNh
YTVmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21h
Yy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQpAQCAt
MzUsNiArMzUsNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIu
aCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZVBh
Z2UuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0
cmluZ1JlZkNGLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS0J1bmRsZVBhZ2UuaD4KQEAgLTk2LDcgKzk3LDcgQEAgc3RhdGljIGlkIGZpbmRBY2Nlc3Np
YmxlT2JqZWN0QnlJZChpZCBvYmosIE5TU3RyaW5nICppZEF0dHJpYnV0ZSkKIAogUmVmUHRyPEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxl
RWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWRBdHRyaWJ1dGUpCiB7Ci0gICAgV0tCdW5kbGVQYWdl
UmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Cisg
ICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
OwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3QgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxl
bWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7CiAKICAgICBSZXRhaW5QdHI8
aWQ+IHJlc3VsdDsKQEAgLTExMSw3ICsxMTIsNyBAQCBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZChKUwog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRm
b3JtTmFtZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJtYWMiKSk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoIm1hYyIpOwogfQog
CiAvLyBBWFRocmVhZCBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRNYWMubW0KaW5kZXggNTBiM2UwMjIwYjhkMTIyYWQyMmJjOTZkNDI0Y2ZkODMzMWI2
NWY1OS4uMmVmZjQ1NGU2Njc5MWQ2OThmOTViZWM3Njk0YTA5ZmIyY2NmMGExMSAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC0zMiw3ICszMiw3IEBACiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRs
ZS5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCi0KKyNpbXBvcnQgIkpTQmFzaWNz
LmgiCiAjaW1wb3J0IDxBcHBLaXQvTlNBY2Nlc3NpYmlsaXR5Lmg+CiAjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0Yu
aD4KQEAgLTg3LDExICs4Nyw2IEBAIEBlbmQKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0gICAgcmV0
dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkpOwotfQot
CiBSZWZQdHI8QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNfY29udHJvbGxlcjsKIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudChpZCBlbGVtZW50KQpAQCAtMjA2LDcgKzIwMSw3IEBAIHN0YXRpYyBOU1N0cmluZyog
ZGVzY3JpcHRpb25PZlZhbHVlKGlkIHZhbHVlT2JqZWN0LCBpZCBlbGVtZW50KQogCiBzdGF0aWMg
TlNTdHJpbmcgKmF0dHJpYnV0ZXNPZkVsZW1lbnQoaWQgYWNjZXNzaWJpbGl0eU9iamVjdCkKIHsK
LSAgICBSZXRhaW5QdHI8TlNBcnJheT4gYXR0cmlidXRlcyA9IHN1cHBvcnRlZEF0dHJpYnV0ZXMo
YWNjZXNzaWJpbGl0eU9iamVjdCk7CisgICAgYXV0byBhdHRyaWJ1dGVzID0gc3VwcG9ydGVkQXR0
cmlidXRlcyhhY2Nlc3NpYmlsaXR5T2JqZWN0KTsKIAogICAgIE5TTXV0YWJsZVN0cmluZyogYXR0
cmlidXRlc1N0cmluZyA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKICAgICBmb3IgKE5TU3Ry
aW5nKiBhdHRyaWJ1dGUgaW4gYXR0cmlidXRlcy5nZXQoKSkgewpAQCAtMjI3LDE2ICsyMjIsMTMg
QEAgc3RhdGljIE5TU3RyaW5nICphdHRyaWJ1dGVzT2ZFbGVtZW50KGlkIGFjY2Vzc2liaWxpdHlP
YmplY3QpCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXNTdHJpbmc7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1zdGF0aWMgSlNWYWx1ZVJlZiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheShKU0Nv
bnRleHRSZWYgY29udGV4dCwgVmVjdG9yPFQ+IGNvbnN0JiBlbGVtZW50cykKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0YXRpYyBKU09iamVjdFJlZiBtYWtlSlNBcnJheShKU0NvbnRleHRSZWYgY29u
dGV4dCwgY29uc3QgVmVjdG9yPFQ+JiBlbGVtZW50cykKIHsKLSAgICBKU1ZhbHVlUmVmIGFycmF5
UmVzdWx0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7Ci0gICAgSlNPYmpl
Y3RSZWYgYXJyYXlPYmogPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJyYXlSZXN1bHQsIDAp
OworICAgIGF1dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsK
ICAgICBzaXplX3QgZWxlbWVudENvdW50ID0gZWxlbWVudHMuc2l6ZSgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZWxlbWVudENvdW50OyArK2kpCi0gICAgICAgIEpTT2JqZWN0U2V0UHJv
cGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2JqLCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwg
ZWxlbWVudHNbaV0tPndyYXBwZXJDbGFzcygpLCBlbGVtZW50c1tpXS5nZXQoKSksIDApOwotCi0g
ICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRl
eChjb250ZXh0LCBhcnJheSwgaSwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGVsZW1lbnRzW2ldLT53
cmFwcGVyQ2xhc3MoKSwgZWxlbWVudHNbaV0uZ2V0KCkpLCAwKTsKKyAgICByZXR1cm4gYXJyYXk7
CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY29uY2F0ZW5hdGVBdHRyaWJ1
dGVBbmRWYWx1ZShOU1N0cmluZyogYXR0cmlidXRlLCBOU1N0cmluZyogdmFsdWUpCkBAIC0yNzMs
MjUgKzI2NSwxMyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpzZWxlY3RUZXh0UGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJlZiBjbwogICAgIAogICAgIGlmIChzZWFy
Y2hTdHJpbmdzKSB7CiAgICAgICAgIE5TTXV0YWJsZUFycmF5ICpzZWFyY2hTdHJpbmdzUGFyYW1l
dGVyID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmlu
Zyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgewotICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJp
bmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hTdHJp
bmdzLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKLSAg
ICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6W05TU3RyaW5n
IHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5nLmdldCgpXV07Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0
cmluZ3MpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoU3Ry
aW5ncykpCisgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9X
VEZTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncyldOworICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNl
YXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1
dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJy
YXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgc2VhcmNoU3RyaW5n
c0FycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBpZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNv
bnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBz
ZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFy
Y2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNo
U3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgSlNPYmpl
Y3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBpLCBudWxs
cHRyKSwgbnVsbHB0cikpOwotICAgICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5n
KQotICAgICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6
W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5nLmdldCgp
XV07Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJy
YXlMZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXkpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0
aDsgKytpKQorICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVj
dDp0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxwdHIpKV07CiAgICAgICAgIH0KICAgICAgICAg
W3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OnNlYXJjaFN0cmluZ3NQYXJhbWV0ZXIg
Zm9yS2V5OkAiQVhTZWxlY3RUZXh0U2VhcmNoU3RyaW5ncyJdOwogICAgIH0KQEAgLTMxNCwyNCAr
Mjk0LDEzIEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yQ3JpdGVyaWEoSlNDb250ZXh0UmVmIGNvCiAKICAgICBpZiAoc2VhcmNoU3RyaW5n
cykgewogICAgICAgICBOU011dGFibGVBcnJheSAqc2VhcmNoU3RyaW5nc1BhcmFtZXRlciA9IFtO
U011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4
dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmlu
ZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVs
bHB0cikpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAg
ICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdX
aXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICB9IGVs
c2UgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgeworICAgICAg
ICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKQorICAgICAgICAg
ICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNvbnRleHQs
IHNlYXJjaFN0cmluZ3MpXTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKU09iamVjdFJl
ZiBzZWFyY2hTdHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3Ry
aW5ncywgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGggPSAwOwotCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAgICAg
IEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFBy
b3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcu
Z2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0
aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5n
dGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0cmlu
Z3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKLSAgICAgICAgICAgICAgICBpZiAoc2Vh
cmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJh
bWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3Ry
aW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdW5zaWduZWQg
c2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgc2VhcmNoU3Ry
aW5nc0FycmF5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hT
dHJpbmdzQXJyYXlMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1Bh
cmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmcoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0
eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSldOwogICAg
ICAgICB9CiAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpzZWFyY2hT
dHJpbmdzUGFyYW1ldGVyIGZvcktleTpAIkFYU2VhcmNoVGV4dFNlYXJjaFN0cmluZ3MiXTsKICAg
ICB9CkBAIC00MDEsNyArMzcwLDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpyb3dIZWFkZXJzKCkgY29uc3QKICAgICBpZCB2YWx1ZSA9IGF0dHJpYnV0ZVZhbHVlKG1fZWxl
bWVudC5nZXQoKSwgTlNBY2Nlc3NpYmlsaXR5Um93SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZSk7
CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCiAgICAgICAg
IGVsZW1lbnRzID0gbWFrZVZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KHZh
bHVlKTsKLSAgICByZXR1cm4gY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+Pihjb250ZXh0LCBlbGVtZW50cyk7CisgICAgcmV0dXJuIG1ha2VK
U0FycmF5KGNvbnRleHQsIGVsZW1lbnRzKTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiB9
CiAKQEAgLTQxNSw3ICszODQsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmNvbHVtbkhlYWRlcnMoKSBjb25zdAogICAgIGlkIHZhbHVlID0gYXR0cmlidXRlVmFsdWUobV9l
bGVtZW50LmdldCgpLCBOU0FjY2Vzc2liaWxpdHlDb2x1bW5IZWFkZXJVSUVsZW1lbnRzQXR0cmli
dXRlKTsKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKICAg
ICAgICAgZWxlbWVudHMgPSBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Pj4odmFsdWUpOwotICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheTxSZWZQdHI8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KGNvbnRleHQsIGVsZW1lbnRzKTsKKyAgICByZXR1cm4g
bWFrZUpTQXJyYXkoY29udGV4dCwgZWxlbWVudHMpOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElP
TlMKIH0KICAgICAKQEAgLTYwNyw3ICs1NzYsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnVpRWxlbWVudEFycmF5QXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cgog
CiAgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4gZWxlbWVudHM7CiAg
ICAgZ2V0VUlFbGVtZW50c1dpdGhBdHRyaWJ1dGUoYXR0cmlidXRlLCBlbGVtZW50cyk7Ci0gICAg
cmV0dXJuIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Pj4oY29udGV4dCwgZWxlbWVudHMpOworICAgIHJldHVybiBtYWtlSlNBcnJheShjb250
ZXh0LCBlbGVtZW50cyk7CiB9CiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBh
dHRyaWJ1dGUpIGNvbnN0CkBAIC05NzYsNyArOTQ1LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMjI5LDcgKzExOTcsNyBAQCBKU1ZhbHVl
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlYXJjaFRleHRXaXRoQ3JpdGVyaWEoSlNDb250
ZXh0UmVmIGNvbnRleHQsCiAgICAgTlNEaWN0aW9uYXJ5ICpwYXJhbWV0ZXJpemVkQXR0cmlidXRl
ID0gc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShjb250ZXh0LCBz
ZWFyY2hTdHJpbmdzLCBzdGFydEZyb20sIGRpcmVjdGlvbik7CiAgICAgaWQgcmVzdWx0ID0gW21f
ZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWFNlYXJjaFRleHRXaXRoQ3Jp
dGVyaWEiIGZvclBhcmFtZXRlcjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlXTsKICAgICBpZiAoW3Jl
c3VsdCBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBjb252
ZXJ0VmVjdG9yVG9PYmplY3RBcnJheTxSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5n
ZT4+KGNvbnRleHQsIG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2U+PihyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNvbnRleHQsIG1ha2VW
ZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+PihyZXN1bHQpKTsKICAg
ICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE1NDYs
MTMgKzE1MTQsMTEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rp
b25BdEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRl
SlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQpAQCAtMTU2Miw4ICsxNTI4LDcgQEAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2Rp
bmcoKQogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKICAg
ICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNf
RVhDRVBUSU9OUwotICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCkBAIC0xNTczLDggKzE1MzgsNyBA
QCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1l
bnRVUkkoKQogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkK
ICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0cmluZ1JlZl07CiAgICAgRU5EX0FYX09C
SkNfRVhDRVBUSU9OUwotICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQpAQCAtMTU4Myw3ICsxNTQ3LDYgQEAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCgpCiAgICAg
TlNVUkwgKnVybCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNj
ZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV07CiAgICAgcmV0dXJuIFtbdXJsIGFic29sdXRlU3RyaW5n
XSBjcmVhdGVKU1N0cmluZ1JlZl07ICAgIAogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAg
ICAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMTYyMiw3ICsxNTg1LDYgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiAgICAgQkVHSU5fQVhf
T0JKQ19FWENFUFRJT05TCiAgICAgcmVzdWx0ID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5SXNB
dHRyaWJ1dGVTZXR0YWJsZTpOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXTsKICAgICBF
TkRfQVhfT0JKQ19FWENFUFRJT05TCi0gICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt
MTY0OCwxOSArMTYxMCwxNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlT
ZWxlY3RhYmxlKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2li
bGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAogewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE2NzUsMTMgKzE2MzQs
MTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAogCiBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTcxNCwxNyArMTY3MSwxNCBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCiAKIHZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigpCiB7Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiAvLyBU
ZXh0IG1hcmtlcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCmluZGV4IDQwM2Y0ZmY4MzJlZTBlZjdjM2Nm
YWJkZjBmODdlMmNjYmU2MTRmOGEuLmFkYmI0YjdiNWQ1NGZiMTRhOWM0YmRlOGE5MjI3NWYxMWMx
NDE2ZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
bWFjL1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtNDYsMTYgKzQ2LDExIEBAIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjppbnNwZWN0b3JUZXN0U3R1YlVSTCgpCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICByZXR1cm4gbnVsbHB0cjsKICNlbHNlCi0gICAgQ0ZC
dW5kbGVSZWYgaW5zcGVjdG9yQnVuZGxlID0gQ0ZCdW5kbGVHZXRCdW5kbGVXaXRoSWRlbnRpZmll
cihDRlNUUigiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIikpOworICAgIGF1dG8gaW5zcGVjdG9y
QnVuZGxlID0gQ0ZCdW5kbGVHZXRCdW5kbGVXaXRoSWRlbnRpZmllcihDRlNUUigiY29tLmFwcGxl
LldlYkluc3BlY3RvclVJIikpOwogICAgIGlmICghaW5zcGVjdG9yQnVuZGxlKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsID0gYWRvcHRDRihD
RkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChpbnNwZWN0b3JCdW5kbGUsIENGU1RSKCJUZXN0U3R1YiIp
LCBDRlNUUigiaHRtbCIpLCBOVUxMKSk7Ci0gICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nID0gQ0ZVUkxHZXRTdHJpbmcodXJs
LmdldCgpKTsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcodXJs
U3RyaW5nKSk7CisgICAgYXV0byByZXNvdXJjZVVSTCA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVz
b3VyY2VVUkwoaW5zcGVjdG9yQnVuZGxlLCBDRlNUUigiVGVzdFN0dWIiKSwgQ0ZTVFIoImh0bWwi
KSwgTlVMTCkpOworICAgIHJldHVybiByZXNvdXJjZVVSTCA/IGFkb3B0KEpTU3RyaW5nQ3JlYXRl
V2l0aENGU3RyaW5nKENGVVJMR2V0U3RyaW5nKHJlc291cmNlVVJMLmdldCgpKSkpIDogbnVsbHB0
cjsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmlu
Z0Z1bmN0aW9ucy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaApp
bmRleCAxYmMwNWMwYTVmM2E4MDRjMGIxNDFiODk2OTBiNzVkMjc3MTBlNzYxLi42N2YzOWU2OWYx
NTQwOGI5MmVhM2FlOTQ3YzlmYTkyZmVlYTEyOGNkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
U3RyaW5nRnVuY3Rpb25zLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTI0LDE1ICsyNCwxMiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpZm5kZWYgU3RyaW5nRnVuY3Rpb25zX2gKLSNkZWZpbmUgU3RyaW5n
RnVuY3Rpb25zX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNS
ZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5j
bHVkZSAiSlNCYXNpY3MuaCIKICNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5QdHIuaD4KICNpbmNs
dWRlIDxXZWJLaXQvV0tTdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmdQcml2YXRl
Lmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1dLVVJMLmg+CiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNs
dWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CkBAIC00NCw3ICs0MSw4IEBA
CiAKIG5hbWVzcGFjZSBXVFIgewogCi0vLyBDb252ZXJzaW9uIGZ1bmN0aW9ucworV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHRvV0tTdHJpbmcoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKK1dU
Rjo6U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAKIGlubGlu
ZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhKU1N0cmluZ1JlZiBzdHJpbmcpCiB7CkBA
IC01Niw5ICs1NCwxNCBAQCBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soY29u
c3QgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+JiBzdHJpbmcpCiAgICAgcmV0dXJuIHRvV0soc3Ry
aW5nLmdldCgpKTsKIH0KIAoraW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKGNv
bnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKK30KKwogaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b1dLKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsK
KyAgICByZXR1cm4gdG9XSyhzdHJpbmcudXRmOCgpLmRhdGEoKSk7CiB9CiAKIGlubGluZSBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gdG9KUyhXS1N0cmluZ1JlZiBzdHJpbmcpCkBAIC05OSw2ICsx
MDIsMjUgQEAgaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiYgc3RyaW5nKQogICAgIHJldHVybiB0b1dURlN0cmluZyhzdHJpbmcuZ2V0
KCkpOwogfQogCi19IC8vIG5hbWVzcGFjZSBXVFIKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0
cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvV1RGU3RyaW5nKHRvV0so
c3RyaW5nKSk7Cit9CiAKLSNlbmRpZiAvLyBTdHJpbmdGdW5jdGlvbnNfaAoraW5saW5lIFdURjo6
U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiYgc3RyaW5n
KQoreworICAgIHJldHVybiB0b1dURlN0cmluZyhzdHJpbmcuZ2V0KCkpOworfQorCitpbmxpbmUg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0tTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvV0soY3JlYXRlSlNTdHJpbmcoY29u
dGV4dCwgdmFsdWUpLmdldCgpKTsKK30KKworaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5n
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIC8vIEZJWE1F
OiBDb3VsZCBtYWtlIHRoaXMgZWZmaWNpZW50IGJ5IHVzaW5nIHRoZSBXVEZTdHJpbmcgaW5zaWRl
IE9wYXF1ZUpTU3RyaW5nIGlmIHdlIHdhbnRlZCB0by4KKyAgICByZXR1cm4gdG9XVEZTdHJpbmco
Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RS
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDEzNDVjNDJj
MTFlNjJkYzA4OGM2ZjJkMzhiOTliMDkzNTY0ZTAxMzguLjc1ZDlmYjYwNDQ0MTQ1ZjFlY2RmYWVm
ZDk5MDhhYWUyNjg4NTRlZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJUZXN0Q29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgog
I2luY2x1ZGUgIkV2ZW50U2VuZGVyUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAj
aW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CkBAIC00
OTQsOCArNDk0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYywg
Y29uc3QgY2hhciogYXJndltdKQogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5zdGFsbE1vY2tH
YW1lcGFkUHJvdmlkZXIoKTsKICNlbmRpZgogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHBhZ2VHcm91cElkZW50aWZpZXIgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJXZWJLaXRUZXN0UnVubmVyUGFnZUdyb3VwIikpOwotICAgIG1fcGFnZUdyb3VwLmFkb3B0
KFdLUGFnZUdyb3VwQ3JlYXRlV2l0aElkZW50aWZpZXIocGFnZUdyb3VwSWRlbnRpZmllci5nZXQo
KSkpOworICAgIG1fcGFnZUdyb3VwLmFkb3B0KFdLUGFnZUdyb3VwQ3JlYXRlV2l0aElkZW50aWZp
ZXIodG9XSygiV2ViS2l0VGVzdFJ1bm5lclBhZ2VHcm91cCIpLmdldCgpKSk7CiAKICAgICBtX2V2
ZW50U2VuZGVyUHJveHkgPSBtYWtlVW5pcXVlPEV2ZW50U2VuZGVyUHJveHk+KHRoaXMpOwogfQpA
QCAtNTA3LDkgKzUwNiw5IEBAIFdLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+
IFRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0CiAgICAgV0tDb250ZXh0
Q29uZmlndXJhdGlvblNldEZ1bGx5U3luY2hyb25vdXNNb2RlSXNBbGxvd2VkRm9yVGVzdGluZyhj
b25maWd1cmF0aW9uLmdldCgpLCB0cnVlKTsKICAgICBXS0NvbnRleHRDb25maWd1cmF0aW9uU2V0
SWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0c0ZvclRlc3RpbmcoY29uZmlndXJhdGlv
bi5nZXQoKSwgb3B0aW9ucy5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzKTsKIAot
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBvdmVycmlkZUxhbmd1YWdlcyA9IGFk
b3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byBvdmVycmlkZUxhbmd1YWdl
cyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgZm9yIChhdXRvJiBsYW5n
dWFnZSA6IG9wdGlvbnMub3ZlcnJpZGVMYW5ndWFnZXMpCi0gICAgICAgIFdLQXJyYXlBcHBlbmRJ
dGVtKG92ZXJyaWRlTGFuZ3VhZ2VzLmdldCgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7CisgICAgICAgIFdLQXJy
YXlBcHBlbmRJdGVtKG92ZXJyaWRlTGFuZ3VhZ2VzLmdldCgpLCB0b1dLKGxhbmd1YWdlKS5nZXQo
KSk7CiAgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldE92ZXJyaWRlTGFuZ3VhZ2VzKGNvbmZp
Z3VyYXRpb24uZ2V0KCksIG92ZXJyaWRlTGFuZ3VhZ2VzLmdldCgpKTsKIAogICAgIGlmIChvcHRp
b25zLnNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkpIHsKQEAgLTg0MywzMSAr
ODQyLDI0IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3Rl
bnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvCiAgICAgV0tQcmVmZXJlbmNlc1Jlc2V0
QWxsSW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKHByZWZlcmVuY2VzKTsKIAogICAgIC8vIFNldCBpbnRl
cm5hbCBmZWF0dXJlcyB0aGF0IGhhdmUgZGlmZmVyZW50IGRlZmF1bHQgdmFsdWVzIGZvciB0ZXN0
aW5nLgotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBhc3luY092ZXJmbG93U2Nyb2xsaW5nRmVhdHVy
ZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBc3luY092ZXJmbG93U2Nyb2xsaW5n
RW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktl
eShwcmVmZXJlbmNlcywgZmFsc2UsIGFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdGZWF0dXJlKTsKIAot
ICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBhc3luY0ZyYW1lU2Nyb2xsaW5nRmVhdHVyZSA9IFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBc3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZCIpOwot
ICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNl
cywgZmFsc2UsIGFzeW5jRnJhbWVTY3JvbGxpbmdGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2Vz
U2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCB0b1dLKCJB
c3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2Vz
U2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCB0b1dLKCJB
c3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZCIpLmdldCgpKTsKIAogI2lmIEVOQUJMRShJTlBVVF9U
WVBFX0RBVEUpCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0VHlwZURhdGVGZWF0dXJlID0g
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZURhdGVFbmFibGVkIik7Ci0g
ICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2Vz
LCB0cnVlLCBpbnB1dFR5cGVEYXRlRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVy
bmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVE
YXRlRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0RBVEVU
SU1FTE9DQUwpCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0VHlwZURhdGVUaW1lTG9jYWxG
ZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZURhdGVUaW1l
TG9jYWxFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJl
Rm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVEYXRlVGltZUxvY2FsRmVhdHVyZSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVu
Y2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVEYXRlVGltZUxvY2FsRW5hYmxlZCIpLmdldCgpKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX01PTlRIKQotICAgIHN0YXRpYyBXS1N0cmlu
Z1JlZiBpbnB1dFR5cGVNb250aEZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSW5wdXRUeXBlTW9udGhFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFs
RGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVNb250aEZlYXR1
cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVm
ZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlTW9udGhFbmFibGVkIikuZ2V0KCkpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRSkKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYg
aW5wdXRUeXBlVGltZUZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5w
dXRUeXBlVGltZUVuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlwZVRpbWVGZWF0dXJlKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMs
IHRydWUsIHRvV0soIklucHV0VHlwZVRpbWVFbmFibGVkIikuZ2V0KCkpOwogI2VuZGlmCiAjaWYg
RU5BQkxFKElOUFVUX1RZUEVfV0VFSykKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBl
V2Vla0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5wdXRUeXBlV2Vl
a0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JL
ZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlwZVdlZWtGZWF0dXJlKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRv
V0soIklucHV0VHlwZVdlZWtFbmFibGVkIikuZ2V0KCkpOwogI2VuZGlmCiAKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGludGVybmFsRGVidWdGZWF0dXJlIDogb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVh
dHVyZXMpCkBAIC05MjAsMjUgKzkxMiwxNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFBy
ZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpbwogICAg
IFdLUHJlZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKHByZWZl
cmVuY2VzLCBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUpOwogICAg
IFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVu
YWJsZUJhY2tGb3J3YXJkQ2FjaGUpOwogCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGRlZmF1bHRU
ZXh0RW5jb2RpbmcgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSVNPLTg4NTktMSIp
OwotICAgIFdLUHJlZmVyZW5jZXNTZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShwcmVmZXJlbmNl
cywgZGVmYXVsdFRleHRFbmNvZGluZyk7Ci0KLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgc3RhbmRh
cmRGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVzIik7Ci0g
ICAgc3RhdGljIFdLU3RyaW5nUmVmIGN1cnNpdmVGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkFwcGxlIENoYW5jZXJ5Iik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVm
IGZhbnRhc3lGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBhcHly
dXMiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgZml4ZWRGb250RmFtaWx5ID0gV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkNvdXJpZXIiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYg
cGljdG9ncmFwaEZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBw
bGUgQ29sb3IgRW1vamkiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgc2Fuc1NlcmlmRm9udEZh
bWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIZWx2ZXRpY2EiKTsKLSAgICBz
dGF0aWMgV0tTdHJpbmdSZWYgc2VyaWZGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRpbWVzIik7CisgICAgV0tQcmVmZXJlbmNlc1NldERlZmF1bHRUZXh0RW5jb2Rp
bmdOYW1lKHByZWZlcmVuY2VzLCB0b1dLKCJJU08tODg1OS0xIikuZ2V0KCkpOwogCiAgICAgV0tQ
cmVmZXJlbmNlc1NldE1pbmltdW1Gb250U2l6ZShwcmVmZXJlbmNlcywgMCk7Ci0gICAgV0tQcmVm
ZXJlbmNlc1NldFN0YW5kYXJkRm9udEZhbWlseShwcmVmZXJlbmNlcywgc3RhbmRhcmRGb250RmFt
aWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0Q3Vyc2l2ZUZvbnRGYW1pbHkocHJlZmVyZW5jZXMs
IGN1cnNpdmVGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0RmFudGFzeUZvbnRGYW1p
bHkocHJlZmVyZW5jZXMsIGZhbnRhc3lGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0
Rml4ZWRGb250RmFtaWx5KHByZWZlcmVuY2VzLCBmaXhlZEZvbnRGYW1pbHkpOwotICAgIFdLUHJl
ZmVyZW5jZXNTZXRQaWN0b2dyYXBoRm9udEZhbWlseShwcmVmZXJlbmNlcywgcGljdG9ncmFwaEZv
bnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRTYW5zU2VyaWZGb250RmFtaWx5KHByZWZl
cmVuY2VzLCBzYW5zU2VyaWZGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0U2VyaWZG
b250RmFtaWx5KHByZWZlcmVuY2VzLCBzZXJpZkZvbnRGYW1pbHkpOworICAgIFdLUHJlZmVyZW5j
ZXNTZXRTdGFuZGFyZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIlRpbWVzIikuZ2V0KCkp
OworICAgIFdLUHJlZmVyZW5jZXNTZXRDdXJzaXZlRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9X
SygiQXBwbGUgQ2hhbmNlcnkiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEZhbnRhc3lG
b250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJQYXB5cnVzIikuZ2V0KCkpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRGaXhlZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIkNvdXJpZXIiKS5n
ZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFBpY3RvZ3JhcGhGb250RmFtaWx5KHByZWZlcmVu
Y2VzLCB0b1dLKCJBcHBsZSBDb2xvciBFbW9qaSIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2Vz
U2V0U2Fuc1NlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiSGVsdmV0aWNhIikuZ2V0
KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRTZXJpZkZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRv
V0soIlRpbWVzIikuZ2V0KCkpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRBc3luY2hyb25vdXNTcGVs
bENoZWNraW5nRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogI2lmIEVOQUJMRShNRURJQV9T
T1VSQ0UpCiAgICAgV0tQcmVmZXJlbmNlc1NldE1lZGlhU291cmNlRW5hYmxlZChwcmVmZXJlbmNl
cywgdHJ1ZSk7CkBAIC0xMDEwLDM4ICs5OTMsMjcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVz
ZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUK
IAogICAgIFdLUGFnZVNldEN1c3RvbVVzZXJBZ2VudChtX21haW5XZWJWaWV3LT5wYWdlKCksIG51
bGxwdHIpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzZXQiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gcmVzZXRNZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBhdXRvIHJlc2V0TWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CiAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc2hvdWxkR0NLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTaG91bGRHQyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHNo
b3VsZEdDVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2djQmV0d2VlblRlc3RzKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5LmdldCgpLCBzaG91bGRH
Q0tleS5nZXQoKSwgc2hvdWxkR0NWYWx1ZS5nZXQoKSk7CisgICAgc2V0VmFsdWUocmVzZXRNZXNz
YWdlQm9keSwgIlNob3VsZEdDIiwgbV9nY0JldHdlZW5UZXN0cyk7CiAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gYWxsb3dlZEhvc3RzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQWxsb3dlZEhvc3RzIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZUFycmF5UmVmPiBhbGxvd2VkSG9zdHNWYWx1ZSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7Ci0gICAgZm9yIChhdXRvJiBob3N0IDogbV9hbGxvd2VkSG9zdHMpIHsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrSG9zdCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoaG9zdC5jX3N0cigpKSk7Ci0gICAgICAgIFdLQXJyYXlBcHBlbmRJdGVt
KGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpLCB3a0hvc3QuZ2V0KCkpOwotICAgIH0KLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCksIGFsbG93ZWRIb3N0c0tleS5n
ZXQoKSwgYWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCkpOworICAgIGF1dG8gYWxsb3dlZEhvc3RzVmFs
dWUgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGZvciAoYXV0byYgaG9z
dCA6IG1fYWxsb3dlZEhvc3RzKQorICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShhbGxvd2VkSG9z
dHNWYWx1ZS5nZXQoKSwgdG9XSyhob3N0LmNfc3RyKCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShy
ZXNldE1lc3NhZ2VCb2R5LCAiQWxsb3dlZEhvc3RzIiwgYWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCkp
OwogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gYXhJc29sYXRlZE1vZGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gYXhJc29sYXRlZE1vZGVWYWx1ZSA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCksIGF4SXNvbGF0ZWRNb2RlS2V5
LmdldCgpLCBheElzb2xhdGVkTW9kZVZhbHVlLmdldCgpKTsKKyAgICBzZXRWYWx1ZShyZXNldE1l
c3NhZ2VCb2R5LCAiQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIsIG1fYWNjZXNzaWJpbGl0eUlz
b2xhdGVkVHJlZU1vZGUpOwogI2VuZGlmCi0gICAgCi0gICAgaWYgKG9wdGlvbnMuanNjT3B0aW9u
cy5sZW5ndGgoKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ganNjT3B0aW9u
c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkpTQ09wdGlvbnMi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zVmFsdWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9wdGlvbnMuanNjT3B0aW9ucy5j
X3N0cigpKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0ocmVzZXRNZXNzYWdlQm9keS5n
ZXQoKSwganNjT3B0aW9uc0tleS5nZXQoKSwganNjT3B0aW9uc1ZhbHVlLmdldCgpKTsKLSAgICB9
CisKKyAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKQorICAgICAgICBzZXRWYWx1
ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIsIG9wdGlvbnMuanNjT3B0aW9ucy5jX3N0
cigpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0
QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRpb25h
bFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7CiAjZW5kaWYKIAotICAgIFdLUGFnZVBvc3RN
ZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgcmVzZXRNZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHRvV0soIlJlc2V0IikuZ2V0KCks
IHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCkpOwogCiAgICAgV0tDb250ZXh0U2V0U2hvdWxkVXNlRm9u
dFNtb290aGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBmYWxzZSk7
CiAKQEAgLTEyMDMsOCArMTE3NSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZUxpdmVE
b2N1bWVudHNBZnRlclRlc3QoKQogCiAgICAgQXN5bmNUYXNrKFtdKCkgewogICAgICAgICAvLyBB
ZnRlciBlYWNoIHRlc3QsIHdlIHVwZGF0ZSB0aGUgbGlzdCBvZiBsaXZlIGRvY3VtZW50cyBzbyB0
aGF0IHdlIGNhbiBkZXRlY3Qgd2hlbiBhbiBhYmFuZG9uZWQgZG9jdW1lbnQgZmlyc3Qgc2hvd2Vk
IHVwLgotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRMaXZlRG9jdW1lbnRzIikpOwot
ICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIpOworICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygiR2V0TGl2
ZURvY3VtZW50cyIpLmdldCgpLCBudWxscHRyKTsKICAgICB9LCA1X3MpLnJ1bigpOwogfQogCkBA
IC0xMjE1LDggKzExODYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjaGVja0ZvcldvcmxkTGVh
a3MoKQogCiAgICAgQXN5bmNUYXNrKFtdKCkgewogICAgICAgICAvLyBUaGlzIHJ1bnMgYXQgdGhl
IGVuZCBvZiBhIHNlcmllcyBvZiB0ZXN0cy4gSXQgY2xlYXJzIGNhY2hlcywgcnVucyBhIEdDIGFu
ZCB0aGVuIGZldGNoZXMgdGhlIGxpc3Qgb2YgZG9jdW1lbnRzLgotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDaGVja0ZvcldvcmxkTGVha3MiKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKCJDaGVja0ZvcldvcmxkTGVha3MiKS5nZXQoKSwg
bnVsbHB0cik7CiAgICAgfSwgMjBfcykucnVuKCk7CiB9CiAKQEAgLTEzMjQsNiArMTI5NCw3IEBA
IGNvbnN0IGNoYXIqIFRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJvY2Vzc05hbWUoKQogfQogCiAj
aWYgIVBMQVRGT1JNKENPQ09BKQorCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZShib29sIGFsbG93cykKIHsKICAgICBtX2FsbG93c0FueVNTTENlcnRpZmlj
YXRlID0gYWxsb3dzOwpAQCAtMTQwMCw4ICsxMzcxLDggQEAgc3RhdGljIGJvb2wgcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKIAogc3RhdGljIHN0
ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgoY29uc3Qg
c3RkOjpzdHJpbmcmIHZhbHVlLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQogewotICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVmPiBiYXNlVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBh
dGhPclVSTC5jX3N0cigpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHJlbGF0aXZlVVJM
ID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkwuZ2V0KCksIHZhbHVlLmNf
c3RyKCkpKTsKKyAgICBhdXRvIGJhc2VVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9y
VVJMLmNfc3RyKCkpKTsKKyAgICBhdXRvIHJlbGF0aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0
ZVdpdGhCYXNlVVJMKGJhc2VVUkwuZ2V0KCksIHZhbHVlLmNfc3RyKCkpKTsKICAgICByZXR1cm4g
dG9TVEQoYWRvcHRXSyhXS1VSTENvcHlQYXRoKHJlbGF0aXZlVVJMLmdldCgpKSkpOwogfQogCkBA
IC0xNDE1LDggKzEzODYsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0
SGVhZGVyKFRlc3RPcHRpb25zJiB0ZXN0T3B0aW9ucywgY29uc3Qgc3RkOgogICAgIHN0ZDo6c3Ry
aW5nIGZpbGVuYW1lID0gYWJzb2x1dGVQYXRoOwogICAgIGlmIChmaWxlbmFtZS5lbXB0eSgpKSB7
CiAgICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJlZHVjZSBjb252ZXJzaW9ucyBiZXR3ZWVuIGFs
bCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgotICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJl
Zj4gd2tVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKTsKLSAg
ICAgICAgZmlsZW5hbWUgPSB0ZXN0UGF0aCh3a1VSTC5nZXQoKSk7CisgICAgICAgIGZpbGVuYW1l
ID0gdGVzdFBhdGgoYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSkuZ2V0
KCkpOwogICAgIH0KIAogICAgIGlmIChmaWxlbmFtZS5lbXB0eSgpKQpAQCAtMTYxNSw2ICsxNTg1
LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlVmlld0ZvclRlc3QoY29uc3QgVGVz
dEludm9jYXRpb24mIHRlc3QpCiB9CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKSAm
JiAhUExBVEZPUk0oQ09DT0EpCisKIHN0cnVjdCBDb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFj
a0NvbnRleHQgewogICAgIGV4cGxpY2l0IENvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrQ29u
dGV4dChUZXN0Q29udHJvbGxlciYgY29udHJvbGxlcikKICAgICAgICAgOiB0ZXN0Q29udHJvbGxl
cihjb250cm9sbGVyKQpAQCAtMTY0MiwxNSArMTYxMyw5IEBAIHN0YXRpYyBzdGQ6OnN0cmluZyBj
b250ZW50RXh0ZW5zaW9uSlNPTlBhdGgoV0tVUkxSZWYgdXJsKQogICAgIGlmIChwYXRoLmxlbmd0
aCgpKQogICAgICAgICByZXR1cm4gcGF0aCArICIuanNvbiI7CiAKLSAgICBhdXRvIHAgPSBhZG9w
dFdLKFdLVVJMQ29weVBhdGgodXJsKSk7Ci0gICAgYXV0byBidWZmZXIgPSBzdGQ6OnZlY3Rvcjxj
aGFyPihXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUocC5nZXQoKSkpOwotICAgIGNv
bnN0IGF1dG8gbGVuZ3RoID0gV0tTdHJpbmdHZXRVVEY4Q1N0cmluZyhwLmdldCgpLCBidWZmZXIu
ZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKLSAgICByZXR1cm4gc3RkOjpzdHJpbmcoIkxheW91dFRl
c3RzL2h0dHAvdGVzdHMiKSArIHN0ZDo6c3RyaW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCAtIDEp
ICsgIi5qc29uIjsKKyAgICByZXR1cm4gIkxheW91dFRlc3RzL2h0dHAvdGVzdHMiICsgdG9TVEQo
YWRvcHRXSyhXS1VSTENvcHlQYXRoKHVybCkpLmdldCgpKSArICIuanNvbiI7CiB9Ci0jZW5kaWYK
IAotI2lmICFQTEFURk9STShDT0NPQSkKLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQog
dm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29u
c3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7CiAgICAgY29uc3QgY2hhciogY29udGVudEV4dGVu
c2lvbnNQYXRoID0gbGlicmFyeVBhdGhGb3JUZXN0aW5nKCk7CkBAIC0xNjcwLDEzICsxNjM1LDEz
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0
KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0CiAgICAgfQogCiAgICAgc3RkOjpzdHJpbmcganNv
bkZpbGVDb250ZW50cyB7c3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+KGpzb25GaWxlKSwg
c3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+KCl9OwotICAgIGF1dG8ganNvblNvdXJjZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoanNvbkZpbGVDb250ZW50cy5j
X3N0cigpKSk7CisgICAgYXV0byBqc29uU291cmNlID0gdG9XSyhqc29uRmlsZUNvbnRlbnRzLmNf
c3RyKCkpOwogCi0gICAgYXV0byBzdG9yZVBhdGggPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGNvbnRlbnRFeHRlbnNpb25zUGF0aCkpOworICAgIGF1dG8gc3RvcmVQYXRo
ID0gdG9XSyhjb250ZW50RXh0ZW5zaW9uc1BhdGgpOwogICAgIGF1dG8gZXh0ZW5zaW9uU3RvcmUg
PSBhZG9wdFdLKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNyZWF0ZShzdG9yZVBhdGguZ2V0
KCkpKTsKICAgICBBU1NFUlQoZXh0ZW5zaW9uU3RvcmUpOwogCi0gICAgYXV0byBmaWx0ZXJJZGVu
dGlmaWVyID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGVzdENvbnRl
bnRFeHRlbnNpb24iKSk7CisgICAgYXV0byBmaWx0ZXJJZGVudGlmaWVyID0gdG9XSygiVGVzdENv
bnRlbnRFeHRlbnNpb24iKTsKIAogICAgIENvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrQ29u
dGV4dCBjb250ZXh0KCp0aGlzKTsKICAgICBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21w
aWxlKGV4dGVuc2lvblN0b3JlLmdldCgpLCBmaWx0ZXJJZGVudGlmaWVyLmdldCgpLCBqc29uU291
cmNlLmdldCgpLCAmY29udGV4dCwgY29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2spOwpAQCAt
MTcwMSwxOCArMTY2NiwyMiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldENvbnRlbnRFeHRl
bnNpb25zKCkKIAogICAgIFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxsVXNlckNvbnRl
bnRGaWx0ZXJzKHVzZXJDb250ZW50Q29udHJvbGxlcigpKTsKIAotICAgIGF1dG8gc3RvcmVQYXRo
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250ZW50RXh0ZW5zaW9u
c1BhdGgpKTsKKyAgICBhdXRvIHN0b3JlUGF0aCA9IHRvV0soY29udGVudEV4dGVuc2lvbnNQYXRo
KTsKICAgICBhdXRvIGV4dGVuc2lvblN0b3JlID0gYWRvcHRXSyhXS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVDcmVhdGUoc3RvcmVQYXRoLmdldCgpKSk7CiAgICAgQVNTRVJUKGV4dGVuc2lvblN0
b3JlKTsKIAotICAgIGF1dG8gZmlsdGVySWRlbnRpZmllciA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlRlc3RDb250ZW50RXh0ZW5zaW9uIikpOworICAgIGF1dG8gZmls
dGVySWRlbnRpZmllciA9IHRvV0soIlRlc3RDb250ZW50RXh0ZW5zaW9uIik7CiAKICAgICBDb250
ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7CiAgICAgV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVtb3ZlKGV4dGVuc2lvblN0b3JlLmdldCgpLCBmaWx0
ZXJJZGVudGlmaWVyLmdldCgpLCAmY29udGV4dCwgY29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJh
Y2spOwogICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKICAgICBBU1NFUlQo
IWNvbnRleHQuZmlsdGVyKTsKIH0KLSNlbHNlIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKSAmJiAhUExBVEZPUk0oQ09D
T0EpCisKKyNpZiAhRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKwogdm9pZCBUZXN0Q29udHJv
bGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRp
b24mKQogewogfQpAQCAtMTcyMCwxNCArMTY4OSwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpj
b25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYpCiB2
b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldENvbnRlbnRFeHRlbnNpb25zKCkKIHsKIH0KLSNlbmRp
ZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotI2VuZGlmIC8vICFQTEFURk9STShDT0NP
QSkKKworI2VuZGlmIC8vICFFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCiBjbGFzcyBDb21t
YW5kVG9rZW5pemVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb21tYW5kVG9rZW5pemVyKGNv
bnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCkKICAgICAgICAgOiBtX2lucHV0KGlucHV0KQotICAgICAg
ICAsIG1fcG9zTmV4dFNlcGFyYXRvcigwKQogICAgIHsKICAgICAgICAgcHVtcCgpOwogICAgIH0K
QEAgLTE3NDAsNyArMTcwOCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGNoYXIga1Nl
cGFyYXRvciA9ICdcJyc7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7CiAgICAgc3Rk
OjpzdHJpbmcgbV9uZXh0OwotICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3I7CisgICAgc2l6
ZV90IG1fcG9zTmV4dFNlcGFyYXRvciB7IDAgfTsKIH07CiAKIHZvaWQgQ29tbWFuZFRva2VuaXpl
cjo6cHVtcCgpCkBAIC0xODE0LDggKzE3ODIsNyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpydW5U
ZXN0KGNvbnN0IGNoYXIqIGlucHV0TGluZSkKICAgICAKICAgICBUZXN0T3B0aW9ucyBvcHRpb25z
ID0gdGVzdE9wdGlvbnNGb3JUZXN0KGNvbW1hbmQpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxS
ZWY+IHdrVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKGNvbW1hbmQucGF0aE9yVVJMLmNfc3Ry
KCkpKTsKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uID0gbWFrZVVuaXF1ZTxUZXN0SW52b2NhdGlv
bj4od2tVUkwuZ2V0KCksIG9wdGlvbnMpOworICAgIG1fY3VycmVudEludm9jYXRpb24gPSBtYWtl
VW5pcXVlPFRlc3RJbnZvY2F0aW9uPihhZG9wdFdLKGNyZWF0ZVRlc3RVUkwoY29tbWFuZC5wYXRo
T3JVUkwuY19zdHIoKSkpLmdldCgpLCBvcHRpb25zKTsKIAogICAgIGlmIChjb21tYW5kLnNob3Vs
ZER1bXBQaXhlbHMgfHwgbV9zaG91bGREdW1wUGl4ZWxzRm9yQWxsVGVzdHMpCiAgICAgICAgIG1f
Y3VycmVudEludm9jYXRpb24tPnNldElzUGl4ZWxUZXN0KGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhh
c2gpOwpAQCAtMTk0NCwxOCArMTkxMSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmdwdVByb2Nl
c3NEaWRDcmFzaChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQcm9jZXNzSUQgcHJvY2VzCiAgICAg
c3RhdGljX2Nhc3Q8VGVzdENvbnRyb2xsZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZv
KSktPmdwdVByb2Nlc3NEaWRDcmFzaChwcm9jZXNzSUQpOwogfQogCi12b2lkIFRlc3RDb250cm9s
bGVyOjpkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYm9vbCBzeW5jaHJvbm91cykKK3ZvaWQgVGVz
dENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShX
S0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgYm9vbCBzeW5jaHJvbm91cykKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiS2V5IikpOwotICAgIFdLU3RyaW5nUmVmIGtleSA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwga2V5S2V5LmdldCgpKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZp
ZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXJz
IikpOwotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8V0tFdmVu
dE1vZGlmaWVycz4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vZGlmaWVyc0tl
eS5nZXQoKSkpKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbG9jYXRpb25LZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMb2NhdGlvbiIpKTsKLSAg
ICB1bnNpZ25lZCBsb2NhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdldFZh
bHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgbG9jYXRpb25LZXkuZ2V0KCkpKSkpOwotCi0gICAgbV9ldmVu
dFNlbmRlclByb3h5LT5rZXlEb3duKGtleSwgbW9kaWZpZXJzLCBsb2NhdGlvbik7CisgICAgbV9l
dmVudFNlbmRlclByb3h5LT5rZXlEb3duKHN0cmluZ1ZhbHVlKGRpY3Rpb25hcnksICJLZXkiKSwg
dWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpLCB1aW50NjRWYWx1ZShkaWN0aW9u
YXJ5LCAiTG9jYXRpb24iKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVM
aXZlRG9jdW1lbnRzTGlzdChXS0FycmF5UmVmIGxpdmVEb2N1bWVudExpc3QpCkBAIC0xOTY0LDE4
ICsxOTIyLDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUxpdmVEb2N1bWVudHNM
aXN0KFdLQXJyYXlSZWYgbGl2ZURvY3VtZW50TGlzdCkKIAogICAgIEhhc2hNYXA8dWludDY0X3Qs
IFN0cmluZz4gZG9jdW1lbnRJbmZvOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRG9j
dW1lbnRzOyArK2kpIHsKLSAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0
SW5kZXgobGl2ZURvY3VtZW50TGlzdCwgaSk7Ci0gICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlw
ZUlEKGl0ZW0pID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKSB7Ci0gICAgICAgICAgICBXS0Rp
Y3Rpb25hcnlSZWYgbGl2ZURvY3VtZW50SXRlbSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4oaXRlbSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpZEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImlkIikpOwotICAgICAgICAg
ICAgV0tVSW50NjRSZWYgZG9jdW1lbnRJRCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxpdmVEb2N1bWVudEl0ZW0sIGlkS2V5LmdldCgpKSk7Ci0K
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1cmwiKSk7Ci0gICAgICAgICAgICBXS1N0cmlu
Z1JlZiBkb2N1bWVudFVSTCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KGxpdmVEb2N1bWVudEl0ZW0sIHVybEtleS5nZXQoKSkpOwotCi0gICAgICAg
ICAgICBkb2N1bWVudEluZm8uYWRkKFdLVUludDY0R2V0VmFsdWUoZG9jdW1lbnRJRCksIHRvV1RG
U3RyaW5nKGRvY3VtZW50VVJMKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gZGljdGlv
bmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShXS0FycmF5R2V0SXRlbUF0SW5kZXgobGl2ZURvY3VtZW50
TGlzdCwgaSkpKQorICAgICAgICAgICAgZG9jdW1lbnRJbmZvLmFkZCh1aW50NjRWYWx1ZShkaWN0
aW9uYXJ5LCAiaWQiKSwgdG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUoZGljdGlvbmFyeSwgInVybCIp
KSk7CiAgICAgfQogCiAgICAgaWYgKCFkb2N1bWVudEluZm8uc2l6ZSgpKSB7CkBAIC0yMDA3LDYw
ICsxOTU1LDM1IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUlu
amVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIGlmIChtX3N0YXRl
ICE9IFJ1bm5pbmdUZXN0KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBzdWJNZXNzYWdlTmFt
ZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViTWVzc2FnZUtleS5nZXQoKSkpOwotCi0gICAgICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VEb3du
IikgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNl
VXAiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1dHRvbktleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbiIpKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGJ1dHRvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYnV0dG9uS2V5LmdldCgpKSkpKTsKKyAgICAgICAgYXV0
byBkaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBzdWJNZXNzYWdlTmFtZSA9IHN0cmluZ1ZhbHVlKGRpY3Rpb25hcnksICJTdWJNZXNzYWdlIik7
CiAKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAg
ICAgICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdLRXZlbnRN
b2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb2RpZmllcnNLZXku
Z2V0KCkpKSkpOwotCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlByb2Nlc3MKLSAgICAg
ICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAi
TW91c2VEb3duIikpCi0gICAgICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZURv
d24oYnV0dG9uLCBtb2RpZmllcnMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VVcChidXR0b24sIG1vZGlmaWVycyk7CisgICAgICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VE
b3duIikpIHsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VEb3duKHVpbnQ2
NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1v
ZGlmaWVycyIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCisgICAgICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VVcCIp
KSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlVXAodWludDY0VmFsdWUo
ZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJz
IikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJLZXlEb3duIikpIHsKLSAg
ICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGZhbHNlKTsKKyAgICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3du
TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShkaWN0aW9uYXJ5LCBmYWxzZSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlU2Nyb2xsQnkiKSkgewotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZh
bHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9yd2FyZCB0
byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlU2Nyb2xs
QnkoeCwgeSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlU2Nyb2xsQnko
ZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKSwgZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlki
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlU2Nyb2xsQnlXaXRo
V2hlZWxBbmRNb21lbnR1bVBoYXNlcyIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgi
KSk7Ci0gICAgICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCB4S2V5LmdldCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcGhhc2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJQaGFzZSIpKTsKLSAgICAgICAgICAgIGludCBwaGFzZSA9IHN0YXRpY19j
YXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBoYXNlS2V5LmdldCgp
KSkpKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb21lbnR1bUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vbWVudHVtIikpOwotICAg
ICAgICAgICAgaW50IG1vbWVudHVtID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVl
KHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgbW9tZW50dW1LZXkuZ2V0KCkpKSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlByb2Nlc3MKKyAgICAgICAgICAgIGF1dG8geCA9
IGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIik7CisgICAgICAgICAgICBhdXRvIHkgPSBkb3Vi
bGVWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpOworICAgICAgICAgICAgYXV0byBwaGFzZSA9IHVpbnQ2
NFZhbHVlKGRpY3Rpb25hcnksICJQaGFzZSIpOworICAgICAgICAgICAgYXV0byBtb21lbnR1bSA9
IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb21lbnR1bSIpOwogICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoeCwg
eSwgcGhhc2UsIG1vbWVudHVtKTsKLQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
QEAgLTIwODMsNDIgKzIwMDYsMjYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5
bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZgogICAgICAgICBp
ZiAobV9zdGF0ZSAhPSBSdW5uaW5nVGVzdCkKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyKTsKIAotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViTWVzc2FnZU5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBkaWN0aW9uYXJ5ID0gZGljdGlv
bmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBzdWJNZXNzYWdlTmFtZSA9IHN0
cmluZ1ZhbHVlKGRpY3Rpb25hcnksICJTdWJNZXNzYWdlIik7CiAKICAgICAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJLZXlEb3duIikpIHsKLSAg
ICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHRydWUpOwotCisgICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93
bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoZGljdGlvbmFyeSwgdHJ1ZSk7CiAgICAgICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNl
RG93biIpIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJN
b3VzZVVwIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBidXR0b25L
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b24iKSk7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBidXR0b24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50
NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbktleS5nZXQoKSkpKSk7Ci0KLSAgICAg
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAgICAgICAgICBX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdLRXZlbnRNb2RpZmllcnM+
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb2RpZmllcnNLZXkuZ2V0KCkpKSkp
OworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFt
ZSwgIk1vdXNlRG93biIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNl
RG93bih1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiksIHVpbnQ2NFZhbHVlKGRpY3Rp
b25hcnksICJNb2RpZmllcnMiKSk7CisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIobnVsbHB0cik7CisgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQ
cm9jZXNzCi0gICAgICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKQotICAgICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQ
cm94eS0+bW91c2VEb3duKGJ1dHRvbiwgbW9kaWZpZXJzKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlVXAoYnV0dG9uLCBtb2RpZmll
cnMpOworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdl
TmFtZSwgIk1vdXNlVXAiKSkgeworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3Vz
ZVVwKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFsdWUoZGljdGlv
bmFyeSwgIk1vZGlmaWVycyIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VNb3ZlVG8iKSkgewotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZh
bHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9yd2FyZCB0
byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlTW92ZVRv
KHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZU1vdmVUbyhkb3Vi
bGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpLCBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpKTsK
ICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAg
fQogCkBAIC0yMTQ0LDgxICsyMDUxLDQ4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2Vp
dmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3Nh
Z2VOYW1lLCAiTW91c2VGb3JjZUNoYW5nZWQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGZvcmNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRm9yY2UiKSk7Ci0gICAgICAgICAgICBkb3VibGUgZm9yY2UgPSBXS0RvdWJsZUdldFZh
bHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgZm9yY2VLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIG1f
ZXZlbnRTZW5kZXJQcm94eS0+bW91c2VGb3JjZUNoYW5nZWQoZm9yY2UpOworICAgICAgICAgICAg
bV9ldmVudFNlbmRlclByb3h5LT5tb3VzZUZvcmNlQ2hhbmdlZChkb3VibGVWYWx1ZShkaWN0aW9u
YXJ5LCAiRm9yY2UiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0cik7CiAgICAgICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICAgICAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJDb250aW51b3Vz
TW91c2VTY3JvbGxCeSIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
eEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAg
ICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5
LmdldCgpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgICAgICAg
ICBkb3VibGUgeSA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgp
KSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFnZWRLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQYWdlZCIpKTsKLSAgICAgICAg
ICAgIGJvb2wgcGFnZWQgPSBzdGF0aWNfY2FzdDxib29sPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgcGFnZWRLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICAvLyBGb3J3YXJk
IHRvIFdlYlByb2Nlc3MKKyAgICAgICAgICAgIGF1dG8geCA9IGRvdWJsZVZhbHVlKGRpY3Rpb25h
cnksICJYIik7CisgICAgICAgICAgICBhdXRvIHkgPSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAi
WSIpOworICAgICAgICAgICAgYXV0byBwYWdlZCA9IGJvb2xlYW5WYWx1ZShkaWN0aW9uYXJ5LCAi
UGFnZWQiKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+Y29udGludW91c01vdXNl
U2Nyb2xsQnkoeCwgeSwgcGFnZWQpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJMZWFwRm9yd2FyZCIpKSB7Ci0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGltZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlRpbWVJbk1pbGxpc2Vjb25kcyIpKTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHRpbWUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHRpbWVLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPmxlYXBGb3J3YXJkKHRpbWUpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclBy
b3h5LT5sZWFwRm9yd2FyZCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiVGltZUluTWlsbGlzZWNv
bmRzIikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwog
ICAgICAgICB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIkFkZFRvdWNoUG9pbnQiKSkg
ewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgaW50IHggPSBz
dGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5Lmdl
dCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAg
aW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCB5S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5hZGRU
b3VjaFBvaW50KHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5hZGRUb3Vj
aFBvaW50KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJYIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25h
cnksICJZIikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
c3ViTWVzc2FnZU5hbWUsICJVcGRhdGVUb3VjaFBvaW50IikpIHsKLSAgICAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgICAgICAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nh
c3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaW5kZXhLZXkuZ2V0KCkp
KSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBpbnQg
eCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhL
ZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgICAg
ICAgICBpbnQgeSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHlLZXkuZ2V0KCkpKSkpOwotCisgICAgICAgICAgICBhdXRvIGluZGV4ID0gdWludDY0
VmFsdWUoZGljdGlvbmFyeSwgIkluZGV4Iik7CisgICAgICAgICAgICBhdXRvIHggPSB1aW50NjRW
YWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAgICAgICAgICAgYXV0byB5ID0gdWludDY0VmFsdWUo
ZGljdGlvbmFyeSwgIlkiKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+dXBkYXRl
VG91Y2hQb2ludChpbmRleCwgeCwgeSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIlNldFRvdWNoTW9kaWZpZXIiKSkgewotICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXIiKSk7Ci0gICAgICAgICAgICBX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyID0gc3RhdGljX2Nhc3Q8V0tFdmVudE1vZGlmaWVycz4o
V0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vZGlmaWVyS2V5LmdldCgpKSkpKTsK
LQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVuYWJsZUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVuYWJsZSIpKTsKLSAgICAgICAgICAg
IGJvb2wgZW5hYmxlID0gc3RhdGljX2Nhc3Q8Ym9vbD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGVuYWJsZUtleS5nZXQoKSkpKSk7Ci0KKyAgICAgICAgICAgIGF1dG8gbW9kaWZp
ZXIgPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXIiKTsKKyAgICAgICAgICAgIGF1
dG8gZW5hYmxlID0gYm9vbGVhblZhbHVlKGRpY3Rpb25hcnksICJFbmFibGUiKTsKICAgICAgICAg
ICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+c2V0VG91Y2hNb2RpZmllcihtb2RpZmllciwgZW5hYmxl
KTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3Nh
Z2VOYW1lLCAiU2V0VG91Y2hQb2ludFJhZGl1cyIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlJhZGl1c1giKSk7Ci0gICAgICAgICAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oV0tV
SW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1kiKSk7Ci0gICAgICAgICAgICBpbnQgeSA9IHN0YXRp
Y19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkp
KSkpOwotCisgICAgICAgICAgICBhdXRvIHggPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiUmFk
aXVzWCIpOworICAgICAgICAgICAgYXV0byB5ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlJh
ZGl1c1kiKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+c2V0VG91Y2hQb2ludFJh
ZGl1cyh4LCB5KTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRy
KTsKICAgICAgICAgfQpAQCAtMjI0OSwxNiArMjEyMywxMiBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5n
UmVmCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhzdWJNZXNzYWdlTmFtZSwgIlJlbGVhc2VUb3VjaFBvaW50IikpIHsKLSAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgICAgICAgICAgaW50IGluZGV4ID0gc3RhdGlj
X2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaW5kZXhLZXkuZ2V0
KCkpKSkpOwotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5yZWxlYXNlVG91Y2hQb2lu
dChpbmRleCk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnJlbGVhc2VUb3VjaFBv
aW50KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJbmRleCIpKTsKICAgICAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiQ2FuY2VsVG91Y2hQ
b2ludCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAg
ICAgICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGluZGV4S2V5LmdldCgpKSkpKTsKLSAgICAgICAgICAgIG1fZXZlbnRTZW5k
ZXJQcm94eS0+Y2FuY2VsVG91Y2hQb2ludChpbmRleCk7CisgICAgICAgICAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPmNhbmNlbFRvdWNoUG9pbnQodWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkluZGV4
IikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAg
ICAgICB9CiAjZW5kaWYKQEAgLTIyNzUsMTQgKzIxNDUsMTYgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmlu
Z1JlZgogICAgIH07CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldEFsd2F5c0FjY2VwdENvb2tpZXMiKSkgewotICAgICAgICBXS0Jvb2xlYW5S
ZWYgYWNjZXB0ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShh
Y2NlcHQpID8ga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyA6IGtXS0hUVFBDb29raWVB
Y2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKKyAgICAgICAgYXV0byBwb2xp
Y3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KSkKKyAgICAgICAgICAgID8ga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cworICAg
ICAgICAgICAgOiBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnRE
b21haW47CiAgICAgICAgIHJldHVybiBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0T25seUFjY2VwdEZpcnN0UGFydHlD
b29raWVzIikpIHsKLSAgICAgICAgV0tCb29sZWFuUmVmIGFjY2VwdCA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS0hUVFBDb29raWVBY2NlcHRQb2xp
Y3kgcG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoYWNjZXB0KSA/IGtXS0hUVFBDb29raWVBY2Nl
cHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4gOiBrV0tIVFRQQ29va2ll
QWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47CisgICAgICAgIGF1dG8gcG9s
aWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdl
Qm9keSkpCisgICAgICAgICAgICA/IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lFeGNsdXNpdmVs
eUZyb21NYWluRG9jdW1lbnREb21haW4KKyAgICAgICAgICAgIDoga1dLSFRUUENvb2tpZUFjY2Vw
dFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAgICAgICByZXR1cm4gc2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICB9CiAKQEAgLTI0MDMsMTIgKzIyNzUsOCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRC
bG9ja0FsbFBsdWdpbnMoYm9vbCBzaG91bGRCbG9jaykKIAogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBhdXRvIHBvbGljeSA9IHNob3VsZEJsb2NrID8ga1dLUGx1Z2luTG9hZENsaWVudFBvbGljeUJs
b2NrIDoga1dLUGx1Z2luTG9hZENsaWVudFBvbGljeUFsbG93OwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG5hbWVOZXRzY2FwZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG5hbWVGbGFzaCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVnaW4iKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVtcHR5U3RyaW5nID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotICAgIFdLQ29udGV4dFNldFBsdWdpbkxvYWRDbGllbnRQ
b2xpY3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ksIGVtcHR5U3RyaW5nLmdldCgpLCBuYW1lTmV0
c2NhcGUuZ2V0KCksIGVtcHR5U3RyaW5nLmdldCgpKTsKLSAgICBXS0NvbnRleHRTZXRQbHVnaW5M
b2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCBlbXB0eVN0cmluZy5nZXQo
KSwgbmFtZUZsYXNoLmdldCgpLCBlbXB0eVN0cmluZy5nZXQoKSk7CisgICAgV0tDb250ZXh0U2V0
UGx1Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRleHQuZ2V0KCksIHBvbGljeSwgdG9XSygiIiku
Z2V0KCksIHRvV0soImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4iKS5nZXQoKSwgdG9XSygi
IikuZ2V0KCkpOworICAgIFdLQ29udGV4dFNldFBsdWdpbkxvYWRDbGllbnRQb2xpY3kobV9jb250
ZXh0LmdldCgpLCBwb2xpY3ksIHRvV0soIiIpLmdldCgpLCB0b1dLKCJjb20ubWFjcm9tZWRpYS5G
bGFzaCBQbGF5ZXIucGx1Z2luIikuZ2V0KCksIHRvV0soIiIpLmdldCgpKTsKICNlbmRpZgogfQog
CkBAIC0yNDIzLDI5ICsyMjkxLDI0IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFBsdWdpblN1
cHBvcnRlZE1vZGUoY29uc3QgU3RyaW5nJiBtb2RlKQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGVtcHR5QXJyYXkgPSBhZG9wdFdL
KFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBh
bGxPcmlnaW5zID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzcGVjaWZpY09yaWdpbiA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxvY2FsaG9zdCIpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBwZGZOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiTXkgcGVyc29uYWwgUERGIikpOwotICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBs
dWdpbihtX2NvbnRleHQuZ2V0KCksIGFsbE9yaWdpbnMuZ2V0KCksIHBkZk5hbWUuZ2V0KCksIGVt
cHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAgIGF1dG8gZW1wdHlBcnJheSA9
IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbmFtZU5ldHNjYXBlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWltZVR5cGVOZXRzY2FwZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG1pbWVUeXBlc05ldHNjYXBlID0gYWRvcHRX
SyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBXS0FycmF5QXBwZW5kSXRlbShtaW1lVHlw
ZXNOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVOZXRzY2FwZS5nZXQoKSk7CisgICAgV0tDb250ZXh0
QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygiIikuZ2V0KCksIHRvV0so
Ik15IHBlcnNvbmFsIFBERiIpLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5Lmdl
dCgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lUGRmID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0IGJ1aWx0LWluIFBERiIpKTsKKyAg
ICBhdXRvIG5hbWVOZXRzY2FwZSA9IHRvV0soImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4i
KTsKKyAgICBhdXRvIG1pbWVUeXBlc05ldHNjYXBlID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNy
ZWF0ZSgpKTsKKyAgICBXS0FycmF5QXBwZW5kSXRlbShtaW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwg
dG9XSygiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2FwZSIpLmdldCgpKTsKKyAgICBh
dXRvIG5hbWVQZGYgPSB0b1dLKCJXZWJLaXQgYnVpbHQtaW4gUERGIik7CiAKICAgICBpZiAobV91
bnN1cHBvcnRlZFBsdWdpbk1vZGUgPT0gImFsbE9yaWdpbnMiKSB7Ci0gICAgICAgIFdLQ29udGV4
dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIGFsbE9yaWdpbnMuZ2V0KCksIG5h
bWVOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0
KCkpOwotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgp
LCBhbGxPcmlnaW5zLmdldCgpLCBuYW1lUGRmLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0
eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29u
dGV4dC5nZXQoKSwgdG9XSygiIikuZ2V0KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVz
TmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAgICAgICBXS0NvbnRleHRBZGRT
dXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCIiKS5nZXQoKSwgbmFtZVBkZi5n
ZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAobV91bnN1cHBvcnRlZFBsdWdpbk1vZGUgPT0gInNwZWNpZmlj
T3JpZ2luIikgewotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0
LmdldCgpLCBzcGVjaWZpY09yaWdpbi5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBtaW1lVHlw
ZXNOZXRzY2FwZS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7Ci0gICAgICAgIFdLQ29udGV4dEFk
ZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHNwZWNpZmljT3JpZ2luLmdldCgpLCBu
YW1lUGRmLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAg
ICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygibG9j
YWxob3N0IikuZ2V0KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVzTmV0c2NhcGUuZ2V0
KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVn
aW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCJsb2NhbGhvc3QiKS5nZXQoKSwgbmFtZVBkZi5nZXQo
KSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiB9CkBAIC0yNDkxLDE0ICsyMzU0LDEyIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OmNh
bkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoV0tQYWdlUmVmIHBhZ2UsIFdLUHJv
CiB7CiAgICAgaWYgKG1fc2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZSkKICAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+b3V0cHV0VGV4dCgiY2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZVxuIik7Ci0gICAgV0tQcm90ZWN0aW9uU3BhY2VB
dXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNhdGlvblNjaGVtZSA9IFdLUHJvdGVjdGlvblNw
YWNlR2V0QXV0aGVudGljYXRpb25TY2hlbWUocHJvdGVjdGlvblNwYWNlKTsKLSAgICAKLSAgICBp
ZiAoYXV0aGVudGljYXRpb25TY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRp
b25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQpIHsKLSAgICAgICAgc3RkOjpz
dHJpbmcgaG9zdCA9IHRvU1REKGFkb3B0V0soV0tQcm90ZWN0aW9uU3BhY2VDb3B5SG9zdChwcm90
ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CisgICAgYXV0byBzY2hlbWUgPSBXS1Byb3RlY3Rpb25TcGFj
ZUdldEF1dGhlbnRpY2F0aW9uU2NoZW1lKHByb3RlY3Rpb25TcGFjZSk7CisgICAgaWYgKHNjaGVt
ZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZh
bHVhdGlvblJlcXVlc3RlZCkgeworICAgICAgICBhdXRvIGhvc3QgPSB0b1NURChhZG9wdFdLKFdL
UHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSkpOwogICAgICAgICByZXR1
cm4gaG9zdCA9PSAibG9jYWxob3N0IiB8fCBob3N0ID09ICIxMjcuMC4wLjEiIHx8IChtX2FsbG93
QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyAmJiBtX2FsbG93ZWRIb3N0cy5maW5k
KGhvc3QpICE9IG1fYWxsb3dlZEhvc3RzLmVuZCgpKTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IGF1dGhlbnRpY2F0aW9uU2NoZW1lIDw9IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lSFRUUERpZ2VzdCB8fCBhdXRoZW50aWNhdGlvblNjaGVtZSA9PSBrV0tQcm90ZWN0aW9u
U3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU9BdXRoOworICAgIHJldHVybiBzY2hlbWUgPD0ga1dL
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQRGlnZXN0IHx8IHNjaGVtZSA9
PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU9BdXRoOwogfQogCiB2b2lk
IFRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKFdLUGFnZVJlZiBwYWdlLCBXS05h
dmlnYXRpb25SZWYgbmF2aWdhdGlvbikKQEAgLTI1MDYsOCArMjM2Nyw3IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24oV0tQYWdlUmVmIHBhZ2UsIFdLTmF2aWdhdGlv
blJlZiBuYXZpZ2F0CiAgICAgaWYgKG1fc3RhdGUgIT0gUmVzZXR0aW5nKQogICAgICAgICByZXR1
cm47CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkwgPSBhZG9wdFdLKFdLRnJhbWVD
b3B5VVJMKFdLUGFnZUdldE1haW5GcmFtZShwYWdlKSkpOwotICAgIGlmICghV0tVUkxJc0VxdWFs
KHdrVVJMLmdldCgpLCBibGFua1VSTCgpKSkKKyAgICBpZiAoIVdLVVJMSXNFcXVhbChhZG9wdFdL
KFdLRnJhbWVDb3B5VVJMKFdLUGFnZUdldE1haW5GcmFtZShwYWdlKSkpLmdldCgpLCBibGFua1VS
TCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kb25lUmVzZXR0aW5nID0gdHJ1ZTsKQEAg
LTI1MjcsNyArMjM4Nyw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYgcGFnZSwgV0tBdXRoZW50CiAgICAgICAgIG1fc2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50Kys7CiAKICAgICAgICAgaWYgKG1f
YWxsb3dzQW55U1NMQ2VydGlmaWNhdGUpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLQ3Jl
ZGVudGlhbFJlZj4gY3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHRvV0so
ImFjY2VwdCBzZXJ2ZXIgdHJ1c3QiKS5nZXQoKSwgdG9XSygiIikuZ2V0KCksIGtXS0NyZWRlbnRp
YWxQZXJzaXN0ZW5jZU5vbmUpKTsKKyAgICAgICAgICAgIGF1dG8gY3JlZGVudGlhbCA9IGFkb3B0
V0soV0tDcmVkZW50aWFsQ3JlYXRlKHRvV0soImFjY2VwdCBzZXJ2ZXIgdHJ1c3QiKS5nZXQoKSwg
dG9XSygiIikuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpKTsKICAgICAgICAg
ICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlhbChkZWNpc2lv
bkxpc3RlbmVyLCBjcmVkZW50aWFsLmdldCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMjU0MSw5ICsyNDAxLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdLUGFnZVJlZiBwYWdlLCBXS0F1dGhlbnQKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIGhvc3QgPSB0b1NURChhZG9wdFdL
KFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkpOworICAg
IGF1dG8gaG9zdCA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tQcm90ZWN0aW9uU3BhY2VDb3B5SG9z
dChwcm90ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CiAgICAgaW50IHBvcnQgPSBXS1Byb3RlY3Rpb25T
cGFjZUdldFBvcnQocHJvdGVjdGlvblNwYWNlKTsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IG1ha2VT
dHJpbmcoaG9zdC5jX3N0cigpLCAnOicsIHBvcnQsICIgLSBkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UgLSAiLCB0b1N0cmluZyhhdXRoZW50aWNhdGlvblNjaGVtZSksICIgLSAiKTsK
KyAgICBTdHJpbmcgbWVzc2FnZSA9IG1ha2VTdHJpbmcoaG9zdCwgJzonLCBwb3J0LCAiIC0gZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIC0gIiwgdG9TdHJpbmcoYXV0aGVudGljYXRp
b25TY2hlbWUpLCAiIC0gIik7CiAgICAgaWYgKCFtX2hhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZXMpCiAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCJTaW11bGF0aW5nIGNhbmNlbGxlZCBhdXRo
ZW50aWNhdGlvbiBzaGVldFxuIik7CiAgICAgZWxzZQpAQCAtMjU1NCwxMyArMjQxNCwxMSBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQ
YWdlUmVmIHBhZ2UsIFdLQXV0aGVudAogICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25M
aXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgMCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVzZXJuYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhtX2F1dGhlbnRpY2F0aW9uVXNlcm5hbWUu
dXRmOCgpLmRhdGEoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXNzd29yZCA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9hdXRoZW50aWNhdGlvblBh
c3N3b3JkLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS0NyZWRlbnRpYWxSZWY+
IGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh1c2VybmFtZS5nZXQoKSwg
cGFzc3dvcmQuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24pKTsKKyAg
ICBhdXRvIGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh0b1dLKG1fYXV0
aGVudGljYXRpb25Vc2VybmFtZSkuZ2V0KCksIHRvV0sobV9hdXRoZW50aWNhdGlvblBhc3N3b3Jk
KS5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikpOwogICAgIFdLQXV0
aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVy
LCBjcmVkZW50aWFsLmdldCgpKTsKIH0KIAotICAgIAorCiAvLyBXS0NvbnRleHREb3dubG9hZENs
aWVudAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpkb3dubG9hZERpZFN0YXJ0KFdLQ29udGV4dFJl
ZiBjb250ZXh0LCBXS0Rvd25sb2FkUmVmIGRvd25sb2FkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQpAQCAtMjcwNCw5ICsyNTYyLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRp
b25QZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKICAgICBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVy
OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0
aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1
cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVz
U3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJsZSBmbG9v
ckxldmVsKQordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24o
ZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlv
bmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwg
T3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25h
bDxkb3VibGU+IGZsb29yTGV2ZWwpCiB7Ci0gICAgbV9nZW9sb2NhdGlvblByb3ZpZGVyLT5zZXRQ
b3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwg
YWx0aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJv
dmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJvdmlkZXNGbG9v
ckxldmVsLCBmbG9vckxldmVsKTsKKyAgICBtX2dlb2xvY2F0aW9uUHJvdmlkZXItPnNldFBvc2l0
aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZSwgYWx0aXR1ZGVBY2N1
cmFjeSwgaGVhZGluZywgc3BlZWQsIGZsb29yTGV2ZWwpOwogfQogCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdS
ZWYgZXJyb3JNZXNzYWdlKQpAQCAtMjg1Niw5ICsyNzE0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6aGFuZGxlQ2hlY2tPZlVzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4oV0tGcmFtZVJlZiBm
cmFtZSwKIHsKICAgICBhdXRvIG9yaWdpbkhhc2ggPSB1c2VyTWVkaWFPcmlnaW5IYXNoKHVzZXJN
ZWRpYURvY3VtZW50T3JpZ2luLCB0b3BMZXZlbERvY3VtZW50T3JpZ2luKTsKICAgICBhdXRvIHNh
bHQgPSBzYWx0Rm9yT3JpZ2luKGZyYW1lLCBvcmlnaW5IYXNoKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc2FsdFN0cmluZyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc2FsdC51dGY4KCkuZGF0YSgpKSk7Ci0KLSAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25D
aGVja1NldFVzZXJNZWRpYUFjY2Vzc0luZm8oY2hlY2tSZXF1ZXN0LCBzYWx0U3RyaW5nLmdldCgp
LCBzZXR0aW5nc0Zvck9yaWdpbihvcmlnaW5IYXNoKS5wZXJzaXN0ZW50UGVybWlzc2lvbigpKTsK
KyAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1NldFVzZXJNZWRpYUFjY2Vzc0luZm8oY2hl
Y2tSZXF1ZXN0LCB0b1dLKHNhbHQpLmdldCgpLCBzZXR0aW5nc0Zvck9yaWdpbihvcmlnaW5IYXNo
KS5wZXJzaXN0ZW50UGVybWlzc2lvbigpKTsKIH0KIAogYm9vbCBUZXN0Q29udHJvbGxlcjo6aGFu
ZGxlRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0KFdLU2VjdXJpdHlPcmln
aW5SZWYgb3JpZ2luKQpAQCAtMjkxNCw4ICsyNzcwLDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3NpYmxlKCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tB
cnJheVJlZj4gYXVkaW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1VzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0QXVkaW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tB
cnJheVJlZj4gdmlkZW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1VzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0VmlkZW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKKyAgICAgICAgYXV0byBhdWRpb0Rldmlj
ZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RBdWRpb0RldmljZVVJ
RHMocmVxdWVzdCkpOworICAgICAgICBhdXRvIHZpZGVvRGV2aWNlVUlEcyA9IGFkb3B0V0soV0tV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFZpZGVvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7CiAKICAg
ICAgICAgaWYgKCFXS0FycmF5R2V0U2l6ZSh2aWRlb0RldmljZVVJRHMuZ2V0KCkpICYmICFXS0Fy
cmF5R2V0U2l6ZShhdWRpb0RldmljZVVJRHMuZ2V0KCkpKSB7CiAgICAgICAgICAgICBXS1VzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0RGVueShyZXF1ZXN0LCBrV0tOb0NvbnN0cmFpbnRzKTsKQEAg
LTI5MjYsMTMgKzI3ODIsMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9y
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3NpYmxlKCkKICAgICAgICAgaWYgKFdLQXJy
YXlHZXRTaXplKHZpZGVvRGV2aWNlVUlEcy5nZXQoKSkpCiAgICAgICAgICAgICB2aWRlb0Rldmlj
ZVVJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRl
eCh2aWRlb0RldmljZVVJRHMuZ2V0KCksIDApKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmlkZW9EZXZpY2VVSUQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIi
KSk7CisgICAgICAgICAgICB2aWRlb0RldmljZVVJRCA9IHRvV0soIiIpOwogCiAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdWRpb0RldmljZVVJRDsKICAgICAgICAgaWYgKFdLQXJy
YXlHZXRTaXplKGF1ZGlvRGV2aWNlVUlEcy5nZXQoKSkpCiAgICAgICAgICAgICBhdWRpb0Rldmlj
ZVVJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChhdWRpb0RldmljZVVJRHMuZ2V0KCksIDApKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
YXVkaW9EZXZpY2VVSUQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIi
KSk7CisgICAgICAgICAgICBhdWRpb0RldmljZVVJRCA9IHRvV0soIiIpOwogCiAgICAgICAgIFdL
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RBbGxvdyhyZXF1ZXN0LCBhdWRpb0RldmljZVVJRC5n
ZXQoKSwgdmlkZW9EZXZpY2VVSUQuZ2V0KCkpOwogICAgIH0KQEAgLTMwNTYsMTIgKzI5MTIsOSBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShXS05h
dmlnYXRpb25EYXRhUmVmIG5hdmlnYXRpbwogICAgIGlmICghbV9zaG91bGRMb2dIaXN0b3J5Q2xp
ZW50Q2FsbGJhY2tzKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBVUkwKICAgICBhdXRvIHVy
bCA9IGFkb3B0V0soV0tOYXZpZ2F0aW9uRGF0YUNvcHlVUkwobmF2aWdhdGlvbkRhdGEpKTsKICAg
ICBhdXRvIHVybFN0cmluZyA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVy
bC5nZXQoKSkpKTsKLSAgICAvLyBUaXRsZQogICAgIGF1dG8gdGl0bGUgPSB0b1dURlN0cmluZyhh
ZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5VGl0bGUobmF2aWdhdGlvbkRhdGEpKSk7Ci0gICAg
Ly8gSFRUUCBtZXRob2QKICAgICBhdXRvIHJlcXVlc3QgPSBhZG9wdFdLKFdLTmF2aWdhdGlvbkRh
dGFDb3B5T3JpZ2luYWxSZXF1ZXN0KG5hdmlnYXRpb25EYXRhKSk7CiAgICAgYXV0byBtZXRob2Qg
PSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlIVFRQTWV0aG9kKHJlcXVlc3Qu
Z2V0KCkpKSk7CiAKQEAgLTMyMDYsNyArMzA1OSw3IEBAIHZvaWQgZ2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXNDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSwgV0tBcnJheVJlZiBkb21haW5MaXN0KQog
CiAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0RG9tYWluczsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgV0tBcnJheUdldFNpemUoZG9tYWluTGlzdCk7IGkrKykgewotICAgICAgICBhdXRv
IGRvbWFpbiA9ICByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0
SW5kZXgoZG9tYWluTGlzdCwgaSkpOworICAgICAgICBhdXRvIGRvbWFpbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5MaXN0LCBpKSk7
CiAgICAgICAgIGF1dG8gYnVmZmVyID0gc3RkOjp2ZWN0b3I8Y2hhcj4oV0tTdHJpbmdHZXRNYXhp
bXVtVVRGOENTdHJpbmdTaXplKGRvbWFpbikpOwogICAgICAgICBhdXRvIHN0cmluZ0xlbmd0aCA9
IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcoZG9tYWluLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6
ZSgpKTsKIApAQCAtMzk3OCw3ICszODMxLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVpbml0
aWFsaXplQXBwQm91bmREb21haW5zKCkKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZUJ1bmRs
ZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmll
cikKIHsKICAgICBJbkFwcEJyb3dzZXJQcml2YWN5Q2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRo
aXMpOwotICAgIFdLV2Vic2l0ZURhdGFTdG9yZVVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdv
cmtQcm9jZXNzKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0b3JlKCksIGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVuZGxlSWRlbnRpZmllci51dGY4KCkuZGF0YSgp
KSkuZ2V0KCksICZjb250ZXh0LCBpbkFwcEJyb3dzZXJQcml2YWN5Vm9pZFJlc3VsdENhbGxiYWNr
KTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3Jr
UHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpLCB0b1dLKGJ1bmRsZUlk
ZW50aWZpZXIpLmdldCgpLCAmY29udGV4dCwgaW5BcHBCcm93c2VyUHJpdmFjeVZvaWRSZXN1bHRD
YWxsYmFjayk7CiAgICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBub1RpbWVvdXQpOwogfQogCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmggYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKaW5kZXggZjk0ZDU3YzE0N2IzMTZm
MDc4ZmE4NWYyMjBmNDA3NjA5NDExM2M4Yy4uZmY4Mzk0ZWMwMzg3N2E2ZGJjMGRjNGIzZTQ4YzBl
ZjRmM2YzYjMzOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaApAQCAt
MTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBHZW9sb2NhdGlvbi4KICAgICB2
b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sKTsKLSAgICB2b2lkIHNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91Ymxl
IGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBw
cm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHBy
b3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91Ymxl
IHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpOworICAg
IHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUg
bG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9w
dGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5n
LCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25hbDxkb3VibGU+IGZsb29yTGV2ZWwpOwog
ICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3Ry
aW5nUmVmIGVycm9yTWVzc2FnZSk7CiAgICAgdm9pZCBoYW5kbGVHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0KFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFJlZik7CiAgICAgYm9vbCBp
c0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXggYTViNmRkMDU1ODBhZTBjMmQ5NTcwNzdkZmU0NTBh
NDg2ZTZkMDFlYy4uNTAxMjdmNjc4NDFlMDNjNTU2OGUxOWU5OTExNzk3YzhmYzJkNmI4MiAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKQEAgLTI3LDggKzI3LDgg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgogCisj
aW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmll
dy5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZVRlc3RTdXBwb3J0LmgiCkBAIC02NiwyMSArNjYsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIFdUUiB7CiAKK3N0YXRpYyB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBj
aGFyKiBuYW1lLCBXS1R5cGVSZWYgYm9keSA9IG51bGxwdHIpCit7CisgICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIGJvZHkpOworfQorCiBUZXN0SW52b2Nh
dGlvbjo6VGVzdEludm9jYXRpb24oV0tVUkxSZWYgdXJsLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0
aW9ucykKICAgICA6IG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwgbV91cmwodXJsKQogICAgICwg
bV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUZXN0SW52
b2NhdGlvbjo6d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcobV91cmwu
Z2V0KCkpKTsKLQotICAgIHNpemVfdCBzdHJpbmdMZW5ndGggPSBXS1N0cmluZ0dldExlbmd0aCh1
cmxTdHJpbmcuZ2V0KCkpOwotCi0gICAgVmVjdG9yPGNoYXI+IHVybFZlY3RvcjsKLSAgICB1cmxW
ZWN0b3IucmVzaXplKHN0cmluZ0xlbmd0aCArIDEpOwotCi0gICAgV0tTdHJpbmdHZXRVVEY4Q1N0
cmluZyh1cmxTdHJpbmcuZ2V0KCksIHVybFZlY3Rvci5kYXRhKCksIHN0cmluZ0xlbmd0aCArIDEp
OwotCi0gICAgbV91cmxTdHJpbmcgPSBTdHJpbmcodXJsVmVjdG9yLmRhdGEoKSwgc3RyaW5nTGVu
Z3RoKTsKKyAgICBtX3VybFN0cmluZyA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3Ry
aW5nKG1fdXJsLmdldCgpKSkuZ2V0KCkpOwogCiAgICAgLy8gRklYTUU6IEF2b2lkIG11dGF0aW5n
IHRoZSBzZXR0aW5nIHZpYSBhIHRlc3QgZGlyZWN0b3J5IGxpa2UgdGhpcy4KICAgICBtX2R1bXBG
cmFtZUxvYWRDYWxsYmFja3MgPSB1cmxDb250YWlucygibG9hZGluZy8iKSAmJiAhdXJsQ29udGFp
bnMoIjovL2xvY2FsaG9zdCIpOwpAQCAtMTI5LDI4ICsxMjUsMTIgQEAgYm9vbCBUZXN0SW52b2Nh
dGlvbjo6c2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcygpIGNvbnN0CiAKIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IFRlc3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0
dGluZ3NEaWN0aW9uYXJ5KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1c2VGbGV4aWJsZVZpZXdw
b3J0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlRmxleGli
bGVWaWV3cG9ydCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHVzZUZsZXhpYmxl
Vmlld3BvcnRWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG9wdGlvbnMoKS51c2VGbGV4
aWJsZVZpZXdwb3J0KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdl
Qm9keS5nZXQoKSwgdXNlRmxleGlibGVWaWV3cG9ydEtleS5nZXQoKSwgdXNlRmxleGlibGVWaWV3
cG9ydFZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkdW1wUGl4
ZWxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcFBpeGVs
cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGR1bXBQaXhlbHNWYWx1ZSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcFBpeGVscykpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIGR1bXBQaXhlbHNLZXkuZ2V0KCksIGR1
bXBQaXhlbHNWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGlt
ZW91dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVvdXQi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHRpbWVvdXRWYWx1ZSA9IGFkb3B0V0so
V0tVSW50NjRDcmVhdGUobV90aW1lb3V0Lm1pbGxpc2Vjb25kcygpKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgdGltZW91dEtleS5nZXQoKSwg
dGltZW91dFZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnJLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJWYWx1ZSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyS2V5LmdldCgpLCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJWYWx1ZS5nZXQoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWRkaXRp
b25hbFN1cHBvcnRlZEltYWdlVHlwZXNWYWx1ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcob3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3Ry
KCkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgp
LCBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0tleS5nZXQoKSwgYWRkaXRpb25hbFN1cHBv
cnRlZEltYWdlVHlwZXNWYWx1ZS5nZXQoKSk7Ci0KKyAgICBhdXRvIGJlZ2luVGVzdE1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVl
KGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVXNlRmxleGlibGVWaWV3cG9ydCIsIG9wdGlvbnMoKS51
c2VGbGV4aWJsZVZpZXdwb3J0KTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwg
IkR1bXBQaXhlbHMiLCBtX2R1bXBQaXhlbHMpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3Nh
Z2VCb2R5LCAiVGltZW91dCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3RpbWVvdXQubWlsbGlz
ZWNvbmRzKCkpKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVyciIsIG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKKyAgICBzZXRW
YWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVz
Iiwgb3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOwogICAg
IHJldHVybiBiZWdpblRlc3RNZXNzYWdlQm9keTsKIH0KIApAQCAtMTY4LDkgKzE0OCw3IEBAIHZv
aWQgVGVzdEludm9jYXRpb246Omludm9rZSgpCiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNs
ZWFyIG91dCB2aXNpdGVkIGxpbmtzIGhlcmUuCiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJC
ZWdpblRlc3QiKSk7Ci0gICAgYXV0byBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGNyZWF0ZVRlc3RT
ZXR0aW5nc0RpY3Rpb25hcnkoKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkJlZ2luVGVzdCIsIGNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkoKS5nZXQo
KSk7CiAKICAgICBtX3N0YXJ0ZWRUZXN0aW5nID0gdHJ1ZTsKIApAQCAtMzI3LDE4NSArMzA1LDEw
NCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWNrIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgbWVzc2FnZUJvZHlTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlQm9keVN0cmluZywgIkJlZ2luVGVzdCIpKSB7CisgICAgICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSwgIkJlZ2luVGVz
dCIpKSB7CiAgICAgICAgICAgICBtX2dvdEluaXRpYWxSZXNwb25zZSA9IHRydWU7CiAgICAgICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubm90aWZ5RG9uZSgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJEb25lIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGl4ZWxSZXN1bHRJc1BlbmRp
bmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaXhlbFJlc3Vs
dElzUGVuZGluZyIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBpeGVsUmVzdWx0SXNQZW5kaW5n
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgcGl4ZWxSZXN1bHRJc1BlbmRpbmdLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgbV9waXhlbFJlc3VsdElzUGVuZGluZyA9IFdLQm9vbGVhbkdldFZhbHVlKHBpeGVsUmVz
dWx0SXNQZW5kaW5nKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIG1fcGl4ZWxSZXN1bHRJc1BlbmRp
bmcgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUGl4ZWxSZXN1bHRJc1Bl
bmRpbmciKTsKICAgICAgICAgaWYgKCFtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKSB7Ci0gICAgICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGl4ZWxSZXN1bHRLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaXhlbFJlc3VsdCIpKTsKLSAgICAgICAgICAg
IG1fcGl4ZWxSZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0ltYWdlUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGl4ZWxSZXN1bHRLZXkuZ2V0KCkpKTsK
KyAgICAgICAgICAgIG1fcGl4ZWxSZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0ltYWdlUmVmPih2YWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJQaXhlbFJlc3VsdCIpKTsKICAgICAgICAgICAgIEFT
U0VSVCghbV9waXhlbFJlc3VsdCB8fCBtX2R1bXBQaXhlbHMpOwogICAgICAgICB9Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlcGFpbnRSZWN0c0tleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlcGFpbnRSZWN0cyIpKTsKLSAgICAgICAgbV9y
ZXBhaW50UmVjdHMgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcmVwYWludFJlY3RzS2V5LmdldCgpKSk7Ci0K
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF1ZGlvUmVzdWx0S2V5ID0gIGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF1ZGlvUmVzdWx0IikpOwotICAgICAg
ICBtX2F1ZGlvUmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0tEYXRhUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYXVkaW9SZXN1bHRLZXkuZ2V0KCkpKTsK
LQorICAgICAgICBtX3JlcGFpbnRSZWN0cyA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KHZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlJlcGFpbnRSZWN0cyIpKTsKKyAgICAgICAgbV9hdWRp
b1Jlc3VsdCA9IHN0YXRpY19jYXN0PFdLRGF0YVJlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiQXVkaW9SZXN1bHQiKSk7CiAgICAgICAgIGRvbmUoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiVGV4dE91dHB1dCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRleHRPdXRw
dXQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBtX3Rl
eHRPdXRwdXQuYXBwZW5kKHRvV1RGU3RyaW5nKHRleHRPdXRwdXQpKTsKKyAgICAgICAgbV90ZXh0
T3V0cHV0LmFwcGVuZCh0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiRHVtcFRvU3RkRXJyIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tT
dHJpbmdSZWYgdGV4dE91dHB1dCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCB0b1dURlN0cmluZyh0ZXh0T3V0cHV0
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIHRvV1RGU3Ry
aW5nKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIkJlZm9yZVVubG9hZFJldHVyblZhbHVlIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiBiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoV0tCb29sZWFuR2V0VmFsdWUoYmVmb3JlVW5s
b2FkUmV0dXJuVmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dEJlZm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWRkQ2hyb21lSW5wdXRGaWVsZCIpKSB7CiAgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5hZGRDaHJvbWVJbnB1dEZp
ZWxkKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxBZGRDaHJvbWVJbnB1dEZp
ZWxkQ2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRs
ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbEFkZENocm9t
ZUlucHV0RmllbGRDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZW1vdmVDaHJvbWVJ
bnB1dEZpZWxkIikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnJlbW92ZUNocm9tZUlucHV0RmllbGQoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbFJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFjayIpKTsKLSAgICAgICAg
V0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJGb2N1c1dlYlZpZXciKSkgewogICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+bWFrZVdlYlZpZXdGaXJzdFJl
c3BvbmRlcigpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRm9jdXNXZWJWaWV3
Q2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbEZvY3VzV2ViVmll
d0NhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEJhY2tpbmdTY2FsZUZhY3RvciIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0b3IgPSBXS0RvdWJs
ZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSkpOwotICAgICAg
ICBXS1BhZ2VTZXRDdXN0b21CYWNraW5nU2NhbGVGYWN0b3IoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgYmFja2luZ1NjYWxlRmFjdG9yKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsU2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJh
Y2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgMCk7CisgICAgICAgIFdLUGFnZVNldEN1c3RvbUJhY2tpbmdTY2FsZUZhY3RvcihUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBkb3VibGVWYWx1
ZShtZXNzYWdlQm9keSkpOworICAgICAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxTZXRCYWNraW5n
U2NhbGVGYWN0b3JDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTaW11bGF0ZVdlYk5v
dGlmaWNhdGlvbkNsaWNrIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgdWludDY0X3Qgbm90aWZpY2F0
aW9uSUQgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdl
Qm9keSkpOworICAgICAgICB1aW50NjRfdCBub3RpZmljYXRpb25JRCA9IHVpbnQ2NFZhbHVlKG1l
c3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNpbXVsYXRl
V2ViTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uSUQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRBZGRzVmlzaXRlZExpbmtzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRMaW5rcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBXS0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVkV0spKTsK
KyAgICAgICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRMaW5rcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihXS0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVkV0spKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBs
YXRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGF0
aXR1ZGUiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGxhdGl0dWRlV0sgPSBzdGF0aWNfY2FzdDxX
S0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGxhdGl0dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGxhdGl0dWRlID0gV0tE
b3VibGVHZXRWYWx1ZShsYXRpdHVkZVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbG9uZ2l0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJsb25naXR1ZGUiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGxvbmdpdHVkZVdLID0gc3Rh
dGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBsb25naXR1ZGVLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgbG9u
Z2l0dWRlID0gV0tEb3VibGVHZXRWYWx1ZShsb25naXR1ZGVXSyk7Ci0KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJhY2N1cmFjeSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgYWNjdXJh
Y3lXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYWNjdXJhY3lLZXlXSy5nZXQoKSkpOwotICAgICAgICBk
b3VibGUgYWNjdXJhY3kgPSBXS0RvdWJsZUdldFZhbHVlKGFjY3VyYWN5V0spOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRlS2V5V0sgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0FsdGl0dWRlIikpOwotICAg
ICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNBbHRpdHVkZVdLID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
cHJvdmlkZXNBbHRpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNBbHRp
dHVkZSA9IFdLQm9vbGVhbkdldFZhbHVlKHByb3ZpZGVzQWx0aXR1ZGVXSyk7Ci0KLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVkZSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYg
YWx0aXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYWx0aXR1ZGVLZXlXSy5nZXQoKSkpOwotICAg
ICAgICBkb3VibGUgYWx0aXR1ZGUgPSBXS0RvdWJsZUdldFZhbHVlKGFsdGl0dWRlV0spOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lL
ZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzQWx0aXR1ZGVB
Y2N1cmFjeVdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5S2V5
V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kgPSBXS0Jv
b2xlYW5HZXRWYWx1ZShwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lXSyk7Ci0KLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRlQWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFsdGl0dWRlQWNjdXJhY3kiKSk7Ci0gICAgICAg
IFdLRG91YmxlUmVmIGFsdGl0dWRlQWNjdXJhY3lXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYWx0aXR1
ZGVBY2N1cmFjeUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5
ID0gV0tEb3VibGVHZXRWYWx1ZShhbHRpdHVkZUFjY3VyYWN5V0spOwotCi0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0hlYWRpbmdLZXlXSyA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzSGVhZGluZyIpKTsKLSAgICAgICAgV0tC
b29sZWFuUmVmIHByb3ZpZGVzSGVhZGluZ1dLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNI
ZWFkaW5nS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92aWRlc0hlYWRpbmcgPSBXS0Jv
b2xlYW5HZXRWYWx1ZShwcm92aWRlc0hlYWRpbmdXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGhlYWRpbmdLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImhlYWRpbmciKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGhlYWRpbmdXSyA9IHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgaGVhZGluZ0tleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBoZWFk
aW5nID0gV0tEb3VibGVHZXRWYWx1ZShoZWFkaW5nV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBwcm92aWRlc1NwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc1NwZWVkIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYg
cHJvdmlkZXNTcGVlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNTcGVlZEtleVdLLmdl
dCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNTcGVlZCA9IFdLQm9vbGVhbkdldFZhbHVlKHBy
b3ZpZGVzU3BlZWRXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNwZWVk
S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzcGVlZCIpKTsK
LSAgICAgICAgV0tEb3VibGVSZWYgc3BlZWRXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3BlZWRLZXlX
Sy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgc3BlZWQgPSBXS0RvdWJsZUdldFZhbHVlKHNwZWVk
V0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0Zsb29yTGV2
ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVz
Rmxvb3JMZXZlbCIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzRmxvb3JMZXZlbFdL
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNGbG9vckxldmVsS2V5V0suZ2V0KCkpKTsKLSAg
ICAgICAgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRl
c0Zsb29yTGV2ZWxXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZsb29y
TGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZsb29y
TGV2ZWwiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGZsb29yTGV2ZWxXSyA9IHN0YXRpY19jYXN0
PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgZmxvb3JMZXZlbEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBmbG9vckxldmVs
ID0gV0tEb3VibGVHZXRWYWx1ZShmbG9vckxldmVsV0spOwotCi0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVkZSwgbG9u
Z2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5n
LCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJvdmlkZXNGbG9vckxldmVsLCBmbG9vckxldmVsKTsK
KyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVz
c2FnZUJvZHkpOworICAgICAgICBhdXRvIGxhdGl0dWRlID0gZG91YmxlVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAibGF0aXR1ZGUiKTsKKyAgICAgICAgYXV0byBsb25naXR1ZGUgPSBkb3Vi
bGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJsb25naXR1ZGUiKTsKKyAgICAgICAgYXV0
byBhY2N1cmFjeSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImFjY3VyYWN5
Iik7CisgICAgICAgIGF1dG8gYWx0aXR1ZGUgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgImFsdGl0dWRlIik7CisgICAgICAgIGF1dG8gYWx0aXR1ZGVBY2N1cmFj
eSA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiYWx0aXR1ZGVB
Y2N1cmFjeSIpOworICAgICAgICBhdXRvIGhlYWRpbmcgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgImhlYWRpbmciKTsKKyAgICAgICAgYXV0byBzcGVlZCA9IG9w
dGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAic3BlZWQiKTsKKyAgICAg
ICAgYXV0byBmbG9vckxldmVsID0gb3B0aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJmbG9vckxldmVsIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFj
eSwgYWx0aXR1ZGUsIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkLCBmbG9vckxldmVs
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWls
YWJsZUVycm9yIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdl
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJp
bmdSZWYgZXJyb3JNZXNzYWdlID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2
YWlsYWJsZUVycm9yKGVycm9yTWVzc2FnZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZXJN
ZWRpYVBlcm1pc3Npb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGVuYWJs
ZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVybWlzc2lvbihXS0Jvb2xl
YW5HZXRWYWx1ZShlbmFibGVkV0spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFVzZXJNZWRpYVBlcm1pc3Npb24oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUxNSwxMTcgKzQxMiw2NiBAQCB2b2lkIFRlc3RJ
bnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1Jl
ZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmln
aW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJtaXNzaW9uS2V5V0sgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwZXJtaXNzaW9uIikpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgcGVybWlzc2lvbldLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGVybWlzc2lv
bktleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcGVybWlzc2lvbiA9IFdLQm9vbGVhbkdldFZh
bHVlKHBlcm1pc3Npb25XSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9y
aWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG9yaWdp
bktleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRP
cmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRP
cmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbldLID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBwYXJlbnRPcmlnaW5LZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1
dG8gcGVybWlzc2lvbiA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJwZXJt
aXNzaW9uIik7CisgICAgICAgIGF1dG8gb3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJvcmlnaW4iKTsKKyAgICAgICAgYXV0byBwYXJlbnRPcmlnaW5XSyA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgInBhcmVudE9yaWdpbiIpOwogICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1p
c3Npb25Gb3JPcmlnaW4ocGVybWlzc2lvbiwgb3JpZ2luV0ssIHBhcmVudE9yaWdpbldLKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9y
T3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAgICAgICBXS1N0
cmluZ1JlZiBvcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgb3JpZ2luS2V5LmdldCgpKSk7Ci0K
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBhcmVudE9y
aWdpbktleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIG9yaWdp
bldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAib3JpZ2luIik7CisgICAg
ICAgIGF1dG8gcGFyZW50T3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJwYXJlbnRPcmlnaW4iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihvcmlnaW5XSywg
cGFyZW50T3JpZ2luV0spOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRDdXN0b21Qb2xpY3lEZWxl
Z2F0ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVuYWJsZWRLZXlXSyA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImVuYWJsZWQiKSk7Ci0gICAgICAgIFdL
Qm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBlbmFibGVkS2V5V0suZ2V0
KCkpKTsKLSAgICAgICAgYm9vbCBlbmFibGVkID0gV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdL
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGVybWlzc2l2ZUtleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGVybWlzc2l2ZSIpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIHBlcm1pc3NpdmVXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBlcm1p
c3NpdmVLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHBlcm1pc3NpdmUgPSBXS0Jvb2xlYW5H
ZXRWYWx1ZShwZXJtaXNzaXZlV0spOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBlbmFibGVk
ID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImVuYWJsZWQiKTsKKyAgICAg
ICAgYXV0byBwZXJtaXNzaXZlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
InBlcm1pc3NpdmUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEN1
c3RvbVBvbGljeURlbGVnYXRlKGVuYWJsZWQsIHBlcm1pc3NpdmUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRIaWRkZW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc0luaXRpYWxL
ZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhpZGRlbiIpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIGhpZGRlbldLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNJbml0
aWFsS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBoaWRkZW4gPSBXS0Jvb2xlYW5HZXRWYWx1
ZShoaWRkZW5XSyk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhp
ZGRlbihoaWRkZW4pOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rp
b25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRIaWRkZW4oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImhpZGRl
biIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUHJvY2Vzc1dvcmtRdWV1ZSIpKSB7Ci0gICAgICAg
IGlmIChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnByb2Nl
c3NXb3JrUXVldWUoKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV29ya1F1
ZXVlUHJvY2Vzc2VkQ2FsbGJhY2siKSk7Ci0gICAgICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRv
SW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwotICAgICAgICB9CisgICAgICAgIGlmIChU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnByb2Nlc3NXb3Jr
UXVldWUoKSkKKyAgICAgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiV29ya1F1ZXVlUHJvY2Vzc2Vk
Q2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVCYWNrTmF2aWdhdGlvbiIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIHVpbnQ2NF90IHN0ZXBDb3VudCA9IFdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVCYWNrTmF2aWdhdGlv
bihzdGVwQ291bnQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1
ZXVlTWFuYWdlcigpLnF1ZXVlQmFja05hdmlnYXRpb24odWludDY0VmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVGb3J3YXJkTmF2aWdhdGlvbiIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIHVpbnQ2NF90IHN0ZXBDb3VudCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVGb3J3YXJkTmF2aWdhdGlvbihz
dGVwQ291bnQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVl
TWFuYWdlcigpLnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24odWludDY0VmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVMb2FkIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBsb2FkRGF0YURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0Rp
Y3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdXJsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidXJs
IikpOwotICAgICAgICBXS1N0cmluZ1JlZiB1cmxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgdXJsS2V5Lmdl
dCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRhcmdldEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRhcmdldCIpKTsKLSAgICAgICAg
V0tTdHJpbmdSZWYgdGFyZ2V0V0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIHRhcmdldEtleS5nZXQoKSkpOwot
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzaG91bGRPcGVuRXh0ZXJuYWxVUkxz
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygic2hvdWxkT3BlbkV4
dGVybmFsVVJMcyIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHNob3VsZE9wZW5FeHRlcm5hbFVS
THNWYWx1ZVdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc0tleS5nZXQo
KSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5h
Z2VyKCkucXVldWVMb2FkKHRvV1RGU3RyaW5nKHVybFdLKSwgdG9XVEZTdHJpbmcodGFyZ2V0V0sp
LCBXS0Jvb2xlYW5HZXRWYWx1ZShzaG91bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWVXSykpOworICAg
ICAgICBhdXRvIGxvYWREYXRhRGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gdXJsID0gdG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUobG9hZERhdGFE
aWN0aW9uYXJ5LCAidXJsIikpOworICAgICAgICBhdXRvIHRhcmdldCA9IHRvV1RGU3RyaW5nKHN0
cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgInRhcmdldCIpKTsKKyAgICAgICAgYXV0byBz
aG91bGRPcGVuRXh0ZXJuYWxVUkxzID0gYm9vbGVhblZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwg
InNob3VsZE9wZW5FeHRlcm5hbFVSTHMiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWQodXJsLCB0YXJnZXQsIHNob3VsZE9w
ZW5FeHRlcm5hbFVSTHMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUxvYWRIVE1MU3RyaW5n
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBsb2FkRGF0YURpY3Rp
b25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY29udGVudEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbnRlbnQiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IGNvbnRlbnRXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgY29udGVudEtleS5nZXQoKSkpOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBiYXNlVVJMS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiYmFzZVVSTCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYmFz
ZVVSTFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobG9hZERhdGFEaWN0aW9uYXJ5LCBiYXNlVVJMS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidW5yZWFjaGFibGVVUkwiKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIHVucmVhY2hhYmxlVVJMV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIHVucmVhY2hhYmxlVVJMS2V5
LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBsb2FkRGF0YURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5
VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGNvbnRlbnRXSyA9IHN0cmluZ1ZhbHVl
KGxvYWREYXRhRGljdGlvbmFyeSwgImNvbnRlbnQiKTsKKyAgICAgICAgYXV0byBiYXNlVVJMV0sg
PSBzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJiYXNlVVJMIik7CisgICAgICAgIGF1
dG8gdW5yZWFjaGFibGVVUkxXSyA9IHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgInVu
cmVhY2hhYmxlVVJMIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3Jr
UXVldWVNYW5hZ2VyKCkucXVldWVMb2FkSFRNTFN0cmluZyh0b1dURlN0cmluZyhjb250ZW50V0sp
LCBiYXNlVVJMV0sgPyB0b1dURlN0cmluZyhiYXNlVVJMV0spIDogU3RyaW5nKCksIHVucmVhY2hh
YmxlVVJMV0sgPyB0b1dURlN0cmluZyh1bnJlYWNoYWJsZVVSTFdLKSA6IFN0cmluZygpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYzNiwxNTQgKzQ4MiwxMTcgQEAgdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYg
bWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9hZGluZ1NjcmlwdCIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9k
eSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIo
KS5xdWV1ZUxvYWRpbmdTY3JpcHQodG9XVEZTdHJpbmcoc2NyaXB0KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Cisg
ICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1
ZU5vbkxvYWRpbmdTY3JpcHQodG9XVEZTdHJpbmcoc2NyaXB0KSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZv
ckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFj
ZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhXS0Jv
b2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5S
ZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZExvZ0Rvd25sb2FkQ2Fs
bGJhY2tzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgdXNlcm5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAg
ICAgICBXS1N0cmluZ1JlZiB1c2VybmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEF1dGhlbnRpY2F0aW9uVXNlcm5h
bWUodG9XVEZTdHJpbmcodXNlcm5hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QXV0aGVu
dGljYXRpb25QYXNzd29yZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBhc3N3
b3JkID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tT
dHJpbmdSZWYgcGFzc3dvcmQgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKHRvV1RG
U3RyaW5nKHBhc3N3b3JkKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEJsb2NrQWxsUGx1Z2lu
cyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgc2hvdWxkQmxvY2sgPSBzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldEJsb2NrQWxsUGx1Z2lucyhXS0Jvb2xlYW5HZXRWYWx1ZShzaG91
bGRCbG9jaykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QmxvY2tB
bGxQbHVnaW5zKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgbW9kZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAg
IFdLU3RyaW5nUmVmIG1vZGUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKHRvV1RGU3Ry
aW5nKG1vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlv
blBvbGljeUFmdGVyRGVsYXkiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZh
bHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5
QWZ0ZXJEZWxheShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVs
YXkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNo
b3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lk
ZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQ
b2xpY3lBZnRlckRlbGF5KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TmF2aWdhdGlv
bkdlc3R1cmVzRW5hYmxlZChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZChib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldElnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1p
dHMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGREb3dubG9hZFVuZGlzcGxh
eWFibGVNSU1FVHlwZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1F
VHlwZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkQWxs
b3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZEFsbG93
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZEFsbG93RGV2
aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlD
b29raWVzT25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSksIHRy
dWUpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1No
b3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSwgdHJ1
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFy
dHlDb29raWVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tp
ZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpLCBmYWxzZSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2ll
cyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlJ1blVJUHJvY2Vzc1NjcmlwdCIpKSB7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNjcmlwdCIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwotCi0gICAgICAgIFVJU2NyaXB0SW52b2Nh
dGlvbkRhdGEqIGludm9jYXRpb25EYXRhID0gbmV3IFVJU2NyaXB0SW52b2NhdGlvbkRhdGEoKTsK
KyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVz
c2FnZUJvZHkpOworICAgICAgICBhdXRvIGludm9jYXRpb25EYXRhID0gbmV3IFVJU2NyaXB0SW52
b2NhdGlvbkRhdGE7CiAgICAgICAgIGludm9jYXRpb25EYXRhLT50ZXN0SW52b2NhdGlvbiA9IHRo
aXM7Ci0gICAgICAgIGludm9jYXRpb25EYXRhLT5jYWxsYmFja0lEID0gKHVuc2lnbmVkKVdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBjYWxsYmFja0lES2V5LmdldCgpKSkpOwotICAg
ICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzY3Jp
cHRLZXkuZ2V0KCkpKTsKKyAgICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQgPSB1aW50
NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJDYWxsYmFja0lEIik7CisgICAgICAgIGlu
dm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJTY3JpcHQiKTsKICAgICAgICAgbV9wZW5kaW5nVUlTY3JpcHRJbnZvY2F0aW9uRGF0
YSA9IGludm9jYXRpb25EYXRhOwogICAgICAgICBXS1BhZ2VDYWxsQWZ0ZXJOZXh0UHJlc2VudGF0
aW9uVXBkYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdl
KCksIGludm9jYXRpb25EYXRhLCBydW5VSVNpZGVTY3JpcHRBZnRlclVwZGF0ZUNhbGxiYWNrKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiUnVuVUlQcm9jZXNzU2NyaXB0SW1tZWRpYXRlbHkiKSkgewot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTY3JpcHQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFj
a0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJ
RCIpKTsKLQotICAgICAgICBVSVNjcmlwdEludm9jYXRpb25EYXRhKiBpbnZvY2F0aW9uRGF0YSA9
IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRhKCk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBp
bnZvY2F0aW9uRGF0YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRhOwogICAgICAgICBpbnZv
Y2F0aW9uRGF0YS0+dGVzdEludm9jYXRpb24gPSB0aGlzOwotICAgICAgICBpbnZvY2F0aW9uRGF0
YS0+Y2FsbGJhY2tJRCA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgY2FsbGJhY2tJREtleS5nZXQoKSkpKTsKLSAgICAgICAgaW52b2NhdGlvbkRhdGEtPnNjcmlw
dFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc2NyaXB0S2V5LmdldCgpKSk7CisgICAgICAgIGlu
dm9jYXRpb25EYXRhLT5jYWxsYmFja0lEID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiQ2FsbGJhY2tJRCIpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0U3RyaW5n
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU2NyaXB0Iik7CiAgICAgICAg
IG1fcGVuZGluZ1VJU2NyaXB0SW52b2NhdGlvbkRhdGEgPSBpbnZvY2F0aW9uRGF0YTsKICAgICAg
ICAgcnVuVUlTaWRlU2NyaXB0SW1tZWRpYXRlbHkobnVsbHB0ciwgaW52b2NhdGlvbkRhdGEpOwog
ICAgICAgICByZXR1cm47CkBAIC03OTEsMTEgKzYwMCw5IEBAIHZvaWQgVGVzdEludm9jYXRpb246
OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VO
YW1lCiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
Ikluc3RhbGxDdXN0b21NZW51QWN0aW9uIikpIHsKICAgICAgICAgYXV0byBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJuYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbmFtZUtleS5nZXQoKSkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZGlzbWlzc2VzQXV0b21hdGljYWxseUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImRpc21pc3Nlc0F1dG9tYXRpY2Fs
bHkiKSk7Ci0gICAgICAgIGF1dG8gZGlzbWlzc2VzQXV0b21hdGljYWxseSA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlLZXkuZ2V0KCkpKTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmluc3RhbGxDdXN0b21NZW51QWN0aW9uKHRvV1RGU3RyaW5n
KG5hbWUuZ2V0KCkpLCBXS0Jvb2xlYW5HZXRWYWx1ZShkaXNtaXNzZXNBdXRvbWF0aWNhbGx5KSk7
CisgICAgICAgIGF1dG8gbmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
Im5hbWUiKTsKKyAgICAgICAgYXV0byBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5ID0gYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImRpc21pc3Nlc0F1dG9tYXRpY2FsbHkiKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmluc3RhbGxDdXN0b21NZW51QWN0aW9u
KHRvV1RGU3RyaW5nKG5hbWUpLCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtODA1LDcgKzYxMiw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1l
CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGFjdGlvbnM7CiAgICAgICAgIGFjdGlvbnMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IHNpemU7ICsraW5kZXgpCi0gICAgICAgICAgICBhY3Rpb25zLmFwcGVuZCh0b1dURlN0
cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KG1lc3Nh
Z2VCb2R5QXJyYXksIGluZGV4KSkpKTsKKyAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKHRvV1RG
U3RyaW5nKHN0cmluZ1ZhbHVlKFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZXNzYWdlQm9keUFycmF5
LCBpbmRleCkpKSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxv
d2VkTWVudUFjdGlvbnMoYWN0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04Mjgs
MTA4ICs2MzUsNjMgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NE
ZWJ1Z01vZGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRGVidWdNb2RlKFdLQm9vbGVhbkdldFZhbHVl
KHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzRGVidWdNb2RlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGhvc3ROYW1lKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0xhc3RTZWVuIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7
Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUi
KSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhv
c3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzTGFzdFNlZW4oaG9zdE5hbWUsIFdLRG91YmxlR2V0VmFsdWUo
dmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5
VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9
IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTGFzdFNlZW4oaG9zdE5hbWUs
IHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGlj
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lRG9tYWluMUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lRG9tYWluMSIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lRG9tYWluMktleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lRG9tYWluMiIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGxhc3RTZWVuS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiTGFzdFNlZW4iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBoYWRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzR3JhbmRmYXRoZXJlZEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzR3JhbmRmYXRoZXJlZCIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzUHJldmFsZW50S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNQcmV2YWxlbnQiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc1ZlcnlQcmV2YWxlbnRLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ZlcnlQcmV2YWxlbnQiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkYXRhUmVjb3Jkc1JlbW92ZWRLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEYXRhUmVjb3Jkc1JlbW92ZWQiKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lc0FjY2Vzc2VkRmlyc3RQYXJ0eUludGVy
YWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZXNB
Y2Nlc3NlZEZpcnN0UGFydHlJbnRlcmFjdGlvbiIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBo
b3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAg
V0tTdHJpbmdSZWYgdG9wRnJhbWVEb21haW4xID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZURv
bWFpbjFLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVEb21haW4yID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZURvbWFpbjJLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tE
b3VibGVSZWYgbGFzdFNlZW4gPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxhc3RTZWVuS2V5LmdldCgpKSk7
Ci0gICAgICAgIFdLQm9vbGVhblJlZiBoYWRVc2VySW50ZXJhY3Rpb24gPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBoYWRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNHcmFuZGZh
dGhlcmVkID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNHcmFuZGZhdGhlcmVkS2V5LmdldCgpKSk7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiBpc1ByZXZhbGVudCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzUHJl
dmFsZW50S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc1ZlcnlQcmV2YWxlbnQg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1ZlcnlQcmV2YWxlbnRLZXkuZ2V0KCkpKTsKLSAgICAgICAg
V0tVSW50NjRSZWYgZGF0YVJlY29yZHNSZW1vdmVkID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkYXRhUmVj
b3Jkc1JlbW92ZWRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKGhvc3ROYW1lLCB0b3BGcmFtZURvbWFp
bjEsIHRvcEZyYW1lRG9tYWluMiwgV0tEb3VibGVHZXRWYWx1ZShsYXN0U2VlbiksIFdLQm9vbGVh
bkdldFZhbHVlKGhhZFVzZXJJbnRlcmFjdGlvbiksIFdLRG91YmxlR2V0VmFsdWUobW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvbiksIFdLQm9vbGVhbkdldFZhbHVlKGlzR3JhbmRmYXRoZXJlZCksIFdL
Qm9vbGVhbkdldFZhbHVlKGlzUHJldmFsZW50KSwgV0tCb29sZWFuR2V0VmFsdWUoaXNWZXJ5UHJl
dmFsZW50KSwgV0tVSW50NjRHZXRWYWx1ZShkYXRhUmVjb3Jkc1JlbW92ZWQpKTsKKyAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZURvbWFpbjEgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZURvbWFpbjEiKTsKKyAgICAgICAg
YXV0byB0b3BGcmFtZURvbWFpbjIgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJUb3BGcmFtZURvbWFpbjIiKTsKKyAgICAgICAgYXV0byBsYXN0U2VlbiA9IGRvdWJsZVZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkxhc3RTZWVuIik7CisgICAgICAgIGF1dG8gaGFkVXNl
ckludGVyYWN0aW9uID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhhZFVz
ZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24g
PSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJNb3N0UmVjZW50VXNlckludGVy
YWN0aW9uIik7CisgICAgICAgIGF1dG8gaXNHcmFuZGZhdGhlcmVkID0gYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIklzR3JhbmRmYXRoZXJlZCIpOworICAgICAgICBhdXRvIGlz
UHJldmFsZW50ID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIklzUHJldmFs
ZW50Iik7CisgICAgICAgIGF1dG8gaXNWZXJ5UHJldmFsZW50ID0gYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIklzVmVyeVByZXZhbGVudCIpOworICAgICAgICBhdXRvIGRhdGFS
ZWNvcmRzUmVtb3ZlZCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkRhdGFS
ZWNvcmRzUmVtb3ZlZCIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKGhvc3ROYW1lLCB0b3BGcmFtZURvbWFpbjEsIHRvcEZy
YW1lRG9tYWluMiwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50
LCBkYXRhUmVjb3Jkc1JlbW92ZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlz
dGljc0V4cGlyZWRTdGF0aXN0aWMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rp
b25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0
TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1l
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGFkVXNlckludGVyYWN0aW9u
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVy
YWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29r
aWVEYXRhUmVtb3ZhbCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzUHJl
dmFsZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNQcmV2
YWxlbnQiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBoYWRVc2VySW50
ZXJhY3Rpb24gPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBoYWRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkp
KTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJl
bW92YWwgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc1ByZXZhbGVudCA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGlzUHJldmFsZW50S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljKGhvc3RO
YW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZShoYWRVc2VySW50ZXJhY3Rpb24pLCBXS0Jvb2xlYW5HZXRW
YWx1ZShpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKSwgV0tCb29sZWFuR2V0
VmFsdWUoaXNQcmV2YWxlbnQpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAg
YXV0byBoYWRVc2VySW50ZXJhY3Rpb24gPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiSGFkVXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gaXNTY2hlZHVsZWRGb3JB
bGxCdXRDb29raWVEYXRhUmVtb3ZhbCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIik7CisgICAgICAgIGF1
dG8gaXNQcmV2YWxlbnQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNQ
cmV2YWxlbnQiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NFeHBpcmVkU3RhdGlzdGljKGhvc3ROYW1lLCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0
YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFs
dWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgV0tC
b29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1l
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAg
ICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1
ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAg
ICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLQot
ICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVL
ZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgV0tCb29sZWFu
R2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0
byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1ZSIpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC05NDQsNTEgKzcwNiwzNSBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlz
dGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnMiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0
VHlwZUlEKCkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBob3VycyA9IHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VI
b3VycyhXS1VJbnQ2NEdldFZhbHVlKGhvdXJzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlm
aWVkU2luY2VIb3Vycyh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRE
b3duZ3JhZGVSZWZlcnJlcihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKFdLQm9v
bGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUoYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTZXRUb1Nh
bWVTaXRlU3RyaWN0Q29va2llcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhv
c3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0
Q29va2llcyhob3N0TmFtZSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXMoc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1NldEZpcnN0UGFydHlIb3N0Q05B
TUVEb21haW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFy
eVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZpcnN0UGFy
dHlVUkxTdHJpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJG
aXJzdFBhcnR5VVJMIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY25hbWVV
UkxTdHJpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDTkFN
RSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGZpcnN0UGFydHlVUkxTdHJpbmcg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGZpcnN0UGFydHlVUkxTdHJpbmdLZXkuZ2V0KCkpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNuYW1lVVJM
U3RyaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZmly
c3RQYXJ0eVVSTFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkZp
cnN0UGFydHlVUkwiKTsKKyAgICAgICAgYXV0byBjbmFtZVVSTFN0cmluZyA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNOQU1FIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbihmaXJz
dFBhcnR5VVJMU3RyaW5nLCBjbmFtZVVSTFN0cmluZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0
YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4iKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S1N0cmluZ1JlZiBjbmFtZVVSTFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluKGNuYW1lVVJMU3RyaW5nKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW4o
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTAxMiw4ICs3NTgsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0QXBwbGljYXRpb25NYW5pZmVz
dCIpKSB7CiAjaWZkZWYgX19CTE9DS1NfXwogICAgICAgICBXS1BhZ2VHZXRBcHBsaWNhdGlvbk1h
bmlmZXN0X2IoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgXnsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRpZEdldEFwcGxpY2F0aW9u
TWFuaWZlc3QiKSk7Ci0gICAgICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJEaWRHZXRB
cHBsaWNhdGlvbk1hbmlmZXN0Iik7CiAgICAgICAgIH0pOwogI2Vsc2UKICAgICAgICAgLy8gRklY
TUU6IEFkZCBBUEkgZm9yIGxvYWRpbmcgdGhlIG1hbmlmZXN0IG9uIG5vbi1fX0JMT0NLU19fIHBv
cnRzLgpAQCAtMTAyMywxNiArNzY4LDEwIEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2Vp
dmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAg
ICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0
PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0K
LSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1l
S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUsIFdLQm9vbGVh
bkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1
dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NIYXNIYWRV
c2VySW50ZXJhY3Rpb24oaG9zdE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMTA0Myw4ICs3ODIsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBcHBCb3VuZERv
bWFpbnMiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
QXJyYXlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQXJyYXlSZWYgb3JpZ2luVVJMcyA9IHN0YXRp
Y19jYXN0PFdLQXJyYXlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldEFwcEJvdW5kRG9tYWlucyhvcmlnaW5VUkxzKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFwcEJvdW5kRG9tYWlucyhzdGF0aWNfY2FzdDxX
S0FycmF5UmVmPihtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MDU1LDk0ICs3OTMsNzAgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6
ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKIHsKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkluaXRpYWxpemF0aW9uIikp
IHsKICAgICAgICAgYXV0byBzZXR0aW5ncyA9IGNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnko
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc3VtZVRlc3RpbmdLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXN1bWVUZXN0aW5nIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3VtZVRlc3RpbmdWYWx1ZSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fc3RhcnRlZFRlc3RpbmcpKTsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShzZXR0aW5ncy5nZXQoKSwgcmVzdW1lVGVzdGluZ0tleS5nZXQoKSwgcmVz
dW1lVGVzdGluZ1ZhbHVlLmdldCgpKTsKKyAgICAgICAgc2V0VmFsdWUoc2V0dGluZ3MsICJSZXN1
bWVUZXN0aW5nIiwgbV9zdGFydGVkVGVzdGluZyk7CiAgICAgICAgIHJldHVybiBzZXR0aW5nczsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldER1bXBQaXhlbHMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgbV9kdW1wUGl4ZWxzID0g
V0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkp
OworICAgICAgICBtX2R1bXBQaXhlbHMgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXREdW1wUGl4ZWxzIikpCiAgICAgICAgIHJldHVybiBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBQaXhlbHMpKTsKIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0V2hhdFRvRHVtcCIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIG1fd2hhdFRvRHVtcCA9IHN0YXRpY19jYXN0PFdoYXRUb0R1bXA+KFdL
VUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSkpOwor
ICAgICAgICBtX3doYXRUb0R1bXAgPSBzdGF0aWNfY2FzdDxXaGF0VG9EdW1wPih1aW50NjRWYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRXaGF0VG9EdW1w
IikpCiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHN0YXRpY19jYXN0PHVp
bnQ2NF90PihtX3doYXRUb0R1bXApKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFdhaXRVbnRpbERvbmUiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICAgICAgc2V0V2FpdFVudGlsRG9uZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihXS0Jvb2xl
YW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpKTsKKyAg
ICAgICAgc2V0V2FpdFVudGlsRG9uZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0V2FpdFVudGlsRG9uZSIpKQogICAgICAgICByZXR1cm4g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV93YWl0VW50aWxEb25lKSk7CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldER1bXBGcmFtZUxvYWRD
YWxsYmFja3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgbV9kdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiR2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKQogICAgICAgICByZXR1cm4gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKSk7CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldENhbk9wZW5X
aW5kb3dzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1fY2FuT3BlbldpbmRvd3MgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBtX2Nhbk9wZW5XaW5kb3dzID0gYm9vbGVh
blZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRXaW5k
b3dJc0tleSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNLZXlWYWx1ZSA9
IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+c2V0V2luZG93SXNLZXkoV0tCb29s
ZWFuR2V0VmFsdWUoaXNLZXlWYWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+c2V0V2luZG93SXNLZXkoYm9vbGVhblZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0Vmlld1NpemUiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3aWR0aEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIndpZHRoIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gaGVpZ2h0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVp
Z2h0IikpOwotCi0gICAgICAgIFdLRG91YmxlUmVmIHdpZHRoV0sgPSBzdGF0aWNfY2FzdDxXS0Rv
dWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHdpZHRoS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGhlaWdodFdLID0gc3RhdGlj
X2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBoZWlnaHRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cmVzaXplVG8oV0tEb3VibGVHZXRWYWx1ZSh3aWR0
aFdLKSwgV0tEb3VibGVHZXRWYWx1ZShoZWlnaHRXSykpOworICAgICAgICBhdXRvIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1
dG8gd2lkdGggPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJ3aWR0aCIpOwor
ICAgICAgICBhdXRvIGhlaWdodCA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
ImhlaWdodCIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cmVzaXplVG8od2lkdGgsIGhlaWdodCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIpKSB7Ci0gICAgICAgIGJvb2wgaXNBY3RpdmUg
PSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZl
KCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaXNBY3RpdmUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Cisg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc0dlb2xv
Y2F0aW9uQ2xpZW50QWN0aXZlIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0
aXZlKCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0Q2FjaGVNb2RlbCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIHVpbnQ2NF90IG1vZGVs
ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkp
KTsKKyAgICAgICAgdWludDY0X3QgbW9kZWwgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keSk7CiAg
ICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZVNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVz
dGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud2Vic2l0ZURhdGFTdG9yZSgpLCBtb2Rl
bCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNXb3JrUXVldWVFbXB0eSIpKSB7Ci0g
ICAgICAgIGJvb2wgaXNFbXB0eSA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVl
dWVNYW5hZ2VyKCkuaXNXb3JrUXVldWVFbXB0eSgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5
cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzRW1wdHkpKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJJc1dvcmtRdWV1ZUVtcHR5IikpCisgICAgICAgIHJldHVybiBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1
ZXVlTWFuYWdlcigpLmlzV29ya1F1ZXVlRW1wdHkoKSkpOwogCi0gICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRp
b24oKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVj
dEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFyRGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpIHsKICAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmNsZWFyRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxOYXZpZ2F0aW9uKCk7CkBAIC0xMTUwLDQwICs4NjQsMzUgQEAgV0tSZXRhaW5QdHI8V0tUeXBl
UmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21Jbmpl
Y3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQiKSkgewotI2lmIFBMQVRGT1JNKE1B
QykgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoSXNTZWN1cmVFdmVudElucHV0
RW5hYmxlZCgpKSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoSXNTZWN1cmVFdmVudElucHV0RW5hYmxlZCgpKSk7CiAjZWxzZQotICAg
ICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKGZhbHNlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShm
YWxzZSkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRDdXN0b21Vc2Vy
QWdlbnQiKSkgewotICAgICAgICBXS1N0cmluZ1JlZiB1c2VyQWdlbnQgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdl
bnQoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdXNl
ckFnZW50KTsKKyAgICAgICAgV0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50KFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGUiKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGUoV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxT
ZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihX
S0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRXBo
ZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZFN3YXBUb0RlZmF1bHRT
ZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oV0tC
b29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZFN3YXBUb0RlZmF1
bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCIp
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
VUludDY0UmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNvdW50KSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQiKSkKKyAg
ICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkpKTsKICAgICAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRlbGV0ZUFsbEluZGV4
ZWREYXRhYmFzZXMiKSkgewogICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVBbGxJbmRl
eGVkRGF0YWJhc2VzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53ZWJzaXRlRGF0YVN0b3Jl
KCksIG51bGxwdHIsIHsgfSk7CkBAIC0xMTkxLDE3ICs5MDAsMTAgQEAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21J
bmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIkFkZE1vY2tNZWRpYURldmljZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHBlcnNpc3RlbnRJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlBlcnNpc3RlbnRJRCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGFiZWwi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0eXBlS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVHlwZSIpKTsKLQotICAgICAgICBhdXRvIHBl
cnNpc3RlbnRJRCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGVyc2lzdGVudElES2V5LmdldCgpKSk7Ci0g
ICAgICAgIGF1dG8gbGFiZWwgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxhYmVsS2V5LmdldCgpKSk7Ci0g
ICAgICAgIGF1dG8gdHlwZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdHlwZUtleS5nZXQoKSkpOwotCisg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBwZXJzaXN0ZW50SUQgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJQZXJzaXN0ZW50SUQiKTsKKyAgICAgICAgYXV0byBsYWJlbCA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkxhYmVsIik7CisgICAgICAgIGF1dG8g
dHlwZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlR5cGUiKTsKICAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmFkZE1vY2tNZWRpYURldmljZShwZXJzaXN0
ZW50SUQsIGxhYmVsLCB0eXBlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAt
MTIxMiw5ICs5MTQsNyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpk
aWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVtb3ZlTW9ja01l
ZGlhRGV2aWNlIikpIHsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGVyc2lzdGVudElkID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkucmVtb3ZlTW9ja01lZGlhRGV2aWNlKHBlcnNpc3RlbnRJZCk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZW1vdmVNb2NrTWVkaWFEZXZpY2Uoc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CkBAIC0xMjI0LDE0MiArOTI0LDg3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9j
YXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRN
b2NrQ2FtZXJhT3JpZW50YXRpb24iKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uKFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uKHVpbnQ2NFZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNNb2NrUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlckVuYWJsZWQiKSkgewotICAgICAgICBib29sIGlzTW9ja1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXJFbmFibGVkID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkKCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShpc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCkp
OwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIklzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkIikpCisgICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQoKSkpOwogICAgIAotICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSGFzQXBwQm91bmRT
ZXNzaW9uIikpIHsKLSAgICAgICAgYm9vbCBoYXNBcHBCb3VuZFNlc3Npb24gPSBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuaGFzQXBwQm91bmRTZXNzaW9uKCk7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNBcHBCb3VuZFNlc3Npb24pKTsKLSAgICB9CisgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJIYXNBcHBCb3Vu
ZFNlc3Npb24iKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNBcHBCb3VuZFNlc3Npb24oKSkpOwogCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiQ29ubmVjdE1vY2tHYW1lcGFkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLQotICAgICAgICB1aW50NjRf
dCBpbmRleCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3Nh
Z2VCb2R5KSk7Ci0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6Y29ubmVjdE1vY2tHYW1lcGFk
KGluZGV4KTsKLSAgICAgICAgCisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6Y29ubmVjdE1v
Y2tHYW1lcGFkKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiRGlzY29ubmVjdE1vY2tHYW1lcGFkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLQotICAgICAgICB1
aW50NjRfdCBpbmRleCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6ZGlzY29ubmVjdE1v
Y2tHYW1lcGFkKGluZGV4KTsKLQorICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmRpc2Nvbm5l
Y3RNb2NrR2FtZXBhZCh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldE1vY2tHYW1lcGFkRGV0YWlscyIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0g
ICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGdhbWVwYWRJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkdhbWVwYWRJRCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1hcHBpbmdL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNYXBwaW5nIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXhpc0NvdW50S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXhpc0NvdW50IikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uQ291bnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25Db3VudCIpKTsKLQotICAgICAgICBXS1VJbnQ2NFJl
ZiBnYW1lcGFkSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGdhbWVwYWRJbmRleEtleS5nZXQoKSkp
OwotICAgICAgICBXS1N0cmluZ1JlZiBnYW1lcGFkSUQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGdhbWVw
YWRJREtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBtYXBwaW5nID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBtYXBwaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGF4aXNDb3Vu
dCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgYXhpc0NvdW50S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUlu
dDY0UmVmIGJ1dHRvbkNvdW50ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25Db3VudEtleS5nZXQo
KSkpOwotCi0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWREZXRhaWxz
KFdLVUludDY0R2V0VmFsdWUoZ2FtZXBhZEluZGV4KSwgdG9XVEZTdHJpbmcoZ2FtZXBhZElEKSwg
dG9XVEZTdHJpbmcobWFwcGluZyksIFdLVUludDY0R2V0VmFsdWUoYXhpc0NvdW50KSwgV0tVSW50
NjRHZXRWYWx1ZShidXR0b25Db3VudCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZ2FtZXBh
ZEluZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiR2FtZXBhZEluZGV4
Iik7CisgICAgICAgIGF1dG8gZ2FtZXBhZElEID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiR2FtZXBhZElEIik7CisgICAgICAgIGF1dG8gbWFwcGluZyA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk1hcHBpbmciKTsKKyAgICAgICAgYXV0byBheGlzQ291
bnQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJBeGlzQ291bnQiKTsKKyAg
ICAgICAgYXV0byBidXR0b25Db3VudCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkJ1dHRvbkNvdW50Iik7CisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dh
bWVwYWREZXRhaWxzKGdhbWVwYWRJbmRleCwgdG9XVEZTdHJpbmcoZ2FtZXBhZElEKSwgdG9XVEZT
dHJpbmcobWFwcGluZyksIGF4aXNDb3VudCwgYnV0dG9uQ291bnQpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0K
LSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19j
YXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gZ2FtZXBhZEluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gYXhpc0luZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQXhpc0luZGV4IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLQot
ICAgICAgICBXS1VJbnQ2NFJlZiBnYW1lcGFkSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGdhbWVw
YWRJbmRleEtleS5nZXQoKSkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBheGlzSW5kZXggPSBzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGF4aXNJbmRleEtleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJsZVJlZiB2
YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXZWJD
b3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKFdLVUludDY0R2V0VmFsdWUo
Z2FtZXBhZEluZGV4KSwgV0tVSW50NjRHZXRWYWx1ZShheGlzSW5kZXgpLCBXS0RvdWJsZUdldFZh
bHVlKHZhbHVlKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGdhbWVwYWRJbmRleCA9IHVp
bnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJbmRleCIpOworICAgICAg
ICBhdXRvIGF4aXNJbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkF4
aXNJbmRleCIpOworICAgICAgICBhdXRvIHZhbHVlID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2Nr
R2FtZXBhZEF4aXNWYWx1ZShnYW1lcGFkSW5kZXgsIGF4aXNJbmRleCwgdmFsdWUpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBidXR0b25JbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkJ1dHRvbkluZGV4IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1VJbnQ2NFJlZiBnYW1lcGFkSW5kZXggPSBzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGdhbWVwYWRJbmRleEtleS5nZXQoKSkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBi
dXR0b25JbmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYnV0dG9uSW5kZXhLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgp
KSk7Ci0KLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZEJ1dHRvblZh
bHVlKFdLVUludDY0R2V0VmFsdWUoZ2FtZXBhZEluZGV4KSwgV0tVSW50NjRHZXRWYWx1ZShidXR0
b25JbmRleCksIFdLRG91YmxlR2V0VmFsdWUodmFsdWUpKTsKLQorICAgICAgICBhdXRvIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAg
IGF1dG8gZ2FtZXBhZEluZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
R2FtZXBhZEluZGV4Iik7CisgICAgICAgIGF1dG8gYnV0dG9uSW5kZXggPSB1aW50NjRWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJCdXR0b25JbmRleCIpOworICAgICAgICBhdXRvIHZhbHVl
ID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAg
V2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlKGdhbWVwYWRJbmRl
eCwgYnV0dG9uSW5kZXgsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9y
aWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgb3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG9yaWdpbktleS5nZXQoKSkpOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwYXJlbnRPcmln
aW5LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBvcmlnaW5X
SyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIm9yaWdpbiIpOworICAgICAg
ICBhdXRvIHBhcmVudE9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAicGFyZW50T3JpZ2luIik7CiAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4o
b3JpZ2luV0ssIHBhcmVudE9yaWdpbldLKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRS
ZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY291bnQpKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJJc0RvaW5nTWVkaWFDYXB0dXJlIikpIHsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuaXNEb2luZ01lZGlhQ2FwdHVyZSgpKSk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNvdW50KSk7
CiAgICAgfQorCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJJc0RvaW5nTWVkaWFDYXB0dXJlIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNEb2luZ01lZGlhQ2FwdHVy
ZSgpKSk7CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgZG9tYWluID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VC
b2R5KTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYXJTdGF0aXN0
aWNzRGF0YUZvckRvbWFpbihkb21haW4pOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuY2xlYXJTdGF0aXN0aWNzRGF0YUZvckRvbWFpbihzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRvZXNTdGF0aXN0aWNzRG9tYWluSURF
eGlzdEluRGF0YWJhc2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZG9tYWluSURLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb21haW5JRCIpKTsKLSAg
ICAgICAgV0tVSW50NjRSZWYgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGRvbWFpbklES2V5
LmdldCgpKSk7Ci0gICAgICAgIGJvb2wgZG9tYWluSURFeGlzdHMgPSBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZShXS1VJbnQ2
NEdldFZhbHVlKGRvbWFpbklEKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVz
dWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZG9tYWluSURFeGlzdHMpKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGRvbWFpbklEID0gdWludDY0
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRG9tYWluSUQiKTsKKyAgICAgICAgYm9vbCBk
b21haW5JREV4aXN0cyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5kb2VzU3RhdGlzdGlj
c0RvbWFpbklERXhpc3RJbkRhdGFiYXNlKGRvbWFpbklEKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGRvbWFpbklERXhpc3RzKSk7CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzRW5h
YmxlZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tC
b29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NFbmFibGVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVl
KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRW5h
YmxlZChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKSkgewotICAgICAgICBib29sIGlzRXBoZW1lcmFs
ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0VwaGVtZXJhbCgpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKGlzRXBoZW1lcmFsKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
aXNTdGF0aXN0aWNzRXBoZW1lcmFsKCkpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJkdW1wUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyIpKSB7CkBAIC0xMzY4LDIyNCArMTAxMywxMjggQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3Rl
ZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLQotICAg
ICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGlzUHJldmFsZW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGJvb2wgaXNQ
cmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2Uoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NWZXJ5
UHJldmFsZW50UmVzb3VyY2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJp
bmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBib29sIGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlz
U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2
YWxlbnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYm9vbCBpc1ByZXZhbGVu
dCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50
UmVzb3VyY2Uoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7CiAgICAgfQogICAgIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAg
ICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0
PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3VicmVzb3VyY2VIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3VicmVzb3VyY2VIb3N0IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdG9wRnJhbWVIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYg
c3VicmVzb3VyY2VIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJyZXNvdXJjZUhvc3RLZXkuZ2V0
KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVIb3N0ID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCB0b3BGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
YXV0byBzdWJyZXNvdXJjZUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJTdWJyZXNvdXJjZUhvc3QiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZUhvc3QgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZUhvc3QiKTsKICAgICAgICAgYm9v
bCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuaXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihzdWJyZXNvdXJj
ZUhvc3QsIHRvcEZyYW1lSG9zdCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVz
dWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVu
ZGVyKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIpKTsKICAgICB9CiAg
ICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJ
c1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
c3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJGcmFtZUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdWJGcmFtZUhvc3QiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3QiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmlu
Z1JlZiBzdWJGcmFtZUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1YkZyYW1lSG9zdEtleS5nZXQo
KSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHRvcEZyYW1lSG9zdEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBzdWJG
cmFtZUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTdWJGcmFtZUhv
c3QiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJUb3BGcmFtZUhvc3QiKTsKICAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRB
c1N1YkZyYW1lVW5kZXIgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNz
UmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihzdWJGcmFtZUhvc3QsIHRvcEZyYW1lSG9zdCk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKSk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRB
c1N1YkZyYW1lVW5kZXIpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0UmVkaXJl
Y3RlZEZyb21LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0
UmVkaXJlY3RlZEZyb20iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0
UmVkaXJlY3RlZFRvS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdFJlZGlyZWN0ZWRUbyIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3RS
ZWRpcmVjdGVkRnJvbSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdFJlZGlyZWN0ZWRGcm9tS2V5Lmdl
dCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3RSZWRpcmVjdGVkVG8gPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGhvc3RSZWRpcmVjdGVkVG9LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBob3N0UmVkaXJlY3RlZEZyb20gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJIb3N0UmVkaXJlY3RlZEZyb20iKTsKKyAgICAgICAgYXV0byBob3N0UmVk
aXJlY3RlZFRvID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdFJlZGly
ZWN0ZWRUbyIpOwogICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyA9IFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvKGhvc3RSZWRpcmVjdGVkRnJvbSwgaG9zdFJlZGlyZWN0ZWRUbyk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNS
ZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8pKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaGFzSGFkVXNlckludGVy
YWN0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0hhc0hhZFVz
ZXJJbnRlcmFjdGlvbihob3N0TmFtZSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4g
cmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzSGFkVXNlckludGVyYWN0aW9uKSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0
aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbihzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAgICByZXR1cm4gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzSGFkVXNlckludGVyYWN0aW9uKSk7CiAgICAgfQogICAg
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNT
dGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGF1dG8gc3ViSG9zdEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Ykhvc3QiKSk7Ci0g
ICAgICAgIGF1dG8gdG9wSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlRvcEhvc3QiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBzdWJIb3N0
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJIb3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIHRvcEhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEhvc3RLZXkuZ2V0KCkpKTsKLQorICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gc3ViSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIlN1Ykhvc3QiKTsKKyAgICAgICAgYXV0byB0b3BIb3N0ID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wSG9zdCIpOwogICAgICAgICBib29sIHN0YXRpc3Rp
Y0luRGF0YWJhc2VPbmNlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGlj
c09ubHlJbkRhdGFiYXNlT25jZShzdWJIb3N0LCB0b3BIb3N0KTsKICAgICAgICAgcmV0dXJuIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKHN0YXRpc3RpY0luRGF0YWJhc2VPbmNlKSk7CiAgICAgfQog
ICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0g
ICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1
ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwot
ICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0gICAgICAgIAotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoaG9zdE5hbWUs
IFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0
TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
VmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NHcmFuZGZhdGhlcmVkKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIklzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAg
ICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBib29sIGlzR3JhbmRmYXRoZXJlZCA9IFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKGhvc3ROYW1lKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShpc0dyYW5kZmF0aGVyZWQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNT
dGF0aXN0aWNzR3JhbmRmYXRoZXJlZChzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhlcmVkKSk7CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRVc2VJVFBEYXRhYmFzZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLQm9vbGVhblJlZiB2
YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlSVRQRGF0YWJhc2UoV0tCb29sZWFuR2V0
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVz
ZUlUUERhdGFiYXNlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0TmFtZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdE5hbWUiKSk7Ci0gICAg
ICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9z
dE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0TmFtZUtleS5nZXQoKSkpOwotCisgICAgICAg
IGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVIb3N0TmFtZSA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lSG9zdE5hbWUiKTsKICAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW4oaG9zdE5hbWUsIHRvcEZyYW1lSG9zdE5hbWUpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0TmFtZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdE5hbWUiKSk7
Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVIb3N0
TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0TmFtZUtleS5nZXQoKSkpOwotICAg
ICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFs
dWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZUhv
c3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVIb3N0
TmFtZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihob3N0TmFtZSwgdG9wRnJhbWVIb3N0TmFt
ZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0VG8iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAg
IFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0Rp
Y3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZVJl
ZGlyZWN0ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhv
c3ROYW1lUmVkaXJlY3RlZFRvIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9z
dE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
U3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFt
ZVJlZGlyZWN0ZWRUb0tleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5h
bWUiKTsKKyAgICAgICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9IHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZFRvIik7CiAgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdFRvKGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZEZy
b20iKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWVSZWRpcmVjdGVkRnJvbSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJv
bUtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1l
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAg
ICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpOwogICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RG
cm9tKGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lUmVkaXJlY3RlZFRvS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKSk7Ci0g
ICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
aG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVj
dGVkVG8gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lUmVkaXJlY3RlZFRvS2V5LmdldCgpKSk7
Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25h
cnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIGhvc3RO
YW1lUmVkaXJlY3RlZFRvID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9z
dE5hbWVSZWRpcmVjdGVkVG8iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oaG9zdE5hbWUsIGhvc3ROYW1l
UmVkaXJlY3RlZFRvKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlz
dGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
aG9zdE5hbWVSZWRpcmVjdGVkRnJvbUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKSk7Ci0gICAgICAgIAotICAgICAgICBX
S1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbUtleS5nZXQoKSkpOwotICAgICAgICAKKyAg
ICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2Fn
ZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRG
cm9tID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVj
dGVkRnJvbSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0
ZWRGcm9tKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0Ny
b3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAg
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYXV0byBmcm9tSG9z
dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZyb21Ib3N0Iikp
OwotICAgICAgICBhdXRvIHRvSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRvSG9zdCIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBmcm9tSG9zdCA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgZnJvbUhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
dG9Ib3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b0hvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBmcm9tSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkZyb21Ib3N0Iik7CisgICAgICAgIGF1dG8gdG9Ib3N0ID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9Ib3N0Iik7CiAgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3Jh
dGlvbihmcm9tSG9zdCwgdG9Ib3N0KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRT
dGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Rp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oV0tEb3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbihkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAgICAgCkBAIC0xNjAwLDk3ICsxMTQ5LDY5IEBAIFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VG
cm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0SXNSdW5uaW5nVGVzdCIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NJc1J1bm5pbmdUZXN0KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdChib29sZWFu
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3Rh
dGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29y
ZHNSZW1vdmFsKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMg
PSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbChXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRh
UmVjb3Jkc1JlbW92YWwoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJs
ZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NHcmFu
ZGZhdGhlcmluZ1RpbWUoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyhXS1VJbnQ2NEdldFZhbHVlKGVudHJpZXMpKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0
aWNzRW50cmllcyh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRQcnVuZUVudHJpZXNEb3duVG8iKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQ
cnVuZUVudHJpZXNEb3duVG8oV0tVSW50NjRHZXRWYWx1ZShlbnRyaWVzKSk7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRv
KHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmNsdWRl
SHR0cE9ubHlDb29raWVzIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiBpbmNsdWRlSHR0cE9ubHlDb29raWVzID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVL
ZXkuZ2V0KCkpKTsKLSAgICAgICAgCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZh
bHVlKGluY2x1ZGVIdHRwT25seUNvb2tpZXMpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhv
c3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsK
KyAgICAgICAgYXV0byBpbmNsdWRlSHR0cE9ubHlDb29raWVzID0gYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdCho
b3N0TmFtZSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcyk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiSXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAg
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5KTsKICAgICAgICAgYm9vbCBoYXNMb2NhbFN0b3JhZ2UgPSBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlKGhvc3ROYW1lKTsKICAgICAg
ICAgYXV0byByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNMb2NhbFN0b3JhZ2Up
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNh
cCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3Vi
bGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2Fz
dDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwKFdLRG91YmxlR2V0VmFsdWUoc2Vj
b25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c0NhY2hlTWF4QWdlQ2FwKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiSGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vzc2lvbiIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGJvb2wgaGFzSXNvbGF0ZWRTZXNzaW9uID0gVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24oaG9z
dE5hbWUpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhh
c0lzb2xhdGVkU2Vzc2lvbikpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYXJET01D
YWNoZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tT
dHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbiA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KKyAgICAgICAgYXV0byBvcmlnaW4gPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5jbGVhckRPTUNhY2hlKG9yaWdpbik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KQEAgLTE3MDEsMzUgKzEyMjIsMjQgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkhh
c0RPTUNhY2hlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQorICAgICAgICBhdXRvIG9yaWdp
biA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYm9vbCBoYXNET01DYWNoZSA9
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNET01DYWNoZShvcmlnaW4pOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGhhc0RPTUNhY2hlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNET01DYWNoZSkpOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRE9NQ2FjaGVTaXplIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQorICAgICAgICBhdXRvIG9yaWdpbiA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYXV0byBkb21DYWNoZVNpemUgPSBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuZG9tQ2FjaGVTaXplKG9yaWdpbik7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkb21DYWNoZVNp
emUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tV
SW50NjRDcmVhdGUoZG9tQ2FjaGVTaXplKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3Jl
YXNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIGF1dG8gY2FuSW5jcmVhc2UgPSBXS0Jvb2xlYW5H
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNl
KGNhbkluY3JlYXNlKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFs
bG93U3RvcmFnZVF1b3RhSW5jcmVhc2UoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW5qZWN0VXNlclNjcmlwdCIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmluamVjdFVz
ZXJTY3JpcHQoc2NyaXB0KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlu
amVjdFVzZXJTY3JpcHQoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCkBAIC0xNzM5LDE1ICsxMjQ5LDEyIEBAIFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9t
SW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0IikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTZXJ2
aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNlcnZpY2VXb3JrZXJG
ZXRjaFRpbWVvdXRGb3JUZXN0aW5nKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgICAgICBhdXRvIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KSk7CisgICAgICAgIGF1dG8gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IGJv
b2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFdLQ29udGV4dFNldFVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQo
KSwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KQEAgLTE3NjUsNjAgKzEyNzIsMzUgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3Rl
ZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIkFkZFRlc3RLZXlUb0tleWNoYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiB0ZXN0S2V5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBw
cml2YXRlS2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUHJp
dmF0ZUtleSIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcHJpdmF0ZUtleVdLID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdEtleURpY3Rpb25h
cnksIHByaXZhdGVLZXlLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQXR0ckxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhdHRyTGFiZWxXSyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3RLZXlEaWN0
aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gYXBwbGljYXRpb25UYWdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJBcHBsaWNhdGlvblRhZyIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXBwbGlj
YXRpb25UYWdXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KHRlc3RLZXlEaWN0aW9uYXJ5LCBhcHBsaWNhdGlvblRhZ0tleS5nZXQoKSkpOwotCisg
ICAgICAgIGF1dG8gdGVzdEtleURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJv
ZHkpOworICAgICAgICBhdXRvIHByaXZhdGVLZXlXSyA9IHN0cmluZ1ZhbHVlKHRlc3RLZXlEaWN0
aW9uYXJ5LCAiUHJpdmF0ZUtleSIpOworICAgICAgICBhdXRvIGF0dHJMYWJlbFdLID0gc3RyaW5n
VmFsdWUodGVzdEtleURpY3Rpb25hcnksICJBdHRyTGFiZWwiKTsKKyAgICAgICAgYXV0byBhcHBs
aWNhdGlvblRhZ1dLID0gc3RyaW5nVmFsdWUodGVzdEtleURpY3Rpb25hcnksICJBcHBsaWNhdGlv
blRhZyIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuYWRkVGVzdEtleVRv
S2V5Y2hhaW4odG9XVEZTdHJpbmcocHJpdmF0ZUtleVdLKSwgdG9XVEZTdHJpbmcoYXR0ckxhYmVs
V0spLCB0b1dURlN0cmluZyhhcHBsaWNhdGlvblRhZ1dLKSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiQ2xlYW5VcEtleWNoYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGlj
dGlvbmFyeVJlZiB0ZXN0RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
bWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdHRyTGFi
ZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwi
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGF0dHJMYWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERpY3Rpb25hcnksIGF0dHJMYWJl
bEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhcHBsaWNh
dGlvbkxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBw
bGljYXRpb25MYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXBwbGljYXRpb25MYWJlbFdL
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVz
dERpY3Rpb25hcnksIGFwcGxpY2F0aW9uTGFiZWxLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRv
IHRlc3REaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
YXV0byBhdHRyTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXR0ckxhYmVs
Iik7CisgICAgICAgIGF1dG8gYXBwbGljYXRpb25MYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERp
Y3Rpb25hcnksICJBcHBsaWNhdGlvbkxhYmVsIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5jbGVhblVwS2V5Y2hhaW4odG9XVEZTdHJpbmcoYXR0ckxhYmVsV0spLCBhcHBs
aWNhdGlvbkxhYmVsV0sgPyB0b1dURlN0cmluZyhhcHBsaWNhdGlvbkxhYmVsV0spIDogU3RyaW5n
KCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIktleUV4aXN0c0luS2V5Y2hhaW4iKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIHRlc3REaWN0aW9uYXJ5ID0g
c3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJMYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXR0
ckxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleSh0ZXN0RGljdGlvbmFyeSwgYXR0ckxhYmVsS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFwcGxpY2F0aW9uTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpOwotICAgICAgICBX
S1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0RGljdGlvbmFyeSwgYXBwbGljYXRpb25MYWJl
bEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gdGVzdERpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5
VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGF0dHJMYWJlbFdLID0gc3RyaW5nVmFs
dWUodGVzdERpY3Rpb25hcnksICJBdHRyTGFiZWwiKTsKKyAgICAgICAgYXV0byBhcHBsaWNhdGlv
bkxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0RGljdGlvbmFyeSwgIkFwcGxpY2F0aW9uTGFiZWwi
KTsKICAgICAgICAgYm9vbCBrZXlFeGlzdHNJbktleWNoYWluID0gVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmtleUV4aXN0c0luS2V5Y2hhaW4odG9XVEZTdHJpbmcoYXR0ckxhYmVsV0spLCB0
b1dURlN0cmluZyhhcHBsaWNhdGlvbkxhYmVsV0spKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShrZXlFeGlzdHNJbktleWNo
YWluKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShrZXlFeGlzdHNJbktleWNoYWluKSk7CiAgICAgfQogCi0gICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXJ2ZXJUcnVzdEV2YWx1
YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCgpKSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0Nv
dW50IikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQo
KSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5IikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseShXS0Jvb2xlYW5HZXRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hv
dWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseShib29sZWFuVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0xODQ4LDE2
ICsxMzMwLDEzIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJl
Y2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlv
bk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25PdmVy
cmlkZVRpbWVyRm9yVGVzdGluZyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVS
TEZvclRlc3RpbmciKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLVVJMR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1VSTFJlZiB1cmwgPSBzdGF0aWNfY2Fz
dDxXS1VSTFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcodXJsKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlv
bkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKHN0YXRpY19jYXN0PFdLVVJMUmVmPihtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTE5MDIsMTcgKzEzODEs
MTAgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6cnVuVUlTaWRlU2NyaXB0KFdLU3RyaW5nUmVmIHNj
cmlwdCwgdW5zaWduZWQgc2NyaXB0Q2FsbGJhY2sKIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6dWlT
Y3JpcHREaWRDb21wbGV0ZShjb25zdCBTdHJpbmcmIHJlc3VsdCwgdW5zaWduZWQgc2NyaXB0Q2Fs
bGJhY2tJRCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsVUlTaWRlU2NyaXB0Q2Fs
bGJhY2siKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUmVzdWx0IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBj
YWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bGJhY2tJRCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gY2FsbGJhY2tJRFZhbHVl
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzY3JpcHRDYWxsYmFja0lEKSk7Ci0KLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCByZXN1bHRLZXkuZ2V0KCksIHRvV0so
cmVzdWx0KS5nZXQoKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgY2FsbGJhY2tJREtleS5nZXQoKSwgY2FsbGJhY2tJRFZhbHVlLmdldCgpKTsKLQotICAgIFdL
UGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUobWVzc2FnZUJvZHksICJSZXN1bHQiLCByZXN1bHQp
OworICAgIHNldFZhbHVlKG1lc3NhZ2VCb2R5LCAiQ2FsbGJhY2tJRCIsIHN0YXRpY19jYXN0PHVp
bnQ2NF90PihzY3JpcHRDYWxsYmFja0lEKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsVUlT
aWRlU2NyaXB0Q2FsbGJhY2siLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdElu
dm9jYXRpb246Om91dHB1dFRleHQoY29uc3QgV1RGOjpTdHJpbmcmIHRleHQpCkBAIC0xOTIyLDE3
NCArMTM5NCwxNDMgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6b3V0cHV0VGV4dChjb25zdCBXVEY6
OlN0cmluZyYgdGV4dCkKIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkQmVnaW5Td2lwZSgpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZEJlZ2luU3dpcGVDYWxsYmFjayIpKTsK
LSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZEJlZ2luU3dpcGVDYWxsYmFjayIpOwogfQogCiB2
b2lkIFRlc3RJbnZvY2F0aW9uOjp3aWxsRW5kU3dpcGUoKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNhbGxXaWxsRW5kU3dpcGVDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
Q2FsbFdpbGxFbmRTd2lwZUNhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRp
ZEVuZFN3aXBlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkRW5kU3dpcGVD
YWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZEVuZFN3aXBlQ2FsbGJhY2si
KTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3ZlU3dpcGVTbmFwc2hvdCgpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlbW92ZVN3aXBlU25hcHNob3RDYWxs
YmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlbW92ZVN3aXBlU25hcHNob3RD
YWxsYmFjayIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpub3RpZnlEb3dubG9hZERvbmUo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk5vdGlmeURvd25sb2FkRG9uZSIpKTsKLSAg
ICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiTm90aWZ5RG93bmxvYWREb25lIik7CiB9CiAKIHZvaWQgVGVzdElu
dm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc0luTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1v
cnlBbmRQZXJzaXN0ZW50U3RvcmUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRDbGVh
clN0YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSIpOwogfQogCiB2b2lkIFRlc3RJ
bnZvY2F0aW9uOjpkaWRDbGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3Vn
aFdlYnNpdGVEYXRhUmVtb3ZhbCIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZENsZWFy
U3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsKIH0KIAogdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNhbGxEaWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlciIpKTsKLSAgICBX
S1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyIik7CiB9CiAK
IHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRTaG91bGRCbG9ja1RoaXJk
UGFydHlDb29raWVzIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0U2hv
dWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpk
aWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSgpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FsbERpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIikp
OwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0VG9TYW1l
U2l0ZVN0cmljdENvb2tpZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRT
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
Q2FsbERpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIik7CiB9CiAKIHZvaWQgVGVzdEludm9j
YXRpb246OmRpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4oKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNhbGxEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIikpOwotICAg
IFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFp
biIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21h
aW4oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRUaGlyZFBhcnR5Q05B
TUVEb21haW4iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRUaGlyZFBh
cnR5Q05BTUVEb21haW4iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVzZXRTdGF0
aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNh
bGxEaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0ZSIpKTsKLSAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiQ2FsbERpZFJlc2V0U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlIik7CiB9CiAKIHZv
aWQgVGVzdEludm9jYXRpb246OmRpZFNldEJsb2NrQ29va2llc0Zvckhvc3QoKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0IikpOwotICAg
IFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdCIpOwogfQogCiB2
b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIpKTsKLSAg
ICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKTsKIH0KIAog
dm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFByZXZhbGVu
dFJlc291cmNlRm9yRGVidWdNb2RlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNl
dExhc3RTZWVuKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0TGFzdFNl
ZW4iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRMYXN0U2VlbiIpOwogfQogCiB2
b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRNZXJnZVN0YXRpc3RpYygpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FsbERpZE1lcmdlU3RhdGlzdGljIikpOwotICAgIFdLUGFnZVBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdl
KCJDYWxsRGlkTWVyZ2VTdGF0aXN0aWMiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlk
U2V0RXhwaXJlZFN0YXRpc3RpYygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERp
ZFNldEV4cGlyZWRTdGF0aXN0aWMiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRF
eHBpcmVkU3RhdGlzdGljIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFByZXZh
bGVudFJlc291cmNlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0UHJl
dmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRQcmV2YWxl
bnRSZXNvdXJjZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRWZXJ5
UHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRWZXJ5
UHJldmFsZW50UmVzb3VyY2UiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0SGFz
SGFkVXNlckludGVyYWN0aW9uKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlk
U2V0SGFzSGFkVXNlckludGVyYWN0aW9uIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlk
U2V0SGFzSGFkVXNlckludGVyYWN0aW9uIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNj
ZXNzRW50cmllcyIpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAo
YXV0byYgZG9tYWluIDogZG9tYWlucykKLSAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2Fn
ZUJvZHkuZ2V0KCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZG9tYWlu
LnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0gICAgCi0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgICAgIFdL
QXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB0b1dLKGRvbWFpbikuZ2V0KCkpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmll
cyIsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVj
ZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWlucyhWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJj
ZURvbWFpbnMiKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICBmb3IgKGF1
dG8mIGRvbWFpbiA6IGRvbWFpbnMpCi0gICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VC
b2R5LmdldCgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGRvbWFpbi51
dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCi0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgICAgIFdLQXJyYXlB
cHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB0b1dLKGRvbWFpbikuZ2V0KCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlbW92ZUFs
bFNlc3Npb25DcmVkZW50aWFscygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERp
ZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrIikpOwotICAgIFdLUGFnZVBvc3RN
ZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJDYWxsRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2siKTsKIH0KIAog
dm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QXBwQm91bmREb21haW5zKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0QXBwQm91bmREb21haW5zIikpOwotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0QXBwQm91bmREb21haW5zIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkKQEAgLTIxMDQsOCAr
MTU0NSw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXBBZENsaWNrQXR0cmlidXRpb24oKQog
CiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpwZXJmb3JtQ3VzdG9tTWVudUFjdGlvbigpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24iKSk7Ci0gICAgV0tQ
YWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlBlcmZvcm1DdXN0b21NZW51QWN0aW9uIik7CiB9CiAKIHZvaWQgVGVzdElu
dm9jYXRpb246OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVlZGVkKCkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVu
bmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTE1ZmMwYTBlOWFmYWUzNDFjY2Nk
MDYwMzgzZWQzMDFhNzI0MWI2Yi4uNjE3MThhYzY1NTg4MTc3OGU4M2M5N2ZiZTE3ODI3OGM4NzBl
NmI4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9X
ZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM1NSw2ICszNTUs
OCBAQAogCQk4NDFDQzAwRDE4MTE4NUJGMDA0MkU5QjYgLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODQxQ0MwMEUxODExODVCRjAwNDJFOUI2IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogV2ViS2l0VGVzdFJ1bm5l
ciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBp
bGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViS2l0
VGVzdFJ1bm5lcjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJOTMzOEQx
QkEyNTBBNzlFQjAwRTgyN0Y2IC8qIEpTQmFzaWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTQmFzaWNz
Lmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMzhEMUJFMjUwQkQ5REQwMEU4MjdGNiAvKiBEaWN0
aW9uYXJ5RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3Rpb25hcnlGdW5jdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzYyMTBENzM2MDAwQTNEQUFFIC8q
IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5Mzc2NDE3NzIxMEQ3MzYxMDBBM0RBQUUgLyogV2ViS2l0VGVzdFJ1bm5lcldp
bmRvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVy
V2luZG93Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzc4ODFGMjUwQzY5RTQw
MEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFJlZnRlc3RGdW5jdGlvbnMuY3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNo
YXJlZC9SZWZ0ZXN0RnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTg5Miw2ICs4OTQsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJ
CQkzNzhENDQyMjEzMzQ2RDAwMDA2QTc3N0IgLyogY29uZmlnLmggKi8sCisJCQkJOTMzOEQxQkUy
NTBCRDlERDAwRTgyN0Y2IC8qIERpY3Rpb25hcnlGdW5jdGlvbnMuaCAqLywKIAkJCQlCQzk5QTQ4
NDEyMDg5MDFBMDA3RTlGMDggLyogU3RyaW5nRnVuY3Rpb25zLmggKi8sCiAJCQkJOUIzNkEyNzAy
MDk0NTNBMDAwM0UwNjUxIC8qIFdoYXRUb0R1bXAuaCAqLywKIAkJCSk7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCmluZGV4IDQ1ODY3
N2Y1MDliMTE3NDM5M2FlNGMzOGNhMDk0NTdjOGU4MGY4NGMuLmNkNWZjNjYyMTVhNGIwMzc5Njgy
YzcyYjJlYzFkMWYwYjk4MDczYjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
V2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
V2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCkBAIC0xMjYsOCArMTI2LDggQEAgdm9pZCBXZWJO
b3RpZmljYXRpb25Qcm92aWRlcjo6Y2xvc2VXZWJOb3RpZmljYXRpb24oV0tOb3RpZmljYXRpb25S
ZWYgbm90aWZpY2F0aW8KIAogICAgIHJlbW92ZUdsb2JhbElERnJvbUlETWFwKG1fbG9jYWxUb0ds
b2JhbE5vdGlmaWNhdGlvbklETWFwLCBpZCk7CiAKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4gd2tJRCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaWQpKTsKLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkp
OworICAgIGF1dG8gd2tJRCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaWQpKTsKKyAgICBhdXRv
IGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICBXS0FycmF5QXBw
ZW5kSXRlbShhcnJheS5nZXQoKSwgd2tJRC5nZXQoKSk7CiAgICAgV0tOb3RpZmljYXRpb25NYW5h
Z2VyUHJvdmlkZXJEaWRDbG9zZU5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9uTWFuYWdlciwgYXJy
YXkuZ2V0KCkpOwogfQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uUHJv
dmlkZXI6OnJlbW92ZU5vdGlmaWNhdGlvbk1hbmFnZXIoV0tOb3RpZmljYXRpb25NYW5hZ2VyUmVm
CiAgICAgYXV0byB0b1JlbW92ZSA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBXS1JldGFpblB0cjxX
S05vdGlmaWNhdGlvbk1hbmFnZXJSZWY+IGd1YXJkKG1hbmFnZXIpOwogICAgIG1fb3duZWROb3Rp
ZmljYXRpb25zLnJlbW92ZShpdGVyYXRvcik7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJy
YXlSZWY+IGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRv
IGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICBmb3IgKHVpbnQ2
NF90IG5vdGlmaWNhdGlvbklEIDogdG9SZW1vdmUpIHsKICAgICAgICAgYm9vbCBzdWNjZXNzID0g
bV9vd25pbmdNYW5hZ2VyLnJlbW92ZShub3RpZmljYXRpb25JRCk7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CkBAIC0xNzMsNyArMTczLDcgQEAgdm9pZCBXZWJOb3Rp
ZmljYXRpb25Qcm92aWRlcjo6cmVzZXQoKQogICAgIGZvciAoYXV0byYgbm90aWZpY2F0aW9uUGFp
ciA6IG1fb3duZWROb3RpZmljYXRpb25zKSB7CiAgICAgICAgIGlmIChub3RpZmljYXRpb25QYWly
LnZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBXS1JldGFp
blB0cjxXS011dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3Jl
YXRlKCkpOworICAgICAgICBhdXRvIGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0
ZSgpKTsKICAgICAgICAgZm9yICh1aW50NjRfdCBub3RpZmljYXRpb25JRCA6IG5vdGlmaWNhdGlv
blBhaXIudmFsdWUpCiAgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShhcnJheS5nZXQoKSwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShub3RpZmljYXRpb25JRCkpLmdldCgpKTsKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAKaW5kZXggMjBkNWExYWFkYjI5
ZTMzMmJlMjliMmIxZjRjMjM2MDkxOWJhMGZmMS4uYzlkNDdmZDYzYjg0ZTQ2ZTQ2MmE1MGZmNGJl
MDdiZjM0NjhhY2E2MCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVl
dWVNYW5hZ2VyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFn
ZXIuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV29ya1F1ZXVlTWFuYWdlci5oIgog
CiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisjaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25z
LmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxXZWJLaXQvV0tQYWdl
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLUGFnZVByaXZhdGUuaD4KQEAgLTc1LDcgKzc2LDcgQEAg
dGVtcGxhdGUgPFdvcmtRdWV1ZUl0ZW06OlR5cGUgdHlwZT4KIGNsYXNzIFNjcmlwdEl0ZW0gOiBw
dWJsaWMgV29ya1F1ZXVlSXRlbSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU2NyaXB0SXRlbShj
b25zdCBTdHJpbmcmIHNjcmlwdCkKLSAgICAgICAgOiBtX3NjcmlwdChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHNjcmlwdC51dGY4KCkuZGF0YSgpKSkpCisgICAgICAgIDog
bV9zY3JpcHQodG9XSyhzY3JpcHQpKQogICAgIHsKICAgICB9CiAKQEAgLTE2MSw3ICsxNjIsNyBA
QCB2b2lkIFdvcmtRdWV1ZU1hbmFnZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgU3RyaW5n
JiBjb250ZW50LCBjb25zdCBTdHJpbmcmCiAgICAgY2xhc3MgTG9hZEhUTUxTdHJpbmdJdGVtIDog
cHVibGljIFdvcmtRdWV1ZUl0ZW0gewogICAgIHB1YmxpYzoKICAgICAgICAgTG9hZEhUTUxTdHJp
bmdJdGVtKGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBjb25z
dCBTdHJpbmcmIHVucmVhY2hhYmxlVVJMKQotICAgICAgICAgICAgOiBtX2NvbnRlbnQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250ZW50LnV0ZjgoKS5kYXRhKCkpKSkK
KyAgICAgICAgICAgIDogbV9jb250ZW50KHRvV0soY29udGVudCkpCiAgICAgICAgICAgICAsIG1f
YmFzZVVSTChhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJhc2VVUkwudXRmOCgp
LmRhdGEoKSkpKQogICAgICAgICAgICAgLCBtX3VucmVhY2hhYmxlVVJMKGFkb3B0V0soV0tVUkxD
cmVhdGVXaXRoVVRGOENTdHJpbmcodW5yZWFjaGFibGVVUkwudXRmOCgpLmRhdGEoKSkpKQogICAg
ICAgICB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0
aW9uQ0cuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNw
cAppbmRleCA2NzMzOGY0YWE4MjczY2ZiNjg3MjI5YmZiYWQzZmE0ZGRiMzdiNGRmLi4wMWM1MzFh
OWI2YWNlOGU4MTY5NDhmNjc2Y2U2MzFmNTI3OTRiNmM0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGlj
IENHQ29udGV4dFJlZiBjcmVhdGVDR0NvbnRleHRGcm9tQ0dJbWFnZShDR0ltYWdlUmVmIGltYWdl
KQogICAgIHNpemVfdCByb3dCeXRlcyA9ICg0ICogcGl4ZWxzV2lkZSArIDYzKSAmIH42MzsKIAog
ICAgIC8vIENyZWF0aW5nIHRoaXMgYml0bWFwIGluIHRoZSBkZXZpY2UgY29sb3Igc3BhY2Ugc2hv
dWxkIHByZXZlbnQgYW55IGNvbG9yIGNvbnZlcnNpb24gd2hlbiB0aGUgaW1hZ2Ugb2YgdGhlIHdl
YiB2aWV3IGlzIGRyYXduIGludG8gaXQuCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4g
Y29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworICAg
IGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkp
OwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIHBp
eGVsc1dpZGUsIHBpeGVsc0hpZ2gsIDgsIHJvd0J5dGVzLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KTsK
ICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjMsNyArNjMs
NyBAQCBzdGF0aWMgQ0dDb250ZXh0UmVmIGNyZWF0ZUNHQ29udGV4dEZyb21DR0ltYWdlKENHSW1h
Z2VSZWYgaW1hZ2UpCiAKIHN0YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0RnJvbUlt
YWdlKFdLSW1hZ2VSZWYgd2tJbWFnZSkKIHsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1h
Z2UgPSBhZG9wdENGKFdLSW1hZ2VDcmVhdGVDR0ltYWdlKHdrSW1hZ2UpKTsKKyAgICBhdXRvIGlt
YWdlID0gYWRvcHRDRihXS0ltYWdlQ3JlYXRlQ0dJbWFnZSh3a0ltYWdlKSk7CiAgICAgcmV0dXJu
IGNyZWF0ZUNHQ29udGV4dEZyb21DR0ltYWdlKGltYWdlLmdldCgpKTsKIH0KIApAQCAtMTA5LDkg
KzEwOSw5IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9yQ29udGV4dChDR0NvbnRleHRS
ZWYgYml0bWFwQ29udGV4dCwgY2hhciBoYXNoU3RyaW5nCiAKIHN0YXRpYyB2b2lkIGR1bXBCaXRt
YXAoQ0dDb250ZXh0UmVmIGJpdG1hcENvbnRleHQsIGNvbnN0IGNoYXIqIGNoZWNrc3VtKQogewot
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0
Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dCkpOwotICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRh
UmVmPiBpbWFnZURhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAg
IFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGltYWdlRGVzdCA9IGFkb3B0Q0YoQ0dJ
bWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoaW1hZ2VEYXRhLmdldCgpLCBrVVRUeXBlUE5H
LCAxLCAwKSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoYml0bWFwQ29udGV4dCkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gYWRvcHRDRihDRkRh
dGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKyAgICBhdXRvIGltYWdlRGVzdCA9IGFkb3B0Q0YoQ0dJ
bWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoaW1hZ2VEYXRhLmdldCgpLCBrVVRUeXBlUE5H
LCAxLCAwKSk7CiAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoaW1hZ2VEZXN0LmdldCgp
LCBpbWFnZS5nZXQoKSwgMCk7CiAgICAgQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoaW1hZ2VE
ZXN0LmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9D
cmFzaFJlcG9ydGVySW5mby5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hS
ZXBvcnRlckluZm8ubW0KaW5kZXggNGM3OWFiNWI4NWQ2NDE4OWE3ZTBhMjk2ZWVhOTBjMWQ4MTE4
ZGMzZC4uNDEwZDlmZGNiMzFlMmM2ZTZjYTc2NDk1NjE0NjA2MzhjMDkxMDVlYiAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9DcmFzaFJlcG9ydGVySW5mby5tbQorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0NyYXNoUmVwb3J0ZXJJbmZvLm1tCkBAIC0z
NSwxMiArMzUsMTIgQEAgbmFtZXNwYWNlIFdUUiB7CiAKIHN0YXRpYyBTdHJpbmcgdGVzdFBhdGhG
cm9tVVJMKFdLVVJMUmVmIHVybCkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNmVVJMID0g
YWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwpKTsKKyAgICBh
dXRvIGNmVVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1
cmwpKTsKICAgICBpZiAoIWNmVVJMKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjaGVtZUNGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlT
Y2hlbWUoY2ZVUkwuZ2V0KCkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhDRlN0
cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5UGF0aChjZlVSTC5nZXQoKSkpOworICAgIGF1dG8gc2No
ZW1lQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVNjaGVtZShjZlVSTC5nZXQoKSkpOworICAg
IGF1dG8gcGF0aENGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlQYXRoKGNmVVJMLmdldCgpKSk7
CiAKICAgICBTdHJpbmcgc2NoZW1lU3RyaW5nKHNjaGVtZUNGU3RyaW5nLmdldCgpKTsKICAgICBT
dHJpbmcgcGF0aFN0cmluZyhwYXRoQ0ZTdHJpbmcuZ2V0KCkpOwpAQCAtNTcsNyArNTcsNyBAQCBz
dGF0aWMgU3RyaW5nIHRlc3RQYXRoRnJvbVVSTChXS1VSTFJlZiB1cmwpCiAgICAgaWYgKCFlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWVTdHJpbmcsICJodHRwIikgJiYgIWVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0cmluZywgImh0dHBzIikpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdENGU3Ry
aW5nID0gYWRvcHRDRihDRlVSTENvcHlIb3N0TmFtZShjZlVSTC5nZXQoKSkpOworICAgIGF1dG8g
aG9zdENGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlIb3N0TmFtZShjZlVSTC5nZXQoKSkpOwog
ICAgIFN0cmluZyBob3N0U3RyaW5nKGhvc3RDRlN0cmluZy5nZXQoKSk7CiAgICAgaWYgKGhvc3RT
dHJpbmcgPT0gIjEyNy4wLjAuMSIpCiAgICAgICAgIHJldHVybiBwYXRoU3RyaW5nOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1t
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCmlu
ZGV4IDM2NTMzN2FkZjk5ZjBiOWNkZDZhZjA5N2ZjMDJiZTg3YTY3MTY2NTcuLjcxMzAzMjZhM2U2
MWNlMmJkMGE3NmRmNzI4OThkOWU0YjAwNjNiMDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KQEAgLTE0Miw3ICsxNDIsNyBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUoV0tQYWdl
Q29uZmlndXJhdGlvblJlZiwgY29uc3QgVAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bUNyZWF0ZVdlYlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMpCiB7Ci0gICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvcGll
ZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbiBjb3B5
XSk7CisgICAgYXV0byBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbZ2xvYmFsV2ViVmll
d0NvbmZpZ3VyYXRpb24gY29weV0pOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBp
ZiAob3B0aW9ucy51c2VEYXRhRGV0ZWN0aW9uKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCmluZGV4IDVjODYyZTliMGVjNzdkMDVl
MDc3MjlkY2U2NDc2ZjU4OTIxMjNiMzguLjkxNWY0NzZjNjE1YWU2MTA5MGQ5MGNhNzk3NmJmOGYy
Yzk5YjU2NmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1
bm5lcldLV2ViVmlldy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RS
dW5uZXJXS1dlYlZpZXcubW0KQEAgLTkwLDcgKzkwLDcgQEAgSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJkZXByZWNhdGVkLWltcGxlbWVudGF0aW9ucyIpCiAtICh2b2lkKWRyYWdJbWFnZTooTlNJbWFn
ZSAqKWFuSW1hZ2UgYXQ6KE5TUG9pbnQpdmlld0xvY2F0aW9uIG9mZnNldDooTlNTaXplKWluaXRp
YWxPZmZzZXQgZXZlbnQ6KE5TRXZlbnQgKilldmVudCBwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQg
KilwYm9hcmQgc291cmNlOihpZClzb3VyY2VPYmogc2xpZGVCYWNrOihCT09MKXNsaWRlRmxhZwog
SUdOT1JFX1dBUk5JTkdTX0VORAogewotICAgIFJldGFpblB0cjxXZWJLaXRUZXN0UnVubmVyRHJh
Z2dpbmdJbmZvPiBkcmFnZ2luZ0luZm8gPSBhZG9wdE5TKFtbV2ViS2l0VGVzdFJ1bm5lckRyYWdn
aW5nSW5mbyBhbGxvY10gaW5pdFdpdGhJbWFnZTphbkltYWdlIG9mZnNldDppbml0aWFsT2Zmc2V0
IHBhc3RlYm9hcmQ6cGJvYXJkIHNvdXJjZTpzb3VyY2VPYmpdKTsKKyAgICBhdXRvIGRyYWdnaW5n
SW5mbyA9IGFkb3B0TlMoW1tXZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZvIGFsbG9jXSBpbml0
V2l0aEltYWdlOmFuSW1hZ2Ugb2Zmc2V0OmluaXRpYWxPZmZzZXQgcGFzdGVib2FyZDpwYm9hcmQg
c291cmNlOnNvdXJjZU9ial0pOwogICAgIFtzZWxmIGRyYWdnaW5nVXBkYXRlZDpkcmFnZ2luZ0lu
Zm8uZ2V0KCldOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmgKaW5kZXggYWJjMGE1MGM5NzBjMWJiMzNm
MWZiMTA5MzkzNTJhZjhjYTdlMDQwMy4uY2M5ODEzOTQyNGYyODgwNjQ0Mzk4OTgzNDVjM2U3ZDRl
YTU1MzM3OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlw
dENvbnRyb2xsZXJDb2NvYS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlT
Y3JpcHRDb250cm9sbGVyQ29jb2EuaApAQCAtMzIsMTIgKzMyLDE3IEBAIE9CSkNfQ0xBU1MgVGVz
dFJ1bm5lcldLV2ViVmlldzsKIG5hbWVzcGFjZSBXVFIgewogCiBjbGFzcyBVSVNjcmlwdENvbnRy
b2xsZXJDb2NvYSA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb21tb24gewotcHVibGljOgor
cHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29udHJvbGxlckNvY29hKFVJU2NyaXB0
Q29udGV4dCYpOworICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKKwor
ICAgIHZvaWQgZG9Bc3luY1Rhc2soSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CiAg
ICAgdm9pZCBzZXRWaWV3U2NhbGUoZG91YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIHNldE1pbmlt
dW1FZmZlY3RpdmVXaWR0aChkb3VibGUpIG92ZXJyaWRlOwogICAgIHZvaWQgYmVjb21lRmlyc3RS
ZXNwb25kZXIoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc2lnbkZpcnN0UmVzcG9uZGVyKCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkb0FzeW5jVGFzayhKU1ZhbHVlUmVmKSBvdmVycmlkZTsKICAgICB2
b2lkIHJlbW92ZVZpZXdGcm9tV2luZG93KEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIHZvaWQg
YWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIHZvaWQgb3ZlcnJpZGVQ
cmVmZXJlbmNlKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikgb3ZlcnJpZGU7CkBAIC01OSwxMSAr
NjQsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGluc2VydEF0dGFjaG1lbnRGb3JGaWxlUGF0aChK
U1N0cmluZ1JlZiBmaWxlUGF0aCwgSlNTdHJpbmdSZWYgY29udGVudFR5cGUsIEpTVmFsdWVSZWYg
Y2FsbGJhY2spIG92ZXJyaWRlOwogCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgVUlTY3JpcHRD
b250cm9sbGVyQ29jb2EoVUlTY3JpcHRDb250ZXh0Jik7Ci0gICAgVGVzdFJ1bm5lcldLV2ViVmll
dyAqd2ViVmlldygpIGNvbnN0OwotCi1wcml2YXRlOgogICAgIHZvaWQgY29tcGxldGVUYXNrQXN5
bmNocm9ub3VzbHlBZnRlckFjdGl2aXR5U3RhdGVVcGRhdGUodW5zaWduZWQgY2FsbGJhY2tJRCk7
CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0
Q29udHJvbGxlckNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlw
dENvbnRyb2xsZXJDb2NvYS5tbQppbmRleCA5OGJiNzRiNDEzYjk1MDNlNjk4ODA3ZWRiODYyOThl
MzcwZGNkMGYyLi41ODQ3OTc2ZjIxODU3ZjUzZjQ4NWVjYjFmYjFlYjkxMTcyMWE1NmRhIDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNv
Y29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9s
bGVyQ29jb2EubW0KQEAgLTEzNSwyMiArMTM1LDE4IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVy
Q29jb2E6OmFkZFZpZXdUb1dpbmRvdyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogCiB2b2lkIFVJU2Ny
aXB0Q29udHJvbGxlckNvY29hOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVy
ZW5jZVJlZiwgSlNTdHJpbmdSZWYgdmFsdWVSZWYpCiB7Ci0gICAgV0tQcmVmZXJlbmNlcyAqcHJl
ZmVyZW5jZXMgPSB3ZWJWaWV3KCkuY29uZmlndXJhdGlvbi5wcmVmZXJlbmNlczsKLQotICAgIFN0
cmluZyBwcmVmZXJlbmNlID0gdG9XVEZTdHJpbmcodG9XSyhwcmVmZXJlbmNlUmVmKSk7Ci0gICAg
U3RyaW5nIHZhbHVlID0gdG9XVEZTdHJpbmcodG9XSyh2YWx1ZVJlZikpOwotICAgIGlmIChwcmVm
ZXJlbmNlID09ICJXZWJLaXRNaW5pbXVtRm9udFNpemUiKQotICAgICAgICBwcmVmZXJlbmNlcy5t
aW5pbXVtRm9udFNpemUgPSB2YWx1ZS50b0RvdWJsZSgpOworICAgIGlmICh0b1dURlN0cmluZyhw
cmVmZXJlbmNlUmVmKSA9PSAiV2ViS2l0TWluaW11bUZvbnRTaXplIikKKyAgICAgICAgd2ViVmll
dygpLmNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMubWluaW11bUZvbnRTaXplID0gdG9XVEZTdHJp
bmcodmFsdWVSZWYpLnRvRG91YmxlKCk7CiB9CiAKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyQ29j
b2E6OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nLCB1bnNpZ25lZCBsb25nIG9wdGlvbnMs
IHVuc2lnbmVkIGxvbmcgbWF4Q291bnQpCiB7Ci0gICAgW3dlYlZpZXcoKSBfZmluZFN0cmluZzp0
b1dURlN0cmluZyh0b1dLKHN0cmluZykpIG9wdGlvbnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3Vu
dF07CisgICAgW3dlYlZpZXcoKSBfZmluZFN0cmluZzp0b1dURlN0cmluZyhzdHJpbmcpIG9wdGlv
bnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3VudF07CiB9CiAKIEpTT2JqZWN0UmVmIFVJU2NyaXB0
Q29udHJvbGxlckNvY29hOjpjb250ZW50c09mVXNlckludGVyZmFjZUl0ZW0oSlNTdHJpbmdSZWYg
aW50ZXJmYWNlSXRlbSkgY29uc3QKIHsKLSAgICBOU0RpY3Rpb25hcnkgKmNvbnRlbnREaWN0aW9u
YXJ5ID0gW3dlYlZpZXcoKSBfY29udGVudHNPZlVzZXJJbnRlcmZhY2VJdGVtOnRvV1RGU3RyaW5n
KHRvV0soaW50ZXJmYWNlSXRlbSkpXTsKKyAgICBOU0RpY3Rpb25hcnkgKmNvbnRlbnREaWN0aW9u
YXJ5ID0gW3dlYlZpZXcoKSBfY29udGVudHNPZlVzZXJJbnRlcmZhY2VJdGVtOnRvV1RGU3RyaW5n
KGludGVyZmFjZUl0ZW0pXTsKICAgICByZXR1cm4gSlNWYWx1ZVRvT2JqZWN0KG1fY29udGV4dC0+
anNDb250ZXh0KCksIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpjb250ZW50RGljdGlvbmFyeSBp
bkNvbnRleHQ6W0pTQ29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjptX2NvbnRl
eHQtPmpzQ29udGV4dCgpXV0uSlNWYWx1ZVJlZiwgbnVsbHB0cik7CiB9CiAKQEAgLTIxOSwxMiAr
MjE1LDEwIEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2E6OnBhc3RlKCkKIHZvaWQgVUlT
Y3JpcHRDb250cm9sbGVyQ29jb2E6Omluc2VydEF0dGFjaG1lbnRGb3JGaWxlUGF0aChKU1N0cmlu
Z1JlZiBmaWxlUGF0aCwgSlNTdHJpbmdSZWYgY29udGVudFR5cGUsIEpTVmFsdWVSZWYgY2FsbGJh
Y2spCiB7CiAgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG1fY29udGV4dC0+cHJlcGFyZUZvckFz
eW5jVGFzayhjYWxsYmFjaywgQ2FsbGJhY2tUeXBlTm9uUGVyc2lzdGVudCk7Ci0KLSAgICBSZXRh
aW5QdHI8Q0ZVUkxSZWY+IHRlc3RVUkwgPSBhZG9wdENGKFdLVVJMQ29weUNGVVJMKGtDRkFsbG9j
YXRvckRlZmF1bHQsIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jdXJyZW50VGVzdFVSTCgp
KSk7Ci0gICAgUmV0YWluUHRyPE5TVVJMPiBhdHRhY2htZW50VVJMID0gW05TVVJMIGZpbGVVUkxX
aXRoUGF0aDp0b1dURlN0cmluZyh0b1dLKGZpbGVQYXRoKSkgcmVsYXRpdmVUb1VSTDooX19icmlk
Z2UgTlNVUkwgKil0ZXN0VVJMLmdldCgpXTsKLQotICAgIGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9w
dE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFdpdGhVUkw6YXR0YWNobWVudFVSTC5nZXQo
KSBvcHRpb25zOjAgZXJyb3I6bmlsXSk7Ci0gICAgW3dlYlZpZXcoKSBfaW5zZXJ0QXR0YWNobWVu
dFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlci5nZXQoKSBjb250ZW50VHlwZTp0b1dURlN0cmlu
Zyh0b1dLKGNvbnRlbnRUeXBlKSkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAgIGF1
dG8gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmN1cnJlbnRUZXN0VVJMKCkpKTsKKyAgICBhdXRv
IGF0dGFjaG1lbnRVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnRvV1RGU3RyaW5nKGZpbGVQ
YXRoKSByZWxhdGl2ZVRvVVJMOihfX2JyaWRnZSBOU1VSTCAqKXRlc3RVUkwuZ2V0KCldOworICAg
IGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFdp
dGhVUkw6YXR0YWNobWVudFVSTCBvcHRpb25zOjAgZXJyb3I6bmlsXSk7CisgICAgW3dlYlZpZXco
KSBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlci5nZXQoKSBjb250
ZW50VHlwZTp0b1dURlN0cmluZyhjb250ZW50VHlwZSkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2Vz
cykgewogICAgICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgbV9jb250ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShjYWxsYmFja0lEKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IubW0KaW5kZXggZTI5ODM4YmE4
MjhmYjRiZDkwODU3YWI2YmVmMmZkNDY1OWZiNDIxOC4uZDRiMTE0ODExZWU2YmRkMjUxNWRkZTM1
NWVlMTNkZTYyMTEwZDU1MCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3Mv
SElERXZlbnRHZW5lcmF0b3IubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElE
RXZlbnRHZW5lcmF0b3IubW0KQEAgLTE4OSw3ICsxODksNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5p
dAogCiAtICh2b2lkKV9zZW5kSU9ISURLZXlib2FyZEV2ZW50Oih1aW50NjRfdCl0aW1lc3RhbXAg
dXNhZ2U6KHVpbnQzMl90KXVzYWdlIGlzS2V5RG93bjooYm9vbClpc0tleURvd24KIHsKLSAgICBS
ZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZlbnRDcmVh
dGVLZXlib2FyZEV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsCisgICAgYXV0byBldmVudFJlZiA9
IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0ZUtleWJvYXJkRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVs
dCwKICAgICAgICAgdGltZXN0YW1wLAogICAgICAgICBrSElEUGFnZV9LZXlib2FyZE9yS2V5cGFk
LAogICAgICAgICB1c2FnZSwKQEAgLTM2MSw3ICszNjEsNyBAQCAtIChJT0hJREV2ZW50UmVmKV9j
cmVhdGVJT0hJREV2ZW50VHlwZTooSGFuZEV2ZW50VHlwZSlldmVudFR5cGUKICAgICAgICAgZXZl
bnRNYXNrIHw9IGtJT0hJRERpZ2l0aXplckV2ZW50SWRlbnRpdHk7CiAKICAgICB1aW50NjRfdCBt
YWNoVGltZSA9IG1hY2hfYWJzb2x1dGVfdGltZSgpOwotICAgIFJldGFpblB0cjxJT0hJREV2ZW50
UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0ZURpZ2l0aXplckV2ZW50KGtD
RkFsbG9jYXRvckRlZmF1bHQsIG1hY2hUaW1lLAorICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENG
KElPSElERXZlbnRDcmVhdGVEaWdpdGl6ZXJFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtYWNo
VGltZSwKICAgICAgICAga0lPSElERGlnaXRpemVyVHJhbnNkdWNlclR5cGVIYW5kLAogICAgICAg
ICAwLAogICAgICAgICAwLApAQCAtNDUzLDcgKzQ1Myw3IEBAIC0gKEJPT0wpX3NlbmRISURFdmVu
dDooSU9ISURFdmVudFJlZilldmVudFJlZgogICAgICAgICBfaW9TeXN0ZW1DbGllbnQgPSBJT0hJ
REV2ZW50U3lzdGVtQ2xpZW50Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwogCiAgICAgaWYg
KGV2ZW50UmVmKSB7Ci0gICAgICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBzdHJvbmdFdmVu
dCA9IGV2ZW50UmVmOworICAgICAgICBhdXRvIHN0cm9uZ0V2ZW50ID0gZXZlbnRSZWY7CiAgICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CiAgICAgICAg
ICAgICB1aW50MzJfdCBjb250ZXh0SUQgPSBbVUlBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlv
bl0ua2V5V2luZG93Ll9jb250ZXh0SWQ7CiAgICAgICAgICAgICBBU1NFUlQoY29udGV4dElEKTsK
QEAgLTUxMiw3ICs1MTIsNyBAQCAtICh2b2lkKV91cGRhdGVUb3VjaFBvaW50czooQ0dQb2ludCop
cG9pbnRzIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50CiAgICAgICAgIFtbR2VuZXJhdGVkVG91Y2hl
c0RlYnVnV2luZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvd10gdXBkYXRlRGVi
dWdJbmRpY2F0b3JGb3JUb3VjaDppIHdpdGhQb2ludEluV2luZG93Q29vcmRpbmF0ZXM6cG9pbnRz
W2ldIGlzVG91Y2hpbmc6WUVTXTsKICAgICB9CiAgICAgCi0gICAgUmV0YWluUHRyPElPSElERXZl
bnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6aGFu
ZEV2ZW50VHlwZV0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJ
T0hJREV2ZW50VHlwZTpoYW5kRXZlbnRUeXBlXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpl
dmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTUyOSw3ICs1MjksNyBAQCAtICh2b2lkKXRvdWNoRG93
bkF0UG9pbnRzOihDR1BvaW50Kilsb2NhdGlvbnMgdG91Y2hDb3VudDooTlNVSW50ZWdlcil0b3Vj
aENvdW50CiAgICAgICAgIFtbR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHNoYXJlZEdlbmVy
YXRlZFRvdWNoZXNEZWJ1Z1dpbmRvd10gdXBkYXRlRGVidWdJbmRpY2F0b3JGb3JUb3VjaDppbmRl
eCB3aXRoUG9pbnRJbldpbmRvd0Nvb3JkaW5hdGVzOmxvY2F0aW9uc1tpbmRleF0gaXNUb3VjaGlu
ZzpZRVNdOwogICAgIH0KIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9
IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudFRvdWNoZWRdKTsK
KyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6
SGFuZEV2ZW50VG91Y2hlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0
KCldOwogfQogCkBAIC01NjMsNyArNTYzLDcgQEAgLSAodm9pZClsaWZ0VXBBdFBvaW50czooQ0dQ
b2ludCopbG9jYXRpb25zIHRvdWNoQ291bnQ6KE5TVUludGVnZXIpdG91Y2hDb3VudAogICAgICAg
ICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVi
dWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aW5kZXggd2l0aFBvaW50SW5X
aW5kb3dDb29yZGluYXRlczpDR1BvaW50WmVybyBpc1RvdWNoaW5nOk5PXTsKICAgICB9CiAgICAg
Ci0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBf
Y3JlYXRlSU9ISURFdmVudFR5cGU6SGFuZEV2ZW50TGlmdGVkXSk7CisgICAgYXV0byBldmVudFJl
ZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudExpZnRlZF0p
OwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogICAgIAogICAgIF9h
Y3RpdmVQb2ludENvdW50ID0gbmV3UG9pbnRDb3VudDsKQEAgLTY0MSw3ICs2NDEsNyBAQCAtICh2
b2lkKXN0eWx1c0Rvd25BdFBvaW50OihDR1BvaW50KWxvY2F0aW9uIGF6aW11dGhBbmdsZTooQ0dG
bG9hdClhemltdXRoQW5nbGUgYQogICAgIF9hY3RpdmVQb2ludHNbMF0uYXppbXV0aEFuZ2xlID0g
TV9QSSAqIDIgLSBhemltdXRoQW5nbGU7CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRpdHVkZUFu
Z2xlID0gTV9QSV8yIC0gYWx0aXR1ZGVBbmdsZTsKIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50
UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1
c0V2ZW50VG91Y2hlZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVh
dGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudFRvdWNoZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJ
REV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApAQCAtNjU1LDcgKzY1NSw3IEBAIC0gKHZvaWQp
c3R5bHVzTW92ZVRvUG9pbnQ6KENHUG9pbnQpbG9jYXRpb24gYXppbXV0aEFuZ2xlOihDR0Zsb2F0
KWF6aW11dGhBbmdsZSBhCiAgICAgX2FjdGl2ZVBvaW50c1swXS5hemltdXRoQW5nbGUgPSBNX1BJ
ICogMiAtIGF6aW11dGhBbmdsZTsKICAgICBfYWN0aXZlUG9pbnRzWzBdLmFsdGl0dWRlQW5nbGUg
PSBNX1BJXzIgLSBhbHRpdHVkZUFuZ2xlOwogCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+
IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZl
bnRNb3ZlZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJ
REV2ZW50VHlwZTpTdHlsdXNFdmVudE1vdmVkXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpl
dmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTY2OCw3ICs2NjgsNyBAQCAtICh2b2lkKXN0eWx1c1Vw
QXRQb2ludDooQ0dQb2ludClsb2NhdGlvbgogICAgIF9hY3RpdmVQb2ludHNbMF0uYXppbXV0aEFu
Z2xlID0gMDsKICAgICBfYWN0aXZlUG9pbnRzWzBdLmFsdGl0dWRlQW5nbGUgPSAwOwogCi0gICAg
UmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRl
SU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRMaWZ0ZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0g
YWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRMaWZ0ZWRdKTsK
ICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApAQCAtMTAyMSw3
ICsxMDIxLDcgQEAgLSAodm9pZClkaXNwYXRjaEV2ZW50V2l0aEluZm86KE5TRGljdGlvbmFyeSAq
KWV2ZW50SW5mbwogewogICAgIEFTU0VSVChbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSk7CiAKLSAg
ICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVh
dGVJT0hJREV2ZW50V2l0aEluZm86ZXZlbnRJbmZvXSk7CisgICAgYXV0byBldmVudFJlZiA9IGFk
b3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRXaXRoSW5mbzpldmVudEluZm9dKTsKICAgICBb
c2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MuaAppbmRleCAyOGQwNjBj
NmRmYzQ3MWE5MDU0OTA2ODM5NWMzZDQwZjZhOWMwOTZiLi44NTQ2NDQ3NjZkOGJjNWE4MTVkMjY3
ZTlhN2JhNGEyMDVkNmU2MTIyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9VSVNjcmlwdENvbnRyb2xsZXJJT1MuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9VSVNjcmlwdENvbnRyb2xsZXJJT1MuaApAQCAtMjUsMTEgKzI1LDExIEBACiAKICNwcmFnbWEg
b25jZQogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwogI2ltcG9ydCAiVUlTY3JpcHRDb250
cm9sbGVyQ29jb2EuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmxvYXRQb2ludDsKIGNs
YXNzIEZsb2F0UmVjdDsKQEAgLTM3LDEzICszNywxNCBAQCBjbGFzcyBGbG9hdFJlY3Q7CiAKIG5h
bWVzcGFjZSBXVFIgewogCi1jbGFzcyBVSVNjcmlwdENvbnRyb2xsZXJJT1MgOiBwdWJsaWMgVUlT
Y3JpcHRDb250cm9sbGVyQ29jb2EgeworY2xhc3MgVUlTY3JpcHRDb250cm9sbGVySU9TIGZpbmFs
IDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKIHB1YmxpYzoKICAgICBleHBsaWNp
dCBVSVNjcmlwdENvbnRyb2xsZXJJT1MoVUlTY3JpcHRDb250ZXh0JiBjb250ZXh0KQogICAgICAg
ICA6IFVJU2NyaXB0Q29udHJvbGxlckNvY29hKGNvbnRleHQpCiAgICAgewogICAgIH0KIAorcHJp
dmF0ZToKICAgICB2b2lkIHdhaXRGb3JPdXRzdGFuZGluZ0NhbGxiYWNrcygpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZG9BZnRlclByZXNlbnRhdGlvblVwZGF0ZShKU1ZhbHVlUmVmKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBkYXRlKEpTVmFsdWVSZWYp
IG92ZXJyaWRlOwpAQCAtMTU2LDcgKzE1Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERpZEVu
ZFNjcm9sbGluZ0NhbGxiYWNrKEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJB
bGxDYWxsYmFja3MoKSBvdmVycmlkZTsKIAotcHJpdmF0ZToKICAgICB2b2lkIHdhaXRGb3JNb2Rh
bFRyYW5zaXRpb25Ub0ZpbmlzaCgpIGNvbnN0OwogICAgIHZvaWQgd2FpdEZvclNpbmdsZVRhcFRv
UmVzZXQoKSBjb25zdDsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdEZvck1lbnVBY3Rpb24o
Q0ZTdHJpbmdSZWYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3Mv
VUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IDEzMGM0OTdjMjQwZDgzOGJiNGFmZmZkMjA3
MzE0MTc1YTgzZGJiMjYuLjdhZjZlY2Y1MDk4NWYxNWVmNDdjMTkxOGI2NWEyZWJkYTZkMjZhMDgg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xs
ZXJJT1MubW0KQEAgLTY4LDI0ICs2OCwxNCBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICp0b05TRGlj
dGlvbmFyeShDR1JlY3QgcmVjdCkKICAgICB9OwogfQogCi1zdGF0aWMgdW5zaWduZWQgYXJyYXlM
ZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGFycmF5KQotewotICAgIGF1
dG8gbGVuZ3RoU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxl
bmd0aCIpKTsKLSAgICBpZiAoYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgbnVsbHB0cikpCi0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0
aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYg
YXJyYXlWYWx1ZSkKIHsKICAgICBpZiAoIWFycmF5VmFsdWUpCiAgICAgICAgIHJldHVybiB7IH07
CiAKICAgICAvLyBUaGUgdmFsdWUgbWF5IGVpdGhlciBiZSBhIHN0cmluZyB3aXRoIGEgc2luZ2xl
IG1vZGlmaWVyIG9yIGFuIGFycmF5IG9mIG1vZGlmaWVycy4KLSAgICBpZiAoSlNWYWx1ZUlzU3Ry
aW5nKGNvbnRleHQsIGFycmF5VmFsdWUpKSB7Ci0gICAgICAgIGF1dG8gc3RyaW5nID0gdG9XVEZT
dHJpbmcodG9XSyhhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFycmF5VmFsdWUs
IG51bGxwdHIpKSkpOwotICAgICAgICByZXR1cm4geyBzdHJpbmcgfTsKLSAgICB9CisgICAgaWYg
KEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHsg
dG9XVEZTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1ZSkgfTsKIAogICAgIGlmICghSlNWYWx1ZUlz
T2JqZWN0KGNvbnRleHQsIGFycmF5VmFsdWUpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtOTMs
MTYgKzgzLDggQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBhcnNlTW9kaWZpZXJBcnJheShKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhcnJheVYKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcnJheUxlbmd0aChjb250ZXh0LCBhcnJheSk7CiAgICAgVmVjdG9yPFN0cmluZz4gbW9kaWZp
ZXJzOwogICAgIG1vZGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCAmZXhjZXB0aW9uKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRv
IHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsICZleGNl
cHRpb24pKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBtb2RpZmllcnMuYXBwZW5kKHRvV1RGU3RyaW5nKHRvV0soc3RyaW5nLmdldCgpKSkp
OwotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAg
ICAgIG1vZGlmaWVycy5hcHBlbmQodG9XVEZTdHJpbmcoY29udGV4dCwgSlNPYmplY3RHZXRQcm9w
ZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIG51bGxwdHIpKSk7CiAgICAgcmV0dXJuIG1v
ZGlmaWVyczsKIH0KIApAQCAtNTE0LDEwICs0OTYsOSBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxl
cklPUzo6dHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZChKU1N0cmluZ1JlZiBjaGFy
YQogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBtX2NvbnRleHQtPnByZXBhcmVGb3JBc3luY1Rh
c2soY2FsbGJhY2ssIENhbGxiYWNrVHlwZU5vblBlcnNpc3RlbnQpOwogCiAgICAgLy8gQXNzdW1l
cyB0aGF0IHRoZSBrZXlib2FyZCBpcyBhbHJlYWR5IHNob3duLgotICAgIFtbSElERXZlbnRHZW5l
cmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVByZXNzOnRvV1RGU3RyaW5nKHRvV0so
Y2hhcmFjdGVyKSkgY29tcGxldGlvbkJsb2NrOm1ha2VCbG9ja1B0cihbdGhpcywgc3Ryb25nVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFja0lEXSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2NvbnRleHQtPmFzeW5jVGFza0NvbXBs
ZXRlKGNhbGxiYWNrSUQpOworICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRH
ZW5lcmF0b3JdIGtleVByZXNzOnRvV1RGU3RyaW5nKGNoYXJhY3RlcikgY29tcGxldGlvbkJsb2Nr
Om1ha2VCbG9ja1B0cihbc3Ryb25nVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFja0lEXSB7
CisgICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2NvbnRleHQpCisgICAgICAgICAgICBzdHJvbmdU
aGlzLT5tX2NvbnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNrSUQpOwogICAgIH0pLmdl
dCgpXTsKIH0KIApAQCAtNTM0LDcgKzUxNSw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9T
OjpyYXdLZXlEb3duKEpTU3RyaW5nUmVmIGtleSkKIHsKICAgICAvLyBLZXkgY2FuIGJlIGVpdGhl
ciBhIHNpbmdsZSBVbmljb2RlIGNvZGUgcG9pbnQgb3IgdGhlIG5hbWUgb2YgYSBzcGVjaWFsIGtl
eSAoZS5nLiAiZG93bkFycm93IikuCiAgICAgLy8gSElERXZlbnRHZW5lcmF0b3Iga25vd3MgaG93
IHRvIG1hcCB0aGVzZSBzcGVjaWFsIGtleXMgdG8gdGhlIGFwcHJvcHJpYXRlIGtleWNvZGUuCi0g
ICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0ga2V5RG93bjp0
b1dURlN0cmluZyh0b1dLKGtleSkpXTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJ
REV2ZW50R2VuZXJhdG9yXSBrZXlEb3duOnRvV1RGU3RyaW5nKGtleSldOwogICAgIFtbSElERXZl
bnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIHNlbmRNYXJrZXJISURFdmVudFdp
dGhDb21wbGV0aW9uQmxvY2s6XnsgLyogRG8gbm90aGluZyAqLyB9XTsKIH0KIApAQCAtNTQyLDcg
KzUyMyw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjpyYXdLZXlVcChKU1N0cmluZ1Jl
ZiBrZXkpCiB7CiAgICAgLy8gS2V5IGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgVW5pY29kZSBjb2Rl
IHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lhbCBrZXkgKGUuZy4gImRvd25BcnJvdyIpLgog
ICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtub3dzIGhvdyB0byBtYXAgdGhlc2Ugc3BlY2lhbCBr
ZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXljb2RlLgotICAgIFtbSElERXZlbnRHZW5lcmF0b3Ig
c2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVVwOnRvV1RGU3RyaW5nKHRvV0soa2V5KSldOwor
ICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVVwOnRv
V1RGU3RyaW5nKGtleSldOwogICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRH
ZW5lcmF0b3JdIHNlbmRNYXJrZXJISURFdmVudFdpdGhDb21wbGV0aW9uQmxvY2s6XnsgLyogRG8g
bm90aGluZyAqLyB9XTsKIH0KIApAQCAtNTUwLDcgKzUzMSw3IEBAIHZvaWQgVUlTY3JpcHRDb250
cm9sbGVySU9TOjprZXlEb3duKEpTU3RyaW5nUmVmIGNoYXJhY3RlciwgSlNWYWx1ZVJlZiBtb2Rp
ZmllckFyCiB7CiAgICAgLy8gQ2hhcmFjdGVyIGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgVW5pY29k
ZSBjb2RlIHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lhbCBrZXkgKGUuZy4gImRvd25BcnJv
dyIpLgogICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtub3dzIGhvdyB0byBtYXAgdGhlc2Ugc3Bl
Y2lhbCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXljb2RlLgotICAgIFN0cmluZyBpbnB1dFN0
cmluZyA9IHRvV1RGU3RyaW5nKHRvV0soY2hhcmFjdGVyKSk7CisgICAgYXV0byBpbnB1dFN0cmlu
ZyA9IHRvV1RGU3RyaW5nKGNoYXJhY3Rlcik7CiAgICAgYXV0byBtb2RpZmllckZsYWdzID0gcGFy
c2VNb2RpZmllckFycmF5KG1fY29udGV4dC0+anNDb250ZXh0KCksIG1vZGlmaWVyQXJyYXkpOwog
CiAgICAgZm9yIChhdXRvJiBtb2RpZmllckZsYWcgOiBtb2RpZmllckZsYWdzKQpAQCAtNzI3LDcg
KzcwOCw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjphcHBseUF1dG9jb3JyZWN0aW9u
KEpTU3RyaW5nUmVmIG5ld1N0cmluZywgSlNTdHJpbmdSCiAgICAgdW5zaWduZWQgY2FsbGJhY2tJ
RCA9IG1fY29udGV4dC0+cHJlcGFyZUZvckFzeW5jVGFzayhjYWxsYmFjaywgQ2FsbGJhY2tUeXBl
Tm9uUGVyc2lzdGVudCk7CiAKICAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3ID0gdGhp
cy0+d2ViVmlldygpOwotICAgIFt3ZWJWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246dG9XVEZTdHJp
bmcodG9XSyhuZXdTdHJpbmcpKSB0b1N0cmluZzp0b1dURlN0cmluZyh0b1dLKG9sZFN0cmluZykp
IHdpdGhDb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9uZ1RoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0geworICAgIFt3ZWJWaWV3IGFwcGx5QXV0b2NvcnJl
Y3Rpb246dG9XVEZTdHJpbmcobmV3U3RyaW5nKSB0b1N0cmluZzp0b1dURlN0cmluZyhvbGRTdHJp
bmcpIHdpdGhDb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9uZ1RoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewogICAgICAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBtYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9uZ1RoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewogICAgICAgICAgICAgLy8gYXBwbHlBdXRv
Y29ycmVjdGlvbiBjYW4gY2FsbCBpdHMgY29tcGxldGlvbiBoYW5kbGVyIHN5bmNocm9ub3VzbHks
CiAgICAgICAgICAgICAvLyB3aGljaCBtYWtlcyBVSVNjcmlwdENvbnRyb2xsZXIgdW5oYXBweSAo
c2VlIGJ1ZyAxNzI4ODQpLgpAQCAtMTE1Nyw3ICsxMTM4LDcgQEAgYm9vbCBVSVNjcmlwdENvbnRy
b2xsZXJJT1M6OmlzU2hvd2luZ0RhdGFMaXN0U3VnZ2VzdGlvbnMoKSBjb25zdAogCiB2b2lkIFVJ
U2NyaXB0Q29udHJvbGxlcklPUzo6c2V0S2V5Ym9hcmRJbnB1dE1vZGVJZGVudGlmaWVyKEpTU3Ry
aW5nUmVmIGlkZW50aWZpZXIpCiB7Ci0gICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dEtleWJvYXJkSW5wdXRNb2RlSWRlbnRpZmllcih0b1dURlN0cmluZyh0b1dLKGlkZW50aWZpZXIp
KSk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEtleWJvYXJkSW5wdXRNb2Rl
SWRlbnRpZmllcih0b1dURlN0cmluZyhpZGVudGlmaWVyKSk7CiB9CiAKIC8vIEZJWE1FOiBXcml0
ZSB0aGlzIGluIHRlcm1zIG9mIEhJREV2ZW50R2VuZXJhdG9yIG9uY2Ugd2Uga25vdyBob3cgdG8g
cmVzZXQgY2FwcyBsb2NrIHN0YXRlCkBAIC0xMTc4LDcgKzExNTksNyBAQCBib29sIFVJU2NyaXB0
Q29udHJvbGxlcklPUzo6a2V5Ym9hcmRJc0F1dG9tYXRpY2FsbHlTaGlmdGVkKCkgY29uc3QKIAog
SlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9sbGVySU9TOjphdHRhY2htZW50SW5mbyhKU1N0cmlu
Z1JlZiBqc0F0dGFjaG1lbnRJZGVudGlmaWVyKQogewotICAgIGF1dG8gYXR0YWNobWVudElkZW50
aWZpZXIgPSB0b1dURlN0cmluZyh0b1dLKGpzQXR0YWNobWVudElkZW50aWZpZXIpKTsKKyAgICBh
dXRvIGF0dGFjaG1lbnRJZGVudGlmaWVyID0gdG9XVEZTdHJpbmcoanNBdHRhY2htZW50SWRlbnRp
Zmllcik7CiAgICAgX1dLQXR0YWNobWVudCAqYXR0YWNobWVudCA9IFt3ZWJWaWV3KCkgX2F0dGFj
aG1lbnRGb3JJZGVudGlmaWVyOmF0dGFjaG1lbnRJZGVudGlmaWVyXTsKICAgICBfV0tBdHRhY2ht
ZW50SW5mbyAqYXR0YWNobWVudEluZm8gPSBhdHRhY2htZW50LmluZm87CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW0gYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tCmluZGV4IDA2NzJiNTgxYmY2
NWI1YWQ5YTJiODVmZWE4NjE2NDhmMjIzZWI0YzUuLjEwMjcyODg0MDg0ZDJjMTAyMDhjZmEwNzE0
ZjFiMTBjNWVmYzBhMGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL0V2
ZW50U2VuZGVyUHJveHkubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRT
ZW5kZXJQcm94eS5tbQpAQCAtMjcyLDIwICsyNzIsMTAgQEAgc3RhdGljIE5TVGltZUludGVydmFs
IGFic29sdXRlVGltZUZvckV2ZW50VGltZShkb3VibGUgY3VycmVudEV2ZW50VGltZSkKIAogRXZl
bnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVzdENvbnRy
b2xsZXIpCiAgICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RDb250cm9sbGVyKQotICAgICwgbV90
aW1lKDApCi0gICAgLCBtX3Bvc2l0aW9uKCkKLSAgICAsIG1fbGVmdE1vdXNlQnV0dG9uRG93bihm
YWxzZSkKLSAgICAsIG1fY2xpY2tDb3VudCgwKQotICAgICwgbV9jbGlja1RpbWUoMCkKLSAgICAs
IG1fY2xpY2tQb3NpdGlvbigpCi0gICAgLCBtX2NsaWNrQnV0dG9uKGtXS0V2ZW50TW91c2VCdXR0
b25Ob0J1dHRvbikKLSAgICAsIGV2ZW50TnVtYmVyKDApCiB7CiB9CiAKLUV2ZW50U2VuZGVyUHJv
eHk6On5FdmVudFNlbmRlclByb3h5KCkKLXsKLX0KK0V2ZW50U2VuZGVyUHJveHk6On5FdmVudFNl
bmRlclByb3h5KCkgPSBkZWZhdWx0OwogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZUNs
aWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKIHsKQEAgLTM5NCw3ICszODQsNyBAQCBzdGF0
aWMgdm9pZCBoYW5kbGVGb3JjZUV2ZW50U3luY2hyb25vdXNseShOU0V2ZW50ICpldmVudCkKIAog
UmV0YWluUHRyPE5TRXZlbnQ+IEV2ZW50U2VuZGVyUHJveHk6OmJlZ2luUHJlc3N1cmVFdmVudChp
bnQgc3RhZ2UpCiB7Ci0gICAgUmV0YWluUHRyPEV2ZW50U2VuZGVyU3ludGhldGljRXZlbnQ+IGV2
ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVz
c3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24u
eSkKKyAgICBhdXRvIGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQg
YWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9u
LngsIG1fcG9zaXRpb24ueSkKICAgICAgICAgZ2xvYmFsTG9jYXRpb246KFttX3Rlc3RDb250cm9s
bGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpIGNvbnZlcnRSZWN0VG9TY3JlZW46
TlNNYWtlUmVjdChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgMSwgMSldLm9yaWdpbikKICAg
ICAgICAgc3RhZ2U6c3RhZ2UKICAgICAgICAgcHJlc3N1cmU6MC41CkBAIC00MDksNyArMzk5LDcg
QEAgUmV0YWluUHRyPE5TRXZlbnQ+IEV2ZW50U2VuZGVyUHJveHk6OmJlZ2luUHJlc3N1cmVFdmVu
dChpbnQgc3RhZ2UpCiAKIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5OjpwcmVz
c3VyZUNoYW5nZUV2ZW50KGludCBzdGFnZSwgZmxvYXQgcHJlc3N1cmUsIEV2ZW50U2VuZGVyUHJv
eHk6OlByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBSZXRhaW5QdHI8
RXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudD4gZXZlbnQgPSBhZG9wdE5TKFtbRXZlbnRTZW5kZXJT
eW50aGV0aWNFdmVudCBhbGxvY10gaW5pdFByZXNzdXJlRXZlbnRBdExvY2F0aW9uOk5TTWFrZVBv
aW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQorICAgIGF1dG8gZXZlbnQgPSBhZG9wdE5T
KFtbRXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudCBhbGxvY10gaW5pdFByZXNzdXJlRXZlbnRBdExv
Y2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQogICAgICAgICBn
bG9iYWxMb2NhdGlvbjooW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3Jt
V2luZG93KCkgY29udmVydFJlY3RUb1NjcmVlbjpOU01ha2VSZWN0KG1fcG9zaXRpb24ueCwgbV9w
b3NpdGlvbi55LCAxLCAxKV0ub3JpZ2luKQogICAgICAgICBzdGFnZTpzdGFnZQogICAgICAgICBw
cmVzc3VyZTpwcmVzc3VyZQpAQCAtNDMxLDEwICs0MjEsMTAgQEAgdm9pZCBFdmVudFNlbmRlclBy
b3h5Ojptb3VzZUZvcmNlQ2xpY2soKQogewogICAgIHNlbmRNb3VzZURvd25Ub1N0YXJ0UHJlc3N1
cmVFdmVudHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVn
aW5QcmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBwcmVGb3JjZUNsaWNr
ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVh
c2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGZvcmNlQ2xpY2sgPSBwcmVzc3VyZUNoYW5n
ZUV2ZW50KDIsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKLSAgICBSZXRh
aW5QdHI8TlNFdmVudD4gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEs
IFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJl
c3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMSk7CisgICAgYXV0byBwcmVGb3JjZUNsaWNrID0g
cHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2lu
Zyk7CisgICAgYXV0byBmb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3Vy
ZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byByZWxlYXNpbmdQcmVzc3Vy
ZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3Jl
YXNpbmcpOwogICAgIE5TRXZlbnQgKm1vdXNlVXAgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5
cGU6TlNFdmVudFR5cGVMZWZ0TW91c2VVcAogICAgICAgICBsb2NhdGlvbjpOU01ha2VQb2ludCht
X3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAgICAgICAgbW9kaWZpZXJGbGFnczowCkBAIC00
NjgsOSArNDU4LDkgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzdGFydEFuZENhbmNlbE1vdXNl
Rm9yY2VDbGljaygpCiB7CiAgICAgc2VuZE1vdXNlRG93blRvU3RhcnRQcmVzc3VyZUV2ZW50cygp
OwogCi0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJl
RXZlbnQoMSk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGluY3JlYXNpbmdQcmVzc3VyZSA9IHBy
ZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcp
OwotICAgIFJldGFpblB0cjxOU0V2ZW50PiByZWxlYXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hh
bmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOworICAgIGF1
dG8gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKKyAgICBhdXRvIGluY3Jl
YXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJl
Y3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3Vy
ZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKICAg
ICBOU0V2ZW50ICptb3VzZVVwID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TRXZlbnRU
eXBlTGVmdE1vdXNlVXAKICAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54
LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIG1vZGlmaWVyRmxhZ3M6MApAQCAtNTAzLDkgKzQ5Myw5
IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZURvd24oKQogewogICAgIHNlbmRN
b3VzZURvd25Ub1N0YXJ0UHJlc3N1cmVFdmVudHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50
PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxO
U0V2ZW50PiBwcmVGb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNo
YW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGZvcmNl
TW91c2VEb3duID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlv
bjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2
ZW50KDEpOworICAgIGF1dG8gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwg
UHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gZm9yY2VNb3Vz
ZURvd24gPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJ
bmNyZWFzaW5nKTsKIAogICAgIE5TVmlldyAqdGFyZ2V0VmlldyA9IFttX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSBoaXRUZXN0OltiZWdpblByZXNzdXJlIGxv
Y2F0aW9uSW5XaW5kb3ddXTsKICAgICB0YXJnZXRWaWV3ID0gdGFyZ2V0VmlldyA/IHRhcmdldFZp
ZXcgOiBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKQEAg
LTUyNiw5ICs1MTYsOSBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VEb3duKCkK
IAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlVXAoKQogewotICAgIFJldGFpblB0
cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDIpOwotICAgIFJl
dGFpblB0cjxOU0V2ZW50PiBzdGFnZVR3b0V2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQ
cmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZl
bnQ+IHN0YWdlT25lRXZlbnQgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdl
RGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblBy
ZXNzdXJlRXZlbnQoMik7CisgICAgYXV0byBzdGFnZVR3b0V2ZW50ID0gcHJlc3N1cmVDaGFuZ2VF
dmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBz
dGFnZU9uZUV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVj
dGlvbjo6RGVjcmVhc2luZyk7CiAKICAgICAvLyBTaW5jZSBBcHBLaXQgZG9lcyBub3QgaW1wbGVt
ZW50IGZvcmNldXAvZG93biBhcyBtb3VzZSBldmVudHMsIHdlIG5lZWQgdG8gc2VuZCB0d28gcHJl
c3N1cmUgZXZlbnRzIHRvIGRldGVjdAogICAgIC8vIHRoZSBjaGFuZ2UgaW4gc3RhZ2UgdGhhdCBt
YXJrcyB0aG9zZSBtb21lbnRzLgpAQCAtNTUxLDggKzU0MSw4IEBAIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6bW91c2VGb3JjZUNoYW5nZWQoZmxvYXQgZm9yY2UpCiB7CiAgICAgaW50IHN0YWdlID0g
Zm9yY2UgPCAxID8gMSA6IDI7CiAgICAgZmxvYXQgcHJlc3N1cmUgPSBmb3JjZSA8IDEgPyBmb3Jj
ZSA6IGZvcmNlIC0gMTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJl
Z2luUHJlc3N1cmVFdmVudChzdGFnZSk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IHByZXNzdXJl
Q2hhbmdlZEV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudChzdGFnZSwgcHJlc3N1cmUsIFByZXNz
dXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJlc3N1cmUg
PSBiZWdpblByZXNzdXJlRXZlbnQoc3RhZ2UpOworICAgIGF1dG8gcHJlc3N1cmVDaGFuZ2VkRXZl
bnQgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KHN0YWdlLCBwcmVzc3VyZSwgUHJlc3N1cmVDaGFuZ2VE
aXJlY3Rpb246OkluY3JlYXNpbmcpOwogCiAgICAgTlNWaWV3ICp0YXJnZXRWaWV3ID0gW21fdGVz
dENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpIGhpdFRlc3Q6W2JlZ2lu
UHJlc3N1cmUgbG9jYXRpb25JbldpbmRvd11dOwogICAgIHRhcmdldFZpZXcgPSB0YXJnZXRWaWV3
ID8gdGFyZ2V0VmlldyA6IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3Jt
VmlldygpOwpAQCAtNjExLDggKzYwMSw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZv
cndhcmQoaW50IG1pbGxpc2Vjb25kcykKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjprZXlEb3du
KFdLU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIHVuc2lnbmVkIGtl
eUxvY2F0aW9uKQogewotICAgIE5TU3RyaW5nKiBjaGFyYWN0ZXIgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aENTdHJpbmc6dG9TVEQoa2V5KS5jX3N0cigpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuY29kaW5nOltOU1N0cmluZyBkZWZhdWx0Q1N0cmluZ0VuY29kaW5nXV07Cisg
ICAgTlNTdHJpbmcqIGNoYXJhY3RlciA9IHRvV1RGU3RyaW5nKGtleSk7CiAKICAgICBOU1N0cmlu
ZyAqZXZlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CiAgICAgdW5zaWduZWQgc2hvcnQga2V5Q29k
ZSA9IDA7CkBAIC04MzIsNyArODIxLDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjprZXlEb3du
KFdLU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIHVuc2kKIAogdm9p
ZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICBS
ZXRhaW5QdHI8Q0dFdmVudFJlZj4gY2dTY3JvbGxFdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0
ZVNjcm9sbFdoZWVsRXZlbnQyKDAsIGtDR1Njcm9sbEV2ZW50VW5pdExpbmUsIDIsIHksIHgsIDAp
KTsKKyAgICBhdXRvIGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGVTY3JvbGxX
aGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAyLCB5LCB4LCAwKSk7CiAKICAg
ICAvLyBTZXQgdGhlIENHRXZlbnQgbG9jYXRpb24gaW4gZmxpcHBlZCBjb29yZHMgcmVsYXRpdmUg
dG8gdGhlIGZpcnN0IHNjcmVlbiwgd2hpY2gKICAgICAvLyBjb21wZW5zYXRlcyBmb3IgdGhlIGJl
aGF2aW9yIG9mICtbTlNFdmVudCBldmVudFdpdGhDR0V2ZW50Ol0gd2hlbiB0aGUgZXZlbnQgaGFz
CkBAIC04NTksNyArODQ4LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojpjb250aW51b3VzTW91
c2VTY3JvbGxCeShpbnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiAKIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKGludCB4LCBpbnQg
eSwgaW50IHBoYXNlLCBpbnQgbW9tZW50dW0pCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+
IGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50Migw
LCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAyLCB5LCB4LCAwKSk7CisgICAgYXV0byBjZ1Njcm9s
bEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVudDIoMCwga0NHU2Ny
b2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkpOwogCiAgICAgLy8gU2V0IHRoZSBDR0V2ZW50
IGxvY2F0aW9uIGluIGZsaXBwZWQgY29vcmRzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBzY3JlZW4s
IHdoaWNoCiAgICAgLy8gY29tcGVuc2F0ZXMgZm9yIHRoZSBiZWhhdmlvciBvZiArW05TRXZlbnQg
ZXZlbnRXaXRoQ0dFdmVudDpdIHdoZW4gdGhlIGV2ZW50IGhhcwpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCmluZGV4IDY0MTc4MmNhOTdlMWRh
ZmI5MDA5MTlkYjE5YjM0NzRhNTU0Mzg4ZTUuLjVhNGU5NmI4MWVhOGNkYTA2YjM3YjQ2OGU1ODg1
OWVmNzFlYjQ2YjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRm
b3JtV2ViVmlld01hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9y
bVdlYlZpZXdNYWMubW0KQEAgLTY0LDcgKzY0LDcgQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9y
bVdlYlZpZXcoV0tXZWJWaWV3Q29uZmlndXJhdGlvbiogY29uZmlndXJhdGlvbiwgY29uc3QgVGUK
ICAgICBpZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSkKICAgICAgICAgW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0VmFsdWU6QFlFUyBmb3JLZXk6QCJXZWJL
aXQyVXNlUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEiXTsKIAotICAgIFJldGFpblB0cjxXS1dl
YlZpZXdDb25maWd1cmF0aW9uPiBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbY29uZmln
dXJhdGlvbiBjb3B5XSk7CisgICAgYXV0byBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhb
Y29uZmlndXJhdGlvbiBjb3B5XSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldFRocmVhZGVkU2Nyb2xs
aW5nRW5hYmxlZCgoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29waWVkQ29uZmlndXJhdGlv
biBwcmVmZXJlbmNlc10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyk7CiAKICAgICBO
U1JlY3QgcmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgVGVzdENvbnRyb2xsZXI6OnZpZXdXaWR0aCwg
VGVzdENvbnRyb2xsZXI6OnZpZXdIZWlnaHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQppbmRleCAxNGI3ZGM5ZDBmMjRlYzEwZTc4YWMyYjBl
MDM2NWE5ZWE2NDlhYjI2Li5iMjIyODcxY2QwYTM5MTllMzNlZDYwNmQwZjQ0MTY4ODU2OTNhMjA1
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1h
Yy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5t
bQpAQCAtMTg0LDcgKzE4NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRl
bnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0CiAgICAgaWYgKCF0
ZXN0LnVybENvbnRhaW5zKCJjb250ZW50ZXh0ZW5zaW9ucy8iKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB0ZXN0VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVS
TChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0ZXN0LnVybCgpKSk7CisgICAgYXV0byB0ZXN0VVJMID0g
YWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0ZXN0LnVybCgpKSk7
CiAgICAgTlNVUkwgKmZpbHRlclVSTCA9IFsoX19icmlkZ2UgTlNVUkwgKil0ZXN0VVJMLmdldCgp
IFVSTEJ5QXBwZW5kaW5nUGF0aEV4dGVuc2lvbjpAImpzb24iXTsKIAogICAgIF9fYmxvY2sgTlNT
dHJpbmcgKmNvbnRlbnRFeHRlbnNpb25TdHJpbmc7CkBAIC0zNzEsMTQgKzM3MSwxNCBAQCBzdGF0
aWMgTlNTZXQgKnN5c3RlbUhpZGRlbkZvbnRGYW1pbHlTZXQoKQogCiBzdGF0aWMgV0tSZXRhaW5Q
dHI8V0tBcnJheVJlZj4gZ2VuZXJhdGVGb250QWxsb3dMaXN0KCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVBcnJheVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0
ZSgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7
CiAgICAgZm9yIChOU1N0cmluZyAqZm9udEZhbWlseSBpbiBhbGxvd2VkRm9udEZhbWlseVNldCgp
KSB7CiAgICAgICAgIE5TQXJyYXkgKmZvbnRzRm9yRmFtaWx5ID0gW1tOU0ZvbnRNYW5hZ2VyIHNo
YXJlZEZvbnRNYW5hZ2VyXSBhdmFpbGFibGVNZW1iZXJzT2ZGb250RmFtaWx5OmZvbnRGYW1pbHld
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmFtaWx5SW5Gb250ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhbZm9udEZhbWlseSBVVEY4U3RyaW5nXSkp
OworICAgICAgICBhdXRvIGZhbWlseUluRm9udCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoW2ZvbnRGYW1pbHkgVVRGOFN0cmluZ10pKTsKICAgICAgICAgV0tBcnJheUFw
cGVuZEl0ZW0ocmVzdWx0LmdldCgpLCBmYW1pbHlJbkZvbnQuZ2V0KCkpOwogICAgICAgICBmb3Ig
KE5TQXJyYXkgKmZvbnRJbmZvIGluIGZvbnRzRm9yRmFtaWx5KSB7CiAgICAgICAgICAgICAvLyBG
b250IG5hbWUgaXMgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBhcnJheS4KLSAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb250TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoW1tmb250SW5mbyBvYmplY3RBdEluZGV4OjBdIFVURjhTdHJpbmddKSk7
CisgICAgICAgICAgICBhdXRvIGZvbnROYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhbW2ZvbnRJbmZvIG9iamVjdEF0SW5kZXg6MF0gVVRGOFN0cmluZ10pKTsKICAg
ICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdC5nZXQoKSwgZm9udE5hbWUuZ2V0KCkp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMzk0LDcgKzM5NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQogICAgIC8vIFRlc3RpbmcgdXNlcyBhIHBy
aXZhdGUgc2Vzc2lvbiwgd2hpY2ggaXMgbWVtb3J5IG9ubHkuIEhvd2V2ZXIgY3JlYXRpbmcgb25l
IGluc3RhbnRpYXRlcyBhIHNoYXJlZCBOU1VSTENhY2hlLAogICAgIC8vIGFuZCBpZiB3ZSBoYXZl
bid0IGNyZWF0ZWQgb25lIHlldCwgdGhlIGRlZmF1bHQgb25lIHdpbGwgYmUgY3JlYXRlZCBvbiBk
aXNrLgogICAgIC8vIE1ha2luZyB0aGUgc2hhcmVkIGNhY2hlIG1lbW9yeS1vbmx5IGF2b2lkcyB0
b3VjaGluZyB0aGUgZmlsZSBzeXN0ZW0uCi0gICAgUmV0YWluUHRyPE5TVVJMQ2FjaGU+IHNoYXJl
ZENhY2hlID0KKyAgICBhdXRvIHNoYXJlZENhY2hlID0KICAgICAgICAgYWRvcHROUyhbW05TVVJM
Q2FjaGUgYWxsb2NdIGluaXRXaXRoTWVtb3J5Q2FwYWNpdHk6MTAyNCAqIDEwMjQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlza0NhcGFjaXR5OjAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tQYXRoOm5pbF0pOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmggYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaAppbmRleCAw
ZWFiODk0OWU2YmViZmVlNjU5NDc1ODlhZmI5ZThkOWI4YmUxZWM3Li4yZDJkMWQ2Yjg0NmU2ODc4
YjBiMWViZGMxNjY3YzE3NWU5MTU2NjVmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaApAQCAtMzEsMTMgKzMxLDE0IEBAIE9CSkNf
Q0xBU1MgV0tXZWJWaWV3OwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVUlTY3JpcHRDb250
cm9sbGVyTWFjIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKK2NsYXNzIFVJU2Ny
aXB0Q29udHJvbGxlck1hYyBmaW5hbCA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSB7
CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVyTWFjKFVJU2NyaXB0Q29u
dGV4dCYgY29udGV4dCkKICAgICAgICAgOiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShjb250ZXh0
KQogICAgIHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCByZXBsYWNlVGV4dEF0UmFuZ2Uo
SlNTdHJpbmdSZWYsIGludCwgaW50KSBvdmVycmlkZTsKICAgICB2b2lkIHpvb21Ub1NjYWxlKGRv
dWJsZSwgSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgZG91YmxlIHpvb21TY2FsZSgpIGNvbnN0
IG92ZXJyaWRlOwpAQCAtNjIsNyArNjMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFjdGl2YXRl
QXRQb2ludChsb25nIHgsIGxvbmcgeSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykgb3ZlcnJpZGU7CiAK
LXByaXZhdGU6CiAgICAgTlNUYWJsZVZpZXcgKmRhdGFMaXN0U3VnZ2VzdGlvbnNUYWJsZVZpZXco
KSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJ
U2NyaXB0Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2Ny
aXB0Q29udHJvbGxlck1hYy5tbQppbmRleCBjZDExMzI5YTY1NDFkN2I0ZWI3N2Q3ZWMxNDY4OGU5
OTIxZjI3YzUzLi5iNWNiNTE4MTUwNTllN2EwOTNhMTQyMzk5MWU4OTE3ZTNlZDMwOTA4IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMu
bW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFj
Lm1tCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJNYWM6OmNvbXBs
ZXRlQmFja1N3aXBlKEpTVmFsdWVSZWYgY2FsbGJhY2spCiAKIHZvaWQgVUlTY3JpcHRDb250cm9s
bGVyTWFjOjpwbGF5QmFja0V2ZW50U3RyZWFtKEpTU3RyaW5nUmVmIGV2ZW50U3RyZWFtLCBKU1Zh
bHVlUmVmIGNhbGxiYWNrKQogewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3RyZWFtID0g
YWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBldmVudFN0
cmVhbSkpOworICAgIGF1dG8gc3RyZWFtID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBldmVudFN0cmVhbSkpOwogICAgIHBsYXlCYWNrRXZlbnRzKHdl
YlZpZXcoKSwgbV9jb250ZXh0LCAoX19icmlkZ2UgTlNTdHJpbmcgKilzdHJlYW0uZ2V0KCksIGNh
bGxiYWNrKTsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="425670"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409853</attachid>
            <date>2020-09-27 12:44:44 -0700</date>
            <delta_ts>2020-09-27 12:57:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200927124443.patch</filename>
            <type>text/plain</type>
            <size>697830</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJmZWY0NTFlYS4u
NDE0MjQxMWNiYTZhMmY1NjU2YWU4MDZlZDJjZWYzZDhjOWMxZTBkNCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0MSBAQAorMjAy
MC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlmeWluZywgYnV0IGV2ZW4g
bW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVzdAorICAgICAgICBjb2Rl
IGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkgYW5kIHBhc3RlIHJhdGhl
ciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0ZXIgdGhlIHJlZmFjdG9y
aW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlzIGNvZGUgaXMgd3JpdHRl
biB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGluZyBmb3IgZWFjaCBmdW5j
dGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0
KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0NsYXNzIHdpdGggdGhpcy4g
UmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBjbGVhciB0aGlzIHBhc3Nl
cyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKHVp
RWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBSZW1vdmVkIHVubmVlZGVk
IGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3aGljaCBzdGFydHMgb3V0
IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9y
RHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IpOiBV
c2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoX3JldHVybkV4
cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2UgYW5kIGF1dG8uCisgICAg
ICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAo
Z2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChHQ0NvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6IFJlcGxhY2VkIGdldEpT
Q2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFpblB0ciB0byBtYWtlIGl0
IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVyLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKGVuY29kZUhv
c3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChleGVjQ29tbWFu
ZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAob3Zl
cnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKHF1ZXVlTG9hZENhbGxi
YWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5nQ2FsbGJhY2spOiBEaXR0
by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFs
T2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKTogUmVw
bGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRy
IHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisg
ICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25z
dCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAg
ICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQpOiBTaW1wbGlmaWVk
IHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sp
OiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAorICAgICAgICB0YWJsZSB2
YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBuZWVkIHRvIGJlIG9iamVj
dHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogRGl0dG8u
CisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4K
KyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTogVXNlIGFycmF5TGVuZ3Ro
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDogVXBkYXRlZCBmb3IgdGhl
IGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3Jt
TmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoY3JlYXRlRW1w
dHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50
TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
bGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
VmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oOiBSZW1vdmVkIHVubmVl
ZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGguCisgICAgICAgIFJlbW92
ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIgSlNWYWx1ZUlzT2JqZWN0
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSBj
b25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoY3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09iamVjdC4KKyAgICAgICAg
KHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSBjb25zdCk6
IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRnJh
bWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERlbGVnYXRlIGRpZENsZWFy
V2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6CisgICAgICAgIFVzZSBhdXRv
LiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LiBTaW1wbGlmaWVkIG9i
amVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0TlMgaW5zdGVhZCBvZiBy
ZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRDbGVhcldpbmRvd09iamVj
dEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNlIGNyZWF0ZUpTU3RyaW5n
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAg
ICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVuZ3RoLgorCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHA6CisgICAgICAgIChXVFI6
OnRvT3B0aW9uYWxCb29sKTogUmVuYW1lZCBmcm9tIEpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbC4K
KyAgICAgICAgKFdUUjo6dG9PcHRpb25hbERvdWJsZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpt
YWtlVmFsdWUpOiBBZGRlZCB3aXRoIG92ZXJsb2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAg
ICAgUmVwbGFjZWQgSlNWYWx1ZVRvTnVsbGFibGVCb29sZWFuIGFuZCBKU1ZhbHVlTWFrZVN0cmlu
Z09yTnVsbC4KKyAgICAgICAgKFdUUjo6Y3JlYXRlSlNTdHJpbmcpOiBBZGRlZCB3aXRoIG92ZXJs
b2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAgICAgKFdUUjo6cHJvcGVydHkpOiBBZGRlZC4K
KyAgICAgICAgKFdUUjo6c3RyaW5nUHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Ym9v
bGVhblByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChXVFI6Om51bWVyaWNQcm9wZXJ0eSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjpvYmplY3RQcm9wZXJ0eSk6IFJlZmFjdG9yZWQgdG8gY2FsbCBw
cm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBBZGRlZC4KKyAgICAgICAgKFdU
Ujo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Y2FsbCk6
IFJlZmFjdG9yZWQgdG8gbGV0IG9iamVjdFByb3BlcnR5IGRvIG1vcmUgb2YgdGhlIG51bGwgY2hl
Y2tpbmcuCisgICAgICAgIChXVFI6OmNhbGxDb25zdHJ1Y3Rvcik6IERpdHRvLgorICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaDogVXBkYXRlZCBmb3IgdGhlIGFi
b3ZlLgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5o
OiBSZWR1Y2VkIGluY2x1ZGVzIGEgYml0LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU1dyYXBwZXIuaDogQWRkZWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisKKyAg
ICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQu
Y3BwOgorICAgICAgICAoVUlTY3JpcHRDb250ZXh0OjpVSVNjcmlwdENvbnRleHQpOiBQYXNzIGZl
d2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LgorICAgICAgICAoVUlTY3JpcHRDb250
ZXh0OjpydW5VSVNjcmlwdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKFVJU2NyaXB0
Q29udGV4dDo6b2JqZWN0RnJvbVJlY3QgY29uc3QpOiBVc2Ugc2V0UHJvcGVydHkuCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmg6
IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHA6CisgICAgICAgIChXVFI6
OnRvRGV2aWNlT3JpZW50YXRpb24pOiBVc2UgY3JlYXRlSlNTdHJpbmcgYW5kIEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcuCisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6bWFr
ZVdpbmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKworICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbToKKyAgICAg
ICAgKC1bTGF5b3V0VGVzdFNwZWxsQ2hlY2tlciBzZXRSZXN1bHRzRnJvbUpTVmFsdWU6aW5Db250
ZXh0Ol0pOiBVc2UgY3JlYXRlSlNTdHJpbmcKKyAgICAgICAgYW5kIHJlbW92ZWQgdW5uZWVkZWQg
dXNlIG9mIGxyb3VuZGwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlG
dW5jdGlvbnMuaDogQWRkZWQuIENvbnRhaW5zIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworICAgICAg
ICBmb3IgZGVhbGluZyB3aXRoIFdLRGljdGlvbmFyeVJlZi4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oOiBJbml0aWFsaXplIGRhdGEgbWVtYmVycy4KKwor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwOgor
ICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9uKTogVXNlIE9wdGlv
bmFsIGluc3RlYWQgb2Ygc2VwYXJhdGUgYm9vbC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdp
bmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG06CisgICAgICAgIChf
Z2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZpbGUpOiBVc2Ugc3RhdGljIGluaXRpYWxpemF0aW9uIGFu
ZCBhIGxhbWJkYSBpbnN0ZWFkIG9mCisgICAgICAgIGFuIGlmIHN0YXRlbWVudCB0byBpbml0aWFs
aXplLgorICAgICAgICAoX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yKTogVXNlIHRvT3B0aW9uYWxC
b29sIGFuZCBjcmVhdGVKU1N0cmluZy4gQWxzbyBhZGRlZAorICAgICAgICBzdXBwb3J0IGZvciBu
dWxsYWJsZSBkb3VibGVzIGFuZCB1c2VkIGF1dG8gYSBiaXQgbW9yZS4KKyAgICAgICAgKF9yZXR1
cm5FeHByZXNzaW9uKTogVXNlIG1ha2VWYWx1ZS4KKworICAgICAgICAqIEluamVjdGVkQnVuZGxl
L0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOiBNYWRlIHRoZSBvcHRpb25hbCBhcmd1bWVudHMgdG8g
dGhlCisgICAgICAgIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIGZ1bmN0aW9uICJkb3VibGU/
IiBpbnN0ZWFkIG9mICJvYmplY3QiLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6Z2V0
TWVudUl0ZW1DaGlsZHJlbkNhbGxiYWNrKTogVXNlIGF1dG8gYW5kIG5vdCBKU1ZhbHVlVG9PYmpl
Y3QuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogTW92ZWQgdG8gSlNCYXNpY3MuaC9jcHAu
CisgICAgICAgIChXVFI6OnBhcnNlVG91Y2hNb2RpZmllcik6IEFkZGVkLiBGYWN0b3JlZCBvdXQg
b2YgdGhlCisgICAgICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9kaWZpZXIg
ZnVuY3Rpb24uCisgICAgICAgIChXVFI6OnBhcnNlTW9kaWZpZXJBcnJheSk6IFVzZSBjcmVhdGVK
U1N0cmluZyBhbmQgcmVtb3ZlIHVubmVlZGVkIGlnbm9yZWQKKyAgICAgICAgZXhjZXB0aW9uIG91
dCBhcmd1bWVudCwgc2luY2UgdGhhdCBpcyBvcHRpb25hbC4gQWxzbyBhZGRlZCBvdmVybG9hZCB0
aGF0CisgICAgICAgIGdldHMgdGhlIGNvbnRleHQuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp+RXZlbnRTZW5kaW5nQ29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgIChXVFI6OmNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkpOiBVc2UgYWRvcHRX
SyBhbmQgc2V0VmFsdWUuIFJldHVybiBhIFdLUmV0YWluUHRyLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZURvd24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlVXApOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8p
OiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlcy4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNsaWNrKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnN0YXJ0QW5kQ2Fu
Y2VsTW91c2VGb3JjZUNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6Om1vdXNlRm9yY2VEb3duKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VVcCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpsZWFwRm9yd2FyZCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNr
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlS2V5RG93bk1lc3Nh
Z2VCb2R5KTogVXNlIHNldFZhbHVlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjprZXlEb3duKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24p
OiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZVNjcm9sbEJ5KTogVXNlIHNldFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcyk6IFVzZQorICAgICAgICBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3Vz
TW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQKKyAgICAgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRl
eHRDbGljayk6IFVzZSBhdXRvIGFuZCBub3QgSlNWYWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RS
Ojp0b01vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMpOiBVc2UgYm9vbGVhblByb3BlcnR5LgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjphZGRUb3VjaFBvaW50KTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6dXBkYXRlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoUG9pbnRSYWRpdXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hTdGFy
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaE1v
dmUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hF
bmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hD
YW5jZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2xl
YXJUb3VjaFBvaW50cyk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpyZWxlYXNlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9F
dmVudFNlbmRpbmdDb250cm9sbGVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAgICAg
RGVsZXRlZCB2YXJpb3VzIHVubmVlZGVkIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6
R0NDb250cm9sbGVyOjpHQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0Nv
bnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0NvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgIEFsc28gbWFya2VkIHRoZSBjbGFzcyBm
aW5hbC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkQ3JlYXRlUGFn
ZSk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRS
ZWNlaXZlTWVzc2FnZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cG9zdFBhZ2VNZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpy
ZXBvcnRMaXZlRG9jdW1lbnRzKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKTogVXNlIGRpY3Rpb25hcnlW
YWx1ZSwKKyAgICAgICAgYm9vbGVhblZhbHVlLCBwb3N0UGFnZU1lc3NhZ2UsIHZhbHVlLCBhbmQg
bW9yZSB0byBzdHJlYW1saW5lLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6Ym9vbGVh
bkZvcktleSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzdHJpbmdG
b3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0
aW5nKTogVXNlIGJvb2xlYW5WYWx1ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRv
bmUpOiBVc2Ugc3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpjbG9z
ZU90aGVyUGFnZXMpOiBVc2Ugc2V0VmFsdWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpkdW1wVG9TdGRFcnIpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlCisgICAgICAgIChX
VFI6OkluamVjdGVkQnVuZGxlOjpvdXRwdXRUZXh0KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUpOiBVc2UgcG9z
dFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdEFkZENocm9t
ZUlucHV0RmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RS
ZW1vdmVDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0Rm9jdXNXZWJWaWV3KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpwb3N0U2V0V2luZG93SXNLZXkpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRWaWV3U2l6ZSk6IFVzZSBzZXRWYWx1ZSBhbmQgdG9X
Sy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNh
dGlvbkNsaWNrKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnBvc3RTZXRBZGRzVmlzaXRlZExpbmtzKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UsCisgICAgICAgIGFuZCB1c2UgT3B0aW9uYWwgaW5z
dGVhZCBvZiBib29sL2RvdWJsZSBwYWlycy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFVzZSBwb3N0UGFn
ZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjppc0dlb2xvY2F0aW9uUHJv
dmlkZXJBY3RpdmUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQgY29uc3Qp
OiBVc2UgdG9XSyBhbmQgdWludDY0VmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
OjpzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1p
c3Npb25Gb3JPcmlnaW4pOiBVc2Ugc2V0VmFsdWUKKyAgICAgICAgYW5kIHBvc3RQYWdlTWVzc2Fn
ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbik6IFVz
ZXQgc2V0VmFsdWUKKyAgICAgICAgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUpOiBVc2Ugc2V0VmFsdWUgYW5kIHBv
c3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEhpZGRlbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0Q2FjaGVNb2RlbCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1
ZSBjb25zdCk6IFVzZSB0b1dLIGFuZCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpwcm9jZXNzV29ya1F1ZXVlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlQmFja05hdmlnYXRpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24pOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZCk6IFVzZSBzZXRWYWx1
ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cXVldWVSZWxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVl
TG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVOb25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OnBvc3RNZXNzYWdlKTog
QWRkZWQuIE92ZXJsb2FkcyBmb3IgbWFueSB0eXBlcyB0byBrZWVwIGNhbGxlciBjb2RlIHN0cmVh
bWxpbmVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OnBvc3RQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaDogVXBkYXRlZCBmb3IgdGhlIGFib3Zl
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6cHJvcGVy
dHlWYWx1ZURvdWJsZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlSW50KTog
RGl0dG8uCisgICAgICAgIChXVFI6Om51bWVyaWNXaW5kb3dQcm9wZXJ0eSk6IFJlbmFtZWQgZnJv
bSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZSBmb3IgYnJldml0eQorICAgICAgICBhbmQgZm9y
IGNvbnNpc3RlbmN5IHdpdGggSlNCYXNpY3MuaCBmdW5jdGlvbnMuCisgICAgICAgIChXVFI6OmR1
bXBQYXRoKTogVXNlIHN0cmluZ1Byb3BlcnR5LCBvYmplY3RQcm9wZXJ0eSwgYW5kIG1ha2VTdHJp
bmcuCisgICAgICAgIChXVFI6OnJhbmdlVG9TdHIpOiBVc2UgYXV0bywgbnVtZXJpY1Byb3BlcnR5
LCBhbmQgbWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6TmF2aWdhdGlvblR5cGVUb1N0cmluZyk6
IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpzdHJpbmcpOiBSZW5hbWVkIGZyb20gc2VjdXJpdHlP
cmlnaW5Ub1N0ci4gVXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OmZyYW1lVG9TdHIpOiBV
c2UgYXV0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVz
dCk6IFJlbW92ZWQgdW5uZWVkZWQgbG9jYWwuCisgICAgICAgIChXVFI6OmR1bXBGcmFtZURlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OmR1
bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6ZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBVc2Ug
YXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOiBV
cGRhdGUgZm9yIG5hbWUgY2hhbmdlLgorICAgICAgICAoV1RSOjp0b0pTKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6aGFzRG9j
dW1lbnRFbGVtZW50KTogVXNlIG9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHksCisgICAgICAgIGFuZCBwYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93
T2JqZWN0LgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24pOiBTdHJlYW1saW5lIGNvZGUgYSBiaXQuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOiBVc2UgbWFrZVN0
cmluZy4KKyAgICAgICAgKFdUUjo6bGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5RdW90YSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKTogRGl0dG8uCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpUZXN0UnVubmVyKTogVXNlIHRvV0suCisgICAgICAgIChX
VFI6OnBhZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6bWFpbkZyYW1lKTogQWRkZWQuCisgICAg
ICAgIChXVFI6Om1haW5KU0NvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNwbGF5
QW5kVHJhY2tSZXBhaW50cyk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjp0b1dLKTogQWRkZWQg
b3ZlcmxvYWQgZm9yIGRvdWJsZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlV0tEaWN0aW9uYXJ5KTog
QWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0dXJuVmFs
dWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmlu
Z0Jvb2xlYW4pOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VXaXRoUmV0dXJuVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRkZWQuCisgICAgICAgIChX
VFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdVSW50NjQpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNob3VsZER1bXBQaXhlbHMgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldER1bXBQaXhl
bHMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6d2hhdFRvRHVtcCBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5n
VUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXaGF0VG9EdW1wKTogVXNlIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdhaXRV
bnRpbERvbmUpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2hvdWxkV2FpdFVudGlsRG9uZSBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hv
dWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmV4ZWNDb21tYW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OmZpbmRPcHRpb25zRnJv
bUFycmF5KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLCBhbmQgY3JlYXRlSlNTdHJp
bmcuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmcpOiBVc2UgcGFnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZmluZFN0cmluZ01hdGNoZXNJblBhZ2UpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVwbGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKTog
VXNlIG1haW5KU0NvbnRleHQgYW5kIGFycmF5TGVuZ3RoIGFuZAorICAgICAgICByZW1vdmVkIHVu
bmVlZGVkIGNhbGwgdG8gc3RkOjpyb3VuZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBbGxEYXRhYmFzZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKTogVXNlIHBhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VG
b3JPcmlnaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6c3RyaW5nQXJyYXlUb0pTKTogVHdlYWtl
ZCBjb2Rpbmcgc3R5bGUgYSBiaXQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om9yaWdpbnNX
aXRoQXBwbGljYXRpb25DYWNoZSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc0NvbW1hbmRFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dENhbk9wZW5XaW5kb3dzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TWVkaWFEZXZpY2VzRW5hYmxlZCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJSVENNRE5TSUNFQ2FuZGlk
YXRlc0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0Q3VzdG9t
VXNlckFnZW50KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9kZXJuTWVkaWFDb250cm9sc0Vu
YWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViR0wyRW5hYmxl
ZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXcml0YWJsZVN0cmVhbUFQ
SUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VHJhbnNmb3Jt
U3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRS
ZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRHZW5lcmljQ3VlQVBJRW5hYmxlZCk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSk6IFVz
ZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFBs
dWdpbnNFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVyZW5jZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNQYWdlQm94VmlzaWJsZSk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcik6IFJlbW92ZWQgbG9jYWwuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldEF1ZGlvUmVzdWx0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVy
dHkuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IpOiBVc2UgcGFn
ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQpOiBVc2UgcmFuZ2Ut
YmFzZWQgZm9yIGxvb3AuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKTogVXNlIG1haW5GcmFtZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGV4dERpcmVjdGlvbik6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiBj
b25zdCk6CisgICAgICAgIFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyRGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKToKKyAgICAgICAgVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayk6
IENoYW5nZWQgbWFwIHRvIHN0b3JlIG9iamVjdHMgaW5zdGVhZCBvZiB2YWx1ZXMuCisgICAgICAg
IChXVFI6OmNhbGxUZXN0UnVubmVyQ2FsbGJhY2spOiBTaW1wbGlmeSBzaW5jZSBtYXAgaGFzIG9i
amVjdHMuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
clRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0QWx3YXlzQWNjZXB0Q29va2llcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMpOiBV
c2UgYXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxl
U2hlZXRFbmFibGVkKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24pOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpkZW55V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25Q
ZXJtaXNzaW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIE9wdGlvbmFsPGRvdWJs
ZT4gaW5zdGVhZCBvZiBib29sL2RvdWJsZQorICAgICAgICBwYWlycywgbGV0dGluZyB0aGUgSURM
IGJpbmRpbmdzIGRvIHRoZSB3b3JrIGZvciB1cy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKTogUmVtb3ZlZCBsb2Nh
bC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNEb2luZ01lZGlhQ2FwdHVyZSBjb25zdCk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3Jp
Z2luKTogUmVtb3ZlZCBsb2NhbHMuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9y
T3JpZ2luKTogREl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlldyk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnF1
ZXVlTG9hZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1M
U3RyaW5nKTogUmVtb3ZlZCBhIGxvY2FsLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1
ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVldWVO
b25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFJl
amVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cyk6CisgICAgICAgIFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGRM
b2dEb3dubG9hZENhbGxiYWNrcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCBjb25zdCk6IFVzZSBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEJsb2NrQWxsUGx1Z2lucyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6ZmFpbE5leHROZXdDb2RlQmxvY2spOiBVc2UgbWFpbkpTQ29udGV4
dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdDb21waWxlcyk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpuZXZlcklubGluZUZ1bmN0aW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xp
Y3lBZnRlckRlbGF5KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVM
aW1pdHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkRG93bmxv
YWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOiBV
c2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHQpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0Q2FsbGJhY2spOiBVc2UgbWFpbkpT
Q29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dlZE1lbnVBY3Rpb25z
KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLAorICAgICAgICBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppbnN0YWxsQ3VzdG9tTWVudUFjdGlv
bik6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFy
U3RhdGlzdGljc0RhdGFGb3JEb21haW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRh
YmFzZSk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlz
U3RhdGlzdGljc0VwaGVtZXJhbCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVy
bmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1
Z01vZGUpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljKTog
RGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
VmVyeVByZXZhbGVudFJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpp
c1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlSVRQRGF0YWJhc2UpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJl
ZCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbik6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1l
dHJ5Q2FsbGJhY2spOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Vw
ZGF0ZUNvb2tpZUJsb2NraW5nKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5KTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRp
c3RpY3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBVc2UgcG9zdE1l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RlbGV0ZUNvb2tp
ZXNGb3JIb3N0KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpoYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9u
KTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVy
KTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3Rh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6bWFrZURvbWFpbnNWYWx1ZSk6IEZhY3Rv
cmVkIG91dC4gVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNh
bGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayk6IFVzZSBtYWtlRG9t
YWluc1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpsb2FkZWRTdWJyZXNvdXJjZURv
bWFpbnMpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxE
aWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2spOiBVc2UgbWFrZURvbWFp
bnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNs
ZWFyTW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpy
ZW1vdmVNb2NrTWVkaWFEZXZpY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
cmVzZXRNb2NrTWVkaWFEZXZpY2VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjppc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCk6IFVzZQorICAgICAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6Y29ubmVjdE1vY2tHYW1lcGFkKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZERldGFpbHMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRCdXR0b25W
YWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxl
cyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAg
ICAgIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9w
ZW5QYW5lbEZpbGVzTWVkaWFJY29uKTogVXNlIG1haW5KU0NvbnRleHQgYW5kIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRp
YWxzKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRP
TUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyRE9NQ2FjaGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
Omhhc0RPTUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9v
bGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9tQ2FjaGVTaXplKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKTogVXNlIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1h
bmlmZXN0VGhlbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
aW5qZWN0VXNlclNjcmlwdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZv
clRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphZGRU
ZXN0S2V5VG9LZXljaGFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
blVwS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6a2V5RXhpc3Rz
SW5LZXljaGFpbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxi
YWNrQ2FsbHNDb3VudCk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJu
aW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREaXNtaXNzSmF2
YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KTogVXNlCisgICAgICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFib3J0TW9kYWwpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbik6IFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBZENsaWNrQXR0cmlidXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRB
ZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRl
c3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T2Zmc2NyZWVuQ2Fu
dmFzRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6Omhhc0FwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwQm91
bmRTZXNzaW9uKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFwcEJvdW5kRG9tYWlucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxl
bmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAgICAgIGFuZCB0b1dLLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpwb3N0TWVzc2FnZSk6IEFkZGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4g
QWxzbyBjaGFuZ2VkCisgICAgICAgIG92ZXJyaWRlUHJlZmVyZW5jZSBvdCBhIHN0YXRpYyBtZW1i
ZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXh0SW5wdXRDb250cm9s
bGVyOjpUZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6flRleHRJbnB1dENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2Jh
bE9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IERlbGV0ZWQuIFVz
ZSB0aGUgb25lIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChXVFI6OmNyZWF0ZUNvbXBv
c2l0aW9uSGlnaGxpZ2h0RGF0YSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3Ig
dGhlIGFib3ZlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9p
b3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoV1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVs
ZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMp
OiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9m
QXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb21wdXRlZFJvbGVTdHJpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24gY29uc3Qp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNj
cmlwdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0ZvY3VzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5k
c0ZvclJhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJv
d3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mVmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4gY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVl
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZG9jdW1lbnRVUkkpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbiBjb25z
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxh
cHNlZCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NpbmdsZUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNNdWx0aUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2UpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OkV2ZW50U2VuZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0
aW9uLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSk6
IERlbGV0ZWQuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21h
Yy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tOgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5hbWVkIGZyb20gbWFrZUFycmF5UmVmRm9yQXJyYXku
CisgICAgICAgIChXVFI6Om1ha2VKU09iamVjdCk6IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5h
bWVkIGZyb20gbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkuCisgICAgICAgIChXVFI6Om1ha2VW
YWx1ZVJlZkZvclZhbHVlKTogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICAoV1RSOjpz
ZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBV
c2UgdG9XVEZTdHJpbmcKKyAgICAgICAgYW5kIGFycmF5TGVuZ3RoLgorCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5h
bWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAo
V1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVsZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZy
b20gSlNCYXNpY3MuaCBpbnN0ZWFkLgorICAgICAgICAoV1RSOjpjb252ZXJ0VmVjdG9yVG9PYmpl
Y3RBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6Om1ha2VKU0FycmF5KTogUmVuYW1lZCBm
cm9tIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5LgorICAgICAgICAoV1RSOjpzZWxlY3RUZXh0
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nIGFuZCBh
cnJheUxlbmd0aC4KKyAgICAgICAgKFdUUjo6c2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVGb3JDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dIZWFkZXJzIGNvbnN0KTogVXNlIG1ha2VKU0FycmF5LgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEFycmF5QXR0cmlidXRl
VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBVc2UgY3JlYXRlSlNT
dHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9j
dW1lbnRVUkkpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlu
c3BlY3RvclRlc3RTdHViVVJMKTogUmVtb3ZlIGxvY2Fscy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmg6IEFkZGVkIHRvV0tTdHJpbmcgb3ZlcmxvYWQgdGhh
dCBjb252ZXJ0cyBmcm9tCisgICAgICAgIGEgSlNWYWx1ZVJlZiwgSlNTdHJpbmdSZWYsIG9yIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhbmQgdG9XSyBvdmVybG9hZCB0aGF0IGNvbnZlcnRzCisg
ICAgICAgIGZyb20gYSBjb25zdCBjaGFyKi4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVD
b250ZXh0Q29uZmlndXJhdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6
IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUxpdmVE
b2N1bWVudHNBZnRlclRlc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmNoZWNrRm9yV29ybGRMZWFrcyk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpjb250ZW50RXh0
ZW5zaW9uSlNPTlBhdGgpOiBVc2UgdG9TVEQuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
Ojpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdCk6IFVzZSB0b1dLLgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIHN0cmluZ1ZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdCk6IFVz
ZSBkaWN0aW9uYXJ5VmFsdWUgYW5kCisgICAgICAgIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOiBV
c2UgZGljdGlvbmFyeVZhbHVlLAorICAgICAgICBzdHJpbmdWYWx1ZSwgdWludDY0VmFsdWUsIGRv
dWJsZVZhbHVlLCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
aWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgdG9X
Sy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBVc2UgYXV0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24pOiBSZW1vdmVkIGxvY2FsLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogVXNl
IGF1dG8gYW5kIHRvV1RGU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2YgdG9TVEQuCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBP
cHRpb25hbCBpbnN0ZWFkIG9mIHBhaXJzCisgICAgICAgIG9mIGJvb2wgYW5kIGRvdWJsZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2VyTWVkaWFQZXJtaXNz
aW9uRm9yT3JpZ2luKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
ZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJ
bk5ldHdvcmtQcm9jZXNzKTogVXNlIHRvV0suCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6cG9zdFBhZ2VN
ZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpUZXN0SW5jb3Zh
dGlvbik6IFVzZSB0b1dURlN0cmluZy4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmNy
ZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOiBVc2UgYXV0byBhbmQgc2V0VmFsdWUuCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjppbnZva2UpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFu
ZCBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlIHBvc3RQYWdlTWVzc2FnZQorICAgICAgICBhbmQg
c3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3lu
Y2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlCisgICAgICAgIGRpY3Rpb25h
cnlWYWx1ZSwgYm9vbGVhblZhbHVlLCB2YWx1ZSwgc3RyaW5nVmFsdWUsIGRvdWJsZVZhbHVlLCBh
bmQKKyAgICAgICAgb3B0aW9uYWxEb3VibGVWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OnVpU2NyaXB0RGlkQ29tcGxldGUpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFuZCBzZXRW
YWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZEJlZ2luU3dpcGUpOiBVc2Ug
cG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6d2lsbEVuZFN3
aXBlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRFbmRTd2lwZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3ZlU3dpcGVTbmFw
c2hvdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6bm90aWZ5RG93bmxv
YWREb25lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0
YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVt
b3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxk
RG93bmdyYWRlUmVmZXJyZXIpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdEludm9jYXRpb246OmRpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRUb1NhbWVTaXRl
U3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
U2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
SW52b2NhdGlvbjo6ZGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QmxvY2tDb29r
aWVzRm9ySG9zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
U3RhdGlzdGljc0RlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlv
bjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldExhc3RTZWVuKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRNZXJnZVN0YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0RXhwaXJlZFN0YXRpc3RpYyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0SGFzSGFk
VXNlckludGVyYWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpk
aWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92ZUFsbFNlc3Npb25DcmVk
ZW50aWFscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QXBw
Qm91bmREb21haW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpwZXJm
b3JtQ3VzdG9tTWVudUFjdGlvbik6IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFk
ZGVkIEpTQmFzaWNzLmggdG8gRGljdGlvbmFyeUZ1bmN0aW9ucy5oIHRvIGFwcHJvcHJpYXRlIHRh
cmdldHMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV1RSOjpTY3JpcHRJdGVtOjpTY3JpcHRJdGVtKTogVXNlIHRvV0suCisgICAg
ICAgIChXVFI6OldvcmtRdWV1ZU1hbmFnZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29j
b2EuaDogTWFrZSBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbToKKyAgICAgICAgKFdUUjo6
VUlTY3JpcHRDb250cm9sbGVyQ29jb2E6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IFVzZSB0b1dURlN0
cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5oOiBNYXJrZWQgdGhlIGNsYXNzIGZpbmFsIGFuZCBtYWRlCisgICAgICAgIG1vc3QgZnVu
Y3Rpb25zIHByaXZhdGUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogRGVsZXRlZC4g
VXNlIHRoZSBvbmUgaW4gSlNCYXNpY3MuaC4KKyAgICAgICAgKFdUUjo6cGFyc2VNb2RpZmllckFy
cmF5KTogVXNlIHRoZSBuZXcgdG9XVEZTdHJpbmcgb3ZlcmxvYWQuCisgICAgICAgIChXVFI6OlVJ
U2NyaXB0Q29udHJvbGxlcklPUzo6dHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZCk6
IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94
eS5tbToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eSk6
IEluaXRpYWxpemUgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIChXVFI6OkV2ZW50
U2VuZGVyUHJveHk6OmtleURvd24pOiBVc2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaDogTWFya2VkIHRoZSBjbGFz
cyBmaW5hbCBhbmQgbWFkZQorICAgICAgICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCiAyMDIw
LTA5LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
cnVuLXdlYmtpdC10ZXN0cyBjb2RlIHRoYXQgc3RyaXBzIHRyYWlsaW5nIHNwYWNlcyB3aGVuIGNv
bXBhcmluZyBleHBlY3RlZC50eHQgZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCAxYTBjMTY3MDZiMmFlNDI2MGUzMmQyOTA0
NDliZjJkNjVjZmEzZGZhLi45ZTI0MGU1NTljYTQ1MjMzNzQ3OTg0YTZiYTkzNTE1NGFhY2NkN2Rk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2luY2x1
ZGUgIkpTQmFzaWNzLmgiCiAKIC8vIFN0YXRpYyBWYWx1ZSBHZXR0ZXJzCiAKQEAgLTQ3LDE1ICs0
OCw5IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFJvb3RFbGVtZW50Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPCiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250
ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlclN0ciA9
IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlciIpKTsKLSAgICAKLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlNDbGFzcygpOwot
ICAgIEpTVmFsdWVSZWYgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJPYmplY3QgPSBKU09iamVjdE1h
a2UoY29udGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVm
KTsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlclN0ci5nZXQoKSwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJPYmpl
Y3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShj
b250ZXh0LCAiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCBKU09iamVjdE1ha2UoY29udGV4dCwg
Y3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlzKSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGxv
Z0ZvY3VzRXZlbnRzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVm
KikKQEAgLTE1Miw5ICsxNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRQbGF0Zm9ybU5hbWVD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpcwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBwbGF0Zm9ybU5hbWUuZ2V0KCkpOwogfQogCi1K
U0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWlu
UHRyPEpTQ2xhc3NSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKCkK
IHsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CiAgICAg
ICAgIHsgImxvZ0ZvY3VzRXZlbnRzIiwgbG9nRm9jdXNFdmVudHNDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJsb2dWYWx1ZUNoYW5nZUV2ZW50cyIsIGxvZ1ZhbHVlQ2hhbmdlRXZlbnRzQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAibG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMiLCBsb2dT
Y3JvbGxpbmdTdGFydEV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkBAIC0xNjYsMjEgKzE2MSwxOCBA
QCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKICAgICAg
ICAgeyAiZW5hYmxlRW5oYW5jZWRBY2Nlc3NpYmlsaXR5IiwgZW5hYmxlRW5oYW5jZWRBY2Nlc3Np
YmlsaXR5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAgICB9OwotCi0g
ICAgc3RhdGljIEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBKU1N0YXRpY1ZhbHVlIHZhbHVlc1tdID0gewogICAgICAgICB7ICJmb2N1c2VkRWxl
bWVudCIsIGdldEZvY3VzZWRFbGVtZW50Q2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
cm9vdEVsZW1lbnQiLCBnZXRSb290RWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgImVuaGFuY2VkQWNjZXNzaWJpbGl0eUVuYWJsZWQiLCBnZXRFbmhhbmNlZEFjY2Vzc2liaWxp
dHlFbmFibGVkQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAicGxhdGZvcm1OYW1lIiwg
Z2V0UGxhdGZvcm1OYW1lQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwLCAw
IH0KICAgICB9OwotCi0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlv
biA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBzdGF0aWMg
Y29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xh
c3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCAwLCB2YWx1ZXMsIGZ1
bmN0aW9ucywKICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICAgIH07
Ci0KLSAgICByZXR1cm4gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1
cm4gYWRvcHQoSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbikpOwogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IDFkYzdkM2I1NjNhMTU0
ZjRjZTliZjdhMzAzMGM4YzVhNzY5N2YzOWEuLjhhMjg3YzQ4YjFkZjUzNmI0NzViNjE4NDE3YzI2
MTM1ZmIzODYxMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcigpOwogICAgIH5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwogCi0g
ICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBDb250cm9sbGVyIE1ldGhvZHMgLSBw
bGF0Zm9ybS1pbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMKICAgICBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IHJvb3RFbGVtZW50KCk7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKKyAgICBzdGF0
aWMgSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gY3JlYXRlSlNDbGFzcygpOwogCiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIEhXSU5FVkVOVEhPT0sgbV9mb2N1c0V2ZW50SG9vayB7IG51bGxwdHIgfTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKaW5k
ZXggMGU1YTUwZjZiOWQzY2U1Y2E3N2JhNDQ4Njg3YzAwOWNiYjE3NWQyMC4uOGVmODVlZWRmMDg0
ZDY3NjIyNzFjYWYyYzhmNDRhYjg1NDc5MjY3MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCBzdGF0aWMg
SlNWYWx1ZVJlZiB1aUVsZW1lbnRDb3VudEZvclNlYXJjaFByZWRpY2F0ZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LAogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHN0YXJ0RWxlbWVu
dCA9IG51bGxwdHI7CiAgICAgYm9vbCBpc0RpcmVjdGlvbk5leHQgPSB0cnVlOwogICAgIEpTVmFs
dWVSZWYgc2VhcmNoS2V5ID0gbnVsbHB0cjsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
c2VhcmNoVGV4dCA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNlYXJj
aFRleHQ7CiAgICAgYm9vbCB2aXNpYmxlT25seSA9IGZhbHNlOwogICAgIGJvb2wgaW1tZWRpYXRl
RGVzY2VuZGFudHNPbmx5ID0gZmFsc2U7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gNSAmJiBh
cmd1bWVudENvdW50IDw9IDYpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Jp
bmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbSBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQppbmRleCBlY2U1MWVh
MzlhNTE2ODM1NGJkNTY5NDYzNTkwODZkOTAyMmVhMTlkLi4xNGM2MjcwZjgyMzFkYzBmMjZhMDVl
Njk1ZGE4NDdiZGY4ZTQ4YzhlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9CaW5k
aW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCkBAIC0xLDQgKzEs
NCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzMSwxMCArNDMxLDEwIEBAIHN1
YiBfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IKIHsKICAgICBteSAoJHNlbGYsICR0eXBlLCAkYXJn
dW1lbnROYW1lKSA9IEBfOwogCi0gICAgcmV0dXJuICJKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4o
Y29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAk
dHlwZS0+aXNOdWxsYWJsZTsKKyAgICByZXR1cm4gInRvT3B0aW9uYWxCb29sKGNvbnRleHQsICRh
cmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHR5cGUtPmlzTnVs
bGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5h
bWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuICIkYXJndW1lbnRO
YW1lIiBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKLSAgICByZXR1cm4gImFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikpIiBpZiAkJHNl
bGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJjcmVh
dGVKU1N0cmluZyhjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0
b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOwogICAgIHJldHVybiAiSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0t
PklzUHJpbWl0aXZlVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuICJ0byIgLiBfaW1wbGVtZW50YXRp
b25DbGFzc05hbWUoJHR5cGUpIC4gIihjb250ZXh0LCAkYXJndW1lbnROYW1lKSI7CiB9CkBAIC00
NzIsMTEgKzQ3MiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBteSAoJHNlbGYsICRy
ZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAiSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1bmRlZmluZWQiOwot
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lv
bn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5cGUtPmlz
TnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufSki
IGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlwZS0+aXNOdWxs
YWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAke2V4cHJlc3Np
b259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAiJHtl
eHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7CiAgICAgcmV0dXJu
ICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJCRzZWxme2Nv
ZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwotICAgIHJldHVybiAi
SlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKKyAgICBy
ZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIgaWYgJCRzZWxm
e2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwogICAgIHJldHVybiAi
dG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwogfQogCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvR0NDb250cm9sbGVyLmNwcAppbmRleCA0YTM3YmYzYTEzZGE0Y2FlZWE0MGEwY2Y4
YTcwOWZlNThkMzRlYTRjLi5lZDJjNmMxOWU1MzNlZTBmMmZlNDk4ZjNlNTUzMDY0NDcwOGNiMzBk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNzIgKzI5LDQ5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+Ci0KLUdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKCkKLXsKLX0KLQot
R0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKCkKLXsKLX0KKyNpbXBvcnQgIkpTQmFzaWNzLmgi
CiAKIC8vIFN0YXRpYyBGdW5jdGlvbnMKIAogc3RhdGljIEpTVmFsdWVSZWYgY29sbGVjdENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBHQ0NvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3QoKTsKKyAgICBhdXRvJiBjb250
cm9sbGVyID0gKnN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0KCk7CiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBjb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7
Ci0gICAgYm9vbCB3YWl0VW50aWxEb25lID0gZmFsc2U7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQg
PiAwKQotICAgICAgICB3YWl0VW50aWxEb25lID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMF0pOwotCi0gICAgR0NDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBj
b250cm9sbGVyLT5jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVudGlsRG9uZSk7Ci0KKyAg
ICBhdXRvJiBjb250cm9sbGVyID0gKnN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgYm9vbCB3YWl0VW50aWxEb25lID0gYXJndW1l
bnRDb3VudCA+IDAgJiYgSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pOwor
ICAgIGNvbnRyb2xsZXIuY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKHdhaXRVbnRpbERvbmUpOwog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpT
VmFsdWVSZWYgZ2V0SlNPYmplY3RDb3VudENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKLSAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxHQ0Nv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIHNpemVfdCBq
c09iamVjdENvdW50ID0gY29udHJvbGxlci0+Z2V0SlNPYmplY3RDb3VudCgpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGpzT2JqZWN0Q291bnQpOworICAgIGF1dG8m
IGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwg
Y29udHJvbGxlci5nZXRKU09iamVjdENvdW50KCkpOwogfQogCiAvLyBPYmplY3QgQ3JlYXRpb24K
IAotdm9pZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9p
ZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7
Ci0gICAgYXV0byBnY0NvbnRyb2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiR0NDb250cm9sbGVyIikpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdl
dEpTQ2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGdjQ29udHJvbGxlck9iamVjdCA9IEpTT2JqZWN0
TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NS
ZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIGdj
Q29udHJvbGxlclN0ci5nZXQoKSwgZ2NDb250cm9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24p
OworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgIkdDQ29udHJvbGxl
ciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCksIHRoaXMpKTsK
IH0KIAotSlNDbGFzc1JlZiBHQ0NvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQorSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4gR0NDb250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKCkKIHsKLSAgICBzdGF0aWMg
SlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CiAgICAgICAgIHsgImNvbGxlY3Qi
LCBjb2xsZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiY29sbGVjdE9uQWx0ZXJuYXRl
VGhyZWFkIiwgY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAiZ2V0SlNPYmplY3RDb3VudCIsIGdldEpTT2JqZWN0Q291bnRDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07Ci0KLSAgICBzdGF0aWMgSlNDbGFzc0RlZmlu
aXRpb24gY2xhc3NEZWZpbml0aW9uID0gewotICAgICAgICAwLCBrSlNDbGFzc0F0dHJpYnV0ZU5v
bmUsICJHQ0NvbnRyb2xsZXIiLCAwLCAwLCBzdGF0aWNGdW5jdGlvbnMsCisgICAgc3RhdGljIGNv
bnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtKU0NsYXNz
QXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIGZ1bmN0aW9ucywKICAgICAgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICAgIH07Ci0KLSAgICByZXR1cm4gSlND
bGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gYWRvcHQoSlNDbGFzc0Ny
ZWF0ZSgmZGVmaW5pdGlvbikpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
R0NDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaAppbmRl
eCA2NDI0Mzg0ZGY1MzBlOGMxZmRhZThmYjYxMzExYmYwYWRjNGE2YThmLi4zN2FhNDZhNzc0Y2Uz
ZTcwYjg3ODlkNDQzZjFlNDE4MTRhYzU4ZjVjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9HQ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xs
ZXIuaApAQCAtMjYsMTkgKzI2LDE1IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgR0ND
b250cm9sbGVyX2gKLSNkZWZpbmUgR0NDb250cm9sbGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKIGNsYXNz
IEdDQ29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgR0NDb250cm9sbGVyKCk7Ci0gICAgfkdDQ29udHJvbGxlcigpOwotCi0gICAgdm9pZCBtYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmpl
Y3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZik7CiAKICAgICAvLyBDb250cm9sbGVyIE1ldGhvZHMgLSBwbGF0ZnJvbSBpbmRl
cGVuZGFudCBpbXBsZW1lbnRhdGlvbnMKICAgICB2b2lkIGNvbGxlY3QoKSBjb25zdDsKQEAgLTQ2
LDcgKzQyLDUgQEAgcHVibGljOgogICAgIHNpemVfdCBnZXRKU09iamVjdENvdW50KCkgY29uc3Q7
CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOworICAgIHN0
YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7CiB9OwotCi0jZW5k
aWYgLy8gR0NDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKaW5kZXgg
NWU1MzVhZjFkZWFkODQyZDJlZjRmNWY3NjYwMmM4M2E5NTBiNzY1Mi4uMzdmNjkxY2I3OTZiNTYz
OTI2MjgwNGVlM2Y0MDFjYWJkYWU4ZjBlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5j
cHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UnVubmVyLmgiCiAKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0
U3VwcG9ydC5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZUl0
ZW0uaCIKQEAgLTM4LDEwICszOSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcElu
bGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5QnVmZmVyVmlldy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ1Rlc3RSdW5uZXJVdGlscy5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2Jq
ZWN0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1ZNSW5saW5lcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRp
b24uaD4KQEAgLTQ4OSw3ICs0ODcsNiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkaXNwbGF5Q2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKUwogCiBzdGF0
aWMgSlNWYWx1ZVJlZiBkaXNwbGF5QW5kVHJhY2tSZXBhaW50c0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRh
dGlvbgogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5kaXNw
bGF5QW5kVHJhY2tSZXBhaW50cygpOwogCkBAIC00OTgsMTIgKzQ5NSwxMCBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBkaXNwbGF5QW5kVHJhY2tSZXBhaW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVu
dGF0aW9uCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNv
bnRleHQsIGFyZ3VtZW50c1swXSk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAg
ICAgYXV0byBlbmNvZGVkSG9zdE5hbWUgPSBjb250cm9sbGVyLT5jb3B5RW5jb2RlZEhvc3ROYW1l
KG5hbWUuZ2V0KCkpOwpAQCAtNTEyLDIyICs1MDcsMTIgQEAgc3RhdGljIEpTVmFsdWVSZWYgZW5j
b2RlSG9zdE5hbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3QKIAogc3RhdGljIEpTVmFsdWVSZWYgZXhlY0NvbW1hbmRDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCiB7Ci0gICAgLy8gSGFzIE1hYyAmIFdpbmRvd3MgaW1wbGVtZW50YXRp
b25zLgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byBuYW1lID0gYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7Ci0KKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNv
bnRleHQsIGFyZ3VtZW50c1swXSk7CiAgICAgLy8gSWdub3JpbmcgdGhlIHNlY29uZCBwYXJhbWV0
ZXIgKHVzZXJJbnRlcmZhY2UpLCBhcyB0aGlzIGNvbW1hbmQgZW11bGF0ZXMgYSBtYW51YWwgYWN0
aW9uLgotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHZhbHVlOwotICAgIGlmIChhcmd1
bWVudENvdW50ID49IDMpIHsKLSAgICAgICAgdmFsdWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZhbHVlID0gYWRvcHQoSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLQorICAgIGF1dG8gdmFsdWUgPSBXVFI6OmNyZWF0
ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50Q291bnQgPiAyID8gYXJndW1lbnRzWzJdIDogbnVs
bHB0cik7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+
ZXhlY0NvbW1hbmQobmFtZS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwpAQCAtNTQxLDExICs1MjYsOCBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBmaW5kU3RyaW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byB0
YXJnZXQgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
ZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIEpTT2JqZWN0UmVm
IG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRp
b24pOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byB0YXJnZXQgPSBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgYXV0byBvcHRpb25zID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgbnVsbHB0cik7CiAKICAgICBU
ZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihj
b250ZXh0LCBjb250cm9sbGVyLT5maW5kU3RyaW5nKGNvbnRleHQsIHRhcmdldC5nZXQoKSwgb3B0
aW9ucykpOwpAQCAtNTY2LDggKzU0OCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGlzQ29tbWFuZEVu
YWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuCiAgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKQEAgLTU3OSwxMCAr
NTYwLDggQEAgc3RhdGljIEpTVmFsdWVSZWYgb3ZlcnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGYKICAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDIpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAg
IGF1dG8ga2V5ID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNb
MF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgYXV0byB2YWx1
ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8ga2V5ID0gV1RSOjpj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOworICAgIGF1dG8gdmFsdWUgPSBX
VFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1sxXSk7CiAKICAgICAvLyBTaG91
bGQgdXNlIGA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9
dHJ1ZSBdIC0tPmAgaW5zdGVhZC4KICAgICBSRUxFQVNFX0FTU0VSVCghSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXkuZ2V0KCksICJXZWJLaXRVc2VzQmFja0ZvcndhcmRDYWNoZVByZWZl
cmVuY2VLZXkiKSk7CkBAIC02NjIsMTUgKzY0MSwxMCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1
ZUxvYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIHVybCA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBhdXRvIHVybCA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICBBU1NFUlQo
ISpleGNlcHRpb24pOwogCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRhcmdldDsKLSAg
ICBpZiAoYXJndW1lbnRDb3VudCA+PSAyKSB7Ci0gICAgICAgIHRhcmdldCA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKLSAgICAg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGFyZ2V0ID0gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKyAgICBhdXRvIHRhcmdldCA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDEgPyBhcmd1bWVu
dHNbMV0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5xdWV1ZUxvYWQodXJsLmdldCgpLCB0YXJnZXQuZ2V0KCkpOwpAQCAtNjkyLDcg
KzY2Niw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZEhUTUxTdHJpbmdDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYKICAgICAgICAgYmFzZVVSTCA9IGFkb3B0
KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsK
ICAgICAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKICAgICB9IGVsc2UKLSAgICAgICAgYmFzZVVS
TCA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisgICAgICAgIGJh
c2VVUkwgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAKQEAgLTIwNDUsMzQgKzIwMTksMjQgQEAgc3RhdGljIEpTVmFsdWVSZWYgcnVuVUlT
Y3JpcHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWMK
IAogc3RhdGljIHZvaWQgdGVzdFJ1bm5lck9iamVjdEZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVj
dCkKIHsKLSAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5kZXJlZigp
OworICAgIHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0
KSktPmRlcmVmKCk7CiB9CiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12b2lkIFRlc3RSdW5uZXI6
Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRv
d09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXN0UnVubmVyOjptYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gdGVzdFJ1bm5lclN0
ciA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXN0UnVubmVyIikpOwog
ICAgIHJlZigpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpTQ2xhc3MoKTsKLSAg
ICBKU1ZhbHVlUmVmIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QgPSBKU09iamVjdE1ha2UoY29u
dGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVmKTsKLQot
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCB0ZXN0UnVubmVy
U3RyLmdldCgpLCBsYXlvdXRUZXN0Q29udG9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOwor
ICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRlc3RSdW5uZXIiLCBK
U09iamVjdE1ha2UoY29udGV4dCwgY3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlzKSk7CiB9CiAK
LUpTQ2xhc3NSZWYgVGVzdFJ1bm5lcjo6Z2V0SlNDbGFzcygpCitKU1JldGFpblB0cjxKU0NsYXNz
UmVmPiBUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNW
YWx1ZSogc3RhdGljVmFsdWVzID0gVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCk7Ci0gICAgc3Rh
dGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9IFRlc3RSdW5uZXI6OnN0YXRp
Y0Z1bmN0aW9ucygpOwotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRp
b24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIlRlc3RSdW5uZXIiLCAw
LCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBzdGF0aWMgY29uc3QgSlNDbGFz
c0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVO
b25lLCAiVGVzdFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcygpLCBzdGF0aWNGdW5jdGlvbnMoKSwK
ICAgICAgICAgMCwgdGVzdFJ1bm5lck9iamVjdEZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwCiAgICAgfTsKLQotICAgIHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRp
b24pOworICAgIHJldHVybiBhZG9wdChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKSk7CiB9CiAK
IC8vIENvbnN0YW50cwpAQCAtMjEwNyw5ICsyMDcxLDkgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0
UkVOREVSX1RSRUVfU0hPV19MQVlFUl9GUkFHTUVOVFMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2IKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgMzIpOwogfQogCi1KU1N0
YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQorY29uc3QgSlNTdGF0aWNWYWx1
ZSogVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1
ZSBzdGF0aWNWYWx1ZXNbXSA9IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTU3RhdGljVmFsdWUg
dmFsdWVzW10gPSB7CiAgICAgICAgIHsgImRpZENhbmNlbENsaWVudFJlZGlyZWN0IiwgZ2V0RGlk
Q2FuY2VsQ2xpZW50UmVkaXJlY3QsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAidGltZW91dCIsIGdl
dFRpbWVvdXRDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJnbG9iYWxGbGFnIiwgZ2V0
R2xvYmFsRmxhZ0NhbGxiYWNrLCBzZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlTm9uZSB9LApAQCAtMjEyNywxMiArMjA5MSwxMiBAQCBKU1N0YXRpY1ZhbHVlKiBUZXN0
UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogICAgICAgICB7ICJSRU5ERVJfVFJFRV9TSE9XX0xBWUVS
X0ZSQUdNRU5UUyIsIGdldFJFTkRFUl9UUkVFX1NIT1dfTEFZRVJfRlJBR01FTlRTLCAwLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IH0sCiAgICAgICAgIHsgMCwgMCwgMCwgMCB9CiAgICAgfTsKLSAgICByZXR1cm4gc3RhdGljVmFs
dWVzOworICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKLUpTU3RhdGljRnVuY3Rpb24qIFRlc3RSdW5u
ZXI6OnN0YXRpY0Z1bmN0aW9ucygpCitjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBUZXN0UnVubmVy
OjpzdGF0aWNGdW5jdGlvbnMoKQogewotICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRp
Y0Z1bmN0aW9uc1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNGdW5jdGlvbiBm
dW5jdGlvbnNbXSA9IHsKICAgICAgICAgeyAiYWJvcnRNb2RhbCIsIGFib3J0TW9kYWxDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJhZGREaXNhbGxvd2VkVVJMIiwgYWRkRGlzYWxsb3dlZFVS
TENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZFVSTFRvUmVkaXJlY3QiLCBhZGRVUkxU
b1JlZGlyZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKQEAgLTIyOTcsNyArMjI2MSw3IEBAIEpTU3RhdGlj
RnVuY3Rpb24qIFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsgMCwgMCwg
MCB9CiAgICAgfTsKIAotICAgIHJldHVybiBzdGF0aWNGdW5jdGlvbnM7CisgICAgcmV0dXJuIGZ1
bmN0aW9uczsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKEpTU3Ry
aW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCkBAIC0yMzQyLDE0ICsyMzA2LDEx
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6aWdub3JlTGVnYWN5V2ViTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKCkKIAogdm9pZCBUZXN0UnVubmVyOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZp
cmVkKCkKIHsKLSAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gIkZBSUw6IFRpbWVkIG91dCB3YWl0
aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIjsKLSAgICBmcHJpbnRmKHRlc3RSZXN1
bHQsICIlcyIsIG1lc3NhZ2UpOworICAgIGZwdXRzKCJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBm
b3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcbiIsIHRlc3RSZXN1bHQpOwogCi0gICAgYXV0byBh
Y2N1bXVsYXRlZExvZ3MgPSBnZXRBbmRSZXNldEFjY3VtdWxhdGVkTG9ncygpOwotICAgIGlmICgh
YWNjdW11bGF0ZWRMb2dzLmlzRW1wdHkoKSkgewotICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdl
ID0gIkxvZ3MgYWNjdW11bGF0ZWQgZHVyaW5nIHRlc3QgcnVuOlxuIjsKLSAgICAgICAgZnByaW50
Zih0ZXN0UmVzdWx0LCAiJXMlc1xuIiwgbWVzc2FnZSwgYWNjdW11bGF0ZWRMb2dzLnV0ZjgoKS5k
YXRhKCkpOwotICAgIH0KKyAgICBhdXRvIGxvZ3MgPSBnZXRBbmRSZXNldEFjY3VtdWxhdGVkTG9n
cygpOworICAgIGlmICghbG9ncy5pc0VtcHR5KCkpCisgICAgICAgIGZwcmludGYodGVzdFJlc3Vs
dCwgIkxvZ3MgYWNjdW11bGF0ZWQgZHVyaW5nIHRlc3QgcnVuOlxuJXNcbiIsIGxvZ3MudXRmOCgp
LmRhdGEoKSk7CiAKICAgICBub3RpZnlEb25lKCk7CiB9CkBAIC0yNDAzLDI0ICsyMzY0LDI1IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjdW1tdWxhdGVMb2dzRm9yQ2hhbm5lbChKU1N0cmluZ1Jl
ZiBjaGFubmVsKQogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TG9nQ2hhbm5lbFRvQWNjdW11
bGF0ZSh7IGJ1ZmZlci5nZXQoKSB9KTsKIH0KIAotdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWdu
ZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFwOwordXNpbmcgQ2FsbGJhY2tNYXAgPSBXVEY6Okhh
c2hNYXA8dW5zaWduZWQsIEpTT2JqZWN0UmVmPjsKIHN0YXRpYyBDYWxsYmFja01hcCYgY2FsbGJh
Y2tNYXAoKQogewogICAgIHN0YXRpYyBDYWxsYmFja01hcCYgbWFwID0gKm5ldyBDYWxsYmFja01h
cDsKICAgICByZXR1cm4gbWFwOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmNhY2hlVGVzdFJ1bm5l
ckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQordm9pZCBUZXN0
UnVubmVyOjpjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJl
ZiBjYWxsYmFja1ZhbHVlKQogewotICAgIGlmICghY2FsbGJhY2spCisgICAgYXV0byBjb250ZXh0
ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgaWYgKCFjYWxsYmFja1ZhbHVlIHx8ICFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgY2FsbGJhY2tWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKKyAg
ICBhdXRvIGNhbGxiYWNrID0gKEpTT2JqZWN0UmVmKWNhbGxiYWNrVmFsdWU7CiAKICAgICBpZiAo
Y2FsbGJhY2tNYXAoKS5jb250YWlucyhpbmRleCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJGQUlMOiBUcmllZCB0byBpbnN0YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIgY2FsbGJhY2sgZm9y
IHRoZSBzYW1lIGV2ZW50IChpZCAlZClcbiIsIGluZGV4KTsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJGQUlMOiBUcmllZCB0byBpbnN0YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIgY2FsbGJhY2sg
Zm9yIHRoZSBzYW1lIGV2ZW50IChpZCAldSlcbiIsIGluZGV4KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7
CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFw
KCkuYWRkKGluZGV4LCBjYWxsYmFjayk7CiB9CkBAIC0yNDMwLDIyICsyMzkyLDE4IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6Y2FsbFRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvCiAgICAgaWYgKCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluRnJh
bWVKU0NvbnRleHQoKTsKLSAgICBpZiAoSlNPYmplY3RSZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSwgMCkpIHsKLSAgICAgICAg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaywgSlNDb250ZXh0R2V0R2xv
YmFsT2JqZWN0KGNvbnRleHQpLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIDApOworICAgIGF1
dG8gY29udGV4dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOworICAgIGlmIChhdXRvIGNhbGxiYWNr
ID0gY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSkgeworICAgICAgICBKU09iamVjdENhbGxBc0Z1
bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4
dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7CiAgICAgICAgIEpTVmFsdWVV
bnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogICAgIH0KIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MoKQogewotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0ZXIgOiBjYWxsYmFj
a01hcCgpKSB7Ci0gICAgICAgIGlmIChKU09iamVjdFJlZiBjYWxsYmFjayA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBpdGVyLnZhbHVlLCAwKSkKLSAgICAgICAgICAgIEpTVmFsdWVVbnByb3Rl
Y3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIH0KLQorICAgIGF1dG8gY29udGV4dCA9IG1haW5G
cmFtZUpTQ29udGV4dCgpOworICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBjYWxsYmFja01hcCgp
LnZhbHVlcygpKQorICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsK
ICAgICBjYWxsYmFja01hcCgpLmNsZWFyKCk7CiB9CiAKQEAgLTI1MDgsMTYgKzI0NjYsMTEgQEAg
dm9pZCBUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxlcyhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogewogICAgIGlmICghSlNWYWx1ZUlzQXJyYXkoY29udGV4
dCwgZmlsZXNWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0UmVmIGZpbGVz
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGZpbGVzVmFsdWUsIG51bGxwdHIpOwotICAgIHN0
YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGZpbGVzTGVuZ3RoVmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIGZpbGVzLCBsZW5ndGhQcm9wZXJ0eS5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgZmlsZXNMZW5ndGhWYWx1
ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGZpbGVzID0gKEpTT2JqZWN0UmVmKWZpbGVz
VmFsdWU7CisgICAgYXV0byBmaWxlc0xlbmd0aCA9IFdUUjo6YXJyYXlMZW5ndGgoY29udGV4dCwg
ZmlsZXMpOwogCiAgICAgbV9vcGVuUGFuZWxGaWxlcy5jbGVhcigpOwotICAgIGF1dG8gZmlsZXNM
ZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBmaWxl
c0xlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
c0xlbmd0aDsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbGVzTGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgSlNWYWx1ZVJlZiBmaWxlVmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBmaWxlcywgaSwgbnVsbHB0cik7CiAgICAgICAgIGlmICghSlNW
YWx1ZUlzU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAppbmRleCAxNjcxMjA1OGExMGNlOTg5YTNjOGQ0M2Q2
NDRmOWE5ZTMwMGQ0MGRlLi5lODU3YWE0ZGNkYTI5N2M0ZmUzZTc2YWM3ZTllYWYwNWEwOWM4MGIw
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGNsZWFudXAoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIHZv
aWQgYWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpOwogICAgIGNvbnN0IHN0ZDo6c2V0
PHN0ZDo6c3RyaW5nPiYgYWxsb3dlZEhvc3RzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd2VkSG9z
dHM7IH0KQEAgLTQ5Nyw3ICs0OTcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dmVjdG9yPGNoYXI+
IG1fb3BlblBhbmVsRmlsZXNNZWRpYUljb247CiAjZW5kaWYKIAotICAgIHN0YXRpYyBKU0NsYXNz
UmVmIGdldEpTQ2xhc3MoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVz
KCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOworICAg
IHN0YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7CisgICAgc3Rh
dGljIGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlcygpOworICAgIHN0YXRpYyBjb25z
dCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKIH07CmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0gYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KaW5k
ZXggNjFlMDFmNWVkNzY3NWE4MzBiYTZmMzhmOGVjZjU4NDBmYmM4MzljYi4uYjU2NjZlMmM2ZGZl
MGQ4YWU4MWY0Yzk0OTNmNDhlODZmNmEwYTE0YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbQpAQCAtMjQsMTIgKzI0
LDEzIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJEdW1wUmVuZGVyVHJl
ZS5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKIAogI2ltcG9ydCAiQWNj
ZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKyNpbXBvcnQg
IkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViSFRNTFZpZXdQcml2YXRlLmg+CkBAIC0zOCw2ICszOSw4IEBAIEBp
bnRlcmZhY2UgV2ViSFRNTFZpZXcgKFByaXZhdGUpCiAtIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNl
ZFVJRWxlbWVudDsKIEBlbmQKIAorbmFtZXNwYWNlIFdUUiB7CisgICAgCiBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQogewogfQpAQCAtMTU1LDUgKzE1
OCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVuaGFuY2VkQWNjZXNzaWJpbGl0
eUVuYWJsZWQoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnBsYXRmb3JtTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJpb3MiKSk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoImlvcyIpOworfQorCiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9p
b3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCmluZGV4IGUzYzkwOWQ2ZGQyNzAzOTI4M2Vh
Y2NkMzJhZTQwOTI2Y2U4YTllNjQuLmFhNmZmYzkxN2IzODQ3ZjAyMmU4ZWI2ZGU3ZmIzZGZhZDJh
OTdlZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50SU9TLm1tCkBAIC0yNCwxMSArMjQsMTEgQEAKICAqLwogCiAjaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmgiCiAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlDb21tb25NYWMuaCIKICNp
bXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgiCisjaW1wb3J0ICJEdW1w
UmVuZGVyVHJlZS5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRH
cmFudWxhcml0eS5oPgpAQCAtNDEsMTEgKzQxLDYgQEAKIAogdHlwZWRlZiB2b2lkICgqQVhQb3N0
ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlv
biwgdm9pZCogY29udGV4dCk7CiAKLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKLSAgICA6IG1fZWxlbWVudChlbGVtZW50KQotewotfQot
CiBAaW50ZXJmYWNlIE5TT2JqZWN0IChVSUFjY2Vzc2liaWxpdHlIaWRkZW4pCiAtIChpZClhY2Nl
c3NpYmlsaXR5SGl0VGVzdDooQ0dQb2ludClwb2ludDsKIC0gKGlkKWFjY2Vzc2liaWxpdHlMaW5r
ZWRFbGVtZW50OwpAQCAtMTEyLDkgKzEwNywxMSBAQCBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlclByaXZhdGUpCiAtIChDR1BhdGhSZWYpX2FjY2Vzc2li
aWxpdHlQYXRoOwogQGVuZAogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKQorbmFtZXNwYWNlIFdUUiB7CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKKyAgICA6IG1fZWxlbWVudChl
bGVtZW50KQogewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KG51bGxwdHIsIDApKTsKIH0KIAogc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb25j
YXRlbmF0ZUF0dHJpYnV0ZUFuZFZhbHVlKE5TU3RyaW5nICphdHRyaWJ1dGUsIE5TU3RyaW5nICp2
YWx1ZSkKQEAgLTE4MCw3ICsxNzcsNiBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmZpZWxkc2V0QW5jZXN0b3JFbGVtZW50KCkKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dXJsKCkKIHsKICAgICBOU1VSTCAqdXJsID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5
VVJMXTsKQEAgLTI5MSw3ICsyODcsNiBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmxpbmtlZEVsZW1lbnQoKQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW5zaWduZWQg
aW5kZXgpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAwOwogfQogCkBA
IC01NTgsNyArNTUzLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3MKIHsKICAgICBpZCB0ZXh0
TWFya2VycyA9IG1hcmtlclJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpOwogICAgIGlm
ICghdGV4dE1hcmtlcnMgfHwgIVt0ZXh0TWFya2VycyBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNs
YXNzXV0pCi0gICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgICAgIHJl
dHVybiBjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJpbmdGb3JU
ZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCkBAIC02ODEs
MjIgKzY3NiwyMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3VtZW50TGlu
a3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbAogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVt
ZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4g
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MoKQogewotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZDaGlsZHJlbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsK
KyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQogewotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJp
bmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBAIC03MTYsNyArNzExLDcg
QEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmUKICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhhdHRyaWJ1dGUsICJBWFRleHR1YWxDb250ZXh0IikpCiAgICAgICAgIHJldHVybiBb
W21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRdIGNyZWF0ZUpTU3RyaW5nUmVm
XTsKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUHJl
c3NBY3Rpb25TdXBwb3J0ZWQoKQpAQCAtNzU1LDE3ICs3NTAsMTcgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBhdHRyaWJ1dGUp
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJh
bWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3Ry
aW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9s
ZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxQ
YWdlVXAoKQpAQCAtNzg5LDE3ICs3ODQsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxQYWdlUmlnaHQoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1w
dHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3Ry
aW5nKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGl0bGUoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCkBAIC04MDksNyAr
ODA0LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRlc2NyaXB0aW9uKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Om9yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlK
U1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUoKQpAQCAt
ODE5LDcgKzgxNCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzdHJpbmdWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0KCkgY29uc3QKQEAg
LTg0OSw3ICs4NDQsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFZhbHVlKEpT
U3RyaW5nUmVmIHZhbHVlVGV4dCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24oKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQpAQCAtODY5
LDcgKzg2NCw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZCgpIGNv
bnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC04OTIs
NyArODg2LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25z
dAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAt
OTA4LDcgKzkwMSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJl
ZCgpIGNvbnN0CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpT
U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50IGluZGV4KQpAQCAtOTE4LDM3ICs5MTEs
MzcgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleChpbnQgaW5kZXgp
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3Vu
ZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0
cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVy
cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZS
b3dzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAg
IHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm93Q291bnQoKQpAQCAtOTg3LDIyICs5ODAsMTkgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNv
bCwKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwgaW50IHkp
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXNzaXN0aXZlVGVjaG5vbG9neVNp
bXVsYXRlZEZvY3VzKCkKQEAgLTEwMzUsMjMgKzEwMjUsMjEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpwcmVzcygpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNs
ZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
fQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9j
dW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spCkBAIC0xMDgzLDQzICsxMDcxLDM2IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogCiBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Nl
bGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlz
aWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbigpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTEzMCwxMyArMTEx
MSwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lKCkgY29uc3QKIHsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMTUyLDI3ICsxMTMxLDIyIEBA
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpwb3B1cFZh
bHVlKCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp0YWtlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2Vs
ZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHVuc2lnbmVkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBzdGFydEVsZW1lbnQsIGJv
b2wgaXNEaXJlY3Rpb25OZXh0LCBKU1ZhbHVlUmVmIHNlYXJjaEtleSwgSlNTdHJpbmdSZWYgc2Vh
cmNoVGV4dCwgYm9vbCB2aXNpYmxlT25seSwgYm9vbCBpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkp
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAwOwogfQogCkBAIC0xMjE0
LDIzICsxMTg4LDE5IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRy
aWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGFzc0xpc3QoKSBjb25zdAogewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVm
LCBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFk
ZXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYpIGNvbnN0CiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0hlYWRl
cnMoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiB9CiAKIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVj
dGVkQ2hpbGRyZW5Db3VudCgpIGNvbnN0CkBAIC0xMjQyLDMgKzEyMTIsNSBAQCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkQ2hpbGRBdEluZGV4
KHVuc2lnbmVkKSBjbwogewogICAgIHJldHVybiAwOwogfQorCit9CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaAppbmRleCAzODUwYjQxNDQ2
M2UwMTVjNjdkNTZlZjA0YTU5MzhjOTkxYzQ3ZWQ4Li4xNWJmNTFmODRkM2U4MTgxYzAyY2Y2NjNj
NzU1MzlkYzI4YWQ5ZGQ0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNj
ZXNzaWJpbGl0eUNvbW1vbk1hYy5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5Q29tbW9uTWFjLmgKQEAgLTQxLDQgKzQxLDQgQEAgQGludGVyZmFjZSBOU1N0cmlu
ZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCiAtIChKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4pY3Jl
YXRlSlNTdHJpbmdSZWY7CiBAZW5kCiAKLWV4dGVybiBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRp
Y2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZWYs
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5l
eHQsIHVuc2lnbmVkIHJlc3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFyY2hLZXksIEpTU3RyaW5n
UmVmIHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1tZWRpYXRlRGVzY2VuZGFu
dHNPbmx5KTsKK05TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJp
YnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlZiwgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCAqc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgdW5zaWduZWQgcmVzdWx0c0xp
bWl0LCBKU1ZhbHVlUmVmIHNlYXJjaEtleSwgSlNTdHJpbmdSZWYgc2VhcmNoVGV4dCwgYm9vbCB2
aXNpYmxlT25seSwgYm9vbCBpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0gYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQppbmRleCA3OTQw
NzM4YTMzOTBlYjI3MGE2MDhiZmQwNTllMTcyYWY0Yjc5MDkyLi4wMzA2N2UyZDA4OTIxNGZiZTg0
NjY3YjI4MjRmOGNlMzE0ODBmOTg3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAi
Y29uZmlnLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAKKyNpbXBvcnQg
IkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAK
IEBpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCkBAIC01Niw3
ICs1Nyw2IEBAIE5TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJp
YnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlCiAgICAgICAgIFtwYXJhbWV0ZXJpemVk
QXR0cmlidXRlIHNldE9iamVjdDpzdGFydEVsZW1lbnQtPnBsYXRmb3JtVUlFbGVtZW50KCkgZm9y
S2V5OkAiQVhTdGFydEVsZW1lbnQiXTsKIAogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNl
dE9iamVjdDooaXNEaXJlY3Rpb25OZXh0KSA/IEAiQVhEaXJlY3Rpb25OZXh0IiA6IEAiQVhEaXJl
Y3Rpb25QcmV2aW91cyIgZm9yS2V5OkAiQVhEaXJlY3Rpb24iXTsKLQogICAgIFtwYXJhbWV0ZXJp
emVkQXR0cmlidXRlIHNldE9iamVjdDpAKHJlc3VsdHNMaW1pdCkgZm9yS2V5OkAiQVhSZXN1bHRz
TGltaXQiXTsKIAogICAgIGlmIChzZWFyY2hLZXkpIHsKQEAgLTY2LDE0ICs2Niw4IEBAIE5TRGlj
dGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENy
aXRlcmlhKEpTQ29udGV4dFJlCiAgICAgICAgICAgICBpZiAoc2VhcmNoS2V5U3RyaW5nKQogICAg
ICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtOU1N0cmluZyBzdHJpbmdXaXRoSlNT
dHJpbmdSZWY6c2VhcmNoS2V5U3RyaW5nLmdldCgpXTsKICAgICAgICAgfSBlbHNlIGlmIChKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoS2V5KSkgewotICAgICAgICAgICAgSlNPYmplY3RS
ZWYgc2VhcmNoS2V5QXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoS2V5LCBu
dWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gMDsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmluZyA9IGFk
b3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgICAgICAg
ICBKU1ZhbHVlUmVmIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwg
bnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSAmJiBK
U1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAg
ICAgICAgICAgICAgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUsIG51bGxw
dHIpKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoS2V5QXJy
YXkgPSAoSlNPYmplY3RSZWYpc2VhcmNoS2V5OworICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNo
S2V5QXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaEtleUFycmF5
KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hLZXlBcnJheUxl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlWYWx1ZSA9
IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBpLCBu
dWxscHRyKTsKICAgICAgICAgICAgICAgICBKU1N0cmluZ1JlZiBzZWFyY2hLZXlTdHJpbmcgPSBK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaEtleVZhbHVlLCBudWxscHRyKTsKQEAg
LTg4LDEyICs4MiwxMSBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICBpZiAoc2Vh
cmNoS2V5UGFyYW1ldGVyKQogICAgICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0
T2JqZWN0OnNlYXJjaEtleVBhcmFtZXRlciBmb3JLZXk6QCJBWFNlYXJjaEtleSJdOwogICAgIH0K
LSAgICAKKwogICAgIGlmIChzZWFyY2hUZXh0ICYmIEpTU3RyaW5nR2V0TGVuZ3RoKHNlYXJjaFRl
eHQpKQogICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6W05TU3RyaW5n
IHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hUZXh0XSBmb3JLZXk6QCJBWFNlYXJjaFRleHQi
XTsKLSAgICAKKwogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKHZpc2li
bGVPbmx5KSBmb3JLZXk6QCJBWFZpc2libGVPbmx5Il07Ci0gICAgCiAgICAgW3BhcmFtZXRlcml6
ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OkAoaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KSBmb3JLZXk6
QCJBWEltbWVkaWF0ZURlc2NlbmRhbnRzT25seSJdOwogICAgIAogICAgIHJldHVybiBwYXJhbWV0
ZXJpemVkQXR0cmlidXRlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCmluZGV4IDUxZjAzMWRkYmJjZDg1M2FkYjRmZTcx
NDdkODVhNTI1NzZhMDA3OGIuLjk1YTA2ZjNhNDBhMDQ4OWUzZTBiMGIzMTY1NzRjM2ZjYmYyZWNm
MTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlDb21tb25NYWMuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisjaW1wb3J0ICJKU0Jhc2lj
cy5oIgogI2ltcG9ydCA8QXBwS2l0L05TQ29sb3IuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KQEAgLTE1
OCw1ICsxNTksNSBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vz
c2liaWxpdHlFbmFibGVkKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibWFjIikpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCJtYWMiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KaW5kZXggZTFlZmQ3ZjRlMTYxYWZmZGVl
MjI0Y2M0NTM4NDhiMzljYjQ5NzA2My4uNjQ5MWEyZDBhNWZhNGM3NGU3MjE3OTI3OGY3ZTFjYTk5
ZDc2OGQ2YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkFjY2Vzc2li
aWxpdHlDb21tb25NYWMuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5k
bGVyLmgiCiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgorI2ltcG9ydCAiSlNCYXNpY3MuaCIK
ICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lLmg+CkBAIC04MCwx
MSArODEsNiBAQCAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9HbG9iYWxQb2ludDooTlNQ
b2ludClwb2ludDsKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9y
QXR0cmlidXRlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZTsKIEBlbmQKIAotc3RhdGljIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVFbXB0eUpTU3RyaW5nKCkKLXsKLSAgICByZXR1cm4g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhudWxscHRyLCAwKSk7Ci19Ci0KIHN0
YXRpYyBPcHRpb25hbDxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBtYWtlVmVjdG9yRWxlbWVudChj
b25zdCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiwgaWQgZWxlbWVudCkKIHsKICAgICByZXR1cm4g
eyB7IGVsZW1lbnQgfSB9OwpAQCAtMjIxLDE0ICsyMTcsOCBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5
ICpzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJl
ZiBjbwogICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpb
TlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCld
XTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwg
c2VhcmNoU3RyaW5ncykpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NB
cnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNW
YWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQo
KSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFs
dWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZh
bHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJh
eUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8g
c2VhcmNoU3RyaW5nc0FycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaFN0cmluZ3M7CisgICAgICAg
ICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IFdUUjo6YXJyYXlMZW5ndGgoY29u
dGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAg
IGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0Fy
cmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgICAgIGlmIChzZWFyY2hT
dHJpbmdzU3RyaW5nKQpAQCAtMjYyLDE0ICsyNTIsOCBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpz
ZWFyY2hUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJlZiBj
bwogICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCiAgICAgICAgICAgICAgICAg
W3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNT
dHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwogICAgICAgICB9IGVsc2UgaWYg
KEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgewotICAgICAgICAgICAg
SlNPYmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQs
IHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3Ry
aW5nc0FycmF5TGVuZ3RoID0gMDsKLQotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0
cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0g
ICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlID0gSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGxlbmd0aFByb3Bl
cnR5U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5n
c0FycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgc2Vh
cmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLQorICAgICAgICAgICAgYXV0
byBzZWFyY2hTdHJpbmdzQXJyYXkgPSAoSlNPYmplY3RSZWYpc2VhcmNoU3RyaW5nczsKKyAgICAg
ICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdz
QXJyYXksIGksIG51bGxwdHIpLCBudWxscHRyKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlYXJj
aFN0cmluZ3NTdHJpbmcpCkBAIC0xNDQ2LDEzICsxNDMwLDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QK
IAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4oKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgZnVuY3Rpb24uCiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCkBAIC0xNDYzLDcgKzE0NDcsNyBAQCBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygp
CiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9BWF9P
QkpDX0VYQ0VQVElPTlMKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOwor
ICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCkBAIC0xNDc0LDcg
KzE0NTgsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZG9jdW1lbnRVUkkoKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVm
XTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbSBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQppbmRleCAzNjcx
NDkzOWZkYTBhNTY3NDljNzk5ODg2YTFlYTQzODkyMTg5YTRhLi4zNDJiM2EwMWRjN2VhODc5YWYx
YjU0YjBlZTI3M2Q2ODEyZjhmN2E3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0Zy
YW1lTG9hZERlbGVnYXRlLm1tCkBAIC0zMTEsNTQgKzMxMSwyNiBAQCBJR05PUkVfV0FSTklOR1Nf
RU5ECiAKIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RJblN0YW5kYXJkV29ybGRGb3JGcmFt
ZTooV2ViRnJhbWUgKilmcmFtZQogewotICAgIC8vIE1ha2UgTmV3LVN0eWxlIFRlc3RSdW5uZXIK
LSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFtmcmFtZSBnbG9iYWxDb250ZXh0XTsKLSAgICBK
U09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4
dCk7Ci0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGF1dG8gY29udGV4dCA9IFtm
cmFtZSBnbG9iYWxDb250ZXh0XTsKKyAgICBhdXRvIHdlYlZpZXcgPSBbZnJhbWUgd2ViVmlld107
CisgICAgYXV0byB3aW5kb3dPYmplY3QgPSBbZnJhbWUgd2luZG93T2JqZWN0XTsKIAotICAgIEFT
U0VSVChnVGVzdFJ1bm5lcik7Ci0gICAgZ1Rlc3RSdW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29u
dGV4dCwgZ2xvYmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7
Ci0KLSAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFsT2Jq
ZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCBnbG9iYWxPYmplY3Qs
ICZleGNlcHRpb24pOwotICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKyAgICBnVGVzdFJ1bm5lci0+
bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKKyAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dP
YmplY3QoY29udGV4dCk7CisgICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dP
YmplY3QoY29udGV4dCk7CiAKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFs
c09iamVjdChjb250ZXh0KTsKIAotICAgIC8vIE1ha2UgT2xkLVN0eWxlIGNvbnRyb2xsZXJzCi0K
LSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW2ZyYW1lIHdlYlZpZXddOwotICAgIFdlYlNjcmlwdE9i
amVjdCAqb2JqID0gW2ZyYW1lIHdpbmRvd09iamVjdF07Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgQXBwbGVTY3JpcHRDb250cm9sbGVyICphc2MgPSBbW0FwcGxlU2NyaXB0Q29udHJv
bGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddOwotICAgIFtvYmogc2V0VmFsdWU6
YXNjIGZvcktleTpAImFwcGxlU2NyaXB0Q29udHJvbGxlciJdOwotICAgIFthc2MgcmVsZWFzZV07
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRvcHROUyhb
W0FwcGxlU2NyaXB0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKS5n
ZXQoKSBmb3JLZXk6QCJhcHBsZVNjcmlwdENvbnRyb2xsZXIiXTsKICNlbmRpZgogCi0gICAgRXZl
bnRTZW5kaW5nQ29udHJvbGxlciAqZXNjID0gW1tFdmVudFNlbmRpbmdDb250cm9sbGVyIGFsbG9j
XSBpbml0XTsKLSAgICBbb2JqIHNldFZhbHVlOmVzYyBmb3JLZXk6QCJldmVudFNlbmRlciJdOwot
ICAgIFtlc2MgcmVsZWFzZV07Ci0gICAgCi0gICAgW29iaiBzZXRWYWx1ZTpnTmF2aWdhdGlvbkNv
bnRyb2xsZXIgZm9yS2V5OkAibmF2aWdhdGlvbkNvbnRyb2xsZXIiXTsKLSAgICAKLSAgICBPYmpD
Q29udHJvbGxlciAqb2NjID0gW1tPYmpDQ29udHJvbGxlciBhbGxvY10gaW5pdF07Ci0gICAgW29i
aiBzZXRWYWx1ZTpvY2MgZm9yS2V5OkAib2JqQ0NvbnRyb2xsZXIiXTsKLSAgICBbb2NjIHJlbGVh
c2VdOwotCi0gICAgT2JqQ1BsdWdpbiAqcGx1Z2luID0gW1tPYmpDUGx1Z2luIGFsbG9jXSBpbml0
XTsKLSAgICBbb2JqIHNldFZhbHVlOnBsdWdpbiBmb3JLZXk6QCJvYmpDUGx1Z2luIl07Ci0gICAg
W3BsdWdpbiByZWxlYXNlXTsKLSAgICAKLSAgICBPYmpDUGx1Z2luRnVuY3Rpb24gKnBsdWdpbkZ1
bmN0aW9uID0gW1tPYmpDUGx1Z2luRnVuY3Rpb24gYWxsb2NdIGluaXRdOwotICAgIFtvYmogc2V0
VmFsdWU6cGx1Z2luRnVuY3Rpb24gZm9yS2V5OkAib2JqQ1BsdWdpbkZ1bmN0aW9uIl07Ci0gICAg
W3BsdWdpbkZ1bmN0aW9uIHJlbGVhc2VdOwotCi0gICAgVGV4dElucHV0Q29udHJvbGxlciAqdGlj
ID0gW1tUZXh0SW5wdXRDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlld107
Ci0gICAgW29iaiBzZXRWYWx1ZTp0aWMgZm9yS2V5OkAidGV4dElucHV0Q29udHJvbGxlciJdOwot
ICAgIFt0aWMgcmVsZWFzZV07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtb
RXZlbnRTZW5kaW5nQ29udHJvbGxlciBhbGxvY10gaW5pdF0pLmdldCgpIGZvcktleTpAImV2ZW50
U2VuZGVyIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTpnTmF2aWdhdGlvbkNvbnRyb2xs
ZXIgZm9yS2V5OkAibmF2aWdhdGlvbkNvbnRyb2xsZXIiXTsKKyAgICBbd2luZG93T2JqZWN0IHNl
dFZhbHVlOmFkb3B0TlMoW1tPYmpDQ29udHJvbGxlciBhbGxvY10gaW5pdF0pLmdldCgpIGZvcktl
eTpAIm9iakNDb250cm9sbGVyIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5T
KFtbT2JqQ1BsdWdpbiBhbGxvY10gaW5pdF0pLmdldCgpIGZvcktleTpAIm9iakNQbHVnaW4iXTsK
KyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tPYmpDUGx1Z2luRnVuY3Rpb24g
YWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDUGx1Z2luRnVuY3Rpb24iXTsKKyAgICBb
d2luZG93T2JqZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tUZXh0SW5wdXRDb250cm9sbGVyIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlld10pLmdldCgpIGZvcktleTpAInRleHRJbnB1dENvbnRy
b2xsZXIiXTsKIH0KIAogLSAodm9pZClkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lOihXZWJG
cmFtZSAqKWZyYW1lIGluSXNvbGF0ZWRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZApAQCAt
MzcxLDcgKzM0Myw3IEBAIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZTooV2Vi
RnJhbWUgKilmcmFtZSBpbklzb2xhdGVkV29ybGQ6KFdlYlNjcmlwCiAgICAgaWYgKCFnbG9iYWxP
YmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY3R4LCBn
bG9iYWxPYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJfX3dvcmxk
SUQiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKGN0eCwgd29ybGRJREZvcldvcmxkKHdvcmxk
KSksIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOworICAgIEpTT2JqZWN0U2V0UHJv
cGVydHkoY3R4LCBnbG9iYWxPYmplY3QsIFdUUjo6Y3JlYXRlSlNTdHJpbmcoIl9fd29ybGRJRCIp
LmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHdvcmxkSURGb3JXb3JsZCh3b3JsZCkpLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKIH0KIAogLSAodm9pZCl3ZWJWaWV3OihX
ZWJWaWV3ICopc2VuZGVyIGRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWU6KFdlYkZyYW1lICop
ZnJhbWUgaW5TY3JpcHRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCBlYmEwOTNlZTE4N2NkMzEwZDA1MWIy
MzBhZWQyYTMwMGZlNzk0OWMwLi5lMjEwNzBhYzMxYjM0Y2ZjYmI1NzlkNzc3NWI3NjE5OTExNGFi
ZGZkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5t
bQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtMzIs
NiArMzIsNyBAQAogCiAjaW1wb3J0ICJEZWZhdWx0UG9saWN5RGVsZWdhdGUuaCIKICNpbXBvcnQg
IkVkaXRpbmdEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgIkxheW91
dFRlc3RTcGVsbENoZWNrZXIuaCIKICNpbXBvcnQgIk1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmgi
CiAjaW1wb3J0ICJNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaCIKQEAgLTY3MCwxNSArNjcx
LDEwIEBAIGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlCiB7CiAgICAgV2ViRmluZE9wdGlvbnMgb3B0
aW9ucyA9IDA7CiAKLSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQ
cm9wZXJ0eU5hbWUuZ2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQs
IGxlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiB0YXJnZXRDRlN0cmluZyA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmco
a0NGQWxsb2NhdG9yRGVmYXVsdCwgdGFyZ2V0KSk7CisgICAgYXV0byBsZW5ndGggPSBXVFI6OmFy
cmF5TGVuZ3RoKGNvbnRleHQsIG9wdGlvbnNBcnJheSk7CisgICAgYXV0byB0YXJnZXRDRlN0cmlu
ZyA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGFy
Z2V0KSk7CiAKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
QXRJbmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApOwogICAgICAgICBpZiAoIUpTVmFs
dWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwIGIvVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKaW5kZXggZmZmMGI3NDk5
MGFmYjllMTJhYzlkMDFhNzEwYTRjNTI4MGUxZTkwOC4uOTk1YWRlMDY2MDAxOGM5OGM2MmU0NGU1
NmY2ZjhmOTYyOTI5ZTgyMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5k
aW5ncy9KU0Jhc2ljcy5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9K
U0Jhc2ljcy5jcHAKQEAgLTI4LDE5ICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSlNW
YWx1ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIE9w
dGlvbmFsPGJvb2w+IHZhbHVlKQorT3B0aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2woSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID8g
SlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VO
dWxsKGNvbnRleHQpOworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFs
dWUpIHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFr
ZU9wdGlvbmFsKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKTsKK30KKworT3B0aW9u
YWw8ZG91YmxlPiB0b09wdGlvbmFsRG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIHZhbHVlKQoreworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFs
dWUpIHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFr
ZU9wdGlvbmFsKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogfQog
Ci1PcHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRS
ZWYgY29udGV4dCwgT3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJ
c1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1
ZSkgPyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDxib29sPihKU1ZhbHVlVG9Cb29sZWFuKGNvbnRl
eHQsIHZhbHVlKSk7CisgICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCi1KU1Zh
bHVlUmVmIEpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0
cmluZ1JlZiBzdHJpbmdPck51bGwpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNTdHJpbmdSZWYgc3RyaW5nKQogewotICAgIHJldHVybiBzdHJpbmdPck51bGwg
PyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdPck51bGwpIDogSlNWYWx1ZU1ha2VO
dWxsKGNvbnRleHQpOworICAgIHJldHVybiBzdHJpbmcgPyBKU1ZhbHVlTWFrZVN0cmluZyhjb250
ZXh0LCBzdHJpbmcpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQpAQCAtNDgs
MTkgKzUzLDQzIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25z
dCBjaGFyKiBzdHJpbmcpCiAgICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHN0cmluZykpOwogfQogCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNT
dHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgYXV0
byBzdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBudWxs
cHRyKSk7CisgICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZyA6IGNyZWF0ZUpTU3RyaW5nKCIiKTsK
K30KKwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNo
YXIqIHN0cmluZykKIHsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY3Jl
YXRlSlNTdHJpbmcoc3RyaW5nKS5nZXQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgcHJvcGVydHkoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkK
K3sKKyAgICByZXR1cm4gb2JqZWN0ID8gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmpl
Y3QsIGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBudWxscHRyKSA6IG51bGxwdHI7Cit9CisK
K0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUp
KTsKK30KKworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUpCit7Cisg
ICAgYXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7CisgICAgcmV0
dXJuIHZhbHVlID8gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgOiBkZWZhdWx0VmFs
dWU7Cit9CisKK2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBhdXRvIHZhbHVlID0g
cHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4gdmFsdWUgPyBKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogMDsKK30KKwogSlNPYmplY3RS
ZWYgb2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVj
dCwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
b2JqZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFK
U1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUpOworICAgIGF1dG8gdmFs
dWUgPSBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAgIHJldHVybiB2YWx1ZSA/
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUp
LCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxjb25zdCBjaGFyKj4gbmFtZXMpCkBAIC03MCwyNyArOTksMzYgQEAgSlNPYmplY3RSZWYg
b2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwg
c3RkOjppbml0aWEKICAgICByZXR1cm4gb2JqZWN0OwogfQogCit1bnNpZ25lZCBhcnJheUxlbmd0
aChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVy
biBudW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIik7Cit9CisKIHZvaWQg
c2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29u
c3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNv
bnRleHQsIG9iamVjdCwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIEpTVmFsdWVNYWtlQm9v
bGVhbihjb250ZXh0LCB2YWx1ZSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7
CiB9CiAKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSlNPYmplY3RTZXRQ
cm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGNyZWF0
ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCB2YWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQg
c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIq
IG5hbWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250
ZXh0LCBuYW1lLCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCB2YWx1ZSkpOworfQorCiBKU1Zh
bHVlUmVmIGNhbGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29u
c3QgY2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFsdWVSZWY+IGFyZ3VtZW50
cykKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYXV0
byBmdW5jdGlvbiA9IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7Ci0gICAg
aWYgKCFmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwgYXJndW1lbnRzLnNp
emUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBmdW5jdGlvbiA/
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwgYXJndW1l
bnRzLnNpemUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpIDogbnVsbHB0cjsKIH0KIAog
SlNPYmplY3RSZWYgY2FsbENvbnN0cnVjdG9yKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBj
b25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJndW1l
bnRzKQogewogICAgIGF1dG8gY29uc3RydWN0b3IgPSBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBK
U0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHsgbmFtZSB9KTsKLSAgICBpZiAoIWNv
bnN0cnVjdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gSlNPYmplY3RD
YWxsQXNDb25zdHJ1Y3Rvcihjb250ZXh0LCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzLnNpemUoKSwg
YXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBjb25zdHJ1Y3RvciA/IEpT
T2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dCwgY29uc3RydWN0b3IsIGFyZ3VtZW50cy5z
aXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5n
cy9KU0Jhc2ljcy5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5o
CmluZGV4IDExZGRhNTI0N2E1YWI2YzA0MDk2M2RmMTlhYjBmNWUwMjk2Y2ViODIuLjY1ZjE4ZDdl
Y2Q4MDE2ODMzMzM0ZGY1ZWI4ODhjY2M0YTBiMjFkNTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL0JpbmRpbmdzL0pTQmFzaWNzLmgKQEAgLTMyLDE2ICszMiwyOCBAQAogCiBuYW1lc3BhY2Ug
V1RSIHsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVm
LCBPcHRpb25hbDxib29sPik7Ci1PcHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xl
YW4oSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKK09wdGlvbmFsPGJvb2w+IHRvT3B0aW9uYWxC
b29sKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitPcHRpb25hbDxkb3VibGU+IHRvT3B0aW9u
YWxEb3VibGUoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVl
TWFrZVN0cmluZ09yTnVsbChKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmKTsKK0pTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiA9ICIiKTsKK0pTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYp
OwogCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciop
OwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmLCBjb25zdCBjaGFyKik7CitKU1Zh
bHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYsIE9wdGlvbmFsPGJvb2w+KTsKK0pTVmFsdWVS
ZWYgbWFrZVZhbHVlKEpTQ29udGV4dFJlZiwgSlNTdHJpbmdSZWYpOworCitKU1ZhbHVlUmVmIHBy
b3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOworYm9v
bCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciog
bmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUgPSBmYWxzZSk7Citkb3VibGUgbnVtZXJpY1Byb3BlcnR5
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOworSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHN0cmluZ1Byb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYs
IGNvbnN0IGNoYXIqIG5hbWUpOwordW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZik7CiBKU09iamVjdFJlZiBvYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpT
T2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBj
aGFyKj4gbmFtZXMpOworCiB2b2lkIHNldFByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RS
ZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBzZXRHbG9iYWxPYmplY3RQ
cm9wZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYpOwordm9p
ZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUs
IGRvdWJsZSB2YWx1ZSk7CisKIEpTVmFsdWVSZWYgY2FsbChKU0NvbnRleHRSZWYsIEpTT2JqZWN0
UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4g
YXJndW1lbnRzKTsKIEpTT2JqZWN0UmVmIGNhbGxDb25zdHJ1Y3RvcihKU0dsb2JhbENvbnRleHRS
ZWYsIGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlUmVmPiBh
cmd1bWVudHMpOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdz
L0pTV3JhcHBhYmxlLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBh
YmxlLmgKaW5kZXggOWUwZjA3ZGY1OTMyYWIzMDMzMWQ3YjYxZDE3MzUzYWU2ZTAxYzQ3My4uNTli
ZTFkYWVhMjc3NTRlZTQ3NzViNGYzZTdhNWQ2ODJmYjFkNWYxZSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCisrKyBiL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGFibGUuaApAQCAtMjUsOSArMjUsMTAgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNDbGFz
cyogSlNDbGFzc1JlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNzIEpTV3JhcHBhYmxlIDog
cHVibGljIFJlZkNvdW50ZWQ8SlNXcmFwcGFibGU+IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L0JpbmRpbmdzL0pTV3JhcHBlci5oCmluZGV4IGY2Nzk4Zjk5YTRmZWM2NzU2M2QwOTE1NjNiNTA1
MDlkZmM4NTcyZGEuLjliNmJhZDhhZjA0NGIyMDJmZjg3MjdhY2VkN2NiOWZmYjJjZWM1MmUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmgKKysr
IGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaApAQCAtNTAsNCAr
NTAsOSBAQCBpbmxpbmUgdm9pZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcgogICAgIEpTT2JqZWN0U2V0UHJvcGVydHko
Y29udGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhwcm9wZXJ0eU5hbWUpLmdldCgpLCBKU1dy
YXBwZXI6OndyYXAoY29udGV4dCwgdmFsdWUpLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOwogfQog
CitpbmxpbmUgdm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU1dyYXBwYWJsZSogdmFsdWUpCit7CisgICAg
c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgcHJvcGVydHlOYW1lLCBKU1dyYXBwZXI6
OndyYXAoY29udGV4dCwgdmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9tYWMvRXZlbnRT
ZXJpYWxpemVyTWFjLm1tIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9FdmVudFNlcmlhbGl6YXRp
b24vbWFjL0V2ZW50U2VyaWFsaXplck1hYy5tbQppbmRleCAwZjE3YjJjZDYzOWE2MzA2M2E0ODhk
ZjNhMzNhMzVlMzJhMmVjY2MxLi5iZGQyMDdiZDQwOWYwNGVlNWYzODIzMTk0ZmEyNGU2MzI4ODU4
OTE3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlv
bi9tYWMvRXZlbnRTZXJpYWxpemVyTWFjLm1tCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
RXZlbnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMubW0KQEAgLTE5NSw3ICsx
OTUsNyBAQCBAaW1wbGVtZW50YXRpb24gRXZlbnRTZXJpYWxpemVyCiAKICsgKE5TRGljdGlvbmFy
eSAqKWRpY3Rpb25hcnlGb3JFdmVudDooQ0dFdmVudFJlZilyYXdFdmVudCByZWxhdGl2ZVRvVGlt
ZTooQ0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5QdHI8
Q0dFdmVudFJlZj4gcGxhaW5FdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZShOVUxMKSk7Cisg
ICAgYXV0byBwbGFpbkV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsKICAgICBD
R0V2ZW50UmVmIHJhd1BsYWluRXZlbnQgPSBwbGFpbkV2ZW50LmdldCgpOwogCiAgICAgTlNNdXRh
YmxlRGljdGlvbmFyeSAqZGljdCA9IFtbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRd
IGF1dG9yZWxlYXNlXTsKQEAgLTIyNiw3ICsyMjYsNyBAQCArIChOU0RpY3Rpb25hcnkgKilkaWN0
aW9uYXJ5Rm9yRXZlbnQ6KENHRXZlbnRSZWYpcmF3RXZlbnQgcmVsYXRpdmVUb1RpbWU6KENHRXZl
bgogCiArIChSZXRhaW5QdHI8Q0dFdmVudFJlZj4pY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5OihO
U0RpY3Rpb25hcnkgKilkaWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyByZWxhdGl2ZVRv
VGltZTooQ0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5Q
dHI8Q0dFdmVudFJlZj4gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOworICAg
IGF1dG8gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOwogICAgIENHRXZlbnRS
ZWYgcmF3RXZlbnQgPSBldmVudC5nZXQoKTsKIAogICAgIEZPUl9FQUNIX0NHRVZFTlRfSU5URUdF
Ul9GSUVMRChTVE9SRV9JTlRFR0VSX0ZJRUxEX1RPX0VWRU5UKTsKQEAgLTI2NCw3ICsyNjQsNyBA
QCBjb25zdCBmbG9hdCBldmVudERpc3BhdGNoVGltZXJSYXRlID0gMS4gLyAxMjAuOwogCiArICh2
b2lkKXBsYXlTdHJlYW06KE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICopZXZlbnREaWN0cyB3aW5k
b3c6KE5TV2luZG93ICopd2luZG93IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKCkpY29tcGxl
dGlvbkhhbmRsZXIKIHsKLSAgICBSZXRhaW5QdHI8RXZlbnRTdHJlYW1QbGF5ZXI+IHBsYXllciA9
IGFkb3B0TlMoW1tFdmVudFN0cmVhbVBsYXllciBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gcGxh
eWVyID0gYWRvcHROUyhbW0V2ZW50U3RyZWFtUGxheWVyIGFsbG9jXSBpbml0XSk7CiAKICAgICBw
bGF5ZXItPl9yZW1haW5pbmdFdmVudERpY3Rpb25hcmllcyA9IGFkb3B0TlMoW2V2ZW50RGljdHMg
bXV0YWJsZUNvcHldKTsKICAgICBwbGF5ZXItPl93aW5kb3cgPSB3aW5kb3c7CkBAIC0yODIsNyAr
MjgyLDcgQEAgLSAodm9pZClwbGF5YmFja1RpbWVyRmlyZWQ6KE5TVGltZXIgKil0aW1lcgogICAg
IGF1dG8gcmVtb3ZlTGlzdCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0p
OwogICAgIE5TRXZlbnQgKm5zRXZlbnQgPSBuaWw7CiAgICAgZm9yIChpZCBldmVudERpY3QgaW4g
X3JlbWFpbmluZ0V2ZW50RGljdGlvbmFyaWVzLmdldCgpKSB7Ci0gICAgICAgIFJldGFpblB0cjxD
R0V2ZW50UmVmPiBldmVudCA9IFtFdmVudFNlcmlhbGl6ZXIgY3JlYXRlRXZlbnRGb3JEaWN0aW9u
YXJ5OmV2ZW50RGljdCBpbldpbmRvdzpfd2luZG93LmdldCgpIHJlbGF0aXZlVG9UaW1lOl9zdGFy
dFRpbWVdOworICAgICAgICBhdXRvIGV2ZW50ID0gW0V2ZW50U2VyaWFsaXplciBjcmVhdGVFdmVu
dEZvckRpY3Rpb25hcnk6ZXZlbnREaWN0IGluV2luZG93Ol93aW5kb3cuZ2V0KCkgcmVsYXRpdmVU
b1RpbWU6X3N0YXJ0VGltZV07CiAgICAgICAgIGlmIChDR0V2ZW50R2V0VGltZXN0YW1wKGV2ZW50
LmdldCgpKSA8IG1hY2hfYWJzb2x1dGVfdGltZSgpKSB7CiAgICAgICAgICAgICBuc0V2ZW50ID0g
W05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpldmVudC5nZXQoKV07CiAgICAgICAgICAgICBbTlNB
cHAgcG9zdEV2ZW50Om5zRXZlbnQgYXRTdGFydDpOT107CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwIGIvVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250ZXh0LmNwcAppbmRl
eCAyNzA1YjM5YTI0N2RkMjU3ZDVjNmQ1OGM0NzBlOTYzM2E5MTlkZmQ0Li41ZGNmYjdjOTg3MmYz
OTlmMTU2NzRkOTcxMGRlYjI4OWIyZDEyMThkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAKQEAgLTI2
LDkgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJVSVNjcmlwdENvbnRl
eHQuaCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250cm9s
bGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRS
ZWN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVFI7CkBAIC00MywxMSArNDIsNyBAQCBVSVNjcmlw
dENvbnRleHQ6OlVJU2NyaXB0Q29udGV4dChVSVNjcmlwdENvbnRleHREZWxlZ2F0ZSYgZGVsZWdh
dGUsIFVJU2NyaXB0Q29udAogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKIHsKICAgICBtX2Nv
bnRyb2xsZXIgPSBmYWN0b3J5KCp0aGlzKTsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVj
dCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChtX2NvbnRleHQuZ2V0KCkpOwotCi0gICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgIG1fY29udHJvbGxlci0+bWFrZVdpbmRv
d09iamVjdChtX2NvbnRleHQuZ2V0KCksIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7CisgICAg
bV9jb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIFVJ
U2NyaXB0Q29udGV4dDo6flVJU2NyaXB0Q29udGV4dCgpCkBAIC02Niw5ICs2MSw3IEBAIHZvaWQg
VUlTY3JpcHRDb250ZXh0OjpydW5VSVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgdW5zaWdu
ZWQgc2NyaXB0Q2FsbGJhY2tJCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRlU2Ny
aXB0KG1fY29udGV4dC5nZXQoKSwgc3RyaW5nUmVmLmdldCgpLCAwLCAwLCAxLCAmZXhjZXB0aW9u
KTsKICAgICAKICAgICBpZiAoIWhhc091dHN0YW5kaW5nQXN5bmNUYXNrcygpKSB7Ci0gICAgICAg
IEpTVmFsdWVSZWYgc3RyaW5naWZ5RXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBz
dHJpbmdpZmllZCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkobV9jb250ZXh0LmdldCgpLCBy
ZXN1bHQsICZzdHJpbmdpZnlFeGNlcHRpb24pKTsKLSAgICAgICAgcmVxdWVzdFVJU2NyaXB0Q29t
cGxldGlvbihzdHJpbmdpZmllZC5nZXQoKSk7CisgICAgICAgIHJlcXVlc3RVSVNjcmlwdENvbXBs
ZXRpb24oY3JlYXRlSlNTdHJpbmcobV9jb250ZXh0LmdldCgpLCByZXN1bHQpLmdldCgpKTsKICAg
ICAgICAgdHJ5VG9Db21wbGV0ZVVJU2NyaXB0Rm9yQ3VycmVudFBhcmVudENhbGxiYWNrKCk7CiAg
ICAgfQogfQpAQCAtMTg5LDEwICsxODIsMTAgQEAgSlNPYmplY3RSZWYgVUlTY3JpcHRDb250ZXh0
OjpvYmplY3RGcm9tUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpIGNvbnMKIHsK
ICAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2UobV9jb250ZXh0LmdldCgpLCBu
dWxscHRyLCBudWxscHRyKTsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9jb250ZXh0Lmdl
dCgpLCBvYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZWZ0Iikp
LmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QueCgpKSwga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5
KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygidG9wIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJl
Y3QueSgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVj
dFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygid2lkdGgiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKG1fY29u
dGV4dC5nZXQoKSwgcmVjdC53aWR0aCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxs
cHRyKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpLmdldCgpLCBKU1Zh
bHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QuaGVpZ2h0KCkpLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOworICAgIHNldFByb3BlcnR5KG1fY29udGV4dC5nZXQo
KSwgb2JqZWN0LCAibGVmdCIsIHJlY3QueCgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQu
Z2V0KCksIG9iamVjdCwgInRvcCIsIHJlY3QueSgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRl
eHQuZ2V0KCksIG9iamVjdCwgIndpZHRoIiwgcmVjdC53aWR0aCgpKTsKKyAgICBzZXRQcm9wZXJ0
eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgImhlaWdodCIsIHJlY3QuaGVpZ2h0KCkpOwogICAg
IAogICAgIHJldHVybiBvYmplY3Q7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGE1YThk
N2NjMmZjYzlmZWQ2ZmY1NTIyY2M5ZWQ2N2NlNDI5OGNhODEuLjM1MjRiNjBiZDgxY2Q5Y2FiMzEw
YWExYjU2OGYyM2ZkNTE2OGRjZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
VUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCkBAIC02Myw3ICs2
Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgd2FpdEZvck91dHN0YW5kaW5nQ2FsbGJhY2tzKCkgeyAvKiBub3RJbXBsZW1lbnRlZCgp
OyAqLyB9CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVj
dFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBUcmFuc2FjdGlvbiBoZWxwZXJz
CiAgICAgCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4
dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9V
SVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyU2hhcmVkLmNwcAppbmRleCBjNmViMTQw
YWEzNTZjNjZkOGM0NTAyMTRlN2RiMmM4NWFkM2E3MWEzLi5iZmY0ZjM0MzNkYmQyOTU3NWQ2MjVi
NzM5NGU2ZDlkMzgxY2FlYzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJ
U2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5j
cHAKQEAgLTQxLDIwICs0MSwxNSBAQCBEZXZpY2VPcmllbnRhdGlvbiogdG9EZXZpY2VPcmllbnRh
dGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKICAgICAgICAgRGV2
aWNlT3JpZW50YXRpb246OkxhbmRzY2FwZUxlZnQsCiAgICAgICAgIERldmljZU9yaWVudGF0aW9u
OjpMYW5kc2NhcGVSaWdodAogICAgIH07Ci0KLSAgICBhdXRvIG9wdGlvbiA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKLSAgICBpZiAob3B0aW9u
LT5zdHJpbmcoKSA9PSAicG9ydHJhaXQiKQorICAgIGF1dG8gb3B0aW9uID0gY3JlYXRlSlNTdHJp
bmcoY29udGV4dCwgdmFsdWUpOworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG9wdGlvbi5nZXQoKSwgInBvcnRyYWl0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzBdOwot
Ci0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gInBvcnRyYWl0LXVwc2lkZWRvd24iKQorICAg
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgInBvcnRyYWl0
LXVwc2lkZWRvd24iKSkKICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbMV07Ci0KLSAgICBpZiAob3B0
aW9uLT5zdHJpbmcoKSA9PSAibGFuZHNjYXBlLWxlZnQiKQorICAgIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgImxhbmRzY2FwZS1sZWZ0IikpCiAgICAgICAg
IHJldHVybiAmdmFsdWVzWzJdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gImxhbmRz
Y2FwZS1yaWdodCIpCisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9u
LmdldCgpLCAibGFuZHNjYXBlLXJpZ2h0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzNdOwot
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTY4LDkgKzYzLDkgQEAgdm9pZCBVSVNjcmlw
dENvbnRyb2xsZXI6OmNvbnRleHREZXN0cm95ZWQoKQogICAgIG1fY29udGV4dCA9IG51bGxwdHI7
CiB9CiAKLXZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwg
InVpQ29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkoY29udGV4dCwgInVpQ29udHJvbGxlciIsIHRoaXMpOwogfQogCiBKU0NsYXNz
UmVmIFVJU2NyaXB0Q29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbSBiL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbQppbmRleCA4
ZmMwMjExNjdhYWMyMjE1MzZhMTc2NmU1MzkwMTlmZTY0NDA1OGUxLi5kODZlZjk1NmY4MGRmYTE5
MjI5NTRlMTE3OWFmMmIzNTJiOTgzOTI0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIubW0KKysrIGIvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9jb2NvYS9MYXlvdXRUZXN0U3BlbGxDaGVja2VyLm1tCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkxheW91dFRlc3RTcGVsbENoZWNrZXIuaCIK
IAotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbXBvcnQgIkpTQmFz
aWNzLmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KQEAgLTIxMiwxMSArMjEyLDExIEBAIC0gKHZv
aWQpc2V0UmVzdWx0czooVGV4dENoZWNraW5nUmVzdWx0c0RpY3Rpb25hcnkgKilyZXN1bHRzCiAt
ICh2b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFsdWUgaW5D
b250ZXh0OihKU0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1dG8gcmVzdWx0c09iamVjdCA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCByZXN1bHRzVmFsdWUsIG51bGxwdHIpOwotICAgIGF1
dG8gZnJvbVByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJmcm9tIikpOwotICAgIGF1dG8gdG9Qcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygidG8iKSk7Ci0gICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInR5cGUiKSk7Ci0gICAgYXV0byByZXBs
YWNlbWVudFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJyZXBsYWNlbWVudCIpKTsKLSAgICBhdXRvIGRldGFpbHNQcm9wZXJ0eU5hbWUgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGV0YWlscyIpKTsKKyAgICBhdXRvIGZyb21Q
cm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJmcm9tIik7CisgICAgYXV0byB0b1By
b3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoInRvIik7CisgICAgYXV0byB0eXBlUHJv
cGVydHlOYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZygidHlwZSIpOworICAgIGF1dG8gcmVwbGFj
ZW1lbnRQcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJyZXBsYWNlbWVudCIpOwor
ICAgIGF1dG8gZGV0YWlsc1Byb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoImRldGFp
bHMiKTsKICAgICBhdXRvIHJlc3VsdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBh
bGxvY10gaW5pdF0pOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIHRoZSBPYmplY3RpdmUtQyBBUEkg
d291bGQgbWFrZSB0aGlzIGxvZ2ljIGVhc2llciB0byBmb2xsb3cuCkBAIC0yMjgsMTUgKzIyOCwx
MyBAQCAtICh2b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFs
dWUgaW5Db250ZXh0OihKU0NvbnRleHRSZWYpYwogICAgICAgICBhdXRvIHJlc3VsdHNGb3JXb3Jk
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgICAgIGZvciAo
c2l6ZV90IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBKU1Byb3BlcnR5TmFtZUFycmF5
R2V0Q291bnQocmVzdWx0c0FycmF5UHJvcGVydHlOYW1lcyk7ICsrcmVzdWx0SW5kZXgpIHsKICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0c09iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBK
U09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCByZXN1bHRzQXJyYXksIHJlc3VsdElu
ZGV4LCBudWxscHRyKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBsb25nIGZyb21WYWx1ZSA9IGxy
b3VuZGwoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4
dCwgcmVzdWx0c09iamVjdCwgZnJvbVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxw
dHIpKTsKLSAgICAgICAgICAgIGxvbmcgdG9WYWx1ZSA9IGxyb3VuZGwoSlNWYWx1ZVRvTnVtYmVy
KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgdG9Q
cm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBhdXRv
IHR5cGVWYWx1ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0eXBlUHJvcGVydHlOYW1lLmdldCgp
LCBudWxscHRyKSwgbnVsbHB0cikpOworICAgICAgICAgICAgbG9uZyBmcm9tVmFsdWUgPSBKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRz
T2JqZWN0LCBmcm9tUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBsb25nIHRvVmFsdWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0b1Byb3BlcnR5TmFtZS5nZXQoKSwg
bnVsbHB0ciksIG51bGxwdHIpOworICAgICAgICAgICAgYXV0byB0eXBlVmFsdWUgPSBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0
c09iamVjdCwgdHlwZVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cikpOwogICAgICAgICAgICAg
YXV0byByZXBsYWNlbWVudFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1
bHRzT2JqZWN0LCByZXBsYWNlbWVudFByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cik7CiAgICAg
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHJlcGxhY2VtZW50VGV4dDsKLSAgICAgICAg
ICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHJlcGxhY2VtZW50VmFsdWUpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byByZXBsYWNlbWVudEpTU3RyaW5nID0gYWRvcHQoSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlLCBudWxscHRyKSk7Ci0gICAg
ICAgICAgICAgICAgcmVwbGFjZW1lbnRUZXh0ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmlu
ZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZXBsYWNlbWVudEpTU3RyaW5nLmdldCgpKSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCBy
ZXBsYWNlbWVudFZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRleHQgPSBhZG9w
dENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgcmVwbGFjZW1lbnRWYWx1ZSkuZ2V0KCkpKTsKICAgICAgICAgICAg
IGF1dG8gZGV0YWlscyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwog
ICAgICAgICAgICAgYXV0byBkZXRhaWxzVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQsIHJlc3VsdHNPYmplY3QsIGRldGFpbHNQcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpOwog
ICAgICAgICAgICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgZGV0YWlsc1ZhbHVl
KSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rp
b25zLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlGdW5jdGlvbnMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lNTUxOGFiMzgxMzhkNmI3YmZhYTAzNTlmNzgyY2VjZDg3MzZmOTA5Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25zLmgK
QEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlN0cmluZ0Z1bmN0aW9ucy5oIgorCituYW1lc3BhY2UgV1RSIHsKKworV0tEaWN0aW9uYXJ5UmVm
IGRpY3Rpb25hcnlWYWx1ZShXS1R5cGVSZWYpOworCitib29sIGJvb2xlYW5WYWx1ZShXS1R5cGVS
ZWYpOworYm9vbCBib29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYpOwor
Citkb3VibGUgZG91YmxlVmFsdWUoV0tUeXBlUmVmKTsKK09wdGlvbmFsPGRvdWJsZT4gb3B0aW9u
YWxEb3VibGVWYWx1ZShXS1R5cGVSZWYpOworCitXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShXS1R5
cGVSZWYpOworV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoV0tUeXBlUmVmKTsKKwordWludDY0X3Qg
dWludDY0VmFsdWUoV0tUeXBlUmVmKTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKGNvbnN0IFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4mKTsKKworV0tUeXBlUmVmIHZhbHVlKFdLRGljdGlvbmFyeVJlZiwg
Y29uc3QgY2hhcioga2V5KTsKKworYm9vbCBib29sZWFuVmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBj
b25zdCBjaGFyKiBrZXkpOworZG91YmxlIGRvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29u
c3QgY2hhcioga2V5KTsKK1dLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLRGljdGlvbmFyeVJlZiwg
Y29uc3QgY2hhcioga2V5KTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiwg
Y29uc3QgY2hhcioga2V5KTsKKworT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVl
KFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVm
PiYsIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgT3B0aW9uYWw8VD4mIHZhbHVlKTsKK3ZvaWQgc2V0
VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBj
aGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBib29sIHZhbHVl
KTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4mLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUo
Y29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBr
ZXksIHVpbnQ2NF90IHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGRvdWJsZSB2YWx1ZSk7Cit2
b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+Jiwg
Y29uc3QgY2hhcioga2V5LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgYm9v
bCBib29sZWFuVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBX
S0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkgJiYgV0tCb29sZWFuR2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPih2YWx1ZSkpOworfQorCitpbmxpbmUgYm9v
bCBib29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIGJvb2xlYW5WYWx1ZSh2YWx1ZS5nZXQoKSk7Cit9CisKK2lubGluZSBXS0RpY3Rp
b25hcnlSZWYgZGljdGlvbmFyeVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpID8g
c3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxp
bmUgZG91YmxlIGRvdWJsZVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFs
dWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRG91YmxlR2V0VHlwZUlEKCkgPyBXS0RvdWJs
ZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPih2YWx1ZSkpIDogMDsKK30KKworaW5s
aW5lIE9wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS1R5cGVSZWYgdmFsdWUp
Cit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS0RvdWJsZUdl
dFR5cGVJRCgpID8gbWFrZU9wdGlvbmFsKFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tE
b3VibGVSZWY+KHZhbHVlKSkpIDogV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgV0tTdHJpbmdS
ZWYgc3RyaW5nVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBX
S0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSA/IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxpbmUgV1RGOjpTdHJpbmcgdG9X
VEZTdHJpbmcoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB0b1dURlN0cmluZyhzdHJp
bmdWYWx1ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUoV0tUeXBl
UmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0g
V0tVSW50NjRHZXRUeXBlSUQoKSA/IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KHZhbHVlKSkgOiAwOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUoY29u
c3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZh
bHVlKHZhbHVlLmdldCgpKTsKK30KKworaW5saW5lIFdLVHlwZVJlZiB2YWx1ZShXS0RpY3Rpb25h
cnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHRvV0soa2V5KS5nZXQoKSk7Cit9CisKK2lu
bGluZSBib29sIGJvb2xlYW5WYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3Qg
Y2hhcioga2V5KQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUodmFsdWUoZGljdGlvbmFyeSwg
a2V5KSk7Cit9CisKK2lubGluZSBkb3VibGUgZG91YmxlVmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRp
Y3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gZG91YmxlVmFsdWUodmFs
dWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBXS1N0cmluZ1JlZiBzdHJpbmdWYWx1
ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJl
dHVybiBzdHJpbmdWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5lIHVp
bnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXkpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHZhbHVlKGRpY3Rpb25hcnksIGtleSkp
OworfQorCitpbmxpbmUgT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdLRGlj
dGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIG9w
dGlvbmFsRG91YmxlVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSB2
b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBk
aWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHRvV0soa2V5KS5nZXQoKSwgdmFsdWUp
OworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBib29sIHZhbHVlKQor
eworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dmFsdWUpKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXks
IGNvbnN0IGNoYXIqIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgdG9X
Syh2YWx1ZSkuZ2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5
LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwg
a2V5LCB0b1dLKHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBj
aGFyKiBrZXksIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtl
eSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKworaW5saW5lIHZv
aWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRp
Y3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSwgZG91YmxlIHZhbHVlKQoreworICAgIHNldFZhbHVl
KGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBj
b25zdCBPcHRpb25hbDxUPiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBzZXRW
YWx1ZShkaWN0aW9uYXJ5LCBrZXksICp2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmggYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaAppbmRleCA2NDQ3NjAzOTY4
ZDIwNjQyMGJlYjk0Mjc3M2IyNGI3ODk2NDFiNWM5Li5mYTNhODhkM2FmMzkzNGQ0Yzg4MjBiZjUw
ZmU5Zjg5N2IzOGZkMDRhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50
U2VuZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJv
eHkuaApAQCAtMTEyLDE4ICsxMTIsMTkgQEAgcHJpdmF0ZToKICAgICBQT0lOVCBwb3NpdGlvbklu
UG9pbnQoKSBjb25zdCB7IHJldHVybiB7IHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueCks
IHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueSkgfTsgfQogI2VuZGlmCiAKLSAgICBkb3Vi
bGUgbV90aW1lOwotICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKLSAgICBib29sIG1fbGVmdE1vdXNl
QnV0dG9uRG93bjsKLSAgICBpbnQgbV9jbGlja0NvdW50OwotICAgIGRvdWJsZSBtX2NsaWNrVGlt
ZTsKLSAgICBXS1BvaW50IG1fY2xpY2tQb3NpdGlvbjsKLSAgICBXS0V2ZW50TW91c2VCdXR0b24g
bV9jbGlja0J1dHRvbjsKKyAgICBkb3VibGUgbV90aW1lIHsgMCB9OworICAgIFdLUG9pbnQgbV9w
b3NpdGlvbiB7IH07CisgICAgYm9vbCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24geyBmYWxzZSB9Owor
ICAgIGludCBtX2NsaWNrQ291bnQgeyAwIH07CisgICAgZG91YmxlIG1fY2xpY2tUaW1lIHsgMCB9
OworICAgIFdLUG9pbnQgbV9jbGlja1Bvc2l0aW9uIHsgfTsKKyAgICBXS0V2ZW50TW91c2VCdXR0
b24gbV9jbGlja0J1dHRvbiB7IGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbiB9OwogICAgIHVu
c2lnbmVkIG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB7IDAgfTsKICNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBpbnQgZXZlbnROdW1iZXI7Ci0jZWxpZiBQTEFURk9STShXUEUpCi0gICAgdWlu
dDMyX3QgbV9idXR0b25TdGF0ZTsKKyAgICBpbnQgZXZlbnROdW1iZXIgeyAwIH07CisjZW5kaWYK
KyNpZiBQTEFURk9STShXUEUpCisgICAgdWludDMyX3QgbV9idXR0b25TdGF0ZSB7IDAgfTsKICAg
ICBWZWN0b3I8c3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+IG1fdG91Y2hFdmVudHM7
CiAgICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV91cGRhdGVkVG91Y2hFdmVudHM7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Q
cm92aWRlck1vY2suY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3Zp
ZGVyTW9jay5jcHAKaW5kZXggNmY5M2NhMjczMDMwZjU3NzZlMzE4ZjllNDU2OTAyMmNlZTE0Yjkw
ZC4uYzQyNTFiMzAxZmI1NTRjN2VhZTYwMzE2Mjc1OTZmNTBiNzhhMjU5ZCAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKQEAgLTYz
LDkgKzYzLDkgQEAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6On5HZW9sb2NhdGlvblByb3ZpZGVy
TW9jaygpCiAgICAgV0tHZW9sb2NhdGlvbk1hbmFnZXJTZXRQcm92aWRlcihtX2dlb2xvY2F0aW9u
TWFuYWdlciwgMCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0
aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0
dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGlu
ZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29s
IHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIEdlb2xvY2F0aW9u
UHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8
ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlv
bmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBt
X3Bvc2l0aW9uLmFkb3B0KFdLR2VvbG9jYXRpb25Qb3NpdGlvbkNyZWF0ZV9jKFdhbGxUaW1lOjpu
b3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwg
YWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNj
dXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlk
ZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCkpOworICAgIG1f
cG9zaXRpb24uYWRvcHQoV0tHZW9sb2NhdGlvblBvc2l0aW9uQ3JlYXRlX2MoV2FsbFRpbWU6Om5v
dygpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBh
Y2N1cmFjeSwgYWx0aXR1ZGUuaGFzVmFsdWUoKSwgYWx0aXR1ZGUudmFsdWVPcigwKSwgYWx0aXR1
ZGVBY2N1cmFjeS5oYXNWYWx1ZSgpLCBhbHRpdHVkZUFjY3VyYWN5LnZhbHVlT3IoMCksIGhlYWRp
bmcuaGFzVmFsdWUoKSwgaGVhZGluZy52YWx1ZU9yKDApLCBzcGVlZC5oYXNWYWx1ZSgpLCBzcGVl
ZC52YWx1ZU9yKDApLCBmbG9vckxldmVsLmhhc1ZhbHVlKCksIGZsb29yTGV2ZWwudmFsdWVPcigw
KSkpOwogCiAgICAgbV9oYXNFcnJvciA9IGZhbHNlOwogICAgIG1fZXJyb3JNZXNzYWdlLmNsZWFy
KCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlk
ZXJNb2NrLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2Nr
LmgKaW5kZXggMWVkNGFkZjliMzkzOTNhMzMzYWEzMjUxMDk3YjllM2FhNDJjYzM2Yi4uOWJmNjMz
ODRhZTI3ZGIyOGM1ZjU0MDU2ODViODhmNzViZWQ3YjUxNiAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaApAQCAtMzcsNyArMzcsNyBAQCBw
dWJsaWM6CiAgICAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2soV0tDb250ZXh0UmVmKTsKICAgICB+
R2VvbG9jYXRpb25Qcm92aWRlck1vY2soKTsKIAotICAgIHZvaWQgc2V0UG9zaXRpb24oZG91Ymxl
IGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUg
aGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNG
bG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8
ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRp
b25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRv
dWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRQb3NpdGlvblVuYXZhaWxhYmxlRXJyb3Io
V0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKIAogICAgIHZvaWQgc3RhcnRVcGRhdGluZyhXS0dl
b2xvY2F0aW9uTWFuYWdlclJlZik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDZhMDhhYWE2YjYzOWYzZjU1YzhjNDZhOTRjMmZlOTVkYjU0N2Y3ODIuLmFkNGEyNWFlNWIw
N2I3NThlMmUwYTkxZmFmMWI1MjgzMDNlYjg0OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuY3BwCkBAIC03NSw5ICs3NSw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnVwZGF0ZUlzb2xhdGVkVHJlZU1vZGUoKQogfQogI2VuZGlmCiAKLXZvaWQgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkK
IHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgdGhpcyk7CiB9CiAK
IEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCkBAIC05
NiwxNyArOTYsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5jZWRBY2Nl
c3NpYmlsaXR5RW5hYmxlZCgpCiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKKwogUmVmPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgp
CiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3QgPSBzdGF0
aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdl
KSk7Ci0KICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHJvb3QpOwog
fQogCiBSZWY8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OmZvY3VzZWRFbGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgUGxhdGZvcm1VSUVs
ZW1lbnQgZm9jdXNlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tB
Y2Nlc3NpYmlsaXR5Rm9jdXNlZE9iamVjdChwYWdlKSk7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNyZWF0ZShmb2N1c2VkRWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmgKaW5kZXggNjZjMzQzODIyYmJiYzY5NTk5YmFmNmE0NzY2MGExMzg3ZWUyNTFi
MC4uZDljMmYxMjZmODcxY2UyZWVmMDdiMDAzNTgwZjZkYWNlNmM1NDIzNSAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgfkFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVm
LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAg
dm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAgICAgdmlydHVhbCBKU0NsYXNz
UmVmIHdyYXBwZXJDbGFzcygpOwogICAgIAogICAgIC8vIEVuaGFuY2VkIGFjY2Vzc2liaWxpdHku
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQppbmRleCBi
OWY1ZWVmZmE0NjQ5ZjQxN2Y4MmIxNjE3MDlmNGFiYWUwOTk5MWYyLi41MmUzZWZhOTkxYjlkZDZj
MTc1ZGJiOGU0MTBlNmZlY2ZhYzMwMTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdl
bmVyYXRvclRlc3RSdW5uZXIucG0KQEAgLTI2MSw4ICsyNjEsNyBAQCAke2ltcGxlbWVudGF0aW9u
Q2xhc3NOYW1lfSogdG8ke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSgogCiBKU0NsYXNzUmVmICR7Y2xhc3NOYW1lfTo6JHtjbGFzc1JlZkdldHRlcn0oKQog
ewotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7Ci0gICAgaWYgKCFqc0NsYXNzKSB7Cisg
ICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NSZWYganNDbGFzcyA9IFtdIHsKICAgICAgICAgSlNDbGFz
c0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OwogICAgICAg
ICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJAe1skdHlwZS0+bmFtZV19IjsKICAgICAgICAgZGVm
aW5pdGlvbi5wYXJlbnRDbGFzcyA9IEB7WyRzZWxmLT5fcGFyZW50Q2xhc3NSZWZHZXR0ZXJFeHBy
ZXNzaW9uKCRpbnRlcmZhY2UpXX07CkBAIC0yNzQsOCArMjczLDggQEAgRU9GCiAgICAgcHVzaChA
Y29udGVudHMsICIgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBmaW5hbGl6ZTtcbiIpIHVu
bGVzcyBfcGFyZW50SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCiAgICAgcHVzaChAY29udGVudHMs
IDw8RU9GKTsKLSAgICAgICAganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwot
ICAgIH0KKyAgICAgICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0o
KTsKICAgICByZXR1cm4ganNDbGFzczsKIH0KIApAQCAtNDc3LDEwICs0NzYsMTEgQEAgc3ViIF9w
bGF0Zm9ybVR5cGVDb25zdHJ1Y3RvcgogewogICAgIG15ICgkc2VsZiwgJHR5cGUsICRhcmd1bWVu
dE5hbWUpID0gQF87CiAKLSAgICByZXR1cm4gIkpTVmFsdWVUb051bGxhYmxlQm9vbGVhbihjb250
ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0eXBl
LT5pc051bGxhYmxlOworICAgIHJldHVybiAidG9PcHRpb25hbEJvb2woY29udGV4dCwgJGFyZ3Vt
ZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkdHlwZS0+aXNOdWxsYWJs
ZTsKICAgICByZXR1cm4gIkpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50TmFtZSki
IGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gIiRhcmd1bWVudE5hbWUi
IGlmICR0eXBlLT5uYW1lIGVxICJvYmplY3QiOwotICAgIHJldHVybiAiYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSkiIGlmICQkc2VsZntj
b2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gImNyZWF0ZUpT
U3RyaW5nKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0t
PklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsRG91YmxlKGNvbnRl
eHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJpbWl0aXZl
VHlwZSgkdHlwZSkgJiYgJHR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikiIGlmICQkc2VsZntjb2RlR2Vu
ZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gInRvIiAuIF9pbXBs
ZW1lbnRhdGlvbkNsYXNzTmFtZSgkdHlwZSkgLiAiKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIjsK
IH0KQEAgLTQ5OSwxOCArNDk5LDE2IEBAIHN1YiBfcGxhdGZvcm1UeXBlVmFyaWFibGVEZWNsYXJh
dGlvbgogICAgICAgICAiSlNWYWx1ZVJlZiIgPT4gMSwKICAgICApOwogCi0gICAgbXkgJG51bGxW
YWx1ZSA9ICIwIjsKKyAgICBteSAkbnVsbFZhbHVlID0gIm51bGxwdHIiOwogICAgIGlmICgkcGxh
dGZvcm1UeXBlIGVxICJKU1ZhbHVlUmVmIikgewogICAgICAgICAkbnVsbFZhbHVlID0gIkpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpIjsKLSAgICB9IGVsc2lmIChkZWZpbmVkICRub25Qb2lu
dGVyVHlwZXN7JHBsYXRmb3JtVHlwZX0gJiYgJHBsYXRmb3JtVHlwZSBuZSAiZG91YmxlIikgewot
ICAgICAgICAkbnVsbFZhbHVlID0gIiRwbGF0Zm9ybVR5cGUoKSI7CisgICAgfSBlbHNpZiAoZGVm
aW5lZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9KSB7CisgICAgICAgICRudWxsVmFs
dWUgPSAkdHlwZS0+aXNOdWxsYWJsZSA/ICJXVEY6Om51bGxvcHQiIDogIiRwbGF0Zm9ybVR5cGUo
KSI7CiAgICAgfQogCi0gICAgJHBsYXRmb3JtVHlwZSAuPSAiKiIgdW5sZXNzIGRlZmluZWQgJG5v
blBvaW50ZXJUeXBlc3skcGxhdGZvcm1UeXBlfTsKLQotICAgIHJldHVybiAiJHBsYXRmb3JtVHlw
ZSAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiAmJiAkY29uc3RydWN0b3I7IiBpZiAkY29uZGl0
aW9uICYmICRwbGF0Zm9ybVR5cGUgZXEgImJvb2wiOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlw
ZSAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiA/ICRjb25zdHJ1Y3RvciA6ICRudWxsVmFsdWU7
IiBpZiAkY29uZGl0aW9uOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAkdmFyaWFibGVOYW1l
ID0gJGNvbnN0cnVjdG9yOyI7CisgICAgcmV0dXJuICJib29sICR2YXJpYWJsZU5hbWUgPSAkY29u
ZGl0aW9uICYmICRjb25zdHJ1Y3RvcjsiIGlmICRjb25kaXRpb24gJiYgJHBsYXRmb3JtVHlwZSBl
cSAiYm9vbCI7CisgICAgcmV0dXJuICJhdXRvICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uID8g
JGNvbnN0cnVjdG9yIDogJG51bGxWYWx1ZTsiIGlmICRjb25kaXRpb247CisgICAgcmV0dXJuICJh
dXRvICR2YXJpYWJsZU5hbWUgPSAkY29uc3RydWN0b3I7IjsKIH0KIAogc3ViIF9yZXR1cm5FeHBy
ZXNzaW9uCkBAIC01MTgsMTEgKzUxNiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBt
eSAoJHNlbGYsICRyZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAi
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1
bmRlZmluZWQiOwotICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQs
ICR7ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJl
dHVyblR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtl
eHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJu
VHlwZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0
LCAke2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAg
IHJldHVybiAiJHtleHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7
CiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIg
aWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwot
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9u
fS5nZXQoKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5U
eXBlKTsKKyAgICByZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgp
KSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwog
ICAgIHJldHVybiAidG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwog
fQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL1Rlc3RSdW5uZXIuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAppbmRleCBmYmVmMzk2ZjVmNmYzYmZmNGY5OWM4
YTU2YTZlNjJhYzAxNDBmZmE0Li5mMzdlMDA2Nzc1YjhlMzA2MWM3Y2VjOGY5YjVlZjc4ODYxODA5
MTBhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL1Rlc3RSdW5uZXIuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKQEAgLTIxNSw3ICsyMTUsNyBAQCBpbnRl
cmZhY2UgVGVzdFJ1bm5lciB7CiAKICAgICAvLyBHZW9sb2NhdGlvbgogICAgIHVuZGVmaW5lZCBz
ZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhbiB2YWx1ZSk7Ci0gICAgdW5kZWZpbmVkIHNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgYWx0aXR1ZGUsIG9wdGlvbmFsIG9i
amVjdCBhbHRpdHVkZUFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgaGVhZGluZywgb3B0aW9uYWwg
b2JqZWN0IHNwZWVkLCBvcHRpb25hbCBvYmplY3QgZmxvb3JMZXZlbCk7CisgICAgdW5kZWZpbmVk
IHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBkb3VibGU/IGFsdGl0dWRlLCBvcHRpb25h
bCBkb3VibGU/IGFsdGl0dWRlQWNjdXJhY3ksIG9wdGlvbmFsIGRvdWJsZT8gaGVhZGluZywgb3B0
aW9uYWwgZG91YmxlPyBzcGVlZCwgb3B0aW9uYWwgZG91YmxlPyBmbG9vckxldmVsKTsKICAgICB1
bmRlZmluZWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKERPTVN0
cmluZyBlcnJvck1lc3NhZ2UpOwogICAgIGJvb2xlYW4gaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0
aXZlKCk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDU1M2ZkMDVlZjE2
OWYzNTIzYTA0MzFmMTMxNzQyZmJjMjIxNzA0MDkuLjQ0MjdmMDg5MjYwMTZhYTM0ODM5NzIyYzcx
YmMzYTA2MTJkZDI3ZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcApAQCAtMjYs
MTAgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kaW5n
Q29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1
ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAj
aW5jbHVkZSAiSlNFdmVudFNlbmRpbmdDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVu
Y3Rpb25zLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW5jbHVkZSA8V2ViS2l0
L1dLQnVuZGxlRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUHJpdmF0ZS5o
PgpAQCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgTWVudUl0ZW1Qcml2YXRlRGF0YSB7CiB9OwogCiAj
aWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCisKIHN0YXRpYyBKU1ZhbHVlUmVmIG1lbnVJdGVtQ2xp
Y2tDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKIHsK
ICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJ
dGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtNjIs
NyArNjMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNrQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iagogc3RhdGljIEpTVmFsdWVSZWYgZ2V0
TWVudUl0ZW1UaXRsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBv
YmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQog
ewogICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRhID0gc3RhdGljX2Nhc3Q8TWVu
dUl0ZW1Qcml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZSA9IGFkb3B0V0soV0tDb250ZXh0TWVudUl0ZW1D
b3B5VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQoKSkpOworICAgIGF1dG8gd2tUaXRsZSA9
IGFkb3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5n
ZXQoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHdrVGl0
bGUpLmdldCgpKTsKIH0KIApAQCAtNzMsMTggKzc0LDE3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdl
dE1lbnVJdGVtQ2hpbGRyZW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYKICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1l
bnVJdGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CiAgICAgYXV0
byBjaGlsZHJlbiA9IGFkb3B0V0soV0tDb250ZXh0TWVudUNvcHlTdWJtZW51SXRlbXMocHJpdmF0
ZURhdGEtPm1faXRlbS5nZXQoKSkpOwogCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpT
T2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOworICAgIGF1dG8gYXJyYXkgPSBKU09i
amVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAoIVdLQXJyYXlHZXRTaXpl
KGNoaWxkcmVuLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgICAgICBy
ZXR1cm4gYXJyYXk7CiAKLSAgICBKU09iamVjdFJlZiBhcnJheU9iamVjdCA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBXS0FycmF5R2V0U2l6ZShjaGlsZHJlbi5nZXQoKSk7ICsraSkgewogICAgICAgICBhdXRvIGl0
ZW0gPSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdElu
ZGV4KGNoaWxkcmVuLmdldCgpLCBpKSk7CiAgICAgICAgIGF1dG8qIHByaXZhdGVEYXRhID0gbmV3
IE1lbnVJdGVtUHJpdmF0ZURhdGEoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBpdGVtKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4
dCwgYXJyYXlPYmplY3QsIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRNZW51SXRlbUNsYXNz
KCksIHByaXZhdGVEYXRhKSwgMCk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFz
cygpLCBwcml2YXRlRGF0YSksIDApOwogICAgIH0KIAotICAgIHJldHVybiBhcnJheVJlc3VsdDsK
KyAgICByZXR1cm4gYXJyYXk7CiB9CiAKIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY01l
bnVJdGVtRnVuY3Rpb25zW10gPSB7CkBAIC0xMjYsNiArMTI2LDcgQEAgc3RhdGljIEpTQ2xhc3NS
ZWYgZ2V0TWVudUl0ZW1DbGFzcygpCiAKICAgICByZXR1cm4gbWVudUl0ZW1DbGFzczsKIH0KKwog
I2VuZGlmCiAKIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXIoSlNTdHJpbmdS
ZWYgbW9kaWZpZXIpCkBAIC0xNTAsMjUgKzE1MSwzMSBAQCBzdGF0aWMgV0tFdmVudE1vZGlmaWVy
cyBwYXJzZU1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyKQogICAgIHJldHVybiAwOwogfQog
Ci1zdGF0aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGFycmF5KQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK3N0YXRpYyB1aW50NjRf
dCBwYXJzZVRvdWNoTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIpCiB7Ci0gICAgYXV0byBs
ZW5ndGhTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIDApOwotICAgIGlmICghbGVuZ3RoVmFs
dWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CisgICAgaWYgKEpTU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJjdHJsIikpCisgICAgICAgIHJldHVy
biBrV0tFdmVudE1vZGlmaWVyc0NvbnRyb2xLZXk7CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobW9kaWZpZXIsICJzaGlmdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRN
b2RpZmllcnNTaGlmdEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
b2RpZmllciwgImFsdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2RpZmllcnNBbHRLZXk7
CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJtZXRhS2V5
IikpCisgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVyc01ldGFLZXk7CisgICAgcmV0dXJu
IDA7CiB9CiAKKyNlbmRpZgorCiBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVy
QXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKICAg
ICBpZiAoIWFycmF5VmFsdWUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gVGhlIHZhbHVl
IG1heSBlaXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJh
eSBvZiBtb2RpZmllcnMuCi0gICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZh
bHVlKSkgewotICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgYXJyYXlWYWx1ZSwgMCkpOwotICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihz
dHJpbmcuZ2V0KCkpOwotICAgIH0KKyAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFy
cmF5VmFsdWUpKQorICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihjcmVhdGVKU1N0cmluZyhj
b250ZXh0LCBhcnJheVZhbHVlKS5nZXQoKSk7CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChj
b250ZXh0LCBhcnJheVZhbHVlKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzYsMjkgKzE4Mywy
MCBAQCBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYQogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5
TGVuZ3RoKGNvbnRleHQsIGFycmF5KTsKICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9
IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCAmZXhjZXB0aW9uKTsK
LSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBh
dXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsICZl
eGNlcHRpb24pKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBtb2RpZmllcnMgfD0gcGFyc2VNb2RpZmllcihzdHJpbmcuZ2V0KCkpOworICAg
ICAgICBpZiAoYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQs
IGFycmF5LCBpLCBudWxscHRyKSkKKyAgICAgICAgICAgIG1vZGlmaWVycyB8PSBwYXJzZU1vZGlm
aWVyKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CiAgICAgfQogICAgIHJl
dHVybiBtb2RpZmllcnM7CiB9CiAKLVJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXIpOwotfQotCi1FdmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyKCkKK3N0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZp
ZXJBcnJheShKU1ZhbHVlUmVmIGFycmF5VmFsdWUpCiB7CisgICAgcmV0dXJuIHBhcnNlTW9kaWZp
ZXJBcnJheShXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpLCBh
cnJheVZhbHVlKTsKIH0KIAotRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXIoKQorUmVmPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+IEV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmNyZWF0ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXZlbnRTZW5kaW5n
Q29udHJvbGxlcik7CiB9CiAKIEpTQ2xhc3NSZWYgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6d3Jh
cHBlckNsYXNzKCkKQEAgLTIwNiwyMzcgKzIwNCwxMTYgQEAgSlNDbGFzc1JlZiBFdmVudFNlbmRp
bmdDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogICAgIHJldHVybiBKU0V2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OmV2ZW50U2VuZGluZ0NvbnRyb2xsZXJDbGFzcygpOwogfQogCi1lbnVtIE1vdXNl
U3RhdGUgewotICAgIE1vdXNlVXAsCi0gICAgTW91c2VEb3duCi19OworZW51bSBNb3VzZVN0YXRl
IHsgTW91c2VVcCwgTW91c2VEb3duIH07CiAKLXN0YXRpYyBXS011dGFibGVEaWN0aW9uYXJ5UmVm
IGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VTdGF0ZSBzdGF0ZSwgaW50IGJ1dHRvbiwgV0tF
dmVudE1vZGlmaWVycyBtb2RpZmllcnMpCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5
UmVmPiBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlU3RhdGUgc3RhdGUsIGludCBidXR0b24s
IFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQogewotICAgIFdLTXV0YWJsZURpY3Rpb25hcnlS
ZWYgRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKHN0YXRlID09IE1vdXNlVXAgPyAiTW91c2VVcCIgOiAiTW91c2VEb3du
IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgc3Vi
TWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGJ1dHRvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkJ1dHRvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gYnV0dG9u
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b24pKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHksIGJ1dHRvbktleS5nZXQoKSwgYnV0dG9uUmVm
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlmaWVyc1JlZiA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUobW9kaWZpZXJzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LCBtb2RpZmllcnNLZXkuZ2V0KCksIG1vZGlmaWVyc1JlZi5nZXQoKSk7Ci0KLSAg
ICByZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1l
c3NhZ2UiLCBzdGF0ZSA9PSBNb3VzZVVwID8gIk1vdXNlVXAiIDogIk1vdXNlRG93biIpOworICAg
IHNldFZhbHVlKGJvZHksICJCdXR0b24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbikp
LmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTW9kaWZpZXJzIiwgYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShtb2RpZmllcnMpKS5nZXQoKSk7CisgICAgcmV0dXJuIGJvZHk7CiB9CiAKIHZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYg
bW9kaWZpZXJBcnJheSkgCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBpbmplY3RlZEJ1
bmRsZS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9kaWZp
ZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFycmF5
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZURvd24sIGJ1dHRv
biwgbW9kaWZpZXJzKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhwYWdlLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgi
RXZlbnRTZW5kZXIiLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBw
YXJzZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJheSkpLmdldCgpKTsKIH0KIAogdm9pZCBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZp
ZXJBcnJheSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50
TW9kaWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmll
ckFycmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5k
ZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBi
dXR0b24sIG1vZGlmaWVycykpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBj
cmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlVXAsIGJ1dHRvbiwgcGFyc2VNb2RpZmllckFycmF5
KG1vZGlmaWVyQXJyYXkpKS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6bW91c2VNb3ZlVG8oaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2Fn
ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZU1vdmVUbyIpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3Nh
Z2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
WCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0soV0tEb3Vi
bGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHks
ICJTdWJNZXNzYWdlIiwgIk1vdXNlTW92ZVRvIik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlki
LCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CiAgICAgbV9wb3NpdGlvbiA9IFdL
UG9pbnRNYWtlKHgsIHkpOwotICAgIAotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgMCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwg
Ym9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3Jj
ZUNsaWNrKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2Vu
ZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiTW91c2VGb3JjZUNsaWNrIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3Vi
TWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZUNsaWNr
Iik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5n
ZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c3RhcnRBbmRDYW5jZWxN
b3VzZUZvcmNlQ2xpY2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1
Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNz
YWdlIiwgIlN0YXJ0QW5kQ2FuY2VsTW91c2VGb3JjZUNsaWNrIik7CisgICAgcG9zdFN5bmNocm9u
b3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZURvd24oKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlRG93
biIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJT
dWJNZXNzYWdlIiwgIk1vdXNlRm9yY2VEb3duIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5n
Q29udHJvbGxlcjo6bW91c2VGb3JjZVVwKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rp
b25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2Fn
ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2Ui
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VGb3JjZVVwIikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2Fn
ZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAi
TW91c2VGb3JjZVVwIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2Vu
ZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91
c2VGb3JjZUNoYW5nZWQoZG91YmxlIGZvcmNlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2Fn
ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlQ2hhbmdlZCIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1
Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkZvcmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBmb3JjZVJl
ZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoZm9yY2UpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGZvcmNlS2V5LmdldCgpLCBmb3JjZVJl
Zi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwor
ICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZUZvcmNlQ2hhbmdlZCIpOworICAg
IHNldFZhbHVlKGJvZHksICJGb3JjZSIsIGZvcmNlKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMZWFwRm9y
d2FyZCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVGltZUluTWlsbGlzZWNvbmRzIikpOwotICAgIFdLUmV0YWluUHRy
PFdLVUludDY0UmVmPiB0aW1lUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29u
ZHMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHRpbWVLZXkuZ2V0KCksIHRpbWVSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAi
TGVhcEZvcndhcmQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiVGltZUluTWlsbGlzZWNvbmRzIiwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMpKS5nZXQoKSk7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZv
aWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljaygpCiB7
Ci0gICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOwotICAgIGludCBidXR0b24gPSAw
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsK
LQotICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSBkb3duLgotICAgIFdLUmV0YWluUHRyPFdLTXV0
YWJsZURpY3Rpb25hcnlSZWY+IG1vdXNlRG93bk1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVN
b3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlRG93bk1lc3NhZ2VCb2R5
LmdldCgpKTsKLQotICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSB1cC4KLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtb3VzZVVwTWVzc2FnZUJvZHkgPSBhZG9wdFdLKGNy
ZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlVXBNZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNl
TWVzc2FnZUJvZHkoTW91c2VEb3duLCAwLCAwKS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdl
KCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgMCwgMCkuZ2V0
KCkpOwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3Jl
YXRlS2V5RG93bk1lc3NhZ2VCb2R5KEpTU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBt
b2RpZmllcnMsIGludCBsb2NhdGlvbikKIHsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleURvd24iKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5
LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4ga2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5
IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwga2V5S2V5LmdldCgpLCB0b1dLKGtleSkuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZp
ZXJzUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyc0tleS5n
ZXQoKSwgbW9kaWZpZXJzUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBsb2NhdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxv
Y2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBsb2NhdGlvblJlZiA9IGFk
b3B0V0soV0tVSW50NjRDcmVhdGUobG9jYXRpb24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGxvY2F0aW9uS2V5LmdldCgpLCBsb2NhdGlv
blJlZi5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBh
dXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0
VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiS2V5RG93biIpOworICAgIHNldFZhbHVlKGJvZHks
ICJLZXkiLCB0b1dLKGtleSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJNb2RpZmllcnMi
LCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpLmdldCgpKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiTG9jYXRpb24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxvY2F0aW9uKSkuZ2V0
KCkpOworICAgIHJldHVybiBib2R5OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OmtleURvd24oSlNTdHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBs
b2NhdGlvbikKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50
TW9kaWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmll
ckFycmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5k
ZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4ga2V5RG93bk1l
c3NhZ2VCb2R5ID0gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgbW9kaWZpZXJzLCBsb2Nh
dGlvbik7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlS2V5RG93bk1lc3Nh
Z2VCb2R5KGtleSwgcGFyc2VNb2RpZmllckFycmF5KG1vZGlmaWVyQXJyYXkpLCBsb2NhdGlvbiku
Z2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNjaGVkdWxlQXN5bmNo
cm9ub3VzS2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBrZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJv
ZHkoa2V5LCAwIC8qIG1vZGlmaWVycyAqLywgMCAvKiBsb2NhdGlvbiAqLyk7Ci0KLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZUtleURvd25N
ZXNzYWdlQm9keShrZXksIDAsIDApLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250
cm9sbGVyOjptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0
YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0
YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1
Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VTY3JvbGxCeSIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0
V0soV0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCiAgICAgV0tC
dW5kbGVQYWdlRm9yY2VSZXBhaW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSk7IC8vIFRyaWdnZXJzIGEgc2Nyb2xsaW5nIHRyZWUgY29tbWl0LgotICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSk7CisKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VTY3JvbGxC
eSIpOworICAgIHNldFZhbHVlKGJvZHksICJYIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSku
Z2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5
KSkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgp
KTsKIH0KIAogc3RhdGljIHVpbnQ2NF90IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcoSlNTdHJpbmdS
ZWYgcGhhc2VTdHIpCkBAIC00NzUsOTAgKzM1Miw1OCBAQCBzdGF0aWMgdWludDY0X3QgY2dFdmVu
dE1vbWVudHVtUGhhc2VGcm9tU3RyaW5nKEpTU3RyaW5nUmVmIHBoYXNlU3RyKQogCiB2b2lkIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBo
YXNlcyhpbnQgeCwgaW50IHksIEpTU3RyaW5nUmVmIHBoYXNlU3RyLCBKU1N0cmluZ1JlZiBtb21l
bnR1bVN0cikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2Vu
ZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0g
ICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNl
cyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLSAgICAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHhSZWYg
PSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotICAg
IAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4g
eVJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7
Ci0KICAgICB1aW50NjRfdCBwaGFzZSA9IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcocGhhc2VTdHIp
OwogICAgIHVpbnQ2NF90IG1vbWVudHVtID0gY2dFdmVudE1vbWVudHVtUGhhc2VGcm9tU3RyaW5n
KG1vbWVudHVtU3RyKTsKLSAgICAKKwogICAgIGlmIChwaGFzZSA9PSA0IC8qIGtDR1Njcm9sbFBo
YXNlRW5kZWQgKi8gfHwgcGhhc2UgPT0gOCAvKiBrQ0dTY3JvbGxQaGFzZUNhbmNlbGxlZCAqLykK
ICAgICAgICAgbV9zZW50V2hlZWxQaGFzZUVuZE9yQ2FuY2VsID0gdHJ1ZTsKLSAgICAKICAgICBp
ZiAobW9tZW50dW0gPT0gMyAvKiBrQ0dNb21lbnR1bVNjcm9sbFBoYXNlRW5kICovKQogICAgICAg
ICBtX3NlbnRXaGVlbE1vbWVudHVtUGhhc2VFbmQgPSB0cnVlOwogCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHBoYXNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUGhhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHBoYXNlUmVmID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShwaGFzZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgcGhhc2VLZXkuZ2V0KCksIHBoYXNlUmVmLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb21lbnR1bUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vbWVudHVtIikpOwotICAgIFdLUmV0
YWluUHRyPFdLVUludDY0UmVmPiBtb21lbnR1bVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
bW9tZW50dW0pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIG1vbWVudHVtS2V5LmdldCgpLCBtb21lbnR1bVJlZi5nZXQoKSk7Ci0KICAgICBX
S0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpKTsgLy8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcgdHJlZSBjb21taXQuCi0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpKTsKKworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZVNjcm9s
bEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIs
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
WSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiUGhhc2UiLCBwaGFzZSk7CisgICAgc2V0VmFsdWUoYm9keSwgIk1vbWVudHVtIiwgbW9tZW50
dW0pOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0K
IAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeShp
bnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5Iikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
c3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0gYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0
V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcGFnZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJQYWdlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcGFn
ZWRSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHBhZ2VkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwYWdlZEtleS5nZXQoKSwgcGFn
ZWRSZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkNvbnRpbnVv
dXNNb3VzZVNjcm9sbEJ5Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlBhZ2VkIiwgcGFn
ZWQpOwogICAgIC8vIEZJWE1FOiBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIGFzeW5jaHJvbm91cywg
YXMgc2Nyb2xsaW5nIGlzIGludHJpbnNpY2FsbHkgYXN5bmNocm9ub3VzLgogICAgIC8vIFNlZSBh
bHNvOiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODI1Nj4uCi0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
LmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogSlNWYWx1
ZVJlZiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250ZXh0Q2xpY2soKQogewotICAgIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogI2lmIEVOQUJMRShDT05URVhUX01F
TlVTKQotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IG1lbnVFbnRyaWVzID0gYWRvcHRXSyhX
S0J1bmRsZVBhZ2VDb3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlv
bikpOwotICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250
ZXh0LCAwLCAwLCAwKTsKKyAgICBhdXRvIG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1bmRsZVBh
Z2VDb3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikpOworICAg
IGF1dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBp
ZiAoIW1lbnVFbnRyaWVzKQotICAgICAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgICAgIHJl
dHVybiBhcnJheTsKIAotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKICAgICBzaXplX3QgZW50cmllc1NpemUgPSBXS0Fy
cmF5R2V0U2l6ZShtZW51RW50cmllcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBlbnRyaWVzU2l6ZTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChXS0FycmF5
R2V0SXRlbUF0SW5kZXgobWVudUVudHJpZXMuZ2V0KCksIGkpKSA9PSBXS0NvbnRleHRNZW51SXRl
bUdldFR5cGVJRCgpKTsKIAogICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJlZiBpdGVtID0gc3Rh
dGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZW51
RW50cmllcy5nZXQoKSwgaSkpOwogICAgICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRl
RGF0YSA9IG5ldyBNZW51SXRlbVByaXZhdGVEYXRhKHBhZ2UsIGl0ZW0pOwotICAgICAgICBKU09i
amVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwgaSwgSlNPYmplY3RNYWtl
KGNvbnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAwKTsKKyAgICAgICAg
SlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFr
ZShjb250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCksIHByaXZhdGVEYXRhKSwgMCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgIHJldHVybiBhcnJheTsKICNlbHNlCiAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogI2VuZGlmCkBAIC02MTUsMjEg
KzQ2MCwxNCBAQCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKiB0b01vbml0b3JXaGVlbEV2ZW50
c09wdGlvbnMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVgogICAgIGlmICghSlNWYWx1ZUlzT2Jq
ZWN0KGNvbnRleHQsIGFyZ3VtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBh
dXRvIHJlc2V0TGF0Y2hpbmdTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygicmVzZXRMYXRjaGluZyIpKTsKLSAgICBhdXRvIHJlc2V0TGF0Y2hpbmdWYWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3Vt
ZW50LCBudWxscHRyKSwgcmVzZXRMYXRjaGluZ1N0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAg
ICBib29sIHJlc2V0TGF0Y2hpbmcgPSB0cnVlOwotICAgIGlmIChyZXNldExhdGNoaW5nVmFsdWUg
JiYgSlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5nVmFsdWUpKQotICAgICAg
ICByZXNldExhdGNoaW5nID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5n
VmFsdWUpOwotCiAgICAgc3RhdGljIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMgb3B0aW9uczsK
LSAgICBvcHRpb25zLnJlc2V0TGF0Y2hpbmcgPSByZXNldExhdGNoaW5nOworICAgIG9wdGlvbnMu
cmVzZXRMYXRjaGluZyA9IGJvb2xlYW5Qcm9wZXJ0eShjb250ZXh0LCAoSlNPYmplY3RSZWYpYXJn
dW1lbnQsICJyZXNldExhdGNoaW5nIiwgdHJ1ZSk7CiAgICAgcmV0dXJuICZvcHRpb25zOwogfQog
CiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vbml0b3JXaGVlbEV2ZW50cyhNb25pdG9y
V2hlZWxFdmVudHNPcHRpb25zKiBvcHRpb25zKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8g
cGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICAK
ICAgICBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgPSBmYWxzZTsKICAgICBtX3NlbnRXaGVl
bE1vbWVudHVtUGhhc2VFbmQgPSBmYWxzZTsKQEAgLTY2Myw3ICs1MDEsNyBAQCB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6OmNhbGxBZnRlclNjcm9sbGluZ0NvbXBsZXRlcyhKU1ZhbHVlUmVm
IGZ1bmN0aW9uQ2FsbAogICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgCkBA
IC02ODMsMTk5ICs1MjEsMTAyIEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FsbEFm
dGVyU2Nyb2xsaW5nQ29tcGxldGVzKEpTVmFsdWVSZWYgZnVuY3Rpb25DYWxsCiB9CiAKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmFkZFRv
dWNoUG9pbnQoaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRUb3VjaFBvaW50IikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtl
eS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikp
OwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geVJlZiA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJB
ZGRUb3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oeCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHkpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5
LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp1cGRhdGVUb3VjaFBv
aW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2Fn
ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVcGRhdGVUb3VjaFBvaW50IikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3Vi
TWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGluZGV4UmVm
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXkuZ2V0KCksIGluZGV4UmVm
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJ
bnQ2NFJlZj4geFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoeCkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJl
Zi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IHlSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlS
ZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsK
KyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Cisg
ICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiVXBkYXRlVG91Y2hQb2ludCIpOworICAg
IHNldFZhbHVlKGJvZHksICJJbmRleCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbmRleCkpOwor
ICAgIHNldFZhbHVlKGJvZHksICJYIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHgpKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAiWSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih5KSk7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKLXZv
aWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihjb25zdCBKU1N0cmlu
Z1JlZiAmbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQordm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVy
OjpzZXRUb3VjaE1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0VG91Y2hNb2RpZmllciIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1l
LmdldCgpKTsKLQotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kID0gMDsKLSAgICBpZiAoSlNTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImN0cmwiKSkKLSAgICAgICAgbW9kID0g
a1dLRXZlbnRNb2RpZmllcnNDb250cm9sS2V5OwotICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1vZGlmaWVyLCAic2hpZnQiKSkKLSAgICAgICAgbW9kID0ga1dLRXZlbnRNb2Rp
ZmllcnNTaGlmdEtleTsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2Rp
ZmllciwgImFsdCIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlmaWVyc0FsdEtleTsKLSAg
ICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgIm1ldGEiKSkKLSAg
ICAgICAgbW9kID0ga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5OwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1vZGlmaWVyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiTW9kaWZpZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlm
aWVyUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2QpKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyS2V5LmdldCgpLCBt
b2RpZmllclJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRW5hYmxlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBlbmFibGVSZWYgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGVuYWJsZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgZW5hYmxlS2V5LmdldCgpLCBlbmFibGVSZWYuZ2V0KCkpOwotCi0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
IlN1Yk1lc3NhZ2UiLCAiU2V0VG91Y2hNb2RpZmllciIpOworICAgIHNldFZhbHVlKGJvZHksICJN
b2RpZmllciIsIHBhcnNlVG91Y2hNb2RpZmllcihtb2RpZmllcikpOworICAgIHNldFZhbHVlKGJv
ZHksICJFbmFibGUiLCBlbmFibGUpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJF
dmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCi0KIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFRvdWNoUG9pbnRSYWRpdXMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFt
ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1giKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHJhZGl1c1gpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhL
ZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNZIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShyYWRpdXNZKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwg
IlNldFRvdWNoUG9pbnRSYWRpdXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUmFkaXVzWCIsIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihyYWRpdXNYKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlJhZGl1
c1kiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmFkaXVzWSkpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoU3RhcnQoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxl
RGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVz
c2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaFN0YXJ0IikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0
YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2Ui
LCAiVG91Y2hTdGFydCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNl
bmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRv
dWNoTW92ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNl
bmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRvdWNoTW92ZSIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3Nh
Z2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
MCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlRvdWNoTW92ZSIpOworICAgIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQog
CiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoRW5kKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hFbmQi
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCks
IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3Vi
TWVzc2FnZSIsICJUb3VjaEVuZCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJF
dmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+
IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hDYW5jZWwiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgp
LCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJUb3VjaENhbmNl
bCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHku
Z2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNsZWFyVG91Y2hQb2lu
dHMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDbGVhclRvdWNoUG9pbnRzIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVz
c2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiQ2xlYXJUb3VjaFBvaW50cyIp
OworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0
KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnJlbGVhc2VUb3VjaFBvaW50
KGludCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50
U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUmVsZWFzZVRvdWNoUG9pbnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgp
LCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
aW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5kZXhSZWYgPSBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwgaW5kZXhSZWYuZ2V0KCkpOwotCi0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
IlN1Yk1lc3NhZ2UiLCAiUmVsZWFzZVRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
SW5kZXgiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXgpKTsKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1
Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fu
Y2VsVG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgIFdLUmV0YWluUHRyPFdL
VUludDY0UmVmPiBpbmRleFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGluZGV4
S2V5LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJDYW5jZWxU
b3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIkluZGV4Iiwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGluZGV4KSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2Vu
ZGVyIiwgYm9keS5nZXQoKSk7CiB9CisKICNlbmRpZgogCiAvLyBPYmplY3QgQ3JlYXRpb24KIAot
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3ZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3Qs
ICJldmVudFNlbmRlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkoY29udGV4dCwgImV2ZW50U2VuZGVyIiwgdGhpcyk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRleCA5YTJhZmQ5NThjY2Q3
MGVjZDIxZWM0ZTNiM2ZlYzRjZjdjYzg1YmE4Li5lYTQzN2ZiZGJlMGMzNDg5MDU3ZTMxNjA3NWFk
ZWE2NTNhZGI1MTBkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaApAQCAtMzAsMjcgKzMw
LDIzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLR2VvbWV0cnkuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Lmg+CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVm
OwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVmOwordHlwZWRlZiBj
b25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFtZXNwYWNlIFdUUiB7
CiAKIHN0cnVjdCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zIHsKLSAgICBNb25pdG9yV2hlZWxF
dmVudHNPcHRpb25zKGJvb2wgcmVzZXRMYXRjaGluZyA9IHRydWUpCi0gICAgICAgIDogcmVzZXRM
YXRjaGluZyhyZXNldExhdGNoaW5nKQotICAgIHsgfQotCiAgICAgYm9vbCByZXNldExhdGNoaW5n
IHsgdHJ1ZSB9OwogfTsKIAogTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyogdG9Nb25pdG9yV2hl
ZWxFdmVudHNPcHRpb25zKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAKLWNsYXNzIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgeworY2xhc3MgRXZlbnRTZW5k
aW5nQ29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFs
IH5FdmVudFNlbmRpbmdDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3Qo
SlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbik7CiAKLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFw
cGVyQ2xhc3MoKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAog
ICAgIHZvaWQgbW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSk7
CiAgICAgdm9pZCBtb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSk7
CkBAIC03Myw3ICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGtleURvd24oSlNTdHJpbmdSZWYg
a2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2NhdGlvbik7CiAgICAgdm9pZCBz
Y2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24oSlNTdHJpbmdSZWYga2V5KTsKIAotICAgIC8vIFpv
b20gZnVuY3Rpb25zLgogICAgIHZvaWQgdGV4dFpvb21JbigpOwogICAgIHZvaWQgdGV4dFpvb21P
dXQoKTsKICAgICB2b2lkIHpvb21QYWdlSW4oKTsKQEAgLTgxLDEwICs3Niw5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNjYWxlUGFnZUJ5KGRvdWJsZSBzY2FsZSwgZG91YmxlIHgsIGRvdWJsZSB5KTsK
IAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgLy8gVG91Y2ggZXZlbnRzLgogICAgIHZv
aWQgYWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpOwogICAgIHZvaWQgdXBkYXRlVG91Y2hQb2lu
dChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSk7Ci0gICAgdm9pZCBzZXRUb3VjaE1vZGlmaWVyKGNv
bnN0IEpTU3RyaW5nUmVmICZtb2RpZmllciwgYm9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0VG91
Y2hNb2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllciwgYm9vbCBlbmFibGUpOwogICAgIHZvaWQg
c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOwogICAgIHZvaWQg
dG91Y2hTdGFydCgpOwogICAgIHZvaWQgdG91Y2hNb3ZlKCk7CkBAIC05Niw3ICs5MCwxMCBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyKCk7
CisgICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlcigpID0gZGVmYXVsdDsKKworICAgIEpTQ2xhc3NS
ZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CisKICAgICBXS1BvaW50IG1fcG9zaXRpb247CiAgICAg
Ym9vbCBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9z
ZW50V2hlZWxNb21lbnR1bVBoYXNlRW5kIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcAppbmRleCA5MzU4
ZjRhMGRlNWIzZDliYzMxNmI1ZTBhZGZkMDQxMjY2NDI1OGZmLi5kYjQyNWU3NWU4MGIwNTQwOGJk
ZjNlM2UzNjQ3NjUxMDk2MzBkM2ZkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0zNywxNCArMzcsNiBAQCBS
ZWY8R0NDb250cm9sbGVyPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgR0NDb250cm9sbGVyKTsKIH0KIAotR0NDb250cm9sbGVyOjpHQ0NvbnRyb2xsZXIo
KQotewotfQotCi1HQ0NvbnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIoKQotewotfQotCiBKU0NsYXNz
UmVmIEdDQ29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKIHsKICAgICByZXR1cm4gSlNHQ0NvbnRy
b2xsZXI6OmdDQ29udHJvbGxlckNsYXNzKCk7CkBAIC02NSwxMSArNTcsOSBAQCBzaXplX3QgR0ND
b250cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkKICAgICByZXR1cm4gV0tCdW5kbGVHZXRKYXZh
U2NyaXB0T2JqZWN0c0NvdW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSk7
CiB9CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRv
d09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVj
dChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5k
b3dPYmplY3QsICJHQ0NvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIHNl
dEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJHQ0NvbnRyb2xsZXIiLCB0aGlzKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaAppbmRleCBkMzQ5YzFjZTk5MGU4N2Q3ZGYyZmNi
OGM4Mjg4NWJjYTMwNTcyYTBiLi4zNGFiMjQyNTEzOGMxZDc1ZmIyNGEyNTEwNzQzNjc4ZDgxOWVk
YzIyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dD
Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
R0NDb250cm9sbGVyLmgKQEAgLTI2LDI2ICsyNiwyNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJKU1dyYXBwYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29u
dGV4dFJlZjsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIEdDQ29udHJvbGxlciA6IHB1Ymxp
YyBKU1dyYXBwYWJsZSB7CitjbGFzcyBHQ0NvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgSlNXcmFw
cGFibGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R0NDb250cm9sbGVyPiBjcmVhdGUoKTsK
LSAgICB2aXJ0dWFsIH5HQ0NvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQgbWFrZVdpbmRvd09iamVj
dChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKTsKIAotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdy
YXBwZXJDbGFzcygpOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwog
CiAgICAgdm9pZCBjb2xsZWN0KCk7CiAgICAgdm9pZCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQo
Ym9vbCB3YWl0VW50aWxEb25lKTsKICAgICBzaXplX3QgZ2V0SlNPYmplY3RDb3VudCgpOwogCiBw
cml2YXRlOgotICAgIEdDQ29udHJvbGxlcigpOworICAgIEdDQ29udHJvbGxlcigpID0gZGVmYXVs
dDsKKworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggN2FlODFiYjRiNTkwOTZjNThjOGI1YTE0
Yzg4YzRjMzNmOGMxNDU3MS4uN2YxNjIxNTA3NGEwMjk3ZjJhNjc5YzE5NTQ4M2FkMjk4MDlmOGEy
MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJJbmplY3Rl
ZEJ1bmRsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgorI2luY2x1ZGUgIkRpY3Rp
b25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKLSNpbmNs
dWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dL
QnVuZGxlLmg+CkBAIC0xMTgsMTggKzExOCwxMyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRD
cmVhdGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIGlmICghaXNNYWluUGFnZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluaXRpYWxpemF0aW9u
IikpOwogICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOwogICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KG1fYnVuZGxlLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXN1bHQpOworICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShtX2J1bmRsZSwgdG9XSygiSW5pdGlhbGl6YXRp
b24iKS5nZXQoKSwgbnVsbHB0ciwgJnJlc3VsdCk7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECi0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJlc3VsdCkgPT0gV0tEaWN0aW9u
YXJ5R2V0VHlwZUlEKCkpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gaW5pdGlh
bGl6YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+
KHJlc3VsdCkpOworICAgIGF1dG8gaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhk
aWN0aW9uYXJ5VmFsdWUocmVzdWx0KSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
cmVzdW1lVGVzdGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlJlc3VtZVRlc3RpbmciKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VtZVRlc3RpbmdWYWx1ZSA9IFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5LmdldCgpLCBy
ZXN1bWVUZXN0aW5nS2V5LmdldCgpKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmVzdW1lVGVz
dGluZ1ZhbHVlKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgaWYgKFdLQm9vbGVhbkdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdW1lVGVzdGluZ1ZhbHVlKSkpCisg
ICAgaWYgKGJvb2xlYW5WYWx1ZShpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkuZ2V0KCksICJSZXN1
bWVUZXN0aW5nIikpCiAgICAgICAgIGJlZ2luVGVzdGluZyhpbml0aWFsaXphdGlvbkRpY3Rpb25h
cnkuZ2V0KCksIEJlZ2luZ1Rlc3RpbmdNb2RlOjpSZXN1bWUpOwogfQogCkBAIC0xNzksMTYgKzE3
NCwxOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldExvY2FsU2V0dGluZ3MoKQogICAgIHNl
dGxvY2FsZShMQ19BTEwsICIiKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkK
K3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKFdLU3RyaW5nUmVmLCBXS1R5
cGVSZWYpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFcnJvciIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShtX2J1bmRsZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgdG9XSygiRXJyb3IiKS5n
ZXQoKSwgdG9XSygiVW5rbm93biIpLmdldCgpKTsKK30KKwordm9pZCBJbmplY3RlZEJ1bmRsZTo6
cG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBuYW1lLCBX
S1R5cGVSZWYgYm9keSkKK3sKKyAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCB0b1dL
KG5hbWUpLmdldCgpLCBib2R5KTsKIH0KIAogc3RhdGljIHZvaWQgcG9zdEdDVGFzayh2b2lkKiBj
b250ZXh0KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gcmVpbnRlcnByZXRfY2FzdDxX
S0J1bmRsZVBhZ2VSZWY+KGNvbnRleHQpOworICAgIGF1dG8gcGFnZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8V0tCdW5kbGVQYWdlUmVmPihjb250ZXh0KTsKICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucmVwb3J0TGl2ZURvY3VtZW50cyhwYWdlKTsKICAgICBXS1JlbGVhc2UocGFnZSk7CiB9
CkBAIC0xOTksNjcgKzE5Nyw0NCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXBvcnRMaXZlRG9j
dW1lbnRzKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIFdLQnVuZGxlUmVsZWFzZU1lbW9yeSht
X2J1bmRsZSk7CiAKICAgICBjb25zdCBib29sIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCA9
IHRydWU7Ci0gICAgYXV0byBkb2N1bWVudFVSTHMgPSBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURv
Y3VtZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VH
cm91cCkpOwotICAgIGF1dG8gYWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJMaXZlRG9jdW1lbnRzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBkb2N1bWVudFVSTHMuZ2V0KCkpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZShwYWdlLCAiTGl2ZURvY3VtZW50cyIsIGFkb3B0V0soV0tCdW5k
bGVHZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3Vt
ZW50c0luUGFnZUdyb3VwKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZl
TWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKIHsKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkJlZ2luVGVzdCIpKSB7CiAgICAgICAgIEFTU0VSVCht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGR1bXBQaXhlbHNLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wUGl4ZWxzIikpOwotICAg
ICAgICBtX2R1bXBQaXhlbHMgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBk
dW1wUGl4ZWxzS2V5LmdldCgpKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB0aW1lb3V0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGlt
ZW91dCIpKTsKLSAgICAgICAgbV90aW1lb3V0ID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhX
S1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdGltZW91dEtleS5nZXQoKSkpKSk7Ci0K
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
cktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBKU0NvbnNv
bGVMb2dJblN0ZEVyciIpKTsKLSAgICAgICAgbV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBX
S0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnJLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFja01l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWNrIikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWdpblRlc3QiKSk7Ci0gICAgICAg
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBhY2tN
ZXNzYWdlQm9keS5nZXQoKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBtX2R1bXBQaXhlbHMgPSBi
b29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRHVtcFBpeGVscyIpOworICAgICAg
ICBtX3RpbWVvdXQgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKFdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRp
bWVvdXQiKSkpKTsKKyAgICAgICAgbV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBib29sZWFu
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIik7
CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZShwYWdlLCAiQWNrIiwgIkJlZ2luVGVzdCIpOwogICAg
ICAgICBiZWdpblRlc3RpbmcobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBCZWdpbmdUZXN0aW5nTW9k
ZTo6TmV3KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzZXQiKSkgewogICAgICAgICBBU1NFUlQo
bWVzc2FnZUJvZHkpOwotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ganNjT3B0aW9uc0tleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkpTQ09wdGlvbnMiKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zU3RyaW5nID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBqc2NPcHRpb25zS2V5LmdldCgpKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBq
c2NPcHRpb25zU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KHZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIkpTQ09wdGlvbnMiKSk7CiAgICAgICAgIGlmIChqc2NPcHRpb25zU3Ry
aW5nKSB7CiAgICAgICAgICAgICBTdHJpbmcgb3B0aW9ucyA9IHRvV1RGU3RyaW5nKGpzY09wdGlv
bnNTdHJpbmcpOwogICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpzZXRPcHRpb25zKG9wdGlvbnMu
dXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc2hvdWxkR0NLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTaG91bGRHQyIpKTsKLSAgICAgICAgYm9vbCBzaG91bGRHQyA9IFdLQm9vbGVhbkdldFZhbHVl
KHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHNob3VsZEdDS2V5LmdldCgpKSkpOworICAgICAgICBib29sIHNo
b3VsZEdDID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlNob3VsZEdDIik7
CiAgICAgICAgIGlmIChzaG91bGRHQykKICAgICAgICAgICAgIFdLQnVuZGxlR2FyYmFnZUNvbGxl
Y3RKYXZhU2NyaXB0T2JqZWN0cyhtX2J1bmRsZSk7CiAKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElU
WV9JU09MQVRFRF9UUkVFKQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXhJc29s
YXRlZE1vZGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2Nl
c3NpYmlsaXR5SXNvbGF0ZWRUcmVlIikpOwotICAgICAgICBtX2FjY2Vzc2liaWxpdHlJc29sYXRl
ZFRyZWVNb2RlID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYXhJc29sYXRl
ZE1vZGVLZXkuZ2V0KCkpKSk7CisgICAgICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1v
ZGUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQWNjZXNzaWJpbGl0eUlz
b2xhdGVkVHJlZSIpOwogI2VuZGlmCiAgICAgICAgIAotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gYWxsb3dlZEhvc3RzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQWxsb3dlZEhvc3RzIikpOwotICAgICAgICBXS1R5cGVSZWYgYWxsb3dlZEhvc3Rz
VmFsdWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
YWxsb3dlZEhvc3RzS2V5LmdldCgpKTsKKyAgICAgICAgYXV0byBhbGxvd2VkSG9zdHNWYWx1ZSA9
IHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkFsbG93ZWRIb3N0cyIpOwogICAgICAgICBp
ZiAoYWxsb3dlZEhvc3RzVmFsdWUgJiYgV0tHZXRUeXBlSUQoYWxsb3dlZEhvc3RzVmFsdWUpID09
IFdLQXJyYXlHZXRUeXBlSUQoKSkgewogICAgICAgICAgICAgbV9hbGxvd2VkSG9zdHMuY2xlYXIo
KTsKLQotICAgICAgICAgICAgV0tBcnJheVJlZiBhbGxvd2VkSG9zdHNBcnJheSA9IHN0YXRpY19j
YXN0PFdLQXJyYXlSZWY+KGFsbG93ZWRIb3N0c1ZhbHVlKTsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwLCBzaXplID0gV0tBcnJheUdldFNpemUoYWxsb3dlZEhvc3RzQXJyYXkpOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0
SXRlbUF0SW5kZXgoYWxsb3dlZEhvc3RzQXJyYXksIGkpOwotICAgICAgICAgICAgICAgIGlmIChp
dGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpCi0gICAgICAg
ICAgICAgICAgICAgIG1fYWxsb3dlZEhvc3RzLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8g
YXJyYXkgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihhbGxvd2VkSG9zdHNWYWx1ZSk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGFycmF5KTsg
aSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgICAgICBtX2FsbG93ZWRIb3N0cy5hcHBlbmQodG9X
VEZTdHJpbmcoV0tBcnJheUdldEl0ZW1BdEluZGV4KGFycmF5LCBpKSkpOwogICAgICAgICB9CiAK
ICAgICAgICAgbV9zdGF0ZSA9IElkbGU7CkBAIC0yNzUsOSArMjUwLDcgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
U3RyaW5nUmVmIG0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiR2V0TGl2ZURvY3VtZW50cyIpKSB7CiAgICAgICAgIGNvbnN0IGJvb2wgZXhjbHVk
ZURvY3VtZW50c0luUGFnZUdyb3VwID0gZmFsc2U7Ci0gICAgICAgIGF1dG8gZG9jdW1lbnRVUkxz
ID0gYWRvcHRXSyhXS0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUsIG1fcGFnZUdy
b3VwLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXApKTsKLSAgICAgICAgYXV0byBhY2tNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxpdmVEb2N1
bWVudHMiKSk7Ci0gICAgICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGFja01lc3Nh
Z2VOYW1lLmdldCgpLCBkb2N1bWVudFVSTHMuZ2V0KCkpOworICAgICAgICBwb3N0UGFnZU1lc3Nh
Z2UoIkxpdmVEb2N1bWVudHMiLCBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJMcyht
X2J1bmRsZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDI4LDcgKzQwMSw3IEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0
cmluZ1JlZiBtCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnM7CiAgICAgICAgIGRvbWFp
bnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJh
eUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CisgICAgICAgICAgICBhdXRvIGl0ZW0g
PSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKICAgICAgICAgICAgIGlm
IChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpCiAgICAg
ICAgICAgICAgICAgZG9tYWlucy5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KGl0ZW0pKSk7CiAgICAgICAgIH0KQEAgLTQ0Niw3ICs0MTksNyBAQCB2b2lkIEluamVj
dGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwg
V0tTdHJpbmdSZWYgbQogICAgICAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5zOwogICAgICAgICBk
b21haW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdL
QXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5zQXJyYXksIGkpOworICAgICAgICAgICAgYXV0byBp
dGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CiAgICAgICAgICAg
ICBpZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKQog
ICAgICAgICAgICAgICAgIGRvbWFpbnMudW5jaGVja2VkQXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwogICAgICAgICB9CkBAIC00NjcsMTcgKzQ0MCwx
MCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2FsbFVJU2lkZVNjcmlwdENhbGxiYWNr
IikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0
YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiByZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJSZXN1bHQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Q2FsbGJhY2tJRCIpKTsKLQotICAgICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gKHVuc2lnbmVk
KVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBjYWxsYmFja0lES2V5LmdldCgpKSkp
OwotCi0gICAgICAgIFdLU3RyaW5nUmVmIHJlc3VsdFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
cmVzdWx0S2V5LmdldCgpKSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0SlNTdHJpbmcgPSB0b0pTKHJl
c3VsdFN0cmluZyk7Ci0KLSAgICAgICAgbV90ZXN0UnVubmVyLT5ydW5VSVNjcmlwdENhbGxiYWNr
KGNhbGxiYWNrSUQsIHJlc3VsdEpTU3RyaW5nLmdldCgpKTsKKyAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIGNhbGxiYWNrSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJDYWxs
YmFja0lEIik7CisgICAgICAgIGF1dG8gcmVzdWx0U3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiUmVzdWx0Iik7CisgICAgICAgIG1fdGVzdFJ1bm5lci0+cnVuVUlT
Y3JpcHRDYWxsYmFjayhjYWxsYmFja0lELCB0b0pTKHJlc3VsdFN0cmluZykuZ2V0KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC00OTgsMjkgKzQ2NCwxNyBAQCB2b2lkIEluamVjdGVk
QnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tT
dHJpbmdSZWYgbQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkIikp
IHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc0tleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk51bWJlck9mUHJldmFsZW50UmVzb3VyY2Vz
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0
aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbnVtYmVyT2ZQcmV2YWxl
bnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wUHJl
dmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9u
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wUHJldmFsZW50
UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVkaWFuRGF5c1NpbmNlVXNlckludGVy
YWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJ
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM051bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVJIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJIikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91
dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlh
blN1YlJlc291cmNlV2l0aG91dFVJIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0
VUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuRGF0YVJl
Y29yZHNSZW1vdmVkV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSIpKTsKLSAgICAg
ICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzID0gKHVuc2ln
bmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlByZXZhbGVudFJl
c291cmNlc0tleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVz
b3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVl
KHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3BQcmV2YWxlbnRSZXNv
dXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24gPSAodW5zaWdu
ZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcFByZXZhbGVudFJlc291cmNl
V2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpKTsK
LSAgICAgICAgdW5zaWduZWQgbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50
UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRS
ZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVk
IHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSA9ICh1bnNpZ25lZClXS1VJbnQ2
NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2Vz
V2l0aFVJS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViRnJhbWVX
aXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRv
cDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSUtleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQg
dG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUlLZXkuZ2V0
KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0
VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRp
YW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVk
IHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50
NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRX
aXRob3V0VUlLZXkuZ2V0KCkpKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBudW1iZXJPZlBy
ZXZhbGVudFJlc291cmNlcyA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk51
bWJlck9mUHJldmFsZW50UmVzb3VyY2VzIik7CisgICAgICAgIGF1dG8gbnVtYmVyT2ZQcmV2YWxl
bnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9u
Iik7CisgICAgICAgIGF1dG8gbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTnVtYmVyT2ZQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8g
dG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVy
YWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wUHJldmFsZW50
UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uIik7Cisg
ICAgICAgIGF1dG8gbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3Vy
Y2VXaXRoVXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiTWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNl
ckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gdG9wM051bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM051bWJl
ck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJIik7CisgICAgICAgIGF1dG8gdG9wM01lZGlhblN1
YkZyYW1lV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9w
M01lZGlhblN1YkZyYW1lV2l0aG91dFVJIik7CisgICAgICAgIGF1dG8gdG9wM01lZGlhblN1YlJl
c291cmNlV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9w
M01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJIik7CisgICAgICAgIGF1dG8gdG9wM01lZGlhblVu
aXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIlRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUkiKTsKKyAgICAgICAgYXV0byB0
b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSIp
OwogCiAgICAgICAgIG1fdGVzdFJ1bm5lci0+c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxi
YWNrKG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNl
c1dpdGhVc2VySW50ZXJhY3Rpb24sIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbiwgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5
c1NpbmNlVXNlckludGVyYWN0aW9uLCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2
YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24sIHRvcDNOdW1iZXJPZlByZXZhbGVudFJl
c291cmNlc1dpdGhVSSwgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJLCB0b3AzTWVkaWFuU3Vi
UmVzb3VyY2VXaXRob3V0VUksIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUksIHRv
cDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkpOwogICAgICAgICByZXR1cm47CkBA
IC01NDEsMzEgKzQ5NSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdl
VG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVycm9yIikpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5rbm93biIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShwYWdlLCBlcnJvck1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5
LmdldCgpKTsKLX0KLQotYm9vbCBJbmplY3RlZEJ1bmRsZTo6Ym9vbGVhbkZvcktleShXS0RpY3Rp
b25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQotewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB3a0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoa2V5KSk7Ci0gICAgV0tUeXBlUmVmIHZhbHVlID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShkaWN0aW9uYXJ5LCB3a0tleS5nZXQoKSk7Ci0gICAgaWYgKFdLR2V0VHlwZUlEKHZhbHVlKSAh
PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSkgewotICAgICAgICBvdXRwdXRUZXh0KG1ha2VTdHJpbmco
IkJvb2xlYW4gdmFsdWUgZm9yIGtleSIsIGtleSwgIiBub3QgZm91bmQgaW4gZGljdGlvbmFyeVxu
IikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBXS0Jvb2xlYW5H
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHZhbHVlKSk7Ci19Ci0KLVN0cmluZyBJ
bmplY3RlZEJ1bmRsZTo6c3RyaW5nRm9yS2V5KFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBj
b25zdCBjaGFyKiBrZXkpCi17Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhrZXkpKTsKLSAgICBXS1N0cmlu
Z1JlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KGRpY3Rpb25hcnksIHdrS2V5LmdldCgpKSk7Ci0gICAgaWYgKCF2YWx1ZSkgewotICAg
ICAgICBvdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlN0cmluZyB2YWx1ZSBmb3Iga2V5Iiwga2V5LCAi
IG5vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5XG4iKSk7Ci0gICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwotICAgIH0KLSAgICByZXR1cm4gdG9XVEZTdHJpbmcodmFsdWUpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiRXJyb3IiLCAiVW5rbm93biIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpi
ZWdpblRlc3RpbmcoV0tEaWN0aW9uYXJ5UmVmIHNldHRpbmdzLCBCZWdpbmdUZXN0aW5nTW9kZSB0
ZXN0aW5nTW9kZSkKQEAgLTU5OCwxMSArNTI4LDExIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmJl
Z2luVGVzdGluZyhXS0RpY3Rpb25hcnlSZWYgc2V0dGluZ3MsIEJlZ2luZ1Rlc3RpbmdNb2RlIHRl
CiAgICAgV0tCdW5kbGVTZXRBbGxvd1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTFMobV9idW5kbGUs
IG1fcGFnZUdyb3VwLCBmYWxzZSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFdL
QnVuZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24ocGFnZSgpLT5wYWdl
KCksICFib29sZWFuRm9yS2V5KHNldHRpbmdzLCAiVXNlRmxleGlibGVWaWV3cG9ydCIpKTsKKyAg
ICBXS0J1bmRsZVBhZ2VTZXRVc2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKHBhZ2UoKS0+
cGFnZSgpLCAhYm9vbGVhblZhbHVlKHNldHRpbmdzLCAiVXNlRmxleGlibGVWaWV3cG9ydCIpKTsK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpz
ZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcoc3RyaW5nRm9yS2V5KHNl
dHRpbmdzLCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKSk7CisgICAgV2ViQ29yZVRl
c3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3RpbmcodG9X
VEZTdHJpbmcoc3RyaW5nVmFsdWUoc2V0dGluZ3MsICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VU
eXBlcyIpKSk7CiAjZW5kaWYKIAogICAgIG1fdGVzdFJ1bm5lci0+c2V0UGx1Z2luc0VuYWJsZWQo
dHJ1ZSk7CkBAIC02NjAsMjUgKzU5MCwxNSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkb25lKCkK
ICAgICBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5yZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7
CiAjZW5kaWYKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkb25lTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb25lIikpOwotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGRvbmVNZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBwaXhlbFJlc3VsdElzUGVuZGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0SXNQZW5kaW5nIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gcGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShk
b25lTWVzc2FnZUJvZHkuZ2V0KCksIHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5LmdldCgpLCBwaXhl
bFJlc3VsdElzUGVuZGluZy5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwogCi0gICAgaWYgKCFtX3BpeGVsUmVzdWx0SXNQZW5kaW5n
KSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0IikpOwotICAg
ICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgcGl4ZWxSZXN1
bHRLZXkuZ2V0KCksIG1fcGl4ZWxSZXN1bHQuZ2V0KCkpOwotICAgIH0KLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiByZXBhaW50UmVjdHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJSZXBhaW50UmVjdHMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIHJlcGFpbnRSZWN0c0tleS5nZXQoKSwgbV9yZXBhaW50
UmVjdHMuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJQaXhlbFJlc3VsdElzUGVuZGluZyIs
IG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpOworICAgIGlmICghbV9waXhlbFJlc3VsdElzUGVuZGlu
ZykKKyAgICAgICAgc2V0VmFsdWUoYm9keSwgIlBpeGVsUmVzdWx0IiwgbV9waXhlbFJlc3VsdC5n
ZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlJlcGFpbnRSZWN0cyIsIG1fcmVwYWludFJlY3Rz
LmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiQXVkaW9SZXN1bHQiLCBtX2F1ZGlvUmVzdWx0
LmdldCgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdWRpb1Jlc3VsdEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF1ZGlvUmVzdWx0IikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCBhdWRpb1Jlc3Vs
dEtleS5nZXQoKSwgbV9hdWRpb1Jlc3VsdC5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCksIGRvbmVN
ZXNzYWdlTmFtZS5nZXQoKSwgZG9uZU1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCks
IHRvV0soIkRvbmUiKS5nZXQoKSwgYm9keS5nZXQoKSk7CiAKICAgICBjbG9zZU90aGVyUGFnZXMo
KTsKIApAQCAtNjkxLDkgKzYxMSw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmNsb3NlT3RoZXJQ
YWdlcygpCiAgICAgc2l6ZV90IHNpemUgPSBtX3BhZ2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMTsgaSA8IHNpemU7ICsraSkKICAgICAgICAgcGFnZXNUb0Nsb3NlLmFwcGVuZChtX3Bh
Z2VzW2ldLT5wYWdlKCkpOwotICAgIHNpemUgPSBwYWdlc1RvQ2xvc2Uuc2l6ZSgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBXS0J1bmRsZVBhZ2VDbG9z
ZShwYWdlc1RvQ2xvc2VbaV0pOworICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2VzVG9DbG9zZSkK
KyAgICAgICAgV0tCdW5kbGVQYWdlQ2xvc2UocGFnZSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OmR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMoU3RyaW5nQnVpbGRlciYgc3RyaW5n
QnVpbGRlcikKQEAgLTcwOSwxMyArNjI4LDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZHVtcFRv
U3RkRXJyKGNvbnN0IFN0cmluZyYgb3V0cHV0KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG91
dHB1dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJEdW1wVG9TdGRFcnIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VC
b2R5OwotICAgIGlmIChhdXRvIHV0ZjggPSBvdXRwdXQudHJ5R2V0VXRmOCgpKQotICAgICAgICBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodXRmOC0+
ZGF0YSgpKSk7Ci0gICAgZWxzZQotICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk91dCBvZiBtZW1vcnlcbiIpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IGhhdmUgdG8gY29udmVy
dCB0byBVVEYtOCBpbnN0ZWFkIG9mIHVzaW5nIHRvV0s/CisgICAgYXV0byBzdHJpbmcgPSBvdXRw
dXQudHJ5R2V0VXRmOCgpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRHVtcFRvU3RkRXJyIiwgc3Ry
aW5nID8gc3RyaW5nLT5kYXRhKCkgOiAiT3V0IG9mIG1lbW9yeVxuIik7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6Om91dHB1dFRleHQoY29uc3QgU3RyaW5nJiBvdXRwdXQpCkBAIC03MjQsMjgw
ICs2MzksMTU1IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6Om91dHB1dFRleHQoY29uc3QgU3RyaW5n
JiBvdXRwdXQpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAob3V0cHV0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRleHRPdXRwdXQiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5OwotICAgIGlmIChhdXRvIHV0
ZjggPSBvdXRwdXQudHJ5R2V0VXRmOCgpKQotICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodXRmOC0+ZGF0YSgpKSk7Ci0gICAgZWxzZQot
ICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk91dCBvZiBtZW1vcnlcbiIpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IGhhdmUg
dG8gY29udmVydCB0byBVVEYtOCBpbnN0ZWFkIG9mIHVzaW5nIHRvV0s/CisgICAgYXV0byBzdHJp
bmcgPSBvdXRwdXQudHJ5R2V0VXRmOCgpOwogICAgIC8vIFdlIHVzZSBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUoKSBpbnN0ZWFkIG9mIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKCkgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHRleHQgb3V0cHV0CiAgICAg
Ly8gaXMgZG9uZSB2aWEgYXN5bmNocm9ub3VzIElQQywgZXZlbiBpZiB0aGUgY29ubmVjdGlvbiBp
cyBpbiBmdWxseSBzeW5jaHJvbm91cyBtb2RlIGR1ZSB0byBhIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKCkKICAgICAvLyBjYWxsLiBPdGhlcndpc2UsIG1lc3Nh
Z2VzIGxvZ2dlZCB2aWEgc3luYyBhbmQgYXN5bmMgSVBDIG1heSBlbmQgdXAgb3V0IG9mIG9yZGVy
IGFuZCBjYXVzZSBmbGFraW5lc3MuCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmlu
Z0Z1bGx5U3luY2hyb25vdXNNb2RlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdG
dWxseVN5bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgdG9XSygiVGV4dE91dHB1dCIpLmdl
dCgpLCB0b1dLKHN0cmluZyA/IHN0cmluZy0+ZGF0YSgpIDogIk91dCBvZiBtZW1vcnlcbiIpLmdl
dCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVy
blZhbHVlKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQmVmb3JlVW5s
b2FkUmV0dXJuVmFsdWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIs
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlOjpwb3N0QWRkQ2hyb21lSW5wdXRGaWVsZCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQWRkQ2hyb21lSW5wdXRGaWVsZCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiQWRkQ2hyb21lSW5wdXRGaWVsZCIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
Ojpwb3N0UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
Ojpwb3N0Rm9jdXNXZWJWaWV3KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJGb2N1c1dl
YlZpZXciKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkZvY3VzV2ViVmlldyIp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKGRv
dWJsZSBiYWNraW5nU2NhbGVGYWN0b3IpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
QmFja2luZ1NjYWxlRmFjdG9yIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYmFja2luZ1NjYWxlRmFjdG9yKSk7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRCYWNraW5n
U2NhbGVGYWN0b3IiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGJhY2tpbmdTY2FsZUZhY3Rvcikp
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFNldFdpbmRvd0lzS2V5KGJvb2wgaXNL
ZXkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0V2luZG93SXNLZXkiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKGlzS2V5KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcocGFnZSgpLT5wYWdlKCksIHRvV0soIlNldFdpbmRvd0lzS2V5IikuZ2V0KCksIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGlzS2V5KSkuZ2V0KCksIDApOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjpwb3N0U2V0Vmlld1NpemUoZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFZpZXdTaXplIikpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHdpZHRoS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygid2lkdGgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlaWdodEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlaWdodCIpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tEb3Vi
bGVSZWY+IHdpZHRoV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHdpZHRoKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgd2lkdGhLZXkuZ2V0KCksIHdpZHRo
V0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGhlaWdodFdLID0gYWRv
cHRXSyhXS0RvdWJsZUNyZWF0ZShoZWlnaHQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1l
c3NhZ2VCb2R5LmdldCgpLCBoZWlnaHRLZXkuZ2V0KCksIGhlaWdodFdLLmdldCgpKTsKLQotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8g
Ym9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAid2lkdGgiLCB3aWR0aCk7CisgICAgc2V0VmFsdWUoYm9keSwgImhlaWdodCIsIGhl
aWdodCk7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
cGFnZSgpLT5wYWdlKCksIHRvV0soIlNldFZpZXdTaXplIikuZ2V0KCksIGJvZHkuZ2V0KCksIDAp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25D
bGljayh1aW50NjRfdCBub3RpZmljYXRpb25JRCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90aWZpY2F0aW9u
SUQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNp
bXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2siLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG5vdGlm
aWNhdGlvbklEKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0QWRkc1Zpc2l0
ZWRMaW5rcyhib29sIGFkZHNWaXNpdGVkTGlua3MpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0QWRkc1Zpc2l0ZWRMaW5rcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWRkc1Zpc2l0ZWRMaW5rcykp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0QWRk
c1Zpc2l0ZWRMaW5rcyIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGFkZHNWaXNpdGVkTGlua3Mp
KSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihi
b29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRHZW9sb2NhdGlvblBlcm1pc3Npb24iLCBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSkpOwogfQogCi12b2lkIEluamVjdGVkQnVu
ZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBs
b25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUg
YWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVB
Y2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3Zp
ZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJsZSBm
bG9vckxldmVsKQordm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9w
dGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFj
eSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRp
b25hbDxkb3VibGU+IGZsb29yTGV2ZWwpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsYXRpdHVkZUtleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGF0aXR1ZGUiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGxhdGl0dWRlV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3Jl
YXRlKGxhdGl0dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgbGF0aXR1ZGVLZXlXSy5nZXQoKSwgbGF0aXR1ZGVXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbG9uZ2l0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJsb25naXR1ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVS
ZWY+IGxvbmdpdHVkZVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShsb25naXR1ZGUpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBsb25naXR1ZGVLZXlXSy5n
ZXQoKSwgbG9uZ2l0dWRlV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJh
Y2N1cmFjeSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gYWNjdXJhY3lXSyA9IGFk
b3B0V0soV0tEb3VibGVDcmVhdGUoYWNjdXJhY3kpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KG1lc3NhZ2VCb2R5LmdldCgpLCBhY2N1cmFjeUtleVdLLmdldCgpLCBhY2N1cmFjeVdLLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRlS2V5V0sg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0FsdGl0dWRl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcHJvdmlkZXNBbHRpdHVkZVdLID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNBbHRpdHVkZSkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVLZXlXSy5nZXQo
KSwgcHJvdmlkZXNBbHRpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBhbHRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiYWx0aXR1ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGFsdGl0dWRlV0sg
PSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGFsdGl0dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWx0aXR1ZGVLZXlXSy5nZXQoKSwgYWx0aXR1ZGVXSy5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNBbHRpdHVkZUFj
Y3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92
aWRlc0FsdGl0dWRlQWNjdXJhY3kiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBw
cm92aWRlc0FsdGl0dWRlQWNjdXJhY3lXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJv
ZHkuZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpLCBwcm92aWRlc0Fs
dGl0dWRlQWNjdXJhY3lXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
YWx0aXR1ZGVBY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiYWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4g
YWx0aXR1ZGVBY2N1cmFjeVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShhbHRpdHVkZUFjY3Vy
YWN5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWx0aXR1
ZGVBY2N1cmFjeUtleVdLLmdldCgpLCBhbHRpdHVkZUFjY3VyYWN5V0suZ2V0KCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzSGVhZGluZ0tleVdLID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNIZWFkaW5nIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcHJvdmlkZXNIZWFkaW5nV0sgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShwcm92aWRlc0hlYWRpbmcpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1l
c3NhZ2VCb2R5LmdldCgpLCBwcm92aWRlc0hlYWRpbmdLZXlXSy5nZXQoKSwgcHJvdmlkZXNIZWFk
aW5nV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlYWRpbmdLZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlYWRpbmciKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGhlYWRpbmdXSyA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUoaGVhZGluZykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0
KCksIGhlYWRpbmdLZXlXSy5nZXQoKSwgaGVhZGluZ1dLLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc1NwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc1NwZWVkIikpOwotICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gcHJvdmlkZXNTcGVlZFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJv
dmlkZXNTcGVlZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCks
IHByb3ZpZGVzU3BlZWRLZXlXSy5nZXQoKSwgcHJvdmlkZXNTcGVlZFdLLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzcGVlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygic3BlZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVS
ZWY+IHNwZWVkV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNwZWVkKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgc3BlZWRLZXlXSy5nZXQoKSwgc3BlZWRX
Sy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNGbG9vckxl
dmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRl
c0Zsb29yTGV2ZWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc0Zs
b29yTGV2ZWxXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzRmxvb3JMZXZlbCkp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzRmxv
b3JMZXZlbEtleVdLLmdldCgpLCBwcm92aWRlc0Zsb29yTGV2ZWxXSy5nZXQoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmxvb3JMZXZlbEtleVdLID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZmxvb3JMZXZlbCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0RvdWJsZVJlZj4gZmxvb3JMZXZlbFdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShmbG9vckxl
dmVsKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgZmxvb3JM
ZXZlbEtleVdLLmdldCgpLCBmbG9vckxldmVsV0suZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJsYXRpdHVkZSIsIGxhdGl0dWRlKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAibG9uZ2l0dWRlIiwgbG9uZ2l0dWRlKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiYWNjdXJhY3kiLCBhY2N1cmFjeSk7CisgICAgc2V0VmFsdWUoYm9keSwgImFsdGl0dWRlIiwg
YWx0aXR1ZGUpOworICAgIHNldFZhbHVlKGJvZHksICJhbHRpdHVkZUFjY3VyYWN5IiwgYWx0aXR1
ZGVBY2N1cmFjeSk7CisgICAgc2V0VmFsdWUoYm9keSwgImhlYWRpbmciLCBoZWFkaW5nKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAic3BlZWQiLCBzcGVlZCk7CisgICAgc2V0VmFsdWUoYm9keSwgImZs
b29yTGV2ZWwiLCBmbG9vckxldmVsKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBlcnJvck1l
c3NhZ2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb25VbmF2YWlsYWJsZUVycm9yIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIs
IGVycm9yTWVzc2FnZSk7CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OmlzR2VvbG9jYXRpb25Q
cm92aWRlckFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNHZW9s
b2NhdGlvbkNsaWVudEFjdGl2ZSIpKTsKLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gaXNBY3RpdmUgPSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4ocmVzdWx0VG9QYXNzKSk7Ci0KLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUo
aXNBY3RpdmUuZ2V0KCkpOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOworICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgp
LCB0b1dLKCJJc0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikuZ2V0KCksIDAsICZyZXN1bHQpOwor
ICAgIHJldHVybiBib29sZWFuVmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdldCgpKTsKIH0KIAogdW5z
aWduZWQgSW5qZWN0ZWRCdW5kbGU6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29u
c3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVi
b2FyZCIpKTsKLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIDAsICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0
UmVmPiBpbWFnZUNvdW50ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4ocmVzdWx0
VG9QYXNzKSk7Ci0gICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2
NEdldFZhbHVlKGltYWdlQ291bnQuZ2V0KCkpKTsKKyAgICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVs
bHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhw
YWdlKCktPnBhZ2UoKSwgdG9XSygiSW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQiKS5nZXQo
KSwgMCwgJnJlc3VsdCk7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKGFkb3B0V0socmVzdWx0KS5n
ZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcm1pc3Npb24o
Ym9vbCBlbmFibGVkKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikpOwotICAgIGF1
dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRVc2VyTWVkaWFQ
ZXJtaXNzaW9uIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpKTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKCkKIHsKLSAgICBhdXRv
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVz
ZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdl
KCJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb24iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6
c2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4oYm9vbCBwZXJtaXNzaW9u
LCBXS1N0cmluZ1JlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBh
dXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4iKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0
YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
cGVybWlzc2lvbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
cGVybWlzc2lvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBlcm1pc3Npb25X
SyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHBlcm1pc3Npb24pKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwZXJtaXNzaW9uS2V5V0suZ2V0KCksIHBlcm1p
c3Npb25XSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5
V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgb3JpZ2luS2V5V0suZ2V0
KCksIG9yaWdpbik7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2lu
S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRPcmln
aW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGFyZW50
T3JpZ2luS2V5V0suZ2V0KCksIHBhcmVudE9yaWdpbik7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgInBlcm1pc3Npb24iLCBwZXJtaXNzaW9uKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAib3JpZ2luIiwgb3JpZ2luKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGFy
ZW50T3JpZ2luIiwgcGFyZW50T3JpZ2luKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFVzZXJN
ZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luIiwgYm9keSk7CiB9CiAKIHVuc2lnbmVk
IEluamVjdGVkQnVuZGxlOjp1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2lu
KFdLU3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luKSBjb25zdAogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRG
b3JPcmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSht
ZXNzYWdlQm9keS5nZXQoKSwgb3JpZ2luS2V5V0suZ2V0KCksIG9yaWdpbik7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGFyZW50T3JpZ2luS2V5V0suZ2V0KCksIHBhcmVu
dE9yaWdpbik7Ci0KLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmVzdWx0VG9QYXNzKTsKLSAgICBX
S1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gY291bnQgPSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihyZXN1bHRUb1Bhc3MpKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oV0tVSW50NjRHZXRWYWx1ZShjb3VudC5nZXQoKSkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAib3Jp
Z2luIiwgb3JpZ2luKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGFyZW50T3JpZ2luIiwgcGFyZW50
T3JpZ2luKTsKKyAgICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygi
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpLmdldCgpLCBib2R5Lmdl
dCgpLCAmcmVzdWx0KTsKKyAgICByZXR1cm4gdWludDY0VmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdl
dCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdENvdW50Rm9yT3JpZ2luKFdLU3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgcGFy
ZW50T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc2V0VXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFi
bGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5nZXQoKSwg
b3JpZ2luKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJlbnRPcmln
aW5LZXlXSy5nZXQoKSwgcGFyZW50T3JpZ2luKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAib3JpZ2luIiwgb3JpZ2luKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAicGFyZW50T3JpZ2luIiwgcGFyZW50T3JpZ2luKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJl
c2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIsIGJvZHkpOwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJs
ZWQsIGJvb2wgcGVybWlzc2l2ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDdXN0
b21Qb2xpY3lEZWxlZ2F0ZSIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVuYWJsZWRLZXlXSyA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImVuYWJsZWQiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBlbmFibGVkV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFi
bGVkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgZW5hYmxl
ZEtleVdLLmdldCgpLCBlbmFibGVkV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHBlcm1pc3NpdmVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoInBlcm1pc3NpdmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwZXJt
aXNzaXZlV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwZXJtaXNzaXZlKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGVybWlzc2l2ZUtleVdLLmdldCgp
LCBwZXJtaXNzaXZlV0suZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
YXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNl
dFZhbHVlKGJvZHksICJlbmFibGVkIiwgZW5hYmxlZCk7CisgICAgc2V0VmFsdWUoYm9keSwgInBl
cm1pc3NpdmUiLCBwZXJtaXNzaXZlKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEN1c3RvbVBv
bGljeURlbGVnYXRlIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEhpZGRl
bihib29sIGhpZGRlbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRIaWRkZW4iKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gaXNJbml0aWFsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJoaWRkZW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBpc0lu
aXRpYWxXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhpZGRlbikpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGlzSW5pdGlhbEtleVdLLmdldCgpLCBpc0lu
aXRpYWxXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUo
Ym9keSwgImhpZGRlbiIsIGhpZGRlbik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRIaWRkZW4i
LCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0Q2FjaGVNb2RlbChp
bnQgbW9kZWwpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Q2FjaGVNb2RlbCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKG1vZGVsKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgbnVsbHB0cik7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIlNldENhY2hlTW9kZWwiKS5nZXQoKSwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RlbCkpLmdldCgpLCBudWxscHRyKTsKIH0KIAogYm9v
bCBJbmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1ZSgpIGNvbnN0CkBAIC0xMDA1
LDExMCArNzk1LDczIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nlc3NXb3JrUXVl
dWUoKSBjb25zdAogICAgIGlmICghbV91c2VXb3JrUXVldWUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzV29ya1F1ZXVlRW1wdHkiKSk7Ci0gICAg
V0tUeXBlUmVmIHJlc3VsdFRvUGFzcyA9IDA7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAw
LCAmcmVzdWx0VG9QYXNzKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlzRW1wdHkg
PSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdWx0VG9QYXNzKSk7CisgICAg
V0tUeXBlUmVmIHJlc3VsdCA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIklzV29ya1F1ZXVlRW1w
dHkiKS5nZXQoKSwgMCwgJnJlc3VsdCk7CiAKICAgICAvLyBUaGUgSVBDIGZhaWxlZC4gVGhpcyBo
YXBwZW5zIHdoZW4gc3dhcHBpbmcgcHJvY2Vzc2VzIG9uIG5hdmlnYXRpb24gYmVjYXVzZSB0aGUg
V2ViUGFnZVByb3h5IHVucmVnaXN0ZXJzIGl0c2VsZgogICAgIC8vIGFzIGEgTWVzc2FnZVJlY2Vp
dmVyIGZyb20gdGhlIG9sZCBXZWJQcm9jZXNzUHJveHkgYW5kIHJlZ2lzdGVyIGl0c2VsZiB3aXRo
IHRoZSBuZXcgV2ViUHJvY2Vzc1Byb3h5IGluc3RlYWQuCi0gICAgaWYgKCFpc0VtcHR5KQorICAg
IGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gIVdLQm9v
bGVhbkdldFZhbHVlKGlzRW1wdHkuZ2V0KCkpOworICAgIGF1dG8gaXNFbXB0eSA9IGJvb2xlYW5W
YWx1ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOworICAgIHJldHVybiAhaXNFbXB0eTsKIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZTo6cHJvY2Vzc1dvcmtRdWV1ZSgpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiUHJvY2Vzc1dvcmtRdWV1ZSIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiUHJvY2Vzc1dvcmtRdWV1ZSIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpx
dWV1ZUJhY2tOYXZpZ2F0aW9uKHVuc2lnbmVkIGhvd0ZhckJhY2t3YXJkKQogewogICAgIG1fdXNl
V29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlQmFja05h
dmlnYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJCYWNrd2FyZCkpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVCYWNrTmF2aWdhdGlvbiIsIGFk
b3B0V0soV0tVSW50NjRDcmVhdGUoaG93RmFyQmFja3dhcmQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24odW5zaWduZWQgaG93RmFyRm9yd2FyZCkK
IHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJRdWV1ZUZvcndhcmROYXZpZ2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaG93RmFyRm9yd2FyZCkpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVGb3J3
YXJkTmF2aWdhdGlvbiIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaG93RmFyRm9yd2FyZCkpKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVMb2FkKFdLU3RyaW5nUmVmIHVybCwgV0tT
dHJpbmdSZWYgdGFyZ2V0LCBib29sIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpCiB7CiAgICAgbV91
c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVMb2Fk
IikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbG9hZERhdGEg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdXJsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygidXJsIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIHVy
bEtleS5nZXQoKSwgdXJsKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0YXJnZXRL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0YXJnZXQiKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgdGFyZ2V0S2V5LmdldCgpLCB0
YXJnZXQpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZE9wZW5FeHRlcm5h
bFVSTHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzaG91bGRP
cGVuRXh0ZXJuYWxVUkxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gc2hvdWxk
T3BlbkV4dGVybmFsVVJMc1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkT3Bl
bkV4dGVybmFsVVJMcykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCks
IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNLZXkuZ2V0KCksIHNob3VsZE9wZW5FeHRlcm5hbFVSTHNW
YWx1ZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIGxvYWREYXRhLmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
InVybCIsIHVybCk7CisgICAgc2V0VmFsdWUoYm9keSwgInRhcmdldCIsIHRhcmdldCk7CisgICAg
c2V0VmFsdWUoYm9keSwgInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiLCBzaG91bGRPcGVuRXh0ZXJu
YWxVUkxzKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlTG9hZCIsIGJvZHkuZ2V0KCkpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKFdLU3RyaW5nUmVm
IGNvbnRlbnQsIFdLU3RyaW5nUmVmIGJhc2VVUkwsIFdLU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJM
KQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlF1ZXVlTG9hZEhUTUxTdHJpbmciKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBsb2FkRGF0YSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjb250ZW50S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29udGVudCIpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCBjb250ZW50S2V5LmdldCgpLCBjb250ZW50KTsK
LQotICAgIGlmIChiYXNlVVJMKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBi
YXNlVVJMS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYmFzZVVS
TCIpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgYmFzZVVS
TEtleS5nZXQoKSwgYmFzZVVSTCk7Ci0gICAgfQotCi0gICAgaWYgKHVucmVhY2hhYmxlVVJMKSB7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJsZVVSTEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVucmVhY2hhYmxlVVJMIikpOwot
ICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCB1bnJlYWNoYWJsZVVS
TEtleS5nZXQoKSwgdW5yZWFjaGFibGVVUkwpOwotICAgIH0KLQotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbG9hZERhdGEuZ2V0
KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiY29udGVudCIsIGNvbnRlbnQpOworICAgIGlmIChiYXNl
VVJMKQorICAgICAgICBzZXRWYWx1ZShib2R5LCAiYmFzZVVSTCIsIGJhc2VVUkwpOworICAgIGlm
ICh1bnJlYWNoYWJsZVVSTCkKKyAgICAgICAgc2V0VmFsdWUoYm9keSwgInVucmVhY2hhYmxlVVJM
IiwgdW5yZWFjaGFibGVVUkwpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVMb2FkSFRNTFN0
cmluZyIsIGJvZHkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZVJlbG9hZCgpCiB7
CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
UXVldWVSZWxvYWQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlUmVs
b2FkIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZGluZ1NjcmlwdChXS1N0
cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVMb2FkaW5nU2NyaXB0IikpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgc2NyaXB0KTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlTG9hZGluZ1NjcmlwdCIsIHNjcmlwdCk7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChXS1N0cmluZ1JlZiBz
Y3JpcHQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiUXVldWVOb25Mb2FkaW5nU2NyaXB0IikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgc2NyaXB0KTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIlF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIsIHNjcmlwdCk7CiB9CiAKIGJv
b2wgSW5qZWN0ZWRCdW5kbGU6OmlzQWxsb3dlZEhvc3QoV0tTdHJpbmdSZWYgaG9zdCkKQEAgLTEx
NDMsNCArODk2LDcyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnRleHRGaWVsZERpZEVuZEVkaXRp
bmcoKQogICAgIG1fdGVzdFJ1bm5lci0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZ0NhbGxiYWNrKCk7
CiB9CiAKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBu
YW1lLCBXS1R5cGVSZWYgYm9keSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UocGFnZSgpLT5wYWdl
KCksIG5hbWUsIGJvZHkpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0UGFnZU1lc3Nh
Z2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogYm9keSkKK3sKKyAgICBwb3N0UGFnZU1l
c3NhZ2UobmFtZSwgdG9XSyhib2R5KSk7Cit9CisKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hh
ciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgdmFs
dWUpCit7CisgICAgcG9zdE1lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1
ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIq
IG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdl
dCgpLCB2YWx1ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShj
b25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UobmFtZSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3Zv
aWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1aW50NjRfdCB2YWx1
ZSkKK3sKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tVSW50NjRD
cmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShj
b25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSkKK3sKKyAgICB1aW50NjRfdCBwcm9tb3Rl
ZFZhbHVlID0gdmFsdWU7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShuYW1lLCBwcm9tb3Rl
ZFZhbHVlKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5h
bWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIGFk
b3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFBhZ2VN
ZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0
byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKSkKKyAgICAgICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFs
dWUpCit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KHZhbHVlKSkuZ2V0KCkpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNv
bnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byBwYWdlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKSkKKyAgICAgICAgV0tCdW5kbGVQYWdl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZS0+cGFnZSgpLCB0b1dLKG5hbWUp
LmdldCgpLCB2YWx1ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgp
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmggYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKaW5kZXggYjc2MDE0MzZmMGM2
NzI4NTYzM2EwOGUyNWY5NDJhOGFhOThkOTcwYi4uN2E0ZjVkNjU5ZmMwYWExMGUyN2Y0ODU5NDc0
YmUxYzQ5MmRkMDQyMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBHZW9sb2NhdGlvbi4KICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihi
b29sKTsKLSAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1
ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJs
ZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcs
IGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZl
bCwgZG91YmxlIGZsb29yTGV2ZWwpOworICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9w
dGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFj
eSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRp
b25hbDxkb3VibGU+IGZsb29yTGV2ZWwpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSk7CiAgICAgYm9v
bCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBjb25zdDsKIApAQCAtMTY5LDggKzE2OSwx
MSBAQCBwcml2YXRlOgogICAgIGVudW0gY2xhc3MgQmVnaW5nVGVzdGluZ01vZGUgeyBOZXcsIFJl
c3VtZSB9OwogICAgIHZvaWQgYmVnaW5UZXN0aW5nKFdLRGljdGlvbmFyeVJlZiBpbml0aWFsU2V0
dGluZ3MsIEJlZ2luZ1Rlc3RpbmdNb2RlKTsKIAotICAgIGJvb2wgYm9vbGVhbkZvcktleShXS0Rp
Y3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7Ci0gICAgU3RyaW5nIHN0cmluZ0ZvcktleShX
S0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CisgICAgc3RhdGljIHZvaWQgcG9zdFBh
Z2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiwgY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIGJv
ZHkpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHBvc3RQYWdlTWVzc2Fn
ZShXS0J1bmRsZVBhZ2VSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWluUHRyPFQ+
JiBib2R5KTsKKyAgICB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5
cGVSZWYgYm9keSA9IG51bGxwdHIpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgcG9z
dFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWluUHRyPFQ+JiBib2R5
KTsKKyAgICB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFy
KiBib2R5KTsKIAogICAgIFdLQnVuZGxlUmVmIG1fYnVuZGxlIHsgbnVsbHB0ciB9OwogICAgIFdL
QnVuZGxlUGFnZUdyb3VwUmVmIG1fcGFnZUdyb3VwIHsgbnVsbHB0ciB9OwpAQCAtMjEwLDQgKzIx
MywyOSBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3VzZXJTY3JpcHRJbmplY3RlZENvdW50IHsg
MCB9OwogfTsKIAordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYg
dmFsdWUgPSBudWxscHRyKTsKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdW5z
aWduZWQgdmFsdWUpOworCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciog
bmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cik7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdWludDY0X3QgdmFsdWUpOwordm9pZCBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKTsKK3ZvaWQg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpOwor
Cit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUg
PSBudWxscHRyKTsKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wg
dmFsdWUpOworCit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5h
bWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJv
ZHkpCit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsIG5hbWUsIGJvZHkuZ2V0KCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0UGFnZU1lc3Nh
Z2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkpCit7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKG5hbWUsIGJvZHkuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
VFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAppbmRleCBkODlmZWFmOWI2ZGFlNGM5Njg1MzFmMGFi
NjM4NTg5MWIxNGY5OGY4Li4yZjU2NDI3NzMxMTZkOWYxMDI0ZmE2ZmJlOWRjMzUyMGIxNWUxOGE5
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlUGFnZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCkBAIC02MCw1MCArNjAsMTggQEAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIHByb3Bl
cnR5VmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3Qg
Y2hhciogcHJvcGVydHlOYW1lKQorc3RhdGljIGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVydHko
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWVTdHJpbmcgPSBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKLSAgICBy
ZXR1cm4gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZVN0
cmluZy5nZXQoKSwgMCk7Ci19Ci0KLXN0YXRpYyBkb3VibGUgcHJvcGVydHlWYWx1ZURvdWJsZShK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4
dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIDApOyAgICAK
LX0KLQotc3RhdGljIGludCBwcm9wZXJ0eVZhbHVlSW50KEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50Pihwcm9wZXJ0eVZhbHVlRG91YmxlKGNvbnRleHQsIG9iamVjdCwg
cHJvcGVydHlOYW1lKSk7ICAgIAotfQotCi1zdGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQcm9w
ZXJ0eVZhbHVlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFt
ZSkKLXsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0Q29udGV4dChmcmFtZSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5VmFsdWVEb3VibGUo
Y29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBwcm9wZXJ0eU5hbWUp
OworICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChm
cmFtZSk7CisgICAgcmV0dXJuIG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRH
bG9iYWxPYmplY3QoY29udGV4dCksIG5hbWUpOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgZHVt
cFBhdGgoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5vZGVWYWx1ZSkK
IHsKLSAgICBKU1ZhbHVlUmVmIG5vZGVOYW1lVmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQs
IG5vZGVWYWx1ZSwgIm5vZGVOYW1lIik7Ci0gICAgYXV0byBqc1N0cmluZ05vZGVOYW1lID0gYWRv
cHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBub2RlTmFtZVZhbHVlLCAwKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5vZGVOYW1lID0gdG9XSyhqc1N0cmluZ05vZGVOYW1l
KTsKLQotICAgIEpTVmFsdWVSZWYgcGFyZW50Tm9kZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwg
bm9kZVZhbHVlLCAicGFyZW50Tm9kZSIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vZGVOYW1lKSk7Ci0K
LSAgICBpZiAocGFyZW50Tm9kZSAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgcGFyZW50Tm9k
ZSkpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgPiAiKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4dCwgKEpTT2JqZWN0UmVmKXBh
cmVudE5vZGUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OworICAgIGF1dG8gbmFtZSA9IHRvV1RGU3RyaW5nKHN0cmluZ1Byb3BlcnR5KGNvbnRleHQsIG5v
ZGVWYWx1ZSwgIm5vZGVOYW1lIikpOworICAgIGlmIChhdXRvIHBhcmVudE5vZGUgPSBvYmplY3RQ
cm9wZXJ0eShjb250ZXh0LCBub2RlVmFsdWUsICJwYXJlbnROb2RlIikpCisgICAgICAgIHJldHVy
biBtYWtlU3RyaW5nKG5hbWUsICIgPiAiLCBkdW1wUGF0aChjb250ZXh0LCBwYXJlbnROb2RlKSk7
CisgICAgcmV0dXJuIG5hbWU7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBkdW1wUGF0aChXS0J1
bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5kbGVO
b2RlSGFuZGxlUmVmIG5vZGUpCkBAIC0xMjYsNTMgKzk0LDQwIEBAIHN0YXRpYyBXVEY6OlN0cmlu
ZyByYW5nZVRvU3RyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVm
IHdvcmxkCiAgICAgaWYgKCFyYW5nZVJlZikKICAgICAgICAgcmV0dXJuICIobnVsbCkiOwogCi0g
ICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdl
KTsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKLSAgICBKU1ZhbHVlUmVmIHJh
bmdlVmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdyYXBwZXJGb3JSYW5nZUZvcldv
cmxkKGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOworICAgIGF1dG8gZnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUocGFnZSk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdl
dEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKKyAgICBhdXRvIHJhbmdl
VmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdyYXBwZXJGb3JSYW5nZUZvcldvcmxk
KGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOwogICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29u
dGV4dCwgcmFuZ2VWYWx1ZSkpOwotICAgIEpTT2JqZWN0UmVmIHJhbmdlT2JqZWN0ID0gKEpTT2Jq
ZWN0UmVmKXJhbmdlVmFsdWU7Ci0KLSAgICBKU1ZhbHVlUmVmIHN0YXJ0Tm9kZVZhbHVlID0gcHJv
cGVydHlWYWx1ZShjb250ZXh0LCByYW5nZU9iamVjdCwgInN0YXJ0Q29udGFpbmVyIik7Ci0gICAg
QVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzdGFydE5vZGVWYWx1ZSkpOwotICAgIEpT
T2JqZWN0UmVmIHN0YXJ0Tm9kZU9iamVjdCA9IChKU09iamVjdFJlZilzdGFydE5vZGVWYWx1ZTsK
LQotICAgIEpTVmFsdWVSZWYgZW5kTm9kZVZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBy
YW5nZU9iamVjdCwgImVuZENvbnRhaW5lciIpOwotICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3Qo
Y29udGV4dCwgZW5kTm9kZVZhbHVlKSk7Ci0gICAgSlNPYmplY3RSZWYgZW5kTm9kZU9iamVjdCA9
IChKU09iamVjdFJlZillbmROb2RlVmFsdWU7Ci0KLSAgICBpbnQgc3RhcnRPZmZzZXQgPSBwcm9w
ZXJ0eVZhbHVlSW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRPZmZzZXQiKTsKLSAgICBp
bnQgZW5kT2Zmc2V0ID0gcHJvcGVydHlWYWx1ZUludChjb250ZXh0LCByYW5nZU9iamVjdCwgImVu
ZE9mZnNldCIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgicmFuZ2UgZnJvbSAiKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZE51bWJlcihzdGFydE9mZnNldCk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgb2YgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4dCwg
c3RhcnROb2RlT2JqZWN0KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG8g
Iik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoZW5kT2Zmc2V0KTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChkdW1wUGF0aChjb250ZXh0LCBlbmROb2RlT2JqZWN0KSk7Ci0gICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICBhdXRvIHJhbmdlT2JqZWN0ID0gKEpTT2JqZWN0UmVmKXJh
bmdlVmFsdWU7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygicmFuZ2UgZnJvbSAiLAorICAgICAg
ICBudW1lcmljUHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJzdGFydE9mZnNldCIpLAor
ICAgICAgICAiIG9mICIsCisgICAgICAgIGR1bXBQYXRoKGNvbnRleHQsIG9iamVjdFByb3BlcnR5
KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRDb250YWluZXIiKSksCisgICAgICAgICIgdG8g
IiwKKyAgICAgICAgbnVtZXJpY1Byb3BlcnR5KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zm
c2V0IiksCisgICAgICAgICIgb2YgIiwKKyAgICAgICAgZHVtcFBhdGgoY29udGV4dCwgb2JqZWN0
UHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRDb250YWluZXIiKSkKKyAgICApOwog
fQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IE5hdmlnYXRpb25UeXBlVG9TdHJp
bmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQ6Ci0gICAgICAgIHJldHVy
biBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsaW5rIGNsaWNrZWQiKSk7
CisgICAgICAgIHJldHVybiB0b1dLKCJsaW5rIGNsaWNrZWQiKTsKICAgICBjYXNlIGtXS0ZyYW1l
TmF2aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSBzdWJtaXR0ZWQiKSk7CisgICAgICAgIHJl
dHVybiB0b1dLKCJmb3JtIHN1Ym1pdHRlZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9u
VHlwZUJhY2tGb3J3YXJkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiYmFjay9mb3J3YXJkIikpOworICAgICAgICByZXR1cm4gdG9XSygiYmFj
ay9mb3J3YXJkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlUmVsb2FkOgotICAg
ICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicmVsb2Fk
IikpOworICAgICAgICByZXR1cm4gdG9XSygicmVsb2FkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5h
dmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSByZXN1Ym1pdHRlZCIpKTsKKyAgICAgICAg
cmV0dXJuIHRvV0soImZvcm0gcmVzdWJtaXR0ZWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdh
dGlvblR5cGVPdGhlcjoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIm90aGVyIikpOworICAgICAgICByZXR1cm4gdG9XSygib3RoZXIiKTsKICAg
ICB9Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImls
bGVnYWwgdmFsdWUiKSk7CisgICAgcmV0dXJuIHRvV0soImlsbGVnYWwgdmFsdWUiKTsKIH0KIAog
c3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0
aW9uUmVmIHN0eWxlKQpAQCAtMTg1LDIzICsxNDAsMTQgQEAgc3RhdGljIFdURjo6U3RyaW5nIHN0
eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlKQogICAgIHJl
dHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBXVEY6OlN0cmluZyBz
ZWN1cml0eU9yaWdpblRvU3RyKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luKQorc3RhdGljIFdU
Rjo6U3RyaW5nIHN0cmluZyhXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKIHsKLSAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ3snKTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlP
cmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRX
SyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoV0tT
ZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J30nKTsKLQotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgcmV0dXJu
IG1ha2VTdHJpbmcoJ3snLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5
UHJvdG9jb2wob3JpZ2luKSkpLCAiLCAiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlP
cmlnaW5Db3B5SG9zdChvcmlnaW4pKSksICIsICIsIFdLU2VjdXJpdHlPcmlnaW5HZXRQb3J0KG9y
aWdpbiksICd9Jyk7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBmcmFtZVRvU3RyKFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOworICAgIGF1dG8gbmFtZSA9IGFk
b3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CiAgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7
CiAgICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7CkBAIC0yMzUsMTIg
KzE4MSwxMiBAQCBzdGF0aWMgaW5saW5lIFdURjo6U3RyaW5nIHBhdGhTdWl0YWJsZUZvclRlc3RS
ZXN1bHQoV0tVUkxSZWYgZmlsZVVybCkKICAgICBpZiAoIWZpbGVVcmwpCiAgICAgICAgIHJldHVy
biAiKG51bGwpIjsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY2hlbWVTdHJpbmcg
PSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJsKSk7CisgICAgYXV0byBzY2hlbWVTdHJp
bmcgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJsKSk7CiAgICAgaWYgKCFpc0xvY2Fs
RmlsZVNjaGVtZShzY2hlbWVTdHJpbmcuZ2V0KCkpKQogICAgICAgICByZXR1cm4gdG9XVEZTdHJp
bmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoZmlsZVVybCkpKTsKIAogICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7
CisgICAgYXV0byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1h
aW5GcmFtZSkpOwogICAgIGlmICghbWFpbkZyYW1lVVJMKQogICAgICAgICBtYWluRnJhbWVVUkwg
PSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwobWFpbkZyYW1lKSk7CiAK
QEAgLTQzNCw4ICszODAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRlclRl
c3QoKQogICAgIC8vIChzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzgzMzQ+KSwgaG93ZXZlciBmb3IgdGVzdHMsIHdlIHdhbnQgdG8gc3RhcnQgZWFjaCBvbmUg
d2l0aCBhIGNsZWFuIHN0YXRlLgogICAgIFdLQnVuZGxlRnJhbWVGb2N1cyhmcmFtZSk7CiAKLSAg
ICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0
Q29udGV4dChmcmFtZSk7Ci0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09i
amVjdChjb250ZXh0KTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2Jq
ZWN0KFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSkpOwogICAgIGFzc2ln
bmVkVXJsc0NhY2hlKCkuY2xlYXIoKTsKIAogICAgIC8vIFVzZXIgc2NyaXB0cyBuZWVkIHRvIGJl
IHJlbW92ZWQgYWZ0ZXIgdGhlIHRlc3QgYW5kIGJlZm9yZSBsb2FkaW5nIGFib3V0OmJsYW5rLCBh
cyBvdGhlcndpc2UgdGhleSB3b3VsZCBydW4gaW4gYWJvdXQ6YmxhbmssIGFuZCBwb3RlbnRpYWxs
eSBsZWFrIHJlc3VsdHMgaW50byBhIHN1YnNlcXVlc3QgdGVzdC4KQEAgLTQ1MSw3ICszOTYsNyBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRlclRlc3QoKQogLy8gU3RyaW5nIG91
dHB1dCBtdXN0IGJlIGlkZW50aWNhbCB0byAtW1dlYkZyYW1lIF9kcnRfZGVzY3JpcHRpb25TdWl0
YWJsZUZvclRlc3RSZXN1bHRdLgogc3RhdGljIHZvaWQgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0
YWJsZUZvclRlc3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYg
c3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFk
b3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CisgICAgYXV0byBuYW1lID0gYWRv
cHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKICAgICBpZiAoV0tCdW5kbGVGcmFt
ZUlzTWFpbkZyYW1lKGZyYW1lKSkgewogICAgICAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUu
Z2V0KCkpKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIm1haW4g
ZnJhbWUiKTsKQEAgLTQ4NiwyNyArNDMxLDIxIEBAIHN0YXRpYyB2b2lkIGR1bXBMb2FkRXZlbnQo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogZXZlbnROYW1lKQogCiBzdGF0aWMg
aW5saW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChX
S1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsK
LSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5
VVJMKHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gZmlyc3RQYXJ0eSA9IGFk
b3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29raWVzKHJlcXVlc3QpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaHR0cE1ldGhvZCA9IGFkb3B0V0soV0tVUkxSZXF1
ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwotCi0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCI8TlNVUkxSZXF1ZXN0IFVSTCAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChw
YXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSkpOwotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiLCBtYWluIGRvY3VtZW50IFVSTCAiKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpKTsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgaHR0cCBtZXRob2QgIik7CisgICAgYXV0
byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1dG8g
Zmlyc3RQYXJ0eSA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29raWVz
KHJlcXVlc3QpKTsKKyAgICBhdXRvIGh0dHBNZXRob2QgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENv
cHlIVFRQTWV0aG9kKHJlcXVlc3QpKTsKIAorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCI8TlNV
UkxSZXF1ZXN0IFVSTCAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSksICIs
IG1haW4gZG9jdW1lbnQgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQoZmlyc3RQYXJ0
eS5nZXQoKSksICIsIGh0dHAgbWV0aG9kICIpOwogICAgIGlmIChXS1N0cmluZ0lzRW1wdHkoaHR0
cE1ldGhvZC5nZXQoKSkpCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG5v
bmUpIik7CiAgICAgZWxzZQogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
ZyhodHRwTWV0aG9kKSk7Ci0KICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCiBz
dGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RS
ZXN1bHQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVp
bGRlciwgYm9vbCBzaG91bGREdW1wUmVzcG9uc2VIZWFkZXJzID0gZmFsc2UpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVz
cG9uc2UpKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVz
cG9uc2UpKTsKICAgICBpZiAoIXVybCkgewogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIihudWxsKSIpOwogICAgICAgICByZXR1cm47CkBAIC01MzUsMzEgKzQ3NCwyMCBAQCB1
aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVyQ291bnQoV0tVUkxSZXNw
b25zZVJlZiByZXNwb25zZSkKIAogc3RhdGljIGlubGluZSB2b2lkIGR1bXBFcnJvckRlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLRXJyb3JSZWYgZXJyb3IsIFN0cmluZ0J1aWxkZXIm
IHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yRG9t
YWluID0gYWRvcHRXSyhXS0Vycm9yQ29weURvbWFpbihlcnJvcikpOwotICAgIGludCBlcnJvckNv
ZGUgPSBXS0Vycm9yR2V0RXJyb3JDb2RlKGVycm9yKTsKKyAgICBhdXRvIGVycm9yRG9tYWluID0g
dG9XVEZTdHJpbmcoYWRvcHRXSyhXS0Vycm9yQ29weURvbWFpbihlcnJvcikpKTsKKyAgICBhdXRv
IGVycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJyb3IpOwogCiAgICAgLy8gV2UgbmVl
ZCB0byBkbyBzb21lIGVycm9yIG1hcHBpbmcgaGVyZSB0byBtYXRjaCB0aGUgdGVzdCBleHBlY3Rh
dGlvbnMgKE1hYyBlcnJvciBuYW1lcyBhcmUgZXhwZWN0ZWQpLgotICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKGVycm9yRG9tYWluLmdldCgpLCAiV2ViS2l0TmV0d29ya0Vycm9y
IikpIHsKLSAgICAgICAgZXJyb3JEb21haW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJOU1VSTEVycm9yRG9tYWluIikpOworICAgIGlmIChlcnJvckRvbWFpbiA9PSAi
V2ViS2l0TmV0d29ya0Vycm9yIikgeworICAgICAgICBlcnJvckRvbWFpbiA9ICJOU1VSTEVycm9y
RG9tYWluIjsKICAgICAgICAgZXJyb3JDb2RlID0gLTk5OTsKICAgICB9CisgICAgaWYgKGVycm9y
RG9tYWluID09ICAiV2ViS2l0UG9saWN5RXJyb3IiKQorICAgICAgICBlcnJvckRvbWFpbiA9ICJX
ZWJLaXRFcnJvckRvbWFpbiI7CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhlcnJvckRvbWFpbi5nZXQoKSwgIldlYktpdFBvbGljeUVycm9yIikpCi0gICAgICAgIGVycm9y
RG9tYWluID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0RXJy
b3JEb21haW4iKSk7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxOU0Vycm9y
IGRvbWFpbiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhlcnJvckRv
bWFpbikpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBjb2RlICIpOwotICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGVycm9yQ29kZSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS0Vycm9yQ29weUZhaWxpbmdVUkwoZXJyb3IpKTsK
LSAgICBpZiAodXJsLmdldCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1
cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGZhaWxpbmcgVVJMIFwiIik7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgIH0KLQorICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCI8TlNFcnJvciBkb21haW4gIiwgZXJyb3JEb21haW4sICIsIGNvZGUgIiwgZXJyb3JDb2Rl
KTsKKyAgICBpZiAoYXV0byB1cmwgPSBhZG9wdFdLKFdLRXJyb3JDb3B5RmFpbGluZ1VSTChlcnJv
cikpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCBmYWlsaW5nIFVSTCBcIiIsIHRv
V1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpKSwgJyInKTsKICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCkBAIC02OTUsNyArNjIzLDcgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnRlc3RVUkwoKSkgewotICAgICAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gdGVzdFVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVS
TChmcmFtZSkpOworICAgICAgICBhdXRvIHRlc3RVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVD
b3B5UHJvdmlzaW9uYWxVUkwoZnJhbWUpKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT5zZXRUZXN0VVJMKHRlc3RVUkwuZ2V0KCkpOwogICAgIH0KIApAQCAtNzc0LDEzICs3
MDIsMTMgQEAgZW51bSBGcmFtZU5hbWVQb2xpY3kgeyBTaG91bGROb3RJbmNsdWRlRnJhbWVOYW1l
LCBTaG91bGRJbmNsdWRlRnJhbWVOYW1lIH07CiAKIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNjcm9s
bFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1
aWxkZXIsIEZyYW1lTmFtZVBvbGljeSBzaG91bGRJbmNsdWRlRnJhbWVOYW1lID0gU2hvdWxkTm90
SW5jbHVkZUZyYW1lTmFtZSkKIHsKLSAgICBkb3VibGUgeCA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0
eVZhbHVlKGZyYW1lLCAicGFnZVhPZmZzZXQiKTsKLSAgICBkb3VibGUgeSA9IG51bWVyaWNXaW5k
b3dQcm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVlPZmZzZXQiKTsKKyAgICBkb3VibGUgeCA9IG51
bWVyaWNXaW5kb3dQcm9wZXJ0eShmcmFtZSwgInBhZ2VYT2Zmc2V0Iik7CisgICAgZG91YmxlIHkg
PSBudW1lcmljV2luZG93UHJvcGVydHkoZnJhbWUsICJwYWdlWU9mZnNldCIpOwogICAgIGlmIChm
YWJzKHgpIDw9IDAuMDAwMDAwMDEgJiYgZmFicyh5KSA8PSAwLjAwMDAwMDAxKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoc2hvdWxkSW5jbHVkZUZyYW1lTmFtZSkgewotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1l
KGZyYW1lKSk7CisgICAgICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlO
YW1lKGZyYW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUg
JyIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJyAiKTsKQEAgLTc5NCw3ICs3MjIs
NyBAQCBzdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbgogCiBzdGF0aWMgdm9pZCBkdW1wRGVzY2VuZGFu
dEZyYW1lU2Nyb2xsUG9zaXRpb25zKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxk
ZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gY2hpbGRG
cmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsKKyAg
ICBhdXRvIGNoaWxkRnJhbWVzID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weUNoaWxkRnJhbWVz
KGZyYW1lKSk7CiAgICAgc2l6ZV90IHNpemUgPSBXS0FycmF5R2V0U2l6ZShjaGlsZEZyYW1lcy5n
ZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAg
V0tCdW5kbGVGcmFtZVJlZiBzdWJmcmFtZSA9IHN0YXRpY19jYXN0PFdLQnVuZGxlRnJhbWVSZWY+
KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZEZyYW1lcy5nZXQoKSwgaSkpOwpAQCAtODEwLDI4
ICs3MzgsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBBbGxGcmFtZVNjcm9sbFBv
c2l0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGUKICAgICBkdW1wRGVzY2VuZGFudEZy
YW1lU2Nyb2xsUG9zaXRpb25zKGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKIH0KIAotc3RhdGljIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKGNvbnN0IGNoYXIqIHN0cmluZykKLXsKLSAgICBy
ZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7Ci19Ci0K
IHN0YXRpYyBib29sIGhhc0RvY3VtZW50RWxlbWVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQog
ewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7Ci0KLSAgICBKU1ZhbHVlUmVmIGRvY3VtZW50
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgdG9KUygi
ZG9jdW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFkb2N1bWVudFZhbHVlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGRvY3Vt
ZW50VmFsdWUpKTsKLSAgICBKU09iamVjdFJlZiBkb2N1bWVudCA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBkb2N1bWVudFZhbHVlLCAwKTsKLQotICAgIEpTVmFsdWVSZWYgZG9jdW1lbnRFbGVt
ZW50VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGRvY3VtZW50LCB0b0pTKCJk
b2N1bWVudEVsZW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFkb2N1bWVudEVsZW1lbnRWYWx1
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4o
Y29udGV4dCwgZG9jdW1lbnRFbGVtZW50VmFsdWUpOworICAgIGF1dG8gY29udGV4dCA9IFdLQnVu
ZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7CisgICAgcmV0dXJuIG9iamVjdFBy
b3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgeyAiZG9j
dW1lbnQiLCAiZG9jdW1lbnRFbGVtZW50IiB9KTsKIH0KIAogc3RhdGljIHZvaWQgZHVtcEZyYW1l
VGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQpAQCAt
ODU0LDExICs3NjQsMTEgQEAgc3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQogCiBzdGF0aWMgdm9pZCBkdW1wRGVz
Y2VuZGFudEZyYW1lc1RleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYg
c3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBjaGlsZEZyYW1l
cyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOworICAgIGF1
dG8gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJh
bWUpKTsKICAgICBzaXplX3Qgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGNoaWxkRnJhbWVzLmdldCgp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBXS0J1
bmRsZUZyYW1lUmVmIHN1YmZyYW1lID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KGNoaWxkRnJhbWVzLmdldCgpLCBpKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJmcmFtZU5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVD
b3B5TmFtZShzdWJmcmFtZSkpOworICAgICAgICBhdXRvIHN1YmZyYW1lTmFtZSA9IGFkb3B0V0so
V0tCdW5kbGVGcmFtZUNvcHlOYW1lKHN1YmZyYW1lKSk7CiAKICAgICAgICAgLy8gRHVtcFJlbmRl
clRyZWUgaWdub3JlcyBlbXB0eSBmcmFtZXMsIHNvIGRvIHRoZSBzYW1lIHRoaW5nIGhlcmUuCiAg
ICAgICAgIGlmICghaGFzRG9jdW1lbnRFbGVtZW50KHN1YmZyYW1lKSkKQEAgLTg4NCw5ICs3OTQs
OSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZyYW1lc1RleHQoU3RyaW5nQnVp
bGRlciYgc3RyaW5nQnVpbGRlcikKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNX
ZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1
aWxkZXIpCiB7CiAjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNFKERJ
UkVDVDJEKQotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gd2tEYXRhID0gYWRvcHRXSyhXS0J1
bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0RhdGEu
Z2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGNmU3RyaW5nID0gYWRvcHRDRihXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhN
TFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKKyAgICBhdXRvIHdrRGF0
YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZyYW1lKSk7CisgICAgYXV0
byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0RhdGEu
Z2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKKyAgICBhdXRvIGNmU3RyaW5n
ID0gYWRvcHRDRihXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNo
aXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjZlN0cmlu
Zy5nZXQoKSk7CiAjZW5kaWYKIH0KQEAgLTkwMiw5ICs4MTIsOSBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZHVtcCgpCiAgICAgV0tCdW5kbGVQYWdlRmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVV
cGRhdGUobV9wYWdlKTsKIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUobV9wYWdlKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsUmVm
ID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFtZSkpOworICAgIGF1dG8gdXJsUmVm
ID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFtZSkpOwogICAgIFN0cmluZyB1cmwg
PSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxSZWYuZ2V0KCkpKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlID0gYWRvcHRXSyhXS0J1bmRsZUZy
YW1lQ29weU1JTUVUeXBlRm9yUmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYuZ2V0KCkpKTsK
KyAgICBhdXRvIG1pbWVUeXBlID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU1JTUVUeXBlRm9y
UmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYuZ2V0KCkpKTsKICAgICBpZiAodXJsLmZpbmQo
ImR1bXBBc1RleHQvIikgIT0gbm90Rm91bmQgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtaW1lVHlwZS5nZXQoKSwgInRleHQvcGxhaW4iKSkKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5kdW1wQXNUZXh0KGZhbHNlKTsKIApAQCAtMTAxOCwyMSArOTI4LDE5IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RS
dW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdv
cmxkKTsKLSAgICBKU09iamVjdFJlZiB3aW5kb3cgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3Qo
Y29udGV4dCk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKIAogICAgIGlmIChXS0J1bmRsZVNjcmlwdFdv
cmxkTm9ybWFsV29ybGQoKSAhPSB3b3JsZCkgewotICAgICAgICBKU09iamVjdFNldFByb3BlcnR5
KGNvbnRleHQsIHdpbmRvdywgdG9KUygiX193b3JsZElEIikuZ2V0KCksIEpTVmFsdWVNYWtlTnVt
YmVyKGNvbnRleHQsIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZCh3b3JsZCkpLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICAgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVy
dHkoY29udGV4dCwgIl9fd29ybGRJRCIsIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZCh3b3Js
ZCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24g
PSBudWxscHRyOwotICAgIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+bWFrZVdpbmRvd09i
amVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwotICAgIGluamVjdGVkQnVuZGxlLmdj
Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlv
bik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtlV2lu
ZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5k
bGUudGV4dElucHV0Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRv
dywgJmV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5tYWtlV2lu
ZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLmdjQ29udHJvbGxlcigpLT5t
YWtlV2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLmV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKKyAgICBpbmplY3RlZEJ1
bmRsZS50ZXh0SW5wdXRDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CiAj
aWYgSEFWRShBQ0NFU1NJQklMSVRZKQotICAgIGluamVjdGVkQnVuZGxlLmFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9u
KTsKKyAgICBpbmplY3RlZEJ1bmRsZS5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpLT5tYWtlV2lu
ZG93T2JqZWN0KGNvbnRleHQpOwogI2VuZGlmCiAKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6Omlu
amVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKQEAgLTExMzYsNyArMTA0NCw3IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRJbml0aWF0ZUxvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBh
Z2VSZWYgcGFnZSwgV0tCdW5kCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
aXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS1VS
TFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBh
dXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CiAgICAgYXNz
aWduZWRVcmxzQ2FjaGUoKS5hZGQoaWRlbnRpZmllciwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3Vs
dCh1cmwuZ2V0KCkpKTsKIH0KIApAQCAtMTE3NSwxNiArMTA4MywxNiBAQCBXS1VSTFJlcXVlc3RS
ZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBh
Z2VSZWYgcGFnZQogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkgJiYgaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiByZWRp
cmVjdFVSTCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKKyAgICBh
dXRvIHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkp
OwogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkgJiYgaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSAm
JiByZWRpcmVjdFVSTCkgewogICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KCJSZXR1
cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJM
UmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBo
b3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFtZSh1cmwuZ2V0KCkpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdl
dCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0so
V0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VS
TFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIGhvc3QgPSBhZG9wdFdLKFdLVVJM
Q29weUhvc3ROYW1lKHVybC5nZXQoKSkpOworICAgIGF1dG8gc2NoZW1lID0gYWRvcHRXSyhXS1VS
TENvcHlTY2hlbWUodXJsLmdldCgpKSk7CisgICAgYXV0byB1cmxTdHJpbmcgPSBhZG9wdFdLKFdL
VVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKICAgICBpZiAoaG9zdCAmJiAhV0tTdHJpbmdJc0Vt
cHR5KGhvc3QuZ2V0KCkpCiAgICAgICAgICYmIGlzSFRUUE9ySFRUUFNTY2hlbWUoc2NoZW1lLmdl
dCgpKQogICAgICAgICAmJiAhV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhob3N0LmdldCgp
LCAiMjU1LjI1NS4yNTUuMjU1IikgLy8gVXNlZCBpbiBzb21lIHRlc3RzIHRoYXQgZXhwZWN0IHRv
IGdldCBiYWNrIGFuIGVycm9yLgpAQCAtMTE5MiwxMiArMTEwMCwxMiBAQCBXS1VSTFJlcXVlc3RS
ZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBh
Z2VSZWYgcGFnZQogICAgICAgICBib29sIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBmYWxzZTsKICAg
ICAgICAgaWYgKGluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkgewogICAgICAgICAgICAg
V0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9w
YWdlKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtYWluRnJhbWVVUkwgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOworICAgICAgICAgICAgYXV0
byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkp
OwogICAgICAgICAgICAgaWYgKCFtYWluRnJhbWVVUkwgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtYWluRnJhbWVVUkwuZ2V0KCkpKS5nZXQo
KSwgImFib3V0OmJsYW5rIikpCiAgICAgICAgICAgICAgICAgbWFpbkZyYW1lVVJMID0gYWRvcHRX
SyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKG1haW5GcmFtZSkpOwogCi0gICAgICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1lSG9zdCA9IGFkb3B0V0soV0tV
UkxDb3B5SG9zdE5hbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7Ci0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1lU2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hl
bWUobWFpbkZyYW1lVVJMLmdldCgpKSk7CisgICAgICAgICAgICBhdXRvIG1haW5GcmFtZUhvc3Qg
PSBhZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1lKG1haW5GcmFtZVVSTC5nZXQoKSkpOworICAgICAg
ICAgICAgYXV0byBtYWluRnJhbWVTY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShtYWlu
RnJhbWVVUkwuZ2V0KCkpKTsKICAgICAgICAgICAgIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBpc0hU
VFBPckhUVFBTU2NoZW1lKG1haW5GcmFtZVNjaGVtZS5nZXQoKSkgJiYgIWlzTG9jYWxIb3N0KG1h
aW5GcmFtZUhvc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbWFpbkZyYW1lSXNF
eHRlcm5hbCAmJiAhaXNBbGxvd2VkSG9zdChob3N0LmdldCgpKSkgewpAQCAtMTIxNCw3ICsxMTIy
LDcgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0
Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAgICAgU3RyaW5nIGJvZHkgPSBpbmpl
Y3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVxdWVzdEhUVFBCb2R5KCk7CiAgICAg
ICAgIGlmICghYm9keS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENTdHJpbmcgY0JvZHkgPSBi
b2R5LnV0ZjgoKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYm9keSA9IGFk
b3B0V0soV0tEYXRhQ3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGNCb2R5LmRhdGEoKSksIGNCb2R5Lmxlbmd0aCgpKSk7CisgICAgICAgICAgICBhdXRvIGJvZHkg
PSBhZG9wdFdLKFdLRGF0YUNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihjQm9keS5kYXRhKCkpLCBjQm9keS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgcmV0dXJu
IFdLVVJMUmVxdWVzdENvcHlTZXR0aW5nSFRUUEJvZHkocmVxdWVzdCwgYm9keS5nZXQoKSk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xMjQyLDkgKzExNTAsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2Us
IFdLQgogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVz
b3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25z
ZSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdL
VVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtaW1lVHlwZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlNSU1F
VHlwZShyZXNwb25zZSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29w
eVVSTChyZXNwb25zZSkpOworICAgIGF1dG8gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlM
YXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKKyAgICBhdXRvIG1pbWVUeXBlU3RyaW5nID0g
YWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHJlc3BvbnNlKSk7CiAKICAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZT
dHJpbmcodXJsU3RyaW5nKSk7CkBAIC0xMzUwLDEwICsxMjU4LDggQEAgV0tCdW5kbGVQYWdlUG9s
aWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbihXS0IKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb25cbiIpOwogICAgICAgICBkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0
UmVzdWx0KHJlcXVlc3QsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIiBpcyBtYWluIGZyYW1lIC0gIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBzaG91bGQgb3BlbiBVUkxzIGV4
dGVybmFsbHkgLSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV0tCdW5kbGVOYXZp
Z2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9uKSA/
ICJ5ZXMiIDogIm5vIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgaXMgbWFpbiBm
cmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJu
YWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5hbFVS
THMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIpOwogICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KQEAgLTEzNjEsMjQgKzEyNjcsMjEgQEAgV0tC
dW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFn
ZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVy
bCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5n
ZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVl
c3QpKTsKKyAgICBhdXRvIHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5n
ZXQoKSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7
Ci0gICAgaWYgKGlzTG9jYWxGaWxlU2NoZW1lKHVybFNjaGVtZS5nZXQoKSkpIHsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZpbGVuYW1lID0gYWRvcHRXSyhXS1VSTENvcHlMYXN0
UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
dG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdl
dCgpKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmlu
ZykpOwotICAgIH0KKyAgICBpZiAoaXNMb2NhbEZpbGVTY2hlbWUodXJsU2NoZW1lLmdldCgpKSkK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENv
cHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKSkpOworICAgIGVsc2UKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJs
LmdldCgpKSkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB3aXRoIG5hdmln
YXRpb24gdHlwZSBcJyIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKE5h
dmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdhdGlv
blR5cGUobmF2aWdhdGlvbkFjdGlvbikpKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJcJyIpOwotICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZj4gaGl0
VGVzdFJlc3VsdFJlZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRl
c3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbikpOworICAgIGF1dG8gaGl0VGVzdFJlc3VsdFJlZiA9
IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RSZXN1bHQobmF2aWdh
dGlvbkFjdGlvbikpOwogICAgIGlmIChoaXRUZXN0UmVzdWx0UmVmKSB7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLQnVuZGxlTm9kZUhhbmRsZVJlZj4gbm9kZUhhbmRsZVJlZiA9IGFkb3B0V0soV0tC
dW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJlc3VsdFJlZi5nZXQoKSkp
OworICAgICAgICBhdXRvIG5vZGVIYW5kbGVSZWYgPSBhZG9wdFdLKFdLQnVuZGxlSGl0VGVzdFJl
c3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYuZ2V0KCkpKTsKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb3JpZ2luYXRpbmcgZnJvbSAiKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBub2Rl
SGFuZGxlUmVmLmdldCgpKSk7CiAgICAgfQpAQCAtMTQwMCwxMiArMTMwMyw3IEBAIFdLQnVuZGxl
UGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3Bv
bnNlKFdLQnVuZGxlUGFnCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKSAm
JiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVFbmFibGVkKCkg
JiYgV0tVUkxSZXNwb25zZUlzQXR0YWNobWVudChyZXNwb25zZSkpIHsKLSAgICAgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
ZmlsZW5hbWUgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUocmVz
cG9uc2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJQb2xpY3kgZGVs
ZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCci
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcJ1xuIik7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1h
a2VTdHJpbmcoIlBvbGljeSBkZWxlZ2F0ZTogcmVzb3VyY2UgaXMgYW4gYXR0YWNobWVudCwgc3Vn
Z2VzdGVkIGZpbGUgbmFtZSBcJyIsIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxSZXNwb25zZUNv
cHlTdWdnZXN0ZWRGaWxlbmFtZShyZXNwb25zZSkpKSwgIlwnXG4iKSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwpAQCAtMTQ3MSwxMCAr
MTM2OSwxMCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgYWRkTGVhZGluZ1NwYWNlU3RyaXBUcmFpbGlu
Z1NwYWNlc0FkZE5ld2xpbmUoY29uc3QgV1RGOjpTdHJpbgogCiBzdGF0aWMgV1RGOjpTdHJpbmcg
bGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KGNvbnN0IFdURjo6U3RyaW5nJiBwYXRoKQogewotICAg
IHNpemVfdCBwb3MgPSBwYXRoLmZpbmQoImZpbGU6Ly8iKTsKKyAgICBhdXRvIHBvcyA9IHBhdGgu
ZmluZCgiZmlsZTovLyIpOwogICAgIEFTU0VSVChXVEY6Om5vdEZvdW5kICE9IHBvcyk7CiAKLSAg
ICBXVEY6OlN0cmluZyB0bXBQYXRoID0gcGF0aC5zdWJzdHJpbmcocG9zICsgNyk7CisgICAgYXV0
byB0bXBQYXRoID0gcGF0aC5zdWJzdHJpbmcocG9zICsgNyk7CiAgICAgaWYgKHRtcFBhdGgubGVu
Z3RoKCkgPCAyKSAvLyBLZWVwIHRoZSBsb25lIHNsYXNoIHRvIGF2b2lkIGVtcHR5IG91dHB1dC4K
ICAgICAgICAgcmV0dXJuIHRtcFBhdGg7CiAKQEAgLTE1MjEsMTEgKzE0MTksNyBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQoV0tTdHJpbmdSZWYgc3RhdHVz
YmFyVGV4dCkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cFN0YXR1c0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxF
R0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iik7Ci0gICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCkpOwotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmco
IlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDoiLCB0b1dURlN0cmlu
ZyhzdGF0dXNiYXJUZXh0KSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1l
UmVmKQpAQCAtMTU1OSwxNSArMTQ1Myw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRS
ZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmCiAgICAg
ICAgIC8vIFJvdW5kaW5nIHVwIG9yIGRvd24gZG9lcyBub3QgcmVhbGx5IG1hdHRlciBmb3IgdGhl
c2UgdGVzdHMuIEl0J3MKICAgICAgICAgLy8gc3VmZmljaWVudCB0byBqdXN0IGdldCBhIHJhbmdl
IG9mIDEwMDAwIHRvIGRldGVybWluZSBpZiB3ZSB3ZXJlCiAgICAgICAgIC8vIGFib3ZlIG9yIGJl
bG93IGEgdGhyZXNob2xkLgotICAgICAgICBpbnQ2NF90IHRydW5jYXRlZFNwYWNlTmVlZGVkID0g
KHRvdGFsQnl0ZXNOZWVkZWQgLyAxMDAwMCkgKiAxMDAwMDsKLQotICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
VUkgREVMRUdBVEUgQVBQTElDQVRJT04gQ0FDSEUgQ0FMTEJBQ0s6IGV4Y2VlZGVkQXBwbGljYXRp
b25DYWNoZU9yaWdpblF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHNlY3VyaXR5T3JpZ2luVG9TdHIob3JpZ2luKSk7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvdGFsU3BhY2VOZWVkZWQ6fiIpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0cnVuY2F0ZWRTcGFjZU5lZWRlZCk7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGF1dG8gdHJ1bmNhdGVk
U3BhY2VOZWVkZWQgPSAodG90YWxCeXRlc05lZWRlZCAvIDEwMDAwKSAqIDEwMDAwOworICAgICAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIEFQUExJ
Q0FUSU9OIENBQ0hFIENBTExCQUNLOiBleGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90
YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmluZyhvcmlnaW4pLCAiIHRvdGFsU3BhY2VOZWVkZWQ6
fiIsIHRydW5jYXRlZFNwYWNlTmVlZGVkLCAnXG4nKSk7CiAgICAgfQogCiAgICAgaWYgKGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0
aW9uQ2FjaGVRdW90YSgpKQpAQCAtMTU4MCwxNSArMTQ2Nyw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3Jp
Z2luUmVmCiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVv
dGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIGRhdGFiYXNlTmFtZSwg
V0tTdHJpbmdSZWYgZGF0YWJhc2VEaXNwbGF5TmFtZSwgdWludDY0X3QgY3VycmVudFF1b3RhQnl0
ZXMsIHVpbnQ2NF90IGN1cnJlbnRPcmlnaW5Vc2FnZUJ5dGVzLCB1aW50NjRfdCBjdXJyZW50RGF0
YWJhc2VVc2FnZUJ5dGVzLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlQnl0ZXMpCiB7CiAgICAgYXV0
byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgaWYg
KGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcERhdGFiYXNlQ2FsbGJhY2tz
KCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBl
eGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihvcmlnaW4pKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZGF0YWJhc2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGRhdGFiYXNlTmFtZSkpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKKyAgICAgICAgaW5q
ZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBEQVRBQkFTRSBD
QUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iiwgc3RyaW5n
KG9yaWdpbiksICIgZGF0YWJhc2U6IiwgdG9XVEZTdHJpbmcoZGF0YWJhc2VOYW1lKSwgJ1xuJykp
OwogCiAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAgIGRv
dWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5kYXRh
YmFzZURlZmF1bHRRdW90YSgpOwpAQCAtMTYwMSwxMiArMTQ4MSw3IEBAIHVpbnQ2NF90IEluamVj
dGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVm
IG9yaWdpbiwKICAgICBpZiAobWF4UXVvdGEgPj0gMCkgewogICAgICAgICBpZiAoZGVmYXVsdFF1
b3RhIDwgZXhwZWN0ZWRVc2FnZUJ5dGVzICYmIGV4cGVjdGVkVXNhZ2VCeXRlcyA8PSBtYXhRdW90
YSkgewogICAgICAgICAgICAgbmV3UXVvdGEgPSBleHBlY3RlZFVzYWdlQnl0ZXM7Ci0KLSAgICAg
ICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGluY3Jl
YXNlZCBxdW90YSB0byAiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVy
KG5ld1F1b3RhKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAg
ICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkpOworICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJV
SSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVhc2VkIHF1b3RhIHRvICIsIG5ld1F1
b3RhLCAnXG4nKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG5ld1F1b3RhOwpAQCAt
MTY3NSwxMyArMTU1MCw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVk
aXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICBpZiAoIWluamVjdGVkQnVu
ZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRpbmdJ
bkRPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1f
cGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKLSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUu
b3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRp
bmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSks
ICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRB
bGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTY5MSwxMyArMTU2MSw4IEBAIGJvb2wgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2Up
CiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxk
ZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FU
RTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAg
ICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdB
VEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBtX3dv
cmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVz
dFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggYTYyNTU4
OTcyN2JjNzFiNzQxZWNmMjU2NTE1MjFlZmI0ZjQ5OTdmMy4uNzFjYzAxOGY0MTI2MDIzNWU5ZTQ3
YWI5NGEwNDczYjRmMzYxYzExMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCisjaW5jbHVkZSAiRGlj
dGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVk
ZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5jbHVkZSAiSlNUZXN0UnVubmVyLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAj
aW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NU
ZXN0UnVubmVyVXRpbHMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bi5oPgpAQCAtNjksNyArNjksNyBAQCBSZWY8VGVzdFJ1bm5lcj4gVGVzdFJ1bm5lcjo6Y3JlYXRl
KCkKIH0KIAogVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcigpCi0gICAgOiBtX3VzZXJTdHlsZVNoZWV0
TG9jYXRpb24oYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpKQorICAg
IDogbV91c2VyU3R5bGVTaGVldExvY2F0aW9uKHRvV0soIiIpKQogewogICAgIHBsYXRmb3JtSW5p
dGlhbGl6ZSgpOwogfQpAQCAtODMsMzQgKzgzLDEwMiBAQCBKU0NsYXNzUmVmIFRlc3RSdW5uZXI6
OndyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIEpTVGVzdFJ1bm5lcjo6dGVzdFJ1bm5lckNsYXNz
KCk7CiB9CiAKK3N0YXRpYyBXS0J1bmRsZVBhZ2VSZWYgcGFnZSgpCit7CisgICAgcmV0dXJuIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKK30KKworc3RhdGljIFdL
QnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lKCkKK3sKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKHBhZ2UoKSk7Cit9CisKK3N0YXRpYyBKU0NvbnRleHRSZWYgbWFpbkpTQ29udGV4
dCgpCit7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWlu
RnJhbWUoKSk7Cit9CisKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheSgpCiB7Ci0gICAgV0tCdW5k
bGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCk7Ci0gICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KHBhZ2UpOworICAgIFdLQnVuZGxlUGFn
ZUZvcmNlUmVwYWludChwYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXlBbmRU
cmFja1JlcGFpbnRzKCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBXVFI6OnBh
Z2UoKTsKICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQocGFnZSk7CiAgICAgV0tCdW5kbGVQ
YWdlU2V0VHJhY2tzUmVwYWludHMocGFnZSwgdHJ1ZSk7CiAgICAgV0tCdW5kbGVQYWdlUmVzZXRU
cmFja2VkUmVwYWludHMocGFnZSk7CiB9CiAKK3N0YXRpYyBXS1JldGFpblB0cjxXS0RvdWJsZVJl
Zj4gdG9XSyhkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0V0soV0tEb3VibGVDcmVh
dGUodmFsdWUpKTsKK30KKworc3RhdGljIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gY3Jl
YXRlV0tEaWN0aW9uYXJ5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8Y29uc3QgY2hh
ciosIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+PiBwYWlycykKK3sKKyAgICBhdXRvIHNpemUgPSBw
YWlycy5zaXplKCk7CisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBrZXlzKHNpemUpOworICAgIFZl
Y3RvcjxXS1R5cGVSZWY+IHZhbHVlcyhzaXplKTsKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBzdHJpbmdzKHNpemUpOworICAgIGZvciAoYXV0byYgcGFpciA6IHBhaXJzKSB7
CisgICAgICAgIGF1dG8ga2V5ID0gdG9XSyhwYWlyLmZpcnN0KTsKKyAgICAgICAga2V5cy5hcHBl
bmQoa2V5LmdldCgpKTsKKyAgICAgICAgdmFsdWVzLmFwcGVuZChwYWlyLnNlY29uZC5nZXQoKSk7
CisgICAgICAgIHN0cmluZ3MuYXBwZW5kKFdURk1vdmUoa2V5KSk7CisgICAgfQorICAgIHJldHVy
biBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShrZXlzLmRhdGEoKSwgdmFsdWVzLmRhdGEoKSwg
c2l6ZSkpOworfQorCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBwb3N0U3luY2hyb25v
dXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1
ZSA9IG51bGxwdHIpCit7CisgICAgV0tUeXBlUmVmIHJhd1JldHVyblZhbHVlID0gbnVsbHB0cjsK
KyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSwgJnJhd1JldHVyblZhbHVl
KTsKKyAgICByZXR1cm4gYWRvcHRXSyhyYXdSZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyBib29s
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKGNvbnN0IGNoYXIqIG5hbWUs
IFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShw
b3N0U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5hbWUsIHZhbHVlKSk7Cit9CisK
K3N0YXRpYyBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdl
V2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxw
dHIpCit7CisgICAgV0tUeXBlUmVmIHJhd1JldHVyblZhbHVlID0gbnVsbHB0cjsKKyAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCksIHRvV0sobmFt
ZSkuZ2V0KCksIHZhbHVlLCAmcmF3UmV0dXJuVmFsdWUpOworICAgIHJldHVybiBhZG9wdFdLKHJh
d1JldHVyblZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51
bGxwdHIpCit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQorCitzdGF0aWMgdWludDY0X3Qg
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50NjQoY29uc3QgY2hhciogbmFt
ZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICByZXR1cm4gdWludDY0VmFsdWUo
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRoUmV0dXJuVmFsdWUobmFtZSwgdmFsdWUpKTsK
K30KKworc3RhdGljIHVpbnQ2NF90IHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdVSW50
NjQoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gdWludDY0VmFsdWUocG9zdFN5bmNo
cm9ub3VzTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lKSk7Cit9CisKK3N0YXRpYyB2b2lkIG92
ZXJyaWRlUHJlZmVyZW5jZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIGF1
dG8mIGJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBXS0J1bmRsZU92
ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGJ1bmRsZS5idW5kbGUoKSwgYnVuZGxl
LnBhZ2VHcm91cCgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSk7Cit9CisKIGJvb2wgVGVzdFJ1
bm5lcjo6c2hvdWxkRHVtcFBpeGVscygpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiR2V0RHVtcFBpeGVscyIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRh
KTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlw
ZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldER1bXBQaXhlbHMiKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXREdW1wUGl4ZWxzKGJvb2wgZHVtcFBpeGVscykKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXREdW1wUGl4ZWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9v
bGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkdW1wUGl4ZWxz
KSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXREdW1wUGl4ZWxzIiwg
ZHVtcFBpeGVscyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dChib29sIGR1bXBQ
aXhlbHMpCkBAIC0xMjIsMTggKzE5MCwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OmR1bXBBc1RleHQo
Ym9vbCBkdW1wUGl4ZWxzKQogICAgIAogV2hhdFRvRHVtcCBUZXN0UnVubmVyOjp3aGF0VG9EdW1w
KCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRXaGF0VG9EdW1wIikpOwot
ICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5
cGVJRChyZXR1cm5EYXRhKSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2hhdFRvRHVtcD4oV0tVSW50NjRHZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V2hhdFRvRHVtcD4ocG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2NCgiR2V0
V2hhdFRvRHVtcCIpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXaGF0VG9EdW1wKFdoYXRU
b0R1bXAgd2hhdFRvRHVtcCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRXaGF0VG9E
dW1wIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHdoYXRUb0R1bXApKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRXaGF0VG9EdW1wIiwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHdoYXRUb0R1bXApKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRD
dXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2ZSkKQEAgLTE1
OCwyNiArMjIwLDE5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG93bmxvYWRGaW5pc2hl
ZCgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG9uZSgpCiB7Ci0gICAgYXV0byYgaW5q
ZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKTsKIAogICAgIHNl
dFdhaXRVbnRpbERvbmUodHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2FpdFVudGls
RG9uZShib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFdhaXRVbnRp
bERvbmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTZXRXYWl0VW50aWxEb25lIiwgdmFsdWUpOwogfQogCiBib29sIFRlc3RSdW5u
ZXI6OnNob3VsZFdhaXRVbnRpbERvbmUoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJHZXRXYWl0VW50aWxEb25lIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVs
bHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1
cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9z
dFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldFdhaXRVbnRpbERvbmUiKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKQEAgLTIxMCwxOCArMjY1LDEyIEBA
IHZvaWQgVGVzdFJ1bm5lcjo6Zm9yY2VJbW1lZGlhdGVDb21wbGV0aW9uKCkKIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGJvb2wgdmFsdWUpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVy
OjpzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiR2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJu
RGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBudWxs
cHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRv
cHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAg
cmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJHZXREdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzIik7CiB9CiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6OmltYWdlQ291bnRJ
bkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29uc3QKQEAgLTIzMSwxOCArMjgwLDE0IEBAIHVuc2lnbmVk
IFRlc3RSdW5uZXI6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29uc3QKIAogdm9p
ZCBUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5B
dFN0YXJ0LCBib29sIGFsbEZyYW1lcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c291cmNlV0sgPSB0b1dLKHNvdXJjZSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VBZGRVc2VyU2NyaXB0
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc291cmNlV0suZ2V0
KCksCisgICAgV0tCdW5kbGVQYWdlQWRkVXNlclNjcmlwdChwYWdlKCksIHRvV0soc291cmNlKS5n
ZXQoKSwKICAgICAgICAgKHJ1bkF0U3RhcnQgPyBrV0tJbmplY3RBdERvY3VtZW50U3RhcnQgOiBr
V0tJbmplY3RBdERvY3VtZW50RW5kKSwKICAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVjdElu
QWxsRnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVz
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3VyY2VXSyA9IHRvV0soc291cmNl
KTsKLQotICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTdHlsZVNoZWV0KEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc291cmNlV0suZ2V0KCksCisgICAgV0tCdW5kbGVQ
YWdlQWRkVXNlclN0eWxlU2hlZXQocGFnZSgpLCB0b1dLKHNvdXJjZSkuZ2V0KCksCiAgICAgICAg
IChhbGxGcmFtZXMgPyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6IGtXS0luamVjdEluVG9wRnJhbWVP
bmx5KSk7CiB9CiAKQEAgLTI1MywyOSArMjk4LDE3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6a2VlcFdl
Ykhpc3RvcnkoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5h
bWUsIEpTU3RyaW5nUmVmIHNob3dVSSwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7Ci0gICAgV0tCdW5k
bGVQYWdlRXhlY3V0ZUVkaXRpbmdDb21tYW5kKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyh2YWx1ZSkuZ2V0KCkpOworICAg
IFdLQnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChwYWdlKCksIHRvV0sobmFtZSkuZ2V0
KCksIHRvV0sodmFsdWUpLmdldCgpKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFdLRmluZE9wdGlv
bnM+IGZpbmRPcHRpb25zRnJvbUFycmF5KEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkK
IHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAg
ICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5ID0gSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHQsIG9wdGlvbnNBcnJheUFzVmFsdWUsIDApOwotICAgIEpTVmFsdWVS
ZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJh
eSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJl
cihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
KyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CisgICAgYXV0byBvcHRpb25zQXJy
YXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3B0aW9uc0FycmF5QXNWYWx1ZSwgbnVsbHB0
cik7CisgICAgYXV0byBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBvcHRpb25zQXJyYXkp
OwogICAgIFdLRmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0
YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAw
KSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBK
U1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0
aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwg
dmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBvcHRpb25OYW1l
ID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwotCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gb3B0
aW9uTmFtZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdElu
ZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCkpOwogICAgICAgICBpZiAoSlNTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQ2FzZUluc2Vuc2l0aXZlIikp
CiAgICAgICAgICAgICBvcHRpb25zIHw9IGtXS0ZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlOwog
ICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUu
Z2V0KCksICJBdFdvcmRTdGFydHMiKSkKQEAgLTI5Niw3ICszMjksNyBAQCBzdGF0aWMgT3B0aW9u
YWw8V0tGaW5kT3B0aW9ucz4gZmluZE9wdGlvbnNGcm9tQXJyYXkoSlNWYWx1ZVJlZiBvcHRpb25z
QXJyYXlBc1ZhbAogYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTU3RyaW5nUmVmIHRhcmdl
dCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogewogICAgIGlmIChhdXRvIG9wdGlv
bnMgPSBmaW5kT3B0aW9uc0Zyb21BcnJheShvcHRpb25zQXJyYXlBc1ZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKKyAgICAgICAg
cmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcocGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCks
ICpvcHRpb25zKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTMwNCwyOCArMzM3LDIzIEBA
IGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU1N0cmluZ1JlZiB0YXJnZXQsIEpTVmFsdWVS
ZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHZvaWQgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZ01hdGNo
ZXNJblBhZ2UoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFzVmFs
dWUpCiB7CiAgICAgaWYgKGF1dG8gb3B0aW9ucyA9IGZpbmRPcHRpb25zRnJvbUFycmF5KG9wdGlv
bnNBcnJheUFzVmFsdWUpKQotICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmluZFN0cmluZ01h
dGNoZXMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRh
cmdldCkuZ2V0KCksICpvcHRpb25zKTsKKyAgICAgICAgV0tCdW5kbGVQYWdlRmluZFN0cmluZ01h
dGNoZXMocGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpyZXBsYWNlRmluZE1hdGNoZXNBdEluZGljZXMoSlNWYWx1ZVJlZiBtYXRjaElu
ZGljZXNBc1ZhbHVlLCBKU1N0cmluZ1JlZiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0aW9u
T25seSkKIHsKICAgICBhdXRvJiBidW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7
Ci0gICAgYXV0byBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoYnVuZGxlLnBh
Z2UoKS0+cGFnZSgpKTsKLSAgICBhdXRvIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNj
cmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFk
b3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7CisgICAgYXV0byBj
b250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogICAgIGF1dG8gbWF0Y2hJbmRpY2VzT2JqZWN0ID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG1hdGNoSW5kaWNlc0FzVmFsdWUsIDApOwotICAgIGF1
dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG1hdGNoSW5kaWNl
c09iamVjdCwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJ
c051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRv
IGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG1hdGNoSW5kaWNlc09iamVjdCk7CiAKICAg
ICBhdXRvIGluZGljZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIGF1
dG8gbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
bGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250
ZXh0LCBtYXRjaEluZGljZXNPYmplY3QsIGksIDApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eUF0SW5kZXgoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0LCBpLCBudWxscHRyKTsKICAg
ICAgICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgYXV0byBpbmRleCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
c3RkOjpyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKSkpOwor
ICAgICAgICBhdXRvIGluZGV4ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKSk7CiAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVt
KGluZGljZXMuZ2V0KCksIGluZGV4LmdldCgpKTsKICAgICB9CiAgICAgV0tCdW5kbGVQYWdlUmVw
bGFjZVN0cmluZ01hdGNoZXMoYnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBpbmRpY2VzLmdldCgpLCB0
b1dLKHJlcGxhY2VtZW50VGV4dCkuZ2V0KCksIHNlbGVjdGlvbk9ubHkpOwpAQCAtMzM0LDExICsz
NjIsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0SW5kaWNlcyhKU1Zh
bHVlUmVmIG1hdGNoSW5kaWNlc0FzVmFsdWUsIEpTUwogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFs
bERhdGFiYXNlcygpCiB7CiAgICAgV0tCdW5kbGVDbGVhckFsbERhdGFiYXNlcyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5S
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodHJ1ZSkpOwotCi0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJEZWxldGVBbGxJbmRleGVkRGF0YWJhc2Vz
IiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSh1aW50NjRf
dCBxdW90YSkKQEAgLTM0OCwyOSArMzcyLDI3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJh
c2VRdW90YSh1aW50NjRfdCBxdW90YSkKIAogdm9pZCBUZXN0UnVubmVyOjpzeW5jTG9jYWxTdG9y
YWdlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTeW5jTG9jYWxTdG9yYWdlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZSh0cnVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJT
eW5jTG9jYWxTdG9yYWdlIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxB
cHBsaWNhdGlvbkNhY2hlcygpCiB7Ci0gICAgV0tCdW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNh
Y2hlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tC
dW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlKHBhZ2UoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikK
IHsKLSAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCkp
OworICAgIFdLQnVuZGxlUGFnZUNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihwYWdlKCks
IHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVN
YXhpbXVtU2l6ZSh1aW50NjRfdCBzaXplKQogewotICAgIFdLQnVuZGxlUGFnZVNldEFwcENhY2hl
TWF4aW11bVNpemUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBz
aXplKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRBcHBDYWNoZU1heGltdW1TaXplKHBhZ2UoKSwgc2l6
ZSk7CiB9CiAKIGxvbmcgbG9uZyBUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdl
Rm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVQYWdl
R2V0QXBwQ2FjaGVVc2FnZUZvck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlUGFn
ZUdldEFwcENhY2hlVXNhZ2VGb3JPcmlnaW4ocGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hl
UXVvdGEoKQpAQCAtMzgxLDE1OCArNDAzLDEwOCBAQCB2b2lkIFRlc3RSdW5uZXI6OmRpc2FsbG93
SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKQogc3RhdGljIGlubGluZSBKU1ZhbHVl
UmVmIHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29udGV4dCwgV0tBcnJheVJlZiBzdHJp
bmdzKQogewogICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHN0cmluZ3Mp
OwotCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRl
eHQsIDAsIDAsIDApOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKKyAgICBhdXRvIGFycmF5ID0gSlNPYmplY3RNYWtl
QXJyYXkoY29udGV4dCwgMCwgMCwgbnVsbHB0cik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN0cmluZ1JlZiA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoc3RyaW5ncywgaSkpOwotICAg
ICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nSlMgPSB0b0pTKHN0cmluZ1JlZik7
Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2JqLCBp
LCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdKUy5nZXQoKSksIDApOworICAgICAg
ICBhdXRvIHN0cmluZ1JlZiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRl
bUF0SW5kZXgoc3RyaW5ncywgaSkpOworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRl
eChjb250ZXh0LCBhcnJheSwgaSwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgdG9KUyhzdHJp
bmdSZWYpLmdldCgpKSwgbnVsbHB0cik7CiAgICAgfQotCi0gICAgcmV0dXJuIGFycmF5UmVzdWx0
OworICAgIHJldHVybiBhcnJheTsKIH0KIAogSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5z
V2l0aEFwcGxpY2F0aW9uQ2FjaGUoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tBcnJheVJlZj4gb3JpZ2lucyA9IGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weU9yaWdpbnNX
aXRoQXBwbGljYXRpb25DYWNoZShwYWdlKSk7Ci0KLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKLSAgICBKU0NvbnRleHRSZWYg
Y29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwot
Ci0gICAgcmV0dXJuIHN0cmluZ0FycmF5VG9KUyhjb250ZXh0LCBvcmlnaW5zLmdldCgpKTsKKyAg
ICByZXR1cm4gc3RyaW5nQXJyYXlUb0pTKG1haW5KU0NvbnRleHQoKSwgYWRvcHRXSyhXS0J1bmRs
ZVBhZ2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKHBhZ2UoKSkpLmdldCgpKTsKIH0K
IAogYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCiB7
Ci0gICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKHBhZ2UoKSwgdG9X
SyhuYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FuT3BlbldpbmRvd3Mo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDYW5PcGVuV2luZG93cyIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUodHJ1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNl
dENhbk9wZW5XaW5kb3dzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0WFNTQXVk
aXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRYU1NB
dWRpdG9yRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JU
ZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3Jv
dXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgi
V2ViS2l0WFNTQXVkaXRvckVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRNZWRpYURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiV2ViS2l0TWVkaWFEZXZpY2VzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3Rl
ZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0TWVkaWFEZXZpY2VzRW5hYmxlZCIsIGVuYWJsZWQpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFdlYlJUQ01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZChib29s
IGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdlYlJUQ01ETlNJQ0VDYW5kaWRh
dGVzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0
UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAo
KSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2Vi
S2l0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0Q3VzdG9tVXNlckFnZW50KEpTU3RyaW5nUmVmIHVzZXJBZ2VudCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDdXN0b21Vc2VyQWdlbnQiKSk7Ci0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHRvV0sodXNlckFnZW50KS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0Q3VzdG9tVXNlckFnZW50IiwgdG9X
Syh1c2VyQWdlbnQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXZWJBUElTdGF0
aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdl
YkFQSVN0YXRpc3RpY3NFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVy
ZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxl
LnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVm
ZXJlbmNlKCJXZWJLaXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQi
KSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmpl
Y3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQo
KSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdE1vZGVybk1l
ZGlhQ29udHJvbHNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
V2ViR0wyRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdl
YkdMMkVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVz
dFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3Vw
KCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldl
YktpdFdlYkdMMkVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRX
cml0YWJsZVN0cmVhbUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJXZWJLaXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRC
dW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlk
ZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5q
ZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpv
dmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxlZCIsIGVuYWJs
ZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQo
Ym9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRUcmFuc2Zvcm1TdHJlYW1B
UElFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RS
dW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgp
LCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJL
aXRUcmFuc2Zvcm1TdHJlYW1BUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIldlYktpdFJlYWRhYmxlQnl0ZVN0cmVhbUFQSUVuYWJsZWQiKSk7Ci0g
ICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0g
ICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1
bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5h
YmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFJlYWRhYmxlQnl0ZVN0
cmVhbUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRFbmNy
eXB0ZWRNZWRpYUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJX
ZWJLaXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJv
b2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0
ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVy
cmlkZVByZWZlcmVuY2UoIldlYktpdEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCIsIGVuYWJsZWQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBpY3R1cmVJblBpY3R1cmVBUElFbmFibGVkKGJv
b2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0UGljdHVyZUluUGljdHVyZUFQ
SUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1
bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCks
IGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktp
dFBpY3R1cmVJblBpY3R1cmVBUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJXZWJLaXRHZW5lcmljQ3VlQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3Rl
ZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJy
aWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBp
bmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6
Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0R2VuZXJpY0N1ZUFQSUVuYWJsZWQiLCBlbmFibGVk
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29s
IGVuYWJsZWQpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGUoZW5hYmxlZCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShl
bmFibGVkKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGUiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRT
d2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sIHNob3VsZFN3YXApCiB7
Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNz
aW9uT25OZXh0TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkU3dhcCkpOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVkQnVuZGxl
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRTaG91bGRTd2FwVG9F
cGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIsIHNob3VsZFN3YXApOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlv
bihib29sIHNob3VsZFN3YXApCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91
bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHNo
b3VsZFN3YXApKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZSgiU2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIiwgc2hvdWxk
U3dhcCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9t
RmlsZVVSTHMoYm9vbCBlbmFibGVkKQpAQCAtNTU1LDkgKzUyNyw3IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsoYm9vbCBuZWVkc1F1aXJr
KQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGVuYWJsZWQp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFBsdWdpbnNFbmFibGVkIikpOwotICAgIGF1dG8m
IGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVu
ZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVu
ZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOwor
ICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRQbHVnaW5zRW5hYmxlZCIsIGVuYWJs
ZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9h
cmQoYm9vbCBlbmFibGVkKQpAQCAtNTkxLDggKzU2MSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cmVt
b3ZlT3JpZ2luQWNjZXNzQWxsb3dMaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBK
U1N0CiBib29sIFRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJbmRleCkKIHsK
ICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsK
LSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlSXNQ
YWdlQm94VmlzaWJsZShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkZyYW1lLCBwYWdlSW5k
ZXgpOworICAgIHJldHVybiBXS0J1bmRsZUlzUGFnZUJveFZpc2libGUoaW5qZWN0ZWRCdW5kbGUu
YnVuZGxlKCksIG1haW5GcmFtZSgpLCBwYWdlSW5kZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVtZW50
LCBKU1N0cmluZ1JlZiB2YWx1ZSkKQEAgLTYwMCwxNiArNTY5LDE0IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1l
bnQsIEpTU3RyCiAgICAgaWYgKCFlbGVtZW50IHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwg
ZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlTm9k
ZUhhbmRsZVJlZj4gbm9kZUhhbmRsZSA9IGFkb3B0V0soV0tCdW5kbGVOb2RlSGFuZGxlQ3JlYXRl
KGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGVsZW1lbnQpKSk7Ci0gICAgV0tCdW5k
bGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNlcihub2RlSGFuZGxlLmdl
dCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CisgICAgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElu
cHV0RWxlbWVudFZhbHVlRm9yVXNlcihhZG9wdFdLKFdLQnVuZGxlTm9kZUhhbmRsZUNyZWF0ZShj
b250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihlbGVtZW50KSkpLmdldCgpLCB0b1dLKHZh
bHVlKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXVkaW9SZXN1bHQoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZGF0YSkKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICAvLyBGSVhNRSAoMTIzMDU4
KTogVXNlIGEgSlNDIEFQSSB0byBnZXQgYnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBleHBv
c2VkLgotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYXVkaW9EYXRhID0gYWRvcHRXSyhXS0J1
bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBj
b250ZXh0LCBkYXRhKSk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0QXVkaW9SZXN1bHQoYXVkaW9E
YXRhLmdldCgpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5zZXRBdWRpb1Jlc3VsdChhZG9wdFdLKFdL
QnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCks
IGNvbnRleHQsIGRhdGEpKS5nZXQoKSk7CiAgICAgc2V0V2hhdFRvRHVtcChXaGF0VG9EdW1wOjpB
dWRpbyk7CiAgICAgc2V0RHVtcFBpeGVscyhmYWxzZSk7CiB9CkBAIC02MjEsMzMgKzU4OCwzMCBA
QCB1bnNpZ25lZCBUZXN0UnVubmVyOjp3aW5kb3dDb3VudCgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6
Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQogewotICAgIFdLQnVuZGxlQ2xlYXJIaXN0b3J5Rm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdL
QnVuZGxlQ2xlYXJIaXN0b3J5Rm9yVGVzdGluZyhwYWdlKCkpOwogfQogCi0vLyBPYmplY3QgQ3Jl
YXRpb24KLQotdm9pZCBUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3ZvaWQgVGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkK
IHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJ0ZXN0UnVubmVyIiwg
dGhpcywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSwgZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250
ZXh0LCAidGVzdFJ1bm5lciIsIHRoaXMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNob3dXZWJJ
bnNwZWN0b3IoKQogewotICAgIFdLQnVuZGxlSW5zcGVjdG9yU2hvdyhXS0J1bmRsZVBhZ2VHZXRJ
bnNwZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7Cisg
ICAgV0tCdW5kbGVJbnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihwYWdlKCkp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYkluc3BlY3RvcigpCiB7Ci0gICAgV0tC
dW5kbGVJbnNwZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JD
bG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgpKSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3RvcihKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwotICAgIFdL
QnVuZGxlSW5zcGVjdG9yRXZhbHVhdGVTY3JpcHRGb3JUZXN0KFdLQnVuZGxlUGFnZUdldEluc3Bl
Y3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpLCBzY3JpcHRX
Sy5nZXQoKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlwdEZvclRlc3QoV0tC
dW5kbGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSksIHRvV0soc2NyaXB0KS5nZXQoKSk7CiB9CiAK
LXR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlw
dFdvcmxkUmVmPiA+IFdvcmxkTWFwOwordXNpbmcgV29ybGRNYXAgPSBXVEY6Okhhc2hNYXA8dW5z
aWduZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+PjsKIHN0YXRpYyBXb3Js
ZE1hcCYgd29ybGRNYXAoKQogewogICAgIHN0YXRpYyBXb3JsZE1hcCYgbWFwID0gKm5ldyBXb3Js
ZE1hcDsKQEAgLTY1NiwxMiArNjIwLDExIEBAIHN0YXRpYyBXb3JsZE1hcCYgd29ybGRNYXAoKQog
CiB1bnNpZ25lZCBUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQoV0tCdW5kbGVTY3JpcHRXb3Js
ZFJlZiB3b3JsZCkKIHsKLSAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29ybGRN
YXAoKS5lbmQoKTsKLSAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxk
TWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUg
PT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKKyAgICAvLyBGSVhNRTogVGhp
cyBpcyB0aGUgYW50aS1wYXR0ZXJuIG9mIGl0ZXJhdGluZyBhbiBlbnRpcmUgbWFwLiBUeXBpY2Fs
bHkgd2UgdXNlIGEgcGFpciBvZiBtYXBzIG9yIGp1c3QgYSB2ZWN0b3IgaW4gYSBjYXNlIGxpa2Ug
dGhpcy4KKyAgICBmb3IgKGF1dG8mIG1hcEVudHJ5IDogd29ybGRNYXAoKSkgeworICAgICAgICBp
ZiAobWFwRW50cnkudmFsdWUgPT0gd29ybGQpCisgICAgICAgICAgICByZXR1cm4gbWFwRW50cnku
a2V5OwogICAgIH0KLQogICAgIHJldHVybiAwOwogfQogCkBAIC02ODEsNyArNjQ0LDcgQEAgdm9p
ZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChKU0NvbnRleHRSZWYg
Y29udGV4dCwgdW5zaWduZWQgd28KIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1
bmRsZUZyYW1lRm9ySmF2YVNjcmlwdENvbnRleHQoY29udGV4dCk7CiAgICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICAgICAgZnJhbWUgPSBtYWluRnJhbWUo
KTsKIAogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0
SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQuZ2V0KCkpOwogICAgIEpTRXZh
bHVhdGVTY3JpcHQoanNDb250ZXh0LCBzY3JpcHQsIDAsIDAsIDAsIDApOyAKQEAgLTY5Niw4ICs2
NTksNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFBPU0lYTG9jYWxlKEpTU3RyaW5nUmVmIGxvY2Fs
ZSkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVj
dGlvbikKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwot
ICAgIHJldHVybiBXS0J1bmRsZUZyYW1lU2V0VGV4dERpcmVjdGlvbihtYWluRnJhbWUsIHRvV0so
ZGlyZWN0aW9uKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVTZXRUZXh0RGlyZWN0
aW9uKG1haW5GcmFtZSgpLCB0b1dLKGRpcmVjdGlvbikuZ2V0KCkpOwogfQogICAgIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChi
b29sIHNob3VsZFN0YXlPblBhZ2UpCkBAIC03MDcsMTcgKzY2OSwxMiBAQCB2b2lkIFRlc3RSdW5u
ZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGJvb2wgc2hv
dWxkU3RheU9uUAogCiBib29sIFRlc3RSdW5uZXI6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZv
clByb3Zpc2lvbmFsTmF2aWdhdGlvbigpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpOwot
ICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7
Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJE
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxOYXZpZ2F0aW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlKCJDbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lv
bmFsTmF2aWdhdGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5
KEpTU3RyaW5nUmVmIHN0YXRlKQpAQCAtNzMwLDcgKzY4Nyw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNl
dEhpZGRlbihmYWxzZSk7CiB9CiAKLXR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBKU1Zh
bHVlUmVmPiBDYWxsYmFja01hcDsKK3VzaW5nIENhbGxiYWNrTWFwID0gV1RGOjpIYXNoTWFwPHVu
c2lnbmVkLCBKU09iamVjdFJlZj47CiBzdGF0aWMgQ2FsbGJhY2tNYXAmIGNhbGxiYWNrTWFwKCkK
IHsKICAgICBzdGF0aWMgQ2FsbGJhY2tNYXAmIG1hcCA9ICpuZXcgQ2FsbGJhY2tNYXA7CkBAIC03
ODMsMzggKzc0MCwzMiBAQCBzdGF0aWMgdm9pZCBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayh1bnNp
Z25lZCBpbmRleCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBpZiAoIWNhbGxiYWNrKQog
ICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7Cisg
ICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2FsbGJhY2spKQorICAgICAgICByZXR1
cm47CiAgICAgaWYgKGNhbGxiYWNrTWFwKCkuY29udGFpbnMoaW5kZXgpKSB7CiAgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkZBSUw6IFRy
aWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBjYWxsYmFjayBmb3IgdGhlIHNhbWUg
ZXZlbnQgKGlkICIsIGluZGV4LCAiKVxuXG4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0K
LSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5G
cmFtZSk7CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIGNhbGxi
YWNrTWFwKCkuYWRkKGluZGV4LCBjYWxsYmFjayk7CisgICAgY2FsbGJhY2tNYXAoKS5hZGQoaW5k
ZXgsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGNhbGxiYWNrKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IGNhbGxUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIHNpemVfdCBhcmd1bWVudENv
dW50ID0gMCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSA9IG51bGxwdHIpCiB7Ci0gICAg
aWYgKCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkKKyAgICBhdXRvIGNhbGxiYWNrID0g
Y2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KTsKKyAgICBpZiAoIWNhbGxiYWNrKQogICAgICAgICBy
ZXR1cm47Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAg
ICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChtYWluRnJhbWUpOwotICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHQsIGNhbGxiYWNrTWFwKCkudGFrZShpbmRleCksIDApOworICAgIGF1dG8gY29udGV4
dCA9IG1haW5KU0NvbnRleHQoKTsKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQs
IGNhbGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGFyZ3VtZW50Q291
bnQsIGFyZ3VtZW50cywgMCk7CiAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFj
ayk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJUZXN0UnVubmVyQ2FsbGJhY2tzKCkKIHsK
LSAgICBmb3IgKGF1dG8mIGl0ZXIgOiBjYWxsYmFja01hcCgpKSB7Ci0gICAgICAgIFdLQnVuZGxl
RnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgICAgIEpTQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0g
ICAgICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGl0
ZXIudmFsdWUsIDApOwotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNr
KTsKLSAgICB9Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CisgICAgZm9y
IChhdXRvJiB2YWx1ZSA6IGNhbGxiYWNrTWFwKCkudmFsdWVzKCkpCisgICAgICAgIEpTVmFsdWVV
bnByb3RlY3QoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlLCBudWxscHRy
KSk7CiAgICAgY2FsbGJhY2tNYXAoKS5jbGVhcigpOwogfQogCkBAIC04OTQsMjAgKzg0NSwxMiBA
QCB2b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJl
bmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbHdheXNBY2Nl
cHRDb29raWVzKGJvb2wgYWNjZXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFs
d2F5c0FjY2VwdENvb2tpZXMiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWNjZXB0KSk7Ci0KLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldEFsd2F5c0FjY2VwdENvb2tpZXMiLCBhY2Nl
cHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29va2ll
cyhib29sIGFjY2VwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRPbmx5QWNjZXB0
Rmlyc3RQYXJ0eUNvb2tpZXMiKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGFjY2VwdCkpOwotICAgIAot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0T25seUFjY2VwdEZpcnN0UGFy
dHlDb29raWVzIiwgYWNjZXB0KTsKIH0KIAogZG91YmxlIFRlc3RSdW5uZXI6OnByZWNpc2VUaW1l
KCkKQEAgLTkyNCwxNSArODY3LDE1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hl
ZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9
IGVuYWJsZWQ7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW1wdHlVcmwgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7Ci0gICAgV0tTdHJpbmdSZWYg
bG9jYXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uLmdldCgpIDogZW1w
dHlVcmwuZ2V0KCk7CisgICAgYXV0byBlbXB0eVN0cmluZyA9IHRvV0soIiIpOworICAgIGF1dG8g
bG9jYXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uLmdldCgpIDogZW1w
dHlTdHJpbmcuZ2V0KCk7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7CiAgICAgV0tCdW5kbGVTZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGlu
amVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwgbG9jYXRp
b24pOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNT
dHJpbmdSZWYgbG9jYXRpb24pCiB7Ci0gICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhsb2NhdGlvbikpOworICAgIG1fdXNlclN0
eWxlU2hlZXRMb2NhdGlvbiA9IHRvV0sobG9jYXRpb24pOwogCiAgICAgaWYgKG1fdXNlclN0eWxl
U2hlZXRFbmFibGVkKQogICAgICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7CkBA
IC05NDYsOCArODg5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTcGF0aWFsTmF2aWdhdGlvbkVu
YWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyhib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVTZXRUYWJLZXlDeWNs
ZXNUaHJvdWdoRWxlbWVudHMoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxl
LnBhZ2UoKS0+cGFnZSgpLCBlbmFibGVkKTsKKyAgICBXS0J1bmRsZVNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHBhZ2Uo
KSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExvYWRz
KCkKQEAgLTk3MywzNiArOTE1LDI4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFRlc3RSdW5uZXI6Omdy
YW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdL
QnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihpbmplY3RlZEJ1bmRsZS5idW5kbGUo
KSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG9yaWdpbldLLmdldCgpLCB0cnVlKTsK
KyAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSwgdHJ1ZSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNT
dHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5X
SyA9IHRvV0sob3JpZ2luKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Np
b24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgp
LCBvcmlnaW5XSy5nZXQoKSwgZmFsc2UpOworICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9u
UGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHBhZ2UoKSwg
dG9XSyhvcmlnaW4pLmdldCgpLCBmYWxzZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3Zl
QWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKQogewotICAgIGF1dG8mIGluamVjdGVkQnVu
ZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlUmVtb3ZlQWxs
V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVj
dGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVJlbW92ZUFsbFdlYk5vdGlm
aWNhdGlvblBlcm1pc3Npb25zKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
cGFnZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNs
aWNrKEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+
cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0g
V0tCdW5kbGVHZXRXZWJOb3RpZmljYXRpb25JRChpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgY29u
dGV4dCwgbm90aWZpY2F0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5wb3N0U2ltdWxhdGVXZWJO
b3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7CisgICAgaW5qZWN0ZWRCdW5kbGUucG9z
dFNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soV0tCdW5kbGVHZXRXZWJOb3RpZmljYXRpb25J
RChpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkpTQ29udGV4dCgpLCBub3RpZmljYXRpb24p
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBl
bmFibGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgogICAgIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oZW5hYmxlZCk7CiB9
CiAKQEAgLTEwMTEsMTAyICs5NDUsNTEgQEAgYm9vbCBUZXN0UnVubmVyOjppc0dlb2xvY2F0aW9u
UHJvdmlkZXJBY3RpdmUoKQogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
aXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRl
LCBkb3VibGUgYWNjdXJhY3ksIEpTVmFsdWVSZWYganNBbHRpdHVkZSwgSlNWYWx1ZVJlZiBqc0Fs
dGl0dWRlQWNjdXJhY3ksIEpTVmFsdWVSZWYganNIZWFkaW5nLCBKU1ZhbHVlUmVmIGpzU3BlZWQs
IEpTVmFsdWVSZWYganNGbG9vckxldmVsKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBh
Y2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRp
dHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4g
c3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBhdXRvJiBpbmplY3Rl
ZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZUZyYW1l
UmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5w
YWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1l
R2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLQotICAgIGJvb2wgcHJvdmlkZXNBbHRp
dHVkZSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZSA9IDAuOwotICAgIGlmICghSlNWYWx1
ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzQWx0aXR1ZGUpKSB7Ci0gICAgICAgIHByb3ZpZGVzQWx0
aXR1ZGUgPSB0cnVlOwotICAgICAgICBhbHRpdHVkZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBqc0FsdGl0dWRlLCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1
cmFjeSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5ID0gMC47Ci0gICAgaWYg
KCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNBbHRpdHVkZUFjY3VyYWN5KSkgewotICAg
ICAgICBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kgPSB0cnVlOwotICAgICAgICBhbHRpdHVkZUFj
Y3VyYWN5ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzQWx0aXR1ZGVBY2N1cmFjeSwgMCk7
Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc0hlYWRpbmcgPSBmYWxzZTsKLSAgICBkb3VibGUg
aGVhZGluZyA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzSGVh
ZGluZykpIHsKLSAgICAgICAgcHJvdmlkZXNIZWFkaW5nID0gdHJ1ZTsKLSAgICAgICAgaGVhZGlu
ZyA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc0hlYWRpbmcsIDApOwotICAgIH0KLQotICAg
IGJvb2wgcHJvdmlkZXNTcGVlZCA9IGZhbHNlOwotICAgIGRvdWJsZSBzcGVlZCA9IDAuOwotICAg
IGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzU3BlZWQpKSB7Ci0gICAgICAgIHBy
b3ZpZGVzU3BlZWQgPSB0cnVlOwotICAgICAgICBzcGVlZCA9IEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBqc1NwZWVkLCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCA9
IGZhbHNlOwotICAgIGRvdWJsZSBmbG9vckxldmVsID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNV
bmRlZmluZWQoY29udGV4dCwganNGbG9vckxldmVsKSkgewotICAgICAgICBwcm92aWRlc0Zsb29y
TGV2ZWwgPSB0cnVlOwotICAgICAgICBmbG9vckxldmVsID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIGpzRmxvb3JMZXZlbCwgMCk7Ci0gICAgfQotCi0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3Zp
ZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRl
QWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQs
IHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUs
IGFjY3VyYWN5LCBhbHRpdHVkZSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQsIGZs
b29yTGV2ZWwpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uVW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdlKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlV0sgPSB0b1dLKG1lc3NhZ2UpOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxl
RXJyb3IobWVzc2FnZVdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKHRvV0sobWVzc2FnZSku
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcm1pc3Npb24oYm9v
bCBlbmFibGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1l
LgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgogICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGVuYWJsZWQpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbigpCiB7Ci0gICAg
Ly8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbigpOwogfQogCiBib29sIFRlc3RSdW5uZXI6Omlz
RG9pbmdNZWRpYUNhcHR1cmUoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklz
RG9pbmdNZWRpYUNhcHR1cmUiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRy
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0
YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1
ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsK
KyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJ
c0RvaW5nTWVkaWFDYXB0dXJlIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlck1lZGlh
UGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4oYm9vbCBwZXJtaXNzaW9uLCBKU1N0cmluZ1Jl
ZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9XSyhwYXJlbnRPcmlnaW4pOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZv
ck9yaWdpbihwZXJtaXNzaW9uLCBvcmlnaW5XSy5nZXQoKSwgcGFyZW50T3JpZ2luV0suZ2V0KCkp
OworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJzaXN0ZW50
UGVybWlzc2lvbkZvck9yaWdpbihwZXJtaXNzaW9uLCB0b1dLKG9yaWdpbikuZ2V0KCksIHRvV0so
cGFyZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6OnVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luLCBKU1N0
cmluZ1JlZiBwYXJlbnRPcmlnaW4pIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBwYXJlbnRPcmlnaW5XSyA9IHRvV0socGFyZW50T3JpZ2luKTsKLSAgICByZXR1cm4gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JP
cmlnaW4ob3JpZ2luV0suZ2V0KCksIHBhcmVudE9yaWdpbldLLmdldCgpKTsKKyAgICByZXR1cm4g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291
bnRGb3JPcmlnaW4odG9XSyhvcmlnaW4pLmdldCgpLCB0b1dLKHBhcmVudE9yaWdpbikuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RD
b3VudEZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdp
bikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdp
bik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9XSyhw
YXJlbnRPcmlnaW4pOwotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXNldFVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4ob3JpZ2luV0suZ2V0KCksIHBhcmVu
dE9yaWdpbldLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucmVzZXRV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKHRvV0sob3JpZ2luKS5nZXQo
KSwgdG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpjYWxs
U2hvdWxkQ2xvc2VPbldlYlZpZXcoKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1l
ID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVDYWxsU2hvdWxkQ2xvc2VP
bldlYlZpZXcobWFpbkZyYW1lKTsKKyAgICByZXR1cm4gV0tCdW5kbGVGcmFtZUNhbGxTaG91bGRD
bG9zZU9uV2ViVmlldyhtYWluRnJhbWUoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVC
YWNrTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJCYWNrd2FyZCkKQEAgLTExMjIsMjAgKzEwMDUs
MTcgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHVuc2lnbmVkIGhv
d0ZhckZvcndhcmQpCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmws
IEpTU3RyaW5nUmVmIHRhcmdldCwgYm9vbCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKQogewogICAg
IGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVmPiBiYXNlVVJMV0sgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVD
b3B5VVJMKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBh
Z2UoKSkpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsV0sgPSBhZG9wdFdLKFdLVVJM
Q3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTFdLLmdldCgpLCB0b1dURlN0cmluZyh0b1dLKHVybCkp
LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5n
V0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxXSy5nZXQoKSkpOwotCisgICAgYXV0byBi
YXNlVVJMV0sgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSgpKSk7Cisg
ICAgYXV0byB1cmxXSyA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMV0su
Z2V0KCksIHRvV1RGU3RyaW5nKHVybCkudXRmOCgpLmRhdGEoKSkpOworICAgIGF1dG8gdXJsU3Ry
aW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxXSy5nZXQoKSkpOwogICAgIGluamVj
dGVkQnVuZGxlLnF1ZXVlTG9hZCh1cmxTdHJpbmdXSy5nZXQoKSwgdG9XSyh0YXJnZXQpLmdldCgp
LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxv
YWRIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwsIEpT
U3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBjb250ZW50V0sgPSB0b1dLKGNvbnRlbnQpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBiYXNlVVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJMKSA6IFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPigpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJsZVVSTFdL
ID0gdW5yZWFjaGFibGVVUkwgPyB0b1dLKHVucmVhY2hhYmxlVVJMKSA6IFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPigpOwotCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9h
ZEhUTUxTdHJpbmcoY29udGVudFdLLmdldCgpLCBiYXNlVVJMV0suZ2V0KCksIHVucmVhY2hhYmxl
VVJMV0suZ2V0KCkpOworICAgIGF1dG8gYmFzZVVSTFdLID0gYmFzZVVSTCA/IHRvV0soYmFzZVVS
TCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKKyAgICBhdXRvIHVucmVhY2hhYmxlVVJM
V0sgPSB1bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5yZWFjaGFibGVVUkwpIDogV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+KCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9h
ZEhUTUxTdHJpbmcodG9XSyhjb250ZW50KS5nZXQoKSwgYmFzZVVSTFdLLmdldCgpLCB1bnJlYWNo
YWJsZVVSTFdLLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZCgpCkBA
IC0xMTQ1LDE2MyArMTAyNSwxMTkgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZCgpCiAK
IHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dLKHNjcmlwdCk7
Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9hZGluZ1NjcmlwdChzY3Jp
cHRXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9hZGlu
Z1NjcmlwdCh0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVl
Tm9uTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwotICAgIEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQoc2NyaXB0V0suZ2V0KCkpOworICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQodG9XSyhz
Y3JpcHQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRSZWplY3RzUHJvdGVjdGlv
blNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoYm9vbCB2YWx1ZSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5k
Q29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVl
KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRp
bnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwgdmFsdWUpOwogfQogICAgIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2wgaGFuZGxl
c0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIikpOwotICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYW5kbGVz
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0SGFuZGxl
c0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZXMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZExvZ0Nh
bkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MoYm9vbCB2YWx1ZSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGRMb2dE
b3dubG9hZENhbGxiYWNrcyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRo
ZW50aWNhdGlvblVzZXJuYW1lKEpTU3RyaW5nUmVmIHVzZXJuYW1lKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhK
U1N0cmluZyh1c2VybmFtZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEF1dGhlbnRpY2F0aW9u
VXNlcm5hbWUiLCB0b1dLKHVzZXJuYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0QXV0aGVudGljYXRpb25QYXNzd29yZChKU1N0cmluZ1JlZiBwYXNzd29yZCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcocGFzc3dvcmQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRBdXRoZW50
aWNhdGlvblBhc3N3b3JkIiwgdG9XSyhwYXNzd29yZCkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RS
dW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQoKSBjb25zdAogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQiKSk7Ci0gICAgV0tUeXBlUmVm
IHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQo
V0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJl
dHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
cmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKCJTZWN1cmVFdmVudElucHV0SXNFbmFibGVkIik7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wgc2hvdWxkQmxvY2spCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QmxvY2tBbGxQbHVnaW5zIikpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShzaG91bGRCbG9jaykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEJsb2NrQWxsUGx1Z2lucyIs
IHNob3VsZEJsb2NrKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRN
b2RlKEpTU3RyaW5nUmVmIG1vZGUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0UGx1
Z2luU3VwcG9ydGVkTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKG1vZGUpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIiwgdG9XSyhtb2RlKS5nZXQoKSk7
CiB9CiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6ZmFpbE5leHROZXdDb2RlQmxvY2soKQogewot
ICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1l
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZy
YW1lKTsKLSAgICByZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0NvZGVCbG9jayhjb250ZXh0KTsKKyAg
ICByZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0NvZGVCbG9jayhtYWluSlNDb250ZXh0KCkpOwogfQog
Ci1KU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiB0
aGVGdW5jdGlvbikKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdDb21waWxlcyhK
U1ZhbHVlUmVmIGZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0
SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpudW1iZXJPZkRG
R0NvbXBpbGVzKGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4gSlNDOjpudW1iZXJP
ZkRGR0NvbXBpbGVzKG1haW5KU0NvbnRleHQoKSwgZnVuY3Rpb24pOwogfQogCi1KU1ZhbHVlUmVm
IFRlc3RSdW5uZXI6Om5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbikK
K0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlvbihKU1ZhbHVlUmVmIGZ1
bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7
Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENv
bnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpzZXROZXZlcklubGluZShjb250ZXh0
LCB0aGVGdW5jdGlvbik7CisgICAgcmV0dXJuIEpTQzo6c2V0TmV2ZXJJbmxpbmUobWFpbkpTQ29u
dGV4dCgpLCBmdW5jdGlvbik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGVjaWRl
TmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoYm9vbCB2YWx1ZSkKIHsKICAgICBtX3Nob3VsZERl
Y2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5ID0gdmFsdWU7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkRGVjaWRlTmF2
aWdhdGlvblBvbGljeUFmdGVyRGVsYXkiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KGJvb2wgdmFsdWUpCiB7CiAg
ICAgbV9zaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkgPSB2YWx1ZTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVs
YXkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxk
RGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5IiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoYm9vbCB2YWx1ZSkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkIikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE5hdmlnYXRpb25HZXN0dXJl
c0VuYWJsZWQiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0SWdub3Jlc1ZpZXdw
b3J0U2NhbGVMaW1pdHMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIsIHZhbHVlKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1F
VHlwZXMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRE
b3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVz
IiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZEFsbG93RGV2aWNlT3Jp
ZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZEFsbG93
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyIpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyIpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiVGVybWluYXRlU2Vydmlj
ZVdvcmtlcnMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2UoIlNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MiLCB2YWx1ZSk7CiB9CiAKIHN0
YXRpYyB1bnNpZ25lZCBuZXh0VUlTY3JpcHRDYWxsYmFja0lEKCkKQEAgLTEzMTQsOTcgKzExNTAs
NDggQEAgdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQsIEpT
VmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG5leHRVSVNj
cmlwdENhbGxiYWNrSUQoKTsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhjYWxsYmFja0lE
LCBjYWxsYmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSdW5VSVByb2Nlc3NTY3Jp
cHQiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiB0ZXN0RGlj
dGlvbmFyeSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHNjcmlwdFZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1VJbnQ2NFJlZj4gY2FsbGJhY2tJRFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShjYWxsYmFja0lEKSk7Ci0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9u
YXJ5LmdldCgpLCBzY3JpcHRLZXkuZ2V0KCksIHNjcmlwdFZhbHVlLmdldCgpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBjYWxsYmFja0lES2V5LmdldCgp
LCBjYWxsYmFja0lEVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgdGVzdERpY3Rpb25hcnkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUnVuVUlQ
cm9jZXNzU2NyaXB0IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU2NyaXB0Iiwg
dG9XSyhzY3JpcHQpIH0sCisgICAgICAgIHsgIkNhbGxiYWNrSUQiLCBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGNhbGxiYWNrSUQpKS5nZXQoKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNW
YWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbmV4dFVJU2Ny
aXB0Q2FsbGJhY2tJRCgpOwogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKGNhbGxiYWNrSUQs
IGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJ1blVJUHJvY2Vzc1Njcmlw
dEltbWVkaWF0ZWx5IikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4gdGVzdERpY3Rpb25hcnkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzY3JpcHRWYWx1ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcoc2NyaXB0KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGNhbGxiYWNrSURWYWx1ZSA9IGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpOwotCi0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSh0
ZXN0RGljdGlvbmFyeS5nZXQoKSwgc2NyaXB0S2V5LmdldCgpLCBzY3JpcHRWYWx1ZS5nZXQoKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSh0ZXN0RGljdGlvbmFyeS5nZXQoKSwgY2FsbGJhY2tJ
REtleS5nZXQoKSwgY2FsbGJhY2tJRFZhbHVlLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIHRlc3REaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIlJ1blVJUHJvY2Vzc1NjcmlwdEltbWVkaWF0ZWx5IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsK
KyAgICAgICAgeyAiU2NyaXB0IiwgdG9XSyhzY3JpcHQpIH0sCisgICAgICAgIHsgIkNhbGxiYWNr
SUQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQpKS5nZXQoKSB9LAorICAgIH0p
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdENhbGxiYWNrKHVuc2ln
bmVkIGNhbGxiYWNrSUQsIEpTU3RyaW5nUmVmIHJlc3VsdCkKIHsKLSAgICBXS0J1bmRsZUZyYW1l
UmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0KLSAgICBKU1Zh
bHVlUmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcmVzdWx0KTsK
KyAgICBKU1ZhbHVlUmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcobWFpbkpTQ29u
dGV4dCgpLCByZXN1bHQpOwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soY2FsbGJhY2tJRCwg
MSwgJnJlc3VsdFZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd2VkTWVudUFj
dGlvbnMoSlNWYWx1ZVJlZiBhY3Rpb25zKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dEFsbG93ZWRNZW51QWN0aW9ucyIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotCi0gICAg
YXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwot
ICAgIGF1dG8gbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAg
IGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJh
bWUpOwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250
ZXh0KCk7CiAgICAgYXV0byBhY3Rpb25zQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwg
YWN0aW9ucywgbnVsbHB0cik7Ci0gICAgYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkoY29udGV4dCwgYWN0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCksIG51
bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFjdGlvbnNBcnJheSwgaSwgMCk7Ci0gICAg
ICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGF1dG8gYWN0aW9uTmFtZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGFjdGlvbiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoYWN0aW9uTmFt
ZS5nZXQoKSkpOwotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwg
YWN0aW9uLmdldCgpKTsKKyAgICBhdXRvIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIGFj
dGlvbnNBcnJheSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBhY3Rpb25zQXJyYXksIGksIG51bGxwdHIpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbSht
ZXNzYWdlQm9keS5nZXQoKSwgdG9XS1N0cmluZyhjb250ZXh0LCB2YWx1ZSkuZ2V0KCkpOwogICAg
IH0KLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRBbGxvd2VkTWVu
dUFjdGlvbnMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW5z
dGFsbEN1c3RvbU1lbnVBY3Rpb24oSlNTdHJpbmdSZWYgbmFtZSwgYm9vbCBkaXNtaXNzZXNBdXRv
bWF0aWNhbGx5LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNh
bGxiYWNrKEN1c3RvbU1lbnVBY3Rpb25DYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJJbnN0YWxsQ3VzdG9tTWVudUFjdGlvbiIpKTsKLSAgICBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBu
YW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibmFtZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZVZhbHVlID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhuYW1lKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNz
YWdlQm9keS5nZXQoKSwgbmFtZUtleS5nZXQoKSwgbmFtZVZhbHVlLmdldCgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGlzbWlzc2VzQXV0b21hdGljYWxseSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlW
YWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBkaXNtaXNzZXNBdXRv
bWF0aWNhbGx5S2V5LmdldCgpLCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5VmFsdWUuZ2V0KCkpOwot
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiSW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24iLCBjcmVhdGVXS0Rp
Y3Rpb25hcnkoeworICAgICAgICB7ICJuYW1lIiwgdG9XSyhuYW1lKSB9LAorICAgICAgICB7ICJk
aXNtaXNzZXNBdXRvbWF0aWNhbGx5IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZGlzbWlzc2Vz
QXV0b21hdGljYWxseSkpLmdldCgpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6Omluc3RhbGxEaWRCZWdpblN3aXBlQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykK
QEAgLTE0NDksNTggKzEyMzYsMzAgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlU3dp
cGVTbmFwc2hvdENhbGxiYWNrKCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhclN0YXRpc3RpY3NE
YXRhRm9yRG9tYWluKEpTU3RyaW5nUmVmIGRvbWFpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcoZG9tYWluKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhclN0
YXRpc3RpY3NEYXRhRm9yRG9tYWluIiwgdG9XSyhkb21haW4pLmdldCgpKTsKIH0KIAogYm9vbCBU
ZXN0UnVubmVyOjpkb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlKHVuc2lnbmVk
IGRvbWFpbklEKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7
Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvbWFpbklEIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZG9tYWluSUQpKSk7
Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZl
Y3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0g
a2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwot
ICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvZXNTdGF0aXN0aWNzRG9tYWluSURF
eGlzdEluRGF0YWJhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdW
YWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRh
ID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChX
S0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0
dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihy
ZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4oIkRvZXNTdGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2Ui
LCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJEb21haW5JRCIsIGFkb3B0V0soV0tV
SW50NjRDcmVhdGUoZG9tYWluSUQpKSB9CisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0VuYWJsZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzRW5hYmxl
ZCIsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NFcGhlbWVyYWwo
KQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVy
bkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRU
eXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBX
S0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJu
RGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGlj
c0RlYnVnTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVl
KSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFjaygpCkBAIC0xNTEx
LDEwICsxMjcwLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldERlYnVn
TW9kZUNhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1ZhbHVlUmVmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5k
bGVyKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFt
ZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiLCB0
b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Nh
bGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNhbGxiYWNrKCkKQEAgLTE1MjYs
MjcgKzEyODIsMTAgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4oSlNT
dHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzLCBKU1YKIHsKICAgICBjYWNoZVRlc3RS
dW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzTGFzdFNlZW5DYWxsYmFja0lELCBjb21wbGV0aW9u
SGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
Zyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVm
PiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXMo
dmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAg
ICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVh
dGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0g
ICAgCi0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7Cisg
ICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVmFsdWUi
LCB0b1dLKHNlY29uZHMpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NDYWxsRGlkU2V0TGFzdFNlZW5DYWxsYmFjaygpCkBAIC0xNTU4LDQ5ICsxMjk3
LDE4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKEpTU3Ry
aW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiB0CiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2Fs
bGJhY2soU2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhh
bmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0
TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjEiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZURvbWFpbjEpKSk7Ci0gICAg
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VG9wRnJhbWVEb21haW4yIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVEb21haW4yKSkpOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGFzdFNlZW4iKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShsYXN0U2VlbikpKTsKLQotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhZFVz
ZXJJbnRlcmFjdGlvbiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShoYWRVc2VySW50ZXJhY3Rpb24pKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUobW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIklzR3JhbmRmYXRoZXJlZCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVyZWQpKSk7Ci0KLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ByZXZhbGVu
dCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZh
bGVudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIklzVmVyeVByZXZhbGVudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShpc1ZlcnlQcmV2YWxlbnQpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEYXRhUmVjb3Jkc1JlbW92ZWQi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkYXRhUmVjb3Jk
c1JlbW92ZWQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXpl
KCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICBy
YXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVz
W2ldLmdldCgpOwotICAgIH0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNz
TWVyZ2VTdGF0aXN0aWMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdW
YWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzTWVyZ2VT
dGF0aXN0aWMiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRv
V0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lRG9tYWluMSIsIHRvV0sodG9wRnJh
bWVEb21haW4xKSB9LAorICAgICAgICB7ICJUb3BGcmFtZURvbWFpbjIiLCB0b1dLKHRvcEZyYW1l
RG9tYWluMikgfSwKKyAgICAgICAgeyAiTGFzdFNlZW4iLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRl
KGxhc3RTZWVuKSkgfSwKKyAgICAgICAgeyAiSGFkVXNlckludGVyYWN0aW9uIiwgYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkgfSwKKyAgICAgICAgeyAiTW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUobW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzR3JhbmRmYXRoZXJlZCIsIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkpIH0sCisgICAgICAgIHsgIklzUHJldmFs
ZW50IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKSB9LAorICAgICAgICB7
ICJJc1ZlcnlQcmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ZlcnlQcmV2YWxl
bnQpKSB9LAorICAgICAgICB7ICJEYXRhUmVjb3Jkc1JlbW92ZWQiLCBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0TWVyZ2VTdGF0aXN0aWNDYWxsYmFjaygp
CkBAIC0xNjEyLDMxICsxMzIwLDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0V4
cGlyZWRTdGF0aXN0aWMoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgaGFkVXNlCiB7CiAgICAg
Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWNDYWxs
YmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhZFVzZXJJbnRlcmFjdGlv
bikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNTY2hlZHVsZWRGb3JBbGxCdXRD
b29raWVEYXRhUmVtb3ZhbCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkpOwotICAgIAotICAgIFZlY3Rv
cjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJl
Zj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgp
OwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljIikpOwotICAg
IFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGlj
dGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5z
aXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMiLCBjcmVhdGVXS0Rp
Y3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAg
ICAgIHsgIkhhZFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhZFVz
ZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1NjaGVkdWxlZEZvckFsbEJ1
dENvb2tpZURhdGFSZW1vdmFsKSkgfSwKKyAgICAgICAgeyAiSXNQcmV2YWxlbnQiLCBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpIH0KKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRFeHBpcmVkU3RhdGlzdGljQ2FsbGJh
Y2soKQpAQCAtMTY0OCwyOSArMTMzNywxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZQogewog
ICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+
IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1Zh
bHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJl
c2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
RGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5
cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiLCBjcmVh
dGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0s
CisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAor
ICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNl
dFByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQpAQCAtMTY4MiwyOSArMTM1MiwxMCBAQCB2b2lk
IFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdS
ZWYgaG9zdE5hbWUsIGJvb2wgdgogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0
YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxl
cik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0
TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tl
eXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXpl
KGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotICAg
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAg
ICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFs
dWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRT
dGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGlj
dGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdL
ZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICAKLSAg
ICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2Fn
ZSgiU2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIsIGNyZWF0ZVdLRGljdGlvbmFy
eSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAi
VmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VmVyeVByZXZhbGVu
dFJlc291cmNlQ2FsbGJhY2soKQpAQCAtMTcxNCwxMzggKzEzNjUsNTEgQEAgdm9pZCBUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZUNhbGxiYWNrKCkK
ICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIikpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJkdW1wUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyIpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGlj
c1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxw
dHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBl
SUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jv
b2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0
YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5p
bmdCb29sZWFuKCJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIsIHRvV0soaG9zdE5hbWUp
LmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50
UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0
dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5H
ZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdl
dCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuKCJJc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCB0b1dLKGhvc3ROYW1lKS5n
ZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3Vi
cmVzb3VyY2VVbmRlcihKU1N0cmluZ1JlZiBzdWJyZXNvdXJjZUhvc3QsIEpTU3RyaW5nUmVmIHRv
cEZyYW1lSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlz
OwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3VicmVz
b3VyY2VIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoc3VicmVzb3VyY2VIb3N0KSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdCIpKSk7Ci0g
ICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZy
YW1lSG9zdCkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5z
aXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsK
LSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9
IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlD
cmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7
Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAm
cmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJu
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNz
UmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAg
ICAgIHsgIlN1YnJlc291cmNlSG9zdCIsIHRvV0soc3VicmVzb3VyY2VIb3N0KSB9LAorICAgICAg
ICB7ICJUb3BGcmFtZUhvc3QiLCB0b1dLKHRvcEZyYW1lSG9zdCkgfSwKKyAgICB9KS5nZXQoKSk7
CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVV
bmRlcihKU1N0cmluZ1JlZiBzdWJGcmFtZUhvc3QsIEpTU3RyaW5nUmVmIHRvcEZyYW1lSG9zdCkK
IHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJGcmFtZUhvc3QiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJGcmFt
ZUhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0KSkpOwotICAgIAotICAg
IFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdL
VHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ld
LmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJh
bWVVbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5k
YXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxs
cHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tC
b29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRh
dGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJu
aW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciIsIGNyZWF0
ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlN1YkZyYW1lSG9zdCIsIHRvV0soc3ViRnJhbWVI
b3N0KSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3QiLCB0b1dLKHRvcEZyYW1lSG9zdCkgfSwK
KyAgICB9KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0
ZXJlZEFzUmVkaXJlY3RpbmdUbyhKU1N0cmluZ1JlZiBob3N0UmVkaXJlY3RlZEZyb20sIEpTU3Ry
aW5nUmVmIGhvc3RSZWRpcmVjdGVkVG8pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVz
OwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhvc3RSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RSZWRpcmVjdGVkRnJvbSkpKTsKLSAgICAK
LSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
b3N0UmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcoaG9zdFJlZGlyZWN0ZWRUbykpKTsKLSAgICAKLSAgICBWZWN0b3I8
V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+
IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
a2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsK
LSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
cmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkp
LmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvIiwgY3JlYXRlV0tE
aWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdFJlZGlyZWN0ZWRGcm9tIiwgdG9XSyhob3N0UmVk
aXJlY3RlZEZyb20pIH0sCisgICAgICAgIHsgIkhvc3RSZWRpcmVjdGVkVG8iLCB0b1dLKGhvc3RS
ZWRpcmVjdGVkVG8pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJv
b2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbkNhbGxiYWNr
SUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsK
LSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOwotICAgIAotICAgIFZlY3Rv
cjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7
Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUo
dmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAg
ICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tE
aWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlz
LnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9u
IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3RO
YW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVl
KSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Nh
bGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb25DYWxsYmFjaygpCkBAIC0xODU1LDI2MSArMTQx
OSw5NSBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0SGFzSGFkVXNlcklu
dGVyYWN0aW9uQ2FsbGJhY2soKQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0hh
ZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVs
bHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5
cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdL
Qm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5E
YXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVy
bmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpOwogfQogCiBi
b29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZShKU1N0cmluZ1Jl
ZiBzdWJIb3N0LCBKU1N0cmluZ1JlZiB0b3BIb3N0KQogewotICAgIAotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN1Ykhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJIb3N0KSkpOwotICAgIAotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEhvc3QiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BI
b3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUo
KSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJh
d0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNb
aV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZSIp
KTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3
S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tU
eXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0
YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5
cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzT25seUluRGF0
YWJhc2VPbmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU3ViSG9zdCIsIHRv
V0soc3ViSG9zdCkgfSwKKyAgICAgICAgeyAiVG9wSG9zdCIsIHRvV0sodG9wSG9zdCkgfSwKKyAg
ICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0
aGVyZWQoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCiB7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tU
eXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSk7
Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5
cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAg
cmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNb
aV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9
Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVy
ZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiLCBjcmVhdGVXS0RpY3Rpb25hcnkoewor
ICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVl
IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZUlUUERhdGFiYXNlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2
YWx1ZSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0VXNl
SVRQRGF0YWJhc2UiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNz
R3JhbmRmYXRoZXJlZChKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJu
RGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRW
YWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgp
KTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
KCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUpCiB7
Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUp
KSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1lSG9zdE5hbWUpKSk7Ci0gICAgCi0g
ICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8
V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBr
ZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0g
ICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
biIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0
TmFtZSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVIb3N0TmFtZSIsIHRvV0sodG9wRnJhbWVIb3N0
TmFtZSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihKU1N0cmluZ1JlZiBob3N0TmFtZSwg
SlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2
YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3ROYW1l
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcodG9wRnJhbWVIb3N0TmFtZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJh
d0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1
ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJh
d1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbiIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJh
d0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRT
dGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luIiwgY3JlYXRlV0tEaWN0aW9u
YXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7
ICJUb3BGcmFtZUhvc3ROYW1lIiwgdG9XSyh0b3BGcmFtZUhvc3ROYW1lKSB9LAorICAgIH0pLmdl
dCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiBob3N0TmFtZVJl
ZGlyZWN0ZWRUbykKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlz
OwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVk
aXJlY3RlZFRvKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlz
LnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkp
OwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewot
ICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ld
ID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvIikpOwotICAgIFdLUmV0
YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFy
eUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkp
KTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7
ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJl
Y3RlZFRvIiwgdG9XSyhob3N0TmFtZVJlZGlyZWN0ZWRUbykgfSwKKyAgICB9KS5nZXQoKSk7CiB9
CiAKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1l
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVk
aXJlY3RlZEZyb20pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtl
eXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUo
KSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNb
aV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rp
b25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6
ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNz
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAg
ICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1l
UmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pIH0sCisgICAgfSku
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVk
aXJlY3RlZFRvKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7
Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFt
ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRp
cmVjdGVkVG8pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMu
c2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0g
PSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3Jl
YXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3RO
YW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVkVG8i
LCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oSlNT
dHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pCiB7
Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUp
KSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20p
KSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsK
LSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJh
d0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNb
aV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRp
c3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rp
Y3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3
S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdEZyb20iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIs
IHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iLCB0
b1dLKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9u
KEpTU3RyaW5nUmVmIGZyb21Ib3N0LCBKU1N0cmluZ1JlZiB0b0hvc3QpCiB7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZyb21Ib3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoZnJvbUhvc3QpKSk7Ci0gICAgCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9I
b3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcodG9Ib3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhr
ZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXpl
KCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkg
ewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVz
W2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rp
Y3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMu
c2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7
CisgICAgICAgIHsgIkZyb21Ib3N0IiwgdG9XSyhmcm9tSG9zdCkgfSwKKyAgICAgICAgeyAiVG9I
b3N0IiwgdG9XSyh0b0hvc3QpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRz
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24i
LCBzZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0YWxsU3RhdGlzdGljc0RpZE1v
ZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKQEAgLTIxNDcsMTIg
KzE1NDUsOSBAQCB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1l
dHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6
c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVuc2lnbmVkIG51bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2Vy
SW50ZXJhY3Rpb24sIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVy
YWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCBtZWRpYW5EYXlzU2luY2VV
c2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2ln
bmVkIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSwgdW5zaWduZWQgdG9wM01l
ZGlhblN1YkZyYW1lV2l0aG91dFVJLCB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRo
b3V0VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUksIHVuc2ln
bmVkIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkpCiB7Ci0gICAgV0tCdW5k
bGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29u
dGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAg
IAogICAgIFN0cmluZyBzdHJpbmcgPSBtYWtlU3RyaW5nKCJ7IFwibnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNcIiA6ICIsIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCAiLCBcIm51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCAiLCBcIm51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAiLCBcInRvcFByZXZhbGVudFJlc291cmNl
V2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblwiIDogIiwgdG9wUHJl
dmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9u
LCAiLCBcIm1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0
aFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJl
dmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uLCAiLCBcInRvcDNOdW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVSVwiIDogIiwgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2Vz
V2l0aFVJLCAiLCBcInRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSVwiIDogIiwgdG9wM01lZGlh
blN1YkZyYW1lV2l0aG91dFVJLCAiLCBcInRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSVwi
IDogIiwgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJLCAiLCBcInRvcDNNZWRpYW5Vbmlx
dWVSZWRpcmVjdHNXaXRob3V0VUlcIiA6ICIsIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRo
b3V0VUksICIsIFwidG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSVwiIDogIiwg
dG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSwgIiB9Iik7CiAgICAgCi0gICAg
SlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQsIGFk
b3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZy51dGY4KCkuZGF0YSgpKSku
Z2V0KCkpOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmlu
ZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5nKHN0cmluZy51dGY4KCkuZGF0YSgpKS5n
ZXQoKSk7CiAKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRSdW5UZWxl
bWV0cnlDYWxsYmFja0lELCAxLCAmcmVzdWx0KTsKIH0KQEAgLTIxNjQsMTYgKzE1NTksMTQgQEAg
Ym9vbCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzTm90aWZ5T2JzZXJ2ZXIoKQogCiB2b2lkIFRlc3RS
dW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRh
UmVjb3JkcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwg
bnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc1Byb2Nlc3NT
dGF0aXN0aWNzQW5kRGF0YVJlY29yZHMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0
aWNzVXBkYXRlQ29va2llQmxvY2tpbmcoSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0QmxvY2tDb29raWVz
Rm9ySG9zdENhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyIpKTsKLSAgICBXS0J1bmRs
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NV
cGRhdGVDb29raWVCbG9ja2luZyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3ND
YWxsRGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdENhbGxiYWNrKCkKQEAgLTIxODMsMTM1ICsxNTc2
LDgzIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRCbG9ja0Nvb2tpZXNG
b3JIb3N0Q2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTdWJtaXRUZWxl
bWV0cnkoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTdWJtaXRUZWxl
bWV0cnkiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTdWJtaXRUZWxl
bWV0cnkiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiLCB2
YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0lzUnVubmluZ1Rlc3Qo
Ym9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU2V0SXNS
dW5uaW5nVGVzdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0IiwgdmFsdWUpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRz
UmVtb3ZhbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbCIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsIiwgc2Vjb25kcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcykKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lIikpOwotICAg
IFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0
U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSIsIHNlY29uZHMpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCBlbnRyaWVz
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1heFN0YXRpc3RpY3NFbnRyaWVzIikp
OwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGVudHJpZXMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlNldE1heFN0YXRpc3RpY3NFbnRyaWVzIiwgZW50cmllcyk7CiB9CiAgICAgCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQgZW50cmllcykK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQcnVuZUVudHJpZXNEb3duVG8iKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoZW50cmllcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0
UHJ1bmVFbnRyaWVzRG93blRvIiwgZW50cmllcyk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKEpTVmFsdWVSZWYgY2Fs
bGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZENsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRT
dG9yZSIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9z
dE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIik7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQgaG91cnMsIEpTVmFsdWVSZWYgY2FsbGJh
Y2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZENsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9y
ZU1vZGlmaWVkU2luY2VIb3VycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3VycykpOwotICAgIFdLQnVuZGxlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRp
c3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzIiwg
aG91cnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJz
aXRlRGF0YVJlbW92YWwoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsQ2Fs
bGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRp
c3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzQ2xlYXJU
aHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlz
dGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0KEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIGluY2x1
ZGVIdHRwT25seUNvb2tpZXMpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
Pj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9z
dE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhK
U1N0cmluZyhob3N0TmFtZSkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaW5jbHVkZUh0dHBPbmx5Q29va2ll
cykpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tU
eXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAg
IHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0u
Z2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3Qi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCBy
YXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3Rh
dGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAg
ICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJJbmNsdWRlSHR0
cE9ubHlDb29raWVzIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaW5jbHVkZUh0dHBPbmx5Q29v
a2llcykpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlz
dGljc0hhc0xvY2FsU3RvcmFnZShKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBhdXRvIG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0
aXN0aWNzSGFzTG9jYWxTdG9yYWdlIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJl
dHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAg
QVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlIiwg
dG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NDYWNoZU1heEFnZUNhcChkb3VibGUgc2Vjb25kcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
b3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzQ2FjaGVN
YXhBZ2VDYXAiLCBzZWNvbmRzKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNTdGF0aXN0aWNz
SXNvbGF0ZWRTZXNzaW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIGF1dG8gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYXNTdGF0aXN0
aWNzSXNvbGF0ZWRTZXNzaW9uIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVy
bkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNT
RVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VN
ZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vzc2lvbiIsIHRv
V0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTIzMjAsOSArMTY2MSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0
aWNzRGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJDYWxsYmFja0lELCBjb21wbGV0aW9uSGFu
ZGxlcik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1Nob3VsZERvd25n
cmFkZVJlZmVycmVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNz
U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiLCB2YWx1ZSk7CiAgICAgbV9oYXNTZXREb3duZ3JhZGVS
ZWZlcnJlckNhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjMzOCwxMSArMTY3NywxMCBAQCB2b2lk
IFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKGJv
b2wgdmFsdWUsIEpTVmFsdWVSZQogICAgICAgICByZXR1cm47CiAKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0Nh
bGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKTsKKyAgICBhdXRvIG1l
c3NhZ2VOYW1lID0gIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzIjsK
ICAgICBpZiAob25seU9uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uKQotICAgICAgICBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRp
c3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgICAgIG1lc3NhZ2VOYW1lID0gIlNldFN0YXRpc3RpY3NT
aG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24i
OworICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2VOYW1lLCB2YWx1ZSk7CiAgICAgbV9oYXNTZXRCbG9j
a1RoaXJkUGFydHlDb29raWVzQ2FsbGJhY2sgPSB0cnVlOwogfQogCkBAIC0yMzU4LDkgKzE2OTYs
NyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZShib29sIHZhbHVlLCBKU1ZhbAogICAgICAgICByZXR1cm47CiAKICAgICBjYWNo
ZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGVDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGUiLCB2YWx1ZSk7CiAgICAgbV9oYXNTZXRGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZUNhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjM4MywxMCArMTcx
OSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxDbGVhclRocm91Z2hXZWJzaXRl
RGF0YVJlbW92YWxDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRUb1Nh
bWVTaXRlU3RyaWN0Q29va2llcyhKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNWYWx1ZVJlZiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNz
RGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxl
cik7Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3RhdGlzdGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIikpOwotICAg
IGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhv
c3ROYW1lKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIsIHRv
V0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2Fs
bERpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzQ2FsbGJhY2soKQpAQCAtMjM5OCwyNyArMTcz
MSwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0
cmljdENvb2tpZXNDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRGaXJz
dFBhcnR5SG9zdENOQU1FRG9tYWluKEpTU3RyaW5nUmVmIGZpcnN0UGFydHlVUkxTdHJpbmcsIEpT
U3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRGaXJzdFBhcnR5
SG9zdENOQU1FRG9tYWluQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotCi0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZpcnN0UGFydHlVUkwiKSkpOwotICAgIHZhbHVl
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhmaXJzdFBhcnR5VVJM
U3RyaW5nKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNOQU1FIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoY25hbWVVUkxTdHJpbmcpKSk7Ci0gICAgCi0gICAgVmVj
dG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBl
UmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ld
LmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQot
Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIikpOwotICAgIGF1
dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEo
KSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJTdGF0aXN0
aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7Cisg
ICAgICAgIHsgIkZpcnN0UGFydHlVUkwiLCB0b1dLKGZpcnN0UGFydHlVUkxTdHJpbmcpIH0sCisg
ICAgICAgIHsgIkNOQU1FIiwgdG9XSyhjbmFtZVVSTFN0cmluZykgfSwKKyAgICB9KS5nZXQoKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRGaXJzdFBhcnR5SG9z
dENOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQyOSwxMCArMTc0NSw3IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluQ2FsbGJh
Y2soKQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
KEpTU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRUaGlyZFBh
cnR5Q05BTUVEb21haW5DYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBhdXRv
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Rh
dGlzdGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhjbmFtZVVSTFN0cmluZykpOwot
ICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNz
YWdlKCJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIiwgdG9XSyhjbmFtZVVSTFN0
cmluZykuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0
VGhpcmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQ0Myw5ICsxNzU2LDggQEAgdm9p
ZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbkNh
bGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3Rh
dGUoSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJD
YWxsYmFjayhTdGF0aXN0aWNzRGlkUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUNhbGxiYWNrSUQsIGNv
bXBsZXRpb25IYW5kbGVyKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0
aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIpOworCisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0
ZW50U3RhdGUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFJlc2V0
VG9Db25zaXN0ZW50U3RhdGVDYWxsYmFjaygpCkBAIC0yNDg2LDk1ICsxNzk4LDQ2IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZ0NhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1
bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsK
ICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxi
YWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRBbGxT
dG9yYWdlQWNjZXNzRW50cmllcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIp
OworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzIik7CiB9
CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmll
c0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQorc3RhdGljIEpTVmFsdWVSZWYgbWFr
ZURvbWFpbnNWYWx1ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKIHsKLSAgICBXS0J1
bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0g
ICAgCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiWyIpOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWls
ZGVyLmFwcGVuZCgnWycpOwogICAgIGJvb2wgZmlyc3REb21haW4gPSB0cnVlOwogICAgIGZvciAo
YXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBpZiAoZmlyc3REb21haW4pCi0gICAg
ICAgICAgICBmaXJzdERvbWFpbiA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiXCIiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZG9tYWlu
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZChmaXJzdERvbWFpbiA/ICJcIiIgOiAiLCBcIiIsIGRvbWFpbiwgJyInKTsK
KyAgICAgICAgZmlyc3REb21haW4gPSBmYWxzZTsKICAgICB9Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJdIik7Ci0gICAgCi0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVl
TWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwot
CisgICAgYnVpbGRlci5hcHBlbmQoJ10nKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VGcm9tSlNP
TlN0cmluZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5nKGJ1aWxkZXIudG9TdHJpbmco
KS51dGY4KCkuZGF0YSgpKS5nZXQoKSk7Cit9Cit2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZWNl
aXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayhWZWN0b3I8U3RyaW5nPiYgZG9tYWlu
cykKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1ha2VEb21haW5zVmFsdWUoZG9tYWlucyk7CiAgICAg
Y2FsbFRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrSUQs
IDEsICZyZXN1bHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmxvYWRlZFN1YnJlc291cmNlRG9t
YWlucyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNr
KExvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiKSk7Ci0gICAg
V0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJMb2Fk
ZWRTdWJyZXNvdXJjZURvbWFpbnMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVj
ZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiYgZG9t
YWlucykKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwot
ICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250
ZXh0KG1haW5GcmFtZSk7Ci0gICAgCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdbJyk7Ci0gICAgYm9vbCBpc0ZpcnN0RG9tYWluID0g
dHJ1ZTsKLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAgICAgaWYgKGlz
Rmlyc3REb21haW4pCi0gICAgICAgICAgICBpc0ZpcnN0RG9tYWluID0gZmFsc2U7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChkb21haW4pOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIlwiIik7Ci0gICAgfQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCddJyk7Ci0gICAgCi0g
ICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQs
IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCisgICAgYXV0byByZXN1bHQgPSBtYWtlRG9t
YWluc1ZhbHVlKGRvbWFpbnMpOwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soTG9hZGVkU3Vi
cmVzb3VyY2VEb21haW5zQ2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKEpTU3RyaW5nUmVmIHBlcnNpc3RlbnRJZCwgSlNTdHJp
bmdSZWYgbGFiZWwsIGNvbnN0IGNoYXIqIHR5cGUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4g
dmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiUGVyc2lzdGVudElEIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0socGVyc2lz
dGVudElkKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGxhYmVsKSk7Ci0K
LSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJU
eXBlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcodHlwZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAg
ICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5z
aXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tp
XSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQo
KTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRNb2NrTWVkaWFEZXZpY2Ui
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCBy
YXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJB
ZGRNb2NrTWVkaWFEZXZpY2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJQZXJz
aXN0ZW50SUQiLCB0b1dLKHBlcnNpc3RlbnRJZCkgfSwKKyAgICAgICAgeyAiTGFiZWwiLCB0b1dL
KGxhYmVsKSB9LAorICAgICAgICB7ICJUeXBlIiwgdG9XSyh0eXBlKSB9LAorICAgIH0pLmdldCgp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrQ2FtZXJhRGV2aWNlKEpTU3RyaW5nUmVm
IHBlcnNpc3RlbnRJZCwgSlNTdHJpbmdSZWYgbGFiZWwpCkBAIC0yNTk0LDE1MyArMTg1Nyw3MiBA
QCB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTY3JlZW5EZXZpY2UoSlNTdHJpbmdSZWYgcGVyc2lz
dGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbAogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyTW9ja01l
ZGlhRGV2aWNlcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJNb2NrTWVkaWFE
ZXZpY2VzIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhck1vY2tNZWRpYURldmlj
ZXMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVNb2NrTWVkaWFEZXZpY2UoSlNTdHJp
bmdSZWYgcGVyc2lzdGVudElkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlbW92ZU1v
Y2tNZWRpYURldmljZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5
KHRvV0socGVyc2lzdGVudElkKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoIlJlbW92ZU1vY2tNZWRpYURldmljZSIsIHRvV0socGVyc2lzdGVudElkKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6cmVzZXRNb2NrTWVkaWFEZXZpY2VzKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJSZXNldE1vY2tNZWRpYURldmljZXMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlJlc2V0TW9ja01lZGlhRGV2aWNlcyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dE1vY2tDYW1lcmFPcmllbnRhdGlvbih1bnNpZ25lZCBvcmllbnRhdGlvbikKIHsKLSAgICBhdXRv
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
TW9ja0NhbWVyYU9yaWVudGF0aW9uIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKG9yaWVudGF0aW9uKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iLCBvcmllbnRhdGlvbik7CiB9CiAK
IGJvb2wgVGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQo
KQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCIpKTsKLSAg
ICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwot
ICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25v
dXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ckVuYWJsZWQiKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKKwogdm9pZCBUZXN0UnVubmVyOjpj
b25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ29ubmVjdE1vY2tHYW1lcGFkIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0KLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNvbm5lY3RNb2NrR2FtZXBhZCIsIGluZGV4KTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgaW5k
ZXgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlzY29ubmVjdE1vY2tHYW1lcGFkIikp
OwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGluZGV4KSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IkRpc2Nvbm5lY3RNb2NrR2FtZXBhZCIsIGluZGV4KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRNb2NrR2FtZXBhZERldGFpbHModW5zaWduZWQgaW5kZXgsIEpTU3RyaW5nUmVmIGdhbWVwYWRJ
RCwgSlNTdHJpbmdSZWYgbWFwcGluZywgdW5zaWduZWQgYXhpc0NvdW50LCB1bnNpZ25lZCBidXR0
b25Db3VudCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSUQiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhnYW1lcGFkSUQpKTsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1hcHBpbmciKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQodG9XSyhtYXBwaW5nKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNDb3VudCIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNDb3VudCkp
KTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkJ1dHRvbkNvdW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoYnV0dG9uQ291bnQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7
Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtl
eXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tl
eXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0u
Z2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dhbWVwYWRE
ZXRhaWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRh
dGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiU2V0TW9ja0dhbWVwYWREZXRhaWxzIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAg
ICAgeyAiR2FtZXBhZElEIiwgdG9XSyhnYW1lcGFkSUQpIH0sCisgICAgICAgIHsgIk1hcHBpbmci
LCB0b1dLKG1hcHBpbmcpIH0sCisgICAgICAgIHsgIkdhbWVwYWRJbmRleCIsIGFkb3B0V0soV0tV
SW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJBeGlzQ291bnQiLCBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKGF4aXNDb3VudCkpIH0sCisgICAgICAgIHsgIkJ1dHRvbkNvdW50IiwgYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25Db3VudCkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKHVuc2lnbmVkIGluZGV4
LCB1bnNpZ25lZCBheGlzSW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVS
ZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNJbmRleCIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpKTsKLQotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSk7Ci0KLSAgICBW
ZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFs
dWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVz
aXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAg
ICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRl
KHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZEF4aXNWYWx1
ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkdhbWVwYWRJbmRleCIsIGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJBeGlzSW5kZXgiLCBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRv
cHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIHVu
c2lnbmVkIGJ1dHRvbkluZGV4LCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVm
Pj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoaW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25JbmRleCIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbkluZGV4KSkpOwotCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpKTsKLQotICAg
IFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdW
YWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5y
ZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAg
ICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNy
ZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsK
LQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TW9ja0dhbWVwYWRCdXR0
b25WYWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkdhbWVwYWRJbmRleCIs
IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJCdXR0b25JbmRl
eCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uSW5kZXgpKSB9LAorICAgICAgICB7ICJW
YWx1ZSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsK
IH0KKwogI2Vsc2UKKwogdm9pZCBUZXN0UnVubmVyOjpjb25uZWN0TW9ja0dhbWVwYWQodW5zaWdu
ZWQpCiB7CiB9CkBAIC0yNzYwLDMwICsxOTQyLDI1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9j
a0dhbWVwYWRBeGlzVmFsdWUodW5zaWduZWQsIHVuc2lnbmVkLCBkb3VibGUpCiB2b2lkIFRlc3RS
dW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWduZWQsIHVuc2lnbmVkLCBkb3Vi
bGUpCiB7CiB9CisKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0T3BlblBhbmVsRmlsZXMoSlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogewotICAgIFdLQnVuZGxl
UGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
OwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKSk7CisgICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAKICAgICBpZiAoIUpTVmFsdWVJc0FycmF5KGNv
bnRleHQsIGZpbGVzVmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09iamVjdFJlZiBm
aWxlcyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBmaWxlc1ZhbHVlLCBudWxscHRyKTsKLSAg
ICBzdGF0aWMgYXV0byBsZW5ndGhQcm9wZXJ0eSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBmaWxlc0xlbmd0aFZhbHVlID0g
SlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBmaWxlcywgbGVuZ3RoUHJvcGVydHkuZ2V0KCks
IG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGZpbGVzTGVuZ3Ro
VmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGZpbGVzID0gKEpTT2JqZWN0UmVm
KWZpbGVzVmFsdWU7CiAgICAgYXV0byBmaWxlVVJMcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlD
cmVhdGUoKSk7Ci0gICAgYXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKKyAgICBh
dXRvIGZpbGVzTGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgZmlsZXMpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVm
IGZpbGVWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZpbGVzLCBp
LCBudWxscHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgZmlsZVZh
bHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gZmlsZSA9IGFkb3B0
KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgZmlsZVZhbHVlLCBudWxscHRyKSk7CisgICAg
ICAgIGF1dG8gZmlsZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1ZSk7CiAgICAg
ICAgIHNpemVfdCBmaWxlQnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5n
U2l6ZShmaWxlLmdldCgpKSArIDE7CiAgICAgICAgIGF1dG8gZmlsZUJ1ZmZlciA9IG1ha2VVbmlx
dWVBcnJheTxjaGFyPihmaWxlQnVmZmVyU2l6ZSk7CiAgICAgICAgIEpTU3RyaW5nR2V0VVRGOENT
dHJpbmcoZmlsZS5nZXQoKSwgZmlsZUJ1ZmZlci5nZXQoKSwgZmlsZUJ1ZmZlclNpemUpOwpAQCAt
Mjc5NywyMiArMTk3NCwxNSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKEpT
VmFsdWVSZWYgZmlsZXNWYWx1ZSkKIAogICAgIH0KIAotICAgIHN0YXRpYyBhdXRvIG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0T3BlblBhbmVs
RmlsZVVSTHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5h
bWUuZ2V0KCksIGZpbGVVUkxzLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE9wZW5Q
YW5lbEZpbGVVUkxzIiwgZmlsZVVSTHMuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dE9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKEpTVmFsdWVSZWYgZGF0YSkKIHsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShwYWdlKSk7Ci0KLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKTsKICAgICAvLyBGSVhNRSAoMTIzMDU4KTogVXNlIGEgSlNDIEFQSSB0byBnZXQg
YnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBleHBvc2VkLgotICAgIFdLUmV0YWluUHRyPFdL
RGF0YVJlZj4gaWNvbkRhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4
QXJyYXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKTsKLQotICAgIHN0
YXRpYyBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0T3BlblBhbmVsRmlsZVVSTHNNZWRpYUljb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIGljb25EYXRhLmdldCgpKTsKKyAg
ICBhdXRvIGljb25EYXRhID0gYWRvcHRXSyhXS0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFy
cmF5KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWFpbkpTQ29udGV4dCgp
LCBkYXRhKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRPcGVuUGFuZWxGaWxlVVJMc01lZGlh
SWNvbiIsIGljb25EYXRhLmdldCgpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRhdGEpOwog
I2VuZGlmCkBAIC0yODIxLDExICsxOTkxLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRPcGVuUGFu
ZWxGaWxlc01lZGlhSWNvbihKU1ZhbHVlUmVmIGRhdGEpCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92
ZUFsbFNlc3Npb25DcmVkZW50aWFscyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hl
VGVzdFJ1bm5lckNhbGxiYWNrKERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNr
SUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZW1vdmVBbGxT
ZXNzaW9uQ3JlZGVudGlhbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUpKTsKLSAgICAKLSAgICBXS0J1
bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiUmVt
b3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
Y2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrKCkKQEAgLTI4MzUsNDkg
KzIwMDEsMzMgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRl
bnRpYWxzQ2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGUoSlNTdHJp
bmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRE9NQ2FjaGUi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoIkNsZWFyRE9NQ2FjaGUiLCB0b1dLKG9yaWdpbikuZ2V0KCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGVzKCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDbGVhckRPTUNhY2hlcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xl
YXJET01DYWNoZXMiKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNET01DYWNoZShKU1N0cmlu
Z1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFzRE9NQ2FjaGUiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0
YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQo
V0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJl
dHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
cmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKCJIYXNET01DYWNoZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9
CiAKIHVpbnQ2NF90IFRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZShKU1N0cmluZ1JlZiBvcmlnaW4p
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRE9NQ2FjaGVTaXplIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcob3JpZ2luKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRy
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgcmV0dXJuIFdLVUludDY0R2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVybkRhdGEpKTsKKyAgICByZXR1cm4g
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50NjQoIkRPTUNhY2hlU2l6ZSIs
IHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dTdG9y
YWdlUXVvdGFJbmNyZWFzZShib29sIHdpbGxJbmNyZWFzZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh3aWxs
SW5jcmVhc2UpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRB
bGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIiwgd2lsbEluY3JlYXNlKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1hbmlmZXN0VGhlbihKU1ZhbHVlUmVmIGNhbGxiYWNrKQog
ewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKEdldEFwcGxpY2F0aW9uTWFuaWZlc3RDYWxs
YmFja0lELCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0QXBw
bGljYXRpb25NYW5pZmVzdCIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOwor
ICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFwcGxpY2F0aW9uTWFuaWZlc3QiKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpkaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0KCkKQEAgLTI4OTcsMjIxICsy
MDQ3LDEzMCBAQCBzaXplX3QgVGVzdFJ1bm5lcjo6dXNlclNjcmlwdEluamVjdGVkQ291bnQoKSBj
b25zdAogCiB2b2lkIFRlc3RSdW5uZXI6OmluamVjdFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc2Ny
aXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluamVjdFVzZXJTY3JpcHQiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiSW5qZWN0VXNlclNjcmlwdCIsIHRvV0soc2Ny
aXB0KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2VuZERpc3BsYXlDb25maWd1cmF0
aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZvclRlc3RpbmciKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNlbmREaXNwbGF5Q29uZmlndXJhdGlvbkNoYW5nZWRN
ZXNzYWdlRm9yVGVzdGluZyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXQoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rv
dWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsK
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFNlcnZpY2VXb3JrZXJGZXRj
aFRpbWVvdXQiLCBzZWNvbmRzKTsKIH0KIAogLy8gV2ViQXV0aG4KIHZvaWQgVGVzdFJ1bm5lcjo6
YWRkVGVzdEtleVRvS2V5Y2hhaW4oSlNTdHJpbmdSZWYgcHJpdmF0ZUtleUJhc2U2NCwgSlNTdHJp
bmdSZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlvblRhZ0Jhc2U2NCkKIHsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcml2YXRlS2V5IikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKHRvV0socHJpdmF0ZUtleUJhc2U2NCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvblRhZyIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uVGFnQmFzZTY0KSk7Ci0KLSAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAg
IHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVl
cy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1
ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQWRkVGVzdEtleVRvS2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0
YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKCJBZGRUZXN0S2V5VG9LZXljaGFpbiIsIGNyZWF0ZVdLRGlj
dGlvbmFyeSh7CisgICAgICAgIHsgIlByaXZhdGVLZXkiLCB0b1dLKHByaXZhdGVLZXlCYXNlNjQp
IH0sCisgICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAgICB7
ICJBcHBsaWNhdGlvblRhZyIsIHRvV0soYXBwbGljYXRpb25UYWdCYXNlNjQpIH0sCisgICAgfSku
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFuVXBLZXljaGFpbihKU1N0cmluZ1Jl
ZiBhdHRyTGFiZWwsIEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpCiB7Ci0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBpZiAoYXBwbGljYXRpb25MYWJlbEJhc2U2NCkg
ewotICAgICAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpKTsKLSAgICAgICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFw
cGxpY2F0aW9uTGFiZWxCYXNlNjQpKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+
IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMu
cmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkp
OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2
YWx1ZXNbaV0uZ2V0KCk7CisgICAgaWYgKCFhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB7CisgICAg
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFuVXBLZXljaGFpbiIsIGNyZWF0ZVdLRGlj
dGlvbmFyeSh7CisgICAgICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwK
KyAgICAgICAgfSkuZ2V0KCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2xlYW5VcEtleWNoYWluIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGlj
dGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdL
ZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYW5VcEtleWNoYWluIiwgY3JlYXRlV0tE
aWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiQXR0ckxhYmVsIiwgdG9XSyhhdHRyTGFiZWwpIH0sCisg
ICAgICAgIHsgIkFwcGxpY2F0aW9uTGFiZWwiLCB0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQp
IH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmtleUV4aXN0c0luS2V5
Y2hhaW4oSlNTdHJpbmdSZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxhYmVs
QmFzZTY0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGF0dHJMYWJlbCkpOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25MYWJlbCIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpKTsKLQot
ICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiBy
YXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVl
cy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJLZXlFeGlzdHNJbktleWNoYWluIikpOwotICAgIFdLUmV0YWluUHRy
PFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0
ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQot
ICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
IHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4oIktleUV4aXN0c0luS2V5Y2hhaW4iLCBjcmVhdGVXS0RpY3Rpb25h
cnkoeworICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAgICAg
eyAiQXBwbGljYXRpb25MYWJlbCIsIHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgfSwKKyAg
ICB9KS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgVGVzdFJ1bm5lcjo6c2VydmVyVHJ1c3RF
dmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKSk7Ci0gICAgV0tUeXBl
UmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAg
cmV0dXJuIFdLVUludDY0R2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
cmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJl
dHVybmluZ1VJbnQ2NCgiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50Iik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNB
c3luY2hyb25vdXNseShib29sIHNob3VsZERpc21pc3NBc3luY2hyb25vdXNseSkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJv
bm91c2x5IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGREaXNtaXNzQXN5bmNocm9ub3VzbHkpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNob3VsZERpc21pc3NKYXZhU2NyaXB0
QWxlcnRzQXN5bmNocm9ub3VzbHkiLCBzaG91bGREaXNtaXNzQXN5bmNocm9ub3VzbHkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9kYWwoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkFib3J0TW9kYWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkFib3J0TW9kYWwi
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKCkKIHsKLSAg
ICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCkKIHsKLSAgICBhdXRvIG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJB
ZENsaWNrQXR0cmlidXRpb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9u
b3VzUGFnZU1lc3NhZ2UoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uIik7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3Zh
bCgpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJl
bW92YWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyQWRDbGlja0F0dHJpYnV0
aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRl
VGltZXJGb3JUZXN0aW5nIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0QWRDbGlja0F0
dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoSlNT
dHJpbmdSZWYgdXJsU3RyaW5nKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIikpOwotICAgIGF1dG8gd3RmVVJM
U3RyaW5nID0gdG9XVEZTdHJpbmcoV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodXJsU3RyaW5n
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VS
TENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh3dGZVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSkpOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgi
U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmciLAorICAgICAgICBh
ZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRvV1RGU3RyaW5nKHVybFN0cmluZyku
dXRmOCgpLmRhdGEoKSkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjptYXJrQWRDbGlja0F0dHJp
YnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyIpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiTWFya0FkQ2xpY2tBdHRy
aWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
T2Zmc2NyZWVuQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik9mZnNjcmVlbkNhbnZhc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVm
ZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5k
bGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVBy
ZWZlcmVuY2UoIk9mZnNjcmVlbkNhbnZhc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogYm9vbCBU
ZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYXNBcHBCb3VuZFNlc3Np
b24iKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1
cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotCi0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkhhc0FwcEJvdW5kU2Vz
c2lvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQXBwQm91bmRTZXNzaW9uKCkKIHsK
LSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2xlYXJBcHBCb3VuZFNlc3Npb24iKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IkNsZWFyQXBwQm91bmRTZXNzaW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQm91
bmREb21haW5zKEpTVmFsdWVSZWYgb3JpZ2luQXJyYXksIEpTVmFsdWVSZWYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soRGlkU2V0QXBwQm91bmREb21h
aW5zQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgSlNDb250ZXh0UmVmIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpOwor
ICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogCiAgICAgaWYgKCFK
U1ZhbHVlSXNBcnJheShjb250ZXh0LCBvcmlnaW5BcnJheSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEpTT2JqZWN0UmVmIG9yaWdpbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3JpZ2lu
QXJyYXksIG51bGxwdHIpOwotICAgIHN0YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5ID0gYWRvcHQo
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVm
IG9yaWdpbnNMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3JpZ2lu
cywgbGVuZ3RoUHJvcGVydHkuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVt
YmVyKGNvbnRleHQsIG9yaWdpbnNMZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybjsKLQorICAg
IGF1dG8gb3JpZ2lucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBvcmlnaW5BcnJheSwgbnVs
bHB0cik7CiAgICAgYXV0byBvcmlnaW5VUkxzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0
ZSgpKTsKLSAgICBhdXRvIG9yaWdpbnNMZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBvcmlnaW5zTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG9yaWdpbnNMZW5ndGg7ICsraSkgeworICAgIGF1dG8gb3Jp
Z2luc0xlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG9yaWdpbnMpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBvcmlnaW5zTGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZVJl
ZiBvcmlnaW5WYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9yaWdp
bnMsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBv
cmlnaW5WYWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIG9yaWdp
biA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgb3JpZ2luVmFsdWUsIG51bGxw
dHIpKTsKKyAgICAgICAgYXV0byBvcmlnaW4gPSBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBvcmln
aW5WYWx1ZSk7CiAgICAgICAgIHNpemVfdCBvcmlnaW5CdWZmZXJTaXplID0gSlNTdHJpbmdHZXRN
YXhpbXVtVVRGOENTdHJpbmdTaXplKG9yaWdpbi5nZXQoKSkgKyAxOwogICAgICAgICBhdXRvIG9y
aWdpbkJ1ZmZlciA9IG1ha2VVbmlxdWVBcnJheTxjaGFyPihvcmlnaW5CdWZmZXJTaXplKTsKICAg
ICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhvcmlnaW4uZ2V0KCksIG9yaWdpbkJ1ZmZlci5n
ZXQoKSwgb3JpZ2luQnVmZmVyU2l6ZSk7CkBAIC0zMTE5LDcgKzIxNzgsNyBAQCB2b2lkIFRlc3RS
dW5uZXI6OnNldEFwcEJvdW5kRG9tYWlucyhKU1ZhbHVlUmVmIG9yaWdpbkFycmF5LCBKU1ZhbHVl
UmVmIGNvbXBsZXRpbwogICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShvcmlnaW5VUkxzLmdldCgp
LCBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9yaWdpbkJ1ZmZlci5nZXQoKSkp
LmdldCgpKTsKICAgICB9CiAKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QXBwQm91bmREb21haW5zIikpOworICAgIGF1dG8g
bWVzc2FnZU5hbWUgPSB0b1dLKCJTZXRBcHBCb3VuZERvbWFpbnMiKTsKICAgICBXS0J1bmRsZVBv
c3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG9yaWdpblVSTHMuZ2V0KCkpOwogfQogCkBAIC0zMTI4LDYgKzIxODcsMTEgQEAg
dm9pZCBUZXN0UnVubmVyOjpkaWRTZXRBcHBCb3VuZERvbWFpbnNDYWxsYmFjaygpCiAgICAgY2Fs
bFRlc3RSdW5uZXJDYWxsYmFjayhEaWRTZXRBcHBCb3VuZERvbWFpbnNDYWxsYmFja0lEKTsKIH0K
IAordm9pZCBUZXN0UnVubmVyOjpwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZh
bHVlKQoreworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2
YWx1ZSkpLmdldCgpKTsKK30KKwogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAK
IH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCBjMGExNDA5MDVlZGYzZGRhNGE3NjFhYjYyMDdk
OTdiNDM2MjA4NmJiLi5hYWViNDEwZTNlZDA3ZmI2Y2E0ZjlmMDNiZmY3ZGUzNzIyNTI3ZjcwIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gSlNXcmFwcGFibGUKICAgICB2
aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dP
YmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAK
ICAgICBib29sIGlzSU9TRmFtaWx5KCkgY29uc3QKICAgICB7CkBAIC0yNTMsNyArMjUzLDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoYm9vbCBmKSB7
IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwgPSBmOyB9CiAgICAgYm9vbCB3aWxsU2VuZFJl
cXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSBjb25zdCB7IHJldHVybiBtX3dpbGxTZW5kUmVx
dWVzdFJldHVybnNOdWxsT25SZWRpcmVjdDsgfQogICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0
UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZikgeyBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNO
dWxsT25SZWRpcmVjdCA9IGY7IH0KLSAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdEFkZHNIVFRQ
Qm9keShKU1N0cmluZ1JlZiBib2R5KSB7IG1fd2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHkgPSB0b1dU
RlN0cmluZyh0b1dLKGJvZHkpKTsgfQorICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0QWRkc0hU
VFBCb2R5KEpTU3RyaW5nUmVmIGJvZHkpIHsgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keSA9IHRv
V1RGU3RyaW5nKGJvZHkpOyB9CiAgICAgU3RyaW5nIHdpbGxTZW5kUmVxdWVzdEhUVFBCb2R5KCkg
Y29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keTsgfQogCiAgICAgdm9pZCBz
ZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmKTsKQEAgLTI4Niw3ICsyODYsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2soKTsKICAgICB2b2lkIGNhbGxTZXRC
YWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaygpOwogCi0gICAgdm9pZCBvdmVycmlkZVByZWZlcmVu
Y2UoSlNTdHJpbmdSZWYgcHJlZmVyZW5jZSwgSlNTdHJpbmdSZWYgdmFsdWUpOworICAgIHN0YXRp
YyB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJlbmNlLCBKU1N0cmlu
Z1JlZiB2YWx1ZSk7CiAKICAgICAvLyBDb29raWVzIHRlc3RpbmcKICAgICB2b2lkIHNldEFsd2F5
c0FjY2VwdENvb2tpZXMoYm9vbCk7CkBAIC0zMDQsNyArMzA0LDcgQEAgcHVibGljOgogCiAgICAg
Ly8gR2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCk7
Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRv
dWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNWYWx1ZVJlZiBhbHRpdHVkZSwgSlNW
YWx1ZVJlZiBhbHRpdHVkZUFjY3VyYWN5LCBKU1ZhbHVlUmVmIGhlYWRpbmcsIEpTVmFsdWVSZWYg
c3BlZWQsIEpTVmFsdWVSZWYgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1
cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVk
ZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3Bl
ZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoSlNTdHJpbmdSZWYgbWVzc2FnZSk7CiAgICAg
Ym9vbCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKIApAQCAtMzM1LDggKzMzNSw4IEBA
IHB1YmxpYzoKICAgICBib29sIHNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQoKSBjb25zdDsKIAog
ICAgIEpTVmFsdWVSZWYgZmFpbE5leHROZXdDb2RlQmxvY2soKTsKLSAgICBKU1ZhbHVlUmVmIG51
bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbik7Ci0gICAgSlNWYWx1ZVJl
ZiBuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgdGhlRnVuY3Rpb24pOworICAgIEpTVmFs
dWVSZWYgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIGZ1bmN0aW9uKTsKKyAgICBKU1Zh
bHVlUmVmIG5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiBmdW5jdGlvbik7CiAKICAgICBi
b29sIHNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5KCkgY29uc3QgeyByZXR1
cm4gbV9zaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheTsgfQogICAgIHZvaWQg
c2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoYm9vbCk7CkBAIC01NDks
NiArNTQ5LDggQEAgcHJpdmF0ZToKIAogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtX3Rlc3RV
Ukw7IC8vIFNldCBieSBJbmplY3RlZEJ1bmRsZVBhZ2Ugb25jZSBwcm92aXNpb25hbCBsb2FkIHN0
YXJ0cy4KIAorICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCk7CisK
ICAgICBTdHJpbmcgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keTsKICAgICBXVEY6OlNlY29uZHMg
bV90aW1lb3V0IHsgMzBfcyB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAppbmRleCA2NGFj
ODE5NzE1M2FhZTBhMGFiNzFlYmJjMjk0MjQ4NGEzNWU2NWFkLi42ZTAwZDk5MjI1ZDFmMWFhYjI2
MTU2Yzg5MjViMDU2NmEzNjZkNzI5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAKQEAgLTI2
LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0SW5wdXRDb250
cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAi
SW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKICNpbmNs
dWRlICJKU1RleHRJbnB1dENvbnRyb2xsZXIuaCIKQEAgLTQwLDMwICs0MSwxNCBAQCBSZWY8VGV4
dElucHV0Q29udHJvbGxlcj4gVGV4dElucHV0Q29udHJvbGxlcjo6Y3JlYXRlKCkKICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBUZXh0SW5wdXRDb250cm9sbGVyKTsKIH0KIAotVGV4dElucHV0Q29u
dHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcigpCi17Ci19Ci0KLVRleHRJbnB1dENvbnRyb2xs
ZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKCkKLXsKLX0KLQogSlNDbGFzc1JlZiBUZXh0SW5wdXRD
b250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogewogICAgIHJldHVybiBKU1RleHRJbnB1dENvbnRy
b2xsZXI6OnRleHRJbnB1dENvbnRyb2xsZXJDbGFzcygpOwogfQogCi12b2lkIFRleHRJbnB1dENv
bnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXh0SW5wdXRD
b250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAg
IHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgInRleHRJbnB1dENvbnRyb2xsZXIi
LCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlLCBleGNlcHRpb24pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgYXJyYXlMZW5n
dGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGFycmF5KQotewotICAgIGF1dG8g
bGVuZ3RoU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0
aCIpKTsKLSAgICBpZiAoYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29u
dGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgbnVsbHB0cikpCi0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZh
bHVlLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIDA7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVy
dHkoY29udGV4dCwgInRleHRJbnB1dENvbnRyb2xsZXIiLCB0aGlzKTsKIH0KIAogc3RhdGljIFdL
QXJyYXlSZWYgY3JlYXRlQ29tcG9zaXRpb25IaWdobGlnaHREYXRhKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1ZhbHVlUmVmIGpzSGlnaGxpZ2h0c1ZhbHVlKQpAQCAtNzIsNTAgKzU3LDE5IEBAIHN0
YXRpYyBXS0FycmF5UmVmIGNyZWF0ZUNvbXBvc2l0aW9uSGlnaGxpZ2h0RGF0YShKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0
byByZXN1bHQgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOwotICAgIGF1dG8ganNIaWdobGlnaHRz
QXJyYXkgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hsaWdodHNWYWx1ZSk7Ci0gICAg
dW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwganNIaWdobGlnaHRzQXJyYXkp
OwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgYXV0byBq
c0Zyb21LZXkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZnJvbSIpKTsK
LSAgICBhdXRvIGpzTGVuZ3RoS2V5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImxlbmd0aCIpKTsKLSAgICBhdXRvIGpzQ29sb3JLZXkgPSBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiY29sb3IiKSk7Ci0KLSAgICBhdXRvIHdrRnJvbUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZyb20iKSk7Ci0gICAgYXV0byB3a0xl
bmd0aEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIp
KTsKLSAgICBhdXRvIHdrQ29sb3JLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJjb2xvciIpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgICAgICBh
dXRvIGpzT2JqZWN0VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBq
c0hpZ2hsaWdodHNBcnJheSwgaSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24g
fHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBqc09iamVjdFZhbHVlKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8ganNPYmplY3QgPSBjb25zdF9jYXN0PEpTT2JqZWN0
UmVmPihqc09iamVjdFZhbHVlKTsKLSAgICAgICAgYXV0byBqc0Zyb21WYWx1ZSA9IEpTT2JqZWN0
R2V0UHJvcGVydHkoY29udGV4dCwganNPYmplY3QsIGpzRnJvbUtleS5nZXQoKSwgbnVsbHB0cik7
Ci0gICAgICAgIGlmICghanNGcm9tVmFsdWUgfHwgIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBq
c0Zyb21WYWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIGpzTGVu
Z3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGpzT2JqZWN0LCBqc0xlbmd0
aEtleS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmICghanNMZW5ndGhWYWx1ZSB8fCAhSlNW
YWx1ZUlzTnVtYmVyKGNvbnRleHQsIGpzTGVuZ3RoVmFsdWUpKQorICAgIGF1dG8gYXJyYXkgPSBj
b25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hsaWdodHNWYWx1ZSk7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIG51bGxwdHIpOworICAgICAgICBp
ZiAoIXZhbHVlIHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBqc0NvbG9yVmFsdWUgPSBKU09iamVjdEdldFBy
b3BlcnR5KGNvbnRleHQsIGpzT2JqZWN0LCBqc0NvbG9yS2V5LmdldCgpLCBudWxscHRyKTsKLSAg
ICAgICAgaWYgKCFqc0NvbG9yVmFsdWUgfHwgIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBqc0Nv
bG9yVmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBjb2xvciA9
IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwganNDb2xvclZhbHVlLCBudWxscHRy
KSk7Ci0gICAgICAgIGF1dG8gd2tDb2xvciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoY29sb3IuZ2V0KCkpKTsKLSAgICAgICAgYXV0byB3a0Zyb20gPSBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGxyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNGcm9tVmFsdWUsIG51
bGxwdHIpKSkpOwotICAgICAgICBhdXRvIHdrTGVuZ3RoID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShscm91bmQoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzTGVuZ3RoVmFsdWUsIG51bGxwdHIp
KSkpOwotCisgICAgICAgIGF1dG8gb2JqZWN0ID0gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFs
dWUpOwogICAgICAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQo
KSwgd2tGcm9tS2V5LmdldCgpLCB3a0Zyb20uZ2V0KCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHdrTGVuZ3RoS2V5LmdldCgpLCB3a0xlbmd0aC5nZXQo
KSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwgd2tDb2xv
cktleS5nZXQoKSwgd2tDb2xvci5nZXQoKSk7CisgICAgICAgIHNldFZhbHVlKGRpY3Rpb25hcnks
ICJmcm9tIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBv
YmplY3QsICJmcm9tIikpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImxlbmd0aCIs
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihudW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAi
bGVuZ3RoIikpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImNvbG9yIiwgdG9XSyhz
dHJpbmdQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJjb2xvciIpKS5nZXQoKSk7CiAgICAgICAg
IFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdCwgZGljdGlvbmFyeS5nZXQoKSk7CiAgICAgfQotCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaAppbmRleCA1NThjMmU2
MTE0MDgxNzg1ZTNiN2NhZTE5ZmVmZDM5NmFlYjM3YTk0Li5hNDRjMjhlODQ0MzkxNzI5MmE5YjM3
YmNiN2UyNTUyZDEyMTQ0Y2E0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaApAQCAtMjgsMTcgKzI4
LDE3IEBACiAjaW5jbHVkZSAiSlNXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAK
K3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwordHlw
ZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVmOwordHlwZWRlZiBjb25zdCBz
dHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAKLWNs
YXNzIFRleHRJbnB1dENvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgeworY2xhc3MgVGV4
dElucHV0Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxUZXh0SW5wdXRDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFs
IH5UZXh0SW5wdXRDb250cm9sbGVyKCk7Ci0KLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZpcnR1
YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVj
dChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAg
IHZvaWQgc2V0TWFya2VkVGV4dChKU1N0cmluZ1JlZiB0ZXh0LCBpbnQgZnJvbSwgaW50IGxlbmd0
aCwgYm9vbCBzdXBwcmVzc1VuZGVybGluZSwgSlNWYWx1ZVJlZiBoaWdobGlnaHRzKTsKICAgICBi
b29sIGhhc01hcmtlZFRleHQoKTsKQEAgLTQ2LDcgKzQ2LDkgQEAgcHVibGljOgogICAgIHZvaWQg
aW5zZXJ0VGV4dChKU1N0cmluZ1JlZiB0ZXh0KTsKIAogcHJpdmF0ZToKLSAgICBUZXh0SW5wdXRD
b250cm9sbGVyKCk7CisgICAgVGV4dElucHV0Q29udHJvbGxlcigpID0gZGVmYXVsdDsKKworICAg
IEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
VFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29j
b2EvQWN0aXZhdGVGb250c0NvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KaW5kZXggMDI0ZmU2MDU3M2I4ZjJj
NTkyZWJmZGIzNWYzYTQ0NDg1Y2RiOTc1Ni4uNWE1Yjc3ZWMxOTRkYTVmZTNmZmY5OTEzN2NlOWFj
ZDI2ZGZlNGMxZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KQEAgLTEzNiw3
ICsxMzYsNyBAQCB2b2lkIGFjdGl2YXRlRm9udHMoKQogCiB2b2lkIGluc3RhbGxGYWtlSGVsdmV0
aWNhKFdLU3RyaW5nUmVmIGNvbmZpZ3VyYXRpb24pCiB7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBjb25maWd1cmF0aW9uU3RyaW5nID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uKSk7CisgICAgYXV0byBjb25maWd1cmF0
aW9uU3RyaW5nID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBjb25maWd1cmF0aW9uKSk7CiAgICAgTlNVUkwgKnJlc291cmNlVVJMID0gW3Jlc291cmNl
c0RpcmVjdG9yeVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIkZha2VIZWx2ZXRpY2EtJUAudHRmIiwgY29uZmlndXJhdGlvblN0cmlu
Zy5nZXQoKV0gaXNEaXJlY3Rvcnk6Tk9dOwogICAgIENGRXJyb3JSZWYgZXJyb3IgPSBudWxscHRy
OwogICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkwoKF9fYnJpZGdlIENG
VVJMUmVmKXJlc291cmNlVVJMLCBrQ1RGb250TWFuYWdlclNjb3BlUHJvY2VzcywgJmVycm9yKSkg
ewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2Nv
YS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0KaW5kZXggODE3NjE4
MjdhODgxZDA2ZGZlNzBhOWJkMzIyNDczMmFlMTliY2YyOC4uOTFkMjQ5YzcyN2Y2ODc1ZWQ0YTRj
Y2YxNTljMGY3N2Q3MmY4NWJkNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbQorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFn
ZUNvY29hLm1tCkBAIC00NywxMyArNDcsMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnBs
YXRmb3JtRGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmUKIAog
U3RyaW5nIEluamVjdGVkQnVuZGxlUGFnZTo6cGxhdGZvcm1SZXNwb25zZU1pbWVUeXBlKFdLVVJM
UmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IG5z
VVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdLVVJMUmVzcG9uc2VDb3B5TlNVUkxSZXNwb25zZShyZXNw
b25zZSkpOworICAgIGF1dG8gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNv
cHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICAgcmV0dXJuIFtuc1VSTFJlc3BvbnNlLmdl
dCgpIE1JTUVUeXBlXTsKIH0KIAogdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNwb25z
ZUhlYWRlckNvdW50KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgUmV0YWluUHRy
PE5TVVJMUmVzcG9uc2U+IG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdLVVJMUmVzcG9uc2VDb3B5
TlNVUkxSZXNwb25zZShyZXNwb25zZSkpOworICAgIGF1dG8gbnNVUkxSZXNwb25zZSA9IGFkb3B0
TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICAgaWYgKCFb
bnNVUkxSZXNwb25zZSBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKQog
ICAgICAgICByZXR1cm4geyB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVySU9TLm1tCmluZGV4IDg3Y2NkMjFjYTlhNzdhYTJkMGEyMWE0Y2FiNTIxY2FlZWZhOWM0YTIu
LmM0MTgyMzBmM2I0ZmRlNzE5YWM2Y2NjODRiNzQyZGJlY2ExNGQyNGEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
aW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9y
bU5hbWUoKQogewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJpb3MiKTsKIH0KIAog
dm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCkBA
IC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoaWQgb2Jq
LCBOU1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5n
UmVmIGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBpZCByb290ID0gc3Rh
dGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFn
ZSkpOwogCiAgICAgaWQgcmVzdWx0ID0gZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKHJvb3QsIFtO
U1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6aWRBdHRyaWJ1dGVdKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCmluZGV4IDUyMjM0YWE0ZDc0NzJjZGUwNzFk
OWU4Njk2OTBkOTM1NTI5YTIwZDIuLmJiYzhiYjE2Yzg2NGJjMjYxMGNmYWE2OWEwNmZkODEzYzc2
OTVkMDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
aW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQpAQCAt
MTM2LDExICsxMzYsNiBAQCBAZW5kCiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0aWMgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKQotewotICAgIHJldHVybiBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApKTsKLX0KLQogc3Rh
dGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb25jYXRlbmF0ZUF0dHJpYnV0ZUFuZFZhbHVl
KE5TU3RyaW5nICphdHRyaWJ1dGUsIE5TU3RyaW5nICp2YWx1ZSkKIHsKICAgICBWZWN0b3I8VW5p
Q2hhcj4gYnVmZmVyKFthdHRyaWJ1dGUgbGVuZ3RoXSk7CkBAIC0zMzAsMjcgKzMyNSwyNyBAQCBS
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlz
Y2xvc2VkQnlSb3coKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkRvY3VtZW50TGlua3MoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7
CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbigpCiB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJp
bmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmFsbEF0dHJpYnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7
CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9mQXR0cmlidXRl
VmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpT
U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1
ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBAIC0zODIsNyArMzc3LDcgQEAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVl
KEpTU3RyaW5nUmUKICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhhdHRyaWJ1
dGUsICJBWFRleHR1YWxDb250ZXh0IikpCiAgICAgICAgIHJldHVybiBbW21fZWxlbWVudCBhY2Nl
c3NpYmlsaXR5VGV4dHVhbENvbnRleHRdIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICAKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFs
dWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQpAQCAtNDQzLDE3ICs0MzgsMTcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBhdHRy
aWJ1dGUpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c3Vicm9sZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1
cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCkBAIC00NjMsMTMgKzQ1OCwxMiBA
QCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURl
c2NyaXB0aW9uKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZygpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAot
ICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3Ry
aW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKQEAgLTQ3OSw3ICs0NzMsNyBAQCBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRp
b24oKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
b3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7
CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCkBAIC00ODksNyArNDgz
LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ1ZhbHVlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Omxhbmd1YWdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOwor
ICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHQoKSBjb25zdApAQCAtNTQ5LDcgKzU0
Myw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0
aW9uKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0
aW9uUG9pbnRMaW5lTnVtYmVyKCkKQEAgLTU4NCw3ICs1NzgsNiBAQCBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzRm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAg
IHJldHVybiBmYWxzZTsKIH0KIApAQCAtNTk2LDEzICs1ODksMTEgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjM4LDcgKzYyOSw3IEBAIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25z
dAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0
ZUpTU3RyaW5nKCk7CiB9CiAKIC8vIHBhcmFtZXRlcml6ZWQgYXR0cmlidXRlcwpAQCAtNjU5LDcg
KzY1MCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpyYW5nZUZvclBvc2l0aW9uKGludCB4LCBpbnQgeSkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0
aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkIGxv
Y2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC03MTMsMzIgKzcwNCwzMiBAQCBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0VGV4dFdpdGhDcml0
ZXJpYShKU0NvbnRleAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNP
ZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwog
fQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mUm93cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJp
bmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRyYWl0cygpCkBAIC05MDMsMjMgKzg5
NCwyMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5k
ZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
Y2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwog
fQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2ZVRlY2hub2xvZ3lTaW11
bGF0ZWRGb2N1cygpCkBAIC0xMDE2LDMxICsxMDA1LDI2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRp
U2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEwNTIsMTMgKzEwMzYsMTEgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTA3NCwyMiArMTA1NiwxOCBAQCBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cG9wdXBWYWx1ZSgpIGNv
bnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKCkKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFr
ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigp
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiAvLyBUZXh0IG1hcmtlcnMKQEAgLTEx
MzYsNyArMTExNCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAgICAgaWQgdGV4dE1h
cmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKICAgICBpZiAo
IVt0ZXh0TWFya2VycyBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCi0gICAgICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJpbmdGb3JUZXh0TWFya2Vyczp0ZXh0TWFy
a2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvRXZlbnRTZW5kZXJQcm94eUlP
Uy5tbQppbmRleCBjYWIzZjE4YjM2NTlmNDkxNmJkNTAwODc5Mjg2ZDZhMjdjMGM5ZjkxLi45ODFh
MWZkMGRjNzU4MGNmMDEyZDMxNTZiOGY5ZGY5ODkzMDExYmZmIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1t
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0V2ZW50U2Vu
ZGVyUHJveHlJT1MubW0KQEAgLTM2LDI0ICszNiwxMiBAQCBuYW1lc3BhY2UgV1RSIHsKIAogRXZl
bnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVzdENvbnRy
b2xsZXIpCiAgICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RDb250cm9sbGVyKQotICAgICwgbV90
aW1lKDApCi0gICAgLCBtX3Bvc2l0aW9uKCkKLSAgICAsIG1fbGVmdE1vdXNlQnV0dG9uRG93bihm
YWxzZSkKLSAgICAsIG1fY2xpY2tDb3VudCgwKQotICAgICwgbV9jbGlja1RpbWUoMCkKLSAgICAs
IG1fY2xpY2tQb3NpdGlvbigpCi0gICAgLCBtX2NsaWNrQnV0dG9uKGtXS0V2ZW50TW91c2VCdXR0
b25Ob0J1dHRvbikKLSAgICAsIGV2ZW50TnVtYmVyKDApCiB7CiAgICAgVU5VU0VEX1BBUkFNKG1f
dGVzdENvbnRyb2xsZXIpOwogICAgIFVOVVNFRF9QQVJBTShtX2xlZnRNb3VzZUJ1dHRvbkRvd24p
OwogICAgIFVOVVNFRF9QQVJBTShldmVudE51bWJlcik7CiB9CiAKLUV2ZW50U2VuZGVyUHJveHk6
On5FdmVudFNlbmRlclByb3h5KCkKLXsKLX0KLQogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRh
dGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiB7CiAgICAgaWYgKG1fdGltZSAtIG1f
Y2xpY2tUaW1lIDwgMSAmJiBtX3Bvc2l0aW9uID09IG1fY2xpY2tQb3NpdGlvbiAmJiBidXR0b24g
PT0gbV9jbGlja0J1dHRvbikgewpAQCAtNzAsMTcgKzU4LDE0IEBAIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQogCiB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6Om1vdXNlRG93bih1bnNpZ25lZCBidXR0b25OdW1iZXIsIFdLRXZlbnRNb2Rp
ZmllcnMgbW9kaWZpZXJzKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6Om1vdXNlVXAodW5zaWduZWQgYnV0dG9uTnVtYmVyLCBXS0V2ZW50TW9kaWZpZXJz
IG1vZGlmaWVycykKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclBy
b3h5Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCiB7Ci0gICAgLy8gV3JpdGUgbWUu
CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25k
cykKQEAgLTkwLDc5ICs3NSw2NiBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmxlYXBGb3J3YXJk
KGludCBtaWxsaXNlY29uZHMpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0
cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNpZ25lZCBrZXlMb2Nh
dGlvbikKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojpt
b3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9p
ZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFz
ZXMoaW50IHgsIGludCB5LCBpbnQgcGhhc2UsIGludCBtb21lbnR1bSkKIHsKLSAgICAvLyBXcml0
ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojpjb250aW51b3VzTW91c2VTY3JvbGxC
eShpbnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmFkZFRvdWNo
UG9pbnQoaW50IHgsIGludCB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCiB7
Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hN
b2RpZmllcihXS0V2ZW50TW9kaWZpZXJzLCBib29sIGVuYWJsZSkKIHsKLSAgICAvLyBXcml0ZSBt
ZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaFBvaW50UmFkaXVzKGludCBy
YWRpdXNYLCBpbnQgcmFkaXVzWSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVu
dFNlbmRlclByb3h5Ojp0b3VjaFN0YXJ0KCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9p
ZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaE1vdmUoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQog
CiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoRW5kKCkKIHsKLSAgICAvLyBXcml0ZSBtZS4K
IH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaENhbmNlbCgpCiB7Ci0gICAgLy8gV3Jp
dGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y2xlYXJUb3VjaFBvaW50cygpCiB7
Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRv
dWNoUG9pbnQoaW50IGluZGV4KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQogewotICAgIC8vIFdyaXRl
IG1lLgogfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9u
TWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNz
aWJpbGl0eUNvbW1vbk1hYy5tbQppbmRleCAyNWUwYzNkMDBlNDliYjJiNWVkMjAzZTE5MGNmMWVj
YzkwZGYzYWY0Li4zNTRhOGY2NTU1YzZjMDAyNjVmNTY4MWE2YjM3MTUyYTg0YTU2MmMwIDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3Np
YmlsaXR5Q29tbW9uTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNp
bXBvcnQgIkFjY2Vzc2liaWxpdHlDb21tb25NYWMuaCIKIAogI2ltcG9ydCAiSlNXcmFwcGVyLmgi
CisjaW1wb3J0ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
U3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogCkBAIC02MSwyNiArNjIs
MjIgQEAgQ2xhc3Mgd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygpCiAgICAgcmV0
dXJuIGNsczsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgbWFrZUFycmF5UmVmRm9yQXJyYXkoSlND
b250ZXh0UmVmIGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQorc3RhdGljIEpTT2JqZWN0UmVmIG1h
a2VKU0FycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0FycmF5ICphcnJheSkKIHsKICAgICBO
U1VJbnRlZ2VyIGNvdW50ID0gYXJyYXkuY291bnQ7CiAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
Y291bnRdOwotCiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAg
ICAgICAgYXJndW1lbnRzW2ldID0gbWFrZVZhbHVlUmVmRm9yVmFsdWUoY29udGV4dCwgW2FycmF5
IG9iamVjdEF0SW5kZXg6aV0pOwotCiAgICAgcmV0dXJuIEpTT2JqZWN0TWFrZUFycmF5KGNvbnRl
eHQsIGNvdW50LCBhcmd1bWVudHMsIG51bGxwdHIpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBt
YWtlT2JqZWN0UmVmRm9yRGljdGlvbmFyeShKU0NvbnRleHRSZWYgY29udGV4dCwgTlNEaWN0aW9u
YXJ5ICpkaWN0aW9uYXJ5KQorc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VKU09iamVjdChKU0NvbnRl
eHRSZWYgY29udGV4dCwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQogewotICAgIEpTT2JqZWN0
UmVmIG9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBudWxscHRyLCBudWxscHRyKTsKLQor
ICAgIGF1dG8gb2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIp
OwogICAgIFtkaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5T
U3RyaW5nICprZXksIGlkIG9iaiwgQk9PTCAqKSB7CiAgICAgICAgIGlmIChKU1ZhbHVlUmVmIHBy
b3BlcnR5VmFsdWUgPSBtYWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBvYmopKQogICAgICAg
ICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIFtrZXkgY3JlYXRlSlNT
dHJpbmdSZWZdLmdldCgpLCBwcm9wZXJ0eVZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUs
IG51bGxwdHIpOwogICAgIH1dOwotCiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIApAQCAtOTYsOSAr
OTMsOSBAQCBKU1ZhbHVlUmVmIG1ha2VWYWx1ZVJlZkZvclZhbHVlKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBpZCB2YWx1ZSkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6d2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJDbGFzcygpXSkKICAgICAgICAgcmV0dXJuIHRvSlMoY29udGV4dCwg
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8UGxhdGZvcm1V
SUVsZW1lbnQ+KHZhbHVlKSkucHRyKCkpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpb
TlNEaWN0aW9uYXJ5IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBtYWtlT2JqZWN0UmVmRm9yRGlj
dGlvbmFyeShjb250ZXh0LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBtYWtlSlNPYmplY3QoY29u
dGV4dCwgdmFsdWUpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFz
c11dKQotICAgICAgICByZXR1cm4gbWFrZUFycmF5UmVmRm9yQXJyYXkoY29udGV4dCwgdmFsdWUp
OworICAgICAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgdmFsdWUpOwogICAgIHJldHVy
biBudWxscHRyOwogfQogCkBAIC0xMTUsMjggKzExMiwxNiBAQCBOU0RpY3Rpb25hcnkgKnNlYXJj
aFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRl
eHRSZQogCiAgICAgaWYgKHNlYXJjaEtleSkgewogICAgICAgICBpZCBzZWFyY2hLZXlQYXJhbWV0
ZXIgPSBuaWw7Ci0gICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoS2V5
KSkgewotICAgICAgICAgICAgYXV0byBzZWFyY2hLZXlTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaEtleSwgbnVsbHB0cikpOwotICAgICAgICAgICAgaWYg
KHNlYXJjaEtleVN0cmluZykKLSAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBb
TlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZy5nZXQoKV07Ci0g
ICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsK
KyAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hLZXkpKQorICAgICAg
ICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gdG9XVEZTdHJpbmcoY29udGV4dCwgc2VhcmNoS2V5
KTsKKyAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkp
IHsKICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gSlNWYWx1ZVRvT2Jq
ZWN0KGNvbnRleHQsIHNlYXJjaEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBz
ZWFyY2hLZXlBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVy
dHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikp
OwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlID0gSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgbGVuZ3RoUHJvcGVydHlT
dHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleUFycmF5TGVu
Z3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3Ro
VmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0
aFZhbHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaEtleUFycmF5
TGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXkpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaEtleUFycmF5TGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleVZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXksIGksIG51bGxwdHIpOwotICAg
ICAgICAgICAgICAgIEpTU3RyaW5nUmVmIHNlYXJjaEtleVN0cmluZyA9IEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgc2VhcmNoS2V5VmFsdWUsIG51bGxwdHIpOwotICAgICAgICAgICAgICAg
IGlmIChzZWFyY2hLZXlTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hL
ZXlQYXJhbWV0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICAgICAgICAgICAgICBbc2VhcmNoS2V5
UGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJj
aEtleVN0cmluZ11dOwotICAgICAgICAgICAgICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2VhcmNo
S2V5U3RyaW5nKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXV0byBzZWFy
Y2hLZXkgPSB0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChj
b250ZXh0LCBzZWFyY2hLZXlBcnJheSwgaSwgbnVsbHB0cikpOworICAgICAgICAgICAgICAgIGlm
ICghc2VhcmNoS2V5UGFyYW1ldGVyKQorICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJh
bWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgICAgICAgICAgICAgIFtzZWFyY2hL
ZXlQYXJhbWV0ZXIgYWRkT2JqZWN0OnNlYXJjaEtleV07CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHNlYXJjaEtleVBhcmFtZXRlcikKQEAgLTE0NCwxMCArMTI5LDkgQEAg
TlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2Vh
cmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICB9CiAKICAgICBpZiAoc2VhcmNoVGV4dCAmJiBK
U1N0cmluZ0dldExlbmd0aChzZWFyY2hUZXh0KSkKLSAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRy
aWJ1dGUgc2V0T2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoVGV4
dF0gZm9yS2V5OkAiQVhTZWFyY2hUZXh0Il07CisgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmli
dXRlIHNldE9iamVjdDp0b1dURlN0cmluZyhzZWFyY2hUZXh0KSBmb3JLZXk6QCJBWFNlYXJjaFRl
eHQiXTsKIAogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKHZpc2libGVP
bmx5KSBmb3JLZXk6QCJBWFZpc2libGVPbmx5Il07Ci0KICAgICBbcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZSBzZXRPYmplY3Q6QChpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkpIGZvcktleTpAIkFYSW1t
ZWRpYXRlRGVzY2VuZGFudHNPbmx5Il07CiAKICAgICByZXR1cm4gcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
bWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KaW5kZXgg
OTEzYWUwZjc1Y2RiNGVkNWRlZGRlYjkyNWY2Yzk1MDE4ZGRkMTcwNC4uYTg4N2RlNWM4NWQ1MDI4
NGZkMjQ0NzEyNTE2ZTg5Yzk5OGMzYWE1ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZS5oIgogI2lt
cG9ydCAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L1dLQnVu
ZGxlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGVQYWdlLmg+CkBAIC05Niw3ICs5Nyw3IEBA
IHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoaWQgb2JqLCBOU1N0cmluZyAqaWRB
dHRyaWJ1dGUpCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmlidXRl
KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBQbGF0Zm9ybVVJRWxlbWVudCByb290ID0gc3Rh
dGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFn
ZSkpOwogCiAgICAgUmV0YWluUHRyPGlkPiByZXN1bHQ7CkBAIC0xMTEsNyArMTEyLDcgQEAgUmVm
UHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nl
c3NpYmxlRWxlbWVudEJ5SWQoSlMKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQogewotICAgIHJldHVybiBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibWFjIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0
ZUpTU3RyaW5nKCJtYWMiKTsKIH0KIAogLy8gQVhUaHJlYWQgaW1wbGVtZW50YXRpb24KZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IDUwYjNlMDIyMGI4ZDEy
MmFkMjJiYzk2ZDQyNGNmZDgzMzFiNjVmNTkuLjJlZmY0NTRlNjY3OTFkNjk4Zjk1YmVjNzY5NGEw
OWZiMmNjZjBhMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5t
bQpAQCAtMzIsNyArMzIsNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgog
I2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlUGFnZS5o
IgotCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8QXBwS2l0L05TQWNjZXNzaWJpbGl0
eS5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CkBAIC04NywxMSArODcsNiBAQCBAZW5kCiAKIG5hbWVz
cGFjZSBXVFIgewogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKQotewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKG51bGxwdHIsIDApKTsKLX0KLQogUmVmUHRyPEFjY2Vzc2liaWxpdHlDb250cm9sbGVyPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzX2NvbnRyb2xsZXI7CiAKIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKQEAgLTIwNiw3ICsyMDEs
NyBAQCBzdGF0aWMgTlNTdHJpbmcqIGRlc2NyaXB0aW9uT2ZWYWx1ZShpZCB2YWx1ZU9iamVjdCwg
aWQgZWxlbWVudCkKIAogc3RhdGljIE5TU3RyaW5nICphdHRyaWJ1dGVzT2ZFbGVtZW50KGlkIGFj
Y2Vzc2liaWxpdHlPYmplY3QpCiB7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGF0dHJpYnV0ZXMg
PSBzdXBwb3J0ZWRBdHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QpOworICAgIGF1dG8gYXR0
cmlidXRlcyA9IHN1cHBvcnRlZEF0dHJpYnV0ZXMoYWNjZXNzaWJpbGl0eU9iamVjdCk7CiAKICAg
ICBOU011dGFibGVTdHJpbmcqIGF0dHJpYnV0ZXNTdHJpbmcgPSBbTlNNdXRhYmxlU3RyaW5nIHN0
cmluZ107CiAgICAgZm9yIChOU1N0cmluZyogYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMuZ2V0KCkp
IHsKQEAgLTIyNywxNiArMjIyLDEzIEBAIHN0YXRpYyBOU1N0cmluZyAqYXR0cmlidXRlc09mRWxl
bWVudChpZCBhY2Nlc3NpYmlsaXR5T2JqZWN0KQogICAgIHJldHVybiBhdHRyaWJ1dGVzU3RyaW5n
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIEpTVmFsdWVSZWYgY29udmVydFZl
Y3RvclRvT2JqZWN0QXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIFZlY3RvcjxUPiBjb25zdCYg
ZWxlbWVudHMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgSlNPYmplY3RSZWYgbWFrZUpT
QXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxUPiYgZWxlbWVudHMpCiB7
Ci0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQs
IDAsIDAsIDApOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIGFycmF5UmVzdWx0LCAwKTsKKyAgICBhdXRvIGFycmF5ID0gSlNPYmplY3RNYWtlQXJy
YXkoY29udGV4dCwgMCwgMCwgMCk7CiAgICAgc2l6ZV90IGVsZW1lbnRDb3VudCA9IGVsZW1lbnRz
LnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVsZW1lbnRDb3VudDsgKytpKQot
ICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwgaSwg
SlNPYmplY3RNYWtlKGNvbnRleHQsIGVsZW1lbnRzW2ldLT53cmFwcGVyQ2xhc3MoKSwgZWxlbWVu
dHNbaV0uZ2V0KCkpLCAwKTsKLQotICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAgICAgICAgSlNP
YmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFrZShj
b250ZXh0LCBlbGVtZW50c1tpXS0+d3JhcHBlckNsYXNzKCksIGVsZW1lbnRzW2ldLmdldCgpKSwg
MCk7CisgICAgcmV0dXJuIGFycmF5OwogfQogCiBzdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGNvbmNhdGVuYXRlQXR0cmlidXRlQW5kVmFsdWUoTlNTdHJpbmcqIGF0dHJpYnV0ZSwgTlNT
dHJpbmcqIHZhbHVlKQpAQCAtMjczLDI1ICsyNjUsMTMgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAq
c2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRleHRSZWYg
Y28KICAgICAKICAgICBpZiAoc2VhcmNoU3RyaW5ncykgewogICAgICAgICBOU011dGFibGVBcnJh
eSAqc2VhcmNoU3RyaW5nc1BhcmFtZXRlciA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAg
ICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAg
ICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cikpOwotICAgICAgICAgICAgaWYgKHNl
YXJjaFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0
ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5n
c1N0cmluZy5nZXQoKV1dOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKEpTVmFsdWVJc09i
amVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgeworICAgICAgICBpZiAoSlNWYWx1ZUlzU3Ry
aW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKQorICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQ
YXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpXTsK
KyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hTdHJpbmdzQXJy
YXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cik7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAwOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0gYWRvcHQoSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAgICAgIEpTVmFs
dWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcuZ2V0KCks
IG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVl
ICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1
ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJj
aFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmlu
Z3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2Vh
cmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdW5z
aWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgc2Vh
cmNoU3RyaW5nc0FycmF5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
ZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBbc2VhcmNoU3Ry
aW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmcoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSld
OwogICAgICAgICB9CiAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpz
ZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGZvcktleTpAIkFYU2VsZWN0VGV4dFNlYXJjaFN0cmluZ3Mi
XTsKICAgICB9CkBAIC0zMTQsMjQgKzI5NCwxMyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpzZWFy
Y2hUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJlZiBjbwog
CiAgICAgaWYgKHNlYXJjaFN0cmluZ3MpIHsKICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnNlYXJj
aFN0cmluZ3NQYXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICBpZiAo
SlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBh
dXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJp
bmdzU3RyaW5nKQotICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9i
amVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcu
Z2V0KCldXTsKLSAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2Vh
cmNoU3RyaW5ncykpIHsKKyAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFy
Y2hTdHJpbmdzKSkKKyAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVj
dDp0b1dURlN0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKV07CisgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5ID0gSlNWYWx1ZVRvT2Jq
ZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gMDsKLQotICAgICAgICAgICAgYXV0byBsZW5n
dGhQcm9wZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJs
ZW5ndGgiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0
aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXks
IGxlbmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmIChz
ZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwg
c2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaFN0
cmluZ3NBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLQotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRv
cHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRl
eChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAgICAgICAg
ICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0
aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IGFycmF5TGVu
Z3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNvbnRl
eHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJh
eSwgaSwgbnVsbHB0cikpXTsKICAgICAgICAgfQogICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZSBzZXRPYmplY3Q6c2VhcmNoU3RyaW5nc1BhcmFtZXRlciBmb3JLZXk6QCJBWFNlYXJjaFRl
eHRTZWFyY2hTdHJpbmdzIl07CiAgICAgfQpAQCAtNDAxLDcgKzM3MCw3IEBAIEpTVmFsdWVSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SGVhZGVycygpIGNvbnN0CiAgICAgaWQgdmFsdWUg
PSBhdHRyaWJ1dGVWYWx1ZShtX2VsZW1lbnQuZ2V0KCksIE5TQWNjZXNzaWJpbGl0eVJvd0hlYWRl
clVJRWxlbWVudHNBdHRyaWJ1dGUpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNB
cnJheSBjbGFzc11dKQogICAgICAgICBlbGVtZW50cyA9IG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+Pih2YWx1ZSk7Ci0gICAgcmV0dXJuIGNvbnZlcnRWZWN0b3JUb09i
amVjdEFycmF5PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4oY29udGV4dCwgZWxlbWVu
dHMpOworICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0LCBlbGVtZW50cyk7CiAgICAgRU5E
X0FYX09CSkNfRVhDRVBUSU9OUwogfQogCkBAIC00MTUsNyArMzg0LDcgQEAgSlNWYWx1ZVJlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzKCkgY29uc3QKICAgICBpZCB2YWx1
ZSA9IGF0dHJpYnV0ZVZhbHVlKG1fZWxlbWVudC5nZXQoKSwgTlNBY2Nlc3NpYmlsaXR5Q29sdW1u
SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNz
OltOU0FycmF5IGNsYXNzXV0pCiAgICAgICAgIGVsZW1lbnRzID0gbWFrZVZlY3RvcjxSZWZQdHI8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KHZhbHVlKTsKLSAgICByZXR1cm4gY29udmVydFZlY3Rv
clRvT2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pihjb250ZXh0LCBl
bGVtZW50cyk7CisgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNvbnRleHQsIGVsZW1lbnRzKTsKICAg
ICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiB9CiAgICAgCkBAIC02MDcsNyArNTc2LDcgQEAgSlNW
YWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0ZVZh
bHVlKEpTU3RyaW5nUmVmIGF0dHIKIAogICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4+IGVsZW1lbnRzOwogICAgIGdldFVJRWxlbWVudHNXaXRoQXR0cmlidXRlKGF0dHJp
YnV0ZSwgZWxlbWVudHMpOwotICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheTxS
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KGNvbnRleHQsIGVsZW1lbnRzKTsKKyAgICBy
ZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgZWxlbWVudHMpOwogfQogCiBSZWZQdHI8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXR0cmli
dXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKSBjb25zdApAQCAtOTc2LDcgKzk0NSw2IEBA
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZCgpIGNvbnN0CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0CiB7
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTIy
OSw3ICsxMTk3LDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWFyY2hU
ZXh0V2l0aENyaXRlcmlhKEpTQ29udGV4dFJlZiBjb250ZXh0LAogICAgIE5TRGljdGlvbmFyeSAq
cGFyYW1ldGVyaXplZEF0dHJpYnV0ZSA9IHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRl
Rm9yQ3JpdGVyaWEoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgc3RhcnRGcm9tLCBkaXJlY3Rpb24p
OwogICAgIGlkIHJlc3VsdCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
OkAiQVhTZWFyY2hUZXh0V2l0aENyaXRlcmlhIiBmb3JQYXJhbWV0ZXI6cGFyYW1ldGVyaXplZEF0
dHJpYnV0ZV07CiAgICAgaWYgKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11d
KQotICAgICAgICByZXR1cm4gY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+Pihjb250ZXh0LCBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPj4ocmVzdWx0KSk7CisgICAgICAgIHJldHVybiBtYWtl
SlNBcnJheShjb250ZXh0LCBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
clJhbmdlPj4ocmVzdWx0KSk7CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogCiAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0xNTQ2LDEzICsxNTE0LDExIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIAog
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4oKSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0CiB7
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKQEAgLTE1
NjIsOCArMTUyOCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6
W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJpbmdS
ZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICByZXR1cm4gY3JlYXRl
RW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkko
KQpAQCAtMTU3Myw4ICsxNTM4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xh
c3M6W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJp
bmdSZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICByZXR1cm4gY3Jl
YXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkKQEAg
LTE1ODMsNyArMTU0Nyw2IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp1cmwoKQogICAgIE5TVVJMICp1cmwgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdOwogICAgIHJldHVy
biBbW3VybCBhYnNvbHV0ZVN0cmluZ10gY3JlYXRlSlNTdHJpbmdSZWZdOyAgICAKICAgICBFTkRf
QVhfT0JKQ19FWENFUFRJT05TCi0gICAgCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTE2
MjIsNyArMTU4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUo
KSBjb25zdAogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwogICAgIHJlc3VsdCA9IFttX2Vs
ZW1lbnQgYWNjZXNzaWJpbGl0eUlzQXR0cmlidXRlU2V0dGFibGU6TlNBY2Nlc3NpYmlsaXR5Rm9j
dXNlZEF0dHJpYnV0ZV07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwotICAgIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTE2NDgsMTkgKzE2MTAsMTYgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzT2ZmU2NyZWVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2Vk
KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC0xNjc1LDEzICsxNjM0LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNJZ25vcmVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Npbmds
ZUxpbmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aUxpbmUoKSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAg
LTE3MTQsMTcgKzE2NzEsMTQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9j
dXMoKQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24oKQogewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphZGRTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKIH0KIAogLy8gVGV4dCBtYXJrZXJzCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRl
eCA0MDNmNGZmODMyZWUwZWY3YzNjZmFiZGYwZjg3ZTJjY2JlNjE0ZjhhLi5hZGJiNGI3YjVkNTRm
YjE0YTljNGJkZThhOTIyNzVmMTFjMTQxNmQ5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KQEAgLTQ2
LDE2ICs0NiwxMSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6aW5zcGVj
dG9yVGVzdFN0dWJVUkwoKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgcmV0dXJuIG51
bGxwdHI7CiAjZWxzZQotICAgIENGQnVuZGxlUmVmIGluc3BlY3RvckJ1bmRsZSA9IENGQnVuZGxl
R2V0QnVuZGxlV2l0aElkZW50aWZpZXIoQ0ZTVFIoImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSIp
KTsKKyAgICBhdXRvIGluc3BlY3RvckJ1bmRsZSA9IENGQnVuZGxlR2V0QnVuZGxlV2l0aElkZW50
aWZpZXIoQ0ZTVFIoImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSIpKTsKICAgICBpZiAoIWluc3Bl
Y3RvckJ1bmRsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZV
UkxSZWY+IHVybCA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoaW5zcGVjdG9yQnVu
ZGxlLCBDRlNUUigiVGVzdFN0dWIiKSwgQ0ZTVFIoImh0bWwiKSwgTlVMTCkpOwotICAgIGlmICgh
dXJsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENGU3RyaW5nUmVmIHVybFN0cmlu
ZyA9IENGVVJMR2V0U3RyaW5nKHVybC5nZXQoKSk7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5n
Q3JlYXRlV2l0aENGU3RyaW5nKHVybFN0cmluZykpOworICAgIGF1dG8gcmVzb3VyY2VVUkwgPSBh
ZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKGluc3BlY3RvckJ1bmRsZSwgQ0ZTVFIoIlRl
c3RTdHViIiksIENGU1RSKCJodG1sIiksIE5VTEwpKTsKKyAgICByZXR1cm4gcmVzb3VyY2VVUkwg
PyBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlVSTEdldFN0cmluZyhyZXNvdXJj
ZVVSTC5nZXQoKSkpKSA6IG51bGxwdHI7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvU3RyaW5nRnVuY3Rpb25zLmgKaW5kZXggMWJjMDVjMGE1ZjNhODA0YzBiMTQxYjg5NjkwYjc1
ZDI3NzEwZTc2MS4uNjdmMzllNjlmMTU0MDhiOTJlYTNhZTk0N2M5ZmE5MmZlZWExMjhjZCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNCwxNSArMjQsMTIgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFN0cmluZ0Z1bmN0
aW9uc19oCi0jZGVmaW5lIFN0cmluZ0Z1bmN0aW9uc19oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdC5oPgorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSA8V2ViS2l0
L1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nLmg+CiAjaW5jbHVkZSA8
V2ViS2l0L1dLU3RyaW5nUHJpdmF0ZS5oPgotI2luY2x1ZGUgPFdlYktpdC9XS1VSTC5oPgogI2lu
Y2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgpAQCAtNDQsNyArNDEsOCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotLy8gQ29udmVyc2lv
biBmdW5jdGlvbnMKK1dLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLU3RyaW5nKEpTQ29udGV4
dFJlZiwgSlNWYWx1ZVJlZik7CitXVEY6OlN0cmluZyB0b1dURlN0cmluZyhKU0NvbnRleHRSZWYs
IEpTVmFsdWVSZWYpOwogCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soSlNT
dHJpbmdSZWYgc3RyaW5nKQogewpAQCAtNTYsOSArNTQsMTQgQEAgaW5saW5lIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB0b1dLKGNvbnN0IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiYgc3RyaW5n
KQogICAgIHJldHVybiB0b1dLKHN0cmluZy5nZXQoKSk7CiB9CiAKK2lubGluZSBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAgcmV0dXJuIGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7Cit9CisKIGlubGlu
ZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5n
KQogewotICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0
cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJuIHRvV0soc3RyaW5nLnV0ZjgoKS5kYXRh
KCkpOwogfQogCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoV0tTdHJpbmdS
ZWYgc3RyaW5nKQpAQCAtOTksNiArMTAyLDI1IEBAIGlubGluZSBXVEY6OlN0cmluZyB0b1dURlN0
cmluZyhjb25zdCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmluZykKICAgICByZXR1cm4g
dG9XVEZTdHJpbmcoc3RyaW5nLmdldCgpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV1RSCitpbmxp
bmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKQoreworICAgIHJl
dHVybiB0b1dURlN0cmluZyh0b1dLKHN0cmluZykpOworfQogCi0jZW5kaWYgLy8gU3RyaW5nRnVu
Y3Rpb25zX2gKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4mIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5n
LmdldCgpKTsKK30KKworaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLU3RyaW5n
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB0
b1dLKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSBX
VEY6OlN0cmluZyB0b1dURlN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2
YWx1ZSkKK3sKKyAgICAvLyBGSVhNRTogQ291bGQgbWFrZSB0aGlzIGVmZmljaWVudCBieSB1c2lu
ZyB0aGUgV1RGU3RyaW5nIGluc2lkZSBPcGFxdWVKU1N0cmluZyBpZiB3ZSB3YW50ZWQgdG8uCisg
ICAgcmV0dXJuIHRvV1RGU3RyaW5nKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcAppbmRleCAxMzQ1YzQyYzExZTYyZGMwODhjNmYyZDM4Yjk5YjA5MzU2NGUwMTM4Li43
NWQ5ZmI2MDQ0NDE0NWYxZWNkZmFlZmQ5OTA4YWFlMjY4ODU0ZWYzIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkRp
Y3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJFdmVudFNlbmRlclByb3h5LmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2luY2x1ZGUg
IlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlh
bGl6ZVRocmVhZGluZy5oPgpAQCAtNDk0LDggKzQ5NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OmluaXRpYWxpemUoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKICAgICBXZWJDb3JlVGVz
dFN1cHBvcnQ6Omluc3RhbGxNb2NrR2FtZXBhZFByb3ZpZGVyKCk7CiAjZW5kaWYKIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYWdlR3JvdXBJZGVudGlmaWVyID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0VGVzdFJ1bm5lclBhZ2VHcm91cCIpKTsK
LSAgICBtX3BhZ2VHcm91cC5hZG9wdChXS1BhZ2VHcm91cENyZWF0ZVdpdGhJZGVudGlmaWVyKHBh
Z2VHcm91cElkZW50aWZpZXIuZ2V0KCkpKTsKKyAgICBtX3BhZ2VHcm91cC5hZG9wdChXS1BhZ2VH
cm91cENyZWF0ZVdpdGhJZGVudGlmaWVyKHRvV0soIldlYktpdFRlc3RSdW5uZXJQYWdlR3JvdXAi
KS5nZXQoKSkpOwogCiAgICAgbV9ldmVudFNlbmRlclByb3h5ID0gbWFrZVVuaXF1ZTxFdmVudFNl
bmRlclByb3h5Pih0aGlzKTsKIH0KQEAgLTUwNyw5ICs1MDYsOSBAQCBXS1JldGFpblB0cjxXS0Nv
bnRleHRDb25maWd1cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29u
ZmlndXJhdAogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRGdWxseVN5bmNocm9ub3VzTW9k
ZUlzQWxsb3dlZEZvclRlc3RpbmcoY29uZmlndXJhdGlvbi5nZXQoKSwgdHJ1ZSk7CiAgICAgV0tD
b250ZXh0Q29uZmlndXJhdGlvblNldElnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHNG
b3JUZXN0aW5nKGNvbmZpZ3VyYXRpb24uZ2V0KCksIG9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNN
ZXNzYWdpbmdUaW1lb3V0cyk7CiAKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4g
b3ZlcnJpZGVMYW5ndWFnZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAg
IGF1dG8gb3ZlcnJpZGVMYW5ndWFnZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkp
OwogICAgIGZvciAoYXV0byYgbGFuZ3VhZ2UgOiBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzKQot
ICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShvdmVycmlkZUxhbmd1YWdlcy5nZXQoKSwgYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhsYW5ndWFnZS51dGY4KCkuZGF0YSgpKSku
Z2V0KCkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShvdmVycmlkZUxhbmd1YWdlcy5nZXQo
KSwgdG9XSyhsYW5ndWFnZSkuZ2V0KCkpOwogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRP
dmVycmlkZUxhbmd1YWdlcyhjb25maWd1cmF0aW9uLmdldCgpLCBvdmVycmlkZUxhbmd1YWdlcy5n
ZXQoKSk7CiAKICAgICBpZiAob3B0aW9ucy5zaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbigpKSB7CkBAIC04NDMsMzEgKzg0MiwyNCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNl
dFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpbwog
ICAgIFdLUHJlZmVyZW5jZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0dXJlcyhwcmVmZXJlbmNl
cyk7CiAKICAgICAvLyBTZXQgaW50ZXJuYWwgZmVhdHVyZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBk
ZWZhdWx0IHZhbHVlcyBmb3IgdGVzdGluZy4KLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgYXN5bmNP
dmVyZmxvd1Njcm9sbGluZ0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBhc3luY092ZXJmbG93
U2Nyb2xsaW5nRmVhdHVyZSk7CiAKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgYXN5bmNGcmFtZVNj
cm9sbGluZ0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXN5bmNGcmFt
ZVNjcm9sbGluZ0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBhc3luY0ZyYW1lU2Nyb2xsaW5nRmVhdHVy
ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZl
cmVuY2VzLCBmYWxzZSwgdG9XSygiQXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQiKS5nZXQo
KSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZl
cmVuY2VzLCBmYWxzZSwgdG9XSygiQXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJsZWQiKS5nZXQoKSk7
CiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9EQVRFKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBp
bnB1dFR5cGVEYXRlRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1
dFR5cGVEYXRlRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVh
dHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlRGF0ZUZlYXR1cmUpOworICAg
IFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywg
dHJ1ZSwgdG9XSygiSW5wdXRUeXBlRGF0ZUVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNpZiBF
TkFCTEUoSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBp
bnB1dFR5cGVEYXRlVGltZUxvY2FsRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJJbnB1dFR5cGVEYXRlVGltZUxvY2FsRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNT
ZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBl
RGF0ZVRpbWVMb2NhbEZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVn
RmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlRGF0ZVRpbWVM
b2NhbEVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9NT05U
SCkKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlTW9udGhGZWF0dXJlID0gV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZU1vbnRoRW5hYmxlZCIpOwotICAgIFdL
UHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1
ZSwgaW5wdXRUeXBlTW9udGhGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxE
ZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZU1vbnRo
RW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUUpCi0g
ICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0VHlwZVRpbWVGZWF0dXJlID0gV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZVRpbWVFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1
dFR5cGVUaW1lRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0
dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVUaW1lRW5hYmxlZCIp
LmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1dFRUspCi0gICAgc3RhdGlj
IFdLU3RyaW5nUmVmIGlucHV0VHlwZVdlZWtGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIklucHV0VHlwZVdlZWtFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldElu
dGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVXZWVr
RmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5
KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVXZWVrRW5hYmxlZCIpLmdldCgpKTsK
ICNlbmRpZgogCiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcm5hbERlYnVnRmVhdHVyZSA6IG9w
dGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQpAQCAtOTIwLDI1ICs5MTIsMTYgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBU
ZXN0T3B0aW9ucyYgb3B0aW8KICAgICBXS1ByZWZlcmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJhY2tn
cm91bmRzSW5EYXJrTW9kZShwcmVmZXJlbmNlcywgb3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dy
b3VuZHNJbkRhcmtNb2RlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZUNhY2hlRW5hYmxlZChw
cmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENhY2hlKTsKIAotICAgIHN0YXRp
YyBXS1N0cmluZ1JlZiBkZWZhdWx0VGV4dEVuY29kaW5nID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIklTTy04ODU5LTEiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0RGVmYXVsdFRleHRF
bmNvZGluZ05hbWUocHJlZmVyZW5jZXMsIGRlZmF1bHRUZXh0RW5jb2RpbmcpOwotCi0gICAgc3Rh
dGljIFdLU3RyaW5nUmVmIHN0YW5kYXJkRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUaW1lcyIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBjdXJzaXZlRm9udEZh
bWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsZSBDaGFuY2VyeSIpOwot
ICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBmYW50YXN5Rm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJQYXB5cnVzIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGZpeGVk
Rm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDb3VyaWVyIik7Ci0g
ICAgc3RhdGljIFdLU3RyaW5nUmVmIHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkFwcGxlIENvbG9yIEVtb2ppIik7Ci0gICAgc3RhdGljIFdLU3Ry
aW5nUmVmIHNhbnNTZXJpZkZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSGVsdmV0aWNhIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHNlcmlmRm9udEZhbWlseSA9
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lcyIpOworICAgIFdLUHJlZmVyZW5j
ZXNTZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShwcmVmZXJlbmNlcywgdG9XSygiSVNPLTg4NTkt
MSIpLmdldCgpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNTZXRNaW5pbXVtRm9udFNpemUocHJlZmVy
ZW5jZXMsIDApOwotICAgIFdLUHJlZmVyZW5jZXNTZXRTdGFuZGFyZEZvbnRGYW1pbHkocHJlZmVy
ZW5jZXMsIHN0YW5kYXJkRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEN1cnNpdmVG
b250RmFtaWx5KHByZWZlcmVuY2VzLCBjdXJzaXZlRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldEZhbnRhc3lGb250RmFtaWx5KHByZWZlcmVuY2VzLCBmYW50YXN5Rm9udEZhbWlseSk7
Ci0gICAgV0tQcmVmZXJlbmNlc1NldEZpeGVkRm9udEZhbWlseShwcmVmZXJlbmNlcywgZml4ZWRG
b250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0UGljdG9ncmFwaEZvbnRGYW1pbHkocHJl
ZmVyZW5jZXMsIHBpY3RvZ3JhcGhGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0U2Fu
c1NlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgc2Fuc1NlcmlmRm9udEZhbWlseSk7Ci0gICAg
V0tQcmVmZXJlbmNlc1NldFNlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgc2VyaWZGb250RmFt
aWx5KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0U3RhbmRhcmRGb250RmFtaWx5KHByZWZlcmVuY2Vz
LCB0b1dLKCJUaW1lcyIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q3Vyc2l2ZUZvbnRG
YW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIkFwcGxlIENoYW5jZXJ5IikuZ2V0KCkpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRGYW50YXN5Rm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiUGFweXJ1
cyIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Rml4ZWRGb250RmFtaWx5KHByZWZlcmVu
Y2VzLCB0b1dLKCJDb3VyaWVyIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRQaWN0b2dy
YXBoRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiQXBwbGUgQ29sb3IgRW1vamkiKS5nZXQo
KSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFNhbnNTZXJpZkZvbnRGYW1pbHkocHJlZmVyZW5jZXMs
IHRvV0soIkhlbHZldGljYSIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0U2VyaWZGb250
RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJUaW1lcyIpLmdldCgpKTsKICAgICBXS1ByZWZlcmVu
Y2VzU2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNl
KTsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgIFdLUHJlZmVyZW5jZXNTZXRNZWRpYVNv
dXJjZUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwpAQCAtMTAxMCwzOCArOTkzLDI3IEBAIGJv
b2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVz
dE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQobV9t
YWluV2ViVmlldy0+cGFnZSgpLCBudWxscHRyKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlJlc2V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IHJlc2V0
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
YXV0byByZXNldE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZEdDS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2hvdWxkR0MiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBzaG91bGRHQ1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUobV9nY0JldHdlZW5UZXN0cykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0ocmVzZXRNZXNz
YWdlQm9keS5nZXQoKSwgc2hvdWxkR0NLZXkuZ2V0KCksIHNob3VsZEdDVmFsdWUuZ2V0KCkpOwor
ICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJTaG91bGRHQyIsIG1fZ2NCZXR3ZWVuVGVz
dHMpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsbG93ZWRIb3N0c0tleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFsbG93ZWRIb3N0cyIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gYWxsb3dlZEhvc3RzVmFsdWUgPSBhZG9w
dFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIGZvciAoYXV0byYgaG9zdCA6IG1fYWxs
b3dlZEhvc3RzKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0hvc3QgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGhvc3QuY19zdHIoKSkpOwotICAg
ICAgICBXS0FycmF5QXBwZW5kSXRlbShhbGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSwgd2tIb3N0Lmdl
dCgpKTsKLSAgICB9Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5Lmdl
dCgpLCBhbGxvd2VkSG9zdHNLZXkuZ2V0KCksIGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpKTsKKyAg
ICBhdXRvIGFsbG93ZWRIb3N0c1ZhbHVlID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgp
KTsKKyAgICBmb3IgKGF1dG8mIGhvc3QgOiBtX2FsbG93ZWRIb3N0cykKKyAgICAgICAgV0tBcnJh
eUFwcGVuZEl0ZW0oYWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCksIHRvV0soaG9zdC5jX3N0cigpKS5n
ZXQoKSk7CisgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkFsbG93ZWRIb3N0cyIsIGFs
bG93ZWRIb3N0c1ZhbHVlLmdldCgpKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xB
VEVEX1RSRUUpCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4SXNvbGF0ZWRNb2RlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWNjZXNzaWJpbGl0eUlz
b2xhdGVkVHJlZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGF4SXNvbGF0ZWRN
b2RlVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2FjY2Vzc2liaWxpdHlJc29sYXRl
ZFRyZWVNb2RlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5Lmdl
dCgpLCBheElzb2xhdGVkTW9kZUtleS5nZXQoKSwgYXhJc29sYXRlZE1vZGVWYWx1ZS5nZXQoKSk7
CisgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkFjY2Vzc2liaWxpdHlJc29sYXRlZFRy
ZWUiLCBtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKTsKICNlbmRpZgotICAgIAotICAg
IGlmIChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3RoKCkpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGpzY09wdGlvbnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJKU0NPcHRpb25zIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4ganNjT3B0aW9uc1ZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhvcHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSkpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCksIGpzY09wdGlvbnNLZXkuZ2V0KCksIGpzY09wdGlv
bnNWYWx1ZS5nZXQoKSk7Ci0gICAgfQorCisgICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5sZW5n
dGgoKSkKKyAgICAgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkpTQ09wdGlvbnMiLCBv
cHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBX
ZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVz
dGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOwogI2Vu
ZGlmCiAKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3Rl
ZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgp
LCB0b1dLKCJSZXNldCIpLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsKIAogICAgIFdL
Q29udGV4dFNldFNob3VsZFVzZUZvbnRTbW9vdGhpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmNvbnRleHQoKSwgZmFsc2UpOwogCkBAIC0xMjAzLDggKzExNzUsNyBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjp1cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KCkKIAogICAgIEFzeW5jVGFz
ayhbXSgpIHsKICAgICAgICAgLy8gQWZ0ZXIgZWFjaCB0ZXN0LCB3ZSB1cGRhdGUgdGhlIGxpc3Qg
b2YgbGl2ZSBkb2N1bWVudHMgc28gdGhhdCB3ZSBjYW4gZGV0ZWN0IHdoZW4gYW4gYWJhbmRvbmVk
IGRvY3VtZW50IGZpcnN0IHNob3dlZCB1cC4KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
R2V0TGl2ZURvY3VtZW50cyIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIHRvV0soIkdldExpdmVEb2N1bWVudHMiKS5nZXQoKSwgbnVsbHB0cik7CiAgICAg
fSwgNV9zKS5ydW4oKTsKIH0KIApAQCAtMTIxNSw4ICsxMTg2LDcgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6Y2hlY2tGb3JXb3JsZExlYWtzKCkKIAogICAgIEFzeW5jVGFzayhbXSgpIHsKICAgICAg
ICAgLy8gVGhpcyBydW5zIGF0IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgdGVzdHMuIEl0IGNsZWFy
cyBjYWNoZXMsIHJ1bnMgYSBHQyBhbmQgdGhlbiBmZXRjaGVzIHRoZSBsaXN0IG9mIGRvY3VtZW50
cy4KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2hlY2tGb3JXb3JsZExlYWtzIikpOwot
ICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIpOworICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygiQ2hlY2tG
b3JXb3JsZExlYWtzIikuZ2V0KCksIG51bGxwdHIpOwogICAgIH0sIDIwX3MpLnJ1bigpOwogfQog
CkBAIC0xMzI0LDYgKzEyOTQsNyBAQCBjb25zdCBjaGFyKiBUZXN0Q29udHJvbGxlcjo6bmV0d29y
a1Byb2Nlc3NOYW1lKCkKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKKwogdm9pZCBUZXN0Q29u
dHJvbGxlcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCBhbGxvd3MpCiB7CiAgICAg
bV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGFsbG93czsKQEAgLTE0MDAsOCArMTM3MSw4IEBA
IHN0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmlu
ZyYgdmFsdWUpCiAKIHN0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1
ZUFzUmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gYmFzZVVSTCA9IGFk
b3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpOwotICAgIFdLUmV0YWluUHRy
PFdLVVJMUmVmPiByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChi
YXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7CisgICAgYXV0byBiYXNlVVJMID0gYWRvcHRX
SyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7CisgICAgYXV0byByZWxhdGl2ZVVS
TCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1ZS5j
X3N0cigpKSk7CiAgICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aChyZWxhdGl2
ZVVSTC5nZXQoKSkpKTsKIH0KIApAQCAtMTQxNSw4ICsxMzg2LDcgQEAgc3RhdGljIHZvaWQgdXBk
YXRlVGVzdE9wdGlvbnNGcm9tVGVzdEhlYWRlcihUZXN0T3B0aW9ucyYgdGVzdE9wdGlvbnMsIGNv
bnN0IHN0ZDoKICAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZSA9IGFic29sdXRlUGF0aDsKICAgICBp
ZiAoZmlsZW5hbWUuZW1wdHkoKSkgewogICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2Ug
Y29udmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBh
dGhPclVSTC5jX3N0cigpKSk7Ci0gICAgICAgIGZpbGVuYW1lID0gdGVzdFBhdGgod2tVUkwuZ2V0
KCkpOworICAgICAgICBmaWxlbmFtZSA9IHRlc3RQYXRoKGFkb3B0V0soY3JlYXRlVGVzdFVSTChw
YXRoT3JVUkwuY19zdHIoKSkpLmdldCgpKTsKICAgICB9CiAKICAgICBpZiAoZmlsZW5hbWUuZW1w
dHkoKSkKQEAgLTE2MTUsNiArMTU4NSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3Vy
ZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogfQogCiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykgJiYgIVBMQVRGT1JNKENPQ09BKQorCiBzdHJ1Y3QgQ29udGVu
dEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0IHsKICAgICBleHBsaWNpdCBDb250ZW50RXh0
ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRleHQoVGVzdENvbnRyb2xsZXImIGNvbnRyb2xsZXIpCiAg
ICAgICAgIDogdGVzdENvbnRyb2xsZXIoY29udHJvbGxlcikKQEAgLTE2NDIsMTUgKzE2MTMsOSBA
QCBzdGF0aWMgc3RkOjpzdHJpbmcgY29udGVudEV4dGVuc2lvbkpTT05QYXRoKFdLVVJMUmVmIHVy
bCkKICAgICBpZiAocGF0aC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHBhdGggKyAiLmpzb24i
OwogCi0gICAgYXV0byBwID0gYWRvcHRXSyhXS1VSTENvcHlQYXRoKHVybCkpOwotICAgIGF1dG8g
YnVmZmVyID0gc3RkOjp2ZWN0b3I8Y2hhcj4oV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdT
aXplKHAuZ2V0KCkpKTsKLSAgICBjb25zdCBhdXRvIGxlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENT
dHJpbmcocC5nZXQoKSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0gICAgcmV0dXJu
IHN0ZDo6c3RyaW5nKCJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzIikgKyBzdGQ6OnN0cmluZyhidWZm
ZXIuZGF0YSgpLCBsZW5ndGggLSAxKSArICIuanNvbiI7CisgICAgcmV0dXJuICJMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzIiArIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aCh1cmwpKS5nZXQoKSkg
KyAiLmpzb24iOwogfQotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0jaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRl
bnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogewogICAgIGNv
bnN0IGNoYXIqIGNvbnRlbnRFeHRlbnNpb25zUGF0aCA9IGxpYnJhcnlQYXRoRm9yVGVzdGluZygp
OwpAQCAtMTY3MCwxMyArMTYzNSwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVD
b250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdAogICAgIH0K
IAogICAgIHN0ZDo6c3RyaW5nIGpzb25GaWxlQ29udGVudHMge3N0ZDo6aXN0cmVhbWJ1Zl9pdGVy
YXRvcjxjaGFyPihqc29uRmlsZSksIHN0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPigpfTsK
LSAgICBhdXRvIGpzb25Tb3VyY2UgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKGpzb25GaWxlQ29udGVudHMuY19zdHIoKSkpOworICAgIGF1dG8ganNvblNvdXJjZSA9IHRv
V0soanNvbkZpbGVDb250ZW50cy5jX3N0cigpKTsKIAotICAgIGF1dG8gc3RvcmVQYXRoID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250ZW50RXh0ZW5zaW9uc1BhdGgp
KTsKKyAgICBhdXRvIHN0b3JlUGF0aCA9IHRvV0soY29udGVudEV4dGVuc2lvbnNQYXRoKTsKICAg
ICBhdXRvIGV4dGVuc2lvblN0b3JlID0gYWRvcHRXSyhXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVDcmVhdGUoc3RvcmVQYXRoLmdldCgpKSk7CiAgICAgQVNTRVJUKGV4dGVuc2lvblN0b3JlKTsK
IAotICAgIGF1dG8gZmlsdGVySWRlbnRpZmllciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlRlc3RDb250ZW50RXh0ZW5zaW9uIikpOworICAgIGF1dG8gZmlsdGVySWRl
bnRpZmllciA9IHRvV0soIlRlc3RDb250ZW50RXh0ZW5zaW9uIik7CiAKICAgICBDb250ZW50RXh0
ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7CiAgICAgV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZShleHRlbnNpb25TdG9yZS5nZXQoKSwgZmlsdGVySWRl
bnRpZmllci5nZXQoKSwganNvblNvdXJjZS5nZXQoKSwgJmNvbnRleHQsIGNvbnRlbnRFeHRlbnNp
b25TdG9yZUNhbGxiYWNrKTsKQEAgLTE3MDEsMTggKzE2NjYsMjIgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6cmVzZXRDb250ZW50RXh0ZW5zaW9ucygpCiAKICAgICBXS1VzZXJDb250ZW50Q29udHJv
bGxlclJlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVycyh1c2VyQ29udGVudENvbnRyb2xsZXIoKSk7
CiAKLSAgICBhdXRvIHN0b3JlUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoY29udGVudEV4dGVuc2lvbnNQYXRoKSk7CisgICAgYXV0byBzdG9yZVBhdGggPSB0b1dL
KGNvbnRlbnRFeHRlbnNpb25zUGF0aCk7CiAgICAgYXV0byBleHRlbnNpb25TdG9yZSA9IGFkb3B0
V0soV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ3JlYXRlKHN0b3JlUGF0aC5nZXQoKSkpOwog
ICAgIEFTU0VSVChleHRlbnNpb25TdG9yZSk7CiAKLSAgICBhdXRvIGZpbHRlcklkZW50aWZpZXIg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXN0Q29udGVudEV4dGVu
c2lvbiIpKTsKKyAgICBhdXRvIGZpbHRlcklkZW50aWZpZXIgPSB0b1dLKCJUZXN0Q29udGVudEV4
dGVuc2lvbiIpOwogCiAgICAgQ29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0IGNv
bnRleHQoKnRoaXMpOwogICAgIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZShleHRl
bnNpb25TdG9yZS5nZXQoKSwgZmlsdGVySWRlbnRpZmllci5nZXQoKSwgJmNvbnRleHQsIGNvbnRl
bnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrKTsKICAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5v
VGltZW91dCk7CiAgICAgQVNTRVJUKCFjb250ZXh0LmZpbHRlcik7CiB9Ci0jZWxzZSAvLyBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykgJiYgIVBMQVRGT1JNKENPQ09BKQorCisjaWYgIUVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCisKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JU
ZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJikKIHsKIH0KQEAgLTE3MjAsMTQgKzE2ODksMTMgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29u
c3QgVGVzdEludm9jYXRpb24mKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50RXh0
ZW5zaW9ucygpCiB7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSNl
bmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCisKKyNlbmRpZiAvLyAhRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKIAogY2xhc3MgQ29tbWFuZFRva2VuaXplciB7CiBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCiAgICAgICAgIDog
bV9pbnB1dChpbnB1dCkKLSAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKICAgICB7CiAg
ICAgICAgIHB1bXAoKTsKICAgICB9CkBAIC0xNzQwLDcgKzE3MDgsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAnXCcnOwogICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBtX2lucHV0OwogICAgIHN0ZDo6c3RyaW5nIG1fbmV4dDsKLSAgICBzaXplX3QgbV9wb3NO
ZXh0U2VwYXJhdG9yOworICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3IgeyAwIH07CiB9Owog
CiB2b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAoKQpAQCAtMTgxNCw4ICsxNzgyLDcgQEAgYm9v
bCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKiBpbnB1dExpbmUpCiAgICAgCiAg
ICAgVGVzdE9wdGlvbnMgb3B0aW9ucyA9IHRlc3RPcHRpb25zRm9yVGVzdChjb21tYW5kKTsKIAot
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVSTChj
b21tYW5kLnBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IG1h
a2VVbmlxdWU8VGVzdEludm9jYXRpb24+KHdrVVJMLmdldCgpLCBvcHRpb25zKTsKKyAgICBtX2N1
cnJlbnRJbnZvY2F0aW9uID0gbWFrZVVuaXF1ZTxUZXN0SW52b2NhdGlvbj4oYWRvcHRXSyhjcmVh
dGVUZXN0VVJMKGNvbW1hbmQucGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSwgb3B0aW9ucyk7CiAK
ICAgICBpZiAoY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzIHx8IG1fc2hvdWxkRHVtcFBpeGVsc0Zv
ckFsbFRlc3RzKQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRJc1BpeGVsVGVzdChj
b21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKQEAgLTE5NDQsMTggKzE5MTEsOSBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpncHVQcm9jZXNzRGlkQ3Jhc2goV0tDb250ZXh0UmVmIGNvbnRleHQsIFdL
UHJvY2Vzc0lEIHByb2NlcwogICAgIHN0YXRpY19jYXN0PFRlc3RDb250cm9sbGVyKj4oY29uc3Rf
Y2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5ncHVQcm9jZXNzRGlkQ3Jhc2gocHJvY2Vzc0lEKTsK
IH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUlu
amVjdGVkQnVuZGxlKFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnksIGJvb2wg
c3luY2hyb25vdXMpCit2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlS2V5RG93bk1lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGJvb2wgc3lu
Y2hyb25vdXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleSIpKTsKLSAgICBXS1N0cmluZ1Jl
ZiBrZXkgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGtleUtleS5nZXQoKSkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVy
cyA9IHN0YXRpY19jYXN0PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBtb2RpZmllcnNLZXkuZ2V0KCkpKSkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGxvY2F0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiTG9jYXRpb24iKSk7Ci0gICAgdW5zaWduZWQgbG9jYXRpb24gPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxvY2F0aW9uS2V5Lmdl
dCgpKSkpKTsKLQotICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+a2V5RG93bihrZXksIG1vZGlmaWVy
cywgbG9jYXRpb24pOworICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+a2V5RG93bihzdHJpbmdWYWx1
ZShkaWN0aW9uYXJ5LCAiS2V5IiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMi
KSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkxvY2F0aW9uIikpOwogfQogCiB2b2lkIFRlc3RD
b250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50c0xpc3QoV0tBcnJheVJlZiBsaXZlRG9j
dW1lbnRMaXN0KQpAQCAtMTk2NCwxOCArMTkyMiw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRp
ZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdChXS0FycmF5UmVmIGxpdmVEb2N1bWVudExpc3QpCiAK
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+IGRvY3VtZW50SW5mbzsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bURvY3VtZW50czsgKytpKSB7Ci0gICAgICAgIFdLVHlwZVJlZiBp
dGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGxpdmVEb2N1bWVudExpc3QsIGkpOwotICAgICAg
ICBpZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSkgewotICAgICAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIGxpdmVEb2N1bWVudEl0ZW0gPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KGl0ZW0pOwotCi0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJpZCIpKTsKLSAgICAgICAgICAgIFdLVUludDY0UmVmIGRvY3VtZW50SUQgPSBzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsaXZlRG9jdW1lbnRJ
dGVtLCBpZEtleS5nZXQoKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gdXJsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidXJsIikp
OwotICAgICAgICAgICAgV0tTdHJpbmdSZWYgZG9jdW1lbnRVUkwgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsaXZlRG9jdW1lbnRJdGVtLCB1cmxL
ZXkuZ2V0KCkpKTsKLQotICAgICAgICAgICAgZG9jdW1lbnRJbmZvLmFkZChXS1VJbnQ2NEdldFZh
bHVlKGRvY3VtZW50SUQpLCB0b1dURlN0cmluZyhkb2N1bWVudFVSTCkpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChhdXRvIGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUoV0tBcnJheUdldEl0
ZW1BdEluZGV4KGxpdmVEb2N1bWVudExpc3QsIGkpKSkKKyAgICAgICAgICAgIGRvY3VtZW50SW5m
by5hZGQodWludDY0VmFsdWUoZGljdGlvbmFyeSwgImlkIiksIHRvV1RGU3RyaW5nKHN0cmluZ1Zh
bHVlKGRpY3Rpb25hcnksICJ1cmwiKSkpOwogICAgIH0KIAogICAgIGlmICghZG9jdW1lbnRJbmZv
LnNpemUoKSkgewpAQCAtMjAwNyw2MCArMTk1NSwzNSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpk
aWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZQogICAgICAgICBpZiAobV9zdGF0ZSAhPSBSdW5uaW5nVGVzdCkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlv
bmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICAgICAgV0tT
dHJpbmdSZWYgc3ViTWVzc2FnZU5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1Yk1lc3NhZ2VLZXku
Z2V0KCkpKTsKLQotICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
c3ViTWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBidXR0b25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJCdXR0b24iKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBidXR0b24gPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbktleS5n
ZXQoKSkpKSk7CisgICAgICAgIGF1dG8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNz
YWdlQm9keSk7CisgICAgICAgIGF1dG8gc3ViTWVzc2FnZU5hbWUgPSBzdHJpbmdWYWx1ZShkaWN0
aW9uYXJ5LCAiU3ViTWVzc2FnZSIpOwogCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiTW9kaWZpZXJzIikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMg
PSBzdGF0aWNfY2FzdDxXS0V2ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgbW9kaWZpZXJzS2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9yd2Fy
ZCB0byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKQotICAgICAgICAgICAgICAgIG1fZXZl
bnRTZW5kZXJQcm94eS0+bW91c2VEb3duKGJ1dHRvbiwgbW9kaWZpZXJzKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlVXAoYnV0dG9u
LCBtb2RpZmllcnMpOworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhz
dWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVy
UHJveHktPm1vdXNlRG93bih1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiksIHVpbnQ2
NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KIAorICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIk1vdXNlVXAiKSkgeworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5
LT5tb3VzZVVwKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFsdWUo
ZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VO
YW1lLCAiS2V5RG93biIpKSB7Ci0gICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmYWxzZSk7CisgICAgICAg
ICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoZGljdGlvbmFy
eSwgZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVNjcm9s
bEJ5IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGRv
dWJsZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSk7
Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB5
ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0KLSAg
ICAgICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgbV9ldmVudFNl
bmRlclByb3h5LT5tb3VzZVNjcm9sbEJ5KHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNlbmRl
clByb3h5LT5tb3VzZVNjcm9sbEJ5KGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIiksIGRvdWJs
ZVZhbHVlKGRpY3Rpb25hcnksICJZIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5h
bWUsICJNb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKSkgewotICAgICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJs
ZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBX
S0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBoYXNlS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGhhc2UiKSk7Ci0gICAgICAgICAg
ICBpbnQgcGhhc2UgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBwaGFzZUtleS5nZXQoKSkpKSk7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbW9tZW50dW1LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJNb21lbnR1bSIpKTsKLSAgICAgICAgICAgIGludCBtb21lbnR1bSA9IHN0YXRpY19jYXN0
PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vbWVudHVtS2V5LmdldCgp
KSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNz
CisgICAgICAgICAgICBhdXRvIHggPSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAg
ICAgICAgICAgYXV0byB5ID0gZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKKyAgICAgICAg
ICAgIGF1dG8gcGhhc2UgPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiUGhhc2UiKTsKKyAgICAg
ICAgICAgIGF1dG8gbW9tZW50dW0gPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9tZW50dW0i
KTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VTY3JvbGxCeVdpdGhXaGVl
bEFuZE1vbWVudHVtUGhhc2VzKHgsIHksIHBoYXNlLCBtb21lbnR1bSk7Ci0KICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMDgzLDQyICsyMDA2LDI2IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUo
V0tTdHJpbmdSZWYKICAgICAgICAgaWYgKG1fc3RhdGUgIT0gUnVubmluZ1Rlc3QpCiAgICAgICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN1Yk1lc3NhZ2VO
YW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJNZXNzYWdlS2V5LmdldCgpKSk7CisgICAgICAgIGF1
dG8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1
dG8gc3ViTWVzc2FnZU5hbWUgPSBzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAiU3ViTWVzc2FnZSIp
OwogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VO
YW1lLCAiS2V5RG93biIpKSB7Ci0gICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0cnVlKTsKLQorICAgICAg
ICAgICAgZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKGRpY3Rpb25h
cnksIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIp
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
c3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VVcCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gYnV0dG9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQnV0dG9uIikpOwotICAgICAgICAgICAgdW5zaWduZWQgYnV0dG9uID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25L
ZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9k
aWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZp
ZXJzIikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNf
Y2FzdDxXS0V2ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
bW9kaWZpZXJzS2V5LmdldCgpKSkpKTsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSkgeworICAgICAgICAgICAgbV9l
dmVudFNlbmRlclByb3h5LT5tb3VzZURvd24odWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkJ1dHRv
biIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJzIikpOworICAgICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICB9CiAKLSAgICAgICAg
ICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSkKLSAgICAgICAg
ICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRG93bihidXR0b24sIG1vZGlmaWVycyk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5t
b3VzZVVwKGJ1dHRvbiwgbW9kaWZpZXJzKTsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsKKyAgICAgICAgICAgIG1f
ZXZlbnRTZW5kZXJQcm94eS0+bW91c2VVcCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9u
IiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlTW92
ZVRvIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGRv
dWJsZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSk7
Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB5
ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0KLSAg
ICAgICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgbV9ldmVudFNl
bmRlclByb3h5LT5tb3VzZU1vdmVUbyh4LCB5KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQ
cm94eS0+bW91c2VNb3ZlVG8oZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKSwgZG91YmxlVmFs
dWUoZGljdGlvbmFyeSwgIlkiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIobnVsbHB0cik7CiAgICAgICAgIH0KIApAQCAtMjE0NCw4MSArMjA1MSw0OCBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlKFdLU3RyaW5nUmVmCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRm9yY2VDaGFuZ2VkIikpIHsKLSAg
ICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvcmNlIikpOwotICAgICAgICAgICAgZG91Ymxl
IGZvcmNlID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZvcmNlS2V5LmdldCgp
KSkpOwotCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRm9yY2VDaGFuZ2Vk
KGZvcmNlKTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VGb3JjZUNoYW5n
ZWQoZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIkZvcmNlIikpOwogICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1l
c3NhZ2VOYW1lLCAiQ29udGludW91c01vdXNlU2Nyb2xsQnkiKSkgewotICAgICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZhbHVl
KHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBhZ2VkS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiUGFnZWQiKSk7Ci0gICAgICAgICAgICBib29sIHBhZ2VkID0gc3RhdGljX2Nhc3Q8Ym9vbD4o
V0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBhZ2VkS2V5LmdldCgpKSkpKTsKLQot
ICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCisgICAgICAgICAgICBhdXRvIHgg
PSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAgICAgICAgICAgYXV0byB5ID0gZG91
YmxlVmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKKyAgICAgICAgICAgIGF1dG8gcGFnZWQgPSBib29s
ZWFuVmFsdWUoZGljdGlvbmFyeSwgIlBhZ2VkIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVy
UHJveHktPmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KHgsIHksIHBhZ2VkKTsKICAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTGVhcEZv
cndhcmQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lSW5NaWxsaXNlY29u
ZHMiKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0aW1lID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0aW1lS2V5LmdldCgpKSkpKTsKLQot
ICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5sZWFwRm9yd2FyZCh0aW1lKTsKKyAgICAg
ICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bGVhcEZvcndhcmQodWludDY0VmFsdWUoZGljdGlv
bmFyeSwgIlRpbWVJbk1pbGxpc2Vjb25kcyIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5h
bWUsICJBZGRUb3VjaFBvaW50IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsK
LSAgICAgICAgICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiWSIpKTsKLSAgICAgICAgICAgIGludCB5ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIG1f
ZXZlbnRTZW5kZXJQcm94eS0+YWRkVG91Y2hQb2ludCh4LCB5KTsKKyAgICAgICAgICAgIG1fZXZl
bnRTZW5kZXJQcm94eS0+YWRkVG91Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWCIp
LCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiVXBkYXRlVG91Y2hQb2ludCIp
KSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAgICAgICAg
IGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGluZGV4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJY
IikpOwotICAgICAgICAgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJZIikpOwotICAgICAgICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQorICAgICAgICAg
ICAgYXV0byBpbmRleCA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJbmRleCIpOworICAgICAg
ICAgICAgYXV0byB4ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlgiKTsKKyAgICAgICAgICAg
IGF1dG8geSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJZIik7CiAgICAgICAgICAgICBtX2V2
ZW50U2VuZGVyUHJveHktPnVwZGF0ZVRvdWNoUG9pbnQoaW5kZXgsIHgsIHkpOwogICAgICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJTZXRU
b3VjaE1vZGlmaWVyIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
b2RpZmllcktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlm
aWVyIikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciA9IHN0YXRpY19j
YXN0PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBt
b2RpZmllcktleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBlbmFibGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJF
bmFibGUiKSk7Ci0gICAgICAgICAgICBib29sIGVuYWJsZSA9IHN0YXRpY19jYXN0PGJvb2w+KFdL
VUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBlbmFibGVLZXkuZ2V0KCkpKSkpOwotCisg
ICAgICAgICAgICBhdXRvIG1vZGlmaWVyID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlm
aWVyIik7CisgICAgICAgICAgICBhdXRvIGVuYWJsZSA9IGJvb2xlYW5WYWx1ZShkaWN0aW9uYXJ5
LCAiRW5hYmxlIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnNldFRvdWNoTW9k
aWZpZXIobW9kaWZpZXIsIGVuYWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIlNldFRvdWNoUG9pbnRSYWRpdXMiKSkgewot
ICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNYIikpOwotICAgICAgICAgICAgaW50IHgg
PSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5
LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNZIikpOwotICAg
ICAgICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQorICAgICAgICAgICAgYXV0byB4ID0gdWludDY0
VmFsdWUoZGljdGlvbmFyeSwgIlJhZGl1c1giKTsKKyAgICAgICAgICAgIGF1dG8geSA9IHVpbnQ2
NFZhbHVlKGRpY3Rpb25hcnksICJSYWRpdXNZIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVy
UHJveHktPnNldFRvdWNoUG9pbnRSYWRpdXMoeCwgeSk7CiAgICAgICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KQEAgLTIyNDksMTYgKzIxMjMsMTIg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21J
bmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZgogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJSZWxlYXNlVG91Y2hQb2lu
dCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAgICAg
ICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGluZGV4S2V5LmdldCgpKSkpKTsKLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQ
cm94eS0+cmVsZWFzZVRvdWNoUG9pbnQoaW5kZXgpOworICAgICAgICAgICAgbV9ldmVudFNlbmRl
clByb3h5LT5yZWxlYXNlVG91Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiSW5kZXgi
KSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNz
YWdlTmFtZSwgIkNhbmNlbFRvdWNoUG9pbnQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSW5kZXgiKSk7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpbmRleEtleS5nZXQoKSkpKSk7Ci0g
ICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmNhbmNlbFRvdWNoUG9pbnQoaW5kZXgpOwor
ICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5jYW5jZWxUb3VjaFBvaW50KHVpbnQ2NFZh
bHVlKGRpY3Rpb25hcnksICJJbmRleCIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0yMjc1LDE0ICsyMTQ1LDE2
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYKICAgICB9OwogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBbHdheXNBY2NlcHRDb29raWVzIikp
IHsKLSAgICAgICAgV0tCb29sZWFuUmVmIGFjY2VwdCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS0hUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5
ID0gV0tCb29sZWFuR2V0VmFsdWUoYWNjZXB0KSA/IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lB
bHdheXMgOiBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21h
aW47CisgICAgICAgIGF1dG8gcG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpCisgICAgICAgICAgICA/IGtXS0hUVFBDb29raWVB
Y2NlcHRQb2xpY3lBbHdheXMKKyAgICAgICAgICAgIDoga1dLSFRUUENvb2tpZUFjY2VwdFBvbGlj
eU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAgICAgICByZXR1cm4gc2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShwb2xpY3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29va2llcyIpKSB7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBh
Y2NlcHQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
V0tIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKGFjY2Vw
dCkgPyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50
RG9tYWluIDoga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9t
YWluOworICAgICAgICBhdXRvIHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKQorICAgICAgICAgICAgPyBrV0tIVFRQQ29va2ll
QWNjZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluCisgICAgICAgICAg
ICA6IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsK
ICAgICAgICAgcmV0dXJuIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfQogCkBAIC0yNDAzLDEyICsyMjc1LDggQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wgc2hvdWxkQmxvY2spCiAK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgYXV0byBwb2xpY3kgPSBzaG91bGRCbG9jayA/IGtXS1Bs
dWdpbkxvYWRDbGllbnRQb2xpY3lCbG9jayA6IGtXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3lBbGxv
dzsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lTmV0c2NhcGUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1
Z2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lRmxhc2ggPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5
ZXIucGx1Z2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbXB0eVN0cmluZyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLSAgICBXS0NvbnRl
eHRTZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCBlbXB0
eVN0cmluZy5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBlbXB0eVN0cmluZy5nZXQoKSk7Ci0g
ICAgV0tDb250ZXh0U2V0UGx1Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRleHQuZ2V0KCksIHBv
bGljeSwgZW1wdHlTdHJpbmcuZ2V0KCksIG5hbWVGbGFzaC5nZXQoKSwgZW1wdHlTdHJpbmcuZ2V0
KCkpOworICAgIFdLQ29udGV4dFNldFBsdWdpbkxvYWRDbGllbnRQb2xpY3kobV9jb250ZXh0Lmdl
dCgpLCBwb2xpY3ksIHRvV0soIiIpLmdldCgpLCB0b1dLKCJjb20uYXBwbGUudGVzdG5ldHNjYXBl
cGx1Z2luIikuZ2V0KCksIHRvV0soIiIpLmdldCgpKTsKKyAgICBXS0NvbnRleHRTZXRQbHVnaW5M
b2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCB0b1dLKCIiKS5nZXQoKSwg
dG9XSygiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbiIpLmdldCgpLCB0b1dLKCIi
KS5nZXQoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjQyMywyOSArMjI5MSwyNCBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKGNvbnN0IFN0cmluZyYgbW9kZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVm
PiBlbXB0eUFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gYWxsT3JpZ2lucyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3BlY2lm
aWNPcmlnaW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsb2NhbGhv
c3QiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGRmTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk15IHBlcnNvbmFsIFBERiIpKTsKLSAgICBX
S0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBhbGxPcmlnaW5zLmdl
dCgpLCBwZGZOYW1lLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsK
KyAgICBhdXRvIGVtcHR5QXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwog
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVOZXRzY2FwZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4i
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlTmV0c2NhcGUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhcHBsaWNhdGlvbi94LXdlYmtpdC10
ZXN0LW5ldHNjYXBlIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBtaW1l
VHlwZXNOZXRzY2FwZSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgV0tB
cnJheUFwcGVuZEl0ZW0obWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlTmV0c2NhcGUu
Z2V0KCkpOworICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCks
IHRvV0soIiIpLmdldCgpLCB0b1dLKCJNeSBwZXJzb25hbCBQREYiKS5nZXQoKSwgZW1wdHlBcnJh
eS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbmFtZVBkZiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktp
dCBidWlsdC1pbiBQREYiKSk7CisgICAgYXV0byBuYW1lTmV0c2NhcGUgPSB0b1dLKCJjb20uYXBw
bGUudGVzdG5ldHNjYXBlcGx1Z2luIik7CisgICAgYXV0byBtaW1lVHlwZXNOZXRzY2FwZSA9IGFk
b3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgV0tBcnJheUFwcGVuZEl0ZW0obWlt
ZVR5cGVzTmV0c2NhcGUuZ2V0KCksIHRvV0soImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0
c2NhcGUiKS5nZXQoKSk7CisgICAgYXV0byBuYW1lUGRmID0gdG9XSygiV2ViS2l0IGJ1aWx0LWlu
IFBERiIpOwogCiAgICAgaWYgKG1fdW5zdXBwb3J0ZWRQbHVnaW5Nb2RlID09ICJhbGxPcmlnaW5z
IikgewotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgp
LCBhbGxPcmlnaW5zLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBl
LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKLSAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVk
UGx1Z2luKG1fY29udGV4dC5nZXQoKSwgYWxsT3JpZ2lucy5nZXQoKSwgbmFtZVBkZi5nZXQoKSwg
ZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFk
ZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBuYW1lTmV0
c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsK
KyAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9X
SygiIikuZ2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXku
Z2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG1fdW5zdXBwb3J0ZWRQ
bHVnaW5Nb2RlID09ICJzcGVjaWZpY09yaWdpbiIpIHsKLSAgICAgICAgV0tDb250ZXh0QWRkU3Vw
cG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgc3BlY2lmaWNPcmlnaW4uZ2V0KCksIG5hbWVO
ZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkp
OwotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBz
cGVjaWZpY09yaWdpbi5nZXQoKSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1w
dHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2Nv
bnRleHQuZ2V0KCksIHRvV0soImxvY2FsaG9zdCIpLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCks
IG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tD
b250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygibG9jYWxob3N0
IikuZ2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMjQ5MSwxNCArMjM1NCwxMiBAQCBi
b29sIFRlc3RDb250cm9sbGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KFdLUGFnZVJlZiBwYWdlLCBXS1BybwogewogICAgIGlmIChtX3Nob3VsZExvZ0NhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpCiAgICAgICAgIG1fY3VycmVudEludm9jYXRpb24t
Pm91dHB1dFRleHQoImNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VcbiIpOwot
ICAgIFdLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWUgYXV0aGVudGljYXRpb25T
Y2hlbWUgPSBXS1Byb3RlY3Rpb25TcGFjZUdldEF1dGhlbnRpY2F0aW9uU2NoZW1lKHByb3RlY3Rp
b25TcGFjZSk7Ci0gICAgCi0gICAgaWYgKGF1dGhlbnRpY2F0aW9uU2NoZW1lID09IGtXS1Byb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVz
dGVkKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGhvc3QgPSB0b1NURChhZG9wdFdLKFdLUHJvdGVj
dGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkpOworICAgIGF1dG8gc2No
ZW1lID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRBdXRoZW50aWNhdGlvblNjaGVtZShwcm90ZWN0aW9u
U3BhY2UpOworICAgIGlmIChzY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRp
b25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQpIHsKKyAgICAgICAgYXV0byBo
b3N0ID0gdG9TVEQoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rpb25T
cGFjZSkpKTsKICAgICAgICAgcmV0dXJuIGhvc3QgPT0gImxvY2FsaG9zdCIgfHwgaG9zdCA9PSAi
MTI3LjAuMC4xIiB8fCAobV9hbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMg
JiYgbV9hbGxvd2VkSG9zdHMuZmluZChob3N0KSAhPSBtX2FsbG93ZWRIb3N0cy5lbmQoKSk7CiAg
ICAgfQotICAgIAotICAgIHJldHVybiBhdXRoZW50aWNhdGlvblNjaGVtZSA8PSBrV0tQcm90ZWN0
aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdlc3QgfHwgYXV0aGVudGljYXRpb25T
Y2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVPQXV0aDsKKyAg
ICByZXR1cm4gc2NoZW1lIDw9IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1l
SFRUUERpZ2VzdCB8fCBzY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVPQXV0aDsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTmF2aWdhdGlv
bihXS1BhZ2VSZWYgcGFnZSwgV0tOYXZpZ2F0aW9uUmVmIG5hdmlnYXRpb24pCkBAIC0yNTA2LDgg
KzIzNjcsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKFdLUGFn
ZVJlZiBwYWdlLCBXS05hdmlnYXRpb25SZWYgbmF2aWdhdAogICAgIGlmIChtX3N0YXRlICE9IFJl
c2V0dGluZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdr
VVJMID0gYWRvcHRXSyhXS0ZyYW1lQ29weVVSTChXS1BhZ2VHZXRNYWluRnJhbWUocGFnZSkpKTsK
LSAgICBpZiAoIVdLVVJMSXNFcXVhbCh3a1VSTC5nZXQoKSwgYmxhbmtVUkwoKSkpCisgICAgaWYg
KCFXS1VSTElzRXF1YWwoYWRvcHRXSyhXS0ZyYW1lQ29weVVSTChXS1BhZ2VHZXRNYWluRnJhbWUo
cGFnZSkpKS5nZXQoKSwgYmxhbmtVUkwoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZG9u
ZVJlc2V0dGluZyA9IHRydWU7CkBAIC0yNTI3LDcgKzIzODcsNyBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmIHBhZ2UsIFdL
QXV0aGVudAogICAgICAgICBtX3NlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3Vu
dCsrOwogCiAgICAgICAgIGlmIChtX2FsbG93c0FueVNTTENlcnRpZmljYXRlKSB7Ci0gICAgICAg
ICAgICBXS1JldGFpblB0cjxXS0NyZWRlbnRpYWxSZWY+IGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdL
Q3JlZGVudGlhbENyZWF0ZSh0b1dLKCJhY2NlcHQgc2VydmVyIHRydXN0IikuZ2V0KCksIHRvV0so
IiIpLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSk7CisgICAgICAgICAgICBh
dXRvIGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh0b1dLKCJhY2NlcHQg
c2VydmVyIHRydXN0IikuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lz
dGVuY2VOb25lKSk7CiAgICAgICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5l
clVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgY3JlZGVudGlhbC5nZXQoKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1NDEsOSArMjQwMSw5IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYg
cGFnZSwgV0tBdXRoZW50CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGQ6OnN0cmlu
ZyBob3N0ID0gdG9TVEQoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rp
b25TcGFjZSkpLmdldCgpKTsKKyAgICBhdXRvIGhvc3QgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdL
UHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkpOwogICAgIGlu
dCBwb3J0ID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRQb3J0KHByb3RlY3Rpb25TcGFjZSk7Ci0gICAg
U3RyaW5nIG1lc3NhZ2UgPSBtYWtlU3RyaW5nKGhvc3QuY19zdHIoKSwgJzonLCBwb3J0LCAiIC0g
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIC0gIiwgdG9TdHJpbmcoYXV0aGVudGlj
YXRpb25TY2hlbWUpLCAiIC0gIik7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSBtYWtlU3RyaW5nKGhv
c3QsICc6JywgcG9ydCwgIiAtIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAtICIs
IHRvU3RyaW5nKGF1dGhlbnRpY2F0aW9uU2NoZW1lKSwgIiAtICIpOwogICAgIGlmICghbV9oYW5k
bGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKQogICAgICAgICBtZXNzYWdlLmFwcGVuZCgiU2lt
dWxhdGluZyBjYW5jZWxsZWQgYXV0aGVudGljYXRpb24gc2hlZXRcbiIpOwogICAgIGVsc2UKQEAg
LTI1NTQsMTMgKzI0MTQsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKFdLUGFnZVJlZiBwYWdlLCBXS0F1dGhlbnQKICAgICAgICAgV0tB
dXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlzdGVu
ZXIsIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB1c2VybmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9h
dXRoZW50aWNhdGlvblVzZXJuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gcGFzc3dvcmQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKG1fYXV0aGVudGljYXRpb25QYXNzd29yZC51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tDcmVkZW50aWFsUmVmPiBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRpYWxD
cmVhdGUodXNlcm5hbWUuZ2V0KCksIHBhc3N3b3JkLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lz
dGVuY2VGb3JTZXNzaW9uKSk7CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRl
bnRpYWxDcmVhdGUodG9XSyhtX2F1dGhlbnRpY2F0aW9uVXNlcm5hbWUpLmdldCgpLCB0b1dLKG1f
YXV0aGVudGljYXRpb25QYXNzd29yZCkuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZUZv
clNlc3Npb24pKTsKICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRl
bnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgY3JlZGVudGlhbC5nZXQoKSk7CiB9CiAKLSAgICAKKwog
Ly8gV0tDb250ZXh0RG93bmxvYWRDbGllbnQKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZG93bmxv
YWREaWRTdGFydChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tEb3dubG9hZFJlZiBkb3dubG9hZCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTI3MDQsOSArMjU2Miw5IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiAgICAgZGVj
aWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKTsKIH0K
IAotdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91Ymxl
IGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUg
aGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNG
bG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCkKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3Vi
bGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8
ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKQogewotICAgIG1fZ2Vv
bG9jYXRpb25Qcm92aWRlci0+c2V0UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJh
Y3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ks
IGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVl
ZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgbV9nZW9sb2Nh
dGlvblByb3ZpZGVyLT5zZXRQb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwg
YWx0aXR1ZGUsIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkLCBmbG9vckxldmVsKTsK
IH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2
YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSkKQEAgLTI4NTYsOSArMjcxNCw3
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2VyTWVkaWFQZXJtaXNzaW9u
Rm9yT3JpZ2luKFdLRnJhbWVSZWYgZnJhbWUsCiB7CiAgICAgYXV0byBvcmlnaW5IYXNoID0gdXNl
ck1lZGlhT3JpZ2luSGFzaCh1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgdG9wTGV2ZWxEb2N1bWVu
dE9yaWdpbik7CiAgICAgYXV0byBzYWx0ID0gc2FsdEZvck9yaWdpbihmcmFtZSwgb3JpZ2luSGFz
aCk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNhbHRTdHJpbmcgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNhbHQudXRmOCgpLmRhdGEoKSkpOwotCi0gICAg
V0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tTZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGNoZWNrUmVx
dWVzdCwgc2FsdFN0cmluZy5nZXQoKSwgc2V0dGluZ3NGb3JPcmlnaW4ob3JpZ2luSGFzaCkucGVy
c2lzdGVudFBlcm1pc3Npb24oKSk7CisgICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tTZXRV
c2VyTWVkaWFBY2Nlc3NJbmZvKGNoZWNrUmVxdWVzdCwgdG9XSyhzYWx0KS5nZXQoKSwgc2V0dGlu
Z3NGb3JPcmlnaW4ob3JpZ2luSGFzaCkucGVyc2lzdGVudFBlcm1pc3Npb24oKSk7CiB9CiAKIGJv
b2wgVGVzdENvbnRyb2xsZXI6OmhhbmRsZURldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNz
UmVxdWVzdChXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKQEAgLTI5MTQsOCArMjc3MCw4IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0SWZQb3NzaWJsZSgpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGF1ZGlvRGV2aWNlVUlEcyA9IGFkb3B0V0so
V0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdEF1ZGlvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IHZpZGVvRGV2aWNlVUlEcyA9IGFkb3B0V0so
V0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFZpZGVvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7Cisg
ICAgICAgIGF1dG8gYXVkaW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1VzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0QXVkaW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKKyAgICAgICAgYXV0byB2aWRlb0Rl
dmljZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RWaWRlb0Rldmlj
ZVVJRHMocmVxdWVzdCkpOwogCiAgICAgICAgIGlmICghV0tBcnJheUdldFNpemUodmlkZW9EZXZp
Y2VVSURzLmdldCgpKSAmJiAhV0tBcnJheUdldFNpemUoYXVkaW9EZXZpY2VVSURzLmdldCgpKSkg
ewogICAgICAgICAgICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdERlbnkocmVxdWVzdCwg
a1dLTm9Db25zdHJhaW50cyk7CkBAIC0yOTI2LDEzICsyNzgyLDEzIEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJs
ZSgpCiAgICAgICAgIGlmIChXS0FycmF5R2V0U2l6ZSh2aWRlb0RldmljZVVJRHMuZ2V0KCkpKQog
ICAgICAgICAgICAgdmlkZW9EZXZpY2VVSUQgPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVm
PihXS0FycmF5R2V0SXRlbUF0SW5kZXgodmlkZW9EZXZpY2VVSURzLmdldCgpLCAwKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHZpZGVvRGV2aWNlVUlEID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgICAgICAgICAgdmlkZW9EZXZpY2VVSUQgPSB0
b1dLKCIiKTsKIAogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9EZXZpY2VV
SUQ7CiAgICAgICAgIGlmIChXS0FycmF5R2V0U2l6ZShhdWRpb0RldmljZVVJRHMuZ2V0KCkpKQog
ICAgICAgICAgICAgYXVkaW9EZXZpY2VVSUQgPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVm
PihXS0FycmF5R2V0SXRlbUF0SW5kZXgoYXVkaW9EZXZpY2VVSURzLmdldCgpLCAwKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGF1ZGlvRGV2aWNlVUlEID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgICAgICAgICAgYXVkaW9EZXZpY2VVSUQgPSB0
b1dLKCIiKTsKIAogICAgICAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0QWxsb3cocmVx
dWVzdCwgYXVkaW9EZXZpY2VVSUQuZ2V0KCksIHZpZGVvRGV2aWNlVUlELmdldCgpKTsKICAgICB9
CkBAIC0zMDU2LDEyICsyOTEyLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkTmF2aWdhdGVX
aXRoTmF2aWdhdGlvbkRhdGEoV0tOYXZpZ2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW8KICAgICBpZiAo
IW1fc2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gVVJMCiAgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5VVJM
KG5hdmlnYXRpb25EYXRhKSk7CiAgICAgYXV0byB1cmxTdHJpbmcgPSB0b1dURlN0cmluZyhhZG9w
dFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKSk7Ci0gICAgLy8gVGl0bGUKICAgICBhdXRv
IHRpdGxlID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weVRpdGxlKG5h
dmlnYXRpb25EYXRhKSkpOwotICAgIC8vIEhUVFAgbWV0aG9kCiAgICAgYXV0byByZXF1ZXN0ID0g
YWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weU9yaWdpbmFsUmVxdWVzdChuYXZpZ2F0aW9uRGF0
YSkpOwogICAgIGF1dG8gbWV0aG9kID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTFJlcXVlc3RD
b3B5SFRUUE1ldGhvZChyZXF1ZXN0LmdldCgpKSkpOwogCkBAIC0zMjA2LDcgKzMwNTksNyBAQCB2
b2lkIGdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2sodm9pZCogdXNlckRhdGEsIFdL
QXJyYXlSZWYgZG9tYWluTGlzdCkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdERvbWFpbnM7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKGRvbWFpbkxpc3Qp
OyBpKyspIHsKLSAgICAgICAgYXV0byBkb21haW4gPSAgcmVpbnRlcnByZXRfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbkxpc3QsIGkpKTsKKyAgICAgICAgYXV0
byBkb21haW4gPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0
SW5kZXgoZG9tYWluTGlzdCwgaSkpOwogICAgICAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6dmVjdG9y
PGNoYXI+KFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShkb21haW4pKTsKICAgICAg
ICAgYXV0byBzdHJpbmdMZW5ndGggPSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGRvbWFpbiwgYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CiAKQEAgLTM5NzgsNyArMzgzMSw3IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpCiB2b2lkIFRlc3RD
b250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBT
dHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7CiAgICAgSW5BcHBCcm93c2VyUHJpdmFjeUNhbGxi
YWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKLSAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURh
dGFTdG9yZSgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1bmRsZUlk
ZW50aWZpZXIudXRmOCgpLmRhdGEoKSkpLmdldCgpLCAmY29udGV4dCwgaW5BcHBCcm93c2VyUHJp
dmFjeVZvaWRSZXN1bHRDYWxsYmFjayk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlVXBkYXRlQnVu
ZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRh
U3RvcmUoKSwgdG9XSyhidW5kbGVJZGVudGlmaWVyKS5nZXQoKSwgJmNvbnRleHQsIGluQXBwQnJv
d3NlclByaXZhY3lWb2lkUmVzdWx0Q2FsbGJhY2spOwogICAgIHJ1blVudGlsKGNvbnRleHQuZG9u
ZSwgbm9UaW1lb3V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
CmluZGV4IGY5NGQ1N2MxNDdiMzE2ZjA3OGZhODVmMjIwZjQwNzYwOTQxMTNjOGMuLmZmODM5NGVj
MDM4NzdhNmRiYzBkYzRiM2U0OGMwZWY0ZjNmM2IzMzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmgKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ly8gR2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCk7
Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRv
dWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBk
b3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0
aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29s
IHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRv
dWJsZSBmbG9vckxldmVsKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRv
dWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25h
bDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9w
dGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8
ZG91YmxlPiBmbG9vckxldmVsKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
VW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UpOwogICAgIHZvaWQgaGFu
ZGxlR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RSZWYpOwogICAgIGJvb2wgaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IGE1YjZkZDA1
NTgwYWUwYzJkOTU3MDc3ZGZlNDUwYTQ4NmU2ZDAxZWMuLjUwMTI3ZjY3ODQxZTAzYzU1NjhlMTll
OTkxMTc5N2M4ZmMyZDZiODIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRp
b24uY3BwCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VGVzdEludm9jYXRpb24uaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlVJU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgpAQCAtNjYsMjEgKzY2LDE3IEBA
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXVFIgewogCitzdGF0aWMgdm9pZCBw
b3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIGJvZHkgPSBudWxscHRy
KQoreworICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCBi
b2R5KTsKK30KKwogVGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKFdLVVJMUmVmIHVybCwg
Y29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgOiBtX29wdGlvbnMob3B0aW9ucykKICAg
ICAsIG1fdXJsKHVybCkKICAgICAsIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoUnVuTG9vcDo6
bWFpbigpLCB0aGlzLCAmVGVzdEludm9jYXRpb246OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmly
ZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0so
V0tVUkxDb3B5U3RyaW5nKG1fdXJsLmdldCgpKSk7Ci0KLSAgICBzaXplX3Qgc3RyaW5nTGVuZ3Ro
ID0gV0tTdHJpbmdHZXRMZW5ndGgodXJsU3RyaW5nLmdldCgpKTsKLQotICAgIFZlY3RvcjxjaGFy
PiB1cmxWZWN0b3I7Ci0gICAgdXJsVmVjdG9yLnJlc2l6ZShzdHJpbmdMZW5ndGggKyAxKTsKLQot
ICAgIFdLU3RyaW5nR2V0VVRGOENTdHJpbmcodXJsU3RyaW5nLmdldCgpLCB1cmxWZWN0b3IuZGF0
YSgpLCBzdHJpbmdMZW5ndGggKyAxKTsKLQotICAgIG1fdXJsU3RyaW5nID0gU3RyaW5nKHVybFZl
Y3Rvci5kYXRhKCksIHN0cmluZ0xlbmd0aCk7CisgICAgbV91cmxTdHJpbmcgPSB0b1dURlN0cmlu
ZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtX3VybC5nZXQoKSkpLmdldCgpKTsKIAogICAgIC8v
IEZJWE1FOiBBdm9pZCBtdXRhdGluZyB0aGUgc2V0dGluZyB2aWEgYSB0ZXN0IGRpcmVjdG9yeSBs
aWtlIHRoaXMuCiAgICAgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0gdXJsQ29udGFpbnMoImxv
YWRpbmcvIikgJiYgIXVybENvbnRhaW5zKCI6Ly9sb2NhbGhvc3QiKTsKQEAgLTEyOSwyOCArMTI1
LDEyIEBAIGJvb2wgVGVzdEludm9jYXRpb246OnNob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFj
a3MoKSBjb25zdAogCiBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBUZXN0SW52
b2NhdGlvbjo6Y3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gYmVnaW5UZXN0TWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdXNlRmxleGlibGVWaWV3cG9ydEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlVzZUZsZXhpYmxlVmlld3BvcnQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiB1c2VGbGV4aWJsZVZpZXdwb3J0VmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShvcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCkpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIHVzZUZsZXhpYmxlVmlld3BvcnRLZXku
Z2V0KCksIHVzZUZsZXhpYmxlVmlld3BvcnRWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gZHVtcFBpeGVsc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkR1bXBQaXhlbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBkdW1wUGl4ZWxzVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBQaXhlbHMp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCBk
dW1wUGl4ZWxzS2V5LmdldCgpLCBkdW1wUGl4ZWxzVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVvdXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJUaW1lb3V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB0
aW1lb3V0VmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1fdGltZW91dC5taWxsaXNlY29u
ZHMoKSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0
KCksIHRpbWVvdXRLZXkuZ2V0KCksIHRpbWVvdXRWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
VmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
cikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCks
IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycktleS5nZXQoKSwgZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzVmFsdWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9wdGlvbnMoKS5hZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdp
blRlc3RNZXNzYWdlQm9keS5nZXQoKSwgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNLZXku
Z2V0KCksIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzVmFsdWUuZ2V0KCkpOwotCisgICAg
YXV0byBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlVzZUZsZXhpYmxl
Vmlld3BvcnQiLCBvcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCk7CisgICAgc2V0VmFsdWUo
YmVnaW5UZXN0TWVzc2FnZUJvZHksICJEdW1wUGl4ZWxzIiwgbV9kdW1wUGl4ZWxzKTsKKyAgICBz
ZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlRpbWVvdXQiLCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4obV90aW1lb3V0Lm1pbGxpc2Vjb25kcygpKSk7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0
TWVzc2FnZUJvZHksICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBtX2R1bXBKU0NvbnNvbGVM
b2dJblN0ZEVycik7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJhZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIG9wdGlvbnMoKS5hZGRpdGlvbmFsU3VwcG9ydGVkSW1h
Z2VUeXBlcy5jX3N0cigpKTsKICAgICByZXR1cm4gYmVnaW5UZXN0TWVzc2FnZUJvZHk7CiB9CiAK
QEAgLTE2OCw5ICsxNDgsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbnZva2UoKQogCiAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBjbGVhciBvdXQgdmlzaXRlZCBsaW5rcyBoZXJlLgogCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQmVnaW5UZXN0IikpOwotICAgIGF1dG8gYmVnaW5UZXN0TWVz
c2FnZUJvZHkgPSBjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCk7Ci0gICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBiZWdpblRlc3RNZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJCZWdpblRlc3QiLCBjcmVhdGVUZXN0U2V0
dGluZ3NEaWN0aW9uYXJ5KCkuZ2V0KCkpOwogCiAgICAgbV9zdGFydGVkVGVzdGluZyA9IHRydWU7
CiAKQEAgLTMyNywxODUgKzMwNSwxMDQgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFj
ayIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJp
bmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1lc3NhZ2VCb2R5U3RyaW5nID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZUJvZHlTdHJpbmcsICJCZWdpblRlc3QiKSkg
eworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keSksICJCZWdpblRlc3QiKSkgewogICAgICAgICAgICAgbV9nb3RJbml0aWFsUmVz
cG9uc2UgPSB0cnVlOwogICAgICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm5v
dGlmeURvbmUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRG9uZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBX
S0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0
aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiUGl4ZWxSZXN1bHRJc1BlbmRpbmciKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiBwaXhlbFJlc3VsdElzUGVuZGluZyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBpeGVsUmVzdWx0SXNQ
ZW5kaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBXS0Jv
b2xlYW5HZXRWYWx1ZShwaXhlbFJlc3VsdElzUGVuZGluZyk7Ci0KKyAgICAgICAgYXV0byBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAg
ICBtX3BpeGVsUmVzdWx0SXNQZW5kaW5nID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIlBpeGVsUmVzdWx0SXNQZW5kaW5nIik7CiAgICAgICAgIGlmICghbV9waXhlbFJlc3Vs
dElzUGVuZGluZykgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVs
UmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxS
ZXN1bHQiKSk7Ci0gICAgICAgICAgICBtX3BpeGVsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0tJbWFn
ZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBp
eGVsUmVzdWx0S2V5LmdldCgpKSk7CisgICAgICAgICAgICBtX3BpeGVsUmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8V0tJbWFnZVJlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUGl4ZWxSZXN1
bHQiKSk7CiAgICAgICAgICAgICBBU1NFUlQoIW1fcGl4ZWxSZXN1bHQgfHwgbV9kdW1wUGl4ZWxz
KTsKICAgICAgICAgfQotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXBhaW50
UmVjdHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXBhaW50
UmVjdHMiKSk7Ci0gICAgICAgIG1fcmVwYWludFJlY3RzID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHJlcGFp
bnRSZWN0c0tleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBh
dWRpb1Jlc3VsdEtleSA9ICBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
dWRpb1Jlc3VsdCIpKTsKLSAgICAgICAgbV9hdWRpb1Jlc3VsdCA9IHN0YXRpY19jYXN0PFdLRGF0
YVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGF1
ZGlvUmVzdWx0S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgbV9yZXBhaW50UmVjdHMgPSBzdGF0aWNf
Y2FzdDxXS0FycmF5UmVmPih2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJSZXBhaW50UmVj
dHMiKSk7CisgICAgICAgIG1fYXVkaW9SZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0RhdGFSZWY+KHZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkF1ZGlvUmVzdWx0IikpOwogICAgICAgICBkb25l
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlRleHRPdXRwdXQiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS1N0cmluZ1JlZiB0ZXh0T3V0cHV0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgbV90ZXh0T3V0cHV0LmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0T3V0
cHV0KSk7CisgICAgICAgIG1fdGV4dE91dHB1dC5hcHBlbmQodG9XVEZTdHJpbmcoc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkR1bXBUb1N0ZEVyciIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRleHRPdXRwdXQgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwg
dG9XVEZTdHJpbmcodGV4dE91dHB1dCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiJXMiLCB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpLnV0Zjgo
KS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgYmVmb3JlVW5sb2FkUmV0dXJuVmFs
dWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKFdLQm9v
bGVhbkdldFZhbHVlKGJlZm9yZVVubG9hZFJldHVyblZhbHVlKSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShib29sZWFuVmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFkZENocm9tZUlucHV0
RmllbGQiKSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+YWRkQ2hyb21lSW5wdXRGaWVsZCgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDYWxsQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIpKSB7CiAgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5yZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxSZW1vdmVDaHJvbWVJbnB1dEZpZWxk
Q2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbFJlbW92ZUNocm9t
ZUlucHV0RmllbGRDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRm9jdXNXZWJW
aWV3IikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPm1ha2VXZWJWaWV3Rmlyc3RSZXNwb25kZXIoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2FsbEZvY3VzV2ViVmlld0NhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBwb3N0UGFnZU1l
c3NhZ2UoIkNhbGxGb2N1c1dlYlZpZXdDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRCYWNraW5nU2NhbGVGYWN0b3IiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBkb3VibGUgYmFja2lu
Z1NjYWxlRmFjdG9yID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4o
bWVzc2FnZUJvZHkpKTsKLSAgICAgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9y
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGJhY2tp
bmdTY2FsZUZhY3Rvcik7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbFNldEJh
Y2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRv
SW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBXS1BhZ2VTZXRDdXN0b21C
YWNraW5nU2NhbGVGYWN0b3IoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJDYWxsU2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2siKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgdWludDY0X3Qgbm90aWZpY2F0
aW9uSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbklE
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRkc1Zpc2l0ZWRMaW5rcyIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlua3MoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgV0tCb29sZWFu
R2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlua3Mo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgYm9vbGVh
blZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEdlb2xvY2F0aW9u
UGVybWlzc2lvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdL
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oV0tCb29sZWFu
R2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBz
dGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbGF0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImxhdGl0dWRlIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBsYXRp
dHVkZVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBsYXRpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAgICAg
IGRvdWJsZSBsYXRpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUobGF0aXR1ZGVXSyk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvbmdpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibG9uZ2l0dWRlIikpOwotICAgICAgICBXS0RvdWJs
ZVJlZiBsb25naXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbG9uZ2l0dWRlS2V5V0suZ2V0KCkp
KTsKLSAgICAgICAgZG91YmxlIGxvbmdpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUobG9uZ2l0dWRl
V0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhY2N1cmFjeUtleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjdXJhY3kiKSk7Ci0gICAg
ICAgIFdLRG91YmxlUmVmIGFjY3VyYWN5V0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGFjY3VyYWN5S2V5
V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGFjY3VyYWN5ID0gV0tEb3VibGVHZXRWYWx1ZShh
Y2N1cmFjeVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNB
bHRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJv
dmlkZXNBbHRpdHVkZSIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzQWx0aXR1ZGVX
SyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVzQWx0aXR1ZGVLZXlXSy5nZXQoKSkpOwotICAg
ICAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc0Fs
dGl0dWRlV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVkZUtl
eVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWx0aXR1ZGUiKSk7
Ci0gICAgICAgIFdLRG91YmxlUmVmIGFsdGl0dWRlV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGFsdGl0
dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGFsdGl0dWRlID0gV0tEb3VibGVHZXRW
YWx1ZShhbHRpdHVkZVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJv
dmlkZXNBbHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kiKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5ID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNBbHRpdHVkZUFjY3Vy
YWN5V0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVkZUFjY3Vy
YWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVk
ZUFjY3VyYWN5IikpOwotICAgICAgICBXS0RvdWJsZVJlZiBhbHRpdHVkZUFjY3VyYWN5V0sgPSBz
dGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGFsdGl0dWRlQWNjdXJhY3lLZXlXSy5nZXQoKSkpOwotICAgICAgICBk
b3VibGUgYWx0aXR1ZGVBY2N1cmFjeSA9IFdLRG91YmxlR2V0VmFsdWUoYWx0aXR1ZGVBY2N1cmFj
eVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNIZWFkaW5n
S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0hl
YWRpbmciKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwcm92aWRlc0hlYWRpbmdXSyA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHByb3ZpZGVzSGVhZGluZ0tleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wg
cHJvdmlkZXNIZWFkaW5nID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNIZWFkaW5nV0spOwot
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoZWFkaW5nS2V5V0sgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoZWFkaW5nIikpOwotICAgICAgICBXS0Rv
dWJsZVJlZiBoZWFkaW5nV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhlYWRpbmdLZXlXSy5nZXQoKSkp
OwotICAgICAgICBkb3VibGUgaGVhZGluZyA9IFdLRG91YmxlR2V0VmFsdWUoaGVhZGluZ1dLKTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNTcGVlZEtleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNTcGVlZCIpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzU3BlZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHByb3ZpZGVzU3BlZWRLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzU3BlZWQg
PSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc1NwZWVkV0spOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzcGVlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygic3BlZWQiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNwZWVkV0sgPSBzdGF0
aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHNwZWVkS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIHNwZWVkID0g
V0tEb3VibGVHZXRWYWx1ZShzcGVlZFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gcHJvdmlkZXNGbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJwcm92aWRlc0Zsb29yTGV2ZWwiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiBwcm92aWRlc0Zsb29yTGV2ZWxXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVzRmxvb3JM
ZXZlbEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsID0gV0tC
b29sZWFuR2V0VmFsdWUocHJvdmlkZXNGbG9vckxldmVsV0spOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBmbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJmbG9vckxldmVsIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBmbG9v
ckxldmVsV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZsb29yTGV2ZWxLZXlXSy5nZXQoKSkpOwotICAg
ICAgICBkb3VibGUgZmxvb3JMZXZlbCA9IFdLRG91YmxlR2V0VmFsdWUoZmxvb3JMZXZlbFdLKTsK
LQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUs
IGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHBy
b3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxv
b3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBsYXRpdHVkZSA9
IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImxhdGl0dWRlIik7CisgICAgICAg
IGF1dG8gbG9uZ2l0dWRlID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAibG9u
Z2l0dWRlIik7CisgICAgICAgIGF1dG8gYWNjdXJhY3kgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJhY2N1cmFjeSIpOworICAgICAgICBhdXRvIGFsdGl0dWRlID0gb3B0aW9u
YWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJhbHRpdHVkZSIpOworICAgICAg
ICBhdXRvIGFsdGl0dWRlQWNjdXJhY3kgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgImFsdGl0dWRlQWNjdXJhY3kiKTsKKyAgICAgICAgYXV0byBoZWFkaW5nID0g
b3B0aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJoZWFkaW5nIik7Cisg
ICAgICAgIGF1dG8gc3BlZWQgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgInNwZWVkIik7CisgICAgICAgIGF1dG8gZmxvb3JMZXZlbCA9IG9wdGlvbmFsRG91Ymxl
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiZmxvb3JMZXZlbCIpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1
ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLCBhbHRpdHVkZUFjY3VyYWN5LCBoZWFk
aW5nLCBzcGVlZCwgZmxvb3JMZXZlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
U3RyaW5nUmVmIGVycm9yTWVzc2FnZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdl
Qm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSA9IHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihlcnJvck1lc3NhZ2UpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVzZXJN
ZWRpYVBlcm1pc3Npb24oV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGJvb2xlYW5W
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MTUsMTE3
ICs0MTIsNjYgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5q
ZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZXJNZWRpYVBlcnNp
c3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
cGVybWlzc2lvbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
cGVybWlzc2lvbiIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBlcm1pc3Npb25XSyA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHBlcm1pc3Npb25LZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHBlcm1p
c3Npb24gPSBXS0Jvb2xlYW5HZXRWYWx1ZShwZXJtaXNzaW9uV0spOwotCi0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbldLID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBvcmlnaW5LZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwYXJl
bnRPcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGFyZW50T3JpZ2luS2V5LmdldCgpKSk7Ci0K
KyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVz
c2FnZUJvZHkpOworICAgICAgICBhdXRvIHBlcm1pc3Npb24gPSBib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAicGVybWlzc2lvbiIpOworICAgICAgICBhdXRvIG9yaWdpbldLID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAib3JpZ2luIik7CisgICAgICAgIGF1
dG8gcGFyZW50T3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJw
YXJlbnRPcmlnaW4iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVz
ZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Npb24sIG9yaWdpbldL
LCBwYXJlbnRPcmlnaW5XSyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlc2V0VXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBX
S0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0
aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9y
aWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IG9yaWdpbktleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBw
YXJlbnRPcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJw
YXJlbnRPcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbldLID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBwYXJlbnRPcmlnaW5LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAg
IGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgYXV0byBvcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIm9yaWdpbiIpOworICAgICAgICBhdXRvIHBhcmVudE9yaWdpbldLID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGFyZW50T3JpZ2luIik7CiAgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5yZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291
bnRGb3JPcmlnaW4ob3JpZ2luV0ssIHBhcmVudE9yaWdpbldLKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tE
aWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBlbmFibGVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJl
bmFibGVkIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgZW5hYmxlZEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgZW5hYmxlZCA9IFdLQm9v
bGVhbkdldFZhbHVlKGVuYWJsZWRXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHBlcm1pc3NpdmVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoInBlcm1pc3NpdmUiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwZXJtaXNzaXZlV0sgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBwZXJtaXNzaXZlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBw
ZXJtaXNzaXZlID0gV0tCb29sZWFuR2V0VmFsdWUocGVybWlzc2l2ZVdLKTsKLQorICAgICAgICBh
dXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7
CisgICAgICAgIGF1dG8gZW5hYmxlZCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJlbmFibGVkIik7CisgICAgICAgIGF1dG8gcGVybWlzc2l2ZSA9IGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJwZXJtaXNzaXZlIik7CiAgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShlbmFibGVkLCBwZXJtaXNz
aXZlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0SGlkZGVuIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gaXNJbml0aWFsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJoaWRkZW4iKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBoaWRkZW5XSyA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGlzSW5pdGlhbEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgaGlk
ZGVuID0gV0tCb29sZWFuR2V0VmFsdWUoaGlkZGVuV0spOwotCi0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRIaWRkZW4oaGlkZGVuKTsKKyAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJoaWRkZW4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlByb2Nlc3NX
b3JrUXVldWUiKSkgewotICAgICAgICBpZiAoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndv
cmtRdWV1ZU1hbmFnZXIoKS5wcm9jZXNzV29ya1F1ZXVlKCkpIHsKLSAgICAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIldvcmtRdWV1ZVByb2Nlc3NlZENhbGxiYWNrIikpOwotICAgICAgICAg
ICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKLSAg
ICAgICAgfQorICAgICAgICBpZiAoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1
ZU1hbmFnZXIoKS5wcm9jZXNzV29ya1F1ZXVlKCkpCisgICAgICAgICAgICBwb3N0UGFnZU1lc3Nh
Z2UoIldvcmtRdWV1ZVByb2Nlc3NlZENhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1
ZXVlQmFja05hdmlnYXRpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBzdGVwQ291
bnQgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9k
eSkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdl
cigpLnF1ZXVlQmFja05hdmlnYXRpb24oc3RlcENvdW50KTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUJhY2tOYXZpZ2F0aW9uKHVp
bnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlRm9yd2Fy
ZE5hdmlnYXRpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBzdGVwQ291bnQgPSBX
S1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1
ZXVlRm9yd2FyZE5hdmlnYXRpb24oc3RlcENvdW50KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHVp
bnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9hZCIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9u
YXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbG9hZERhdGFEaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoInVybCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdXJsV0sgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0
YURpY3Rpb25hcnksIHVybEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB0YXJnZXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJ0YXJnZXQiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRhcmdldFdLID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5
LCB0YXJnZXRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c2hvdWxkT3BlbkV4dGVybmFsVVJMc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWVXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIHNob3VsZE9w
ZW5FeHRlcm5hbFVSTHNLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZCh0b1dURlN0cmluZyh1cmxXSyks
IHRvV1RGU3RyaW5nKHRhcmdldFdLKSwgV0tCb29sZWFuR2V0VmFsdWUoc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1ZhbHVlV0spKTsKKyAgICAgICAgYXV0byBsb2FkRGF0YURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHVybCA9IHRvV1RGU3RyaW5n
KHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgInVybCIpKTsKKyAgICAgICAgYXV0byB0
YXJnZXQgPSB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJ0YXJn
ZXQiKSk7CisgICAgICAgIGF1dG8gc2hvdWxkT3BlbkV4dGVybmFsVVJMcyA9IGJvb2xlYW5WYWx1
ZShsb2FkRGF0YURpY3Rpb25hcnksICJzaG91bGRPcGVuRXh0ZXJuYWxVUkxzIik7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2Fk
KHVybCwgdGFyZ2V0LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiUXVldWVMb2FkSFRNTFN0cmluZyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rp
b25hcnlSZWYgbG9hZERhdGFEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVm
PihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNvbnRl
bnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb250ZW50Iikp
OwotICAgICAgICBXS1N0cmluZ1JlZiBjb250ZW50V0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIGNvbnRlbnRL
ZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYmFzZVVSTEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImJhc2VVUkwiKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIGJhc2VVUkxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgYmFzZVVSTEtleS5n
ZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJsZVVS
TEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVucmVhY2hhYmxl
VVJMIikpOwotICAgICAgICBXS1N0cmluZ1JlZiB1bnJlYWNoYWJsZVVSTFdLID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9u
YXJ5LCB1bnJlYWNoYWJsZVVSTEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbG9hZERhdGFE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBj
b250ZW50V0sgPSBzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJjb250ZW50Iik7Cisg
ICAgICAgIGF1dG8gYmFzZVVSTFdLID0gc3RyaW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAi
YmFzZVVSTCIpOworICAgICAgICBhdXRvIHVucmVhY2hhYmxlVVJMV0sgPSBzdHJpbmdWYWx1ZShs
b2FkRGF0YURpY3Rpb25hcnksICJ1bnJlYWNoYWJsZVVSTCIpOwogICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZEhUTUxTdHJpbmco
dG9XVEZTdHJpbmcoY29udGVudFdLKSwgYmFzZVVSTFdLID8gdG9XVEZTdHJpbmcoYmFzZVVSTFdL
KSA6IFN0cmluZygpLCB1bnJlYWNoYWJsZVVSTFdLID8gdG9XVEZTdHJpbmcodW5yZWFjaGFibGVV
UkxXSykgOiBTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MzYsMTU0ICs0
ODIsMTE3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUxvYWRpbmdTY3JpcHQi
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5n
R2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5nKHNj
cmlwdCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZU5vbkxvYWRpbmdTY3JpcHQiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53
b3JrUXVldWVNYW5hZ2VyKCkucXVldWVOb25Mb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5nKHNjcmlw
dCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29u
dGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRSZWplY3RzUHJvdGVj
dGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoV0tCb29sZWFu
R2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhhbmRsZXNBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNo
b3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
aG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFdLQm9vbGVhbkdl
dFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
aG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRMb2dEb3dubG9h
ZENhbGxiYWNrcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzKFdLQm9vbGVh
bkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVzZXJuYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgdXNlcm5hbWUgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKHRvV1RGU3RyaW5nKHVzZXJuYW1lKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS1N0cmluZ1JlZiBwYXNzd29yZCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHBhc3N3b3JkID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXV0aGVu
dGljYXRpb25QYXNzd29yZCh0b1dURlN0cmluZyhwYXNzd29yZCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRCbG9ja0FsbFBsdWdpbnMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFu
UmVmIHNob3VsZEJsb2NrID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRCbG9ja0FsbFBsdWdpbnMo
V0tCb29sZWFuR2V0VmFsdWUoc2hvdWxkQmxvY2spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldEJsb2NrQWxsUGx1Z2lucyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0UGx1Z2luU3VwcG9ydGVkTW9kZSIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1vZGUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
bWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBtb2RlID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0UGx1Z2lu
U3VwcG9ydGVkTW9kZSh0b1dURlN0cmluZyhtb2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5IikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxk
RGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lkZU5h
dmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXki
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkoV0tCb29sZWFu
R2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheShib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxl
ZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoV0tCb29sZWFuR2V0VmFsdWUo
dmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE5hdmlnYXRp
b25HZXN0dXJlc0VuYWJsZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEln
bm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxp
bWl0cyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRG93
bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREb3dubG9hZFVuZGlz
cGxheWFibGVNSU1FVHlwZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3Mi
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKFdL
Qm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNz
U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9u
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoV0tCb29s
ZWFuR2V0VmFsdWUodmFsdWUpLCB0cnVlKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKGJvb2xlYW5W
YWx1ZShtZXNzYWdlQm9keSksIHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0
aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91
bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSwgZmFsc2Up
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3Vs
ZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSwgZmFsc2Up
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJSdW5VSVByb2Nlc3NTY3JpcHQiKSkgewotICAgICAgICBX
S0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0
aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTY3Jp
cHQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLQot
ICAgICAgICBVSVNjcmlwdEludm9jYXRpb25EYXRhKiBpbnZvY2F0aW9uRGF0YSA9IG5ldyBVSVNj
cmlwdEludm9jYXRpb25EYXRhKCk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBpbnZvY2F0aW9u
RGF0YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRhOwogICAgICAgICBpbnZvY2F0aW9uRGF0
YS0+dGVzdEludm9jYXRpb24gPSB0aGlzOwotICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJh
Y2tJRCA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgY2FsbGJh
Y2tJREtleS5nZXQoKSkpKTsKLSAgICAgICAgaW52b2NhdGlvbkRhdGEtPnNjcmlwdFN0cmluZyA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgc2NyaXB0S2V5LmdldCgpKSk7CisgICAgICAgIGludm9jYXRpb25E
YXRhLT5jYWxsYmFja0lEID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQ2Fs
bGJhY2tJRCIpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0U3RyaW5nID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU2NyaXB0Iik7CiAgICAgICAgIG1fcGVuZGlu
Z1VJU2NyaXB0SW52b2NhdGlvbkRhdGEgPSBpbnZvY2F0aW9uRGF0YTsKICAgICAgICAgV0tQYWdl
Q2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBpbnZvY2F0aW9uRGF0YSwgcnVuVUlTaWRlU2NyaXB0
QWZ0ZXJVcGRhdGVDYWxsYmFjayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJ1blVJUHJvY2Vzc1Nj
cmlwdEltbWVkaWF0ZWx5IikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0KLSAgICAgICAgVUlTY3JpcHRJbnZvY2F0aW9u
RGF0YSogaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSgpOworICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0
aW9uRGF0YTsKICAgICAgICAgaW52b2NhdGlvbkRhdGEtPnRlc3RJbnZvY2F0aW9uID0gdGhpczsK
LSAgICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQgPSAodW5zaWduZWQpV0tVSW50NjRH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNhbGxiYWNrSURLZXkuZ2V0KCkpKSk7Ci0gICAgICAg
IGludm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNjcmlwdEtl
eS5nZXQoKSkpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJhY2tJRCA9IHVpbnQ2NFZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNhbGxiYWNrSUQiKTsKKyAgICAgICAgaW52b2Nh
dGlvbkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIlNjcmlwdCIpOwogICAgICAgICBtX3BlbmRpbmdVSVNjcmlwdEludm9jYXRpb25EYXRhID0g
aW52b2NhdGlvbkRhdGE7CiAgICAgICAgIHJ1blVJU2lkZVNjcmlwdEltbWVkaWF0ZWx5KG51bGxw
dHIsIGludm9jYXRpb25EYXRhKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzkxLDExICs2MDAsOSBA
QCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRs
ZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJJbnN0YWxsQ3VzdG9tTWVudUFjdGlvbiIpKSB7CiAgICAg
ICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1l
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibmFtZSIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG5h
bWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRpc21pc3Nl
c0F1dG9tYXRpY2FsbHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IikpOwotICAgICAgICBhdXRvIGRpc21pc3Nlc0F1dG9t
YXRpY2FsbHkgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5Lmdl
dCgpKSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbnN0YWxsQ3VzdG9t
TWVudUFjdGlvbih0b1dURlN0cmluZyhuYW1lLmdldCgpKSwgV0tCb29sZWFuR2V0VmFsdWUoZGlz
bWlzc2VzQXV0b21hdGljYWxseSkpOworICAgICAgICBhdXRvIG5hbWUgPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJuYW1lIik7CisgICAgICAgIGF1dG8gZGlzbWlzc2VzQXV0
b21hdGljYWxseSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJkaXNtaXNz
ZXNBdXRvbWF0aWNhbGx5Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5p
bnN0YWxsQ3VzdG9tTWVudUFjdGlvbih0b1dURlN0cmluZyhuYW1lKSwgZGlzbWlzc2VzQXV0b21h
dGljYWxseSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTgwNSw3ICs2MTIsNyBAQCB2
b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShX
S1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBWZWN0b3I8U3RyaW5nPiBhY3Rpb25zOwog
ICAgICAgICBhY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyArK2luZGV4KQotICAgICAgICAgICAg
YWN0aW9ucy5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJy
YXlHZXRJdGVtQXRJbmRleChtZXNzYWdlQm9keUFycmF5LCBpbmRleCkpKSk7CisgICAgICAgICAg
ICBhY3Rpb25zLmFwcGVuZCh0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShXS0FycmF5R2V0SXRlbUF0
SW5kZXgobWVzc2FnZUJvZHlBcnJheSwgaW5kZXgpKSkpOwogICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0QWxsb3dlZE1lbnVBY3Rpb25zKGFjdGlvbnMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtODI4LDEwOCArNjM1LDYzIEBAIHZvaWQgVGVzdEludm9jYXRpb246
OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VO
YW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
Qm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0RlYnVn
TW9kZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0RlYnVnTW9kZShib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
Rm9yRGVidWdNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmlu
Z1JlZiBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZShob3N0TmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NMYXN0
U2VlbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1l
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJs
ZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0xhc3RTZWVuKGhvc3RO
YW1lLCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBo
b3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7
CisgICAgICAgIGF1dG8gdmFsdWUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc0xhc3RTZWVuKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0
YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhv
c3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZURvbWFpbjFL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFp
bjEiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZURvbWFpbjJL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFp
bjIiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsYXN0U2VlbktleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxhc3RTZWVuIikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGFkVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
bktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc0dy
YW5kZmF0aGVyZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJ
c0dyYW5kZmF0aGVyZWQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc1By
ZXZhbGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzUHJl
dmFsZW50IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNWZXJ5UHJldmFs
ZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNWZXJ5UHJl
dmFsZW50IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZGF0YVJlY29yZHNS
ZW1vdmVkS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGF0YVJl
Y29yZHNSZW1vdmVkIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGltZXNB
Y2Nlc3NlZEZpcnN0UGFydHlJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRpbWVzQWNjZXNzZWRGaXJzdFBhcnR5SW50ZXJhY3Rpb24iKSk7Ci0K
LSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1l
S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lRG9tYWluMSA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgdG9wRnJhbWVEb21haW4xS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIHRvcEZyYW1lRG9tYWluMiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVEb21haW4yS2V5
LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGxhc3RTZWVuID0gc3RhdGljX2Nhc3Q8V0tE
b3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBsYXN0U2VlbktleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaGFkVXNlckludGVy
YWN0aW9uID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGFkVXNlckludGVyYWN0aW9uS2V5LmdldCgpKSk7
Ci0gICAgICAgIFdLRG91YmxlUmVmIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBzdGF0aWNf
Y2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKTsKLSAgICAgICAg
V0tCb29sZWFuUmVmIGlzR3JhbmRmYXRoZXJlZCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzR3JhbmRm
YXRoZXJlZEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNQcmV2YWxlbnQgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBpc1ByZXZhbGVudEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgaXNWZXJ5UHJldmFsZW50ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNWZXJ5UHJldmFsZW50
S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgZGF0YVJlY29yZHNSZW1vdmVkS2V5LmdldCgpKSk7Ci0KLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyho
b3N0TmFtZSwgdG9wRnJhbWVEb21haW4xLCB0b3BGcmFtZURvbWFpbjIsIFdLRG91YmxlR2V0VmFs
dWUobGFzdFNlZW4pLCBXS0Jvb2xlYW5HZXRWYWx1ZShoYWRVc2VySW50ZXJhY3Rpb24pLCBXS0Rv
dWJsZUdldFZhbHVlKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pLCBXS0Jvb2xlYW5HZXRWYWx1
ZShpc0dyYW5kZmF0aGVyZWQpLCBXS0Jvb2xlYW5HZXRWYWx1ZShpc1ByZXZhbGVudCksIFdLQm9v
bGVhbkdldFZhbHVlKGlzVmVyeVByZXZhbGVudCksIFdLVUludDY0R2V0VmFsdWUoZGF0YVJlY29y
ZHNSZW1vdmVkKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlv
bmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdG9w
RnJhbWVEb21haW4xID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJh
bWVEb21haW4xIik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVEb21haW4yID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVEb21haW4yIik7CisgICAgICAgIGF1dG8g
bGFzdFNlZW4gPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJMYXN0U2VlbiIp
OworICAgICAgICBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJIYWRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIGlzR3JhbmRmYXRo
ZXJlZCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc0dyYW5kZmF0aGVy
ZWQiKTsKKyAgICAgICAgYXV0byBpc1ByZXZhbGVudCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJJc1ByZXZhbGVudCIpOworICAgICAgICBhdXRvIGlzVmVyeVByZXZhbGVu
dCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc1ZlcnlQcmV2YWxlbnQi
KTsKKyAgICAgICAgYXV0byBkYXRhUmVjb3Jkc1JlbW92ZWQgPSB1aW50NjRWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJEYXRhUmVjb3Jkc1JlbW92ZWQiKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyhob3N0TmFtZSwg
dG9wRnJhbWVEb21haW4xLCB0b3BGcmFtZURvbWFpbjIsIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJh
Y3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2
YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0
YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGhhZFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVE
YXRhUmVtb3ZhbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBpc1ByZXZhbGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhv
c3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBX
S0Jvb2xlYW5SZWYgaGFkVXNlckludGVyYWN0aW9uID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGFkVXNl
ckludGVyYWN0aW9uS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc1NjaGVkdWxl
ZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNTY2hlZHVs
ZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgaXNQcmV2YWxlbnQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1ByZXZhbGVudEtleS5nZXQo
KSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
RXhwaXJlZFN0YXRpc3RpYyhob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUoaGFkVXNlckludGVy
YWN0aW9uKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCksIFdLQm9vbGVhbkdldFZhbHVlKGlzUHJldmFsZW50KSk7CisgICAgICAgIGF1dG8g
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
Ikhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaGFkVXNlckludGVyYWN0aW9uID0gYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhhZFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAg
ICBhdXRvIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgPSBib29sZWFuVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCIpOworICAgICAgICBhdXRvIGlzUHJldmFsZW50ID0gYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIklzUHJldmFsZW50Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyhob3N0TmFtZSwgaGFk
VXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBp
c1ByZXZhbGVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3RO
YW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25h
cnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2
YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhv
c3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUsIHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTQ0LDUxICs3MDYsMzUgQEAgdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYg
bWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3Jl
TW9kaWZpZWRTaW5jZUhvdXJzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgaG91
cnMgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnMoV0tVSW50NjRHZXRWYWx1ZShob3VycykpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0NsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModWludDY0VmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJl
ZmVycmVyIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKFdLQm9v
bGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYg
dmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTdGF0aXN0aWNzU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXMoaG9zdE5hbWUpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVz
KHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3Rp
Y3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBmaXJzdFBhcnR5VVJMU3RyaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRmlyc3RQYXJ0eVVSTCIpKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGNuYW1lVVJMU3RyaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ05BTUUiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1Jl
ZiBmaXJzdFBhcnR5VVJMU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmaXJzdFBhcnR5VVJMU3Ry
aW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBjbmFtZVVSTFN0cmluZ0tleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAg
ICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJv
ZHkpOworICAgICAgICBhdXRvIGZpcnN0UGFydHlVUkxTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJGaXJzdFBhcnR5VVJMIik7CisgICAgICAgIGF1dG8gY25hbWVV
UkxTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJDTkFNRSIpOwog
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW4oZmlyc3RQYXJ0eVVSTFN0cmluZywgY25hbWVVUkxTdHJpbmcpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbihjbmFtZVVSTFN0
cmluZyk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
VGhpcmRQYXJ0eUNOQU1FRG9tYWluKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTEwMTIsOCArNzU4LDcgQEAgdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2Fn
ZU5hbWUKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IkdldEFwcGxpY2F0aW9uTWFuaWZlc3QiKSkgewogI2lmZGVmIF9fQkxPQ0tTX18KICAgICAgICAg
V0tQYWdlR2V0QXBwbGljYXRpb25NYW5pZmVzdF9iKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIF57Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJEaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0IikpOwotICAgICAgICAgICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgICAgIHBv
c3RQYWdlTWVzc2FnZSgiRGlkR2V0QXBwbGljYXRpb25NYW5pZmVzdCIpOwogICAgICAgICB9KTsK
ICNlbHNlCiAgICAgICAgIC8vIEZJWE1FOiBBZGQgQVBJIGZvciBsb2FkaW5nIHRoZSBtYW5pZmVz
dCBvbiBub24tX19CTE9DS1NfXyBwb3J0cy4KQEAgLTEwMjMsMTYgKzc2OCwxMCBAQCB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmlu
Z1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9u
YXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYg
dmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0
aW9uKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAg
ICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJI
b3N0TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGhvc3ROYW1lLCB2YWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNDMsOCArNzgyLDcgQEAgdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYg
bWVzc2FnZU5hbWUKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0QXBwQm91bmREb21haW5zIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0FycmF5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0FycmF5
UmVmIG9yaWdpblVSTHMgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBcHBCb3VuZERvbWFpbnMob3Jp
Z2luVVJMcyk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBcHBCb3Vu
ZERvbWFpbnMoc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4obWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMTA1NSw5NCArNzkzLDcwIEBAIFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5q
ZWN0ZWRCCiB7CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJJbml0aWFsaXphdGlvbiIpKSB7CiAgICAgICAgIGF1dG8gc2V0dGluZ3MgPSBjcmVhdGVU
ZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiByZXN1bWVUZXN0aW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiUmVzdW1lVGVzdGluZyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBy
ZXN1bWVUZXN0aW5nVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX3N0YXJ0ZWRUZXN0
aW5nKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oc2V0dGluZ3MuZ2V0KCksIHJlc3Vt
ZVRlc3RpbmdLZXkuZ2V0KCksIHJlc3VtZVRlc3RpbmdWYWx1ZS5nZXQoKSk7CisgICAgICAgIHNl
dFZhbHVlKHNldHRpbmdzLCAiUmVzdW1lVGVzdGluZyIsIG1fc3RhcnRlZFRlc3RpbmcpOwogICAg
ICAgICByZXR1cm4gc2V0dGluZ3M7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXREdW1wUGl4ZWxzIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIG1fZHVtcFBpeGVscyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgbV9kdW1wUGl4ZWxzID0gYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0RHVtcFBpeGVs
cyIpKQogICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wUGl4ZWxz
KSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldFdoYXRUb0R1bXAiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBtX3doYXRUb0R1bXAgPSBzdGF0
aWNfY2FzdDxXaGF0VG9EdW1wPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0
UmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgbV93aGF0VG9EdW1wID0gc3RhdGljX2Nhc3Q8
V2hhdFRvRHVtcD4odWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiR2V0V2hhdFRvRHVtcCIpKQogICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obV93aGF0VG9EdW1wKSkpOwogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRXYWl0VW50aWxE
b25lIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIHNldFdhaXRVbnRpbERvbmUoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihtZXNzYWdlQm9keSkpKSk7CisgICAgICAgIHNldFdhaXRVbnRpbERvbmUoYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldFdhaXRVbnRpbERv
bmUiKSkKICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fd2FpdFVudGls
RG9uZSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1f
ZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KFdLQm9v
bGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7Cisg
ICAgICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldER1bXBGcmFtZUxvYWRDYWxsYmFja3Mi
KSkKICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcEZyYW1lTG9h
ZENhbGxiYWNrcykpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRDYW5PcGVuV2luZG93cyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBtX2Nh
bk9wZW5XaW5kb3dzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oV0tCb29sZWFuR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgbV9j
YW5PcGVuV2luZG93cyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0V2luZG93SXNLZXkiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tC
b29sZWFuUmVmIGlzS2V5VmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnNldFdpbmRvd0lzS2V5KFdLQm9vbGVhbkdldFZhbHVlKGlzS2V5VmFsdWUpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnNldFdpbmRvd0lzS2V5
KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldFZpZXdTaXplIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aWR0aCIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlaWdodEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImhlaWdodCIpKTsKLQotICAgICAgICBXS0RvdWJsZVJlZiB3aWR0
aFdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB3aWR0aEtleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJs
ZVJlZiBoZWlnaHRXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGVpZ2h0S2V5LmdldCgpKSk7Ci0KLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnJlc2l6ZVRv
KFdLRG91YmxlR2V0VmFsdWUod2lkdGhXSyksIFdLRG91YmxlR2V0VmFsdWUoaGVpZ2h0V0spKTsK
KyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVz
c2FnZUJvZHkpOworICAgICAgICBhdXRvIHdpZHRoID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAid2lkdGgiKTsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBkb3VibGVWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJoZWlnaHQiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnJlc2l6ZVRvKHdpZHRoLCBoZWlnaHQpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKSkgewot
ICAgICAgICBib29sIGlzQWN0aXZlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzR2Vv
bG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzQWN0aXZlKSk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIpKQorICAgICAgICByZXR1
cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlz
R2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldENhY2hlTW9kZWwiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwot
ICAgICAgICB1aW50NjRfdCBtb2RlbCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHVpbnQ2NF90IG1vZGVsID0gdWludDY0
VmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmVTZXRDYWNoZU1v
ZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndl
YnNpdGVEYXRhU3RvcmUoKSwgbW9kZWwpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklz
V29ya1F1ZXVlRW1wdHkiKSkgewotICAgICAgICBib29sIGlzRW1wdHkgPSBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLmlzV29ya1F1ZXVlRW1wdHkoKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShpc0VtcHR5KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNXb3JrUXVldWVFbXB0
eSIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5pc1dvcmtRdWV1ZUVtcHR5KCkpKTsK
IAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGlk
UmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpIHsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJE
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkKKyAgICAg
ICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oKSkp
OwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJD
bGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpKSB7
CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhckRpZFJlY2VpdmVTZXJ2
ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpOwpAQCAtMTE1MCw0MCArODY0LDM1
IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5j
aHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZWN1cmVFdmVudElucHV0SXNFbmFibGVk
IikpIHsKLSNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKElzU2VjdXJlRXZlbnRJbnB1dEVuYWJsZWQoKSkpOworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKElzU2VjdXJlRXZlbnRJbnB1dEVu
YWJsZWQoKSkpOwogI2Vsc2UKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiByZXN1
bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShmYWxzZSkpOworICAgICAgICByZXR1cm4gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUoZmFsc2UpKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0Q3VzdG9tVXNlckFnZW50IikpIHsKLSAgICAgICAgV0tTdHJpbmdSZWYgdXNl
ckFnZW50ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
V0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIHVzZXJBZ2VudCk7CisgICAgICAgIFdLUGFnZVNldEN1c3RvbVVz
ZXJBZ2VudChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgp
LCBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlIikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKFdLQm9vbGVhbkdldFZhbHVl
KHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sZWFu
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSkgewotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vz
c2lvbk9uTmV4dE5hdmlnYXRpb24oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSkgewotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Np
b25Pbk5leHROYXZpZ2F0aW9uKFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW1hZ2VDb3Vu
dEluR2VuZXJhbFBhc3RlYm9hcmQiKSkgewotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5pbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCgpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShjb3VudCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkltYWdlQ291bnRJbkdl
bmVyYWxQYXN0ZWJvYXJkIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2Fy
ZCgpKSk7CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJEZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzIikpIHsKICAgICAgICAgV0tXZWJzaXRl
RGF0YVN0b3JlUmVtb3ZlQWxsSW5kZXhlZERhdGFiYXNlcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkud2Vic2l0ZURhdGFTdG9yZSgpLCBudWxscHRyLCB7IH0pOwpAQCAtMTE5MSwxNyArOTAw
LDEwIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVT
eW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRNb2NrTWVkaWFEZXZpY2UiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJzaXN0ZW50SURLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQZXJzaXN0ZW50SUQiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkxhYmVsIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gdHlwZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlR5cGUi
KSk7Ci0KLSAgICAgICAgYXV0byBwZXJzaXN0ZW50SUQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBlcnNp
c3RlbnRJREtleS5nZXQoKSkpOwotICAgICAgICBhdXRvIGxhYmVsID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBsYWJlbEtleS5nZXQoKSkpOwotICAgICAgICBhdXRvIHR5cGUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHR5cGVLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gcGVyc2lzdGVudElE
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUGVyc2lzdGVudElEIik7Cisg
ICAgICAgIGF1dG8gbGFiZWwgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJM
YWJlbCIpOworICAgICAgICBhdXRvIHR5cGUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJUeXBlIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5hZGRN
b2NrTWVkaWFEZXZpY2UocGVyc2lzdGVudElELCBsYWJlbCwgdHlwZSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KQEAgLTEyMTIsOSArOTE0LDcgQEAgV0tSZXRhaW5QdHI8V0tUeXBl
UmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21Jbmpl
Y3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlJlbW92ZU1vY2tNZWRpYURldmljZSIpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IHBlcnNpc3RlbnRJZCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0K
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJlbW92ZU1vY2tNZWRpYURldmlj
ZShwZXJzaXN0ZW50SWQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVt
b3ZlTW9ja01lZGlhRGV2aWNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTIyNCwxNDIgKzkyNCw4NyBAQCBXS1JldGFpblB0
cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdl
RnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uIikpIHsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbihXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tDYW1lcmFPcmllbnRhdGlv
bih1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IklzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkIikpIHsKLSAgICAgICAgYm9v
bCBpc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCA9IFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5pc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgpOwot
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNNb2NrUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlckVuYWJsZWQpKTsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
RW5hYmxlZCIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFi
bGVkKCkpKTsKICAgICAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIkhhc0FwcEJvdW5kU2Vzc2lvbiIpKSB7Ci0gICAgICAgIGJvb2wgaGFzQXBwQm91
bmRTZXNzaW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc0FwcEJvdW5kU2Vzc2lv
bigpOwotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzQXBwQm91bmRT
ZXNzaW9uKSk7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiSGFzQXBwQm91bmRTZXNzaW9uIikpCisgICAgICAgIHJldHVybiBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzQXBwQm91bmRT
ZXNzaW9uKCkpKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNvbm5lY3RNb2NrR2FtZXBhZCIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQo
KSk7Ci0KLSAgICAgICAgdWludDY0X3QgaW5kZXggPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBXZWJDb3JlVGVzdFN1cHBv
cnQ6OmNvbm5lY3RNb2NrR2FtZXBhZChpbmRleCk7Ci0gICAgICAgIAorICAgICAgICBXZWJDb3Jl
VGVzdFN1cHBvcnQ6OmNvbm5lY3RNb2NrR2FtZXBhZCh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRpc2Nvbm5lY3RNb2NrR2FtZXBhZCIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRU
eXBlSUQoKSk7Ci0KLSAgICAgICAgdWludDY0X3QgaW5kZXggPSBXS1VJbnQ2NEdldFZhbHVlKHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBXZWJDb3JlVGVz
dFN1cHBvcnQ6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZChpbmRleCk7Ci0KKyAgICAgICAgV2ViQ29y
ZVRlc3RTdXBwb3J0OjpkaXNjb25uZWN0TW9ja0dhbWVwYWQodWludDY0VmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2FtZXBhZERldGFpbHMi
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlv
bmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSW5kZXhLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSUQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtYXBwaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiTWFwcGluZyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4
aXNDb3VudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXND
b3VudCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1dHRvbkNvdW50S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uQ291bnQiKSk7
Ci0KLSAgICAgICAgV0tVSW50NjRSZWYgZ2FtZXBhZEluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBn
YW1lcGFkSW5kZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgZ2FtZXBhZElEID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSURLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgbWFwcGluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbWFwcGluZ0tleS5nZXQoKSkpOwotICAgICAg
ICBXS1VJbnQ2NFJlZiBheGlzQ291bnQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGF4aXNDb3VudEtleS5n
ZXQoKSkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBidXR0b25Db3VudCA9IHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgYnV0dG9uQ291bnRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6
OnNldE1vY2tHYW1lcGFkRGV0YWlscyhXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRleCksIHRv
V1RGU3RyaW5nKGdhbWVwYWRJRCksIHRvV1RGU3RyaW5nKG1hcHBpbmcpLCBXS1VJbnQ2NEdldFZh
bHVlKGF4aXNDb3VudCksIFdLVUludDY0R2V0VmFsdWUoYnV0dG9uQ291bnQpKTsKKyAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIGdhbWVwYWRJbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkdhbWVwYWRJbmRleCIpOworICAgICAgICBhdXRvIGdhbWVwYWRJRCA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJRCIpOworICAgICAgICBhdXRv
IG1hcHBpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJNYXBwaW5nIik7
CisgICAgICAgIGF1dG8gYXhpc0NvdW50ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiQXhpc0NvdW50Iik7CisgICAgICAgIGF1dG8gYnV0dG9uQ291bnQgPSB1aW50NjRWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJCdXR0b25Db3VudCIpOworICAgICAgICBXZWJDb3Jl
VGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkRGV0YWlscyhnYW1lcGFkSW5kZXgsIHRvV1RGU3Ry
aW5nKGdhbWVwYWRJRCksIHRvV1RGU3RyaW5nKG1hcHBpbmcpLCBheGlzQ291bnQsIGJ1dHRvbkNv
dW50KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2FtZXBhZEF4aXNWYWx1
ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0
aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4aXNJbmRleEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNJbmRleCIpKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tVSW50NjRSZWYgZ2FtZXBhZEluZGV4ID0g
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSW5kZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tVSW50
NjRSZWYgYXhpc0luZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBheGlzSW5kZXhLZXkuZ2V0KCkpKTsK
LSAgICAgICAgV0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5Lmdl
dCgpKSk7Ci0KLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZEF4aXNW
YWx1ZShXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRleCksIFdLVUludDY0R2V0VmFsdWUoYXhp
c0luZGV4KSwgV0tEb3VibGVHZXRWYWx1ZSh2YWx1ZSkpOwotCisgICAgICAgIGF1dG8gbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
YXV0byBnYW1lcGFkSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJH
YW1lcGFkSW5kZXgiKTsKKyAgICAgICAgYXV0byBheGlzSW5kZXggPSB1aW50NjRWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJBeGlzSW5kZXgiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGRv
dWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFdlYkNv
cmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUoZ2FtZXBhZEluZGV4LCBheGlz
SW5kZXgsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2FtZXBh
ZEJ1dHRvblZhbHVlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZ2FtZXBhZEluZGV4
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uSW5kZXhLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25JbmRleCIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tVSW50NjRSZWYg
Z2FtZXBhZEluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSW5kZXhLZXkuZ2V0KCkpKTsK
LSAgICAgICAgV0tVSW50NjRSZWYgYnV0dG9uSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRv
bkluZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6
c2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZShXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRleCks
IFdLVUludDY0R2V0VmFsdWUoYnV0dG9uSW5kZXgpLCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7
Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUo
bWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGdhbWVwYWRJbmRleCA9IHVpbnQ2NFZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJbmRleCIpOworICAgICAgICBhdXRvIGJ1dHRv
bkluZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQnV0dG9uSW5kZXgi
KTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIlZhbHVlIik7CisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRC
dXR0b25WYWx1ZShnYW1lcGFkSW5kZXgsIGJ1dHRvbkluZGV4LCB2YWx1ZSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tE
aWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBvcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmln
aW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBv
cmlnaW5LZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFy
ZW50T3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFy
ZW50T3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW5XSyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgcGFyZW50T3JpZ2luS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBh
dXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7
CisgICAgICAgIGF1dG8gb3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJvcmlnaW4iKTsKKyAgICAgICAgYXV0byBwYXJlbnRPcmlnaW5XSyA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgInBhcmVudE9yaWdpbiIpOwogICAgICAgICB1bnNpZ25l
ZCBjb3VudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS51c2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdENvdW50Rm9yT3JpZ2luKG9yaWdpbldLLCBwYXJlbnRPcmlnaW5XSyk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KGNvdW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNEb2luZ01lZGlhQ2FwdHVyZSIp
KSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzRG9pbmdNZWRpYUNhcHR1
cmUoKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShjb3VudCkpOwogICAgIH0KKworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNEb2luZ01lZGlhQ2FwdHVyZSIpKQorICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmlzRG9pbmdNZWRpYUNhcHR1cmUoKSkpOwogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYXJTdGF0aXN0aWNzRGF0YUZvckRvbWFp
biIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJp
bmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGRvbWFpbiA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4oZG9tYWluKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4o
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJE
b2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGRvbWFpbklES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRG9tYWluSUQiKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGRvbWFpbklEID0gc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBkb21haW5JREtleS5nZXQoKSkpOwotICAgICAgICBib29sIGRvbWFpbklERXhp
c3RzID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRvZXNTdGF0aXN0aWNzRG9tYWluSURF
eGlzdEluRGF0YWJhc2UoV0tVSW50NjRHZXRWYWx1ZShkb21haW5JRCkpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRvbWFp
bklERXhpc3RzKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGF1dG8gbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
YXV0byBkb21haW5JRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkRvbWFp
bklEIik7CisgICAgICAgIGJvb2wgZG9tYWluSURFeGlzdHMgPSBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZShkb21haW5JRCk7
CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkb21haW5JREV4aXN0cykp
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0U3RhdGlzdGljc0VuYWJsZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRW5hYmxlZChX
S0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc0VuYWJsZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzRXBoZW1lcmFsIikpIHsKLSAg
ICAgICAgYm9vbCBpc0VwaGVtZXJhbCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0
YXRpc3RpY3NFcGhlbWVyYWwoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1
bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0VwaGVtZXJhbCkpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0VwaGVtZXJhbCgpKSk7CiAgICAgfQog
ICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiKSkgewpAQCAtMTM2OCwyMjQgKzEwMTMsMTI4IEBA
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJv
bm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJp
bmdHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBib29sIGlzUHJldmFsZW50
ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlKGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICBib29sIGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkp
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiSXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAg
ICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudCA9IFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoaG9z
dE5hbWUpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNT
dGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7
CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpOwog
ICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1YnJlc291cmNlSG9zdEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1YnJlc291cmNlSG9zdCIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lSG9zdEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdCIpKTsKLSAgICAgICAg
Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN1YnJlc291cmNlSG9zdCA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
c3VicmVzb3VyY2VIb3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1l
SG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0S2V5LmdldCgpKSk7Ci0gICAgICAg
IAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc3VicmVzb3VyY2VIb3N0ID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU3VicmVzb3VyY2VIb3N0Iik7CisgICAgICAgIGF1dG8g
dG9wRnJhbWVIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJh
bWVIb3N0Iik7CiAgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyID0g
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YnJl
c291cmNlVW5kZXIoc3VicmVzb3VyY2VIb3N0LCB0b3BGcmFtZUhvc3QpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJyZXNv
dXJjZVVuZGVyKSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRl
ciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0
aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViRnJhbWVIb3N0S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViRnJhbWVIb3N0Iikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpOwotICAg
ICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViRnJhbWVIb3N0ID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBzdWJGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVI
b3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLQorICAgICAg
ICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gc3ViRnJhbWVIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiU3ViRnJhbWVIb3N0Iik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVIb3N0ID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVIb3N0Iik7CiAgICAg
ICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyID0gVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoc3ViRnJhbWVI
b3N0LCB0b3BGcmFtZUhvc3QpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3Vs
dCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcikp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKSk7CiAgICAgfQogICAgIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAK
LSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19j
YXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gaG9zdFJlZGlyZWN0ZWRGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSG9zdFJlZGlyZWN0ZWRGcm9tIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaG9zdFJlZGlyZWN0ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkVG8iKSk7Ci0gICAgICAgIAotICAg
ICAgICBXS1N0cmluZ1JlZiBob3N0UmVkaXJlY3RlZEZyb20gPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhv
c3RSZWRpcmVjdGVkRnJvbUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0UmVk
aXJlY3RlZFRvID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0UmVkaXJlY3RlZFRvS2V5LmdldCgpKSk7
Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25h
cnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdFJlZGlyZWN0ZWRGcm9tID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdFJlZGlyZWN0ZWRGcm9tIik7
CisgICAgICAgIGF1dG8gaG9zdFJlZGlyZWN0ZWRUbyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkhvc3RSZWRpcmVjdGVkVG8iKTsKICAgICAgICAgYm9vbCBpc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhob3N0UmVkaXJlY3RlZEZyb20sIGhvc3RSZWRp
cmVjdGVkVG8pOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbykpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NIYXNIYWRVc2Vy
SW50ZXJhY3Rpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYg
aG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5pc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhh
c0hhZFVzZXJJbnRlcmFjdGlvbikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBi
b29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5p
c1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0hhZFVzZXJJbnRl
cmFjdGlvbikpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZSIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0
VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBhdXRvIHN1Ykhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTdWJIb3N0IikpOwotICAgICAgICBhdXRvIHRvcEhvc3RLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BIb3N0IikpOwotICAgICAgICAKLSAgICAg
ICAgV0tTdHJpbmdSZWYgc3ViSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViSG9zdEtleS5nZXQo
KSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BI
b3N0S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1Ykhvc3QgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTdWJIb3N0Iik7CisgICAgICAgIGF1dG8g
dG9wSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEhvc3QiKTsK
ICAgICAgICAgYm9vbCBzdGF0aXN0aWNJbkRhdGFiYXNlT25jZSA9IFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5pc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2Uoc3ViSG9zdCwgdG9wSG9z
dCk7CiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzdGF0aXN0aWNJbkRh
dGFiYXNlT25jZSkpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJWYWx1ZSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3RO
YW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotICAg
ICAgICAKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NH
cmFuZGZhdGhlcmVkKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAg
ICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChob3N0TmFtZSwgdmFsdWUpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVk
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmlu
Z0dldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBpc0dy
YW5kZmF0aGVyZWQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzR3Jh
bmRmYXRoZXJlZChob3N0TmFtZSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVz
dWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhlcmVkKSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVkID0gVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlz
R3JhbmRmYXRoZXJlZCkpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlSVRQRGF0YWJhc2UiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLQot
ICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVzZUlU
UERhdGFiYXNlKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRVc2VJVFBEYXRhYmFzZShib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1YmZy
YW1lVW5kZXJUb3BGcmFtZU9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAg
ICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdL
RGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1l
SG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BG
cmFtZUhvc3ROYW1lIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIHRvcEZyYW1lSG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lSG9zdE5hbWVL
ZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rp
b25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHRv
cEZyYW1lSG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BG
cmFtZUhvc3ROYW1lIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGhvc3ROYW1lLCB0b3BGcmFtZUhv
c3ROYW1lKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAK
LSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19j
YXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRv
cEZyYW1lSG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJUb3BGcmFtZUhvc3ROYW1lIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9z
dE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
U3RyaW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lSG9z
dE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0
TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7Cisg
ICAgICAgIGF1dG8gdG9wRnJhbWVIb3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIlRvcEZyYW1lSG9zdE5hbWUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oaG9z
dE5hbWUsIHRvcEZyYW1lSG9zdE5hbWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKTsKLSAgICAgICAgCi0g
ICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtl
eS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkuZ2V0KCkpKTsKLSAgICAgICAg
CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1l
c3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVSZWRpcmVj
dGVkVG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZVJlZGly
ZWN0ZWRUbyIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhob3N0TmFtZSwgaG9zdE5hbWVSZWRpcmVj
dGVkVG8pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAg
ICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdL
RGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1l
UmVkaXJlY3RlZEZyb21LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdS
ZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAg
ICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20gPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20i
KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShob3N0TmFtZSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJv
bSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0VG8iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9z
dE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZVJlZGly
ZWN0ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RO
YW1lUmVkaXJlY3RlZFRvIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZVJl
ZGlyZWN0ZWRUb0tleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUi
KTsKKyAgICAgICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZFRvIik7CiAgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIikp
OwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVk
aXJlY3RlZEZyb20gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXku
Z2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1
dG8gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShob3N0
TmFtZSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIGF1dG8gZnJvbUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJGcm9tSG9zdCIpKTsKLSAgICAgICAgYXV0byB0b0hvc3RLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb0hvc3QiKSk7Ci0KLSAgICAgICAgV0tT
dHJpbmdSZWYgZnJvbUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZyb21Ib3N0S2V5LmdldCgpKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9Ib3N0S2V5
LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZnJvbUhvc3QgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJGcm9tSG9zdCIpOworICAgICAgICBh
dXRvIHRvSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvSG9zdCIp
OwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0Nyb3Nz
U2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oZnJvbUhvc3QsIHRvSG9zdCk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24i
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91Ymxl
R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8
V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFdLRG91YmxlR2V0
VmFsdWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlVmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIApAQCAtMTYwMCw5NyAr
MTE0OSw2OSBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNl
aXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc05vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tC
b29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1NldElzUnVubmluZ1Rl
c3QiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdChXS0Jvb2xlYW5HZXRWYWx1ZSh2
YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c0lzUnVubmluZ1Rlc3QoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYg
dmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoV0tEb3VibGVHZXRWYWx1ZShzZWNv
bmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZVZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NHcmFu
ZGZhdGhlcmluZ1RpbWUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRz
ID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoV0tE
b3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZVZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1heFN0YXRpc3RpY3NF
bnRyaWVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgZW50cmllcyA9IHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMoV0tVSW50NjRH
ZXRWYWx1ZShlbnRyaWVzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModWludDY0VmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0UHJ1bmVFbnRyaWVzRG93blRv
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2
NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgZW50cmllcyA9IHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKFdLVUludDY0R2V0VmFsdWUo
ZW50cmllcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc1BydW5lRW50cmllc0Rvd25Ubyh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdCIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSW5jbHVkZUh0dHBPbmx5Q29va2llcyIpKTsKLSAgICAgICAgCi0gICAg
ICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5n
ZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaW5jbHVkZUh0dHBPbmx5Q29va2llcyA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0gICAgICAgIAotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0KGhv
c3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSk7CisgICAg
ICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaW5jbHVkZUh0dHBPbmx5Q29va2ll
cyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJbmNsdWRlSHR0cE9ubHlD
b29raWVzIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNz
RGVsZXRlQ29va2llc0Zvckhvc3QoaG9zdE5hbWUsIGluY2x1ZGVIdHRwT25seUNvb2tpZXMpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5h
bWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGJvb2wgaGFzTG9jYWxTdG9y
YWdlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0hhc0xvY2FsU3Rv
cmFnZShob3N0TmFtZSk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUoaGFzTG9jYWxTdG9yYWdlKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRT
dGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJl
ZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNh
cChXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcChkb3VibGVWYWx1ZShtZXNzYWdl
Qm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkhhc1N0YXRpc3RpY3NJc29sYXRl
ZFNlc3Npb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9z
dE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBib29sIGhh
c0lzb2xhdGVkU2Vzc2lvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNTdGF0aXN0
aWNzSXNvbGF0ZWRTZXNzaW9uKGhvc3ROYW1lKTsKICAgICAgICAgYXV0byByZXN1bHQgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNJc29sYXRlZFNlc3Npb24pKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIkNsZWFyRE9NQ2FjaGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmlu
Z1JlZiBvcmlnaW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCisg
ICAgICAgIGF1dG8gb3JpZ2luID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYXJET01DYWNoZShvcmlnaW4pOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xNzAxLDM1ICsxMjIyLDI0IEBAIFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3Nh
Z2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJIYXNET01DYWNoZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
U3RyaW5nUmVmIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7
Ci0KKyAgICAgICAgYXV0byBvcmlnaW4gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAg
ICAgIGJvb2wgaGFzRE9NQ2FjaGUgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzRE9N
Q2FjaGUob3JpZ2luKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNET01DYWNoZSkpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzRE9NQ2FjaGUp
KTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIkRPTUNhY2hlU2l6ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9y
aWdpbiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KKyAgICAgICAg
YXV0byBvcmlnaW4gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGF1dG8gZG9t
Q2FjaGVTaXplID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRvbUNhY2hlU2l6ZShvcmln
aW4pOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tV
SW50NjRDcmVhdGUoZG9tQ2FjaGVTaXplKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRvbUNhY2hlU2l6ZSkpOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBhdXRvIGNh
bkluY3JlYXNlID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWxs
b3dTdG9yYWdlUXVvdGFJbmNyZWFzZShjYW5JbmNyZWFzZSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkluamVjdFVzZXJT
Y3JpcHQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
U3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5pbmplY3RVc2VyU2NyaXB0KHNjcmlwdCk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5pbmplY3RVc2VyU2NyaXB0KHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTczOSwxNSArMTI0
OSwxMiBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZl
U3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2VydmljZVdvcmtlckZldGNo
VGltZW91dCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0
aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoV0tE
b3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhkb3VibGVWYWx1ZSht
ZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgYXV0byB1c2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpOworICAgICAgICBhdXRvIHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBX
S0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5jb250ZXh0KCksIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xNzY1LDYwICsxMjcyLDM1IEBA
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJv
bm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRUZXN0S2V5VG9LZXljaGFpbiIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0
VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgdGVzdEtleURpY3Rpb25hcnkgPSBz
dGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcHJpdmF0ZUtleUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlByaXZhdGVLZXkiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBy
aXZhdGVLZXlXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KHRlc3RLZXlEaWN0aW9uYXJ5LCBwcml2YXRlS2V5S2V5LmdldCgpKSk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJMYWJlbEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgYXR0ckxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleSh0ZXN0S2V5RGljdGlvbmFyeSwgYXR0ckxhYmVsS2V5LmdldCgpKSk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFwcGxpY2F0aW9uVGFnS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25UYWciKSk7Ci0gICAg
ICAgIFdLU3RyaW5nUmVmIGFwcGxpY2F0aW9uVGFnV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0S2V5RGljdGlvbmFyeSwgYXBwbGljYXRp
b25UYWdLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIHRlc3RLZXlEaWN0aW9uYXJ5ID0gZGlj
dGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBwcml2YXRlS2V5V0sgPSBz
dHJpbmdWYWx1ZSh0ZXN0S2V5RGljdGlvbmFyeSwgIlByaXZhdGVLZXkiKTsKKyAgICAgICAgYXV0
byBhdHRyTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3RLZXlEaWN0aW9uYXJ5LCAiQXR0ckxhYmVs
Iik7CisgICAgICAgIGF1dG8gYXBwbGljYXRpb25UYWdXSyA9IHN0cmluZ1ZhbHVlKHRlc3RLZXlE
aWN0aW9uYXJ5LCAiQXBwbGljYXRpb25UYWciKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmFkZFRlc3RLZXlUb0tleWNoYWluKHRvV1RGU3RyaW5nKHByaXZhdGVLZXlXSyks
IHRvV1RGU3RyaW5nKGF0dHJMYWJlbFdLKSwgdG9XVEZTdHJpbmcoYXBwbGljYXRpb25UYWdXSykp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFuVXBLZXljaGFpbiIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgdGVzdERpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQXR0ckxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhdHRyTGFiZWxX
SyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRl
c3REaWN0aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gYXBwbGljYXRpb25MYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIGFwcGxpY2F0aW9uTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5LCBhcHBsaWNhdGlvbkxhYmVsS2V5Lmdl
dCgpKSk7Ci0KKyAgICAgICAgYXV0byB0ZXN0RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gYXR0ckxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0
RGljdGlvbmFyeSwgIkF0dHJMYWJlbCIpOworICAgICAgICBhdXRvIGFwcGxpY2F0aW9uTGFiZWxX
SyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXBwbGljYXRpb25MYWJlbCIpOwogICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYW5VcEtleWNoYWluKHRvV1RGU3Ry
aW5nKGF0dHJMYWJlbFdLKSwgYXBwbGljYXRpb25MYWJlbFdLID8gdG9XVEZTdHJpbmcoYXBwbGlj
YXRpb25MYWJlbFdLKSA6IFN0cmluZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJL
ZXlFeGlzdHNJbktleWNoYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFy
eVJlZiB0ZXN0RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2Fn
ZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdHRyTGFiZWxLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIGF0dHJMYWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERpY3Rpb25hcnksIGF0dHJMYWJlbEtleS5n
ZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhcHBsaWNhdGlvbkxh
YmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRp
b25MYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXBwbGljYXRpb25MYWJlbFdLID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERpY3Rp
b25hcnksIGFwcGxpY2F0aW9uTGFiZWxLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIHRlc3RE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBh
dHRyTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXR0ckxhYmVsIik7Cisg
ICAgICAgIGF1dG8gYXBwbGljYXRpb25MYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERpY3Rpb25h
cnksICJBcHBsaWNhdGlvbkxhYmVsIik7CiAgICAgICAgIGJvb2wga2V5RXhpc3RzSW5LZXljaGFp
biA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5rZXlFeGlzdHNJbktleWNoYWluKHRvV1RG
U3RyaW5nKGF0dHJMYWJlbFdLKSwgdG9XVEZTdHJpbmcoYXBwbGljYXRpb25MYWJlbFdLKSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUoa2V5RXhpc3RzSW5LZXljaGFpbikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoa2V5RXhpc3RzSW5LZXljaGFpbikp
OwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50IikpIHsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFj
a0NhbGxzQ291bnQoKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNlcnZlclRydXN0RXZh
bHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2VydmVyVHJ1c3RFdmFsdWF0
aW9uQ2FsbGJhY2tDYWxsc0NvdW50KCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3lu
Y2hyb25vdXNseSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNo
cm9ub3VzbHkoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9u
b3VzbHkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIApAQCAtMTg0OCwxNiArMTMzMCwxMyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVk
QgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhXS0Jvb2xlYW5H
ZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIikpIHsKICAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VSTEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tV
UkxSZWYgdXJsID0gc3RhdGljX2Nhc3Q8V0tVUkxSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNp
b25VUkxGb3JUZXN0aW5nKHVybCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhzdGF0aWNfY2Fz
dDxXS1VSTFJlZj4obWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCkBAIC0xOTAyLDE3ICsxMzgxLDEwIEBAIHZvaWQgVGVzdEludm9jYXRpb246OnJ1blVJU2lk
ZVNjcmlwdChXS1N0cmluZ1JlZiBzY3JpcHQsIHVuc2lnbmVkIHNjcmlwdENhbGxiYWNrCiAKIHZv
aWQgVGVzdEludm9jYXRpb246OnVpU2NyaXB0RGlkQ29tcGxldGUoY29uc3QgU3RyaW5nJiByZXN1
bHQsIHVuc2lnbmVkIHNjcmlwdENhbGxiYWNrSUQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2FsbFVJU2lkZVNjcmlwdENhbGxiYWNrIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc3VsdEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc3VsdCIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IGNhbGxiYWNrSURWYWx1ZSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoc2NyaXB0Q2Fs
bGJhY2tJRCkpOwotCi0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwg
cmVzdWx0S2V5LmdldCgpLCB0b1dLKHJlc3VsdCkuZ2V0KCkpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGNhbGxiYWNrSURLZXkuZ2V0KCksIGNhbGxiYWNrSURW
YWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKG1lc3NhZ2VC
b2R5LCAiUmVzdWx0IiwgcmVzdWx0KTsKKyAgICBzZXRWYWx1ZShtZXNzYWdlQm9keSwgIkNhbGxi
YWNrSUQiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2NyaXB0Q2FsbGJhY2tJRCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiQ2FsbFVJU2lkZVNjcmlwdENhbGxiYWNrIiwgbWVzc2FnZUJvZHkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpvdXRwdXRUZXh0KGNvbnN0IFdURjo6U3Ry
aW5nJiB0ZXh0KQpAQCAtMTkyMiwxNzQgKzEzOTQsMTQzIEBAIHZvaWQgVGVzdEludm9jYXRpb246
Om91dHB1dFRleHQoY29uc3QgV1RGOjpTdHJpbmcmIHRleHQpCiAKIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZEJlZ2luU3dpcGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRC
ZWdpblN3aXBlQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRCZWdpblN3
aXBlQ2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6d2lsbEVuZFN3aXBlKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsV2lsbEVuZFN3aXBlQ2FsbGJhY2siKSk7
Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxXaWxsRW5kU3dpcGVDYWxsYmFjayIpOwogfQogCiB2
b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRFbmRTd2lwZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2FsbERpZEVuZFN3aXBlQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNh
bGxEaWRFbmRTd2lwZUNhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJl
bW92ZVN3aXBlU25hcHNob3QoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRS
ZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxE
aWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6bm90aWZ5RG93bmxvYWREb25lKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOb3Rp
ZnlEb3dubG9hZERvbmUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIk5vdGlmeURvd25sb2FkRG9u
ZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0YXRpc3RpY3NJbk1lbW9y
eUFuZFBlcnNpc3RlbnRTdG9yZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERp
ZENsZWFyU3RhdGlzdGljc0luTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpOwotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJDYWxsRGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3Rv
cmUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3Vn
aFdlYnNpdGVEYXRhUmVtb3ZhbCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERp
ZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFs
Iik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFNob3VsZERvd25ncmFkZVJlZmVy
cmVyKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0U2hvdWxkRG93bmdy
YWRlUmVmZXJyZXIiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRTaG91bGREb3du
Z3JhZGVSZWZlcnJlciIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRTaG91bGRC
bG9ja1RoaXJkUGFydHlDb29raWVzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxs
RGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiQ2FsbERpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiKTsKIH0KIAog
dm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERp
ZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIik7CiB9CiAKIHZvaWQgVGVzdElu
dm9jYXRpb246OmRpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKSk7Ci0gICAg
V0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIp
OwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9t
YWluKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0eUhv
c3RDTkFNRURvbWFpbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEZp
cnN0UGFydHlIb3N0Q05BTUVEb21haW4iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlk
U2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
YWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIik7CiB9CiAKIHZvaWQgVGVzdElu
dm9jYXRpb246OmRpZFJlc2V0U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50U3Rh
dGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNp
c3RlbnRTdGF0ZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRCbG9ja0Nvb2tp
ZXNGb3JIb3N0KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0QmxvY2tD
b29raWVzRm9ySG9zdCIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEJsb2NrQ29v
a2llc0Zvckhvc3QiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U3RhdGlzdGlj
c0RlYnVnTW9kZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFN0YXRp
c3RpY3NEZWJ1Z01vZGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRTdGF0aXN0
aWNzRGVidWdNb2RlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVu
dFJlc291cmNlRm9yRGVidWdNb2RlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxs
RGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIkNhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpOwogfQogCiB2b2lk
IFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRMYXN0U2VlbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2FsbERpZFNldExhc3RTZWVuIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlk
U2V0TGFzdFNlZW4iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkTWVyZ2VTdGF0aXN0
aWMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRNZXJnZVN0YXRpc3RpYyIp
KTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZE1lcmdlU3RhdGlzdGljIik7CiB9CiAKIHZv
aWQgVGVzdEludm9jYXRpb246OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMoKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRFeHBpcmVkU3RhdGlzdGljIikpOwotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJDYWxsRGlkU2V0RXhwaXJlZFN0YXRpc3RpYyIpOwogfQogCiB2b2lkIFRlc3RJ
bnZvY2F0aW9uOjpkaWRTZXRQcmV2YWxlbnRSZXNvdXJjZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUGFnZVBvc3RN
ZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2UiKTsKIH0KIAogdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlKCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDYWxsRGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJDYWxsRGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlIik7CiB9CiAKIHZvaWQgVGVz
dEludm9jYXRpb246OmRpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbigpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBX
S1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbiIpOwogfQogCiB2
b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoVmVj
dG9yPFN0cmluZz4mJiBkb21haW5zKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxE
aWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlQXJyYXlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJh
eUNyZWF0ZSgpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJh
eUNyZWF0ZSgpKTsKICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpCi0gICAgICAgIFdL
QXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKGRvbWFpbi51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotICAgIAotICAg
IFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwg
dG9XSyhkb21haW4pLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZWNlaXZl
QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMoVmVjdG9y
PFN0cmluZz4mJiBkb21haW5zKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRS
ZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zIikpOwotICAgIAotICAgIFdLUmV0YWluUHRy
PFdLTXV0YWJsZUFycmF5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlD
cmVhdGUoKSk7CisgICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlD
cmVhdGUoKSk7CiAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKQotICAgICAgICBXS0Fy
cmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhkb21haW4udXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKLQotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgdG9XSyhk
b21haW4pLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZWNlaXZlTG9hZGVk
U3VicmVzb3VyY2VEb21haW5zIiwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RJ
bnZvY2F0aW9uOjpkaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMoKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFj
ayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50
aWFsc0NhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEFwcEJvdW5k
RG9tYWlucygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEFwcEJvdW5k
RG9tYWlucyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEFwcEJvdW5k
RG9tYWlucyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcygpCkBAIC0yMTA0LDggKzE1NDUsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1w
QWRDbGlja0F0dHJpYnV0aW9uKCkKIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6cGVyZm9ybUN1c3Rv
bU1lbnVBY3Rpb24oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBlcmZvcm1DdXN0b21N
ZW51QWN0aW9uIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJQZXJmb3JtQ3VzdG9tTWVudUFjdGlv
biIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXJJZk5lZWRlZCgpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dl
YktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGExNWZjMGEwZTlhZmFlMzQxY2NjZDA2MDM4M2VkMzAxYTcyNDFiNmIuLjYxNzE4YWM2NTU4ODE3
NzhlODNjOTdmYmUxNzgyNzhjODcwZTZiOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0zNTUsNiArMzU1LDggQEAKIAkJODQxQ0MwMEQxODExODVCRjAwNDJFOUI2IC8q
IE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9u
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MUNDMDBFMTgxMTg1QkYwMDQy
RTlCNiAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOERENzZGQTEwNDg2QUE3NjAwRDk2
QjVFIC8qIFdlYktpdFRlc3RSdW5uZXIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CisJCTkzMzhEMUJBMjUwQTc5RUIwMEU4MjdGNiAvKiBKU0Jhc2ljcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBKU0Jhc2ljcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9CaW5k
aW5ncy9KU0Jhc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzM4RDFCRTI1
MEJEOUREMDBFODI3RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aWN0aW9uYXJ5RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNzY0
MTc2MjEwRDczNjAwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzcyMTBENzM2MTAwQTNEQUFF
IC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5M0M3ODgxRjI1MEM2OUU0MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZWZ0ZXN0RnVuY3Rpb25zLmNwcDsg
cGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvUmVmdGVzdEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTIsNiArODk0LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMzc4RDQ0MjIxMzM0NkQwMDAwNkE3NzdCIC8qIGNvbmZp
Zy5oICovLAorCQkJCTkzMzhEMUJFMjUwQkQ5REQwMEU4MjdGNiAvKiBEaWN0aW9uYXJ5RnVuY3Rp
b25zLmggKi8sCiAJCQkJQkM5OUE0ODQxMjA4OTAxQTAwN0U5RjA4IC8qIFN0cmluZ0Z1bmN0aW9u
cy5oICovLAogCQkJCTlCMzZBMjcwMjA5NDUzQTAwMDNFMDY1MSAvKiBXaGF0VG9EdW1wLmggKi8s
CiAJCQkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJOb3RpZmljYXRp
b25Qcm92aWRlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblBy
b3ZpZGVyLmNwcAppbmRleCA0NTg2NzdmNTA5YjExNzQzOTNhZTRjMzhjYTA5NDU3YzhlODBmODRj
Li5jZDVmYzY2MjE1YTRiMDM3OTY4MmM3MmIyZWMxZDFmMGI5ODA3M2IyIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcApAQCAtMTI2
LDggKzEyNiw4IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6OmNsb3NlV2ViTm90aWZp
Y2F0aW9uKFdLTm90aWZpY2F0aW9uUmVmIG5vdGlmaWNhdGlvCiAKICAgICByZW1vdmVHbG9iYWxJ
REZyb21JRE1hcChtX2xvY2FsVG9HbG9iYWxOb3RpZmljYXRpb25JRE1hcCwgaWQpOwogCi0gICAg
V0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHdrSUQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGlk
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRXSyhX
S011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIHdrSUQgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGlkKSk7CisgICAgYXV0byBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7CiAgICAgV0tBcnJheUFwcGVuZEl0ZW0oYXJyYXkuZ2V0KCksIHdrSUQuZ2V0KCkpOwog
ICAgIFdLTm90aWZpY2F0aW9uTWFuYWdlclByb3ZpZGVyRGlkQ2xvc2VOb3RpZmljYXRpb25zKG5v
dGlmaWNhdGlvbk1hbmFnZXIsIGFycmF5LmdldCgpKTsKIH0KQEAgLTE0NCw3ICsxNDQsNyBAQCB2
b2lkIFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyOjpyZW1vdmVOb3RpZmljYXRpb25NYW5hZ2VyKFdL
Tm90aWZpY2F0aW9uTWFuYWdlclJlZgogICAgIGF1dG8gdG9SZW1vdmUgPSBpdGVyYXRvci0+dmFs
dWU7CiAgICAgV0tSZXRhaW5QdHI8V0tOb3RpZmljYXRpb25NYW5hZ2VyUmVmPiBndWFyZChtYW5h
Z2VyKTsKICAgICBtX293bmVkTm90aWZpY2F0aW9ucy5yZW1vdmUoaXRlcmF0b3IpOwotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJy
YXlDcmVhdGUoKSk7CisgICAgYXV0byBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7CiAgICAgZm9yICh1aW50NjRfdCBub3RpZmljYXRpb25JRCA6IHRvUmVtb3ZlKSB7CiAg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fb3duaW5nTWFuYWdlci5yZW1vdmUobm90aWZpY2F0aW9u
SUQpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwpAQCAtMTczLDcg
KzE3Myw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6OnJlc2V0KCkKICAgICBmb3Ig
KGF1dG8mIG5vdGlmaWNhdGlvblBhaXIgOiBtX293bmVkTm90aWZpY2F0aW9ucykgewogICAgICAg
ICBpZiAobm90aWZpY2F0aW9uUGFpci52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRv
cHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICAgICAgYXV0byBhcnJheSA9IGFkb3B0
V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgICAgIGZvciAodWludDY0X3Qgbm90aWZp
Y2F0aW9uSUQgOiBub3RpZmljYXRpb25QYWlyLnZhbHVlKQogICAgICAgICAgICAgV0tBcnJheUFw
cGVuZEl0ZW0oYXJyYXkuZ2V0KCksIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90aWZpY2F0aW9u
SUQpKS5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1
ZXVlTWFuYWdlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIu
Y3BwCmluZGV4IDIwZDVhMWFhZGIyOWUzMzJiZTI5YjJiMWY0YzIzNjA5MTliYTBmZjEuLmM5ZDQ3
ZmQ2M2I4NGU0NmU0NjJhNTBmZjRiZTA3YmYzNDY4YWNhNjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IldvcmtRdWV1ZU1hbmFnZXIuaCIKIAogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgorI2lu
Y2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSA8V2ViS2l0L1dLUGFnZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2VQcml2YXRl
Lmg+CkBAIC03NSw3ICs3Niw3IEBAIHRlbXBsYXRlIDxXb3JrUXVldWVJdGVtOjpUeXBlIHR5cGU+
CiBjbGFzcyBTY3JpcHRJdGVtIDogcHVibGljIFdvcmtRdWV1ZUl0ZW0gewogcHVibGljOgogICAg
IGV4cGxpY2l0IFNjcmlwdEl0ZW0oY29uc3QgU3RyaW5nJiBzY3JpcHQpCi0gICAgICAgIDogbV9z
Y3JpcHQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHQudXRmOCgp
LmRhdGEoKSkpKQorICAgICAgICA6IG1fc2NyaXB0KHRvV0soc2NyaXB0KSkKICAgICB7CiAgICAg
fQogCkBAIC0xNjEsNyArMTYyLDcgQEAgdm9pZCBXb3JrUXVldWVNYW5hZ2VyOjpxdWV1ZUxvYWRI
VE1MU3RyaW5nKGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJgogICAgIGNsYXNz
IExvYWRIVE1MU3RyaW5nSXRlbSA6IHB1YmxpYyBXb3JrUXVldWVJdGVtIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIExvYWRIVE1MU3RyaW5nSXRlbShjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0
IFN0cmluZyYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiB1bnJlYWNoYWJsZVVSTCkKLSAgICAgICAg
ICAgIDogbV9jb250ZW50KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29u
dGVudC51dGY4KCkuZGF0YSgpKSkpCisgICAgICAgICAgICA6IG1fY29udGVudCh0b1dLKGNvbnRl
bnQpKQogICAgICAgICAgICAgLCBtX2Jhc2VVUkwoYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhiYXNlVVJMLnV0ZjgoKS5kYXRhKCkpKSkKICAgICAgICAgICAgICwgbV91bnJlYWNo
YWJsZVVSTChhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHVucmVhY2hhYmxlVVJM
LnV0ZjgoKS5kYXRhKCkpKSkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Y2cvVGVzdEludm9jYXRpb25DRy5jcHAKaW5kZXggNjczMzhmNGFhODI3M2NmYjY4NzIyOWJmYmFk
M2ZhNGRkYjM3YjRkZi4uMDFjNTMxYTliNmFjZThlODE2OTQ4ZjY3NmNlNjMxZjUyNzk0YjZjNCAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCkBA
IC01Miw3ICs1Miw3IEBAIHN0YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0RnJvbUNH
SW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSkKICAgICBzaXplX3Qgcm93Qnl0ZXMgPSAoNCAqIHBpeGVs
c1dpZGUgKyA2MykgJiB+NjM7CiAKICAgICAvLyBDcmVhdGluZyB0aGlzIGJpdG1hcCBpbiB0aGUg
ZGV2aWNlIGNvbG9yIHNwYWNlIHNob3VsZCBwcmV2ZW50IGFueSBjb2xvciBjb252ZXJzaW9uIHdo
ZW4gdGhlIGltYWdlIG9mIHRoZSB3ZWIgdmlldyBpcyBkcmF3biBpbnRvIGl0LgotICAgIFJldGFp
blB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNy
ZWF0ZURldmljZVJHQigpKTsKKyAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JT
cGFjZUNyZWF0ZURldmljZVJHQigpKTsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0
bWFwQ29udGV4dENyZWF0ZSgwLCBwaXhlbHNXaWRlLCBwaXhlbHNIaWdoLCA4LCByb3dCeXRlcywg
Y29sb3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0Jp
dG1hcEJ5dGVPcmRlcjMySG9zdCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVDR0Nv
bnRleHRGcm9tQ0dJbWFnZShDR0ltYWdlUmVmIGltYWdlKQogCiBzdGF0aWMgQ0dDb250ZXh0UmVm
IGNyZWF0ZUNHQ29udGV4dEZyb21JbWFnZShXS0ltYWdlUmVmIHdrSW1hZ2UpCiB7Ci0gICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihXS0ltYWdlQ3JlYXRlQ0dJbWFnZSh3
a0ltYWdlKSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoV0tJbWFnZUNyZWF0ZUNHSW1hZ2Uo
d2tJbWFnZSkpOwogICAgIHJldHVybiBjcmVhdGVDR0NvbnRleHRGcm9tQ0dJbWFnZShpbWFnZS5n
ZXQoKSk7CiB9CiAKQEAgLTEwOSw5ICsxMDksOSBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmlu
Z0ZvckNvbnRleHQoQ0dDb250ZXh0UmVmIGJpdG1hcENvbnRleHQsIGNoYXIgaGFzaFN0cmluZwog
CiBzdGF0aWMgdm9pZCBkdW1wQml0bWFwKENHQ29udGV4dFJlZiBiaXRtYXBDb250ZXh0LCBjb25z
dCBjaGFyKiBjaGVja3N1bSkKIHsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpKTsKLSAgICBS
ZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gaW1hZ2VEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVh
dGVNdXRhYmxlKDAsIDApKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBp
bWFnZURlc3QgPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGltYWdl
RGF0YS5nZXQoKSwga1VUVHlwZVBORywgMSwgMCkpOworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENG
KENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpKTsKKyAgICBhdXRvIGlt
YWdlRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisgICAgYXV0byBp
bWFnZURlc3QgPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGltYWdl
RGF0YS5nZXQoKSwga1VUVHlwZVBORywgMSwgMCkpOwogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFk
ZEltYWdlKGltYWdlRGVzdC5nZXQoKSwgaW1hZ2UuZ2V0KCksIDApOwogICAgIENHSW1hZ2VEZXN0
aW5hdGlvbkZpbmFsaXplKGltYWdlRGVzdC5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0gYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2NvY29hL0NyYXNoUmVwb3J0ZXJJbmZvLm1tCmluZGV4IDRjNzlhYjViODVkNjQx
ODlhN2UwYTI5NmVlYTkwYzFkODExOGRjM2QuLjQxMGQ5ZmRjYjMxZTJjNmU2Y2E3NjQ5NTYxNDYw
NjM4YzA5MTA1ZWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jh
c2hSZXBvcnRlckluZm8ubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9DcmFz
aFJlcG9ydGVySW5mby5tbQpAQCAtMzUsMTIgKzM1LDEyIEBAIG5hbWVzcGFjZSBXVFIgewogCiBz
dGF0aWMgU3RyaW5nIHRlc3RQYXRoRnJvbVVSTChXS1VSTFJlZiB1cmwpCiB7Ci0gICAgUmV0YWlu
UHRyPENGVVJMUmVmPiBjZlVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgdXJsKSk7CisgICAgYXV0byBjZlVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7CiAgICAgaWYgKCFjZlVSTCkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY2hlbWVDRlN0cmlu
ZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5U2NoZW1lKGNmVVJMLmdldCgpKSk7Ci0gICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiBwYXRoQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVBhdGgoY2ZVUkwu
Z2V0KCkpKTsKKyAgICBhdXRvIHNjaGVtZUNGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlTY2hl
bWUoY2ZVUkwuZ2V0KCkpKTsKKyAgICBhdXRvIHBhdGhDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxD
b3B5UGF0aChjZlVSTC5nZXQoKSkpOwogCiAgICAgU3RyaW5nIHNjaGVtZVN0cmluZyhzY2hlbWVD
RlN0cmluZy5nZXQoKSk7CiAgICAgU3RyaW5nIHBhdGhTdHJpbmcocGF0aENGU3RyaW5nLmdldCgp
KTsKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIFN0cmluZyB0ZXN0UGF0aEZyb21VUkwoV0tVUkxS
ZWYgdXJsKQogICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3Ry
aW5nLCAiaHR0cCIpICYmICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWVTdHJp
bmcsICJodHRwcyIpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGhvc3RDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5SG9zdE5hbWUoY2ZV
UkwuZ2V0KCkpKTsKKyAgICBhdXRvIGhvc3RDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5SG9z
dE5hbWUoY2ZVUkwuZ2V0KCkpKTsKICAgICBTdHJpbmcgaG9zdFN0cmluZyhob3N0Q0ZTdHJpbmcu
Z2V0KCkpOwogICAgIGlmIChob3N0U3RyaW5nID09ICIxMjcuMC4wLjEiKQogICAgICAgICByZXR1
cm4gcGF0aFN0cmluZzsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VGVzdENvbnRyb2xsZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVz
dENvbnRyb2xsZXJDb2NvYS5tbQppbmRleCAzNjUzMzdhZGY5OWYwYjljZGQ2YWYwOTdmYzAyYmU4
N2E2NzE2NjU3Li43MTMwMzI2YTNlNjFjZTJiZDBhNzZkZjcyODk4ZDllNGIwMDYzYjA0IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2Eu
bW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29h
Lm1tCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0
aWFsaXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFQKIAogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KFdLUGFnZUNvbmZpZ3VyYXRpb25S
ZWYsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewotICAgIFJldGFpblB0cjxXS1dlYlZp
ZXdDb25maWd1cmF0aW9uPiBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbZ2xvYmFsV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gY29weV0pOworICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsKIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlvbikKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5t
bSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQpp
bmRleCA1Yzg2MmU5YjBlYzc3ZDA1ZTA3NzI5ZGNlNjQ3NmY1ODkyMTIzYjM4Li45MTVmNDc2YzYx
NWFlNjEwOTBkOTBjYTc5NzZiZjhmMmM5OWI1NjZiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCkBAIC05MCw3ICs5MCw3IEBA
IElHTk9SRV9XQVJOSU5HU19CRUdJTigiZGVwcmVjYXRlZC1pbXBsZW1lbnRhdGlvbnMiKQogLSAo
dm9pZClkcmFnSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGF0OihOU1BvaW50KXZpZXdMb2NhdGlv
biBvZmZzZXQ6KE5TU2l6ZSlpbml0aWFsT2Zmc2V0IGV2ZW50OihOU0V2ZW50ICopZXZlbnQgcGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGJvYXJkIHNvdXJjZTooaWQpc291cmNlT2JqIHNsaWRl
QmFjazooQk9PTClzbGlkZUZsYWcKIElHTk9SRV9XQVJOSU5HU19FTkQKIHsKLSAgICBSZXRhaW5Q
dHI8V2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mbz4gZHJhZ2dpbmdJbmZvID0gYWRvcHROUyhb
W1dlYktpdFRlc3RSdW5uZXJEcmFnZ2luZ0luZm8gYWxsb2NdIGluaXRXaXRoSW1hZ2U6YW5JbWFn
ZSBvZmZzZXQ6aW5pdGlhbE9mZnNldCBwYXN0ZWJvYXJkOnBib2FyZCBzb3VyY2U6c291cmNlT2Jq
XSk7CisgICAgYXV0byBkcmFnZ2luZ0luZm8gPSBhZG9wdE5TKFtbV2ViS2l0VGVzdFJ1bm5lckRy
YWdnaW5nSW5mbyBhbGxvY10gaW5pdFdpdGhJbWFnZTphbkltYWdlIG9mZnNldDppbml0aWFsT2Zm
c2V0IHBhc3RlYm9hcmQ6cGJvYXJkIHNvdXJjZTpzb3VyY2VPYmpdKTsKICAgICBbc2VsZiBkcmFn
Z2luZ1VwZGF0ZWQ6ZHJhZ2dpbmdJbmZvLmdldCgpXTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5oIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5oCmlu
ZGV4IGFiYzBhNTBjOTcwYzFiYjMzZjFmYjEwOTM5MzUyYWY4Y2E3ZTA0MDMuLmNjOTgxMzk0MjRm
Mjg4MDY0NDM5ODk4MzQ1YzNlN2Q0ZWE1NTMzNzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmgKQEAgLTMyLDEyICsz
MiwxNyBAQCBPQkpDX0NMQVNTIFRlc3RSdW5uZXJXS1dlYlZpZXc7CiBuYW1lc3BhY2UgV1RSIHsK
IAogY2xhc3MgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EgOiBwdWJsaWMgVUlTY3JpcHRDb250cm9s
bGVyQ29tbW9uIHsKLXB1YmxpYzoKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBVSVNjcmlwdENv
bnRyb2xsZXJDb2NvYShVSVNjcmlwdENvbnRleHQmKTsKKyAgICBUZXN0UnVubmVyV0tXZWJWaWV3
ICp3ZWJWaWV3KCkgY29uc3Q7CisKKyAgICB2b2lkIGRvQXN5bmNUYXNrKEpTVmFsdWVSZWYpIG92
ZXJyaWRlOworCitwcml2YXRlOgogICAgIHZvaWQgc2V0Vmlld1NjYWxlKGRvdWJsZSkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzZXRNaW5pbXVtRWZmZWN0aXZlV2lkdGgoZG91YmxlKSBvdmVycmlkZTsK
ICAgICB2b2lkIGJlY29tZUZpcnN0UmVzcG9uZGVyKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXNp
Z25GaXJzdFJlc3BvbmRlcigpIG92ZXJyaWRlOwotICAgIHZvaWQgZG9Bc3luY1Rhc2soSlNWYWx1
ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVWaWV3RnJvbVdpbmRvdyhKU1ZhbHVlUmVm
KSBvdmVycmlkZTsKICAgICB2b2lkIGFkZFZpZXdUb1dpbmRvdyhKU1ZhbHVlUmVmKSBvdmVycmlk
ZTsKICAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYp
IG92ZXJyaWRlOwpAQCAtNTksMTEgKzY0LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbnNlcnRB
dHRhY2htZW50Rm9yRmlsZVBhdGgoSlNTdHJpbmdSZWYgZmlsZVBhdGgsIEpTU3RyaW5nUmVmIGNv
bnRlbnRUeXBlLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKSBvdmVycmlkZTsKIAotcHJvdGVjdGVkOgot
ICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29udHJvbGxlckNvY29hKFVJU2NyaXB0Q29udGV4dCYpOwot
ICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKLQotcHJpdmF0ZToKICAg
ICB2b2lkIGNvbXBsZXRlVGFza0FzeW5jaHJvbm91c2x5QWZ0ZXJBY3Rpdml0eVN0YXRlVXBkYXRl
KHVuc2lnbmVkIGNhbGxiYWNrSUQpOwogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0KaW5kZXggOThiYjc0YjQx
M2I5NTAzZTY5ODgwN2VkYjg2Mjk4ZTM3MGRjZDBmMi4uNTg0Nzk3NmYyMTg1N2Y1M2Y0ODVlY2Ix
ZmIxZWI5MTE3MjFhNTZkYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2Nv
YS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tCkBAIC0xMzUsMjIgKzEzNSwxOCBAQCB2
b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjphZGRWaWV3VG9XaW5kb3coSlNWYWx1ZVJlZiBj
YWxsYmFjaykKIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6b3ZlcnJpZGVQcmVmZXJl
bmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2VSZWYsIEpTU3RyaW5nUmVmIHZhbHVlUmVmKQogewot
ICAgIFdLUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gd2ViVmlldygpLmNvbmZpZ3VyYXRpb24u
cHJlZmVyZW5jZXM7Ci0KLSAgICBTdHJpbmcgcHJlZmVyZW5jZSA9IHRvV1RGU3RyaW5nKHRvV0so
cHJlZmVyZW5jZVJlZikpOwotICAgIFN0cmluZyB2YWx1ZSA9IHRvV1RGU3RyaW5nKHRvV0sodmFs
dWVSZWYpKTsKLSAgICBpZiAocHJlZmVyZW5jZSA9PSAiV2ViS2l0TWluaW11bUZvbnRTaXplIikK
LSAgICAgICAgcHJlZmVyZW5jZXMubWluaW11bUZvbnRTaXplID0gdmFsdWUudG9Eb3VibGUoKTsK
KyAgICBpZiAodG9XVEZTdHJpbmcocHJlZmVyZW5jZVJlZikgPT0gIldlYktpdE1pbmltdW1Gb250
U2l6ZSIpCisgICAgICAgIHdlYlZpZXcoKS5jb25maWd1cmF0aW9uLnByZWZlcmVuY2VzLm1pbmlt
dW1Gb250U2l6ZSA9IHRvV1RGU3RyaW5nKHZhbHVlUmVmKS50b0RvdWJsZSgpOwogfQogCiB2b2lk
IFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpmaW5kU3RyaW5nKEpTU3RyaW5nUmVmIHN0cmluZywg
dW5zaWduZWQgbG9uZyBvcHRpb25zLCB1bnNpZ25lZCBsb25nIG1heENvdW50KQogewotICAgIFt3
ZWJWaWV3KCkgX2ZpbmRTdHJpbmc6dG9XVEZTdHJpbmcodG9XSyhzdHJpbmcpKSBvcHRpb25zOm9w
dGlvbnMgbWF4Q291bnQ6bWF4Q291bnRdOworICAgIFt3ZWJWaWV3KCkgX2ZpbmRTdHJpbmc6dG9X
VEZTdHJpbmcoc3RyaW5nKSBvcHRpb25zOm9wdGlvbnMgbWF4Q291bnQ6bWF4Q291bnRdOwogfQog
CiBKU09iamVjdFJlZiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6Y29udGVudHNPZlVzZXJJbnRl
cmZhY2VJdGVtKEpTU3RyaW5nUmVmIGludGVyZmFjZUl0ZW0pIGNvbnN0CiB7Ci0gICAgTlNEaWN0
aW9uYXJ5ICpjb250ZW50RGljdGlvbmFyeSA9IFt3ZWJWaWV3KCkgX2NvbnRlbnRzT2ZVc2VySW50
ZXJmYWNlSXRlbTp0b1dURlN0cmluZyh0b1dLKGludGVyZmFjZUl0ZW0pKV07CisgICAgTlNEaWN0
aW9uYXJ5ICpjb250ZW50RGljdGlvbmFyeSA9IFt3ZWJWaWV3KCkgX2NvbnRlbnRzT2ZVc2VySW50
ZXJmYWNlSXRlbTp0b1dURlN0cmluZyhpbnRlcmZhY2VJdGVtKV07CiAgICAgcmV0dXJuIEpTVmFs
dWVUb09iamVjdChtX2NvbnRleHQtPmpzQ29udGV4dCgpLCBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmpl
Y3Q6Y29udGVudERpY3Rpb25hcnkgaW5Db250ZXh0OltKU0NvbnRleHQgY29udGV4dFdpdGhKU0ds
b2JhbENvbnRleHRSZWY6bV9jb250ZXh0LT5qc0NvbnRleHQoKV1dLkpTVmFsdWVSZWYsIG51bGxw
dHIpOwogfQogCkBAIC0yMTksMTIgKzIxNSwxMCBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNv
Y29hOjpwYXN0ZSgpCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjppbnNlcnRBdHRhY2ht
ZW50Rm9yRmlsZVBhdGgoSlNTdHJpbmdSZWYgZmlsZVBhdGgsIEpTU3RyaW5nUmVmIGNvbnRlbnRU
eXBlLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBt
X2NvbnRleHQtPnByZXBhcmVGb3JBc3luY1Rhc2soY2FsbGJhY2ssIENhbGxiYWNrVHlwZU5vblBl
cnNpc3RlbnQpOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB0ZXN0VVJMID0gYWRvcHRDRihX
S1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuY3VycmVudFRlc3RVUkwoKSkpOwotICAgIFJldGFpblB0cjxOU1VSTD4gYXR0YWNobWVu
dFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6dG9XVEZTdHJpbmcodG9XSyhmaWxlUGF0aCkp
IHJlbGF0aXZlVG9VUkw6KF9fYnJpZGdlIE5TVVJMICopdGVzdFVSTC5nZXQoKV07Ci0KLSAgICBh
dXRvIGZpbGVXcmFwcGVyID0gYWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRo
VVJMOmF0dGFjaG1lbnRVUkwuZ2V0KCkgb3B0aW9uczowIGVycm9yOm5pbF0pOwotICAgIFt3ZWJW
aWV3KCkgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIuZ2V0KCkg
Y29udGVudFR5cGU6dG9XVEZTdHJpbmcodG9XSyhjb250ZW50VHlwZSkpIGNvbXBsZXRpb246XihC
T09MIHN1Y2Nlc3MpIHsKKyAgICBhdXRvIHRlc3RVUkwgPSBhZG9wdENGKFdLVVJMQ29weUNGVVJM
KGtDRkFsbG9jYXRvckRlZmF1bHQsIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jdXJyZW50
VGVzdFVSTCgpKSk7CisgICAgYXV0byBhdHRhY2htZW50VVJMID0gW05TVVJMIGZpbGVVUkxXaXRo
UGF0aDp0b1dURlN0cmluZyhmaWxlUGF0aCkgcmVsYXRpdmVUb1VSTDooX19icmlkZ2UgTlNVUkwg
Kil0ZXN0VVJMLmdldCgpXTsKKyAgICBhdXRvIGZpbGVXcmFwcGVyID0gYWRvcHROUyhbW05TRmls
ZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRoVVJMOmF0dGFjaG1lbnRVUkwgb3B0aW9uczowIGVycm9y
Om5pbF0pOworICAgIFt3ZWJWaWV3KCkgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6
ZmlsZVdyYXBwZXIuZ2V0KCkgY29udGVudFR5cGU6dG9XVEZTdHJpbmcoY29udGVudFR5cGUpIGNv
bXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKICAgICAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIG1fY29udGV4dC0+YXN5bmNUYXNrQ29tcGxldGUoY2Fs
bGJhY2tJRCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVu
dEdlbmVyYXRvci5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJh
dG9yLm1tCmluZGV4IGUyOTgzOGJhODI4ZmI0YmQ5MDg1N2FiNmJlZjJmZDQ2NTlmYjQyMTguLmQ0
YjExNDgxMWVlNmJkZDI1MTVkZGUzNTVlZTEzZGU2MjExMGQ1NTAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tCkBAIC0xODksNyArMTg5LDcg
QEAgLSAoaW5zdGFuY2V0eXBlKWluaXQKIAogLSAodm9pZClfc2VuZElPSElES2V5Ym9hcmRFdmVu
dDoodWludDY0X3QpdGltZXN0YW1wIHVzYWdlOih1aW50MzJfdCl1c2FnZSBpc0tleURvd246KGJv
b2wpaXNLZXlEb3duCiB7Ci0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0g
YWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlS2V5Ym9hcmRFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0
LAorICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZlbnRDcmVhdGVLZXlib2FyZEV2
ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsCiAgICAgICAgIHRpbWVzdGFtcCwKICAgICAgICAga0hJ
RFBhZ2VfS2V5Ym9hcmRPcktleXBhZCwKICAgICAgICAgdXNhZ2UsCkBAIC0zNjEsNyArMzYxLDcg
QEAgLSAoSU9ISURFdmVudFJlZilfY3JlYXRlSU9ISURFdmVudFR5cGU6KEhhbmRFdmVudFR5cGUp
ZXZlbnRUeXBlCiAgICAgICAgIGV2ZW50TWFzayB8PSBrSU9ISUREaWdpdGl6ZXJFdmVudElkZW50
aXR5OwogCiAgICAgdWludDY0X3QgbWFjaFRpbWUgPSBtYWNoX2Fic29sdXRlX3RpbWUoKTsKLSAg
ICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZlbnRD
cmVhdGVEaWdpdGl6ZXJFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtYWNoVGltZSwKKyAgICBh
dXRvIGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlRGlnaXRpemVyRXZlbnQoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgbWFjaFRpbWUsCiAgICAgICAgIGtJT0hJRERpZ2l0aXplclRyYW5z
ZHVjZXJUeXBlSGFuZCwKICAgICAgICAgMCwKICAgICAgICAgMCwKQEAgLTQ1Myw3ICs0NTMsNyBA
QCAtIChCT09MKV9zZW5kSElERXZlbnQ6KElPSElERXZlbnRSZWYpZXZlbnRSZWYKICAgICAgICAg
X2lvU3lzdGVtQ2xpZW50ID0gSU9ISURFdmVudFN5c3RlbUNsaWVudENyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0KTsKIAogICAgIGlmIChldmVudFJlZikgewotICAgICAgICBSZXRhaW5QdHI8SU9I
SURFdmVudFJlZj4gc3Ryb25nRXZlbnQgPSBldmVudFJlZjsKKyAgICAgICAgYXV0byBzdHJvbmdF
dmVudCA9IGV2ZW50UmVmOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBeewogICAgICAgICAgICAgdWludDMyX3QgY29udGV4dElEID0gW1VJQXBwbGlj
YXRpb24gc2hhcmVkQXBwbGljYXRpb25dLmtleVdpbmRvdy5fY29udGV4dElkOwogICAgICAgICAg
ICAgQVNTRVJUKGNvbnRleHRJRCk7CkBAIC01MTIsNyArNTEyLDcgQEAgLSAodm9pZClfdXBkYXRl
VG91Y2hQb2ludHM6KENHUG9pbnQqKXBvaW50cyBjb3VudDooTlNVSW50ZWdlciljb3VudAogICAg
ICAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVz
RGVidWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aSB3aXRoUG9pbnRJbldp
bmRvd0Nvb3JkaW5hdGVzOnBvaW50c1tpXSBpc1RvdWNoaW5nOllFU107CiAgICAgfQogICAgIAot
ICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2Ny
ZWF0ZUlPSElERXZlbnRUeXBlOmhhbmRFdmVudFR5cGVdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0g
YWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6aGFuZEV2ZW50VHlwZV0pOwogICAg
IFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC01MjksNyArNTI5
LDcgQEAgLSAodm9pZCl0b3VjaERvd25BdFBvaW50czooQ0dQb2ludCopbG9jYXRpb25zIHRvdWNo
Q291bnQ6KE5TVUludGVnZXIpdG91Y2hDb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRvdWNoZXNE
ZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0ZURlYnVn
SW5kaWNhdG9yRm9yVG91Y2g6aW5kZXggd2l0aFBvaW50SW5XaW5kb3dDb29yZGluYXRlczpsb2Nh
dGlvbnNbaW5kZXhdIGlzVG91Y2hpbmc6WUVTXTsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8SU9I
SURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlw
ZTpIYW5kRXZlbnRUb3VjaGVkXSk7CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYg
X2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudFRvdWNoZWRdKTsKICAgICBbc2VsZiBfc2Vu
ZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApAQCAtNTYzLDcgKzU2Myw3IEBAIC0gKHZv
aWQpbGlmdFVwQXRQb2ludHM6KENHUG9pbnQqKWxvY2F0aW9ucyB0b3VjaENvdW50OihOU1VJbnRl
Z2VyKXRvdWNoQ291bnQKICAgICAgICAgW1tHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hh
cmVkR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93XSB1cGRhdGVEZWJ1Z0luZGljYXRvckZvclRv
dWNoOmluZGV4IHdpdGhQb2ludEluV2luZG93Q29vcmRpbmF0ZXM6Q0dQb2ludFplcm8gaXNUb3Vj
aGluZzpOT107CiAgICAgfQogICAgIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVu
dFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudExpZnRl
ZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50
VHlwZTpIYW5kRXZlbnRMaWZ0ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVm
LmdldCgpXTsKICAgICAKICAgICBfYWN0aXZlUG9pbnRDb3VudCA9IG5ld1BvaW50Q291bnQ7CkBA
IC02NDEsNyArNjQxLDcgQEAgLSAodm9pZClzdHlsdXNEb3duQXRQb2ludDooQ0dQb2ludClsb2Nh
dGlvbiBhemltdXRoQW5nbGU6KENHRmxvYXQpYXppbXV0aEFuZ2xlIGEKICAgICBfYWN0aXZlUG9p
bnRzWzBdLmF6aW11dGhBbmdsZSA9IE1fUEkgKiAyIC0gYXppbXV0aEFuZ2xlOwogICAgIF9hY3Rp
dmVQb2ludHNbMF0uYWx0aXR1ZGVBbmdsZSA9IE1fUElfMiAtIGFsdGl0dWRlQW5nbGU7CiAKLSAg
ICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVh
dGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudFRvdWNoZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVm
ID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRUb3VjaGVk
XSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTY1
NSw3ICs2NTUsNyBAQCAtICh2b2lkKXN0eWx1c01vdmVUb1BvaW50OihDR1BvaW50KWxvY2F0aW9u
IGF6aW11dGhBbmdsZTooQ0dGbG9hdClhemltdXRoQW5nbGUgYQogICAgIF9hY3RpdmVQb2ludHNb
MF0uYXppbXV0aEFuZ2xlID0gTV9QSSAqIDIgLSBhemltdXRoQW5nbGU7CiAgICAgX2FjdGl2ZVBv
aW50c1swXS5hbHRpdHVkZUFuZ2xlID0gTV9QSV8yIC0gYWx0aXR1ZGVBbmdsZTsKIAotICAgIFJl
dGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlP
SElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TW92ZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRv
cHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRNb3ZlZF0pOwogICAg
IFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC02NjgsNyArNjY4
LDcgQEAgLSAodm9pZClzdHlsdXNVcEF0UG9pbnQ6KENHUG9pbnQpbG9jYXRpb24KICAgICBfYWN0
aXZlUG9pbnRzWzBdLmF6aW11dGhBbmdsZSA9IDA7CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRp
dHVkZUFuZ2xlID0gMDsKIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9
IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TGlmdGVkXSk7
CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBl
OlN0eWx1c0V2ZW50TGlmdGVkXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5n
ZXQoKV07CiB9CiAKQEAgLTEwMjEsNyArMTAyMSw3IEBAIC0gKHZvaWQpZGlzcGF0Y2hFdmVudFdp
dGhJbmZvOihOU0RpY3Rpb25hcnkgKilldmVudEluZm8KIHsKICAgICBBU1NFUlQoW05TVGhyZWFk
IGlzTWFpblRocmVhZF0pOwogCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVm
ID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFdpdGhJbmZvOmV2ZW50SW5mb10pOwor
ICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50V2l0aElu
Zm86ZXZlbnRJbmZvXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07
CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29u
dHJvbGxlcklPUy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9s
bGVySU9TLmgKaW5kZXggMjhkMDYwYzZkZmM0NzFhOTA1NDkwNjgzOTVjM2Q0MGY2YTljMDk2Yi4u
ODU0NjQ0NzY2ZDhiYzVhODE1ZDI2N2U5YTdiYTRhMjA1ZDZlNjEyMiAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKQEAgLTI1LDEx
ICsyNSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisK
ICNpbXBvcnQgIlVJU2NyaXB0Q29udHJvbGxlckNvY29hLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tQ
dHIuaD4KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CkBAIC0zNywxMyArMzcsMTQgQEAg
Y2xhc3MgRmxvYXRSZWN0OwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVUlTY3JpcHRDb250
cm9sbGVySU9TIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKK2NsYXNzIFVJU2Ny
aXB0Q29udHJvbGxlcklPUyBmaW5hbCA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSB7
CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVySU9TKFVJU2NyaXB0Q29u
dGV4dCYgY29udGV4dCkKICAgICAgICAgOiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShjb250ZXh0
KQogICAgIHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCB3YWl0Rm9yT3V0c3RhbmRpbmdD
YWxsYmFja3MoKSBvdmVycmlkZTsKICAgICB2b2lkIGRvQWZ0ZXJQcmVzZW50YXRpb25VcGRhdGUo
SlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRh
dGlvblVwZGF0ZShKU1ZhbHVlUmVmKSBvdmVycmlkZTsKQEAgLTE1Niw3ICsxNTcsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXREaWRFbmRTY3JvbGxpbmdDYWxsYmFjayhKU1ZhbHVlUmVmKSBvdmVy
cmlkZTsKICAgICB2b2lkIGNsZWFyQWxsQ2FsbGJhY2tzKCkgb3ZlcnJpZGU7CiAKLXByaXZhdGU6
CiAgICAgdm9pZCB3YWl0Rm9yTW9kYWxUcmFuc2l0aW9uVG9GaW5pc2goKSBjb25zdDsKICAgICB2
b2lkIHdhaXRGb3JTaW5nbGVUYXBUb1Jlc2V0KCkgY29uc3Q7CiAgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IHJlY3RGb3JNZW51QWN0aW9uKENGU3RyaW5nUmVmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQppbmRleCAxMzBj
NDk3YzI0MGQ4MzhiYjRhZmZmZDIwNzMxNDE3NWE4M2RiYjI2Li43YWY2ZWNmNTA5ODVmMTVlZjQ3
YzE5MThiNjVhMmViZGE2ZDI2YTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBAIC02OCwyNCArNjgsMTQgQEAgc3RhdGlj
IE5TRGljdGlvbmFyeSAqdG9OU0RpY3Rpb25hcnkoQ0dSZWN0IHJlY3QpCiAgICAgfTsKIH0KIAot
c3RhdGljIHVuc2lnbmVkIGFycmF5TGVuZ3RoKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBhcnJheSkKLXsKLSAgICBhdXRvIGxlbmd0aFN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgaWYgKGF1dG8gbGVuZ3RoVmFsdWUg
PSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCks
IG51bGxwdHIpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVU
b051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgIHJldHVybiAwOwot
fQotCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gcGFyc2VNb2RpZmllckFycmF5KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFycmF5VmFsdWUpCiB7CiAgICAgaWYgKCFhcnJheVZhbHVl
KQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gVGhlIHZhbHVlIG1heSBlaXRoZXIgYmUg
YSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBvZiBtb2RpZmllcnMu
Ci0gICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkgewotICAgICAg
ICBhdXRvIHN0cmluZyA9IHRvV1RGU3RyaW5nKHRvV0soYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCBhcnJheVZhbHVlLCBudWxscHRyKSkpKTsKLSAgICAgICAgcmV0dXJuIHsgc3Ry
aW5nIH07Ci0gICAgfQorICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1
ZSkpCisgICAgICAgIHJldHVybiB7IHRvV1RGU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpIH07
CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBhcnJheVZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKQEAgLTkzLDE2ICs4Myw4IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBw
YXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlW
CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOwogICAg
IFZlY3RvcjxTdHJpbmc+IG1vZGlmaWVyczsKICAgICBtb2RpZmllcnMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIEpT
VmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJh
eSwgaSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgYXV0byBzdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIHZhbHVlLCAmZXhjZXB0aW9uKSk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbW9kaWZpZXJzLmFwcGVuZCh0b1dURlN0cmlu
Zyh0b1dLKHN0cmluZy5nZXQoKSkpKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQorICAgICAgICBtb2RpZmllcnMuYXBwZW5kKHRvV1RGU3RyaW5nKGNv
bnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBudWxs
cHRyKSkpOwogICAgIHJldHVybiBtb2RpZmllcnM7CiB9CiAKQEAgLTUxNCwxMCArNDk2LDkgQEAg
dm9pZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJlS2V5
Ym9hcmQoSlNTdHJpbmdSZWYgY2hhcmEKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250
ZXh0LT5wcmVwYXJlRm9yQXN5bmNUYXNrKGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25QZXJzaXN0
ZW50KTsKIAogICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUga2V5Ym9hcmQgaXMgYWxyZWFkeSBzaG93
bi4KLSAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlQ
cmVzczp0b1dURlN0cmluZyh0b1dLKGNoYXJhY3RlcikpIGNvbXBsZXRpb25CbG9jazptYWtlQmxv
Y2tQdHIoW3RoaXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewot
ICAgICAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9j
b250ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShjYWxsYmFja0lEKTsKKyAgICBbW0hJREV2ZW50R2Vu
ZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlQcmVzczp0b1dURlN0cmluZyhjaGFy
YWN0ZXIpIGNvbXBsZXRpb25CbG9jazptYWtlQmxvY2tQdHIoW3N0cm9uZ1RoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY2FsbGJhY2tJRF0geworICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9jb250ZXh0
KQorICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9jb250ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShj
YWxsYmFja0lEKTsKICAgICB9KS5nZXQoKV07CiB9CiAKQEAgLTUzNCw3ICs1MTUsNyBAQCB2b2lk
IFVJU2NyaXB0Q29udHJvbGxlcklPUzo6cmF3S2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiB7CiAg
ICAgLy8gS2V5IGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50IG9yIHRo
ZSBuYW1lIG9mIGEgc3BlY2lhbCBrZXkgKGUuZy4gImRvd25BcnJvdyIpLgogICAgIC8vIEhJREV2
ZW50R2VuZXJhdG9yIGtub3dzIGhvdyB0byBtYXAgdGhlc2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBh
cHByb3ByaWF0ZSBrZXljb2RlLgotICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZl
bnRHZW5lcmF0b3JdIGtleURvd246dG9XVEZTdHJpbmcodG9XSyhrZXkpKV07CisgICAgW1tISURF
dmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0ga2V5RG93bjp0b1dURlN0cmlu
ZyhrZXkpXTsKICAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9y
XSBzZW5kTWFya2VySElERXZlbnRXaXRoQ29tcGxldGlvbkJsb2NrOl57IC8qIERvIG5vdGhpbmcg
Ki8gfV07CiB9CiAKQEAgLTU0Miw3ICs1MjMsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklP
Uzo6cmF3S2V5VXAoSlNTdHJpbmdSZWYga2V5KQogewogICAgIC8vIEtleSBjYW4gYmUgZWl0aGVy
IGEgc2luZ2xlIFVuaWNvZGUgY29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpYWwga2V5
IChlLmcuICJkb3duQXJyb3ciKS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93cyBob3cg
dG8gbWFwIHRoZXNlIHNwZWNpYWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29kZS4KLSAg
ICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlVcDp0b1dU
RlN0cmluZyh0b1dLKGtleSkpXTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2
ZW50R2VuZXJhdG9yXSBrZXlVcDp0b1dURlN0cmluZyhrZXkpXTsKICAgICBbW0hJREV2ZW50R2Vu
ZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBzZW5kTWFya2VySElERXZlbnRXaXRoQ29t
cGxldGlvbkJsb2NrOl57IC8qIERvIG5vdGhpbmcgKi8gfV07CiB9CiAKQEAgLTU1MCw3ICs1MzEs
NyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6a2V5RG93bihKU1N0cmluZ1JlZiBjaGFy
YWN0ZXIsIEpTVmFsdWVSZWYgbW9kaWZpZXJBcgogewogICAgIC8vIENoYXJhY3RlciBjYW4gYmUg
ZWl0aGVyIGEgc2luZ2xlIFVuaWNvZGUgY29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNp
YWwga2V5IChlLmcuICJkb3duQXJyb3ciKS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93
cyBob3cgdG8gbWFwIHRoZXNlIHNwZWNpYWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29k
ZS4KLSAgICBTdHJpbmcgaW5wdXRTdHJpbmcgPSB0b1dURlN0cmluZyh0b1dLKGNoYXJhY3Rlcikp
OworICAgIGF1dG8gaW5wdXRTdHJpbmcgPSB0b1dURlN0cmluZyhjaGFyYWN0ZXIpOwogICAgIGF1
dG8gbW9kaWZpZXJGbGFncyA9IHBhcnNlTW9kaWZpZXJBcnJheShtX2NvbnRleHQtPmpzQ29udGV4
dCgpLCBtb2RpZmllckFycmF5KTsKIAogICAgIGZvciAoYXV0byYgbW9kaWZpZXJGbGFnIDogbW9k
aWZpZXJGbGFncykKQEAgLTcyNyw3ICs3MDgsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklP
Uzo6YXBwbHlBdXRvY29ycmVjdGlvbihKU1N0cmluZ1JlZiBuZXdTdHJpbmcsIEpTU3RyaW5nUgog
ICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBtX2NvbnRleHQtPnByZXBhcmVGb3JBc3luY1Rhc2so
Y2FsbGJhY2ssIENhbGxiYWNrVHlwZU5vblBlcnNpc3RlbnQpOwogCiAgICAgVGVzdFJ1bm5lcldL
V2ViVmlldyAqd2ViVmlldyA9IHRoaXMtPndlYlZpZXcoKTsKLSAgICBbd2ViVmlldyBhcHBseUF1
dG9jb3JyZWN0aW9uOnRvV1RGU3RyaW5nKHRvV0sobmV3U3RyaW5nKSkgdG9TdHJpbmc6dG9XVEZT
dHJpbmcodG9XSyhvbGRTdHJpbmcpKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRy
KFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKKyAgICBb
d2ViVmlldyBhcHBseUF1dG9jb3JyZWN0aW9uOnRvV1RGU3RyaW5nKG5ld1N0cmluZykgdG9TdHJp
bmc6dG9XVEZTdHJpbmcob2xkU3RyaW5nKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2Nr
UHRyKFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKICAg
ICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgbWFrZUJsb2Nr
UHRyKFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKICAg
ICAgICAgICAgIC8vIGFwcGx5QXV0b2NvcnJlY3Rpb24gY2FuIGNhbGwgaXRzIGNvbXBsZXRpb24g
aGFuZGxlciBzeW5jaHJvbm91c2x5LAogICAgICAgICAgICAgLy8gd2hpY2ggbWFrZXMgVUlTY3Jp
cHRDb250cm9sbGVyIHVuaGFwcHkgKHNlZSBidWcgMTcyODg0KS4KQEAgLTExNTcsNyArMTEzOCw3
IEBAIGJvb2wgVUlTY3JpcHRDb250cm9sbGVySU9TOjppc1Nob3dpbmdEYXRhTGlzdFN1Z2dlc3Rp
b25zKCkgY29uc3QKIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnNldEtleWJvYXJkSW5w
dXRNb2RlSWRlbnRpZmllcihKU1N0cmluZ1JlZiBpZGVudGlmaWVyKQogewotICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRLZXlib2FyZElucHV0TW9kZUlkZW50aWZpZXIodG9XVEZT
dHJpbmcodG9XSyhpZGVudGlmaWVyKSkpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRLZXlib2FyZElucHV0TW9kZUlkZW50aWZpZXIodG9XVEZTdHJpbmcoaWRlbnRpZmllcikp
OwogfQogCiAvLyBGSVhNRTogV3JpdGUgdGhpcyBpbiB0ZXJtcyBvZiBISURFdmVudEdlbmVyYXRv
ciBvbmNlIHdlIGtub3cgaG93IHRvIHJlc2V0IGNhcHMgbG9jayBzdGF0ZQpAQCAtMTE3OCw3ICsx
MTU5LDcgQEAgYm9vbCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OmtleWJvYXJkSXNBdXRvbWF0aWNh
bGx5U2hpZnRlZCgpIGNvbnN0CiAKIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6
YXR0YWNobWVudEluZm8oSlNTdHJpbmdSZWYganNBdHRhY2htZW50SWRlbnRpZmllcikKIHsKLSAg
ICBhdXRvIGF0dGFjaG1lbnRJZGVudGlmaWVyID0gdG9XVEZTdHJpbmcodG9XSyhqc0F0dGFjaG1l
bnRJZGVudGlmaWVyKSk7CisgICAgYXV0byBhdHRhY2htZW50SWRlbnRpZmllciA9IHRvV1RGU3Ry
aW5nKGpzQXR0YWNobWVudElkZW50aWZpZXIpOwogICAgIF9XS0F0dGFjaG1lbnQgKmF0dGFjaG1l
bnQgPSBbd2ViVmlldygpIF9hdHRhY2htZW50Rm9ySWRlbnRpZmllcjphdHRhY2htZW50SWRlbnRp
Zmllcl07CiAgICAgX1dLQXR0YWNobWVudEluZm8gKmF0dGFjaG1lbnRJbmZvID0gYXR0YWNobWVu
dC5pbmZvOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNl
bmRlclByb3h5Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94
eS5tbQppbmRleCAwNjcyYjU4MWJmNjViNWFkOWEyYjg1ZmVhODYxNjQ4ZjIyM2ViNGM1Li4xMDI3
Mjg4NDA4NGQyYzEwMjA4Y2ZhMDcxNGYxYjEwYzVlZmMwYTBiIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW0KQEAgLTI3MiwyMCArMjcyLDEwIEBA
IHN0YXRpYyBOU1RpbWVJbnRlcnZhbCBhYnNvbHV0ZVRpbWVGb3JFdmVudFRpbWUoZG91YmxlIGN1
cnJlbnRFdmVudFRpbWUpCiAKIEV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVz
dENvbnRyb2xsZXIqIHRlc3RDb250cm9sbGVyKQogICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0
Q29udHJvbGxlcikKLSAgICAsIG1fdGltZSgwKQotICAgICwgbV9wb3NpdGlvbigpCi0gICAgLCBt
X2xlZnRNb3VzZUJ1dHRvbkRvd24oZmFsc2UpCi0gICAgLCBtX2NsaWNrQ291bnQoMCkKLSAgICAs
IG1fY2xpY2tUaW1lKDApCi0gICAgLCBtX2NsaWNrUG9zaXRpb24oKQotICAgICwgbV9jbGlja0J1
dHRvbihrV0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b24pCi0gICAgLCBldmVudE51bWJlcigwKQog
ewogfQogCi1FdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSgpCi17Ci19CitFdmVu
dFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSgpID0gZGVmYXVsdDsKIAogdm9pZCBFdmVu
dFNlbmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiB7CkBA
IC0zOTQsNyArMzg0LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlRm9yY2VFdmVudFN5bmNocm9ub3Vz
bHkoTlNFdmVudCAqZXZlbnQpCiAKIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5
OjpiZWdpblByZXNzdXJlRXZlbnQoaW50IHN0YWdlKQogewotICAgIFJldGFpblB0cjxFdmVudFNl
bmRlclN5bnRoZXRpY0V2ZW50PiBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5bnRoZXRp
Y0V2ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9w
b3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCisgICAgYXV0byBldmVudCA9IGFkb3B0TlMoW1tFdmVu
dFNlbmRlclN5bnRoZXRpY0V2ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246
TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIGdsb2JhbExv
Y2F0aW9uOihbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3co
KSBjb252ZXJ0UmVjdFRvU2NyZWVuOk5TTWFrZVJlY3QobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9u
LnksIDEsIDEpXS5vcmlnaW4pCiAgICAgICAgIHN0YWdlOnN0YWdlCiAgICAgICAgIHByZXNzdXJl
OjAuNQpAQCAtNDA5LDcgKzM5OSw3IEBAIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclBy
b3h5OjpiZWdpblByZXNzdXJlRXZlbnQoaW50IHN0YWdlKQogCiBSZXRhaW5QdHI8TlNFdmVudD4g
RXZlbnRTZW5kZXJQcm94eTo6cHJlc3N1cmVDaGFuZ2VFdmVudChpbnQgc3RhZ2UsIGZsb2F0IHBy
ZXNzdXJlLCBFdmVudFNlbmRlclByb3h5OjpQcmVzc3VyZUNoYW5nZURpcmVjdGlvbiBkaXJlY3Rp
b24pCiB7Ci0gICAgUmV0YWluUHRyPEV2ZW50U2VuZGVyU3ludGhldGljRXZlbnQ+IGV2ZW50ID0g
YWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2
ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKKyAg
ICBhdXRvIGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2Nd
IGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1f
cG9zaXRpb24ueSkKICAgICAgICAgZ2xvYmFsTG9jYXRpb246KFttX3Rlc3RDb250cm9sbGVyLT5t
YWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpIGNvbnZlcnRSZWN0VG9TY3JlZW46TlNNYWtl
UmVjdChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgMSwgMSldLm9yaWdpbikKICAgICAgICAg
c3RhZ2U6c3RhZ2UKICAgICAgICAgcHJlc3N1cmU6cHJlc3N1cmUKQEAgLTQzMSwxMCArNDIxLDEw
IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZUNsaWNrKCkKIHsKICAgICBzZW5k
TW91c2VEb3duVG9TdGFydFByZXNzdXJlRXZlbnRzKCk7CiAKLSAgICBSZXRhaW5QdHI8TlNFdmVu
dD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKLSAgICBSZXRhaW5QdHI8
TlNFdmVudD4gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVD
aGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBmb3Jj
ZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6
SW5jcmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IHJlbGVhc2luZ1ByZXNzdXJlID0g
cHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2lu
Zyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOworICAg
IGF1dG8gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFu
Z2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gZm9yY2VDbGljayA9IHByZXNzdXJl
Q2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAg
IGF1dG8gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJl
Q2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKICAgICBOU0V2ZW50ICptb3VzZVVwID0gW05T
RXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TRXZlbnRUeXBlTGVmdE1vdXNlVXAKICAgICAgICAg
bG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAg
IG1vZGlmaWVyRmxhZ3M6MApAQCAtNDY4LDkgKzQ1OCw5IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94
eTo6c3RhcnRBbmRDYW5jZWxNb3VzZUZvcmNlQ2xpY2soKQogewogICAgIHNlbmRNb3VzZURvd25U
b1N0YXJ0UHJlc3N1cmVFdmVudHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblBy
ZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBp
bmNyZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdl
RGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcmVsZWFzaW5n
UHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9u
OjpEZWNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZl
bnQoMSk7CisgICAgYXV0byBpbmNyZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50
KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIHJlbGVh
c2luZ1ByZXNzdXJlID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVj
dGlvbjo6RGVjcmVhc2luZyk7CiAgICAgTlNFdmVudCAqbW91c2VVcCA9IFtOU0V2ZW50IG1vdXNl
RXZlbnRXaXRoVHlwZTpOU0V2ZW50VHlwZUxlZnRNb3VzZVVwCiAgICAgICAgIGxvY2F0aW9uOk5T
TWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQogICAgICAgICBtb2RpZmllckZs
YWdzOjAKQEAgLTUwMyw5ICs0OTMsOSBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9y
Y2VEb3duKCkKIHsKICAgICBzZW5kTW91c2VEb3duVG9TdGFydFByZXNzdXJlRXZlbnRzKCk7CiAK
LSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVu
dCgxKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hh
bmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJl
dGFpblB0cjxOU0V2ZW50PiBmb3JjZU1vdXNlRG93biA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwg
UHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gYmVnaW5QcmVz
c3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKKyAgICBhdXRvIHByZUZvcmNlQ2xpY2sgPSBw
cmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5n
KTsKKyAgICBhdXRvIGZvcmNlTW91c2VEb3duID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVz
c3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CiAKICAgICBOU1ZpZXcgKnRhcmdldFZp
ZXcgPSBbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkgaGl0
VGVzdDpbYmVnaW5QcmVzc3VyZSBsb2NhdGlvbkluV2luZG93XV07CiAgICAgdGFyZ2V0VmlldyA9
IHRhcmdldFZpZXcgPyB0YXJnZXRWaWV3IDogbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXco
KS0+cGxhdGZvcm1WaWV3KCk7CkBAIC01MjYsOSArNTE2LDkgQEAgdm9pZCBFdmVudFNlbmRlclBy
b3h5Ojptb3VzZUZvcmNlRG93bigpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3Jj
ZVVwKCkKIHsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJl
c3N1cmVFdmVudCgyKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gc3RhZ2VUd29FdmVudCA9IHBy
ZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcp
OwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBzdGFnZU9uZUV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VF
dmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBi
ZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDIpOworICAgIGF1dG8gc3RhZ2VUd29F
dmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRl
Y3JlYXNpbmcpOworICAgIGF1dG8gc3RhZ2VPbmVFdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQo
MSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwogCiAgICAgLy8gU2luY2Ug
QXBwS2l0IGRvZXMgbm90IGltcGxlbWVudCBmb3JjZXVwL2Rvd24gYXMgbW91c2UgZXZlbnRzLCB3
ZSBuZWVkIHRvIHNlbmQgdHdvIHByZXNzdXJlIGV2ZW50cyB0byBkZXRlY3QKICAgICAvLyB0aGUg
Y2hhbmdlIGluIHN0YWdlIHRoYXQgbWFya3MgdGhvc2UgbW9tZW50cy4KQEAgLTU1MSw4ICs1NDEs
OCBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0IGZvcmNl
KQogewogICAgIGludCBzdGFnZSA9IGZvcmNlIDwgMSA/IDEgOiAyOwogICAgIGZsb2F0IHByZXNz
dXJlID0gZm9yY2UgPCAxID8gZm9yY2UgOiBmb3JjZSAtIDE7Ci0gICAgUmV0YWluUHRyPE5TRXZl
bnQ+IGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoc3RhZ2UpOwotICAgIFJldGFp
blB0cjxOU0V2ZW50PiBwcmVzc3VyZUNoYW5nZWRFdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQo
c3RhZ2UsIHByZXNzdXJlLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Cisg
ICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KHN0YWdlKTsKKyAgICBh
dXRvIHByZXNzdXJlQ2hhbmdlZEV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudChzdGFnZSwgcHJl
c3N1cmUsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKIAogICAgIE5TVmll
dyAqdGFyZ2V0VmlldyA9IFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9y
bVZpZXcoKSBoaXRUZXN0OltiZWdpblByZXNzdXJlIGxvY2F0aW9uSW5XaW5kb3ddXTsKICAgICB0
YXJnZXRWaWV3ID0gdGFyZ2V0VmlldyA/IHRhcmdldFZpZXcgOiBtX3Rlc3RDb250cm9sbGVyLT5t
YWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKQEAgLTYxMSw4ICs2MDEsNyBAQCB2b2lkIEV2
ZW50U2VuZGVyUHJveHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiAKIHZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMg
bW9kaWZpZXJzLCB1bnNpZ25lZCBrZXlMb2NhdGlvbikKIHsKLSAgICBOU1N0cmluZyogY2hhcmFj
dGVyID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDU3RyaW5nOnRvU1REKGtleSkuY19zdHIoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzpbTlNTdHJpbmcgZGVmYXVs
dENTdHJpbmdFbmNvZGluZ11dOworICAgIE5TU3RyaW5nKiBjaGFyYWN0ZXIgPSB0b1dURlN0cmlu
ZyhrZXkpOwogCiAgICAgTlNTdHJpbmcgKmV2ZW50Q2hhcmFjdGVyID0gY2hhcmFjdGVyOwogICAg
IHVuc2lnbmVkIHNob3J0IGtleUNvZGUgPSAwOwpAQCAtODMyLDcgKzgyMSw3IEBAIHZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMg
bW9kaWZpZXJzLCB1bnNpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeShp
bnQgeCwgaW50IHkpCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IGNnU2Nyb2xsRXZlbnQg
PSBhZG9wdENGKENHRXZlbnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVu
dFVuaXRMaW5lLCAyLCB5LCB4LCAwKSk7CisgICAgYXV0byBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRD
RihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGlu
ZSwgMiwgeSwgeCwgMCkpOwogCiAgICAgLy8gU2V0IHRoZSBDR0V2ZW50IGxvY2F0aW9uIGluIGZs
aXBwZWQgY29vcmRzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBzY3JlZW4sIHdoaWNoCiAgICAgLy8g
Y29tcGVuc2F0ZXMgZm9yIHRoZSBiZWhhdmlvciBvZiArW05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVu
dDpdIHdoZW4gdGhlIGV2ZW50IGhhcwpAQCAtODU5LDcgKzg0OCw3IEBAIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBib29sIHBhZ2Vk
KQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21l
bnR1bVBoYXNlcyhpbnQgeCwgaW50IHksIGludCBwaGFzZSwgaW50IG1vbWVudHVtKQogewotICAg
IFJldGFpblB0cjxDR0V2ZW50UmVmPiBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3Jl
YXRlU2Nyb2xsV2hlZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwg
MCkpOworICAgIGF1dG8gY2dTY3JvbGxFdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZVNjcm9s
bFdoZWVsRXZlbnQyKDAsIGtDR1Njcm9sbEV2ZW50VW5pdExpbmUsIDIsIHksIHgsIDApKTsKIAog
ICAgIC8vIFNldCB0aGUgQ0dFdmVudCBsb2NhdGlvbiBpbiBmbGlwcGVkIGNvb3JkcyByZWxhdGl2
ZSB0byB0aGUgZmlyc3Qgc2NyZWVuLCB3aGljaAogICAgIC8vIGNvbXBlbnNhdGVzIGZvciB0aGUg
YmVoYXZpb3Igb2YgK1tOU0V2ZW50IGV2ZW50V2l0aENHRXZlbnQ6XSB3aGVuIHRoZSBldmVudCBo
YXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmll
d01hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5t
bQppbmRleCA2NDE3ODJjYTk3ZTFkYWZiOTAwOTE5ZGIxOWIzNDc0YTU1NDM4OGU1Li41YTRlOTZi
ODFlYThjZGEwNmIzN2I0NjhlNTg4NTllZjcxZWI0NmI4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCkBAIC02NCw3ICs2NCw3IEBAIFBs
YXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24qIGNv
bmZpZ3VyYXRpb24sIGNvbnN0IFRlCiAgICAgaWYgKG1fb3B0aW9ucy51c2VSZW1vdGVMYXllclRy
ZWUpCiAgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldFZh
bHVlOkBZRVMgZm9yS2V5OkAiV2ViS2l0MlVzZVJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhIl07
CiAKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29waWVkQ29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOworICAgIGF1dG8gY29waWVkQ29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOwogICAgIFdLUHJlZmVy
ZW5jZXNTZXRUaHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdlIFdLUHJlZmVyZW5jZXNS
ZWYpW2NvcGllZENvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCBtX29wdGlvbnMudXNlVGhyZWFk
ZWRTY3JvbGxpbmcpOwogCiAgICAgTlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIFRlc3RD
b250cm9sbGVyOjp2aWV3V2lkdGgsIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0KTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KaW5kZXggMTRi
N2RjOWQwZjI0ZWMxMGU3OGFjMmIwZTAzNjVhOWVhNjQ5YWIyNi4uYjIyMjg3MWNkMGEzOTE5ZTMz
ZWQ2MDZkMGY0NDE2ODg1NjkzYTIwNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9t
YWMvVGVzdENvbnRyb2xsZXJNYWMubW0KQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2Nh
dGlvbiYgdGVzdAogICAgIGlmICghdGVzdC51cmxDb250YWlucygiY29udGVudGV4dGVuc2lvbnMv
IikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdGVzdFVSTCA9
IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGVzdC51cmwoKSkp
OworICAgIGF1dG8gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgdGVzdC51cmwoKSkpOwogICAgIE5TVVJMICpmaWx0ZXJVUkwgPSBbKF9fYnJpZGdl
IE5TVVJMICopdGVzdFVSTC5nZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhFeHRlbnNpb246QCJqc29u
Il07CiAKICAgICBfX2Jsb2NrIE5TU3RyaW5nICpjb250ZW50RXh0ZW5zaW9uU3RyaW5nOwpAQCAt
MzcxLDE0ICszNzEsMTQgQEAgc3RhdGljIE5TU2V0ICpzeXN0ZW1IaWRkZW5Gb250RmFtaWx5U2V0
KCkKIAogc3RhdGljIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGdlbmVyYXRlRm9udEFsbG93TGlz
dCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IHJlc3VsdCA9IGFkb3B0
V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byByZXN1bHQgPSBhZG9wdFdLKFdL
TXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAoTlNTdHJpbmcgKmZvbnRGYW1pbHkgaW4g
YWxsb3dlZEZvbnRGYW1pbHlTZXQoKSkgewogICAgICAgICBOU0FycmF5ICpmb250c0ZvckZhbWls
eSA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gYXZhaWxhYmxlTWVtYmVyc09m
Rm9udEZhbWlseTpmb250RmFtaWx5XTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGZhbWlseUluRm9udCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW2Zv
bnRGYW1pbHkgVVRGOFN0cmluZ10pKTsKKyAgICAgICAgYXV0byBmYW1pbHlJbkZvbnQgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFtmb250RmFtaWx5IFVURjhTdHJpbmdd
KSk7CiAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdC5nZXQoKSwgZmFtaWx5SW5Gb250
LmdldCgpKTsKICAgICAgICAgZm9yIChOU0FycmF5ICpmb250SW5mbyBpbiBmb250c0ZvckZhbWls
eSkgewogICAgICAgICAgICAgLy8gRm9udCBuYW1lIGlzIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUg
YXJyYXkuCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZm9udE5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFtbZm9udEluZm8gb2JqZWN0QXRJ
bmRleDowXSBVVEY4U3RyaW5nXSkpOworICAgICAgICAgICAgYXV0byBmb250TmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW1tmb250SW5mbyBvYmplY3RBdEluZGV4
OjBdIFVURjhTdHJpbmddKSk7CiAgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShyZXN1bHQu
Z2V0KCksIGZvbnROYW1lLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM5NCw3ICszOTQs
NyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKICAg
ICAvLyBUZXN0aW5nIHVzZXMgYSBwcml2YXRlIHNlc3Npb24sIHdoaWNoIGlzIG1lbW9yeSBvbmx5
LiBIb3dldmVyIGNyZWF0aW5nIG9uZSBpbnN0YW50aWF0ZXMgYSBzaGFyZWQgTlNVUkxDYWNoZSwK
ICAgICAvLyBhbmQgaWYgd2UgaGF2ZW4ndCBjcmVhdGVkIG9uZSB5ZXQsIHRoZSBkZWZhdWx0IG9u
ZSB3aWxsIGJlIGNyZWF0ZWQgb24gZGlzay4KICAgICAvLyBNYWtpbmcgdGhlIHNoYXJlZCBjYWNo
ZSBtZW1vcnktb25seSBhdm9pZHMgdG91Y2hpbmcgdGhlIGZpbGUgc3lzdGVtLgotICAgIFJldGFp
blB0cjxOU1VSTENhY2hlPiBzaGFyZWRDYWNoZSA9CisgICAgYXV0byBzaGFyZWRDYWNoZSA9CiAg
ICAgICAgIGFkb3B0TlMoW1tOU1VSTENhY2hlIGFsbG9jXSBpbml0V2l0aE1lbW9yeUNhcGFjaXR5
OjEwMjQgKiAxMDI0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tD
YXBhY2l0eTowCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNr
UGF0aDpuaWxdKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2Ny
aXB0Q29udHJvbGxlck1hYy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRD
b250cm9sbGVyTWFjLmgKaW5kZXggMGVhYjg5NDllNmJlYmZlZTY1OTQ3NTg5YWZiOWU4ZDliOGJl
MWVjNy4uMmQyZDFkNmI4NDZlNjg3OGIwYjFlYmRjMTY2N2MxNzVlOTE1NjY1ZiAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKQEAg
LTMxLDEzICszMSwxNCBAQCBPQkpDX0NMQVNTIFdLV2ViVmlldzsKIAogbmFtZXNwYWNlIFdUUiB7
CiAKLWNsYXNzIFVJU2NyaXB0Q29udHJvbGxlck1hYyA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xs
ZXJDb2NvYSB7CitjbGFzcyBVSVNjcmlwdENvbnRyb2xsZXJNYWMgZmluYWwgOiBwdWJsaWMgVUlT
Y3JpcHRDb250cm9sbGVyQ29jb2EgewogcHVibGljOgogICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29u
dHJvbGxlck1hYyhVSVNjcmlwdENvbnRleHQmIGNvbnRleHQpCiAgICAgICAgIDogVUlTY3JpcHRD
b250cm9sbGVyQ29jb2EoY29udGV4dCkKICAgICB7CiAgICAgfQogCitwcml2YXRlOgogICAgIHZv
aWQgcmVwbGFjZVRleHRBdFJhbmdlKEpTU3RyaW5nUmVmLCBpbnQsIGludCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCB6b29tVG9TY2FsZShkb3VibGUsIEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIGRv
dWJsZSB6b29tU2NhbGUoKSBjb25zdCBvdmVycmlkZTsKQEAgLTYyLDcgKzYzLDYgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBhY3RpdmF0ZUF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpTVmFsdWVSZWYg
Y2FsbGJhY2spIG92ZXJyaWRlOwogCi1wcml2YXRlOgogICAgIE5TVGFibGVWaWV3ICpkYXRhTGlz
dFN1Z2dlc3Rpb25zVGFibGVWaWV3KCkgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KaW5kZXggY2QxMTMyOWE2
NTQxZDdiNGViNzdkN2VjMTQ2ODhlOTkyMWYyN2M1My4uYjVjYjUxODE1MDU5ZTdhMDkzYTE0MjM5
OTFlODkxN2UzZWQzMDkwOCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMv
VUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFj
L1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgVUlTY3Jp
cHRDb250cm9sbGVyTWFjOjpjb21wbGV0ZUJhY2tTd2lwZShKU1ZhbHVlUmVmIGNhbGxiYWNrKQog
CiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlck1hYzo6cGxheUJhY2tFdmVudFN0cmVhbShKU1N0cmlu
Z1JlZiBldmVudFN0cmVhbSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKLSAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IHN0cmVhbSA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgZXZlbnRTdHJlYW0pKTsKKyAgICBhdXRvIHN0cmVhbSA9IGFkb3B0Q0Yo
SlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXZlbnRTdHJlYW0pKTsK
ICAgICBwbGF5QmFja0V2ZW50cyh3ZWJWaWV3KCksIG1fY29udGV4dCwgKF9fYnJpZGdlIE5TU3Ry
aW5nICopc3RyZWFtLmdldCgpLCBjYWxsYmFjayk7CiB9CiAK
</data>
<flag name="commit-queue"
          id="425669"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409854</attachid>
            <date>2020-09-27 12:50:39 -0700</date>
            <delta_ts>2020-09-27 13:03:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200927125038.patch</filename>
            <type>text/plain</type>
            <size>697655</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJmZWY0NTFlYS4u
NDE0MjQxMWNiYTZhMmY1NjU2YWU4MDZlZDJjZWYzZDhjOWMxZTBkNCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0MSBAQAorMjAy
MC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlmeWluZywgYnV0IGV2ZW4g
bW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVzdAorICAgICAgICBjb2Rl
IGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkgYW5kIHBhc3RlIHJhdGhl
ciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0ZXIgdGhlIHJlZmFjdG9y
aW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlzIGNvZGUgaXMgd3JpdHRl
biB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGluZyBmb3IgZWFjaCBmdW5j
dGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0
KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0NsYXNzIHdpdGggdGhpcy4g
UmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBjbGVhciB0aGlzIHBhc3Nl
cyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKHVp
RWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBSZW1vdmVkIHVubmVlZGVk
IGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3aGljaCBzdGFydHMgb3V0
IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9y
RHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IpOiBV
c2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoX3JldHVybkV4
cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2UgYW5kIGF1dG8uCisgICAg
ICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAo
Z2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChHQ0NvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6IFJlcGxhY2VkIGdldEpT
Q2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFpblB0ciB0byBtYWtlIGl0
IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVyLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKGVuY29kZUhv
c3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChleGVjQ29tbWFu
ZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAob3Zl
cnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKHF1ZXVlTG9hZENhbGxi
YWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5nQ2FsbGJhY2spOiBEaXR0
by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFs
T2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKTogUmVw
bGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRy
IHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisg
ICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25z
dCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAg
ICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQpOiBTaW1wbGlmaWVk
IHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sp
OiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAorICAgICAgICB0YWJsZSB2
YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBuZWVkIHRvIGJlIG9iamVj
dHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogRGl0dG8u
CisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4K
KyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTogVXNlIGFycmF5TGVuZ3Ro
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDogVXBkYXRlZCBmb3IgdGhl
IGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3Jt
TmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoY3JlYXRlRW1w
dHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50
TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
bGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
VmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oOiBSZW1vdmVkIHVubmVl
ZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGguCisgICAgICAgIFJlbW92
ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIgSlNWYWx1ZUlzT2JqZWN0
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSBj
b25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoY3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09iamVjdC4KKyAgICAgICAg
KHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSBjb25zdCk6
IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRnJh
bWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERlbGVnYXRlIGRpZENsZWFy
V2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6CisgICAgICAgIFVzZSBhdXRv
LiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LiBTaW1wbGlmaWVkIG9i
amVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0TlMgaW5zdGVhZCBvZiBy
ZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRDbGVhcldpbmRvd09iamVj
dEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNlIGNyZWF0ZUpTU3RyaW5n
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAg
ICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVuZ3RoLgorCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHA6CisgICAgICAgIChXVFI6
OnRvT3B0aW9uYWxCb29sKTogUmVuYW1lZCBmcm9tIEpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbC4K
KyAgICAgICAgKFdUUjo6dG9PcHRpb25hbERvdWJsZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpt
YWtlVmFsdWUpOiBBZGRlZCB3aXRoIG92ZXJsb2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAg
ICAgUmVwbGFjZWQgSlNWYWx1ZVRvTnVsbGFibGVCb29sZWFuIGFuZCBKU1ZhbHVlTWFrZVN0cmlu
Z09yTnVsbC4KKyAgICAgICAgKFdUUjo6Y3JlYXRlSlNTdHJpbmcpOiBBZGRlZCB3aXRoIG92ZXJs
b2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAgICAgKFdUUjo6cHJvcGVydHkpOiBBZGRlZC4K
KyAgICAgICAgKFdUUjo6c3RyaW5nUHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Ym9v
bGVhblByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChXVFI6Om51bWVyaWNQcm9wZXJ0eSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjpvYmplY3RQcm9wZXJ0eSk6IFJlZmFjdG9yZWQgdG8gY2FsbCBw
cm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBBZGRlZC4KKyAgICAgICAgKFdU
Ujo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Y2FsbCk6
IFJlZmFjdG9yZWQgdG8gbGV0IG9iamVjdFByb3BlcnR5IGRvIG1vcmUgb2YgdGhlIG51bGwgY2hl
Y2tpbmcuCisgICAgICAgIChXVFI6OmNhbGxDb25zdHJ1Y3Rvcik6IERpdHRvLgorICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaDogVXBkYXRlZCBmb3IgdGhlIGFi
b3ZlLgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5o
OiBSZWR1Y2VkIGluY2x1ZGVzIGEgYml0LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU1dyYXBwZXIuaDogQWRkZWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisKKyAg
ICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQu
Y3BwOgorICAgICAgICAoVUlTY3JpcHRDb250ZXh0OjpVSVNjcmlwdENvbnRleHQpOiBQYXNzIGZl
d2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LgorICAgICAgICAoVUlTY3JpcHRDb250
ZXh0OjpydW5VSVNjcmlwdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKFVJU2NyaXB0
Q29udGV4dDo6b2JqZWN0RnJvbVJlY3QgY29uc3QpOiBVc2Ugc2V0UHJvcGVydHkuCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmg6
IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHA6CisgICAgICAgIChXVFI6
OnRvRGV2aWNlT3JpZW50YXRpb24pOiBVc2UgY3JlYXRlSlNTdHJpbmcgYW5kIEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcuCisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6bWFr
ZVdpbmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKworICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbToKKyAgICAg
ICAgKC1bTGF5b3V0VGVzdFNwZWxsQ2hlY2tlciBzZXRSZXN1bHRzRnJvbUpTVmFsdWU6aW5Db250
ZXh0Ol0pOiBVc2UgY3JlYXRlSlNTdHJpbmcKKyAgICAgICAgYW5kIHJlbW92ZWQgdW5uZWVkZWQg
dXNlIG9mIGxyb3VuZGwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlG
dW5jdGlvbnMuaDogQWRkZWQuIENvbnRhaW5zIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworICAgICAg
ICBmb3IgZGVhbGluZyB3aXRoIFdLRGljdGlvbmFyeVJlZi4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oOiBJbml0aWFsaXplIGRhdGEgbWVtYmVycy4KKwor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwOgor
ICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9uKTogVXNlIE9wdGlv
bmFsIGluc3RlYWQgb2Ygc2VwYXJhdGUgYm9vbC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdp
bmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG06CisgICAgICAgIChf
Z2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZpbGUpOiBVc2Ugc3RhdGljIGluaXRpYWxpemF0aW9uIGFu
ZCBhIGxhbWJkYSBpbnN0ZWFkIG9mCisgICAgICAgIGFuIGlmIHN0YXRlbWVudCB0byBpbml0aWFs
aXplLgorICAgICAgICAoX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yKTogVXNlIHRvT3B0aW9uYWxC
b29sIGFuZCBjcmVhdGVKU1N0cmluZy4gQWxzbyBhZGRlZAorICAgICAgICBzdXBwb3J0IGZvciBu
dWxsYWJsZSBkb3VibGVzIGFuZCB1c2VkIGF1dG8gYSBiaXQgbW9yZS4KKyAgICAgICAgKF9yZXR1
cm5FeHByZXNzaW9uKTogVXNlIG1ha2VWYWx1ZS4KKworICAgICAgICAqIEluamVjdGVkQnVuZGxl
L0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOiBNYWRlIHRoZSBvcHRpb25hbCBhcmd1bWVudHMgdG8g
dGhlCisgICAgICAgIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIGZ1bmN0aW9uICJkb3VibGU/
IiBpbnN0ZWFkIG9mICJvYmplY3QiLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6Z2V0
TWVudUl0ZW1DaGlsZHJlbkNhbGxiYWNrKTogVXNlIGF1dG8gYW5kIG5vdCBKU1ZhbHVlVG9PYmpl
Y3QuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogTW92ZWQgdG8gSlNCYXNpY3MuaC9jcHAu
CisgICAgICAgIChXVFI6OnBhcnNlVG91Y2hNb2RpZmllcik6IEFkZGVkLiBGYWN0b3JlZCBvdXQg
b2YgdGhlCisgICAgICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9kaWZpZXIg
ZnVuY3Rpb24uCisgICAgICAgIChXVFI6OnBhcnNlTW9kaWZpZXJBcnJheSk6IFVzZSBjcmVhdGVK
U1N0cmluZyBhbmQgcmVtb3ZlIHVubmVlZGVkIGlnbm9yZWQKKyAgICAgICAgZXhjZXB0aW9uIG91
dCBhcmd1bWVudCwgc2luY2UgdGhhdCBpcyBvcHRpb25hbC4gQWxzbyBhZGRlZCBvdmVybG9hZCB0
aGF0CisgICAgICAgIGdldHMgdGhlIGNvbnRleHQuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp+RXZlbnRTZW5kaW5nQ29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgIChXVFI6OmNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkpOiBVc2UgYWRvcHRX
SyBhbmQgc2V0VmFsdWUuIFJldHVybiBhIFdLUmV0YWluUHRyLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZURvd24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlVXApOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8p
OiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlcy4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNsaWNrKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnN0YXJ0QW5kQ2Fu
Y2VsTW91c2VGb3JjZUNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6Om1vdXNlRm9yY2VEb3duKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VVcCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpsZWFwRm9yd2FyZCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNr
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlS2V5RG93bk1lc3Nh
Z2VCb2R5KTogVXNlIHNldFZhbHVlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjprZXlEb3duKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24p
OiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZVNjcm9sbEJ5KTogVXNlIHNldFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcyk6IFVzZQorICAgICAgICBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3Vz
TW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQKKyAgICAgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRl
eHRDbGljayk6IFVzZSBhdXRvIGFuZCBub3QgSlNWYWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RS
Ojp0b01vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMpOiBVc2UgYm9vbGVhblByb3BlcnR5LgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjphZGRUb3VjaFBvaW50KTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6dXBkYXRlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoUG9pbnRSYWRpdXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hTdGFy
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaE1v
dmUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hF
bmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hD
YW5jZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2xl
YXJUb3VjaFBvaW50cyk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpyZWxlYXNlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9F
dmVudFNlbmRpbmdDb250cm9sbGVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAgICAg
RGVsZXRlZCB2YXJpb3VzIHVubmVlZGVkIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6
R0NDb250cm9sbGVyOjpHQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0Nv
bnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0NvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgIEFsc28gbWFya2VkIHRoZSBjbGFzcyBm
aW5hbC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkQ3JlYXRlUGFn
ZSk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRS
ZWNlaXZlTWVzc2FnZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cG9zdFBhZ2VNZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpy
ZXBvcnRMaXZlRG9jdW1lbnRzKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKTogVXNlIGRpY3Rpb25hcnlW
YWx1ZSwKKyAgICAgICAgYm9vbGVhblZhbHVlLCBwb3N0UGFnZU1lc3NhZ2UsIHZhbHVlLCBhbmQg
bW9yZSB0byBzdHJlYW1saW5lLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6Ym9vbGVh
bkZvcktleSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzdHJpbmdG
b3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0
aW5nKTogVXNlIGJvb2xlYW5WYWx1ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRv
bmUpOiBVc2Ugc3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpjbG9z
ZU90aGVyUGFnZXMpOiBVc2Ugc2V0VmFsdWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpkdW1wVG9TdGRFcnIpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlCisgICAgICAgIChX
VFI6OkluamVjdGVkQnVuZGxlOjpvdXRwdXRUZXh0KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUpOiBVc2UgcG9z
dFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdEFkZENocm9t
ZUlucHV0RmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RS
ZW1vdmVDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0Rm9jdXNXZWJWaWV3KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpwb3N0U2V0V2luZG93SXNLZXkpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRWaWV3U2l6ZSk6IFVzZSBzZXRWYWx1ZSBhbmQgdG9X
Sy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNh
dGlvbkNsaWNrKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnBvc3RTZXRBZGRzVmlzaXRlZExpbmtzKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UsCisgICAgICAgIGFuZCB1c2UgT3B0aW9uYWwgaW5z
dGVhZCBvZiBib29sL2RvdWJsZSBwYWlycy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFVzZSBwb3N0UGFn
ZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjppc0dlb2xvY2F0aW9uUHJv
dmlkZXJBY3RpdmUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQgY29uc3Qp
OiBVc2UgdG9XSyBhbmQgdWludDY0VmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
OjpzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1p
c3Npb25Gb3JPcmlnaW4pOiBVc2Ugc2V0VmFsdWUKKyAgICAgICAgYW5kIHBvc3RQYWdlTWVzc2Fn
ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbik6IFVz
ZXQgc2V0VmFsdWUKKyAgICAgICAgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUpOiBVc2Ugc2V0VmFsdWUgYW5kIHBv
c3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEhpZGRlbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0Q2FjaGVNb2RlbCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1
ZSBjb25zdCk6IFVzZSB0b1dLIGFuZCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpwcm9jZXNzV29ya1F1ZXVlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlQmFja05hdmlnYXRpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24pOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZCk6IFVzZSBzZXRWYWx1
ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cXVldWVSZWxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVl
TG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVOb25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OnBvc3RNZXNzYWdlKTog
QWRkZWQuIE92ZXJsb2FkcyBmb3IgbWFueSB0eXBlcyB0byBrZWVwIGNhbGxlciBjb2RlIHN0cmVh
bWxpbmVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OnBvc3RQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaDogVXBkYXRlZCBmb3IgdGhlIGFib3Zl
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6cHJvcGVy
dHlWYWx1ZURvdWJsZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlSW50KTog
RGl0dG8uCisgICAgICAgIChXVFI6Om51bWVyaWNXaW5kb3dQcm9wZXJ0eSk6IFJlbmFtZWQgZnJv
bSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZSBmb3IgYnJldml0eQorICAgICAgICBhbmQgZm9y
IGNvbnNpc3RlbmN5IHdpdGggSlNCYXNpY3MuaCBmdW5jdGlvbnMuCisgICAgICAgIChXVFI6OmR1
bXBQYXRoKTogVXNlIHN0cmluZ1Byb3BlcnR5LCBvYmplY3RQcm9wZXJ0eSwgYW5kIG1ha2VTdHJp
bmcuCisgICAgICAgIChXVFI6OnJhbmdlVG9TdHIpOiBVc2UgYXV0bywgbnVtZXJpY1Byb3BlcnR5
LCBhbmQgbWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6TmF2aWdhdGlvblR5cGVUb1N0cmluZyk6
IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpzdHJpbmcpOiBSZW5hbWVkIGZyb20gc2VjdXJpdHlP
cmlnaW5Ub1N0ci4gVXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OmZyYW1lVG9TdHIpOiBV
c2UgYXV0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVz
dCk6IFJlbW92ZWQgdW5uZWVkZWQgbG9jYWwuCisgICAgICAgIChXVFI6OmR1bXBGcmFtZURlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OmR1
bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6ZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBVc2Ug
YXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOiBV
cGRhdGUgZm9yIG5hbWUgY2hhbmdlLgorICAgICAgICAoV1RSOjp0b0pTKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6aGFzRG9j
dW1lbnRFbGVtZW50KTogVXNlIG9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHksCisgICAgICAgIGFuZCBwYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93
T2JqZWN0LgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24pOiBTdHJlYW1saW5lIGNvZGUgYSBiaXQuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOiBVc2UgbWFrZVN0
cmluZy4KKyAgICAgICAgKFdUUjo6bGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5RdW90YSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKTogRGl0dG8uCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpUZXN0UnVubmVyKTogVXNlIHRvV0suCisgICAgICAgIChX
VFI6OnBhZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6bWFpbkZyYW1lKTogQWRkZWQuCisgICAg
ICAgIChXVFI6Om1haW5KU0NvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNwbGF5
QW5kVHJhY2tSZXBhaW50cyk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjp0b1dLKTogQWRkZWQg
b3ZlcmxvYWQgZm9yIGRvdWJsZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlV0tEaWN0aW9uYXJ5KTog
QWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0dXJuVmFs
dWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmlu
Z0Jvb2xlYW4pOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VXaXRoUmV0dXJuVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRkZWQuCisgICAgICAgIChX
VFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdVSW50NjQpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNob3VsZER1bXBQaXhlbHMgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldER1bXBQaXhl
bHMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6d2hhdFRvRHVtcCBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5n
VUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXaGF0VG9EdW1wKTogVXNlIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdhaXRV
bnRpbERvbmUpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2hvdWxkV2FpdFVudGlsRG9uZSBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hv
dWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmV4ZWNDb21tYW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OmZpbmRPcHRpb25zRnJv
bUFycmF5KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLCBhbmQgY3JlYXRlSlNTdHJp
bmcuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmcpOiBVc2UgcGFnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZmluZFN0cmluZ01hdGNoZXNJblBhZ2UpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVwbGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKTog
VXNlIG1haW5KU0NvbnRleHQgYW5kIGFycmF5TGVuZ3RoIGFuZAorICAgICAgICByZW1vdmVkIHVu
bmVlZGVkIGNhbGwgdG8gc3RkOjpyb3VuZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBbGxEYXRhYmFzZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKTogVXNlIHBhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VG
b3JPcmlnaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6c3RyaW5nQXJyYXlUb0pTKTogVHdlYWtl
ZCBjb2Rpbmcgc3R5bGUgYSBiaXQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om9yaWdpbnNX
aXRoQXBwbGljYXRpb25DYWNoZSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc0NvbW1hbmRFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dENhbk9wZW5XaW5kb3dzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TWVkaWFEZXZpY2VzRW5hYmxlZCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJSVENNRE5TSUNFQ2FuZGlk
YXRlc0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0Q3VzdG9t
VXNlckFnZW50KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9kZXJuTWVkaWFDb250cm9sc0Vu
YWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViR0wyRW5hYmxl
ZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXcml0YWJsZVN0cmVhbUFQ
SUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VHJhbnNmb3Jt
U3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRS
ZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRHZW5lcmljQ3VlQVBJRW5hYmxlZCk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSk6IFVz
ZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFBs
dWdpbnNFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVyZW5jZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNQYWdlQm94VmlzaWJsZSk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcik6IFJlbW92ZWQgbG9jYWwuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldEF1ZGlvUmVzdWx0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVy
dHkuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IpOiBVc2UgcGFn
ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQpOiBVc2UgcmFuZ2Ut
YmFzZWQgZm9yIGxvb3AuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKTogVXNlIG1haW5GcmFtZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGV4dERpcmVjdGlvbik6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiBj
b25zdCk6CisgICAgICAgIFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyRGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKToKKyAgICAgICAgVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayk6
IENoYW5nZWQgbWFwIHRvIHN0b3JlIG9iamVjdHMgaW5zdGVhZCBvZiB2YWx1ZXMuCisgICAgICAg
IChXVFI6OmNhbGxUZXN0UnVubmVyQ2FsbGJhY2spOiBTaW1wbGlmeSBzaW5jZSBtYXAgaGFzIG9i
amVjdHMuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
clRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0QWx3YXlzQWNjZXB0Q29va2llcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMpOiBV
c2UgYXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxl
U2hlZXRFbmFibGVkKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24pOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpkZW55V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25Q
ZXJtaXNzaW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIE9wdGlvbmFsPGRvdWJs
ZT4gaW5zdGVhZCBvZiBib29sL2RvdWJsZQorICAgICAgICBwYWlycywgbGV0dGluZyB0aGUgSURM
IGJpbmRpbmdzIGRvIHRoZSB3b3JrIGZvciB1cy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKTogUmVtb3ZlZCBsb2Nh
bC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNEb2luZ01lZGlhQ2FwdHVyZSBjb25zdCk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3Jp
Z2luKTogUmVtb3ZlZCBsb2NhbHMuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9y
T3JpZ2luKTogREl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlldyk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnF1
ZXVlTG9hZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1M
U3RyaW5nKTogUmVtb3ZlZCBhIGxvY2FsLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1
ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVldWVO
b25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFJl
amVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cyk6CisgICAgICAgIFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGRM
b2dEb3dubG9hZENhbGxiYWNrcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCBjb25zdCk6IFVzZSBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEJsb2NrQWxsUGx1Z2lucyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6ZmFpbE5leHROZXdDb2RlQmxvY2spOiBVc2UgbWFpbkpTQ29udGV4
dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdDb21waWxlcyk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpuZXZlcklubGluZUZ1bmN0aW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xp
Y3lBZnRlckRlbGF5KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVM
aW1pdHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkRG93bmxv
YWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOiBV
c2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHQpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0Q2FsbGJhY2spOiBVc2UgbWFpbkpT
Q29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dlZE1lbnVBY3Rpb25z
KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLAorICAgICAgICBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppbnN0YWxsQ3VzdG9tTWVudUFjdGlv
bik6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFy
U3RhdGlzdGljc0RhdGFGb3JEb21haW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRh
YmFzZSk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlz
U3RhdGlzdGljc0VwaGVtZXJhbCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVy
bmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1
Z01vZGUpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljKTog
RGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
VmVyeVByZXZhbGVudFJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpp
c1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlSVRQRGF0YWJhc2UpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJl
ZCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbik6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1l
dHJ5Q2FsbGJhY2spOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Vw
ZGF0ZUNvb2tpZUJsb2NraW5nKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5KTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRp
c3RpY3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBVc2UgcG9zdE1l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RlbGV0ZUNvb2tp
ZXNGb3JIb3N0KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpoYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9u
KTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVy
KTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3Rh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6bWFrZURvbWFpbnNWYWx1ZSk6IEZhY3Rv
cmVkIG91dC4gVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNh
bGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayk6IFVzZSBtYWtlRG9t
YWluc1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpsb2FkZWRTdWJyZXNvdXJjZURv
bWFpbnMpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxE
aWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2spOiBVc2UgbWFrZURvbWFp
bnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNs
ZWFyTW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpy
ZW1vdmVNb2NrTWVkaWFEZXZpY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
cmVzZXRNb2NrTWVkaWFEZXZpY2VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjppc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCk6IFVzZQorICAgICAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6Y29ubmVjdE1vY2tHYW1lcGFkKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZERldGFpbHMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRCdXR0b25W
YWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxl
cyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAg
ICAgIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9w
ZW5QYW5lbEZpbGVzTWVkaWFJY29uKTogVXNlIG1haW5KU0NvbnRleHQgYW5kIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRp
YWxzKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRP
TUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyRE9NQ2FjaGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
Omhhc0RPTUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9v
bGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9tQ2FjaGVTaXplKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKTogVXNlIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1h
bmlmZXN0VGhlbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
aW5qZWN0VXNlclNjcmlwdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZv
clRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphZGRU
ZXN0S2V5VG9LZXljaGFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
blVwS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6a2V5RXhpc3Rz
SW5LZXljaGFpbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxi
YWNrQ2FsbHNDb3VudCk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJu
aW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREaXNtaXNzSmF2
YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KTogVXNlCisgICAgICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFib3J0TW9kYWwpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbik6IFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBZENsaWNrQXR0cmlidXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRB
ZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRl
c3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T2Zmc2NyZWVuQ2Fu
dmFzRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6Omhhc0FwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwQm91
bmRTZXNzaW9uKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFwcEJvdW5kRG9tYWlucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxl
bmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAgICAgIGFuZCB0b1dLLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpwb3N0TWVzc2FnZSk6IEFkZGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4g
QWxzbyBjaGFuZ2VkCisgICAgICAgIG92ZXJyaWRlUHJlZmVyZW5jZSBvdCBhIHN0YXRpYyBtZW1i
ZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXh0SW5wdXRDb250cm9s
bGVyOjpUZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6flRleHRJbnB1dENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2Jh
bE9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IERlbGV0ZWQuIFVz
ZSB0aGUgb25lIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChXVFI6OmNyZWF0ZUNvbXBv
c2l0aW9uSGlnaGxpZ2h0RGF0YSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3Ig
dGhlIGFib3ZlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9p
b3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoV1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVs
ZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMp
OiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9m
QXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb21wdXRlZFJvbGVTdHJpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24gY29uc3Qp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNj
cmlwdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0ZvY3VzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5k
c0ZvclJhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJv
d3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mVmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4gY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVl
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZG9jdW1lbnRVUkkpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbiBjb25z
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxh
cHNlZCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NpbmdsZUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNNdWx0aUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2UpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OkV2ZW50U2VuZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0
aW9uLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSk6
IERlbGV0ZWQuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21h
Yy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tOgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5hbWVkIGZyb20gbWFrZUFycmF5UmVmRm9yQXJyYXku
CisgICAgICAgIChXVFI6Om1ha2VKU09iamVjdCk6IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5h
bWVkIGZyb20gbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkuCisgICAgICAgIChXVFI6Om1ha2VW
YWx1ZVJlZkZvclZhbHVlKTogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICAoV1RSOjpz
ZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBV
c2UgdG9XVEZTdHJpbmcKKyAgICAgICAgYW5kIGFycmF5TGVuZ3RoLgorCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5h
bWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAo
V1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVsZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZy
b20gSlNCYXNpY3MuaCBpbnN0ZWFkLgorICAgICAgICAoV1RSOjpjb252ZXJ0VmVjdG9yVG9PYmpl
Y3RBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6Om1ha2VKU0FycmF5KTogUmVuYW1lZCBm
cm9tIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5LgorICAgICAgICAoV1RSOjpzZWxlY3RUZXh0
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nIGFuZCBh
cnJheUxlbmd0aC4KKyAgICAgICAgKFdUUjo6c2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVGb3JDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dIZWFkZXJzIGNvbnN0KTogVXNlIG1ha2VKU0FycmF5LgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEFycmF5QXR0cmlidXRl
VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBVc2UgY3JlYXRlSlNT
dHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9j
dW1lbnRVUkkpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlu
c3BlY3RvclRlc3RTdHViVVJMKTogUmVtb3ZlIGxvY2Fscy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmg6IEFkZGVkIHRvV0tTdHJpbmcgb3ZlcmxvYWQgdGhh
dCBjb252ZXJ0cyBmcm9tCisgICAgICAgIGEgSlNWYWx1ZVJlZiwgSlNTdHJpbmdSZWYsIG9yIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhbmQgdG9XSyBvdmVybG9hZCB0aGF0IGNvbnZlcnRzCisg
ICAgICAgIGZyb20gYSBjb25zdCBjaGFyKi4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVD
b250ZXh0Q29uZmlndXJhdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6
IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUxpdmVE
b2N1bWVudHNBZnRlclRlc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmNoZWNrRm9yV29ybGRMZWFrcyk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpjb250ZW50RXh0
ZW5zaW9uSlNPTlBhdGgpOiBVc2UgdG9TVEQuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
Ojpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdCk6IFVzZSB0b1dLLgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIHN0cmluZ1ZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdCk6IFVz
ZSBkaWN0aW9uYXJ5VmFsdWUgYW5kCisgICAgICAgIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOiBV
c2UgZGljdGlvbmFyeVZhbHVlLAorICAgICAgICBzdHJpbmdWYWx1ZSwgdWludDY0VmFsdWUsIGRv
dWJsZVZhbHVlLCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
aWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgdG9X
Sy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBVc2UgYXV0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24pOiBSZW1vdmVkIGxvY2FsLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogVXNl
IGF1dG8gYW5kIHRvV1RGU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2YgdG9TVEQuCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBP
cHRpb25hbCBpbnN0ZWFkIG9mIHBhaXJzCisgICAgICAgIG9mIGJvb2wgYW5kIGRvdWJsZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2VyTWVkaWFQZXJtaXNz
aW9uRm9yT3JpZ2luKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
ZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJ
bk5ldHdvcmtQcm9jZXNzKTogVXNlIHRvV0suCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6cG9zdFBhZ2VN
ZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpUZXN0SW5jb3Zh
dGlvbik6IFVzZSB0b1dURlN0cmluZy4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmNy
ZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOiBVc2UgYXV0byBhbmQgc2V0VmFsdWUuCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjppbnZva2UpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFu
ZCBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlIHBvc3RQYWdlTWVzc2FnZQorICAgICAgICBhbmQg
c3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3lu
Y2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlCisgICAgICAgIGRpY3Rpb25h
cnlWYWx1ZSwgYm9vbGVhblZhbHVlLCB2YWx1ZSwgc3RyaW5nVmFsdWUsIGRvdWJsZVZhbHVlLCBh
bmQKKyAgICAgICAgb3B0aW9uYWxEb3VibGVWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OnVpU2NyaXB0RGlkQ29tcGxldGUpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFuZCBzZXRW
YWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZEJlZ2luU3dpcGUpOiBVc2Ug
cG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6d2lsbEVuZFN3
aXBlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRFbmRTd2lwZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3ZlU3dpcGVTbmFw
c2hvdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6bm90aWZ5RG93bmxv
YWREb25lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0
YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVt
b3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxk
RG93bmdyYWRlUmVmZXJyZXIpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdEludm9jYXRpb246OmRpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRUb1NhbWVTaXRl
U3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
U2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
SW52b2NhdGlvbjo6ZGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QmxvY2tDb29r
aWVzRm9ySG9zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
U3RhdGlzdGljc0RlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlv
bjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldExhc3RTZWVuKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRNZXJnZVN0YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0RXhwaXJlZFN0YXRpc3RpYyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0SGFzSGFk
VXNlckludGVyYWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpk
aWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92ZUFsbFNlc3Npb25DcmVk
ZW50aWFscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QXBw
Qm91bmREb21haW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpwZXJm
b3JtQ3VzdG9tTWVudUFjdGlvbik6IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFk
ZGVkIEpTQmFzaWNzLmggdG8gRGljdGlvbmFyeUZ1bmN0aW9ucy5oIHRvIGFwcHJvcHJpYXRlIHRh
cmdldHMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV1RSOjpTY3JpcHRJdGVtOjpTY3JpcHRJdGVtKTogVXNlIHRvV0suCisgICAg
ICAgIChXVFI6OldvcmtRdWV1ZU1hbmFnZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29j
b2EuaDogTWFrZSBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbToKKyAgICAgICAgKFdUUjo6
VUlTY3JpcHRDb250cm9sbGVyQ29jb2E6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IFVzZSB0b1dURlN0
cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5oOiBNYXJrZWQgdGhlIGNsYXNzIGZpbmFsIGFuZCBtYWRlCisgICAgICAgIG1vc3QgZnVu
Y3Rpb25zIHByaXZhdGUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogRGVsZXRlZC4g
VXNlIHRoZSBvbmUgaW4gSlNCYXNpY3MuaC4KKyAgICAgICAgKFdUUjo6cGFyc2VNb2RpZmllckFy
cmF5KTogVXNlIHRoZSBuZXcgdG9XVEZTdHJpbmcgb3ZlcmxvYWQuCisgICAgICAgIChXVFI6OlVJ
U2NyaXB0Q29udHJvbGxlcklPUzo6dHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZCk6
IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94
eS5tbToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eSk6
IEluaXRpYWxpemUgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIChXVFI6OkV2ZW50
U2VuZGVyUHJveHk6OmtleURvd24pOiBVc2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaDogTWFya2VkIHRoZSBjbGFz
cyBmaW5hbCBhbmQgbWFkZQorICAgICAgICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCiAyMDIw
LTA5LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
cnVuLXdlYmtpdC10ZXN0cyBjb2RlIHRoYXQgc3RyaXBzIHRyYWlsaW5nIHNwYWNlcyB3aGVuIGNv
bXBhcmluZyBleHBlY3RlZC50eHQgZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCAxYTBjMTY3MDZiMmFlNDI2MGUzMmQyOTA0
NDliZjJkNjVjZmEzZGZhLi45ZTI0MGU1NTljYTQ1MjMzNzQ3OTg0YTZiYTkzNTE1NGFhY2NkN2Rk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2luY2x1
ZGUgIkpTQmFzaWNzLmgiCiAKIC8vIFN0YXRpYyBWYWx1ZSBHZXR0ZXJzCiAKQEAgLTQ3LDE1ICs0
OCw5IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFJvb3RFbGVtZW50Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPCiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250
ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlclN0ciA9
IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlciIpKTsKLSAgICAKLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlNDbGFzcygpOwot
ICAgIEpTVmFsdWVSZWYgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJPYmplY3QgPSBKU09iamVjdE1h
a2UoY29udGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVm
KTsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlclN0ci5nZXQoKSwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJPYmpl
Y3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShj
b250ZXh0LCAiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCBKU09iamVjdE1ha2UoY29udGV4dCwg
Y3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlzKSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGxv
Z0ZvY3VzRXZlbnRzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVm
KikKQEAgLTE1Miw5ICsxNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRQbGF0Zm9ybU5hbWVD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpcwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBwbGF0Zm9ybU5hbWUuZ2V0KCkpOwogfQogCi1K
U0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWlu
UHRyPEpTQ2xhc3NSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKCkK
IHsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CiAgICAg
ICAgIHsgImxvZ0ZvY3VzRXZlbnRzIiwgbG9nRm9jdXNFdmVudHNDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJsb2dWYWx1ZUNoYW5nZUV2ZW50cyIsIGxvZ1ZhbHVlQ2hhbmdlRXZlbnRzQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAibG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMiLCBsb2dT
Y3JvbGxpbmdTdGFydEV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkBAIC0xNjYsMjEgKzE2MSwxOCBA
QCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKICAgICAg
ICAgeyAiZW5hYmxlRW5oYW5jZWRBY2Nlc3NpYmlsaXR5IiwgZW5hYmxlRW5oYW5jZWRBY2Nlc3Np
YmlsaXR5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAgICB9OwotCi0g
ICAgc3RhdGljIEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBKU1N0YXRpY1ZhbHVlIHZhbHVlc1tdID0gewogICAgICAgICB7ICJmb2N1c2VkRWxl
bWVudCIsIGdldEZvY3VzZWRFbGVtZW50Q2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
cm9vdEVsZW1lbnQiLCBnZXRSb290RWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgImVuaGFuY2VkQWNjZXNzaWJpbGl0eUVuYWJsZWQiLCBnZXRFbmhhbmNlZEFjY2Vzc2liaWxp
dHlFbmFibGVkQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAicGxhdGZvcm1OYW1lIiwg
Z2V0UGxhdGZvcm1OYW1lQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwLCAw
IH0KICAgICB9OwotCi0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlv
biA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBzdGF0aWMg
Y29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xh
c3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCAwLCB2YWx1ZXMsIGZ1
bmN0aW9ucywKICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICAgIH07
Ci0KLSAgICByZXR1cm4gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1
cm4gYWRvcHQoSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbikpOwogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IDFkYzdkM2I1NjNhMTU0
ZjRjZTliZjdhMzAzMGM4YzVhNzY5N2YzOWEuLjhhMjg3YzQ4YjFkZjUzNmI0NzViNjE4NDE3YzI2
MTM1ZmIzODYxMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcigpOwogICAgIH5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwogCi0g
ICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBDb250cm9sbGVyIE1ldGhvZHMgLSBw
bGF0Zm9ybS1pbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMKICAgICBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IHJvb3RFbGVtZW50KCk7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKKyAgICBzdGF0
aWMgSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gY3JlYXRlSlNDbGFzcygpOwogCiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIEhXSU5FVkVOVEhPT0sgbV9mb2N1c0V2ZW50SG9vayB7IG51bGxwdHIgfTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKaW5k
ZXggMGU1YTUwZjZiOWQzY2U1Y2E3N2JhNDQ4Njg3YzAwOWNiYjE3NWQyMC4uOGVmODVlZWRmMDg0
ZDY3NjIyNzFjYWYyYzhmNDRhYjg1NDc5MjY3MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCBzdGF0aWMg
SlNWYWx1ZVJlZiB1aUVsZW1lbnRDb3VudEZvclNlYXJjaFByZWRpY2F0ZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LAogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHN0YXJ0RWxlbWVu
dCA9IG51bGxwdHI7CiAgICAgYm9vbCBpc0RpcmVjdGlvbk5leHQgPSB0cnVlOwogICAgIEpTVmFs
dWVSZWYgc2VhcmNoS2V5ID0gbnVsbHB0cjsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
c2VhcmNoVGV4dCA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNlYXJj
aFRleHQ7CiAgICAgYm9vbCB2aXNpYmxlT25seSA9IGZhbHNlOwogICAgIGJvb2wgaW1tZWRpYXRl
RGVzY2VuZGFudHNPbmx5ID0gZmFsc2U7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gNSAmJiBh
cmd1bWVudENvdW50IDw9IDYpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Jp
bmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbSBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQppbmRleCBlY2U1MWVh
MzlhNTE2ODM1NGJkNTY5NDYzNTkwODZkOTAyMmVhMTlkLi4xNGM2MjcwZjgyMzFkYzBmMjZhMDVl
Njk1ZGE4NDdiZGY4ZTQ4YzhlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9CaW5k
aW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCkBAIC0xLDQgKzEs
NCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzMSwxMCArNDMxLDEwIEBAIHN1
YiBfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IKIHsKICAgICBteSAoJHNlbGYsICR0eXBlLCAkYXJn
dW1lbnROYW1lKSA9IEBfOwogCi0gICAgcmV0dXJuICJKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4o
Y29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAk
dHlwZS0+aXNOdWxsYWJsZTsKKyAgICByZXR1cm4gInRvT3B0aW9uYWxCb29sKGNvbnRleHQsICRh
cmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHR5cGUtPmlzTnVs
bGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5h
bWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuICIkYXJndW1lbnRO
YW1lIiBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKLSAgICByZXR1cm4gImFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikpIiBpZiAkJHNl
bGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJjcmVh
dGVKU1N0cmluZyhjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0
b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOwogICAgIHJldHVybiAiSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0t
PklzUHJpbWl0aXZlVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuICJ0byIgLiBfaW1wbGVtZW50YXRp
b25DbGFzc05hbWUoJHR5cGUpIC4gIihjb250ZXh0LCAkYXJndW1lbnROYW1lKSI7CiB9CkBAIC00
NzIsMTEgKzQ3MiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBteSAoJHNlbGYsICRy
ZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAiSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1bmRlZmluZWQiOwot
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lv
bn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5cGUtPmlz
TnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufSki
IGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlwZS0+aXNOdWxs
YWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAke2V4cHJlc3Np
b259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAiJHtl
eHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7CiAgICAgcmV0dXJu
ICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJCRzZWxme2Nv
ZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwotICAgIHJldHVybiAi
SlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKKyAgICBy
ZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIgaWYgJCRzZWxm
e2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwogICAgIHJldHVybiAi
dG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwogfQogCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvR0NDb250cm9sbGVyLmNwcAppbmRleCA0YTM3YmYzYTEzZGE0Y2FlZWE0MGEwY2Y4
YTcwOWZlNThkMzRlYTRjLi5lZDJjNmMxOWU1MzNlZTBmMmZlNDk4ZjNlNTUzMDY0NDcwOGNiMzBk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNzIgKzI5LDQ5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+Ci0KLUdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKCkKLXsKLX0KLQot
R0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKCkKLXsKLX0KKyNpbXBvcnQgIkpTQmFzaWNzLmgi
CiAKIC8vIFN0YXRpYyBGdW5jdGlvbnMKIAogc3RhdGljIEpTVmFsdWVSZWYgY29sbGVjdENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBHQ0NvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3QoKTsKKyAgICBhdXRvJiBjb250
cm9sbGVyID0gKnN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0KCk7CiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBjb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7
Ci0gICAgYm9vbCB3YWl0VW50aWxEb25lID0gZmFsc2U7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQg
PiAwKQotICAgICAgICB3YWl0VW50aWxEb25lID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBh
cmd1bWVudHNbMF0pOwotCi0gICAgR0NDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBj
b250cm9sbGVyLT5jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVudGlsRG9uZSk7Ci0KKyAg
ICBhdXRvJiBjb250cm9sbGVyID0gKnN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgYm9vbCB3YWl0VW50aWxEb25lID0gYXJndW1l
bnRDb3VudCA+IDAgJiYgSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pOwor
ICAgIGNvbnRyb2xsZXIuY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKHdhaXRVbnRpbERvbmUpOwog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpT
VmFsdWVSZWYgZ2V0SlNPYmplY3RDb3VudENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKLSAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxHQ0Nv
bnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIHNpemVfdCBq
c09iamVjdENvdW50ID0gY29udHJvbGxlci0+Z2V0SlNPYmplY3RDb3VudCgpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGpzT2JqZWN0Q291bnQpOworICAgIGF1dG8m
IGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwg
Y29udHJvbGxlci5nZXRKU09iamVjdENvdW50KCkpOwogfQogCiAvLyBPYmplY3QgQ3JlYXRpb24K
IAotdm9pZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9p
ZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7
Ci0gICAgYXV0byBnY0NvbnRyb2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiR0NDb250cm9sbGVyIikpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdl
dEpTQ2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGdjQ29udHJvbGxlck9iamVjdCA9IEpTT2JqZWN0
TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NS
ZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIGdj
Q29udHJvbGxlclN0ci5nZXQoKSwgZ2NDb250cm9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24p
OworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgIkdDQ29udHJvbGxl
ciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCksIHRoaXMpKTsK
IH0KIAotSlNDbGFzc1JlZiBHQ0NvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQorSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4gR0NDb250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKCkKIHsKLSAgICBzdGF0aWMg
SlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CiAgICAgICAgIHsgImNvbGxlY3Qi
LCBjb2xsZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiY29sbGVjdE9uQWx0ZXJuYXRl
VGhyZWFkIiwgY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAiZ2V0SlNPYmplY3RDb3VudCIsIGdldEpTT2JqZWN0Q291bnRDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07Ci0KLSAgICBzdGF0aWMgSlNDbGFzc0RlZmlu
aXRpb24gY2xhc3NEZWZpbml0aW9uID0gewotICAgICAgICAwLCBrSlNDbGFzc0F0dHJpYnV0ZU5v
bmUsICJHQ0NvbnRyb2xsZXIiLCAwLCAwLCBzdGF0aWNGdW5jdGlvbnMsCisgICAgc3RhdGljIGNv
bnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtKU0NsYXNz
QXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIGZ1bmN0aW9ucywKICAgICAgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICAgIH07Ci0KLSAgICByZXR1cm4gSlND
bGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gYWRvcHQoSlNDbGFzc0Ny
ZWF0ZSgmZGVmaW5pdGlvbikpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
R0NDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaAppbmRl
eCA2NDI0Mzg0ZGY1MzBlOGMxZmRhZThmYjYxMzExYmYwYWRjNGE2YThmLi4zN2FhNDZhNzc0Y2Uz
ZTcwYjg3ODlkNDQzZjFlNDE4MTRhYzU4ZjVjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9HQ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xs
ZXIuaApAQCAtMjYsMTkgKzI2LDE1IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgR0ND
b250cm9sbGVyX2gKLSNkZWZpbmUgR0NDb250cm9sbGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKIGNsYXNz
IEdDQ29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgR0NDb250cm9sbGVyKCk7Ci0gICAgfkdDQ29udHJvbGxlcigpOwotCi0gICAgdm9pZCBtYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmpl
Y3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZik7CiAKICAgICAvLyBDb250cm9sbGVyIE1ldGhvZHMgLSBwbGF0ZnJvbSBpbmRl
cGVuZGFudCBpbXBsZW1lbnRhdGlvbnMKICAgICB2b2lkIGNvbGxlY3QoKSBjb25zdDsKQEAgLTQ2
LDcgKzQyLDUgQEAgcHVibGljOgogICAgIHNpemVfdCBnZXRKU09iamVjdENvdW50KCkgY29uc3Q7
CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOworICAgIHN0
YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7CiB9OwotCi0jZW5k
aWYgLy8gR0NDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKaW5kZXgg
NWU1MzVhZjFkZWFkODQyZDJlZjRmNWY3NjYwMmM4M2E5NTBiNzY1Mi4uMzdmNjkxY2I3OTZiNTYz
OTI2MjgwNGVlM2Y0MDFjYWJkYWU4ZjBlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5j
cHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UnVubmVyLmgiCiAKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0
U3VwcG9ydC5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZUl0
ZW0uaCIKQEAgLTM4LDEwICszOSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcElu
bGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5QnVmZmVyVmlldy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ1Rlc3RSdW5uZXJVdGlscy5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2Jq
ZWN0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1ZNSW5saW5lcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRp
b24uaD4KQEAgLTQ4OSw3ICs0ODcsNiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkaXNwbGF5Q2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKUwogCiBzdGF0
aWMgSlNWYWx1ZVJlZiBkaXNwbGF5QW5kVHJhY2tSZXBhaW50c0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRh
dGlvbgogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBjb250cm9sbGVyLT5kaXNw
bGF5QW5kVHJhY2tSZXBhaW50cygpOwogCkBAIC00OTgsMTIgKzQ5NSwxMCBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBkaXNwbGF5QW5kVHJhY2tSZXBhaW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgbWFjIGltcGxlbWVu
dGF0aW9uCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNT
RVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNv
bnRleHQsIGFyZ3VtZW50c1swXSk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAg
ICAgYXV0byBlbmNvZGVkSG9zdE5hbWUgPSBjb250cm9sbGVyLT5jb3B5RW5jb2RlZEhvc3ROYW1l
KG5hbWUuZ2V0KCkpOwpAQCAtNTEyLDIyICs1MDcsMTIgQEAgc3RhdGljIEpTVmFsdWVSZWYgZW5j
b2RlSG9zdE5hbWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3QKIAogc3RhdGljIEpTVmFsdWVSZWYgZXhlY0NvbW1hbmRDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCiB7Ci0gICAgLy8gSGFzIE1hYyAmIFdpbmRvd3MgaW1wbGVtZW50YXRp
b25zLgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byBuYW1lID0gYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VS
VCghKmV4Y2VwdGlvbik7Ci0KKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNv
bnRleHQsIGFyZ3VtZW50c1swXSk7CiAgICAgLy8gSWdub3JpbmcgdGhlIHNlY29uZCBwYXJhbWV0
ZXIgKHVzZXJJbnRlcmZhY2UpLCBhcyB0aGlzIGNvbW1hbmQgZW11bGF0ZXMgYSBtYW51YWwgYWN0
aW9uLgotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHZhbHVlOwotICAgIGlmIChhcmd1
bWVudENvdW50ID49IDMpIHsKLSAgICAgICAgdmFsdWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZhbHVlID0gYWRvcHQoSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLQorICAgIGF1dG8gdmFsdWUgPSBXVFI6OmNyZWF0
ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50Q291bnQgPiAyID8gYXJndW1lbnRzWzJdIDogbnVs
bHB0cik7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1
bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+
ZXhlY0NvbW1hbmQobmFtZS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwpAQCAtNTQxLDExICs1MjYsOCBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBmaW5kU3RyaW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byB0
YXJnZXQgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
ZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQotICAgIEpTT2JqZWN0UmVm
IG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRp
b24pOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byB0YXJnZXQgPSBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgYXV0byBvcHRpb25zID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgbnVsbHB0cik7CiAKICAgICBU
ZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihj
b250ZXh0LCBjb250cm9sbGVyLT5maW5kU3RyaW5nKGNvbnRleHQsIHRhcmdldC5nZXQoKSwgb3B0
aW9ucykpOwpAQCAtNTY2LDggKzU0OCw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGlzQ29tbWFuZEVu
YWJsZWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuCiAgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKKyAgICBhdXRvIG5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAKQEAgLTU3OSwxMCAr
NTYwLDggQEAgc3RhdGljIEpTVmFsdWVSZWYgb3ZlcnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGYKICAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDIpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAg
IGF1dG8ga2V5ID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNb
MF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgYXV0byB2YWx1
ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNl
cHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8ga2V5ID0gV1RSOjpj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOworICAgIGF1dG8gdmFsdWUgPSBX
VFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1sxXSk7CiAKICAgICAvLyBTaG91
bGQgdXNlIGA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9
dHJ1ZSBdIC0tPmAgaW5zdGVhZC4KICAgICBSRUxFQVNFX0FTU0VSVCghSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXkuZ2V0KCksICJXZWJLaXRVc2VzQmFja0ZvcndhcmRDYWNoZVByZWZl
cmVuY2VLZXkiKSk7CkBAIC02NjIsMTUgKzY0MSwxMCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1
ZUxvYWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIHVybCA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICBhdXRvIHVybCA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICBBU1NFUlQo
ISpleGNlcHRpb24pOwogCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRhcmdldDsKLSAg
ICBpZiAoYXJndW1lbnRDb3VudCA+PSAyKSB7Ci0gICAgICAgIHRhcmdldCA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKLSAgICAg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGFyZ2V0ID0gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKyAgICBhdXRvIHRhcmdldCA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDEgPyBhcmd1bWVu
dHNbMV0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5xdWV1ZUxvYWQodXJsLmdldCgpLCB0YXJnZXQuZ2V0KCkpOwpAQCAtNjkyLDcg
KzY2Niw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZEhUTUxTdHJpbmdDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYKICAgICAgICAgYmFzZVVSTCA9IGFkb3B0
KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsK
ICAgICAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKICAgICB9IGVsc2UKLSAgICAgICAgYmFzZVVS
TCA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisgICAgICAgIGJh
c2VVUkwgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7CiAKQEAgLTIwNDUsMzQgKzIwMTksMjQgQEAgc3RhdGljIEpTVmFsdWVSZWYgcnVuVUlT
Y3JpcHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWMK
IAogc3RhdGljIHZvaWQgdGVzdFJ1bm5lck9iamVjdEZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVj
dCkKIHsKLSAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5kZXJlZigp
OworICAgIHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0
KSktPmRlcmVmKCk7CiB9CiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12b2lkIFRlc3RSdW5uZXI6
Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRv
d09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXN0UnVubmVyOjptYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gdGVzdFJ1bm5lclN0
ciA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXN0UnVubmVyIikpOwog
ICAgIHJlZigpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpTQ2xhc3MoKTsKLSAg
ICBKU1ZhbHVlUmVmIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QgPSBKU09iamVjdE1ha2UoY29u
dGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVmKTsKLQot
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCB0ZXN0UnVubmVy
U3RyLmdldCgpLCBsYXlvdXRUZXN0Q29udG9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOwor
ICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRlc3RSdW5uZXIiLCBK
U09iamVjdE1ha2UoY29udGV4dCwgY3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlzKSk7CiB9CiAK
LUpTQ2xhc3NSZWYgVGVzdFJ1bm5lcjo6Z2V0SlNDbGFzcygpCitKU1JldGFpblB0cjxKU0NsYXNz
UmVmPiBUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNW
YWx1ZSogc3RhdGljVmFsdWVzID0gVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCk7Ci0gICAgc3Rh
dGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9IFRlc3RSdW5uZXI6OnN0YXRp
Y0Z1bmN0aW9ucygpOwotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRp
b24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIlRlc3RSdW5uZXIiLCAw
LCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBzdGF0aWMgY29uc3QgSlNDbGFz
c0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVO
b25lLCAiVGVzdFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcygpLCBzdGF0aWNGdW5jdGlvbnMoKSwK
ICAgICAgICAgMCwgdGVzdFJ1bm5lck9iamVjdEZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwCiAgICAgfTsKLQotICAgIHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRp
b24pOworICAgIHJldHVybiBhZG9wdChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKSk7CiB9CiAK
IC8vIENvbnN0YW50cwpAQCAtMjEwNyw5ICsyMDcxLDkgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0
UkVOREVSX1RSRUVfU0hPV19MQVlFUl9GUkFHTUVOVFMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2IKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgMzIpOwogfQogCi1KU1N0
YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQorY29uc3QgSlNTdGF0aWNWYWx1
ZSogVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1
ZSBzdGF0aWNWYWx1ZXNbXSA9IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTU3RhdGljVmFsdWUg
dmFsdWVzW10gPSB7CiAgICAgICAgIHsgImRpZENhbmNlbENsaWVudFJlZGlyZWN0IiwgZ2V0RGlk
Q2FuY2VsQ2xpZW50UmVkaXJlY3QsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAidGltZW91dCIsIGdl
dFRpbWVvdXRDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJnbG9iYWxGbGFnIiwgZ2V0
R2xvYmFsRmxhZ0NhbGxiYWNrLCBzZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlTm9uZSB9LApAQCAtMjEyNywxMiArMjA5MSwxMiBAQCBKU1N0YXRpY1ZhbHVlKiBUZXN0
UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogICAgICAgICB7ICJSRU5ERVJfVFJFRV9TSE9XX0xBWUVS
X0ZSQUdNRU5UUyIsIGdldFJFTkRFUl9UUkVFX1NIT1dfTEFZRVJfRlJBR01FTlRTLCAwLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IH0sCiAgICAgICAgIHsgMCwgMCwgMCwgMCB9CiAgICAgfTsKLSAgICByZXR1cm4gc3RhdGljVmFs
dWVzOworICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKLUpTU3RhdGljRnVuY3Rpb24qIFRlc3RSdW5u
ZXI6OnN0YXRpY0Z1bmN0aW9ucygpCitjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBUZXN0UnVubmVy
OjpzdGF0aWNGdW5jdGlvbnMoKQogewotICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRp
Y0Z1bmN0aW9uc1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNGdW5jdGlvbiBm
dW5jdGlvbnNbXSA9IHsKICAgICAgICAgeyAiYWJvcnRNb2RhbCIsIGFib3J0TW9kYWxDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJhZGREaXNhbGxvd2VkVVJMIiwgYWRkRGlzYWxsb3dlZFVS
TENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZFVSTFRvUmVkaXJlY3QiLCBhZGRVUkxU
b1JlZGlyZWN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKQEAgLTIyOTcsNyArMjI2MSw3IEBAIEpTU3RhdGlj
RnVuY3Rpb24qIFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsgMCwgMCwg
MCB9CiAgICAgfTsKIAotICAgIHJldHVybiBzdGF0aWNGdW5jdGlvbnM7CisgICAgcmV0dXJuIGZ1
bmN0aW9uczsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKEpTU3Ry
aW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCkBAIC0yMzQyLDE0ICsyMzA2LDEx
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6aWdub3JlTGVnYWN5V2ViTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKCkKIAogdm9pZCBUZXN0UnVubmVyOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZp
cmVkKCkKIHsKLSAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gIkZBSUw6IFRpbWVkIG91dCB3YWl0
aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIjsKLSAgICBmcHJpbnRmKHRlc3RSZXN1
bHQsICIlcyIsIG1lc3NhZ2UpOworICAgIGZwdXRzKCJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBm
b3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcbiIsIHRlc3RSZXN1bHQpOwogCi0gICAgYXV0byBh
Y2N1bXVsYXRlZExvZ3MgPSBnZXRBbmRSZXNldEFjY3VtdWxhdGVkTG9ncygpOwotICAgIGlmICgh
YWNjdW11bGF0ZWRMb2dzLmlzRW1wdHkoKSkgewotICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdl
ID0gIkxvZ3MgYWNjdW11bGF0ZWQgZHVyaW5nIHRlc3QgcnVuOlxuIjsKLSAgICAgICAgZnByaW50
Zih0ZXN0UmVzdWx0LCAiJXMlc1xuIiwgbWVzc2FnZSwgYWNjdW11bGF0ZWRMb2dzLnV0ZjgoKS5k
YXRhKCkpOwotICAgIH0KKyAgICBhdXRvIGxvZ3MgPSBnZXRBbmRSZXNldEFjY3VtdWxhdGVkTG9n
cygpOworICAgIGlmICghbG9ncy5pc0VtcHR5KCkpCisgICAgICAgIGZwcmludGYodGVzdFJlc3Vs
dCwgIkxvZ3MgYWNjdW11bGF0ZWQgZHVyaW5nIHRlc3QgcnVuOlxuJXNcbiIsIGxvZ3MudXRmOCgp
LmRhdGEoKSk7CiAKICAgICBub3RpZnlEb25lKCk7CiB9CkBAIC0yNDAzLDI0ICsyMzY0LDI1IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjdW1tdWxhdGVMb2dzRm9yQ2hhbm5lbChKU1N0cmluZ1Jl
ZiBjaGFubmVsKQogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TG9nQ2hhbm5lbFRvQWNjdW11
bGF0ZSh7IGJ1ZmZlci5nZXQoKSB9KTsKIH0KIAotdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWdu
ZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFwOwordXNpbmcgQ2FsbGJhY2tNYXAgPSBXVEY6Okhh
c2hNYXA8dW5zaWduZWQsIEpTT2JqZWN0UmVmPjsKIHN0YXRpYyBDYWxsYmFja01hcCYgY2FsbGJh
Y2tNYXAoKQogewogICAgIHN0YXRpYyBDYWxsYmFja01hcCYgbWFwID0gKm5ldyBDYWxsYmFja01h
cDsKICAgICByZXR1cm4gbWFwOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmNhY2hlVGVzdFJ1bm5l
ckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQordm9pZCBUZXN0
UnVubmVyOjpjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJl
ZiBjYWxsYmFja1ZhbHVlKQogewotICAgIGlmICghY2FsbGJhY2spCisgICAgYXV0byBjb250ZXh0
ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgaWYgKCFjYWxsYmFja1ZhbHVlIHx8ICFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgY2FsbGJhY2tWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKKyAg
ICBhdXRvIGNhbGxiYWNrID0gKEpTT2JqZWN0UmVmKWNhbGxiYWNrVmFsdWU7CiAKICAgICBpZiAo
Y2FsbGJhY2tNYXAoKS5jb250YWlucyhpbmRleCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJGQUlMOiBUcmllZCB0byBpbnN0YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIgY2FsbGJhY2sgZm9y
IHRoZSBzYW1lIGV2ZW50IChpZCAlZClcbiIsIGluZGV4KTsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJGQUlMOiBUcmllZCB0byBpbnN0YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIgY2FsbGJhY2sg
Zm9yIHRoZSBzYW1lIGV2ZW50IChpZCAldSlcbiIsIGluZGV4KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7
CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFw
KCkuYWRkKGluZGV4LCBjYWxsYmFjayk7CiB9CkBAIC0yNDMwLDIyICsyMzkyLDE4IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6Y2FsbFRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvCiAgICAgaWYgKCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluRnJh
bWVKU0NvbnRleHQoKTsKLSAgICBpZiAoSlNPYmplY3RSZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSwgMCkpIHsKLSAgICAgICAg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaywgSlNDb250ZXh0R2V0R2xv
YmFsT2JqZWN0KGNvbnRleHQpLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIDApOworICAgIGF1
dG8gY29udGV4dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOworICAgIGlmIChhdXRvIGNhbGxiYWNr
ID0gY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSkgeworICAgICAgICBKU09iamVjdENhbGxBc0Z1
bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4
dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7CiAgICAgICAgIEpTVmFsdWVV
bnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogICAgIH0KIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MoKQogewotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0ZXIgOiBjYWxsYmFj
a01hcCgpKSB7Ci0gICAgICAgIGlmIChKU09iamVjdFJlZiBjYWxsYmFjayA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBpdGVyLnZhbHVlLCAwKSkKLSAgICAgICAgICAgIEpTVmFsdWVVbnByb3Rl
Y3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIH0KLQorICAgIGF1dG8gY29udGV4dCA9IG1haW5G
cmFtZUpTQ29udGV4dCgpOworICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBjYWxsYmFja01hcCgp
LnZhbHVlcygpKQorICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsK
ICAgICBjYWxsYmFja01hcCgpLmNsZWFyKCk7CiB9CiAKQEAgLTI1MDgsMTYgKzI0NjYsMTEgQEAg
dm9pZCBUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxlcyhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogewogICAgIGlmICghSlNWYWx1ZUlzQXJyYXkoY29udGV4
dCwgZmlsZXNWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0UmVmIGZpbGVz
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGZpbGVzVmFsdWUsIG51bGxwdHIpOwotICAgIHN0
YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGZpbGVzTGVuZ3RoVmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIGZpbGVzLCBsZW5ndGhQcm9wZXJ0eS5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgZmlsZXNMZW5ndGhWYWx1
ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGZpbGVzID0gKEpTT2JqZWN0UmVmKWZpbGVz
VmFsdWU7CisgICAgYXV0byBmaWxlc0xlbmd0aCA9IFdUUjo6YXJyYXlMZW5ndGgoY29udGV4dCwg
ZmlsZXMpOwogCiAgICAgbV9vcGVuUGFuZWxGaWxlcy5jbGVhcigpOwotICAgIGF1dG8gZmlsZXNM
ZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBmaWxl
c0xlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
c0xlbmd0aDsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbGVzTGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgSlNWYWx1ZVJlZiBmaWxlVmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBmaWxlcywgaSwgbnVsbHB0cik7CiAgICAgICAgIGlmICghSlNW
YWx1ZUlzU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAppbmRleCAxNjcxMjA1OGExMGNlOTg5YTNjOGQ0M2Q2
NDRmOWE5ZTMwMGQ0MGRlLi5lODU3YWE0ZGNkYTI5N2M0ZmUzZTc2YWM3ZTllYWYwNWEwOWM4MGIw
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGNsZWFudXAoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIHZv
aWQgYWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpOwogICAgIGNvbnN0IHN0ZDo6c2V0
PHN0ZDo6c3RyaW5nPiYgYWxsb3dlZEhvc3RzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd2VkSG9z
dHM7IH0KQEAgLTQ5Nyw3ICs0OTcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dmVjdG9yPGNoYXI+
IG1fb3BlblBhbmVsRmlsZXNNZWRpYUljb247CiAjZW5kaWYKIAotICAgIHN0YXRpYyBKU0NsYXNz
UmVmIGdldEpTQ2xhc3MoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVz
KCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOworICAg
IHN0YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7CisgICAgc3Rh
dGljIGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlcygpOworICAgIHN0YXRpYyBjb25z
dCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKIH07CmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0gYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KaW5k
ZXggNjFlMDFmNWVkNzY3NWE4MzBiYTZmMzhmOGVjZjU4NDBmYmM4MzljYi4uZTg1MmRmZGFiY2Q0
Mzk5M2IzMTM5M2QzNWRmMDA1NGNmNjc5NGY3OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbQpAQCAtMjQsMTIgKzI0
LDEzIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJEdW1wUmVuZGVyVHJl
ZS5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKIAogI2ltcG9ydCAiQWNj
ZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKyNpbXBvcnQg
IkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViSFRNTFZpZXdQcml2YXRlLmg+CkBAIC0xNTUsNSArMTU2LDUgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5jZWRBY2Nlc3NpYmlsaXR5RW5hYmxl
ZCgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cGxhdGZvcm1OYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImlvcyIpKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygi
aW9zIik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudElPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50SU9TLm1tCmluZGV4IGUzYzkwOWQ2ZGQyNzAzOTI4M2VhY2NkMzJhZTQwOTI2
Y2U4YTllNjQuLjY0NWZjODYzY2VmMTBhMDBmNWJiNGI3ZDEzOWM2ZTBkY2U0MDhkZTEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9T
Lm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
SU9TLm1tCkBAIC0yNCwxMSArMjQsMTIgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmgiCiAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlDb21tb25NYWMuaCIKICNpbXBvcnQgIkFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgiCisjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5o
IgorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9UZXh0R3JhbnVsYXJpdHkuaD4KQEAgLTQxLDExICs0Miw2IEBACiAKIHR5cGVkZWYgdm9p
ZCAoKkFYUG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2spKGlkIGVsZW1lbnQsIE5TU3RyaW5nKiBu
b3RpZmljYXRpb24sIHZvaWQqIGNvbnRleHQpOwogCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KGlkIGVsZW1lbnQpCi0gICAgOiBtX2VsZW1lbnQoZWxlbWVu
dCkKLXsKLX0KLQogQGludGVyZmFjZSBOU09iamVjdCAoVUlBY2Nlc3NpYmlsaXR5SGlkZGVuKQog
LSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6KENHUG9pbnQpcG9pbnQ7CiAtIChpZClhY2Nlc3Np
YmlsaXR5TGlua2VkRWxlbWVudDsKQEAgLTExMiw5ICsxMDgsOSBAQCBAaW50ZXJmYWNlIE5TT2Jq
ZWN0IChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlclByaXZhdGUpCiAtIChDR1BhdGhSZWYp
X2FjY2Vzc2liaWxpdHlQYXRoOwogQGVuZAogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKQorQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudChpZCBlbGVtZW50KQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwg
MCkpOwogfQogCiBzdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNvbmNhdGVuYXRlQXR0
cmlidXRlQW5kVmFsdWUoTlNTdHJpbmcgKmF0dHJpYnV0ZSwgTlNTdHJpbmcgKnZhbHVlKQpAQCAt
MTgwLDcgKzE3Niw2IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZmllbGRzZXRBbmNlc3RvckVsZW1lbnQoKQogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwo
KQogewogICAgIE5TVVJMICp1cmwgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlVUkxdOwpAQCAt
MjkxLDcgKzI4Niw2IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bGlua2VkRWxlbWVudCgpCiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6bGlua2VkVUlFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU1OCw3ICs1
NTIsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKEFjY2VzcwogewogICAgIGlkIHRleHRNYXJrZXJzID0g
bWFya2VyUmFuZ2UtPnBsYXRmb3JtVGV4dE1hcmtlclJhbmdlKCk7CiAgICAgaWYgKCF0ZXh0TWFy
a2VycyB8fCAhW3RleHRNYXJrZXJzIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFdUUjo6
Y3JlYXRlSlNTdHJpbmcoKTsKICAgICByZXR1cm4gW1ttX2VsZW1lbnQgc3RyaW5nRm9yVGV4dE1h
cmtlcnM6dGV4dE1hcmtlcnNdIGNyZWF0ZUpTU3RyaW5nUmVmXTsKIH0KIApAQCAtNjgxLDIyICs2
NzUsMjIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXREb2N1bWVudExpbmtzKFZl
Y3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWwKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMo
KQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MoKQogewotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmco
KTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKCkKIHsK
LSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0
ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBA
IC03MTYsNyArNzEwLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmUKICAgICBpZiAoSlNTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhhdHRyaWJ1dGUsICJBWFRleHR1YWxDb250ZXh0IikpCiAg
ICAgICAgIHJldHVybiBbW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRdIGNy
ZWF0ZUpTU3RyaW5nUmVmXTsKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNQcmVzc0FjdGlvblN1cHBvcnRlZCgpCkBAIC03NTUsMTcgKzc0OSwx
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKEpT
U3RyaW5nUmVmIGF0dHJpYnV0ZSkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcygpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm9sZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1
cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFBhZ2VVcCgpCkBAIC03ODksMTcgKzc4
MywxNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFBhZ2VSaWdodCgpCiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVz
Y3JpcHRpb24oKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0
dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZygpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dGl0bGUoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0
dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKQEAgLTgwOSw3ICs4MDMsNyBA
QCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3Jp
cHRpb24oKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6b3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKQEAgLTgx
OSw3ICs4MTMsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nVmFsdWUoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3Ry
aW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0KCkgY29uc3QK
QEAgLTg0OSw3ICs4NDMsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFZhbHVl
KEpTU3RyaW5nUmVmIHZhbHVlVGV4dCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24oKQogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlcigp
CkBAIC04NjksNyArODYzLDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1JlcXVp
cmVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzZWQoKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
QEAgLTg5Miw3ICs4ODUsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tl
ZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRl
KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC05MDgsNyArOTAwLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojphcmlh
SXNHcmFiYmVkKCkgY29uc3QKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQog
CiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4KGludCBpbmRleCkKQEAg
LTkxOCwzNyArOTEwLDM3IEBAIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5k
ZXgoaW50IGluZGV4KQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0
aCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6
OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0
cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1
bW5zKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBX
VFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZWaXNpYmxlQ2VsbHMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpj
cmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93Q291
bnQoKQpAQCAtOTg3LDIyICs5NzksMTkgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbCwKIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Ny
b2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwgaW50IHkpCiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojphc3Npc3RpdmVUZWNobm9sb2d5U2ltdWxh
dGVkRm9jdXMoKQpAQCAtMTAzNSwyMyArMTAyNCwyMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnByZXNzKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdU
Ujo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpj
bGVhclNlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlz
dGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjaykKQEAgLTEwODMsNDMgKzEwNzAsMzYg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5l
cigpCiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxlKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNWaXNpYmxlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzT2ZmU2Ny
ZWVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2VkKCkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0x
MTMwLDEzICsxMTEwLDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVk
KCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NpbmdsZUxpbmUoKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aUxpbmUoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTExNTIsMjcg
KzExMzAsMjIgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnBvcHVwVmFsdWUoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRh
a2VGb2N1cygpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGRTZWxlY3Rpb24oKQogewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpyZW1vdmVTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdW5z
aWduZWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVk
aWNhdGUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHN0YXJ0
RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5leHQsIEpTVmFsdWVSZWYgc2VhcmNoS2V5LCBKU1N0
cmluZ1JlZiBzZWFyY2hUZXh0LCBib29sIHZpc2libGVPbmx5LCBib29sIGltbWVkaWF0ZURlc2Nl
bmRhbnRzT25seSkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIDA7CiB9
CiAKQEAgLTEyMTQsMjMgKzExODcsMTkgQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Om51bWJlckF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsYXNzTGlzdCgpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBudWxscHRyOwogfQogCiB2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEFycmF5QXR0cmlidXRlVmFsdWUo
SlNTdHJpbmdSZWYsIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYpIGNvbnN0CiB7Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmNvbHVtbkhlYWRlcnMoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm93SGVhZGVycyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mKSBjb25zdAogewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2VsZWN0ZWRDaGlsZHJlbkNvdW50KCkgY29uc3QKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmggYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oCmluZGV4IDM4NTBiNDE0NDYzZTAx
NWM2N2Q1NmVmMDRhNTkzOGM5OTFjNDdlZDguLjE1YmY1MWY4NGQzZTgxODFjMDJjZjY2M2M3NTUz
OWRjMjhhZDlkZDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3Np
YmlsaXR5Q29tbW9uTWFjLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlDb21tb25NYWMuaApAQCAtNDEsNCArNDEsNCBAQCBAaW50ZXJmYWNlIE5TU3RyaW5nIChK
U1N0cmluZ1JlZkFkZGl0aW9ucykKIC0gKEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiljcmVhdGVK
U1N0cmluZ1JlZjsKIEBlbmQKIAotZXh0ZXJuIE5TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRl
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlZiwgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCAqc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwg
dW5zaWduZWQgcmVzdWx0c0xpbWl0LCBKU1ZhbHVlUmVmIHNlYXJjaEtleSwgSlNTdHJpbmdSZWYg
c2VhcmNoVGV4dCwgYm9vbCB2aXNpYmxlT25seSwgYm9vbCBpbW1lZGlhdGVEZXNjZW5kYW50c09u
bHkpOworTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRl
Rm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmVmLCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50ICpz
dGFydEVsZW1lbnQsIGJvb2wgaXNEaXJlY3Rpb25OZXh0LCB1bnNpZ25lZCByZXN1bHRzTGltaXQs
IEpTVmFsdWVSZWYgc2VhcmNoS2V5LCBKU1N0cmluZ1JlZiBzZWFyY2hUZXh0LCBib29sIHZpc2li
bGVPbmx5LCBib29sIGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSk7CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbSBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tCmluZGV4IDc5NDA3Mzhh
MzM5MGViMjcwYTYwOGJmZDA1OWUxNzJhZjRiNzkwOTIuLjAzMDY3ZTJkMDg5MjE0ZmJlODQ2Njdi
MjgyNGY4Y2UzMTQ4MGY5ODcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9B
Y2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9B
Y2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJjb25m
aWcuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlDb21tb25NYWMuaCIKIAorI2ltcG9ydCAiSlNC
YXNpY3MuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KIAogQGlt
cGxlbWVudGF0aW9uIE5TU3RyaW5nIChKU1N0cmluZ1JlZkFkZGl0aW9ucykKQEAgLTU2LDcgKzU3
LDYgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRl
Rm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRy
aWJ1dGUgc2V0T2JqZWN0OnN0YXJ0RWxlbWVudC0+cGxhdGZvcm1VSUVsZW1lbnQoKSBmb3JLZXk6
QCJBWFN0YXJ0RWxlbWVudCJdOwogCiAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2Jq
ZWN0Oihpc0RpcmVjdGlvbk5leHQpID8gQCJBWERpcmVjdGlvbk5leHQiIDogQCJBWERpcmVjdGlv
blByZXZpb3VzIiBmb3JLZXk6QCJBWERpcmVjdGlvbiJdOwotCiAgICAgW3BhcmFtZXRlcml6ZWRB
dHRyaWJ1dGUgc2V0T2JqZWN0OkAocmVzdWx0c0xpbWl0KSBmb3JLZXk6QCJBWFJlc3VsdHNMaW1p
dCJdOwogCiAgICAgaWYgKHNlYXJjaEtleSkgewpAQCAtNjYsMTQgKzY2LDggQEAgTlNEaWN0aW9u
YXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVy
aWEoSlNDb250ZXh0UmUKICAgICAgICAgICAgIGlmIChzZWFyY2hLZXlTdHJpbmcpCiAgICAgICAg
ICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gW05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmlu
Z1JlZjpzZWFyY2hLZXlTdHJpbmcuZ2V0KCldOwogICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWVJ
c09iamVjdChjb250ZXh0LCBzZWFyY2hLZXkpKSB7Ci0gICAgICAgICAgICBKU09iamVjdFJlZiBz
ZWFyY2hLZXlBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hLZXksIG51bGxw
dHIpOwotICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSAwOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0gYWRvcHQo
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAgICAgIEpT
VmFsdWVSZWYgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgc2VhcmNoS2V5QXJyYXksIGxlbmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxs
cHRyKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlICYmIEpTVmFs
dWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAg
ICAgICAgICBzZWFyY2hLZXlBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikp
OwotICAgICAgICAgICAgCisgICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hLZXlBcnJheSA9
IChKU09iamVjdFJlZilzZWFyY2hLZXk7CisgICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlB
cnJheUxlbmd0aCA9IFdUUjo6YXJyYXlMZW5ndGgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXkpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaEtleUFycmF5TGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleVZhbHVlID0gSlNP
YmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXksIGksIG51bGxw
dHIpOwogICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVmIHNlYXJjaEtleVN0cmluZyA9IEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgc2VhcmNoS2V5VmFsdWUsIG51bGxwdHIpOwpAQCAtODgs
MTIgKzgyLDExIEBAIE5TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0
dHJpYnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlCiAgICAgICAgIGlmIChzZWFyY2hL
ZXlQYXJhbWV0ZXIpCiAgICAgICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmpl
Y3Q6c2VhcmNoS2V5UGFyYW1ldGVyIGZvcktleTpAIkFYU2VhcmNoS2V5Il07CiAgICAgfQotICAg
IAorCiAgICAgaWYgKHNlYXJjaFRleHQgJiYgSlNTdHJpbmdHZXRMZW5ndGgoc2VhcmNoVGV4dCkp
CiAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpbTlNTdHJpbmcgc3Ry
aW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFRleHRdIGZvcktleTpAIkFYU2VhcmNoVGV4dCJdOwot
ICAgIAorCiAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OkAodmlzaWJsZU9u
bHkpIGZvcktleTpAIkFYVmlzaWJsZU9ubHkiXTsKLSAgICAKICAgICBbcGFyYW1ldGVyaXplZEF0
dHJpYnV0ZSBzZXRPYmplY3Q6QChpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkpIGZvcktleTpAIkFY
SW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5Il07CiAgICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGU7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KaW5kZXggNTFmMDMxZGRiYmNkODUzYWRiNGZlNzE0N2Q4
NWE1MjU3NmEwMDc4Yi4uOTVhMDZmM2E0MGEwNDg5ZTNlMGIwYjMxNjU3NGMzZmNiZjJlY2YxMSAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyTWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlck1hYy5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNv
bW1vbk1hYy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCIK
ICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgi
CiAjaW1wb3J0IDxBcHBLaXQvTlNDb2xvci5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgpAQCAtMTU4LDUg
KzE1OSw1IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVuaGFuY2VkQWNjZXNzaWJp
bGl0eUVuYWJsZWQoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJtYWMiKSk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRl
SlNTdHJpbmcoIm1hYyIpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQppbmRleCBlMWVmZDdmNGUxNjFhZmZkZWUyMjRj
YzQ1Mzg0OGIzOWNiNDk3MDYzLi42NDkxYTJkMGE1ZmE0Yzc0ZTcyMTc5Mjc4ZjdlMWNhOTlkNzY4
ZDZhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudE1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0
eUNvbW1vbk1hYy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIu
aCIKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
U1N0cmluZ1JlZkNGLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWUuaD4KQEAgLTgwLDExICs4
MSw2IEBAIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTY3JvbGxUb0dsb2JhbFBvaW50OihOU1BvaW50
KXBvaW50OwogLSAodm9pZClfYWNjZXNzaWJpbGl0eVNldFZhbHVlOihpZCl2YWx1ZSBmb3JBdHRy
aWJ1dGU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lOwogQGVuZAogCi1zdGF0aWMgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKQotewotICAgIHJldHVybiBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApKTsKLX0KLQogc3RhdGlj
IE9wdGlvbmFsPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IG1ha2VWZWN0b3JFbGVtZW50KGNvbnN0
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqLCBpZCBlbGVtZW50KQogewogICAgIHJldHVybiB7IHsg
ZWxlbWVudCB9IH07CkBAIC0yMjEsMTQgKzIxNyw4IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnNl
bGVjdFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEoSlNDb250ZXh0UmVmIGNv
CiAgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0
cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwog
ICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFy
Y2hTdHJpbmdzKSkgewotICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAg
ICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gMDsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVl
UmVmIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShj
b250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGxlbmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBu
dWxscHRyKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSAm
JiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUp
KQotICAgICAgICAgICAgICAgIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVu
Z3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byBzZWFy
Y2hTdHJpbmdzQXJyYXkgPSAoSlNPYmplY3RSZWYpc2VhcmNoU3RyaW5nczsKKyAgICAgICAgICAg
IGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChjb250ZXh0
LCBzZWFyY2hTdHJpbmdzQXJyYXkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgYXV0
byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXks
IGksIG51bGxwdHIpLCBudWxscHRyKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmlu
Z3NTdHJpbmcpCkBAIC0yNjIsMTQgKzI1Miw4IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnNlYXJj
aFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEoSlNDb250ZXh0UmVmIGNvCiAg
ICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKICAgICAgICAgICAgICAgICBbc2Vh
cmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmlu
Z1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5nLmdldCgpXV07CiAgICAgICAgIH0gZWxzZSBpZiAoSlNW
YWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBKU09i
amVjdFJlZiBzZWFyY2hTdHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2Vh
cmNoU3RyaW5ncywgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGggPSAwOwotCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5n
ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAg
ICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVj
dEdldFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlT
dHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJh
eUxlbmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJy
YXlMZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hT
dHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotCisgICAgICAgICAgICBhdXRvIHNl
YXJjaFN0cmluZ3NBcnJheSA9IChKU09iamVjdFJlZilzZWFyY2hTdHJpbmdzOworICAgICAgICAg
ICAgYXV0byBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVuZ3RoKGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICBh
dXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJh
eSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoU3Ry
aW5nc1N0cmluZykKQEAgLTE0NDYsMTMgKzE0MzAsMTMgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpyZW1vdmVTZWxlY3Rpb25BdEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAogCiB2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBmdW5jdGlvbi4KIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpkb2N1bWVudEVuY29kaW5nKCkKQEAgLTE0NjMsNyArMTQ0Nyw3IEBAIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKICAg
ICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNf
RVhDRVBUSU9OUwogICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKQEAgLTE0NzQsNyArMTQ1
OCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
b2N1bWVudFVSSSgpCiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdOwog
ICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlK
U1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCmluZGV4IDM2NzE0OTM5
ZmRhMGE1Njc0OWM3OTk4ODZhMWVhNDM4OTIxODlhNGEuLjM0MmIzYTAxZGM3ZWE4NzlhZjFiNTRi
MGVlMjczZDY4MTJmOGY3YTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9G
cmFtZUxvYWREZWxlZ2F0ZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVM
b2FkRGVsZWdhdGUubW0KQEAgLTMxMSw1NCArMzExLDI2IEBAIElHTk9SRV9XQVJOSU5HU19FTkQK
IAogLSAodm9pZClkaWRDbGVhcldpbmRvd09iamVjdEluU3RhbmRhcmRXb3JsZEZvckZyYW1lOihX
ZWJGcmFtZSAqKWZyYW1lCiB7Ci0gICAgLy8gTWFrZSBOZXctU3R5bGUgVGVzdFJ1bm5lcgotICAg
IEpTQ29udGV4dFJlZiBjb250ZXh0ID0gW2ZyYW1lIGdsb2JhbENvbnRleHRdOwotICAgIEpTT2Jq
ZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KTsK
LSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgYXV0byBjb250ZXh0ID0gW2ZyYW1l
IGdsb2JhbENvbnRleHRdOworICAgIGF1dG8gd2ViVmlldyA9IFtmcmFtZSB3ZWJWaWV3XTsKKyAg
ICBhdXRvIHdpbmRvd09iamVjdCA9IFtmcmFtZSB3aW5kb3dPYmplY3RdOwogCi0gICAgQVNTRVJU
KGdUZXN0UnVubmVyKTsKLSAgICBnVGVzdFJ1bm5lci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0
LCBnbG9iYWxPYmplY3QsICZleGNlcHRpb24pOwotICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKLQot
ICAgIGdjQ29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCBnbG9iYWxPYmplY3Qs
ICZleGNlcHRpb24pOwotICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKLQotICAgIGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgJmV4
Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOworICAgIGdUZXN0UnVubmVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGdjQ29udHJvbGxlci0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0KTsKKyAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0KTsKIAogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2Jq
ZWN0KGNvbnRleHQpOwogCi0gICAgLy8gTWFrZSBPbGQtU3R5bGUgY29udHJvbGxlcnMKLQotICAg
IFdlYlZpZXcgKndlYlZpZXcgPSBbZnJhbWUgd2ViVmlld107Ci0gICAgV2ViU2NyaXB0T2JqZWN0
ICpvYmogPSBbZnJhbWUgd2luZG93T2JqZWN0XTsKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICBBcHBsZVNjcmlwdENvbnRyb2xsZXIgKmFzYyA9IFtbQXBwbGVTY3JpcHRDb250cm9sbGVy
IGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlld107Ci0gICAgW29iaiBzZXRWYWx1ZTphc2Mg
Zm9yS2V5OkAiYXBwbGVTY3JpcHRDb250cm9sbGVyIl07Ci0gICAgW2FzYyByZWxlYXNlXTsKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbQXBw
bGVTY3JpcHRDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlld10pLmdldCgp
IGZvcktleTpAImFwcGxlU2NyaXB0Q29udHJvbGxlciJdOwogI2VuZGlmCiAKLSAgICBFdmVudFNl
bmRpbmdDb250cm9sbGVyICplc2MgPSBbW0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIgYWxsb2NdIGlu
aXRdOwotICAgIFtvYmogc2V0VmFsdWU6ZXNjIGZvcktleTpAImV2ZW50U2VuZGVyIl07Ci0gICAg
W2VzYyByZWxlYXNlXTsKLSAgICAKLSAgICBbb2JqIHNldFZhbHVlOmdOYXZpZ2F0aW9uQ29udHJv
bGxlciBmb3JLZXk6QCJuYXZpZ2F0aW9uQ29udHJvbGxlciJdOwotICAgIAotICAgIE9iakNDb250
cm9sbGVyICpvY2MgPSBbW09iakNDb250cm9sbGVyIGFsbG9jXSBpbml0XTsKLSAgICBbb2JqIHNl
dFZhbHVlOm9jYyBmb3JLZXk6QCJvYmpDQ29udHJvbGxlciJdOwotICAgIFtvY2MgcmVsZWFzZV07
Ci0KLSAgICBPYmpDUGx1Z2luICpwbHVnaW4gPSBbW09iakNQbHVnaW4gYWxsb2NdIGluaXRdOwot
ICAgIFtvYmogc2V0VmFsdWU6cGx1Z2luIGZvcktleTpAIm9iakNQbHVnaW4iXTsKLSAgICBbcGx1
Z2luIHJlbGVhc2VdOwotICAgIAotICAgIE9iakNQbHVnaW5GdW5jdGlvbiAqcGx1Z2luRnVuY3Rp
b24gPSBbW09iakNQbHVnaW5GdW5jdGlvbiBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1
ZTpwbHVnaW5GdW5jdGlvbiBmb3JLZXk6QCJvYmpDUGx1Z2luRnVuY3Rpb24iXTsKLSAgICBbcGx1
Z2luRnVuY3Rpb24gcmVsZWFzZV07Ci0KLSAgICBUZXh0SW5wdXRDb250cm9sbGVyICp0aWMgPSBb
W1RleHRJbnB1dENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XTsKLSAg
ICBbb2JqIHNldFZhbHVlOnRpYyBmb3JLZXk6QCJ0ZXh0SW5wdXRDb250cm9sbGVyIl07Ci0gICAg
W3RpYyByZWxlYXNlXTsKKyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tFdmVu
dFNlbmRpbmdDb250cm9sbGVyIGFsbG9jXSBpbml0XSkuZ2V0KCkgZm9yS2V5OkAiZXZlbnRTZW5k
ZXIiXTsKKyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmdOYXZpZ2F0aW9uQ29udHJvbGxlciBm
b3JLZXk6QCJuYXZpZ2F0aW9uQ29udHJvbGxlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFs
dWU6YWRvcHROUyhbW09iakNDb250cm9sbGVyIGFsbG9jXSBpbml0XSkuZ2V0KCkgZm9yS2V5OkAi
b2JqQ0NvbnRyb2xsZXIiXTsKKyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tP
YmpDUGx1Z2luIGFsbG9jXSBpbml0XSkuZ2V0KCkgZm9yS2V5OkAib2JqQ1BsdWdpbiJdOworICAg
IFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRvcHROUyhbW09iakNQbHVnaW5GdW5jdGlvbiBhbGxv
Y10gaW5pdF0pLmdldCgpIGZvcktleTpAIm9iakNQbHVnaW5GdW5jdGlvbiJdOworICAgIFt3aW5k
b3dPYmplY3Qgc2V0VmFsdWU6YWRvcHROUyhbW1RleHRJbnB1dENvbnRyb2xsZXIgYWxsb2NdIGlu
aXRXaXRoV2ViVmlldzp3ZWJWaWV3XSkuZ2V0KCkgZm9yS2V5OkAidGV4dElucHV0Q29udHJvbGxl
ciJdOwogfQogCiAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWU6KFdlYkZyYW1l
ICopZnJhbWUgaW5Jc29sYXRlZFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkCkBAIC0zNzEs
NyArMzQzLDcgQEAgLSAodm9pZClkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lOihXZWJGcmFt
ZSAqKWZyYW1lIGluSXNvbGF0ZWRXb3JsZDooV2ViU2NyaXAKICAgICBpZiAoIWdsb2JhbE9iamVj
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjdHgsIGdsb2Jh
bE9iamVjdCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIl9fd29ybGRJRCIp
KS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCB3b3JsZElERm9yV29ybGQod29ybGQpKSwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eShjdHgsIGdsb2JhbE9iamVjdCwgV1RSOjpjcmVhdGVKU1N0cmluZygiX193b3JsZElEIikuZ2V0
KCksIEpTVmFsdWVNYWtlTnVtYmVyKGN0eCwgd29ybGRJREZvcldvcmxkKHdvcmxkKSksIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOwogfQogCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZp
ZXcgKilzZW5kZXIgZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFt
ZSBpblNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCmluZGV4IGViYTA5M2VlMTg3Y2QzMTBkMDUxYjIzMGFl
ZDJhMzAwZmU3OTQ5YzAuLmUyMTA3MGFjMzFiMzRjZmNiYjU3OWQ3Nzc1Yjc2MTk5MTE0YWJkZmQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCkBAIC0zMiw2ICsz
Miw3IEBACiAKICNpbXBvcnQgIkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiRWRp
dGluZ0RlbGVnYXRlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCAiTGF5b3V0VGVz
dFNwZWxsQ2hlY2tlci5oIgogI2ltcG9ydCAiTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIuaCIKICNp
bXBvcnQgIk1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oIgpAQCAtNjcwLDE1ICs2NzEsMTAg
QEAgYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0
cmluZ1JlZiB0YXJnZXQsIEpTT2JqZWN0UmUKIHsKICAgICBXZWJGaW5kT3B0aW9ucyBvcHRpb25z
ID0gMDsKIAotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGxlbmd0aFZhbHVl
ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcHRpb25zQXJyYXksIGxlbmd0aFByb3Bl
cnR5TmFtZS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgbGVu
Z3RoVmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IHRhcmdldENGU3RyaW5nID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCB0YXJnZXQpKTsKKyAgICBhdXRvIGxlbmd0aCA9IFdUUjo6YXJyYXlM
ZW5ndGgoY29udGV4dCwgb3B0aW9uc0FycmF5KTsKKyAgICBhdXRvIHRhcmdldENGU3RyaW5nID0g
YWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0YXJnZXQp
KTsKIAotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdElu
ZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCk7CiAgICAgICAgIGlmICghSlNWYWx1ZUlz
U3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAgYi9Ub29scy9U
ZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmNwcAppbmRleCBmZmYwYjc0OTkwYWZi
OWUxMmFjOWQwMWE3MTBhNGM1MjgwZTFlOTA4Li45OTVhZGUwNjYwMDE4Yzk4YzYyZTQ0ZTU2ZjZm
OGY5NjI5MjllODIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdz
L0pTQmFzaWNzLmNwcAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFz
aWNzLmNwcApAQCAtMjgsMTkgKzI4LDI0IEBACiAKIG5hbWVzcGFjZSBXVFIgewogCi1KU1ZhbHVl
UmVmIEpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChKU0NvbnRleHRSZWYgY29udGV4dCwgT3B0aW9u
YWw8Ym9vbD4gdmFsdWUpCitPcHRpb25hbDxib29sPiB0b09wdGlvbmFsQm9vbChKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdmFsdWUgPyBKU1Zh
bHVlTWFrZUJvb2xlYW4oY29udGV4dCwgdmFsdWUudmFsdWUoKSkgOiBKU1ZhbHVlTWFrZU51bGwo
Y29udGV4dCk7CisgICAgcmV0dXJuIEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkg
fHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgPyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0
aW9uYWwoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpOworfQorCitPcHRpb25hbDxk
b3VibGU+IHRvT3B0aW9uYWxEb3VibGUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYg
dmFsdWUpCit7CisgICAgcmV0dXJuIEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkg
fHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgPyBXVEY6Om51bGxvcHQgOiBtYWtlT3B0
aW9uYWwoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCBudWxscHRyKSk7CiB9CiAKLU9w
dGlvbmFsPGJvb2w+IEpTVmFsdWVUb051bGxhYmxlQm9vbGVhbihKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK0pTVmFsdWVSZWYgbWFrZVZhbHVlKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBPcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZUlzVW5k
ZWZpbmVkKGNvbnRleHQsIHZhbHVlKSB8fCBKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIHZhbHVlKSA/
IFdURjo6bnVsbG9wdCA6IE9wdGlvbmFsPGJvb2w+KEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwg
dmFsdWUpKTsKKyAgICByZXR1cm4gdmFsdWUgPyBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwg
dmFsdWUudmFsdWUoKSkgOiBKU1ZhbHVlTWFrZU51bGwoY29udGV4dCk7CiB9CiAKLUpTVmFsdWVS
ZWYgSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5n
UmVmIHN0cmluZ09yTnVsbCkKK0pTVmFsdWVSZWYgbWFrZVZhbHVlKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1N0cmluZ1JlZiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIHN0cmluZ09yTnVsbCA/IEpT
VmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIHN0cmluZ09yTnVsbCkgOiBKU1ZhbHVlTWFrZU51bGwo
Y29udGV4dCk7CisgICAgcmV0dXJuIHN0cmluZyA/IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQs
IHN0cmluZykgOiBKU1ZhbHVlTWFrZU51bGwoY29udGV4dCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpCkBAIC00OCwxOSAr
NTMsNDMgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUpTU3RyaW5nKGNvbnN0IGNo
YXIqIHN0cmluZykKICAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoc3RyaW5nKSk7CiB9CiAKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmlu
ZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0
cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIp
KTsKKyAgICByZXR1cm4gc3RyaW5nID8gc3RyaW5nIDogY3JlYXRlSlNTdHJpbmcoIiIpOworfQor
CiBKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgY2hhciog
c3RyaW5nKQogewogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBjcmVhdGVK
U1N0cmluZyhzdHJpbmcpLmdldCgpKTsKIH0KIAorSlNWYWx1ZVJlZiBwcm9wZXJ0eShKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQorewor
ICAgIHJldHVybiBvYmplY3QgPyBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwg
Y3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIG51bGxwdHIpIDogbnVsbHB0cjsKK30KKworSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZ1Byb3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSkpOwor
fQorCitib29sIGJvb2xlYW5Qcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBib29sIGRlZmF1bHRWYWx1ZSkKK3sKKyAgICBh
dXRvIHZhbHVlID0gcHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4g
dmFsdWUgPyBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHZhbHVlKSA6IGRlZmF1bHRWYWx1ZTsK
K30KKworZG91YmxlIG51bWVyaWNQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGF1dG8gdmFsdWUgPSBwcm9w
ZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAgIHJldHVybiB2YWx1ZSA/IEpTVmFsdWVU
b051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikgOiAwOworfQorCiBKU09iamVjdFJlZiBv
YmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBj
b25zdCBjaGFyKiBuYW1lKQogewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmpl
Y3QsIGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAoIUpTVmFs
dWVJc09iamVjdChjb250ZXh0LCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPih2YWx1ZSk7CisgICAgYXV0byB2YWx1ZSA9
IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7CisgICAgcmV0dXJuIHZhbHVlID8gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSksIG51
bGxwdHIpIDogbnVsbHB0cjsKIH0KIAogSlNPYmplY3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgc3RkOjppbml0aWFsaXplcl9saXN0
PGNvbnN0IGNoYXIqPiBuYW1lcykKQEAgLTcwLDI3ICs5OSwzNiBAQCBKU09iamVjdFJlZiBvYmpl
Y3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBzdGQ6
OmluaXRpYQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKK3Vuc2lnbmVkIGFycmF5TGVuZ3RoKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgcmV0dXJuIG51
bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJsZW5ndGgiKTsKK30KKwogdm9pZCBzZXRQ
cm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBj
aGFyKiBuYW1lLCBib29sIHZhbHVlKQogewogICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4
dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgSlNWYWx1ZU1ha2VCb29sZWFu
KGNvbnRleHQsIHZhbHVlKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKIH0K
IAordm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgY29u
c3QgY2hhciogbmFtZSwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBKU09iamVjdFNldFByb3Bl
cnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgY3JlYXRlSlNT
dHJpbmcobmFtZSkuZ2V0KCksIHZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBudWxscHRyKTsKK30KKwordm9pZCBzZXRH
bG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgY2hhciogbmFt
ZSwgZG91YmxlIHZhbHVlKQoreworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQs
IG5hbWUsIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIHZhbHVlKSk7Cit9CisKIEpTVmFsdWVS
ZWYgY2FsbChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBj
aGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJndW1lbnRzKQog
ewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvIGZ1
bmN0aW9uID0gb2JqZWN0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKLSAgICBpZiAo
IWZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gSlNPYmplY3RD
YWxsQXNGdW5jdGlvbihjb250ZXh0LCBmdW5jdGlvbiwgb2JqZWN0LCBhcmd1bWVudHMuc2l6ZSgp
LCBhcmd1bWVudHMuYmVnaW4oKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIGZ1bmN0aW9uID8gSlNP
YmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBmdW5jdGlvbiwgb2JqZWN0LCBhcmd1bWVudHMu
c2l6ZSgpLCBhcmd1bWVudHMuYmVnaW4oKSwgbnVsbHB0cikgOiBudWxscHRyOwogfQogCiBKU09i
amVjdFJlZiBjYWxsQ29uc3RydWN0b3IoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0
IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlUmVmPiBhcmd1bWVudHMp
CiB7CiAgICAgYXV0byBjb25zdHJ1Y3RvciA9IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIEpTQ29u
dGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgeyBuYW1lIH0pOwotICAgIGlmICghY29uc3Ry
dWN0b3IpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBKU09iamVjdENhbGxB
c0NvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnN0cnVjdG9yLCBhcmd1bWVudHMuc2l6ZSgpLCBhcmd1
bWVudHMuYmVnaW4oKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9yID8gSlNPYmpl
Y3RDYWxsQXNDb25zdHJ1Y3Rvcihjb250ZXh0LCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzLnNpemUo
KSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpIDogbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pT
QmFzaWNzLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmgKaW5k
ZXggMTFkZGE1MjQ3YTVhYjZjMDQwOTYzZGYxOWFiMGY1ZTAyOTZjZWI4Mi4uNjVmMThkN2VjZDgw
MTY4MzMzMzRkZjVlYjg4OGNjYzRhMGIyMWQ1MyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
QmluZGluZ3MvSlNCYXNpY3MuaApAQCAtMzIsMTYgKzMyLDI4IEBACiAKIG5hbWVzcGFjZSBXVFIg
ewogCi1KU1ZhbHVlUmVmIEpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChKU0NvbnRleHRSZWYsIE9w
dGlvbmFsPGJvb2w+KTsKLU9wdGlvbmFsPGJvb2w+IEpTVmFsdWVUb051bGxhYmxlQm9vbGVhbihK
U0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOworT3B0aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2wo
SlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKK09wdGlvbmFsPGRvdWJsZT4gdG9PcHRpb25hbERv
dWJsZShKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwogCi1KU1ZhbHVlUmVmIEpTVmFsdWVNYWtl
U3RyaW5nT3JOdWxsKEpTQ29udGV4dFJlZiwgSlNTdHJpbmdSZWYpOworSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IGNyZWF0ZUpTU3RyaW5nKGNvbnN0IGNoYXIqID0gIiIpOworSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGNyZWF0ZUpTU3RyaW5nKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAK
LUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKik7CiBK
U1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqKTsKK0pTVmFsdWVS
ZWYgbWFrZVZhbHVlKEpTQ29udGV4dFJlZiwgT3B0aW9uYWw8Ym9vbD4pOworSlNWYWx1ZVJlZiBt
YWtlVmFsdWUoSlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZik7CisKK0pTVmFsdWVSZWYgcHJvcGVy
dHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFtZSk7Citib29sIGJv
b2xlYW5Qcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1l
LCBib29sIGRlZmF1bHRWYWx1ZSA9IGZhbHNlKTsKK2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFtZSk7CitKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gc3RyaW5nUHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29u
c3QgY2hhciogbmFtZSk7Cit1bnNpZ25lZCBhcnJheUxlbmd0aChKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmKTsKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmpl
Y3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOwogSlNPYmplY3RSZWYgb2JqZWN0UHJvcGVydHkoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiwgc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIq
PiBuYW1lcyk7CisKIHZvaWQgc2V0UHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwg
Y29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHNldEdsb2JhbE9iamVjdFByb3Bl
cnR5KEpTQ29udGV4dFJlZiwgY29uc3QgY2hhciogbmFtZSwgSlNWYWx1ZVJlZik7Cit2b2lkIHNl
dEdsb2JhbE9iamVjdFByb3BlcnR5KEpTQ29udGV4dFJlZiwgY29uc3QgY2hhciogbmFtZSwgZG91
YmxlIHZhbHVlKTsKKwogSlNWYWx1ZVJlZiBjYWxsKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYs
IGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlUmVmPiBhcmd1
bWVudHMpOwogSlNPYmplY3RSZWYgY2FsbENvbnN0cnVjdG9yKEpTR2xvYmFsQ29udGV4dFJlZiwg
Y29uc3QgY2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFsdWVSZWY+IGFyZ3Vt
ZW50cyk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNX
cmFwcGFibGUuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGFibGUu
aAppbmRleCA5ZTBmMDdkZjU5MzJhYjMwMzMxZDdiNjFkMTczNTNhZTZlMDFjNDczLi41OWJlMWRh
ZWEyNzc1NGVlNDc3NWI0ZjNlN2E1ZDY4MmZiMWQ1ZjFlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBhYmxlLmgKKysrIGIvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCkBAIC0yNSw5ICsyNSwxMCBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU0NsYXNzKiBK
U0NsYXNzUmVmOworCiBuYW1lc3BhY2UgV1RSIHsKIAogY2xhc3MgSlNXcmFwcGFibGUgOiBwdWJs
aWMgUmVmQ291bnRlZDxKU1dyYXBwYWJsZT4gewpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmlu
ZGluZ3MvSlNXcmFwcGVyLmgKaW5kZXggZjY3OThmOTlhNGZlYzY3NTYzZDA5MTU2M2I1MDUwOWRm
Yzg1NzJkYS4uOWI2YmFkOGFmMDQ0YjIwMmZmODcyN2FjZWQ3Y2I5ZmZiMmNlYzUyZSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaAorKysgYi9U
b29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBlci5oCkBAIC01MCw0ICs1MCw5
IEBAIGlubGluZSB2b2lkIHNldFByb3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByCiAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250
ZXh0LCBvYmplY3QsIGNyZWF0ZUpTU3RyaW5nKHByb3BlcnR5TmFtZSkuZ2V0KCksIEpTV3JhcHBl
cjo6d3JhcChjb250ZXh0LCB2YWx1ZSksIGF0dHJpYnV0ZXMsIGV4Y2VwdGlvbik7CiB9CiAKK2lu
bGluZSB2b2lkIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBj
b25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEpTV3JhcHBhYmxlKiB2YWx1ZSkKK3sKKyAgICBzZXRH
bG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCBwcm9wZXJ0eU5hbWUsIEpTV3JhcHBlcjo6d3Jh
cChjb250ZXh0LCB2YWx1ZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvRXZlbnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlh
bGl6ZXJNYWMubW0gYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9t
YWMvRXZlbnRTZXJpYWxpemVyTWFjLm1tCmluZGV4IDBmMTdiMmNkNjM5YTYzMDYzYTQ4OGRmM2Ez
M2EzNWUzMmEyZWNjYzEuLmJkZDIwN2JkNDA5ZjA0ZWU1ZjM4MjMxOTRmYTI0ZTYzMjg4NTg5MTcg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvRXZlbnRTZXJpYWxpemF0aW9uL21h
Yy9FdmVudFNlcmlhbGl6ZXJNYWMubW0KKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9FdmVu
dFNlcmlhbGl6YXRpb24vbWFjL0V2ZW50U2VyaWFsaXplck1hYy5tbQpAQCAtMTk1LDcgKzE5NSw3
IEBAIEBpbXBsZW1lbnRhdGlvbiBFdmVudFNlcmlhbGl6ZXIKIAogKyAoTlNEaWN0aW9uYXJ5ICop
ZGljdGlvbmFyeUZvckV2ZW50OihDR0V2ZW50UmVmKXJhd0V2ZW50IHJlbGF0aXZlVG9UaW1lOihD
R0V2ZW50VGltZXN0YW1wKXJlZmVyZW5jZVRpbWVzdGFtcAogewotICAgIFJldGFpblB0cjxDR0V2
ZW50UmVmPiBwbGFpbkV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsKKyAgICBh
dXRvIHBsYWluRXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOwogICAgIENHRXZl
bnRSZWYgcmF3UGxhaW5FdmVudCA9IHBsYWluRXZlbnQuZ2V0KCk7CiAKICAgICBOU011dGFibGVE
aWN0aW9uYXJ5ICpkaWN0ID0gW1tbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOwpAQCAtMjI2LDcgKzIyNiw3IEBAICsgKE5TRGljdGlvbmFyeSAqKWRpY3Rpb25h
cnlGb3JFdmVudDooQ0dFdmVudFJlZilyYXdFdmVudCByZWxhdGl2ZVRvVGltZTooQ0dFdmVuCiAK
ICsgKFJldGFpblB0cjxDR0V2ZW50UmVmPiljcmVhdGVFdmVudEZvckRpY3Rpb25hcnk6KE5TRGlj
dGlvbmFyeSAqKWRpY3QgaW5XaW5kb3c6KE5TV2luZG93ICopd2luZG93IHJlbGF0aXZlVG9UaW1l
OihDR0V2ZW50VGltZXN0YW1wKXJlZmVyZW5jZVRpbWVzdGFtcAogewotICAgIFJldGFpblB0cjxD
R0V2ZW50UmVmPiBldmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZShOVUxMKSk7CisgICAgYXV0
byBldmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZShOVUxMKSk7CiAgICAgQ0dFdmVudFJlZiBy
YXdFdmVudCA9IGV2ZW50LmdldCgpOwogCiAgICAgRk9SX0VBQ0hfQ0dFVkVOVF9JTlRFR0VSX0ZJ
RUxEKFNUT1JFX0lOVEVHRVJfRklFTERfVE9fRVZFTlQpOwpAQCAtMjY0LDcgKzI2NCw3IEBAIGNv
bnN0IGZsb2F0IGV2ZW50RGlzcGF0Y2hUaW1lclJhdGUgPSAxLiAvIDEyMC47CiAKICsgKHZvaWQp
cGxheVN0cmVhbTooTlNBcnJheTxOU0RpY3Rpb25hcnkgKj4gKilldmVudERpY3RzIHdpbmRvdzoo
TlNXaW5kb3cgKil3aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoKSljb21wbGV0aW9u
SGFuZGxlcgogewotICAgIFJldGFpblB0cjxFdmVudFN0cmVhbVBsYXllcj4gcGxheWVyID0gYWRv
cHROUyhbW0V2ZW50U3RyZWFtUGxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBwbGF5ZXIg
PSBhZG9wdE5TKFtbRXZlbnRTdHJlYW1QbGF5ZXIgYWxsb2NdIGluaXRdKTsKIAogICAgIHBsYXll
ci0+X3JlbWFpbmluZ0V2ZW50RGljdGlvbmFyaWVzID0gYWRvcHROUyhbZXZlbnREaWN0cyBtdXRh
YmxlQ29weV0pOwogICAgIHBsYXllci0+X3dpbmRvdyA9IHdpbmRvdzsKQEAgLTI4Miw3ICsyODIs
NyBAQCAtICh2b2lkKXBsYXliYWNrVGltZXJGaXJlZDooTlNUaW1lciAqKXRpbWVyCiAgICAgYXV0
byByZW1vdmVMaXN0ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAg
ICAgTlNFdmVudCAqbnNFdmVudCA9IG5pbDsKICAgICBmb3IgKGlkIGV2ZW50RGljdCBpbiBfcmVt
YWluaW5nRXZlbnREaWN0aW9uYXJpZXMuZ2V0KCkpIHsKLSAgICAgICAgUmV0YWluUHRyPENHRXZl
bnRSZWY+IGV2ZW50ID0gW0V2ZW50U2VyaWFsaXplciBjcmVhdGVFdmVudEZvckRpY3Rpb25hcnk6
ZXZlbnREaWN0IGluV2luZG93Ol93aW5kb3cuZ2V0KCkgcmVsYXRpdmVUb1RpbWU6X3N0YXJ0VGlt
ZV07CisgICAgICAgIGF1dG8gZXZlbnQgPSBbRXZlbnRTZXJpYWxpemVyIGNyZWF0ZUV2ZW50Rm9y
RGljdGlvbmFyeTpldmVudERpY3QgaW5XaW5kb3c6X3dpbmRvdy5nZXQoKSByZWxhdGl2ZVRvVGlt
ZTpfc3RhcnRUaW1lXTsKICAgICAgICAgaWYgKENHRXZlbnRHZXRUaW1lc3RhbXAoZXZlbnQuZ2V0
KCkpIDwgbWFjaF9hYnNvbHV0ZV90aW1lKCkpIHsKICAgICAgICAgICAgIG5zRXZlbnQgPSBbTlNF
dmVudCBldmVudFdpdGhDR0V2ZW50OmV2ZW50LmdldCgpXTsKICAgICAgICAgICAgIFtOU0FwcCBw
b3N0RXZlbnQ6bnNFdmVudCBhdFN0YXJ0Ok5PXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAgYi9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwCmluZGV4IDI3
MDViMzlhMjQ3ZGQyNTdkNWM2ZDU4YzQ3MGU5NjMzYTkxOWRmZDQuLjVkY2ZiN2M5ODcyZjM5OWYx
NTY3NGQ5NzEwZGViMjg5YjJkMTIxOGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFy
ZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250ZXh0LmNwcApAQCAtMjYsOSAr
MjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlVJU2NyaXB0Q29udGV4dC5o
IgogCisjaW5jbHVkZSAiSlNCYXNpY3MuaCIKICNpbmNsdWRlICJVSVNjcmlwdENvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3Qu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdUUjsKQEAgLTQzLDExICs0Miw3IEBAIFVJU2NyaXB0Q29u
dGV4dDo6VUlTY3JpcHRDb250ZXh0KFVJU2NyaXB0Q29udGV4dERlbGVnYXRlJiBkZWxlZ2F0ZSwg
VUlTY3JpcHRDb250CiAgICAgLCBtX2RlbGVnYXRlKGRlbGVnYXRlKQogewogICAgIG1fY29udHJv
bGxlciA9IGZhY3RvcnkoKnRoaXMpOwotCi0gICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0g
SlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KG1fY29udGV4dC5nZXQoKSk7Ci0KLSAgICBKU1ZhbHVl
UmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgbV9jb250cm9sbGVyLT5tYWtlV2luZG93T2Jq
ZWN0KG1fY29udGV4dC5nZXQoKSwgZ2xvYmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBtX2Nv
bnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QobV9jb250ZXh0LmdldCgpKTsKIH0KIAogVUlTY3Jp
cHRDb250ZXh0Ojp+VUlTY3JpcHRDb250ZXh0KCkKQEAgLTY2LDkgKzYxLDcgQEAgdm9pZCBVSVNj
cmlwdENvbnRleHQ6OnJ1blVJU2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0LCB1bnNpZ25lZCBz
Y3JpcHRDYWxsYmFja0kKICAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQo
bV9jb250ZXh0LmdldCgpLCBzdHJpbmdSZWYuZ2V0KCksIDAsIDAsIDEsICZleGNlcHRpb24pOwog
ICAgIAogICAgIGlmICghaGFzT3V0c3RhbmRpbmdBc3luY1Rhc2tzKCkpIHsKLSAgICAgICAgSlNW
YWx1ZVJlZiBzdHJpbmdpZnlFeGNlcHRpb24gPSBudWxscHRyOwotICAgICAgICBhdXRvIHN0cmlu
Z2lmaWVkID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShtX2NvbnRleHQuZ2V0KCksIHJlc3Vs
dCwgJnN0cmluZ2lmeUV4Y2VwdGlvbikpOwotICAgICAgICByZXF1ZXN0VUlTY3JpcHRDb21wbGV0
aW9uKHN0cmluZ2lmaWVkLmdldCgpKTsKKyAgICAgICAgcmVxdWVzdFVJU2NyaXB0Q29tcGxldGlv
bihjcmVhdGVKU1N0cmluZyhtX2NvbnRleHQuZ2V0KCksIHJlc3VsdCkuZ2V0KCkpOwogICAgICAg
ICB0cnlUb0NvbXBsZXRlVUlTY3JpcHRGb3JDdXJyZW50UGFyZW50Q2FsbGJhY2soKTsKICAgICB9
CiB9CkBAIC0xODksMTAgKzE4MiwxMCBAQCBKU09iamVjdFJlZiBVSVNjcmlwdENvbnRleHQ6Om9i
amVjdEZyb21SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkgY29ucwogewogICAg
IEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTT2JqZWN0TWFrZShtX2NvbnRleHQuZ2V0KCksIG51bGxw
dHIsIG51bGxwdHIpOwogCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCks
IG9iamVjdCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlZnQiKSkuZ2V0
KCksIEpTVmFsdWVNYWtlTnVtYmVyKG1fY29udGV4dC5nZXQoKSwgcmVjdC54KCkpLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOwotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9j
b250ZXh0LmdldCgpLCBvYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJ0b3AiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKG1fY29udGV4dC5nZXQoKSwgcmVjdC55
KCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOwotICAgIEpTT2JqZWN0U2V0
UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJ3aWR0aCIpKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIobV9jb250ZXh0
LmdldCgpLCByZWN0LndpZHRoKCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIp
OwotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsIGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoZWlnaHQiKSkuZ2V0KCksIEpTVmFsdWVN
YWtlTnVtYmVyKG1fY29udGV4dC5nZXQoKSwgcmVjdC5oZWlnaHQoKSksIGtKU1Byb3BlcnR5QXR0
cmlidXRlTm9uZSwgbnVsbHB0cik7CisgICAgc2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBv
YmplY3QsICJsZWZ0IiwgcmVjdC54KCkpOworICAgIHNldFByb3BlcnR5KG1fY29udGV4dC5nZXQo
KSwgb2JqZWN0LCAidG9wIiwgcmVjdC55KCkpOworICAgIHNldFByb3BlcnR5KG1fY29udGV4dC5n
ZXQoKSwgb2JqZWN0LCAid2lkdGgiLCByZWN0LndpZHRoKCkpOworICAgIHNldFByb3BlcnR5KG1f
Y29udGV4dC5nZXQoKSwgb2JqZWN0LCAiaGVpZ2h0IiwgcmVjdC5oZWlnaHQoKSk7CiAgICAgCiAg
ICAgcmV0dXJuIG9iamVjdDsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
VUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oIGIvVG9vbHMvVGVzdFJ1bm5lclNo
YXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKaW5kZXggYTVhOGQ3Y2My
ZmNjOWZlZDZmZjU1MjJjYzllZDY3Y2U0Mjk4Y2E4MS4uMzUyNGI2MGJkODFjZDljYWIzMTBhYTFi
NTY4ZjIzZmQ1MTY4ZGNlZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNj
cmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNo
YXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKQEAgLTYzLDcgKzYzLDcg
QEAgcHVibGljOgogICAgIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOwogICAgIHZpcnR1YWwgdm9p
ZCB3YWl0Rm9yT3V0c3RhbmRpbmdDYWxsYmFja3MoKSB7IC8qIG5vdEltcGxlbWVudGVkKCk7ICov
IH0KIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVm
IHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5k
b3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIC8vIFRyYW5zYWN0aW9uIGhlbHBlcnMKICAg
ICAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJ
U2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHAgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwCmluZGV4IGM2ZWIxNDBhYTM1
NmM2NmQ4YzQ1MDIxNGU3ZGIyYzg1YWQzYTcxYTMuLmJmZjRmMzQzM2RiZDI5NTc1ZDYyNWI3Mzk0
ZTZkOWQzODFjYWVjMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3Jp
cHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyU2hhcmVkLmNwcApA
QCAtNDEsMjAgKzQxLDE1IEBAIERldmljZU9yaWVudGF0aW9uKiB0b0RldmljZU9yaWVudGF0aW9u
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQogICAgICAgICBEZXZpY2VP
cmllbnRhdGlvbjo6TGFuZHNjYXBlTGVmdCwKICAgICAgICAgRGV2aWNlT3JpZW50YXRpb246Okxh
bmRzY2FwZVJpZ2h0CiAgICAgfTsKLQotICAgIGF1dG8gb3B0aW9uID0gYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwotICAgIGlmIChvcHRpb24tPnN0
cmluZygpID09ICJwb3J0cmFpdCIpCisgICAgYXV0byBvcHRpb24gPSBjcmVhdGVKU1N0cmluZyhj
b250ZXh0LCB2YWx1ZSk7CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0
aW9uLmdldCgpLCAicG9ydHJhaXQiKSkKICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbMF07Ci0KLSAg
ICBpZiAob3B0aW9uLT5zdHJpbmcoKSA9PSAicG9ydHJhaXQtdXBzaWRlZG93biIpCisgICAgaWYg
KEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uLmdldCgpLCAicG9ydHJhaXQtdXBz
aWRlZG93biIpKQogICAgICAgICByZXR1cm4gJnZhbHVlc1sxXTsKLQotICAgIGlmIChvcHRpb24t
PnN0cmluZygpID09ICJsYW5kc2NhcGUtbGVmdCIpCisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcob3B0aW9uLmdldCgpLCAibGFuZHNjYXBlLWxlZnQiKSkKICAgICAgICAgcmV0
dXJuICZ2YWx1ZXNbMl07Ci0KLSAgICBpZiAob3B0aW9uLT5zdHJpbmcoKSA9PSAibGFuZHNjYXBl
LXJpZ2h0IikKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb24uZ2V0
KCksICJsYW5kc2NhcGUtcmlnaHQiKSkKICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbM107Ci0KICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNjgsOSArNjMsOSBAQCB2b2lkIFVJU2NyaXB0Q29u
dHJvbGxlcjo6Y29udGV4dERlc3Ryb3llZCgpCiAgICAgbV9jb250ZXh0ID0gbnVsbHB0cjsKIH0K
IAotdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVm
IGNvbnRleHQpCiB7Ci0gICAgc2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCAidWlD
b250cm9sbGVyIiwgdGhpcywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQ
cm9wZXJ0eShjb250ZXh0LCAidWlDb250cm9sbGVyIiwgdGhpcyk7CiB9CiAKIEpTQ2xhc3NSZWYg
VUlTY3JpcHRDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9jb2NvYS9MYXlvdXRUZXN0U3BlbGxDaGVja2VyLm1tIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9jb2NvYS9MYXlvdXRUZXN0U3BlbGxDaGVja2VyLm1tCmluZGV4IDhmYzAy
MTE2N2FhYzIyMTUzNmExNzY2ZTUzOTAxOWZlNjQ0MDU4ZTEuLmQ4NmVmOTU2ZjgwZGZhMTkyMjk1
NGUxMTc5YWYyYjM1MmI5ODM5MjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
Y29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbQorKysgYi9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIubW0KQEAgLTI2LDcgKzI2LDcgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5oIgogCi0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgorI2ltcG9ydCAiSlNCYXNpY3Mu
aCIKICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
ICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgpAQCAtMjEyLDExICsyMTIsMTEgQEAgLSAodm9pZClz
ZXRSZXN1bHRzOihUZXh0Q2hlY2tpbmdSZXN1bHRzRGljdGlvbmFyeSAqKXJlc3VsdHMKIC0gKHZv
aWQpc2V0UmVzdWx0c0Zyb21KU1ZhbHVlOihKU1ZhbHVlUmVmKXJlc3VsdHNWYWx1ZSBpbkNvbnRl
eHQ6KEpTQ29udGV4dFJlZiljb250ZXh0CiB7CiAgICAgYXV0byByZXN1bHRzT2JqZWN0ID0gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIHJlc3VsdHNWYWx1ZSwgbnVsbHB0cik7Ci0gICAgYXV0byBm
cm9tUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZy
b20iKSk7Ci0gICAgYXV0byB0b1Byb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJ0byIpKTsKLSAgICBhdXRvIHR5cGVQcm9wZXJ0eU5hbWUgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidHlwZSIpKTsKLSAgICBhdXRvIHJlcGxhY2Vt
ZW50UHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInJl
cGxhY2VtZW50IikpOwotICAgIGF1dG8gZGV0YWlsc1Byb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJkZXRhaWxzIikpOworICAgIGF1dG8gZnJvbVByb3Bl
cnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoImZyb20iKTsKKyAgICBhdXRvIHRvUHJvcGVy
dHlOYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZygidG8iKTsKKyAgICBhdXRvIHR5cGVQcm9wZXJ0
eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJ0eXBlIik7CisgICAgYXV0byByZXBsYWNlbWVu
dFByb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoInJlcGxhY2VtZW50Iik7CisgICAg
YXV0byBkZXRhaWxzUHJvcGVydHlOYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZygiZGV0YWlscyIp
OwogICAgIGF1dG8gcmVzdWx0cyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0XSk7CiAKICAgICAvLyBGSVhNRTogVXNpbmcgdGhlIE9iamVjdGl2ZS1DIEFQSSB3b3Vs
ZCBtYWtlIHRoaXMgbG9naWMgZWFzaWVyIHRvIGZvbGxvdy4KQEAgLTIyOCwxNSArMjI4LDEzIEBA
IC0gKHZvaWQpc2V0UmVzdWx0c0Zyb21KU1ZhbHVlOihKU1ZhbHVlUmVmKXJlc3VsdHNWYWx1ZSBp
bkNvbnRleHQ6KEpTQ29udGV4dFJlZiljCiAgICAgICAgIGF1dG8gcmVzdWx0c0ZvcldvcmQgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICAgICAgZm9yIChzaXpl
X3QgcmVzdWx0SW5kZXggPSAwOyByZXN1bHRJbmRleCA8IEpTUHJvcGVydHlOYW1lQXJyYXlHZXRD
b3VudChyZXN1bHRzQXJyYXlQcm9wZXJ0eU5hbWVzKTsgKytyZXN1bHRJbmRleCkgewogICAgICAg
ICAgICAgYXV0byByZXN1bHRzT2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHJlc3VsdHNBcnJheSwgcmVzdWx0SW5kZXgs
IG51bGxwdHIpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGxvbmcgZnJvbVZhbHVlID0gbHJvdW5k
bChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBy
ZXN1bHRzT2JqZWN0LCBmcm9tUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwgbnVsbHB0cikp
OwotICAgICAgICAgICAgbG9uZyB0b1ZhbHVlID0gbHJvdW5kbChKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0b1Byb3Bl
cnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxwdHIpKTsKLSAgICAgICAgICAgIGF1dG8gdHlw
ZVZhbHVlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBKU09iamVjdEdldFBy
b3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIHR5cGVQcm9wZXJ0eU5hbWUuZ2V0KCksIG51
bGxwdHIpLCBudWxscHRyKSk7CisgICAgICAgICAgICBsb25nIGZyb21WYWx1ZSA9IEpTVmFsdWVU
b051bWJlcihjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmpl
Y3QsIGZyb21Qcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIGxvbmcgdG9WYWx1ZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBKU09iamVjdEdldFBy
b3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIHRvUHJvcGVydHlOYW1lLmdldCgpLCBudWxs
cHRyKSwgbnVsbHB0cik7CisgICAgICAgICAgICBhdXRvIHR5cGVWYWx1ZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2Jq
ZWN0LCB0eXBlUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKSk7CiAgICAgICAgICAgICBhdXRv
IHJlcGxhY2VtZW50VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNP
YmplY3QsIHJlcGxhY2VtZW50UHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKTsKICAgICAgICAg
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcmVwbGFjZW1lbnRUZXh0OwotICAgICAgICAgICAg
aWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgcmVwbGFjZW1lbnRWYWx1ZSkpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIHJlcGxhY2VtZW50SlNTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIHJlcGxhY2VtZW50VmFsdWUsIG51bGxwdHIpKTsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlbWVudFRleHQgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtD
RkFsbG9jYXRvckRlZmF1bHQsIHJlcGxhY2VtZW50SlNTdHJpbmcuZ2V0KCkpKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHJlcGxh
Y2VtZW50VmFsdWUpKQorICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50VGV4dCA9IGFkb3B0Q0Yo
SlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgV1RSOjpjcmVhdGVKU1N0
cmluZyhjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlKS5nZXQoKSkpOwogICAgICAgICAgICAgYXV0
byBkZXRhaWxzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAg
ICAgICAgICBhdXRvIGRldGFpbHNWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
cmVzdWx0c09iamVjdCwgZGV0YWlsc1Byb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cik7CiAgICAg
ICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCBkZXRhaWxzVmFsdWUpKSB7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlGdW5jdGlvbnMu
aCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRGljdGlvbmFyeUZ1bmN0aW9ucy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmU1NTE4YWIzODEzOGQ2YjdiZmFhMDM1OWY3ODJjZWNkODczNmY5MDkKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlGdW5jdGlvbnMuaApAQCAt
MCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3Ry
aW5nRnVuY3Rpb25zLmgiCisKK25hbWVzcGFjZSBXVFIgeworCitXS0RpY3Rpb25hcnlSZWYgZGlj
dGlvbmFyeVZhbHVlKFdLVHlwZVJlZik7CisKK2Jvb2wgYm9vbGVhblZhbHVlKFdLVHlwZVJlZik7
Citib29sIGJvb2xlYW5WYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS1R5cGVSZWY+Jik7CisKK2Rv
dWJsZSBkb3VibGVWYWx1ZShXS1R5cGVSZWYpOworT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERv
dWJsZVZhbHVlKFdLVHlwZVJlZik7CisKK1dLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLVHlwZVJl
Zik7CitXVEY6OlN0cmluZyB0b1dURlN0cmluZyhXS1R5cGVSZWYpOworCit1aW50NjRfdCB1aW50
NjRWYWx1ZShXS1R5cGVSZWYpOwordWludDY0X3QgdWludDY0VmFsdWUoY29uc3QgV0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPiYpOworCitXS1R5cGVSZWYgdmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25z
dCBjaGFyKiBrZXkpOworCitib29sIGJvb2xlYW5WYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0
IGNoYXIqIGtleSk7Citkb3VibGUgZG91YmxlVmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25zdCBj
aGFyKiBrZXkpOworV0tTdHJpbmdSZWYgc3RyaW5nVmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25z
dCBjaGFyKiBrZXkpOwordWludDY0X3QgdWludDY0VmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25z
dCBjaGFyKiBrZXkpOworCitPcHRpb25hbDxkb3VibGU+IG9wdGlvbmFsRG91YmxlVmFsdWUoV0tE
aWN0aW9uYXJ5UmVmLCBjb25zdCBjaGFyKiBrZXkpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+Jiwg
Y29uc3QgY2hhcioga2V5LCBjb25zdCBPcHRpb25hbDxUPiYgdmFsdWUpOwordm9pZCBzZXRWYWx1
ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIq
IGtleSwgV0tUeXBlUmVmIHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGJvb2wgdmFsdWUpOwor
dm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYs
IGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hhciogdmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25z
dCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwg
dWludDY0X3QgdmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFi
bGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgZG91YmxlIHZhbHVlKTsKK3ZvaWQg
c2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25z
dCBjaGFyKiBrZXksIGNvbnN0IFdURjo6U3RyaW5nJiB2YWx1ZSk7CisKK2lubGluZSBib29sIGJv
b2xlYW5WYWx1ZShXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0
VHlwZUlEKHZhbHVlKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSAmJiBXS0Jvb2xlYW5HZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHZhbHVlKSk7Cit9CisKK2lubGluZSBib29sIGJv
b2xlYW5WYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS1R5cGVSZWY+JiB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gYm9vbGVhblZhbHVlKHZhbHVlLmdldCgpKTsKK30KKworaW5saW5lIFdLRGljdGlvbmFy
eVJlZiBkaWN0aW9uYXJ5VmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1
ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkgPyBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KHZhbHVlKSA6IG51bGxwdHI7Cit9CisKK2lubGluZSBk
b3VibGUgZG91YmxlVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAm
JiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSA/IFdLRG91YmxlR2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KHZhbHVlKSkgOiAwOworfQorCitpbmxpbmUg
T3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRG91YmxlR2V0VHlw
ZUlEKCkgPyBtYWtlT3B0aW9uYWwoV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJs
ZVJlZj4odmFsdWUpKSkgOiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBXS1N0cmluZ1JlZiBz
dHJpbmdWYWx1ZShXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0
VHlwZUlEKHZhbHVlKSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpID8gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KHZhbHVlKSA6IG51bGxwdHI7Cit9CisKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0
cmluZyhXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvV1RGU3RyaW5nKHN0cmluZ1Zh
bHVlKHZhbHVlKSk7Cit9CisKK2lubGluZSB1aW50NjRfdCB1aW50NjRWYWx1ZShXS1R5cGVSZWYg
dmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS1VJ
bnQ2NEdldFR5cGVJRCgpID8gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4odmFsdWUpKSA6IDA7Cit9CisKK2lubGluZSB1aW50NjRfdCB1aW50NjRWYWx1ZShjb25zdCBX
S1JldGFpblB0cjxXS1R5cGVSZWY+JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdWludDY0VmFsdWUo
dmFsdWUuZ2V0KCkpOworfQorCitpbmxpbmUgV0tUeXBlUmVmIHZhbHVlKFdLRGljdGlvbmFyeVJl
ZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkoZGljdGlvbmFyeSwgdG9XSyhrZXkpLmdldCgpKTsKK30KKworaW5saW5l
IGJvb2wgYm9vbGVhblZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXkpCit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkp
KTsKK30KKworaW5saW5lIGRvdWJsZSBkb3VibGVWYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlv
bmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBkb3VibGVWYWx1ZSh2YWx1ZShk
aWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5lIFdLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdL
RGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJu
IHN0cmluZ1ZhbHVlKHZhbHVlKGRpY3Rpb25hcnksIGtleSkpOworfQorCitpbmxpbmUgdWludDY0
X3QgdWludDY0VmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtl
eSkKK3sKKyAgICByZXR1cm4gdWludDY0VmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9
CisKK2lubGluZSBPcHRpb25hbDxkb3VibGU+IG9wdGlvbmFsRG91YmxlVmFsdWUoV0tEaWN0aW9u
YXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gb3B0aW9u
YWxEb3VibGVWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5lIHZvaWQg
c2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rp
b25hcnksIGNvbnN0IGNoYXIqIGtleSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwgdG9XSyhrZXkpLmdldCgpLCB2YWx1ZSk7Cit9
CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rp
b25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIGJvb2wgdmFsdWUpCit7Cisg
ICAgc2V0VmFsdWUoZGljdGlvbmFyeSwga2V5LCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkpLmdldCgpKTsKK30KKworaW5saW5lIHZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSwgY29u
c3QgY2hhciogdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwga2V5LCB0b1dLKHZh
bHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIGNv
bnN0IFdURjo6U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXks
IHRvV0sodmFsdWUpLmdldCgpKTsKK30KKworaW5saW5lIHZvaWQgc2V0VmFsdWUoY29uc3QgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIq
IGtleSwgdWludDY0X3QgdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwga2V5LCBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBz
ZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlv
bmFyeSwgY29uc3QgY2hhcioga2V5LCBkb3VibGUgdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGlj
dGlvbmFyeSwga2V5LCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIGNvbnN0
IE9wdGlvbmFsPFQ+JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUpCisgICAgICAgIHNldFZhbHVl
KGRpY3Rpb25hcnksIGtleSwgKnZhbHVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oCmluZGV4IDY0NDc2MDM5NjhkMjA2
NDIwYmViOTQyNzczYjI0Yjc4OTY0MWI1YzkuLmZhM2E4OGQzYWYzOTM0ZDRjODgyMGJmNTBmZTlm
ODk3YjM4ZmQwNGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5k
ZXJQcm94eS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5o
CkBAIC0xMTIsMTggKzExMiwxOSBAQCBwcml2YXRlOgogICAgIFBPSU5UIHBvc2l0aW9uSW5Qb2lu
dCgpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8TE9ORz4obV9wb3NpdGlvbi54KSwgc3Rh
dGljX2Nhc3Q8TE9ORz4obV9wb3NpdGlvbi55KSB9OyB9CiAjZW5kaWYKIAotICAgIGRvdWJsZSBt
X3RpbWU7Ci0gICAgV0tQb2ludCBtX3Bvc2l0aW9uOwotICAgIGJvb2wgbV9sZWZ0TW91c2VCdXR0
b25Eb3duOwotICAgIGludCBtX2NsaWNrQ291bnQ7Ci0gICAgZG91YmxlIG1fY2xpY2tUaW1lOwot
ICAgIFdLUG9pbnQgbV9jbGlja1Bvc2l0aW9uOwotICAgIFdLRXZlbnRNb3VzZUJ1dHRvbiBtX2Ns
aWNrQnV0dG9uOworICAgIGRvdWJsZSBtX3RpbWUgeyAwIH07CisgICAgV0tQb2ludCBtX3Bvc2l0
aW9uIHsgfTsKKyAgICBib29sIG1fbGVmdE1vdXNlQnV0dG9uRG93biB7IGZhbHNlIH07CisgICAg
aW50IG1fY2xpY2tDb3VudCB7IDAgfTsKKyAgICBkb3VibGUgbV9jbGlja1RpbWUgeyAwIH07Cisg
ICAgV0tQb2ludCBtX2NsaWNrUG9zaXRpb24geyB9OworICAgIFdLRXZlbnRNb3VzZUJ1dHRvbiBt
X2NsaWNrQnV0dG9uIHsga1dLRXZlbnRNb3VzZUJ1dHRvbk5vQnV0dG9uIH07CiAgICAgdW5zaWdu
ZWQgbV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3duIHsgMCB9OwogI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIGludCBldmVudE51bWJlcjsKLSNlbGlmIFBMQVRGT1JNKFdQRSkKLSAgICB1aW50MzJf
dCBtX2J1dHRvblN0YXRlOworICAgIGludCBldmVudE51bWJlciB7IDAgfTsKKyNlbmRpZgorI2lm
IFBMQVRGT1JNKFdQRSkKKyAgICB1aW50MzJfdCBtX2J1dHRvblN0YXRlIHsgMCB9OwogICAgIFZl
Y3RvcjxzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3Jhdz4gbV90b3VjaEV2ZW50czsKICAg
ICBIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBtX3VwZGF0ZWRUb3VjaEV2ZW50czsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3Zp
ZGVyTW9jay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmNwcAppbmRleCA2ZjkzY2EyNzMwMzBmNTc3NmUzMThmOWU0NTY5MDIyY2VlMTRiOTBkLi5j
NDI1MWIzMDFmYjU1NGM3ZWFlNjAzMTYyNzU5NmY1MGI3OGEyNTlkIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmNwcApAQCAtNjMsOSAr
NjMsOSBAQCBHZW9sb2NhdGlvblByb3ZpZGVyTW9jazo6fkdlb2xvY2F0aW9uUHJvdmlkZXJNb2Nr
KCkKICAgICBXS0dlb2xvY2F0aW9uTWFuYWdlclNldFByb3ZpZGVyKG1fZ2VvbG9jYXRpb25NYW5h
Z2VyLCAwKTsKIH0KIAotdm9pZCBHZW9sb2NhdGlvblByb3ZpZGVyTW9jazo6c2V0UG9zaXRpb24o
ZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wg
cHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVB
Y2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBk
b3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJv
dmlkZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCkKK3ZvaWQgR2VvbG9jYXRpb25Qcm92
aWRlck1vY2s6OnNldFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3Vi
bGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8
ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKQogewotICAgIG1fcG9z
aXRpb24uYWRvcHQoV0tHZW9sb2NhdGlvblBvc2l0aW9uQ3JlYXRlX2MoV2FsbFRpbWU6Om5vdygp
LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1
cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1Nw
ZWVkLCBzcGVlZCwgcHJvdmlkZXNGbG9vckxldmVsLCBmbG9vckxldmVsKSk7CisgICAgbV9wb3Np
dGlvbi5hZG9wdChXS0dlb2xvY2F0aW9uUG9zaXRpb25DcmVhdGVfYyhXYWxsVGltZTo6bm93KCku
c2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCksIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3Vy
YWN5LCBhbHRpdHVkZS5oYXNWYWx1ZSgpLCBhbHRpdHVkZS52YWx1ZU9yKDApLCBhbHRpdHVkZUFj
Y3VyYWN5Lmhhc1ZhbHVlKCksIGFsdGl0dWRlQWNjdXJhY3kudmFsdWVPcigwKSwgaGVhZGluZy5o
YXNWYWx1ZSgpLCBoZWFkaW5nLnZhbHVlT3IoMCksIHNwZWVkLmhhc1ZhbHVlKCksIHNwZWVkLnZh
bHVlT3IoMCksIGZsb29yTGV2ZWwuaGFzVmFsdWUoKSwgZmxvb3JMZXZlbC52YWx1ZU9yKDApKSk7
CiAKICAgICBtX2hhc0Vycm9yID0gZmFsc2U7CiAgICAgbV9lcnJvck1lc3NhZ2UuY2xlYXIoKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1v
Y2suaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaApp
bmRleCAxZWQ0YWRmOWIzOTM5M2EzMzNhYTMyNTEwOTdiOWUzYWE0MmNjMzZiLi45YmY2MzM4NGFl
MjdkYjI4YzVmNTQwNTY4NWI4OGY3NWJlZDdiNTE2IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCkBAIC0zNyw3ICszNyw3IEBAIHB1Ymxp
YzoKICAgICBHZW9sb2NhdGlvblByb3ZpZGVyTW9jayhXS0NvbnRleHRSZWYpOwogICAgIH5HZW9s
b2NhdGlvblByb3ZpZGVyTW9jaygpOwogCi0gICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUgbGF0
aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0Fs
dGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBk
b3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFk
aW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29y
TGV2ZWwsIGRvdWJsZSBmbG9vckxldmVsKTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGRvdWJsZSBs
YXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3Vi
bGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFs
PGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91Ymxl
PiBmbG9vckxldmVsKTsKICAgICB2b2lkIHNldFBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0
cmluZ1JlZiBlcnJvck1lc3NhZ2UpOwogCiAgICAgdm9pZCBzdGFydFVwZGF0aW5nKFdLR2VvbG9j
YXRpb25NYW5hZ2VyUmVmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKaW5kZXgg
NmEwOGFhYTZiNjM5ZjNmNTVjOGM0NmE5NGMyZmU5NWRiNTQ3Zjc4Mi4uYWQ0YTI1YWU1YjA3Yjc1
OGUyZTBhOTFmYWYxYjUyODMwM2ViODQ4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5jcHAKQEAgLTc1LDkgKzc1LDkgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6dXBk
YXRlSXNvbGF0ZWRUcmVlTW9kZSgpCiB9CiAjZW5kaWYKIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewot
ICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgImFjY2Vzc2liaWxpdHlDb250
cm9sbGVyIiwgdGhpcywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9w
ZXJ0eShjb250ZXh0LCAiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCB0aGlzKTsKIH0KIAogSlND
bGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKQEAgLTk2LDE3
ICs5NiwxNyBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2li
aWxpdHlFbmFibGVkKCkKIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQorCiBSZWY8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50KCkKIHsK
LSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7CiAgICAgUGxhdGZvcm1VSUVsZW1lbnQgcm9vdCA9IHN0YXRpY19j
YXN0PFBsYXRmb3JtVUlFbGVtZW50PihXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpKTsK
LQogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUocm9vdCk7CiB9CiAK
IFJlZjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9j
dXNlZEVsZW1lbnQoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBQbGF0Zm9ybVVJRWxlbWVu
dCBmb2N1c2VkRWxlbWVudCA9IHN0YXRpY19jYXN0PFBsYXRmb3JtVUlFbGVtZW50PihXS0FjY2Vz
c2liaWxpdHlGb2N1c2VkT2JqZWN0KHBhZ2UpKTsKICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Y3JlYXRlKGZvY3VzZWRFbGVtZW50KTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuaAppbmRleCA2NmMzNDM4MjJiYmJjNjk1OTliYWY2YTQ3NjYwYTEzODdlZTI1MWIwLi5k
OWMyZjEyNmY4NzFjZTJlZWYwN2IwMDM1ODBmNmRhY2U2YzU0MjM1IDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5oCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PEFjY2Vzc2liaWxpdHlDb250cm9sbGVyPiBjcmVhdGUoKTsKICAgICB+QWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpT
T2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lk
IG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKICAgICB2aXJ0dWFsIEpTQ2xhc3NSZWYg
d3JhcHBlckNsYXNzKCk7CiAgICAgCiAgICAgLy8gRW5oYW5jZWQgYWNjZXNzaWJpbGl0eS4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3Mv
Q29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtCmluZGV4IGI5ZjVl
ZWZmYTQ2NDlmNDE3ZjgyYjE2MTcwOWY0YWJhZTA5OTkxZjIuLjUyZTNlZmE5OTFiOWRkNmMxNzVk
YmI4ZTQxMGU2ZmVjZmFjMzAxMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG0KKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJh
dG9yVGVzdFJ1bm5lci5wbQpAQCAtMjYxLDggKzI2MSw3IEBAICR7aW1wbGVtZW50YXRpb25DbGFz
c05hbWV9KiB0byR7aW1wbGVtZW50YXRpb25DbGFzc05hbWV9KEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKCiAKIEpTQ2xhc3NSZWYgJHtjbGFzc05hbWV9Ojoke2NsYXNzUmVmR2V0dGVyfSgpCiB7Ci0g
ICAgc3RhdGljIEpTQ2xhc3NSZWYganNDbGFzczsKLSAgICBpZiAoIWpzQ2xhc3MpIHsKKyAgICBz
dGF0aWMgY29uc3QgSlNDbGFzc1JlZiBqc0NsYXNzID0gW10gewogICAgICAgICBKU0NsYXNzRGVm
aW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CiAgICAgICAgIGRl
ZmluaXRpb24uY2xhc3NOYW1lID0gIkB7WyR0eXBlLT5uYW1lXX0iOwogICAgICAgICBkZWZpbml0
aW9uLnBhcmVudENsYXNzID0gQHtbJHNlbGYtPl9wYXJlbnRDbGFzc1JlZkdldHRlckV4cHJlc3Np
b24oJGludGVyZmFjZSldfTsKQEAgLTI3NCw4ICsyNzMsOCBAQCBFT0YKICAgICBwdXNoKEBjb250
ZW50cywgIiAgICAgICAgZGVmaW5pdGlvbi5maW5hbGl6ZSA9IGZpbmFsaXplO1xuIikgdW5sZXNz
IF9wYXJlbnRJbnRlcmZhY2UoJGludGVyZmFjZSk7CiAKICAgICBwdXNoKEBjb250ZW50cywgPDxF
T0YpOwotICAgICAgICBqc0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7Ci0gICAg
fQorICAgICAgICByZXR1cm4gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgfSgpOwog
ICAgIHJldHVybiBqc0NsYXNzOwogfQogCkBAIC00NzcsMTAgKzQ3NiwxMSBAQCBzdWIgX3BsYXRm
b3JtVHlwZUNvbnN0cnVjdG9yCiB7CiAgICAgbXkgKCRzZWxmLCAkdHlwZSwgJGFyZ3VtZW50TmFt
ZSkgPSBAXzsKIAotICAgIHJldHVybiAiSlNWYWx1ZVRvTnVsbGFibGVCb29sZWFuKGNvbnRleHQs
ICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHR5cGUtPmlz
TnVsbGFibGU7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsQm9vbChjb250ZXh0LCAkYXJndW1lbnRO
YW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0eXBlLT5pc051bGxhYmxlOwog
ICAgIHJldHVybiAiSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYg
JHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAiJGFyZ3VtZW50TmFtZSIgaWYg
JHR5cGUtPm5hbWUgZXEgIm9iamVjdCI7Ci0gICAgcmV0dXJuICJhZG9wdChKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIpKSIgaWYgJCRzZWxme2NvZGVH
ZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJldHVybiAiY3JlYXRlSlNTdHJp
bmcoY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNT
dHJpbmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gInRvT3B0aW9uYWxEb3VibGUoY29udGV4dCwg
JGFyZ3VtZW50TmFtZSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBl
KCR0eXBlKSAmJiAkdHlwZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVUb051bWJl
cihjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0
b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAidG8iIC4gX2ltcGxlbWVu
dGF0aW9uQ2xhc3NOYW1lKCR0eXBlKSAuICIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiOwogfQpA
QCAtNDk5LDE4ICs0OTksMTYgQEAgc3ViIF9wbGF0Zm9ybVR5cGVWYXJpYWJsZURlY2xhcmF0aW9u
CiAgICAgICAgICJKU1ZhbHVlUmVmIiA9PiAxLAogICAgICk7CiAKLSAgICBteSAkbnVsbFZhbHVl
ID0gIjAiOworICAgIG15ICRudWxsVmFsdWUgPSAibnVsbHB0ciI7CiAgICAgaWYgKCRwbGF0Zm9y
bVR5cGUgZXEgIkpTVmFsdWVSZWYiKSB7CiAgICAgICAgICRudWxsVmFsdWUgPSAiSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCkiOwotICAgIH0gZWxzaWYgKGRlZmluZWQgJG5vblBvaW50ZXJU
eXBlc3skcGxhdGZvcm1UeXBlfSAmJiAkcGxhdGZvcm1UeXBlIG5lICJkb3VibGUiKSB7Ci0gICAg
ICAgICRudWxsVmFsdWUgPSAiJHBsYXRmb3JtVHlwZSgpIjsKKyAgICB9IGVsc2lmIChkZWZpbmVk
ICRub25Qb2ludGVyVHlwZXN7JHBsYXRmb3JtVHlwZX0pIHsKKyAgICAgICAgJG51bGxWYWx1ZSA9
ICR0eXBlLT5pc051bGxhYmxlID8gIldURjo6bnVsbG9wdCIgOiAiJHBsYXRmb3JtVHlwZSgpIjsK
ICAgICB9CiAKLSAgICAkcGxhdGZvcm1UeXBlIC49ICIqIiB1bmxlc3MgZGVmaW5lZCAkbm9uUG9p
bnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9OwotCi0gICAgcmV0dXJuICIkcGxhdGZvcm1UeXBlICR2
YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uICYmICRjb25zdHJ1Y3RvcjsiIGlmICRjb25kaXRpb24g
JiYgJHBsYXRmb3JtVHlwZSBlcSAiYm9vbCI7Ci0gICAgcmV0dXJuICIkcGxhdGZvcm1UeXBlICR2
YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uID8gJGNvbnN0cnVjdG9yIDogJG51bGxWYWx1ZTsiIGlm
ICRjb25kaXRpb247Ci0gICAgcmV0dXJuICIkcGxhdGZvcm1UeXBlICR2YXJpYWJsZU5hbWUgPSAk
Y29uc3RydWN0b3I7IjsKKyAgICByZXR1cm4gImJvb2wgJHZhcmlhYmxlTmFtZSA9ICRjb25kaXRp
b24gJiYgJGNvbnN0cnVjdG9yOyIgaWYgJGNvbmRpdGlvbiAmJiAkcGxhdGZvcm1UeXBlIGVxICJi
b29sIjsKKyAgICByZXR1cm4gImF1dG8gJHZhcmlhYmxlTmFtZSA9ICRjb25kaXRpb24gPyAkY29u
c3RydWN0b3IgOiAkbnVsbFZhbHVlOyIgaWYgJGNvbmRpdGlvbjsKKyAgICByZXR1cm4gImF1dG8g
JHZhcmlhYmxlTmFtZSA9ICRjb25zdHJ1Y3RvcjsiOwogfQogCiBzdWIgX3JldHVybkV4cHJlc3Np
b24KQEAgLTUxOCwxMSArNTE2LDExIEBAIHN1YiBfcmV0dXJuRXhwcmVzc2lvbgogICAgIG15ICgk
c2VsZiwgJHJldHVyblR5cGUsICRleHByZXNzaW9uKSA9IEBfOwogCiAgICAgcmV0dXJuICJKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgInVuZGVm
aW5lZCI7Ci0gICAgcmV0dXJuICJKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoY29udGV4dCwgJHtl
eHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJu
VHlwZS0+aXNOdWxsYWJsZTsKKyAgICByZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJl
c3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICRyZXR1cm5UeXBl
LT5pc051bGxhYmxlOwogICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsICR7
ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0
dXJuICIke2V4cHJlc3Npb259IiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKICAg
ICByZXR1cm4gIkpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0pIiBpZiAk
JHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJpbWl0aXZlVHlwZSgkcmV0dXJuVHlwZSk7Ci0gICAg
cmV0dXJuICJKU1ZhbHVlTWFrZVN0cmluZ09yTnVsbChjb250ZXh0LCAke2V4cHJlc3Npb259Lmdl
dCgpKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUp
OworICAgIHJldHVybiAibWFrZVZhbHVlKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0uZ2V0KCkpIiBp
ZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkcmV0dXJuVHlwZSk7CiAgICAg
cmV0dXJuICJ0b0pTKGNvbnRleHQsIFdURjo6Z2V0UHRyKCR7ZXhwcmVzc2lvbn0pKSI7CiB9CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGlu
Z3MvVGVzdFJ1bm5lci5pZGwgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCmluZGV4IGZiZWYzOTZmNWY2ZjNiZmY0Zjk5YzhhNTZh
NmU2MmFjMDE0MGZmYTQuLmYzN2UwMDY3NzViOGUzMDYxYzdjZWM4ZjliNWVmNzg4NjE4MDkxMGEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGlu
Z3MvVGVzdFJ1bm5lci5pZGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbApAQCAtMjE1LDcgKzIxNSw3IEBAIGludGVyZmFj
ZSBUZXN0UnVubmVyIHsKIAogICAgIC8vIEdlb2xvY2F0aW9uCiAgICAgdW5kZWZpbmVkIHNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbihib29sZWFuIHZhbHVlKTsKLSAgICB1bmRlZmluZWQgc2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBk
b3VibGUgYWNjdXJhY3ksIG9wdGlvbmFsIG9iamVjdCBhbHRpdHVkZSwgb3B0aW9uYWwgb2JqZWN0
IGFsdGl0dWRlQWNjdXJhY3ksIG9wdGlvbmFsIG9iamVjdCBoZWFkaW5nLCBvcHRpb25hbCBvYmpl
Y3Qgc3BlZWQsIG9wdGlvbmFsIG9iamVjdCBmbG9vckxldmVsKTsKKyAgICB1bmRlZmluZWQgc2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRl
LCBkb3VibGUgYWNjdXJhY3ksIG9wdGlvbmFsIGRvdWJsZT8gYWx0aXR1ZGUsIG9wdGlvbmFsIGRv
dWJsZT8gYWx0aXR1ZGVBY2N1cmFjeSwgb3B0aW9uYWwgZG91YmxlPyBoZWFkaW5nLCBvcHRpb25h
bCBkb3VibGU/IHNwZWVkLCBvcHRpb25hbCBkb3VibGU/IGZsb29yTGV2ZWwpOwogICAgIHVuZGVm
aW5lZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoRE9NU3RyaW5n
IGVycm9yTWVzc2FnZSk7CiAgICAgYm9vbGVhbiBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUo
KTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9F
dmVudFNlbmRpbmdDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKaW5kZXggNTUzZmQwNWVmMTY5ZjM1
MjNhMDQzMWYxMzE3NDJmYmMyMjE3MDQwOS4uNDQyN2YwODkyNjAxNmFhMzQ4Mzk3MjJjNzFiYzNh
MDYxMmRkMjdlOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCkBAIC0yNiwxMCAr
MjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFdmVudFNlbmRpbmdDb250
cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAi
SW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKICNpbmNs
dWRlICJKU0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlv
bnMuaCIKICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tC
dW5kbGVGcmFtZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0J1bmRsZVBhZ2VQcml2YXRlLmg+CkBA
IC01Miw2ICs1Miw3IEBAIHN0cnVjdCBNZW51SXRlbVByaXZhdGVEYXRhIHsKIH07CiAKICNpZiBF
TkFCTEUoQ09OVEVYVF9NRU5VUykKKwogc3RhdGljIEpTVmFsdWVSZWYgbWVudUl0ZW1DbGlja0Nh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqKQogewogICAg
IE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRhID0gc3RhdGljX2Nhc3Q8TWVudUl0ZW1Q
cml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CkBAIC02Miw3ICs2
Myw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG1lbnVJdGVtQ2xpY2tDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqCiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRNZW51
SXRlbVRpdGxlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVj
dCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAg
ICAgTWVudUl0ZW1Qcml2YXRlRGF0YSogcHJpdmF0ZURhdGEgPSBzdGF0aWNfY2FzdDxNZW51SXRl
bVByaXZhdGVEYXRhKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB3a1RpdGxlID0gYWRvcHRXSyhXS0NvbnRleHRNZW51SXRlbUNvcHlU
aXRsZShwcml2YXRlRGF0YS0+bV9pdGVtLmdldCgpKSk7CisgICAgYXV0byB3a1RpdGxlID0gYWRv
cHRXSyhXS0NvbnRleHRNZW51SXRlbUNvcHlUaXRsZShwcml2YXRlRGF0YS0+bV9pdGVtLmdldCgp
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIHRvSlMod2tUaXRsZSku
Z2V0KCkpOwogfQogCkBAIC03MywxOCArNzQsMTcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0TWVu
dUl0ZW1DaGlsZHJlbkNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZgog
ICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRhID0gc3RhdGljX2Nhc3Q8TWVudUl0
ZW1Qcml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKICAgICBhdXRvIGNo
aWxkcmVuID0gYWRvcHRXSyhXS0NvbnRleHRNZW51Q29weVN1Ym1lbnVJdGVtcyhwcml2YXRlRGF0
YS0+bV9pdGVtLmdldCgpKSk7CiAKLSAgICBKU1ZhbHVlUmVmIGFycmF5UmVzdWx0ID0gSlNPYmpl
Y3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7CisgICAgYXV0byBhcnJheSA9IEpTT2JqZWN0
TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwogICAgIGlmICghV0tBcnJheUdldFNpemUoY2hp
bGRyZW4uZ2V0KCkpKQotICAgICAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgICAgIHJldHVy
biBhcnJheTsKIAotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdL
QXJyYXlHZXRTaXplKGNoaWxkcmVuLmdldCgpKTsgKytpKSB7CiAgICAgICAgIGF1dG8gaXRlbSA9
IHN0YXRpY19jYXN0PFdLQ29udGV4dE1lbnVJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgo
Y2hpbGRyZW4uZ2V0KCksIGkpKTsKICAgICAgICAgYXV0byogcHJpdmF0ZURhdGEgPSBuZXcgTWVu
dUl0ZW1Qcml2YXRlRGF0YShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIGl0ZW0pOwotICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBh
cnJheU9iamVjdCwgaSwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwg
cHJpdmF0ZURhdGEpLCAwKTsKKyAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29u
dGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCks
IHByaXZhdGVEYXRhKSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAg
IHJldHVybiBhcnJheTsKIH0KIAogc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljTWVudUl0
ZW1GdW5jdGlvbnNbXSA9IHsKQEAgLTEyNiw2ICsxMjYsNyBAQCBzdGF0aWMgSlNDbGFzc1JlZiBn
ZXRNZW51SXRlbUNsYXNzKCkKIAogICAgIHJldHVybiBtZW51SXRlbUNsYXNzOwogfQorCiAjZW5k
aWYKIAogc3RhdGljIFdLRXZlbnRNb2RpZmllcnMgcGFyc2VNb2RpZmllcihKU1N0cmluZ1JlZiBt
b2RpZmllcikKQEAgLTE1MCwyNSArMTUxLDMxIEBAIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBh
cnNlTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0
YXRpYyB1bnNpZ25lZCBhcnJheUxlbmd0aChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgYXJyYXkpCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKworc3RhdGljIHVpbnQ2NF90IHBh
cnNlVG91Y2hNb2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllcikKIHsKLSAgICBhdXRvIGxlbmd0
aFN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7
Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4
dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgMCk7Ci0gICAgaWYgKCFsZW5ndGhWYWx1ZSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKKyAgICBpZiAoSlNTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImN0cmwiKSkKKyAgICAgICAgcmV0dXJuIGtX
S0V2ZW50TW9kaWZpZXJzQ29udHJvbEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtb2RpZmllciwgInNoaWZ0IikpCisgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlm
aWVyc1NoaWZ0S2V5OworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1vZGlm
aWVyLCAiYWx0IikpCisgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVyc0FsdEtleTsKKyAg
ICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgIm1ldGFLZXkiKSkK
KyAgICAgICAgcmV0dXJuIGtXS0V2ZW50TW9kaWZpZXJzTWV0YUtleTsKKyAgICByZXR1cm4gMDsK
IH0KIAorI2VuZGlmCisKIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXJBcnJh
eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhcnJheVZhbHVlKQogewogICAgIGlm
ICghYXJyYXlWYWx1ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBUaGUgdmFsdWUgbWF5
IGVpdGhlciBiZSBhIHN0cmluZyB3aXRoIGEgc2luZ2xlIG1vZGlmaWVyIG9yIGFuIGFycmF5IG9m
IG1vZGlmaWVycy4KLSAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUp
KSB7Ci0gICAgICAgIGF1dG8gc3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBhcnJheVZhbHVlLCAwKSk7Ci0gICAgICAgIHJldHVybiBwYXJzZU1vZGlmaWVyKHN0cmlu
Zy5nZXQoKSk7Ci0gICAgfQorICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgYXJyYXlW
YWx1ZSkpCisgICAgICAgIHJldHVybiBwYXJzZU1vZGlmaWVyKGNyZWF0ZUpTU3RyaW5nKGNvbnRl
eHQsIGFycmF5VmFsdWUpLmdldCgpKTsKIAogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRl
eHQsIGFycmF5VmFsdWUpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE3NiwyOSArMTgzLDIwIEBA
IHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXJBcnJheShKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiBhcnJhCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5n
dGgoY29udGV4dCwgYXJyYXkpOwogICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gMDsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksICZleGNlcHRpb24pOwotICAg
ICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8g
c3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgJmV4Y2Vw
dGlvbikpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIG1vZGlmaWVycyB8PSBwYXJzZU1vZGlmaWVyKHN0cmluZy5nZXQoKSk7CisgICAgICAg
IGlmIChhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJy
YXksIGksIG51bGxwdHIpKQorICAgICAgICAgICAgbW9kaWZpZXJzIHw9IHBhcnNlTW9kaWZpZXIo
Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJu
IG1vZGlmaWVyczsKIH0KIAotUmVmPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+IEV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcik7Ci19Ci0KLUV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OkV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXIoKQorc3RhdGljIFdLRXZlbnRNb2RpZmllcnMgcGFyc2VNb2RpZmllckFy
cmF5KEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKKyAgICByZXR1cm4gcGFyc2VNb2RpZmllckFy
cmF5KFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSksIGFycmF5
VmFsdWUpOwogfQogCi1FdmVudFNlbmRpbmdDb250cm9sbGVyOjp+RXZlbnRTZW5kaW5nQ29udHJv
bGxlcigpCitSZWY8RXZlbnRTZW5kaW5nQ29udHJvbGxlcj4gRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6Y3JlYXRlKCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFdmVudFNlbmRpbmdDb250
cm9sbGVyKTsKIH0KIAogSlNDbGFzc1JlZiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp3cmFwcGVy
Q2xhc3MoKQpAQCAtMjA2LDIzNyArMjA0LDExNiBAQCBKU0NsYXNzUmVmIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIEpTRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6ZXZlbnRTZW5kaW5nQ29udHJvbGxlckNsYXNzKCk7CiB9CiAKLWVudW0gTW91c2VTdGF0
ZSB7Ci0gICAgTW91c2VVcCwKLSAgICBNb3VzZURvd24KLX07CitlbnVtIE1vdXNlU3RhdGUgeyBN
b3VzZVVwLCBNb3VzZURvd24gfTsKIAotc3RhdGljIFdLTXV0YWJsZURpY3Rpb25hcnlSZWYgY3Jl
YXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVN0YXRlIHN0YXRlLCBpbnQgYnV0dG9uLCBXS0V2ZW50
TW9kaWZpZXJzIG1vZGlmaWVycykKK3N0YXRpYyBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+
IGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VTdGF0ZSBzdGF0ZSwgaW50IGJ1dHRvbiwgV0tF
dmVudE1vZGlmaWVycyBtb2RpZmllcnMpCiB7Ci0gICAgV0tNdXRhYmxlRGljdGlvbmFyeVJlZiBF
dmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoc3RhdGUgPT0gTW91c2VVcCA/ICJNb3VzZVVwIiA6ICJNb3VzZURvd24iKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LCBzdWJNZXNz
YWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gYnV0dG9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQnV0dG9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBidXR0b25SZWYg
PSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgYnV0dG9uS2V5LmdldCgpLCBidXR0b25SZWYuZ2V0
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJzUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShtb2RpZmllcnMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHksIG1vZGlmaWVyc0tleS5nZXQoKSwgbW9kaWZpZXJzUmVmLmdldCgpKTsKLQotICAgIHJl
dHVybiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2Fn
ZSIsIHN0YXRlID09IE1vdXNlVXAgPyAiTW91c2VVcCIgOiAiTW91c2VEb3duIik7CisgICAgc2V0
VmFsdWUoYm9keSwgIkJ1dHRvbiIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uKSkuZ2V0
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJNb2RpZmllcnMiLCBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKG1vZGlmaWVycykpLmdldCgpKTsKKyAgICByZXR1cm4gYm9keTsKIH0KIAogdm9pZCBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZURvd24oaW50IGJ1dHRvbiwgSlNWYWx1ZVJlZiBtb2Rp
ZmllckFycmF5KSAKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IGluamVjdGVkQnVuZGxl
LnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRs
ZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwotICAgIFdLRXZlbnRNb2RpZmllcnMg
bW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNvbnRleHQsIG1vZGlmaWVyQXJyYXkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBt
b2RpZmllcnMpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKHBhZ2UsIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIDApOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VEb3duLCBidXR0b24sIHBhcnNl
TW9kaWZpZXJBcnJheShtb2RpZmllckFycmF5KSkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6Om1vdXNlVXAoaW50IGJ1dHRvbiwgSlNWYWx1ZVJlZiBtb2RpZmllckFy
cmF5KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwotICAgIFdLRXZlbnRNb2Rp
ZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNvbnRleHQsIG1vZGlmaWVyQXJy
YXkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIp
KTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlVXAsIGJ1dHRv
biwgbW9kaWZpZXJzKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IDApOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0
ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBwYXJzZU1vZGlmaWVyQXJyYXkobW9k
aWZpZXJBcnJheSkpLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
b3VzZU1vdmVUbyhpbnQgeCwgaW50IHkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlTW92ZVRvIikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtl
eS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikp
OwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNy
ZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KKyAgICBhdXRvIGJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1
Yk1lc3NhZ2UiLCAiTW91c2VNb3ZlVG8iKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIGFkb3B0
V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIsIGFk
b3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKICAgICBtX3Bvc2l0aW9uID0gV0tQb2lu
dE1ha2UoeCwgeSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5
LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlQ2xp
Y2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJNb3VzZUZvcmNlQ2xpY2siKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNz
YWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZUZvcmNlQ2xpY2siKTsK
KyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgp
KTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzdGFydEFuZENhbmNlbE1vdXNl
Rm9yY2VDbGljaygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVu
dFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlN0YXJ0QW5kQ2FuY2VsTW91c2VGb3JjZUNsaWNrIikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0
YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2Ui
LCAiU3RhcnRBbmRDYW5jZWxNb3VzZUZvcmNlQ2xpY2siKTsKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlRG93bigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFi
bGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1
Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJN
ZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlRm9yY2VEb3duIikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
c3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1l
c3NhZ2UiLCAiTW91c2VGb3JjZURvd24iKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250
cm9sbGVyOjptb3VzZUZvcmNlVXAoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlVXAiKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5
LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3Vz
ZUZvcmNlVXAiKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIi
LCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZv
cmNlQ2hhbmdlZChkb3VibGUgZm9yY2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlRm9yY2VDaGFuZ2VkIikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGZvcmNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRm9yY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGZvcmNlUmVmID0g
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShmb3JjZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgZm9yY2VLZXkuZ2V0KCksIGZvcmNlUmVmLmdl
dCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAg
YXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNl
dFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIk1vdXNlRm9yY2VDaGFuZ2VkIik7CisgICAgc2V0
VmFsdWUoYm9keSwgIkZvcmNlIiwgZm9yY2UpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxlYXBGb3J3YXJk
IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJUaW1lSW5NaWxsaXNlY29uZHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IHRpbWVSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1pbGxpc2Vjb25kcykp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
dGltZUtleS5nZXQoKSwgdGltZVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJMZWFw
Rm9yd2FyZCIpOworICAgIHNldFZhbHVlKGJvZHksICJUaW1lSW5NaWxsaXNlY29uZHMiLCBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKG1pbGxpc2Vjb25kcykpLmdldCgpKTsKKyAgICBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBF
dmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNrKCkKIHsKLSAg
ICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IDA7Ci0gICAgaW50IGJ1dHRvbiA9IDA7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotCi0g
ICAgLy8gQXN5bmNocm9ub3VzIG1vdXNlIGRvd24uCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxl
RGljdGlvbmFyeVJlZj4gbW91c2VEb3duTWVzc2FnZUJvZHkgPSBhZG9wdFdLKGNyZWF0ZU1vdXNl
TWVzc2FnZUJvZHkoTW91c2VEb3duLCBidXR0b24sIG1vZGlmaWVycykpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgbW91c2VEb3duTWVzc2FnZUJvZHkuZ2V0
KCkpOwotCi0gICAgLy8gQXN5bmNocm9ub3VzIG1vdXNlIHVwLgotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IG1vdXNlVXBNZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRl
TW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBidXR0b24sIG1vZGlmaWVycykpOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgbW91c2VVcE1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlTW91c2VNZXNz
YWdlQm9keShNb3VzZURvd24sIDAsIDApLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkV2
ZW50U2VuZGVyIiwgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCAwLCAwKS5nZXQoKSk7
CiB9CiAKIHN0YXRpYyBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBjcmVhdGVL
ZXlEb3duTWVzc2FnZUJvZHkoSlNTdHJpbmdSZWYga2V5LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlm
aWVycywgaW50IGxvY2F0aW9uKQogewotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5RG93biIpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0
KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBrZXlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJLZXkiKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBr
ZXlLZXkuZ2V0KCksIHRvV0soa2V5KS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiTW9kaWZpZXJzIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtb2RpZmllcnNS
ZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgbW9kaWZpZXJzS2V5LmdldCgp
LCBtb2RpZmllcnNSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxv
Y2F0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTG9jYXRp
b24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGxvY2F0aW9uUmVmID0gYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShsb2NhdGlvbikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgbG9jYXRpb25LZXkuZ2V0KCksIGxvY2F0aW9uUmVm
LmdldCgpKTsKLQotICAgIHJldHVybiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5OworICAgIGF1dG8g
Ym9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiU3ViTWVzc2FnZSIsICJLZXlEb3duIik7CisgICAgc2V0VmFsdWUoYm9keSwgIktl
eSIsIHRvV0soa2V5KS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIk1vZGlmaWVycyIsIGFk
b3B0V0soV0tVSW50NjRDcmVhdGUobW9kaWZpZXJzKSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJv
ZHksICJMb2NhdGlvbiIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobG9jYXRpb24pKS5nZXQoKSk7
CisgICAgcmV0dXJuIGJvZHk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6a2V5
RG93bihKU1N0cmluZ1JlZiBrZXksIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSwgaW50IGxvY2F0
aW9uKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwotICAgIFdLRXZlbnRNb2Rp
ZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNvbnRleHQsIG1vZGlmaWVyQXJy
YXkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIp
KTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBrZXlEb3duTWVzc2Fn
ZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoa2V5LCBtb2RpZmllcnMsIGxvY2F0aW9u
KTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZS5nZXQoKSwga2V5RG93bk1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVhdGVLZXlEb3duTWVzc2FnZUJv
ZHkoa2V5LCBwYXJzZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJheSksIGxvY2F0aW9uKS5nZXQo
KSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25v
dXNLZXlEb3duKEpTU3RyaW5nUmVmIGtleSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rp
b25hcnlSZWY+IGtleURvd25NZXNzYWdlQm9keSA9IGNyZWF0ZUtleURvd25NZXNzYWdlQm9keShr
ZXksIDAgLyogbW9kaWZpZXJzICovLCAwIC8qIGxvY2F0aW9uICovKTsKLQotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwga2V5RG93bk1lc3NhZ2VCb2R5LmdldCgp
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlS2V5RG93bk1lc3Nh
Z2VCb2R5KGtleSwgMCwgMCkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6Om1vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxl
RGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVz
c2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZVNjcm9sbEJ5IikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3Vi
TWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0gYWRvcHRXSyhX
S0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KICAgICBXS0J1bmRs
ZVBhZ2VGb3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpKTsgLy8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcgdHJlZSBjb21taXQuCi0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZVNjcm9sbEJ5Iik7
CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKS5nZXQo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwog
fQogCiBzdGF0aWMgdWludDY0X3QgY2dFdmVudFBoYXNlRnJvbVN0cmluZyhKU1N0cmluZ1JlZiBw
aGFzZVN0cikKQEAgLTQ3NSw5MCArMzUyLDU4IEBAIHN0YXRpYyB1aW50NjRfdCBjZ0V2ZW50TW9t
ZW50dW1QaGFzZUZyb21TdHJpbmcoSlNTdHJpbmdSZWYgcGhhc2VTdHIpCiAKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2Vz
KGludCB4LCBpbnQgeSwgSlNTdHJpbmdSZWYgcGhhc2VTdHIsIEpTU3RyaW5nUmVmIG1vbWVudHVt
U3RyKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLSAgICAK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiTW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzIikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
c3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotICAgIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFk
b3B0V0soV0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0gICAgCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB5UmVm
ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQog
ICAgIHVpbnQ2NF90IHBoYXNlID0gY2dFdmVudFBoYXNlRnJvbVN0cmluZyhwaGFzZVN0cik7CiAg
ICAgdWludDY0X3QgbW9tZW50dW0gPSBjZ0V2ZW50TW9tZW50dW1QaGFzZUZyb21TdHJpbmcobW9t
ZW50dW1TdHIpOwotICAgIAorCiAgICAgaWYgKHBoYXNlID09IDQgLyoga0NHU2Nyb2xsUGhhc2VF
bmRlZCAqLyB8fCBwaGFzZSA9PSA4IC8qIGtDR1Njcm9sbFBoYXNlQ2FuY2VsbGVkICovKQogICAg
ICAgICBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgPSB0cnVlOwotICAgIAogICAgIGlmICht
b21lbnR1bSA9PSAzIC8qIGtDR01vbWVudHVtU2Nyb2xsUGhhc2VFbmQgKi8pCiAgICAgICAgIG1f
c2VudFdoZWVsTW9tZW50dW1QaGFzZUVuZCA9IHRydWU7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gcGhhc2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJQaGFzZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcGhhc2VSZWYgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKHBoYXNlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwaGFzZUtleS5nZXQoKSwgcGhhc2VSZWYuZ2V0KCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vbWVudHVtS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9tZW50dW0iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tVSW50NjRSZWY+IG1vbWVudHVtUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb21l
bnR1bSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgbW9tZW50dW1LZXkuZ2V0KCksIG1vbWVudHVtUmVmLmdldCgpKTsKLQogICAgIFdLQnVu
ZGxlUGFnZUZvcmNlUmVwYWludChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCkpOyAvLyBUcmlnZ2VycyBhIHNjcm9sbGluZyB0cmVlIGNvbW1pdC4KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCkpOworCisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIk1vdXNlU2Nyb2xsQnlX
aXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIpOworICAgIHNldFZhbHVlKGJvZHksICJYIiwgYWRv
cHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwg
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJQ
aGFzZSIsIHBoYXNlKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTW9tZW50dW0iLCBtb21lbnR1bSk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KGludCB4
LCBpbnQgeSwgYm9vbCBwYWdlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZl
bnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ29udGludW91c01vdXNlU2Nyb2xsQnkiKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJN
ZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHhSZWYgPSBhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB5UmVmID0gYWRvcHRXSyhX
S0RvdWJsZUNyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBwYWdlZEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlBhZ2VkIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBwYWdlZFJl
ZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUocGFnZWQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHBhZ2VkS2V5LmdldCgpLCBwYWdlZFJl
Zi5nZXQoKSk7Ci0KKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiQ29udGludW91c01v
dXNlU2Nyb2xsQnkiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIGFkb3B0V0soV0tEb3VibGVD
cmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIsIGFkb3B0V0soV0tEb3Vi
bGVDcmVhdGUoeSkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUGFnZWQiLCBwYWdlZCk7
CiAgICAgLy8gRklYTUU6IFRoaXMgbWVzc2FnZSBzaG91bGQgYmUgYXN5bmNocm9ub3VzLCBhcyBz
Y3JvbGxpbmcgaXMgaW50cmluc2ljYWxseSBhc3luY2hyb25vdXMuCiAgICAgLy8gU2VlIGFsc286
IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MjU2Pi4KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0
KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiBKU1ZhbHVlUmVm
IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRleHRDbGljaygpCiB7Ci0gICAgV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7
CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdl
dEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMp
Ci0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gbWVudUVudHJpZXMgPSBhZG9wdFdLKFdLQnVu
ZGxlUGFnZUNvcHlDb250ZXh0TWVudUF0UG9pbnRJbldpbmRvdyhwYWdlLCBtX3Bvc2l0aW9uKSk7
Ci0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQs
IDAsIDAsIDApOworICAgIGF1dG8gbWVudUVudHJpZXMgPSBhZG9wdFdLKFdLQnVuZGxlUGFnZUNv
cHlDb250ZXh0TWVudUF0UG9pbnRJbldpbmRvdyhwYWdlLCBtX3Bvc2l0aW9uKSk7CisgICAgYXV0
byBhcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwogICAgIGlmICgh
bWVudUVudHJpZXMpCi0gICAgICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAgICAgICAgcmV0dXJu
IGFycmF5OwogCi0gICAgSlNPYmplY3RSZWYgYXJyYXlPYmogPSBKU1ZhbHVlVG9PYmplY3QoY29u
dGV4dCwgYXJyYXlSZXN1bHQsIDApOwogICAgIHNpemVfdCBlbnRyaWVzU2l6ZSA9IFdLQXJyYXlH
ZXRTaXplKG1lbnVFbnRyaWVzLmdldCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVu
dHJpZXNTaXplOyArK2kpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKFdLQXJyYXlHZXRJ
dGVtQXRJbmRleChtZW51RW50cmllcy5nZXQoKSwgaSkpID09IFdLQ29udGV4dE1lbnVJdGVtR2V0
VHlwZUlEKCkpOwogCiAgICAgICAgIFdLQ29udGV4dE1lbnVJdGVtUmVmIGl0ZW0gPSBzdGF0aWNf
Y2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KG1lbnVFbnRy
aWVzLmdldCgpLCBpKSk7CiAgICAgICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRh
ID0gbmV3IE1lbnVJdGVtUHJpdmF0ZURhdGEocGFnZSwgaXRlbSk7Ci0gICAgICAgIEpTT2JqZWN0
U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2JqLCBpLCBKU09iamVjdE1ha2UoY29u
dGV4dCwgZ2V0TWVudUl0ZW1DbGFzcygpLCBwcml2YXRlRGF0YSksIDApOworICAgICAgICBKU09i
amVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgSlNPYmplY3RNYWtlKGNv
bnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAwKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgcmV0dXJuIGFycmF5OwogI2Vsc2UKICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAjZW5kaWYKQEAgLTYxNSwyMSArNDYw
LDE0IEBAIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMqIHRvTW9uaXRvcldoZWVsRXZlbnRzT3B0
aW9ucyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWCiAgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3Qo
Y29udGV4dCwgYXJndW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8g
cmVzZXRMYXRjaGluZ1N0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJyZXNldExhdGNoaW5nIikpOwotICAgIGF1dG8gcmVzZXRMYXRjaGluZ1ZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eShjb250ZXh0LCBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnQs
IG51bGxwdHIpLCByZXNldExhdGNoaW5nU3RyaW5nLmdldCgpLCBudWxscHRyKTsKLQotICAgIGJv
b2wgcmVzZXRMYXRjaGluZyA9IHRydWU7Ci0gICAgaWYgKHJlc2V0TGF0Y2hpbmdWYWx1ZSAmJiBK
U1ZhbHVlSXNCb29sZWFuKGNvbnRleHQsIHJlc2V0TGF0Y2hpbmdWYWx1ZSkpCi0gICAgICAgIHJl
c2V0TGF0Y2hpbmcgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHJlc2V0TGF0Y2hpbmdWYWx1
ZSk7Ci0KICAgICBzdGF0aWMgTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyBvcHRpb25zOwotICAg
IG9wdGlvbnMucmVzZXRMYXRjaGluZyA9IHJlc2V0TGF0Y2hpbmc7CisgICAgb3B0aW9ucy5yZXNl
dExhdGNoaW5nID0gYm9vbGVhblByb3BlcnR5KGNvbnRleHQsIChKU09iamVjdFJlZilhcmd1bWVu
dCwgInJlc2V0TGF0Y2hpbmciLCB0cnVlKTsKICAgICByZXR1cm4gJm9wdGlvbnM7CiB9CiAKIHZv
aWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW9uaXRvcldoZWVsRXZlbnRzKE1vbml0b3JXaGVl
bEV2ZW50c09wdGlvbnMqIG9wdGlvbnMpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIAogICAg
IG1fc2VudFdoZWVsUGhhc2VFbmRPckNhbmNlbCA9IGZhbHNlOwogICAgIG1fc2VudFdoZWVsTW9t
ZW50dW1QaGFzZUVuZCA9IGZhbHNlOwpAQCAtNjYzLDcgKzUwMSw3IEBAIHZvaWQgRXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6Y2FsbEFmdGVyU2Nyb2xsaW5nQ29tcGxldGVzKEpTVmFsdWVSZWYgZnVu
Y3Rpb25DYWxsCiAgICAgaWYgKCFmdW5jdGlvbkNhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAK
LSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICAgICAKQEAgLTY4
MywxOTkgKzUyMSwxMDIgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjYWxsQWZ0ZXJT
Y3JvbGxpbmdDb21wbGV0ZXMoSlNWYWx1ZVJlZiBmdW5jdGlvbkNhbGwKIH0KIAogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCisKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6YWRkVG91Y2hQ
b2ludChpbnQgeCwgaW50IHkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50
U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFkZFRvdWNoUG9pbnQiKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5Lmdl
dCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZSh5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkFkZFRv
dWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90
Pih4KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oeSkp
OworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0
KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQo
aW50IGluZGV4LCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVwZGF0ZVRvdWNoUG9pbnQiKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNz
YWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJJbmRleCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5kZXhSZWYgPSBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwgaW5kZXhSZWYuZ2V0
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0
UmVmPiB4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2
NFJlZj4geVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5n
ZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAg
IGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJVcGRhdGVUb3VjaFBvaW50Iik7CisgICAgc2V0
VmFsdWUoYm9keSwgIkluZGV4Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGluZGV4KSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlgiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oeCkpOworICAgIHNldFZh
bHVlKGJvZHksICJZIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHkpKTsKKyAgICBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAotdm9pZCBF
dmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyKGNvbnN0IEpTU3RyaW5nUmVm
ICZtb2RpZmllciwgYm9vbCBlbmFibGUpCit2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNl
dFRvdWNoTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRUb3VjaE1vZGlmaWVyIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0
KCkpOwotCi0gICAgV0tFdmVudE1vZGlmaWVycyBtb2QgPSAwOwotICAgIGlmIChKU1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVyLCAiY3RybCIpKQotICAgICAgICBtb2QgPSBrV0tF
dmVudE1vZGlmaWVyc0NvbnRyb2xLZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobW9kaWZpZXIsICJzaGlmdCIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlmaWVy
c1NoaWZ0S2V5OwotICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVy
LCAiYWx0IikpCi0gICAgICAgIG1vZCA9IGtXS0V2ZW50TW9kaWZpZXJzQWx0S2V5OwotICAgIGlm
IChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVyLCAibWV0YSIpKQotICAgICAg
ICBtb2QgPSBrV0tFdmVudE1vZGlmaWVyc01ldGFLZXk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbW9kaWZpZXJLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJNb2RpZmllciIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJS
ZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgbW9kaWZpZXJLZXkuZ2V0KCksIG1vZGlm
aWVyUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbmFibGVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFbmFibGUiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGVuYWJsZVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoZW5hYmxlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCBlbmFibGVLZXkuZ2V0KCksIGVuYWJsZVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCks
IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3Vi
TWVzc2FnZSIsICJTZXRUb3VjaE1vZGlmaWVyIik7CisgICAgc2V0VmFsdWUoYm9keSwgIk1vZGlm
aWVyIiwgcGFyc2VUb3VjaE1vZGlmaWVyKG1vZGlmaWVyKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
IkVuYWJsZSIsIGVuYWJsZSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50
U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKLQogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVy
OjpzZXRUb3VjaFBvaW50UmFkaXVzKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1
Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
VG91Y2hQb2ludFJhZGl1cyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmFkaXVzWCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1VJbnQ2NFJlZj4geFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUocmFkaXVzWCkpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5n
ZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1kiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHlSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHJh
ZGl1c1kpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiU2V0
VG91Y2hQb2ludFJhZGl1cyIpOworICAgIHNldFZhbHVlKGJvZHksICJSYWRpdXNYIiwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHJhZGl1c1gpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUmFkaXVzWSIs
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYWRpdXNZKSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFn
ZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6dG91Y2hTdGFydCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvdWNoU3RhcnQiKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdl
S2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJU
b3VjaFN0YXJ0Iik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hN
b3ZlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVG91Y2hNb3ZlIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5h
bWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsK
KyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Cisg
ICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiVG91Y2hNb3ZlIik7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZv
aWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hFbmQoKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaEVuZCIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1
Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNz
YWdlIiwgIlRvdWNoRW5kIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50
U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
dG91Y2hDYW5jZWwoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZl
bnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZl
bnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaENhbmNlbCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1
Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlRvdWNoQ2FuY2VsIik7
CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQo
KSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2xlYXJUb3VjaFBvaW50cygp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsK
LSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNsZWFyVG91Y2hQb2ludHMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdl
TmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50
U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDAp
OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJDbGVhclRvdWNoUG9pbnRzIik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7
CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6cmVsZWFzZVRvdWNoUG9pbnQoaW50
IGluZGV4KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5k
ZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJSZWxlYXNlVG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1
Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRl
eEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBpbmRleFJlZiA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoaW5kZXgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIGluZGV4S2V5LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCks
IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3Vi
TWVzc2FnZSIsICJSZWxlYXNlVG91Y2hQb2ludCIpOworICAgIHNldFZhbHVlKGJvZHksICJJbmRl
eCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbmRleCkpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYW5jZWxU
b3VjaFBvaW50IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IGluZGV4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXku
Z2V0KCksIGluZGV4UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkNhbmNlbFRvdWNo
UG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiSW5kZXgiLCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oaW5kZXgpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIi
LCBib2R5LmdldCgpKTsKIH0KKwogI2VuZGlmCiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12b2lk
IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgImV2
ZW50U2VuZGVyIiwgdGhpcywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQ
cm9wZXJ0eShjb250ZXh0LCAiZXZlbnRTZW5kZXIiLCB0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oCmluZGV4IDlhMmFmZDk1OGNjZDcwZWNk
MjFlYzRlM2IzZmVjNGNmN2NjODViYTguLmVhNDM3ZmJkYmUwYzM0ODkwNTdlMzE2MDc1YWRlYTY1
M2FkYjUxMGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oCkBAIC0zMCwyNyArMzAsMjMg
QEAKICNpbmNsdWRlIDxXZWJLaXQvV0tHZW9tZXRyeS5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
IAordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0
eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1N0cmluZyogSlNTdHJpbmdSZWY7Cit0eXBlZGVmIGNvbnN0
IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVlUmVmOworCiBuYW1lc3BhY2UgV1RSIHsKIAog
c3RydWN0IE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMgewotICAgIE1vbml0b3JXaGVlbEV2ZW50
c09wdGlvbnMoYm9vbCByZXNldExhdGNoaW5nID0gdHJ1ZSkKLSAgICAgICAgOiByZXNldExhdGNo
aW5nKHJlc2V0TGF0Y2hpbmcpCi0gICAgeyB9Ci0KICAgICBib29sIHJlc2V0TGF0Y2hpbmcgeyB0
cnVlIH07CiB9OwogCiBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKiB0b01vbml0b3JXaGVlbEV2
ZW50c09wdGlvbnMoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAotY2xhc3MgRXZlbnRTZW5k
aW5nQ29udHJvbGxlciA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CitjbGFzcyBFdmVudFNlbmRpbmdD
b250cm9sbGVyIGZpbmFsIDogcHVibGljIEpTV3JhcHBhYmxlIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfkV2
ZW50U2VuZGluZ0NvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KTsKIAotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBwZXJD
bGFzcygpOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAg
dm9pZCBtb3VzZURvd24oaW50IGJ1dHRvbiwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5KTsKICAg
ICB2b2lkIG1vdXNlVXAoaW50IGJ1dHRvbiwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5KTsKQEAg
LTczLDcgKzY5LDYgQEAgcHVibGljOgogICAgIHZvaWQga2V5RG93bihKU1N0cmluZ1JlZiBrZXks
IEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSwgaW50IGxvY2F0aW9uKTsKICAgICB2b2lkIHNjaGVk
dWxlQXN5bmNocm9ub3VzS2V5RG93bihKU1N0cmluZ1JlZiBrZXkpOwogCi0gICAgLy8gWm9vbSBm
dW5jdGlvbnMuCiAgICAgdm9pZCB0ZXh0Wm9vbUluKCk7CiAgICAgdm9pZCB0ZXh0Wm9vbU91dCgp
OwogICAgIHZvaWQgem9vbVBhZ2VJbigpOwpAQCAtODEsMTAgKzc2LDkgQEAgcHVibGljOgogICAg
IHZvaWQgc2NhbGVQYWdlQnkoZG91YmxlIHNjYWxlLCBkb3VibGUgeCwgZG91YmxlIHkpOwogCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAvLyBUb3VjaCBldmVudHMuCiAgICAgdm9pZCBh
ZGRUb3VjaFBvaW50KGludCB4LCBpbnQgeSk7CiAgICAgdm9pZCB1cGRhdGVUb3VjaFBvaW50KGlu
dCBpbmRleCwgaW50IHgsIGludCB5KTsKLSAgICB2b2lkIHNldFRvdWNoTW9kaWZpZXIoY29uc3Qg
SlNTdHJpbmdSZWYgJm1vZGlmaWVyLCBib29sIGVuYWJsZSk7CisgICAgdm9pZCBzZXRUb3VjaE1v
ZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyLCBib29sIGVuYWJsZSk7CiAgICAgdm9pZCBzZXRU
b3VjaFBvaW50UmFkaXVzKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSk7CiAgICAgdm9pZCB0b3Vj
aFN0YXJ0KCk7CiAgICAgdm9pZCB0b3VjaE1vdmUoKTsKQEAgLTk2LDcgKzkwLDEwIEBAIHB1Ymxp
YzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKTsKKyAg
ICBFdmVudFNlbmRpbmdDb250cm9sbGVyKCkgPSBkZWZhdWx0OworCisgICAgSlNDbGFzc1JlZiB3
cmFwcGVyQ2xhc3MoKSBmaW5hbDsKKwogICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKICAgICBib29s
IG1fc2VudFdoZWVsUGhhc2VFbmRPckNhbmNlbCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3NlbnRX
aGVlbE1vbWVudHVtUGhhc2VFbmQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDkzNThmNGEw
ZGU1YjNkOWJjMzE2YjVlMGFkZmQwNDEyNjY0MjU4ZmYuLmRiNDI1ZTc1ZTgwYjA1NDA4YmRmM2Uz
ZTM2NDc2NTEwOTYzMGQzZmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHAKQEAgLTM3LDE0ICszNyw2IEBAIFJlZjxH
Q0NvbnRyb2xsZXI+IEdDQ29udHJvbGxlcjo6Y3JlYXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBHQ0NvbnRyb2xsZXIpOwogfQogCi1HQ0NvbnRyb2xsZXI6OkdDQ29udHJvbGxlcigpCi17
Ci19Ci0KLUdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcigpCi17Ci19Ci0KIEpTQ2xhc3NSZWYg
R0NDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogewogICAgIHJldHVybiBKU0dDQ29udHJvbGxl
cjo6Z0NDb250cm9sbGVyQ2xhc3MoKTsKQEAgLTY1LDExICs1Nyw5IEBAIHNpemVfdCBHQ0NvbnRy
b2xsZXI6OmdldEpTT2JqZWN0Q291bnQoKQogICAgIHJldHVybiBXS0J1bmRsZUdldEphdmFTY3Jp
cHRPYmplY3RzQ291bnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpKTsKIH0K
IAotLy8gT2JqZWN0IENyZWF0aW9uCi0KLXZvaWQgR0NDb250cm9sbGVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgR0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgIkdDQ29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xv
YmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgIkdDQ29udHJvbGxlciIsIHRoaXMpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0dDQ29udHJvbGxlci5oCmluZGV4IGQzNDljMWNlOTkwZTg3ZDdkZjJmY2I4Yzgy
ODg1YmNhMzA1NzJhMGIuLjM0YWIyNDI1MTM4YzFkNzVmYjI0YTI1MTA3NDM2NzhkODE5ZWRjMjIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250
cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0Nv
bnRyb2xsZXIuaApAQCAtMjYsMjYgKzI2LDI2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkpTV3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0
UmVmOwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgR0NDb250cm9sbGVyIDogcHVibGljIEpT
V3JhcHBhYmxlIHsKK2NsYXNzIEdDQ29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJs
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHQ0NvbnRyb2xsZXI+IGNyZWF0ZSgpOwotICAg
IHZpcnR1YWwgfkdDQ29udHJvbGxlcigpOwotCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pOwogCi0gICAgLy8gSlNXcmFwcGFibGUKLSAgICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBl
ckNsYXNzKCk7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAg
ICB2b2lkIGNvbGxlY3QoKTsKICAgICB2b2lkIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZChib29s
IHdhaXRVbnRpbERvbmUpOwogICAgIHNpemVfdCBnZXRKU09iamVjdENvdW50KCk7CiAKIHByaXZh
dGU6Ci0gICAgR0NDb250cm9sbGVyKCk7CisgICAgR0NDb250cm9sbGVyKCkgPSBkZWZhdWx0Owor
CisgICAgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCA3YWU4MWJiNGI1OTA5NmM1OGM4YjVhMTRjODhj
NGMzM2Y4YzE0NTcxLi43ZjE2MjE1MDc0YTAyOTdmMmE2NzljMTk1NDgzYWQyOTgwOWY4YTIyIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcApAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIkluamVjdGVkQnVu
ZGxlLmgiCiAKICNpbmNsdWRlICJBY3RpdmF0ZUZvbnRzLmgiCisjaW5jbHVkZSAiRGljdGlvbmFy
eUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUGFnZS5oIgotI2luY2x1ZGUg
IlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5k
bGUuaD4KQEAgLTExOCwxOCArMTE4LDEzIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZENyZWF0
ZVBhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiAgICAgaWYgKCFpc01haW5QYWdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5pdGlhbGl6YXRpb24iKSk7
CiAgICAgV0tUeXBlUmVmIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfQkVHSU4KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UobV9i
dW5kbGUsIG1lc3NzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJlc3VsdCk7CisgICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKG1fYnVuZGxlLCB0b1dLKCJJbml0aWFsaXphdGlvbiIp
LmdldCgpLCBudWxscHRyLCAmcmVzdWx0KTsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmVzdWx0KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBpbml0aWFsaXph
dGlvbkRpY3Rpb25hcnkgPSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4ocmVz
dWx0KSk7CisgICAgYXV0byBpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkgPSBhZG9wdFdLKGRpY3Rp
b25hcnlWYWx1ZShyZXN1bHQpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXN1
bWVUZXN0aW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVz
dW1lVGVzdGluZyIpKTsKLSAgICBXS1R5cGVSZWYgcmVzdW1lVGVzdGluZ1ZhbHVlID0gV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkuZ2V0KCksIHJlc3Vt
ZVRlc3RpbmdLZXkuZ2V0KCkpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXN1bWVUZXN0aW5n
VmFsdWUpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICBpZiAoV0tCb29sZWFuR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXN1bWVUZXN0aW5nVmFsdWUpKSkKKyAgICBp
ZiAoYm9vbGVhblZhbHVlKGluaXRpYWxpemF0aW9uRGljdGlvbmFyeS5nZXQoKSwgIlJlc3VtZVRl
c3RpbmciKSkKICAgICAgICAgYmVnaW5UZXN0aW5nKGluaXRpYWxpemF0aW9uRGljdGlvbmFyeS5n
ZXQoKSwgQmVnaW5nVGVzdGluZ01vZGU6OlJlc3VtZSk7CiB9CiAKQEAgLTE3OSwxNiArMTc0LDE5
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlc2V0TG9jYWxTZXR0aW5ncygpCiAgICAgc2V0bG9j
YWxlKExDX0FMTCwgIiIpOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVz
c2FnZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQordm9p
ZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoV0tTdHJpbmdSZWYsIFdLVHlwZVJl
ZikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVycm9yIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5rbm93biIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdl
KG1fYnVuZGxlLCBlcnJvck1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5LmdldCgp
KTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKG1fYnVuZGxlLCB0b1dLKCJFcnJvciIpLmdldCgp
LCB0b1dLKCJVbmtub3duIikuZ2V0KCkpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0
UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlw
ZVJlZiBib2R5KQoreworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIHRvV0sobmFt
ZSkuZ2V0KCksIGJvZHkpOwogfQogCiBzdGF0aWMgdm9pZCBwb3N0R0NUYXNrKHZvaWQqIGNvbnRl
eHQpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSByZWludGVycHJldF9jYXN0PFdLQnVu
ZGxlUGFnZVJlZj4oY29udGV4dCk7CisgICAgYXV0byBwYWdlID0gcmVpbnRlcnByZXRfY2FzdDxX
S0J1bmRsZVBhZ2VSZWY+KGNvbnRleHQpOwogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5yZXBvcnRMaXZlRG9jdW1lbnRzKHBhZ2UpOwogICAgIFdLUmVsZWFzZShwYWdlKTsKIH0KQEAg
LTE5OSw2NyArMTk3LDQ0IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlcG9ydExpdmVEb2N1bWVu
dHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiAgICAgV0tCdW5kbGVSZWxlYXNlTWVtb3J5KG1fYnVu
ZGxlKTsKIAogICAgIGNvbnN0IGJvb2wgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwID0gdHJ1
ZTsKLSAgICBhdXRvIGRvY3VtZW50VVJMcyA9IGFkb3B0V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1l
bnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3Vw
KSk7Ci0gICAgYXV0byBhY2tNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkxpdmVEb2N1bWVudHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3Nh
Z2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGRvY3VtZW50VVJMcy5nZXQoKSk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKHBhZ2UsICJMaXZlRG9jdW1lbnRzIiwgYWRvcHRXSyhXS0J1bmRsZUdl
dExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBleGNsdWRlRG9jdW1lbnRz
SW5QYWdlR3JvdXApKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNz
YWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQogewogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiQmVnaW5UZXN0IikpIHsKICAgICAgICAgQVNTRVJUKG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Rp
Y3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZHVtcFBpeGVsc0tleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBQaXhlbHMiKSk7Ci0gICAgICAg
IG1fZHVtcFBpeGVscyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGR1bXBQ
aXhlbHNLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRp
bWVvdXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lb3V0
IikpOwotICAgICAgICBtX3RpbWVvdXQgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKFdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0aW1lb3V0S2V5LmdldCgpKSkpKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEpTQ29uc29sZUxv
Z0luU3RkRXJyIikpOwotICAgICAgICBtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IFdLQm9v
bGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycktl
eS5nZXQoKSkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2siKSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhY2tNZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJlZ2luVGVzdCIpKTsKLSAgICAgICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGFja01lc3Nh
Z2VCb2R5LmdldCgpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIG1fZHVtcFBpeGVscyA9IGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJEdW1wUGl4ZWxzIik7CisgICAgICAgIG1f
dGltZW91dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoV0tVSW50NjRHZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVGltZW91
dCIpKSkpOworICAgICAgICBtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiKTsKKyAg
ICAgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsICJBY2siLCAiQmVnaW5UZXN0Iik7CiAgICAgICAg
IGJlZ2luVGVzdGluZyhtZXNzYWdlQm9keURpY3Rpb25hcnksIEJlZ2luZ1Rlc3RpbmdNb2RlOjpO
ZXcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZXNldCIpKSB7CiAgICAgICAgIEFTU0VSVChtZXNz
YWdlQm9keSk7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSlNDT3B0aW9ucyIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGpzY09wdGlvbnNTdHJpbmcgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGpzY09wdGlvbnNLZXkuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGpzY09w
dGlvbnNTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4odmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiSlNDT3B0aW9ucyIpKTsKICAgICAgICAgaWYgKGpzY09wdGlvbnNTdHJpbmcp
IHsKICAgICAgICAgICAgIFN0cmluZyBvcHRpb25zID0gdG9XVEZTdHJpbmcoanNjT3B0aW9uc1N0
cmluZyk7CiAgICAgICAgICAgICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9ucy51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgfQotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzaG91bGRHQ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNo
b3VsZEdDIikpOwotICAgICAgICBib29sIHNob3VsZEdDID0gV0tCb29sZWFuR2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgc2hvdWxkR0NLZXkuZ2V0KCkpKSk7CisgICAgICAgIGJvb2wgc2hvdWxk
R0MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU2hvdWxkR0MiKTsKICAg
ICAgICAgaWYgKHNob3VsZEdDKQogICAgICAgICAgICAgV0tCdW5kbGVHYXJiYWdlQ29sbGVjdEph
dmFTY3JpcHRPYmplY3RzKG1fYnVuZGxlKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lT
T0xBVEVEX1RSRUUpCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheElzb2xhdGVk
TW9kZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFjY2Vzc2li
aWxpdHlJc29sYXRlZFRyZWUiKSk7Ci0gICAgICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJl
ZU1vZGUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBheElzb2xhdGVkTW9k
ZUtleS5nZXQoKSkpKTsKKyAgICAgICAgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSA9
IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJBY2Nlc3NpYmlsaXR5SXNvbGF0
ZWRUcmVlIik7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBhbGxvd2VkSG9zdHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJBbGxvd2VkSG9zdHMiKSk7Ci0gICAgICAgIFdLVHlwZVJlZiBhbGxvd2VkSG9zdHNWYWx1
ZSA9IFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhbGxv
d2VkSG9zdHNLZXkuZ2V0KCkpOworICAgICAgICBhdXRvIGFsbG93ZWRIb3N0c1ZhbHVlID0gdmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQWxsb3dlZEhvc3RzIik7CiAgICAgICAgIGlmIChh
bGxvd2VkSG9zdHNWYWx1ZSAmJiBXS0dldFR5cGVJRChhbGxvd2VkSG9zdHNWYWx1ZSkgPT0gV0tB
cnJheUdldFR5cGVJRCgpKSB7CiAgICAgICAgICAgICBtX2FsbG93ZWRIb3N0cy5jbGVhcigpOwot
Ci0gICAgICAgICAgICBXS0FycmF5UmVmIGFsbG93ZWRIb3N0c0FycmF5ID0gc3RhdGljX2Nhc3Q8
V0tBcnJheVJlZj4oYWxsb3dlZEhvc3RzVmFsdWUpOwotICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDAsIHNpemUgPSBXS0FycmF5R2V0U2l6ZShhbGxvd2VkSG9zdHNBcnJheSk7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVt
QXRJbmRleChhbGxvd2VkSG9zdHNBcnJheSwgaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW0g
JiYgV0tHZXRUeXBlSUQoaXRlbSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgbV9hbGxvd2VkSG9zdHMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihpdGVtKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBhcnJh
eSA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KGFsbG93ZWRIb3N0c1ZhbHVlKTsKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gV0tBcnJheUdldFNpemUoYXJyYXkpOyBpIDwg
c2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fYWxsb3dlZEhvc3RzLmFwcGVuZCh0b1dURlN0
cmluZyhXS0FycmF5R2V0SXRlbUF0SW5kZXgoYXJyYXksIGkpKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBtX3N0YXRlID0gSWRsZTsKQEAgLTI3NSw5ICsyNTAsNyBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJp
bmdSZWYgbQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJHZXRMaXZlRG9jdW1lbnRzIikpIHsKICAgICAgICAgY29uc3QgYm9vbCBleGNsdWRlRG9j
dW1lbnRzSW5QYWdlR3JvdXAgPSBmYWxzZTsKLSAgICAgICAgYXV0byBkb2N1bWVudFVSTHMgPSBh
ZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAs
IGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCkpOwotICAgICAgICBhdXRvIGFja01lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGl2ZURvY3VtZW50
cyIpKTsKLSAgICAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5h
bWUuZ2V0KCksIGRvY3VtZW50VVJMcy5nZXQoKSk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgi
TGl2ZURvY3VtZW50cyIsIGFkb3B0V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVu
ZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC00MjgsNyArNDAxLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5n
UmVmIG0KICAgICAgICAgVmVjdG9yPFN0cmluZz4gZG9tYWluczsKICAgICAgICAgZG9tYWlucy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0
SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlbSA9IFdL
QXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5zQXJyYXksIGkpOwogICAgICAgICAgICAgaWYgKGl0
ZW0gJiYgV0tHZXRUeXBlSUQoaXRlbSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSkKICAgICAgICAg
ICAgICAgICBkb21haW5zLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oaXRlbSkpKTsKICAgICAgICAgfQpAQCAtNDQ2LDcgKzQxOSw3IEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0
cmluZ1JlZiBtCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnM7CiAgICAgICAgIGRvbWFp
bnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJh
eUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CisgICAgICAgICAgICBhdXRvIGl0ZW0g
PSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKICAgICAgICAgICAgIGlm
IChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpCiAgICAg
ICAgICAgICAgICAgZG9tYWlucy51bmNoZWNrZWRBcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAgICAgIH0KQEAgLTQ2NywxNyArNDQwLDEwIEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDYWxsVUlTaWRlU2NyaXB0Q2FsbGJhY2siKSkg
ewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHJlc3VsdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlJlc3VsdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNh
bGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxs
YmFja0lEIikpOwotCi0gICAgICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSAodW5zaWduZWQpV0tV
SW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNhbGxiYWNrSURLZXkuZ2V0KCkpKSk7Ci0K
LSAgICAgICAgV0tTdHJpbmdSZWYgcmVzdWx0U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCByZXN1
bHRLZXkuZ2V0KCkpKTsKLSAgICAgICAgYXV0byByZXN1bHRKU1N0cmluZyA9IHRvSlMocmVzdWx0
U3RyaW5nKTsKLQotICAgICAgICBtX3Rlc3RSdW5uZXItPnJ1blVJU2NyaXB0Q2FsbGJhY2soY2Fs
bGJhY2tJRCwgcmVzdWx0SlNTdHJpbmcuZ2V0KCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8g
Y2FsbGJhY2tJRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNhbGxiYWNr
SUQiKTsKKyAgICAgICAgYXV0byByZXN1bHRTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJSZXN1bHQiKTsKKyAgICAgICAgbV90ZXN0UnVubmVyLT5ydW5VSVNjcmlw
dENhbGxiYWNrKGNhbGxiYWNrSUQsIHRvSlMocmVzdWx0U3RyaW5nKS5nZXQoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTQ5OCwyOSArNDY0LDE3IEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmlu
Z1JlZiBtCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQiKSkgewot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMiKSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVudFJlc291
cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24i
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVudFJl
c291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BQcmV2YWxl
bnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25LZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BQcmV2YWxlbnRSZXNv
dXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rp
b25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25Q
cmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUlLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUb3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUlL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVkaWFuU3Vi
UmVzb3VyY2VXaXRob3V0VUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0
b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcDNNZWRpYW5EYXRhUmVjb3Jk
c1JlbW92ZWRXaXRob3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJUb3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJIikpOwotICAgICAgICAK
LSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMgPSAodW5zaWduZWQp
V0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291
cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlv
bktleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRob3V0VXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcFByZXZhbGVudFJlc291cmNl
V2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiA9ICh1bnNpZ25lZClX
S1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRo
VXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uS2V5LmdldCgpKSkpOwotICAg
ICAgICB1bnNpZ25lZCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNv
dXJjZVdpdGhVc2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291
cmNlV2l0aFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9w
M051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJID0gKHVuc2lnbmVkKVdLVUludDY0R2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcDNNZWRpYW5TdWJGcmFtZVdpdGhv
dXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01l
ZGlhblN1YkZyYW1lV2l0aG91dFVJS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3Az
TWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSUtleS5nZXQoKSkp
KTsKLSAgICAgICAgdW5zaWduZWQgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSA9
ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlhblVu
aXF1ZVJlZGlyZWN0c1dpdGhvdXRVSUtleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9w
M01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhv
dXRVSUtleS5nZXQoKSkpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIG51bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXMiKTsKKyAgICAgICAgYXV0byBudW1iZXJPZlByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iKTsK
KyAgICAgICAgYXV0byBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJOdW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byB0b3BQ
cmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rp
b24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BQcmV2YWxlbnRSZXNv
dXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAg
ICAgYXV0byBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdp
dGhVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJN
ZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50
ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNX
aXRoVUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTnVtYmVyT2ZQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFuU3ViRnJh
bWVXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTWVk
aWFuU3ViRnJhbWVXaXRob3V0VUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFuU3ViUmVzb3Vy
Y2VXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTWVk
aWFuU3ViUmVzb3VyY2VXaXRob3V0VUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFuVW5pcXVl
UmVkaXJlY3RzV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
VG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSIpOworICAgICAgICBhdXRvIHRvcDNN
ZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJUb3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJIik7CiAK
ICAgICAgICAgbV90ZXN0UnVubmVyLT5zdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2so
bnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMsIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0
aFVzZXJJbnRlcmFjdGlvbiwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uLCB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2lu
Y2VVc2VySW50ZXJhY3Rpb24sIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVu
dFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiwgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVJLCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUksIHRvcDNNZWRpYW5TdWJSZXNv
dXJjZVdpdGhvdXRVSSwgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwgdG9wM01l
ZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSk7CiAgICAgICAgIHJldHVybjsKQEAgLTU0
MSwzMSArNDk1LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1Bh
Z2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXJyb3IiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVbmtub3duIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UsIGVycm9yTWVzc2FnZU5hbWUuZ2V0KCksIGVycm9yTWVzc2FnZUJvZHkuZ2V0
KCkpOwotfQotCi1ib29sIEluamVjdGVkQnVuZGxlOjpib29sZWFuRm9yS2V5KFdLRGljdGlvbmFy
eVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCi17Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHdrS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhr
ZXkpKTsKLSAgICBXS1R5cGVSZWYgdmFsdWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRp
Y3Rpb25hcnksIHdrS2V5LmdldCgpKTsKLSAgICBpZiAoV0tHZXRUeXBlSUQodmFsdWUpICE9IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKSB7Ci0gICAgICAgIG91dHB1dFRleHQobWFrZVN0cmluZygiQm9v
bGVhbiB2YWx1ZSBmb3Iga2V5Iiwga2V5LCAiIG5vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5XG4iKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZh
bHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4odmFsdWUpKTsKLX0KLQotU3RyaW5nIEluamVj
dGVkQnVuZGxlOjpzdHJpbmdGb3JLZXkoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0
IGNoYXIqIGtleSkKLXsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGtleSkpOwotICAgIFdLU3RyaW5nUmVm
IHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkoZGljdGlvbmFyeSwgd2tLZXkuZ2V0KCkpKTsKLSAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAg
IG91dHB1dFRleHQobWFrZVN0cmluZygiU3RyaW5nIHZhbHVlIGZvciBrZXkiLCBrZXksICIgbm90
IGZvdW5kIGluIGRpY3Rpb25hcnlcbiIpKTsKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci0gICAgfQotICAgIHJldHVybiB0b1dURlN0cmluZyh2YWx1ZSk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJFcnJvciIsICJVbmtub3duIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmJlZ2lu
VGVzdGluZyhXS0RpY3Rpb25hcnlSZWYgc2V0dGluZ3MsIEJlZ2luZ1Rlc3RpbmdNb2RlIHRlc3Rp
bmdNb2RlKQpAQCAtNTk4LDExICs1MjgsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6YmVnaW5U
ZXN0aW5nKFdLRGljdGlvbmFyeVJlZiBzZXR0aW5ncywgQmVnaW5nVGVzdGluZ01vZGUgdGUKICAg
ICBXS0J1bmRsZVNldEFsbG93U3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMUyhtX2J1bmRsZSwgbV9w
YWdlR3JvdXAsIGZhbHNlKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgV0tCdW5k
bGVQYWdlU2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmlndXJhdGlvbihwYWdlKCktPnBhZ2UoKSwg
IWJvb2xlYW5Gb3JLZXkoc2V0dGluZ3MsICJVc2VGbGV4aWJsZVZpZXdwb3J0IikpOworICAgIFdL
QnVuZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24ocGFnZSgpLT5wYWdl
KCksICFib29sZWFuVmFsdWUoc2V0dGluZ3MsICJVc2VGbGV4aWJsZVZpZXdwb3J0IikpOwogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFk
ZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhzdHJpbmdGb3JLZXkoc2V0dGlu
Z3MsICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpKTsKKyAgICBXZWJDb3JlVGVzdFN1
cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyh0b1dURlN0
cmluZyhzdHJpbmdWYWx1ZShzZXR0aW5ncywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVz
IikpKTsKICNlbmRpZgogCiAgICAgbV90ZXN0UnVubmVyLT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVl
KTsKQEAgLTY2MCwyNSArNTkwLDE1IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRvbmUoKQogICAg
IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKICNl
bmRpZgogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRvbmVNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvbmUiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gZG9uZU1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiUGl4ZWxSZXN1bHRJc1BlbmRpbmciKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBwaXhlbFJlc3VsdElzUGVuZGluZyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVN
ZXNzYWdlQm9keS5nZXQoKSwgcGl4ZWxSZXN1bHRJc1BlbmRpbmdLZXkuZ2V0KCksIHBpeGVsUmVz
dWx0SXNQZW5kaW5nLmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CiAKLSAgICBpZiAoIW1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpIHsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVzdWx0S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHQiKSk7Ci0gICAgICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCBwaXhlbFJlc3VsdEtl
eS5nZXQoKSwgbV9waXhlbFJlc3VsdC5nZXQoKSk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHJlcGFpbnRSZWN0c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlJlcGFpbnRSZWN0cyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRv
bmVNZXNzYWdlQm9keS5nZXQoKSwgcmVwYWludFJlY3RzS2V5LmdldCgpLCBtX3JlcGFpbnRSZWN0
cy5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlBpeGVsUmVzdWx0SXNQZW5kaW5nIiwgbV9w
aXhlbFJlc3VsdElzUGVuZGluZyk7CisgICAgaWYgKCFtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKQor
ICAgICAgICBzZXRWYWx1ZShib2R5LCAiUGl4ZWxSZXN1bHQiLCBtX3BpeGVsUmVzdWx0LmdldCgp
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUmVwYWludFJlY3RzIiwgbV9yZXBhaW50UmVjdHMuZ2V0
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJBdWRpb1Jlc3VsdCIsIG1fYXVkaW9SZXN1bHQuZ2V0
KCkpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF1ZGlvUmVzdWx0S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXVkaW9SZXN1bHQiKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIGF1ZGlvUmVzdWx0S2V5
LmdldCgpLCBtX2F1ZGlvUmVzdWx0LmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgZG9uZU1lc3Nh
Z2VOYW1lLmdldCgpLCBkb25lTWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgdG9X
SygiRG9uZSIpLmdldCgpLCBib2R5LmdldCgpKTsKIAogICAgIGNsb3NlT3RoZXJQYWdlcygpOwog
CkBAIC02OTEsOSArNjExLDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6Y2xvc2VPdGhlclBhZ2Vz
KCkKICAgICBzaXplX3Qgc2l6ZSA9IG1fcGFnZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAxOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBwYWdlc1RvQ2xvc2UuYXBwZW5kKG1fcGFnZXNb
aV0tPnBhZ2UoKSk7Ci0gICAgc2l6ZSA9IHBhZ2VzVG9DbG9zZS5zaXplKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFdLQnVuZGxlUGFnZUNsb3NlKHBh
Z2VzVG9DbG9zZVtpXSk7CisgICAgZm9yIChhdXRvJiBwYWdlIDogcGFnZXNUb0Nsb3NlKQorICAg
ICAgICBXS0J1bmRsZVBhZ2VDbG9zZShwYWdlKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6
ZHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWls
ZGVyKQpAQCAtNzA5LDEzICs2MjgsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkdW1wVG9TdGRF
cnIoY29uc3QgU3RyaW5nJiBvdXRwdXQpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAob3V0cHV0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1
bXBUb1N0ZEVyciIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHk7
Ci0gICAgaWYgKGF1dG8gdXRmOCA9IG91dHB1dC50cnlHZXRVdGY4KCkpCi0gICAgICAgIG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1dGY4LT5kYXRh
KCkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiT3V0IG9mIG1lbW9yeVxuIikpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBjb252ZXJ0IHRv
IFVURi04IGluc3RlYWQgb2YgdXNpbmcgdG9XSz8KKyAgICBhdXRvIHN0cmluZyA9IG91dHB1dC50
cnlHZXRVdGY4KCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJEdW1wVG9TdGRFcnIiLCBzdHJpbmcg
PyBzdHJpbmctPmRhdGEoKSA6ICJPdXQgb2YgbWVtb3J5XG4iKTsKIH0KIAogdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6b3V0cHV0VGV4dChjb25zdCBTdHJpbmcmIG91dHB1dCkKQEAgLTcyNCwyODAgKzYz
OSwxNTUgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dChjb25zdCBTdHJpbmcmIG91
dHB1dCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChvdXRwdXQuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGV4dE91dHB1dCIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHk7Ci0gICAgaWYgKGF1dG8gdXRmOCA9
IG91dHB1dC50cnlHZXRVdGY4KCkpCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1dGY4LT5kYXRhKCkpKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
T3V0IG9mIG1lbW9yeVxuIikpOworICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBj
b252ZXJ0IHRvIFVURi04IGluc3RlYWQgb2YgdXNpbmcgdG9XSz8KKyAgICBhdXRvIHN0cmluZyA9
IG91dHB1dC50cnlHZXRVdGY4KCk7CiAgICAgLy8gV2UgdXNlIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZSgpIGluc3RlYWQgb2YgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UoKSB0byBtYWtlIHN1cmUgdGhhdCBhbGwgdGV4dCBvdXRwdXQKICAgICAvLyBp
cyBkb25lIHZpYSBhc3luY2hyb25vdXMgSVBDLCBldmVuIGlmIHRoZSBjb25uZWN0aW9uIGlzIGlu
IGZ1bGx5IHN5bmNocm9ub3VzIG1vZGUgZHVlIHRvIGEgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcoKQogICAgIC8vIGNhbGwuIE90aGVyd2lzZSwgbWVzc2FnZXMg
bG9nZ2VkIHZpYSBzeW5jIGFuZCBhc3luYyBJUEMgbWF5IGVuZCB1cCBvdXQgb2Ygb3JkZXIgYW5k
IGNhdXNlIGZsYWtpbmVzcy4KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVs
bHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5
U3luY2hyb25vdXNNb2RlKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJUZXh0T3V0cHV0IikuZ2V0KCks
IHRvV0soc3RyaW5nID8gc3RyaW5nLT5kYXRhKCkgOiAiT3V0IG9mIG1lbW9yeVxuIikuZ2V0KCkp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFs
dWUoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWZvcmVVbmxvYWRS
ZXR1cm5WYWx1ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkJlZm9yZVVubG9hZFJldHVyblZhbHVlIiwgYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnBvc3RBZGRDaHJvbWVJbnB1dEZpZWxkKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJBZGRDaHJvbWVJbnB1dEZpZWxkIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdl
KHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJBZGRDaHJvbWVJbnB1dEZpZWxkIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBv
c3RSZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJS
ZW1vdmVDaHJvbWVJbnB1dEZpZWxkIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdl
KCJSZW1vdmVDaHJvbWVJbnB1dEZpZWxkIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBv
c3RGb2N1c1dlYlZpZXcoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvY3VzV2ViVmll
dyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRm9jdXNXZWJWaWV3Iik7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91Ymxl
IGJhY2tpbmdTY2FsZUZhY3RvcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRCYWNr
aW5nU2NhbGVGYWN0b3IiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShiYWNraW5nU2NhbGVGYWN0b3IpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEJhY2tpbmdTY2Fs
ZUZhY3RvciIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYmFja2luZ1NjYWxlRmFjdG9yKSkpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0V2luZG93SXNLZXkoYm9vbCBpc0tleSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRXaW5kb3dJc0tleSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaXNLZXkpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhw
YWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0V2luZG93SXNLZXkiKS5nZXQoKSwgYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaXNLZXkpKS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnBvc3RTZXRWaWV3U2l6ZShkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0Vmlld1NpemUiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gd2lkdGhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJ3aWR0aCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVpZ2h0S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJl
Zj4gd2lkdGhXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUod2lkdGgpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB3aWR0aEtleS5nZXQoKSwgd2lkdGhXSy5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gaGVpZ2h0V0sgPSBhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKGhlaWdodCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2Fn
ZUJvZHkuZ2V0KCksIGhlaWdodEtleS5nZXQoKSwgaGVpZ2h0V0suZ2V0KCkpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJv
ZHksICJ3aWR0aCIsIHdpZHRoKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiaGVpZ2h0IiwgaGVpZ2h0
KTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdl
KCktPnBhZ2UoKSwgdG9XSygiU2V0Vmlld1NpemUiKS5nZXQoKSwgYm9keS5nZXQoKSwgMCk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNr
KHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNp
bXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2siKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShub3RpZmljYXRpb25JRCkp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2ltdWxh
dGVXZWJOb3RpZmljYXRpb25DbGljayIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90aWZpY2F0
aW9uSUQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRBZGRzVmlzaXRlZExp
bmtzKGJvb2wgYWRkc1Zpc2l0ZWRMaW5rcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRBZGRzVmlzaXRlZExpbmtzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShhZGRzVmlzaXRlZExpbmtzKSk7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRBZGRzVmlz
aXRlZExpbmtzIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWRkc1Zpc2l0ZWRMaW5rcykpKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIsIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRp
dHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNT
cGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29y
TGV2ZWwpCit2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9u
YWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBP
cHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFs
PGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbiIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rp
b25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxhdGl0dWRlS2V5V0sgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsYXRpdHVkZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RvdWJsZVJlZj4gbGF0aXR1ZGVXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUo
bGF0aXR1ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBs
YXRpdHVkZUtleVdLLmdldCgpLCBsYXRpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBsb25naXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImxvbmdpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4g
bG9uZ2l0dWRlV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGxvbmdpdHVkZSkpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGxvbmdpdHVkZUtleVdLLmdldCgp
LCBsb25naXR1ZGVXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNj
dXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFjY3Vy
YWN5IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBhY2N1cmFjeVdLID0gYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZShhY2N1cmFjeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVz
c2FnZUJvZHkuZ2V0KCksIGFjY3VyYWN5S2V5V0suZ2V0KCksIGFjY3VyYWN5V0suZ2V0KCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1ZGVLZXlXSyA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1ZGUiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc0FsdGl0dWRlV0sgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92aWRlc0FsdGl0dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZUtleVdLLmdldCgpLCBw
cm92aWRlc0FsdGl0dWRlV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGFsdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJh
bHRpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gYWx0aXR1ZGVXSyA9IGFk
b3B0V0soV0tEb3VibGVDcmVhdGUoYWx0aXR1ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KG1lc3NhZ2VCb2R5LmdldCgpLCBhbHRpdHVkZUtleVdLLmdldCgpLCBhbHRpdHVkZVdLLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeVdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5n
ZXQoKSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5S2V5V0suZ2V0KCksIHByb3ZpZGVzQWx0aXR1
ZGVBY2N1cmFjeVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRp
dHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJhbHRpdHVkZUFjY3VyYWN5IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBhbHRp
dHVkZUFjY3VyYWN5V0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGFsdGl0dWRlQWNjdXJhY3kp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhbHRpdHVkZUFj
Y3VyYWN5S2V5V0suZ2V0KCksIGFsdGl0dWRlQWNjdXJhY3lXSy5nZXQoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNIZWFkaW5nS2V5V0sgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0hlYWRpbmciKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc0hlYWRpbmdXSyA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHByb3ZpZGVzSGVhZGluZykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2Fn
ZUJvZHkuZ2V0KCksIHByb3ZpZGVzSGVhZGluZ0tleVdLLmdldCgpLCBwcm92aWRlc0hlYWRpbmdX
Sy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVhZGluZ0tleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVhZGluZyIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RvdWJsZVJlZj4gaGVhZGluZ1dLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0
ZShoZWFkaW5nKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwg
aGVhZGluZ0tleVdLLmdldCgpLCBoZWFkaW5nV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHByb3ZpZGVzU3BlZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoInByb3ZpZGVzU3BlZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBwcm92aWRlc1NwZWVkV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92aWRl
c1NwZWVkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJv
dmlkZXNTcGVlZEtleVdLLmdldCgpLCBwcm92aWRlc1NwZWVkV0suZ2V0KCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJzcGVlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4g
c3BlZWRXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc3BlZWQpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBzcGVlZEtleVdLLmdldCgpLCBzcGVlZFdLLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0Zsb29yTGV2ZWxL
ZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzRmxv
b3JMZXZlbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzRmxvb3JM
ZXZlbFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNGbG9vckxldmVsKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNGbG9vckxl
dmVsS2V5V0suZ2V0KCksIHByb3ZpZGVzRmxvb3JMZXZlbFdLLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBmbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJmbG9vckxldmVsIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91
YmxlUmVmPiBmbG9vckxldmVsV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGZsb29yTGV2ZWwp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBmbG9vckxldmVs
S2V5V0suZ2V0KCksIGZsb29yTGV2ZWxXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgImxhdGl0dWRlIiwgbGF0aXR1ZGUpOworICAgIHNldFZh
bHVlKGJvZHksICJsb25naXR1ZGUiLCBsb25naXR1ZGUpOworICAgIHNldFZhbHVlKGJvZHksICJh
Y2N1cmFjeSIsIGFjY3VyYWN5KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiYWx0aXR1ZGUiLCBhbHRp
dHVkZSk7CisgICAgc2V0VmFsdWUoYm9keSwgImFsdGl0dWRlQWNjdXJhY3kiLCBhbHRpdHVkZUFj
Y3VyYWN5KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiaGVhZGluZyIsIGhlYWRpbmcpOworICAgIHNl
dFZhbHVlKGJvZHksICJzcGVlZCIsIHNwZWVkKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiZmxvb3JM
ZXZlbCIsIGZsb29yTGV2ZWwpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24iLCBib2R5KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2Fn
ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
blVuYXZhaWxhYmxlRXJyb3IiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2UpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yIiwgZXJy
b3JNZXNzYWdlKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZTo6aXNHZW9sb2NhdGlvblByb3Zp
ZGVyQWN0aXZlKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc0dlb2xvY2F0
aW9uQ2xpZW50QWN0aXZlIikpOwotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBpc0FjdGl2ZSA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihyZXN1bHRUb1Bhc3MpKTsKLQotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShpc0Fj
dGl2ZS5nZXQoKSk7CisgICAgV0tUeXBlUmVmIHJlc3VsdCA9IG51bGxwdHI7CisgICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRv
V0soIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKS5nZXQoKSwgMCwgJnJlc3VsdCk7CisgICAg
cmV0dXJuIGJvb2xlYW5WYWx1ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOwogfQogCiB1bnNpZ25l
ZCBJbmplY3RlZEJ1bmRsZTo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSBjb25zdAog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJk
IikpOwotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+
IGltYWdlQ291bnQgPSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXN1bHRUb1Bh
c3MpKTsKLSAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0
VmFsdWUoaW1hZ2VDb3VudC5nZXQoKSkpOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRy
OworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2Uo
KS0+cGFnZSgpLCB0b1dLKCJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCIpLmdldCgpLCAw
LCAmcmVzdWx0KTsKKyAgICByZXR1cm4gdWludDY0VmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdldCgp
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVybWlzc2lvbihib29s
IGVuYWJsZWQpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZXJNZWRpYVBlcm1pc3Npb24iKSk7Ci0gICAgYXV0byBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFVzZXJNZWRpYVBlcm1p
c3Npb24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSkpOwogfQogCiB2b2lkIElu
amVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24oKQogewotICAgIGF1dG8gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXNldFVz
ZXJNZWRpYVBlcm1pc3Npb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJl
c2V0VXNlck1lZGlhUGVybWlzc2lvbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRV
c2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbihib29sIHBlcm1pc3Npb24sIFdL
U3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luKQogewotICAgIGF1dG8g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRV
c2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJt
aXNzaW9uS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwZXJt
aXNzaW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcGVybWlzc2lvbldLID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocGVybWlzc2lvbikpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBlcm1pc3Npb25LZXlXSy5nZXQoKSwgcGVybWlzc2lv
bldLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5nZXQoKSwg
b3JpZ2luKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJlbnRPcmln
aW5LZXlXSy5nZXQoKSwgcGFyZW50T3JpZ2luKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAicGVybWlzc2lvbiIsIHBlcm1pc3Npb24pOworICAgIHNldFZh
bHVlKGJvZHksICJvcmlnaW4iLCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJvZHksICJwYXJlbnRP
cmlnaW4iLCBwYXJlbnRPcmlnaW4pOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0VXNlck1lZGlh
UGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4iLCBib2R5KTsKIH0KIAogdW5zaWduZWQgSW5q
ZWN0ZWRCdW5kbGU6OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oV0tT
dHJpbmdSZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pIGNvbnN0CiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9y
aWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5nZXQoKSwgb3JpZ2luKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJlbnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFyZW50T3Jp
Z2luKTsKLQotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0
YWluUHRyPFdLVUludDY0UmVmPiBjb3VudCA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KHJlc3VsdFRvUGFzcykpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihX
S1VJbnQ2NEdldFZhbHVlKGNvdW50LmdldCgpKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJvcmlnaW4i
LCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJvZHksICJwYXJlbnRPcmlnaW4iLCBwYXJlbnRPcmln
aW4pOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikuZ2V0KCksIGJvZHkuZ2V0KCks
ICZyZXN1bHQpOworICAgIHJldHVybiB1aW50NjRWYWx1ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0Q291bnRGb3JPcmlnaW4oV0tTdHJpbmdSZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBwYXJlbnRP
cmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzZXRVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURp
Y3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleVdLID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIG9yaWdpbktleVdLLmdldCgpLCBvcmln
aW4pOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBhcmVudE9yaWdpbktl
eVdLLmdldCgpLCBwYXJlbnRPcmlnaW4pOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAg
IHNldFZhbHVlKGJvZHksICJvcmlnaW4iLCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJvZHksICJw
YXJlbnRPcmlnaW4iLCBwYXJlbnRPcmlnaW4pOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUmVzZXRV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIiwgYm9keSk7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwg
Ym9vbCBwZXJtaXNzaXZlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEN1c3RvbVBv
bGljeURlbGVnYXRlIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlZEtleVdLID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZW5hYmxlZCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IGVuYWJsZWRXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBlbmFibGVkS2V5
V0suZ2V0KCksIGVuYWJsZWRXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gcGVybWlzc2l2ZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygicGVybWlzc2l2ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBlcm1pc3Np
dmVXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHBlcm1pc3NpdmUpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwZXJtaXNzaXZlS2V5V0suZ2V0KCksIHBl
cm1pc3NpdmVXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRv
IGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgImVuYWJsZWQiLCBlbmFibGVkKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGVybWlz
c2l2ZSIsIHBlcm1pc3NpdmUpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0Q3VzdG9tUG9saWN5
RGVsZWdhdGUiLCBib2R5KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0SGlkZGVuKGJv
b2wgaGlkZGVuKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEhpZGRlbiIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBpc0luaXRpYWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImhpZGRlbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlzSW5pdGlh
bFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGlkZGVuKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgaXNJbml0aWFsS2V5V0suZ2V0KCksIGlzSW5pdGlh
bFdLLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiaGlkZGVuIiwgaGlkZGVuKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEhpZGRlbiIsIGJv
ZHkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRDYWNoZU1vZGVsKGludCBt
b2RlbCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDYWNoZU1vZGVsIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUobW9kZWwpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0Q2FjaGVNb2RlbCIpLmdldCgpLCBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKG1vZGVsKSkuZ2V0KCksIG51bGxwdHIpOwogfQogCiBib29sIElu
amVjdGVkQnVuZGxlOjpzaG91bGRQcm9jZXNzV29ya1F1ZXVlKCkgY29uc3QKQEAgLTEwMDUsMTEw
ICs3OTUsNzMgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1ZSgp
IGNvbnN0CiAgICAgaWYgKCFtX3VzZVdvcmtRdWV1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNXb3JrUXVldWVFbXB0eSIpKTsKLSAgICBXS1R5
cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsICZy
ZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gaXNFbXB0eSA9IGFk
b3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXN1bHRUb1Bhc3MpKTsKKyAgICBXS1R5
cGVSZWYgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiSXNXb3JrUXVldWVFbXB0eSIp
LmdldCgpLCAwLCAmcmVzdWx0KTsKIAogICAgIC8vIFRoZSBJUEMgZmFpbGVkLiBUaGlzIGhhcHBl
bnMgd2hlbiBzd2FwcGluZyBwcm9jZXNzZXMgb24gbmF2aWdhdGlvbiBiZWNhdXNlIHRoZSBXZWJQ
YWdlUHJveHkgdW5yZWdpc3RlcnMgaXRzZWxmCiAgICAgLy8gYXMgYSBNZXNzYWdlUmVjZWl2ZXIg
ZnJvbSB0aGUgb2xkIFdlYlByb2Nlc3NQcm94eSBhbmQgcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhl
IG5ldyBXZWJQcm9jZXNzUHJveHkgaW5zdGVhZC4KLSAgICBpZiAoIWlzRW1wdHkpCisgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiAhV0tCb29sZWFu
R2V0VmFsdWUoaXNFbXB0eS5nZXQoKSk7CisgICAgYXV0byBpc0VtcHR5ID0gYm9vbGVhblZhbHVl
KGFkb3B0V0socmVzdWx0KS5nZXQoKSk7CisgICAgcmV0dXJuICFpc0VtcHR5OwogfQogCiB2b2lk
IEluamVjdGVkQnVuZGxlOjpwcm9jZXNzV29ya1F1ZXVlKCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJQcm9jZXNzV29ya1F1ZXVlIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdl
KHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJQcm9jZXNzV29ya1F1ZXVlIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVl
QmFja05hdmlnYXRpb24odW5zaWduZWQgaG93RmFyQmFja3dhcmQpCiB7CiAgICAgbV91c2VXb3Jr
UXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVCYWNrTmF2aWdh
dGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGhvd0ZhckJhY2t3YXJkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUJhY2tOYXZpZ2F0aW9uIiwgYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShob3dGYXJCYWNrd2FyZCkpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJGb3J3YXJkKQogewog
ICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1
ZXVlRm9yd2FyZE5hdmlnYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJGb3J3YXJkKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUZvcndhcmRO
YXZpZ2F0aW9uIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJGb3J3YXJkKSkpOwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWQoV0tTdHJpbmdSZWYgdXJsLCBXS1N0cmlu
Z1JlZiB0YXJnZXQsIGJvb2wgc2hvdWxkT3BlbkV4dGVybmFsVVJMcykKIHsKICAgICBtX3VzZVdv
cmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZUxvYWQiKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBsb2FkRGF0YSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB1cmxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJ1cmwiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgdXJsS2V5
LmdldCgpLCB1cmwpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRhcmdldEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRhcmdldCIpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCB0YXJnZXRLZXkuZ2V0KCksIHRhcmdl
dCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2hvdWxkT3BlbkV4dGVybmFsVVJM
c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInNob3VsZE9wZW5F
eHRlcm5hbFVSTHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBzaG91bGRPcGVu
RXh0ZXJuYWxVUkxzVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGRPcGVuRXh0
ZXJuYWxVUkxzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgc2hv
dWxkT3BlbkV4dGVybmFsVVJMc0tleS5nZXQoKSwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1ZhbHVl
LmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbG9hZERhdGEuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAidXJs
IiwgdXJsKTsKKyAgICBzZXRWYWx1ZShib2R5LCAidGFyZ2V0IiwgdGFyZ2V0KTsKKyAgICBzZXRW
YWx1ZShib2R5LCAic2hvdWxkT3BlbkV4dGVybmFsVVJMcyIsIHNob3VsZE9wZW5FeHRlcm5hbFVS
THMpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVMb2FkIiwgYm9keS5nZXQoKSk7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoV0tTdHJpbmdSZWYgY29u
dGVudCwgV0tTdHJpbmdSZWYgYmFzZVVSTCwgV0tTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkwpCiB7
CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
UXVldWVMb2FkSFRNTFN0cmluZyIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rp
b25hcnlSZWY+IGxvYWREYXRhID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNvbnRlbnRLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb250ZW50IikpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIGNvbnRlbnRLZXkuZ2V0KCksIGNvbnRlbnQpOwotCi0g
ICAgaWYgKGJhc2VVUkwpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VV
UkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJiYXNlVVJMIikp
OwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCBiYXNlVVJMS2V5
LmdldCgpLCBiYXNlVVJMKTsKLSAgICB9Ci0KLSAgICBpZiAodW5yZWFjaGFibGVVUkwpIHsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidW5yZWFjaGFibGVVUkwiKSk7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIHVucmVhY2hhYmxlVVJMS2V5
LmdldCgpLCB1bnJlYWNoYWJsZVVSTCk7Ci0gICAgfQotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBsb2FkRGF0YS5nZXQoKSk7
CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwor
ICAgIHNldFZhbHVlKGJvZHksICJjb250ZW50IiwgY29udGVudCk7CisgICAgaWYgKGJhc2VVUkwp
CisgICAgICAgIHNldFZhbHVlKGJvZHksICJiYXNlVVJMIiwgYmFzZVVSTCk7CisgICAgaWYgKHVu
cmVhY2hhYmxlVVJMKQorICAgICAgICBzZXRWYWx1ZShib2R5LCAidW5yZWFjaGFibGVVUkwiLCB1
bnJlYWNoYWJsZVVSTCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUxvYWRIVE1MU3RyaW5n
IiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlUmVsb2FkKCkKIHsKICAg
ICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1
ZVJlbG9hZCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVSZWxvYWQi
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVMb2FkaW5nU2NyaXB0KFdLU3RyaW5n
UmVmIHNjcmlwdCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJRdWV1ZUxvYWRpbmdTY3JpcHQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBzY3JpcHQpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiUXVldWVMb2FkaW5nU2NyaXB0Iiwgc2NyaXB0KTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KFdLU3RyaW5nUmVmIHNjcmlw
dCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJRdWV1ZU5vbkxvYWRpbmdTY3JpcHQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3Nh
Z2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBzY3JpcHQpOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiUXVldWVOb25Mb2FkaW5nU2NyaXB0Iiwgc2NyaXB0KTsKIH0KIAogYm9vbCBJ
bmplY3RlZEJ1bmRsZTo6aXNBbGxvd2VkSG9zdChXS1N0cmluZ1JlZiBob3N0KQpAQCAtMTE0Myw0
ICs4OTYsNzIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZygp
CiAgICAgbV90ZXN0UnVubmVyLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nQ2FsbGJhY2soKTsKIH0K
IAordm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUs
IFdLVHlwZVJlZiBib2R5KQoreworICAgIHBvc3RQYWdlTWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bmFtZSwgYm9keSk7Cit9CisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShj
b25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBib2R5KQoreworICAgIHBvc3RQYWdlTWVzc2Fn
ZShuYW1lLCB0b1dLKGJvZHkpKTsKK30KKwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBu
YW1lLCBXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlKTsK
K30KKwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSkK
K3sKKyAgICBwb3N0TWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHZhbHVlKSku
Z2V0KCkpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFt
ZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSkuZ2V0KCks
IHZhbHVlLCBudWxscHRyKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0
IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShu
YW1lLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVpbnQ2NF90IHZhbHVlKQor
eworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0
IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKQoreworICAgIHVpbnQ2NF90IHByb21vdGVkVmFs
dWUgPSB2YWx1ZTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIHByb21vdGVkVmFs
dWUpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwg
ZG91YmxlIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UobmFtZSwgYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0UGFnZU1lc3Nh
Z2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIGlmIChhdXRvIHBh
Z2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpKQorICAgICAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShwYWdlLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlKTsK
K30KKwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkK
K3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoY29uc3Qg
Y2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIGlmIChhdXRvIHBhZ2UgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpKQorICAgICAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0
KCksIHZhbHVlLCBudWxscHRyKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAppbmRleCBiNzYwMTQzNmYwYzY3Mjg1
NjMzYTA4ZTI1Zjk0MmE4YWE5OGQ5NzBiLi43YTRmNWQ2NTlmYzBhYTEwZTI3ZjQ4NTk0NzRiZTFj
NDkyZGQwNDIyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIEdlb2xvY2F0aW9uLgogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wp
OwotICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBk
b3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwg
ZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFs
dGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9v
bCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBk
b3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9u
YWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBP
cHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFs
PGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
blVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKICAgICBib29sIGlz
R2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0OwogCkBAIC0xNjksOCArMTY5LDExIEBA
IHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBCZWdpbmdUZXN0aW5nTW9kZSB7IE5ldywgUmVzdW1l
IH07CiAgICAgdm9pZCBiZWdpblRlc3RpbmcoV0tEaWN0aW9uYXJ5UmVmIGluaXRpYWxTZXR0aW5n
cywgQmVnaW5nVGVzdGluZ01vZGUpOwogCi0gICAgYm9vbCBib29sZWFuRm9yS2V5KFdLRGljdGlv
bmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKLSAgICBTdHJpbmcgc3RyaW5nRm9yS2V5KFdLRGlj
dGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKyAgICBzdGF0aWMgdm9pZCBwb3N0UGFnZU1l
c3NhZ2UoV0tCdW5kbGVQYWdlUmVmLCBjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgYm9keSk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgcG9zdFBhZ2VNZXNzYWdlKFdL
QnVuZGxlUGFnZVJlZiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJv
ZHkpOworICAgIHZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJl
ZiBib2R5ID0gbnVsbHB0cik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBwb3N0UGFn
ZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkpOwor
ICAgIHZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGJv
ZHkpOwogCiAgICAgV0tCdW5kbGVSZWYgbV9idW5kbGUgeyBudWxscHRyIH07CiAgICAgV0tCdW5k
bGVQYWdlR3JvdXBSZWYgbV9wYWdlR3JvdXAgeyBudWxscHRyIH07CkBAIC0yMTAsNCArMjEzLDI5
IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fdXNlclNjcmlwdEluamVjdGVkQ291bnQgeyAwIH07
CiB9OwogCit2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1
ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25l
ZCB2YWx1ZSk7CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1l
LCBXS1R5cGVSZWYgdmFsdWUgPSBudWxscHRyKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZShjb25zdCBjaGFyKiBuYW1lLCB1aW50NjRfdCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgdmFsdWUpOwordm9pZCBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSk7CisKK3Zv
aWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51
bGxwdHIpOwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1
ZSk7CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwg
V0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cik7Cit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBXS1JldGFpblB0cjxUPiYgYm9keSkK
K3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UocGFnZSwgbmFtZSwgYm9keS5nZXQoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShj
b25zdCBjaGFyKiBuYW1lLCBjb25zdCBXS1JldGFpblB0cjxUPiYgYm9keSkKK3sKKyAgICBwb3N0
UGFnZU1lc3NhZ2UobmFtZSwgYm9keS5nZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2UuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IGQ4OWZlYWY5YjZkYWU0Yzk2ODUzMWYwYWI2Mzg1
ODkxYjE0Zjk4ZjguLjJmNTY0Mjc3MzExNmQ5ZjEwMjRmYTZmYmU5ZGMzNTIwYjE1ZTE4YTkgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGVQYWdlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlUGFnZS5jcHAKQEAgLTYwLDUwICs2MCwxOCBAQCB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIEpTVmFsdWVSZWYgcHJvcGVydHlW
YWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFy
KiBwcm9wZXJ0eU5hbWUpCitzdGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0eShXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIGlmICghb2JqZWN0
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBhdXRvIHByb3BlcnR5TmFtZVN0cmluZyA9IGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHByb3BlcnR5TmFtZSkpOwotICAgIHJldHVy
biBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgcHJvcGVydHlOYW1lU3RyaW5n
LmdldCgpLCAwKTsKLX0KLQotc3RhdGljIGRvdWJsZSBwcm9wZXJ0eVZhbHVlRG91YmxlKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5
TmFtZSkKLXsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBv
YmplY3QsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCk7ICAgIAotfQot
Ci1zdGF0aWMgaW50IHByb3BlcnR5VmFsdWVJbnQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHByb3BlcnR5VmFsdWVEb3VibGUoY29udGV4dCwgb2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpKTsgICAgCi19Ci0KLXN0YXRpYyBkb3VibGUgbnVtZXJpY1dpbmRvd1Byb3BlcnR5
VmFsdWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQot
ewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICByZXR1cm4gcHJvcGVydHlWYWx1ZURvdWJsZShjb250
ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHByb3BlcnR5TmFtZSk7Cisg
ICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1l
KTsKKyAgICByZXR1cm4gbnVtZXJpY1Byb3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2Jh
bE9iamVjdChjb250ZXh0KSwgbmFtZSk7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBkdW1wUGF0
aChKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgbm9kZVZhbHVlKQogewot
ICAgIEpTVmFsdWVSZWYgbm9kZU5hbWVWYWx1ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgbm9k
ZVZhbHVlLCAibm9kZU5hbWUiKTsKLSAgICBhdXRvIGpzU3RyaW5nTm9kZU5hbWUgPSBhZG9wdChK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIG5vZGVOYW1lVmFsdWUsIDApKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbm9kZU5hbWUgPSB0b1dLKGpzU3RyaW5nTm9kZU5hbWUpOwot
Ci0gICAgSlNWYWx1ZVJlZiBwYXJlbnROb2RlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBub2Rl
VmFsdWUsICJwYXJlbnROb2RlIik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm9kZU5hbWUpKTsKLQotICAg
IGlmIChwYXJlbnROb2RlICYmIEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBwYXJlbnROb2RlKSkg
ewotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiA+ICIpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChjb250ZXh0LCAoSlNPYmplY3RSZWYpcGFyZW50
Tm9kZSkpOwotICAgIH0KLQotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cisg
ICAgYXV0byBuYW1lID0gdG9XVEZTdHJpbmcoc3RyaW5nUHJvcGVydHkoY29udGV4dCwgbm9kZVZh
bHVlLCAibm9kZU5hbWUiKSk7CisgICAgaWYgKGF1dG8gcGFyZW50Tm9kZSA9IG9iamVjdFByb3Bl
cnR5KGNvbnRleHQsIG5vZGVWYWx1ZSwgInBhcmVudE5vZGUiKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcobmFtZSwgIiA+ICIsIGR1bXBQYXRoKGNvbnRleHQsIHBhcmVudE5vZGUpKTsKKyAg
ICByZXR1cm4gbmFtZTsKIH0KIAogc3RhdGljIFdURjo6U3RyaW5nIGR1bXBQYXRoKFdLQnVuZGxl
UGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZU5vZGVI
YW5kbGVSZWYgbm9kZSkKQEAgLTEyNiw1MyArOTQsNDAgQEAgc3RhdGljIFdURjo6U3RyaW5nIHJh
bmdlVG9TdHIoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29y
bGQKICAgICBpZiAoIXJhbmdlUmVmKQogICAgICAgICByZXR1cm4gIihudWxsKSI7CiAKLSAgICBX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwot
Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNj
cmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQpOwotICAgIEpTVmFsdWVSZWYgcmFuZ2VW
YWx1ZSA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0V3JhcHBlckZvclJhbmdlRm9yV29ybGQo
ZnJhbWUsIHJhbmdlUmVmLCB3b3JsZCk7CisgICAgYXV0byBmcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShwYWdlKTsKKyAgICBhdXRvIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQpOworICAgIGF1dG8gcmFuZ2VWYWx1
ZSA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0V3JhcHBlckZvclJhbmdlRm9yV29ybGQoZnJh
bWUsIHJhbmdlUmVmLCB3b3JsZCk7CiAgICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0
LCByYW5nZVZhbHVlKSk7Ci0gICAgSlNPYmplY3RSZWYgcmFuZ2VPYmplY3QgPSAoSlNPYmplY3RS
ZWYpcmFuZ2VWYWx1ZTsKLQotICAgIEpTVmFsdWVSZWYgc3RhcnROb2RlVmFsdWUgPSBwcm9wZXJ0
eVZhbHVlKGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRDb250YWluZXIiKTsKLSAgICBBU1NF
UlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHN0YXJ0Tm9kZVZhbHVlKSk7Ci0gICAgSlNPYmpl
Y3RSZWYgc3RhcnROb2RlT2JqZWN0ID0gKEpTT2JqZWN0UmVmKXN0YXJ0Tm9kZVZhbHVlOwotCi0g
ICAgSlNWYWx1ZVJlZiBlbmROb2RlVmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIHJhbmdl
T2JqZWN0LCAiZW5kQ29udGFpbmVyIik7Ci0gICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250
ZXh0LCBlbmROb2RlVmFsdWUpKTsKLSAgICBKU09iamVjdFJlZiBlbmROb2RlT2JqZWN0ID0gKEpT
T2JqZWN0UmVmKWVuZE5vZGVWYWx1ZTsKLQotICAgIGludCBzdGFydE9mZnNldCA9IHByb3BlcnR5
VmFsdWVJbnQoY29udGV4dCwgcmFuZ2VPYmplY3QsICJzdGFydE9mZnNldCIpOwotICAgIGludCBl
bmRPZmZzZXQgPSBwcm9wZXJ0eVZhbHVlSW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zm
c2V0Iik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJyYW5nZSBmcm9tICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTnVtYmVyKHN0YXJ0T2Zmc2V0KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IiBvZiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChjb250ZXh0LCBzdGFy
dE5vZGVPYmplY3QpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0byAiKTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihlbmRPZmZzZXQpOwotICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG9mICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGR1
bXBQYXRoKGNvbnRleHQsIGVuZE5vZGVPYmplY3QpKTsKLSAgICByZXR1cm4gc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOworICAgIGF1dG8gcmFuZ2VPYmplY3QgPSAoSlNPYmplY3RSZWYpcmFuZ2VW
YWx1ZTsKKworICAgIHJldHVybiBtYWtlU3RyaW5nKCJyYW5nZSBmcm9tICIsCisgICAgICAgIG51
bWVyaWNQcm9wZXJ0eShjb250ZXh0LCByYW5nZU9iamVjdCwgInN0YXJ0T2Zmc2V0IiksCisgICAg
ICAgICIgb2YgIiwKKyAgICAgICAgZHVtcFBhdGgoY29udGV4dCwgb2JqZWN0UHJvcGVydHkoY29u
dGV4dCwgcmFuZ2VPYmplY3QsICJzdGFydENvbnRhaW5lciIpKSwKKyAgICAgICAgIiB0byAiLAor
ICAgICAgICBudW1lcmljUHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRPZmZzZXQi
KSwKKyAgICAgICAgIiBvZiAiLAorICAgICAgICBkdW1wUGF0aChjb250ZXh0LCBvYmplY3RQcm9w
ZXJ0eShjb250ZXh0LCByYW5nZU9iamVjdCwgImVuZENvbnRhaW5lciIpKQorICAgICk7CiB9CiAK
IHN0YXRpYyBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gTmF2aWdhdGlvblR5cGVUb1N0cmluZyhX
S0ZyYW1lTmF2aWdhdGlvblR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBj
YXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVMaW5rQ2xpY2tlZDoKLSAgICAgICAgcmV0dXJuIGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxpbmsgY2xpY2tlZCIpKTsKKyAg
ICAgICAgcmV0dXJuIHRvV0soImxpbmsgY2xpY2tlZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZp
Z2F0aW9uVHlwZUZvcm1TdWJtaXR0ZWQ6Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmb3JtIHN1Ym1pdHRlZCIpKTsKKyAgICAgICAgcmV0dXJu
IHRvV0soImZvcm0gc3VibWl0dGVkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBl
QmFja0ZvcndhcmQ6Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJiYWNrL2ZvcndhcmQiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJiYWNrL2Zv
cndhcmQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVSZWxvYWQ6Ci0gICAgICAg
IHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJyZWxvYWQiKSk7
CisgICAgICAgIHJldHVybiB0b1dLKCJyZWxvYWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdh
dGlvblR5cGVGb3JtUmVzdWJtaXR0ZWQ6Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmb3JtIHJlc3VibWl0dGVkIikpOworICAgICAgICByZXR1
cm4gdG9XSygiZm9ybSByZXN1Ym1pdHRlZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9u
VHlwZU90aGVyOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygib3RoZXIiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJvdGhlciIpOwogICAgIH0K
LSAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaWxsZWdh
bCB2YWx1ZSIpKTsKKyAgICByZXR1cm4gdG9XSygiaWxsZWdhbCB2YWx1ZSIpOwogfQogCiBzdGF0
aWMgV1RGOjpTdHJpbmcgc3R5bGVEZWNUb1N0cihXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25S
ZWYgc3R5bGUpCkBAIC0xODUsMjMgKzE0MCwxNCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgc3R5bGVE
ZWNUb1N0cihXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUpCiAgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5nIHNlY3Vy
aXR5T3JpZ2luVG9TdHIoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4pCitzdGF0aWMgV1RGOjpT
dHJpbmcgc3RyaW5nKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luKQogewotICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgneycpOwotICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdp
bkNvcHlQcm90b2NvbChvcmlnaW4pKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiLCAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdL
U2VjdXJpdHlPcmlnaW5Db3B5SG9zdChvcmlnaW4pKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihXS1NlY3Vy
aXR5T3JpZ2luR2V0UG9ydChvcmlnaW4pKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnfScp
OwotCi0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gbWFr
ZVN0cmluZygneycsIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlQcm90
b2NvbChvcmlnaW4pKSksICIsICIsIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdp
bkNvcHlIb3N0KG9yaWdpbikpKSwgIiwgIiwgV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2lu
KSwgJ30nKTsKIH0KIAogc3RhdGljIFdURjo6U3RyaW5nIGZyYW1lVG9TdHIoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CisgICAgYXV0byBuYW1lID0gYWRvcHRX
SyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7CiAgICAgaWYgKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpIHsKICAg
ICAgICAgaWYgKCFXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKQEAgLTIzNSwxMiArMTgx
LDEyIEBAIHN0YXRpYyBpbmxpbmUgV1RGOjpTdHJpbmcgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChXS1VSTFJlZiBmaWxlVXJsKQogICAgIGlmICghZmlsZVVybCkKICAgICAgICAgcmV0dXJuICIo
bnVsbCkiOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjaGVtZVN0cmluZyA9IGFk
b3B0V0soV0tVUkxDb3B5U2NoZW1lKGZpbGVVcmwpKTsKKyAgICBhdXRvIHNjaGVtZVN0cmluZyA9
IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKGZpbGVVcmwpKTsKICAgICBpZiAoIWlzTG9jYWxGaWxl
U2NoZW1lKHNjaGVtZVN0cmluZy5nZXQoKSkpCiAgICAgICAgIHJldHVybiB0b1dURlN0cmluZyhh
ZG9wdFdLKFdLVVJMQ29weVN0cmluZyhmaWxlVXJsKSkpOwogCiAgICAgV0tCdW5kbGVGcmFtZVJl
ZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gbWFp
bkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUpKTsKKyAg
ICBhdXRvIG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZy
YW1lKSk7CiAgICAgaWYgKCFtYWluRnJhbWVVUkwpCiAgICAgICAgIG1haW5GcmFtZVVSTCA9IGFk
b3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVSTChtYWluRnJhbWUpKTsKIApAQCAt
NDM0LDggKzM4MCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVzdCgp
CiAgICAgLy8gKHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
ODMzND4pLCBob3dldmVyIGZvciB0ZXN0cywgd2Ugd2FudCB0byBzdGFydCBlYWNoIG9uZSB3aXRo
IGEgY2xlYW4gc3RhdGUuCiAgICAgV0tCdW5kbGVGcmFtZUZvY3VzKGZyYW1lKTsKIAotICAgIEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250
ZXh0KGZyYW1lKTsKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0
KGNvbnRleHQpOworICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6cmVzZXRJbnRlcm5hbHNPYmplY3Qo
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKSk7CiAgICAgYXNzaWduZWRV
cmxzQ2FjaGUoKS5jbGVhcigpOwogCiAgICAgLy8gVXNlciBzY3JpcHRzIG5lZWQgdG8gYmUgcmVt
b3ZlZCBhZnRlciB0aGUgdGVzdCBhbmQgYmVmb3JlIGxvYWRpbmcgYWJvdXQ6YmxhbmssIGFzIG90
aGVyd2lzZSB0aGV5IHdvdWxkIHJ1biBpbiBhYm91dDpibGFuaywgYW5kIHBvdGVudGlhbGx5IGxl
YWsgcmVzdWx0cyBpbnRvIGEgc3Vic2VxdWVzdCB0ZXN0LgpAQCAtNDUxLDcgKzM5Niw3IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVzdCgpCiAvLyBTdHJpbmcgb3V0cHV0
IG11c3QgYmUgaWRlbnRpY2FsIHRvIC1bV2ViRnJhbWUgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxl
Rm9yVGVzdFJlc3VsdF0uCiBzdGF0aWMgdm9pZCBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWlsZGVyKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lID0gYWRvcHRX
SyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKKyAgICBhdXRvIG5hbWUgPSBhZG9wdFdL
KFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNN
YWluRnJhbWUoZnJhbWUpKSB7CiAgICAgICAgIGlmIChXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQo
KSkpIHsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFt
ZSIpOwpAQCAtNDg2LDI3ICs0MzEsMjEgQEAgc3RhdGljIHZvaWQgZHVtcExvYWRFdmVudChXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBjaGFyKiBldmVudE5hbWUpCiAKIHN0YXRpYyBpbmxp
bmUgdm9pZCBkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLVVJM
UmVxdWVzdFJlZiByZXF1ZXN0LCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwo
cmVxdWVzdCkpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBmaXJzdFBhcnR5ID0gYWRvcHRX
SyhXS1VSTFJlcXVlc3RDb3B5Rmlyc3RQYXJ0eUZvckNvb2tpZXMocmVxdWVzdCkpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBodHRwTWV0aG9kID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RD
b3B5SFRUUE1ldGhvZChyZXF1ZXN0KSk7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIjxOU1VSTFJlcXVlc3QgVVJMICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhdGhT
dWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIsIG1haW4gZG9jdW1lbnQgVVJMICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQoZmlyc3RQYXJ0eS5nZXQoKSkpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBodHRwIG1ldGhvZCAiKTsKKyAgICBhdXRvIHVy
bCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CisgICAgYXV0byBmaXJz
dFBhcnR5ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5Rmlyc3RQYXJ0eUZvckNvb2tpZXMocmVx
dWVzdCkpOworICAgIGF1dG8gaHR0cE1ldGhvZCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUhU
VFBNZXRob2QocmVxdWVzdCkpOwogCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU1VSTFJl
cXVlc3QgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwgIiwgbWFp
biBkb2N1bWVudCBVUkwgIiwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChmaXJzdFBhcnR5Lmdl
dCgpKSwgIiwgaHR0cCBtZXRob2QgIik7CiAgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShodHRwTWV0
aG9kLmdldCgpKSkKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobm9uZSki
KTsKICAgICBlbHNlCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGh0
dHBNZXRob2QpKTsKLQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgdm9pZCBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVy
LCBib29sIHNob3VsZER1bXBSZXNwb25zZUhlYWRlcnMgPSBmYWxzZSkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25z
ZSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25z
ZSkpOwogICAgIGlmICghdXJsKSB7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiKG51bGwpIik7CiAgICAgICAgIHJldHVybjsKQEAgLTUzNSwzMSArNDc0LDIwIEBAIHVpbnQ2
NF90IEluamVjdGVkQnVuZGxlUGFnZTo6cmVzcG9uc2VIZWFkZXJDb3VudChXS1VSTFJlc3BvbnNl
UmVmIHJlc3BvbnNlKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVycm9yRGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvciwgU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JEb21haW4g
PSBhZG9wdFdLKFdLRXJyb3JDb3B5RG9tYWluKGVycm9yKSk7Ci0gICAgaW50IGVycm9yQ29kZSA9
IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJyb3IpOworICAgIGF1dG8gZXJyb3JEb21haW4gPSB0b1dU
RlN0cmluZyhhZG9wdFdLKFdLRXJyb3JDb3B5RG9tYWluKGVycm9yKSkpOworICAgIGF1dG8gZXJy
b3JDb2RlID0gV0tFcnJvckdldEVycm9yQ29kZShlcnJvcik7CiAKICAgICAvLyBXZSBuZWVkIHRv
IGRvIHNvbWUgZXJyb3IgbWFwcGluZyBoZXJlIHRvIG1hdGNoIHRoZSB0ZXN0IGV4cGVjdGF0aW9u
cyAoTWFjIGVycm9yIG5hbWVzIGFyZSBleHBlY3RlZCkuCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoZXJyb3JEb21haW4uZ2V0KCksICJXZWJLaXROZXR3b3JrRXJyb3IiKSkg
ewotICAgICAgICBlcnJvckRvbWFpbiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIk5TVVJMRXJyb3JEb21haW4iKSk7CisgICAgaWYgKGVycm9yRG9tYWluID09ICJXZWJL
aXROZXR3b3JrRXJyb3IiKSB7CisgICAgICAgIGVycm9yRG9tYWluID0gIk5TVVJMRXJyb3JEb21h
aW4iOwogICAgICAgICBlcnJvckNvZGUgPSAtOTk5OwogICAgIH0KKyAgICBpZiAoZXJyb3JEb21h
aW4gPT0gICJXZWJLaXRQb2xpY3lFcnJvciIpCisgICAgICAgIGVycm9yRG9tYWluID0gIldlYktp
dEVycm9yRG9tYWluIjsKIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGVy
cm9yRG9tYWluLmdldCgpLCAiV2ViS2l0UG9saWN5RXJyb3IiKSkKLSAgICAgICAgZXJyb3JEb21h
aW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRFcnJvckRv
bWFpbiIpKTsKLQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPE5TRXJyb3IgZG9t
YWluICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGVycm9yRG9tYWlu
KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGNvZGUgIik7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmROdW1iZXIoZXJyb3JDb2RlKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
VVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLRXJyb3JDb3B5RmFpbGluZ1VSTChlcnJvcikpOwotICAg
IGlmICh1cmwuZ2V0KCkpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0
cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgZmFpbGluZyBVUkwgXCIiKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCciJyk7Ci0gICAgfQotCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
IjxOU0Vycm9yIGRvbWFpbiAiLCBlcnJvckRvbWFpbiwgIiwgY29kZSAiLCBlcnJvckNvZGUpOwor
ICAgIGlmIChhdXRvIHVybCA9IGFkb3B0V0soV0tFcnJvckNvcHlGYWlsaW5nVVJMKGVycm9yKSkp
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIGZhaWxpbmcgVVJMIFwiIiwgdG9XVEZT
dHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkpLCAnIicpOwogICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7CiB9CiAKQEAgLTY5NSw3ICs2MjMsNyBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWluamVjdGVkQnVu
ZGxlLnRlc3RSdW5uZXIoKS0+dGVzdFVSTCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVmPiB0ZXN0VVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKGZy
YW1lKSk7CisgICAgICAgIGF1dG8gdGVzdFVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQ
cm92aXNpb25hbFVSTChmcmFtZSkpOwogICAgICAgICBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNldFRlc3RVUkwodGVzdFVSTC5nZXQoKSk7CiAgICAgfQogCkBAIC03NzQsMTMgKzcwMiwx
MyBAQCBlbnVtIEZyYW1lTmFtZVBvbGljeSB7IFNob3VsZE5vdEluY2x1ZGVGcmFtZU5hbWUsIFNo
b3VsZEluY2x1ZGVGcmFtZU5hbWUgfTsKIAogc3RhdGljIHZvaWQgZHVtcEZyYW1lU2Nyb2xsUG9z
aXRpb24oV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRl
ciwgRnJhbWVOYW1lUG9saWN5IHNob3VsZEluY2x1ZGVGcmFtZU5hbWUgPSBTaG91bGROb3RJbmNs
dWRlRnJhbWVOYW1lKQogewotICAgIGRvdWJsZSB4ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFs
dWUoZnJhbWUsICJwYWdlWE9mZnNldCIpOwotICAgIGRvdWJsZSB5ID0gbnVtZXJpY1dpbmRvd1By
b3BlcnR5VmFsdWUoZnJhbWUsICJwYWdlWU9mZnNldCIpOworICAgIGRvdWJsZSB4ID0gbnVtZXJp
Y1dpbmRvd1Byb3BlcnR5KGZyYW1lLCAicGFnZVhPZmZzZXQiKTsKKyAgICBkb3VibGUgeSA9IG51
bWVyaWNXaW5kb3dQcm9wZXJ0eShmcmFtZSwgInBhZ2VZT2Zmc2V0Iik7CiAgICAgaWYgKGZhYnMo
eCkgPD0gMC4wMDAwMDAwMSAmJiBmYWJzKHkpIDw9IDAuMDAwMDAwMDEpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChzaG91bGRJbmNsdWRlRnJhbWVOYW1lKSB7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJh
bWUpKTsKKyAgICAgICAgYXV0byBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUo
ZnJhbWUpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSAnIik7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCInICIpOwpAQCAtNzk0LDcgKzcyMiw3IEBA
IHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUsIFN0cmluZ0J1aWxkZXImIHN0cmluCiAKIHN0YXRpYyB2b2lkIGR1bXBEZXNjZW5kYW50RnJh
bWVTY3JvbGxQb3NpdGlvbnMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYg
c3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBjaGlsZEZyYW1l
cyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOworICAgIGF1
dG8gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJh
bWUpKTsKICAgICBzaXplX3Qgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGNoaWxkRnJhbWVzLmdldCgp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBXS0J1
bmRsZUZyYW1lUmVmIHN1YmZyYW1lID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KGNoaWxkRnJhbWVzLmdldCgpLCBpKSk7CkBAIC04MTAsMjggKzcz
OCwxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRp
b25zKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZQogICAgIGR1bXBEZXNjZW5kYW50RnJhbWVT
Y3JvbGxQb3NpdGlvbnMoZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwogfQogCi1zdGF0aWMgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoY29uc3QgY2hhciogc3RyaW5nKQotewotICAgIHJldHVy
biBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKLX0KLQogc3Rh
dGljIGJvb2wgaGFzRG9jdW1lbnRFbGVtZW50KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0g
ICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlw
dENvbnRleHQoZnJhbWUpOwotICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4
dEdldEdsb2JhbE9iamVjdChjb250ZXh0KTsKLQotICAgIEpTVmFsdWVSZWYgZG9jdW1lbnRWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZ2xvYmFsT2JqZWN0LCB0b0pTKCJkb2N1
bWVudCIpLmdldCgpLCAwKTsKLSAgICBpZiAoIWRvY3VtZW50VmFsdWUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgZG9jdW1lbnRW
YWx1ZSkpOwotICAgIEpTT2JqZWN0UmVmIGRvY3VtZW50ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIGRvY3VtZW50VmFsdWUsIDApOwotCi0gICAgSlNWYWx1ZVJlZiBkb2N1bWVudEVsZW1lbnRW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZG9jdW1lbnQsIHRvSlMoImRvY3Vt
ZW50RWxlbWVudCIpLmdldCgpLCAwKTsKLSAgICBpZiAoIWRvY3VtZW50RWxlbWVudFZhbHVlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZVRvQm9vbGVhbihjb250
ZXh0LCBkb2N1bWVudEVsZW1lbnRWYWx1ZSk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKKyAgICByZXR1cm4gb2JqZWN0UHJvcGVy
dHkoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCB7ICJkb2N1bWVu
dCIsICJkb2N1bWVudEVsZW1lbnQiIH0pOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wRnJhbWVUZXh0
KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCkBAIC04NTQs
MTEgKzc2NCwxMSBAQCBzdGF0aWMgdm9pZCBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCiAKIHN0YXRpYyB2b2lkIGR1bXBEZXNjZW5k
YW50RnJhbWVzVGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWlsZGVyKQogewotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGNoaWxkRnJhbWVzID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weUNoaWxkRnJhbWVzKGZyYW1lKSk7CisgICAgYXV0byBj
aGlsZEZyYW1lcyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkp
OwogICAgIHNpemVfdCBzaXplID0gV0tBcnJheUdldFNpemUoY2hpbGRGcmFtZXMuZ2V0KCkpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFdLQnVuZGxl
RnJhbWVSZWYgc3ViZnJhbWUgPSBzdGF0aWNfY2FzdDxXS0J1bmRsZUZyYW1lUmVmPihXS0FycmF5
R2V0SXRlbUF0SW5kZXgoY2hpbGRGcmFtZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1YmZyYW1lTmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlO
YW1lKHN1YmZyYW1lKSk7CisgICAgICAgIGF1dG8gc3ViZnJhbWVOYW1lID0gYWRvcHRXSyhXS0J1
bmRsZUZyYW1lQ29weU5hbWUoc3ViZnJhbWUpKTsKIAogICAgICAgICAvLyBEdW1wUmVuZGVyVHJl
ZSBpZ25vcmVzIGVtcHR5IGZyYW1lcywgc28gZG8gdGhlIHNhbWUgdGhpbmcgaGVyZS4KICAgICAg
ICAgaWYgKCFoYXNEb2N1bWVudEVsZW1lbnQoc3ViZnJhbWUpKQpAQCAtODg0LDkgKzc5NCw5IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQWxsRnJhbWVzVGV4dChTdHJpbmdCdWlsZGVy
JiBzdHJpbmdCdWlsZGVyKQogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBET01Bc1dlYkFy
Y2hpdmUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRl
cikKIHsKICNpZiBVU0UoQ0YpICYmICFQTEFURk9STShXSU5fQ0FJUk8pICYmICFVU0UoRElSRUNU
MkQpCi0gICAgV0tSZXRhaW5QdHI8V0tEYXRhUmVmPiB3a0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxl
RnJhbWVDb3B5V2ViQXJjaGl2ZShmcmFtZSkpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGNm
RGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQo
KSksIFdLRGF0YUdldFNpemUod2tEYXRhLmdldCgpKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gY2ZTdHJpbmcgPSBhZG9wdENGKFdlYkNvcmVUZXN0U3VwcG9ydDo6Y3JlYXRlWE1MU3Ry
aW5nRnJvbVdlYkFyY2hpdmVEYXRhKGNmRGF0YS5nZXQoKSkpOworICAgIGF1dG8gd2tEYXRhID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKKyAgICBhdXRvIGNm
RGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQo
KSksIFdLRGF0YUdldFNpemUod2tEYXRhLmdldCgpKSkpOworICAgIGF1dG8gY2ZTdHJpbmcgPSBh
ZG9wdENGKFdlYkNvcmVUZXN0U3VwcG9ydDo6Y3JlYXRlWE1MU3RyaW5nRnJvbVdlYkFyY2hpdmVE
YXRhKGNmRGF0YS5nZXQoKSkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNmU3RyaW5nLmdl
dCgpKTsKICNlbmRpZgogfQpAQCAtOTAyLDkgKzgxMiw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkdW1wKCkKICAgICBXS0J1bmRsZVBhZ2VGbHVzaFBlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0
ZShtX3BhZ2UpOwogCiAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShtX3BhZ2UpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmxSZWYgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKGZyYW1lKSk7CisgICAgYXV0byB1cmxSZWYgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKGZyYW1lKSk7CiAgICAgU3RyaW5nIHVybCA9IHRv
V1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybFJlZi5nZXQoKSkpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWltZVR5cGUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVD
b3B5TUlNRVR5cGVGb3JSZXNvdXJjZVdpdGhVUkwoZnJhbWUsIHVybFJlZi5nZXQoKSkpOworICAg
IGF1dG8gbWltZVR5cGUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JSZXNv
dXJjZVdpdGhVUkwoZnJhbWUsIHVybFJlZi5nZXQoKSkpOwogICAgIGlmICh1cmwuZmluZCgiZHVt
cEFzVGV4dC8iKSAhPSBub3RGb3VuZCB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1p
bWVUeXBlLmdldCgpLCAidGV4dC9wbGFpbiIpKQogICAgICAgICBpbmplY3RlZEJ1bmRsZS50ZXN0
UnVubmVyKCktPmR1bXBBc1RleHQoZmFsc2UpOwogCkBAIC0xMDE4LDIxICs5MjgsMTkgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgV0tCdW5kbGUKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5p
bmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQp
OwotICAgIEpTT2JqZWN0UmVmIHdpbmRvdyA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250
ZXh0KTsKKyAgICBhdXRvIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHRGb3JXb3JsZChmcmFtZSwgd29ybGQpOwogCiAgICAgaWYgKFdLQnVuZGxlU2NyaXB0V29ybGRO
b3JtYWxXb3JsZCgpICE9IHdvcmxkKSB7Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29u
dGV4dCwgd2luZG93LCB0b0pTKCJfX3dvcmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dCwgVGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKHdvcmxkKSksIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHksIDApOworICAgICAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShj
b250ZXh0LCAiX193b3JsZElEIiwgVGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKHdvcmxkKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51
bGxwdHI7Ci0gICAgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5tYWtlV2luZG93T2JqZWN0
KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuZ2NDb250
cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsK
LSAgICBpbmplY3RlZEJ1bmRsZS5ldmVudFNlbmRpbmdDb250cm9sbGVyKCktPm1ha2VXaW5kb3dP
YmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS50
ZXh0SW5wdXRDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAm
ZXhjZXB0aW9uKTsKKyAgICBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPm1ha2VXaW5kb3dP
YmplY3QoY29udGV4dCk7CisgICAgaW5qZWN0ZWRCdW5kbGUuZ2NDb250cm9sbGVyKCktPm1ha2VX
aW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgaW5qZWN0ZWRCdW5kbGUuZXZlbnRTZW5kaW5nQ29u
dHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxl
LnRleHRJbnB1dENvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKICNpZiBI
QVZFKEFDQ0VTU0lCSUxJVFkpCi0gICAgaW5qZWN0ZWRCdW5kbGUuYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwor
ICAgIGluamVjdGVkQnVuZGxlLmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCktPm1ha2VXaW5kb3dP
YmplY3QoY29udGV4dCk7CiAjZW5kaWYKIAogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5qZWN0
SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwpAQCAtMTEzNiw3ICsxMDQ0LDcgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZEluaXRpYXRlTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlLCBXS0J1bmQKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rl
c3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVm
PiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1dG8g
dXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKICAgICBhc3NpZ25l
ZFVybHNDYWNoZSgpLmFkZChpZGVudGlmaWVyLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVy
bC5nZXQoKSkpOwogfQogCkBAIC0xMTc1LDE2ICsxMDgzLDE2IEBAIFdLVVJMUmVxdWVzdFJlZiBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSAmJiBpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHJlZGlyZWN0
VVJMID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8g
cmVkaXJlY3RVUkwgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CiAg
ICAgaWYgKGluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSAmJiBpbmplY3RlZEJ1bmRsZS50
ZXN0UnVubmVyKCktPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCgpICYmIHJl
ZGlyZWN0VVJMKSB7CiAgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoIlJldHVybmlu
ZyBudWxsIGZvciB0aGlzIHJlZGlyZWN0XG4iKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1
ZXN0Q29weVVSTChyZXF1ZXN0KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3Qg
PSBhZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1lKHVybC5nZXQoKSkpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VS
TENvcHlTdHJpbmcodXJsLmdldCgpKSk7CisgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVx
dWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1dG8gaG9zdCA9IGFkb3B0V0soV0tVUkxDb3B5
SG9zdE5hbWUodXJsLmdldCgpKSk7CisgICAgYXV0byBzY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29w
eVNjaGVtZSh1cmwuZ2V0KCkpKTsKKyAgICBhdXRvIHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxD
b3B5U3RyaW5nKHVybC5nZXQoKSkpOwogICAgIGlmIChob3N0ICYmICFXS1N0cmluZ0lzRW1wdHko
aG9zdC5nZXQoKSkKICAgICAgICAgJiYgaXNIVFRQT3JIVFRQU1NjaGVtZShzY2hlbWUuZ2V0KCkp
CiAgICAgICAgICYmICFXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGhvc3QuZ2V0KCksICIy
NTUuMjU1LjI1NS4yNTUiKSAvLyBVc2VkIGluIHNvbWUgdGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0
IGJhY2sgYW4gZXJyb3IuCkBAIC0xMTkyLDEyICsxMTAwLDEyIEBAIFdLVVJMUmVxdWVzdFJlZiBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlCiAgICAgICAgIGJvb2wgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGZhbHNlOwogICAgICAg
ICBpZiAoaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKSB7CiAgICAgICAgICAgICBXS0J1
bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2Up
OwotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1haW5GcmFtZVVSTCA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG1h
aW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7CiAg
ICAgICAgICAgICBpZiAoIW1haW5GcmFtZVVSTCB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKG1haW5GcmFtZVVSTC5nZXQoKSkpLmdldCgpLCAi
YWJvdXQ6YmxhbmsiKSkKICAgICAgICAgICAgICAgICBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdL
QnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwobWFpbkZyYW1lKSk7CiAKLSAgICAgICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtYWluRnJhbWVIb3N0ID0gYWRvcHRXSyhXS1VSTENv
cHlIb3N0TmFtZShtYWluRnJhbWVVUkwuZ2V0KCkpKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtYWluRnJhbWVTY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSht
YWluRnJhbWVVUkwuZ2V0KCkpKTsKKyAgICAgICAgICAgIGF1dG8gbWFpbkZyYW1lSG9zdCA9IGFk
b3B0V0soV0tVUkxDb3B5SG9zdE5hbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7CisgICAgICAgICAg
ICBhdXRvIG1haW5GcmFtZVNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKG1haW5GcmFt
ZVVSTC5nZXQoKSkpOwogICAgICAgICAgICAgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGlzSFRUUE9y
SFRUUFNTY2hlbWUobWFpbkZyYW1lU2NoZW1lLmdldCgpKSAmJiAhaXNMb2NhbEhvc3QobWFpbkZy
YW1lSG9zdC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtYWluRnJhbWVJc0V4dGVy
bmFsICYmICFpc0FsbG93ZWRIb3N0KGhvc3QuZ2V0KCkpKSB7CkBAIC0xMjE0LDcgKzExMjIsNyBA
QCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JG
cmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgICAgICBTdHJpbmcgYm9keSA9IGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+d2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHkoKTsKICAgICAgICAg
aWYgKCFib2R5LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ1N0cmluZyBjQm9keSA9IGJvZHku
dXRmOCgpOwotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tEYXRhUmVmPiBib2R5ID0gYWRvcHRX
SyhXS0RhdGFDcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY0Jv
ZHkuZGF0YSgpKSwgY0JvZHkubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIGF1dG8gYm9keSA9IGFk
b3B0V0soV0tEYXRhQ3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGNCb2R5LmRhdGEoKSksIGNCb2R5Lmxlbmd0aCgpKSk7CiAgICAgICAgICAgICByZXR1cm4gV0tV
UkxSZXF1ZXN0Q29weVNldHRpbmdIVFRQQm9keShyZXF1ZXN0LCBib2R5LmdldCgpKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTEyNDIsOSArMTE1MCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tC
CiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJj
ZVJlc3BvbnNlTUlNRVR5cGVzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRy
PFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxD
b3B5TGFzdFBhdGhDb21wb25lbnQodXJsLmdldCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1pbWVUeXBlU3RyaW5nID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBl
KHJlc3BvbnNlKSk7CisgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJM
KHJlc3BvbnNlKSk7CisgICAgYXV0byB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQ
YXRoQ29tcG9uZW50KHVybC5nZXQoKSkpOworICAgIGF1dG8gbWltZVR5cGVTdHJpbmcgPSBhZG9w
dFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlNRVR5cGUocmVzcG9uc2UpKTsKIAogICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
Zyh1cmxTdHJpbmcpKTsKQEAgLTEzNTAsMTAgKzEyNTgsOCBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lB
Y3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
KFdLQgogICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
blxuIik7CiAgICAgICAgIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRlcik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiIGlzIG1haW4gZnJhbWUgLSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJu
YWxseSAtICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChXS0J1bmRsZU5hdmlnYXRp
b25BY3Rpb25HZXRTaG91bGRPcGVuRXh0ZXJuYWxVUkxzKG5hdmlnYXRpb25BY3Rpb24pID8gInll
cyIgOiAibm8iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiBpcyBtYWluIGZyYW1l
IC0gIiwgV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIik7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5
IC0gIiwgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhu
YXZpZ2F0aW9uQWN0aW9uKSA/ICJ5ZXMiIDogIm5vIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCdcbicpOwogICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQpAQCAtMTM2MSwyNCArMTI2NywyMSBAQCBXS0J1bmRs
ZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uKFdLQgogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5p
c1BvbGljeURlbGVnYXRlRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9s
aWN5QWN0aW9uUGFzc1Rocm91Z2g7CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0g
YWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdXJsU2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgp
KSk7CisgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkp
OworICAgIGF1dG8gdXJsU2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgp
KSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQgdG8gbG9hZCAiKTsKLSAg
ICBpZiAoaXNMb2NhbEZpbGVTY2hlbWUodXJsU2NoZW1lLmdldCgpKSkgewotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZmlsZW5hbWUgPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRo
Q29tcG9uZW50KHVybC5nZXQoKSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhmaWxlbmFtZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkp
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7
Ci0gICAgfQorICAgIGlmIChpc0xvY2FsRmlsZVNjaGVtZSh1cmxTY2hlbWUuZ2V0KCkpKQorICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weUxh
c3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkpKSk7CisgICAgZWxzZQorICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0
KCkpKSkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHdpdGggbmF2aWdhdGlv
biB0eXBlIFwnIik7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoTmF2aWdh
dGlvblR5cGVUb1N0cmluZyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0aW9uVHlw
ZShuYXZpZ2F0aW9uQWN0aW9uKSkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IlwnIik7Ci0gICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmPiBoaXRUZXN0
UmVzdWx0UmVmID0gYWRvcHRXSyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25Db3B5SGl0VGVzdFJl
c3VsdChuYXZpZ2F0aW9uQWN0aW9uKSk7CisgICAgYXV0byBoaXRUZXN0UmVzdWx0UmVmID0gYWRv
cHRXSyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25Db3B5SGl0VGVzdFJlc3VsdChuYXZpZ2F0aW9u
QWN0aW9uKSk7CiAgICAgaWYgKGhpdFRlc3RSZXN1bHRSZWYpIHsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tCdW5kbGVOb2RlSGFuZGxlUmVmPiBub2RlSGFuZGxlUmVmID0gYWRvcHRXSyhXS0J1bmRs
ZUhpdFRlc3RSZXN1bHRDb3B5Tm9kZUhhbmRsZShoaXRUZXN0UmVzdWx0UmVmLmdldCgpKSk7Cisg
ICAgICAgIGF1dG8gbm9kZUhhbmRsZVJlZiA9IGFkb3B0V0soV0tCdW5kbGVIaXRUZXN0UmVzdWx0
Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJlc3VsdFJlZi5nZXQoKSkpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvcmlnaW5hdGluZyBmcm9tICIpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGVIYW5k
bGVSZWYuZ2V0KCkpKTsKICAgICB9CkBAIC0xNDAwLDEyICsxMzAzLDcgQEAgV0tCdW5kbGVQYWdl
UG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2Uo
V0tCdW5kbGVQYWcKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKTsKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpICYmIGlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSAmJiBX
S1VSTFJlc3BvbnNlSXNBdHRhY2htZW50KHJlc3BvbnNlKSkgewotICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmaWxl
bmFtZSA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShyZXNwb25z
ZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlBvbGljeSBkZWxlZ2F0
ZTogcmVzb3VyY2UgaXMgYW4gYXR0YWNobWVudCwgc3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhmaWxlbmFtZSkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwnXG4iKTsKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygp
KTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWFrZVN0
cmluZygiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdnZXN0
ZWQgZmlsZSBuYW1lIFwnIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVN1
Z2dlc3RlZEZpbGVuYW1lKHJlc3BvbnNlKSkpLCAiXCdcbiIpKTsKICAgICB9CiAKICAgICByZXR1
cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uUGFzc1Rocm91Z2g7CkBAIC0xNDcxLDEwICsxMzY5
LDEwIEBAIHN0YXRpYyBXVEY6OlN0cmluZyBhZGRMZWFkaW5nU3BhY2VTdHJpcFRyYWlsaW5nU3Bh
Y2VzQWRkTmV3bGluZShjb25zdCBXVEY6OlN0cmluCiAKIHN0YXRpYyBXVEY6OlN0cmluZyBsYXN0
RmlsZVVSTFBhdGhDb21wb25lbnQoY29uc3QgV1RGOjpTdHJpbmcmIHBhdGgpCiB7Ci0gICAgc2l6
ZV90IHBvcyA9IHBhdGguZmluZCgiZmlsZTovLyIpOworICAgIGF1dG8gcG9zID0gcGF0aC5maW5k
KCJmaWxlOi8vIik7CiAgICAgQVNTRVJUKFdURjo6bm90Rm91bmQgIT0gcG9zKTsKIAotICAgIFdU
Rjo6U3RyaW5nIHRtcFBhdGggPSBwYXRoLnN1YnN0cmluZyhwb3MgKyA3KTsKKyAgICBhdXRvIHRt
cFBhdGggPSBwYXRoLnN1YnN0cmluZyhwb3MgKyA3KTsKICAgICBpZiAodG1wUGF0aC5sZW5ndGgo
KSA8IDIpIC8vIEtlZXAgdGhlIGxvbmUgc2xhc2ggdG8gYXZvaWQgZW1wdHkgb3V0cHV0LgogICAg
ICAgICByZXR1cm4gdG1wUGF0aDsKIApAQCAtMTUyMSwxMSArMTQxOSw3IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dChXS1N0cmluZ1JlZiBzdGF0dXNiYXJU
ZXh0KQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU3Rh
dHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRF
IFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDoiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyhzdGF0dXNiYXJUZXh0KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOworICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiVUkg
REVMRUdBVEUgU1RBVFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0OiIsIHRvV1RGU3RyaW5nKHN0
YXR1c2JhclRleHQpLCAnXG4nKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxs
UnVuSmF2YVNjcmlwdEFsZXJ0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYp
CkBAIC0xNTU5LDE1ICsxNDUzLDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlYWNo
QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYKICAgICAgICAg
Ly8gUm91bmRpbmcgdXAgb3IgZG93biBkb2VzIG5vdCByZWFsbHkgbWF0dGVyIGZvciB0aGVzZSB0
ZXN0cy4gSXQncwogICAgICAgICAvLyBzdWZmaWNpZW50IHRvIGp1c3QgZ2V0IGEgcmFuZ2Ugb2Yg
MTAwMDAgdG8gZGV0ZXJtaW5lIGlmIHdlIHdlcmUKICAgICAgICAgLy8gYWJvdmUgb3IgYmVsb3cg
YSB0aHJlc2hvbGQuCi0gICAgICAgIGludDY0X3QgdHJ1bmNhdGVkU3BhY2VOZWVkZWQgPSAodG90
YWxCeXRlc05lZWRlZCAvIDEwMDAwKSAqIDEwMDAwOwotCi0gICAgICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBE
RUxFR0FURSBBUFBMSUNBVElPTiBDQUNIRSBDQUxMQkFDSzogZXhjZWVkZWRBcHBsaWNhdGlvbkNh
Y2hlT3JpZ2luUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihvcmlnaW4pKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgdG90YWxTcGFjZU5lZWRlZDp+Iik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTnVtYmVyKHRydW5jYXRlZFNwYWNlTmVlZGVkKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRl
eHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgYXV0byB0cnVuY2F0ZWRTcGFj
ZU5lZWRlZCA9ICh0b3RhbEJ5dGVzTmVlZGVkIC8gMTAwMDApICogMTAwMDA7CisgICAgICAgIGlu
amVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgQVBQTElDQVRJ
T04gQ0FDSEUgQ0FMTEJBQ0s6IGV4Y2VlZGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhRm9y
U2VjdXJpdHlPcmlnaW46Iiwgc3RyaW5nKG9yaWdpbiksICIgdG90YWxTcGFjZU5lZWRlZDp+Iiwg
dHJ1bmNhdGVkU3BhY2VOZWVkZWQsICdcbicpKTsKICAgICB9CiAKICAgICBpZiAoaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25D
YWNoZVF1b3RhKCkpCkBAIC0xNTgwLDE1ICsxNDY3LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZFJlYWNoQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdLU2VjdXJpdHlPcmlnaW5S
ZWYKIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShX
S1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgZGF0YWJhc2VOYW1lLCBXS1N0
cmluZ1JlZiBkYXRhYmFzZURpc3BsYXlOYW1lLCB1aW50NjRfdCBjdXJyZW50UXVvdGFCeXRlcywg
dWludDY0X3QgY3VycmVudE9yaWdpblVzYWdlQnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnREYXRhYmFz
ZVVzYWdlQnl0ZXMsIHVpbnQ2NF90IGV4cGVjdGVkVXNhZ2VCeXRlcykKIHsKICAgICBhdXRvJiBp
bmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBpZiAoaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkg
ewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2Vl
ZGVkRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOiIpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChzZWN1cml0eU9yaWdpblRvU3RyKG9yaWdpbikpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiBkYXRhYmFzZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodG9XVEZTdHJpbmcoZGF0YWJhc2VOYW1lKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgfQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBEYXRhYmFzZUNhbGxiYWNrcygpKQorICAgICAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExC
QUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiLCBzdHJpbmcob3Jp
Z2luKSwgIiBkYXRhYmFzZToiLCB0b1dURlN0cmluZyhkYXRhYmFzZU5hbWUpLCAnXG4nKSk7CiAK
ICAgICB1aW50NjRfdCBkZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7CiAgICAgZG91Ymxl
IHRlc3REZWZhdWx0UXVvdGEgPSBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmRhdGFiYXNl
RGVmYXVsdFF1b3RhKCk7CkBAIC0xNjAxLDEyICsxNDgxLDcgQEAgdWludDY0X3QgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3Jp
Z2luLAogICAgIGlmIChtYXhRdW90YSA+PSAwKSB7CiAgICAgICAgIGlmIChkZWZhdWx0UXVvdGEg
PCBleHBlY3RlZFVzYWdlQnl0ZXMgJiYgZXhwZWN0ZWRVc2FnZUJ5dGVzIDw9IG1heFF1b3RhKSB7
CiAgICAgICAgICAgICBuZXdRdW90YSA9IGV4cGVjdGVkVXNhZ2VCeXRlczsKLQotICAgICAgICAg
ICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVhc2Vk
IHF1b3RhIHRvICIpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIobmV3
UXVvdGEpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAg
ICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CisgICAgICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERF
TEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBpbmNyZWFzZWQgcXVvdGEgdG8gIiwgbmV3UXVvdGEs
ICdcbicpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbmV3UXVvdGE7CkBAIC0xNjc1
LDEzICsxNTUwLDggQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdGlu
ZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUu
aXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAg
ICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9N
UmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdl
LCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
XG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0lu
RE9NUmFuZ2U6IiwgcmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xu
JykpOwogICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93
RWRpdGluZygpOwogfQogCkBAIC0xNjkxLDEzICsxNTYxLDggQEAgYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OnNob3VsZEVuZEVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAg
ICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRp
dGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRU
ZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgfQorICAgIGlmIChpbmplY3RlZEJ1
bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgICAg
IGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTog
c2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6IiwgcmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQu
Z2V0KCksIHJhbmdlKSwgJ1xuJykpOwogICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVu
bmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCBhNjI1NTg5NzI3
YmM3MWI3NDFlY2YyNTY1MTUyMWVmYjRmNDk5N2YzLi43MWNjMDE4ZjQxMjYwMjM1ZTllNDdhYjk0
YTA0NzNiNGYzNjFjMTEwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9u
YXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJ
bmplY3RlZEJ1bmRsZVBhZ2UuaCIKICNpbmNsdWRlICJKU1Rlc3RSdW5uZXIuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNs
dWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ1Rlc3RS
dW5uZXJVdGlscy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+
CkBAIC02OSw3ICs2OSw3IEBAIFJlZjxUZXN0UnVubmVyPiBUZXN0UnVubmVyOjpjcmVhdGUoKQog
fQogCiBUZXN0UnVubmVyOjpUZXN0UnVubmVyKCkKLSAgICA6IG1fdXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSkpCisgICAgOiBt
X3VzZXJTdHlsZVNoZWV0TG9jYXRpb24odG9XSygiIikpCiB7CiAgICAgcGxhdGZvcm1Jbml0aWFs
aXplKCk7CiB9CkBAIC04MywzNCArODMsMTAyIEBAIEpTQ2xhc3NSZWYgVGVzdFJ1bm5lcjo6d3Jh
cHBlckNsYXNzKCkKICAgICByZXR1cm4gSlNUZXN0UnVubmVyOjp0ZXN0UnVubmVyQ2xhc3MoKTsK
IH0KIAorc3RhdGljIFdLQnVuZGxlUGFnZVJlZiBwYWdlKCkKK3sKKyAgICByZXR1cm4gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworfQorCitzdGF0aWMgV0tCdW5k
bGVGcmFtZVJlZiBtYWluRnJhbWUoKQoreworICAgIHJldHVybiBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUocGFnZSgpKTsKK30KKworc3RhdGljIEpTQ29udGV4dFJlZiBtYWluSlNDb250ZXh0KCkK
K3sKKyAgICByZXR1cm4gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFt
ZSgpKTsKK30KKwogdm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KCkKIHsKLSAgICBXS0J1bmRsZVBh
Z2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsK
LSAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQocGFnZSk7CisgICAgV0tCdW5kbGVQYWdlRm9y
Y2VSZXBhaW50KHBhZ2UoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheUFuZFRyYWNr
UmVwYWludHMoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IFdUUjo6cGFnZSgp
OwogICAgIFdLQnVuZGxlUGFnZUZvcmNlUmVwYWludChwYWdlKTsKICAgICBXS0J1bmRsZVBhZ2VT
ZXRUcmFja3NSZXBhaW50cyhwYWdlLCB0cnVlKTsKICAgICBXS0J1bmRsZVBhZ2VSZXNldFRyYWNr
ZWRSZXBhaW50cyhwYWdlKTsKIH0KIAorc3RhdGljIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB0
b1dLKGRvdWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2
YWx1ZSkpOworfQorCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBjcmVhdGVX
S0RpY3Rpb25hcnkoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxjb25zdCBjaGFyKiwg
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4+IHBhaXJzKQoreworICAgIGF1dG8gc2l6ZSA9IHBhaXJz
LnNpemUoKTsKKyAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IGtleXMoc2l6ZSk7CisgICAgVmVjdG9y
PFdLVHlwZVJlZj4gdmFsdWVzKHNpemUpOworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4+IHN0cmluZ3Moc2l6ZSk7CisgICAgZm9yIChhdXRvJiBwYWlyIDogcGFpcnMpIHsKKyAg
ICAgICAgYXV0byBrZXkgPSB0b1dLKHBhaXIuZmlyc3QpOworICAgICAgICBrZXlzLmFwcGVuZChr
ZXkuZ2V0KCkpOworICAgICAgICB2YWx1ZXMuYXBwZW5kKHBhaXIuc2Vjb25kLmdldCgpKTsKKyAg
ICAgICAgc3RyaW5ncy5hcHBlbmQoV1RGTW92ZShrZXkpKTsKKyAgICB9CisgICAgcmV0dXJuIGFk
b3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKGtleXMuZGF0YSgpLCB2YWx1ZXMuZGF0YSgpLCBzaXpl
KSk7Cit9CisKK3N0YXRpYyBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHBvc3RTeW5jaHJvbm91c01l
c3NhZ2VXaXRoUmV0dXJuVmFsdWUoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0g
bnVsbHB0cikKK3sKKyAgICBXS1R5cGVSZWYgcmF3UmV0dXJuVmFsdWUgPSBudWxscHRyOworICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlLCAmcmF3UmV0dXJuVmFsdWUpOwor
ICAgIHJldHVybiBhZG9wdFdLKHJhd1JldHVyblZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oY29uc3QgY2hhciogbmFtZSwgV0tU
eXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICByZXR1cm4gYm9vbGVhblZhbHVlKHBvc3RT
eW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0dXJuVmFsdWUobmFtZSwgdmFsdWUpKTsKK30KKworc3Rh
dGljIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRo
UmV0dXJuVmFsdWUoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikK
K3sKKyAgICBXS1R5cGVSZWYgcmF3UmV0dXJuVmFsdWUgPSBudWxscHRyOworICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKSwgdG9XSyhuYW1lKS5n
ZXQoKSwgdmFsdWUsICZyYXdSZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIGFkb3B0V0socmF3UmV0
dXJuVmFsdWUpOworfQorCitzdGF0aWMgYm9vbCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4oY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0
cikKK3sKKyAgICByZXR1cm4gYm9vbGVhblZhbHVlKHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdl
V2l0aFJldHVyblZhbHVlKG5hbWUsIHZhbHVlKSk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NChjb25zdCBjaGFyKiBuYW1lLCBX
S1R5cGVSZWYgdmFsdWUgPSBudWxscHRyKQoreworICAgIHJldHVybiB1aW50NjRWYWx1ZShwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQor
CitzdGF0aWMgdWludDY0X3QgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2NChj
b25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVybiB1aW50NjRWYWx1ZShwb3N0U3luY2hyb25v
dXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5hbWUpKTsKK30KKworc3RhdGljIHZvaWQgb3ZlcnJp
ZGVQcmVmZXJlbmNlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgYXV0byYg
YnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxlT3ZlcnJp
ZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoYnVuZGxlLmJ1bmRsZSgpLCBidW5kbGUucGFn
ZUdyb3VwKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlKTsKK30KKwogYm9vbCBUZXN0UnVubmVy
OjpzaG91bGREdW1wUGl4ZWxzKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJH
ZXREdW1wUGl4ZWxzIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwot
ICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25v
dXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiR2V0RHVtcFBpeGVscyIpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldER1bXBQaXhlbHMoYm9vbCBkdW1wUGl4ZWxzKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldER1bXBQaXhlbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGR1bXBQaXhlbHMpKTsK
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldER1bXBQaXhlbHMiLCBkdW1w
UGl4ZWxzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkdW1wQXNUZXh0KGJvb2wgZHVtcFBpeGVs
cykKQEAgLTEyMiwxOCArMTkwLDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dChib29s
IGR1bXBQaXhlbHMpCiAgICAgCiBXaGF0VG9EdW1wIFRlc3RSdW5uZXI6OndoYXRUb0R1bXAoKSBj
b25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldFdoYXRUb0R1bXAiKSk7Ci0gICAg
V0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlE
KHJldHVybkRhdGEpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXaGF0VG9EdW1wPihXS1VJbnQ2NEdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KHJldHVybkRhdGEpKS5nZXQoKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
aGF0VG9EdW1wPihwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KCJHZXRXaGF0
VG9EdW1wIikpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdoYXRUb0R1bXAoV2hhdFRvRHVt
cCB3aGF0VG9EdW1wKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFdoYXRUb0R1bXAi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4od2hhdFRvRHVtcCkpKTsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFdoYXRUb0R1bXAiLCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4od2hhdFRvRHVtcCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEN1c3Rv
bVBvbGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQpAQCAtMTU4LDI2
ICsyMjAsMTkgQEAgdm9pZCBUZXN0UnVubmVyOjp3YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCkK
IAogdm9pZCBUZXN0UnVubmVyOjp3YWl0VW50aWxEb25lKCkKIHsKLSAgICBhdXRvJiBpbmplY3Rl
ZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpOwogCiAgICAgc2V0V2Fp
dFVudGlsRG9uZSh0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VW50aWxEb25l
KGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0V2FpdFVudGlsRG9u
ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlNldFdhaXRVbnRpbERvbmUiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6
c2hvdWxkV2FpdFVudGlsRG9uZSgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkdldFdhaXRVbnRpbERvbmUiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRy
OwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRh
dGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiR2V0V2FpdFVudGlsRG9uZSIpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6Om5vdGlmeURvbmUoKQpAQCAtMjEwLDE4ICsyNjUsMTIgQEAgdm9p
ZCBUZXN0UnVubmVyOjpmb3JjZUltbWVkaWF0ZUNvbXBsZXRpb24oKQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRE
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzIiwgdmFsdWUpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OnNo
b3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJHZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRh
ID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIs
ICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tC
b29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdL
KHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1
cm4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldER1bXBGcmFtZUxv
YWRDYWxsYmFja3MiKTsKIH0KIAogdW5zaWduZWQgVGVzdFJ1bm5lcjo6aW1hZ2VDb3VudEluR2Vu
ZXJhbFBhc3RlYm9hcmQoKSBjb25zdApAQCAtMjMxLDE4ICsyODAsMTQgQEAgdW5zaWduZWQgVGVz
dFJ1bm5lcjo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSBjb25zdAogCiB2b2lkIFRl
c3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3Rh
cnQsIGJvb2wgYWxsRnJhbWVzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3Vy
Y2VXSyA9IHRvV0soc291cmNlKTsKLQotICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTY3JpcHQoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBzb3VyY2VXSy5nZXQoKSwK
KyAgICBXS0J1bmRsZVBhZ2VBZGRVc2VyU2NyaXB0KHBhZ2UoKSwgdG9XSyhzb3VyY2UpLmdldCgp
LAogICAgICAgICAocnVuQXRTdGFydCA/IGtXS0luamVjdEF0RG9jdW1lbnRTdGFydCA6IGtXS0lu
amVjdEF0RG9jdW1lbnRFbmQpLAogICAgICAgICAoYWxsRnJhbWVzID8ga1dLSW5qZWN0SW5BbGxG
cmFtZXMgOiBrV0tJbmplY3RJblRvcEZyYW1lT25seSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNvdXJjZVdLID0gdG9XSyhzb3VyY2UpOwot
Ci0gICAgV0tCdW5kbGVQYWdlQWRkVXNlclN0eWxlU2hlZXQoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBzb3VyY2VXSy5nZXQoKSwKKyAgICBXS0J1bmRsZVBhZ2VB
ZGRVc2VyU3R5bGVTaGVldChwYWdlKCksIHRvV0soc291cmNlKS5nZXQoKSwKICAgICAgICAgKGFs
bEZyYW1lcyA/IGtXS0luamVjdEluQWxsRnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkp
KTsKIH0KIApAQCAtMjUzLDI5ICsyOTgsMTcgQEAgdm9pZCBUZXN0UnVubmVyOjprZWVwV2ViSGlz
dG9yeSgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwg
SlNTdHJpbmdSZWYgc2hvd1VJLCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKLSAgICBXS0J1bmRsZVBh
Z2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CisgICAgV0tC
dW5kbGVQYWdlRXhlY3V0ZUVkaXRpbmdDb21tYW5kKHBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwg
dG9XSyh2YWx1ZSkuZ2V0KCkpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8V0tGaW5kT3B0aW9ucz4g
ZmluZE9wdGlvbnNGcm9tQXJyYXkoSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogewot
ICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwot
ICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1l
KGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIGF1
dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImxlbmd0aCIpKTsKLSAgICBKU09iamVjdFJlZiBvcHRpb25zQXJyYXkgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgb3B0aW9uc0FycmF5QXNWYWx1ZSwgMCk7Ci0gICAgSlNWYWx1ZVJlZiBs
ZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBs
ZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNv
bnRleHQsIGxlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQorICAg
IGF1dG8gY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKKyAgICBhdXRvIG9wdGlvbnNBcnJheSA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBvcHRpb25zQXJyYXlBc1ZhbHVlLCBudWxscHRyKTsK
KyAgICBhdXRvIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG9wdGlvbnNBcnJheSk7CiAg
ICAgV0tGaW5kT3B0aW9ucyBvcHRpb25zID0gMDsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFs
dWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvcHRpb25z
QXJyYXksIGksIDApOwotICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1
ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIG9wdGlvbk5hbWUgPSBh
ZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7Ci0KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byBvcHRpb25O
YW1lID0gY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgo
Y29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKSk7CiAgICAgICAgIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJDYXNlSW5zZW5zaXRpdmUiKSkKICAg
ICAgICAgICAgIG9wdGlvbnMgfD0ga1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7CiAgICAg
ICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQo
KSwgIkF0V29yZFN0YXJ0cyIpKQpAQCAtMjk2LDcgKzMyOSw3IEBAIHN0YXRpYyBPcHRpb25hbDxX
S0ZpbmRPcHRpb25zPiBmaW5kT3B0aW9uc0Zyb21BcnJheShKU1ZhbHVlUmVmIG9wdGlvbnNBcnJh
eUFzVmFsCiBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgdGFyZ2V0LCBK
U1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFzVmFsdWUpCiB7CiAgICAgaWYgKGF1dG8gb3B0aW9ucyA9
IGZpbmRPcHRpb25zRnJvbUFycmF5KG9wdGlvbnNBcnJheUFzVmFsdWUpKQotICAgICAgICByZXR1
cm4gV0tCdW5kbGVQYWdlRmluZFN0cmluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMpOworICAgICAgICByZXR1
cm4gV0tCdW5kbGVQYWdlRmluZFN0cmluZyhwYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgKm9w
dGlvbnMpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMzA0LDI4ICszMzcsMjMgQEAgYm9v
bCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBv
cHRpb25zQXJyYXlBc1ZhbHVlKQogdm9pZCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nTWF0Y2hlc0lu
UGFnZShKU1N0cmluZ1JlZiB0YXJnZXQsIEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkK
IHsKICAgICBpZiAoYXV0byBvcHRpb25zID0gZmluZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9uc0Fy
cmF5QXNWYWx1ZSkpCi0gICAgICAgIHJldHVybiBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nTWF0Y2hl
cyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sodGFyZ2V0
KS5nZXQoKSwgKm9wdGlvbnMpOworICAgICAgICBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nTWF0Y2hl
cyhwYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0SW5kaWNlcyhKU1ZhbHVlUmVmIG1hdGNoSW5kaWNl
c0FzVmFsdWUsIEpTU3RyaW5nUmVmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCBzZWxlY3Rpb25Pbmx5
KQogewogICAgIGF1dG8mIGJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAg
ICBhdXRvIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShidW5kbGUucGFnZSgp
LT5wYWdlKCkpOwotICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0
Q29udGV4dChtYWluRnJhbWUpOwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRvcHQo
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvIGNvbnRl
eHQgPSBtYWluSlNDb250ZXh0KCk7CiAgICAgYXV0byBtYXRjaEluZGljZXNPYmplY3QgPSBKU1Zh
bHVlVG9PYmplY3QoY29udGV4dCwgbWF0Y2hJbmRpY2VzQXNWYWx1ZSwgMCk7Ci0gICAgYXV0byBs
ZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2Jq
ZWN0LCBsZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVt
YmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gbGVu
Z3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0KTsKIAogICAgIGF1
dG8gaW5kaWNlcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgYXV0byBs
ZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5n
dGhWYWx1ZSwgMCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQs
IG1hdGNoSW5kaWNlc09iamVjdCwgaSwgMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
QXRJbmRleChjb250ZXh0LCBtYXRjaEluZGljZXNPYmplY3QsIGksIG51bGxwdHIpOwogICAgICAg
ICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBhdXRvIGluZGV4ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzdGQ6
OnJvdW5kKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpKSk7CisgICAg
ICAgIGF1dG8gaW5kZXggPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKEpTVmFsdWVUb051bWJlcihj
b250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpKTsKICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oaW5k
aWNlcy5nZXQoKSwgaW5kZXguZ2V0KCkpOwogICAgIH0KICAgICBXS0J1bmRsZVBhZ2VSZXBsYWNl
U3RyaW5nTWF0Y2hlcyhidW5kbGUucGFnZSgpLT5wYWdlKCksIGluZGljZXMuZ2V0KCksIHRvV0so
cmVwbGFjZW1lbnRUZXh0KS5nZXQoKSwgc2VsZWN0aW9uT25seSk7CkBAIC0zMzQsMTEgKzM2Miw3
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cmVwbGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKEpTVmFsdWVS
ZWYgbWF0Y2hJbmRpY2VzQXNWYWx1ZSwgSlNTCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0
YWJhc2VzKCkKIHsKICAgICBXS0J1bmRsZUNsZWFyQWxsRGF0YWJhc2VzKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEZWxl
dGVBbGxJbmRleGVkRGF0YWJhc2VzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0KLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMiLCB0
cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1
b3RhKQpAQCAtMzQ4LDI5ICszNzIsMjcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1
b3RhKHVpbnQ2NF90IHF1b3RhKQogCiB2b2lkIFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2Uo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN5bmNMb2NhbFN0b3JhZ2UiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHRydWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN5bmNM
b2NhbFN0b3JhZ2UiLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxp
Y2F0aW9uQ2FjaGVzKCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGUo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRs
ZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGUocGFnZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQogewot
ICAgIFdLQnVuZGxlUGFnZUNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7Cisg
ICAgV0tCdW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKHBhZ2UoKSwgdG9X
SyhvcmlnaW4pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGlt
dW1TaXplKHVpbnQ2NF90IHNpemUpCiB7Ci0gICAgV0tCdW5kbGVQYWdlU2V0QXBwQ2FjaGVNYXhp
bXVtU2l6ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHNpemUp
OworICAgIFdLQnVuZGxlUGFnZVNldEFwcENhY2hlTWF4aW11bVNpemUocGFnZSgpLCBzaXplKTsK
IH0KIAogbG9uZyBsb25nIFRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JP
cmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIHJldHVybiBXS0J1bmRsZVBhZ2VHZXRB
cHBDYWNoZVVzYWdlRm9yT3JpZ2luKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlR2V0
QXBwQ2FjaGVVc2FnZUZvck9yaWdpbihwYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90
YSgpCkBAIC0zODEsMTU4ICs0MDMsMTA4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxsb3dJbmNy
ZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWVSZWYg
c3RyaW5nQXJyYXlUb0pTKEpTQ29udGV4dFJlZiBjb250ZXh0LCBXS0FycmF5UmVmIHN0cmluZ3Mp
CiB7CiAgICAgY29uc3Qgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUoc3RyaW5ncyk7Ci0K
LSAgICBKU1ZhbHVlUmVmIGFycmF5UmVzdWx0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwg
MCwgMCwgMCk7Ci0gICAgSlNPYmplY3RSZWYgYXJyYXlPYmogPSBKU1ZhbHVlVG9PYmplY3QoY29u
dGV4dCwgYXJyYXlSZXN1bHQsIDApOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJh
eShjb250ZXh0LCAwLCAwLCBudWxscHRyKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKLSAgICAgICAgV0tTdHJpbmdSZWYgc3RyaW5nUmVmID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChzdHJpbmdzLCBpKSk7Ci0gICAgICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdKUyA9IHRvSlMoc3RyaW5nUmVmKTsKLSAg
ICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXlPYmosIGksIEpT
VmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIHN0cmluZ0pTLmdldCgpKSwgMCk7CisgICAgICAgIGF1
dG8gc3RyaW5nUmVmID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJ
bmRleChzdHJpbmdzLCBpKSk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNv
bnRleHQsIGFycmF5LCBpLCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHN0cmluZ1Jl
ZikuZ2V0KCkpLCBudWxscHRyKTsKICAgICB9Ci0KLSAgICByZXR1cm4gYXJyYXlSZXN1bHQ7Cisg
ICAgcmV0dXJuIGFycmF5OwogfQogCiBKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRo
QXBwbGljYXRpb25DYWNoZSgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S0FycmF5UmVmPiBvcmlnaW5zID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5T3JpZ2luc1dpdGhB
cHBsaWNhdGlvbkNhY2hlKHBhZ2UpKTsKLQotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1l
ID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250
ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0KLSAg
ICByZXR1cm4gc3RyaW5nQXJyYXlUb0pTKGNvbnRleHQsIG9yaWdpbnMuZ2V0KCkpOworICAgIHJl
dHVybiBzdHJpbmdBcnJheVRvSlMobWFpbkpTQ29udGV4dCgpLCBhZG9wdFdLKFdLQnVuZGxlUGFn
ZUNvcHlPcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUocGFnZSgpKSkuZ2V0KCkpOwogfQogCiBi
b29sIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKIHsKLSAg
ICByZXR1cm4gV0tCdW5kbGVQYWdlSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKKyAgICBy
ZXR1cm4gV0tCdW5kbGVQYWdlSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQocGFnZSgpLCB0b1dLKG5h
bWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cygpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldENhbk9wZW5XaW5kb3dzIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZSh0cnVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0Q2Fu
T3BlbldpbmRvd3MiLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9y
RW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFhTU0F1ZGl0
b3JFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RS
dW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgp
LCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJL
aXRYU1NBdWRpdG9yRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dE1lZGlhRGV2aWNlc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJX
ZWJLaXRNZWRpYURldmljZXNFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJl
ZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVu
ZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQ
cmVmZXJlbmNlKCJXZWJLaXRNZWRpYURldmljZXNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkKGJvb2wgZW5h
YmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNF
bmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5u
ZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBr
ZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRX
ZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRDdXN0b21Vc2VyQWdlbnQoSlNTdHJpbmdSZWYgdXNlckFnZW50KQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEN1c3RvbVVzZXJBZ2VudCIpKTsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgdG9XSyh1c2VyQWdlbnQpLmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRDdXN0b21Vc2VyQWdlbnQiLCB0b1dLKHVz
ZXJBZ2VudCkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
a2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNl
Rm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFn
ZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVu
Y2UoIldlYktpdFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIpKTsK
LSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsK
LSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVk
QnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBl
bmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0TW9kZXJuTWVkaWFD
b250cm9sc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXZWJH
TDJFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
a2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V2ViR0wy
RW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVu
bmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwg
a2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0
V2ViR0wyRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdyaXRh
YmxlU3RyZWFtQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldl
YktpdFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3Rl
ZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0V3JpdGFibGVTdHJlYW1BUElFbmFibGVkIiwgZW5hYmxlZCk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VHJhbnNmb3JtU3RyZWFtQVBJRW5hYmxlZChib29s
IGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFRyYW5zZm9ybVN0cmVhbUFQSUVu
YWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5l
cihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtl
eS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFRy
YW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRSZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiV2ViS2l0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCIpKTsKLSAgICBh
dXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBX
S0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxl
LmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVk
KTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0UmVhZGFibGVCeXRlU3RyZWFt
QVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEVuY3J5cHRl
ZE1lZGlhQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktp
dEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFBy
ZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1
bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRl
UHJlZmVyZW5jZSgiV2ViS2l0RW5jcnlwdGVkTWVkaWFBUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQoYm9vbCBl
bmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5h
YmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVy
KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5
LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0UGlj
dHVyZUluUGljdHVyZUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRHZW5lcmljQ3VlQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIldlYktpdEdlbmVyaWNDdWVBUElFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVu
ZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVC
b29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVj
dGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3Zl
cnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRHZW5lcmljQ3VlQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wgZW5h
YmxlZCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShl
bmFibGVkKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGVuYWJs
ZWQpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZSIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBU
b0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJvb2wgc2hvdWxkU3dhcCkKIHsKLSAg
ICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGRTd2FwKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoaW5qZWN0ZWRCdW5kbGUucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldFNob3VsZFN3YXBUb0VwaGVt
ZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIiwgc2hvdWxkU3dhcCk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJv
b2wgc2hvdWxkU3dhcCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZFN3
YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxk
U3dhcCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJT
ZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iLCBzaG91bGRTd2Fw
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxl
VVJMcyhib29sIGVuYWJsZWQpCkBAIC01NTUsOSArNTI3LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpz
ZXROZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyayhib29sIG5lZWRzUXVpcmspCiAg
ICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0UGx1Z2luc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5q
ZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVP
dmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUo
KSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAg
V1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFBsdWdpbnNFbmFibGVkIiwgZW5hYmxlZCk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChi
b29sIGVuYWJsZWQpCkBAIC01OTEsOCArNTYxLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVP
cmlnaW5BY2Nlc3NBbGxvd0xpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3QK
IGJvb2wgVGVzdFJ1bm5lcjo6aXNQYWdlQm94VmlzaWJsZShpbnQgcGFnZUluZGV4KQogewogICAg
IGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAg
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGlu
amVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICByZXR1cm4gV0tCdW5kbGVJc1BhZ2VC
b3hWaXNpYmxlKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBtYWluRnJhbWUsIHBhZ2VJbmRleCk7
CisgICAgcmV0dXJuIFdLQnVuZGxlSXNQYWdlQm94VmlzaWJsZShpbmplY3RlZEJ1bmRsZS5idW5k
bGUoKSwgbWFpbkZyYW1lKCksIHBhZ2VJbmRleCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpT
U3RyaW5nUmVmIHZhbHVlKQpAQCAtNjAwLDE2ICs1NjksMTQgQEAgdm9pZCBUZXN0UnVubmVyOjpz
ZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwg
SlNTdHIKICAgICBpZiAoIWVsZW1lbnQgfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBlbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVOb2RlSGFu
ZGxlUmVmPiBub2RlSGFuZGxlID0gYWRvcHRXSyhXS0J1bmRsZU5vZGVIYW5kbGVDcmVhdGUoY29u
dGV4dCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oZWxlbWVudCkpKTsKLSAgICBXS0J1bmRsZU5v
ZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JVc2VyKG5vZGVIYW5kbGUuZ2V0KCks
IHRvV0sodmFsdWUpLmdldCgpKTsKKyAgICBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRF
bGVtZW50VmFsdWVGb3JVc2VyKGFkb3B0V0soV0tCdW5kbGVOb2RlSGFuZGxlQ3JlYXRlKGNvbnRl
eHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGVsZW1lbnQpKSkuZ2V0KCksIHRvV0sodmFsdWUp
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdWRpb1Jlc3VsdChKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBkYXRhKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwogICAgIC8vIEZJWE1FICgxMjMwNTgpOiBV
c2UgYSBKU0MgQVBJIHRvIGdldCBidWZmZXIgY29udGVudHMgb25jZSBzdWNoIGlzIGV4cG9zZWQu
Ci0gICAgV0tSZXRhaW5QdHI8V0tEYXRhUmVmPiBhdWRpb0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxl
Q3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRl
eHQsIGRhdGEpKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5zZXRBdWRpb1Jlc3VsdChhdWRpb0RhdGEu
Z2V0KCkpOworICAgIGluamVjdGVkQnVuZGxlLnNldEF1ZGlvUmVzdWx0KGFkb3B0V0soV0tCdW5k
bGVDcmVhdGVXS0RhdGFGcm9tVUludDhBcnJheShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgY29u
dGV4dCwgZGF0YSkpLmdldCgpKTsKICAgICBzZXRXaGF0VG9EdW1wKFdoYXRUb0R1bXA6OkF1ZGlv
KTsKICAgICBzZXREdW1wUGl4ZWxzKGZhbHNlKTsKIH0KQEAgLTYyMSwzMyArNTg4LDMwIEBAIHVu
c2lnbmVkIFRlc3RSdW5uZXI6OndpbmRvd0NvdW50KCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVh
ckJhY2tGb3J3YXJkTGlzdCgpCiB7Ci0gICAgV0tCdW5kbGVDbGVhckhpc3RvcnlGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5k
bGVDbGVhckhpc3RvcnlGb3JUZXN0aW5nKHBhZ2UoKSk7CiB9CiAKLS8vIE9iamVjdCBDcmVhdGlv
bgotCi12b2lkIFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9p
ZCBUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewot
ICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgInRlc3RSdW5uZXIiLCB0aGlz
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlLCBleGNlcHRpb24pOworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQs
ICJ0ZXN0UnVubmVyIiwgdGhpcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3Bl
Y3RvcigpCiB7Ci0gICAgV0tCdW5kbGVJbnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3Bl
Y3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBX
S0J1bmRsZUluc3BlY3RvclNob3coV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKLSAgICBXS0J1bmRs
ZUluc3BlY3RvckNsb3NlKFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvckNsb3Nl
KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihwYWdlKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgV0tCdW5k
bGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlwdEZvclRlc3QoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9y
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSksIHNjcmlwdFdLLmdl
dCgpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvckV2YWx1YXRlU2NyaXB0Rm9yVGVzdChXS0J1bmRs
ZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgpKSwgdG9XSyhzY3JpcHQpLmdldCgpKTsKIH0KIAotdHlw
ZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29y
bGRSZWY+ID4gV29ybGRNYXA7Cit1c2luZyBXb3JsZE1hcCA9IFdURjo6SGFzaE1hcDx1bnNpZ25l
ZCwgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4+Owogc3RhdGljIFdvcmxkTWFw
JiB3b3JsZE1hcCgpCiB7CiAgICAgc3RhdGljIFdvcmxkTWFwJiBtYXAgPSAqbmV3IFdvcmxkTWFw
OwpAQCAtNjU2LDEyICs2MjAsMTEgQEAgc3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCiAKIHVu
c2lnbmVkIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZChXS0J1bmRsZVNjcmlwdFdvcmxkUmVm
IHdvcmxkKQogewotICAgIFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgp
LmVuZCgpOwotICAgIGZvciAoV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAo
KS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3
b3JsZCkKLSAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OworICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHRoZSBhbnRpLXBhdHRlcm4gb2YgaXRlcmF0aW5nIGFuIGVudGlyZSBtYXAuIFR5cGljYWxseSB3
ZSB1c2UgYSBwYWlyIG9mIG1hcHMgb3IganVzdCBhIHZlY3RvciBpbiBhIGNhc2UgbGlrZSB0aGlz
LgorICAgIGZvciAoYXV0byYgbWFwRW50cnkgOiB3b3JsZE1hcCgpKSB7CisgICAgICAgIGlmICht
YXBFbnRyeS52YWx1ZSA9PSB3b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBtYXBFbnRyeS5rZXk7
CiAgICAgfQotCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTY4MSw3ICs2NDQsNyBAQCB2b2lkIFRl
c3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKEpTQ29udGV4dFJlZiBjb250
ZXh0LCB1bnNpZ25lZCB3bwogCiAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxl
RnJhbWVGb3JKYXZhU2NyaXB0Q29udGV4dChjb250ZXh0KTsKICAgICBpZiAoIWZyYW1lKQotICAg
ICAgICBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOworICAgICAgICBmcmFtZSA9IG1haW5GcmFtZSgpOwog
CiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dEZvcldvcmxkKGZyYW1lLCB3b3JsZC5nZXQoKSk7CiAgICAgSlNFdmFsdWF0
ZVNjcmlwdChqc0NvbnRleHQsIHNjcmlwdCwgMCwgMCwgMCwgMCk7IApAQCAtNjk2LDggKzY1OSw3
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UE9TSVhMb2NhbGUoSlNTdHJpbmdSZWYgbG9jYWxlKQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9u
KQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAg
cmV0dXJuIFdLQnVuZGxlRnJhbWVTZXRUZXh0RGlyZWN0aW9uKG1haW5GcmFtZSwgdG9XSyhkaXJl
Y3Rpb24pLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24o
bWFpbkZyYW1lKCksIHRvV0soZGlyZWN0aW9uKS5nZXQoKSk7CiB9CiAgICAgCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGJvb2wg
c2hvdWxkU3RheU9uUGFnZSkKQEAgLTcwNywxNyArNjY5LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoYm9vbCBzaG91bGRT
dGF5T25QCiAKIGJvb2wgVGVzdFJ1bm5lcjo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxOYXZpZ2F0aW9uKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJE
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSk7Ci0gICAg
V0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQ
cm92aXNpb25hbE5hdmlnYXRpb24iKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckRpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNp
b25hbE5hdmlnYXRpb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIkNsZWFyRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxO
YXZpZ2F0aW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoSlNT
dHJpbmdSZWYgc3RhdGUpCkBAIC03MzAsNyArNjg3LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZXNl
dFBhZ2VWaXNpYmlsaXR5KCkKICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0SGlk
ZGVuKGZhbHNlKTsKIH0KIAotdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTVmFsdWVS
ZWY+IENhbGxiYWNrTWFwOwordXNpbmcgQ2FsbGJhY2tNYXAgPSBXVEY6Okhhc2hNYXA8dW5zaWdu
ZWQsIEpTT2JqZWN0UmVmPjsKIHN0YXRpYyBDYWxsYmFja01hcCYgY2FsbGJhY2tNYXAoKQogewog
ICAgIHN0YXRpYyBDYWxsYmFja01hcCYgbWFwID0gKm5ldyBDYWxsYmFja01hcDsKQEAgLTc4Mywz
OCArNzQwLDMyIEBAIHN0YXRpYyB2b2lkIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVk
IGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGlmICghY2FsbGJhY2spCiAgICAg
ICAgIHJldHVybjsKLQorICAgIGF1dG8gY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKKyAgICBp
ZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYWxsYmFjaykpCisgICAgICAgIHJldHVybjsK
ICAgICBpZiAoY2FsbGJhY2tNYXAoKS5jb250YWlucyhpbmRleCkpIHsKICAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWFrZVN0cmluZygiRkFJTDogVHJpZWQg
dG8gaW5zdGFsbCBhIHNlY29uZCBUZXN0UnVubmVyIGNhbGxiYWNrIGZvciB0aGUgc2FtZSBldmVu
dCAoaWQgIiwgaW5kZXgsICIpXG5cbiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAg
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1l
KTsKICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgY2FsbGJhY2tN
YXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNrKTsKKyAgICBjYWxsYmFja01hcCgpLmFkZChpbmRleCwg
Y29uc3RfY2FzdDxKU09iamVjdFJlZj4oY2FsbGJhY2spKTsKIH0KIAogc3RhdGljIHZvaWQgY2Fs
bFRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgc2l6ZV90IGFyZ3VtZW50Q291bnQg
PSAwLCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdID0gbnVsbHB0cikKIHsKLSAgICBpZiAo
IWNhbGxiYWNrTWFwKCkuY29udGFpbnMoaW5kZXgpKQorICAgIGF1dG8gY2FsbGJhY2sgPSBjYWxs
YmFja01hcCgpLnRha2UoaW5kZXgpOworICAgIGlmICghY2FsbGJhY2spCiAgICAgICAgIHJldHVy
bjsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpT
Q29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1h
aW5GcmFtZSk7Ci0gICAgSlNPYmplY3RSZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9PYmplY3QoY29u
dGV4dCwgY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSwgMCk7CisgICAgYXV0byBjb250ZXh0ID0g
bWFpbkpTQ29udGV4dCgpOwogICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2Fs
bGJhY2ssIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwg
YXJndW1lbnRzLCAwKTsKICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MoKQogewotICAg
IGZvciAoYXV0byYgaXRlciA6IGNhbGxiYWNrTWFwKCkpIHsKLSAgICAgICAgV0tCdW5kbGVGcmFt
ZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICAgICAgSlNDb250ZXh0UmVmIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAg
ICAgSlNPYmplY3RSZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgaXRlci52
YWx1ZSwgMCk7Ci0gICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwot
ICAgIH0KLQorICAgIGF1dG8gY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKKyAgICBmb3IgKGF1
dG8mIHZhbHVlIDogY2FsbGJhY2tNYXAoKS52YWx1ZXMoKSkKKyAgICAgICAgSlNWYWx1ZVVucHJv
dGVjdChjb250ZXh0LCBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsK
ICAgICBjYWxsYmFja01hcCgpLmNsZWFyKCk7CiB9CiAKQEAgLTg5NCwyMCArODQ1LDEyIEBAIHZv
aWQgVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2Us
IEpTU3RyaW5nUmVmIHZhbHVlKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENv
b2tpZXMoYm9vbCBhY2NlcHQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWx3YXlz
QWNjZXB0Q29va2llcyIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShhY2NlcHQpKTsKLQotICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0QWx3YXlzQWNjZXB0Q29va2llcyIsIGFjY2VwdCk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T25seUFjY2VwdEZpcnN0UGFydHlDb29raWVzKGJv
b2wgYWNjZXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE9ubHlBY2NlcHRGaXJz
dFBhcnR5Q29va2llcyIpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWNjZXB0KSk7Ci0gICAgCi0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNv
b2tpZXMiLCBhY2NlcHQpOwogfQogCiBkb3VibGUgVGVzdFJ1bm5lcjo6cHJlY2lzZVRpbWUoKQpA
QCAtOTI0LDE1ICs4NjcsMTUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVu
YWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fdXNlclN0eWxlU2hlZXRFbmFibGVkID0gZW5h
YmxlZDsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbXB0eVVybCA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLSAgICBXS1N0cmluZ1JlZiBsb2Nh
dGlvbiA9IGVuYWJsZWQgPyBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVVy
bC5nZXQoKTsKKyAgICBhdXRvIGVtcHR5U3RyaW5nID0gdG9XSygiIik7CisgICAgYXV0byBsb2Nh
dGlvbiA9IGVuYWJsZWQgPyBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVN0
cmluZy5nZXQoKTsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKTsKICAgICBXS0J1bmRsZVNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oaW5qZWN0
ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBsb2NhdGlvbik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmlu
Z1JlZiBsb2NhdGlvbikKIHsKLSAgICBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGxvY2F0aW9uKSk7CisgICAgbV91c2VyU3R5bGVT
aGVldExvY2F0aW9uID0gdG9XSyhsb2NhdGlvbik7CiAKICAgICBpZiAobV91c2VyU3R5bGVTaGVl
dEVuYWJsZWQpCiAgICAgICAgIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVlKTsKQEAgLTk0
Niw4ICs4ODksNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxl
ZChib29sIGVuYWJsZWQpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3Vn
aEVsZW1lbnRzKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyhpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFn
ZSgpLT5wYWdlKCksIGVuYWJsZWQpOworICAgIFdLQnVuZGxlU2V0VGFiS2V5Q3ljbGVzVGhyb3Vn
aEVsZW1lbnRzKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgcGFnZSgpLCBl
bmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoKQpA
QCAtOTczLDM2ICs5MTUsMjggQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVs
bENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6Z3JhbnRX
ZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgYXV0byYg
aW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5k
bGVTZXRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBp
bmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgb3JpZ2luV0suZ2V0KCksIHRydWUpOworICAg
IFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIHBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpLCB0cnVlKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpkZW55V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmlu
Z1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0g
dG9XSyhvcmlnaW4pOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihp
bmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG9y
aWdpbldLLmdldCgpLCBmYWxzZSk7CisgICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJt
aXNzaW9uKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgcGFnZSgpLCB0b1dL
KG9yaWdpbikuZ2V0KCksIGZhbHNlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxX
ZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVSZW1vdmVBbGxXZWJO
b3RpZmljYXRpb25QZXJtaXNzaW9ucyhpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRC
dW5kbGUucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlUmVtb3ZlQWxsV2ViTm90aWZpY2F0
aW9uUGVybWlzc2lvbnMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdl
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2so
SlNWYWx1ZVJlZiBub3RpZmljYXRpb24pCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdl
KCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgdWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSBXS0J1
bmRsZUdldFdlYk5vdGlmaWNhdGlvbklEKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBjb250ZXh0
LCBub3RpZmljYXRpb24pOwotICAgIGluamVjdGVkQnVuZGxlLnBvc3RTaW11bGF0ZVdlYk5vdGlm
aWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbklEKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5wb3N0U2lt
dWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhXS0J1bmRsZUdldFdlYk5vdGlmaWNhdGlvbklEKGlu
amVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBtYWluSlNDb250ZXh0KCksIG5vdGlmaWNhdGlvbikpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJs
ZWQpCiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihlbmFibGVkKTsKIH0KIApA
QCAtMTAxMSwxMDIgKzk0NSw1MSBAQCBib29sIFRlc3RSdW5uZXI6OmlzR2VvbG9jYXRpb25Qcm92
aWRlckFjdGl2ZSgpCiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc0dl
b2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRv
dWJsZSBhY2N1cmFjeSwgSlNWYWx1ZVJlZiBqc0FsdGl0dWRlLCBKU1ZhbHVlUmVmIGpzQWx0aXR1
ZGVBY2N1cmFjeSwgSlNWYWx1ZVJlZiBqc0hlYWRpbmcsIEpTVmFsdWVSZWYganNTcGVlZCwgSlNW
YWx1ZVJlZiBqc0Zsb29yTGV2ZWwpCit2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRl
QWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVl
ZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKQogewotICAgIGF1dG8mIGluamVjdGVkQnVu
ZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYg
bWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2Uo
KS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotCi0gICAgYm9vbCBwcm92aWRlc0FsdGl0dWRl
ID0gZmFsc2U7Ci0gICAgZG91YmxlIGFsdGl0dWRlID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNV
bmRlZmluZWQoY29udGV4dCwganNBbHRpdHVkZSkpIHsKLSAgICAgICAgcHJvdmlkZXNBbHRpdHVk
ZSA9IHRydWU7Ci0gICAgICAgIGFsdGl0dWRlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpz
QWx0aXR1ZGUsIDApOwotICAgIH0KLQotICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5
ID0gZmFsc2U7Ci0gICAgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3kgPSAwLjsKLSAgICBpZiAoIUpT
VmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCBqc0FsdGl0dWRlQWNjdXJhY3kpKSB7Ci0gICAgICAg
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSA9IHRydWU7Ci0gICAgICAgIGFsdGl0dWRlQWNjdXJh
Y3kgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNBbHRpdHVkZUFjY3VyYWN5LCAwKTsKLSAg
ICB9Ci0KLSAgICBib29sIHByb3ZpZGVzSGVhZGluZyA9IGZhbHNlOwotICAgIGRvdWJsZSBoZWFk
aW5nID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNIZWFkaW5n
KSkgewotICAgICAgICBwcm92aWRlc0hlYWRpbmcgPSB0cnVlOwotICAgICAgICBoZWFkaW5nID0g
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzSGVhZGluZywgMCk7Ci0gICAgfQotCi0gICAgYm9v
bCBwcm92aWRlc1NwZWVkID0gZmFsc2U7Ci0gICAgZG91YmxlIHNwZWVkID0gMC47Ci0gICAgaWYg
KCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNTcGVlZCkpIHsKLSAgICAgICAgcHJvdmlk
ZXNTcGVlZCA9IHRydWU7Ci0gICAgICAgIHNwZWVkID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IGpzU3BlZWQsIDApOwotICAgIH0KLQotICAgIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsID0gZmFs
c2U7Ci0gICAgZG91YmxlIGZsb29yTGV2ZWwgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVm
aW5lZChjb250ZXh0LCBqc0Zsb29yTGV2ZWwpKSB7Ci0gICAgICAgIHByb3ZpZGVzRmxvb3JMZXZl
bCA9IHRydWU7Ci0gICAgICAgIGZsb29yTGV2ZWwgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
anNGbG9vckxldmVsLCAwKTsKLSAgICB9Ci0KLSAgICBpbmplY3RlZEJ1bmRsZS5zZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNB
bHRpdHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1
cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJv
dmlkZXNGbG9vckxldmVsLCBmbG9vckxldmVsKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNj
dXJhY3ksIGFsdGl0dWRlLCBhbHRpdHVkZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCwgZmxvb3JM
ZXZlbCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25V
bmF2YWlsYWJsZUVycm9yKEpTU3RyaW5nUmVmIG1lc3NhZ2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VXSyA9IHRvV0sobWVzc2FnZSk7Ci0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJv
cihtZXNzYWdlV0suZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IodG9XSyhtZXNzYWdlKS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlck1lZGlhUGVybWlzc2lvbihib29sIGVu
YWJsZWQpCiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnNldFVzZXJNZWRpYVBlcm1pc3Npb24oZW5hYmxlZCk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKCkKIHsKLSAgICAvLyBG
SVhNRTogdGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4KKyAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgYmUgZG9uZSBieSBmcmFtZS4KICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKCk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNEb2lu
Z01lZGlhQ2FwdHVyZSgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNEb2lu
Z01lZGlhQ2FwdHVyZSIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVs
bHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9
PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFk
b3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAg
IHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzRG9p
bmdNZWRpYUNhcHR1cmUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJz
aXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbihib29sIHBlcm1pc3Npb24sIEpTU3RyaW5nUmVmIG9y
aWdpbiwgSlNTdHJpbmdSZWYgcGFyZW50T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gcGFyZW50T3JpZ2luV0sgPSB0b1dLKHBhcmVudE9yaWdpbik7Ci0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3Jp
Z2luKHBlcm1pc3Npb24sIG9yaWdpbldLLmdldCgpLCBwYXJlbnRPcmlnaW5XSy5nZXQoKSk7Cisg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJt
aXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Npb24sIHRvV0sob3JpZ2luKS5nZXQoKSwgdG9XSyhwYXJl
bnRPcmlnaW4pLmdldCgpKTsKIH0KIAogdW5zaWduZWQgVGVzdFJ1bm5lcjo6dXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5n
UmVmIHBhcmVudE9yaWdpbikgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
b3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBh
cmVudE9yaWdpbldLID0gdG9XSyhwYXJlbnRPcmlnaW4pOwotICAgIHJldHVybiBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkudXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdp
bihvcmlnaW5XSy5nZXQoKSwgcGFyZW50T3JpZ2luV0suZ2V0KCkpOworICAgIHJldHVybiBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZv
ck9yaWdpbih0b1dLKG9yaWdpbikuZ2V0KCksIHRvV0socGFyZW50T3JpZ2luKS5nZXQoKSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50
Rm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbiwgSlNTdHJpbmdSZWYgcGFyZW50T3JpZ2luKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luV0sgPSB0b1dLKHBhcmVu
dE9yaWdpbik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnJlc2V0VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihvcmlnaW5XSy5nZXQoKSwgcGFyZW50T3Jp
Z2luV0suZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXNldFVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4odG9XSyhvcmlnaW4pLmdldCgpLCB0
b1dLKHBhcmVudE9yaWdpbikuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmNhbGxTaG91
bGRDbG9zZU9uV2ViVmlldygpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBX
S0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpKTsKLSAgICByZXR1cm4gV0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9uV2Vi
VmlldyhtYWluRnJhbWUpOworICAgIHJldHVybiBXS0J1bmRsZUZyYW1lQ2FsbFNob3VsZENsb3Nl
T25XZWJWaWV3KG1haW5GcmFtZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUJhY2tO
YXZpZ2F0aW9uKHVuc2lnbmVkIGhvd0ZhckJhY2t3YXJkKQpAQCAtMTEyMiwyMCArMTAwNSwxNyBA
QCB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24odW5zaWduZWQgaG93RmFy
Rm9yd2FyZCkKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNT
dHJpbmdSZWYgdGFyZ2V0LCBib29sIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpCiB7CiAgICAgYXV0
byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVUkxSZWY+IGJhc2VVUkxXSyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlV
UkwoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgp
KSkpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmxXSyA9IGFkb3B0V0soV0tVUkxDcmVh
dGVXaXRoQmFzZVVSTChiYXNlVVJMV0suZ2V0KCksIHRvV1RGU3RyaW5nKHRvV0sodXJsKSkudXRm
OCgpLmRhdGEoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmdXSyA9
IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybFdLLmdldCgpKSk7Ci0KKyAgICBhdXRvIGJhc2VV
UkxXSyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKCkpKTsKKyAgICBh
dXRvIHVybFdLID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkxXSy5nZXQo
KSwgdG9XVEZTdHJpbmcodXJsKS51dGY4KCkuZGF0YSgpKSk7CisgICAgYXV0byB1cmxTdHJpbmdX
SyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybFdLLmdldCgpKSk7CiAgICAgaW5qZWN0ZWRC
dW5kbGUucXVldWVMb2FkKHVybFN0cmluZ1dLLmdldCgpLCB0b1dLKHRhcmdldCkuZ2V0KCksIHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhU
TUxTdHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCwgSlNTdHJp
bmdSZWYgdW5yZWFjaGFibGVVUkwpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNv
bnRlbnRXSyA9IHRvV0soY29udGVudCk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJh
c2VVUkxXSyA9IGJhc2VVUkwgPyB0b1dLKGJhc2VVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+KCk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMV0sgPSB1
bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5yZWFjaGFibGVVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+KCk7Ci0KLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkSFRN
TFN0cmluZyhjb250ZW50V0suZ2V0KCksIGJhc2VVUkxXSy5nZXQoKSwgdW5yZWFjaGFibGVVUkxX
Sy5nZXQoKSk7CisgICAgYXV0byBiYXNlVVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJMKSA6
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPigpOworICAgIGF1dG8gdW5yZWFjaGFibGVVUkxXSyA9
IHVucmVhY2hhYmxlVVJMID8gdG9XSyh1bnJlYWNoYWJsZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4oKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkSFRN
TFN0cmluZyh0b1dLKGNvbnRlbnQpLmdldCgpLCBiYXNlVVJMV0suZ2V0KCksIHVucmVhY2hhYmxl
VVJMV0suZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKQEAgLTEx
NDUsMTYzICsxMDI1LDExOSBAQCB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKIAogdm9p
ZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkaW5nU2NyaXB0KHNjcmlwdFdL
LmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkaW5nU2Ny
aXB0KHRvV0soc2NyaXB0KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVOb25M
b2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChzY3JpcHRXSy5nZXQoKSk7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCh0b1dLKHNjcmlw
dCkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFJlamVjdHNQcm90ZWN0aW9uU3Bh
Y2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhib29sIHZhbHVlKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250
aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVG
b3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiLCB2YWx1ZSk7CiB9CiAgICAgCiB2b2lkIFRlc3RS
dW5uZXI6OnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoYm9vbCBoYW5kbGVzQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEhh
bmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhbmRsZXNBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZXMpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRIYW5kbGVzQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VzIiwgaGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZShib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkTG9nQ2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyhib29sIHZhbHVlKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZExvZ0Rvd25s
b2FkQ2FsbGJhY2tzIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhlbnRp
Y2F0aW9uVXNlcm5hbWUoSlNTdHJpbmdSZWYgdXNlcm5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKHVzZXJuYW1lKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0QXV0aGVudGljYXRpb25Vc2Vy
bmFtZSIsIHRvV0sodXNlcm5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRB
dXRoZW50aWNhdGlvblBhc3N3b3JkKEpTU3RyaW5nUmVmIHBhc3N3b3JkKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyhwYXNzd29yZCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEF1dGhlbnRpY2F0
aW9uUGFzc3dvcmQiLCB0b1dLKHBhc3N3b3JkKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5l
cjo6c2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0
dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dl
dFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJu
IFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1
cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4oIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQiKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRCbG9ja0FsbFBsdWdpbnMoYm9vbCBzaG91bGRCbG9jaykKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRCbG9ja0FsbFBsdWdpbnMiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHNo
b3VsZEJsb2NrKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0QmxvY2tBbGxQbHVnaW5zIiwgc2hv
dWxkQmxvY2spOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUo
SlNTdHJpbmdSZWYgbW9kZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQbHVnaW5T
dXBwb3J0ZWRNb2RlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcobW9kZSkpOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIlNldFBsdWdpblN1cHBvcnRlZE1vZGUiLCB0b1dLKG1vZGUpLmdldCgpKTsKIH0K
IAogSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpmYWlsTmV4dE5ld0NvZGVCbG9jaygpCiB7Ci0gICAg
V0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRS
ZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUp
OwotICAgIHJldHVybiBKU0M6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKGNvbnRleHQpOworICAgIHJl
dHVybiBKU0M6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKG1haW5KU0NvbnRleHQoKSk7CiB9CiAKLUpT
VmFsdWVSZWYgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIHRoZUZ1
bmN0aW9uKQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFs
dWVSZWYgZnVuY3Rpb24pCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHJldHVybiBKU0M6Om51bWJlck9mREZHQ29t
cGlsZXMoY29udGV4dCwgdGhlRnVuY3Rpb24pOworICAgIHJldHVybiBKU0M6Om51bWJlck9mREZH
Q29tcGlsZXMobWFpbkpTQ29udGV4dCgpLCBmdW5jdGlvbik7CiB9CiAKLUpTVmFsdWVSZWYgVGVz
dFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlvbihKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKQorSlNW
YWx1ZVJlZiBUZXN0UnVubmVyOjpuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgZnVuY3Rp
b24pCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAg
ICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChtYWluRnJhbWUpOwotICAgIHJldHVybiBKU0M6OnNldE5ldmVySW5saW5lKGNvbnRleHQsIHRo
ZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4gSlNDOjpzZXROZXZlcklubGluZShtYWluSlNDb250ZXh0
KCksIGZ1bmN0aW9uKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVOYXZp
Z2F0aW9uUG9saWN5QWZ0ZXJEZWxheShib29sIHZhbHVlKQogewogICAgIG1fc2hvdWxkRGVjaWRl
TmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkgPSB2YWx1ZTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGREZWNpZGVOYXZpZ2F0
aW9uUG9saWN5QWZ0ZXJEZWxheSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRT
aG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkoYm9vbCB2YWx1ZSkKIHsKICAgICBt
X3Nob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSA9IHZhbHVlOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGREZWNp
ZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZChib29sIHZhbHVlKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5h
YmxlZCIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRJZ25vcmVzVmlld3BvcnRT
Y2FsZUxpbWl0cyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEln
bm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIiwgdmFsdWUpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBl
cyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZERvd25s
b2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5S
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJTZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiLCB2
YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRh
dGlvbkFuZE1vdGlvbkFjY2Vzcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkQWxsb3dEZXZp
Y2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVGVybWluYXRlTmV0d29ya1Byb2Nlc3MiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIik7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMoKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzIikpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJUZXJtaW5hdGVTZXJ2aWNlV29y
a2VycyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgi
U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyIsIHZhbHVlKTsKIH0KIAogc3RhdGlj
IHVuc2lnbmVkIG5leHRVSVNjcmlwdENhbGxiYWNrSUQoKQpAQCAtMTMxNCw5NyArMTE1MCw0OCBA
QCB2b2lkIFRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNWYWx1
ZVJlZiBjYWxsYmFjaykKIHsKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbmV4dFVJU2NyaXB0
Q2FsbGJhY2tJRCgpOwogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKGNhbGxiYWNrSUQsIGNh
bGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJ1blVJUHJvY2Vzc1NjcmlwdCIp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IHRlc3REaWN0aW9u
YXJ5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNjcmlwdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2Ny
aXB0VmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHNjcmlwdCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLVUludDY0UmVmPiBjYWxsYmFja0lEVmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KGNhbGxiYWNrSUQpKTsKLQotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0odGVzdERpY3Rpb25hcnku
Z2V0KCksIHNjcmlwdEtleS5nZXQoKSwgc2NyaXB0VmFsdWUuZ2V0KCkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0odGVzdERpY3Rpb25hcnkuZ2V0KCksIGNhbGxiYWNrSURLZXkuZ2V0KCksIGNh
bGxiYWNrSURWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCB0ZXN0RGljdGlvbmFyeS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJSdW5VSVByb2Nl
c3NTY3JpcHQiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJTY3JpcHQiLCB0b1dL
KHNjcmlwdCkgfSwKKyAgICAgICAgeyAiQ2FsbGJhY2tJRCIsIGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoY2FsbGJhY2tJRCkpLmdldCgpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnJ1blVJU2NyaXB0SW1tZWRpYXRlbHkoSlNTdHJpbmdSZWYgc2NyaXB0LCBKU1ZhbHVl
UmVmIGNhbGxiYWNrKQogewogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBuZXh0VUlTY3JpcHRD
YWxsYmFja0lEKCk7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soY2FsbGJhY2tJRCwgY2Fs
bGJhY2spOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUnVuVUlQcm9jZXNzU2NyaXB0SW1t
ZWRpYXRlbHkiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiB0
ZXN0RGljdGlvbmFyeSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHNjcmlwdFZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhz
Y3JpcHQpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gY2FsbGJhY2tJRFZhbHVlID0gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShjYWxsYmFja0lEKSk7Ci0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3RE
aWN0aW9uYXJ5LmdldCgpLCBzY3JpcHRLZXkuZ2V0KCksIHNjcmlwdFZhbHVlLmdldCgpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBjYWxsYmFja0lES2V5
LmdldCgpLCBjYWxsYmFja0lEVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgdGVzdERpY3Rpb25hcnkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
UnVuVUlQcm9jZXNzU2NyaXB0SW1tZWRpYXRlbHkiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAg
ICAgICB7ICJTY3JpcHQiLCB0b1dLKHNjcmlwdCkgfSwKKyAgICAgICAgeyAiQ2FsbGJhY2tJRCIs
IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpLmdldCgpIH0sCisgICAgfSkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0Q2FsbGJhY2sodW5zaWduZWQg
Y2FsbGJhY2tJRCwgSlNTdHJpbmdSZWYgcmVzdWx0KQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYg
bWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLQotICAgIEpTVmFsdWVS
ZWYgcmVzdWx0VmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCByZXN1bHQpOworICAg
IEpTVmFsdWVSZWYgcmVzdWx0VmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtYWluSlNDb250ZXh0
KCksIHJlc3VsdCk7CiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhjYWxsYmFja0lELCAxLCAm
cmVzdWx0VmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93ZWRNZW51QWN0aW9u
cyhKU1ZhbHVlUmVmIGFjdGlvbnMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWxs
b3dlZE1lbnVBY3Rpb25zIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0KLSAgICBhdXRv
IHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAg
YXV0byBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgYXV0
byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7
Ci0gICAgYXV0byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygibGVuZ3RoIikpOworICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gY29udGV4dCA9IG1haW5KU0NvbnRleHQo
KTsKICAgICBhdXRvIGFjdGlvbnNBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhY3Rp
b25zLCBudWxscHRyKTsKLSAgICBhdXRvIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0
eShjb250ZXh0LCBhY3Rpb25zQXJyYXksIGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0
cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYWN0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAg
aWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgYXV0byBhY3Rpb25OYW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCB2YWx1ZSwgMCkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
YWN0aW9uID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhhY3Rpb25OYW1lLmdl
dCgpKSk7Ci0gICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhY3Rp
b24uZ2V0KCkpOworICAgIGF1dG8gbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYWN0aW9u
c0FycmF5KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFj
dGlvbnNBcnJheSwgaSwgbnVsbHB0cik7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCB0b1dLU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CiAgICAgfQot
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEFsbG93ZWRNZW51QWN0
aW9ucyIsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0YWxs
Q3VzdG9tTWVudUFjdGlvbihKU1N0cmluZ1JlZiBuYW1lLCBib29sIGRpc21pc3Nlc0F1dG9tYXRp
Y2FsbHksIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJh
Y2soQ3VzdG9tTWVudUFjdGlvbkNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkluc3RhbGxDdXN0b21NZW51QWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJuYW1lIikpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lVmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aEpTU3RyaW5nKG5hbWUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VC
b2R5LmdldCgpLCBuYW1lS2V5LmdldCgpLCBuYW1lVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZGlzbWlzc2VzQXV0b21hdGljYWxseVZhbHVl
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZGlzbWlzc2VzQXV0b21hdGljYWxseSkpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGRpc21pc3Nlc0F1dG9tYXRp
Y2FsbHlLZXkuZ2V0KCksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlWYWx1ZS5nZXQoKSk7Ci0KLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJJbnN0YWxsQ3VzdG9tTWVudUFjdGlvbiIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgIHsgIm5hbWUiLCB0b1dLKG5hbWUpIH0sCisgICAgICAgIHsgImRpc21p
c3Nlc0F1dG9tYXRpY2FsbHkiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkaXNtaXNzZXNBdXRv
bWF0aWNhbGx5KSkuZ2V0KCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6aW5zdGFsbERpZEJlZ2luU3dpcGVDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQpAQCAt
MTQ0OSw1OCArMTIzNiwzMCBAQCB2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZW1vdmVTd2lwZVNu
YXBzaG90Q2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyU3RhdGlzdGljc0RhdGFG
b3JEb21haW4oSlNTdHJpbmdSZWYgZG9tYWluKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhk
b21haW4pKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyU3RhdGlz
dGljc0RhdGFGb3JEb21haW4iLCB0b1dLKGRvbWFpbikuZ2V0KCkpOwogfQogCiBib29sIFRlc3RS
dW5uZXI6OmRvZXNTdGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UodW5zaWduZWQgZG9t
YWluSUQpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRG9tYWluSUQiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkb21haW5JRCkpKTsKLQot
ICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9y
PFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlz
W2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAg
fQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0
SW5EYXRhYmFzZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVl
cy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBu
dWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0
VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4g
V0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVy
bkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0
dXJuaW5nQm9vbGVhbigiRG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkRvbWFpbklEIiwgYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShkb21haW5JRCkpIH0KKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc0VuYWJsZWQoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTdGF0aXN0aWNzRW5hYmxlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NFbmFibGVkIiwg
dmFsdWUpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0VwaGVtZXJhbCgpCiB7
Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIklzU3RhdGlzdGljc0VwaGVtZXJhbCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0
YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJ
RChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9v
bGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRh
KSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmlu
Z0Jvb2xlYW4oIklzU3RhdGlzdGljc0VwaGVtZXJhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzRGVi
dWdNb2RlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsK
LSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVz
c2FnZSgiU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldERlYnVnTW9kZUNhbGxiYWNrKCkKQEAgLTE1MTEsMTAg
KzEyNzAsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0RGVidWdNb2Rl
Q2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2VGb3JEZWJ1Z01vZGUoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTVmFsdWVSZWYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIp
OwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZUZvckRlYnVnTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7
Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1l
c3NhZ2UoIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIsIHRvV0so
aG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERp
ZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlQ2FsbGJhY2soKQpAQCAtMTUyNiwyNyAr
MTI4MiwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NMYXN0U2VlbihKU1N0cmlu
Z1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMsIEpTVgogewogICAgIGNhY2hlVGVzdFJ1bm5l
ckNhbGxiYWNrKFNldFN0YXRpc3RpY3NMYXN0U2VlbkNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5k
bGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhv
c3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tE
b3VibGVDcmVhdGUoc2Vjb25kcykpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJh
d0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1
ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJh
d1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0xhc3RTZWVuIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShy
YXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICAK
LSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVz
c2FnZSgiU2V0U3RhdGlzdGljc0xhc3RTZWVuIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAg
ICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIHRv
V0soc2Vjb25kcykgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NhbGxEaWRTZXRMYXN0U2VlbkNhbGxiYWNrKCkKQEAgLTE1NTgsNDkgKzEyOTcsMTgg
QEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMoSlNTdHJpbmdS
ZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIHQKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFj
ayhTZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxl
cik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1l
KSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRvcEZyYW1lRG9tYWluMSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1lRG9tYWluMSkpKTsKLSAgICAKLSAg
ICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BG
cmFtZURvbWFpbjIiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyh0b3BGcmFtZURvbWFpbjIpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMYXN0U2VlbiIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGxhc3RTZWVuKSkpOwotCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlcklu
dGVyYWN0aW9uIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGhhZFVzZXJJbnRlcmFjdGlvbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSXNHcmFuZGZhdGhlcmVkIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkpKTsKLQotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50Iikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50
KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSXNWZXJ5UHJldmFsZW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGlzVmVyeVByZXZhbGVudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRhdGFSZWNvcmRzUmVtb3ZlZCIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRhdGFSZWNvcmRzUmVt
b3ZlZCkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7
Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tl
eXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0u
Z2V0KCk7Ci0gICAgfQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NNZXJn
ZVN0YXRpc3RpYyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVl
cy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NNZXJnZVN0YXRp
c3RpYyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyho
b3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVEb21haW4xIiwgdG9XSyh0b3BGcmFtZURv
bWFpbjEpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lRG9tYWluMiIsIHRvV0sodG9wRnJhbWVEb21h
aW4yKSB9LAorICAgICAgICB7ICJMYXN0U2VlbiIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUobGFz
dFNlZW4pKSB9LAorICAgICAgICB7ICJIYWRVc2VySW50ZXJhY3Rpb24iLCBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShoYWRVc2VySW50ZXJhY3Rpb24pKSB9LAorICAgICAgICB7ICJNb3N0UmVjZW50
VXNlckludGVyYWN0aW9uIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uKSkgfSwKKyAgICAgICAgeyAiSXNHcmFuZGZhdGhlcmVkIiwgYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhlcmVkKSkgfSwKKyAgICAgICAgeyAiSXNQcmV2YWxlbnQi
LCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpIH0sCisgICAgICAgIHsgIklz
VmVyeVByZXZhbGVudCIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzVmVyeVByZXZhbGVudCkp
IH0sCisgICAgICAgIHsgIkRhdGFSZWNvcmRzUmVtb3ZlZCIsIGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoZGF0YVJlY29yZHNSZW1vdmVkKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRNZXJnZVN0YXRpc3RpY0NhbGxiYWNrKCkKQEAg
LTE2MTIsMzEgKzEzMjAsMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRXhwaXJl
ZFN0YXRpc3RpYyhKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCBoYWRVc2UKIHsKICAgICBjYWNo
ZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpY0NhbGxiYWNr
SUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsK
LQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ikhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYWRVc2VySW50ZXJhY3Rpb24iKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkp
OwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSXNQcmV2YWxlbnQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdL
U3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiBy
YXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9u
YXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUo
KSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAg
eyAiSGFkVXNlckludGVyYWN0aW9uIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNlcklu
dGVyYWN0aW9uKSkgfSwKKyAgICAgICAgeyAiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwpKSB9LAorICAgICAgICB7ICJJc1ByZXZhbGVudCIsIGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkgfQorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEV4cGlyZWRTdGF0aXN0aWNDYWxsYmFjaygp
CkBAIC0xNjQ4LDI5ICsxMzM3LDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlCiB7CiAgICAg
Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlQ2Fs
bGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFs
dWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0
b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVz
OwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXpl
KHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5z
aXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAg
ICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0
aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNp
emUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIsIGNyZWF0ZVdL
RGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAg
ICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0sCisgICAg
fSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0UHJl
dmFsZW50UmVzb3VyY2VDYWxsYmFjaygpCkBAIC0xNjgyLDI5ICsxMzUyLDEwIEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBo
b3N0TmFtZSwgYm9vbCB2CiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlz
dGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsK
IAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1l
KSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHZhbHVlKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsK
LSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5
cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJh
d0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNb
aV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRp
c3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9u
YXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMu
ZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdL
QnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJT
ZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsK
KyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1
ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRWZXJ5UHJldmFsZW50UmVz
b3VyY2VDYWxsYmFjaygpCkBAIC0xNzE0LDEzOCArMTM2NSw1MSBAQCB2b2lkIFRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NDYWxsRGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQogICAg
IAogdm9pZCBUZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoImR1bXBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzIik7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhK
U1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChy
ZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVh
bkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSku
Z2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4oIklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIiwgdG9XSyhob3N0TmFtZSkuZ2V0
KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJ
c1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
Zyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5E
YXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZh
bHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkp
OworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4o
IklzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIsIHRvV0soaG9zdE5hbWUpLmdldCgp
KTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNv
dXJjZVVuZGVyKEpTU3RyaW5nUmVmIHN1YnJlc291cmNlSG9zdCwgSlNTdHJpbmdSZWYgdG9wRnJh
bWVIb3N0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJyZXNvdXJj
ZUhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhK
U1N0cmluZyhzdWJyZXNvdXJjZUhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVI
b3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUo
KSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAg
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAg
ICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFs
dWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0
YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyIikpOwotICAgIFdLUmV0YWluUHRy
PFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0
ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAg
ICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1
cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdp
c3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAg
eyAiU3VicmVzb3VyY2VIb3N0IiwgdG9XSyhzdWJyZXNvdXJjZUhvc3QpIH0sCisgICAgICAgIHsg
IlRvcEZyYW1lSG9zdCIsIHRvV0sodG9wRnJhbWVIb3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0K
IAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
KEpTU3RyaW5nUmVmIHN1YkZyYW1lSG9zdCwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0KQogewot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1YkZyYW1lSG9zdCIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHN1YkZyYW1lSG9z
dCkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUb3BGcmFtZUhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZUhvc3QpKSk7Ci0gICAgCi0gICAgVmVj
dG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBl
UmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0
KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVu
ZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
cmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkp
LmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyIiwgY3JlYXRlV0tE
aWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU3ViRnJhbWVIb3N0IiwgdG9XSyhzdWJGcmFtZUhvc3Qp
IH0sCisgICAgICAgIHsgIlRvcEZyYW1lSG9zdCIsIHRvV0sodG9wRnJhbWVIb3N0KSB9LAorICAg
IH0pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVk
QXNSZWRpcmVjdGluZ1RvKEpTU3RyaW5nUmVmIGhvc3RSZWRpcmVjdGVkRnJvbSwgSlNTdHJpbmdS
ZWYgaG9zdFJlZGlyZWN0ZWRUbykKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSG9zdFJlZGlyZWN0ZWRGcm9tIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdFJlZGlyZWN0ZWRGcm9tKSkpOwotICAgIAotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RS
ZWRpcmVjdGVkVG8iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyhob3N0UmVkaXJlY3RlZFRvKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0
cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3
VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAg
ICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8i
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCBy
YXdLZXlzLnNpemUoKSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1
cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdl
dFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0
KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4oIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8iLCBjcmVhdGVXS0RpY3Rp
b25hcnkoeworICAgICAgICB7ICJIb3N0UmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3RSZWRpcmVj
dGVkRnJvbSkgfSwKKyAgICAgICAgeyAiSG9zdFJlZGlyZWN0ZWRUbyIsIHRvV0soaG9zdFJlZGly
ZWN0ZWRUbykgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2
YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uQ2FsbGJhY2tJRCwg
Y29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
Pj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAg
IAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ikhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBl
bmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdL
U3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAg
ICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1
ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJh
d1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rp
b25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6
ZSgpKSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUp
IH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9
LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERp
ZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbkNhbGxiYWNrKCkKQEAgLTE4NTUsMjYxICsxNDE5LDk1
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRIYXNIYWRVc2VySW50ZXJh
Y3Rpb25DYWxsYmFjaygpCiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRy
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlE
KHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29s
ZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEp
KS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5n
Qm9vbGVhbigiSXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIik7CiB9CiAKIGJvb2wg
VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlKEpTU3RyaW5nUmVmIHN1
Ykhvc3QsIEpTU3RyaW5nUmVmIHRvcEhvc3QpCiB7Ci0gICAgCi0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVm
Pj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3ViSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHN1Ykhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wSG9zdCIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEhvc3Qp
KSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsK
LSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5
c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5n
ZXQoKTsKLSAgICB9Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlIikpOwot
ICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlz
LmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVS
ZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsK
LSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlE
KCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9u
b3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFz
ZU9uY2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJTdWJIb3N0IiwgdG9XSyhz
dWJIb3N0KSB9LAorICAgICAgICB7ICJUb3BIb3N0IiwgdG9XSyh0b3BIb3N0KSB9LAorICAgIH0p
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJl
ZChKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVS
ZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAg
ICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJl
Zj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdW
YWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5n
ZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAg
ICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJh
d0tleXMuc2l6ZSgpKSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAg
ICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0VXNlSVRQRGF0YWJhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVl
KSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRVc2VJVFBE
YXRhYmFzZSIsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NHcmFu
ZGZhdGhlcmVkKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIklzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyho
b3N0TmFtZSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRh
KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVl
KGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOwor
ICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklz
U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiLCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihK
U1N0cmluZ1JlZiBob3N0TmFtZSwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSkKIHsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVl
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsK
LSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJUb3BGcmFtZUhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0TmFtZSkpKTsKLSAgICAKLSAgICBW
ZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5
cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNb
aV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9
Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJh
d1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luIiwg
Y3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1l
KSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3ROYW1lIiwgdG9XSyh0b3BGcmFtZUhvc3ROYW1l
KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0
cmluZ1JlZiB0b3BGcmFtZUhvc3ROYW1lKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVl
czsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdE5hbWUiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0
b3BGcmFtZUhvc3ROYW1lKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5
cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5z
aXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsr
aSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFs
dWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
RGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5
cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4iLCBjcmVhdGVXS0RpY3Rpb25hcnko
eworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlRv
cEZyYW1lSG9zdE5hbWUiLCB0b1dLKHRvcEZyYW1lSG9zdE5hbWUpIH0sCisgICAgfSkuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0VG8oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJl
Y3RlZFRvKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVj
dGVkVG8pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6
ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0g
ICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2
YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3Jl
YXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhv
c3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVk
VG8iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
RnJvbShKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVk
RnJvbSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyho
b3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVj
dGVkRnJvbSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5z
aXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsK
LSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9
IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tIikpOwotICAgIFdLUmV0
YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFy
eUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkp
KTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAg
IHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRp
cmVjdGVkRnJvbSIsIHRvV0soaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkgfSwKKyAgICB9KS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVj
dGVkVG8pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
aG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZVJlZGlyZWN0
ZWRUbykpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXpl
KCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAg
ICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZh
bHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUo
cmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdFRvIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUi
LCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIsIHRv
V0soaG9zdE5hbWVSZWRpcmVjdGVkVG8pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShKU1N0cmlu
Z1JlZiBob3N0TmFtZSwgSlNTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkKIHsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVl
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsK
LSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkpKTsK
LSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAg
IFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5
c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGlj
c1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlz
LmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0RnJvbSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9X
Syhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIsIHRvV0so
aG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oSlNT
dHJpbmdSZWYgZnJvbUhvc3QsIEpTU3RyaW5nUmVmIHRvSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5
cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRnJvbUhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhmcm9tSG9zdCkpKTsKLSAgICAKLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb0hvc3Qi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
Zyh0b0hvc3QpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMu
c2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0g
PSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIikpOwotICAgIFdL
UmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlv
bmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXpl
KCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3ND
cm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAg
ICAgICAgeyAiRnJvbUhvc3QiLCB0b1dLKGZyb21Ib3N0KSB9LAorICAgICAgICB7ICJUb0hvc3Qi
LCB0b1dLKHRvSG9zdCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiIsIHNl
Y29uZHMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5
RGF0YVJlY29yZHNDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQpAQCAtMjE0NywxMiArMTU0
NSw5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlD
YWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sodW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXMsIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRl
cmFjdGlvbiwgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uLCB1bnNpZ25lZCB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rp
b25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIG1lZGlhbkRheXNTaW5jZVVzZXJJ
bnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQg
dG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJLCB1bnNpZ25lZCB0b3AzTWVkaWFu
U3ViRnJhbWVXaXRob3V0VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRV
SSwgdW5zaWduZWQgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwgdW5zaWduZWQg
dG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSkKIHsKLSAgICBXS0J1bmRsZUZy
YW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgCiAg
ICAgU3RyaW5nIHN0cmluZyA9IG1ha2VTdHJpbmcoInsgXCJudW1iZXJPZlByZXZhbGVudFJlc291
cmNlc1wiIDogIiwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMsICIsIFwibnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uXCIgOiAiLCBudW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sICIsIFwibnVtYmVyT2ZQcmV2YWxlbnRSZXNv
dXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uXCIgOiAiLCBudW1iZXJPZlByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sICIsIFwidG9wUHJldmFsZW50UmVzb3VyY2VXaXRo
VXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uXCIgOiAiLCB0b3BQcmV2YWxl
bnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24sICIs
IFwibWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNl
ckludGVyYWN0aW9uXCIgOiAiLCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxl
bnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24sICIsIFwidG9wM051bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVJXCIgOiAiLCB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VUksICIsIFwidG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuU3Vi
RnJhbWVXaXRob3V0VUksICIsIFwidG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJXCIgOiAi
LCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUksICIsIFwidG9wM01lZGlhblVuaXF1ZVJl
ZGlyZWN0c1dpdGhvdXRVSVwiIDogIiwgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRV
SSwgIiwgXCJ0b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJXCIgOiAiLCB0b3Az
TWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJLCAiIH0iKTsKICAgICAKLSAgICBKU1Zh
bHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwgYWRvcHQo
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpKS5nZXQo
KSk7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKG1h
aW5KU0NvbnRleHQoKSwgY3JlYXRlSlNTdHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpLmdldCgp
KTsKIAogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRy
eUNhbGxiYWNrSUQsIDEsICZyZXN1bHQpOwogfQpAQCAtMjE2NCwxNiArMTU1OSwxNCBAQCBib29s
IFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NOb3RpZnlPYnNlcnZlcigpCiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNv
cmRzIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNzUHJvY2Vzc1N0YXRp
c3RpY3NBbmREYXRhUmVjb3JkcyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NV
cGRhdGVDb29raWVCbG9ja2luZyhKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRCbG9ja0Nvb2tpZXNGb3JI
b3N0Q2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3RhdGlzdGljc1VwZGF0ZUNvb2tpZUJsb2NraW5nIikpOwotICAgIFdLQnVuZGxlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1VwZGF0
ZUNvb2tpZUJsb2NraW5nIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxE
aWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0Q2FsbGJhY2soKQpAQCAtMjE4MywxMzUgKzE1NzYsODMg
QEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEJsb2NrQ29va2llc0Zvckhv
c3RDYWxsYmFjaygpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRy
eSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRy
eSIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRy
eSIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIsIHZhbHVl
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdChib29s
IHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTZXRJc1J1bm5p
bmdUZXN0IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZSgiU3RhdGlzdGljc1NldElzUnVubmluZ1Rlc3QiLCB2YWx1ZSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3Jl
RGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZSgiU3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29y
ZHNSZW1vdmFsIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRh
dGFSZWNvcmRzUmVtb3ZhbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRh
UmVjb3Jkc1JlbW92YWwiLCBzZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0
ZShzZWNvbmRzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0
aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lIiwgc2Vjb25kcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkIGVudHJpZXMpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoZW50cmllcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0
TWF4U3RhdGlzdGljc0VudHJpZXMiLCBlbnRyaWVzKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCBlbnRyaWVzKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFBydW5lRW50cmllc0Rvd25UbyIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShlbnRyaWVzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRQcnVu
ZUVudHJpZXNEb3duVG8iLCBlbnRyaWVzKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoSlNWYWx1ZVJlZiBjYWxsYmFj
aykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnRTdG9yZUNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3Jl
IikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVz
c2FnZSgiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9y
ZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCBob3VycywgSlNWYWx1ZVJlZiBjYWxsYmFjaykK
IHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJJbk1lbW9y
eUFuZFBlcnNpc3RlbnRTdG9yZUNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9k
aWZpZWRTaW5jZUhvdXJzIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvdXJzKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGlj
c0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnMiLCBob3Vy
cyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFyVGhyb3VnaFdlYnNpdGVE
YXRhUmVtb3ZhbChKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNh
bGxiYWNrKFN0YXRpc3RpY3NEaWRDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWxDYWxsYmFj
a0lELCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGlj
c0NsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhclRocm91
Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNz
RGVsZXRlQ29va2llc0Zvckhvc3QoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgaW5jbHVkZUh0
dHBPbmx5Q29va2llcykKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBr
ZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFt
ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKGhvc3ROYW1lKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSW5jbHVkZUh0dHBPbmx5Q29va2llcyIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSkp
OwotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVS
ZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3
VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQo
KTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tl
eXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0
aWNzRGVsZXRlQ29va2llc0Zvckhvc3QiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7
ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkluY2x1ZGVIdHRwT25s
eUNvb2tpZXMiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpbmNsdWRlSHR0cE9ubHlDb29raWVz
KSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNz
SGFzTG9jYWxTdG9yYWdlKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIGF1dG8gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3Rp
Y3NIYXNMb2NhbFN0b3JhZ2UiKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJu
RGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
IHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiLCB0b1dL
KGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0Nh
Y2hlTWF4QWdlQ2FwKGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJs
ZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NDYWNoZU1heEFn
ZUNhcCIsIHNlY29uZHMpOwogfQogCiBib29sIFRlc3RSdW5uZXI6Omhhc1N0YXRpc3RpY3NJc29s
YXRlZFNlc3Npb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhc1N0YXRpc3RpY3NJ
c29sYXRlZFNlc3Npb24iKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0
YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQo
V0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJl
dHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
cmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKCJIYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIiwgdG9XSyho
b3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91
bGREb3duZ3JhZGVSZWZlcnJlcihib29sIHZhbHVlLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMjMyMCw5ICsxNjYxLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb20KICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NE
aWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVy
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NTaG91
bGREb3duZ3JhZGVSZWZlcnJlciIsIHZhbHVlKTsKICAgICBtX2hhc1NldERvd25ncmFkZVJlZmVy
cmVyQ2FsbGJhY2sgPSB0cnVlOwogfQogCkBAIC0yMzM4LDExICsxNjc3LDEwIEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbCB2
YWx1ZSwgSlNWYWx1ZVJlCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhY2hlVGVzdFJ1bm5lckNh
bGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzQ2FsbGJh
Y2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0
YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzIikpOworICAgIGF1dG8gbWVzc2Fn
ZU5hbWUgPSAiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiOwogICAg
IGlmIChvbmx5T25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgIG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGlj
c1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlv
biIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICAgICAgbWVzc2FnZU5hbWUgPSAiU2V0U3RhdGlzdGljc1Nob3Vs
ZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiI7Cisg
ICAgcG9zdE1lc3NhZ2UobWVzc2FnZU5hbWUsIHZhbHVlKTsKICAgICBtX2hhc1NldEJsb2NrVGhp
cmRQYXJ0eUNvb2tpZXNDYWxsYmFjayA9IHRydWU7CiB9CiAKQEAgLTIzNTgsOSArMTY5Niw3IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92
YWxNb2RlKGJvb2wgdmFsdWUsIEpTVmFsCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhY2hlVGVz
dFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZSIsIHZhbHVlKTsKICAgICBtX2hhc1NldEZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlQ2FsbGJhY2sgPSB0cnVlOwogfQogCkBAIC0yMzgzLDEwICsxNzE5LDcg
QEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbENsZWFyVGhyb3VnaFdlYnNpdGVEYXRh
UmVtb3ZhbENhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1ZhbHVlUmVmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRT
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsK
LQotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTdGF0aXN0aWNzU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKSk7Ci0gICAgYXV0
byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5h
bWUpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0TWVzc2FnZSgiU3RhdGlzdGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIiwgdG9XSyho
b3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlk
U2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNDYWxsYmFjaygpCkBAIC0yMzk4LDI3ICsxNzMxLDEw
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0
Q29va2llc0NhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldEZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW4oSlNTdHJpbmdSZWYgZmlyc3RQYXJ0eVVSTFN0cmluZywgSlNTdHJp
bmdSZWYgY25hbWVVUkxTdHJpbmcsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNldEZpcnN0UGFydHlIb3N0
Q05BTUVEb21haW5DYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBWZWN0b3I8
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRmlyc3RQYXJ0eVVSTCIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGZpcnN0UGFydHlVUkxTdHJp
bmcpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ05BTUUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhjbmFtZVVSTFN0cmluZykpKTsKLSAgICAKLSAgICBWZWN0b3I8
V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+
IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0
KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAg
ICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3RhdGlzdGljc1NldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4iKSk7Ci0gICAgYXV0byBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCBy
YXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NT
ZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAg
ICAgeyAiRmlyc3RQYXJ0eVVSTCIsIHRvV0soZmlyc3RQYXJ0eVVSTFN0cmluZykgfSwKKyAgICAg
ICAgeyAiQ05BTUUiLCB0b1dLKGNuYW1lVVJMU3RyaW5nKSB9LAorICAgIH0pLmdldCgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05B
TUVEb21haW5DYWxsYmFjaygpCkBAIC0yNDI5LDEwICsxNzQ1LDcgQEAgdm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFjaygp
CiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4oSlNT
dHJpbmdSZWYgY25hbWVVUkxTdHJpbmcsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNldFRoaXJkUGFydHlD
TkFNRURvbWFpbkNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIGF1dG8gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0
aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGNuYW1lVVJMU3RyaW5nKSk7Ci0gICAg
V0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2Uo
IlN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4iLCB0b1dLKGNuYW1lVVJMU3RyaW5n
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRUaGly
ZFBhcnR5Q05BTUVEb21haW5DYWxsYmFjaygpCkBAIC0yNDQzLDkgKzE3NTYsOCBAQCB2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJh
Y2soKQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShK
U1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxi
YWNrKFN0YXRpc3RpY3NEaWRSZXNldFRvQ29uc2lzdGVudFN0YXRlQ2FsbGJhY2tJRCwgY29tcGxl
dGlvbkhhbmRsZXIpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NS
ZXNldFRvQ29uc2lzdGVudFN0YXRlIikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
cik7CisKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZSIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkUmVzZXRUb0Nv
bnNpc3RlbnRTdGF0ZUNhbGxiYWNrKCkKQEAgLTI0ODYsOTUgKzE3OTgsNDYgQEAgdm9pZCBUZXN0
UnVubmVyOjp0ZXh0RmllbGREaWRFbmRFZGl0aW5nQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVy
OjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAg
IGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tJ
RCwgY2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldEFsbFN0b3Jh
Z2VBY2Nlc3NFbnRyaWVzIikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgV1RSOjpwb3N0TWVzc2FnZSgiR2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiKTsKIH0KIAot
dm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2Fs
bGJhY2soVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCitzdGF0aWMgSlNWYWx1ZVJlZiBtYWtlRG9t
YWluc1ZhbHVlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQogewotICAgIFdLQnVuZGxl
RnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAK
LSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJbIik7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIu
YXBwZW5kKCdbJyk7CiAgICAgYm9vbCBmaXJzdERvbWFpbiA9IHRydWU7CiAgICAgZm9yIChhdXRv
JiBkb21haW4gOiBkb21haW5zKSB7Ci0gICAgICAgIGlmIChmaXJzdERvbWFpbikKLSAgICAgICAg
ICAgIGZpcnN0RG9tYWluID0gZmFsc2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJcIiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkb21haW4pOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiIik7CisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGZpcnN0RG9tYWluID8gIlwiIiA6ICIsIFwiIiwgZG9tYWluLCAnIicpOworICAg
ICAgICBmaXJzdERvbWFpbiA9IGZhbHNlOwogICAgIH0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIl0iKTsKLSAgICAKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtl
RnJvbUpTT05TdHJpbmcoY29udGV4dCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0KKyAg
ICBidWlsZGVyLmFwcGVuZCgnXScpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZUZyb21KU09OU3Ry
aW5nKG1haW5KU0NvbnRleHQoKSwgY3JlYXRlSlNTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0
ZjgoKS5kYXRhKCkpLmdldCgpKTsKK30KK3ZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlY2VpdmVB
bGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQor
eworICAgIGF1dG8gcmVzdWx0ID0gbWFrZURvbWFpbnNWYWx1ZShkb21haW5zKTsKICAgICBjYWxs
VGVzdFJ1bm5lckNhbGxiYWNrKEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tJRCwgMSwg
JnJlc3VsdCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6bG9hZGVkU3VicmVzb3VyY2VEb21haW5z
KEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soTG9h
ZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkxvYWRlZFN1YnJlc291cmNlRG9tYWlucyIpKTsKLSAgICBXS0J1
bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkxvYWRlZFN1
YnJlc291cmNlRG9tYWlucyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZWNlaXZl
TG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2soVmVjdG9yPFN0cmluZz4mJiBkb21haW5z
KQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAg
SlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQo
bWFpbkZyYW1lKTsKLSAgICAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ1snKTsKLSAgICBib29sIGlzRmlyc3REb21haW4gPSB0cnVl
OwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBpZiAoaXNGaXJz
dERvbWFpbikKLSAgICAgICAgICAgIGlzRmlyc3REb21haW4gPSBmYWxzZTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiIik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGRvbWFpbik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
XCIiKTsKLSAgICB9Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ10nKTsKLSAgICAKLSAgICBK
U1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwgYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nQnVpbGRlci50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0KKyAgICBhdXRvIHJlc3VsdCA9IG1ha2VEb21haW5z
VmFsdWUoZG9tYWlucyk7CiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhMb2FkZWRTdWJyZXNv
dXJjZURvbWFpbnNDYWxsYmFja0lELCAxLCAmcmVzdWx0KTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjphZGRNb2NrTWVkaWFEZXZpY2UoSlNTdHJpbmdSZWYgcGVyc2lzdGVudElkLCBKU1N0cmluZ1Jl
ZiBsYWJlbCwgY29uc3QgY2hhciogdHlwZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJQZXJzaXN0ZW50SUQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhwZXJzaXN0ZW50
SWQpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkxhYmVsIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0sobGFiZWwpKTsKLQotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlR5cGUi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyh0eXBlKSkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZl
Y3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUo
KSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0g
a2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwot
ICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFkZE1vY2tNZWRpYURldmljZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tl
eXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkFkZE1v
Y2tNZWRpYURldmljZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlBlcnNpc3Rl
bnRJRCIsIHRvV0socGVyc2lzdGVudElkKSB9LAorICAgICAgICB7ICJMYWJlbCIsIHRvV0sobGFi
ZWwpIH0sCisgICAgICAgIHsgIlR5cGUiLCB0b1dLKHR5cGUpIH0sCisgICAgfSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tDYW1lcmFEZXZpY2UoSlNTdHJpbmdSZWYgcGVy
c2lzdGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbCkKQEAgLTI1OTQsMTUzICsxODU3LDcyIEBAIHZv
aWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1NjcmVlbkRldmljZShKU1N0cmluZ1JlZiBwZXJzaXN0ZW50
SWQsIEpTU3RyaW5nUmVmIGxhYmVsCiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJNb2NrTWVkaWFE
ZXZpY2VzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhck1vY2tNZWRpYURldmlj
ZXMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyTW9ja01lZGlhRGV2aWNlcyIp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU1vY2tNZWRpYURldmljZShKU1N0cmluZ1Jl
ZiBwZXJzaXN0ZW50SWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVtb3ZlTW9ja01l
ZGlhRGV2aWNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkodG9X
SyhwZXJzaXN0ZW50SWQpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
UmVtb3ZlTW9ja01lZGlhRGV2aWNlIiwgdG9XSyhwZXJzaXN0ZW50SWQpKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpyZXNldE1vY2tNZWRpYURldmljZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlJlc2V0TW9ja01lZGlhRGV2aWNlcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZSgiUmVzZXRNb2NrTWVkaWFEZXZpY2VzIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9j
a0NhbWVyYU9yaWVudGF0aW9uKHVuc2lnbmVkIG9yaWVudGF0aW9uKQogewotICAgIGF1dG8gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2Nr
Q2FtZXJhT3JpZW50YXRpb24iKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tV
SW50NjRDcmVhdGUob3JpZW50YXRpb24pKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlNldE1vY2tDYW1lcmFPcmllbnRhdGlvbiIsIG9yaWVudGF0aW9uKTsKIH0KIAogYm9v
bCBUZXN0UnVubmVyOjppc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgpCiB7
Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIklzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkIikpOwotICAgIFdL
VHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAg
QVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5h
YmxlZCIpOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQorCiB2b2lkIFRlc3RSdW5uZXI6OmNvbm5l
Y3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDb25uZWN0TW9ja0dhbWVwYWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLQotICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ29ubmVjdE1vY2tHYW1lcGFkIiwgaW5kZXgpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBpbmRleCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEaXNjb25uZWN0TW9ja0dhbWVwYWQiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoaW5kZXgpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiRGlz
Y29ubmVjdE1vY2tHYW1lcGFkIiwgaW5kZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1v
Y2tHYW1lcGFkRGV0YWlscyh1bnNpZ25lZCBpbmRleCwgSlNTdHJpbmdSZWYgZ2FtZXBhZElELCBK
U1N0cmluZ1JlZiBtYXBwaW5nLCB1bnNpZ25lZCBheGlzQ291bnQsIHVuc2lnbmVkIGJ1dHRvbkNv
dW50KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJRCIpKSk7Ci0g
ICAgdmFsdWVzLmFwcGVuZCh0b1dLKGdhbWVwYWRJRCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWFwcGluZyIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZCh0b1dLKG1hcHBpbmcpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSkpOwotCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXhpc0NvdW50IikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhpc0NvdW50KSkpOwot
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QnV0dG9uQ291bnQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShidXR0b25Db3VudCkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAg
ICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5z
aXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tp
XSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQo
KTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZERldGFp
bHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJTZXRNb2NrR2FtZXBhZERldGFpbHMiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7
ICJHYW1lcGFkSUQiLCB0b1dLKGdhbWVwYWRJRCkgfSwKKyAgICAgICAgeyAiTWFwcGluZyIsIHRv
V0sobWFwcGluZykgfSwKKyAgICAgICAgeyAiR2FtZXBhZEluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShpbmRleCkpIH0sCisgICAgICAgIHsgIkF4aXNDb3VudCIsIGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoYXhpc0NvdW50KSkgfSwKKyAgICAgICAgeyAiQnV0dG9uQ291bnQiLCBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKGJ1dHRvbkNvdW50KSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUodW5zaWduZWQgaW5kZXgsIHVu
c2lnbmVkIGF4aXNJbmRleCwgZG91YmxlIHZhbHVlKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+
IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKGluZGV4KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXhpc0luZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhpc0luZGV4KSkpOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpKTsKLQotICAgIFZlY3Rv
cjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7
Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUo
dmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJh
d1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rp
Y3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3
S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlIiwg
Y3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiR2FtZXBhZEluZGV4IiwgYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShpbmRleCkpIH0sCisgICAgICAgIHsgIkF4aXNJbmRleCIsIGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoYXhpc0luZGV4KSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgdW5zaWdu
ZWQgYnV0dG9uSW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2
YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbkluZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uSW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSkpOwotCi0gICAgVmVj
dG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVl
czsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6
ZSh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAg
cmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRl
KHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZEJ1dHRvblZh
bHVlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiR2FtZXBhZEluZGV4IiwgYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpIH0sCisgICAgICAgIHsgIkJ1dHRvbkluZGV4Iiwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25JbmRleCkpIH0sCisgICAgICAgIHsgIlZhbHVl
IiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQor
CiAjZWxzZQorCiB2b2lkIFRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCkK
IHsKIH0KQEAgLTI3NjAsMzAgKzE5NDIsMjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2Ft
ZXBhZEF4aXNWYWx1ZSh1bnNpZ25lZCwgdW5zaWduZWQsIGRvdWJsZSkKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZSh1bnNpZ25lZCwgdW5zaWduZWQsIGRvdWJsZSkK
IHsKIH0KKwogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRP
cGVuUGFuZWxGaWxlcyhKU1ZhbHVlUmVmIGZpbGVzVmFsdWUpCiB7Ci0gICAgV0tCdW5kbGVQYWdl
UmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0g
ICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpKTsKKyAgICBKU0NvbnRleHRSZWYgY29u
dGV4dCA9IG1haW5KU0NvbnRleHQoKTsKIAogICAgIGlmICghSlNWYWx1ZUlzQXJyYXkoY29udGV4
dCwgZmlsZXNWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0UmVmIGZpbGVz
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGZpbGVzVmFsdWUsIG51bGxwdHIpOwotICAgIHN0
YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGZpbGVzTGVuZ3RoVmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIGZpbGVzLCBsZW5ndGhQcm9wZXJ0eS5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgZmlsZXNMZW5ndGhWYWx1
ZSkpCi0gICAgICAgIHJldHVybjsKLQorICAgIGF1dG8gZmlsZXMgPSAoSlNPYmplY3RSZWYpZmls
ZXNWYWx1ZTsKICAgICBhdXRvIGZpbGVVUkxzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0
ZSgpKTsKLSAgICBhdXRvIGZpbGVzTGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgZmlsZXNMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOworICAgIGF1dG8g
ZmlsZXNMZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBmaWxlcyk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWVSZWYgZmls
ZVZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgZmlsZXMsIGksIG51
bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBmaWxlVmFsdWUp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBmaWxlID0gYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBmaWxlVmFsdWUsIG51bGxwdHIpKTsKKyAgICAgICAg
YXV0byBmaWxlID0gY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgZmlsZVZhbHVlKTsKICAgICAgICAg
c2l6ZV90IGZpbGVCdWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXpl
KGZpbGUuZ2V0KCkpICsgMTsKICAgICAgICAgYXV0byBmaWxlQnVmZmVyID0gbWFrZVVuaXF1ZUFy
cmF5PGNoYXI+KGZpbGVCdWZmZXJTaXplKTsKICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmlu
ZyhmaWxlLmdldCgpLCBmaWxlQnVmZmVyLmdldCgpLCBmaWxlQnVmZmVyU2l6ZSk7CkBAIC0yNzk3
LDIyICsxOTc0LDE1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXMoSlNWYWx1
ZVJlZiBmaWxlc1ZhbHVlKQogCiAgICAgfQogCi0gICAgc3RhdGljIGF1dG8gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRPcGVuUGFuZWxGaWxl
VVJMcyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgZmlsZVVSTHMuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0T3BlblBhbmVs
RmlsZVVSTHMiLCBmaWxlVVJMcy5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T3Bl
blBhbmVsRmlsZXNNZWRpYUljb24oSlNWYWx1ZVJlZiBkYXRhKQogewogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBh
Z2UpKTsKLQotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpOwogICAgIC8vIEZJWE1FICgxMjMwNTgpOiBVc2UgYSBKU0MgQVBJIHRvIGdldCBidWZm
ZXIgY29udGVudHMgb25jZSBzdWNoIGlzIGV4cG9zZWQuCi0gICAgV0tSZXRhaW5QdHI8V0tEYXRh
UmVmPiBpY29uRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhBcnJh
eShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgY29udGV4dCwgZGF0YSkpOwotCi0gICAgc3RhdGlj
IGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRPcGVuUGFuZWxGaWxlVVJMc01lZGlhSWNvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZShwYWdlLCBtZXNzYWdlTmFtZS5nZXQoKSwgaWNvbkRhdGEuZ2V0KCkpOworICAgIGF1
dG8gaWNvbkRhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXko
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtYWluSlNDb250ZXh0KCksIGRh
dGEpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE9wZW5QYW5lbEZpbGVVUkxzTWVkaWFJY29u
IiwgaWNvbkRhdGEuZ2V0KCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGF0YSk7CiAjZW5k
aWYKQEAgLTI4MjEsMTEgKzE5OTEsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZp
bGVzTWVkaWFJY29uKEpTVmFsdWVSZWYgZGF0YSkKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxs
U2Vzc2lvbkNyZWRlbnRpYWxzKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2soRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2tJRCwg
Y2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlbW92ZUFsbFNlc3Np
b25DcmVkZW50aWFscyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodHJ1ZSkpOwotICAgIAotICAgIFdLQnVuZGxl
UG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJSZW1vdmVB
bGxTZXNzaW9uQ3JlZGVudGlhbHMiLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjYWxs
RGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2soKQpAQCAtMjgzNSw0OSArMjAw
MSwzMyBAQCB2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlh
bHNDYWxsYmFjaygpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJET01DYWNoZShKU1N0cmluZ1Jl
ZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJET01DYWNoZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKG9yaWdpbikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZSgiQ2xlYXJET01DYWNoZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6Y2xlYXJET01DYWNoZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkNsZWFyRE9NQ2FjaGVzIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhckRP
TUNhY2hlcyIpOwogfQogCiBib29sIFRlc3RSdW5uZXI6Omhhc0RPTUNhY2hlKEpTU3RyaW5nUmVm
IG9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYXNET01DYWNoZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aEpTU3RyaW5nKG9yaWdpbikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0g
bnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dl
dFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJu
IFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1
cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4oIkhhc0RPTUNhY2hlIiwgdG9XSyhvcmlnaW4pLmdldCgpKTsKIH0KIAog
dWludDY0X3QgVGVzdFJ1bm5lcjo6ZG9tQ2FjaGVTaXplKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJET01DYWNoZVNpemUiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhK
U1N0cmluZyhvcmlnaW4pKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICByZXR1cm4gV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4ocmV0dXJuRGF0YSkpOworICAgIHJldHVybiBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NCgiRE9NQ2FjaGVTaXplIiwgdG9X
SyhvcmlnaW4pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1N0b3JhZ2VR
dW90YUluY3JlYXNlKGJvb2wgd2lsbEluY3JlYXNlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHdpbGxJbmNy
ZWFzZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldEFsbG93
U3RvcmFnZVF1b3RhSW5jcmVhc2UiLCB3aWxsSW5jcmVhc2UpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OmdldEFwcGxpY2F0aW9uTWFuaWZlc3RUaGVuKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAg
ICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soR2V0QXBwbGljYXRpb25NYW5pZmVzdENhbGxiYWNr
SUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRBcHBsaWNh
dGlvbk1hbmlmZXN0IikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAg
V1RSOjpwb3N0TWVzc2FnZSgiR2V0QXBwbGljYXRpb25NYW5pZmVzdCIpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OmRpZEdldEFwcGxpY2F0aW9uTWFuaWZlc3QoKQpAQCAtMjg5NywyMjEgKzIwNDcs
MTMwIEBAIHNpemVfdCBUZXN0UnVubmVyOjp1c2VyU2NyaXB0SW5qZWN0ZWRDb3VudCgpIGNvbnN0
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW5qZWN0VXNlclNjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5qZWN0VXNlclNjcmlwdCIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aEpTU3RyaW5nKHNjcmlwdCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJJbmplY3RVc2VyU2NyaXB0IiwgdG9XSyhzY3JpcHQp
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25D
aGFuZ2VkTWVzc2FnZUZvclRlc3RpbmcoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
bmREaXNwbGF5Q29uZmlndXJhdGlvbkNoYW5nZWRNZXNzYWdlRm9yVGVzdGluZyIpKTsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZSgiU2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZE1lc3Nh
Z2VGb3JUZXN0aW5nIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VydmljZVdvcmtlckZl
dGNoVGltZW91dChkb3VibGUgc2Vjb25kcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91Ymxl
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U2VydmljZVdvcmtlckZldGNoVGlt
ZW91dCIsIHNlY29uZHMpOwogfQogCiAvLyBXZWJBdXRobgogdm9pZCBUZXN0UnVubmVyOjphZGRU
ZXN0S2V5VG9LZXljaGFpbihKU1N0cmluZ1JlZiBwcml2YXRlS2V5QmFzZTY0LCBKU1N0cmluZ1Jl
ZiBhdHRyTGFiZWwsIEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uVGFnQmFzZTY0KQogewotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlByaXZhdGVLZXkiKSkpOwotICAgIHZhbHVlcy5hcHBl
bmQodG9XSyhwcml2YXRlS2V5QmFzZTY0KSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQodG9XSyhhdHRyTGFiZWwpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uVGFnIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKHRvV0soYXBwbGljYXRpb25UYWdCYXNlNjQpKTsKLQotICAgIFZlY3RvcjxXS1N0cmlu
Z1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3
S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNp
emUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tp
XSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
ZGRUZXN0S2V5VG9LZXljaGFpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCks
IHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIkFkZFRlc3RLZXlUb0tleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9u
YXJ5KHsKKyAgICAgICAgeyAiUHJpdmF0ZUtleSIsIHRvV0socHJpdmF0ZUtleUJhc2U2NCkgfSwK
KyAgICAgICAgeyAiQXR0ckxhYmVsIiwgdG9XSyhhdHRyTGFiZWwpIH0sCisgICAgICAgIHsgIkFw
cGxpY2F0aW9uVGFnIiwgdG9XSyhhcHBsaWNhdGlvblRhZ0Jhc2U2NCkgfSwKKyAgICB9KS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYW5VcEtleWNoYWluKEpTU3RyaW5nUmVmIGF0
dHJMYWJlbCwgSlNTdHJpbmdSZWYgYXBwbGljYXRpb25MYWJlbEJhc2U2NCkKIHsKLSAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
dG9XSyhhdHRyTGFiZWwpKTsKLQotICAgIGlmIChhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB7Ci0g
ICAgICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkFwcGxpY2F0aW9uTGFiZWwiKSkpOwotICAgICAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXBwbGlj
YXRpb25MYWJlbEJhc2U2NCkpOwotICAgIH0KLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3
S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNp
emUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
cmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVl
c1tpXS5nZXQoKTsKKyAgICBpZiAoIWFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpIHsKKyAgICAgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYW5VcEtleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9u
YXJ5KHsKKyAgICAgICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAg
ICAgICB9KS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDbGVhblVwS2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9u
YXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMu
ZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhblVwS2V5Y2hhaW4iLCBjcmVhdGVXS0RpY3Rp
b25hcnkoeworICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAg
ICAgeyAiQXBwbGljYXRpb25MYWJlbCIsIHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgfSwK
KyAgICB9KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6a2V5RXhpc3RzSW5LZXljaGFp
bihKU1N0cmluZ1JlZiBhdHRyTGFiZWwsIEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxCYXNl
NjQpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkpOwotCi0gICAg
VmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1Zh
bHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJl
c2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5z
aXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAg
ICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIktleUV4aXN0c0luS2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJh
d0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAg
V0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChX
S0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0
dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihy
ZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0
dXJuaW5nQm9vbGVhbigiS2V5RXhpc3RzSW5LZXljaGFpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7
CisgICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAgICB7ICJB
cHBsaWNhdGlvbkxhYmVsIiwgdG9XSyhhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB9LAorICAgIH0p
LmdldCgpKTsKIH0KIAogdW5zaWduZWQgbG9uZyBUZXN0UnVubmVyOjpzZXJ2ZXJUcnVzdEV2YWx1
YXRpb25DYWxsYmFja0NhbGxzQ291bnQoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
cnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCIpKTsKLSAgICBXS1R5cGVSZWYg
cmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChX
S0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICByZXR1
cm4gV0tVSW50NjRHZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXR1
cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJu
aW5nVUludDY0KCJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5j
aHJvbm91c2x5KGJvb2wgc2hvdWxkRGlzbWlzc0FzeW5jaHJvbm91c2x5KQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3Vz
bHkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHNob3VsZERpc21pc3NBc3luY2hyb25vdXNseSkpOwotICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVy
dHNBc3luY2hyb25vdXNseSIsIHNob3VsZERpc21pc3NBc3luY2hyb25vdXNseSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6YWJvcnRNb2RhbCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QWJvcnRNb2RhbCIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQWJvcnRNb2RhbCIpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oKQogewotICAgIGF1
dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJE
dW1wQWRDbGlja0F0dHJpYnV0aW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlKCJEdW1wQWRDbGlja0F0dHJpYnV0aW9uIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oKQogewotICAgIGF1dG8gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhckFkQ2xp
Y2tBdHRyaWJ1dGlvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZSgiQ2xlYXJBZENsaWNrQXR0cmlidXRpb24iKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbnNUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsKCkK
IHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3Zh
bCIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJBZENsaWNrQXR0cmlidXRpb25z
VGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFk
Q2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1l
ckZvclRlc3RpbmciKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhKU1N0cmlu
Z1JlZiB1cmxTdHJpbmcpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWRDbGlja0F0
dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmciKSk7Ci0gICAgYXV0byB3dGZVUkxTdHJp
bmcgPSB0b1dURlN0cmluZyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh1cmxTdHJpbmcpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVVJMQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKHd0ZlVSTFN0cmluZy51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRB
ZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyIsCisgICAgICAgIGFkb3B0
V0soV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodG9XVEZTdHJpbmcodXJsU3RyaW5nKS51dGY4
KCkuZGF0YSgpKSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Om1hcmtBZENsaWNrQXR0cmlidXRp
b25zQXNFeHBpcmVkRm9yVGVzdGluZygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWFy
a0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nIikpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJNYXJrQWRDbGlja0F0dHJpYnV0
aW9uc0FzRXhwaXJlZEZvclRlc3RpbmciKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRPZmZz
Y3JlZW5DYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiT2Zm
c2NyZWVuQ2FudmFzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVu
Y2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5w
YWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVy
ZW5jZSgiT2Zmc2NyZWVuQ2FudmFzRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiBib29sIFRlc3RS
dW5uZXI6Omhhc0FwcEJvdW5kU2Vzc2lvbigpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhc0FwcEJvdW5kU2Vzc2lvbiIp
KTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRh
dGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0KLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSGFzQXBwQm91bmRTZXNzaW9u
Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBCb3VuZFNlc3Npb24oKQogewotICAg
IGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDbGVhckFwcEJvdW5kU2Vzc2lvbiIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xl
YXJBcHBCb3VuZFNlc3Npb24iKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBcHBCb3VuZERv
bWFpbnMoSlNWYWx1ZVJlZiBvcmlnaW5BcnJheSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhEaWRTZXRBcHBCb3VuZERvbWFpbnND
YWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAg
SlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAKICAgICBpZiAoIUpTVmFs
dWVJc0FycmF5KGNvbnRleHQsIG9yaWdpbkFycmF5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SlNPYmplY3RSZWYgb3JpZ2lucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBvcmlnaW5BcnJh
eSwgbnVsbHB0cik7Ci0gICAgc3RhdGljIGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgb3Jp
Z2luc0xlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcmlnaW5zLCBs
ZW5ndGhQcm9wZXJ0eS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIo
Y29udGV4dCwgb3JpZ2luc0xlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgYXV0
byBvcmlnaW5zID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9yaWdpbkFycmF5LCBudWxscHRy
KTsKICAgICBhdXRvIG9yaWdpblVSTHMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkp
OwotICAgIGF1dG8gb3JpZ2luc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIG9yaWdpbnNMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgb3JpZ2luc0xlbmd0aDsgKytpKSB7CisgICAgYXV0byBvcmlnaW5z
TGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgb3JpZ2lucyk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG9yaWdpbnNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIG9y
aWdpblZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3JpZ2lucywg
aSwgbnVsbHB0cik7CiAgICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIG9yaWdp
blZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gb3JpZ2luID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBvcmlnaW5WYWx1ZSwgbnVsbHB0cikp
OworICAgICAgICBhdXRvIG9yaWdpbiA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIG9yaWdpblZh
bHVlKTsKICAgICAgICAgc2l6ZV90IG9yaWdpbkJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGlt
dW1VVEY4Q1N0cmluZ1NpemUob3JpZ2luLmdldCgpKSArIDE7CiAgICAgICAgIGF1dG8gb3JpZ2lu
QnVmZmVyID0gbWFrZVVuaXF1ZUFycmF5PGNoYXI+KG9yaWdpbkJ1ZmZlclNpemUpOwogICAgICAg
ICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKG9yaWdpbi5nZXQoKSwgb3JpZ2luQnVmZmVyLmdldCgp
LCBvcmlnaW5CdWZmZXJTaXplKTsKQEAgLTMxMTksNyArMjE3OCw3IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0QXBwQm91bmREb21haW5zKEpTVmFsdWVSZWYgb3JpZ2luQXJyYXksIEpTVmFsdWVSZWYg
Y29tcGxldGlvCiAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG9yaWdpblVSTHMuZ2V0KCksIGFk
b3B0V0soV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcob3JpZ2luQnVmZmVyLmdldCgpKSkuZ2V0
KCkpOwogICAgIH0KIAotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBcHBCb3VuZERvbWFpbnMiKSk7CisgICAgYXV0byBtZXNz
YWdlTmFtZSA9IHRvV0soIlNldEFwcEJvdW5kRG9tYWlucyIpOwogICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgb3JpZ2luVVJMcy5nZXQoKSk7CiB9CiAKQEAgLTMxMjgsNiArMjE4NywxMSBAQCB2b2lk
IFRlc3RSdW5uZXI6OmRpZFNldEFwcEJvdW5kRG9tYWluc0NhbGxiYWNrKCkKICAgICBjYWxsVGVz
dFJ1bm5lckNhbGxiYWNrKERpZFNldEFwcEJvdW5kRG9tYWluc0NhbGxiYWNrSUQpOwogfQogCit2
b2lkIFRlc3RSdW5uZXI6OnBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUp
Cit7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIHRvV0sobmFtZSkuZ2V0KCksIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVl
KSkuZ2V0KCkpOworfQorCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogfSAv
LyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5oCmluZGV4IGMwYTE0MDkwNWVkZjNkZGE0YTc2MWFiNjIwN2Q5N2I0
MzYyMDg2YmIuLmFhZWI0MTBlM2VkMDdmYjZjYTRmOWYwM2JmZjdkZTM3MjI1MjdmNzAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5o
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5o
CkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICAvLyBKU1dyYXBwYWJsZQogICAgIHZpcnR1
YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVj
dChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAg
IGJvb2wgaXNJT1NGYW1pbHkoKSBjb25zdAogICAgIHsKQEAgLTI1Myw3ICsyNTMsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChib29sIGYpIHsgbV93
aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCA9IGY7IH0KICAgICBib29sIHdpbGxTZW5kUmVxdWVz
dFJldHVybnNOdWxsT25SZWRpcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbFNlbmRSZXF1ZXN0
UmV0dXJuc051bGxPblJlZGlyZWN0OyB9CiAgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1
cm5zTnVsbE9uUmVkaXJlY3QoYm9vbCBmKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxP
blJlZGlyZWN0ID0gZjsgfQotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0QWRkc0hUVFBCb2R5
KEpTU3RyaW5nUmVmIGJvZHkpIHsgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keSA9IHRvV1RGU3Ry
aW5nKHRvV0soYm9keSkpOyB9CisgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RBZGRzSFRUUEJv
ZHkoSlNTdHJpbmdSZWYgYm9keSkgeyBtX3dpbGxTZW5kUmVxdWVzdEhUVFBCb2R5ID0gdG9XVEZT
dHJpbmcoYm9keSk7IH0KICAgICBTdHJpbmcgd2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHkoKSBjb25z
dCB7IHJldHVybiBtX3dpbGxTZW5kUmVxdWVzdEhUVFBCb2R5OyB9CiAKICAgICB2b2lkIHNldFRl
eHREaXJlY3Rpb24oSlNTdHJpbmdSZWYpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNhbGxGb2N1c1dlYlZpZXdDYWxsYmFjaygpOwogICAgIHZvaWQgY2FsbFNldEJhY2tp
bmdTY2FsZUZhY3RvckNhbGxiYWNrKCk7CiAKLSAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShK
U1N0cmluZ1JlZiBwcmVmZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSk7CisgICAgc3RhdGljIHZv
aWQgb3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVm
IHZhbHVlKTsKIAogICAgIC8vIENvb2tpZXMgdGVzdGluZwogICAgIHZvaWQgc2V0QWx3YXlzQWNj
ZXB0Q29va2llcyhib29sKTsKQEAgLTMwNCw3ICszMDQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBH
ZW9sb2NhdGlvbi4KICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sKTsKLSAg
ICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91Ymxl
IGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBKU1ZhbHVlUmVmIGFsdGl0dWRlLCBKU1ZhbHVl
UmVmIGFsdGl0dWRlQWNjdXJhY3ksIEpTVmFsdWVSZWYgaGVhZGluZywgSlNWYWx1ZVJlZiBzcGVl
ZCwgSlNWYWx1ZVJlZiBmbG9vckxldmVsKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5
LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNj
dXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwg
T3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdlKTsKICAgICBib29s
IGlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpOwogCkBAIC0zMzUsOCArMzM1LDggQEAgcHVi
bGljOgogICAgIGJvb2wgc2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCgpIGNvbnN0OwogCiAgICAg
SlNWYWx1ZVJlZiBmYWlsTmV4dE5ld0NvZGVCbG9jaygpOwotICAgIEpTVmFsdWVSZWYgbnVtYmVy
T2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKTsKLSAgICBKU1ZhbHVlUmVmIG5l
dmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbik7CisgICAgSlNWYWx1ZVJl
ZiBudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWVSZWYgZnVuY3Rpb24pOworICAgIEpTVmFsdWVS
ZWYgbmV2ZXJJbmxpbmVGdW5jdGlvbihKU1ZhbHVlUmVmIGZ1bmN0aW9uKTsKIAogICAgIGJvb2wg
c2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5OyB9CiAgICAgdm9pZCBzZXRT
aG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheShib29sKTsKQEAgLTU0OSw2ICs1
NDksOCBAQCBwcml2YXRlOgogCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1fdGVzdFVSTDsg
Ly8gU2V0IGJ5IEluamVjdGVkQnVuZGxlUGFnZSBvbmNlIHByb3Zpc2lvbmFsIGxvYWQgc3RhcnRz
LgogCisgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sKTsKKwogICAg
IFN0cmluZyBtX3dpbGxTZW5kUmVxdWVzdEhUVFBCb2R5OwogICAgIFdURjo6U2Vjb25kcyBtX3Rp
bWVvdXQgeyAzMF9zIH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCmluZGV4IDY0YWM4MTk3
MTUzYWFlMGEwYWI3MWViYmMyOTQyNDg0YTM1ZTY1YWQuLjZlMDBkOTkyMjVkMWYxYWFiMjYxNTZj
ODkyNWIwNTY2YTM2NmQ3MjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcApAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xs
ZXIuaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmpl
Y3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUGFnZS5oIgogI2luY2x1ZGUg
IkpTVGV4dElucHV0Q29udHJvbGxlci5oIgpAQCAtNDAsMzAgKzQxLDE0IEBAIFJlZjxUZXh0SW5w
dXRDb250cm9sbGVyPiBUZXh0SW5wdXRDb250cm9sbGVyOjpjcmVhdGUoKQogICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFRleHRJbnB1dENvbnRyb2xsZXIpOwogfQogCi1UZXh0SW5wdXRDb250cm9s
bGVyOjpUZXh0SW5wdXRDb250cm9sbGVyKCkKLXsKLX0KLQotVGV4dElucHV0Q29udHJvbGxlcjo6
flRleHRJbnB1dENvbnRyb2xsZXIoKQotewotfQotCiBKU0NsYXNzUmVmIFRleHRJbnB1dENvbnRy
b2xsZXI6OndyYXBwZXJDbGFzcygpCiB7CiAgICAgcmV0dXJuIEpTVGV4dElucHV0Q29udHJvbGxl
cjo6dGV4dElucHV0Q29udHJvbGxlckNsYXNzKCk7CiB9CiAKLXZvaWQgVGV4dElucHV0Q29udHJv
bGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
d2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFRleHRJbnB1dENvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgc2V0
UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCAidGV4dElucHV0Q29udHJvbGxlciIsIHRo
aXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUsIGV4Y2VwdGlvbik7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBhcnJheUxlbmd0aChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgYXJyYXkpCi17Ci0gICAgYXV0byBsZW5n
dGhTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikp
OwotICAgIGlmIChhdXRvIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0
LCBhcnJheSwgbGVuZ3RoU3RyaW5nLmdldCgpLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUs
IG51bGxwdHIpKTsKLSAgICByZXR1cm4gMDsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShj
b250ZXh0LCAidGV4dElucHV0Q29udHJvbGxlciIsIHRoaXMpOwogfQogCiBzdGF0aWMgV0tBcnJh
eVJlZiBjcmVhdGVDb21wb3NpdGlvbkhpZ2hsaWdodERhdGEoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYganNIaWdobGlnaHRzVmFsdWUpCkBAIC03Miw1MCArNTcsMTkgQEAgc3RhdGlj
IFdLQXJyYXlSZWYgY3JlYXRlQ29tcG9zaXRpb25IaWdobGlnaHREYXRhKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIHJl
c3VsdCA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7Ci0gICAgYXV0byBqc0hpZ2hsaWdodHNBcnJh
eSA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGpzSGlnaGxpZ2h0c1ZhbHVlKTsKLSAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBqc0hpZ2hsaWdodHNBcnJheSk7Ci0g
ICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBhdXRvIGpzRnJv
bUtleSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmcm9tIikpOwotICAg
IGF1dG8ganNMZW5ndGhLZXkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
bGVuZ3RoIikpOwotICAgIGF1dG8ganNDb2xvcktleSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJjb2xvciIpKTsKLQotICAgIGF1dG8gd2tGcm9tS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZnJvbSIpKTsKLSAgICBhdXRvIHdrTGVuZ3Ro
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwot
ICAgIGF1dG8gd2tDb2xvcktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImNvbG9yIikpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8g
anNPYmplY3RWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGpzSGln
aGxpZ2h0c0FycmF5LCBpLCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbiB8fCAh
SlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGpzT2JqZWN0VmFsdWUpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgYXV0byBqc09iamVjdCA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+
KGpzT2JqZWN0VmFsdWUpOwotICAgICAgICBhdXRvIGpzRnJvbVZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCBqc09iamVjdCwganNGcm9tS2V5LmdldCgpLCBudWxscHRyKTsKLSAg
ICAgICAgaWYgKCFqc0Zyb21WYWx1ZSB8fCAhSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGpzRnJv
bVZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8ganNMZW5ndGhW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwganNPYmplY3QsIGpzTGVuZ3RoS2V5
LmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFqc0xlbmd0aFZhbHVlIHx8ICFKU1ZhbHVl
SXNOdW1iZXIoY29udGV4dCwganNMZW5ndGhWYWx1ZSkpCisgICAgYXV0byBhcnJheSA9IGNvbnN0
X2Nhc3Q8SlNPYmplY3RSZWY+KGpzSGlnaGxpZ2h0c1ZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5n
dGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBhcnJheSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFBy
b3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgbnVsbHB0cik7CisgICAgICAgIGlmICgh
dmFsdWUgfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBhdXRvIGpzQ29sb3JWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkoY29udGV4dCwganNPYmplY3QsIGpzQ29sb3JLZXkuZ2V0KCksIG51bGxwdHIpOwotICAgICAg
ICBpZiAoIWpzQ29sb3JWYWx1ZSB8fCAhSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGpzQ29sb3JW
YWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIGNvbG9yID0gYWRv
cHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBqc0NvbG9yVmFsdWUsIG51bGxwdHIpKTsK
LSAgICAgICAgYXV0byB3a0NvbG9yID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
Zyhjb2xvci5nZXQoKSkpOwotICAgICAgICBhdXRvIHdrRnJvbSA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUobHJvdW5kKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc0Zyb21WYWx1ZSwgbnVsbHB0
cikpKSk7Ci0gICAgICAgIGF1dG8gd2tMZW5ndGggPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxy
b3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNMZW5ndGhWYWx1ZSwgbnVsbHB0cikpKSk7
Ci0KKyAgICAgICAgYXV0byBvYmplY3QgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPih2YWx1ZSk7
CiAgICAgICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkaWN0aW9uYXJ5LmdldCgpLCB3
a0Zyb21LZXkuZ2V0KCksIHdrRnJvbS5nZXQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oZGljdGlvbmFyeS5nZXQoKSwgd2tMZW5ndGhLZXkuZ2V0KCksIHdrTGVuZ3RoLmdldCgpKTsK
LSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkaWN0aW9uYXJ5LmdldCgpLCB3a0NvbG9yS2V5
LmdldCgpLCB3a0NvbG9yLmdldCgpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImZy
b20iLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obnVtZXJpY1Byb3BlcnR5KGNvbnRleHQsIG9iamVj
dCwgImZyb20iKSkpOworICAgICAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCAibGVuZ3RoIiwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJsZW5n
dGgiKSkpOworICAgICAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCAiY29sb3IiLCB0b1dLKHN0cmlu
Z1Byb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgImNvbG9yIikpLmdldCgpKTsKICAgICAgICAgV0tB
cnJheUFwcGVuZEl0ZW0ocmVzdWx0LCBkaWN0aW9uYXJ5LmdldCgpKTsKICAgICB9Ci0KICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5oCmluZGV4IDU1OGMyZTYxMTQw
ODE3ODVlM2I3Y2FlMTlmZWZkMzk2YWViMzdhOTQuLmE0NGMyOGU4NDQzOTE3MjkyYTliMzdiY2I3
ZTI1NTJkMTIxNDRjYTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5oCkBAIC0yOCwxNyArMjgsMTcg
QEAKICNpbmNsdWRlICJKU1dyYXBwYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAordHlw
ZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0eXBlZGVm
IHN0cnVjdCBPcGFxdWVKU1N0cmluZyogSlNTdHJpbmdSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVj
dCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVlUmVmOworCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3Mg
VGV4dElucHV0Q29udHJvbGxlciA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CitjbGFzcyBUZXh0SW5w
dXRDb250cm9sbGVyIGZpbmFsIDogcHVibGljIEpTV3JhcHBhYmxlIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPFRleHRJbnB1dENvbnRyb2xsZXI+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgflRl
eHRJbnB1dENvbnRyb2xsZXIoKTsKLQotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBK
U0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOwogCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgdm9p
ZCBzZXRNYXJrZWRUZXh0KEpTU3RyaW5nUmVmIHRleHQsIGludCBmcm9tLCBpbnQgbGVuZ3RoLCBi
b29sIHN1cHByZXNzVW5kZXJsaW5lLCBKU1ZhbHVlUmVmIGhpZ2hsaWdodHMpOwogICAgIGJvb2wg
aGFzTWFya2VkVGV4dCgpOwpAQCAtNDYsNyArNDYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNl
cnRUZXh0KEpTU3RyaW5nUmVmIHRleHQpOwogCiBwcml2YXRlOgotICAgIFRleHRJbnB1dENvbnRy
b2xsZXIoKTsKKyAgICBUZXh0SW5wdXRDb250cm9sbGVyKCkgPSBkZWZhdWx0OworCisgICAgSlND
bGFzc1JlZiB3cmFwcGVyQ2xhc3MoKSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9B
Y3RpdmF0ZUZvbnRzQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2NvY29hL0FjdGl2YXRlRm9udHNDb2NvYS5tbQppbmRleCAwMjRmZTYwNTczYjhmMmM1OTJl
YmZkYjM1ZjNhNDQ0ODVjZGI5NzU2Li41YTViNzdlYzE5NGRhNWZlM2ZmZjk5MTM3Y2U5YWNkMjZk
ZmU0YzFlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2NvY29hL0FjdGl2YXRlRm9udHNDb2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2NvY29hL0FjdGl2YXRlRm9udHNDb2NvYS5tbQpAQCAtMTM2LDcgKzEz
Niw3IEBAIHZvaWQgYWN0aXZhdGVGb250cygpCiAKIHZvaWQgaW5zdGFsbEZha2VIZWx2ZXRpY2Eo
V0tTdHJpbmdSZWYgY29uZmlndXJhdGlvbikKIHsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGNvbmZpZ3VyYXRpb25TdHJpbmcgPSBhZG9wdENGKFdLU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRpb24pKTsKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb25T
dHJpbmcgPSBhZG9wdENGKFdLU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGNvbmZpZ3VyYXRpb24pKTsKICAgICBOU1VSTCAqcmVzb3VyY2VVUkwgPSBbcmVzb3VyY2VzRGly
ZWN0b3J5VVJMKCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OltOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiRmFrZUhlbHZldGljYS0lQC50dGYiLCBjb25maWd1cmF0aW9uU3RyaW5nLmdl
dCgpXSBpc0RpcmVjdG9yeTpOT107CiAgICAgQ0ZFcnJvclJlZiBlcnJvciA9IG51bGxwdHI7CiAg
ICAgaWYgKCFDVEZvbnRNYW5hZ2VyUmVnaXN0ZXJGb250c0ZvclVSTCgoX19icmlkZ2UgQ0ZVUkxS
ZWYpcmVzb3VyY2VVUkwsIGtDVEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJyb3IpKSB7CmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0lu
amVjdGVkQnVuZGxlUGFnZUNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbQppbmRleCA4MTc2MTgyN2E4
ODFkMDZkZmU3MGE5YmQzMjI0NzMyYWUxOWJjZjI4Li45MWQyNDljNzI3ZjY4NzVlZDRhNGNjZjE1
OWMwZjc3ZDcyZjg1YmQ1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFnZUNvY29hLm1tCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29j
b2EubW0KQEAgLTQ3LDEzICs0NywxMyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cGxhdGZv
cm1EaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZQogCiBTdHJp
bmcgSW5qZWN0ZWRCdW5kbGVQYWdlOjpwbGF0Zm9ybVJlc3BvbnNlTWltZVR5cGUoV0tVUkxSZXNw
b25zZVJlZiByZXNwb25zZSkKIHsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gbnNVUkxS
ZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNl
KSk7CisgICAgYXV0byBuc1VSTFJlc3BvbnNlID0gYWRvcHROUyhXS1VSTFJlc3BvbnNlQ29weU5T
VVJMUmVzcG9uc2UocmVzcG9uc2UpKTsKICAgICByZXR1cm4gW25zVVJMUmVzcG9uc2UuZ2V0KCkg
TUlNRVR5cGVdOwogfQogCiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVh
ZGVyQ291bnQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKIHsKLSAgICBSZXRhaW5QdHI8TlNV
UkxSZXNwb25zZT4gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VS
TFJlc3BvbnNlKHJlc3BvbnNlKSk7CisgICAgYXV0byBuc1VSTFJlc3BvbnNlID0gYWRvcHROUyhX
S1VSTFJlc3BvbnNlQ29weU5TVVJMUmVzcG9uc2UocmVzcG9uc2UpKTsKICAgICBpZiAoIVtuc1VS
TFJlc3BvbnNlIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pCiAgICAg
ICAgIHJldHVybiB7IH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJ
T1MubW0KaW5kZXggODdjY2QyMWNhOWE3N2FhMmQwYTIxYTRjYWI1MjFjYWVlZmE5YzRhMi4uYzQx
ODIzMGYzYjRmZGU3MTlhYzZjY2M4NGI3NDJkYmVjYTE0ZDI0YSAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3Mv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KQEAgLTYyLDcgKzYyLDcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFt
ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJp
b3MiKSk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoImlvcyIpOwogfQogCiB2b2lk
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKQEAgLTg5
LDcgKzg5LDcgQEAgc3RhdGljIGlkIGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChpZCBvYmosIE5T
U3RyaW5nICppZEF0dHJpYnV0ZSkKIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYg
aWRBdHRyaWJ1dGUpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIGlkIHJvb3QgPSBzdGF0aWNf
Y2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7
CiAKICAgICBpZCByZXN1bHQgPSBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQocm9vdCwgW05TU3Ry
aW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjppZEF0dHJpYnV0ZV0pOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudElPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5kZXggNTIyMzRhYTRkNzQ3MmNkZTA3MWQ5ZTg2
OTY5MGQ5MzU1MjlhMjBkMi4uYmJjOGJiMTZjODY0YmMyNjEwY2ZhYTY5YTA2ZmQ4MTNjNzY5NWQw
NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3Mv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCkBAIC0xMzYs
MTEgKzEzNiw2IEBAIEBlbmQKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0gICAgcmV0dXJuIGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkpOwotfQotCiBzdGF0aWMg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNvbmNhdGVuYXRlQXR0cmlidXRlQW5kVmFsdWUoTlNT
dHJpbmcgKmF0dHJpYnV0ZSwgTlNTdHJpbmcgKnZhbHVlKQogewogICAgIFZlY3RvcjxVbmlDaGFy
PiBidWZmZXIoW2F0dHJpYnV0ZSBsZW5ndGhdKTsKQEAgLTMzMCwyNyArMzI1LDI3IEBAIFJlZlB0
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNjbG9z
ZWRCeVJvdygpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRl
RW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
RG9jdW1lbnRMaW5rcygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YWxsQXR0cmlidXRlcygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0Rlc2NyaXB0aW9uT2ZBdHRyaWJ1dGVWYWx1
ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpT
U3RyaW5nUmVmIGF0dHJpYnV0ZSkKQEAgLTM4Miw3ICszNzcsNyBAQCBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNT
dHJpbmdSZQogICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGF0dHJpYnV0ZSwg
IkFYVGV4dHVhbENvbnRleHQiKSkKICAgICAgICAgcmV0dXJuIFtbbV9lbGVtZW50IGFjY2Vzc2li
aWxpdHlUZXh0dWFsQ29udGV4dF0gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIAotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZShK
U1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBAIC00NDMsMTcgKzQzOCwxNyBAQCBib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0
ZSkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBh
cmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUoKQogewotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJy
b2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKQEAgLTQ2MywxMyArNDU4LDEyIEBAIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3Jp
cHRpb24oKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y29tcHV0ZWRSb2xlU3RyaW5nKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmco
KTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnRpdGxlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQpAQCAtNDc5LDcgKzQ3Myw3IEBAIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigp
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpvcmll
bnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKQEAgLTQ4OSw3ICs0ODMsNyBA
QCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5n
VmFsdWUoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6bGFuZ3VhZ2UoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCgpIGNvbnN0CkBAIC01NDksNyArNTQzLDcg
QEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlKCkKIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24o
KQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0
ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Q
b2ludExpbmVOdW1iZXIoKQpAQCAtNTg0LDcgKzU3OCw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNSZXF1aXJlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNGb2N1c2VkKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCkBAIC01OTYsMTMgKzU4OSwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzU2VsZWN0ZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNJbmRldGVybWluYXRlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC02MzgsNyArNjI5LDcgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphcmlhSXNHcmFiYmVkKCkgY29uc3QKIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogLy8gcGFyYW1ldGVyaXplZCBhdHRyaWJ1dGVzCkBAIC02NTksNyArNjUw
LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJh
bmdlRm9yUG9zaXRpb24oaW50IHgsIGludCB5KQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24s
IHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOwor
ICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRp
b24sIHVuc2lnbmVkIGxlbmd0aCkKQEAgLTcxMywzMiArNzA0LDMyIEBAIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RUZXh0V2l0aENyaXRlcmlh
KEpTQ29udGV4CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1w
dHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
SGVhZGVycygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1
cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVzT2ZSb3dzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dHJhaXRzKCkKQEAgLTkwMywyMyArODk0LDIx
IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1
bnNpZ25lZCBpbmRleCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVh
clNlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vz
c2liaWxpdHlWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
b2N1bWVudEVuY29kaW5nKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOwor
ICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQogewotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXNzaXN0aXZlVGVjaG5vbG9neVNpbXVsYXRl
ZEZvY3VzKCkKQEAgLTEwMTYsMzEgKzEwMDUsMjYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNTZWxlY3RhYmxlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxl
Y3RhYmxlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbigpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTA1MiwxMyArMTAzNiwxMSBAQCBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzTXVsdGlMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMDc0LDIyICsxMDU2LDE4IEBAIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpwb3B1cFZhbHVlKCkgY29uc3QK
IAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQogewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2Vs
ZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uKCkKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIC8vIFRleHQgbWFya2VycwpAQCAtMTEzNiw3
ICsxMTE0LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3MKIHsKICAgICBpZCB0ZXh0TWFya2Vy
cyA9IG1hcmtlclJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpOwogICAgIGlmICghW3Rl
eHRNYXJrZXJzIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiAgICAgcmV0dXJuIFtbbV9lbGVtZW50IHN0cmluZ0ZvclRleHRNYXJrZXJzOnRleHRNYXJrZXJz
XSBjcmVhdGVKU1N0cmluZ1JlZl07CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0gYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1t
CmluZGV4IGNhYjNmMThiMzY1OWY0OTE2YmQ1MDA4NzkyODZkNmEyN2MwYzlmOTEuLjk4MWExZmQw
ZGM3NTgwY2YwMTJkMzE1NmI4ZjlkZjk4OTMwMTFiZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvRXZlbnRTZW5kZXJQ
cm94eUlPUy5tbQpAQCAtMzYsMjQgKzM2LDEyIEBAIG5hbWVzcGFjZSBXVFIgewogCiBFdmVudFNl
bmRlclByb3h5OjpFdmVudFNlbmRlclByb3h5KFRlc3RDb250cm9sbGVyKiB0ZXN0Q29udHJvbGxl
cikKICAgICA6IG1fdGVzdENvbnRyb2xsZXIodGVzdENvbnRyb2xsZXIpCi0gICAgLCBtX3RpbWUo
MCkKLSAgICAsIG1fcG9zaXRpb24oKQotICAgICwgbV9sZWZ0TW91c2VCdXR0b25Eb3duKGZhbHNl
KQotICAgICwgbV9jbGlja0NvdW50KDApCi0gICAgLCBtX2NsaWNrVGltZSgwKQotICAgICwgbV9j
bGlja1Bvc2l0aW9uKCkKLSAgICAsIG1fY2xpY2tCdXR0b24oa1dLRXZlbnRNb3VzZUJ1dHRvbk5v
QnV0dG9uKQotICAgICwgZXZlbnROdW1iZXIoMCkKIHsKICAgICBVTlVTRURfUEFSQU0obV90ZXN0
Q29udHJvbGxlcik7CiAgICAgVU5VU0VEX1BBUkFNKG1fbGVmdE1vdXNlQnV0dG9uRG93bik7CiAg
ICAgVU5VU0VEX1BBUkFNKGV2ZW50TnVtYmVyKTsKIH0KIAotRXZlbnRTZW5kZXJQcm94eTo6fkV2
ZW50U2VuZGVyUHJveHkoKQotewotfQotCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZUNs
aWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKIHsKICAgICBpZiAobV90aW1lIC0gbV9jbGlj
a1RpbWUgPCAxICYmIG1fcG9zaXRpb24gPT0gbV9jbGlja1Bvc2l0aW9uICYmIGJ1dHRvbiA9PSBt
X2NsaWNrQnV0dG9uKSB7CkBAIC03MCwxNyArNTgsMTQgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5
Ojp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiAKIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6bW91c2VEb3duKHVuc2lnbmVkIGJ1dHRvbk51bWJlciwgV0tFdmVudE1vZGlmaWVy
cyBtb2RpZmllcnMpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6bW91c2VVcCh1bnNpZ25lZCBidXR0b25OdW1iZXIsIFdLRXZlbnRNb2RpZmllcnMgbW9k
aWZpZXJzKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6
Om1vdXNlTW92ZVRvKGRvdWJsZSB4LCBkb3VibGUgeSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0K
IAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQpA
QCAtOTAsNzkgKzc1LDY2IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50
IG1pbGxpc2Vjb25kcykKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjprZXlEb3duKFdLU3RyaW5n
UmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIHVuc2lnbmVkIGtleUxvY2F0aW9u
KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNl
U2Nyb2xsQnkoaW50IHgsIGludCB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2
ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhp
bnQgeCwgaW50IHksIGludCBwaGFzZSwgaW50IG1vbWVudHVtKQogewotICAgIC8vIFdyaXRlIG1l
LgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KGlu
dCB4LCBpbnQgeSwgYm9vbCBwYWdlZCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCisKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2lu
dChpbnQgeCwgaW50IHkpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKIHsKLSAg
ICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlm
aWVyKFdLRXZlbnRNb2RpZmllcnMsIGJvb2wgZW5hYmxlKQogewotICAgIC8vIFdyaXRlIG1lLgog
fQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoUG9pbnRSYWRpdXMoaW50IHJhZGl1
c1gsIGludCByYWRpdXNZKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnRvdWNoU3RhcnQoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2
ZW50U2VuZGVyUHJveHk6OnRvdWNoTW92ZSgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hFbmQoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQog
CiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICAvLyBXcml0ZSBt
ZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKCkKIHsKLSAg
ICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpyZWxlYXNlVG91Y2hQ
b2ludChpbnQgaW5kZXgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCiB7Ci0gICAgLy8gV3JpdGUgbWUu
CiB9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMu
bW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmls
aXR5Q29tbW9uTWFjLm1tCmluZGV4IDI1ZTBjM2QwMGU0OWJiMmI1ZWQyMDNlMTkwY2YxZWNjOTBk
ZjNhZjQuLjM1NGE4ZjY1NTVjNmMwMDI2NWY1NjgxYTZiMzcxNTJhODRhNTYyYzAgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxp
dHlDb21tb25NYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9y
dCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogCiAjaW1wb3J0ICJKU1dyYXBwZXIuaCIKKyNp
bXBvcnQgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJp
bmdSZWZDRi5oPgogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAKQEAgLTYxLDI2ICs2MiwyMiBA
QCBDbGFzcyB3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKCkKICAgICByZXR1cm4g
Y2xzOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBtYWtlQXJyYXlSZWZGb3JBcnJheShKU0NvbnRl
eHRSZWYgY29udGV4dCwgTlNBcnJheSAqYXJyYXkpCitzdGF0aWMgSlNPYmplY3RSZWYgbWFrZUpT
QXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQogewogICAgIE5TVUlu
dGVnZXIgY291bnQgPSBhcnJheS5jb3VudDsKICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tjb3Vu
dF07Ci0KICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAg
ICBhcmd1bWVudHNbaV0gPSBtYWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBbYXJyYXkgb2Jq
ZWN0QXRJbmRleDppXSk7Ci0KICAgICByZXR1cm4gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwg
Y291bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIG1ha2VP
YmplY3RSZWZGb3JEaWN0aW9uYXJ5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0RpY3Rpb25hcnkg
KmRpY3Rpb25hcnkpCitzdGF0aWMgSlNPYmplY3RSZWYgbWFrZUpTT2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkpCiB7Ci0gICAgSlNPYmplY3RSZWYg
b2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIpOwotCisgICAg
YXV0byBvYmplY3QgPSBKU09iamVjdE1ha2UoY29udGV4dCwgbnVsbHB0ciwgbnVsbHB0cik7CiAg
ICAgW2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNTdHJp
bmcgKmtleSwgaWQgb2JqLCBCT09MICopIHsKICAgICAgICAgaWYgKEpTVmFsdWVSZWYgcHJvcGVy
dHlWYWx1ZSA9IG1ha2VWYWx1ZVJlZkZvclZhbHVlKGNvbnRleHQsIG9iaikpCiAgICAgICAgICAg
ICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgW2tleSBjcmVhdGVKU1N0cmlu
Z1JlZl0uZ2V0KCksIHByb3BlcnR5VmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVs
bHB0cik7CiAgICAgfV07Ci0KICAgICByZXR1cm4gb2JqZWN0OwogfQogCkBAIC05Niw5ICs5Myw5
IEBAIEpTVmFsdWVSZWYgbWFrZVZhbHVlUmVmRm9yVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQs
IGlkIHZhbHVlKQogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczp3ZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckNsYXNzKCldKQogICAgICAgICByZXR1cm4gdG9KUyhjb250ZXh0LCBXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxl
bWVudD4odmFsdWUpKS5wdHIoKSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0Rp
Y3Rpb25hcnkgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9u
YXJ5KGNvbnRleHQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG1ha2VKU09iamVjdChjb250ZXh0
LCB2YWx1ZSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0p
Ci0gICAgICAgIHJldHVybiBtYWtlQXJyYXlSZWZGb3JBcnJheShjb250ZXh0LCB2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKQEAgLTExNSwyOCArMTEyLDE2IEBAIE5TRGljdGlvbmFyeSAqc2VhcmNoUHJl
ZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJl
CiAKICAgICBpZiAoc2VhcmNoS2V5KSB7CiAgICAgICAgIGlkIHNlYXJjaEtleVBhcmFtZXRlciA9
IG5pbDsKLSAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hLZXkpKSB7
Ci0gICAgICAgICAgICBhdXRvIHNlYXJjaEtleVN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgc2VhcmNoS2V5LCBudWxscHRyKSk7Ci0gICAgICAgICAgICBpZiAoc2Vh
cmNoS2V5U3RyaW5nKQotICAgICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtOU1N0
cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoS2V5U3RyaW5nLmdldCgpXTsKLSAgICAg
ICAgfSBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoS2V5KSkgeworICAg
ICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaEtleSkpCisgICAgICAgICAg
ICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSB0b1dURlN0cmluZyhjb250ZXh0LCBzZWFyY2hLZXkpOwor
ICAgICAgICBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoS2V5KSkgewog
ICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoS2V5QXJyYXkgPSBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgc2VhcmNoS2V5LCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJj
aEtleUFycmF5TGVuZ3RoID0gMDsKLQotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0
cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0g
ICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVj
dEdldFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmlu
Zy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoS2V5QXJyYXlMZW5ndGhW
YWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1
ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFs
dWUsIG51bGxwdHIpKTsKLQorICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoS2V5QXJyYXlMZW5n
dGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hLZXlBcnJheSk7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoS2V5QXJyYXlMZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoS2V5VmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgaSwgbnVsbHB0cik7Ci0gICAgICAg
ICAgICAgICAgSlNTdHJpbmdSZWYgc2VhcmNoS2V5U3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCBzZWFyY2hLZXlWYWx1ZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgaWYg
KHNlYXJjaEtleVN0cmluZykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXNlYXJjaEtleVBh
cmFtZXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtO
U011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAgICAgICAgICAgICAgIFtzZWFyY2hLZXlQYXJh
bWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoS2V5
U3RyaW5nXV07Ci0gICAgICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVsZWFzZShzZWFyY2hLZXlT
dHJpbmcpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaEtl
eSA9IHRvV1RGU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRl
eHQsIHNlYXJjaEtleUFycmF5LCBpLCBudWxscHRyKSk7CisgICAgICAgICAgICAgICAgaWYgKCFz
ZWFyY2hLZXlQYXJhbWV0ZXIpCisgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRl
ciA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgICAgICAgICAgICAgW3NlYXJjaEtleVBh
cmFtZXRlciBhZGRPYmplY3Q6c2VhcmNoS2V5XTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICBpZiAoc2VhcmNoS2V5UGFyYW1ldGVyKQpAQCAtMTQ0LDEwICsxMjksOSBAQCBOU0Rp
Y3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hD
cml0ZXJpYShKU0NvbnRleHRSZQogICAgIH0KIAogICAgIGlmIChzZWFyY2hUZXh0ICYmIEpTU3Ry
aW5nR2V0TGVuZ3RoKHNlYXJjaFRleHQpKQotICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0
ZSBzZXRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hUZXh0XSBm
b3JLZXk6QCJBWFNlYXJjaFRleHQiXTsKKyAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUg
c2V0T2JqZWN0OnRvV1RGU3RyaW5nKHNlYXJjaFRleHQpIGZvcktleTpAIkFYU2VhcmNoVGV4dCJd
OwogCiAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OkAodmlzaWJsZU9ubHkp
IGZvcktleTpAIkFYVmlzaWJsZU9ubHkiXTsKLQogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRl
IHNldE9iamVjdDpAKGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSkgZm9yS2V5OkAiQVhJbW1lZGlh
dGVEZXNjZW5kYW50c09ubHkiXTsKIAogICAgIHJldHVybiBwYXJhbWV0ZXJpemVkQXR0cmlidXRl
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRleCA5MTNh
ZTBmNzVjZGI0ZWQ1ZGVkZGViOTI1ZjZjOTUwMThkZGQxNzA0Li5hODg3ZGU1Yzg1ZDUwMjg0ZmQy
NDQ3MTI1MTZlODljOTk4YzNhYTVmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlck1hYy5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbkhhbmRsZXIuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlLmgiCiAjaW1wb3J0
ICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS0J1bmRsZVBhZ2UuaD4KQEAgLTk2LDcgKzk3LDcgQEAgc3Rh
dGljIGlkIGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChpZCBvYmosIE5TU3RyaW5nICppZEF0dHJp
YnV0ZSkKIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWRBdHRyaWJ1dGUpCiB7
Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3QgPSBzdGF0aWNf
Y2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7
CiAKICAgICBSZXRhaW5QdHI8aWQ+IHJlc3VsdDsKQEAgLTExMSw3ICsxMTIsNyBAQCBSZWZQdHI8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2li
bGVFbGVtZW50QnlJZChKUwogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJtYWMiKSk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoIm1hYyIpOwogfQogCiAvLyBBWFRocmVhZCBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
bWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KaW5kZXggNTBiM2UwMjIwYjhkMTIyYWQy
MmJjOTZkNDI0Y2ZkODMzMWI2NWY1OS4uMmVmZjQ1NGU2Njc5MWQ2OThmOTViZWM3Njk0YTA5ZmIy
Y2NmMGExMSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBA
IC0zMiw3ICszMiw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCiAjaW1w
b3J0ICJJbmplY3RlZEJ1bmRsZS5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCi0K
KyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxBcHBLaXQvTlNBY2Nlc3NpYmlsaXR5Lmg+
CiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0pTU3RyaW5nUmVmQ0YuaD4KQEAgLTg3LDExICs4Nyw2IEBAIEBlbmQKIAogbmFtZXNwYWNl
IFdUUiB7CiAKLXN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0
cmluZygpCi17Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
bnVsbHB0ciwgMCkpOwotfQotCiBSZWZQdHI8QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNfY29udHJvbGxlcjsKIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChpZCBlbGVtZW50KQpAQCAtMjA2LDcgKzIwMSw3IEBA
IHN0YXRpYyBOU1N0cmluZyogZGVzY3JpcHRpb25PZlZhbHVlKGlkIHZhbHVlT2JqZWN0LCBpZCBl
bGVtZW50KQogCiBzdGF0aWMgTlNTdHJpbmcgKmF0dHJpYnV0ZXNPZkVsZW1lbnQoaWQgYWNjZXNz
aWJpbGl0eU9iamVjdCkKIHsKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gYXR0cmlidXRlcyA9IHN1
cHBvcnRlZEF0dHJpYnV0ZXMoYWNjZXNzaWJpbGl0eU9iamVjdCk7CisgICAgYXV0byBhdHRyaWJ1
dGVzID0gc3VwcG9ydGVkQXR0cmlidXRlcyhhY2Nlc3NpYmlsaXR5T2JqZWN0KTsKIAogICAgIE5T
TXV0YWJsZVN0cmluZyogYXR0cmlidXRlc1N0cmluZyA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5n
XTsKICAgICBmb3IgKE5TU3RyaW5nKiBhdHRyaWJ1dGUgaW4gYXR0cmlidXRlcy5nZXQoKSkgewpA
QCAtMjI3LDE2ICsyMjIsMTMgQEAgc3RhdGljIE5TU3RyaW5nICphdHRyaWJ1dGVzT2ZFbGVtZW50
KGlkIGFjY2Vzc2liaWxpdHlPYmplY3QpCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXNTdHJpbmc7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgSlNWYWx1ZVJlZiBjb252ZXJ0VmVjdG9y
VG9PYmplY3RBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgVmVjdG9yPFQ+IGNvbnN0JiBlbGVt
ZW50cykKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBKU09iamVjdFJlZiBtYWtlSlNBcnJh
eShKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgVmVjdG9yPFQ+JiBlbGVtZW50cykKIHsKLSAg
ICBKU1ZhbHVlUmVmIGFycmF5UmVzdWx0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwg
MCwgMCk7Ci0gICAgSlNPYmplY3RSZWYgYXJyYXlPYmogPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCwgYXJyYXlSZXN1bHQsIDApOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShj
b250ZXh0LCAwLCAwLCAwKTsKICAgICBzaXplX3QgZWxlbWVudENvdW50ID0gZWxlbWVudHMuc2l6
ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZWxlbWVudENvdW50OyArK2kpCi0gICAg
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2JqLCBpLCBKU09i
amVjdE1ha2UoY29udGV4dCwgZWxlbWVudHNbaV0tPndyYXBwZXJDbGFzcygpLCBlbGVtZW50c1tp
XS5nZXQoKSksIDApOwotCi0gICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgICAgICBKU09iamVj
dFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgSlNPYmplY3RNYWtlKGNvbnRl
eHQsIGVsZW1lbnRzW2ldLT53cmFwcGVyQ2xhc3MoKSwgZWxlbWVudHNbaV0uZ2V0KCkpLCAwKTsK
KyAgICByZXR1cm4gYXJyYXk7CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
Y29uY2F0ZW5hdGVBdHRyaWJ1dGVBbmRWYWx1ZShOU1N0cmluZyogYXR0cmlidXRlLCBOU1N0cmlu
ZyogdmFsdWUpCkBAIC0yNzMsMjUgKzI2NSwxMyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpzZWxl
Y3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJlZiBjbwog
ICAgIAogICAgIGlmIChzZWFyY2hTdHJpbmdzKSB7CiAgICAgICAgIE5TTXV0YWJsZUFycmF5ICpz
ZWFyY2hTdHJpbmdzUGFyYW1ldGVyID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAg
aWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgewotICAgICAgICAg
ICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBpZiAoc2VhcmNo
U3RyaW5nc1N0cmluZykKLSAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBh
ZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3Ry
aW5nLmdldCgpXV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0
KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmco
Y29udGV4dCwgc2VhcmNoU3RyaW5ncykpCisgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFt
ZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncyldOworICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJheSA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNWYWx1ZVJl
ZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29u
dGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYg
SlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkK
LSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0
aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3Ry
aW5nc0FycmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwotICAgICAgICAgICAgICAgIGlmIChz
ZWFyY2hTdHJpbmdzU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1Bh
cmFtZXRlciBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hT
dHJpbmdzU3RyaW5nLmdldCgpXV07Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB1bnNpZ25l
ZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hT
dHJpbmdzQXJyYXkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJj
aFN0cmluZ3NBcnJheUxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdz
UGFyYW1ldGVyIGFkZE9iamVjdDp0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxwdHIpKV07CiAg
ICAgICAgIH0KICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OnNlYXJj
aFN0cmluZ3NQYXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWxlY3RUZXh0U2VhcmNoU3RyaW5ncyJdOwog
ICAgIH0KQEAgLTMxNCwyNCArMjk0LDEzIEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnNlYXJjaFRl
eHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEoSlNDb250ZXh0UmVmIGNvCiAKICAg
ICBpZiAoc2VhcmNoU3RyaW5ncykgewogICAgICAgICBOU011dGFibGVBcnJheSAqc2VhcmNoU3Ry
aW5nc1BhcmFtZXRlciA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAgIGlmIChKU1Zh
bHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAgICAgICAgIGF1dG8g
c2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
c2VhcmNoU3RyaW5ncywgbnVsbHB0cikpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NT
dHJpbmcpCi0gICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0
OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQo
KV1dOwotICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hT
dHJpbmdzKSkgeworICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0
cmluZ3MpKQorICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRv
V1RGU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpXTsKKyAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hTdHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBz
ZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAwOwotCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFBy
b3BlcnR5U3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0
aCIpKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFs
dWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVu
Z3RoUHJvcGVydHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJj
aFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFy
Y2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5n
c0FycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotCi0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNv
bnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAgICAgICAgICAg
W3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNT
dHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gYXJyYXlMZW5ndGgo
Y29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAg
ICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmcoY29udGV4dCwg
SlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBp
LCBudWxscHRyKSldOwogICAgICAgICB9CiAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRl
IHNldE9iamVjdDpzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGZvcktleTpAIkFYU2VhcmNoVGV4dFNl
YXJjaFN0cmluZ3MiXTsKICAgICB9CkBAIC00MDEsNyArMzcwLDcgQEAgSlNWYWx1ZVJlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKCkgY29uc3QKICAgICBpZCB2YWx1ZSA9IGF0
dHJpYnV0ZVZhbHVlKG1fZWxlbWVudC5nZXQoKSwgTlNBY2Nlc3NpYmlsaXR5Um93SGVhZGVyVUlF
bGVtZW50c0F0dHJpYnV0ZSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5
IGNsYXNzXV0pCiAgICAgICAgIGVsZW1lbnRzID0gbWFrZVZlY3RvcjxSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4+KHZhbHVlKTsKLSAgICByZXR1cm4gY29udmVydFZlY3RvclRvT2JqZWN0
QXJyYXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pihjb250ZXh0LCBlbGVtZW50cyk7
CisgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNvbnRleHQsIGVsZW1lbnRzKTsKICAgICBFTkRfQVhf
T0JKQ19FWENFUFRJT05TCiB9CiAKQEAgLTQxNSw3ICszODQsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkhlYWRlcnMoKSBjb25zdAogICAgIGlkIHZhbHVlID0g
YXR0cmlidXRlVmFsdWUobV9lbGVtZW50LmdldCgpLCBOU0FjY2Vzc2liaWxpdHlDb2x1bW5IZWFk
ZXJVSUVsZW1lbnRzQXR0cmlidXRlKTsKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05T
QXJyYXkgY2xhc3NdXSkKICAgICAgICAgZWxlbWVudHMgPSBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Pj4odmFsdWUpOwotICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9P
YmplY3RBcnJheTxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KGNvbnRleHQsIGVsZW1l
bnRzKTsKKyAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgZWxlbWVudHMpOwogICAgIEVO
RF9BWF9PQkpDX0VYQ0VQVElPTlMKIH0KICAgICAKQEAgLTYwNyw3ICs1NzYsNyBAQCBKU1ZhbHVl
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEFycmF5QXR0cmlidXRlVmFsdWUo
SlNTdHJpbmdSZWYgYXR0cgogCiAgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Pj4gZWxlbWVudHM7CiAgICAgZ2V0VUlFbGVtZW50c1dpdGhBdHRyaWJ1dGUoYXR0cmlidXRl
LCBlbGVtZW50cyk7Ci0gICAgcmV0dXJuIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5PFJlZlB0
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4oY29udGV4dCwgZWxlbWVudHMpOworICAgIHJldHVy
biBtYWtlSlNBcnJheShjb250ZXh0LCBlbGVtZW50cyk7CiB9CiAKIFJlZlB0cjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBdHRyaWJ1dGVW
YWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpIGNvbnN0CkBAIC05NzYsNyArOTQ1LDYgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKIAogYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMjI5LDcg
KzExOTcsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlYXJjaFRleHRX
aXRoQ3JpdGVyaWEoSlNDb250ZXh0UmVmIGNvbnRleHQsCiAgICAgTlNEaWN0aW9uYXJ5ICpwYXJh
bWV0ZXJpemVkQXR0cmlidXRlID0gc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JD
cml0ZXJpYShjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBzdGFydEZyb20sIGRpcmVjdGlvbik7CiAg
ICAgaWQgcmVzdWx0ID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJB
WFNlYXJjaFRleHRXaXRoQ3JpdGVyaWEiIGZvclBhcmFtZXRlcjpwYXJhbWV0ZXJpemVkQXR0cmli
dXRlXTsKICAgICBpZiAoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCi0g
ICAgICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheTxSZWZQdHI8QWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZT4+KGNvbnRleHQsIG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2U+PihyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VKU0Fy
cmF5KGNvbnRleHQsIG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2U+PihyZXN1bHQpKTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAKICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTE1NDYsMTMgKzE1MTQsMTEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpyZW1vdmVTZWxlY3Rpb25BdEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAogCiB2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsK
KyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQpAQCAtMTU2Miw4
ICsxNTI4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmRvY3VtZW50RW5jb2RpbmcoKQogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNT
dHJpbmcgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0cmluZ1JlZl07
CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwotICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCkBA
IC0xNTczLDggKzE1MzgsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpb
TlNTdHJpbmcgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0cmluZ1Jl
Zl07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwotICAgIAotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQpAQCAtMTU4
Myw3ICsxNTQ3LDYgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnVybCgpCiAgICAgTlNVUkwgKnVybCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV07CiAgICAgcmV0dXJuIFtb
dXJsIGFic29sdXRlU3RyaW5nXSBjcmVhdGVKU1N0cmluZ1JlZl07ICAgIAogICAgIEVORF9BWF9P
QkpDX0VYQ0VQVElPTlMKLSAgICAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMTYyMiw3
ICsxNTg1LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNv
bnN0CiAgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCiAgICAgcmVzdWx0ID0gW21fZWxlbWVu
dCBhY2Nlc3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTpOU0FjY2Vzc2liaWxpdHlGb2N1c2Vk
QXR0cmlidXRlXTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCi0gICAgCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtMTY0OCwxOSArMTYxMCwxNiBAQCBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNP
ZmZTY3JlZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
QEAgLTE2NzUsMTMgKzE2MzQsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ln
bm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGlu
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNvbnN0CiB7
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTcx
NCwxNyArMTY3MSwxNCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygp
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFk
ZFNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAogfQogCiAvLyBUZXh0IG1hcmtlcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCmluZGV4IDQw
M2Y0ZmY4MzJlZTBlZjdjM2NmYWJkZjBmODdlMmNjYmU2MTRmOGEuLmFkYmI0YjdiNWQ1NGZiMTRh
OWM0YmRlOGE5MjI3NWYxMWMxNDE2ZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtNDYsMTYg
KzQ2LDExIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjppbnNwZWN0b3JU
ZXN0U3R1YlVSTCgpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICByZXR1cm4gbnVsbHB0
cjsKICNlbHNlCi0gICAgQ0ZCdW5kbGVSZWYgaW5zcGVjdG9yQnVuZGxlID0gQ0ZCdW5kbGVHZXRC
dW5kbGVXaXRoSWRlbnRpZmllcihDRlNUUigiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIikpOwor
ICAgIGF1dG8gaW5zcGVjdG9yQnVuZGxlID0gQ0ZCdW5kbGVHZXRCdW5kbGVXaXRoSWRlbnRpZmll
cihDRlNUUigiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIikpOwogICAgIGlmICghaW5zcGVjdG9y
QnVuZGxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDRlVSTFJl
Zj4gdXJsID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChpbnNwZWN0b3JCdW5kbGUs
IENGU1RSKCJUZXN0U3R1YiIpLCBDRlNUUigiaHRtbCIpLCBOVUxMKSk7Ci0gICAgaWYgKCF1cmwp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nID0g
Q0ZVUkxHZXRTdHJpbmcodXJsLmdldCgpKTsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVh
dGVXaXRoQ0ZTdHJpbmcodXJsU3RyaW5nKSk7CisgICAgYXV0byByZXNvdXJjZVVSTCA9IGFkb3B0
Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoaW5zcGVjdG9yQnVuZGxlLCBDRlNUUigiVGVzdFN0
dWIiKSwgQ0ZTVFIoImh0bWwiKSwgTlVMTCkpOworICAgIHJldHVybiByZXNvdXJjZVVSTCA/IGFk
b3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKENGVVJMR2V0U3RyaW5nKHJlc291cmNlVVJM
LmdldCgpKSkpIDogbnVsbHB0cjsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9T
dHJpbmdGdW5jdGlvbnMuaAppbmRleCAxYmMwNWMwYTVmM2E4MDRjMGIxNDFiODk2OTBiNzVkMjc3
MTBlNzYxLi42N2YzOWU2OWYxNTQwOGI5MmVhM2FlOTQ3YzlmYTkyZmVlYTEyOGNkIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDE1ICsyNCwxMiBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU3RyaW5nRnVuY3Rpb25z
X2gKLSNkZWZpbmUgU3RyaW5nRnVuY3Rpb25zX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Lmg+CisjaW5jbHVkZSAiSlNCYXNpY3MuaCIKICNpbmNsdWRlIDxXZWJLaXQvV0tS
ZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJL
aXQvV0tTdHJpbmdQcml2YXRlLmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1dLVVJMLmg+CiAjaW5jbHVk
ZSA8c3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CkBAIC00NCw3ICs0MSw4IEBACiAKIG5hbWVzcGFjZSBXVFIgewogCi0vLyBDb252ZXJzaW9uIGZ1
bmN0aW9ucworV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0tTdHJpbmcoSlNDb250ZXh0UmVm
LCBKU1ZhbHVlUmVmKTsKK1dURjo6U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29udGV4dFJlZiwgSlNW
YWx1ZVJlZik7CiAKIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhKU1N0cmlu
Z1JlZiBzdHJpbmcpCiB7CkBAIC01Niw5ICs1NCwxNCBAQCBpbmxpbmUgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHRvV0soY29uc3QgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+JiBzdHJpbmcpCiAg
ICAgcmV0dXJuIHRvV0soc3RyaW5nLmdldCgpKTsKIH0KIAoraW5saW5lIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB0b1dLKGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICByZXR1cm4gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKK30KKwogaW5saW5lIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5n
LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICByZXR1cm4gdG9XSyhzdHJpbmcudXRmOCgpLmRhdGEoKSk7
CiB9CiAKIGlubGluZSBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdG9KUyhXS1N0cmluZ1JlZiBz
dHJpbmcpCkBAIC05OSw2ICsxMDIsMjUgQEAgaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5n
KGNvbnN0IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiYgc3RyaW5nKQogICAgIHJldHVybiB0b1dU
RlN0cmluZyhzdHJpbmcuZ2V0KCkpOwogfQogCi19IC8vIG5hbWVzcGFjZSBXVFIKK2lubGluZSBX
VEY6OlN0cmluZyB0b1dURlN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgcmV0dXJu
IHRvV1RGU3RyaW5nKHRvV0soc3RyaW5nKSk7Cit9CiAKLSNlbmRpZiAvLyBTdHJpbmdGdW5jdGlv
bnNfaAoraW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiYgc3RyaW5nKQoreworICAgIHJldHVybiB0b1dURlN0cmluZyhzdHJpbmcuZ2V0
KCkpOworfQorCitpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0tTdHJpbmcoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvV0so
Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsKK30KKworaW5saW5lIFdURjo6
U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVl
KQoreworICAgIC8vIEZJWE1FOiBDb3VsZCBtYWtlIHRoaXMgZWZmaWNpZW50IGJ5IHVzaW5nIHRo
ZSBXVEZTdHJpbmcgaW5zaWRlIE9wYXF1ZUpTU3RyaW5nIGlmIHdlIHdhbnRlZCB0by4KKyAgICBy
ZXR1cm4gdG9XVEZTdHJpbmcoY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwCmluZGV4IDEzNDVjNDJjMTFlNjJkYzA4OGM2ZjJkMzhiOTliMDkzNTY0ZTAxMzguLjc1ZDlm
YjYwNDQ0MTQ1ZjFlY2RmYWVmZDk5MDhhYWUyNjg4NTRlZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiRGljdGlv
bmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGVyUHJveHkuaCIKICNpbmNsdWRl
ICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAiU3Ry
aW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKICNpbmNsdWRlICJX
ZWJDb3JlVGVzdFN1cHBvcnQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXpl
VGhyZWFkaW5nLmg+CkBAIC00OTQsOCArNDk0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5p
dGlhbGl6ZShpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgIFdlYkNvcmVUZXN0U3Vw
cG9ydDo6aW5zdGFsbE1vY2tHYW1lcGFkUHJvdmlkZXIoKTsKICNlbmRpZgogCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHBhZ2VHcm91cElkZW50aWZpZXIgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRUZXN0UnVubmVyUGFnZUdyb3VwIikpOwotICAg
IG1fcGFnZUdyb3VwLmFkb3B0KFdLUGFnZUdyb3VwQ3JlYXRlV2l0aElkZW50aWZpZXIocGFnZUdy
b3VwSWRlbnRpZmllci5nZXQoKSkpOworICAgIG1fcGFnZUdyb3VwLmFkb3B0KFdLUGFnZUdyb3Vw
Q3JlYXRlV2l0aElkZW50aWZpZXIodG9XSygiV2ViS2l0VGVzdFJ1bm5lclBhZ2VHcm91cCIpLmdl
dCgpKSk7CiAKICAgICBtX2V2ZW50U2VuZGVyUHJveHkgPSBtYWtlVW5pcXVlPEV2ZW50U2VuZGVy
UHJveHk+KHRoaXMpOwogfQpAQCAtNTA3LDkgKzUwNiw5IEBAIFdLUmV0YWluUHRyPFdLQ29udGV4
dENvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZUNvbnRleHRDb25maWd1
cmF0CiAgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldEZ1bGx5U3luY2hyb25vdXNNb2RlSXNB
bGxvd2VkRm9yVGVzdGluZyhjb25maWd1cmF0aW9uLmdldCgpLCB0cnVlKTsKICAgICBXS0NvbnRl
eHRDb25maWd1cmF0aW9uU2V0SWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0c0ZvclRl
c3RpbmcoY29uZmlndXJhdGlvbi5nZXQoKSwgb3B0aW9ucy5pZ25vcmVTeW5jaHJvbm91c01lc3Nh
Z2luZ1RpbWVvdXRzKTsKIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBvdmVy
cmlkZUxhbmd1YWdlcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0
byBvdmVycmlkZUxhbmd1YWdlcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAg
ICAgZm9yIChhdXRvJiBsYW5ndWFnZSA6IG9wdGlvbnMub3ZlcnJpZGVMYW5ndWFnZXMpCi0gICAg
ICAgIFdLQXJyYXlBcHBlbmRJdGVtKG92ZXJyaWRlTGFuZ3VhZ2VzLmdldCgpLCBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpKS5nZXQo
KSk7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG92ZXJyaWRlTGFuZ3VhZ2VzLmdldCgpLCB0
b1dLKGxhbmd1YWdlKS5nZXQoKSk7CiAgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldE92ZXJy
aWRlTGFuZ3VhZ2VzKGNvbmZpZ3VyYXRpb24uZ2V0KCksIG92ZXJyaWRlTGFuZ3VhZ2VzLmdldCgp
KTsKIAogICAgIGlmIChvcHRpb25zLnNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9u
KCkpIHsKQEAgLTg0MywzMSArODQyLDI0IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJl
ZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvCiAgICAg
V0tQcmVmZXJlbmNlc1Jlc2V0QWxsSW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKHByZWZlcmVuY2VzKTsK
IAogICAgIC8vIFNldCBpbnRlcm5hbCBmZWF0dXJlcyB0aGF0IGhhdmUgZGlmZmVyZW50IGRlZmF1
bHQgdmFsdWVzIGZvciB0ZXN0aW5nLgotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBhc3luY092ZXJm
bG93U2Nyb2xsaW5nRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBc3lu
Y092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5h
bERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgZmFsc2UsIGFzeW5jT3ZlcmZsb3dTY3Jv
bGxpbmdGZWF0dXJlKTsKIAotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBhc3luY0ZyYW1lU2Nyb2xs
aW5nRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBc3luY0ZyYW1lU2Ny
b2xsaW5nRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVy
ZUZvcktleShwcmVmZXJlbmNlcywgZmFsc2UsIGFzeW5jRnJhbWVTY3JvbGxpbmdGZWF0dXJlKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5j
ZXMsIGZhbHNlLCB0b1dLKCJBc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCIpLmdldCgpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5j
ZXMsIGZhbHNlLCB0b1dLKCJBc3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZCIpLmdldCgpKTsKIAog
I2lmIEVOQUJMRShJTlBVVF9UWVBFX0RBVEUpCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0
VHlwZURhdGVGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlw
ZURhdGVFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJl
Rm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVEYXRlRmVhdHVyZSk7CisgICAgV0tQ
cmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVl
LCB0b1dLKCJJbnB1dFR5cGVEYXRlRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJM
RShJTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0
VHlwZURhdGVUaW1lTG9jYWxGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IklucHV0VHlwZURhdGVUaW1lTG9jYWxFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldElu
dGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVEYXRl
VGltZUxvY2FsRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0
dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVEYXRlVGltZUxvY2Fs
RW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX01PTlRIKQot
ICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1dFR5cGVNb250aEZlYXR1cmUgPSBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5wdXRUeXBlTW9udGhFbmFibGVkIik7Ci0gICAgV0tQcmVm
ZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBp
bnB1dFR5cGVNb250aEZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVn
RmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlTW9udGhFbmFi
bGVkIikuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElNRSkKLSAgICBz
dGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlVGltZUZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSW5wdXRUeXBlVGltZUVuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlw
ZVRpbWVGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVG
b3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZVRpbWVFbmFibGVkIikuZ2V0
KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfV0VFSykKLSAgICBzdGF0aWMgV0tT
dHJpbmdSZWYgaW5wdXRUeXBlV2Vla0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSW5wdXRUeXBlV2Vla0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJu
YWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlwZVdlZWtGZWF0
dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJl
ZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZVdlZWtFbmFibGVkIikuZ2V0KCkpOwogI2Vu
ZGlmCiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVybmFsRGVidWdGZWF0dXJlIDogb3B0aW9u
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCkBAIC05MjAsMjUgKzkxMiwxNiBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RP
cHRpb25zJiBvcHRpbwogICAgIFdLUHJlZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3Vu
ZHNJbkRhcmtNb2RlKHByZWZlcmVuY2VzLCBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5k
c0luRGFya01vZGUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUpOwogCi0gICAgc3RhdGljIFdL
U3RyaW5nUmVmIGRlZmF1bHRUZXh0RW5jb2RpbmcgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSVNPLTg4NTktMSIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXREZWZhdWx0VGV4dEVuY29k
aW5nTmFtZShwcmVmZXJlbmNlcywgZGVmYXVsdFRleHRFbmNvZGluZyk7Ci0KLSAgICBzdGF0aWMg
V0tTdHJpbmdSZWYgc3RhbmRhcmRGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlRpbWVzIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGN1cnNpdmVGb250RmFtaWx5
ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxlIENoYW5jZXJ5Iik7Ci0gICAg
c3RhdGljIFdLU3RyaW5nUmVmIGZhbnRhc3lGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlBhcHlydXMiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgZml4ZWRGb250
RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNvdXJpZXIiKTsKLSAgICBz
dGF0aWMgV0tTdHJpbmdSZWYgcGljdG9ncmFwaEZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQXBwbGUgQ29sb3IgRW1vamkiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdS
ZWYgc2Fuc1NlcmlmRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
ZWx2ZXRpY2EiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgc2VyaWZGb250RmFtaWx5ID0gV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVzIik7CisgICAgV0tQcmVmZXJlbmNlc1Nl
dERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKHByZWZlcmVuY2VzLCB0b1dLKCJJU08tODg1OS0xIiku
Z2V0KCkpOwogCiAgICAgV0tQcmVmZXJlbmNlc1NldE1pbmltdW1Gb250U2l6ZShwcmVmZXJlbmNl
cywgMCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFN0YW5kYXJkRm9udEZhbWlseShwcmVmZXJlbmNl
cywgc3RhbmRhcmRGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0Q3Vyc2l2ZUZvbnRG
YW1pbHkocHJlZmVyZW5jZXMsIGN1cnNpdmVGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0RmFudGFzeUZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIGZhbnRhc3lGb250RmFtaWx5KTsKLSAg
ICBXS1ByZWZlcmVuY2VzU2V0Rml4ZWRGb250RmFtaWx5KHByZWZlcmVuY2VzLCBmaXhlZEZvbnRG
YW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRQaWN0b2dyYXBoRm9udEZhbWlseShwcmVmZXJl
bmNlcywgcGljdG9ncmFwaEZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRTYW5zU2Vy
aWZGb250RmFtaWx5KHByZWZlcmVuY2VzLCBzYW5zU2VyaWZGb250RmFtaWx5KTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0U2VyaWZGb250RmFtaWx5KHByZWZlcmVuY2VzLCBzZXJpZkZvbnRGYW1pbHkp
OworICAgIFdLUHJlZmVyZW5jZXNTZXRTdGFuZGFyZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRv
V0soIlRpbWVzIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDdXJzaXZlRm9udEZhbWls
eShwcmVmZXJlbmNlcywgdG9XSygiQXBwbGUgQ2hhbmNlcnkiKS5nZXQoKSk7CisgICAgV0tQcmVm
ZXJlbmNlc1NldEZhbnRhc3lGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJQYXB5cnVzIiku
Z2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRGaXhlZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMs
IHRvV0soIkNvdXJpZXIiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFBpY3RvZ3JhcGhG
b250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJBcHBsZSBDb2xvciBFbW9qaSIpLmdldCgpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0U2Fuc1NlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9X
SygiSGVsdmV0aWNhIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRTZXJpZkZvbnRGYW1p
bHkocHJlZmVyZW5jZXMsIHRvV0soIlRpbWVzIikuZ2V0KCkpOwogICAgIFdLUHJlZmVyZW5jZXNT
ZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwog
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAgICAgV0tQcmVmZXJlbmNlc1NldE1lZGlhU291cmNl
RW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CkBAIC0xMDEwLDM4ICs5OTMsMjcgQEAgYm9vbCBU
ZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0
aW9ucyYgb3B0aW9ucywgUmUKIAogICAgIFdLUGFnZVNldEN1c3RvbVVzZXJBZ2VudChtX21haW5X
ZWJWaWV3LT5wYWdlKCksIG51bGxwdHIpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVz
ZXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gcmVzZXRNZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBhdXRv
IHJlc2V0TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2hvdWxkR0NLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTaG91bGRHQyIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IHNob3VsZEdDVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSht
X2djQmV0d2VlblRlc3RzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VC
b2R5LmdldCgpLCBzaG91bGRHQ0tleS5nZXQoKSwgc2hvdWxkR0NWYWx1ZS5nZXQoKSk7CisgICAg
c2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIlNob3VsZEdDIiwgbV9nY0JldHdlZW5UZXN0cyk7
CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWxsb3dlZEhvc3RzS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWxsb3dlZEhvc3RzIikpOwotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBhbGxvd2VkSG9zdHNWYWx1ZSA9IGFkb3B0V0so
V0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgZm9yIChhdXRvJiBob3N0IDogbV9hbGxvd2Vk
SG9zdHMpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrSG9zdCA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoaG9zdC5jX3N0cigpKSk7Ci0gICAgICAg
IFdLQXJyYXlBcHBlbmRJdGVtKGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpLCB3a0hvc3QuZ2V0KCkp
OwotICAgIH0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCks
IGFsbG93ZWRIb3N0c0tleS5nZXQoKSwgYWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCkpOworICAgIGF1
dG8gYWxsb3dlZEhvc3RzVmFsdWUgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwor
ICAgIGZvciAoYXV0byYgaG9zdCA6IG1fYWxsb3dlZEhvc3RzKQorICAgICAgICBXS0FycmF5QXBw
ZW5kSXRlbShhbGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSwgdG9XSyhob3N0LmNfc3RyKCkpLmdldCgp
KTsKKyAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiQWxsb3dlZEhvc3RzIiwgYWxsb3dl
ZEhvc3RzVmFsdWUuZ2V0KCkpOwogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURf
VFJFRSkKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXhJc29sYXRlZE1vZGVLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2Nlc3NpYmlsaXR5SXNvbGF0
ZWRUcmVlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gYXhJc29sYXRlZE1vZGVW
YWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJl
ZU1vZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCks
IGF4SXNvbGF0ZWRNb2RlS2V5LmdldCgpLCBheElzb2xhdGVkTW9kZVZhbHVlLmdldCgpKTsKKyAg
ICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIs
IG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUpOwogI2VuZGlmCi0gICAgCi0gICAgaWYg
KG9wdGlvbnMuanNjT3B0aW9ucy5sZW5ndGgoKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4ganNjT3B0aW9uc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkpTQ09wdGlvbnMiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBq
c2NPcHRpb25zVmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9w
dGlvbnMuanNjT3B0aW9ucy5jX3N0cigpKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
cmVzZXRNZXNzYWdlQm9keS5nZXQoKSwganNjT3B0aW9uc0tleS5nZXQoKSwganNjT3B0aW9uc1Zh
bHVlLmdldCgpKTsKLSAgICB9CisKKyAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgp
KQorICAgICAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIsIG9wdGlv
bnMuanNjT3B0aW9ucy5jX3N0cigpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdlYkNv
cmVUZXN0U3VwcG9ydDo6c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5n
KG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7CiAjZW5kaWYK
IAotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgcmVz
ZXRNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHRv
V0soIlJlc2V0IikuZ2V0KCksIHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCkpOwogCiAgICAgV0tDb250
ZXh0U2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
Y29udGV4dCgpLCBmYWxzZSk7CiAKQEAgLTEyMDMsOCArMTE3NSw3IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnVwZGF0ZUxpdmVEb2N1bWVudHNBZnRlclRlc3QoKQogCiAgICAgQXN5bmNUYXNrKFtd
KCkgewogICAgICAgICAvLyBBZnRlciBlYWNoIHRlc3QsIHdlIHVwZGF0ZSB0aGUgbGlzdCBvZiBs
aXZlIGRvY3VtZW50cyBzbyB0aGF0IHdlIGNhbiBkZXRlY3Qgd2hlbiBhbiBhYmFuZG9uZWQgZG9j
dW1lbnQgZmlyc3Qgc2hvd2VkIHVwLgotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRM
aXZlRG9jdW1lbnRzIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgdG9XSygiR2V0TGl2ZURvY3VtZW50cyIpLmdldCgpLCBudWxscHRyKTsKICAgICB9LCA1
X3MpLnJ1bigpOwogfQogCkBAIC0xMjE1LDggKzExODYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpjaGVja0ZvcldvcmxkTGVha3MoKQogCiAgICAgQXN5bmNUYXNrKFtdKCkgewogICAgICAgICAv
LyBUaGlzIHJ1bnMgYXQgdGhlIGVuZCBvZiBhIHNlcmllcyBvZiB0ZXN0cy4gSXQgY2xlYXJzIGNh
Y2hlcywgcnVucyBhIEdDIGFuZCB0aGVuIGZldGNoZXMgdGhlIGxpc3Qgb2YgZG9jdW1lbnRzLgot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDaGVja0ZvcldvcmxkTGVha3MiKSk7Ci0gICAg
ICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
cik7CisgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKCJDaGVja0Zvcldv
cmxkTGVha3MiKS5nZXQoKSwgbnVsbHB0cik7CiAgICAgfSwgMjBfcykucnVuKCk7CiB9CiAKQEAg
LTEzMjQsNiArMTI5NCw3IEBAIGNvbnN0IGNoYXIqIFRlc3RDb250cm9sbGVyOjpuZXR3b3JrUHJv
Y2Vzc05hbWUoKQogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQorCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sIGFsbG93cykKIHsKICAgICBtX2Fs
bG93c0FueVNTTENlcnRpZmljYXRlID0gYWxsb3dzOwpAQCAtMTQwMCw4ICsxMzcxLDggQEAgc3Rh
dGljIGJvb2wgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2
YWx1ZSkKIAogc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNS
ZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBjb25zdCBzdGQ6OnN0cmluZyYg
cGF0aE9yVVJMKQogewotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBiYXNlVVJMID0gYWRvcHRX
SyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
UkxSZWY+IHJlbGF0aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VV
UkwuZ2V0KCksIHZhbHVlLmNfc3RyKCkpKTsKKyAgICBhdXRvIGJhc2VVUkwgPSBhZG9wdFdLKGNy
ZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKTsKKyAgICBhdXRvIHJlbGF0aXZlVVJMID0g
YWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkwuZ2V0KCksIHZhbHVlLmNfc3Ry
KCkpKTsKICAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlQYXRoKHJlbGF0aXZlVVJM
LmdldCgpKSkpOwogfQogCkBAIC0xNDE1LDggKzEzODYsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVU
ZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKFRlc3RPcHRpb25zJiB0ZXN0T3B0aW9ucywgY29uc3Qg
c3RkOgogICAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gYWJzb2x1dGVQYXRoOwogICAgIGlmIChm
aWxlbmFtZS5lbXB0eSgpKSB7CiAgICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJlZHVjZSBjb252
ZXJzaW9ucyBiZXR3ZWVuIGFsbCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgotICAgICAgICBX
S1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9y
VVJMLmNfc3RyKCkpKTsKLSAgICAgICAgZmlsZW5hbWUgPSB0ZXN0UGF0aCh3a1VSTC5nZXQoKSk7
CisgICAgICAgIGZpbGVuYW1lID0gdGVzdFBhdGgoYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhP
clVSTC5jX3N0cigpKSkuZ2V0KCkpOwogICAgIH0KIAogICAgIGlmIChmaWxlbmFtZS5lbXB0eSgp
KQpAQCAtMTYxNSw2ICsxNTg1LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlVmll
d0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB9CiAKICNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKSAmJiAhUExBVEZPUk0oQ09DT0EpCisKIHN0cnVjdCBDb250ZW50RXh0
ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRleHQgewogICAgIGV4cGxpY2l0IENvbnRlbnRFeHRlbnNp
b25TdG9yZUNhbGxiYWNrQ29udGV4dChUZXN0Q29udHJvbGxlciYgY29udHJvbGxlcikKICAgICAg
ICAgOiB0ZXN0Q29udHJvbGxlcihjb250cm9sbGVyKQpAQCAtMTY0MiwxNSArMTYxMyw5IEBAIHN0
YXRpYyBzdGQ6OnN0cmluZyBjb250ZW50RXh0ZW5zaW9uSlNPTlBhdGgoV0tVUkxSZWYgdXJsKQog
ICAgIGlmIChwYXRoLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gcGF0aCArICIuanNvbiI7CiAK
LSAgICBhdXRvIHAgPSBhZG9wdFdLKFdLVVJMQ29weVBhdGgodXJsKSk7Ci0gICAgYXV0byBidWZm
ZXIgPSBzdGQ6OnZlY3RvcjxjaGFyPihXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUo
cC5nZXQoKSkpOwotICAgIGNvbnN0IGF1dG8gbGVuZ3RoID0gV0tTdHJpbmdHZXRVVEY4Q1N0cmlu
ZyhwLmdldCgpLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKLSAgICByZXR1cm4gc3Rk
OjpzdHJpbmcoIkxheW91dFRlc3RzL2h0dHAvdGVzdHMiKSArIHN0ZDo6c3RyaW5nKGJ1ZmZlci5k
YXRhKCksIGxlbmd0aCAtIDEpICsgIi5qc29uIjsKKyAgICByZXR1cm4gIkxheW91dFRlc3RzL2h0
dHAvdGVzdHMiICsgdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlQYXRoKHVybCkpLmdldCgpKSArICIu
anNvbiI7CiB9Ci0jZW5kaWYKIAotI2lmICFQTEFURk9STShDT0NPQSkKLSNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4
dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7CiAgICAgY29uc3Qg
Y2hhciogY29udGVudEV4dGVuc2lvbnNQYXRoID0gbGlicmFyeVBhdGhGb3JUZXN0aW5nKCk7CkBA
IC0xNjcwLDEzICsxNjM1LDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRl
bnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0CiAgICAgfQogCiAg
ICAgc3RkOjpzdHJpbmcganNvbkZpbGVDb250ZW50cyB7c3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9y
PGNoYXI+KGpzb25GaWxlKSwgc3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+KCl9OwotICAg
IGF1dG8ganNvblNvdXJjZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
anNvbkZpbGVDb250ZW50cy5jX3N0cigpKSk7CisgICAgYXV0byBqc29uU291cmNlID0gdG9XSyhq
c29uRmlsZUNvbnRlbnRzLmNfc3RyKCkpOwogCi0gICAgYXV0byBzdG9yZVBhdGggPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnRlbnRFeHRlbnNpb25zUGF0aCkpOwor
ICAgIGF1dG8gc3RvcmVQYXRoID0gdG9XSyhjb250ZW50RXh0ZW5zaW9uc1BhdGgpOwogICAgIGF1
dG8gZXh0ZW5zaW9uU3RvcmUgPSBhZG9wdFdLKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNy
ZWF0ZShzdG9yZVBhdGguZ2V0KCkpKTsKICAgICBBU1NFUlQoZXh0ZW5zaW9uU3RvcmUpOwogCi0g
ICAgYXV0byBmaWx0ZXJJZGVudGlmaWVyID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVGVzdENvbnRlbnRFeHRlbnNpb24iKSk7CisgICAgYXV0byBmaWx0ZXJJZGVudGlm
aWVyID0gdG9XSygiVGVzdENvbnRlbnRFeHRlbnNpb24iKTsKIAogICAgIENvbnRlbnRFeHRlbnNp
b25TdG9yZUNhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKICAgICBXS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVDb21waWxlKGV4dGVuc2lvblN0b3JlLmdldCgpLCBmaWx0ZXJJZGVudGlm
aWVyLmdldCgpLCBqc29uU291cmNlLmdldCgpLCAmY29udGV4dCwgY29udGVudEV4dGVuc2lvblN0
b3JlQ2FsbGJhY2spOwpAQCAtMTcwMSwxOCArMTY2NiwyMiBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpyZXNldENvbnRlbnRFeHRlbnNpb25zKCkKIAogICAgIFdLVXNlckNvbnRlbnRDb250cm9sbGVy
UmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKHVzZXJDb250ZW50Q29udHJvbGxlcigpKTsKIAot
ICAgIGF1dG8gc3RvcmVQYXRoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
Zyhjb250ZW50RXh0ZW5zaW9uc1BhdGgpKTsKKyAgICBhdXRvIHN0b3JlUGF0aCA9IHRvV0soY29u
dGVudEV4dGVuc2lvbnNQYXRoKTsKICAgICBhdXRvIGV4dGVuc2lvblN0b3JlID0gYWRvcHRXSyhX
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDcmVhdGUoc3RvcmVQYXRoLmdldCgpKSk7CiAgICAg
QVNTRVJUKGV4dGVuc2lvblN0b3JlKTsKIAotICAgIGF1dG8gZmlsdGVySWRlbnRpZmllciA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRlc3RDb250ZW50RXh0ZW5zaW9u
IikpOworICAgIGF1dG8gZmlsdGVySWRlbnRpZmllciA9IHRvV0soIlRlc3RDb250ZW50RXh0ZW5z
aW9uIik7CiAKICAgICBDb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRleHQgY29udGV4
dCgqdGhpcyk7CiAgICAgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVtb3ZlKGV4dGVuc2lv
blN0b3JlLmdldCgpLCBmaWx0ZXJJZGVudGlmaWVyLmdldCgpLCAmY29udGV4dCwgY29udGVudEV4
dGVuc2lvblN0b3JlQ2FsbGJhY2spOwogICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1l
b3V0KTsKICAgICBBU1NFUlQoIWNvbnRleHQuZmlsdGVyKTsKIH0KLSNlbHNlIC8vIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KSAmJiAhUExBVEZPUk0oQ09DT0EpCisKKyNpZiAhRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
Kwogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3Qo
Y29uc3QgVGVzdEludm9jYXRpb24mKQogewogfQpAQCAtMTcyMCwxNCArMTY4OSwxMyBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBU
ZXN0SW52b2NhdGlvbiYpCiB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldENvbnRlbnRFeHRlbnNp
b25zKCkKIHsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotI2VuZGlm
IC8vICFQTEFURk9STShDT0NPQSkKKworI2VuZGlmIC8vICFFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQogCiBjbGFzcyBDb21tYW5kVG9rZW5pemVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBD
b21tYW5kVG9rZW5pemVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCkKICAgICAgICAgOiBtX2lu
cHV0KGlucHV0KQotICAgICAgICAsIG1fcG9zTmV4dFNlcGFyYXRvcigwKQogICAgIHsKICAgICAg
ICAgcHVtcCgpOwogICAgIH0KQEAgLTE3NDAsNyArMTcwOCw3IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICdcJyc7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IG1faW5wdXQ7CiAgICAgc3RkOjpzdHJpbmcgbV9uZXh0OwotICAgIHNpemVfdCBtX3Bvc05leHRT
ZXBhcmF0b3I7CisgICAgc2l6ZV90IG1fcG9zTmV4dFNlcGFyYXRvciB7IDAgfTsKIH07CiAKIHZv
aWQgQ29tbWFuZFRva2VuaXplcjo6cHVtcCgpCkBAIC0xODE0LDggKzE3ODIsNyBAQCBib29sIFRl
c3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIGlucHV0TGluZSkKICAgICAKICAgICBU
ZXN0T3B0aW9ucyBvcHRpb25zID0gdGVzdE9wdGlvbnNGb3JUZXN0KGNvbW1hbmQpOwogCi0gICAg
V0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKGNvbW1h
bmQucGF0aE9yVVJMLmNfc3RyKCkpKTsKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uID0gbWFrZVVu
aXF1ZTxUZXN0SW52b2NhdGlvbj4od2tVUkwuZ2V0KCksIG9wdGlvbnMpOworICAgIG1fY3VycmVu
dEludm9jYXRpb24gPSBtYWtlVW5pcXVlPFRlc3RJbnZvY2F0aW9uPihhZG9wdFdLKGNyZWF0ZVRl
c3RVUkwoY29tbWFuZC5wYXRoT3JVUkwuY19zdHIoKSkpLmdldCgpLCBvcHRpb25zKTsKIAogICAg
IGlmIChjb21tYW5kLnNob3VsZER1bXBQaXhlbHMgfHwgbV9zaG91bGREdW1wUGl4ZWxzRm9yQWxs
VGVzdHMpCiAgICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldElzUGl4ZWxUZXN0KGNvbW1h
bmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwpAQCAtMTk0NCwxOCArMTkxMSw5IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmdwdVByb2Nlc3NEaWRDcmFzaChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQcm9j
ZXNzSUQgcHJvY2VzCiAgICAgc3RhdGljX2Nhc3Q8VGVzdENvbnRyb2xsZXIqPihjb25zdF9jYXN0
PHZvaWQqPihjbGllbnRJbmZvKSktPmdwdVByb2Nlc3NEaWRDcmFzaChwcm9jZXNzSUQpOwogfQog
Ci12b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGUoV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYm9vbCBzeW5j
aHJvbm91cykKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgYm9vbCBzeW5jaHJv
bm91cykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5IikpOwotICAgIFdLU3RyaW5nUmVmIGtl
eSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwga2V5S2V5LmdldCgpKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiTW9kaWZpZXJzIikpOwotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0g
c3RhdGljX2Nhc3Q8V0tFdmVudE1vZGlmaWVycz4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIG1vZGlmaWVyc0tleS5nZXQoKSkpKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbG9jYXRpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJMb2NhdGlvbiIpKTsKLSAgICB1bnNpZ25lZCBsb2NhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbG9jYXRpb25LZXkuZ2V0KCkp
KSkpOwotCi0gICAgbV9ldmVudFNlbmRlclByb3h5LT5rZXlEb3duKGtleSwgbW9kaWZpZXJzLCBs
b2NhdGlvbik7CisgICAgbV9ldmVudFNlbmRlclByb3h5LT5rZXlEb3duKHN0cmluZ1ZhbHVlKGRp
Y3Rpb25hcnksICJLZXkiKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpLCB1
aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTG9jYXRpb24iKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdChXS0FycmF5UmVmIGxpdmVEb2N1bWVu
dExpc3QpCkBAIC0xOTY0LDE4ICsxOTIyLDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVj
ZWl2ZUxpdmVEb2N1bWVudHNMaXN0KFdLQXJyYXlSZWYgbGl2ZURvY3VtZW50TGlzdCkKIAogICAg
IEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz4gZG9jdW1lbnRJbmZvOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtRG9jdW1lbnRzOyArK2kpIHsKLSAgICAgICAgV0tUeXBlUmVmIGl0ZW0g
PSBXS0FycmF5R2V0SXRlbUF0SW5kZXgobGl2ZURvY3VtZW50TGlzdCwgaSk7Ci0gICAgICAgIGlm
IChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKSB7
Ci0gICAgICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbGl2ZURvY3VtZW50SXRlbSA9IHN0YXRpY19j
YXN0PFdLRGljdGlvbmFyeVJlZj4oaXRlbSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBpZEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImlkIikpOwotICAgICAgICAgICAgV0tVSW50NjRSZWYgZG9jdW1lbnRJRCA9IHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxpdmVEb2N1bWVudEl0ZW0s
IGlkS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1
cmxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1cmwiKSk7Ci0g
ICAgICAgICAgICBXS1N0cmluZ1JlZiBkb2N1bWVudFVSTCA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxpdmVEb2N1bWVudEl0ZW0sIHVybEtleS5n
ZXQoKSkpOwotCi0gICAgICAgICAgICBkb2N1bWVudEluZm8uYWRkKFdLVUludDY0R2V0VmFsdWUo
ZG9jdW1lbnRJRCksIHRvV1RGU3RyaW5nKGRvY3VtZW50VVJMKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgaWYgKGF1dG8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShXS0FycmF5R2V0SXRlbUF0
SW5kZXgobGl2ZURvY3VtZW50TGlzdCwgaSkpKQorICAgICAgICAgICAgZG9jdW1lbnRJbmZvLmFk
ZCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiaWQiKSwgdG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUo
ZGljdGlvbmFyeSwgInVybCIpKSk7CiAgICAgfQogCiAgICAgaWYgKCFkb2N1bWVudEluZm8uc2l6
ZSgpKSB7CkBAIC0yMDA3LDYwICsxOTU1LDM1IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJl
Y2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAg
ICAgICAgIGlmIChtX3N0YXRlICE9IFJ1bm5pbmdUZXN0KQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgICAgICBXS1N0cmlu
Z1JlZiBzdWJNZXNzYWdlTmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViTWVzc2FnZUtleS5nZXQo
KSkpOwotCi0gICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3Nh
Z2VOYW1lLCAiTW91c2VEb3duIikgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIk1vdXNlVXAiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGJ1dHRvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkJ1dHRvbiIpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ1dHRvbiA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYnV0dG9uS2V5LmdldCgp
KSkpKTsKKyAgICAgICAgYXV0byBkaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgYXV0byBzdWJNZXNzYWdlTmFtZSA9IHN0cmluZ1ZhbHVlKGRpY3Rpb25h
cnksICJTdWJNZXNzYWdlIik7CiAKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtb2RpZmllcnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJN
b2RpZmllcnMiKSk7Ci0gICAgICAgICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0
YXRpY19jYXN0PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBtb2RpZmllcnNLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRv
IFdlYlByb2Nlc3MKLSAgICAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VEb3duIikpCi0gICAgICAgICAgICAgICAgbV9ldmVudFNl
bmRlclByb3h5LT5tb3VzZURvd24oYnV0dG9uLCBtb2RpZmllcnMpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VVcChidXR0b24sIG1v
ZGlmaWVycyk7CisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1l
c3NhZ2VOYW1lLCAiTW91c2VEb3duIikpIHsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94
eS0+bW91c2VEb3duKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFs
dWUoZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQogCisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3Nh
Z2VOYW1lLCAiTW91c2VVcCIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1v
dXNlVXAodWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRWYWx1ZShkaWN0
aW9uYXJ5LCAiTW9kaWZpZXJzIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUs
ICJLZXlEb3duIikpIHsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21J
bmplY3RlZEJ1bmRsZShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZhbHNlKTsKKyAgICAgICAgICAg
IGRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShkaWN0aW9uYXJ5LCBm
YWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlU2Nyb2xsQnki
KSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91Ymxl
IHggPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLQot
ICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBX
S0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLQotICAgICAg
ICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVy
UHJveHktPm1vdXNlU2Nyb2xsQnkoeCwgeSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJv
eHktPm1vdXNlU2Nyb2xsQnkoZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKSwgZG91YmxlVmFs
dWUoZGljdGlvbmFyeSwgIlkiKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwg
Ik1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIpKSB7Ci0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IFdLRG91
YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGhhc2VLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaGFzZSIpKTsKLSAgICAgICAgICAgIGlu
dCBwaGFzZSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHBoYXNlS2V5LmdldCgpKSkpKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtb21lbnR1bUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik1vbWVudHVtIikpOwotICAgICAgICAgICAgaW50IG1vbWVudHVtID0gc3RhdGljX2Nhc3Q8aW50
PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9tZW50dW1LZXkuZ2V0KCkpKSkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlByb2Nlc3MKKyAg
ICAgICAgICAgIGF1dG8geCA9IGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIik7CisgICAgICAg
ICAgICBhdXRvIHkgPSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpOworICAgICAgICAgICAg
YXV0byBwaGFzZSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJQaGFzZSIpOworICAgICAgICAg
ICAgYXV0byBtb21lbnR1bSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb21lbnR1bSIpOwog
ICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5k
TW9tZW50dW1QaGFzZXMoeCwgeSwgcGhhc2UsIG1vbWVudHVtKTsKLQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTIwODMsNDIgKzIwMDYsMjYgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0
cmluZ1JlZgogICAgICAgICBpZiAobV9zdGF0ZSAhPSBSdW5uaW5nVGVzdCkKICAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKIAotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdL
RGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViTWVzc2FnZU5hbWUg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBk
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBz
dWJNZXNzYWdlTmFtZSA9IHN0cmluZ1ZhbHVlKGRpY3Rpb25hcnksICJTdWJNZXNzYWdlIik7CiAK
ICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUs
ICJLZXlEb3duIikpIHsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21J
bmplY3RlZEJ1bmRsZShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRydWUpOwotCisgICAgICAgICAg
ICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoZGljdGlvbmFyeSwg
dHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
c3ViTWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBidXR0b25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJCdXR0b24iKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBidXR0b24gPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbktleS5n
ZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmll
cnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMi
KSk7Ci0gICAgICAgICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0
PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb2Rp
ZmllcnNLZXkuZ2V0KCkpKSkpOworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKSB7CisgICAgICAgICAgICBtX2V2ZW50
U2VuZGVyUHJveHktPm1vdXNlRG93bih1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiks
IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7CisgICAgICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgICAgIH0KIAotICAgICAgICAgICAg
Ly8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKQotICAgICAgICAgICAg
ICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VEb3duKGJ1dHRvbiwgbW9kaWZpZXJzKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNl
VXAoYnV0dG9uLCBtb2RpZmllcnMpOworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlVXAiKSkgeworICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5tb3VzZVVwKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwg
dWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpKTsKICAgICAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VNb3ZlVG8i
KSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91Ymxl
IHggPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLQot
ICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBX
S0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLQotICAgICAg
ICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVy
UHJveHktPm1vdXNlTW92ZVRvKHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5
LT5tb3VzZU1vdmVUbyhkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpLCBkb3VibGVWYWx1ZShk
aWN0aW9uYXJ5LCAiWSIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihu
dWxscHRyKTsKICAgICAgICAgfQogCkBAIC0yMTQ0LDgxICsyMDUxLDQ4IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUo
V0tTdHJpbmdSZWYKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VGb3JjZUNoYW5nZWQiKSkgewotICAgICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZvcmNlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRm9yY2UiKSk7Ci0gICAgICAgICAgICBkb3VibGUgZm9y
Y2UgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZm9yY2VLZXkuZ2V0KCkpKSk7
Ci0KLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VGb3JjZUNoYW5nZWQoZm9y
Y2UpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZUZvcmNlQ2hhbmdlZChk
b3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiRm9yY2UiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShN
QUMpCiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2Fn
ZU5hbWUsICJDb250aW51b3VzTW91c2VTY3JvbGxCeSIpKSB7Ci0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gcGFnZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQ
YWdlZCIpKTsKLSAgICAgICAgICAgIGJvb2wgcGFnZWQgPSBzdGF0aWNfY2FzdDxib29sPihXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGFnZWRLZXkuZ2V0KCkpKSkpOwotCi0gICAg
ICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlByb2Nlc3MKKyAgICAgICAgICAgIGF1dG8geCA9IGRv
dWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIik7CisgICAgICAgICAgICBhdXRvIHkgPSBkb3VibGVW
YWx1ZShkaWN0aW9uYXJ5LCAiWSIpOworICAgICAgICAgICAgYXV0byBwYWdlZCA9IGJvb2xlYW5W
YWx1ZShkaWN0aW9uYXJ5LCAiUGFnZWQiKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94
eS0+Y29udGludW91c01vdXNlU2Nyb2xsQnkoeCwgeSwgcGFnZWQpOwogICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJMZWFwRm9yd2Fy
ZCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGltZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVJbk1pbGxpc2Vjb25kcyIp
KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRpbWUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tV
SW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRpbWVLZXkuZ2V0KCkpKSkpOwotCi0gICAg
ICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmxlYXBGb3J3YXJkKHRpbWUpOworICAgICAgICAg
ICAgbV9ldmVudFNlbmRlclByb3h5LT5sZWFwRm9yd2FyZCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5
LCAiVGltZUluTWlsbGlzZWNvbmRzIikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
ICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwg
IkFkZFRvdWNoUG9pbnQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAg
ICAgICAgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZ
IikpOwotICAgICAgICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5hZGRUb3VjaFBvaW50KHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNl
bmRlclByb3h5LT5hZGRUb3VjaFBvaW50KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJYIiksIHVp
bnQ2NFZhbHVlKGRpY3Rpb25hcnksICJZIikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJVcGRhdGVUb3VjaFBvaW50IikpIHsK
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgICAgICAgICAgaW50
IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgaW5kZXhLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7
Ci0gICAgICAgICAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlkiKSk7Ci0gICAgICAgICAgICBpbnQgeSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSkpOwotCisgICAgICAgICAgICBh
dXRvIGluZGV4ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkluZGV4Iik7CisgICAgICAgICAg
ICBhdXRvIHggPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAgICAgICAgICAgYXV0
byB5ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKICAgICAgICAgICAgIG1fZXZlbnRT
ZW5kZXJQcm94eS0+dXBkYXRlVG91Y2hQb2ludChpbmRleCwgeCwgeSk7CiAgICAgICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIlNldFRvdWNo
TW9kaWZpZXIiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlm
aWVyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXIi
KSk7Ci0gICAgICAgICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyID0gc3RhdGljX2Nhc3Q8
V0tFdmVudE1vZGlmaWVycz4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vZGlm
aWVyS2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGVuYWJsZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVuYWJs
ZSIpKTsKLSAgICAgICAgICAgIGJvb2wgZW5hYmxlID0gc3RhdGljX2Nhc3Q8Ym9vbD4oV0tVSW50
NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGVuYWJsZUtleS5nZXQoKSkpKSk7Ci0KKyAgICAg
ICAgICAgIGF1dG8gbW9kaWZpZXIgPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXIi
KTsKKyAgICAgICAgICAgIGF1dG8gZW5hYmxlID0gYm9vbGVhblZhbHVlKGRpY3Rpb25hcnksICJF
bmFibGUiKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+c2V0VG91Y2hNb2RpZmll
cihtb2RpZmllciwgZW5hYmxlKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiU2V0VG91Y2hQb2ludFJhZGl1cyIpKSB7Ci0gICAg
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1giKSk7Ci0gICAgICAgICAgICBpbnQgeCA9IHN0
YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0
KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1kiKSk7Ci0gICAgICAg
ICAgICBpbnQgeSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHlLZXkuZ2V0KCkpKSkpOwotCisgICAgICAgICAgICBhdXRvIHggPSB1aW50NjRWYWx1
ZShkaWN0aW9uYXJ5LCAiUmFkaXVzWCIpOworICAgICAgICAgICAgYXV0byB5ID0gdWludDY0VmFs
dWUoZGljdGlvbmFyeSwgIlJhZGl1c1kiKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94
eS0+c2V0VG91Y2hQb2ludFJhZGl1cyh4LCB5KTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQpAQCAtMjI0OSwxNiArMjEyMywxMiBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKFdLU3RyaW5nUmVmCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIlJlbGVhc2VUb3VjaFBvaW50Iikp
IHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgICAgICAgICAg
aW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgaW5kZXhLZXkuZ2V0KCkpKSkpOwotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5
LT5yZWxlYXNlVG91Y2hQb2ludChpbmRleCk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJv
eHktPnJlbGVhc2VUb3VjaFBvaW50KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJbmRleCIpKTsK
ICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VO
YW1lLCAiQ2FuY2VsVG91Y2hQb2ludCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJJbmRleCIpKTsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oV0tV
SW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGluZGV4S2V5LmdldCgpKSkpKTsKLSAgICAg
ICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+Y2FuY2VsVG91Y2hQb2ludChpbmRleCk7CisgICAg
ICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmNhbmNlbFRvdWNoUG9pbnQodWludDY0VmFsdWUo
ZGljdGlvbmFyeSwgIkluZGV4IikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKG51bGxwdHIpOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTIyNzUsMTQgKzIxNDUsMTYgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21Jbmpl
Y3RlZEJ1bmRsZShXS1N0cmluZ1JlZgogICAgIH07CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFsd2F5c0FjY2VwdENvb2tpZXMiKSkgewot
ICAgICAgICBXS0Jvb2xlYW5SZWYgYWNjZXB0ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBX
S0Jvb2xlYW5HZXRWYWx1ZShhY2NlcHQpID8ga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5
cyA6IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsK
KyAgICAgICAgYXV0byBwb2xpY3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkKKyAgICAgICAgICAgID8ga1dLSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUFsd2F5cworICAgICAgICAgICAgOiBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5T25s
eUZyb21NYWluRG9jdW1lbnREb21haW47CiAgICAgICAgIHJldHVybiBzZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0T25s
eUFjY2VwdEZpcnN0UGFydHlDb29raWVzIikpIHsKLSAgICAgICAgV0tCb29sZWFuUmVmIGFjY2Vw
dCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS0hU
VFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoYWNjZXB0KSA/
IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21h
aW4gOiBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47
CisgICAgICAgIGF1dG8gcG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSkpCisgICAgICAgICAgICA/IGtXS0hUVFBDb29raWVBY2Nl
cHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4KKyAgICAgICAgICAgIDog
a1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAg
ICAgICByZXR1cm4gc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3ksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9CiAKQEAgLTI0MDMsMTIgKzIyNzUsOCBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpzZXRCbG9ja0FsbFBsdWdpbnMoYm9vbCBzaG91bGRCbG9jaykKIAogI2lm
IFBMQVRGT1JNKE1BQykKICAgICBhdXRvIHBvbGljeSA9IHNob3VsZEJsb2NrID8ga1dLUGx1Z2lu
TG9hZENsaWVudFBvbGljeUJsb2NrIDoga1dLUGx1Z2luTG9hZENsaWVudFBvbGljeUFsbG93Owot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVOZXRzY2FwZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4i
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVGbGFzaCA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5w
bHVnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVtcHR5U3RyaW5nID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotICAgIFdLQ29udGV4dFNl
dFBsdWdpbkxvYWRDbGllbnRQb2xpY3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ksIGVtcHR5U3Ry
aW5nLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIGVtcHR5U3RyaW5nLmdldCgpKTsKLSAgICBX
S0NvbnRleHRTZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5
LCBlbXB0eVN0cmluZy5nZXQoKSwgbmFtZUZsYXNoLmdldCgpLCBlbXB0eVN0cmluZy5nZXQoKSk7
CisgICAgV0tDb250ZXh0U2V0UGx1Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRleHQuZ2V0KCks
IHBvbGljeSwgdG9XSygiIikuZ2V0KCksIHRvV0soImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVn
aW4iKS5nZXQoKSwgdG9XSygiIikuZ2V0KCkpOworICAgIFdLQ29udGV4dFNldFBsdWdpbkxvYWRD
bGllbnRQb2xpY3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ksIHRvV0soIiIpLmdldCgpLCB0b1dL
KCJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luIikuZ2V0KCksIHRvV0soIiIpLmdl
dCgpKTsKICNlbmRpZgogfQogCkBAIC0yNDIzLDI5ICsyMjkxLDI0IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUoY29uc3QgU3RyaW5nJiBtb2RlKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGVt
cHR5QXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBhbGxPcmlnaW5zID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzcGVjaWZpY09y
aWdpbiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxvY2FsaG9zdCIp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZGZOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTXkgcGVyc29uYWwgUERGIikpOwotICAgIFdLQ29u
dGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIGFsbE9yaWdpbnMuZ2V0KCks
IHBkZk5hbWUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAg
IGF1dG8gZW1wdHlBcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZU5ldHNjYXBlID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdpbiIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWltZVR5cGVOZXRzY2FwZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3Qt
bmV0c2NhcGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG1pbWVUeXBl
c05ldHNjYXBlID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBXS0FycmF5
QXBwZW5kSXRlbShtaW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVOZXRzY2FwZS5nZXQo
KSk7CisgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9X
SygiIikuZ2V0KCksIHRvV0soIk15IHBlcnNvbmFsIFBERiIpLmdldCgpLCBlbXB0eUFycmF5Lmdl
dCgpLCBlbXB0eUFycmF5LmdldCgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBu
YW1lUGRmID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0IGJ1
aWx0LWluIFBERiIpKTsKKyAgICBhdXRvIG5hbWVOZXRzY2FwZSA9IHRvV0soImNvbS5hcHBsZS50
ZXN0bmV0c2NhcGVwbHVnaW4iKTsKKyAgICBhdXRvIG1pbWVUeXBlc05ldHNjYXBlID0gYWRvcHRX
SyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBXS0FycmF5QXBwZW5kSXRlbShtaW1lVHlw
ZXNOZXRzY2FwZS5nZXQoKSwgdG9XSygiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2Fw
ZSIpLmdldCgpKTsKKyAgICBhdXRvIG5hbWVQZGYgPSB0b1dLKCJXZWJLaXQgYnVpbHQtaW4gUERG
Iik7CiAKICAgICBpZiAobV91bnN1cHBvcnRlZFBsdWdpbk1vZGUgPT0gImFsbE9yaWdpbnMiKSB7
Ci0gICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIGFs
bE9yaWdpbnMuZ2V0KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVzTmV0c2NhcGUuZ2V0
KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVn
aW4obV9jb250ZXh0LmdldCgpLCBhbGxPcmlnaW5zLmdldCgpLCBuYW1lUGRmLmdldCgpLCBlbXB0
eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250ZXh0QWRkU3Vw
cG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygiIikuZ2V0KCksIG5hbWVOZXRzY2Fw
ZS5nZXQoKSwgbWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAg
ICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCIi
KS5nZXQoKSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobV91bnN1cHBvcnRlZFBsdWdp
bk1vZGUgPT0gInNwZWNpZmljT3JpZ2luIikgewotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0
ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBzcGVjaWZpY09yaWdpbi5nZXQoKSwgbmFtZU5ldHNj
YXBlLmdldCgpLCBtaW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7Ci0g
ICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHNwZWNp
ZmljT3JpZ2luLmdldCgpLCBuYW1lUGRmLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFy
cmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4
dC5nZXQoKSwgdG9XSygibG9jYWxob3N0IikuZ2V0KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgbWlt
ZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAgICAgICBXS0NvbnRl
eHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCJsb2NhbGhvc3QiKS5n
ZXQoKSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC0yNDkxLDE0ICsyMzU0LDEyIEBAIGJvb2wg
VGVzdENvbnRyb2xsZXI6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoV0tQ
YWdlUmVmIHBhZ2UsIFdLUHJvCiB7CiAgICAgaWYgKG1fc2hvdWxkTG9nQ2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZSkKICAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+b3V0
cHV0VGV4dCgiY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZVxuIik7Ci0gICAg
V0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNhdGlvblNjaGVt
ZSA9IFdLUHJvdGVjdGlvblNwYWNlR2V0QXV0aGVudGljYXRpb25TY2hlbWUocHJvdGVjdGlvblNw
YWNlKTsKLSAgICAKLSAgICBpZiAoYXV0aGVudGljYXRpb25TY2hlbWUgPT0ga1dLUHJvdGVjdGlv
blNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQp
IHsKLSAgICAgICAgc3RkOjpzdHJpbmcgaG9zdCA9IHRvU1REKGFkb3B0V0soV0tQcm90ZWN0aW9u
U3BhY2VDb3B5SG9zdChwcm90ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CisgICAgYXV0byBzY2hlbWUg
PSBXS1Byb3RlY3Rpb25TcGFjZUdldEF1dGhlbnRpY2F0aW9uU2NoZW1lKHByb3RlY3Rpb25TcGFj
ZSk7CisgICAgaWYgKHNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNj
aGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZCkgeworICAgICAgICBhdXRvIGhvc3Qg
PSB0b1NURChhZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNl
KSkpOwogICAgICAgICByZXR1cm4gaG9zdCA9PSAibG9jYWxob3N0IiB8fCBob3N0ID09ICIxMjcu
MC4wLjEiIHx8IChtX2FsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyAmJiBt
X2FsbG93ZWRIb3N0cy5maW5kKGhvc3QpICE9IG1fYWxsb3dlZEhvc3RzLmVuZCgpKTsKICAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIGF1dGhlbnRpY2F0aW9uU2NoZW1lIDw9IGtXS1Byb3RlY3Rpb25T
cGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdCB8fCBhdXRoZW50aWNhdGlvblNjaGVt
ZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU9BdXRoOworICAgIHJl
dHVybiBzY2hlbWUgPD0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQ
RGlnZXN0IHx8IHNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVt
ZU9BdXRoOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKFdL
UGFnZVJlZiBwYWdlLCBXS05hdmlnYXRpb25SZWYgbmF2aWdhdGlvbikKQEAgLTI1MDYsOCArMjM2
Nyw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24oV0tQYWdlUmVm
IHBhZ2UsIFdLTmF2aWdhdGlvblJlZiBuYXZpZ2F0CiAgICAgaWYgKG1fc3RhdGUgIT0gUmVzZXR0
aW5nKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkwg
PSBhZG9wdFdLKFdLRnJhbWVDb3B5VVJMKFdLUGFnZUdldE1haW5GcmFtZShwYWdlKSkpOwotICAg
IGlmICghV0tVUkxJc0VxdWFsKHdrVVJMLmdldCgpLCBibGFua1VSTCgpKSkKKyAgICBpZiAoIVdL
VVJMSXNFcXVhbChhZG9wdFdLKFdLRnJhbWVDb3B5VVJMKFdLUGFnZUdldE1haW5GcmFtZShwYWdl
KSkpLmdldCgpLCBibGFua1VSTCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kb25lUmVz
ZXR0aW5nID0gdHJ1ZTsKQEAgLTI1MjcsNyArMjM4Nyw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYgcGFnZSwgV0tBdXRo
ZW50CiAgICAgICAgIG1fc2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50Kys7
CiAKICAgICAgICAgaWYgKG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGUpIHsKLSAgICAgICAgICAg
IFdLUmV0YWluUHRyPFdLQ3JlZGVudGlhbFJlZj4gY3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVk
ZW50aWFsQ3JlYXRlKHRvV0soImFjY2VwdCBzZXJ2ZXIgdHJ1c3QiKS5nZXQoKSwgdG9XSygiIiku
Z2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpKTsKKyAgICAgICAgICAgIGF1dG8g
Y3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHRvV0soImFjY2VwdCBzZXJ2
ZXIgdHJ1c3QiKS5nZXQoKSwgdG9XSygiIikuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5j
ZU5vbmUpKTsKICAgICAgICAgICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNl
Q3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVyLCBjcmVkZW50aWFsLmdldCgpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjU0MSw5ICsyNDAxLDkgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdLUGFnZVJlZiBwYWdl
LCBXS0F1dGhlbnQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIGhv
c3QgPSB0b1NURChhZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNw
YWNlKSkuZ2V0KCkpOworICAgIGF1dG8gaG9zdCA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tQcm90
ZWN0aW9uU3BhY2VDb3B5SG9zdChwcm90ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CiAgICAgaW50IHBv
cnQgPSBXS1Byb3RlY3Rpb25TcGFjZUdldFBvcnQocHJvdGVjdGlvblNwYWNlKTsKLSAgICBTdHJp
bmcgbWVzc2FnZSA9IG1ha2VTdHJpbmcoaG9zdC5jX3N0cigpLCAnOicsIHBvcnQsICIgLSBkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgLSAiLCB0b1N0cmluZyhhdXRoZW50aWNhdGlv
blNjaGVtZSksICIgLSAiKTsKKyAgICBTdHJpbmcgbWVzc2FnZSA9IG1ha2VTdHJpbmcoaG9zdCwg
JzonLCBwb3J0LCAiIC0gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIC0gIiwgdG9T
dHJpbmcoYXV0aGVudGljYXRpb25TY2hlbWUpLCAiIC0gIik7CiAgICAgaWYgKCFtX2hhbmRsZXNB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpCiAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCJTaW11bGF0
aW5nIGNhbmNlbGxlZCBhdXRoZW50aWNhdGlvbiBzaGVldFxuIik7CiAgICAgZWxzZQpAQCAtMjU1
NCwxMyArMjQxNCwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmIHBhZ2UsIFdLQXV0aGVudAogICAgICAgICBXS0F1dGhl
bnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwg
MCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHVzZXJuYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhtX2F1dGhl
bnRpY2F0aW9uVXNlcm5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBwYXNzd29yZCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
bV9hdXRoZW50aWNhdGlvblBhc3N3b3JkLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0
cjxXS0NyZWRlbnRpYWxSZWY+IGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0
ZSh1c2VybmFtZS5nZXQoKSwgcGFzc3dvcmQuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5j
ZUZvclNlc3Npb24pKTsKKyAgICBhdXRvIGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlh
bENyZWF0ZSh0b1dLKG1fYXV0aGVudGljYXRpb25Vc2VybmFtZSkuZ2V0KCksIHRvV0sobV9hdXRo
ZW50aWNhdGlvblBhc3N3b3JkKS5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vz
c2lvbikpOwogICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlh
bChkZWNpc2lvbkxpc3RlbmVyLCBjcmVkZW50aWFsLmdldCgpKTsKIH0KIAotICAgIAorCiAvLyBX
S0NvbnRleHREb3dubG9hZENsaWVudAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpkb3dubG9hZERp
ZFN0YXJ0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0Rvd25sb2FkUmVmIGRvd25sb2FkLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtMjcwNCw5ICsyNTYyLDkgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKICAgICBkZWNpZGVQ
b2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgpOwogfQogCi12
b2lkIFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0
aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0Fs
dGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBk
b3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFk
aW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29y
TGV2ZWwsIGRvdWJsZSBmbG9vckxldmVsKQordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3Vi
bGUgYWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4g
YWx0aXR1ZGVBY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3Vi
bGU+IHNwZWVkLCBPcHRpb25hbDxkb3VibGU+IGZsb29yTGV2ZWwpCiB7Ci0gICAgbV9nZW9sb2Nh
dGlvblByb3ZpZGVyLT5zZXRQb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwg
cHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0
aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBz
cGVlZCwgcHJvdmlkZXNGbG9vckxldmVsLCBmbG9vckxldmVsKTsKKyAgICBtX2dlb2xvY2F0aW9u
UHJvdmlkZXItPnNldFBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBhbHRp
dHVkZSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQsIGZsb29yTGV2ZWwpOwogfQog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxh
YmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKQpAQCAtMjg1Niw5ICsyNzE0LDcgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6aGFuZGxlQ2hlY2tPZlVzZXJNZWRpYVBlcm1pc3Npb25Gb3JP
cmlnaW4oV0tGcmFtZVJlZiBmcmFtZSwKIHsKICAgICBhdXRvIG9yaWdpbkhhc2ggPSB1c2VyTWVk
aWFPcmlnaW5IYXNoKHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCB0b3BMZXZlbERvY3VtZW50T3Jp
Z2luKTsKICAgICBhdXRvIHNhbHQgPSBzYWx0Rm9yT3JpZ2luKGZyYW1lLCBvcmlnaW5IYXNoKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2FsdFN0cmluZyA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2FsdC51dGY4KCkuZGF0YSgpKSk7Ci0KLSAgICBXS1Vz
ZXJNZWRpYVBlcm1pc3Npb25DaGVja1NldFVzZXJNZWRpYUFjY2Vzc0luZm8oY2hlY2tSZXF1ZXN0
LCBzYWx0U3RyaW5nLmdldCgpLCBzZXR0aW5nc0Zvck9yaWdpbihvcmlnaW5IYXNoKS5wZXJzaXN0
ZW50UGVybWlzc2lvbigpKTsKKyAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1NldFVzZXJN
ZWRpYUFjY2Vzc0luZm8oY2hlY2tSZXF1ZXN0LCB0b1dLKHNhbHQpLmdldCgpLCBzZXR0aW5nc0Zv
ck9yaWdpbihvcmlnaW5IYXNoKS5wZXJzaXN0ZW50UGVybWlzc2lvbigpKTsKIH0KIAogYm9vbCBU
ZXN0Q29udHJvbGxlcjo6aGFuZGxlRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1
ZXN0KFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luKQpAQCAtMjkxNCw4ICsyNzcwLDggQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RJZlBvc3NpYmxlKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gYXVkaW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1Vz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0QXVkaW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gdmlkZW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1Vz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0VmlkZW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKKyAgICAg
ICAgYXV0byBhdWRpb0RldmljZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RBdWRpb0RldmljZVVJRHMocmVxdWVzdCkpOworICAgICAgICBhdXRvIHZpZGVvRGV2aWNl
VUlEcyA9IGFkb3B0V0soV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFZpZGVvRGV2aWNlVUlE
cyhyZXF1ZXN0KSk7CiAKICAgICAgICAgaWYgKCFXS0FycmF5R2V0U2l6ZSh2aWRlb0RldmljZVVJ
RHMuZ2V0KCkpICYmICFXS0FycmF5R2V0U2l6ZShhdWRpb0RldmljZVVJRHMuZ2V0KCkpKSB7CiAg
ICAgICAgICAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0RGVueShyZXF1ZXN0LCBrV0tO
b0NvbnN0cmFpbnRzKTsKQEAgLTI5MjYsMTMgKzI3ODIsMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3NpYmxlKCkK
ICAgICAgICAgaWYgKFdLQXJyYXlHZXRTaXplKHZpZGVvRGV2aWNlVUlEcy5nZXQoKSkpCiAgICAg
ICAgICAgICB2aWRlb0RldmljZVVJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
QXJyYXlHZXRJdGVtQXRJbmRleCh2aWRlb0RldmljZVVJRHMuZ2V0KCksIDApKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdmlkZW9EZXZpY2VVSUQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCIiKSk7CisgICAgICAgICAgICB2aWRlb0RldmljZVVJRCA9IHRvV0so
IiIpOwogCiAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdWRpb0RldmljZVVJRDsK
ICAgICAgICAgaWYgKFdLQXJyYXlHZXRTaXplKGF1ZGlvRGV2aWNlVUlEcy5nZXQoKSkpCiAgICAg
ICAgICAgICBhdWRpb0RldmljZVVJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
QXJyYXlHZXRJdGVtQXRJbmRleChhdWRpb0RldmljZVVJRHMuZ2V0KCksIDApKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYXVkaW9EZXZpY2VVSUQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCIiKSk7CisgICAgICAgICAgICBhdWRpb0RldmljZVVJRCA9IHRvV0so
IiIpOwogCiAgICAgICAgIFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RBbGxvdyhyZXF1ZXN0
LCBhdWRpb0RldmljZVVJRC5nZXQoKSwgdmlkZW9EZXZpY2VVSUQuZ2V0KCkpOwogICAgIH0KQEAg
LTMwNTYsMTIgKzI5MTIsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWROYXZpZ2F0ZVdpdGhO
YXZpZ2F0aW9uRGF0YShXS05hdmlnYXRpb25EYXRhUmVmIG5hdmlnYXRpbwogICAgIGlmICghbV9z
aG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBVUkwKICAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tOYXZpZ2F0aW9uRGF0YUNvcHlVUkwobmF2
aWdhdGlvbkRhdGEpKTsKICAgICBhdXRvIHVybFN0cmluZyA9IHRvV1RGU3RyaW5nKGFkb3B0V0so
V0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpKTsKLSAgICAvLyBUaXRsZQogICAgIGF1dG8gdGl0
bGUgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5VGl0bGUobmF2aWdh
dGlvbkRhdGEpKSk7Ci0gICAgLy8gSFRUUCBtZXRob2QKICAgICBhdXRvIHJlcXVlc3QgPSBhZG9w
dFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5T3JpZ2luYWxSZXF1ZXN0KG5hdmlnYXRpb25EYXRhKSk7
CiAgICAgYXV0byBtZXRob2QgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlI
VFRQTWV0aG9kKHJlcXVlc3QuZ2V0KCkpKSk7CiAKQEAgLTMyMDYsNyArMzA1OSw3IEBAIHZvaWQg
Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSwgV0tBcnJh
eVJlZiBkb21haW5MaXN0KQogCiAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0RG9tYWluczsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV0tBcnJheUdldFNpemUoZG9tYWluTGlzdCk7IGkr
KykgewotICAgICAgICBhdXRvIGRvbWFpbiA9ICByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVm
PihXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluTGlzdCwgaSkpOworICAgICAgICBhdXRvIGRv
bWFpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChkb21haW5MaXN0LCBpKSk7CiAgICAgICAgIGF1dG8gYnVmZmVyID0gc3RkOjp2ZWN0b3I8Y2hh
cj4oV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGRvbWFpbikpOwogICAgICAgICBh
dXRvIHN0cmluZ0xlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcoZG9tYWluLCBidWZmZXIu
ZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKIApAQCAtMzk3OCw3ICszODMxLDcgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6cmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKCkKIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmlu
ZyYgYnVuZGxlSWRlbnRpZmllcikKIHsKICAgICBJbkFwcEJyb3dzZXJQcml2YWN5Q2FsbGJhY2tD
b250ZXh0IGNvbnRleHQoKnRoaXMpOwotICAgIFdLV2Vic2l0ZURhdGFTdG9yZVVwZGF0ZUJ1bmRs
ZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0
b3JlKCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVuZGxlSWRlbnRp
Zmllci51dGY4KCkuZGF0YSgpKSkuZ2V0KCksICZjb250ZXh0LCBpbkFwcEJyb3dzZXJQcml2YWN5
Vm9pZFJlc3VsdENhbGxiYWNrKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRhdGVCdW5kbGVJ
ZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9y
ZSgpLCB0b1dLKGJ1bmRsZUlkZW50aWZpZXIpLmdldCgpLCAmY29udGV4dCwgaW5BcHBCcm93c2Vy
UHJpdmFjeVZvaWRSZXN1bHRDYWxsYmFjayk7CiAgICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBu
b1RpbWVvdXQpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKaW5k
ZXggZjk0ZDU3YzE0N2IzMTZmMDc4ZmE4NWYyMjBmNDA3NjA5NDExM2M4Yy4uZmY4Mzk0ZWMwMzg3
N2E2ZGJjMGRjNGIzZTQ4YzBlZjRmM2YzYjMzOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuaApAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBH
ZW9sb2NhdGlvbi4KICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sKTsKLSAg
ICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91Ymxl
IGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJs
ZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVk
ZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJv
dmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91Ymxl
IGZsb29yTGV2ZWwpOworICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91Ymxl
IGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlvbmFsPGRv
dWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwgT3B0aW9u
YWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25hbDxkb3Vi
bGU+IGZsb29yTGV2ZWwpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2
YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSk7CiAgICAgdm9pZCBoYW5kbGVH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dFJlZik7CiAgICAgYm9vbCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXggYTViNmRkMDU1ODBh
ZTBjMmQ5NTcwNzdkZmU0NTBhNDg2ZTZkMDFlYy4uNTAxMjdmNjc4NDFlMDNjNTU2OGUxOWU5OTEx
Nzk3YzhmYzJkNmI4MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52
b2NhdGlvbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5j
cHAKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
SW52b2NhdGlvbi5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2lu
Y2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCkBAIC02NiwyMSArNjYsMTcgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdUUiB7CiAKK3N0YXRpYyB2b2lkIHBvc3RQ
YWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgYm9keSA9IG51bGxwdHIpCit7
CisgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIGJvZHkp
OworfQorCiBUZXN0SW52b2NhdGlvbjo6VGVzdEludm9jYXRpb24oV0tVUkxSZWYgdXJsLCBjb25z
dCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKICAgICA6IG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwg
bV91cmwodXJsKQogICAgICwgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcihSdW5Mb29wOjptYWlu
KCksIHRoaXMsICZUZXN0SW52b2NhdGlvbjo6d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VS
TENvcHlTdHJpbmcobV91cmwuZ2V0KCkpKTsKLQotICAgIHNpemVfdCBzdHJpbmdMZW5ndGggPSBX
S1N0cmluZ0dldExlbmd0aCh1cmxTdHJpbmcuZ2V0KCkpOwotCi0gICAgVmVjdG9yPGNoYXI+IHVy
bFZlY3RvcjsKLSAgICB1cmxWZWN0b3IucmVzaXplKHN0cmluZ0xlbmd0aCArIDEpOwotCi0gICAg
V0tTdHJpbmdHZXRVVEY4Q1N0cmluZyh1cmxTdHJpbmcuZ2V0KCksIHVybFZlY3Rvci5kYXRhKCks
IHN0cmluZ0xlbmd0aCArIDEpOwotCi0gICAgbV91cmxTdHJpbmcgPSBTdHJpbmcodXJsVmVjdG9y
LmRhdGEoKSwgc3RyaW5nTGVuZ3RoKTsKKyAgICBtX3VybFN0cmluZyA9IHRvV1RGU3RyaW5nKGFk
b3B0V0soV0tVUkxDb3B5U3RyaW5nKG1fdXJsLmdldCgpKSkuZ2V0KCkpOwogCiAgICAgLy8gRklY
TUU6IEF2b2lkIG11dGF0aW5nIHRoZSBzZXR0aW5nIHZpYSBhIHRlc3QgZGlyZWN0b3J5IGxpa2Ug
dGhpcy4KICAgICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSB1cmxDb250YWlucygibG9hZGlu
Zy8iKSAmJiAhdXJsQ29udGFpbnMoIjovL2xvY2FsaG9zdCIpOwpAQCAtMTI5LDI4ICsxMjUsMTIg
QEAgYm9vbCBUZXN0SW52b2NhdGlvbjo6c2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcygp
IGNvbnN0CiAKIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IFRlc3RJbnZvY2F0
aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB1c2VGbGV4aWJsZVZpZXdwb3J0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVXNlRmxleGlibGVWaWV3cG9ydCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IHVzZUZsZXhpYmxlVmlld3BvcnRWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KG9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgdXNlRmxleGlibGVWaWV3cG9ydEtleS5nZXQo
KSwgdXNlRmxleGlibGVWaWV3cG9ydFZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBkdW1wUGl4ZWxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRHVtcFBpeGVscyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGR1
bXBQaXhlbHNWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcFBpeGVscykpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIGR1bXBQ
aXhlbHNLZXkuZ2V0KCksIGR1bXBQaXhlbHNWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdGltZW91dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRpbWVvdXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHRpbWVv
dXRWYWx1ZSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobV90aW1lb3V0Lm1pbGxpc2Vjb25kcygp
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwg
dGltZW91dEtleS5nZXQoKSwgdGltZW91dFZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJWYWx1
ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgZHVt
cEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5LmdldCgpLCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJW
YWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNWYWx1ZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcob3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzLmNfc3RyKCkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVz
dE1lc3NhZ2VCb2R5LmdldCgpLCBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0tleS5nZXQo
KSwgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNWYWx1ZS5nZXQoKSk7Ci0KKyAgICBhdXRv
IGJlZ2luVGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVXNlRmxleGlibGVWaWV3
cG9ydCIsIG9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KTsKKyAgICBzZXRWYWx1ZShiZWdp
blRlc3RNZXNzYWdlQm9keSwgIkR1bXBQaXhlbHMiLCBtX2R1bXBQaXhlbHMpOworICAgIHNldFZh
bHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVGltZW91dCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90
PihtX3RpbWVvdXQubWlsbGlzZWNvbmRzKCkpKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNz
YWdlQm9keSwgIkR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIG1fZHVtcEpTQ29uc29sZUxvZ0lu
U3RkRXJyKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgImFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzIiwgb3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzLmNfc3RyKCkpOwogICAgIHJldHVybiBiZWdpblRlc3RNZXNzYWdlQm9keTsKIH0KIApAQCAt
MTY4LDkgKzE0OCw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246Omludm9rZSgpCiAKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGNsZWFyIG91dCB2aXNpdGVkIGxpbmtzIGhlcmUuCiAKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJCZWdpblRlc3QiKSk7Ci0gICAgYXV0byBiZWdpblRlc3RNZXNzYWdl
Qm9keSA9IGNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkoKTsKLSAgICBXS1BhZ2VQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIGJlZ2luVGVzdE1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkJlZ2luVGVzdCIsIGNyZWF0ZVRlc3RTZXR0aW5n
c0RpY3Rpb25hcnkoKS5nZXQoKSk7CiAKICAgICBtX3N0YXJ0ZWRUZXN0aW5nID0gdHJ1ZTsKIApA
QCAtMzI3LDE4NSArMzA1LDEwNCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWNrIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgbWVzc2FnZUJvZHlTdHJpbmcgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlQm9keVN0cmluZywgIkJlZ2luVGVzdCIpKSB7Cisg
ICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5KSwgIkJlZ2luVGVzdCIpKSB7CiAgICAgICAgICAgICBtX2dvdEluaXRpYWxSZXNwb25z
ZSA9IHRydWU7CiAgICAgICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubm90aWZ5
RG9uZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJEb25lIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
cGl4ZWxSZXN1bHRJc1BlbmRpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJQaXhlbFJlc3VsdElzUGVuZGluZyIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBp
eGVsUmVzdWx0SXNQZW5kaW5nID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGl4ZWxSZXN1bHRJc1BlbmRp
bmdLZXkuZ2V0KCkpKTsKLSAgICAgICAgbV9waXhlbFJlc3VsdElzUGVuZGluZyA9IFdLQm9vbGVh
bkdldFZhbHVlKHBpeGVsUmVzdWx0SXNQZW5kaW5nKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIG1f
cGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiUGl4ZWxSZXN1bHRJc1BlbmRpbmciKTsKICAgICAgICAgaWYgKCFtX3BpeGVsUmVzdWx0SXNQ
ZW5kaW5nKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGl4ZWxSZXN1
bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaXhlbFJlc3Vs
dCIpKTsKLSAgICAgICAgICAgIG1fcGl4ZWxSZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0ltYWdlUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGl4ZWxS
ZXN1bHRLZXkuZ2V0KCkpKTsKKyAgICAgICAgICAgIG1fcGl4ZWxSZXN1bHQgPSBzdGF0aWNfY2Fz
dDxXS0ltYWdlUmVmPih2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJQaXhlbFJlc3VsdCIp
KTsKICAgICAgICAgICAgIEFTU0VSVCghbV9waXhlbFJlc3VsdCB8fCBtX2R1bXBQaXhlbHMpOwog
ICAgICAgICB9Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlcGFpbnRSZWN0
c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlcGFpbnRSZWN0
cyIpKTsKLSAgICAgICAgbV9yZXBhaW50UmVjdHMgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcmVwYWludFJl
Y3RzS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF1ZGlv
UmVzdWx0S2V5ID0gIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF1ZGlv
UmVzdWx0IikpOwotICAgICAgICBtX2F1ZGlvUmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0tEYXRhUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYXVkaW9S
ZXN1bHRLZXkuZ2V0KCkpKTsKLQorICAgICAgICBtX3JlcGFpbnRSZWN0cyA9IHN0YXRpY19jYXN0
PFdLQXJyYXlSZWY+KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlJlcGFpbnRSZWN0cyIp
KTsKKyAgICAgICAgbV9hdWRpb1Jlc3VsdCA9IHN0YXRpY19jYXN0PFdLRGF0YVJlZj4odmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQXVkaW9SZXN1bHQiKSk7CiAgICAgICAgIGRvbmUoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiVGV4dE91dHB1dCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
U3RyaW5nUmVmIHRleHRPdXRwdXQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBtX3RleHRPdXRwdXQuYXBwZW5kKHRvV1RGU3RyaW5nKHRleHRPdXRwdXQp
KTsKKyAgICAgICAgbV90ZXh0T3V0cHV0LmFwcGVuZCh0b1dURlN0cmluZyhzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRHVtcFRvU3RkRXJyIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdGV4dE91dHB1dCA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCB0b1dU
RlN0cmluZyh0ZXh0T3V0cHV0KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICIlcyIsIHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkJlZm9yZVVubG9hZFJldHVyblZhbHVlIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSA9
IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoV0tCb29sZWFu
R2V0VmFsdWUoYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWRkQ2hyb21lSW5wdXRGaWVs
ZCIpKSB7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5hZGRDaHJvbWVJbnB1dEZpZWxkKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNh
bGxBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIHBvc3RQYWdlTWVz
c2FnZSgiQ2FsbEFkZENocm9tZUlucHV0RmllbGRDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJSZW1vdmVDaHJvbWVJbnB1dEZpZWxkIikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnJlbW92ZUNocm9tZUlucHV0RmllbGQoKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbFJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxs
YmFjayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCAwKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsUmVtb3ZlQ2hyb21lSW5w
dXRGaWVsZENhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJGb2N1c1dlYlZpZXci
KSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+
bWFrZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiQ2FsbEZvY3VzV2ViVmlld0NhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEJh
Y2tpbmdTY2FsZUZhY3RvciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIGRvdWJsZSBiYWNraW5nU2Nh
bGVGYWN0b3IgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNz
YWdlQm9keSkpOwotICAgICAgICBXS1BhZ2VTZXRDdXN0b21CYWNraW5nU2NhbGVGYWN0b3IoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgYmFja2luZ1Nj
YWxlRmFjdG9yKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsU2V0QmFja2lu
Z1NjYWxlRmFjdG9yQ2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIFdLUGFnZVNldEN1c3RvbUJhY2tp
bmdTY2FsZUZhY3RvcihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+
cGFnZSgpLCBkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAgICBwb3N0UGFnZU1lc3Nh
Z2UoIkNhbGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAg
dWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihtZXNzYWdlQm9keSkpOworICAgICAgICB1aW50NjRfdCBub3RpZmljYXRpb25J
RCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uSUQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRBZGRzVmlzaXRlZExpbmtzIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRMaW5rcyhUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBXS0Jvb2xlYW5HZXRW
YWx1ZShlbmFibGVkV0spKTsKKyAgICAgICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRMaW5rcyhUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBib29sZWFuVmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0R2VvbG9jYXRpb25QZXJt
aXNzaW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihXS0Jvb2xlYW5HZXRW
YWx1ZShlbmFibGVkV0spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBsYXRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygibGF0aXR1ZGUiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGxhdGl0dWRl
V0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGxhdGl0dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91
YmxlIGxhdGl0dWRlID0gV0tEb3VibGVHZXRWYWx1ZShsYXRpdHVkZVdLKTsKLQotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbG9uZ2l0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsb25naXR1ZGUiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVm
IGxvbmdpdHVkZVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBsb25naXR1ZGVLZXlXSy5nZXQoKSkpOwot
ICAgICAgICBkb3VibGUgbG9uZ2l0dWRlID0gV0tEb3VibGVHZXRWYWx1ZShsb25naXR1ZGVXSyk7
Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFjY3VyYWN5S2V5V0sgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2N1cmFjeSIpKTsKLSAgICAgICAg
V0tEb3VibGVSZWYgYWNjdXJhY3lXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYWNjdXJhY3lLZXlXSy5n
ZXQoKSkpOwotICAgICAgICBkb3VibGUgYWNjdXJhY3kgPSBXS0RvdWJsZUdldFZhbHVlKGFjY3Vy
YWN5V0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0
dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRl
c0FsdGl0dWRlIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNBbHRpdHVkZVdLID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNBbHRpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAgICAg
IGJvb2wgcHJvdmlkZXNBbHRpdHVkZSA9IFdLQm9vbGVhbkdldFZhbHVlKHByb3ZpZGVzQWx0aXR1
ZGVXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRlS2V5V0sg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVkZSIpKTsKLSAg
ICAgICAgV0tEb3VibGVSZWYgYWx0aXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYWx0aXR1ZGVL
ZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgYWx0aXR1ZGUgPSBXS0RvdWJsZUdldFZhbHVl
KGFsdGl0dWRlV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRl
c0FsdGl0dWRlQWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoInByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVm
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92aWRlc0FsdGl0
dWRlQWNjdXJhY3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lX
Syk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRlQWNjdXJhY3lL
ZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFsdGl0dWRlQWNj
dXJhY3kiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGFsdGl0dWRlQWNjdXJhY3lXSyA9IHN0YXRp
Y19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgYWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJs
ZSBhbHRpdHVkZUFjY3VyYWN5ID0gV0tEb3VibGVHZXRWYWx1ZShhbHRpdHVkZUFjY3VyYWN5V0sp
OwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0hlYWRpbmdLZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzSGVhZGlu
ZyIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzSGVhZGluZ1dLID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgcHJvdmlkZXNIZWFkaW5nS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92
aWRlc0hlYWRpbmcgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc0hlYWRpbmdXSyk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlYWRpbmdLZXlXSyA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlYWRpbmciKSk7Ci0gICAgICAgIFdLRG91Ymxl
UmVmIGhlYWRpbmdXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGVhZGluZ0tleVdLLmdldCgpKSk7Ci0g
ICAgICAgIGRvdWJsZSBoZWFkaW5nID0gV0tEb3VibGVHZXRWYWx1ZShoZWFkaW5nV0spOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc1NwZWVkS2V5V0sgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc1NwZWVkIikpOwotICAg
ICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNTcGVlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJv
dmlkZXNTcGVlZEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNTcGVlZCA9IFdL
Qm9vbGVhbkdldFZhbHVlKHByb3ZpZGVzU3BlZWRXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHNwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJzcGVlZCIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc3BlZWRXSyA9IHN0YXRpY19j
YXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgc3BlZWRLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgc3BlZWQgPSBXS0Rv
dWJsZUdldFZhbHVlKHNwZWVkV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBwcm92aWRlc0Zsb29yTGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoInByb3ZpZGVzRmxvb3JMZXZlbCIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBy
b3ZpZGVzRmxvb3JMZXZlbFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNGbG9vckxldmVs
S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwgPSBXS0Jvb2xl
YW5HZXRWYWx1ZShwcm92aWRlc0Zsb29yTGV2ZWxXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGZsb29yTGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImZsb29yTGV2ZWwiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGZsb29yTGV2
ZWxXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZmxvb3JMZXZlbEtleVdLLmdldCgpKSk7Ci0gICAgICAg
IGRvdWJsZSBmbG9vckxldmVsID0gV0tEb3VibGVHZXRWYWx1ZShmbG9vckxldmVsV0spOwotCi0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0
aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlk
ZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJvdmlkZXNGbG9vckxl
dmVsLCBmbG9vckxldmVsKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGxhdGl0dWRlID0gZG91
YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAibGF0aXR1ZGUiKTsKKyAgICAgICAgYXV0
byBsb25naXR1ZGUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJsb25naXR1
ZGUiKTsKKyAgICAgICAgYXV0byBhY2N1cmFjeSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgImFjY3VyYWN5Iik7CisgICAgICAgIGF1dG8gYWx0aXR1ZGUgPSBvcHRpb25hbERv
dWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImFsdGl0dWRlIik7CisgICAgICAgIGF1
dG8gYWx0aXR1ZGVBY2N1cmFjeSA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiYWx0aXR1ZGVBY2N1cmFjeSIpOworICAgICAgICBhdXRvIGhlYWRpbmcgPSBvcHRp
b25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImhlYWRpbmciKTsKKyAgICAg
ICAgYXV0byBzcGVlZCA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAic3BlZWQiKTsKKyAgICAgICAgYXV0byBmbG9vckxldmVsID0gb3B0aW9uYWxEb3VibGVWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJmbG9vckxldmVsIik7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVkZSwg
bG9uZ2l0dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGUsIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcs
IHNwZWVkLCBmbG9vckxldmVsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgZXJyb3JNZXNzYWdlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKGVycm9yTWVzc2FnZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFVzZXJNZWRpYVBlcm1pc3Npb24iKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tCb29sZWFuUmVmIGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlh
UGVybWlzc2lvbihXS0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVkV0spKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVzZXJNZWRpYVBlcm1pc3Npb24oYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUxNSwxMTcgKzQx
Miw2NiBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlck1lZGlhUGVyc2lzdGVu
dFBlcm1pc3Npb25Gb3JPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJt
aXNzaW9uS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwZXJt
aXNzaW9uIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcGVybWlzc2lvbldLID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgcGVybWlzc2lvbktleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcGVybWlzc2lv
biA9IFdLQm9vbGVhbkdldFZhbHVlKHBlcm1pc3Npb25XSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luV0sgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIG9yaWdpbktleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBhcmVudE9y
aWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwYXJlbnRPcmlnaW5LZXkuZ2V0KCkpKTsKLQorICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gcGVybWlzc2lvbiA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJwZXJtaXNzaW9uIik7CisgICAgICAgIGF1dG8gb3JpZ2luV0sgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJvcmlnaW4iKTsKKyAgICAgICAgYXV0byBw
YXJlbnRPcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgInBhcmVu
dE9yaWdpbiIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlck1l
ZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4ocGVybWlzc2lvbiwgb3JpZ2luV0ssIHBh
cmVudE9yaWdpbldLKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzZXRVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
b3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2lu
IikpOwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgb3Jp
Z2luS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVu
dE9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVu
dE9yaWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luV0sgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHBhcmVudE9yaWdpbktleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0
byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOwor
ICAgICAgICBhdXRvIG9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAib3JpZ2luIik7CisgICAgICAgIGF1dG8gcGFyZW50T3JpZ2luV0sgPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJwYXJlbnRPcmlnaW4iKTsKICAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZv
ck9yaWdpbihvcmlnaW5XSywgcGFyZW50T3JpZ2luV0spOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rp
b25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5
UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVu
YWJsZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImVuYWJs
ZWQiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBlbmFibGVkS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBlbmFibGVkID0gV0tCb29sZWFu
R2V0VmFsdWUoZW5hYmxlZFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
cGVybWlzc2l2ZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
cGVybWlzc2l2ZSIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBlcm1pc3NpdmVXSyA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHBlcm1pc3NpdmVLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHBlcm1p
c3NpdmUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwZXJtaXNzaXZlV0spOwotCisgICAgICAgIGF1dG8g
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byBlbmFibGVkID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
ImVuYWJsZWQiKTsKKyAgICAgICAgYXV0byBwZXJtaXNzaXZlID0gYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgInBlcm1pc3NpdmUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGVuYWJsZWQsIHBlcm1pc3NpdmUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRIaWRkZW4iKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdL
RGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBpc0luaXRpYWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImhpZGRlbiIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGhpZGRlbldLID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgaXNJbml0aWFsS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBoaWRkZW4g
PSBXS0Jvb2xlYW5HZXRWYWx1ZShoaWRkZW5XSyk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldEhpZGRlbihoaWRkZW4pOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRIaWRkZW4oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgImhpZGRlbiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUHJvY2Vzc1dvcmtR
dWV1ZSIpKSB7Ci0gICAgICAgIGlmIChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1
ZXVlTWFuYWdlcigpLnByb2Nlc3NXb3JrUXVldWUoKSkgewotICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiV29ya1F1ZXVlUHJvY2Vzc2VkQ2FsbGJhY2siKSk7Ci0gICAgICAgICAgICBX
S1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwotICAgICAg
ICB9CisgICAgICAgIGlmIChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFu
YWdlcigpLnByb2Nlc3NXb3JrUXVldWUoKSkKKyAgICAgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgi
V29ya1F1ZXVlUHJvY2Vzc2VkQ2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVC
YWNrTmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIHVpbnQ2NF90IHN0ZXBDb3VudCA9
IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCku
cXVldWVCYWNrTmF2aWdhdGlvbihzdGVwQ291bnQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlQmFja05hdmlnYXRpb24odWludDY0
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVGb3J3YXJkTmF2
aWdhdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIHVpbnQ2NF90IHN0ZXBDb3VudCA9IFdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVG
b3J3YXJkTmF2aWdhdGlvbihzdGVwQ291bnQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24odWludDY0
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVMb2FkIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBsb2FkRGF0YURpY3Rpb25hcnkg
PSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygidXJsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiB1cmxXSyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGlj
dGlvbmFyeSwgdXJsS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHRhcmdldEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRh
cmdldCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdGFyZ2V0V0sgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIHRh
cmdldEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzaG91
bGRPcGVuRXh0ZXJuYWxVUkxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygic2hvdWxkT3BlbkV4dGVybmFsVVJMcyIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNWYWx1ZVdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgc2hvdWxkT3BlbkV4
dGVybmFsVVJMc0tleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkKHRvV1RGU3RyaW5nKHVybFdLKSwgdG9X
VEZTdHJpbmcodGFyZ2V0V0spLCBXS0Jvb2xlYW5HZXRWYWx1ZShzaG91bGRPcGVuRXh0ZXJuYWxV
UkxzVmFsdWVXSykpOworICAgICAgICBhdXRvIGxvYWREYXRhRGljdGlvbmFyeSA9IGRpY3Rpb25h
cnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gdXJsID0gdG9XVEZTdHJpbmcoc3Ry
aW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAidXJsIikpOworICAgICAgICBhdXRvIHRhcmdl
dCA9IHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgInRhcmdldCIp
KTsKKyAgICAgICAgYXV0byBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzID0gYm9vbGVhblZhbHVlKGxv
YWREYXRhRGljdGlvbmFyeSwgInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWQodXJs
LCB0YXJnZXQsIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJR
dWV1ZUxvYWRIVE1MU3RyaW5nIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFy
eVJlZiBsb2FkRGF0YURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1l
c3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY29udGVudEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbnRlbnQiKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIGNvbnRlbnRXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgY29udGVudEtleS5n
ZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBiYXNlVVJMS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYmFzZVVSTCIpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgYmFzZVVSTFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCBiYXNlVVJMS2V5LmdldCgp
KSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidW5yZWFjaGFibGVVUkwi
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMV0sgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnks
IHVucmVhY2hhYmxlVVJMS2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBsb2FkRGF0YURpY3Rp
b25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGNvbnRl
bnRXSyA9IHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgImNvbnRlbnQiKTsKKyAgICAg
ICAgYXV0byBiYXNlVVJMV0sgPSBzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJiYXNl
VVJMIik7CisgICAgICAgIGF1dG8gdW5yZWFjaGFibGVVUkxXSyA9IHN0cmluZ1ZhbHVlKGxvYWRE
YXRhRGljdGlvbmFyeSwgInVucmVhY2hhYmxlVVJMIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkSFRNTFN0cmluZyh0b1dU
RlN0cmluZyhjb250ZW50V0spLCBiYXNlVVJMV0sgPyB0b1dURlN0cmluZyhiYXNlVVJMV0spIDog
U3RyaW5nKCksIHVucmVhY2hhYmxlVVJMV0sgPyB0b1dURlN0cmluZyh1bnJlYWNoYWJsZVVSTFdL
KSA6IFN0cmluZygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYzNiwxNTQgKzQ4Miwx
MTcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9hZGluZ1NjcmlwdCIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWRpbmdTY3JpcHQodG9XVEZTdHJpbmcoc2NyaXB0
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtR
dWV1ZU1hbmFnZXIoKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQodG9XVEZTdHJpbmcoc2NyaXB0KSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51
ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFJlamVjdHNQcm90ZWN0aW9u
U3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhXS0Jvb2xlYW5HZXRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0UmVq
ZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2Vz
KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRIYW5k
bGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGFuZGxlc0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhi
b29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxk
TG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3Vs
ZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoV0tCb29sZWFuR2V0VmFs
dWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3Vs
ZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZExvZ0Rvd25sb2FkQ2Fs
bGJhY2tzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MoV0tCb29sZWFuR2V0
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNo
b3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgdXNlcm5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
bWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiB1c2VybmFtZSA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEF1
dGhlbnRpY2F0aW9uVXNlcm5hbWUodG9XVEZTdHJpbmcodXNlcm5hbWUpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0QXV0aGVudGljYXRpb25QYXNzd29yZCIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIHBhc3N3b3JkID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgcGFzc3dvcmQgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBdXRoZW50aWNh
dGlvblBhc3N3b3JkKHRvV1RGU3RyaW5nKHBhc3N3b3JkKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldEJsb2NrQWxsUGx1Z2lucyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYg
c2hvdWxkQmxvY2sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJsb2NrQWxsUGx1Z2lucyhXS0Jv
b2xlYW5HZXRWYWx1ZShzaG91bGRCbG9jaykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0QmxvY2tBbGxQbHVnaW5zKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgbW9kZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIG1vZGUgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRQbHVnaW5TdXBw
b3J0ZWRNb2RlKHRvV1RGU3RyaW5nKG1vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hv
dWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREZWNp
ZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGVjaWRlTmF2aWdh
dGlvblBvbGljeUFmdGVyRGVsYXkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheShXS0Jvb2xlYW5HZXRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hv
dWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1
ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TmF2aWdhdGlvbkdl
c3R1cmVzRW5hYmxlZChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SWdub3Jl
c1ZpZXdwb3J0U2NhbGVMaW1pdHMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRz
KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91
bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREb3dubG9h
ZFVuZGlzcGxheWFibGVNSU1FVHlwZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5
YWJsZU1JTUVUeXBlcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoV0tCb29s
ZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTaG91
bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyhXS0Jvb2xlYW5H
ZXRWYWx1ZSh2YWx1ZSksIHRydWUpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5KSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NT
aG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZEJs
b2NrVGhpcmRQYXJ0eUNvb2tpZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpLCBmYWxzZSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxv
Y2tUaGlyZFBhcnR5Q29va2llcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpLCBmYWxzZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlJ1blVJUHJvY2Vzc1NjcmlwdCIpKSB7Ci0gICAgICAgIFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNj
cmlwdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNjcmlwdCIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwotCi0gICAg
ICAgIFVJU2NyaXB0SW52b2NhdGlvbkRhdGEqIGludm9jYXRpb25EYXRhID0gbmV3IFVJU2NyaXB0
SW52b2NhdGlvbkRhdGEoKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGludm9jYXRpb25EYXRh
ID0gbmV3IFVJU2NyaXB0SW52b2NhdGlvbkRhdGE7CiAgICAgICAgIGludm9jYXRpb25EYXRhLT50
ZXN0SW52b2NhdGlvbiA9IHRoaXM7Ci0gICAgICAgIGludm9jYXRpb25EYXRhLT5jYWxsYmFja0lE
ID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBjYWxsYmFja0lE
S2V5LmdldCgpKSkpOwotICAgICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0U3RyaW5nID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBzY3JpcHRLZXkuZ2V0KCkpKTsKKyAgICAgICAgaW52b2NhdGlvbkRhdGEt
PmNhbGxiYWNrSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJDYWxsYmFj
a0lEIik7CisgICAgICAgIGludm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTY3JpcHQiKTsKICAgICAgICAgbV9wZW5kaW5nVUlT
Y3JpcHRJbnZvY2F0aW9uRGF0YSA9IGludm9jYXRpb25EYXRhOwogICAgICAgICBXS1BhZ2VDYWxs
QWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIGludm9jYXRpb25EYXRhLCBydW5VSVNpZGVTY3JpcHRBZnRl
clVwZGF0ZUNhbGxiYWNrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUnVuVUlQcm9jZXNzU2NyaXB0
SW1tZWRpYXRlbHkiKSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLQotICAgICAgICBVSVNjcmlwdEludm9jYXRpb25EYXRh
KiBpbnZvY2F0aW9uRGF0YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRhKCk7CisgICAgICAg
IGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgYXV0byBpbnZvY2F0aW9uRGF0YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25E
YXRhOwogICAgICAgICBpbnZvY2F0aW9uRGF0YS0+dGVzdEludm9jYXRpb24gPSB0aGlzOwotICAg
ICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJhY2tJRCA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZh
bHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgY2FsbGJhY2tJREtleS5nZXQoKSkpKTsKLSAgICAgICAgaW52
b2NhdGlvbkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc2NyaXB0S2V5Lmdl
dCgpKSk7CisgICAgICAgIGludm9jYXRpb25EYXRhLT5jYWxsYmFja0lEID0gdWludDY0VmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQ2FsbGJhY2tJRCIpOworICAgICAgICBpbnZvY2F0aW9u
RGF0YS0+c2NyaXB0U3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
U2NyaXB0Iik7CiAgICAgICAgIG1fcGVuZGluZ1VJU2NyaXB0SW52b2NhdGlvbkRhdGEgPSBpbnZv
Y2F0aW9uRGF0YTsKICAgICAgICAgcnVuVUlTaWRlU2NyaXB0SW1tZWRpYXRlbHkobnVsbHB0ciwg
aW52b2NhdGlvbkRhdGEpOwogICAgICAgICByZXR1cm47CkBAIC03OTEsMTEgKzYwMCw5IEBAIHZv
aWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdL
U3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkluc3RhbGxDdXN0b21NZW51QWN0aW9uIikpIHsKICAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJuYW1lIikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbmFtZUtl
eS5nZXQoKSkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZGlzbWlzc2VzQXV0
b21hdGljYWxseUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImRp
c21pc3Nlc0F1dG9tYXRpY2FsbHkiKSk7Ci0gICAgICAgIGF1dG8gZGlzbWlzc2VzQXV0b21hdGlj
YWxseSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlLZXkuZ2V0KCkp
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmluc3RhbGxDdXN0b21NZW51
QWN0aW9uKHRvV1RGU3RyaW5nKG5hbWUuZ2V0KCkpLCBXS0Jvb2xlYW5HZXRWYWx1ZShkaXNtaXNz
ZXNBdXRvbWF0aWNhbGx5KSk7CisgICAgICAgIGF1dG8gbmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIm5hbWUiKTsKKyAgICAgICAgYXV0byBkaXNtaXNzZXNBdXRvbWF0
aWNhbGx5ID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImRpc21pc3Nlc0F1
dG9tYXRpY2FsbHkiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmluc3Rh
bGxDdXN0b21NZW51QWN0aW9uKHRvV1RGU3RyaW5nKG5hbWUpLCBkaXNtaXNzZXNBdXRvbWF0aWNh
bGx5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODA1LDcgKzYxMiw3IEBAIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3Ry
aW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGFjdGlvbnM7CiAgICAg
ICAgIGFjdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICAgICAgZm9yIChz
aXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHNpemU7ICsraW5kZXgpCi0gICAgICAgICAgICBhY3Rp
b25zLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdl
dEl0ZW1BdEluZGV4KG1lc3NhZ2VCb2R5QXJyYXksIGluZGV4KSkpKTsKKyAgICAgICAgICAgIGFj
dGlvbnMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChtZXNzYWdlQm9keUFycmF5LCBpbmRleCkpKSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRBbGxvd2VkTWVudUFjdGlvbnMoYWN0aW9ucyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC04MjgsMTA4ICs2MzUsNjMgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlk
UmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRGVidWdNb2Rl
KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JE
ZWJ1Z01vZGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVm
IGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlKGhvc3ROYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0xhc3RTZWVu
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVm
IHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTGFzdFNlZW4oaG9zdE5hbWUs
IFdLRG91YmxlR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3RO
YW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAg
ICAgICAgYXV0byB2YWx1ZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZh
bHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
TGFzdFNlZW4oaG9zdE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlz
dGljc01lcmdlU3RhdGlzdGljIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5h
bWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lRG9tYWluMUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lRG9tYWluMSIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lRG9tYWluMktleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lRG9tYWluMiIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxhc3RTZWVuS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGFzdFNlZW4iKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoYWRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzR3JhbmRm
YXRoZXJlZEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzR3Jh
bmRmYXRoZXJlZCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzUHJldmFs
ZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNQcmV2YWxl
bnQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc1ZlcnlQcmV2YWxlbnRL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ZlcnlQcmV2YWxl
bnQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkYXRhUmVjb3Jkc1JlbW92
ZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEYXRhUmVjb3Jk
c1JlbW92ZWQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lc0FjY2Vz
c2VkRmlyc3RQYXJ0eUludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVGltZXNBY2Nlc3NlZEZpcnN0UGFydHlJbnRlcmFjdGlvbiIpKTsKLQotICAg
ICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXku
Z2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVEb21haW4xID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB0b3BGcmFtZURvbWFpbjFLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
dG9wRnJhbWVEb21haW4yID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZURvbWFpbjJLZXkuZ2V0
KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgbGFzdFNlZW4gPSBzdGF0aWNfY2FzdDxXS0RvdWJs
ZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxh
c3RTZWVuS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBoYWRVc2VySW50ZXJhY3Rp
b24gPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBoYWRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tEb3VibGVSZWYgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRpY19jYXN0
PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgaXNHcmFuZGZhdGhlcmVkID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNHcmFuZGZhdGhl
cmVkS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc1ByZXZhbGVudCA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGlzUHJldmFsZW50S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiBpc1ZlcnlQcmV2YWxlbnQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1ZlcnlQcmV2YWxlbnRLZXku
Z2V0KCkpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgZGF0YVJlY29yZHNSZW1vdmVkID0gc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBkYXRhUmVjb3Jkc1JlbW92ZWRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKGhvc3RO
YW1lLCB0b3BGcmFtZURvbWFpbjEsIHRvcEZyYW1lRG9tYWluMiwgV0tEb3VibGVHZXRWYWx1ZShs
YXN0U2VlbiksIFdLQm9vbGVhbkdldFZhbHVlKGhhZFVzZXJJbnRlcmFjdGlvbiksIFdLRG91Ymxl
R2V0VmFsdWUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiksIFdLQm9vbGVhbkdldFZhbHVlKGlz
R3JhbmRmYXRoZXJlZCksIFdLQm9vbGVhbkdldFZhbHVlKGlzUHJldmFsZW50KSwgV0tCb29sZWFu
R2V0VmFsdWUoaXNWZXJ5UHJldmFsZW50KSwgV0tVSW50NjRHZXRWYWx1ZShkYXRhUmVjb3Jkc1Jl
bW92ZWQpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5
VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB0b3BGcmFt
ZURvbWFpbjEgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZURv
bWFpbjEiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZURvbWFpbjIgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZURvbWFpbjIiKTsKKyAgICAgICAgYXV0byBsYXN0
U2VlbiA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkxhc3RTZWVuIik7Cisg
ICAgICAgIGF1dG8gaGFkVXNlckludGVyYWN0aW9uID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkhhZFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIG1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb24gPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJN
b3N0UmVjZW50VXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gaXNHcmFuZGZhdGhlcmVk
ID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIklzR3JhbmRmYXRoZXJlZCIp
OworICAgICAgICBhdXRvIGlzUHJldmFsZW50ID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIklzUHJldmFsZW50Iik7CisgICAgICAgIGF1dG8gaXNWZXJ5UHJldmFsZW50ID0g
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIklzVmVyeVByZXZhbGVudCIpOwor
ICAgICAgICBhdXRvIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkRhdGFSZWNvcmRzUmVtb3ZlZCIpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKGhvc3ROYW1lLCB0b3BG
cmFtZURvbWFpbjEsIHRvcEZyYW1lRG9tYWluMiwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlv
biwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVu
dCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsK
LQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
aGFkVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIk1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTY2hl
ZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGlzUHJldmFsZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSXNQcmV2YWxlbnQiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiBoYWRVc2VySW50ZXJhY3Rpb24gPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBoYWRVc2VySW50
ZXJhY3Rpb25LZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzU2NoZWR1bGVkRm9y
QWxsQnV0Q29va2llRGF0YVJlbW92YWwgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1NjaGVkdWxlZEZv
ckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiBpc1ByZXZhbGVudCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzUHJldmFsZW50S2V5LmdldCgpKSk7
Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NFeHBp
cmVkU3RhdGlzdGljKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZShoYWRVc2VySW50ZXJhY3Rp
b24pLCBXS0Jvb2xlYW5HZXRWYWx1ZShpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNQcmV2YWxlbnQpKTsKKyAgICAgICAgYXV0byBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAg
ICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9z
dE5hbWUiKTsKKyAgICAgICAgYXV0byBoYWRVc2VySW50ZXJhY3Rpb24gPSBib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSGFkVXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1
dG8gaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCA9IGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsIik7CisgICAgICAgIGF1dG8gaXNQcmV2YWxlbnQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiSXNQcmV2YWxlbnQiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljKGhvc3ROYW1lLCBoYWRVc2Vy
SW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJl
dmFsZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Rp
Y3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZShob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
SG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdl
dFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSho
b3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5h
bWUiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC05NDQsNTEgKzcwNiwzNSBAQCB2b2lkIFRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNz
YWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2Rp
ZmllZFNpbmNlSG91cnMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBob3VycyA9
IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRT
dG9yZU1vZGlmaWVkU2luY2VIb3VycyhXS1VJbnQ2NEdldFZhbHVlKGhvdXJzKSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJy
ZXIiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoV0tCb29sZWFu
R2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlcihib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlN0YXRpc3RpY3NTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NUb1NhbWVTaXRlU3RyaWN0Q29va2llcyhob3N0TmFtZSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXMoc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1Nl
dEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0g
ICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGZpcnN0UGFydHlVUkxTdHJpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJGaXJzdFBhcnR5VVJMIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gY25hbWVVUkxTdHJpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJDTkFNRSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGZp
cnN0UGFydHlVUkxTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZpcnN0UGFydHlVUkxTdHJpbmdL
ZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGNuYW1lVVJMU3RyaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBh
dXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7
CisgICAgICAgIGF1dG8gZmlyc3RQYXJ0eVVSTFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIkZpcnN0UGFydHlVUkwiKTsKKyAgICAgICAgYXV0byBjbmFtZVVSTFN0
cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNOQU1FIik7CiAgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhv
c3RDTkFNRURvbWFpbihmaXJzdFBhcnR5VVJMU3RyaW5nLCBjbmFtZVVSTFN0cmluZyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4iKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBjbmFtZVVSTFN0cmluZyA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluKGNuYW1lVVJMU3RyaW5n
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUaGly
ZFBhcnR5Q05BTUVEb21haW4oc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMTAxMiw4ICs3NTgsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpk
aWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0
QXBwbGljYXRpb25NYW5pZmVzdCIpKSB7CiAjaWZkZWYgX19CTE9DS1NfXwogICAgICAgICBXS1Bh
Z2VHZXRBcHBsaWNhdGlvbk1hbmlmZXN0X2IoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSwgXnsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkRpZEdldEFwcGxpY2F0aW9uTWFuaWZlc3QiKSk7Ci0gICAgICAgICAgICBXS1BhZ2VQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICAgICAgcG9zdFBh
Z2VNZXNzYWdlKCJEaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0Iik7CiAgICAgICAgIH0pOwogI2Vs
c2UKICAgICAgICAgLy8gRklYTUU6IEFkZCBBUEkgZm9yIGxvYWRpbmcgdGhlIG1hbmlmZXN0IG9u
IG5vbi1fX0JMT0NLU19fIHBvcnRzLgpAQCAtMTAyMywxNiArNzY4LDEwIEBAIHZvaWQgVGVzdElu
dm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVm
IG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24o
aG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
YXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3RO
YW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUsIHZhbHVlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA0Myw4ICs3ODIsNyBAQCB2b2lkIFRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNz
YWdlTmFtZQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRBcHBCb3VuZERvbWFpbnMiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLQXJyYXlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQXJyYXlSZWYg
b3JpZ2luVVJMcyA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFwcEJvdW5kRG9tYWlucyhvcmlnaW5V
UkxzKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFwcEJvdW5kRG9t
YWlucyhzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xMDU1LDk0ICs3OTMsNzAgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3Rl
ZEIKIHsKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IkluaXRpYWxpemF0aW9uIikpIHsKICAgICAgICAgYXV0byBzZXR0aW5ncyA9IGNyZWF0ZVRlc3RT
ZXR0aW5nc0RpY3Rpb25hcnkoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJl
c3VtZVRlc3RpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJS
ZXN1bWVUZXN0aW5nIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3Vt
ZVRlc3RpbmdWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fc3RhcnRlZFRlc3Rpbmcp
KTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShzZXR0aW5ncy5nZXQoKSwgcmVzdW1lVGVz
dGluZ0tleS5nZXQoKSwgcmVzdW1lVGVzdGluZ1ZhbHVlLmdldCgpKTsKKyAgICAgICAgc2V0VmFs
dWUoc2V0dGluZ3MsICJSZXN1bWVUZXN0aW5nIiwgbV9zdGFydGVkVGVzdGluZyk7CiAgICAgICAg
IHJldHVybiBzZXR0aW5nczsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldER1bXBQaXhlbHMiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAg
ICAgbV9kdW1wUGl4ZWxzID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSkpOworICAgICAgICBtX2R1bXBQaXhlbHMgPSBib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXREdW1wUGl4ZWxzIikp
CiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBQaXhlbHMpKTsK
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
V2hhdFRvRHVtcCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1fd2hhdFRvRHVtcCA9IHN0YXRpY19j
YXN0PFdoYXRUb0R1bXA+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBtX3doYXRUb0R1bXAgPSBzdGF0aWNfY2FzdDxXaGF0
VG9EdW1wPih1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJHZXRXaGF0VG9EdW1wIikpCiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3doYXRUb0R1bXApKSk7CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFdhaXRVbnRpbERvbmUi
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICAgICAgc2V0V2FpdFVudGlsRG9uZShzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPihXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KSkpKTsKKyAgICAgICAgc2V0V2FpdFVudGlsRG9uZShib29sZWFuVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0V2FpdFVudGlsRG9uZSIp
KQogICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV93YWl0VW50aWxEb25l
KSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgbV9kdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oV0tCb29sZWFu
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAg
ICAgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKQog
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlNldENhbk9wZW5XaW5kb3dzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1fY2FuT3Bl
bldpbmRvd3MgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihXS0Jvb2xlYW5HZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBtX2Nhbk9w
ZW5XaW5kb3dzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRXaW5kb3dJc0tleSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgaXNLZXlWYWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+c2V0
V2luZG93SXNLZXkoV0tCb29sZWFuR2V0VmFsdWUoaXNLZXlWYWx1ZSkpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+c2V0V2luZG93SXNLZXkoYm9v
bGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
Vmlld1NpemUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3aWR0aEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gaGVpZ2h0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpOwotCi0gICAgICAgIFdLRG91YmxlUmVmIHdpZHRoV0sg
PSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHdpZHRoS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVm
IGhlaWdodFdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBoZWlnaHRLZXkuZ2V0KCkpKTsKLQotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cmVzaXplVG8oV0tE
b3VibGVHZXRWYWx1ZSh3aWR0aFdLKSwgV0tEb3VibGVHZXRWYWx1ZShoZWlnaHRXSykpOworICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gd2lkdGggPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJ3aWR0aCIpOworICAgICAgICBhdXRvIGhlaWdodCA9IGRvdWJsZVZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgImhlaWdodCIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkubWFpbldlYlZpZXcoKS0+cmVzaXplVG8od2lkdGgsIGhlaWdodCk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIpKSB7Ci0gICAg
ICAgIGJvb2wgaXNBY3RpdmUgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNHZW9sb2Nh
dGlvblByb3ZpZGVyQWN0aXZlKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVz
dWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNBY3RpdmUpKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJJc0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpCisgICAgICAgIHJldHVybiBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNHZW9s
b2NhdGlvblByb3ZpZGVyQWN0aXZlKCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0Q2FjaGVNb2RlbCIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIHVpbnQ2NF90IG1vZGVsID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgdWludDY0X3QgbW9kZWwgPSB1aW50NjRWYWx1
ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZVNldENhY2hlTW9kZWxT
eW5jaHJvbm91c2x5Rm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud2Vic2l0
ZURhdGFTdG9yZSgpLCBtb2RlbCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAot
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNXb3Jr
UXVldWVFbXB0eSIpKSB7Ci0gICAgICAgIGJvb2wgaXNFbXB0eSA9IFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkuaXNXb3JrUXVldWVFbXB0eSgpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGlzRW1wdHkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1dvcmtRdWV1ZUVtcHR5Iikp
CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLmlzV29ya1F1ZXVlRW1wdHkoKSkpOwogCi0g
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkgewotICAgICAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQ
cm92aXNpb25hbE5hdmlnYXRpb24oKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpKQorICAgICAgICBy
ZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpKSk7CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFy
RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpIHsKICAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFyRGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCk7CkBAIC0xMTUwLDQwICs4NjQsMzUgQEAg
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9u
b3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQiKSkg
ewotI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
SXNTZWN1cmVFdmVudElucHV0RW5hYmxlZCgpKSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoSXNTZWN1cmVFdmVudElucHV0RW5hYmxl
ZCgpKSk7CiAjZWxzZQotICAgICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3VsdCA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGZhbHNlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShmYWxzZSkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRDdXN0b21Vc2VyQWdlbnQiKSkgewotICAgICAgICBXS1N0cmluZ1JlZiB1c2VyQWdl
bnQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1Bh
Z2VTZXRDdXN0b21Vc2VyQWdlbnQoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgdXNlckFnZW50KTsKKyAgICAgICAgV0tQYWdlU2V0Q3VzdG9tVXNlckFn
ZW50KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUiKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoV0tCb29sZWFuR2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91
bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9u
T25OZXh0TmF2aWdhdGlvbihXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNo
b3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9u
TmV4dE5hdmlnYXRpb24oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbWFnZUNvdW50SW5H
ZW5lcmFsUGFzdGVib2FyZCIpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGNvdW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW1hZ2VDb3VudEluR2VuZXJh
bFBhc3RlYm9hcmQiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkp
KTsKICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMiKSkgewogICAgICAgICBXS1dlYnNpdGVEYXRh
U3RvcmVSZW1vdmVBbGxJbmRleGVkRGF0YWJhc2VzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS53ZWJzaXRlRGF0YVN0b3JlKCksIG51bGxwdHIsIHsgfSk7CkBAIC0xMTkxLDE3ICs5MDAsMTAg
QEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNo
cm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFkZE1vY2tNZWRpYURldmljZSIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0
VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBlcnNpc3RlbnRJREtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBlcnNpc3RlbnRJRCIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTGFiZWwiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0
eXBlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVHlwZSIpKTsK
LQotICAgICAgICBhdXRvIHBlcnNpc3RlbnRJRCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGVyc2lzdGVu
dElES2V5LmdldCgpKSk7Ci0gICAgICAgIGF1dG8gbGFiZWwgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxh
YmVsS2V5LmdldCgpKSk7Ci0gICAgICAgIGF1dG8gdHlwZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdHlw
ZUtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGlj
dGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBwZXJzaXN0ZW50SUQgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJQZXJzaXN0ZW50SUQiKTsKKyAgICAg
ICAgYXV0byBsYWJlbCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkxhYmVs
Iik7CisgICAgICAgIGF1dG8gdHlwZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIlR5cGUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmFkZE1vY2tN
ZWRpYURldmljZShwZXJzaXN0ZW50SUQsIGxhYmVsLCB0eXBlKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQpAQCAtMTIxMiw5ICs5MTQsNyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVk
QgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiUmVtb3ZlTW9ja01lZGlhRGV2aWNlIikpIHsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGVy
c2lzdGVudElkID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVtb3ZlTW9ja01lZGlhRGV2aWNlKHBl
cnNpc3RlbnRJZCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZW1vdmVN
b2NrTWVkaWFEZXZpY2Uoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCkBAIC0xMjI0LDE0MiArOTI0LDg3IEBAIFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9t
SW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iKSkgewotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uKFdLVUludDY0
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uKHVp
bnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNN
b2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQiKSkgewotICAgICAgICBib29sIGlz
TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkID0gVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkKCk7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc01vY2tSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyRW5hYmxlZCkpOwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFi
bGVkIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuaXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQo
KSkpOwogICAgIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiSGFzQXBwQm91bmRTZXNzaW9uIikpIHsKLSAgICAgICAgYm9vbCBoYXNBcHBCb3VuZFNl
c3Npb24gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzQXBwQm91bmRTZXNzaW9uKCk7
Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNBcHBCb3VuZFNlc3Np
b24pKTsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJIYXNBcHBCb3VuZFNlc3Npb24iKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNBcHBCb3VuZFNlc3Np
b24oKSkpOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ29ubmVjdE1vY2tHYW1lcGFkIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsK
LQotICAgICAgICB1aW50NjRfdCBpbmRleCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6
Y29ubmVjdE1vY2tHYW1lcGFkKGluZGV4KTsKLSAgICAgICAgCisgICAgICAgIFdlYkNvcmVUZXN0
U3VwcG9ydDo6Y29ubmVjdE1vY2tHYW1lcGFkKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGlzY29ubmVjdE1vY2tHYW1lcGFkIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJ
RCgpKTsKLQotICAgICAgICB1aW50NjRfdCBpbmRleCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFdlYkNvcmVUZXN0U3Vw
cG9ydDo6ZGlzY29ubmVjdE1vY2tHYW1lcGFkKGluZGV4KTsKLQorICAgICAgICBXZWJDb3JlVGVz
dFN1cHBvcnQ6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZCh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHYW1lcGFkRGV0YWlscyIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJRCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1hcHBpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJNYXBwaW5nIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXhpc0Nv
dW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXhpc0NvdW50
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uQ291bnRLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25Db3VudCIpKTsKLQot
ICAgICAgICBXS1VJbnQ2NFJlZiBnYW1lcGFkSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGdhbWVw
YWRJbmRleEtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBnYW1lcGFkSUQgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGdhbWVwYWRJREtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBt
YXBwaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtYXBwaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
VUludDY0UmVmIGF4aXNDb3VudCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYXhpc0NvdW50S2V5LmdldCgp
KSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGJ1dHRvbkNvdW50ID0gc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBi
dXR0b25Db3VudEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0
TW9ja0dhbWVwYWREZXRhaWxzKFdLVUludDY0R2V0VmFsdWUoZ2FtZXBhZEluZGV4KSwgdG9XVEZT
dHJpbmcoZ2FtZXBhZElEKSwgdG9XVEZTdHJpbmcobWFwcGluZyksIFdLVUludDY0R2V0VmFsdWUo
YXhpc0NvdW50KSwgV0tVSW50NjRHZXRWYWx1ZShidXR0b25Db3VudCkpOworICAgICAgICBhdXRv
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7Cisg
ICAgICAgIGF1dG8gZ2FtZXBhZEluZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiR2FtZXBhZEluZGV4Iik7CisgICAgICAgIGF1dG8gZ2FtZXBhZElEID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiR2FtZXBhZElEIik7CisgICAgICAgIGF1dG8gbWFw
cGluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk1hcHBpbmciKTsKKyAg
ICAgICAgYXV0byBheGlzQ291bnQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJBeGlzQ291bnQiKTsKKyAgICAgICAgYXV0byBidXR0b25Db3VudCA9IHVpbnQ2NFZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIkJ1dHRvbkNvdW50Iik7CisgICAgICAgIFdlYkNvcmVUZXN0
U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWREZXRhaWxzKGdhbWVwYWRJbmRleCwgdG9XVEZTdHJpbmco
Z2FtZXBhZElEKSwgdG9XVEZTdHJpbmcobWFwcGluZyksIGF4aXNDb3VudCwgYnV0dG9uQ291bnQp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25h
cnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZ2FtZXBhZEluZGV4S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXhpc0luZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXhpc0luZGV4IikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1VJbnQ2NFJlZiBnYW1lcGFkSW5kZXggPSBzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGdhbWVwYWRJbmRleEtleS5nZXQoKSkpOwotICAgICAgICBXS1VJbnQ2NFJl
ZiBheGlzSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGF4aXNJbmRleEtleS5nZXQoKSkpOwotICAg
ICAgICBXS0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkp
KTsKLQotICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkQXhpc1ZhbHVl
KFdLVUludDY0R2V0VmFsdWUoZ2FtZXBhZEluZGV4KSwgV0tVSW50NjRHZXRWYWx1ZShheGlzSW5k
ZXgpLCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IGdhbWVwYWRJbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVw
YWRJbmRleCIpOworICAgICAgICBhdXRvIGF4aXNJbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIkF4aXNJbmRleCIpOworICAgICAgICBhdXRvIHZhbHVlID0gZG91Ymxl
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgV2ViQ29yZVRl
c3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZShnYW1lcGFkSW5kZXgsIGF4aXNJbmRl
eCwgdmFsdWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHYW1lcGFkQnV0
dG9uVmFsdWUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSW5kZXhLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBidXR0b25JbmRleEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbkluZGV4IikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1VJbnQ2NFJlZiBnYW1l
cGFkSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGdhbWVwYWRJbmRleEtleS5nZXQoKSkpOwotICAg
ICAgICBXS1VJbnQ2NFJlZiBidXR0b25JbmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYnV0dG9uSW5k
ZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxX
S0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRN
b2NrR2FtZXBhZEJ1dHRvblZhbHVlKFdLVUludDY0R2V0VmFsdWUoZ2FtZXBhZEluZGV4KSwgV0tV
SW50NjRHZXRWYWx1ZShidXR0b25JbmRleCksIFdLRG91YmxlR2V0VmFsdWUodmFsdWUpKTsKLQor
ICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNz
YWdlQm9keSk7CisgICAgICAgIGF1dG8gZ2FtZXBhZEluZGV4ID0gdWludDY0VmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiR2FtZXBhZEluZGV4Iik7CisgICAgICAgIGF1dG8gYnV0dG9uSW5k
ZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJCdXR0b25JbmRleCIpOwor
ICAgICAgICBhdXRvIHZhbHVlID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
VmFsdWUiKTsKKyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZEJ1dHRv
blZhbHVlKGdhbWVwYWRJbmRleCwgYnV0dG9uSW5kZXgsIHZhbHVlKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RDb3VudEZvck9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rp
b25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5
UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9y
aWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG9yaWdp
bktleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRP
cmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRP
cmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbldLID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBwYXJlbnRPcmlnaW5LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8g
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byBvcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
Im9yaWdpbiIpOworICAgICAgICBhdXRvIHBhcmVudE9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAicGFyZW50T3JpZ2luIik7CiAgICAgICAgIHVuc2lnbmVkIGNv
dW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0Q291bnRGb3JPcmlnaW4ob3JpZ2luV0ssIHBhcmVudE9yaWdpbldLKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY291
bnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc0RvaW5nTWVkaWFDYXB0dXJlIikpIHsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNEb2luZ01lZGlhQ2FwdHVyZSgp
KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGNvdW50KSk7CiAgICAgfQorCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJJc0RvaW5nTWVkaWFDYXB0dXJlIikpCisgICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
aXNEb2luZ01lZGlhQ2FwdHVyZSgpKSk7CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgZG9tYWluID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuY2xlYXJTdGF0aXN0aWNzRGF0YUZvckRvbWFpbihkb21haW4pOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYXJTdGF0aXN0aWNzRGF0YUZvckRvbWFpbihzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRvZXNT
dGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdL
RGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gZG9tYWluSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJEb21haW5JRCIpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgZG9tYWluSUQgPSBzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGRvbWFpbklES2V5LmdldCgpKSk7Ci0gICAgICAgIGJvb2wgZG9tYWluSURFeGlzdHMg
PSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0
SW5EYXRhYmFzZShXS1VJbnQ2NEdldFZhbHVlKGRvbWFpbklEKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZG9tYWluSURF
eGlzdHMpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IGRvbWFpbklEID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRG9tYWluSUQi
KTsKKyAgICAgICAgYm9vbCBkb21haW5JREV4aXN0cyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5kb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlKGRvbWFpbklEKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRvbWFpbklERXhpc3RzKSk7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTdGF0aXN0aWNzRW5hYmxlZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5S
ZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NFbmFibGVkKFdLQm9v
bGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzRW5hYmxlZChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKSkgewotICAgICAg
ICBib29sIGlzRXBoZW1lcmFsID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlz
dGljc0VwaGVtZXJhbCgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzRXBoZW1lcmFsKSk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzRXBoZW1lcmFsKCkpKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyIpKSB7CkBAIC0xMzY4LDIyNCArMTAxMywxMjggQEAgV0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3Vz
TWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uo
aG9zdE5hbWUpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
aXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJJc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAg
ICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBib29sIGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFt
ZSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgYm9vbCBpc1ByZXZhbGVudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRp
c3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2Uoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7CiAgICAg
fQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VicmVzb3VyY2VIb3N0S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3VicmVzb3VyY2VIb3N0IikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpOwotICAgICAgICAKLSAg
ICAgICAgV0tTdHJpbmdSZWYgc3VicmVzb3VyY2VIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJy
ZXNvdXJjZUhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVIb3N0
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBzdWJyZXNvdXJjZUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJTdWJyZXNvdXJjZUhvc3QiKTsKKyAgICAgICAgYXV0byB0b3BG
cmFtZUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZUhv
c3QiKTsKICAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgPSBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3Vy
Y2VVbmRlcihzdWJyZXNvdXJjZUhvc3QsIHRvcEZyYW1lSG9zdCk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25h
cnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJGcmFtZUhvc3RLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJGcmFtZUhvc3QiKSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3RLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3QiKSk7Ci0gICAgICAg
IAotICAgICAgICBXS1N0cmluZ1JlZiBzdWJGcmFtZUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1
YkZyYW1lSG9zdEtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZUhvc3Qg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lSG9zdEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBzdWJGcmFtZUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJTdWJGcmFtZUhvc3QiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZUhvc3QgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZUhvc3QiKTsKICAgICAgICAg
Ym9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuaXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihzdWJGcmFtZUhvc3Qs
IHRvcEZyYW1lSG9zdCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NS
ZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAg
ICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBob3N0UmVkaXJlY3RlZEZyb21LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0UmVkaXJlY3RlZEZyb20iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBob3N0UmVkaXJlY3RlZFRvS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSG9zdFJlZGlyZWN0ZWRUbyIpKTsKLSAgICAgICAgCi0gICAgICAg
IFdLU3RyaW5nUmVmIGhvc3RSZWRpcmVjdGVkRnJvbSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdFJl
ZGlyZWN0ZWRGcm9tS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3RSZWRpcmVj
dGVkVG8gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3RSZWRpcmVjdGVkVG9LZXkuZ2V0KCkpKTsKLSAg
ICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZh
bHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0UmVkaXJlY3RlZEZyb20gPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0UmVkaXJlY3RlZEZyb20iKTsKKyAg
ICAgICAgYXV0byBob3N0UmVkaXJlY3RlZFRvID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiSG9zdFJlZGlyZWN0ZWRUbyIpOwogICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFz
UmVkaXJlY3RpbmdUbyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NS
ZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGhvc3RSZWRpcmVjdGVkRnJvbSwgaG9zdFJlZGlyZWN0
ZWRUbyk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKSk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8pKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0
TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGJv
b2wgaGFzSGFkVXNlckludGVyYWN0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlz
U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihob3N0TmFtZSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzSGFk
VXNlckludGVyYWN0aW9uKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGJvb2wg
aGFzSGFkVXNlckludGVyYWN0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3Rh
dGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzSGFkVXNlckludGVyYWN0
aW9uKSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIGF1dG8gc3ViSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN1Ykhvc3QiKSk7Ci0gICAgICAgIGF1dG8gdG9wSG9zdEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEhvc3QiKSk7Ci0gICAgICAgIAotICAgICAgICBX
S1N0cmluZ1JlZiBzdWJIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJIb3N0S2V5LmdldCgpKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEhvc3RL
ZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rp
b25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc3ViSG9zdCA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlN1Ykhvc3QiKTsKKyAgICAgICAgYXV0byB0b3BI
b3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wSG9zdCIpOwogICAg
ICAgICBib29sIHN0YXRpc3RpY0luRGF0YWJhc2VPbmNlID0gVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmlzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZShzdWJIb3N0LCB0b3BIb3N0KTsK
ICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHN0YXRpc3RpY0luRGF0YWJh
c2VPbmNlKSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJ
RCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlZhbHVlIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0gICAgICAg
IAotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0dyYW5k
ZmF0aGVyZWQoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0
VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBib29sIGlzR3JhbmRm
YXRoZXJlZCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NHcmFuZGZh
dGhlcmVkKGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVyZWQpKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQgPSBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keSkpOworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFu
ZGZhdGhlcmVkKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRVc2VJVFBEYXRhYmFzZSIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotCi0gICAg
ICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlSVRQRGF0
YWJhc2UoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFVzZUlUUERhdGFiYXNlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBX
S0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0
aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhv
c3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0
TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1l
SG9zdE5hbWUiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
dG9wRnJhbWVIb3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0TmFtZUtleS5n
ZXQoKSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFy
eVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdG9wRnJh
bWVIb3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1l
SG9zdE5hbWUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oaG9zdE5hbWUsIHRvcEZyYW1lSG9zdE5h
bWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAg
ICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJh
bWVIb3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRv
cEZyYW1lSG9zdE5hbWUiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFt
ZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgdG9wRnJhbWVIb3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0TmFt
ZUtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1l
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAg
ICAgYXV0byB0b3BGcmFtZUhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiVG9wRnJhbWVIb3N0TmFtZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihob3N0TmFt
ZSwgdG9wRnJhbWVIb3N0TmFtZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAg
ICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8iKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsK
LSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBob3N0TmFtZVJlZGlyZWN0ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZFRvIikpOwotICAgICAgICAKLSAgICAg
ICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5Lmdl
dCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBob3N0TmFtZVJlZGlyZWN0ZWRUb0tleS5nZXQoKSkpOwotICAgICAgICAKKyAg
ICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2Fn
ZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRU
byA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3Rl
ZFRvIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRU
byk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RGcm9tIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBX
S0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0
aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhv
c3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRp
cmVjdGVkRnJvbUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhv
c3ROYW1lUmVkaXJlY3RlZEZyb20iKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBo
b3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAg
V0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9z
dE5hbWVSZWRpcmVjdGVkRnJvbUtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
SG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpOwog
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1N1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RUbyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9z
dE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFt
ZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lUmVkaXJlY3Rl
ZFRvS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVS
ZWRpcmVjdGVkVG8iKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lUmVkaXJl
Y3RlZFRvS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9z
dE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOwor
ICAgICAgICBhdXRvIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKTsKICAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8o
aG9zdE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZFRvKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKSk7Ci0g
ICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
aG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVj
dGVkRnJvbSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbUtleS5nZXQo
KSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBo
b3N0TmFtZVJlZGlyZWN0ZWRGcm9tID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGhvc3ROYW1l
LCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24iKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgYXV0byBmcm9tSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkZyb21Ib3N0IikpOwotICAgICAgICBhdXRvIHRvSG9zdEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvSG9zdCIpKTsKLQotICAgICAgICBXS1N0cmlu
Z1JlZiBmcm9tSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZnJvbUhvc3RLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tTdHJpbmdSZWYgdG9Ib3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b0hvc3RLZXkuZ2V0
KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGlj
dGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBmcm9tSG9zdCA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkZyb21Ib3N0Iik7CisgICAgICAgIGF1dG8g
dG9Ib3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9Ib3N0Iik7CiAg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzQ3Jvc3NTaXRl
TG9hZFdpdGhMaW5rRGVjb3JhdGlvbihmcm9tSG9zdCwgdG9Ib3N0KTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxXS0Rv
dWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oV0tEb3VibGVHZXRWYWx1
ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCkBAIC0xNjAwLDk3ICsxMTQ5
LDY5IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVT
eW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0SXNSdW5uaW5nVGVzdCIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVl
KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSXNS
dW5uaW5nVGVzdChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc01pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
RG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0dyYW5kZmF0
aGVyaW5nVGltZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBz
dGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShXS0RvdWJs
ZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TWF4U3RhdGlzdGljc0VudHJp
ZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUlu
dDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0gc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyhXS1VJbnQ2NEdldFZh
bHVlKGVudHJpZXMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0
YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRQcnVuZUVudHJpZXNEb3duVG8iKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0
VHlwZUlEKCkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0gc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8oV0tVSW50NjRHZXRWYWx1ZShlbnRy
aWVzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
UHJ1bmVFbnRyaWVzRG93blRvKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0IikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJbmNsdWRlSHR0cE9ubHlDb29raWVzIikpOwotICAgICAgICAKLSAgICAgICAg
V0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgp
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpbmNsdWRlSHR0cE9ubHlDb29raWVzID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgCi0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QoaG9zdE5h
bWUsIFdLQm9vbGVhbkdldFZhbHVlKGluY2x1ZGVIdHRwT25seUNvb2tpZXMpKTsKKyAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBpbmNsdWRlSHR0cE9ubHlDb29raWVzID0g
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkluY2x1ZGVIdHRwT25seUNvb2tp
ZXMiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NEZWxl
dGVDb29raWVzRm9ySG9zdChob3N0TmFtZSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcyk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5
cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9
IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYm9vbCBoYXNMb2NhbFN0b3JhZ2Ug
PSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdl
KGhvc3ROYW1lKTsKICAgICAgICAgYXV0byByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShoYXNMb2NhbFN0b3JhZ2UpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRp
c3RpY3NDYWNoZU1heEFnZUNhcCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNl
Y29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwKFdL
RG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vz
c2lvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tT
dHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFt
ZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8g
aG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGJvb2wgaGFzSXNv
bGF0ZWRTZXNzaW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc1N0YXRpc3RpY3NJ
c29sYXRlZFNlc3Npb24oaG9zdE5hbWUpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGhhc0lzb2xhdGVkU2Vzc2lvbikpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiQ2xlYXJET01DYWNoZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IG9yaWdpbiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KKyAgICAg
ICAgYXV0byBvcmlnaW4gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhckRPTUNhY2hlKG9yaWdpbik7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KQEAgLTE3MDEsMzUgKzEyMjIsMjQgQEAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZy
b21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIkhhc0RPTUNhY2hlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgb3JpZ2luID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQor
ICAgICAgICBhdXRvIG9yaWdpbiA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAg
Ym9vbCBoYXNET01DYWNoZSA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNET01DYWNo
ZShvcmlnaW4pOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGhhc0RPTUNhY2hlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNET01DYWNoZSkpOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiRE9NQ2FjaGVTaXplIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2lu
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQorICAgICAgICBhdXRv
IG9yaWdpbiA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYXV0byBkb21DYWNo
ZVNpemUgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZG9tQ2FjaGVTaXplKG9yaWdpbik7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShkb21DYWNoZVNpemUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZG9tQ2FjaGVTaXplKSk7CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBbGxv
d1N0b3JhZ2VRdW90YUluY3JlYXNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIGF1dG8gY2FuSW5j
cmVhc2UgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd1N0
b3JhZ2VRdW90YUluY3JlYXNlKGNhbkluY3JlYXNlKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UoYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW5qZWN0VXNlclNjcmlw
dCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJp
bmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmluamVjdFVzZXJTY3JpcHQoc2NyaXB0KTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmluamVjdFVzZXJTY3JpcHQoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0xNzM5LDE1ICsxMjQ5LDEy
IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5j
aHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Rv
dWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19j
YXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhXS0RvdWJs
ZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKGRvdWJsZVZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBhdXRvIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIGF1dG8gdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFdLQ29u
dGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmNvbnRleHQoKSwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTE3NjUsNjAgKzEyNzIsMzUgQEAgV0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3Vz
TWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFkZFRlc3RLZXlUb0tleWNoYWluIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiB0ZXN0S2V5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBwcml2YXRlS2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUHJpdmF0ZUtleSIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcHJpdmF0
ZUtleVdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkodGVzdEtleURpY3Rpb25hcnksIHByaXZhdGVLZXlLZXkuZ2V0KCkpKTsKLQotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBh
dHRyTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KHRlc3RLZXlEaWN0aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkpKTsKLQotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXBwbGljYXRpb25UYWdLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvblRhZyIpKTsKLSAgICAgICAg
V0tTdHJpbmdSZWYgYXBwbGljYXRpb25UYWdXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3RLZXlEaWN0aW9uYXJ5LCBhcHBsaWNhdGlvblRh
Z0tleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gdGVzdEtleURpY3Rpb25hcnkgPSBkaWN0aW9u
YXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHByaXZhdGVLZXlXSyA9IHN0cmlu
Z1ZhbHVlKHRlc3RLZXlEaWN0aW9uYXJ5LCAiUHJpdmF0ZUtleSIpOworICAgICAgICBhdXRvIGF0
dHJMYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdEtleURpY3Rpb25hcnksICJBdHRyTGFiZWwiKTsK
KyAgICAgICAgYXV0byBhcHBsaWNhdGlvblRhZ1dLID0gc3RyaW5nVmFsdWUodGVzdEtleURpY3Rp
b25hcnksICJBcHBsaWNhdGlvblRhZyIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuYWRkVGVzdEtleVRvS2V5Y2hhaW4odG9XVEZTdHJpbmcocHJpdmF0ZUtleVdLKSwgdG9X
VEZTdHJpbmcoYXR0ckxhYmVsV0spLCB0b1dURlN0cmluZyhhcHBsaWNhdGlvblRhZ1dLKSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYW5VcEtleWNoYWluIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiB0ZXN0RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0
PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBhdHRyTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJBdHRyTGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGF0dHJMYWJlbFdLID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERp
Y3Rpb25hcnksIGF0dHJMYWJlbEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBhcHBsaWNhdGlvbkxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25MYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
YXBwbGljYXRpb25MYWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkodGVzdERpY3Rpb25hcnksIGFwcGxpY2F0aW9uTGFiZWxLZXkuZ2V0KCkp
KTsKLQorICAgICAgICBhdXRvIHRlc3REaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBhdHRyTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0
aW9uYXJ5LCAiQXR0ckxhYmVsIik7CisgICAgICAgIGF1dG8gYXBwbGljYXRpb25MYWJlbFdLID0g
c3RyaW5nVmFsdWUodGVzdERpY3Rpb25hcnksICJBcHBsaWNhdGlvbkxhYmVsIik7CiAgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhblVwS2V5Y2hhaW4odG9XVEZTdHJpbmco
YXR0ckxhYmVsV0spLCBhcHBsaWNhdGlvbkxhYmVsV0sgPyB0b1dURlN0cmluZyhhcHBsaWNhdGlv
bkxhYmVsV0spIDogU3RyaW5nKCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIktleUV4
aXN0c0luS2V5Y2hhaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IHRlc3REaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJMYWJlbEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgYXR0ckxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0RGljdGlvbmFyeSwgYXR0ckxhYmVsS2V5LmdldCgp
KSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFwcGxpY2F0aW9uTGFiZWxL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvbkxh
YmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxhYmVsV0sgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0RGljdGlvbmFy
eSwgYXBwbGljYXRpb25MYWJlbEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gdGVzdERpY3Rp
b25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGF0dHJM
YWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERpY3Rpb25hcnksICJBdHRyTGFiZWwiKTsKKyAgICAg
ICAgYXV0byBhcHBsaWNhdGlvbkxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0RGljdGlvbmFyeSwg
IkFwcGxpY2F0aW9uTGFiZWwiKTsKICAgICAgICAgYm9vbCBrZXlFeGlzdHNJbktleWNoYWluID0g
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmtleUV4aXN0c0luS2V5Y2hhaW4odG9XVEZTdHJp
bmcoYXR0ckxhYmVsV0spLCB0b1dURlN0cmluZyhhcHBsaWNhdGlvbkxhYmVsV0spKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShrZXlFeGlzdHNJbktleWNoYWluKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShrZXlFeGlzdHNJbktleWNoYWluKSk7CiAg
ICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKSkgewotICAgICAgICBX
S1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2Fs
bHNDb3VudCgpKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2VydmVyVHJ1c3RFdmFsdWF0
aW9uQ2FsbGJhY2tDYWxsc0NvdW50IikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXJ2ZXJUcnVzdEV2YWx1YXRpb25D
YWxsYmFja0NhbGxzQ291bnQoKSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJv
bm91c2x5IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25v
dXNseShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNs
eShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCkBAIC0xODQ4LDE2ICsxMzMwLDEzIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVz
dEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKFdLQm9vbGVhbkdldFZh
bHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBZENs
aWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRDbGlja0F0dHJp
YnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmciKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLVVJMR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1VSTFJl
ZiB1cmwgPSBzdGF0aWNfY2FzdDxXS1VSTFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVS
TEZvclRlc3RpbmcodXJsKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKHN0YXRpY19jYXN0PFdL
VVJMUmVmPihtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
QEAgLTE5MDIsMTcgKzEzODEsMTAgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6cnVuVUlTaWRlU2Ny
aXB0KFdLU3RyaW5nUmVmIHNjcmlwdCwgdW5zaWduZWQgc2NyaXB0Q2FsbGJhY2sKIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6dWlTY3JpcHREaWRDb21wbGV0ZShjb25zdCBTdHJpbmcmIHJlc3VsdCwg
dW5zaWduZWQgc2NyaXB0Q2FsbGJhY2tJRCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
YWxsVUlTaWRlU2NyaXB0Q2FsbGJhY2siKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVzdWx0S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzdWx0IikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4gY2FsbGJhY2tJRFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzY3JpcHRDYWxsYmFj
a0lEKSk7Ci0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCByZXN1
bHRLZXkuZ2V0KCksIHRvV0socmVzdWx0KS5nZXQoKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShtZXNzYWdlQm9keS5nZXQoKSwgY2FsbGJhY2tJREtleS5nZXQoKSwgY2FsbGJhY2tJRFZhbHVl
LmdldCgpKTsKLQotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUobWVzc2FnZUJvZHks
ICJSZXN1bHQiLCByZXN1bHQpOworICAgIHNldFZhbHVlKG1lc3NhZ2VCb2R5LCAiQ2FsbGJhY2tJ
RCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzY3JpcHRDYWxsYmFja0lEKSk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJDYWxsVUlTaWRlU2NyaXB0Q2FsbGJhY2siLCBtZXNzYWdlQm9keS5nZXQoKSk7
CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246Om91dHB1dFRleHQoY29uc3QgV1RGOjpTdHJpbmcm
IHRleHQpCkBAIC0xOTIyLDE3NCArMTM5NCwxNDMgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6b3V0
cHV0VGV4dChjb25zdCBXVEY6OlN0cmluZyYgdGV4dCkKIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkQmVnaW5Td2lwZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZEJlZ2lu
U3dpcGVDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZEJlZ2luU3dpcGVD
YWxsYmFjayIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjp3aWxsRW5kU3dpcGUoKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxXaWxsRW5kU3dpcGVDYWxsYmFjayIpKTsKLSAg
ICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiQ2FsbFdpbGxFbmRTd2lwZUNhbGxiYWNrIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZEVuZFN3aXBlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDYWxsRGlkRW5kU3dpcGVDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERp
ZEVuZFN3aXBlQ2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3Zl
U3dpcGVTbmFwc2hvdCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlbW92
ZVN3aXBlU25hcHNob3RDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJl
bW92ZVN3aXBlU25hcHNob3RDYWxsYmFjayIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpu
b3RpZnlEb3dubG9hZERvbmUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk5vdGlmeURv
d25sb2FkRG9uZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiTm90aWZ5RG93bmxvYWREb25lIik7
CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc0luTWVtb3J5QW5k
UGVyc2lzdGVudFN0b3JlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkQ2xl
YXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKSk7Ci0gICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSIp
OwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vi
c2l0ZURhdGFSZW1vdmFsKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkQ2xl
YXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpKTsKLSAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiQ2FsbERpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsK
IH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRTaG91bGREb3duZ3JhZGVS
ZWZlcnJlciIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFNob3VsZERvd25ncmFk
ZVJlZmVycmVyIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFNob3VsZEJsb2Nr
VGhpcmRQYXJ0eUNvb2tpZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRT
ZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJDYWxsRGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpOwogfQogCiB2b2lk
IFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSgp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRs
ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0
Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMoKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkNhbGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIpKTsKLSAgICBXS1Bh
Z2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4o
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRGaXJzdFBhcnR5SG9zdENO
QU1FRG9tYWluIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0Rmlyc3RQ
YXJ0eUhvc3RDTkFNRURvbWFpbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRU
aGlyZFBhcnR5Q05BTUVEb21haW4oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxE
aWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IkNhbGxEaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4iKTsKIH0KIAogdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZGlkUmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUoKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNhbGxEaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0ZSIp
KTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlc2V0U3RhdGlzdGljc1RvQ29uc2lzdGVu
dFN0YXRlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEJsb2NrQ29va2llc0Zv
ckhvc3QoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRCbG9ja0Nvb2tp
ZXNGb3JIb3N0IikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0QmxvY2tDb29raWVz
Rm9ySG9zdCIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRTdGF0aXN0aWNzRGVi
dWdNb2RlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0U3RhdGlzdGlj
c0RlYnVnTW9kZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFN0YXRpc3RpY3NE
ZWJ1Z01vZGUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVz
b3VyY2VGb3JEZWJ1Z01vZGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRT
ZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
Q2FsbERpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlIik7CiB9CiAKIHZvaWQgVGVz
dEludm9jYXRpb246OmRpZFNldExhc3RTZWVuKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDYWxsRGlkU2V0TGFzdFNlZW4iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRM
YXN0U2VlbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRNZXJnZVN0YXRpc3RpYygp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZE1lcmdlU3RhdGlzdGljIikpOwot
ICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkTWVyZ2VTdGF0aXN0aWMiKTsKIH0KIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkU2V0RXhwaXJlZFN0YXRpc3RpYygpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FsbERpZFNldEV4cGlyZWRTdGF0aXN0aWMiKSk7Ci0gICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIkNhbGxEaWRTZXRFeHBpcmVkU3RhdGlzdGljIik7CiB9CiAKIHZvaWQgVGVzdEludm9j
YXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmll
dygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IkNhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9u
OjpkaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkNhbGxEaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIkNhbGxEaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UiKTsKIH0KIAogdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZGlkU2V0SGFzSGFkVXNlckludGVyYWN0aW9uKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsRGlkU2V0SGFzSGFkVXNlckludGVyYWN0aW9uIikpOwotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJDYWxsRGlkU2V0SGFzSGFkVXNlckludGVyYWN0aW9uIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhWZWN0b3I8
U3RyaW5nPiYmIGRvbWFpbnMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJl
Y2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllcyIpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVBcnJheVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3Jl
YXRlKCkpOworICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3Jl
YXRlKCkpOwogICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKLSAgICAgICAgV0tBcnJh
eUFwcGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoZG9tYWluLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0gICAgCi0gICAgV0tQ
YWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB0b1dL
KGRvbWFpbikuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlY2VpdmVBbGxT
dG9yYWdlQWNjZXNzRW50cmllcyIsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWlucyhWZWN0b3I8U3Ry
aW5nPiYmIGRvbWFpbnMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlY2Vp
dmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlQXJyYXlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0
ZSgpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0
ZSgpKTsKICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpCi0gICAgICAgIFdLQXJyYXlB
cHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKGRvbWFpbi51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCi0gICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB0b1dLKGRvbWFp
bikuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlY2VpdmVMb2FkZWRTdWJy
ZXNvdXJjZURvbWFpbnMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdEludm9j
YXRpb246OmRpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFscygpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrIikp
OwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxz
Q2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QXBwQm91bmREb21h
aW5zKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0QXBwQm91bmREb21h
aW5zIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0QXBwQm91bmREb21h
aW5zIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKCkKQEAgLTIxMDQsOCArMTU0NSw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXBBZENs
aWNrQXR0cmlidXRpb24oKQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpwZXJmb3JtQ3VzdG9tTWVu
dUFjdGlvbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGVyZm9ybUN1c3RvbU1lbnVB
Y3Rpb24iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlBlcmZvcm1DdXN0b21NZW51QWN0aW9uIik7
CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dU
aW1lcklmTmVlZGVkKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0
VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTE1
ZmMwYTBlOWFmYWUzNDFjY2NkMDYwMzgzZWQzMDFhNzI0MWI2Yi4uNjE3MThhYzY1NTg4MTc3OGU4
M2M5N2ZiZTE3ODI3OGM4NzBlNmI4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTM1NSw2ICszNTUsOCBAQAogCQk4NDFDQzAwRDE4MTE4NUJGMDA0MkU5QjYgLyogT3B0
aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQxQ0MwMEUxODExODVCRjAwNDJFOUI2
IC8qIE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUg
LyogV2ViS2l0VGVzdFJ1bm5lciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKKwkJOTMzOEQxQkEyNTBBNzlFQjAwRTgyN0Y2IC8qIEpTQmFzaWNzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEpTQmFzaWNzLmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdz
L0pTQmFzaWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMzhEMUJFMjUwQkQ5
REQwMEU4MjdGNiAvKiBEaWN0aW9uYXJ5RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3Rp
b25hcnlGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzYy
MTBENzM2MDAwQTNEQUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzc2NDE3NzIxMEQ3MzYxMDBBM0RBQUUgLyog
V2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJLaXRUZXN0UnVubmVyV2luZG93Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzQzc4ODFGMjUwQzY5RTQwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlZnRlc3RGdW5jdGlvbnMuY3BwOyBwYXRo
ID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9SZWZ0ZXN0RnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTg5Miw2ICs4OTQsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQkzNzhENDQyMjEzMzQ2RDAwMDA2QTc3N0IgLyogY29uZmlnLmgg
Ki8sCisJCQkJOTMzOEQxQkUyNTBCRDlERDAwRTgyN0Y2IC8qIERpY3Rpb25hcnlGdW5jdGlvbnMu
aCAqLywKIAkJCQlCQzk5QTQ4NDEyMDg5MDFBMDA3RTlGMDggLyogU3RyaW5nRnVuY3Rpb25zLmgg
Ki8sCiAJCQkJOUIzNkEyNzAyMDk0NTNBMDAwM0UwNjUxIC8qIFdoYXRUb0R1bXAuaCAqLywKIAkJ
CSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblBy
b3ZpZGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlk
ZXIuY3BwCmluZGV4IDQ1ODY3N2Y1MDliMTE3NDM5M2FlNGMzOGNhMDk0NTdjOGU4MGY4NGMuLmNk
NWZjNjYyMTVhNGIwMzc5NjgyYzcyYjJlYzFkMWYwYjk4MDczYjIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCkBAIC0xMjYsOCAr
MTI2LDggQEAgdm9pZCBXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6Y2xvc2VXZWJOb3RpZmljYXRp
b24oV0tOb3RpZmljYXRpb25SZWYgbm90aWZpY2F0aW8KIAogICAgIHJlbW92ZUdsb2JhbElERnJv
bUlETWFwKG1fbG9jYWxUb0dsb2JhbE5vdGlmaWNhdGlvbklETWFwLCBpZCk7CiAKLSAgICBXS1Jl
dGFpblB0cjxXS1VJbnQ2NFJlZj4gd2tJRCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaWQpKTsK
LSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdFdLKFdLTXV0
YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gd2tJRCA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoaWQpKTsKKyAgICBhdXRvIGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgp
KTsKICAgICBXS0FycmF5QXBwZW5kSXRlbShhcnJheS5nZXQoKSwgd2tJRC5nZXQoKSk7CiAgICAg
V0tOb3RpZmljYXRpb25NYW5hZ2VyUHJvdmlkZXJEaWRDbG9zZU5vdGlmaWNhdGlvbnMobm90aWZp
Y2F0aW9uTWFuYWdlciwgYXJyYXkuZ2V0KCkpOwogfQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQg
V2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6OnJlbW92ZU5vdGlmaWNhdGlvbk1hbmFnZXIoV0tOb3Rp
ZmljYXRpb25NYW5hZ2VyUmVmCiAgICAgYXV0byB0b1JlbW92ZSA9IGl0ZXJhdG9yLT52YWx1ZTsK
ICAgICBXS1JldGFpblB0cjxXS05vdGlmaWNhdGlvbk1hbmFnZXJSZWY+IGd1YXJkKG1hbmFnZXIp
OwogICAgIG1fb3duZWROb3RpZmljYXRpb25zLnJlbW92ZShpdGVyYXRvcik7Ci0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNy
ZWF0ZSgpKTsKKyAgICBhdXRvIGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgp
KTsKICAgICBmb3IgKHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEIDogdG9SZW1vdmUpIHsKICAgICAg
ICAgYm9vbCBzdWNjZXNzID0gbV9vd25pbmdNYW5hZ2VyLnJlbW92ZShub3RpZmljYXRpb25JRCk7
CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CkBAIC0xNzMsNyArMTcz
LDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6cmVzZXQoKQogICAgIGZvciAoYXV0
byYgbm90aWZpY2F0aW9uUGFpciA6IG1fb3duZWROb3RpZmljYXRpb25zKSB7CiAgICAgICAgIGlm
IChub3RpZmljYXRpb25QYWlyLnZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdFdL
KFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgICAgICBhdXRvIGFycmF5ID0gYWRvcHRXSyhX
S011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICAgICAgZm9yICh1aW50NjRfdCBub3RpZmljYXRp
b25JRCA6IG5vdGlmaWNhdGlvblBhaXIudmFsdWUpCiAgICAgICAgICAgICBXS0FycmF5QXBwZW5k
SXRlbShhcnJheS5nZXQoKSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShub3RpZmljYXRpb25JRCkp
LmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVN
YW5hZ2VyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAK
aW5kZXggMjBkNWExYWFkYjI5ZTMzMmJlMjliMmIxZjRjMjM2MDkxOWJhMGZmMS4uYzlkNDdmZDYz
Yjg0ZTQ2ZTQ2MmE1MGZmNGJlMDdiZjM0NjhhY2E2MCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV29y
a1F1ZXVlTWFuYWdlci5oIgogCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisjaW5jbHVk
ZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNs
dWRlIDxXZWJLaXQvV0tQYWdlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLUGFnZVByaXZhdGUuaD4K
QEAgLTc1LDcgKzc2LDcgQEAgdGVtcGxhdGUgPFdvcmtRdWV1ZUl0ZW06OlR5cGUgdHlwZT4KIGNs
YXNzIFNjcmlwdEl0ZW0gOiBwdWJsaWMgV29ya1F1ZXVlSXRlbSB7CiBwdWJsaWM6CiAgICAgZXhw
bGljaXQgU2NyaXB0SXRlbShjb25zdCBTdHJpbmcmIHNjcmlwdCkKLSAgICAgICAgOiBtX3Njcmlw
dChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNjcmlwdC51dGY4KCkuZGF0
YSgpKSkpCisgICAgICAgIDogbV9zY3JpcHQodG9XSyhzY3JpcHQpKQogICAgIHsKICAgICB9CiAK
QEAgLTE2MSw3ICsxNjIsNyBAQCB2b2lkIFdvcmtRdWV1ZU1hbmFnZXI6OnF1ZXVlTG9hZEhUTUxT
dHJpbmcoY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmCiAgICAgY2xhc3MgTG9h
ZEhUTUxTdHJpbmdJdGVtIDogcHVibGljIFdvcmtRdWV1ZUl0ZW0gewogICAgIHB1YmxpYzoKICAg
ICAgICAgTG9hZEhUTUxTdHJpbmdJdGVtKGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3Ry
aW5nJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIHVucmVhY2hhYmxlVVJMKQotICAgICAgICAgICAg
OiBtX2NvbnRlbnQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250ZW50
LnV0ZjgoKS5kYXRhKCkpKSkKKyAgICAgICAgICAgIDogbV9jb250ZW50KHRvV0soY29udGVudCkp
CiAgICAgICAgICAgICAsIG1fYmFzZVVSTChhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKGJhc2VVUkwudXRmOCgpLmRhdGEoKSkpKQogICAgICAgICAgICAgLCBtX3VucmVhY2hhYmxl
VVJMKGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodW5yZWFjaGFibGVVUkwudXRm
OCgpLmRhdGEoKSkpKQogICAgICAgICB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9U
ZXN0SW52b2NhdGlvbkNHLmNwcAppbmRleCA2NzMzOGY0YWE4MjczY2ZiNjg3MjI5YmZiYWQzZmE0
ZGRiMzdiNGRmLi4wMWM1MzFhOWI2YWNlOGU4MTY5NDhmNjc2Y2U2MzFmNTI3OTRiNmM0IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKQEAgLTUy
LDcgKzUyLDcgQEAgc3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVDR0NvbnRleHRGcm9tQ0dJbWFn
ZShDR0ltYWdlUmVmIGltYWdlKQogICAgIHNpemVfdCByb3dCeXRlcyA9ICg0ICogcGl4ZWxzV2lk
ZSArIDYzKSAmIH42MzsKIAogICAgIC8vIENyZWF0aW5nIHRoaXMgYml0bWFwIGluIHRoZSBkZXZp
Y2UgY29sb3Igc3BhY2Ugc2hvdWxkIHByZXZlbnQgYW55IGNvbG9yIGNvbnZlcnNpb24gd2hlbiB0
aGUgaW1hZ2Ugb2YgdGhlIHdlYiB2aWV3IGlzIGRyYXduIGludG8gaXQuCi0gICAgUmV0YWluUHRy
PENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRl
RGV2aWNlUkdCKCkpOworICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNl
Q3JlYXRlRGV2aWNlUkdCKCkpOwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlKDAsIHBpeGVsc1dpZGUsIHBpeGVsc0hpZ2gsIDgsIHJvd0J5dGVzLCBjb2xv
clNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFw
Qnl0ZU9yZGVyMzJIb3N0KTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMgQ0dDb250ZXh0UmVmIGNyZWF0ZUNHQ29udGV4
dEZyb21DR0ltYWdlKENHSW1hZ2VSZWYgaW1hZ2UpCiAKIHN0YXRpYyBDR0NvbnRleHRSZWYgY3Jl
YXRlQ0dDb250ZXh0RnJvbUltYWdlKFdLSW1hZ2VSZWYgd2tJbWFnZSkKIHsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKFdLSW1hZ2VDcmVhdGVDR0ltYWdlKHdrSW1h
Z2UpKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihXS0ltYWdlQ3JlYXRlQ0dJbWFnZSh3a0lt
YWdlKSk7CiAgICAgcmV0dXJuIGNyZWF0ZUNHQ29udGV4dEZyb21DR0ltYWdlKGltYWdlLmdldCgp
KTsKIH0KIApAQCAtMTA5LDkgKzEwOSw5IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNoU3RyaW5nRm9y
Q29udGV4dChDR0NvbnRleHRSZWYgYml0bWFwQ29udGV4dCwgY2hhciBoYXNoU3RyaW5nCiAKIHN0
YXRpYyB2b2lkIGR1bXBCaXRtYXAoQ0dDb250ZXh0UmVmIGJpdG1hcENvbnRleHQsIGNvbnN0IGNo
YXIqIGNoZWNrc3VtKQogewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dCkpOwotICAgIFJldGFp
blB0cjxDRk11dGFibGVEYXRhUmVmPiBpbWFnZURhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11
dGFibGUoMCwgMCkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGltYWdl
RGVzdCA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoaW1hZ2VEYXRh
LmdldCgpLCBrVVRUeXBlUE5HLCAxLCAwKSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dCkpOworICAgIGF1dG8gaW1hZ2VE
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKyAgICBhdXRvIGltYWdl
RGVzdCA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoaW1hZ2VEYXRh
LmdldCgpLCBrVVRUeXBlUE5HLCAxLCAwKSk7CiAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1h
Z2UoaW1hZ2VEZXN0LmdldCgpLCBpbWFnZS5nZXQoKSwgMCk7CiAgICAgQ0dJbWFnZURlc3RpbmF0
aW9uRmluYWxpemUoaW1hZ2VEZXN0LmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jb2NvYS9DcmFzaFJlcG9ydGVySW5mby5tbSBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0KaW5kZXggNGM3OWFiNWI4NWQ2NDE4OWE3
ZTBhMjk2ZWVhOTBjMWQ4MTE4ZGMzZC4uNDEwZDlmZGNiMzFlMmM2ZTZjYTc2NDk1NjE0NjA2Mzhj
MDkxMDVlYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9DcmFzaFJl
cG9ydGVySW5mby5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0NyYXNoUmVw
b3J0ZXJJbmZvLm1tCkBAIC0zNSwxMiArMzUsMTIgQEAgbmFtZXNwYWNlIFdUUiB7CiAKIHN0YXRp
YyBTdHJpbmcgdGVzdFBhdGhGcm9tVVJMKFdLVVJMUmVmIHVybCkKIHsKLSAgICBSZXRhaW5QdHI8
Q0ZVUkxSZWY+IGNmVVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCB1cmwpKTsKKyAgICBhdXRvIGNmVVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCB1cmwpKTsKICAgICBpZiAoIWNmVVJMKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjaGVtZUNGU3RyaW5nID0g
YWRvcHRDRihDRlVSTENvcHlTY2hlbWUoY2ZVUkwuZ2V0KCkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHBhdGhDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5UGF0aChjZlVSTC5nZXQo
KSkpOworICAgIGF1dG8gc2NoZW1lQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVNjaGVtZShj
ZlVSTC5nZXQoKSkpOworICAgIGF1dG8gcGF0aENGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlQ
YXRoKGNmVVJMLmdldCgpKSk7CiAKICAgICBTdHJpbmcgc2NoZW1lU3RyaW5nKHNjaGVtZUNGU3Ry
aW5nLmdldCgpKTsKICAgICBTdHJpbmcgcGF0aFN0cmluZyhwYXRoQ0ZTdHJpbmcuZ2V0KCkpOwpA
QCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgU3RyaW5nIHRlc3RQYXRoRnJvbVVSTChXS1VSTFJlZiB1
cmwpCiAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWVTdHJpbmcs
ICJodHRwIikgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0cmluZywg
Imh0dHBzIikpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gaG9zdENGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlIb3N0TmFtZShjZlVSTC5n
ZXQoKSkpOworICAgIGF1dG8gaG9zdENGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlIb3N0TmFt
ZShjZlVSTC5nZXQoKSkpOwogICAgIFN0cmluZyBob3N0U3RyaW5nKGhvc3RDRlN0cmluZy5nZXQo
KSk7CiAgICAgaWYgKGhvc3RTdHJpbmcgPT0gIjEyNy4wLjAuMSIpCiAgICAgICAgIHJldHVybiBw
YXRoU3RyaW5nOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0
Q29udHJvbGxlckNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29u
dHJvbGxlckNvY29hLm1tCmluZGV4IDM2NTMzN2FkZjk5ZjBiOWNkZDZhZjA5N2ZjMDJiZTg3YTY3
MTY2NTcuLjcxMzAzMjZhM2U2MWNlMmJkMGE3NmRmNzI4OThkOWU0YjAwNjNiMDQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0K
QEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxp
emVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3QgVAogCiB2b2lkIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZVdlYlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwg
Y29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgUmV0YWluUHRyPFdLV2ViVmlld0Nv
bmZpZ3VyYXRpb24+IGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtnbG9iYWxXZWJWaWV3
Q29uZmlndXJhdGlvbiBjb3B5XSk7CisgICAgYXV0byBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRv
cHROUyhbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24gY29weV0pOwogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAob3B0aW9ucy51c2VEYXRhRGV0ZWN0aW9uKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCmluZGV4
IDVjODYyZTliMGVjNzdkMDVlMDc3MjlkY2U2NDc2ZjU4OTIxMjNiMzguLjkxNWY0NzZjNjE1YWU2
MTA5MGQ5MGNhNzk3NmJmOGYyYzk5YjU2NmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KQEAgLTkwLDcgKzkwLDcgQEAgSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJkZXByZWNhdGVkLWltcGxlbWVudGF0aW9ucyIpCiAtICh2b2lk
KWRyYWdJbWFnZTooTlNJbWFnZSAqKWFuSW1hZ2UgYXQ6KE5TUG9pbnQpdmlld0xvY2F0aW9uIG9m
ZnNldDooTlNTaXplKWluaXRpYWxPZmZzZXQgZXZlbnQ6KE5TRXZlbnQgKilldmVudCBwYXN0ZWJv
YXJkOihOU1Bhc3RlYm9hcmQgKilwYm9hcmQgc291cmNlOihpZClzb3VyY2VPYmogc2xpZGVCYWNr
OihCT09MKXNsaWRlRmxhZwogSUdOT1JFX1dBUk5JTkdTX0VORAogewotICAgIFJldGFpblB0cjxX
ZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZvPiBkcmFnZ2luZ0luZm8gPSBhZG9wdE5TKFtbV2Vi
S2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mbyBhbGxvY10gaW5pdFdpdGhJbWFnZTphbkltYWdlIG9m
ZnNldDppbml0aWFsT2Zmc2V0IHBhc3RlYm9hcmQ6cGJvYXJkIHNvdXJjZTpzb3VyY2VPYmpdKTsK
KyAgICBhdXRvIGRyYWdnaW5nSW5mbyA9IGFkb3B0TlMoW1tXZWJLaXRUZXN0UnVubmVyRHJhZ2dp
bmdJbmZvIGFsbG9jXSBpbml0V2l0aEltYWdlOmFuSW1hZ2Ugb2Zmc2V0OmluaXRpYWxPZmZzZXQg
cGFzdGVib2FyZDpwYm9hcmQgc291cmNlOnNvdXJjZU9ial0pOwogICAgIFtzZWxmIGRyYWdnaW5n
VXBkYXRlZDpkcmFnZ2luZ0luZm8uZ2V0KCldOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmggYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmgKaW5kZXgg
YWJjMGE1MGM5NzBjMWJiMzNmMWZiMTA5MzkzNTJhZjhjYTdlMDQwMy4uY2M5ODEzOTQyNGYyODgw
NjQ0Mzk4OTgzNDVjM2U3ZDRlYTU1MzM3OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5oCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaApAQCAtMzIsMTIgKzMyLDE3
IEBAIE9CSkNfQ0xBU1MgVGVzdFJ1bm5lcldLV2ViVmlldzsKIG5hbWVzcGFjZSBXVFIgewogCiBj
bGFzcyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJD
b21tb24gewotcHVibGljOgorcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29udHJv
bGxlckNvY29hKFVJU2NyaXB0Q29udGV4dCYpOworICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndl
YlZpZXcoKSBjb25zdDsKKworICAgIHZvaWQgZG9Bc3luY1Rhc2soSlNWYWx1ZVJlZikgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CiAgICAgdm9pZCBzZXRWaWV3U2NhbGUoZG91YmxlKSBvdmVycmlkZTsK
ICAgICB2b2lkIHNldE1pbmltdW1FZmZlY3RpdmVXaWR0aChkb3VibGUpIG92ZXJyaWRlOwogICAg
IHZvaWQgYmVjb21lRmlyc3RSZXNwb25kZXIoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc2lnbkZp
cnN0UmVzcG9uZGVyKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkb0FzeW5jVGFzayhKU1ZhbHVlUmVm
KSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZVZpZXdGcm9tV2luZG93KEpTVmFsdWVSZWYpIG92
ZXJyaWRlOwogICAgIHZvaWQgYWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikgb3Zl
cnJpZGU7CkBAIC01OSwxMSArNjQsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGluc2VydEF0dGFj
aG1lbnRGb3JGaWxlUGF0aChKU1N0cmluZ1JlZiBmaWxlUGF0aCwgSlNTdHJpbmdSZWYgY29udGVu
dFR5cGUsIEpTVmFsdWVSZWYgY2FsbGJhY2spIG92ZXJyaWRlOwogCi1wcm90ZWN0ZWQ6Ci0gICAg
ZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EoVUlTY3JpcHRDb250ZXh0Jik7Ci0gICAg
VGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldygpIGNvbnN0OwotCi1wcml2YXRlOgogICAgIHZv
aWQgY29tcGxldGVUYXNrQXN5bmNocm9ub3VzbHlBZnRlckFjdGl2aXR5U3RhdGVVcGRhdGUodW5z
aWduZWQgY2FsbGJhY2tJRCk7CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQppbmRleCA5OGJiNzRiNDEzYjk1
MDNlNjk4ODA3ZWRiODYyOThlMzcwZGNkMGYyLi41ODQ3OTc2ZjIxODU3ZjUzZjQ4NWVjYjFmYjFl
YjkxMTcyMWE1NmRhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJ
U2NyaXB0Q29udHJvbGxlckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29j
b2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0KQEAgLTEzNSwyMiArMTM1LDE4IEBAIHZvaWQg
VUlTY3JpcHRDb250cm9sbGVyQ29jb2E6OmFkZFZpZXdUb1dpbmRvdyhKU1ZhbHVlUmVmIGNhbGxi
YWNrKQogCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpvdmVycmlkZVByZWZlcmVuY2Uo
SlNTdHJpbmdSZWYgcHJlZmVyZW5jZVJlZiwgSlNTdHJpbmdSZWYgdmFsdWVSZWYpCiB7Ci0gICAg
V0tQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSB3ZWJWaWV3KCkuY29uZmlndXJhdGlvbi5wcmVm
ZXJlbmNlczsKLQotICAgIFN0cmluZyBwcmVmZXJlbmNlID0gdG9XVEZTdHJpbmcodG9XSyhwcmVm
ZXJlbmNlUmVmKSk7Ci0gICAgU3RyaW5nIHZhbHVlID0gdG9XVEZTdHJpbmcodG9XSyh2YWx1ZVJl
ZikpOwotICAgIGlmIChwcmVmZXJlbmNlID09ICJXZWJLaXRNaW5pbXVtRm9udFNpemUiKQotICAg
ICAgICBwcmVmZXJlbmNlcy5taW5pbXVtRm9udFNpemUgPSB2YWx1ZS50b0RvdWJsZSgpOworICAg
IGlmICh0b1dURlN0cmluZyhwcmVmZXJlbmNlUmVmKSA9PSAiV2ViS2l0TWluaW11bUZvbnRTaXpl
IikKKyAgICAgICAgd2ViVmlldygpLmNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMubWluaW11bUZv
bnRTaXplID0gdG9XVEZTdHJpbmcodmFsdWVSZWYpLnRvRG91YmxlKCk7CiB9CiAKIHZvaWQgVUlT
Y3JpcHRDb250cm9sbGVyQ29jb2E6OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nLCB1bnNp
Z25lZCBsb25nIG9wdGlvbnMsIHVuc2lnbmVkIGxvbmcgbWF4Q291bnQpCiB7Ci0gICAgW3dlYlZp
ZXcoKSBfZmluZFN0cmluZzp0b1dURlN0cmluZyh0b1dLKHN0cmluZykpIG9wdGlvbnM6b3B0aW9u
cyBtYXhDb3VudDptYXhDb3VudF07CisgICAgW3dlYlZpZXcoKSBfZmluZFN0cmluZzp0b1dURlN0
cmluZyhzdHJpbmcpIG9wdGlvbnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3VudF07CiB9CiAKIEpT
T2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpjb250ZW50c09mVXNlckludGVyZmFj
ZUl0ZW0oSlNTdHJpbmdSZWYgaW50ZXJmYWNlSXRlbSkgY29uc3QKIHsKLSAgICBOU0RpY3Rpb25h
cnkgKmNvbnRlbnREaWN0aW9uYXJ5ID0gW3dlYlZpZXcoKSBfY29udGVudHNPZlVzZXJJbnRlcmZh
Y2VJdGVtOnRvV1RGU3RyaW5nKHRvV0soaW50ZXJmYWNlSXRlbSkpXTsKKyAgICBOU0RpY3Rpb25h
cnkgKmNvbnRlbnREaWN0aW9uYXJ5ID0gW3dlYlZpZXcoKSBfY29udGVudHNPZlVzZXJJbnRlcmZh
Y2VJdGVtOnRvV1RGU3RyaW5nKGludGVyZmFjZUl0ZW0pXTsKICAgICByZXR1cm4gSlNWYWx1ZVRv
T2JqZWN0KG1fY29udGV4dC0+anNDb250ZXh0KCksIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpj
b250ZW50RGljdGlvbmFyeSBpbkNvbnRleHQ6W0pTQ29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFs
Q29udGV4dFJlZjptX2NvbnRleHQtPmpzQ29udGV4dCgpXV0uSlNWYWx1ZVJlZiwgbnVsbHB0cik7
CiB9CiAKQEAgLTIxOSwxMiArMjE1LDEwIEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2E6
OnBhc3RlKCkKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2E6Omluc2VydEF0dGFjaG1lbnRG
b3JGaWxlUGF0aChKU1N0cmluZ1JlZiBmaWxlUGF0aCwgSlNTdHJpbmdSZWYgY29udGVudFR5cGUs
IEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG1fY29u
dGV4dC0+cHJlcGFyZUZvckFzeW5jVGFzayhjYWxsYmFjaywgQ2FsbGJhY2tUeXBlTm9uUGVyc2lz
dGVudCk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHRlc3RVUkwgPSBhZG9wdENGKFdLVVJM
Q29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1bHQsIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5jdXJyZW50VGVzdFVSTCgpKSk7Ci0gICAgUmV0YWluUHRyPE5TVVJMPiBhdHRhY2htZW50VVJM
ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0b1dURlN0cmluZyh0b1dLKGZpbGVQYXRoKSkgcmVs
YXRpdmVUb1VSTDooX19icmlkZ2UgTlNVUkwgKil0ZXN0VVJMLmdldCgpXTsKLQotICAgIGF1dG8g
ZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFdpdGhVUkw6
YXR0YWNobWVudFVSTC5nZXQoKSBvcHRpb25zOjAgZXJyb3I6bmlsXSk7Ci0gICAgW3dlYlZpZXco
KSBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlci5nZXQoKSBjb250
ZW50VHlwZTp0b1dURlN0cmluZyh0b1dLKGNvbnRlbnRUeXBlKSkgY29tcGxldGlvbjpeKEJPT0wg
c3VjY2VzcykgeworICAgIGF1dG8gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmN1cnJlbnRUZXN0
VVJMKCkpKTsKKyAgICBhdXRvIGF0dGFjaG1lbnRVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OnRvV1RGU3RyaW5nKGZpbGVQYXRoKSByZWxhdGl2ZVRvVVJMOihfX2JyaWRnZSBOU1VSTCAqKXRl
c3RVUkwuZ2V0KCldOworICAgIGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxlV3Jh
cHBlciBhbGxvY10gaW5pdFdpdGhVUkw6YXR0YWNobWVudFVSTCBvcHRpb25zOjAgZXJyb3I6bmls
XSk7CisgICAgW3dlYlZpZXcoKSBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpmaWxl
V3JhcHBlci5nZXQoKSBjb250ZW50VHlwZTp0b1dURlN0cmluZyhjb250ZW50VHlwZSkgY29tcGxl
dGlvbjpeKEJPT0wgc3VjY2VzcykgewogICAgICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgbV9jb250ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShjYWxsYmFj
a0lEKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2Vu
ZXJhdG9yLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3Iu
bW0KaW5kZXggZTI5ODM4YmE4MjhmYjRiZDkwODU3YWI2YmVmMmZkNDY1OWZiNDIxOC4uZDRiMTE0
ODExZWU2YmRkMjUxNWRkZTM1NWVlMTNkZTYyMTEwZDU1MCAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IubW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IubW0KQEAgLTE4OSw3ICsxODksNyBAQCAt
IChpbnN0YW5jZXR5cGUpaW5pdAogCiAtICh2b2lkKV9zZW5kSU9ISURLZXlib2FyZEV2ZW50Oih1
aW50NjRfdCl0aW1lc3RhbXAgdXNhZ2U6KHVpbnQzMl90KXVzYWdlIGlzS2V5RG93bjooYm9vbClp
c0tleURvd24KIHsKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9w
dENGKElPSElERXZlbnRDcmVhdGVLZXlib2FyZEV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsCisg
ICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0ZUtleWJvYXJkRXZlbnQo
a0NGQWxsb2NhdG9yRGVmYXVsdCwKICAgICAgICAgdGltZXN0YW1wLAogICAgICAgICBrSElEUGFn
ZV9LZXlib2FyZE9yS2V5cGFkLAogICAgICAgICB1c2FnZSwKQEAgLTM2MSw3ICszNjEsNyBAQCAt
IChJT0hJREV2ZW50UmVmKV9jcmVhdGVJT0hJREV2ZW50VHlwZTooSGFuZEV2ZW50VHlwZSlldmVu
dFR5cGUKICAgICAgICAgZXZlbnRNYXNrIHw9IGtJT0hJRERpZ2l0aXplckV2ZW50SWRlbnRpdHk7
CiAKICAgICB1aW50NjRfdCBtYWNoVGltZSA9IG1hY2hfYWJzb2x1dGVfdGltZSgpOwotICAgIFJl
dGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0
ZURpZ2l0aXplckV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1hY2hUaW1lLAorICAgIGF1dG8g
ZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZlbnRDcmVhdGVEaWdpdGl6ZXJFdmVudChrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBtYWNoVGltZSwKICAgICAgICAga0lPSElERGlnaXRpemVyVHJhbnNkdWNl
clR5cGVIYW5kLAogICAgICAgICAwLAogICAgICAgICAwLApAQCAtNDUzLDcgKzQ1Myw3IEBAIC0g
KEJPT0wpX3NlbmRISURFdmVudDooSU9ISURFdmVudFJlZilldmVudFJlZgogICAgICAgICBfaW9T
eXN0ZW1DbGllbnQgPSBJT0hJREV2ZW50U3lzdGVtQ2xpZW50Q3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQpOwogCiAgICAgaWYgKGV2ZW50UmVmKSB7Ci0gICAgICAgIFJldGFpblB0cjxJT0hJREV2
ZW50UmVmPiBzdHJvbmdFdmVudCA9IGV2ZW50UmVmOworICAgICAgICBhdXRvIHN0cm9uZ0V2ZW50
ID0gZXZlbnRSZWY7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CiAgICAgICAgICAgICB1aW50MzJfdCBjb250ZXh0SUQgPSBbVUlBcHBsaWNhdGlv
biBzaGFyZWRBcHBsaWNhdGlvbl0ua2V5V2luZG93Ll9jb250ZXh0SWQ7CiAgICAgICAgICAgICBB
U1NFUlQoY29udGV4dElEKTsKQEAgLTUxMiw3ICs1MTIsNyBAQCAtICh2b2lkKV91cGRhdGVUb3Vj
aFBvaW50czooQ0dQb2ludCopcG9pbnRzIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50CiAgICAgICAg
IFtbR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNEZWJ1
Z1dpbmRvd10gdXBkYXRlRGVidWdJbmRpY2F0b3JGb3JUb3VjaDppIHdpdGhQb2ludEluV2luZG93
Q29vcmRpbmF0ZXM6cG9pbnRzW2ldIGlzVG91Y2hpbmc6WUVTXTsKICAgICB9CiAgICAgCi0gICAg
UmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRl
SU9ISURFdmVudFR5cGU6aGFuZEV2ZW50VHlwZV0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9w
dENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpoYW5kRXZlbnRUeXBlXSk7CiAgICAgW3Nl
bGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTUyOSw3ICs1MjksNyBA
QCAtICh2b2lkKXRvdWNoRG93bkF0UG9pbnRzOihDR1BvaW50Kilsb2NhdGlvbnMgdG91Y2hDb3Vu
dDooTlNVSW50ZWdlcil0b3VjaENvdW50CiAgICAgICAgIFtbR2VuZXJhdGVkVG91Y2hlc0RlYnVn
V2luZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvd10gdXBkYXRlRGVidWdJbmRp
Y2F0b3JGb3JUb3VjaDppbmRleCB3aXRoUG9pbnRJbldpbmRvd0Nvb3JkaW5hdGVzOmxvY2F0aW9u
c1tpbmRleF0gaXNUb3VjaGluZzpZRVNdOwogICAgIH0KIAotICAgIFJldGFpblB0cjxJT0hJREV2
ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhh
bmRFdmVudFRvdWNoZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3Jl
YXRlSU9ISURFdmVudFR5cGU6SGFuZEV2ZW50VG91Y2hlZF0pOwogICAgIFtzZWxmIF9zZW5kSElE
RXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC01NjMsNyArNTYzLDcgQEAgLSAodm9pZCls
aWZ0VXBBdFBvaW50czooQ0dQb2ludCopbG9jYXRpb25zIHRvdWNoQ291bnQ6KE5TVUludGVnZXIp
dG91Y2hDb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRH
ZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6
aW5kZXggd2l0aFBvaW50SW5XaW5kb3dDb29yZGluYXRlczpDR1BvaW50WmVybyBpc1RvdWNoaW5n
Ok5PXTsKICAgICB9CiAgICAgCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVm
ID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6SGFuZEV2ZW50TGlmdGVkXSk7
CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBl
OkhhbmRFdmVudExpZnRlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0
KCldOwogICAgIAogICAgIF9hY3RpdmVQb2ludENvdW50ID0gbmV3UG9pbnRDb3VudDsKQEAgLTY0
MSw3ICs2NDEsNyBAQCAtICh2b2lkKXN0eWx1c0Rvd25BdFBvaW50OihDR1BvaW50KWxvY2F0aW9u
IGF6aW11dGhBbmdsZTooQ0dGbG9hdClhemltdXRoQW5nbGUgYQogICAgIF9hY3RpdmVQb2ludHNb
MF0uYXppbXV0aEFuZ2xlID0gTV9QSSAqIDIgLSBhemltdXRoQW5nbGU7CiAgICAgX2FjdGl2ZVBv
aW50c1swXS5hbHRpdHVkZUFuZ2xlID0gTV9QSV8yIC0gYWx0aXR1ZGVBbmdsZTsKIAotICAgIFJl
dGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlP
SElERXZlbnRUeXBlOlN0eWx1c0V2ZW50VG91Y2hlZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBh
ZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudFRvdWNoZWRdKTsK
ICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApAQCAtNjU1LDcg
KzY1NSw3IEBAIC0gKHZvaWQpc3R5bHVzTW92ZVRvUG9pbnQ6KENHUG9pbnQpbG9jYXRpb24gYXpp
bXV0aEFuZ2xlOihDR0Zsb2F0KWF6aW11dGhBbmdsZSBhCiAgICAgX2FjdGl2ZVBvaW50c1swXS5h
emltdXRoQW5nbGUgPSBNX1BJICogMiAtIGF6aW11dGhBbmdsZTsKICAgICBfYWN0aXZlUG9pbnRz
WzBdLmFsdGl0dWRlQW5nbGUgPSBNX1BJXzIgLSBhbHRpdHVkZUFuZ2xlOwogCi0gICAgUmV0YWlu
UHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURF
dmVudFR5cGU6U3R5bHVzRXZlbnRNb3ZlZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENG
KFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudE1vdmVkXSk7CiAgICAgW3Nl
bGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTY2OCw3ICs2NjgsNyBA
QCAtICh2b2lkKXN0eWx1c1VwQXRQb2ludDooQ0dQb2ludClsb2NhdGlvbgogICAgIF9hY3RpdmVQ
b2ludHNbMF0uYXppbXV0aEFuZ2xlID0gMDsKICAgICBfYWN0aXZlUG9pbnRzWzBdLmFsdGl0dWRl
QW5nbGUgPSAwOwogCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRv
cHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRMaWZ0ZWRdKTsKKyAg
ICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5
bHVzRXZlbnRMaWZ0ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgp
XTsKIH0KIApAQCAtMTAyMSw3ICsxMDIxLDcgQEAgLSAodm9pZClkaXNwYXRjaEV2ZW50V2l0aElu
Zm86KE5TRGljdGlvbmFyeSAqKWV2ZW50SW5mbwogewogICAgIEFTU0VSVChbTlNUaHJlYWQgaXNN
YWluVGhyZWFkXSk7CiAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBh
ZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50V2l0aEluZm86ZXZlbnRJbmZvXSk7CisgICAg
YXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRXaXRoSW5mbzpl
dmVudEluZm9dKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9s
bGVySU9TLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJ
T1MuaAppbmRleCAyOGQwNjBjNmRmYzQ3MWE5MDU0OTA2ODM5NWMzZDQwZjZhOWMwOTZiLi44NTQ2
NDQ3NjZkOGJjNWE4MTVkMjY3ZTlhN2JhNGEyMDVkNmU2MTIyIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MuaAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MuaApAQCAtMjUsMTEgKzI1
LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwogI2lt
cG9ydCAiVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5o
PgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UmVjdDsKQEAgLTM3LDEzICszNywxNCBAQCBjbGFz
cyBGbG9hdFJlY3Q7CiAKIG5hbWVzcGFjZSBXVFIgewogCi1jbGFzcyBVSVNjcmlwdENvbnRyb2xs
ZXJJT1MgOiBwdWJsaWMgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EgeworY2xhc3MgVUlTY3JpcHRD
b250cm9sbGVySU9TIGZpbmFsIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKIHB1
YmxpYzoKICAgICBleHBsaWNpdCBVSVNjcmlwdENvbnRyb2xsZXJJT1MoVUlTY3JpcHRDb250ZXh0
JiBjb250ZXh0KQogICAgICAgICA6IFVJU2NyaXB0Q29udHJvbGxlckNvY29hKGNvbnRleHQpCiAg
ICAgewogICAgIH0KIAorcHJpdmF0ZToKICAgICB2b2lkIHdhaXRGb3JPdXRzdGFuZGluZ0NhbGxi
YWNrcygpIG92ZXJyaWRlOwogICAgIHZvaWQgZG9BZnRlclByZXNlbnRhdGlvblVwZGF0ZShKU1Zh
bHVlUmVmKSBvdmVycmlkZTsKICAgICB2b2lkIGRvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9u
VXBkYXRlKEpTVmFsdWVSZWYpIG92ZXJyaWRlOwpAQCAtMTU2LDcgKzE1Nyw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldERpZEVuZFNjcm9sbGluZ0NhbGxiYWNrKEpTVmFsdWVSZWYpIG92ZXJyaWRl
OwogICAgIHZvaWQgY2xlYXJBbGxDYWxsYmFja3MoKSBvdmVycmlkZTsKIAotcHJpdmF0ZToKICAg
ICB2b2lkIHdhaXRGb3JNb2RhbFRyYW5zaXRpb25Ub0ZpbmlzaCgpIGNvbnN0OwogICAgIHZvaWQg
d2FpdEZvclNpbmdsZVRhcFRvUmVzZXQoKSBjb25zdDsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdEZvck1lbnVBY3Rpb24oQ0ZTdHJpbmdSZWYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IDEzMGM0OTdj
MjQwZDgzOGJiNGFmZmZkMjA3MzE0MTc1YTgzZGJiMjYuLjdhZjZlY2Y1MDk4NWYxNWVmNDdjMTkx
OGI2NWEyZWJkYTZkMjZhMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTY4LDI0ICs2OCwxNCBAQCBzdGF0aWMgTlNE
aWN0aW9uYXJ5ICp0b05TRGljdGlvbmFyeShDR1JlY3QgcmVjdCkKICAgICB9OwogfQogCi1zdGF0
aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGFycmF5KQotewotICAgIGF1dG8gbGVuZ3RoU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBpZiAoYXV0byBsZW5ndGhWYWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgbnVs
bHB0cikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
IHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKICAgICBpZiAoIWFycmF5VmFsdWUpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBUaGUgdmFsdWUgbWF5IGVpdGhlciBiZSBhIHN0
cmluZyB3aXRoIGEgc2luZ2xlIG1vZGlmaWVyIG9yIGFuIGFycmF5IG9mIG1vZGlmaWVycy4KLSAg
ICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpKSB7Ci0gICAgICAgIGF1
dG8gc3RyaW5nID0gdG9XVEZTdHJpbmcodG9XSyhhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNv
bnRleHQsIGFycmF5VmFsdWUsIG51bGxwdHIpKSkpOwotICAgICAgICByZXR1cm4geyBzdHJpbmcg
fTsKLSAgICB9CisgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkK
KyAgICAgICAgcmV0dXJuIHsgdG9XVEZTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1ZSkgfTsKIAog
ICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGFycmF5VmFsdWUpKQogICAgICAgICBy
ZXR1cm4geyB9OwpAQCAtOTMsMTYgKzgzLDggQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBhcnNl
TW9kaWZpZXJBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhcnJheVYKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBhcnJheSk7CiAgICAgVmVj
dG9yPFN0cmluZz4gbW9kaWZpZXJzOwogICAgIG1vZGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgSlNWYWx1
ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBp
LCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgdmFsdWUsICZleGNlcHRpb24pKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtb2RpZmllcnMuYXBwZW5kKHRvV1RGU3RyaW5nKHRv
V0soc3RyaW5nLmdldCgpKSkpOwotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCisgICAgICAgIG1vZGlmaWVycy5hcHBlbmQodG9XVEZTdHJpbmcoY29udGV4
dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIG51bGxwdHIp
KSk7CiAgICAgcmV0dXJuIG1vZGlmaWVyczsKIH0KIApAQCAtNTE0LDEwICs0OTYsOSBAQCB2b2lk
IFVJU2NyaXB0Q29udHJvbGxlcklPUzo6dHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2Fy
ZChKU1N0cmluZ1JlZiBjaGFyYQogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBtX2NvbnRleHQt
PnByZXBhcmVGb3JBc3luY1Rhc2soY2FsbGJhY2ssIENhbGxiYWNrVHlwZU5vblBlcnNpc3RlbnQp
OwogCiAgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSBrZXlib2FyZCBpcyBhbHJlYWR5IHNob3duLgot
ICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVByZXNz
OnRvV1RGU3RyaW5nKHRvV0soY2hhcmFjdGVyKSkgY29tcGxldGlvbkJsb2NrOm1ha2VCbG9ja1B0
cihbdGhpcywgc3Ryb25nVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFja0lEXSB7Ci0gICAg
ICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2NvbnRl
eHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNrSUQpOworICAgIFtbSElERXZlbnRHZW5lcmF0
b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVByZXNzOnRvV1RGU3RyaW5nKGNoYXJhY3Rl
cikgY29tcGxldGlvbkJsb2NrOm1ha2VCbG9ja1B0cihbc3Ryb25nVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjYWxsYmFja0lEXSB7CisgICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2NvbnRleHQpCisg
ICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2NvbnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxi
YWNrSUQpOwogICAgIH0pLmdldCgpXTsKIH0KIApAQCAtNTM0LDcgKzUxNSw3IEBAIHZvaWQgVUlT
Y3JpcHRDb250cm9sbGVySU9TOjpyYXdLZXlEb3duKEpTU3RyaW5nUmVmIGtleSkKIHsKICAgICAv
LyBLZXkgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSBVbmljb2RlIGNvZGUgcG9pbnQgb3IgdGhlIG5h
bWUgb2YgYSBzcGVjaWFsIGtleSAoZS5nLiAiZG93bkFycm93IikuCiAgICAgLy8gSElERXZlbnRH
ZW5lcmF0b3Iga25vd3MgaG93IHRvIG1hcCB0aGVzZSBzcGVjaWFsIGtleXMgdG8gdGhlIGFwcHJv
cHJpYXRlIGtleWNvZGUuCi0gICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdl
bmVyYXRvcl0ga2V5RG93bjp0b1dURlN0cmluZyh0b1dLKGtleSkpXTsKKyAgICBbW0hJREV2ZW50
R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlEb3duOnRvV1RGU3RyaW5nKGtl
eSldOwogICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIHNl
bmRNYXJrZXJISURFdmVudFdpdGhDb21wbGV0aW9uQmxvY2s6XnsgLyogRG8gbm90aGluZyAqLyB9
XTsKIH0KIApAQCAtNTQyLDcgKzUyMyw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjpy
YXdLZXlVcChKU1N0cmluZ1JlZiBrZXkpCiB7CiAgICAgLy8gS2V5IGNhbiBiZSBlaXRoZXIgYSBz
aW5nbGUgVW5pY29kZSBjb2RlIHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lhbCBrZXkgKGUu
Zy4gImRvd25BcnJvdyIpLgogICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtub3dzIGhvdyB0byBt
YXAgdGhlc2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXljb2RlLgotICAgIFtb
SElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVVwOnRvV1RGU3Ry
aW5nKHRvV0soa2V5KSldOworICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRH
ZW5lcmF0b3JdIGtleVVwOnRvV1RGU3RyaW5nKGtleSldOwogICAgIFtbSElERXZlbnRHZW5lcmF0
b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIHNlbmRNYXJrZXJISURFdmVudFdpdGhDb21wbGV0
aW9uQmxvY2s6XnsgLyogRG8gbm90aGluZyAqLyB9XTsKIH0KIApAQCAtNTUwLDcgKzUzMSw3IEBA
IHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjprZXlEb3duKEpTU3RyaW5nUmVmIGNoYXJhY3Rl
ciwgSlNWYWx1ZVJlZiBtb2RpZmllckFyCiB7CiAgICAgLy8gQ2hhcmFjdGVyIGNhbiBiZSBlaXRo
ZXIgYSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lhbCBr
ZXkgKGUuZy4gImRvd25BcnJvdyIpLgogICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtub3dzIGhv
dyB0byBtYXAgdGhlc2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXljb2RlLgot
ICAgIFN0cmluZyBpbnB1dFN0cmluZyA9IHRvV1RGU3RyaW5nKHRvV0soY2hhcmFjdGVyKSk7Cisg
ICAgYXV0byBpbnB1dFN0cmluZyA9IHRvV1RGU3RyaW5nKGNoYXJhY3Rlcik7CiAgICAgYXV0byBt
b2RpZmllckZsYWdzID0gcGFyc2VNb2RpZmllckFycmF5KG1fY29udGV4dC0+anNDb250ZXh0KCks
IG1vZGlmaWVyQXJyYXkpOwogCiAgICAgZm9yIChhdXRvJiBtb2RpZmllckZsYWcgOiBtb2RpZmll
ckZsYWdzKQpAQCAtNzI3LDcgKzcwOCw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjph
cHBseUF1dG9jb3JyZWN0aW9uKEpTU3RyaW5nUmVmIG5ld1N0cmluZywgSlNTdHJpbmdSCiAgICAg
dW5zaWduZWQgY2FsbGJhY2tJRCA9IG1fY29udGV4dC0+cHJlcGFyZUZvckFzeW5jVGFzayhjYWxs
YmFjaywgQ2FsbGJhY2tUeXBlTm9uUGVyc2lzdGVudCk7CiAKICAgICBUZXN0UnVubmVyV0tXZWJW
aWV3ICp3ZWJWaWV3ID0gdGhpcy0+d2ViVmlldygpOwotICAgIFt3ZWJWaWV3IGFwcGx5QXV0b2Nv
cnJlY3Rpb246dG9XVEZTdHJpbmcodG9XSyhuZXdTdHJpbmcpKSB0b1N0cmluZzp0b1dURlN0cmlu
Zyh0b1dLKG9sZFN0cmluZykpIHdpdGhDb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW3Ro
aXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0geworICAgIFt3ZWJW
aWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246dG9XVEZTdHJpbmcobmV3U3RyaW5nKSB0b1N0cmluZzp0
b1dURlN0cmluZyhvbGRTdHJpbmcpIHdpdGhDb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIo
W3RoaXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewogICAgICAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBtYWtlQmxvY2tQdHIo
W3RoaXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewogICAgICAg
ICAgICAgLy8gYXBwbHlBdXRvY29ycmVjdGlvbiBjYW4gY2FsbCBpdHMgY29tcGxldGlvbiBoYW5k
bGVyIHN5bmNocm9ub3VzbHksCiAgICAgICAgICAgICAvLyB3aGljaCBtYWtlcyBVSVNjcmlwdENv
bnRyb2xsZXIgdW5oYXBweSAoc2VlIGJ1ZyAxNzI4ODQpLgpAQCAtMTE1Nyw3ICsxMTM4LDcgQEAg
Ym9vbCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OmlzU2hvd2luZ0RhdGFMaXN0U3VnZ2VzdGlvbnMo
KSBjb25zdAogCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6c2V0S2V5Ym9hcmRJbnB1dE1v
ZGVJZGVudGlmaWVyKEpTU3RyaW5nUmVmIGlkZW50aWZpZXIpCiB7Ci0gICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldEtleWJvYXJkSW5wdXRNb2RlSWRlbnRpZmllcih0b1dURlN0cmlu
Zyh0b1dLKGlkZW50aWZpZXIpKSk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dEtleWJvYXJkSW5wdXRNb2RlSWRlbnRpZmllcih0b1dURlN0cmluZyhpZGVudGlmaWVyKSk7CiB9
CiAKIC8vIEZJWE1FOiBXcml0ZSB0aGlzIGluIHRlcm1zIG9mIEhJREV2ZW50R2VuZXJhdG9yIG9u
Y2Ugd2Uga25vdyBob3cgdG8gcmVzZXQgY2FwcyBsb2NrIHN0YXRlCkBAIC0xMTc4LDcgKzExNTks
NyBAQCBib29sIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6a2V5Ym9hcmRJc0F1dG9tYXRpY2FsbHlT
aGlmdGVkKCkgY29uc3QKIAogSlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9sbGVySU9TOjphdHRh
Y2htZW50SW5mbyhKU1N0cmluZ1JlZiBqc0F0dGFjaG1lbnRJZGVudGlmaWVyKQogewotICAgIGF1
dG8gYXR0YWNobWVudElkZW50aWZpZXIgPSB0b1dURlN0cmluZyh0b1dLKGpzQXR0YWNobWVudElk
ZW50aWZpZXIpKTsKKyAgICBhdXRvIGF0dGFjaG1lbnRJZGVudGlmaWVyID0gdG9XVEZTdHJpbmco
anNBdHRhY2htZW50SWRlbnRpZmllcik7CiAgICAgX1dLQXR0YWNobWVudCAqYXR0YWNobWVudCA9
IFt3ZWJWaWV3KCkgX2F0dGFjaG1lbnRGb3JJZGVudGlmaWVyOmF0dGFjaG1lbnRJZGVudGlmaWVy
XTsKICAgICBfV0tBdHRhY2htZW50SW5mbyAqYXR0YWNobWVudEluZm8gPSBhdHRhY2htZW50Lmlu
Zm87CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVy
UHJveHkubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1t
CmluZGV4IDA2NzJiNTgxYmY2NWI1YWQ5YTJiODVmZWE4NjE2NDhmMjIzZWI0YzUuLjEwMjcyODg0
MDg0ZDJjMTAyMDhjZmEwNzE0ZjFiMTBjNWVmYzBhMGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5tbQpAQCAtMjcyLDIwICsyNzIsMTAgQEAgc3Rh
dGljIE5TVGltZUludGVydmFsIGFic29sdXRlVGltZUZvckV2ZW50VGltZShkb3VibGUgY3VycmVu
dEV2ZW50VGltZSkKIAogRXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0Q29u
dHJvbGxlciogdGVzdENvbnRyb2xsZXIpCiAgICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RDb250
cm9sbGVyKQotICAgICwgbV90aW1lKDApCi0gICAgLCBtX3Bvc2l0aW9uKCkKLSAgICAsIG1fbGVm
dE1vdXNlQnV0dG9uRG93bihmYWxzZSkKLSAgICAsIG1fY2xpY2tDb3VudCgwKQotICAgICwgbV9j
bGlja1RpbWUoMCkKLSAgICAsIG1fY2xpY2tQb3NpdGlvbigpCi0gICAgLCBtX2NsaWNrQnV0dG9u
KGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbikKLSAgICAsIGV2ZW50TnVtYmVyKDApCiB7CiB9
CiAKLUV2ZW50U2VuZGVyUHJveHk6On5FdmVudFNlbmRlclByb3h5KCkKLXsKLX0KK0V2ZW50U2Vu
ZGVyUHJveHk6On5FdmVudFNlbmRlclByb3h5KCkgPSBkZWZhdWx0OwogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKIHsKQEAgLTM5
NCw3ICszODQsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVGb3JjZUV2ZW50U3luY2hyb25vdXNseShO
U0V2ZW50ICpldmVudCkKIAogUmV0YWluUHRyPE5TRXZlbnQ+IEV2ZW50U2VuZGVyUHJveHk6OmJl
Z2luUHJlc3N1cmVFdmVudChpbnQgc3RhZ2UpCiB7Ci0gICAgUmV0YWluUHRyPEV2ZW50U2VuZGVy
U3ludGhldGljRXZlbnQ+IGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZl
bnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0
aW9uLngsIG1fcG9zaXRpb24ueSkKKyAgICBhdXRvIGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2Vu
ZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01h
a2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAgICAgICAgZ2xvYmFsTG9jYXRp
b246KFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpIGNv
bnZlcnRSZWN0VG9TY3JlZW46TlNNYWtlUmVjdChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwg
MSwgMSldLm9yaWdpbikKICAgICAgICAgc3RhZ2U6c3RhZ2UKICAgICAgICAgcHJlc3N1cmU6MC41
CkBAIC00MDksNyArMzk5LDcgQEAgUmV0YWluUHRyPE5TRXZlbnQ+IEV2ZW50U2VuZGVyUHJveHk6
OmJlZ2luUHJlc3N1cmVFdmVudChpbnQgc3RhZ2UpCiAKIFJldGFpblB0cjxOU0V2ZW50PiBFdmVu
dFNlbmRlclByb3h5OjpwcmVzc3VyZUNoYW5nZUV2ZW50KGludCBzdGFnZSwgZmxvYXQgcHJlc3N1
cmUsIEV2ZW50U2VuZGVyUHJveHk6OlByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uIGRpcmVjdGlvbikK
IHsKLSAgICBSZXRhaW5QdHI8RXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudD4gZXZlbnQgPSBhZG9w
dE5TKFtbRXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudCBhbGxvY10gaW5pdFByZXNzdXJlRXZlbnRB
dExvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQorICAgIGF1
dG8gZXZlbnQgPSBhZG9wdE5TKFtbRXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudCBhbGxvY10gaW5p
dFByZXNzdXJlRXZlbnRBdExvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3Np
dGlvbi55KQogICAgICAgICBnbG9iYWxMb2NhdGlvbjooW21fdGVzdENvbnRyb2xsZXItPm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkgY29udmVydFJlY3RUb1NjcmVlbjpOU01ha2VSZWN0
KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55LCAxLCAxKV0ub3JpZ2luKQogICAgICAgICBzdGFn
ZTpzdGFnZQogICAgICAgICBwcmVzc3VyZTpwcmVzc3VyZQpAQCAtNDMxLDEwICs0MjEsMTAgQEAg
dm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlQ2xpY2soKQogewogICAgIHNlbmRNb3Vz
ZURvd25Ub1N0YXJ0UHJlc3N1cmVFdmVudHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBi
ZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxOU0V2
ZW50PiBwcmVGb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5n
ZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGZvcmNlQ2xp
Y2sgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNy
ZWFzaW5nKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVz
c3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsK
KyAgICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMSk7CisgICAgYXV0
byBwcmVGb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURp
cmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBmb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFu
Z2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0
byByZWxlYXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFu
Z2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwogICAgIE5TRXZlbnQgKm1vdXNlVXAgPSBbTlNFdmVu
dCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNFdmVudFR5cGVMZWZ0TW91c2VVcAogICAgICAgICBsb2Nh
dGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAgICAgICAgbW9k
aWZpZXJGbGFnczowCkBAIC00NjgsOSArNDU4LDkgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojpz
dGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljaygpCiB7CiAgICAgc2VuZE1vdXNlRG93blRvU3Rh
cnRQcmVzc3VyZUV2ZW50cygpOwogCi0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGJlZ2luUHJlc3N1
cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMSk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGluY3Jl
YXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJl
Y3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiByZWxlYXNpbmdQcmVz
c3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRl
Y3JlYXNpbmcpOworICAgIGF1dG8gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgx
KTsKKyAgICBhdXRvIGluY3JlYXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwg
UHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gcmVsZWFzaW5n
UHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9u
OjpEZWNyZWFzaW5nKTsKICAgICBOU0V2ZW50ICptb3VzZVVwID0gW05TRXZlbnQgbW91c2VFdmVu
dFdpdGhUeXBlOk5TRXZlbnRUeXBlTGVmdE1vdXNlVXAKICAgICAgICAgbG9jYXRpb246TlNNYWtl
UG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIG1vZGlmaWVyRmxhZ3M6
MApAQCAtNTAzLDkgKzQ5Myw5IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZURv
d24oKQogewogICAgIHNlbmRNb3VzZURvd25Ub1N0YXJ0UHJlc3N1cmVFdmVudHMoKTsKIAotICAg
IFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEp
OwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBwcmVGb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VF
dmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0gICAgUmV0YWlu
UHRyPE5TRXZlbnQ+IGZvcmNlTW91c2VEb3duID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVz
c3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNzdXJl
ID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOworICAgIGF1dG8gcHJlRm9yY2VDbGljayA9IHByZXNz
dXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwor
ICAgIGF1dG8gZm9yY2VNb3VzZURvd24gPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJl
Q2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKIAogICAgIE5TVmlldyAqdGFyZ2V0VmlldyA9
IFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSBoaXRUZXN0
OltiZWdpblByZXNzdXJlIGxvY2F0aW9uSW5XaW5kb3ddXTsKICAgICB0YXJnZXRWaWV3ID0gdGFy
Z2V0VmlldyA/IHRhcmdldFZpZXcgOiBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5w
bGF0Zm9ybVZpZXcoKTsKQEAgLTUyNiw5ICs1MTYsOSBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6
Om1vdXNlRm9yY2VEb3duKCkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlVXAo
KQogewotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3Vy
ZUV2ZW50KDIpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBzdGFnZVR3b0V2ZW50ID0gcHJlc3N1
cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7Ci0g
ICAgUmV0YWluUHRyPE5TRXZlbnQ+IHN0YWdlT25lRXZlbnQgPSBwcmVzc3VyZUNoYW5nZUV2ZW50
KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2lu
UHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMik7CisgICAgYXV0byBzdGFnZVR3b0V2ZW50
ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVh
c2luZyk7CisgICAgYXV0byBzdGFnZU9uZUV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQ
cmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CiAKICAgICAvLyBTaW5jZSBBcHBL
aXQgZG9lcyBub3QgaW1wbGVtZW50IGZvcmNldXAvZG93biBhcyBtb3VzZSBldmVudHMsIHdlIG5l
ZWQgdG8gc2VuZCB0d28gcHJlc3N1cmUgZXZlbnRzIHRvIGRldGVjdAogICAgIC8vIHRoZSBjaGFu
Z2UgaW4gc3RhZ2UgdGhhdCBtYXJrcyB0aG9zZSBtb21lbnRzLgpAQCAtNTUxLDggKzU0MSw4IEBA
IHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZUNoYW5nZWQoZmxvYXQgZm9yY2UpCiB7
CiAgICAgaW50IHN0YWdlID0gZm9yY2UgPCAxID8gMSA6IDI7CiAgICAgZmxvYXQgcHJlc3N1cmUg
PSBmb3JjZSA8IDEgPyBmb3JjZSA6IGZvcmNlIC0gMTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4g
YmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudChzdGFnZSk7Ci0gICAgUmV0YWluUHRy
PE5TRXZlbnQ+IHByZXNzdXJlQ2hhbmdlZEV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudChzdGFn
ZSwgcHJlc3N1cmUsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBh
dXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoc3RhZ2UpOworICAgIGF1dG8g
cHJlc3N1cmVDaGFuZ2VkRXZlbnQgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KHN0YWdlLCBwcmVzc3Vy
ZSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwogCiAgICAgTlNWaWV3ICp0
YXJnZXRWaWV3ID0gW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmll
dygpIGhpdFRlc3Q6W2JlZ2luUHJlc3N1cmUgbG9jYXRpb25JbldpbmRvd11dOwogICAgIHRhcmdl
dFZpZXcgPSB0YXJnZXRWaWV3ID8gdGFyZ2V0VmlldyA6IG1fdGVzdENvbnRyb2xsZXItPm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOwpAQCAtNjExLDggKzYwMSw3IEBAIHZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKIAogdm9pZCBFdmVudFNl
bmRlclByb3h5OjprZXlEb3duKFdLU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2Rp
ZmllcnMsIHVuc2lnbmVkIGtleUxvY2F0aW9uKQogewotICAgIE5TU3RyaW5nKiBjaGFyYWN0ZXIg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6dG9TVEQoa2V5KS5jX3N0cigpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOltOU1N0cmluZyBkZWZhdWx0Q1N0
cmluZ0VuY29kaW5nXV07CisgICAgTlNTdHJpbmcqIGNoYXJhY3RlciA9IHRvV1RGU3RyaW5nKGtl
eSk7CiAKICAgICBOU1N0cmluZyAqZXZlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CiAgICAgdW5z
aWduZWQgc2hvcnQga2V5Q29kZSA9IDA7CkBAIC04MzIsNyArODIxLDcgQEAgdm9pZCBFdmVudFNl
bmRlclByb3h5OjprZXlEb3duKFdLU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2Rp
ZmllcnMsIHVuc2kKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KGludCB4
LCBpbnQgeSkKIHsKLSAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4gY2dTY3JvbGxFdmVudCA9IGFk
b3B0Q0YoQ0dFdmVudENyZWF0ZVNjcm9sbFdoZWVsRXZlbnQyKDAsIGtDR1Njcm9sbEV2ZW50VW5p
dExpbmUsIDIsIHksIHgsIDApKTsKKyAgICBhdXRvIGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENH
RXZlbnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAy
LCB5LCB4LCAwKSk7CiAKICAgICAvLyBTZXQgdGhlIENHRXZlbnQgbG9jYXRpb24gaW4gZmxpcHBl
ZCBjb29yZHMgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IHNjcmVlbiwgd2hpY2gKICAgICAvLyBjb21w
ZW5zYXRlcyBmb3IgdGhlIGJlaGF2aW9yIG9mICtbTlNFdmVudCBldmVudFdpdGhDR0V2ZW50Ol0g
d2hlbiB0aGUgZXZlbnQgaGFzCkBAIC04NTksNyArODQ4LDcgQEAgdm9pZCBFdmVudFNlbmRlclBy
b3h5Ojpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiAK
IHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVt
UGhhc2VzKGludCB4LCBpbnQgeSwgaW50IHBoYXNlLCBpbnQgbW9tZW50dW0pCiB7Ci0gICAgUmV0
YWluUHRyPENHRXZlbnRSZWY+IGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGVT
Y3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAyLCB5LCB4LCAwKSk7
CisgICAgYXV0byBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hl
ZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkpOwogCiAgICAg
Ly8gU2V0IHRoZSBDR0V2ZW50IGxvY2F0aW9uIGluIGZsaXBwZWQgY29vcmRzIHJlbGF0aXZlIHRv
IHRoZSBmaXJzdCBzY3JlZW4sIHdoaWNoCiAgICAgLy8gY29tcGVuc2F0ZXMgZm9yIHRoZSBiZWhh
dmlvciBvZiArW05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpdIHdoZW4gdGhlIGV2ZW50IGhhcwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFj
Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCmlu
ZGV4IDY0MTc4MmNhOTdlMWRhZmI5MDA5MTlkYjE5YjM0NzRhNTU0Mzg4ZTUuLjVhNGU5NmI4MWVh
OGNkYTA2YjM3YjQ2OGU1ODg1OWVmNzFlYjQ2YjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KQEAgLTY0LDcgKzY0LDcgQEAgUGxhdGZv
cm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tXZWJWaWV3Q29uZmlndXJhdGlvbiogY29uZmln
dXJhdGlvbiwgY29uc3QgVGUKICAgICBpZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSkK
ICAgICAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0VmFsdWU6
QFlFUyBmb3JLZXk6QCJXZWJLaXQyVXNlUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEiXTsKIAot
ICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb3BpZWRDb25maWd1cmF0aW9u
ID0gYWRvcHROUyhbY29uZmlndXJhdGlvbiBjb3B5XSk7CisgICAgYXV0byBjb3BpZWRDb25maWd1
cmF0aW9uID0gYWRvcHROUyhbY29uZmlndXJhdGlvbiBjb3B5XSk7CiAgICAgV0tQcmVmZXJlbmNl
c1NldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilb
Y29waWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNj
cm9sbGluZyk7CiAKICAgICBOU1JlY3QgcmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgVGVzdENvbnRy
b2xsZXI6OnZpZXdXaWR0aCwgVGVzdENvbnRyb2xsZXI6OnZpZXdIZWlnaHQpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0gYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQppbmRleCAxNGI3ZGM5
ZDBmMjRlYzEwZTc4YWMyYjBlMDM2NWE5ZWE2NDlhYjI2Li5iMjIyODcxY2QwYTM5MTllMzNlZDYw
NmQwZjQ0MTY4ODU2OTNhMjA1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9UZXN0Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9U
ZXN0Q29udHJvbGxlck1hYy5tbQpAQCAtMTg0LDcgKzE4NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9u
JiB0ZXN0CiAgICAgaWYgKCF0ZXN0LnVybENvbnRhaW5zKCJjb250ZW50ZXh0ZW5zaW9ucy8iKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB0ZXN0VVJMID0gYWRv
cHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0ZXN0LnVybCgpKSk7Cisg
ICAgYXV0byB0ZXN0VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCB0ZXN0LnVybCgpKSk7CiAgICAgTlNVUkwgKmZpbHRlclVSTCA9IFsoX19icmlkZ2UgTlNV
UkwgKil0ZXN0VVJMLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aEV4dGVuc2lvbjpAImpzb24iXTsK
IAogICAgIF9fYmxvY2sgTlNTdHJpbmcgKmNvbnRlbnRFeHRlbnNpb25TdHJpbmc7CkBAIC0zNzEs
MTQgKzM3MSwxNCBAQCBzdGF0aWMgTlNTZXQgKnN5c3RlbUhpZGRlbkZvbnRGYW1pbHlTZXQoKQog
CiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gZ2VuZXJhdGVGb250QWxsb3dMaXN0KCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhX
S011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0V0soV0tNdXRh
YmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgZm9yIChOU1N0cmluZyAqZm9udEZhbWlseSBpbiBhbGxv
d2VkRm9udEZhbWlseVNldCgpKSB7CiAgICAgICAgIE5TQXJyYXkgKmZvbnRzRm9yRmFtaWx5ID0g
W1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBhdmFpbGFibGVNZW1iZXJzT2ZGb250
RmFtaWx5OmZvbnRGYW1pbHldOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmFt
aWx5SW5Gb250ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhbZm9udEZh
bWlseSBVVEY4U3RyaW5nXSkpOworICAgICAgICBhdXRvIGZhbWlseUluRm9udCA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW2ZvbnRGYW1pbHkgVVRGOFN0cmluZ10pKTsK
ICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0ocmVzdWx0LmdldCgpLCBmYW1pbHlJbkZvbnQuZ2V0
KCkpOwogICAgICAgICBmb3IgKE5TQXJyYXkgKmZvbnRJbmZvIGluIGZvbnRzRm9yRmFtaWx5KSB7
CiAgICAgICAgICAgICAvLyBGb250IG5hbWUgaXMgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBhcnJh
eS4KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb250TmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW1tmb250SW5mbyBvYmplY3RBdEluZGV4
OjBdIFVURjhTdHJpbmddKSk7CisgICAgICAgICAgICBhdXRvIGZvbnROYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhbW2ZvbnRJbmZvIG9iamVjdEF0SW5kZXg6MF0g
VVRGOFN0cmluZ10pKTsKICAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdC5nZXQo
KSwgZm9udE5hbWUuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzk0LDcgKzM5NCw3IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQogICAgIC8v
IFRlc3RpbmcgdXNlcyBhIHByaXZhdGUgc2Vzc2lvbiwgd2hpY2ggaXMgbWVtb3J5IG9ubHkuIEhv
d2V2ZXIgY3JlYXRpbmcgb25lIGluc3RhbnRpYXRlcyBhIHNoYXJlZCBOU1VSTENhY2hlLAogICAg
IC8vIGFuZCBpZiB3ZSBoYXZlbid0IGNyZWF0ZWQgb25lIHlldCwgdGhlIGRlZmF1bHQgb25lIHdp
bGwgYmUgY3JlYXRlZCBvbiBkaXNrLgogICAgIC8vIE1ha2luZyB0aGUgc2hhcmVkIGNhY2hlIG1l
bW9yeS1vbmx5IGF2b2lkcyB0b3VjaGluZyB0aGUgZmlsZSBzeXN0ZW0uCi0gICAgUmV0YWluUHRy
PE5TVVJMQ2FjaGU+IHNoYXJlZENhY2hlID0KKyAgICBhdXRvIHNoYXJlZENhY2hlID0KICAgICAg
ICAgYWRvcHROUyhbW05TVVJMQ2FjaGUgYWxsb2NdIGluaXRXaXRoTWVtb3J5Q2FwYWNpdHk6MTAy
NCAqIDEwMjQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlza0NhcGFj
aXR5OjAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tQYXRo
Om5pbF0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRD
b250cm9sbGVyTWFjLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRy
b2xsZXJNYWMuaAppbmRleCAwZWFiODk0OWU2YmViZmVlNjU5NDc1ODlhZmI5ZThkOWI4YmUxZWM3
Li4yZDJkMWQ2Yjg0NmU2ODc4YjBiMWViZGMxNjY3YzE3NWU5MTU2NjVmIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaApAQCAtMzEs
MTMgKzMxLDE0IEBAIE9CSkNfQ0xBU1MgV0tXZWJWaWV3OwogCiBuYW1lc3BhY2UgV1RSIHsKIAot
Y2xhc3MgVUlTY3JpcHRDb250cm9sbGVyTWFjIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNv
Y29hIHsKK2NsYXNzIFVJU2NyaXB0Q29udHJvbGxlck1hYyBmaW5hbCA6IHB1YmxpYyBVSVNjcmlw
dENvbnRyb2xsZXJDb2NvYSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9s
bGVyTWFjKFVJU2NyaXB0Q29udGV4dCYgY29udGV4dCkKICAgICAgICAgOiBVSVNjcmlwdENvbnRy
b2xsZXJDb2NvYShjb250ZXh0KQogICAgIHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCBy
ZXBsYWNlVGV4dEF0UmFuZ2UoSlNTdHJpbmdSZWYsIGludCwgaW50KSBvdmVycmlkZTsKICAgICB2
b2lkIHpvb21Ub1NjYWxlKGRvdWJsZSwgSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgZG91Ymxl
IHpvb21TY2FsZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjIsNyArNjMsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGFjdGl2YXRlQXRQb2ludChsb25nIHgsIGxvbmcgeSwgSlNWYWx1ZVJlZiBjYWxs
YmFjaykgb3ZlcnJpZGU7CiAKLXByaXZhdGU6CiAgICAgTlNUYWJsZVZpZXcgKmRhdGFMaXN0U3Vn
Z2VzdGlvbnNUYWJsZVZpZXcoKSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQppbmRleCBjZDExMzI5YTY1NDFk
N2I0ZWI3N2Q3ZWMxNDY4OGU5OTIxZjI3YzUzLi5iNWNiNTE4MTUwNTllN2EwOTNhMTQyMzk5MWU4
OTE3ZTNlZDMwOTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNj
cmlwdENvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlT
Y3JpcHRDb250cm9sbGVyTWFjLm1tCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBVSVNjcmlwdENv
bnRyb2xsZXJNYWM6OmNvbXBsZXRlQmFja1N3aXBlKEpTVmFsdWVSZWYgY2FsbGJhY2spCiAKIHZv
aWQgVUlTY3JpcHRDb250cm9sbGVyTWFjOjpwbGF5QmFja0V2ZW50U3RyZWFtKEpTU3RyaW5nUmVm
IGV2ZW50U3RyZWFtLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewotICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gc3RyZWFtID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBldmVudFN0cmVhbSkpOworICAgIGF1dG8gc3RyZWFtID0gYWRvcHRDRihKU1N0
cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBldmVudFN0cmVhbSkpOwogICAg
IHBsYXlCYWNrRXZlbnRzKHdlYlZpZXcoKSwgbV9jb250ZXh0LCAoX19icmlkZ2UgTlNTdHJpbmcg
KilzdHJlYW0uZ2V0KCksIGNhbGxiYWNrKTsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="425671"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409855</attachid>
            <date>2020-09-27 12:55:13 -0700</date>
            <delta_ts>2020-09-27 15:16:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200927125512.patch</filename>
            <type>text/plain</type>
            <size>697656</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJmZWY0NTFlYS4u
NDE0MjQxMWNiYTZhMmY1NjU2YWU4MDZlZDJjZWYzZDhjOWMxZTBkNCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0MSBAQAorMjAy
MC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlmeWluZywgYnV0IGV2ZW4g
bW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVzdAorICAgICAgICBjb2Rl
IGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkgYW5kIHBhc3RlIHJhdGhl
ciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0ZXIgdGhlIHJlZmFjdG9y
aW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlzIGNvZGUgaXMgd3JpdHRl
biB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGluZyBmb3IgZWFjaCBmdW5j
dGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0
KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0NsYXNzIHdpdGggdGhpcy4g
UmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBjbGVhciB0aGlzIHBhc3Nl
cyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKHVp
RWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBSZW1vdmVkIHVubmVlZGVk
IGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3aGljaCBzdGFydHMgb3V0
IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9y
RHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IpOiBV
c2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoX3JldHVybkV4
cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2UgYW5kIGF1dG8uCisgICAg
ICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAo
Z2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChHQ0NvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6IFJlcGxhY2VkIGdldEpT
Q2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFpblB0ciB0byBtYWtlIGl0
IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVyLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKGVuY29kZUhv
c3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChleGVjQ29tbWFu
ZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAob3Zl
cnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKHF1ZXVlTG9hZENhbGxi
YWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5nQ2FsbGJhY2spOiBEaXR0
by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFs
T2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKTogUmVw
bGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRy
IHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisg
ICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25z
dCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAg
ICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQpOiBTaW1wbGlmaWVk
IHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sp
OiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAorICAgICAgICB0YWJsZSB2
YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBuZWVkIHRvIGJlIG9iamVj
dHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogRGl0dG8u
CisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4K
KyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTogVXNlIGFycmF5TGVuZ3Ro
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDogVXBkYXRlZCBmb3IgdGhl
IGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3Jt
TmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoY3JlYXRlRW1w
dHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50
TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
bGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
VmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oOiBSZW1vdmVkIHVubmVl
ZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGguCisgICAgICAgIFJlbW92
ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIgSlNWYWx1ZUlzT2JqZWN0
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSBj
b25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoY3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09iamVjdC4KKyAgICAgICAg
KHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSBjb25zdCk6
IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRnJh
bWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERlbGVnYXRlIGRpZENsZWFy
V2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6CisgICAgICAgIFVzZSBhdXRv
LiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LiBTaW1wbGlmaWVkIG9i
amVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0TlMgaW5zdGVhZCBvZiBy
ZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRDbGVhcldpbmRvd09iamVj
dEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNlIGNyZWF0ZUpTU3RyaW5n
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAg
ICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVuZ3RoLgorCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHA6CisgICAgICAgIChXVFI6
OnRvT3B0aW9uYWxCb29sKTogUmVuYW1lZCBmcm9tIEpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbC4K
KyAgICAgICAgKFdUUjo6dG9PcHRpb25hbERvdWJsZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpt
YWtlVmFsdWUpOiBBZGRlZCB3aXRoIG92ZXJsb2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAg
ICAgUmVwbGFjZWQgSlNWYWx1ZVRvTnVsbGFibGVCb29sZWFuIGFuZCBKU1ZhbHVlTWFrZVN0cmlu
Z09yTnVsbC4KKyAgICAgICAgKFdUUjo6Y3JlYXRlSlNTdHJpbmcpOiBBZGRlZCB3aXRoIG92ZXJs
b2FkcyBmb3IgdmFyaW91cyB0eXBlcy4KKyAgICAgICAgKFdUUjo6cHJvcGVydHkpOiBBZGRlZC4K
KyAgICAgICAgKFdUUjo6c3RyaW5nUHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Ym9v
bGVhblByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChXVFI6Om51bWVyaWNQcm9wZXJ0eSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjpvYmplY3RQcm9wZXJ0eSk6IFJlZmFjdG9yZWQgdG8gY2FsbCBw
cm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBBZGRlZC4KKyAgICAgICAgKFdU
Ujo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6Y2FsbCk6
IFJlZmFjdG9yZWQgdG8gbGV0IG9iamVjdFByb3BlcnR5IGRvIG1vcmUgb2YgdGhlIG51bGwgY2hl
Y2tpbmcuCisgICAgICAgIChXVFI6OmNhbGxDb25zdHJ1Y3Rvcik6IERpdHRvLgorICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaDogVXBkYXRlZCBmb3IgdGhlIGFi
b3ZlLgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5o
OiBSZWR1Y2VkIGluY2x1ZGVzIGEgYml0LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU1dyYXBwZXIuaDogQWRkZWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisKKyAg
ICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQu
Y3BwOgorICAgICAgICAoVUlTY3JpcHRDb250ZXh0OjpVSVNjcmlwdENvbnRleHQpOiBQYXNzIGZl
d2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LgorICAgICAgICAoVUlTY3JpcHRDb250
ZXh0OjpydW5VSVNjcmlwdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKFVJU2NyaXB0
Q29udGV4dDo6b2JqZWN0RnJvbVJlY3QgY29uc3QpOiBVc2Ugc2V0UHJvcGVydHkuCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmg6
IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHA6CisgICAgICAgIChXVFI6
OnRvRGV2aWNlT3JpZW50YXRpb24pOiBVc2UgY3JlYXRlSlNTdHJpbmcgYW5kIEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcuCisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6bWFr
ZVdpbmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKworICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbToKKyAgICAg
ICAgKC1bTGF5b3V0VGVzdFNwZWxsQ2hlY2tlciBzZXRSZXN1bHRzRnJvbUpTVmFsdWU6aW5Db250
ZXh0Ol0pOiBVc2UgY3JlYXRlSlNTdHJpbmcKKyAgICAgICAgYW5kIHJlbW92ZWQgdW5uZWVkZWQg
dXNlIG9mIGxyb3VuZGwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlG
dW5jdGlvbnMuaDogQWRkZWQuIENvbnRhaW5zIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworICAgICAg
ICBmb3IgZGVhbGluZyB3aXRoIFdLRGljdGlvbmFyeVJlZi4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oOiBJbml0aWFsaXplIGRhdGEgbWVtYmVycy4KKwor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwOgor
ICAgICAgICAoR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9uKTogVXNlIE9wdGlv
bmFsIGluc3RlYWQgb2Ygc2VwYXJhdGUgYm9vbC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdp
bmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG06CisgICAgICAgIChf
Z2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZpbGUpOiBVc2Ugc3RhdGljIGluaXRpYWxpemF0aW9uIGFu
ZCBhIGxhbWJkYSBpbnN0ZWFkIG9mCisgICAgICAgIGFuIGlmIHN0YXRlbWVudCB0byBpbml0aWFs
aXplLgorICAgICAgICAoX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yKTogVXNlIHRvT3B0aW9uYWxC
b29sIGFuZCBjcmVhdGVKU1N0cmluZy4gQWxzbyBhZGRlZAorICAgICAgICBzdXBwb3J0IGZvciBu
dWxsYWJsZSBkb3VibGVzIGFuZCB1c2VkIGF1dG8gYSBiaXQgbW9yZS4KKyAgICAgICAgKF9yZXR1
cm5FeHByZXNzaW9uKTogVXNlIG1ha2VWYWx1ZS4KKworICAgICAgICAqIEluamVjdGVkQnVuZGxl
L0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOiBNYWRlIHRoZSBvcHRpb25hbCBhcmd1bWVudHMgdG8g
dGhlCisgICAgICAgIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIGZ1bmN0aW9uICJkb3VibGU/
IiBpbnN0ZWFkIG9mICJvYmplY3QiLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6Z2V0
TWVudUl0ZW1DaGlsZHJlbkNhbGxiYWNrKTogVXNlIGF1dG8gYW5kIG5vdCBKU1ZhbHVlVG9PYmpl
Y3QuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogTW92ZWQgdG8gSlNCYXNpY3MuaC9jcHAu
CisgICAgICAgIChXVFI6OnBhcnNlVG91Y2hNb2RpZmllcik6IEFkZGVkLiBGYWN0b3JlZCBvdXQg
b2YgdGhlCisgICAgICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9kaWZpZXIg
ZnVuY3Rpb24uCisgICAgICAgIChXVFI6OnBhcnNlTW9kaWZpZXJBcnJheSk6IFVzZSBjcmVhdGVK
U1N0cmluZyBhbmQgcmVtb3ZlIHVubmVlZGVkIGlnbm9yZWQKKyAgICAgICAgZXhjZXB0aW9uIG91
dCBhcmd1bWVudCwgc2luY2UgdGhhdCBpcyBvcHRpb25hbC4gQWxzbyBhZGRlZCBvdmVybG9hZCB0
aGF0CisgICAgICAgIGdldHMgdGhlIGNvbnRleHQuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp+RXZlbnRTZW5kaW5nQ29udHJvbGxlcik6IERl
bGV0ZWQuCisgICAgICAgIChXVFI6OmNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkpOiBVc2UgYWRvcHRX
SyBhbmQgc2V0VmFsdWUuIFJldHVybiBhIFdLUmV0YWluUHRyLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZURvd24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlVXApOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8p
OiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlcy4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNsaWNrKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnN0YXJ0QW5kQ2Fu
Y2VsTW91c2VGb3JjZUNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6Om1vdXNlRm9yY2VEb3duKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VVcCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpsZWFwRm9yd2FyZCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNr
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlS2V5RG93bk1lc3Nh
Z2VCb2R5KTogVXNlIHNldFZhbHVlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjprZXlEb3duKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24p
OiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZVNjcm9sbEJ5KTogVXNlIHNldFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcyk6IFVzZQorICAgICAgICBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3Vz
TW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQKKyAgICAgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRl
eHRDbGljayk6IFVzZSBhdXRvIGFuZCBub3QgSlNWYWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RS
Ojp0b01vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMpOiBVc2UgYm9vbGVhblByb3BlcnR5LgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjphZGRUb3VjaFBvaW50KTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6dXBkYXRlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoUG9pbnRSYWRpdXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hTdGFy
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaE1v
dmUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hF
bmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hD
YW5jZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2xl
YXJUb3VjaFBvaW50cyk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpyZWxlYXNlVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9F
dmVudFNlbmRpbmdDb250cm9sbGVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAgICAg
RGVsZXRlZCB2YXJpb3VzIHVubmVlZGVkIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6
R0NDb250cm9sbGVyOjpHQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0Nv
bnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpHQ0NvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgIEFsc28gbWFya2VkIHRoZSBjbGFzcyBm
aW5hbC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkQ3JlYXRlUGFn
ZSk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRS
ZWNlaXZlTWVzc2FnZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cG9zdFBhZ2VNZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpy
ZXBvcnRMaXZlRG9jdW1lbnRzKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKTogVXNlIGRpY3Rpb25hcnlW
YWx1ZSwKKyAgICAgICAgYm9vbGVhblZhbHVlLCBwb3N0UGFnZU1lc3NhZ2UsIHZhbHVlLCBhbmQg
bW9yZSB0byBzdHJlYW1saW5lLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6Ym9vbGVh
bkZvcktleSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzdHJpbmdG
b3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0
aW5nKTogVXNlIGJvb2xlYW5WYWx1ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRv
bmUpOiBVc2Ugc3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpjbG9z
ZU90aGVyUGFnZXMpOiBVc2Ugc2V0VmFsdWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpkdW1wVG9TdGRFcnIpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlCisgICAgICAgIChX
VFI6OkluamVjdGVkQnVuZGxlOjpvdXRwdXRUZXh0KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUpOiBVc2UgcG9z
dFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdEFkZENocm9t
ZUlucHV0RmllbGQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RS
ZW1vdmVDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0Rm9jdXNXZWJWaWV3KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpwb3N0U2V0V2luZG93SXNLZXkpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRWaWV3U2l6ZSk6IFVzZSBzZXRWYWx1ZSBhbmQgdG9X
Sy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNh
dGlvbkNsaWNrKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnBvc3RTZXRBZGRzVmlzaXRlZExpbmtzKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIHNl
dFZhbHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UsCisgICAgICAgIGFuZCB1c2UgT3B0aW9uYWwgaW5z
dGVhZCBvZiBib29sL2RvdWJsZSBwYWlycy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFVzZSBwb3N0UGFn
ZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjppc0dlb2xvY2F0aW9uUHJv
dmlkZXJBY3RpdmUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQgY29uc3Qp
OiBVc2UgdG9XSyBhbmQgdWludDY0VmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
OjpzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1p
c3Npb25Gb3JPcmlnaW4pOiBVc2Ugc2V0VmFsdWUKKyAgICAgICAgYW5kIHBvc3RQYWdlTWVzc2Fn
ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbik6IFVz
ZXQgc2V0VmFsdWUKKyAgICAgICAgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUpOiBVc2Ugc2V0VmFsdWUgYW5kIHBv
c3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEhpZGRlbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0Q2FjaGVNb2RlbCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1
ZSBjb25zdCk6IFVzZSB0b1dLIGFuZCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpwcm9jZXNzV29ya1F1ZXVlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlQmFja05hdmlnYXRpb24pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24pOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZCk6IFVzZSBzZXRWYWx1
ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cXVldWVSZWxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVl
TG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cXVl
dWVOb25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OnBvc3RNZXNzYWdlKTog
QWRkZWQuIE92ZXJsb2FkcyBmb3IgbWFueSB0eXBlcyB0byBrZWVwIGNhbGxlciBjb2RlIHN0cmVh
bWxpbmVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OnBvc3RQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaDogVXBkYXRlZCBmb3IgdGhlIGFib3Zl
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6cHJvcGVy
dHlWYWx1ZURvdWJsZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpwcm9wZXJ0eVZhbHVlSW50KTog
RGl0dG8uCisgICAgICAgIChXVFI6Om51bWVyaWNXaW5kb3dQcm9wZXJ0eSk6IFJlbmFtZWQgZnJv
bSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZSBmb3IgYnJldml0eQorICAgICAgICBhbmQgZm9y
IGNvbnNpc3RlbmN5IHdpdGggSlNCYXNpY3MuaCBmdW5jdGlvbnMuCisgICAgICAgIChXVFI6OmR1
bXBQYXRoKTogVXNlIHN0cmluZ1Byb3BlcnR5LCBvYmplY3RQcm9wZXJ0eSwgYW5kIG1ha2VTdHJp
bmcuCisgICAgICAgIChXVFI6OnJhbmdlVG9TdHIpOiBVc2UgYXV0bywgbnVtZXJpY1Byb3BlcnR5
LCBhbmQgbWFrZVN0cmluZy4KKyAgICAgICAgKFdUUjo6TmF2aWdhdGlvblR5cGVUb1N0cmluZyk6
IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpzdHJpbmcpOiBSZW5hbWVkIGZyb20gc2VjdXJpdHlP
cmlnaW5Ub1N0ci4gVXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6OmZyYW1lVG9TdHIpOiBV
c2UgYXV0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVz
dCk6IFJlbW92ZWQgdW5uZWVkZWQgbG9jYWwuCisgICAgICAgIChXVFI6OmR1bXBGcmFtZURlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OmR1
bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6ZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQpOiBVc2Ug
YXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOiBV
cGRhdGUgZm9yIG5hbWUgY2hhbmdlLgorICAgICAgICAoV1RSOjp0b0pTKTogRGVsZXRlZC4gVXNl
IGZ1bmN0aW9ucyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6aGFzRG9j
dW1lbnRFbGVtZW50KTogVXNlIG9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHksCisgICAgICAgIGFuZCBwYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93
T2JqZWN0LgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24pOiBTdHJlYW1saW5lIGNvZGUgYSBiaXQuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOiBVc2UgbWFrZVN0
cmluZy4KKyAgICAgICAgKFdUUjo6bGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5RdW90YSk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKTogRGl0dG8uCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpUZXN0UnVubmVyKTogVXNlIHRvV0suCisgICAgICAgIChX
VFI6OnBhZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6bWFpbkZyYW1lKTogQWRkZWQuCisgICAg
ICAgIChXVFI6Om1haW5KU0NvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNwbGF5
QW5kVHJhY2tSZXBhaW50cyk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjp0b1dLKTogQWRkZWQg
b3ZlcmxvYWQgZm9yIGRvdWJsZS4KKyAgICAgICAgKFdUUjo6Y3JlYXRlV0tEaWN0aW9uYXJ5KTog
QWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0dXJuVmFs
dWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmlu
Z0Jvb2xlYW4pOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VXaXRoUmV0dXJuVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRkZWQuCisgICAgICAgIChX
VFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdVSW50NjQpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNob3VsZER1bXBQaXhlbHMgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldER1bXBQaXhl
bHMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6d2hhdFRvRHVtcCBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5n
VUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXaGF0VG9EdW1wKTogVXNlIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdhaXRV
bnRpbERvbmUpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2hvdWxkV2FpdFVudGlsRG9uZSBjb25zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hv
dWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmV4ZWNDb21tYW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OmZpbmRPcHRpb25zRnJv
bUFycmF5KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLCBhbmQgY3JlYXRlSlNTdHJp
bmcuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmcpOiBVc2UgcGFnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZmluZFN0cmluZ01hdGNoZXNJblBhZ2UpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVwbGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKTog
VXNlIG1haW5KU0NvbnRleHQgYW5kIGFycmF5TGVuZ3RoIGFuZAorICAgICAgICByZW1vdmVkIHVu
bmVlZGVkIGNhbGwgdG8gc3RkOjpyb3VuZC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBbGxEYXRhYmFzZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKTogVXNlIHBhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VG
b3JPcmlnaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6c3RyaW5nQXJyYXlUb0pTKTogVHdlYWtl
ZCBjb2Rpbmcgc3R5bGUgYSBiaXQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om9yaWdpbnNX
aXRoQXBwbGljYXRpb25DYWNoZSk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc0NvbW1hbmRFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dENhbk9wZW5XaW5kb3dzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TWVkaWFEZXZpY2VzRW5hYmxlZCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJSVENNRE5TSUNFQ2FuZGlk
YXRlc0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0Q3VzdG9t
VXNlckFnZW50KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9kZXJuTWVkaWFDb250cm9sc0Vu
YWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViR0wyRW5hYmxl
ZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXcml0YWJsZVN0cmVhbUFQ
SUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VHJhbnNmb3Jt
U3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRS
ZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRHZW5lcmljQ3VlQVBJRW5hYmxlZCk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSk6IFVz
ZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFBs
dWdpbnNFbmFibGVkKTogVXNlIG92ZXJyaWRlUHJlZmVyZW5jZS4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNQYWdlQm94VmlzaWJsZSk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcik6IFJlbW92ZWQgbG9jYWwuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldEF1ZGlvUmVzdWx0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVy
dHkuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IpOiBVc2UgcGFn
ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQpOiBVc2UgcmFuZ2Ut
YmFzZWQgZm9yIGxvb3AuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKTogVXNlIG1haW5GcmFtZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGV4dERpcmVjdGlvbik6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiBj
b25zdCk6CisgICAgICAgIFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyRGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKToKKyAgICAgICAgVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayk6
IENoYW5nZWQgbWFwIHRvIHN0b3JlIG9iamVjdHMgaW5zdGVhZCBvZiB2YWx1ZXMuCisgICAgICAg
IChXVFI6OmNhbGxUZXN0UnVubmVyQ2FsbGJhY2spOiBTaW1wbGlmeSBzaW5jZSBtYXAgaGFzIG9i
amVjdHMuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
clRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0QWx3YXlzQWNjZXB0Q29va2llcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMpOiBV
c2UgYXV0byBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxl
U2hlZXRFbmFibGVkKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24pOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpkZW55V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25Q
ZXJtaXNzaW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKTogVXNlIE9wdGlvbmFsPGRvdWJs
ZT4gaW5zdGVhZCBvZiBib29sL2RvdWJsZQorICAgICAgICBwYWlycywgbGV0dGluZyB0aGUgSURM
IGJpbmRpbmdzIGRvIHRoZSB3b3JrIGZvciB1cy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKTogUmVtb3ZlZCBsb2Nh
bC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNEb2luZ01lZGlhQ2FwdHVyZSBjb25zdCk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3Jp
Z2luKTogUmVtb3ZlZCBsb2NhbHMuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9y
T3JpZ2luKTogREl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlldyk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnF1
ZXVlTG9hZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1M
U3RyaW5nKTogUmVtb3ZlZCBhIGxvY2FsLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1
ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVldWVO
b25Mb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFJl
amVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cyk6CisgICAgICAgIFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGRM
b2dEb3dubG9hZENhbGxiYWNrcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCBjb25zdCk6IFVzZSBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldEJsb2NrQWxsUGx1Z2lucyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6ZmFpbE5leHROZXdDb2RlQmxvY2spOiBVc2UgbWFpbkpTQ29udGV4
dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdDb21waWxlcyk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpuZXZlcklubGluZUZ1bmN0aW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xp
Y3lBZnRlckRlbGF5KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVM
aW1pdHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkRG93bmxv
YWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MpOiBV
c2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHQpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0Q2FsbGJhY2spOiBVc2UgbWFpbkpT
Q29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dlZE1lbnVBY3Rpb25z
KTogVXNlIG1haW5KU0NvbnRleHQsIGFycmF5TGVuZ3RoLAorICAgICAgICBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppbnN0YWxsQ3VzdG9tTWVudUFjdGlv
bik6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFy
U3RhdGlzdGljc0RhdGFGb3JEb21haW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRh
YmFzZSk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlz
U3RhdGlzdGljc0VwaGVtZXJhbCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVy
bmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1
Z01vZGUpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljKTog
RGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
VmVyeVByZXZhbGVudFJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojppc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpp
c1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0VXNlSVRQRGF0YWJhc2UpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJl
ZCk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbik6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1l
dHJ5Q2FsbGJhY2spOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Vw
ZGF0ZUNvb2tpZUJsb2NraW5nKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5KTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRp
c3RpY3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBVc2UgcG9zdE1l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RlbGV0ZUNvb2tp
ZXNGb3JIb3N0KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpoYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9u
KTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVy
KTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3Rh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vz
c0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6bWFrZURvbWFpbnNWYWx1ZSk6IEZhY3Rv
cmVkIG91dC4gVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNh
bGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayk6IFVzZSBtYWtlRG9t
YWluc1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpsb2FkZWRTdWJyZXNvdXJjZURv
bWFpbnMpOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNhbGxE
aWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2spOiBVc2UgbWFrZURvbWFp
bnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNs
ZWFyTW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpy
ZW1vdmVNb2NrTWVkaWFEZXZpY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
cmVzZXRNb2NrTWVkaWFEZXZpY2VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjppc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCk6IFVzZQorICAgICAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6Y29ubmVjdE1vY2tHYW1lcGFkKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZERldGFpbHMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRCdXR0b25W
YWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxl
cyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAg
ICAgIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9w
ZW5QYW5lbEZpbGVzTWVkaWFJY29uKTogVXNlIG1haW5KU0NvbnRleHQgYW5kIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRp
YWxzKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRP
TUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyRE9NQ2FjaGVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
Omhhc0RPTUNhY2hlKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9v
bGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZG9tQ2FjaGVTaXplKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKTogVXNlIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1h
bmlmZXN0VGhlbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
aW5qZWN0VXNlclNjcmlwdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZv
clRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2VydmljZVdv
cmtlckZldGNoVGltZW91dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphZGRU
ZXN0S2V5VG9LZXljaGFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
blVwS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6a2V5RXhpc3Rz
SW5LZXljaGFpbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxi
YWNrQ2FsbHNDb3VudCk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJu
aW5nVUludDY0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREaXNtaXNzSmF2
YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KTogVXNlCisgICAgICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFib3J0TW9kYWwpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbik6IFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xl
YXJBZENsaWNrQXR0cmlidXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRB
ZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRl
c3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T2Zmc2NyZWVuQ2Fu
dmFzRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6Omhhc0FwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQXBwQm91
bmRTZXNzaW9uKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFwcEJvdW5kRG9tYWlucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxl
bmd0aCwgY3JlYXRlSlNTdHJpbmcsCisgICAgICAgIGFuZCB0b1dLLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpwb3N0TWVzc2FnZSk6IEFkZGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4g
QWxzbyBjaGFuZ2VkCisgICAgICAgIG92ZXJyaWRlUHJlZmVyZW5jZSBvdCBhIHN0YXRpYyBtZW1i
ZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXh0SW5wdXRDb250cm9s
bGVyOjpUZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6flRleHRJbnB1dENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2Jh
bE9iamVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IERlbGV0ZWQuIFVz
ZSB0aGUgb25lIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChXVFI6OmNyZWF0ZUNvbXBv
c2l0aW9uSGlnaGxpZ2h0RGF0YSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3Ig
dGhlIGFib3ZlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9p
b3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoV1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVs
ZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZyb20gSlNCYXNpY3MuaCBub3cuCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMp
OiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9m
QXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb21wdXRlZFJvbGVTdHJpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24gY29uc3Qp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNj
cmlwdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0ZvY3VzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5k
c0ZvclJhbmdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJv
d3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mVmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4gY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVl
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZG9jdW1lbnRVUkkpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbiBjb25z
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxh
cHNlZCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NpbmdsZUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNNdWx0aUxpbmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2UpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OkV2ZW50U2VuZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0
aW9uLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSk6
IERlbGV0ZWQuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21h
Yy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tOgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5hbWVkIGZyb20gbWFrZUFycmF5UmVmRm9yQXJyYXku
CisgICAgICAgIChXVFI6Om1ha2VKU09iamVjdCk6IFJldHVybiBhIEpTT2JqZWN0UmVmLiBSZW5h
bWVkIGZyb20gbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkuCisgICAgICAgIChXVFI6Om1ha2VW
YWx1ZVJlZkZvclZhbHVlKTogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICAoV1RSOjpz
ZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBV
c2UgdG9XVEZTdHJpbmcKKyAgICAgICAgYW5kIGFycmF5TGVuZ3RoLgorCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5h
bWUpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAo
V1RSOjpjcmVhdGVFbXB0eUpTU3RyaW5nKTogRGVsZXRlZC4gVXNlIGNyZWF0ZUpTU3RyaW5nIGZy
b20gSlNCYXNpY3MuaCBpbnN0ZWFkLgorICAgICAgICAoV1RSOjpjb252ZXJ0VmVjdG9yVG9PYmpl
Y3RBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6Om1ha2VKU0FycmF5KTogUmVuYW1lZCBm
cm9tIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5LgorICAgICAgICAoV1RSOjpzZWxlY3RUZXh0
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nIGFuZCBh
cnJheUxlbmd0aC4KKyAgICAgICAgKFdUUjo6c2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVGb3JDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dIZWFkZXJzIGNvbnN0KTogVXNlIG1ha2VKU0FycmF5LgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEFycmF5QXR0cmlidXRl
VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBVc2UgY3JlYXRlSlNT
dHJpbmcuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9j
dW1lbnRVUkkpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Omlu
c3BlY3RvclRlc3RTdHViVVJMKTogUmVtb3ZlIGxvY2Fscy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmg6IEFkZGVkIHRvV0tTdHJpbmcgb3ZlcmxvYWQgdGhh
dCBjb252ZXJ0cyBmcm9tCisgICAgICAgIGEgSlNWYWx1ZVJlZiwgSlNTdHJpbmdSZWYsIG9yIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhbmQgdG9XSyBvdmVybG9hZCB0aGF0IGNvbnZlcnRzCisg
ICAgICAgIGZyb20gYSBjb25zdCBjaGFyKi4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZSk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVD
b250ZXh0Q29uZmlndXJhdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6
IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUxpdmVE
b2N1bWVudHNBZnRlclRlc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmNoZWNrRm9yV29ybGRMZWFrcyk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpjb250ZW50RXh0
ZW5zaW9uSlNPTlBhdGgpOiBVc2UgdG9TVEQuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
Ojpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdCk6IFVzZSB0b1dLLgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIHN0cmluZ1ZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdCk6IFVz
ZSBkaWN0aW9uYXJ5VmFsdWUgYW5kCisgICAgICAgIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOiBV
c2UgZGljdGlvbmFyeVZhbHVlLAorICAgICAgICBzdHJpbmdWYWx1ZSwgdWludDY0VmFsdWUsIGRv
dWJsZVZhbHVlLCBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
aWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgdG9X
Sy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBVc2UgYXV0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24pOiBSZW1vdmVkIGxvY2FsLgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogVXNl
IGF1dG8gYW5kIHRvV1RGU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2YgdG9TVEQuCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBP
cHRpb25hbCBpbnN0ZWFkIG9mIHBhaXJzCisgICAgICAgIG9mIGJvb2wgYW5kIGRvdWJsZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2VyTWVkaWFQZXJtaXNz
aW9uRm9yT3JpZ2luKTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
ZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJ
bk5ldHdvcmtQcm9jZXNzKTogVXNlIHRvV0suCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6cG9zdFBhZ2VN
ZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpUZXN0SW5jb3Zh
dGlvbik6IFVzZSB0b1dURlN0cmluZy4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmNy
ZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOiBVc2UgYXV0byBhbmQgc2V0VmFsdWUuCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjppbnZva2UpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFu
ZCBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlIHBvc3RQYWdlTWVzc2FnZQorICAgICAgICBhbmQg
c3RyaW5nVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3lu
Y2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlCisgICAgICAgIGRpY3Rpb25h
cnlWYWx1ZSwgYm9vbGVhblZhbHVlLCB2YWx1ZSwgc3RyaW5nVmFsdWUsIGRvdWJsZVZhbHVlLCBh
bmQKKyAgICAgICAgb3B0aW9uYWxEb3VibGVWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OnVpU2NyaXB0RGlkQ29tcGxldGUpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlIGFuZCBzZXRW
YWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZEJlZ2luU3dpcGUpOiBVc2Ug
cG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6d2lsbEVuZFN3
aXBlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRFbmRTd2lwZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3ZlU3dpcGVTbmFw
c2hvdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6bm90aWZ5RG93bmxv
YWREb25lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0
YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVt
b3ZhbCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxk
RG93bmdyYWRlUmVmZXJyZXIpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdEludm9jYXRpb246OmRpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRUb1NhbWVTaXRl
U3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
U2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
SW52b2NhdGlvbjo6ZGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QmxvY2tDb29r
aWVzRm9ySG9zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
U3RhdGlzdGljc0RlYnVnTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlv
bjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldExhc3RTZWVuKTogRGl0dG8uCisgICAgICAgIChX
VFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRNZXJnZVN0YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0RXhwaXJlZFN0YXRpc3RpYyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0SGFzSGFk
VXNlckludGVyYWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpk
aWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92ZUFsbFNlc3Npb25DcmVk
ZW50aWFscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QXBw
Qm91bmREb21haW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpwZXJm
b3JtQ3VzdG9tTWVudUFjdGlvbik6IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFk
ZGVkIEpTQmFzaWNzLmggdG8gRGljdGlvbmFyeUZ1bmN0aW9ucy5oIHRvIGFwcHJvcHJpYXRlIHRh
cmdldHMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV1RSOjpTY3JpcHRJdGVtOjpTY3JpcHRJdGVtKTogVXNlIHRvV0suCisgICAg
ICAgIChXVFI6OldvcmtRdWV1ZU1hbmFnZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29j
b2EuaDogTWFrZSBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbToKKyAgICAgICAgKFdUUjo6
VUlTY3JpcHRDb250cm9sbGVyQ29jb2E6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IFVzZSB0b1dURlN0
cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5oOiBNYXJrZWQgdGhlIGNsYXNzIGZpbmFsIGFuZCBtYWRlCisgICAgICAgIG1vc3QgZnVu
Y3Rpb25zIHByaXZhdGUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogRGVsZXRlZC4g
VXNlIHRoZSBvbmUgaW4gSlNCYXNpY3MuaC4KKyAgICAgICAgKFdUUjo6cGFyc2VNb2RpZmllckFy
cmF5KTogVXNlIHRoZSBuZXcgdG9XVEZTdHJpbmcgb3ZlcmxvYWQuCisgICAgICAgIChXVFI6OlVJ
U2NyaXB0Q29udHJvbGxlcklPUzo6dHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZCk6
IERpdHRvLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94
eS5tbToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eSk6
IEluaXRpYWxpemUgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIChXVFI6OkV2ZW50
U2VuZGVyUHJveHk6OmtleURvd24pOiBVc2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaDogTWFya2VkIHRoZSBjbGFz
cyBmaW5hbCBhbmQgbWFkZQorICAgICAgICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCiAyMDIw
LTA5LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
cnVuLXdlYmtpdC10ZXN0cyBjb2RlIHRoYXQgc3RyaXBzIHRyYWlsaW5nIHNwYWNlcyB3aGVuIGNv
bXBhcmluZyBleHBlY3RlZC50eHQgZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCAxYTBjMTY3MDZiMmFlNDI2MGUzMmQyOTA0
NDliZjJkNjVjZmEzZGZhLi45ZTI0MGU1NTljYTQ1MjMzNzQ3OTg0YTZiYTkzNTE1NGFhY2NkN2Rk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2luY2x1
ZGUgIkpTQmFzaWNzLmgiCiAKIC8vIFN0YXRpYyBWYWx1ZSBHZXR0ZXJzCiAKQEAgLTQ3LDE1ICs0
OCw5IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFJvb3RFbGVtZW50Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPCiAKIC8vIE9iamVjdCBDcmVhdGlvbgogCi12
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250
ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlclN0ciA9
IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlciIpKTsKLSAgICAKLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlNDbGFzcygpOwot
ICAgIEpTVmFsdWVSZWYgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJPYmplY3QgPSBKU09iamVjdE1h
a2UoY29udGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNzUmVm
KTsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlclN0ci5nZXQoKSwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJPYmpl
Y3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShj
b250ZXh0LCAiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCBKU09iamVjdE1ha2UoY29udGV4dCwg
Y3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlzKSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGxv
Z0ZvY3VzRXZlbnRzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVm
KikKQEAgLTE1Miw5ICsxNDcsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRQbGF0Zm9ybU5hbWVD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpcwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBwbGF0Zm9ybU5hbWUuZ2V0KCkpOwogfQogCi1K
U0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWlu
UHRyPEpTQ2xhc3NSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKCkK
IHsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CiAgICAg
ICAgIHsgImxvZ0ZvY3VzRXZlbnRzIiwgbG9nRm9jdXNFdmVudHNDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJsb2dWYWx1ZUNoYW5nZUV2ZW50cyIsIGxvZ1ZhbHVlQ2hhbmdlRXZlbnRzQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAibG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMiLCBsb2dT
Y3JvbGxpbmdTdGFydEV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkBAIC0xNjYsMjEgKzE2MSwxOCBA
QCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKICAgICAg
ICAgeyAiZW5hYmxlRW5oYW5jZWRBY2Nlc3NpYmlsaXR5IiwgZW5hYmxlRW5oYW5jZWRBY2Nlc3Np
YmlsaXR5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAgICB9OwotCi0g
ICAgc3RhdGljIEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBKU1N0YXRpY1ZhbHVlIHZhbHVlc1tdID0gewogICAgICAgICB7ICJmb2N1c2VkRWxl
bWVudCIsIGdldEZvY3VzZWRFbGVtZW50Q2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
cm9vdEVsZW1lbnQiLCBnZXRSb290RWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgImVuaGFuY2VkQWNjZXNzaWJpbGl0eUVuYWJsZWQiLCBnZXRFbmhhbmNlZEFjY2Vzc2liaWxp
dHlFbmFibGVkQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAicGxhdGZvcm1OYW1lIiwg
Z2V0UGxhdGZvcm1OYW1lQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwLCAw
IH0KICAgICB9OwotCi0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlv
biA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBzdGF0aWMg
Y29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xh
c3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCAwLCB2YWx1ZXMsIGZ1
bmN0aW9ucywKICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICAgIH07
Ci0KLSAgICByZXR1cm4gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1
cm4gYWRvcHQoSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbikpOwogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IDFkYzdkM2I1NjNhMTU0
ZjRjZTliZjdhMzAzMGM4YzVhNzY5N2YzOWEuLjhhMjg3YzQ4YjFkZjUzNmI0NzViNjE4NDE3YzI2
MTM1ZmIzODYxMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcigpOwogICAgIH5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwogCi0g
ICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBDb250cm9sbGVyIE1ldGhvZHMgLSBw
bGF0Zm9ybS1pbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMKICAgICBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IHJvb3RFbGVtZW50KCk7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKKyAgICBzdGF0
aWMgSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gY3JlYXRlSlNDbGFzcygpOwogCiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIEhXSU5FVkVOVEhPT0sgbV9mb2N1c0V2ZW50SG9vayB7IG51bGxwdHIgfTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKaW5k
ZXggMGU1YTUwZjZiOWQzY2U1Y2E3N2JhNDQ4Njg3YzAwOWNiYjE3NWQyMC4uOGVmODVlZWRmMDg0
ZDY3NjIyNzFjYWYyYzhmNDRhYjg1NDc5MjY3MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCBzdGF0aWMg
SlNWYWx1ZVJlZiB1aUVsZW1lbnRDb3VudEZvclNlYXJjaFByZWRpY2F0ZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LAogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHN0YXJ0RWxlbWVu
dCA9IG51bGxwdHI7CiAgICAgYm9vbCBpc0RpcmVjdGlvbk5leHQgPSB0cnVlOwogICAgIEpTVmFs
dWVSZWYgc2VhcmNoS2V5ID0gbnVsbHB0cjsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
c2VhcmNoVGV4dCA9IG51bGxwdHI7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNlYXJj
aFRleHQ7CiAgICAgYm9vbCB2aXNpYmxlT25seSA9IGZhbHNlOwogICAgIGJvb2wgaW1tZWRpYXRl
RGVzY2VuZGFudHNPbmx5ID0gZmFsc2U7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gNSAmJiBh
cmd1bWVudENvdW50IDw9IDYpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Jp
bmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbSBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQppbmRleCBlY2U1MWVh
MzlhNTE2ODM1NGJkNTY5NDYzNTkwODZkOTAyMmVhMTlkLi4xNGM2MjcwZjgyMzFkYzBmMjZhMDVl
Njk1ZGE4NDdiZGY4ZTQ4YzhlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9CaW5k
aW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCkBAIC0xLDQgKzEs
NCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzMSwxMCArNDMxLDEwIEBAIHN1
YiBfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IKIHsKICAgICBteSAoJHNlbGYsICR0eXBlLCAkYXJn
dW1lbnROYW1lKSA9IEBfOwogCi0gICAgcmV0dXJuICJKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4o
Y29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAk
dHlwZS0+aXNOdWxsYWJsZTsKKyAgICByZXR1cm4gInRvT3B0aW9uYWxCb29sKGNvbnRleHQsICRh
cmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHR5cGUtPmlzTnVs
bGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5h
bWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuICIkYXJndW1lbnRO
YW1lIiBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKLSAgICByZXR1cm4gImFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikpIiBpZiAkJHNl
bGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJjcmVh
dGVKU1N0cmluZyhjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0
b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOwogICAgIHJldHVybiAiSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0t
PklzUHJpbWl0aXZlVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuICJ0byIgLiBfaW1wbGVtZW50YXRp
b25DbGFzc05hbWUoJHR5cGUpIC4gIihjb250ZXh0LCAkYXJndW1lbnROYW1lKSI7CiB9CkBAIC00
NzIsMTEgKzQ3MiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBteSAoJHNlbGYsICRy
ZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAiSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1bmRlZmluZWQiOwot
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lv
bn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5cGUtPmlz
TnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufSki
IGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlwZS0+aXNOdWxs
YWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAke2V4cHJlc3Np
b259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAiJHtl
eHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7CiAgICAgcmV0dXJu
ICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJCRzZWxme2Nv
ZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwotICAgIHJldHVybiAi
SlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKKyAgICBy
ZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIgaWYgJCRzZWxm
e2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwogICAgIHJldHVybiAi
dG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwogfQogCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvR0NDb250cm9sbGVyLmNwcAppbmRleCA0YTM3YmYzYTEzZGE0Y2FlZWE0MGEwY2Y4
YTcwOWZlNThkMzRlYTRjLi5hZWY3ZWM4YTUwNWJmYzUxYTg3ZTNkMmY5ZTE2NzUzOWRlZTI5ZGM3
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNzIgKzI5LDQ5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+Ci0KLUdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKCkKLXsKLX0KLQot
R0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKCkKLXsKLX0KKyNpbmNsdWRlICJKU0Jhc2ljcy5o
IgogCiAvLyBTdGF0aWMgRnVuY3Rpb25zCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGNvbGxlY3RDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgR0NDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5jb2xsZWN0KCk7CisgICAgYXV0byYgY29u
dHJvbGxlciA9ICpzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXIuY29sbGVjdCgpOwogICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgY29sbGVj
dE9uQWx0ZXJuYXRlVGhyZWFkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQog
ewotICAgIGJvb2wgd2FpdFVudGlsRG9uZSA9IGZhbHNlOwotICAgIGlmIChhcmd1bWVudENvdW50
ID4gMCkKLSAgICAgICAgd2FpdFVudGlsRG9uZSA9IEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwg
YXJndW1lbnRzWzBdKTsKLQotICAgIEdDQ29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAg
Y29udHJvbGxlci0+Y29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKHdhaXRVbnRpbERvbmUpOwotCisg
ICAgYXV0byYgY29udHJvbGxlciA9ICpzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGJvb2wgd2FpdFVudGlsRG9uZSA9IGFyZ3Vt
ZW50Q291bnQgPiAwICYmIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKTsK
KyAgICBjb250cm9sbGVyLmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCh3YWl0VW50aWxEb25lKTsK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBK
U1ZhbHVlUmVmIGdldEpTT2JqZWN0Q291bnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCiB7Ci0gICAgR0NDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8R0ND
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBzaXplX3Qg
anNPYmplY3RDb3VudCA9IGNvbnRyb2xsZXItPmdldEpTT2JqZWN0Q291bnQoKTsKLQotICAgIHJl
dHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBqc09iamVjdENvdW50KTsKKyAgICBhdXRv
JiBjb250cm9sbGVyID0gKnN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQs
IGNvbnRyb2xsZXIuZ2V0SlNPYmplY3RDb3VudCgpKTsKIH0KIAogLy8gT2JqZWN0IENyZWF0aW9u
CiAKLXZvaWQgR0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3Zv
aWQgR0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQog
ewotICAgIGF1dG8gZ2NDb250cm9sbGVyU3RyID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkdDQ29udHJvbGxlciIpKTsKLQotICAgIEpTQ2xhc3NSZWYgY2xhc3NSZWYgPSBn
ZXRKU0NsYXNzKCk7Ci0gICAgSlNWYWx1ZVJlZiBnY0NvbnRyb2xsZXJPYmplY3QgPSBKU09iamVj
dE1ha2UoY29udGV4dCwgY2xhc3NSZWYsIHRoaXMpOwotICAgIEpTQ2xhc3NSZWxlYXNlKGNsYXNz
UmVmKTsKLQotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCBn
Y0NvbnRyb2xsZXJTdHIuZ2V0KCksIGdjQ29udHJvbGxlck9iamVjdCwga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0aW9u
KTsKKyAgICBXVFI6OnNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJHQ0NvbnRyb2xs
ZXIiLCBKU09iamVjdE1ha2UoY29udGV4dCwgY3JlYXRlSlNDbGFzcygpLmdldCgpLCB0aGlzKSk7
CiB9CiAKLUpTQ2xhc3NSZWYgR0NDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWluUHRy
PEpTQ2xhc3NSZWY+IEdDQ29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcygpCiB7Ci0gICAgc3RhdGlj
IEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBKU1N0YXRpY0Z1bmN0aW9uIGZ1bmN0aW9uc1tdID0gewogICAgICAgICB7ICJjb2xsZWN0
IiwgY29sbGVjdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImNvbGxlY3RPbkFsdGVybmF0
ZVRocmVhZCIsIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
ICAgIHsgImdldEpTT2JqZWN0Q291bnQiLCBnZXRKU09iamVjdENvdW50Q2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAgICB9OwotCi0gICAgc3RhdGljIEpTQ2xhc3NEZWZp
bml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVO
b25lLCAiR0NDb250cm9sbGVyIiwgMCwgMCwgc3RhdGljRnVuY3Rpb25zLAorICAgIHN0YXRpYyBj
b25zdCBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0geworICAgICAgICAwLCBrSlNDbGFz
c0F0dHJpYnV0ZU5vbmUsICJHQ0NvbnRyb2xsZXIiLCAwLCAwLCBmdW5jdGlvbnMsCiAgICAgICAg
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpT
Q2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3ND
cmVhdGUoJmRlZmluaXRpb24pKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0dDQ29udHJvbGxlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmgKaW5k
ZXggNjQyNDM4NGRmNTMwZThjMWZkYWU4ZmI2MTMxMWJmMGFkYzRhNmE4Zi4uMzdhYTQ2YTc3NGNl
M2U3MGI4Nzg5ZDQ0M2YxZTQxODE0YWM1OGY1YyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvR0NDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9s
bGVyLmgKQEAgLTI2LDE5ICsyNiwxNSBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEdD
Q29udHJvbGxlcl9oCi0jZGVmaW5lIEdDQ29udHJvbGxlcl9oCisjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBjbGFz
cyBHQ0NvbnRyb2xsZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIEdDQ29udHJvbGxlcigpOwotICAgIH5HQ0NvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQgbWFr
ZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2Jq
ZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYpOwogCiAgICAgLy8gQ29udHJvbGxlciBNZXRob2RzIC0gcGxhdGZyb20gaW5k
ZXBlbmRhbnQgaW1wbGVtZW50YXRpb25zCiAgICAgdm9pZCBjb2xsZWN0KCkgY29uc3Q7CkBAIC00
Niw3ICs0Miw1IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZ2V0SlNPYmplY3RDb3VudCgpIGNvbnN0
OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKKyAgICBz
dGF0aWMgSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gY3JlYXRlSlNDbGFzcygpOwogfTsKLQotI2Vu
ZGlmIC8vIEdDQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0UnVubmVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCmluZGV4
IDVlNTM1YWYxZGVhZDg0MmQyZWY0ZjVmNzY2MDJjODNhOTUwYjc2NTIuLjM3ZjY5MWNiNzk2YjU2
MzkyNjI4MDRlZTNmNDAxY2FiZGFlOGYwZTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIu
Y3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVz
dFJ1bm5lci5oIgogCisjaW5jbHVkZSAiSlNCYXNpY3MuaCIKICNpbmNsdWRlICJXZWJDb3JlVGVz
dFN1cHBvcnQuaCIKICNpbmNsdWRlICJXb3JrUXVldWUuaCIKICNpbmNsdWRlICJXb3JrUXVldWVJ
dGVtLmgiCkBAIC0zOCwxMCArMzksNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheUJ1ZmZlclZpZXcuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NUZXN0UnVubmVyVXRpbHMuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09i
amVjdFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9WTUlubGluZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xvZ0luaXRpYWxpemF0
aW9uLmg+CkBAIC00ODksNyArNDg3LDYgQEAgc3RhdGljIEpTVmFsdWVSZWYgZGlzcGxheUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlMKIAogc3Rh
dGljIEpTVmFsdWVSZWYgZGlzcGxheUFuZFRyYWNrUmVwYWludHNDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgLy8gSGFzIG1hYyAmIHdpbmRvd3MgaW1wbGVtZW50
YXRpb24KICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5l
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAgY29udHJvbGxlci0+ZGlz
cGxheUFuZFRyYWNrUmVwYWludHMoKTsKIApAQCAtNDk4LDEyICs0OTUsMTAgQEAgc3RhdGljIEpT
VmFsdWVSZWYgZGlzcGxheUFuZFRyYWNrUmVwYWludHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3QKIAogc3RhdGljIEpTVmFsdWVSZWYgZW5jb2RlSG9zdE5hbWVDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgLy8gSGFzIG1hYyBpbXBsZW1l
bnRhdGlvbgogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byBuYW1lID0gYWRvcHQoSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFT
U0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byBuYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZyhj
b250ZXh0LCBhcmd1bWVudHNbMF0pOwogCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwog
ICAgIGF1dG8gZW5jb2RlZEhvc3ROYW1lID0gY29udHJvbGxlci0+Y29weUVuY29kZWRIb3N0TmFt
ZShuYW1lLmdldCgpKTsKQEAgLTUxMiwyMiArNTA3LDEyIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGVu
Y29kZUhvc3ROYW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGV4ZWNDb21tYW5kQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBNYWMgJiBXaW5kb3dzIGltcGxlbWVudGF0
aW9ucy4KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOwotCisgICAgYXV0byBuYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZyhj
b250ZXh0LCBhcmd1bWVudHNbMF0pOwogICAgIC8vIElnbm9yaW5nIHRoZSBzZWNvbmQgcGFyYW1l
dGVyICh1c2VySW50ZXJmYWNlKSwgYXMgdGhpcyBjb21tYW5kIGVtdWxhdGVzIGEgbWFudWFsIGFj
dGlvbi4KLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB2YWx1ZTsKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA+PSAzKSB7Ci0gICAgICAgIHZhbHVlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOwotICAgICAgICBBU1NFUlQo
ISpleGNlcHRpb24pOwotICAgIH0gZWxzZQotICAgICAgICB2YWx1ZSA9IGFkb3B0KEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7Ci0KKyAgICBhdXRvIHZhbHVlID0gV1RSOjpjcmVh
dGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudENvdW50ID4gMiA/IGFyZ3VtZW50c1syXSA6IG51
bGxwdHIpOwogCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RS
dW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXIt
PmV4ZWNDb21tYW5kKG5hbWUuZ2V0KCksIHZhbHVlLmdldCgpKTsKQEAgLTU0MSwxMSArNTI2LDgg
QEAgc3RhdGljIEpTVmFsdWVSZWYgZmluZFN0cmluZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8g
dGFyZ2V0ID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBKU09iamVjdFJl
ZiBvcHRpb25zID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0
aW9uKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8gdGFyZ2V0ID0gV1RSOjpj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOworICAgIGF1dG8gb3B0aW9ucyA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMV0sIG51bGxwdHIpOwogCiAgICAg
VGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4o
Y29udGV4dCwgY29udHJvbGxlci0+ZmluZFN0cmluZyhjb250ZXh0LCB0YXJnZXQuZ2V0KCksIG9w
dGlvbnMpKTsKQEAgLTU2Niw4ICs1NDgsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBpc0NvbW1hbmRF
bmFibGVkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bgogICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwogCi0gICAgYXV0byBuYW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2Vw
dGlvbik7CisgICAgYXV0byBuYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1
bWVudHNbMF0pOwogCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRl
c3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogCkBAIC01NzksMTAg
KzU2MCw4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG92ZXJyaWRlUHJlZmVyZW5jZUNhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmCiAgICAgaWYgKGFyZ3VtZW50Q291bnQg
PCAyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAg
ICBhdXRvIGtleSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRz
WzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIGF1dG8gdmFs
dWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhj
ZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIGtleSA9IFdUUjo6
Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKKyAgICBhdXRvIHZhbHVlID0g
V1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMV0pOwogCiAgICAgLy8gU2hv
dWxkIHVzZSBgPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hl
PXRydWUgXSAtLT5gIGluc3RlYWQuCiAgICAgUkVMRUFTRV9BU1NFUlQoIUpTU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoa2V5LmdldCgpLCAiV2ViS2l0VXNlc0JhY2tGb3J3YXJkQ2FjaGVQcmVm
ZXJlbmNlS2V5IikpOwpAQCAtNjYyLDE1ICs2NDEsMTAgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVl
dWVMb2FkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgYXV0byB1cmwgPSBhZG9wdChKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgYXV0byB1cmwg
PSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CiAgICAgQVNTRVJU
KCEqZXhjZXB0aW9uKTsKIAotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0YXJnZXQ7Ci0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMikgewotICAgICAgICB0YXJnZXQgPSBhZG9wdChKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7Ci0gICAg
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHRhcmdldCA9IGFk
b3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisgICAgYXV0byB0YXJnZXQg
PSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50Q291bnQgPiAxID8gYXJndW1l
bnRzWzFdIDogbnVsbHB0cik7CiAKICAgICBUZXN0UnVubmVyKiBjb250cm9sbGVyID0gc3RhdGlj
X2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CiAgICAg
Y29udHJvbGxlci0+cXVldWVMb2FkKHVybC5nZXQoKSwgdGFyZ2V0LmdldCgpKTsKQEAgLTY5Miw3
ICs2NjYsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBxdWV1ZUxvYWRIVE1MU3RyaW5nQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmCiAgICAgICAgIGJhc2VVUkwgPSBhZG9w
dChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7
CiAgICAgICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAgICAgfSBlbHNlCi0gICAgICAgIGJhc2VV
UkwgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgICAgICBi
YXNlVVJMID0gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogCiAgICAgVGVzdFJ1bm5lciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwogCkBAIC0yMDQ1LDM0ICsyMDE5LDI0IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHJ1blVJ
U2NyaXB0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVj
CiAKIHN0YXRpYyB2b2lkIHRlc3RSdW5uZXJPYmplY3RGaW5hbGl6ZShKU09iamVjdFJlZiBvYmpl
Y3QpCiB7Ci0gICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5u
ZXIqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+ZGVyZWYo
KTsKKyAgICBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVj
dCkpLT5kZXJlZigpOwogfQogCiAvLyBPYmplY3QgQ3JlYXRpb24KIAotdm9pZCBUZXN0UnVubmVy
OjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5k
b3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgVGVzdFJ1bm5lcjo6bWFrZVdp
bmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBhdXRvIHRlc3RSdW5uZXJT
dHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidGVzdFJ1bm5lciIpKTsK
ICAgICByZWYoKTsKLQotICAgIEpTQ2xhc3NSZWYgY2xhc3NSZWYgPSBnZXRKU0NsYXNzKCk7Ci0g
ICAgSlNWYWx1ZVJlZiBsYXlvdXRUZXN0Q29udG9sbGVyT2JqZWN0ID0gSlNPYmplY3RNYWtlKGNv
bnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVsZWFzZShjbGFzc1JlZik7Ci0K
LSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgdGVzdFJ1bm5l
clN0ci5nZXQoKSwgbGF5b3V0VGVzdENvbnRvbGxlck9iamVjdCwga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0aW9uKTsK
KyAgICBXVFI6OnNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJ0ZXN0UnVubmVyIiwg
SlNPYmplY3RNYWtlKGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQoKSwgdGhpcykpOwogfQog
Ci1KU0NsYXNzUmVmIFRlc3RSdW5uZXI6OmdldEpTQ2xhc3MoKQorSlNSZXRhaW5QdHI8SlNDbGFz
c1JlZj4gVGVzdFJ1bm5lcjo6Y3JlYXRlSlNDbGFzcygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGlj
VmFsdWUqIHN0YXRpY1ZhbHVlcyA9IFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpOwotICAgIHN0
YXRpYyBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMgPSBUZXN0UnVubmVyOjpzdGF0
aWNGdW5jdGlvbnMoKTsKLSAgICBzdGF0aWMgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZpbml0
aW9uID0gewotICAgICAgICAwLCBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsICJUZXN0UnVubmVyIiwg
MCwgc3RhdGljVmFsdWVzLCBzdGF0aWNGdW5jdGlvbnMsCisgICAgc3RhdGljIGNvbnN0IEpTQ2xh
c3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRl
Tm9uZSwgIlRlc3RSdW5uZXIiLCAwLCBzdGF0aWNWYWx1ZXMoKSwgc3RhdGljRnVuY3Rpb25zKCks
CiAgICAgICAgIDAsIHRlc3RSdW5uZXJPYmplY3RGaW5hbGl6ZSwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMAogICAgIH07Ci0KLSAgICByZXR1cm4gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0
aW9uKTsKKyAgICByZXR1cm4gYWRvcHQoSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbikpOwogfQog
CiAvLyBDb25zdGFudHMKQEAgLTIxMDcsOSArMjA3MSw5IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdl
dFJFTkRFUl9UUkVFX1NIT1dfTEFZRVJfRlJBR01FTlRTKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIDMyKTsKIH0KIAotSlNT
dGF0aWNWYWx1ZSogVGVzdFJ1bm5lcjo6c3RhdGljVmFsdWVzKCkKK2NvbnN0IEpTU3RhdGljVmFs
dWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljVmFs
dWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRpY1ZhbHVl
IHZhbHVlc1tdID0gewogICAgICAgICB7ICJkaWRDYW5jZWxDbGllbnRSZWRpcmVjdCIsIGdldERp
ZENhbmNlbENsaWVudFJlZGlyZWN0LCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInRpbWVvdXQiLCBn
ZXRUaW1lb3V0Q2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZ2xvYmFsRmxhZyIsIGdl
dEdsb2JhbEZsYWdDYWxsYmFjaywgc2V0R2xvYmFsRmxhZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZU5vbmUgfSwKQEAgLTIxMjcsMTIgKzIwOTEsMTIgQEAgSlNTdGF0aWNWYWx1ZSogVGVz
dFJ1bm5lcjo6c3RhdGljVmFsdWVzKCkKICAgICAgICAgeyAiUkVOREVSX1RSRUVfU0hPV19MQVlF
Ul9GUkFHTUVOVFMiLCBnZXRSRU5ERVJfVFJFRV9TSE9XX0xBWUVSX0ZSQUdNRU5UUywgMCwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB9LAogICAgICAgICB7IDAsIDAsIDAsIDAgfQogICAgIH07Ci0gICAgcmV0dXJuIHN0YXRpY1Zh
bHVlczsKKyAgICByZXR1cm4gdmFsdWVzOwogfQogCi1KU1N0YXRpY0Z1bmN0aW9uKiBUZXN0UnVu
bmVyOjpzdGF0aWNGdW5jdGlvbnMoKQorY29uc3QgSlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5l
cjo6c3RhdGljRnVuY3Rpb25zKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0
aWNGdW5jdGlvbnNbXSA9IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTU3RhdGljRnVuY3Rpb24g
ZnVuY3Rpb25zW10gPSB7CiAgICAgICAgIHsgImFib3J0TW9kYWwiLCBhYm9ydE1vZGFsQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkRGlzYWxsb3dlZFVSTCIsIGFkZERpc2FsbG93ZWRV
UkxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJhZGRVUkxUb1JlZGlyZWN0IiwgYWRkVVJM
VG9SZWRpcmVjdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkBAIC0yMjk3LDcgKzIyNjEsNyBAQCBKU1N0YXRp
Y0Z1bmN0aW9uKiBUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMoKQogICAgICAgICB7IDAsIDAs
IDAgfQogICAgIH07CiAKLSAgICByZXR1cm4gc3RhdGljRnVuY3Rpb25zOworICAgIHJldHVybiBm
dW5jdGlvbnM7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkSFRNTFN0cmluZyhKU1N0
cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMKQpAQCAtMjM0MiwxNCArMjMwNiwx
MSBAQCB2b2lkIFRlc3RSdW5uZXI6Omlnbm9yZUxlZ2FjeVdlYk5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0cygpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJG
aXJlZCgpCiB7Ci0gICAgY29uc3QgY2hhciogbWVzc2FnZSA9ICJGQUlMOiBUaW1lZCBvdXQgd2Fp
dGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcbiI7Ci0gICAgZnByaW50Zih0ZXN0UmVz
dWx0LCAiJXMiLCBtZXNzYWdlKTsKKyAgICBmcHV0cygiRkFJTDogVGltZWQgb3V0IHdhaXRpbmcg
Zm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iLCB0ZXN0UmVzdWx0KTsKIAotICAgIGF1dG8g
YWNjdW11bGF0ZWRMb2dzID0gZ2V0QW5kUmVzZXRBY2N1bXVsYXRlZExvZ3MoKTsKLSAgICBpZiAo
IWFjY3VtdWxhdGVkTG9ncy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgY2hhciogbWVzc2Fn
ZSA9ICJMb2dzIGFjY3VtdWxhdGVkIGR1cmluZyB0ZXN0IHJ1bjpcbiI7Ci0gICAgICAgIGZwcmlu
dGYodGVzdFJlc3VsdCwgIiVzJXNcbiIsIG1lc3NhZ2UsIGFjY3VtdWxhdGVkTG9ncy51dGY4KCku
ZGF0YSgpKTsKLSAgICB9CisgICAgYXV0byBsb2dzID0gZ2V0QW5kUmVzZXRBY2N1bXVsYXRlZExv
Z3MoKTsKKyAgICBpZiAoIWxvZ3MuaXNFbXB0eSgpKQorICAgICAgICBmcHJpbnRmKHRlc3RSZXN1
bHQsICJMb2dzIGFjY3VtdWxhdGVkIGR1cmluZyB0ZXN0IHJ1bjpcbiVzXG4iLCBsb2dzLnV0Zjgo
KS5kYXRhKCkpOwogCiAgICAgbm90aWZ5RG9uZSgpOwogfQpAQCAtMjQwMywyNCArMjM2NCwyNSBA
QCB2b2lkIFRlc3RSdW5uZXI6OnNldEFjY3VtbXVsYXRlTG9nc0ZvckNoYW5uZWwoSlNTdHJpbmdS
ZWYgY2hhbm5lbCkKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldExvZ0NoYW5uZWxUb0FjY3Vt
dWxhdGUoeyBidWZmZXIuZ2V0KCkgfSk7CiB9CiAKLXR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2ln
bmVkLCBKU1ZhbHVlUmVmPiBDYWxsYmFja01hcDsKK3VzaW5nIENhbGxiYWNrTWFwID0gV1RGOjpI
YXNoTWFwPHVuc2lnbmVkLCBKU09iamVjdFJlZj47CiBzdGF0aWMgQ2FsbGJhY2tNYXAmIGNhbGxi
YWNrTWFwKCkKIHsKICAgICBzdGF0aWMgQ2FsbGJhY2tNYXAmIG1hcCA9ICpuZXcgQ2FsbGJhY2tN
YXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKK3ZvaWQgVGVz
dFJ1bm5lcjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIEpTVmFsdWVS
ZWYgY2FsbGJhY2tWYWx1ZSkKIHsKLSAgICBpZiAoIWNhbGxiYWNrKQorICAgIGF1dG8gY29udGV4
dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOworICAgIGlmICghY2FsbGJhY2tWYWx1ZSB8fCAhSlNW
YWx1ZUlzT2JqZWN0KGNvbnRleHQsIGNhbGxiYWNrVmFsdWUpKQogICAgICAgICByZXR1cm47Cisg
ICAgYXV0byBjYWxsYmFjayA9IChKU09iamVjdFJlZiljYWxsYmFja1ZhbHVlOwogCiAgICAgaWYg
KGNhbGxiYWNrTWFwKCkuY29udGFpbnMoaW5kZXgpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAiRkFJTDogVHJpZWQgdG8gaW5zdGFsbCBhIHNlY29uZCBUZXN0UnVubmVyIGNhbGxiYWNrIGZv
ciB0aGUgc2FtZSBldmVudCAoaWQgJWQpXG4iLCBpbmRleCk7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiRkFJTDogVHJpZWQgdG8gaW5zdGFsbCBhIHNlY29uZCBUZXN0UnVubmVyIGNhbGxiYWNr
IGZvciB0aGUgc2FtZSBldmVudCAoaWQgJXUpXG4iLCBpbmRleCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IG1haW5GcmFtZUpTQ29udGV4dCgp
OwogICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKICAgICBjYWxsYmFja01h
cCgpLmFkZChpbmRleCwgY2FsbGJhY2spOwogfQpAQCAtMjQzMCwyMiArMjM5MiwxOCBAQCB2b2lk
IFRlc3RSdW5uZXI6OmNhbGxUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjbwogICAgIGlmICghY2FsbGJhY2tNYXAoKS5jb250YWlucyhpbmRl
eCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkZy
YW1lSlNDb250ZXh0KCk7Ci0gICAgaWYgKEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHQsIGNhbGxiYWNrTWFwKCkudGFrZShpbmRleCksIDApKSB7Ci0gICAgICAg
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdldEds
b2JhbE9iamVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCAwKTsKKyAgICBh
dXRvIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKKyAgICBpZiAoYXV0byBjYWxsYmFj
ayA9IGNhbGxiYWNrTWFwKCkudGFrZShpbmRleCkpIHsKKyAgICAgICAgSlNPYmplY3RDYWxsQXNG
dW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaywgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRl
eHQpLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIG51bGxwdHIpOwogICAgICAgICBKU1ZhbHVl
VW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKICAgICB9CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2xlYXJUZXN0UnVubmVyQ2FsbGJhY2tzKCkKIHsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOwotCi0gICAgZm9yIChhdXRvJiBpdGVyIDogY2FsbGJh
Y2tNYXAoKSkgewotICAgICAgICBpZiAoSlNPYmplY3RSZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgaXRlci52YWx1ZSwgMCkpCi0gICAgICAgICAgICBKU1ZhbHVlVW5wcm90
ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKLSAgICB9Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWlu
RnJhbWVKU0NvbnRleHQoKTsKKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogY2FsbGJhY2tNYXAo
KS52YWx1ZXMoKSkKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7
CiAgICAgY2FsbGJhY2tNYXAoKS5jbGVhcigpOwogfQogCkBAIC0yNTA4LDE2ICsyNDY2LDExIEBA
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXMoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgZmlsZXNWYWx1ZSkKIHsKICAgICBpZiAoIUpTVmFsdWVJc0FycmF5KGNvbnRl
eHQsIGZpbGVzVmFsdWUpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBKU09iamVjdFJlZiBmaWxl
cyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBmaWxlc1ZhbHVlLCBudWxscHRyKTsKLSAgICBz
dGF0aWMgYXV0byBsZW5ndGhQcm9wZXJ0eSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBmaWxlc0xlbmd0aFZhbHVlID0gSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBmaWxlcywgbGVuZ3RoUHJvcGVydHkuZ2V0KCksIG51
bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGZpbGVzTGVuZ3RoVmFs
dWUpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBmaWxlcyA9IChKU09iamVjdFJlZilmaWxl
c1ZhbHVlOworICAgIGF1dG8gZmlsZXNMZW5ndGggPSBXVFI6OmFycmF5TGVuZ3RoKGNvbnRleHQs
IGZpbGVzKTsKIAogICAgIG1fb3BlblBhbmVsRmlsZXMuY2xlYXIoKTsKLSAgICBhdXRvIGZpbGVz
TGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgZmls
ZXNMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmls
ZXNMZW5ndGg7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWxlc0xlbmd0
aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWVSZWYgZmlsZVZhbHVlID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eUF0SW5kZXgoY29udGV4dCwgZmlsZXMsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpT
VmFsdWVJc1N0cmluZyhjb250ZXh0LCBmaWxlVmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmggYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKaW5kZXggMTY3MTIwNThhMTBjZTk4OWEzYzhkNDNk
NjQ0ZjlhOWUzMDBkNDBkZS4uZTg1N2FhNGRjZGEyOTdjNGZlM2U3NmFjN2U5ZWFmMDVhMDljODBi
MCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBjbGVhbnVwKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3Qo
SlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICB2
b2lkIGFkZERpc2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYgdXJsKTsKICAgICBjb25zdCBzdGQ6OnNl
dDxzdGQ6OnN0cmluZz4mIGFsbG93ZWRIb3N0cygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dlZEhv
c3RzOyB9CkBAIC00OTcsNyArNDk3LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnZlY3RvcjxjaGFy
PiBtX29wZW5QYW5lbEZpbGVzTWVkaWFJY29uOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgSlNDbGFz
c1JlZiBnZXRKU0NsYXNzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVl
cygpOwotICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKKyAg
ICBzdGF0aWMgSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gY3JlYXRlSlNDbGFzcygpOworICAgIHN0
YXRpYyBjb25zdCBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMoKTsKKyAgICBzdGF0aWMgY29u
c3QgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7CiB9OwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCmlu
ZGV4IDYxZTAxZjVlZDc2NzVhODMwYmE2ZjM4ZjhlY2Y1ODQwZmJjODM5Y2IuLmU4NTJkZmRhYmNk
NDM5OTNiMzEzOTNkMzVkZjAwNTRjZjY3OTRmNzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KQEAgLTI0LDEyICsy
NCwxMyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRHVtcFJlbmRlclRy
ZWUuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCiAKICNpbXBvcnQgIkFj
Y2Vzc2liaWxpdHlDb21tb25NYWMuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisjaW1wb3J0
ICJEdW1wUmVuZGVyVHJlZS5oIgorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYkhUTUxWaWV3UHJpdmF0ZS5oPgpAQCAtMTU1LDUgKzE1Niw1IEBA
IGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVuaGFuY2VkQWNjZXNzaWJpbGl0eUVuYWJs
ZWQoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnBsYXRmb3JtTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJpb3MiKSk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmco
ImlvcyIpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRJT1MubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudElPUy5tbQppbmRleCBlM2M5MDlkNmRkMjcwMzkyODNlYWNjZDMyYWU0MDky
NmNlOGE5ZTY0Li42NDVmYzg2M2NlZjEwYTAwZjViYjRiN2QxMzljNmUwZGNlNDA4ZGUxIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElP
Uy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dElPUy5tbQpAQCAtMjQsMTEgKzI0LDEyIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5oIgogCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIgorI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUu
aCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPFdl
YkNvcmUvVGV4dEdyYW51bGFyaXR5Lmg+CkBAIC00MSwxMSArNDIsNiBAQAogCiB0eXBlZGVmIHZv
aWQgKCpBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKShpZCBlbGVtZW50LCBOU1N0cmluZyog
bm90aWZpY2F0aW9uLCB2b2lkKiBjb250ZXh0KTsKIAotQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudChpZCBlbGVtZW50KQotICAgIDogbV9lbGVtZW50KGVsZW1l
bnQpCi17Ci19Ci0KIEBpbnRlcmZhY2UgTlNPYmplY3QgKFVJQWNjZXNzaWJpbGl0eUhpZGRlbikK
IC0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihDR1BvaW50KXBvaW50OwogLSAoaWQpYWNjZXNz
aWJpbGl0eUxpbmtlZEVsZW1lbnQ7CkBAIC0xMTIsOSArMTA4LDkgQEAgQGludGVyZmFjZSBOU09i
amVjdCAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJQcml2YXRlKQogLSAoQ0dQYXRoUmVm
KV9hY2Nlc3NpYmlsaXR5UGF0aDsKIEBlbmQKIAotc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBjcmVhdGVFbXB0eUpTU3RyaW5nKCkKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKKyAgICA6IG1fZWxlbWVudChlbGVtZW50KQog
ewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIs
IDApKTsKIH0KIAogc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb25jYXRlbmF0ZUF0
dHJpYnV0ZUFuZFZhbHVlKE5TU3RyaW5nICphdHRyaWJ1dGUsIE5TU3RyaW5nICp2YWx1ZSkKQEAg
LTE4MCw3ICsxNzYsNiBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmZpZWxkc2V0QW5jZXN0b3JFbGVtZW50KCkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJs
KCkKIHsKICAgICBOU1VSTCAqdXJsID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5VVJMXTsKQEAg
LTI5MSw3ICsyODYsNiBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmxpbmtlZEVsZW1lbnQoKQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCiB7
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAwOwogfQogCkBAIC01NTgsNyAr
NTUyLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3MKIHsKICAgICBpZCB0ZXh0TWFya2VycyA9
IG1hcmtlclJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpOwogICAgIGlmICghdGV4dE1h
cmtlcnMgfHwgIVt0ZXh0TWFya2VycyBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCi0g
ICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBXVFI6
OmNyZWF0ZUpTU3RyaW5nKCk7CiAgICAgcmV0dXJuIFtbbV9lbGVtZW50IHN0cmluZ0ZvclRleHRN
YXJrZXJzOnRleHRNYXJrZXJzXSBjcmVhdGVKU1N0cmluZ1JlZl07CiB9CiAKQEAgLTY4MSwyMiAr
Njc1LDIyIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0RG9jdW1lbnRMaW5rcyhW
ZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGVsCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRz
KCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6
OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQpA
QCAtNzE2LDcgKzcxMCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlCiAgICAgaWYgKEpTU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoYXR0cmlidXRlLCAiQVhUZXh0dWFsQ29udGV4dCIpKQog
ICAgICAgICByZXR1cm4gW1ttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eVRleHR1YWxDb250ZXh0XSBj
cmVhdGVKU1N0cmluZ1JlZl07CiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzUHJlc3NBY3Rpb25TdXBwb3J0ZWQoKQpAQCAtNzU1LDE3ICs3NDks
MTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChK
U1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJp
bmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvbGUoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0
dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUoKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxQYWdlVXAoKQpAQCAtNzg5LDE3ICs3
ODMsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxQYWdlUmlnaHQoKQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURl
c2NyaXB0aW9uKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb21wdXRlZFJvbGVTdHJpbmcoKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJp
bmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRpdGxlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCkBAIC04MDksNyArODAzLDcg
QEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2Ny
aXB0aW9uKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om9yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCkBAIC04
MTksNyArODEzLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0
cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCgpIGNvbnN0
CkBAIC04NDksNyArODQzLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRWYWx1
ZShKU1N0cmluZ1JlZiB2YWx1ZVRleHQpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9uKCkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIo
KQpAQCAtODY5LDcgKzg2Myw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1
aXJlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkBAIC04OTIsNyArODg1LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNr
ZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsK
IH0KIApAQCAtOTA4LDcgKzkwMCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJp
YUlzR3JhYmJlZCgpIGNvbnN0CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleChpbnQgaW5kZXgpCkBA
IC05MTgsMzcgKzkxMCwzNyBAQCBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUZvcklu
ZGV4KGludCBpbmRleCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5n
dGgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RS
OjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycygpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mUm93SGVhZGVycygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29s
dW1ucygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4g
V1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwog
fQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIo
KQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0Nv
dW50KCkKQEAgLTk4NywyMiArOTc5LDE5IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCBjb2wsCiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSgpCiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNj
cm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGludCB5KQogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXNzaXN0aXZlVGVjaG5vbG9neVNpbXVs
YXRlZEZvY3VzKCkKQEAgLTEwMzUsMjMgKzEwMjQsMjEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpwcmVzcygpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBX
VFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
b2N1bWVudEVuY29kaW5nKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOwor
ICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxp
c3RlbmVyKEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spCkBAIC0xMDgzLDQzICsxMDcwLDM2
IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXIoKQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNj
cmVlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAt
MTEzMCwxMyArMTExMCwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdub3Jl
ZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lKCkg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lKCkgY29uc3QKIHsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMTUyLDI3
ICsxMTMwLDIyIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpwb3B1cFZhbHVlKCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
YWtlRm9jdXMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKCkKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cmVtb3ZlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHVu
c2lnbmVkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudENvdW50Rm9yU2VhcmNoUHJl
ZGljYXRlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBzdGFy
dEVsZW1lbnQsIGJvb2wgaXNEaXJlY3Rpb25OZXh0LCBKU1ZhbHVlUmVmIHNlYXJjaEtleSwgSlNT
dHJpbmdSZWYgc2VhcmNoVGV4dCwgYm9vbCB2aXNpYmxlT25seSwgYm9vbCBpbW1lZGlhdGVEZXNj
ZW5kYW50c09ubHkpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiAwOwog
fQogCkBAIC0xMjE0LDIzICsxMTg3LDE5IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGFzc0xpc3QoKSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAog
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0ZVZhbHVl
KEpTU3RyaW5nUmVmLCBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mKSBjb25zdAogewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpjb2x1bW5IZWFkZXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYpIGNvbnN0CiB7
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvd0hlYWRlcnMoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnNlbGVjdGVkQ2hpbGRyZW5Db3VudCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaAppbmRleCAzODUwYjQxNDQ2M2Uw
MTVjNjdkNTZlZjA0YTU5MzhjOTkxYzQ3ZWQ4Li4xNWJmNTFmODRkM2U4MTgxYzAyY2Y2NjNjNzU1
MzlkYzI4YWQ5ZGQ0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNz
aWJpbGl0eUNvbW1vbk1hYy5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3Np
YmlsaXR5Q29tbW9uTWFjLmgKQEAgLTQxLDQgKzQxLDQgQEAgQGludGVyZmFjZSBOU1N0cmluZyAo
SlNTdHJpbmdSZWZBZGRpdGlvbnMpCiAtIChKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4pY3JlYXRl
SlNTdHJpbmdSZWY7CiBAZW5kCiAKLWV4dGVybiBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0
ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZWYsIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5leHQs
IHVuc2lnbmVkIHJlc3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFyY2hLZXksIEpTU3RyaW5nUmVm
IHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1tZWRpYXRlRGVzY2VuZGFudHNP
bmx5KTsKK05TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0
ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlZiwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCAq
c3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgdW5zaWduZWQgcmVzdWx0c0xpbWl0
LCBKU1ZhbHVlUmVmIHNlYXJjaEtleSwgSlNTdHJpbmdSZWYgc2VhcmNoVGV4dCwgYm9vbCB2aXNp
YmxlT25seSwgYm9vbCBpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0gYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQppbmRleCA3OTQwNzM4
YTMzOTBlYjI3MGE2MDhiZmQwNTllMTcyYWY0Yjc5MDkyLi4wMzA2N2UyZDA4OTIxNGZiZTg0NjY3
YjI4MjRmOGNlMzE0ODBmOTg3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
QWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
QWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiY29u
ZmlnLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAKKyNpbXBvcnQgIkpT
QmFzaWNzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAKIEBp
bXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCkBAIC01Niw3ICs1
Nyw2IEBAIE5TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0
ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlCiAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0
cmlidXRlIHNldE9iamVjdDpzdGFydEVsZW1lbnQtPnBsYXRmb3JtVUlFbGVtZW50KCkgZm9yS2V5
OkAiQVhTdGFydEVsZW1lbnQiXTsKIAogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9i
amVjdDooaXNEaXJlY3Rpb25OZXh0KSA/IEAiQVhEaXJlY3Rpb25OZXh0IiA6IEAiQVhEaXJlY3Rp
b25QcmV2aW91cyIgZm9yS2V5OkAiQVhEaXJlY3Rpb24iXTsKLQogICAgIFtwYXJhbWV0ZXJpemVk
QXR0cmlidXRlIHNldE9iamVjdDpAKHJlc3VsdHNMaW1pdCkgZm9yS2V5OkAiQVhSZXN1bHRzTGlt
aXQiXTsKIAogICAgIGlmIChzZWFyY2hLZXkpIHsKQEAgLTY2LDE0ICs2Niw4IEBAIE5TRGljdGlv
bmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENyaXRl
cmlhKEpTQ29udGV4dFJlCiAgICAgICAgICAgICBpZiAoc2VhcmNoS2V5U3RyaW5nKQogICAgICAg
ICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IFtOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJp
bmdSZWY6c2VhcmNoS2V5U3RyaW5nLmdldCgpXTsKICAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVl
SXNPYmplY3QoY29udGV4dCwgc2VhcmNoS2V5KSkgewotICAgICAgICAgICAgSlNPYmplY3RSZWYg
c2VhcmNoS2V5QXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoS2V5LCBudWxs
cHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gMDsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmluZyA9IGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgICAgICAgICBK
U1ZhbHVlUmVmIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1Zh
bHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAgICAg
ICAgICAgICAgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIp
KTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoS2V5QXJyYXkg
PSAoSlNPYmplY3RSZWYpc2VhcmNoS2V5OworICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoS2V5
QXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaEtleUFycmF5KTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hLZXlBcnJheUxlbmd0
aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlWYWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBpLCBudWxs
cHRyKTsKICAgICAgICAgICAgICAgICBKU1N0cmluZ1JlZiBzZWFyY2hLZXlTdHJpbmcgPSBKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaEtleVZhbHVlLCBudWxscHRyKTsKQEAgLTg4
LDEyICs4MiwxMSBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICBpZiAoc2VhcmNo
S2V5UGFyYW1ldGVyKQogICAgICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2Jq
ZWN0OnNlYXJjaEtleVBhcmFtZXRlciBmb3JLZXk6QCJBWFNlYXJjaEtleSJdOwogICAgIH0KLSAg
ICAKKwogICAgIGlmIChzZWFyY2hUZXh0ICYmIEpTU3RyaW5nR2V0TGVuZ3RoKHNlYXJjaFRleHQp
KQogICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6W05TU3RyaW5nIHN0
cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hUZXh0XSBmb3JLZXk6QCJBWFNlYXJjaFRleHQiXTsK
LSAgICAKKwogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKHZpc2libGVP
bmx5KSBmb3JLZXk6QCJBWFZpc2libGVPbmx5Il07Ci0gICAgCiAgICAgW3BhcmFtZXRlcml6ZWRB
dHRyaWJ1dGUgc2V0T2JqZWN0OkAoaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KSBmb3JLZXk6QCJB
WEltbWVkaWF0ZURlc2NlbmRhbnRzT25seSJdOwogICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJp
emVkQXR0cmlidXRlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyTWFjLm1tCmluZGV4IDUxZjAzMWRkYmJjZDg1M2FkYjRmZTcxNDdk
ODVhNTI1NzZhMDA3OGIuLjk1YTA2ZjNhNDBhMDQ4OWUzZTBiMGIzMTY1NzRjM2ZjYmYyZWNmMTEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXJNYWMubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlD
b21tb25NYWMuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgi
CiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5o
IgogI2ltcG9ydCA8QXBwS2l0L05TQ29sb3IuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KQEAgLTE1OCw1
ICsxNTksNSBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2li
aWxpdHlFbmFibGVkKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibWFjIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0
ZUpTU3RyaW5nKCJtYWMiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KaW5kZXggZTFlZmQ3ZjRlMTYxYWZmZGVlMjI0
Y2M0NTM4NDhiMzljYjQ5NzA2My4uNjQ5MWEyZDBhNWZhNGM3NGU3MjE3OTI3OGY3ZTFjYTk5ZDc2
OGQ2YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRNYWMubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlDb21tb25NYWMuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
LmgiCiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZS5oIgorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lLmg+CkBAIC04MCwxMSAr
ODEsNiBAQCAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9HbG9iYWxQb2ludDooTlNQb2lu
dClwb2ludDsKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0
cmlidXRlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZTsKIEBlbmQKIAotc3RhdGljIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVFbXB0eUpTU3RyaW5nKCkKLXsKLSAgICByZXR1cm4gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhudWxscHRyLCAwKSk7Ci19Ci0KIHN0YXRp
YyBPcHRpb25hbDxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBtYWtlVmVjdG9yRWxlbWVudChjb25z
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiwgaWQgZWxlbWVudCkKIHsKICAgICByZXR1cm4geyB7
IGVsZW1lbnQgfSB9OwpAQCAtMjIxLDE0ICsyMTcsOCBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpz
ZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJlZiBj
bwogICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNT
dHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsK
ICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2Vh
cmNoU3RyaW5ncykpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJh
eSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNWYWx1
ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwg
bnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUg
JiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVl
KSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gc2Vh
cmNoU3RyaW5nc0FycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaFN0cmluZ3M7CisgICAgICAgICAg
ICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IFdUUjo6YXJyYXlMZW5ndGgoY29udGV4
dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIGF1
dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5
LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJp
bmdzU3RyaW5nKQpAQCAtMjYyLDE0ICsyNTIsOCBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpzZWFy
Y2hUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJlZiBjbwog
ICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCiAgICAgICAgICAgICAgICAgW3Nl
YXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJp
bmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwogICAgICAgICB9IGVsc2UgaWYgKEpT
VmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgewotICAgICAgICAgICAgSlNP
YmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNl
YXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3RyaW5n
c0FycmF5TGVuZ3RoID0gMDsKLQotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmlu
ZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAg
ICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGxlbmd0aFByb3BlcnR5
U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzQXJy
YXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0Fy
cmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0
aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgc2VhcmNo
U3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLQorICAgICAgICAgICAgYXV0byBz
ZWFyY2hTdHJpbmdzQXJyYXkgPSAoSlNPYmplY3RSZWYpc2VhcmNoU3RyaW5nczsKKyAgICAgICAg
ICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChjb250
ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAg
YXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJy
YXksIGksIG51bGxwdHIpLCBudWxscHRyKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaFN0
cmluZ3NTdHJpbmcpCkBAIC0xNDQ2LDEzICsxNDMwLDEzIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIAog
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4oKSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgZnVuY3Rpb24uCiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZG9jdW1lbnRFbmNvZGluZygpCkBAIC0xNDYzLDcgKzE0NDcsNyBAQCBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiAg
ICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9BWF9PQkpD
X0VYQ0VQVElPTlMKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAg
IHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCkBAIC0xNDc0LDcgKzE0
NTgsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
ZG9jdW1lbnRVUkkoKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsK
ICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbSBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQppbmRleCAzNjcxNDkz
OWZkYTBhNTY3NDljNzk5ODg2YTFlYTQzODkyMTg5YTRhLi4zNDJiM2EwMWRjN2VhODc5YWYxYjU0
YjBlZTI3M2Q2ODEyZjhmN2E3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RnJhbWVMb2FkRGVsZWdhdGUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1l
TG9hZERlbGVnYXRlLm1tCkBAIC0zMTEsNTQgKzMxMSwyNiBAQCBJR05PUkVfV0FSTklOR1NfRU5E
CiAKIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RJblN0YW5kYXJkV29ybGRGb3JGcmFtZToo
V2ViRnJhbWUgKilmcmFtZQogewotICAgIC8vIE1ha2UgTmV3LVN0eWxlIFRlc3RSdW5uZXIKLSAg
ICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFtmcmFtZSBnbG9iYWxDb250ZXh0XTsKLSAgICBKU09i
amVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7
Ci0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIGF1dG8gY29udGV4dCA9IFtmcmFt
ZSBnbG9iYWxDb250ZXh0XTsKKyAgICBhdXRvIHdlYlZpZXcgPSBbZnJhbWUgd2ViVmlld107Cisg
ICAgYXV0byB3aW5kb3dPYmplY3QgPSBbZnJhbWUgd2luZG93T2JqZWN0XTsKIAotICAgIEFTU0VS
VChnVGVzdFJ1bm5lcik7Ci0gICAgZ1Rlc3RSdW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4
dCwgZ2xvYmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0K
LSAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFsT2JqZWN0
LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCBnbG9iYWxPYmplY3QsICZl
eGNlcHRpb24pOwotICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKyAgICBnVGVzdFJ1bm5lci0+bWFr
ZVdpbmRvd09iamVjdChjb250ZXh0KTsKKyAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmpl
Y3QoY29udGV4dCk7CisgICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmpl
Y3QoY29udGV4dCk7CiAKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09i
amVjdChjb250ZXh0KTsKIAotICAgIC8vIE1ha2UgT2xkLVN0eWxlIGNvbnRyb2xsZXJzCi0KLSAg
ICBXZWJWaWV3ICp3ZWJWaWV3ID0gW2ZyYW1lIHdlYlZpZXddOwotICAgIFdlYlNjcmlwdE9iamVj
dCAqb2JqID0gW2ZyYW1lIHdpbmRvd09iamVjdF07Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgQXBwbGVTY3JpcHRDb250cm9sbGVyICphc2MgPSBbW0FwcGxlU2NyaXB0Q29udHJvbGxl
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddOwotICAgIFtvYmogc2V0VmFsdWU6YXNj
IGZvcktleTpAImFwcGxlU2NyaXB0Q29udHJvbGxlciJdOwotICAgIFthc2MgcmVsZWFzZV07Cisj
aWYgUExBVEZPUk0oTUFDKQorICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRvcHROUyhbW0Fw
cGxlU2NyaXB0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKS5nZXQo
KSBmb3JLZXk6QCJhcHBsZVNjcmlwdENvbnRyb2xsZXIiXTsKICNlbmRpZgogCi0gICAgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlciAqZXNjID0gW1tFdmVudFNlbmRpbmdDb250cm9sbGVyIGFsbG9jXSBp
bml0XTsKLSAgICBbb2JqIHNldFZhbHVlOmVzYyBmb3JLZXk6QCJldmVudFNlbmRlciJdOwotICAg
IFtlc2MgcmVsZWFzZV07Ci0gICAgCi0gICAgW29iaiBzZXRWYWx1ZTpnTmF2aWdhdGlvbkNvbnRy
b2xsZXIgZm9yS2V5OkAibmF2aWdhdGlvbkNvbnRyb2xsZXIiXTsKLSAgICAKLSAgICBPYmpDQ29u
dHJvbGxlciAqb2NjID0gW1tPYmpDQ29udHJvbGxlciBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBz
ZXRWYWx1ZTpvY2MgZm9yS2V5OkAib2JqQ0NvbnRyb2xsZXIiXTsKLSAgICBbb2NjIHJlbGVhc2Vd
OwotCi0gICAgT2JqQ1BsdWdpbiAqcGx1Z2luID0gW1tPYmpDUGx1Z2luIGFsbG9jXSBpbml0XTsK
LSAgICBbb2JqIHNldFZhbHVlOnBsdWdpbiBmb3JLZXk6QCJvYmpDUGx1Z2luIl07Ci0gICAgW3Bs
dWdpbiByZWxlYXNlXTsKLSAgICAKLSAgICBPYmpDUGx1Z2luRnVuY3Rpb24gKnBsdWdpbkZ1bmN0
aW9uID0gW1tPYmpDUGx1Z2luRnVuY3Rpb24gYWxsb2NdIGluaXRdOwotICAgIFtvYmogc2V0VmFs
dWU6cGx1Z2luRnVuY3Rpb24gZm9yS2V5OkAib2JqQ1BsdWdpbkZ1bmN0aW9uIl07Ci0gICAgW3Bs
dWdpbkZ1bmN0aW9uIHJlbGVhc2VdOwotCi0gICAgVGV4dElucHV0Q29udHJvbGxlciAqdGljID0g
W1tUZXh0SW5wdXRDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlld107Ci0g
ICAgW29iaiBzZXRWYWx1ZTp0aWMgZm9yS2V5OkAidGV4dElucHV0Q29udHJvbGxlciJdOwotICAg
IFt0aWMgcmVsZWFzZV07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbRXZl
bnRTZW5kaW5nQ29udHJvbGxlciBhbGxvY10gaW5pdF0pLmdldCgpIGZvcktleTpAImV2ZW50U2Vu
ZGVyIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTpnTmF2aWdhdGlvbkNvbnRyb2xsZXIg
Zm9yS2V5OkAibmF2aWdhdGlvbkNvbnRyb2xsZXIiXTsKKyAgICBbd2luZG93T2JqZWN0IHNldFZh
bHVlOmFkb3B0TlMoW1tPYmpDQ29udHJvbGxlciBhbGxvY10gaW5pdF0pLmdldCgpIGZvcktleTpA
Im9iakNDb250cm9sbGVyIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtb
T2JqQ1BsdWdpbiBhbGxvY10gaW5pdF0pLmdldCgpIGZvcktleTpAIm9iakNQbHVnaW4iXTsKKyAg
ICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tPYmpDUGx1Z2luRnVuY3Rpb24gYWxs
b2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDUGx1Z2luRnVuY3Rpb24iXTsKKyAgICBbd2lu
ZG93T2JqZWN0IHNldFZhbHVlOmFkb3B0TlMoW1tUZXh0SW5wdXRDb250cm9sbGVyIGFsbG9jXSBp
bml0V2l0aFdlYlZpZXc6d2ViVmlld10pLmdldCgpIGZvcktleTpAInRleHRJbnB1dENvbnRyb2xs
ZXIiXTsKIH0KIAogLSAodm9pZClkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lOihXZWJGcmFt
ZSAqKWZyYW1lIGluSXNvbGF0ZWRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZApAQCAtMzcx
LDcgKzM0Myw3IEBAIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZTooV2ViRnJh
bWUgKilmcmFtZSBpbklzb2xhdGVkV29ybGQ6KFdlYlNjcmlwCiAgICAgaWYgKCFnbG9iYWxPYmpl
Y3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY3R4LCBnbG9i
YWxPYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJfX3dvcmxkSUQi
KSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKGN0eCwgd29ybGRJREZvcldvcmxkKHdvcmxkKSks
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOworICAgIEpTT2JqZWN0U2V0UHJvcGVy
dHkoY3R4LCBnbG9iYWxPYmplY3QsIFdUUjo6Y3JlYXRlSlNTdHJpbmcoIl9fd29ybGRJRCIpLmdl
dCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHdvcmxkSURGb3JXb3JsZCh3b3JsZCkpLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKIH0KIAogLSAodm9pZCl3ZWJWaWV3OihXZWJW
aWV3ICopc2VuZGVyIGRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWU6KFdlYkZyYW1lICopZnJh
bWUgaW5TY3JpcHRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCBlYmEwOTNlZTE4N2NkMzEwZDA1MWIyMzBh
ZWQyYTMwMGZlNzk0OWMwLi5lMjEwNzBhYzMxYjM0Y2ZjYmI1NzlkNzc3NWI3NjE5OTExNGFiZGZk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtMzIsNiAr
MzIsNyBAQAogCiAjaW1wb3J0ICJEZWZhdWx0UG9saWN5RGVsZWdhdGUuaCIKICNpbXBvcnQgIkVk
aXRpbmdEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgIkxheW91dFRl
c3RTcGVsbENoZWNrZXIuaCIKICNpbXBvcnQgIk1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmgiCiAj
aW1wb3J0ICJNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaCIKQEAgLTY3MCwxNSArNjcxLDEw
IEBAIGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNT
dHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlCiB7CiAgICAgV2ViRmluZE9wdGlvbnMgb3B0aW9u
cyA9IDA7CiAKLSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQcm9w
ZXJ0eU5hbWUuZ2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxl
bmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiB0YXJnZXRDRlN0cmluZyA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgdGFyZ2V0KSk7CisgICAgYXV0byBsZW5ndGggPSBXVFI6OmFycmF5
TGVuZ3RoKGNvbnRleHQsIG9wdGlvbnNBcnJheSk7CisgICAgYXV0byB0YXJnZXRDRlN0cmluZyA9
IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGFyZ2V0
KSk7CiAKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7CiAgICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJ
bmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApOwogICAgICAgICBpZiAoIUpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwIGIvVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKaW5kZXggZmZmMGI3NDk5MGFm
YjllMTJhYzlkMDFhNzEwYTRjNTI4MGUxZTkwOC4uOTk1YWRlMDY2MDAxOGM5OGM2MmU0NGU1NmY2
ZjhmOTYyOTI5ZTgyMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5n
cy9KU0Jhc2ljcy5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jh
c2ljcy5jcHAKQEAgLTI4LDE5ICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSlNWYWx1
ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIE9wdGlv
bmFsPGJvb2w+IHZhbHVlKQorT3B0aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2woSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID8gSlNW
YWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxs
KGNvbnRleHQpOworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUp
IHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9w
dGlvbmFsKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKTsKK30KKworT3B0aW9uYWw8
ZG91YmxlPiB0b09wdGlvbmFsRG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHZhbHVlKQoreworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUp
IHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9w
dGlvbmFsKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogfQogCi1P
cHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYg
Y29udGV4dCwgT3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJc1Vu
ZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkg
PyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDxib29sPihKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQs
IHZhbHVlKSk7CisgICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQs
IHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCi1KU1ZhbHVl
UmVmIEpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmlu
Z1JlZiBzdHJpbmdPck51bGwpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNTdHJpbmdSZWYgc3RyaW5nKQogewotICAgIHJldHVybiBzdHJpbmdPck51bGwgPyBK
U1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdPck51bGwpIDogSlNWYWx1ZU1ha2VOdWxs
KGNvbnRleHQpOworICAgIHJldHVybiBzdHJpbmcgPyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0
LCBzdHJpbmcpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQpAQCAtNDgsMTkg
KzUzLDQzIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBj
aGFyKiBzdHJpbmcpCiAgICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHN0cmluZykpOwogfQogCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJp
bmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgYXV0byBz
dHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBudWxscHRy
KSk7CisgICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZyA6IGNyZWF0ZUpTU3RyaW5nKCIiKTsKK30K
KwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHN0cmluZykKIHsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY3JlYXRl
SlNTdHJpbmcoc3RyaW5nKS5nZXQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgcHJvcGVydHkoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sK
KyAgICByZXR1cm4gb2JqZWN0ID8gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3Qs
IGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBudWxscHRyKSA6IG51bGxwdHI7Cit9CisKK0pT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpKTsK
K30KKworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUpCit7CisgICAg
YXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7CisgICAgcmV0dXJu
IHZhbHVlID8gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgOiBkZWZhdWx0VmFsdWU7
Cit9CisKK2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBhdXRvIHZhbHVlID0gcHJv
cGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4gdmFsdWUgPyBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogMDsKK30KKwogSlNPYmplY3RSZWYg
b2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwg
Y29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb2Jq
ZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUpOworICAgIGF1dG8gdmFsdWUg
PSBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAgIHJldHVybiB2YWx1ZSA/IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpLCBu
dWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxjb25zdCBjaGFyKj4gbmFtZXMpCkBAIC03MCwyNyArOTksMzYgQEAgSlNPYmplY3RSZWYgb2Jq
ZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgc3Rk
Ojppbml0aWEKICAgICByZXR1cm4gb2JqZWN0OwogfQogCit1bnNpZ25lZCBhcnJheUxlbmd0aChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBu
dW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIik7Cit9CisKIHZvaWQgc2V0
UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3Qg
Y2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRl
eHQsIG9iamVjdCwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIEpTVmFsdWVNYWtlQm9vbGVh
bihjb250ZXh0LCB2YWx1ZSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7CiB9
CiAKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNv
bnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSlNPYmplY3RTZXRQcm9w
ZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGNyZWF0ZUpT
U3RyaW5nKG5hbWUpLmdldCgpLCB2YWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgc2V0
R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIqIG5h
bWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0
LCBuYW1lLCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCB2YWx1ZSkpOworfQorCiBKU1ZhbHVl
UmVmIGNhbGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3Qg
Y2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFsdWVSZWY+IGFyZ3VtZW50cykK
IHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYXV0byBm
dW5jdGlvbiA9IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7Ci0gICAgaWYg
KCFmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwgYXJndW1lbnRzLnNpemUo
KSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBmdW5jdGlvbiA/IEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwgYXJndW1lbnRz
LnNpemUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpIDogbnVsbHB0cjsKIH0KIAogSlNP
YmplY3RSZWYgY2FsbENvbnN0cnVjdG9yKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBjb25z
dCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJndW1lbnRz
KQogewogICAgIGF1dG8gY29uc3RydWN0b3IgPSBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHsgbmFtZSB9KTsKLSAgICBpZiAoIWNvbnN0
cnVjdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gSlNPYmplY3RDYWxs
QXNDb25zdHJ1Y3Rvcihjb250ZXh0LCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzLnNpemUoKSwgYXJn
dW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBjb25zdHJ1Y3RvciA/IEpTT2Jq
ZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dCwgY29uc3RydWN0b3IsIGFyZ3VtZW50cy5zaXpl
KCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9K
U0Jhc2ljcy5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oCmlu
ZGV4IDExZGRhNTI0N2E1YWI2YzA0MDk2M2RmMTlhYjBmNWUwMjk2Y2ViODIuLjY1ZjE4ZDdlY2Q4
MDE2ODMzMzM0ZGY1ZWI4ODhjY2M0YTBiMjFkNTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L0JpbmRpbmdzL0pTQmFzaWNzLmgKQEAgLTMyLDE2ICszMiwyOCBAQAogCiBuYW1lc3BhY2UgV1RS
IHsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVmLCBP
cHRpb25hbDxib29sPik7Ci1PcHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4o
SlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKK09wdGlvbmFsPGJvb2w+IHRvT3B0aW9uYWxCb29s
KEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitPcHRpb25hbDxkb3VibGU+IHRvT3B0aW9uYWxE
b3VibGUoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFr
ZVN0cmluZ09yTnVsbChKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmKTsKK0pTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiA9ICIiKTsKK0pTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwog
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciopOwog
SlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmLCBjb25zdCBjaGFyKik7CitKU1ZhbHVl
UmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYsIE9wdGlvbmFsPGJvb2w+KTsKK0pTVmFsdWVSZWYg
bWFrZVZhbHVlKEpTQ29udGV4dFJlZiwgSlNTdHJpbmdSZWYpOworCitKU1ZhbHVlUmVmIHByb3Bl
cnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOworYm9vbCBi
b29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFt
ZSwgYm9vbCBkZWZhdWx0VmFsdWUgPSBmYWxzZSk7Citkb3VibGUgbnVtZXJpY1Byb3BlcnR5KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOworSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHN0cmluZ1Byb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNv
bnN0IGNoYXIqIG5hbWUpOwordW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZik7CiBKU09iamVjdFJlZiBvYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFy
Kj4gbmFtZXMpOworCiB2b2lkIHNldFByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYs
IGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBzZXRHbG9iYWxPYmplY3RQcm9w
ZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYpOwordm9pZCBz
ZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGRv
dWJsZSB2YWx1ZSk7CisKIEpTVmFsdWVSZWYgY2FsbChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVm
LCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJn
dW1lbnRzKTsKIEpTT2JqZWN0UmVmIGNhbGxDb25zdHJ1Y3RvcihKU0dsb2JhbENvbnRleHRSZWYs
IGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlUmVmPiBhcmd1
bWVudHMpOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pT
V3JhcHBhYmxlLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBhYmxl
LmgKaW5kZXggOWUwZjA3ZGY1OTMyYWIzMDMzMWQ3YjYxZDE3MzUzYWU2ZTAxYzQ3My4uNTliZTFk
YWVhMjc3NTRlZTQ3NzViNGYzZTdhNWQ2ODJmYjFkNWYxZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGFibGUuaApAQCAtMjUsOSArMjUsMTAgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNDbGFzcyog
SlNDbGFzc1JlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNzIEpTV3JhcHBhYmxlIDogcHVi
bGljIFJlZkNvdW50ZWQ8SlNXcmFwcGFibGU+IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0Jp
bmRpbmdzL0pTV3JhcHBlci5oCmluZGV4IGY2Nzk4Zjk5YTRmZWM2NzU2M2QwOTE1NjNiNTA1MDlk
ZmM4NTcyZGEuLjliNmJhZDhhZjA0NGIyMDJmZjg3MjdhY2VkN2NiOWZmYjJjZWM1MmUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmgKKysrIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaApAQCAtNTAsNCArNTAs
OSBAQCBpbmxpbmUgdm9pZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcgogICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29u
dGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhwcm9wZXJ0eU5hbWUpLmdldCgpLCBKU1dyYXBw
ZXI6OndyYXAoY29udGV4dCwgdmFsdWUpLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOwogfQogCitp
bmxpbmUgdm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU1dyYXBwYWJsZSogdmFsdWUpCit7CisgICAgc2V0
R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgcHJvcGVydHlOYW1lLCBKU1dyYXBwZXI6Ondy
YXAoY29udGV4dCwgdmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9tYWMvRXZlbnRTZXJp
YWxpemVyTWFjLm1tIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9FdmVudFNlcmlhbGl6YXRpb24v
bWFjL0V2ZW50U2VyaWFsaXplck1hYy5tbQppbmRleCAwZjE3YjJjZDYzOWE2MzA2M2E0ODhkZjNh
MzNhMzVlMzJhMmVjY2MxLi5iZGQyMDdiZDQwOWYwNGVlNWYzODIzMTk0ZmEyNGU2MzI4ODU4OTE3
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9t
YWMvRXZlbnRTZXJpYWxpemVyTWFjLm1tCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvRXZl
bnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMubW0KQEAgLTE5NSw3ICsxOTUs
NyBAQCBAaW1wbGVtZW50YXRpb24gRXZlbnRTZXJpYWxpemVyCiAKICsgKE5TRGljdGlvbmFyeSAq
KWRpY3Rpb25hcnlGb3JFdmVudDooQ0dFdmVudFJlZilyYXdFdmVudCByZWxhdGl2ZVRvVGltZToo
Q0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5QdHI8Q0dF
dmVudFJlZj4gcGxhaW5FdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZShOVUxMKSk7CisgICAg
YXV0byBwbGFpbkV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsKICAgICBDR0V2
ZW50UmVmIHJhd1BsYWluRXZlbnQgPSBwbGFpbkV2ZW50LmdldCgpOwogCiAgICAgTlNNdXRhYmxl
RGljdGlvbmFyeSAqZGljdCA9IFtbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKQEAgLTIyNiw3ICsyMjYsNyBAQCArIChOU0RpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5Rm9yRXZlbnQ6KENHRXZlbnRSZWYpcmF3RXZlbnQgcmVsYXRpdmVUb1RpbWU6KENHRXZlbgog
CiArIChSZXRhaW5QdHI8Q0dFdmVudFJlZj4pY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5OihOU0Rp
Y3Rpb25hcnkgKilkaWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyByZWxhdGl2ZVRvVGlt
ZTooQ0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5QdHI8
Q0dFdmVudFJlZj4gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOworICAgIGF1
dG8gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOwogICAgIENHRXZlbnRSZWYg
cmF3RXZlbnQgPSBldmVudC5nZXQoKTsKIAogICAgIEZPUl9FQUNIX0NHRVZFTlRfSU5URUdFUl9G
SUVMRChTVE9SRV9JTlRFR0VSX0ZJRUxEX1RPX0VWRU5UKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBj
b25zdCBmbG9hdCBldmVudERpc3BhdGNoVGltZXJSYXRlID0gMS4gLyAxMjAuOwogCiArICh2b2lk
KXBsYXlTdHJlYW06KE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICopZXZlbnREaWN0cyB3aW5kb3c6
KE5TV2luZG93ICopd2luZG93IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKCkpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBSZXRhaW5QdHI8RXZlbnRTdHJlYW1QbGF5ZXI+IHBsYXllciA9IGFk
b3B0TlMoW1tFdmVudFN0cmVhbVBsYXllciBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gcGxheWVy
ID0gYWRvcHROUyhbW0V2ZW50U3RyZWFtUGxheWVyIGFsbG9jXSBpbml0XSk7CiAKICAgICBwbGF5
ZXItPl9yZW1haW5pbmdFdmVudERpY3Rpb25hcmllcyA9IGFkb3B0TlMoW2V2ZW50RGljdHMgbXV0
YWJsZUNvcHldKTsKICAgICBwbGF5ZXItPl93aW5kb3cgPSB3aW5kb3c7CkBAIC0yODIsNyArMjgy
LDcgQEAgLSAodm9pZClwbGF5YmFja1RpbWVyRmlyZWQ6KE5TVGltZXIgKil0aW1lcgogICAgIGF1
dG8gcmVtb3ZlTGlzdCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwog
ICAgIE5TRXZlbnQgKm5zRXZlbnQgPSBuaWw7CiAgICAgZm9yIChpZCBldmVudERpY3QgaW4gX3Jl
bWFpbmluZ0V2ZW50RGljdGlvbmFyaWVzLmdldCgpKSB7Ci0gICAgICAgIFJldGFpblB0cjxDR0V2
ZW50UmVmPiBldmVudCA9IFtFdmVudFNlcmlhbGl6ZXIgY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5
OmV2ZW50RGljdCBpbldpbmRvdzpfd2luZG93LmdldCgpIHJlbGF0aXZlVG9UaW1lOl9zdGFydFRp
bWVdOworICAgICAgICBhdXRvIGV2ZW50ID0gW0V2ZW50U2VyaWFsaXplciBjcmVhdGVFdmVudEZv
ckRpY3Rpb25hcnk6ZXZlbnREaWN0IGluV2luZG93Ol93aW5kb3cuZ2V0KCkgcmVsYXRpdmVUb1Rp
bWU6X3N0YXJ0VGltZV07CiAgICAgICAgIGlmIChDR0V2ZW50R2V0VGltZXN0YW1wKGV2ZW50Lmdl
dCgpKSA8IG1hY2hfYWJzb2x1dGVfdGltZSgpKSB7CiAgICAgICAgICAgICBuc0V2ZW50ID0gW05T
RXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpldmVudC5nZXQoKV07CiAgICAgICAgICAgICBbTlNBcHAg
cG9zdEV2ZW50Om5zRXZlbnQgYXRTdGFydDpOT107CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVu
bmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250ZXh0LmNwcAppbmRleCAy
NzA1YjM5YTI0N2RkMjU3ZDVjNmQ1OGM0NzBlOTYzM2E5MTlkZmQ0Li41ZGNmYjdjOTg3MmYzOTlm
MTU2NzRkOTcxMGRlYjI4OWIyZDEyMThkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAKQEAgLTI2LDkg
KzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJVSVNjcmlwdENvbnRleHQu
aCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVFI7CkBAIC00MywxMSArNDIsNyBAQCBVSVNjcmlwdENv
bnRleHQ6OlVJU2NyaXB0Q29udGV4dChVSVNjcmlwdENvbnRleHREZWxlZ2F0ZSYgZGVsZWdhdGUs
IFVJU2NyaXB0Q29udAogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKIHsKICAgICBtX2NvbnRy
b2xsZXIgPSBmYWN0b3J5KCp0aGlzKTsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9
IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChtX2NvbnRleHQuZ2V0KCkpOwotCi0gICAgSlNWYWx1
ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgIG1fY29udHJvbGxlci0+bWFrZVdpbmRvd09i
amVjdChtX2NvbnRleHQuZ2V0KCksIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7CisgICAgbV9j
b250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIFVJU2Ny
aXB0Q29udGV4dDo6flVJU2NyaXB0Q29udGV4dCgpCkBAIC02Niw5ICs2MSw3IEBAIHZvaWQgVUlT
Y3JpcHRDb250ZXh0OjpydW5VSVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgdW5zaWduZWQg
c2NyaXB0Q2FsbGJhY2tJCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRlU2NyaXB0
KG1fY29udGV4dC5nZXQoKSwgc3RyaW5nUmVmLmdldCgpLCAwLCAwLCAxLCAmZXhjZXB0aW9uKTsK
ICAgICAKICAgICBpZiAoIWhhc091dHN0YW5kaW5nQXN5bmNUYXNrcygpKSB7Ci0gICAgICAgIEpT
VmFsdWVSZWYgc3RyaW5naWZ5RXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBzdHJp
bmdpZmllZCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkobV9jb250ZXh0LmdldCgpLCByZXN1
bHQsICZzdHJpbmdpZnlFeGNlcHRpb24pKTsKLSAgICAgICAgcmVxdWVzdFVJU2NyaXB0Q29tcGxl
dGlvbihzdHJpbmdpZmllZC5nZXQoKSk7CisgICAgICAgIHJlcXVlc3RVSVNjcmlwdENvbXBsZXRp
b24oY3JlYXRlSlNTdHJpbmcobV9jb250ZXh0LmdldCgpLCByZXN1bHQpLmdldCgpKTsKICAgICAg
ICAgdHJ5VG9Db21wbGV0ZVVJU2NyaXB0Rm9yQ3VycmVudFBhcmVudENhbGxiYWNrKCk7CiAgICAg
fQogfQpAQCAtMTg5LDEwICsxODIsMTAgQEAgSlNPYmplY3RSZWYgVUlTY3JpcHRDb250ZXh0Ojpv
YmplY3RGcm9tUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpIGNvbnMKIHsKICAg
ICBKU09iamVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2UobV9jb250ZXh0LmdldCgpLCBudWxs
cHRyLCBudWxscHRyKTsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgp
LCBvYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZWZ0IikpLmdl
dCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QueCgpKSwga0pTUHJv
cGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1f
Y29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygidG9wIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3Qu
eSgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNl
dFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygid2lkdGgiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKG1fY29udGV4
dC5nZXQoKSwgcmVjdC53aWR0aCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRy
KTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpLmdldCgpLCBKU1ZhbHVl
TWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QuaGVpZ2h0KCkpLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZU5vbmUsIG51bGxwdHIpOworICAgIHNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwg
b2JqZWN0LCAibGVmdCIsIHJlY3QueCgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0
KCksIG9iamVjdCwgInRvcCIsIHJlY3QueSgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQu
Z2V0KCksIG9iamVjdCwgIndpZHRoIiwgcmVjdC53aWR0aCgpKTsKKyAgICBzZXRQcm9wZXJ0eSht
X2NvbnRleHQuZ2V0KCksIG9iamVjdCwgImhlaWdodCIsIHJlY3QuaGVpZ2h0KCkpOwogICAgIAog
ICAgIHJldHVybiBvYmplY3Q7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGE1YThkN2Nj
MmZjYzlmZWQ2ZmY1NTIyY2M5ZWQ2N2NlNDI5OGNhODEuLjM1MjRiNjBiZDgxY2Q5Y2FiMzEwYWEx
YjU2OGYyM2ZkNTE2OGRjZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCkBAIC02Myw3ICs2Myw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgd2FpdEZvck91dHN0YW5kaW5nQ2FsbGJhY2tzKCkgeyAvKiBub3RJbXBsZW1lbnRlZCgpOyAq
LyB9CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBUcmFuc2FjdGlvbiBoZWxwZXJzCiAg
ICAgCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNj
cmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyU2hhcmVkLmNwcAppbmRleCBjNmViMTQwYWEz
NTZjNjZkOGM0NTAyMTRlN2RiMmM4NWFkM2E3MWEzLi5iZmY0ZjM0MzNkYmQyOTU3NWQ2MjViNzM5
NGU2ZDlkMzgxY2FlYzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHAK
QEAgLTQxLDIwICs0MSwxNSBAQCBEZXZpY2VPcmllbnRhdGlvbiogdG9EZXZpY2VPcmllbnRhdGlv
bihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKICAgICAgICAgRGV2aWNl
T3JpZW50YXRpb246OkxhbmRzY2FwZUxlZnQsCiAgICAgICAgIERldmljZU9yaWVudGF0aW9uOjpM
YW5kc2NhcGVSaWdodAogICAgIH07Ci0KLSAgICBhdXRvIG9wdGlvbiA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKLSAgICBpZiAob3B0aW9uLT5z
dHJpbmcoKSA9PSAicG9ydHJhaXQiKQorICAgIGF1dG8gb3B0aW9uID0gY3JlYXRlSlNTdHJpbmco
Y29udGV4dCwgdmFsdWUpOworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9w
dGlvbi5nZXQoKSwgInBvcnRyYWl0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzBdOwotCi0g
ICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gInBvcnRyYWl0LXVwc2lkZWRvd24iKQorICAgIGlm
IChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgInBvcnRyYWl0LXVw
c2lkZWRvd24iKSkKICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbMV07Ci0KLSAgICBpZiAob3B0aW9u
LT5zdHJpbmcoKSA9PSAibGFuZHNjYXBlLWxlZnQiKQorICAgIGlmIChKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgImxhbmRzY2FwZS1sZWZ0IikpCiAgICAgICAgIHJl
dHVybiAmdmFsdWVzWzJdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gImxhbmRzY2Fw
ZS1yaWdodCIpCisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uLmdl
dCgpLCAibGFuZHNjYXBlLXJpZ2h0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzNdOwotCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTY4LDkgKzYzLDkgQEAgdm9pZCBVSVNjcmlwdENv
bnRyb2xsZXI6OmNvbnRleHREZXN0cm95ZWQoKQogICAgIG1fY29udGV4dCA9IG51bGxwdHI7CiB9
CiAKLXZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgInVp
Q29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgInVpQ29udHJvbGxlciIsIHRoaXMpOwogfQogCiBKU0NsYXNzUmVm
IFVJU2NyaXB0Q29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbSBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbQppbmRleCA4ZmMw
MjExNjdhYWMyMjE1MzZhMTc2NmU1MzkwMTlmZTY0NDA1OGUxLi5kODZlZjk1NmY4MGRmYTE5MjI5
NTRlMTE3OWFmMmIzNTJiOTgzOTI0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIubW0KKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNo
YXJlZC9jb2NvYS9MYXlvdXRUZXN0U3BlbGxDaGVja2VyLm1tCkBAIC0yNiw3ICsyNiw3IEBACiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkxheW91dFRlc3RTcGVsbENoZWNrZXIuaCIKIAot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbXBvcnQgIkpTQmFzaWNz
LmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KQEAgLTIxMiwxMSArMjEyLDExIEBAIC0gKHZvaWQp
c2V0UmVzdWx0czooVGV4dENoZWNraW5nUmVzdWx0c0RpY3Rpb25hcnkgKilyZXN1bHRzCiAtICh2
b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFsdWUgaW5Db250
ZXh0OihKU0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1dG8gcmVzdWx0c09iamVjdCA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCByZXN1bHRzVmFsdWUsIG51bGxwdHIpOwotICAgIGF1dG8g
ZnJvbVByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJm
cm9tIikpOwotICAgIGF1dG8gdG9Qcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygidG8iKSk7Ci0gICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gYWRvcHQo
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInR5cGUiKSk7Ci0gICAgYXV0byByZXBsYWNl
bWVudFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJy
ZXBsYWNlbWVudCIpKTsKLSAgICBhdXRvIGRldGFpbHNQcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGV0YWlscyIpKTsKKyAgICBhdXRvIGZyb21Qcm9w
ZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJmcm9tIik7CisgICAgYXV0byB0b1Byb3Bl
cnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoInRvIik7CisgICAgYXV0byB0eXBlUHJvcGVy
dHlOYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZygidHlwZSIpOworICAgIGF1dG8gcmVwbGFjZW1l
bnRQcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJyZXBsYWNlbWVudCIpOworICAg
IGF1dG8gZGV0YWlsc1Byb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoImRldGFpbHMi
KTsKICAgICBhdXRvIHJlc3VsdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxv
Y10gaW5pdF0pOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIHRoZSBPYmplY3RpdmUtQyBBUEkgd291
bGQgbWFrZSB0aGlzIGxvZ2ljIGVhc2llciB0byBmb2xsb3cuCkBAIC0yMjgsMTUgKzIyOCwxMyBA
QCAtICh2b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHRSZWYpYwogICAgICAgICBhdXRvIHJlc3VsdHNGb3JXb3JkID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgICAgIGZvciAoc2l6
ZV90IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBKU1Byb3BlcnR5TmFtZUFycmF5R2V0
Q291bnQocmVzdWx0c0FycmF5UHJvcGVydHlOYW1lcyk7ICsrcmVzdWx0SW5kZXgpIHsKICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0c09iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBKU09i
amVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCByZXN1bHRzQXJyYXksIHJlc3VsdEluZGV4
LCBudWxscHRyKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBsb25nIGZyb21WYWx1ZSA9IGxyb3Vu
ZGwoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
cmVzdWx0c09iamVjdCwgZnJvbVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxwdHIp
KTsKLSAgICAgICAgICAgIGxvbmcgdG9WYWx1ZSA9IGxyb3VuZGwoSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgdG9Qcm9w
ZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBhdXRvIHR5
cGVWYWx1ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0eXBlUHJvcGVydHlOYW1lLmdldCgpLCBu
dWxscHRyKSwgbnVsbHB0cikpOworICAgICAgICAgICAgbG9uZyBmcm9tVmFsdWUgPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2Jq
ZWN0LCBmcm9tUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBsb25nIHRvVmFsdWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0b1Byb3BlcnR5TmFtZS5nZXQoKSwgbnVs
bHB0ciksIG51bGxwdHIpOworICAgICAgICAgICAgYXV0byB0eXBlVmFsdWUgPSBXVFI6OmNyZWF0
ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09i
amVjdCwgdHlwZVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgYXV0
byByZXBsYWNlbWVudFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRz
T2JqZWN0LCByZXBsYWNlbWVudFByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cik7CiAgICAgICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHJlcGxhY2VtZW50VGV4dDsKLSAgICAgICAgICAg
IGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHJlcGxhY2VtZW50VmFsdWUpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byByZXBsYWNlbWVudEpTU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAg
ICAgICAgICAgcmVwbGFjZW1lbnRUZXh0ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCByZXBsYWNlbWVudEpTU3RyaW5nLmdldCgpKSk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCByZXBs
YWNlbWVudFZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRleHQgPSBhZG9wdENG
KEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoY29udGV4dCwgcmVwbGFjZW1lbnRWYWx1ZSkuZ2V0KCkpKTsKICAgICAgICAgICAgIGF1
dG8gZGV0YWlscyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogICAg
ICAgICAgICAgYXV0byBkZXRhaWxzVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQs
IHJlc3VsdHNPYmplY3QsIGRldGFpbHNQcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpOwogICAg
ICAgICAgICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgZGV0YWlsc1ZhbHVlKSkg
ewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25z
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlGdW5jdGlvbnMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lNTUxOGFiMzgxMzhkNmI3YmZhYTAzNTlmNzgyY2VjZDg3MzZmOTA5Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25zLmgKQEAg
LTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0
cmluZ0Z1bmN0aW9ucy5oIgorCituYW1lc3BhY2UgV1RSIHsKKworV0tEaWN0aW9uYXJ5UmVmIGRp
Y3Rpb25hcnlWYWx1ZShXS1R5cGVSZWYpOworCitib29sIGJvb2xlYW5WYWx1ZShXS1R5cGVSZWYp
OworYm9vbCBib29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYpOworCitk
b3VibGUgZG91YmxlVmFsdWUoV0tUeXBlUmVmKTsKK09wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxE
b3VibGVWYWx1ZShXS1R5cGVSZWYpOworCitXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShXS1R5cGVS
ZWYpOworV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoV0tUeXBlUmVmKTsKKwordWludDY0X3QgdWlu
dDY0VmFsdWUoV0tUeXBlUmVmKTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKGNvbnN0IFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4mKTsKKworV0tUeXBlUmVmIHZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29u
c3QgY2hhcioga2V5KTsKKworYm9vbCBib29sZWFuVmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25z
dCBjaGFyKiBrZXkpOworZG91YmxlIGRvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3Qg
Y2hhcioga2V5KTsKK1dLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29u
c3QgY2hhcioga2V5KTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29u
c3QgY2hhcioga2V5KTsKKworT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdL
RGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYs
IGNvbnN0IGNoYXIqIGtleSwgY29uc3QgT3B0aW9uYWw8VD4mIHZhbHVlKTsKK3ZvaWQgc2V0VmFs
dWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFy
KiBrZXksIFdLVHlwZVJlZiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBib29sIHZhbHVlKTsK
K3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4m
LCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29u
c3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXks
IHVpbnQ2NF90IHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGRvdWJsZSB2YWx1ZSk7Cit2b2lk
IHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29u
c3QgY2hhcioga2V5LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgYm9vbCBi
b29sZWFuVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dl
dFR5cGVJRCh2YWx1ZSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkgJiYgV0tCb29sZWFuR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPih2YWx1ZSkpOworfQorCitpbmxpbmUgYm9vbCBi
b29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7CisgICAg
cmV0dXJuIGJvb2xlYW5WYWx1ZSh2YWx1ZS5nZXQoKSk7Cit9CisKK2lubGluZSBXS0RpY3Rpb25h
cnlSZWYgZGljdGlvbmFyeVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFs
dWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpID8gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxpbmUg
ZG91YmxlIGRvdWJsZVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUg
JiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRG91YmxlR2V0VHlwZUlEKCkgPyBXS0RvdWJsZUdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPih2YWx1ZSkpIDogMDsKK30KKworaW5saW5l
IE9wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS1R5cGVSZWYgdmFsdWUpCit7
CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS0RvdWJsZUdldFR5
cGVJRCgpID8gbWFrZU9wdGlvbmFsKFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3Vi
bGVSZWY+KHZhbHVlKSkpIDogV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgV0tTdHJpbmdSZWYg
c3RyaW5nVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dl
dFR5cGVJRCh2YWx1ZSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSA/IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZT
dHJpbmcoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB0b1dURlN0cmluZyhzdHJpbmdW
YWx1ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUoV0tUeXBlUmVm
IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tV
SW50NjRHZXRUeXBlSUQoKSA/IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KHZhbHVlKSkgOiAwOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUoY29uc3Qg
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVl
KHZhbHVlLmdldCgpKTsKK30KKworaW5saW5lIFdLVHlwZVJlZiB2YWx1ZShXS0RpY3Rpb25hcnlS
ZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHRvV0soa2V5KS5nZXQoKSk7Cit9CisKK2lubGlu
ZSBib29sIGJvb2xlYW5WYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hh
cioga2V5KQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5
KSk7Cit9CisKK2lubGluZSBkb3VibGUgZG91YmxlVmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rp
b25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gZG91YmxlVmFsdWUodmFsdWUo
ZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShX
S0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVy
biBzdHJpbmdWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5lIHVpbnQ2
NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBr
ZXkpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHZhbHVlKGRpY3Rpb25hcnksIGtleSkpOwor
fQorCitpbmxpbmUgT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdLRGljdGlv
bmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIG9wdGlv
bmFsRG91YmxlVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSB2b2lk
IHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0
aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHRvV0soa2V5KS5nZXQoKSwgdmFsdWUpOwor
fQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBib29sIHZhbHVlKQorewor
ICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIGNv
bnN0IGNoYXIqIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgdG9XSyh2
YWx1ZSkuZ2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBj
b25zdCBXVEY6OlN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwga2V5
LCB0b1dLKHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXksIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKworaW5saW5lIHZvaWQg
c2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rp
b25hcnksIGNvbnN0IGNoYXIqIGtleSwgZG91YmxlIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRp
Y3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBjb25z
dCBPcHRpb25hbDxUPiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBzZXRWYWx1
ZShkaWN0aW9uYXJ5LCBrZXksICp2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmggYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaAppbmRleCA2NDQ3NjAzOTY4ZDIw
NjQyMGJlYjk0Mjc3M2IyNGI3ODk2NDFiNWM5Li5mYTNhODhkM2FmMzkzNGQ0Yzg4MjBiZjUwZmU5
Zjg5N2IzOGZkMDRhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHku
aApAQCAtMTEyLDE4ICsxMTIsMTkgQEAgcHJpdmF0ZToKICAgICBQT0lOVCBwb3NpdGlvbkluUG9p
bnQoKSBjb25zdCB7IHJldHVybiB7IHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueCksIHN0
YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueSkgfTsgfQogI2VuZGlmCiAKLSAgICBkb3VibGUg
bV90aW1lOwotICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKLSAgICBib29sIG1fbGVmdE1vdXNlQnV0
dG9uRG93bjsKLSAgICBpbnQgbV9jbGlja0NvdW50OwotICAgIGRvdWJsZSBtX2NsaWNrVGltZTsK
LSAgICBXS1BvaW50IG1fY2xpY2tQb3NpdGlvbjsKLSAgICBXS0V2ZW50TW91c2VCdXR0b24gbV9j
bGlja0J1dHRvbjsKKyAgICBkb3VibGUgbV90aW1lIHsgMCB9OworICAgIFdLUG9pbnQgbV9wb3Np
dGlvbiB7IH07CisgICAgYm9vbCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24geyBmYWxzZSB9OworICAg
IGludCBtX2NsaWNrQ291bnQgeyAwIH07CisgICAgZG91YmxlIG1fY2xpY2tUaW1lIHsgMCB9Owor
ICAgIFdLUG9pbnQgbV9jbGlja1Bvc2l0aW9uIHsgfTsKKyAgICBXS0V2ZW50TW91c2VCdXR0b24g
bV9jbGlja0J1dHRvbiB7IGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbiB9OwogICAgIHVuc2ln
bmVkIG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB7IDAgfTsKICNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBpbnQgZXZlbnROdW1iZXI7Ci0jZWxpZiBQTEFURk9STShXUEUpCi0gICAgdWludDMy
X3QgbV9idXR0b25TdGF0ZTsKKyAgICBpbnQgZXZlbnROdW1iZXIgeyAwIH07CisjZW5kaWYKKyNp
ZiBQTEFURk9STShXUEUpCisgICAgdWludDMyX3QgbV9idXR0b25TdGF0ZSB7IDAgfTsKICAgICBW
ZWN0b3I8c3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+IG1fdG91Y2hFdmVudHM7CiAg
ICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV91cGRhdGVkVG91Y2hFdmVudHM7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92
aWRlck1vY2suY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVy
TW9jay5jcHAKaW5kZXggNmY5M2NhMjczMDMwZjU3NzZlMzE4ZjllNDU2OTAyMmNlZTE0YjkwZC4u
YzQyNTFiMzAxZmI1NTRjN2VhZTYwMzE2Mjc1OTZmNTBiNzhhMjU5ZCAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKQEAgLTYzLDkg
KzYzLDkgQEAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6On5HZW9sb2NhdGlvblByb3ZpZGVyTW9j
aygpCiAgICAgV0tHZW9sb2NhdGlvbk1hbmFnZXJTZXRQcm92aWRlcihtX2dlb2xvY2F0aW9uTWFu
YWdlciwgMCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9u
KGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29s
IHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywg
ZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHBy
b3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIEdlb2xvY2F0aW9uUHJv
dmlkZXJNb2NrOjpzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFs
PGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBtX3Bv
c2l0aW9uLmFkb3B0KFdLR2VvbG9jYXRpb25Qb3NpdGlvbkNyZWF0ZV9jKFdhbGxUaW1lOjpub3co
KS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNj
dXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNT
cGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCkpOworICAgIG1fcG9z
aXRpb24uYWRvcHQoV0tHZW9sb2NhdGlvblBvc2l0aW9uQ3JlYXRlX2MoV2FsbFRpbWU6Om5vdygp
LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1
cmFjeSwgYWx0aXR1ZGUuaGFzVmFsdWUoKSwgYWx0aXR1ZGUudmFsdWVPcigwKSwgYWx0aXR1ZGVB
Y2N1cmFjeS5oYXNWYWx1ZSgpLCBhbHRpdHVkZUFjY3VyYWN5LnZhbHVlT3IoMCksIGhlYWRpbmcu
aGFzVmFsdWUoKSwgaGVhZGluZy52YWx1ZU9yKDApLCBzcGVlZC5oYXNWYWx1ZSgpLCBzcGVlZC52
YWx1ZU9yKDApLCBmbG9vckxldmVsLmhhc1ZhbHVlKCksIGZsb29yTGV2ZWwudmFsdWVPcigwKSkp
OwogCiAgICAgbV9oYXNFcnJvciA9IGZhbHNlOwogICAgIG1fZXJyb3JNZXNzYWdlLmNsZWFyKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmgK
aW5kZXggMWVkNGFkZjliMzkzOTNhMzMzYWEzMjUxMDk3YjllM2FhNDJjYzM2Yi4uOWJmNjMzODRh
ZTI3ZGIyOGM1ZjU0MDU2ODViODhmNzViZWQ3YjUxNiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaApAQCAtMzcsNyArMzcsNyBAQCBwdWJs
aWM6CiAgICAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2soV0tDb250ZXh0UmVmKTsKICAgICB+R2Vv
bG9jYXRpb25Qcm92aWRlck1vY2soKTsKIAotICAgIHZvaWQgc2V0UG9zaXRpb24oZG91YmxlIGxh
dGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwg
ZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVh
ZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9v
ckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25h
bDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJs
ZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRQb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tT
dHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKIAogICAgIHZvaWQgc3RhcnRVcGRhdGluZyhXS0dlb2xv
Y2F0aW9uTWFuYWdlclJlZik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmluZGV4
IDZhMDhhYWE2YjYzOWYzZjU1YzhjNDZhOTRjMmZlOTVkYjU0N2Y3ODIuLmFkNGEyNWFlNWIwN2I3
NThlMmUwYTkxZmFmMWI1MjgzMDNlYjg0OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuY3BwCkBAIC03NSw5ICs3NSw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnVw
ZGF0ZUlzb2xhdGVkVHJlZU1vZGUoKQogfQogI2VuZGlmCiAKLXZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsK
LSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgdGhpcyk7CiB9CiAKIEpT
Q2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCkBAIC05Niwx
NyArOTYsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5jZWRBY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpCiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKKwogUmVmPEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7
Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3QgPSBzdGF0aWNf
Y2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7
Ci0KICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHJvb3QpOwogfQog
CiBSZWY8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZv
Y3VzZWRFbGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgUGxhdGZvcm1VSUVsZW1l
bnQgZm9jdXNlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nl
c3NpYmlsaXR5Rm9jdXNlZE9iamVjdChwYWdlKSk7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNyZWF0ZShmb2N1c2VkRWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmgKaW5kZXggNjZjMzQzODIyYmJiYzY5NTk5YmFmNmE0NzY2MGExMzg3ZWUyNTFiMC4u
ZDljMmYxMjZmODcxY2UyZWVmMDdiMDAzNTgwZjZkYWNlNmM1NDIzNSAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgfkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9p
ZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAgICAgdmlydHVhbCBKU0NsYXNzUmVm
IHdyYXBwZXJDbGFzcygpOwogICAgIAogICAgIC8vIEVuaGFuY2VkIGFjY2Vzc2liaWxpdHkuCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdz
L0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQppbmRleCBiOWY1
ZWVmZmE0NjQ5ZjQxN2Y4MmIxNjE3MDlmNGFiYWUwOTk5MWYyLi41MmUzZWZhOTkxYjlkZDZjMTc1
ZGJiOGU0MTBlNmZlY2ZhYzMwMTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVy
YXRvclRlc3RSdW5uZXIucG0KQEAgLTI2MSw4ICsyNjEsNyBAQCAke2ltcGxlbWVudGF0aW9uQ2xh
c3NOYW1lfSogdG8ke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfShKU0NvbnRleHRSZWYgY29udGV4
dCwgSgogCiBKU0NsYXNzUmVmICR7Y2xhc3NOYW1lfTo6JHtjbGFzc1JlZkdldHRlcn0oKQogewot
ICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7Ci0gICAgaWYgKCFqc0NsYXNzKSB7CisgICAg
c3RhdGljIGNvbnN0IEpTQ2xhc3NSZWYganNDbGFzcyA9IFtdIHsKICAgICAgICAgSlNDbGFzc0Rl
ZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OwogICAgICAgICBk
ZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJAe1skdHlwZS0+bmFtZV19IjsKICAgICAgICAgZGVmaW5p
dGlvbi5wYXJlbnRDbGFzcyA9IEB7WyRzZWxmLT5fcGFyZW50Q2xhc3NSZWZHZXR0ZXJFeHByZXNz
aW9uKCRpbnRlcmZhY2UpXX07CkBAIC0yNzQsOCArMjczLDggQEAgRU9GCiAgICAgcHVzaChAY29u
dGVudHMsICIgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBmaW5hbGl6ZTtcbiIpIHVubGVz
cyBfcGFyZW50SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCiAgICAgcHVzaChAY29udGVudHMsIDw8
RU9GKTsKLSAgICAgICAganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0oKTsK
ICAgICByZXR1cm4ganNDbGFzczsKIH0KIApAQCAtNDc3LDEwICs0NzYsMTEgQEAgc3ViIF9wbGF0
Zm9ybVR5cGVDb25zdHJ1Y3RvcgogewogICAgIG15ICgkc2VsZiwgJHR5cGUsICRhcmd1bWVudE5h
bWUpID0gQF87CiAKLSAgICByZXR1cm4gIkpTVmFsdWVUb051bGxhYmxlQm9vbGVhbihjb250ZXh0
LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0eXBlLT5p
c051bGxhYmxlOworICAgIHJldHVybiAidG9PcHRpb25hbEJvb2woY29udGV4dCwgJGFyZ3VtZW50
TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkdHlwZS0+aXNOdWxsYWJsZTsK
ICAgICByZXR1cm4gIkpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlm
ICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gIiRhcmd1bWVudE5hbWUiIGlm
ICR0eXBlLT5uYW1lIGVxICJvYmplY3QiOwotICAgIHJldHVybiAiYWRvcHQoSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSkiIGlmICQkc2VsZntjb2Rl
R2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gImNyZWF0ZUpTU3Ry
aW5nKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklz
U3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsRG91YmxlKGNvbnRleHQs
ICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJpbWl0aXZlVHlw
ZSgkdHlwZSkgJiYgJHR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikiIGlmICQkc2VsZntjb2RlR2VuZXJh
dG9yfS0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gInRvIiAuIF9pbXBsZW1l
bnRhdGlvbkNsYXNzTmFtZSgkdHlwZSkgLiAiKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIjsKIH0K
QEAgLTQ5OSwxOCArNDk5LDE2IEBAIHN1YiBfcGxhdGZvcm1UeXBlVmFyaWFibGVEZWNsYXJhdGlv
bgogICAgICAgICAiSlNWYWx1ZVJlZiIgPT4gMSwKICAgICApOwogCi0gICAgbXkgJG51bGxWYWx1
ZSA9ICIwIjsKKyAgICBteSAkbnVsbFZhbHVlID0gIm51bGxwdHIiOwogICAgIGlmICgkcGxhdGZv
cm1UeXBlIGVxICJKU1ZhbHVlUmVmIikgewogICAgICAgICAkbnVsbFZhbHVlID0gIkpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpIjsKLSAgICB9IGVsc2lmIChkZWZpbmVkICRub25Qb2ludGVy
VHlwZXN7JHBsYXRmb3JtVHlwZX0gJiYgJHBsYXRmb3JtVHlwZSBuZSAiZG91YmxlIikgewotICAg
ICAgICAkbnVsbFZhbHVlID0gIiRwbGF0Zm9ybVR5cGUoKSI7CisgICAgfSBlbHNpZiAoZGVmaW5l
ZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9KSB7CisgICAgICAgICRudWxsVmFsdWUg
PSAkdHlwZS0+aXNOdWxsYWJsZSA/ICJXVEY6Om51bGxvcHQiIDogIiRwbGF0Zm9ybVR5cGUoKSI7
CiAgICAgfQogCi0gICAgJHBsYXRmb3JtVHlwZSAuPSAiKiIgdW5sZXNzIGRlZmluZWQgJG5vblBv
aW50ZXJUeXBlc3skcGxhdGZvcm1UeXBlfTsKLQotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAk
dmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiAmJiAkY29uc3RydWN0b3I7IiBpZiAkY29uZGl0aW9u
ICYmICRwbGF0Zm9ybVR5cGUgZXEgImJvb2wiOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAk
dmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiA/ICRjb25zdHJ1Y3RvciA6ICRudWxsVmFsdWU7IiBp
ZiAkY29uZGl0aW9uOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAkdmFyaWFibGVOYW1lID0g
JGNvbnN0cnVjdG9yOyI7CisgICAgcmV0dXJuICJib29sICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0
aW9uICYmICRjb25zdHJ1Y3RvcjsiIGlmICRjb25kaXRpb24gJiYgJHBsYXRmb3JtVHlwZSBlcSAi
Ym9vbCI7CisgICAgcmV0dXJuICJhdXRvICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uID8gJGNv
bnN0cnVjdG9yIDogJG51bGxWYWx1ZTsiIGlmICRjb25kaXRpb247CisgICAgcmV0dXJuICJhdXRv
ICR2YXJpYWJsZU5hbWUgPSAkY29uc3RydWN0b3I7IjsKIH0KIAogc3ViIF9yZXR1cm5FeHByZXNz
aW9uCkBAIC01MTgsMTEgKzUxNiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBteSAo
JHNlbGYsICRyZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAiSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1bmRl
ZmluZWQiOwotICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQsICR7
ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVy
blR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHBy
ZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlw
ZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJl
dHVybiAiJHtleHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7CiAg
ICAgcmV0dXJuICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYg
JCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwotICAg
IHJldHVybiAiSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufS5n
ZXQoKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBl
KTsKKyAgICByZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIg
aWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwogICAg
IHJldHVybiAidG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwogfQog
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL1Rlc3RSdW5uZXIuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAppbmRleCBmYmVmMzk2ZjVmNmYzYmZmNGY5OWM4YTU2
YTZlNjJhYzAxNDBmZmE0Li5mMzdlMDA2Nzc1YjhlMzA2MWM3Y2VjOGY5YjVlZjc4ODYxODA5MTBh
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL1Rlc3RSdW5uZXIuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKQEAgLTIxNSw3ICsyMTUsNyBAQCBpbnRlcmZh
Y2UgVGVzdFJ1bm5lciB7CiAKICAgICAvLyBHZW9sb2NhdGlvbgogICAgIHVuZGVmaW5lZCBzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhbiB2YWx1ZSk7Ci0gICAgdW5kZWZpbmVkIHNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgYWx0aXR1ZGUsIG9wdGlvbmFsIG9iamVj
dCBhbHRpdHVkZUFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgaGVhZGluZywgb3B0aW9uYWwgb2Jq
ZWN0IHNwZWVkLCBvcHRpb25hbCBvYmplY3QgZmxvb3JMZXZlbCk7CisgICAgdW5kZWZpbmVkIHNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBkb3VibGU/IGFsdGl0dWRlLCBvcHRpb25hbCBk
b3VibGU/IGFsdGl0dWRlQWNjdXJhY3ksIG9wdGlvbmFsIGRvdWJsZT8gaGVhZGluZywgb3B0aW9u
YWwgZG91YmxlPyBzcGVlZCwgb3B0aW9uYWwgZG91YmxlPyBmbG9vckxldmVsKTsKICAgICB1bmRl
ZmluZWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKERPTVN0cmlu
ZyBlcnJvck1lc3NhZ2UpOwogICAgIGJvb2xlYW4gaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZl
KCk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
RXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDU1M2ZkMDVlZjE2OWYz
NTIzYTA0MzFmMTMxNzQyZmJjMjIxNzA0MDkuLjQ0MjdmMDg5MjYwMTZhYTM0ODM5NzIyYzcxYmMz
YTA2MTJkZDI3ZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcApAQCAtMjYsMTAg
KzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kaW5nQ29u
dHJvbGxlci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5j
bHVkZSAiSlNFdmVudFNlbmRpbmdDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rp
b25zLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dL
QnVuZGxlRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oPgpA
QCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgTWVudUl0ZW1Qcml2YXRlRGF0YSB7CiB9OwogCiAjaWYg
RU5BQkxFKENPTlRFWFRfTUVOVVMpCisKIHN0YXRpYyBKU1ZhbHVlUmVmIG1lbnVJdGVtQ2xpY2tD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKIHsKICAg
ICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJdGVt
UHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtNjIsNyAr
NjMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNrQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iagogc3RhdGljIEpTVmFsdWVSZWYgZ2V0TWVu
dUl0ZW1UaXRsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmpl
Y3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewog
ICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRhID0gc3RhdGljX2Nhc3Q8TWVudUl0
ZW1Qcml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZSA9IGFkb3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5
VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQoKSkpOworICAgIGF1dG8gd2tUaXRsZSA9IGFk
b3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQo
KSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHdrVGl0bGUp
LmdldCgpKTsKIH0KIApAQCAtNzMsMTggKzc0LDE3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldE1l
bnVJdGVtQ2hpbGRyZW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYK
ICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJ
dGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CiAgICAgYXV0byBj
aGlsZHJlbiA9IGFkb3B0V0soV0tDb250ZXh0TWVudUNvcHlTdWJtZW51SXRlbXMocHJpdmF0ZURh
dGEtPm1faXRlbS5nZXQoKSkpOwogCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2Jq
ZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVj
dE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAoIVdLQXJyYXlHZXRTaXplKGNo
aWxkcmVuLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgICAgICByZXR1
cm4gYXJyYXk7CiAKLSAgICBKU09iamVjdFJlZiBhcnJheU9iamVjdCA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBX
S0FycmF5R2V0U2l6ZShjaGlsZHJlbi5nZXQoKSk7ICsraSkgewogICAgICAgICBhdXRvIGl0ZW0g
PSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4
KGNoaWxkcmVuLmdldCgpLCBpKSk7CiAgICAgICAgIGF1dG8qIHByaXZhdGVEYXRhID0gbmV3IE1l
bnVJdGVtUHJpdmF0ZURhdGEoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBpdGVtKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
YXJyYXlPYmplY3QsIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCks
IHByaXZhdGVEYXRhKSwgMCk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNv
bnRleHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFzcygp
LCBwcml2YXRlRGF0YSksIDApOwogICAgIH0KIAotICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAg
ICByZXR1cm4gYXJyYXk7CiB9CiAKIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY01lbnVJ
dGVtRnVuY3Rpb25zW10gPSB7CkBAIC0xMjYsNiArMTI2LDcgQEAgc3RhdGljIEpTQ2xhc3NSZWYg
Z2V0TWVudUl0ZW1DbGFzcygpCiAKICAgICByZXR1cm4gbWVudUl0ZW1DbGFzczsKIH0KKwogI2Vu
ZGlmCiAKIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXIoSlNTdHJpbmdSZWYg
bW9kaWZpZXIpCkBAIC0xNTAsMjUgKzE1MSwzMSBAQCBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBw
YXJzZU1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyKQogICAgIHJldHVybiAwOwogfQogCi1z
dGF0aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGFycmF5KQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK3N0YXRpYyB1aW50NjRfdCBw
YXJzZVRvdWNoTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIpCiB7Ci0gICAgYXV0byBsZW5n
dGhTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikp
OwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQsIGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIDApOwotICAgIGlmICghbGVuZ3RoVmFsdWUp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CisgICAgaWYgKEpTU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJjdHJsIikpCisgICAgICAgIHJldHVybiBr
V0tFdmVudE1vZGlmaWVyc0NvbnRyb2xLZXk7CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobW9kaWZpZXIsICJzaGlmdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2Rp
ZmllcnNTaGlmdEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2Rp
ZmllciwgImFsdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2RpZmllcnNBbHRLZXk7Cisg
ICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJtZXRhS2V5Iikp
CisgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVyc01ldGFLZXk7CisgICAgcmV0dXJuIDA7
CiB9CiAKKyNlbmRpZgorCiBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJy
YXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKICAgICBp
ZiAoIWFycmF5VmFsdWUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gVGhlIHZhbHVlIG1h
eSBlaXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBv
ZiBtb2RpZmllcnMuCi0gICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVl
KSkgewotICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgYXJyYXlWYWx1ZSwgMCkpOwotICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihzdHJp
bmcuZ2V0KCkpOwotICAgIH0KKyAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFycmF5
VmFsdWUpKQorICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihjcmVhdGVKU1N0cmluZyhjb250
ZXh0LCBhcnJheVZhbHVlKS5nZXQoKSk7CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250
ZXh0LCBhcnJheVZhbHVlKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzYsMjkgKzE4MywyMCBA
QCBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYQogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5TGVu
Z3RoKGNvbnRleHQsIGFycmF5KTsKICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IDA7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCAmZXhjZXB0aW9uKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRv
IHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsICZleGNl
cHRpb24pKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBtb2RpZmllcnMgfD0gcGFyc2VNb2RpZmllcihzdHJpbmcuZ2V0KCkpOworICAgICAg
ICBpZiAoYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFy
cmF5LCBpLCBudWxscHRyKSkKKyAgICAgICAgICAgIG1vZGlmaWVycyB8PSBwYXJzZU1vZGlmaWVy
KGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CiAgICAgfQogICAgIHJldHVy
biBtb2RpZmllcnM7CiB9CiAKLVJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXIpOwotfQotCi1FdmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNl
bmRpbmdDb250cm9sbGVyKCkKK3N0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXJB
cnJheShKU1ZhbHVlUmVmIGFycmF5VmFsdWUpCiB7CisgICAgcmV0dXJuIHBhcnNlTW9kaWZpZXJB
cnJheShXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpLCBhcnJh
eVZhbHVlKTsKIH0KIAotRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXIoKQorUmVmPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+IEV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OmNyZWF0ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcik7CiB9CiAKIEpTQ2xhc3NSZWYgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6d3JhcHBl
ckNsYXNzKCkKQEAgLTIwNiwyMzcgKzIwNCwxMTYgQEAgSlNDbGFzc1JlZiBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogICAgIHJldHVybiBKU0V2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmV2ZW50U2VuZGluZ0NvbnRyb2xsZXJDbGFzcygpOwogfQogCi1lbnVtIE1vdXNlU3Rh
dGUgewotICAgIE1vdXNlVXAsCi0gICAgTW91c2VEb3duCi19OworZW51bSBNb3VzZVN0YXRlIHsg
TW91c2VVcCwgTW91c2VEb3duIH07CiAKLXN0YXRpYyBXS011dGFibGVEaWN0aW9uYXJ5UmVmIGNy
ZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VTdGF0ZSBzdGF0ZSwgaW50IGJ1dHRvbiwgV0tFdmVu
dE1vZGlmaWVycyBtb2RpZmllcnMpCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlU3RhdGUgc3RhdGUsIGludCBidXR0b24sIFdL
RXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQogewotICAgIFdLTXV0YWJsZURpY3Rpb25hcnlSZWYg
RXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHN0YXRlID09IE1vdXNlVXAgPyAiTW91c2VVcCIgOiAiTW91c2VEb3duIikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGJ1dHRvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkJ1dHRvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gYnV0dG9uUmVm
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHksIGJ1dHRvbktleS5nZXQoKSwgYnV0dG9uUmVmLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlmaWVyc1JlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUobW9kaWZpZXJzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LCBtb2RpZmllcnNLZXkuZ2V0KCksIG1vZGlmaWVyc1JlZi5nZXQoKSk7Ci0KLSAgICBy
ZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3Nh
Z2UiLCBzdGF0ZSA9PSBNb3VzZVVwID8gIk1vdXNlVXAiIDogIk1vdXNlRG93biIpOworICAgIHNl
dFZhbHVlKGJvZHksICJCdXR0b24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbikpLmdl
dCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTW9kaWZpZXJzIiwgYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShtb2RpZmllcnMpKS5nZXQoKSk7CisgICAgcmV0dXJuIGJvZHk7CiB9CiAKIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9k
aWZpZXJBcnJheSkgCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBpbmplY3RlZEJ1bmRs
ZS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQ
YWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5k
bGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJz
IG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFycmF5KTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZURvd24sIGJ1dHRvbiwg
bW9kaWZpZXJzKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhwYWdlLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZl
bnRTZW5kZXIiLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBwYXJz
ZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJheSkpLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjptb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJB
cnJheSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFy
cmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBidXR0
b24sIG1vZGlmaWVycykpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVh
dGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlVXAsIGJ1dHRvbiwgcGFyc2VNb2RpZmllckFycmF5KG1v
ZGlmaWVyQXJyYXkpKS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
bW91c2VNb3ZlVG8oaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZU1vdmVUbyIpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VL
ZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlki
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJT
dWJNZXNzYWdlIiwgIk1vdXNlTW92ZVRvIik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CiAgICAgbV9wb3NpdGlvbiA9IFdLUG9p
bnRNYWtlKHgsIHkpOwotICAgIAotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgMCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9k
eS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNs
aWNrKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTW91c2VGb3JjZUNsaWNrIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVz
c2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZUNsaWNrIik7
CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQo
KSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c3RhcnRBbmRDYW5jZWxNb3Vz
ZUZvcmNlQ2xpY2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZl
bnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZl
bnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdl
IiwgIlN0YXJ0QW5kQ2FuY2VsTW91c2VGb3JjZUNsaWNrIik7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZURvd24oKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Vi
TWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlRG93biIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJN
ZXNzYWdlIiwgIk1vdXNlRm9yY2VEb3duIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6bW91c2VGb3JjZVVwKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VGb3JjZVVwIikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtl
eS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91
c2VGb3JjZVVwIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VG
b3JjZUNoYW5nZWQoZG91YmxlIGZvcmNlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlQ2hhbmdlZCIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkZvcmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBmb3JjZVJlZiA9
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoZm9yY2UpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGZvcmNlS2V5LmdldCgpLCBmb3JjZVJlZi5n
ZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAg
IGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZUZvcmNlQ2hhbmdlZCIpOworICAgIHNl
dFZhbHVlKGJvZHksICJGb3JjZSIsIGZvcmNlKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMZWFwRm9yd2Fy
ZCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVGltZUluTWlsbGlzZWNvbmRzIikpOwotICAgIFdLUmV0YWluUHRyPFdL
VUludDY0UmVmPiB0aW1lUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHRpbWVLZXkuZ2V0KCksIHRpbWVSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTGVh
cEZvcndhcmQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiVGltZUluTWlsbGlzZWNvbmRzIiwgYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMpKS5nZXQoKSk7CisgICAgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljaygpCiB7Ci0g
ICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOwotICAgIGludCBidXR0b24gPSAwOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLQot
ICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSBkb3duLgotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IG1vdXNlRG93bk1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3Vz
ZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlRG93bk1lc3NhZ2VCb2R5Lmdl
dCgpKTsKLQotICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSB1cC4KLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBtb3VzZVVwTWVzc2FnZUJvZHkgPSBhZG9wdFdLKGNyZWF0
ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlVXBNZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVz
c2FnZUJvZHkoTW91c2VEb3duLCAwLCAwKS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJF
dmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgMCwgMCkuZ2V0KCkp
OwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRl
S2V5RG93bk1lc3NhZ2VCb2R5KEpTU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2Rp
ZmllcnMsIGludCBsb2NhdGlvbikKIHsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleURvd24iKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5Lmdl
dCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4ga2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5Iikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
a2V5S2V5LmdldCgpLCB0b1dLKGtleSkuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJz
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyc0tleS5nZXQo
KSwgbW9kaWZpZXJzUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBs
b2NhdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxvY2F0
aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBsb2NhdGlvblJlZiA9IGFkb3B0
V0soV0tVSW50NjRDcmVhdGUobG9jYXRpb24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGxvY2F0aW9uS2V5LmdldCgpLCBsb2NhdGlvblJl
Zi5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRv
IGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiS2V5RG93biIpOworICAgIHNldFZhbHVlKGJvZHksICJL
ZXkiLCB0b1dLKGtleSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJNb2RpZmllcnMiLCBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiTG9jYXRpb24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxvY2F0aW9uKSkuZ2V0KCkp
OworICAgIHJldHVybiBib2R5OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Omtl
eURvd24oSlNTdHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2Nh
dGlvbikKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFy
cmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4ga2V5RG93bk1lc3Nh
Z2VCb2R5ID0gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgbW9kaWZpZXJzLCBsb2NhdGlv
bik7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlS2V5RG93bk1lc3NhZ2VC
b2R5KGtleSwgcGFyc2VNb2RpZmllckFycmF5KG1vZGlmaWVyQXJyYXkpLCBsb2NhdGlvbikuZ2V0
KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNjaGVkdWxlQXN5bmNocm9u
b3VzS2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBrZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHko
a2V5LCAwIC8qIG1vZGlmaWVycyAqLywgMCAvKiBsb2NhdGlvbiAqLyk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZUtleURvd25NZXNz
YWdlQm9keShrZXksIDAsIDApLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1l
c3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VTY3JvbGxCeSIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1
Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCiAgICAgV0tCdW5k
bGVQYWdlRm9yY2VSZXBhaW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSk7IC8vIFRyaWdnZXJzIGEgc2Nyb2xsaW5nIHRyZWUgY29tbWl0LgotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSk7CisKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VTY3JvbGxCeSIp
OworICAgIHNldFZhbHVlKGJvZHksICJYIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSkuZ2V0
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSku
Z2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsK
IH0KIAogc3RhdGljIHVpbnQ2NF90IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcoSlNTdHJpbmdSZWYg
cGhhc2VTdHIpCkBAIC00NzUsOTAgKzM1Miw1OCBAQCBzdGF0aWMgdWludDY0X3QgY2dFdmVudE1v
bWVudHVtUGhhc2VGcm9tU3RyaW5nKEpTU3RyaW5nUmVmIHBoYXNlU3RyKQogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNl
cyhpbnQgeCwgaW50IHksIEpTU3RyaW5nUmVmIHBoYXNlU3RyLCBKU1N0cmluZ1JlZiBtb21lbnR1
bVN0cikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAg
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIk1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLSAgICAKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHhSZWYgPSBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJl
ZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0K
ICAgICB1aW50NjRfdCBwaGFzZSA9IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcocGhhc2VTdHIpOwog
ICAgIHVpbnQ2NF90IG1vbWVudHVtID0gY2dFdmVudE1vbWVudHVtUGhhc2VGcm9tU3RyaW5nKG1v
bWVudHVtU3RyKTsKLSAgICAKKwogICAgIGlmIChwaGFzZSA9PSA0IC8qIGtDR1Njcm9sbFBoYXNl
RW5kZWQgKi8gfHwgcGhhc2UgPT0gOCAvKiBrQ0dTY3JvbGxQaGFzZUNhbmNlbGxlZCAqLykKICAg
ICAgICAgbV9zZW50V2hlZWxQaGFzZUVuZE9yQ2FuY2VsID0gdHJ1ZTsKLSAgICAKICAgICBpZiAo
bW9tZW50dW0gPT0gMyAvKiBrQ0dNb21lbnR1bVNjcm9sbFBoYXNlRW5kICovKQogICAgICAgICBt
X3NlbnRXaGVlbE1vbWVudHVtUGhhc2VFbmQgPSB0cnVlOwogCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBoYXNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiUGhhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHBoYXNlUmVmID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShwaGFzZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgcGhhc2VLZXkuZ2V0KCksIHBoYXNlUmVmLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb21lbnR1bUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vbWVudHVtIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLVUludDY0UmVmPiBtb21lbnR1bVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9t
ZW50dW0pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIG1vbWVudHVtS2V5LmdldCgpLCBtb21lbnR1bVJlZi5nZXQoKSk7Ci0KICAgICBXS0J1
bmRsZVBhZ2VGb3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpKTsgLy8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcgdHJlZSBjb21taXQuCi0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpKTsKKworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZVNjcm9sbEJ5
V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIGFk
b3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIs
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
UGhhc2UiLCBwaGFzZSk7CisgICAgc2V0VmFsdWUoYm9keSwgIk1vbWVudHVtIiwgbW9tZW50dW0p
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAog
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQg
eCwgaW50IHksIGJvb2wgcGFnZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5IikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3Vi
TWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0gYWRvcHRXSyhX
S0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gcGFnZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJQYWdlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcGFnZWRS
ZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHBhZ2VkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwYWdlZEtleS5nZXQoKSwgcGFnZWRS
ZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkNvbnRpbnVvdXNN
b3VzZVNjcm9sbEJ5Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlBhZ2VkIiwgcGFnZWQp
OwogICAgIC8vIEZJWE1FOiBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIGFzeW5jaHJvbm91cywgYXMg
c2Nyb2xsaW5nIGlzIGludHJpbnNpY2FsbHkgYXN5bmNocm9ub3VzLgogICAgIC8vIFNlZSBhbHNv
OiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODI1Nj4uCi0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogSlNWYWx1ZVJl
ZiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250ZXh0Q2xpY2soKQogewotICAgIFdLQnVuZGxl
UGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
OworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogI2lmIEVOQUJMRShDT05URVhUX01FTlVT
KQotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1
bmRsZVBhZ2VDb3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikp
OwotICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0
LCAwLCAwLCAwKTsKKyAgICBhdXRvIG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VD
b3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikpOworICAgIGF1
dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAo
IW1lbnVFbnRyaWVzKQotICAgICAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgICAgIHJldHVy
biBhcnJheTsKIAotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIGFycmF5UmVzdWx0LCAwKTsKICAgICBzaXplX3QgZW50cmllc1NpemUgPSBXS0FycmF5
R2V0U2l6ZShtZW51RW50cmllcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
bnRyaWVzU2l6ZTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0
SXRlbUF0SW5kZXgobWVudUVudHJpZXMuZ2V0KCksIGkpKSA9PSBXS0NvbnRleHRNZW51SXRlbUdl
dFR5cGVJRCgpKTsKIAogICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJlZiBpdGVtID0gc3RhdGlj
X2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZW51RW50
cmllcy5nZXQoKSwgaSkpOwogICAgICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0
YSA9IG5ldyBNZW51SXRlbVByaXZhdGVEYXRhKHBhZ2UsIGl0ZW0pOwotICAgICAgICBKU09iamVj
dFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwgaSwgSlNPYmplY3RNYWtlKGNv
bnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAwKTsKKyAgICAgICAgSlNP
YmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFrZShj
b250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCksIHByaXZhdGVEYXRhKSwgMCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgIHJldHVybiBhcnJheTsKICNlbHNlCiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogI2VuZGlmCkBAIC02MTUsMjEgKzQ2
MCwxNCBAQCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKiB0b01vbml0b3JXaGVlbEV2ZW50c09w
dGlvbnMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVgogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0
KGNvbnRleHQsIGFyZ3VtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRv
IHJlc2V0TGF0Y2hpbmdTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygicmVzZXRMYXRjaGluZyIpKTsKLSAgICBhdXRvIHJlc2V0TGF0Y2hpbmdWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50
LCBudWxscHRyKSwgcmVzZXRMYXRjaGluZ1N0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAgICBi
b29sIHJlc2V0TGF0Y2hpbmcgPSB0cnVlOwotICAgIGlmIChyZXNldExhdGNoaW5nVmFsdWUgJiYg
SlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5nVmFsdWUpKQotICAgICAgICBy
ZXNldExhdGNoaW5nID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5nVmFs
dWUpOwotCiAgICAgc3RhdGljIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMgb3B0aW9uczsKLSAg
ICBvcHRpb25zLnJlc2V0TGF0Y2hpbmcgPSByZXNldExhdGNoaW5nOworICAgIG9wdGlvbnMucmVz
ZXRMYXRjaGluZyA9IGJvb2xlYW5Qcm9wZXJ0eShjb250ZXh0LCAoSlNPYmplY3RSZWYpYXJndW1l
bnQsICJyZXNldExhdGNoaW5nIiwgdHJ1ZSk7CiAgICAgcmV0dXJuICZvcHRpb25zOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vbml0b3JXaGVlbEV2ZW50cyhNb25pdG9yV2hl
ZWxFdmVudHNPcHRpb25zKiBvcHRpb25zKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFn
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICAKICAg
ICBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgPSBmYWxzZTsKICAgICBtX3NlbnRXaGVlbE1v
bWVudHVtUGhhc2VFbmQgPSBmYWxzZTsKQEAgLTY2Myw3ICs1MDEsNyBAQCB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OmNhbGxBZnRlclNjcm9sbGluZ0NvbXBsZXRlcyhKU1ZhbHVlUmVmIGZ1
bmN0aW9uQ2FsbAogICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgCkBAIC02
ODMsMTk5ICs1MjEsMTAyIEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FsbEFmdGVy
U2Nyb2xsaW5nQ29tcGxldGVzKEpTVmFsdWVSZWYgZnVuY3Rpb25DYWxsCiB9CiAKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmFkZFRvdWNo
UG9pbnQoaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRUb3VjaFBvaW50IikpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5n
ZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJBZGRU
b3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oeCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHkp
KTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5Lmdl
dCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp1cGRhdGVUb3VjaFBvaW50
KGludCBpbmRleCwgaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVcGRhdGVUb3VjaFBvaW50IikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSW5kZXgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGluZGV4UmVmID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXkuZ2V0KCksIGluZGV4UmVmLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2
NFJlZj4geFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IHlSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiVXBkYXRlVG91Y2hQb2ludCIpOworICAgIHNl
dFZhbHVlKGJvZHksICJJbmRleCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbmRleCkpOworICAg
IHNldFZhbHVlKGJvZHksICJYIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHgpKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiWSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih5KSk7CisgICAgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKLXZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihjb25zdCBKU1N0cmluZ1Jl
ZiAmbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQordm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpz
ZXRUb3VjaE1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0VG91Y2hNb2RpZmllciIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdl
dCgpKTsKLQotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kID0gMDsKLSAgICBpZiAoSlNTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImN0cmwiKSkKLSAgICAgICAgbW9kID0ga1dL
RXZlbnRNb2RpZmllcnNDb250cm9sS2V5OwotICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1vZGlmaWVyLCAic2hpZnQiKSkKLSAgICAgICAgbW9kID0ga1dLRXZlbnRNb2RpZmll
cnNTaGlmdEtleTsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmll
ciwgImFsdCIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlmaWVyc0FsdEtleTsKLSAgICBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgIm1ldGEiKSkKLSAgICAg
ICAgbW9kID0ga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5OwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1vZGlmaWVyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiTW9kaWZpZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlmaWVy
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2QpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyS2V5LmdldCgpLCBtb2Rp
ZmllclJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRW5hYmxlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBlbmFibGVSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGVuYWJsZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgZW5hYmxlS2V5LmdldCgpLCBlbmFibGVSZWYuZ2V0KCkpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1
Yk1lc3NhZ2UiLCAiU2V0VG91Y2hNb2RpZmllciIpOworICAgIHNldFZhbHVlKGJvZHksICJNb2Rp
ZmllciIsIHBhcnNlVG91Y2hNb2RpZmllcihtb2RpZmllcikpOworICAgIHNldFZhbHVlKGJvZHks
ICJFbmFibGUiLCBlbmFibGUpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCi0KIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFRvdWNoUG9pbnRSYWRpdXMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1giKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHJhZGl1c1gpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXku
Z2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNZIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShy
YWRpdXNZKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlNl
dFRvdWNoUG9pbnRSYWRpdXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUmFkaXVzWCIsIHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihyYWRpdXNYKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlJhZGl1c1ki
LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmFkaXVzWSkpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OnRvdWNoU3RhcnQoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2Fn
ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaFN0YXJ0IikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2Fn
ZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAi
VG91Y2hTdGFydCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRl
ciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNo
TW92ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRl
ciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlRvdWNoTW92ZSIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VO
YW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7
CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwor
ICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlRvdWNoTW92ZSIpOworICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoRW5kKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hFbmQiKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBz
dWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVz
c2FnZSIsICJUb3VjaEVuZCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2
ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hDYW5jZWwiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBz
dWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJUb3VjaENhbmNlbCIp
OworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0
KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNsZWFyVG91Y2hQb2ludHMo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDbGVhclRvdWNoUG9pbnRzIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2Fn
ZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAw
KTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiQ2xlYXJUb3VjaFBvaW50cyIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkp
OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnJlbGVhc2VUb3VjaFBvaW50KGlu
dCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2Vu
ZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUmVsZWFzZVRvdWNoUG9pbnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBz
dWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5k
ZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5kZXhSZWYgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwgaW5kZXhSZWYuZ2V0KCkpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1
Yk1lc3NhZ2UiLCAiUmVsZWFzZVRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiSW5k
ZXgiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXgpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FuY2Vs
VG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiBpbmRleFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGluZGV4S2V5
LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJDYW5jZWxUb3Vj
aFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIkluZGV4Iiwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGluZGV4KSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgYm9keS5nZXQoKSk7CiB9CisKICNlbmRpZgogCiAvLyBPYmplY3QgQ3JlYXRpb24KIAotdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3ZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRS
ZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJl
dmVudFNlbmRlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImV2ZW50U2VuZGVyIiwgdGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRleCA5YTJhZmQ5NThjY2Q3MGVj
ZDIxZWM0ZTNiM2ZlYzRjZjdjYzg1YmE4Li5lYTQzN2ZiZGJlMGMzNDg5MDU3ZTMxNjA3NWFkZWE2
NTNhZGI1MTBkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaApAQCAtMzAsMjcgKzMwLDIz
IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLR2VvbWV0cnkuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+
CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwor
dHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVmOwordHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAK
IHN0cnVjdCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zIHsKLSAgICBNb25pdG9yV2hlZWxFdmVu
dHNPcHRpb25zKGJvb2wgcmVzZXRMYXRjaGluZyA9IHRydWUpCi0gICAgICAgIDogcmVzZXRMYXRj
aGluZyhyZXNldExhdGNoaW5nKQotICAgIHsgfQotCiAgICAgYm9vbCByZXNldExhdGNoaW5nIHsg
dHJ1ZSB9OwogfTsKIAogTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyogdG9Nb25pdG9yV2hlZWxF
dmVudHNPcHRpb25zKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAKLWNsYXNzIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgeworY2xhc3MgRXZlbnRTZW5kaW5n
Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5F
dmVudFNlbmRpbmdDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CiAKLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVy
Q2xhc3MoKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAg
IHZvaWQgbW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSk7CiAg
ICAgdm9pZCBtb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSk7CkBA
IC03Myw3ICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGtleURvd24oSlNTdHJpbmdSZWYga2V5
LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2NhdGlvbik7CiAgICAgdm9pZCBzY2hl
ZHVsZUFzeW5jaHJvbm91c0tleURvd24oSlNTdHJpbmdSZWYga2V5KTsKIAotICAgIC8vIFpvb20g
ZnVuY3Rpb25zLgogICAgIHZvaWQgdGV4dFpvb21JbigpOwogICAgIHZvaWQgdGV4dFpvb21PdXQo
KTsKICAgICB2b2lkIHpvb21QYWdlSW4oKTsKQEAgLTgxLDEwICs3Niw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNjYWxlUGFnZUJ5KGRvdWJsZSBzY2FsZSwgZG91YmxlIHgsIGRvdWJsZSB5KTsKIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgLy8gVG91Y2ggZXZlbnRzLgogICAgIHZvaWQg
YWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpOwogICAgIHZvaWQgdXBkYXRlVG91Y2hQb2ludChp
bnQgaW5kZXgsIGludCB4LCBpbnQgeSk7Ci0gICAgdm9pZCBzZXRUb3VjaE1vZGlmaWVyKGNvbnN0
IEpTU3RyaW5nUmVmICZtb2RpZmllciwgYm9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0VG91Y2hN
b2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllciwgYm9vbCBlbmFibGUpOwogICAgIHZvaWQgc2V0
VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOwogICAgIHZvaWQgdG91
Y2hTdGFydCgpOwogICAgIHZvaWQgdG91Y2hNb3ZlKCk7CkBAIC05Niw3ICs5MCwxMCBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyKCk7Cisg
ICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlcigpID0gZGVmYXVsdDsKKworICAgIEpTQ2xhc3NSZWYg
d3JhcHBlckNsYXNzKCkgZmluYWw7CisKICAgICBXS1BvaW50IG1fcG9zaXRpb247CiAgICAgYm9v
bCBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zZW50
V2hlZWxNb21lbnR1bVBoYXNlRW5kIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcAppbmRleCA5MzU4ZjRh
MGRlNWIzZDliYzMxNmI1ZTBhZGZkMDQxMjY2NDI1OGZmLi5kYjQyNWU3NWU4MGIwNTQwOGJkZjNl
M2UzNjQ3NjUxMDk2MzBkM2ZkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0zNywxNCArMzcsNiBAQCBSZWY8
R0NDb250cm9sbGVyPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgR0NDb250cm9sbGVyKTsKIH0KIAotR0NDb250cm9sbGVyOjpHQ0NvbnRyb2xsZXIoKQot
ewotfQotCi1HQ0NvbnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIoKQotewotfQotCiBKU0NsYXNzUmVm
IEdDQ29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKIHsKICAgICByZXR1cm4gSlNHQ0NvbnRyb2xs
ZXI6OmdDQ29udHJvbGxlckNsYXNzKCk7CkBAIC02NSwxMSArNTcsOSBAQCBzaXplX3QgR0NDb250
cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkKICAgICByZXR1cm4gV0tCdW5kbGVHZXRKYXZhU2Ny
aXB0T2JqZWN0c0NvdW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSk7CiB9
CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09i
amVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dP
YmplY3QsICJHQ0NvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIHNldEds
b2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJHQ0NvbnRyb2xsZXIiLCB0aGlzKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaAppbmRleCBkMzQ5YzFjZTk5MGU4N2Q3ZGYyZmNiOGM4
Mjg4NWJjYTMwNTcyYTBiLi4zNGFiMjQyNTEzOGMxZDc1ZmIyNGEyNTEwNzQzNjc4ZDgxOWVkYzIy
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29u
dHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0ND
b250cm9sbGVyLmgKQEAgLTI2LDI2ICsyNiwyNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJKU1dyYXBwYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4
dFJlZjsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIEdDQ29udHJvbGxlciA6IHB1YmxpYyBK
U1dyYXBwYWJsZSB7CitjbGFzcyBHQ0NvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgSlNXcmFwcGFi
bGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R0NDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAg
ICB2aXJ0dWFsIH5HQ0NvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKIAotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBw
ZXJDbGFzcygpOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAg
ICAgdm9pZCBjb2xsZWN0KCk7CiAgICAgdm9pZCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9v
bCB3YWl0VW50aWxEb25lKTsKICAgICBzaXplX3QgZ2V0SlNPYmplY3RDb3VudCgpOwogCiBwcml2
YXRlOgotICAgIEdDQ29udHJvbGxlcigpOworICAgIEdDQ29udHJvbGxlcigpID0gZGVmYXVsdDsK
KworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggN2FlODFiYjRiNTkwOTZjNThjOGI1YTE0Yzg4
YzRjMzNmOGMxNDU3MS4uN2YxNjIxNTA3NGEwMjk3ZjJhNjc5YzE5NTQ4M2FkMjk4MDlmOGEyMiAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHAKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJJbmplY3RlZEJ1
bmRsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgorI2luY2x1ZGUgIkRpY3Rpb25h
cnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKLSNpbmNsdWRl
ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVu
ZGxlLmg+CkBAIC0xMTgsMTggKzExOCwxMyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRDcmVh
dGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIGlmICghaXNNYWluUGFnZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluaXRpYWxpemF0aW9uIikp
OwogICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOwogICAgIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKG1f
YnVuZGxlLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXN1bHQpOworICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShtX2J1bmRsZSwgdG9XSygiSW5pdGlhbGl6YXRpb24i
KS5nZXQoKSwgbnVsbHB0ciwgJnJlc3VsdCk7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECi0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJlc3VsdCkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gaW5pdGlhbGl6
YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KHJl
c3VsdCkpOworICAgIGF1dG8gaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhkaWN0
aW9uYXJ5VmFsdWUocmVzdWx0KSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVz
dW1lVGVzdGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJl
c3VtZVRlc3RpbmciKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VtZVRlc3RpbmdWYWx1ZSA9IFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkoaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5LmdldCgpLCByZXN1
bWVUZXN0aW5nS2V5LmdldCgpKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmVzdW1lVGVzdGlu
Z1ZhbHVlKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgaWYgKFdLQm9vbGVhbkdldFZh
bHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdW1lVGVzdGluZ1ZhbHVlKSkpCisgICAg
aWYgKGJvb2xlYW5WYWx1ZShpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkuZ2V0KCksICJSZXN1bWVU
ZXN0aW5nIikpCiAgICAgICAgIGJlZ2luVGVzdGluZyhpbml0aWFsaXphdGlvbkRpY3Rpb25hcnku
Z2V0KCksIEJlZ2luZ1Rlc3RpbmdNb2RlOjpSZXN1bWUpOwogfQogCkBAIC0xNzksMTYgKzE3NCwx
OSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldExvY2FsU2V0dGluZ3MoKQogICAgIHNldGxv
Y2FsZShMQ19BTEwsICIiKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKK3Zv
aWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKFdLU3RyaW5nUmVmLCBXS1R5cGVS
ZWYpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFcnJvciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShtX2J1bmRsZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgdG9XSygiRXJyb3IiKS5nZXQo
KSwgdG9XSygiVW5rbm93biIpLmdldCgpKTsKK30KKwordm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9z
dFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBuYW1lLCBXS1R5
cGVSZWYgYm9keSkKK3sKKyAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCB0b1dLKG5h
bWUpLmdldCgpLCBib2R5KTsKIH0KIAogc3RhdGljIHZvaWQgcG9zdEdDVGFzayh2b2lkKiBjb250
ZXh0KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gcmVpbnRlcnByZXRfY2FzdDxXS0J1
bmRsZVBhZ2VSZWY+KGNvbnRleHQpOworICAgIGF1dG8gcGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
V0tCdW5kbGVQYWdlUmVmPihjb250ZXh0KTsKICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucmVwb3J0TGl2ZURvY3VtZW50cyhwYWdlKTsKICAgICBXS1JlbGVhc2UocGFnZSk7CiB9CkBA
IC0xOTksNjcgKzE5Nyw0NCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXBvcnRMaXZlRG9jdW1l
bnRzKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIFdLQnVuZGxlUmVsZWFzZU1lbW9yeShtX2J1
bmRsZSk7CiAKICAgICBjb25zdCBib29sIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCA9IHRy
dWU7Ci0gICAgYXV0byBkb2N1bWVudFVSTHMgPSBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3Vt
ZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91
cCkpOwotICAgIGF1dG8gYWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJMaXZlRG9jdW1lbnRzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKHBhZ2UsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBkb2N1bWVudFVSTHMuZ2V0KCkpOworICAg
IHBvc3RQYWdlTWVzc2FnZShwYWdlLCAiTGl2ZURvY3VtZW50cyIsIGFkb3B0V0soV0tCdW5kbGVH
ZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50
c0luUGFnZUdyb3VwKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVz
c2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUs
IFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKIHsKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkJlZ2luVGVzdCIpKSB7CiAgICAgICAgIEFTU0VSVChtZXNz
YWdlQm9keSk7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGR1bXBQaXhlbHNLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wUGl4ZWxzIikpOwotICAgICAg
ICBtX2R1bXBQaXhlbHMgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkdW1w
UGl4ZWxzS2V5LmdldCgpKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0
aW1lb3V0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZW91
dCIpKTsKLSAgICAgICAgbV90aW1lb3V0ID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdGltZW91dEtleS5nZXQoKSkpKSk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycktl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBKU0NvbnNvbGVM
b2dJblN0ZEVyciIpKTsKLSAgICAgICAgbV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBXS0Jv
b2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJL
ZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFja01lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWNrIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWdpblRlc3QiKSk7Ci0gICAgICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBhY2tNZXNz
YWdlQm9keS5nZXQoKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBtX2R1bXBQaXhlbHMgPSBib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRHVtcFBpeGVscyIpOworICAgICAgICBt
X3RpbWVvdXQgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRpbWVv
dXQiKSkpKTsKKyAgICAgICAgbV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBib29sZWFuVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIik7Cisg
ICAgICAgIHBvc3RQYWdlTWVzc2FnZShwYWdlLCAiQWNrIiwgIkJlZ2luVGVzdCIpOwogICAgICAg
ICBiZWdpblRlc3RpbmcobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBCZWdpbmdUZXN0aW5nTW9kZTo6
TmV3KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzZXQiKSkgewogICAgICAgICBBU1NFUlQobWVz
c2FnZUJvZHkpOwotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
RGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ganNjT3B0aW9uc0tleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkpTQ09wdGlvbnMiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zU3RyaW5nID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBqc2NPcHRpb25zS2V5LmdldCgpKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBqc2NP
cHRpb25zU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KHZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkpTQ09wdGlvbnMiKSk7CiAgICAgICAgIGlmIChqc2NPcHRpb25zU3RyaW5n
KSB7CiAgICAgICAgICAgICBTdHJpbmcgb3B0aW9ucyA9IHRvV1RGU3RyaW5nKGpzY09wdGlvbnNT
dHJpbmcpOwogICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpzZXRPcHRpb25zKG9wdGlvbnMudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgIH0KLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc2hvdWxkR0NLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
aG91bGRHQyIpKTsKLSAgICAgICAgYm9vbCBzaG91bGRHQyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHNob3VsZEdDS2V5LmdldCgpKSkpOworICAgICAgICBib29sIHNob3Vs
ZEdDID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlNob3VsZEdDIik7CiAg
ICAgICAgIGlmIChzaG91bGRHQykKICAgICAgICAgICAgIFdLQnVuZGxlR2FyYmFnZUNvbGxlY3RK
YXZhU2NyaXB0T2JqZWN0cyhtX2J1bmRsZSk7CiAKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9J
U09MQVRFRF9UUkVFKQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXhJc29sYXRl
ZE1vZGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2Nlc3Np
YmlsaXR5SXNvbGF0ZWRUcmVlIikpOwotICAgICAgICBtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRy
ZWVNb2RlID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYXhJc29sYXRlZE1v
ZGVLZXkuZ2V0KCkpKSk7CisgICAgICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUg
PSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQWNjZXNzaWJpbGl0eUlzb2xh
dGVkVHJlZSIpOwogI2VuZGlmCiAgICAgICAgIAotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gYWxsb3dlZEhvc3RzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQWxsb3dlZEhvc3RzIikpOwotICAgICAgICBXS1R5cGVSZWYgYWxsb3dlZEhvc3RzVmFs
dWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYWxs
b3dlZEhvc3RzS2V5LmdldCgpKTsKKyAgICAgICAgYXV0byBhbGxvd2VkSG9zdHNWYWx1ZSA9IHZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkFsbG93ZWRIb3N0cyIpOwogICAgICAgICBpZiAo
YWxsb3dlZEhvc3RzVmFsdWUgJiYgV0tHZXRUeXBlSUQoYWxsb3dlZEhvc3RzVmFsdWUpID09IFdL
QXJyYXlHZXRUeXBlSUQoKSkgewogICAgICAgICAgICAgbV9hbGxvd2VkSG9zdHMuY2xlYXIoKTsK
LQotICAgICAgICAgICAgV0tBcnJheVJlZiBhbGxvd2VkSG9zdHNBcnJheSA9IHN0YXRpY19jYXN0
PFdLQXJyYXlSZWY+KGFsbG93ZWRIb3N0c1ZhbHVlKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBzaXplID0gV0tBcnJheUdldFNpemUoYWxsb3dlZEhvc3RzQXJyYXkpOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRl
bUF0SW5kZXgoYWxsb3dlZEhvc3RzQXJyYXksIGkpOwotICAgICAgICAgICAgICAgIGlmIChpdGVt
ICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpCi0gICAgICAgICAg
ICAgICAgICAgIG1fYWxsb3dlZEhvc3RzLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oaXRlbSkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gYXJy
YXkgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihhbGxvd2VkSG9zdHNWYWx1ZSk7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGFycmF5KTsgaSA8
IHNpemU7ICsraSkKKyAgICAgICAgICAgICAgICBtX2FsbG93ZWRIb3N0cy5hcHBlbmQodG9XVEZT
dHJpbmcoV0tBcnJheUdldEl0ZW1BdEluZGV4KGFycmF5LCBpKSkpOwogICAgICAgICB9CiAKICAg
ICAgICAgbV9zdGF0ZSA9IElkbGU7CkBAIC0yNzUsOSArMjUwLDcgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3Ry
aW5nUmVmIG0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiR2V0TGl2ZURvY3VtZW50cyIpKSB7CiAgICAgICAgIGNvbnN0IGJvb2wgZXhjbHVkZURv
Y3VtZW50c0luUGFnZUdyb3VwID0gZmFsc2U7Ci0gICAgICAgIGF1dG8gZG9jdW1lbnRVUkxzID0g
YWRvcHRXSyhXS0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUsIG1fcGFnZUdyb3Vw
LCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXApKTsKLSAgICAgICAgYXV0byBhY2tNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxpdmVEb2N1bWVu
dHMiKSk7Ci0gICAgICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGFja01lc3NhZ2VO
YW1lLmdldCgpLCBkb2N1bWVudFVSTHMuZ2V0KCkpOworICAgICAgICBwb3N0UGFnZU1lc3NhZ2Uo
IkxpdmVEb2N1bWVudHMiLCBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJMcyhtX2J1
bmRsZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDI4LDcgKzQwMSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmlu
Z1JlZiBtCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnM7CiAgICAgICAgIGRvbWFpbnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdl
dEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CisgICAgICAgICAgICBhdXRvIGl0ZW0gPSBX
S0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKICAgICAgICAgICAgIGlmIChp
dGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpCiAgICAgICAg
ICAgICAgICAgZG9tYWlucy5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KGl0ZW0pKSk7CiAgICAgICAgIH0KQEAgLTQ0Niw3ICs0MTksNyBAQCB2b2lkIEluamVjdGVk
QnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tT
dHJpbmdSZWYgbQogICAgICAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5zOwogICAgICAgICBkb21h
aW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJy
YXlHZXRJdGVtQXRJbmRleChkb21haW5zQXJyYXksIGkpOworICAgICAgICAgICAgYXV0byBpdGVt
ID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CiAgICAgICAgICAgICBp
ZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKQogICAg
ICAgICAgICAgICAgIGRvbWFpbnMudW5jaGVja2VkQXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwogICAgICAgICB9CkBAIC00NjcsMTcgKzQ0MCwxMCBA
QCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBh
Z2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2FsbFVJU2lkZVNjcmlwdENhbGxiYWNrIikp
IHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiByZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJSZXN1bHQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBj
YWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bGJhY2tJRCIpKTsKLQotICAgICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gKHVuc2lnbmVkKVdL
VUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBjYWxsYmFja0lES2V5LmdldCgpKSkpOwot
Ci0gICAgICAgIFdLU3RyaW5nUmVmIHJlc3VsdFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcmVz
dWx0S2V5LmdldCgpKSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0SlNTdHJpbmcgPSB0b0pTKHJlc3Vs
dFN0cmluZyk7Ci0KLSAgICAgICAgbV90ZXN0UnVubmVyLT5ydW5VSVNjcmlwdENhbGxiYWNrKGNh
bGxiYWNrSUQsIHJlc3VsdEpTU3RyaW5nLmdldCgpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IGNhbGxiYWNrSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJDYWxsYmFj
a0lEIik7CisgICAgICAgIGF1dG8gcmVzdWx0U3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiUmVzdWx0Iik7CisgICAgICAgIG1fdGVzdFJ1bm5lci0+cnVuVUlTY3Jp
cHRDYWxsYmFjayhjYWxsYmFja0lELCB0b0pTKHJlc3VsdFN0cmluZykuZ2V0KCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC00OTgsMjkgKzQ2NCwxNyBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJp
bmdSZWYgbQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkIikpIHsK
LSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19j
YXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc0tleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzIikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbnVtYmVyT2ZQcmV2YWxlbnRSZXNv
dXJjZXNXaXRoVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9u
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wUHJldmFs
ZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wUHJldmFsZW50UmVz
b3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uIikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9u
UHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM051bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzV2l0aFVJIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJIikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJ
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhblN1
YlJlc291cmNlV2l0aG91dFVJIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUki
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuRGF0YVJlY29y
ZHNSZW1vdmVkV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSIpKTsKLSAgICAgICAg
Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzID0gKHVuc2lnbmVk
KVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlByZXZhbGVudFJlc291
cmNlc0tleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNv
dXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVy
YWN0aW9uS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3BQcmV2YWxlbnRSZXNvdXJj
ZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQp
V0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcFByZXZhbGVudFJlc291cmNlV2l0
aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpKTsKLSAg
ICAgICAgdW5zaWduZWQgbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVz
b3VyY2VXaXRoVXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNv
dXJjZVdpdGhVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRv
cDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0
aFVJS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRo
b3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNN
ZWRpYW5TdWJGcmFtZVdpdGhvdXRVSUtleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9w
M01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUlLZXkuZ2V0KCkp
KSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUkg
PSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRpYW5V
bmlxdWVSZWRpcmVjdHNXaXRob3V0VUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRv
cDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRo
b3V0VUlLZXkuZ2V0KCkpKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBudW1iZXJPZlByZXZh
bGVudFJlc291cmNlcyA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk51bWJl
ck9mUHJldmFsZW50UmVzb3VyY2VzIik7CisgICAgICAgIGF1dG8gbnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIik7
CisgICAgICAgIGF1dG8gbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVy
YWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gdG9w
UHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wUHJldmFsZW50UmVz
b3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uIik7CisgICAg
ICAgIGF1dG8gbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VX
aXRoVXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
TWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlcklu
dGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2Vz
V2l0aFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM051bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVJIik7CisgICAgICAgIGF1dG8gdG9wM01lZGlhblN1YkZy
YW1lV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM01l
ZGlhblN1YkZyYW1lV2l0aG91dFVJIik7CisgICAgICAgIGF1dG8gdG9wM01lZGlhblN1YlJlc291
cmNlV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM01l
ZGlhblN1YlJlc291cmNlV2l0aG91dFVJIik7CisgICAgICAgIGF1dG8gdG9wM01lZGlhblVuaXF1
ZVJlZGlyZWN0c1dpdGhvdXRVSSA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IlRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUkiKTsKKyAgICAgICAgYXV0byB0b3Az
TWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiVG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSIpOwog
CiAgICAgICAgIG1fdGVzdFJ1bm5lci0+c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNr
KG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dp
dGhVc2VySW50ZXJhY3Rpb24sIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbiwgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uLCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxl
bnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24sIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291
cmNlc1dpdGhVSSwgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJLCB0b3AzTWVkaWFuU3ViUmVz
b3VyY2VXaXRob3V0VUksIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUksIHRvcDNN
ZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkpOwogICAgICAgICByZXR1cm47CkBAIC01
NDEsMzEgKzQ5NSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9Q
YWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVycm9yIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5rbm93biIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZShwYWdlLCBlcnJvck1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5Lmdl
dCgpKTsKLX0KLQotYm9vbCBJbmplY3RlZEJ1bmRsZTo6Ym9vbGVhbkZvcktleShXS0RpY3Rpb25h
cnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQotewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB3a0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
a2V5KSk7Ci0gICAgV0tUeXBlUmVmIHZhbHVlID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShk
aWN0aW9uYXJ5LCB3a0tleS5nZXQoKSk7Ci0gICAgaWYgKFdLR2V0VHlwZUlEKHZhbHVlKSAhPSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSkgewotICAgICAgICBvdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkJv
b2xlYW4gdmFsdWUgZm9yIGtleSIsIGtleSwgIiBub3QgZm91bmQgaW4gZGljdGlvbmFyeVxuIikp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHZhbHVlKSk7Ci19Ci0KLVN0cmluZyBJbmpl
Y3RlZEJ1bmRsZTo6c3RyaW5nRm9yS2V5KFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25z
dCBjaGFyKiBrZXkpCi17Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhrZXkpKTsKLSAgICBXS1N0cmluZ1Jl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KGRpY3Rpb25hcnksIHdrS2V5LmdldCgpKSk7Ci0gICAgaWYgKCF2YWx1ZSkgewotICAgICAg
ICBvdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlN0cmluZyB2YWx1ZSBmb3Iga2V5Iiwga2V5LCAiIG5v
dCBmb3VuZCBpbiBkaWN0aW9uYXJ5XG4iKSk7Ci0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwotICAgIH0KLSAgICByZXR1cm4gdG9XVEZTdHJpbmcodmFsdWUpOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiRXJyb3IiLCAiVW5rbm93biIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpiZWdp
blRlc3RpbmcoV0tEaWN0aW9uYXJ5UmVmIHNldHRpbmdzLCBCZWdpbmdUZXN0aW5nTW9kZSB0ZXN0
aW5nTW9kZSkKQEAgLTU5OCwxMSArNTI4LDExIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmJlZ2lu
VGVzdGluZyhXS0RpY3Rpb25hcnlSZWYgc2V0dGluZ3MsIEJlZ2luZ1Rlc3RpbmdNb2RlIHRlCiAg
ICAgV0tCdW5kbGVTZXRBbGxvd1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTFMobV9idW5kbGUsIG1f
cGFnZUdyb3VwLCBmYWxzZSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFdLQnVu
ZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24ocGFnZSgpLT5wYWdlKCks
ICFib29sZWFuRm9yS2V5KHNldHRpbmdzLCAiVXNlRmxleGlibGVWaWV3cG9ydCIpKTsKKyAgICBX
S0J1bmRsZVBhZ2VTZXRVc2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKHBhZ2UoKS0+cGFn
ZSgpLCAhYm9vbGVhblZhbHVlKHNldHRpbmdzLCAiVXNlRmxleGlibGVWaWV3cG9ydCIpKTsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRB
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcoc3RyaW5nRm9yS2V5KHNldHRp
bmdzLCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKSk7CisgICAgV2ViQ29yZVRlc3RT
dXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3RpbmcodG9XVEZT
dHJpbmcoc3RyaW5nVmFsdWUoc2V0dGluZ3MsICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBl
cyIpKSk7CiAjZW5kaWYKIAogICAgIG1fdGVzdFJ1bm5lci0+c2V0UGx1Z2luc0VuYWJsZWQodHJ1
ZSk7CkBAIC02NjAsMjUgKzU5MCwxNSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkb25lKCkKICAg
ICBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5yZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiAj
ZW5kaWYKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkb25lTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb25lIikpOwotICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGRvbmVNZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBwaXhlbFJlc3VsdElzUGVuZGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0SXNQZW5kaW5nIikpOwotICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gcGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkb25l
TWVzc2FnZUJvZHkuZ2V0KCksIHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5LmdldCgpLCBwaXhlbFJl
c3VsdElzUGVuZGluZy5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOwogCi0gICAgaWYgKCFtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKSB7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0IikpOwotICAgICAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgcGl4ZWxSZXN1bHRL
ZXkuZ2V0KCksIG1fcGl4ZWxSZXN1bHQuZ2V0KCkpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiByZXBhaW50UmVjdHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJSZXBhaW50UmVjdHMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShk
b25lTWVzc2FnZUJvZHkuZ2V0KCksIHJlcGFpbnRSZWN0c0tleS5nZXQoKSwgbV9yZXBhaW50UmVj
dHMuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJQaXhlbFJlc3VsdElzUGVuZGluZyIsIG1f
cGl4ZWxSZXN1bHRJc1BlbmRpbmcpOworICAgIGlmICghbV9waXhlbFJlc3VsdElzUGVuZGluZykK
KyAgICAgICAgc2V0VmFsdWUoYm9keSwgIlBpeGVsUmVzdWx0IiwgbV9waXhlbFJlc3VsdC5nZXQo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlJlcGFpbnRSZWN0cyIsIG1fcmVwYWludFJlY3RzLmdl
dCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiQXVkaW9SZXN1bHQiLCBtX2F1ZGlvUmVzdWx0Lmdl
dCgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdWRpb1Jlc3VsdEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF1ZGlvUmVzdWx0IikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCBhdWRpb1Jlc3VsdEtl
eS5nZXQoKSwgbV9hdWRpb1Jlc3VsdC5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCksIGRvbmVNZXNz
YWdlTmFtZS5nZXQoKSwgZG9uZU1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCksIHRv
V0soIkRvbmUiKS5nZXQoKSwgYm9keS5nZXQoKSk7CiAKICAgICBjbG9zZU90aGVyUGFnZXMoKTsK
IApAQCAtNjkxLDkgKzYxMSw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmNsb3NlT3RoZXJQYWdl
cygpCiAgICAgc2l6ZV90IHNpemUgPSBtX3BhZ2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMTsgaSA8IHNpemU7ICsraSkKICAgICAgICAgcGFnZXNUb0Nsb3NlLmFwcGVuZChtX3BhZ2Vz
W2ldLT5wYWdlKCkpOwotICAgIHNpemUgPSBwYWdlc1RvQ2xvc2Uuc2l6ZSgpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBXS0J1bmRsZVBhZ2VDbG9zZShw
YWdlc1RvQ2xvc2VbaV0pOworICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2VzVG9DbG9zZSkKKyAg
ICAgICAgV0tCdW5kbGVQYWdlQ2xvc2UocGFnZSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OmR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVp
bGRlcikKQEAgLTcwOSwxMyArNjI4LDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZHVtcFRvU3Rk
RXJyKGNvbnN0IFN0cmluZyYgb3V0cHV0KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG91dHB1
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJE
dW1wVG9TdGRFcnIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5
OwotICAgIGlmIChhdXRvIHV0ZjggPSBvdXRwdXQudHJ5R2V0VXRmOCgpKQotICAgICAgICBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodXRmOC0+ZGF0
YSgpKSk7Ci0gICAgZWxzZQotICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIk91dCBvZiBtZW1vcnlcbiIpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IGhhdmUgdG8gY29udmVydCB0
byBVVEYtOCBpbnN0ZWFkIG9mIHVzaW5nIHRvV0s/CisgICAgYXV0byBzdHJpbmcgPSBvdXRwdXQu
dHJ5R2V0VXRmOCgpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRHVtcFRvU3RkRXJyIiwgc3RyaW5n
ID8gc3RyaW5nLT5kYXRhKCkgOiAiT3V0IG9mIG1lbW9yeVxuIik7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6Om91dHB1dFRleHQoY29uc3QgU3RyaW5nJiBvdXRwdXQpCkBAIC03MjQsMjgwICs2
MzksMTU1IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6Om91dHB1dFRleHQoY29uc3QgU3RyaW5nJiBv
dXRwdXQpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAob3V0cHV0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRleHRPdXRwdXQiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5OwotICAgIGlmIChhdXRvIHV0Zjgg
PSBvdXRwdXQudHJ5R2V0VXRmOCgpKQotICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodXRmOC0+ZGF0YSgpKSk7Ci0gICAgZWxzZQotICAg
ICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik91dCBvZiBtZW1vcnlcbiIpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IGhhdmUgdG8g
Y29udmVydCB0byBVVEYtOCBpbnN0ZWFkIG9mIHVzaW5nIHRvV0s/CisgICAgYXV0byBzdHJpbmcg
PSBvdXRwdXQudHJ5R2V0VXRmOCgpOwogICAgIC8vIFdlIHVzZSBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUoKSBpbnN0ZWFkIG9mIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKCkgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHRleHQgb3V0cHV0CiAgICAgLy8g
aXMgZG9uZSB2aWEgYXN5bmNocm9ub3VzIElQQywgZXZlbiBpZiB0aGUgY29ubmVjdGlvbiBpcyBp
biBmdWxseSBzeW5jaHJvbm91cyBtb2RlIGR1ZSB0byBhIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKCkKICAgICAvLyBjYWxsLiBPdGhlcndpc2UsIG1lc3NhZ2Vz
IGxvZ2dlZCB2aWEgc3luYyBhbmQgYXN5bmMgSVBDIG1heSBlbmQgdXAgb3V0IG9mIG9yZGVyIGFu
ZCBjYXVzZSBmbGFraW5lc3MuCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1
bGx5U3luY2hyb25vdXNNb2RlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxs
eVN5bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgdG9XSygiVGV4dE91dHB1dCIpLmdldCgp
LCB0b1dLKHN0cmluZyA/IHN0cmluZy0+ZGF0YSgpIDogIk91dCBvZiBtZW1vcnlcbiIpLmdldCgp
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZh
bHVlKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQmVmb3JlVW5sb2Fk
UmV0dXJuVmFsdWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIsIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlOjpwb3N0QWRkQ2hyb21lSW5wdXRGaWVsZCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQWRkQ2hyb21lSW5wdXRGaWVsZCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiQWRkQ2hyb21lSW5wdXRGaWVsZCIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpw
b3N0UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShw
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpw
b3N0Rm9jdXNXZWJWaWV3KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJGb2N1c1dlYlZp
ZXciKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkZvY3VzV2ViVmlldyIpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJs
ZSBiYWNraW5nU2NhbGVGYWN0b3IpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QmFj
a2luZ1NjYWxlRmFjdG9yIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYmFja2luZ1NjYWxlRmFjdG9yKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRCYWNraW5nU2Nh
bGVGYWN0b3IiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGJhY2tpbmdTY2FsZUZhY3RvcikpKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFNldFdpbmRvd0lzS2V5KGJvb2wgaXNLZXkp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0V2luZG93SXNLZXkiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKGlzS2V5KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgMCk7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
cGFnZSgpLT5wYWdlKCksIHRvV0soIlNldFdpbmRvd0lzS2V5IikuZ2V0KCksIGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGlzS2V5KSkuZ2V0KCksIDApOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
Ojpwb3N0U2V0Vmlld1NpemUoZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFZpZXdTaXplIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHdpZHRoS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
Zygid2lkdGgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlaWdodEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlaWdodCIpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVS
ZWY+IHdpZHRoV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHdpZHRoKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgd2lkdGhLZXkuZ2V0KCksIHdpZHRoV0su
Z2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGhlaWdodFdLID0gYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZShoZWlnaHQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCBoZWlnaHRLZXkuZ2V0KCksIGhlaWdodFdLLmdldCgpKTsKLQotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9k
eSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAid2lkdGgiLCB3aWR0aCk7CisgICAgc2V0VmFsdWUoYm9keSwgImhlaWdodCIsIGhlaWdo
dCk7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFn
ZSgpLT5wYWdlKCksIHRvV0soIlNldFZpZXdTaXplIikuZ2V0KCksIGJvZHkuZ2V0KCksIDApOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGlj
ayh1aW50NjRfdCBub3RpZmljYXRpb25JRCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
aW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90aWZpY2F0aW9uSUQp
KTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNpbXVs
YXRlV2ViTm90aWZpY2F0aW9uQ2xpY2siLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG5vdGlmaWNh
dGlvbklEKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0QWRkc1Zpc2l0ZWRM
aW5rcyhib29sIGFkZHNWaXNpdGVkTGlua3MpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0QWRkc1Zpc2l0ZWRMaW5rcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWRkc1Zpc2l0ZWRMaW5rcykpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0QWRkc1Zp
c2l0ZWRMaW5rcyIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGFkZHNWaXNpdGVkTGlua3MpKSk7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29s
IGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0R2VvbG9jYXRpb25QZXJt
aXNzaW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRHZW9sb2NhdGlvblBlcm1pc3Npb24iLCBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSkpOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxl
OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0
aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1
cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVz
U3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJsZSBmbG9v
ckxldmVsKQordm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24o
ZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlv
bmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwg
T3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25h
bDxkb3VibGU+IGZsb29yTGV2ZWwpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb24iKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsYXRpdHVkZUtleVdLID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGF0aXR1ZGUiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tEb3VibGVSZWY+IGxhdGl0dWRlV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRl
KGxhdGl0dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwg
bGF0aXR1ZGVLZXlXSy5nZXQoKSwgbGF0aXR1ZGVXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbG9uZ2l0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJsb25naXR1ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+
IGxvbmdpdHVkZVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShsb25naXR1ZGUpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBsb25naXR1ZGVLZXlXSy5nZXQo
KSwgbG9uZ2l0dWRlV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFj
Y3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2N1
cmFjeSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gYWNjdXJhY3lXSyA9IGFkb3B0
V0soV0tEb3VibGVDcmVhdGUoYWNjdXJhY3kpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1l
c3NhZ2VCb2R5LmdldCgpLCBhY2N1cmFjeUtleVdLLmdldCgpLCBhY2N1cmFjeVdLLmdldCgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRlS2V5V0sgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0FsdGl0dWRlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcHJvdmlkZXNBbHRpdHVkZVdLID0gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNBbHRpdHVkZSkpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVLZXlXSy5nZXQoKSwg
cHJvdmlkZXNBbHRpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBhbHRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
YWx0aXR1ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGFsdGl0dWRlV0sgPSBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGFsdGl0dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShtZXNzYWdlQm9keS5nZXQoKSwgYWx0aXR1ZGVLZXlXSy5nZXQoKSwgYWx0aXR1ZGVXSy5nZXQo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNBbHRpdHVkZUFjY3Vy
YWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRl
c0FsdGl0dWRlQWNjdXJhY3kiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92
aWRlc0FsdGl0dWRlQWNjdXJhY3lXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHku
Z2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpLCBwcm92aWRlc0FsdGl0
dWRlQWNjdXJhY3lXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0
aXR1ZGVBY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiYWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gYWx0
aXR1ZGVBY2N1cmFjeVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShhbHRpdHVkZUFjY3VyYWN5
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWx0aXR1ZGVB
Y2N1cmFjeUtleVdLLmdldCgpLCBhbHRpdHVkZUFjY3VyYWN5V0suZ2V0KCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzSGVhZGluZ0tleVdLID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNIZWFkaW5nIikpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gcHJvdmlkZXNIZWFkaW5nV0sgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShwcm92aWRlc0hlYWRpbmcpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCBwcm92aWRlc0hlYWRpbmdLZXlXSy5nZXQoKSwgcHJvdmlkZXNIZWFkaW5n
V0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlYWRpbmdLZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlYWRpbmciKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGhlYWRpbmdXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVh
dGUoaGVhZGluZykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCks
IGhlYWRpbmdLZXlXSy5nZXQoKSwgaGVhZGluZ1dLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBwcm92aWRlc1NwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc1NwZWVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9v
bGVhblJlZj4gcHJvdmlkZXNTcGVlZFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlk
ZXNTcGVlZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBy
b3ZpZGVzU3BlZWRLZXlXSy5nZXQoKSwgcHJvdmlkZXNTcGVlZFdLLmdldCgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzcGVlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygic3BlZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+
IHNwZWVkV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNwZWVkKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgc3BlZWRLZXlXSy5nZXQoKSwgc3BlZWRXSy5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNGbG9vckxldmVs
S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0Zs
b29yTGV2ZWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc0Zsb29y
TGV2ZWxXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzRmxvb3JMZXZlbCkpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzRmxvb3JM
ZXZlbEtleVdLLmdldCgpLCBwcm92aWRlc0Zsb29yTGV2ZWxXSy5nZXQoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZmxvb3JMZXZlbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiZmxvb3JMZXZlbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rv
dWJsZVJlZj4gZmxvb3JMZXZlbFdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShmbG9vckxldmVs
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgZmxvb3JMZXZl
bEtleVdLLmdldCgpLCBmbG9vckxldmVsV0suZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJsYXRpdHVkZSIsIGxhdGl0dWRlKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAibG9uZ2l0dWRlIiwgbG9uZ2l0dWRlKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
YWNjdXJhY3kiLCBhY2N1cmFjeSk7CisgICAgc2V0VmFsdWUoYm9keSwgImFsdGl0dWRlIiwgYWx0
aXR1ZGUpOworICAgIHNldFZhbHVlKGJvZHksICJhbHRpdHVkZUFjY3VyYWN5IiwgYWx0aXR1ZGVB
Y2N1cmFjeSk7CisgICAgc2V0VmFsdWUoYm9keSwgImhlYWRpbmciLCBoZWFkaW5nKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAic3BlZWQiLCBzcGVlZCk7CisgICAgc2V0VmFsdWUoYm9keSwgImZsb29y
TGV2ZWwiLCBmbG9vckxldmVsKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBlcnJvck1lc3Nh
Z2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b25VbmF2YWlsYWJsZUVycm9yIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIsIGVy
cm9yTWVzc2FnZSk7CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OmlzR2VvbG9jYXRpb25Qcm92
aWRlckFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNHZW9sb2Nh
dGlvbkNsaWVudEFjdGl2ZSIpKTsKLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gaXNBY3RpdmUgPSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4ocmVzdWx0VG9QYXNzKSk7Ci0KLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoaXNB
Y3RpdmUuZ2V0KCkpOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOworICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0
b1dLKCJJc0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikuZ2V0KCksIDAsICZyZXN1bHQpOworICAg
IHJldHVybiBib29sZWFuVmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdldCgpKTsKIH0KIAogdW5zaWdu
ZWQgSW5qZWN0ZWRCdW5kbGU6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29uc3QK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2Fy
ZCIpKTsKLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDAsICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiBpbWFnZUNvdW50ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4ocmVzdWx0VG9Q
YXNzKSk7Ci0gICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdl
dFZhbHVlKGltYWdlQ291bnQuZ2V0KCkpKTsKKyAgICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVsbHB0
cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdl
KCktPnBhZ2UoKSwgdG9XSygiSW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQiKS5nZXQoKSwg
MCwgJnJlc3VsdCk7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKGFkb3B0V0socmVzdWx0KS5nZXQo
KSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcm1pc3Npb24oYm9v
bCBlbmFibGVkKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikpOwotICAgIGF1dG8g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRVc2VyTWVkaWFQZXJt
aXNzaW9uIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpKTsKIH0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKCkKIHsKLSAgICBhdXRvIG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzZXRV
c2VyTWVkaWFQZXJtaXNzaW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJS
ZXNldFVzZXJNZWRpYVBlcm1pc3Npb24iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0
VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4oYm9vbCBwZXJtaXNzaW9uLCBX
S1N0cmluZ1JlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBhdXRv
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGVy
bWlzc2lvbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGVy
bWlzc2lvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBlcm1pc3Npb25XSyA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHBlcm1pc3Npb24pKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwZXJtaXNzaW9uS2V5V0suZ2V0KCksIHBlcm1pc3Np
b25XSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5V0sg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgb3JpZ2luS2V5V0suZ2V0KCks
IG9yaWdpbik7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5
V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4i
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGFyZW50T3Jp
Z2luS2V5V0suZ2V0KCksIHBhcmVudE9yaWdpbik7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
KTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
CisgICAgc2V0VmFsdWUoYm9keSwgInBlcm1pc3Npb24iLCBwZXJtaXNzaW9uKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAib3JpZ2luIiwgb3JpZ2luKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGFyZW50
T3JpZ2luIiwgcGFyZW50T3JpZ2luKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFVzZXJNZWRp
YVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luIiwgYm9keSk7CiB9CiAKIHVuc2lnbmVkIElu
amVjdGVkQnVuZGxlOjp1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKFdL
U3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luKSBjb25zdAogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JP
cmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNz
YWdlQm9keS5nZXQoKSwgb3JpZ2luS2V5V0suZ2V0KCksIG9yaWdpbik7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGFyZW50T3JpZ2luS2V5V0suZ2V0KCksIHBhcmVudE9y
aWdpbik7Ci0KLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmVzdWx0VG9QYXNzKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1VJbnQ2NFJlZj4gY291bnQgPSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLVUludDY0
UmVmPihyZXN1bHRUb1Bhc3MpKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
V0tVSW50NjRHZXRWYWx1ZShjb3VudC5nZXQoKSkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAib3JpZ2lu
Iiwgb3JpZ2luKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGFyZW50T3JpZ2luIiwgcGFyZW50T3Jp
Z2luKTsKKyAgICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQ
b3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiVXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpLmdldCgpLCBib2R5LmdldCgp
LCAmcmVzdWx0KTsKKyAgICByZXR1cm4gdWludDY0VmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdldCgp
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVx
dWVzdENvdW50Rm9yT3JpZ2luKFdLU3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgcGFyZW50
T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc2V0VXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXlXSyA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5nZXQoKSwgb3Jp
Z2luKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJlbnRPcmlnaW5L
ZXlXSy5nZXQoKSwgcGFyZW50T3JpZ2luKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdl
KHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwor
ICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAib3JpZ2luIiwgb3JpZ2luKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
cGFyZW50T3JpZ2luIiwgcGFyZW50T3JpZ2luKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJlc2V0
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIsIGJvZHkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQs
IGJvb2wgcGVybWlzc2l2ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDdXN0b21Q
b2xpY3lEZWxlZ2F0ZSIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVuYWJsZWRLZXlXSyA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImVuYWJsZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBlbmFibGVkV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVk
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgZW5hYmxlZEtl
eVdLLmdldCgpLCBlbmFibGVkV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHBlcm1pc3NpdmVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoInBlcm1pc3NpdmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwZXJtaXNz
aXZlV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwZXJtaXNzaXZlKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGVybWlzc2l2ZUtleVdLLmdldCgpLCBw
ZXJtaXNzaXZlV0suZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgYXV0
byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZh
bHVlKGJvZHksICJlbmFibGVkIiwgZW5hYmxlZCk7CisgICAgc2V0VmFsdWUoYm9keSwgInBlcm1p
c3NpdmUiLCBwZXJtaXNzaXZlKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEN1c3RvbVBvbGlj
eURlbGVnYXRlIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEhpZGRlbihi
b29sIGhpZGRlbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRIaWRkZW4iKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaXNJbml0aWFsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJoaWRkZW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBpc0luaXRp
YWxXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhpZGRlbikpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGlzSW5pdGlhbEtleVdLLmdldCgpLCBpc0luaXRp
YWxXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9k
eSwgImhpZGRlbiIsIGhpZGRlbik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRIaWRkZW4iLCBi
b2R5LmdldCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0Q2FjaGVNb2RlbChpbnQg
bW9kZWwpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Q2FjaGVNb2RlbCIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKG1vZGVsKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIlNldENhY2hlTW9kZWwiKS5nZXQoKSwgYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RlbCkpLmdldCgpLCBudWxscHRyKTsKIH0KIAogYm9vbCBJ
bmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtRdWV1ZSgpIGNvbnN0CkBAIC0xMDA1LDEx
MCArNzk1LDczIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nlc3NXb3JrUXVldWUo
KSBjb25zdAogICAgIGlmICghbV91c2VXb3JrUXVldWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzV29ya1F1ZXVlRW1wdHkiKSk7Ci0gICAgV0tU
eXBlUmVmIHJlc3VsdFRvUGFzcyA9IDA7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCAm
cmVzdWx0VG9QYXNzKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlzRW1wdHkgPSBh
ZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdWx0VG9QYXNzKSk7CisgICAgV0tU
eXBlUmVmIHJlc3VsdCA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIklzV29ya1F1ZXVlRW1wdHki
KS5nZXQoKSwgMCwgJnJlc3VsdCk7CiAKICAgICAvLyBUaGUgSVBDIGZhaWxlZC4gVGhpcyBoYXBw
ZW5zIHdoZW4gc3dhcHBpbmcgcHJvY2Vzc2VzIG9uIG5hdmlnYXRpb24gYmVjYXVzZSB0aGUgV2Vi
UGFnZVByb3h5IHVucmVnaXN0ZXJzIGl0c2VsZgogICAgIC8vIGFzIGEgTWVzc2FnZVJlY2VpdmVy
IGZyb20gdGhlIG9sZCBXZWJQcm9jZXNzUHJveHkgYW5kIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRo
ZSBuZXcgV2ViUHJvY2Vzc1Byb3h5IGluc3RlYWQuCi0gICAgaWYgKCFpc0VtcHR5KQorICAgIGlm
ICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gIVdLQm9vbGVh
bkdldFZhbHVlKGlzRW1wdHkuZ2V0KCkpOworICAgIGF1dG8gaXNFbXB0eSA9IGJvb2xlYW5WYWx1
ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOworICAgIHJldHVybiAhaXNFbXB0eTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6cHJvY2Vzc1dvcmtRdWV1ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiUHJvY2Vzc1dvcmtRdWV1ZSIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiUHJvY2Vzc1dvcmtRdWV1ZSIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1
ZUJhY2tOYXZpZ2F0aW9uKHVuc2lnbmVkIGhvd0ZhckJhY2t3YXJkKQogewogICAgIG1fdXNlV29y
a1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlQmFja05hdmln
YXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJCYWNrd2FyZCkpOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVCYWNrTmF2aWdhdGlvbiIsIGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoaG93RmFyQmFja3dhcmQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24odW5zaWduZWQgaG93RmFyRm9yd2FyZCkKIHsK
ICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJR
dWV1ZUZvcndhcmROYXZpZ2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaG93RmFyRm9yd2FyZCkpOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVGb3J3YXJk
TmF2aWdhdGlvbiIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaG93RmFyRm9yd2FyZCkpKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVMb2FkKFdLU3RyaW5nUmVmIHVybCwgV0tTdHJp
bmdSZWYgdGFyZ2V0LCBib29sIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpCiB7CiAgICAgbV91c2VX
b3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVMb2FkIikp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbG9hZERhdGEgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdXJsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygidXJsIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIHVybEtl
eS5nZXQoKSwgdXJsKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0YXJnZXRLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0YXJnZXQiKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgdGFyZ2V0S2V5LmdldCgpLCB0YXJn
ZXQpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZE9wZW5FeHRlcm5hbFVS
THNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzaG91bGRPcGVu
RXh0ZXJuYWxVUkxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gc2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkT3BlbkV4
dGVybmFsVVJMcykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNLZXkuZ2V0KCksIHNob3VsZE9wZW5FeHRlcm5hbFVSTHNWYWx1
ZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIGxvYWREYXRhLmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgInVy
bCIsIHVybCk7CisgICAgc2V0VmFsdWUoYm9keSwgInRhcmdldCIsIHRhcmdldCk7CisgICAgc2V0
VmFsdWUoYm9keSwgInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiLCBzaG91bGRPcGVuRXh0ZXJuYWxV
UkxzKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlTG9hZCIsIGJvZHkuZ2V0KCkpOwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKFdLU3RyaW5nUmVmIGNv
bnRlbnQsIFdLU3RyaW5nUmVmIGJhc2VVUkwsIFdLU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQog
ewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlF1ZXVlTG9hZEhUTUxTdHJpbmciKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBsb2FkRGF0YSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjb250ZW50S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29udGVudCIpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCBjb250ZW50S2V5LmdldCgpLCBjb250ZW50KTsKLQot
ICAgIGlmIChiYXNlVVJMKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBiYXNl
VVJMS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYmFzZVVSTCIp
KTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgYmFzZVVSTEtl
eS5nZXQoKSwgYmFzZVVSTCk7Ci0gICAgfQotCi0gICAgaWYgKHVucmVhY2hhYmxlVVJMKSB7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJsZVVSTEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVucmVhY2hhYmxlVVJMIikpOwotICAg
ICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCB1bnJlYWNoYWJsZVVSTEtl
eS5nZXQoKSwgdW5yZWFjaGFibGVVUkwpOwotICAgIH0KLQotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbG9hZERhdGEuZ2V0KCkp
OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAiY29udGVudCIsIGNvbnRlbnQpOworICAgIGlmIChiYXNlVVJM
KQorICAgICAgICBzZXRWYWx1ZShib2R5LCAiYmFzZVVSTCIsIGJhc2VVUkwpOworICAgIGlmICh1
bnJlYWNoYWJsZVVSTCkKKyAgICAgICAgc2V0VmFsdWUoYm9keSwgInVucmVhY2hhYmxlVVJMIiwg
dW5yZWFjaGFibGVVUkwpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVMb2FkSFRNTFN0cmlu
ZyIsIGJvZHkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZVJlbG9hZCgpCiB7CiAg
ICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVl
dWVSZWxvYWQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlUmVsb2Fk
Iik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZGluZ1NjcmlwdChXS1N0cmlu
Z1JlZiBzY3JpcHQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUXVldWVMb2FkaW5nU2NyaXB0IikpOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgc2NyaXB0KTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlTG9hZGluZ1NjcmlwdCIsIHNjcmlwdCk7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChXS1N0cmluZ1JlZiBzY3Jp
cHQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUXVldWVOb25Mb2FkaW5nU2NyaXB0IikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgc2NyaXB0KTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIsIHNjcmlwdCk7CiB9CiAKIGJvb2wg
SW5qZWN0ZWRCdW5kbGU6OmlzQWxsb3dlZEhvc3QoV0tTdHJpbmdSZWYgaG9zdCkKQEAgLTExNDMs
NCArODk2LDcyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnRleHRGaWVsZERpZEVuZEVkaXRpbmco
KQogICAgIG1fdGVzdFJ1bm5lci0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZ0NhbGxiYWNrKCk7CiB9
CiAKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1l
LCBXS1R5cGVSZWYgYm9keSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UocGFnZSgpLT5wYWdlKCks
IG5hbWUsIGJvZHkpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0UGFnZU1lc3NhZ2Uo
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogYm9keSkKK3sKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UobmFtZSwgdG9XSyhib2R5KSk7Cit9CisKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciog
bmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSk7
Cit9CisKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgdmFsdWUp
Cit7CisgICAgcG9zdE1lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkp
LmdldCgpKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5h
bWUsIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgp
LCB2YWx1ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25z
dCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
bmFtZSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1aW50NjRfdCB2YWx1ZSkK
K3sKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tVSW50NjRDcmVh
dGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25z
dCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSkKK3sKKyAgICB1aW50NjRfdCBwcm9tb3RlZFZh
bHVlID0gdmFsdWU7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShuYW1lLCBwcm9tb3RlZFZh
bHVlKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUs
IGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIGFkb3B0
V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFBhZ2VNZXNz
YWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKSkKKyAgICAgICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UocGFnZS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSk7
Cit9CisKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUp
Cit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZh
bHVlKSkuZ2V0KCkpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0
IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byBwYWdlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKSkKKyAgICAgICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdl
dCgpLCB2YWx1ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmggYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKaW5kZXggYjc2MDE0MzZmMGM2NzI4
NTYzM2EwOGUyNWY5NDJhOGFhOThkOTcwYi4uN2E0ZjVkNjU5ZmMwYWExMGUyN2Y0ODU5NDc0YmUx
YzQ5MmRkMDQyMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAKICAg
ICAvLyBHZW9sb2NhdGlvbi4KICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29s
KTsKLSAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwg
ZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUs
IGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBh
bHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJv
b2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwg
ZG91YmxlIGZsb29yTGV2ZWwpOworICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24o
ZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlv
bmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwg
T3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25h
bDxkb3VibGU+IGZsb29yTGV2ZWwpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSk7CiAgICAgYm9vbCBp
c0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBjb25zdDsKIApAQCAtMTY5LDggKzE2OSwxMSBA
QCBwcml2YXRlOgogICAgIGVudW0gY2xhc3MgQmVnaW5nVGVzdGluZ01vZGUgeyBOZXcsIFJlc3Vt
ZSB9OwogICAgIHZvaWQgYmVnaW5UZXN0aW5nKFdLRGljdGlvbmFyeVJlZiBpbml0aWFsU2V0dGlu
Z3MsIEJlZ2luZ1Rlc3RpbmdNb2RlKTsKIAotICAgIGJvb2wgYm9vbGVhbkZvcktleShXS0RpY3Rp
b25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7Ci0gICAgU3RyaW5nIHN0cmluZ0ZvcktleShXS0Rp
Y3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CisgICAgc3RhdGljIHZvaWQgcG9zdFBhZ2VN
ZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiwgY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIGJvZHkp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHBvc3RQYWdlTWVzc2FnZShX
S0J1bmRsZVBhZ2VSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWluUHRyPFQ+JiBi
b2R5KTsKKyAgICB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVS
ZWYgYm9keSA9IG51bGxwdHIpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgcG9zdFBh
Z2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWluUHRyPFQ+JiBib2R5KTsK
KyAgICB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBi
b2R5KTsKIAogICAgIFdLQnVuZGxlUmVmIG1fYnVuZGxlIHsgbnVsbHB0ciB9OwogICAgIFdLQnVu
ZGxlUGFnZUdyb3VwUmVmIG1fcGFnZUdyb3VwIHsgbnVsbHB0ciB9OwpAQCAtMjEwLDQgKzIxMywy
OSBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3VzZXJTY3JpcHRJbmplY3RlZENvdW50IHsgMCB9
OwogfTsKIAordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFs
dWUgPSBudWxscHRyKTsKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdW5zaWdu
ZWQgdmFsdWUpOworCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFt
ZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cik7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdWludDY0X3QgdmFsdWUpOwordm9pZCBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKTsKK3ZvaWQgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpOworCit2
b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBu
dWxscHRyKTsKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFs
dWUpOworCit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUs
IFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShXS0J1bmRsZVBh
Z2VSZWYgcGFnZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkp
Cit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsIG5hbWUsIGJvZHkuZ2V0KCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0UGFnZU1lc3NhZ2Uo
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkpCit7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKG5hbWUsIGJvZHkuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVFIK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGVQYWdlLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAppbmRleCBkODlmZWFmOWI2ZGFlNGM5Njg1MzFmMGFiNjM4
NTg5MWIxNGY5OGY4Li4yZjU2NDI3NzMxMTZkOWYxMDI0ZmE2ZmJlOWRjMzUyMGIxNWUxOGE5IDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlUGFnZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCkBAIC02MCw1MCArNjAsMTggQEAgdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIHByb3BlcnR5
VmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hh
ciogcHJvcGVydHlOYW1lKQorc3RhdGljIGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVydHkoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVj
dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWVTdHJpbmcgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKLSAgICByZXR1
cm4gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZVN0cmlu
Zy5nZXQoKSwgMCk7Ci19Ci0KLXN0YXRpYyBkb3VibGUgcHJvcGVydHlWYWx1ZURvdWJsZShKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcm9wZXJ0
eU5hbWUpCi17Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwg
b2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIDApOyAgICAKLX0K
LQotc3RhdGljIGludCBwcm9wZXJ0eVZhbHVlSW50KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50Pihwcm9wZXJ0eVZhbHVlRG91YmxlKGNvbnRleHQsIG9iamVjdCwgcHJv
cGVydHlOYW1lKSk7ICAgIAotfQotCi1zdGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0
eVZhbHVlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkK
LXsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChmcmFtZSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5VmFsdWVEb3VibGUoY29u
dGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBwcm9wZXJ0eU5hbWUpOwor
ICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFt
ZSk7CisgICAgcmV0dXJuIG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9i
YWxPYmplY3QoY29udGV4dCksIG5hbWUpOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgZHVtcFBh
dGgoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5vZGVWYWx1ZSkKIHsK
LSAgICBKU1ZhbHVlUmVmIG5vZGVOYW1lVmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIG5v
ZGVWYWx1ZSwgIm5vZGVOYW1lIik7Ci0gICAgYXV0byBqc1N0cmluZ05vZGVOYW1lID0gYWRvcHQo
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBub2RlTmFtZVZhbHVlLCAwKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5vZGVOYW1lID0gdG9XSyhqc1N0cmluZ05vZGVOYW1lKTsK
LQotICAgIEpTVmFsdWVSZWYgcGFyZW50Tm9kZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgbm9k
ZVZhbHVlLCAicGFyZW50Tm9kZSIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vZGVOYW1lKSk7Ci0KLSAg
ICBpZiAocGFyZW50Tm9kZSAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgcGFyZW50Tm9kZSkp
IHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgPiAiKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4dCwgKEpTT2JqZWN0UmVmKXBhcmVu
dE5vZGUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwor
ICAgIGF1dG8gbmFtZSA9IHRvV1RGU3RyaW5nKHN0cmluZ1Byb3BlcnR5KGNvbnRleHQsIG5vZGVW
YWx1ZSwgIm5vZGVOYW1lIikpOworICAgIGlmIChhdXRvIHBhcmVudE5vZGUgPSBvYmplY3RQcm9w
ZXJ0eShjb250ZXh0LCBub2RlVmFsdWUsICJwYXJlbnROb2RlIikpCisgICAgICAgIHJldHVybiBt
YWtlU3RyaW5nKG5hbWUsICIgPiAiLCBkdW1wUGF0aChjb250ZXh0LCBwYXJlbnROb2RlKSk7Cisg
ICAgcmV0dXJuIG5hbWU7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBkdW1wUGF0aChXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmIG5vZGUpCkBAIC0xMjYsNTMgKzk0LDQwIEBAIHN0YXRpYyBXVEY6OlN0cmluZyBy
YW5nZVRvU3RyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdv
cmxkCiAgICAgaWYgKCFyYW5nZVJlZikKICAgICAgICAgcmV0dXJuICIobnVsbCkiOwogCi0gICAg
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsK
LQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKLSAgICBKU1ZhbHVlUmVmIHJhbmdl
VmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdyYXBwZXJGb3JSYW5nZUZvcldvcmxk
KGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOworICAgIGF1dG8gZnJhbWUgPSBXS0J1bmRsZVBhZ2VH
ZXRNYWluRnJhbWUocGFnZSk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKKyAgICBhdXRvIHJhbmdlVmFs
dWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdyYXBwZXJGb3JSYW5nZUZvcldvcmxkKGZy
YW1lLCByYW5nZVJlZiwgd29ybGQpOwogICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4
dCwgcmFuZ2VWYWx1ZSkpOwotICAgIEpTT2JqZWN0UmVmIHJhbmdlT2JqZWN0ID0gKEpTT2JqZWN0
UmVmKXJhbmdlVmFsdWU7Ci0KLSAgICBKU1ZhbHVlUmVmIHN0YXJ0Tm9kZVZhbHVlID0gcHJvcGVy
dHlWYWx1ZShjb250ZXh0LCByYW5nZU9iamVjdCwgInN0YXJ0Q29udGFpbmVyIik7Ci0gICAgQVNT
RVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzdGFydE5vZGVWYWx1ZSkpOwotICAgIEpTT2Jq
ZWN0UmVmIHN0YXJ0Tm9kZU9iamVjdCA9IChKU09iamVjdFJlZilzdGFydE5vZGVWYWx1ZTsKLQot
ICAgIEpTVmFsdWVSZWYgZW5kTm9kZVZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCByYW5n
ZU9iamVjdCwgImVuZENvbnRhaW5lciIpOwotICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29u
dGV4dCwgZW5kTm9kZVZhbHVlKSk7Ci0gICAgSlNPYmplY3RSZWYgZW5kTm9kZU9iamVjdCA9IChK
U09iamVjdFJlZillbmROb2RlVmFsdWU7Ci0KLSAgICBpbnQgc3RhcnRPZmZzZXQgPSBwcm9wZXJ0
eVZhbHVlSW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRPZmZzZXQiKTsKLSAgICBpbnQg
ZW5kT2Zmc2V0ID0gcHJvcGVydHlWYWx1ZUludChjb250ZXh0LCByYW5nZU9iamVjdCwgImVuZE9m
ZnNldCIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgicmFuZ2UgZnJvbSAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZE51bWJlcihzdGFydE9mZnNldCk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgb2YgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4dCwgc3Rh
cnROb2RlT2JqZWN0KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG8gIik7
Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoZW5kT2Zmc2V0KTsKLSAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChk
dW1wUGF0aChjb250ZXh0LCBlbmROb2RlT2JqZWN0KSk7Ci0gICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICBhdXRvIHJhbmdlT2JqZWN0ID0gKEpTT2JqZWN0UmVmKXJhbmdl
VmFsdWU7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygicmFuZ2UgZnJvbSAiLAorICAgICAgICBu
dW1lcmljUHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJzdGFydE9mZnNldCIpLAorICAg
ICAgICAiIG9mICIsCisgICAgICAgIGR1bXBQYXRoKGNvbnRleHQsIG9iamVjdFByb3BlcnR5KGNv
bnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRDb250YWluZXIiKSksCisgICAgICAgICIgdG8gIiwK
KyAgICAgICAgbnVtZXJpY1Byb3BlcnR5KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zmc2V0
IiksCisgICAgICAgICIgb2YgIiwKKyAgICAgICAgZHVtcFBhdGgoY29udGV4dCwgb2JqZWN0UHJv
cGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRDb250YWluZXIiKSkKKyAgICApOwogfQog
CiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IE5hdmlnYXRpb25UeXBlVG9TdHJpbmco
V0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAg
Y2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQ6Ci0gICAgICAgIHJldHVybiBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsaW5rIGNsaWNrZWQiKSk7Cisg
ICAgICAgIHJldHVybiB0b1dLKCJsaW5rIGNsaWNrZWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2
aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSBzdWJtaXR0ZWQiKSk7CisgICAgICAgIHJldHVy
biB0b1dLKCJmb3JtIHN1Ym1pdHRlZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlw
ZUJhY2tGb3J3YXJkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiYmFjay9mb3J3YXJkIikpOworICAgICAgICByZXR1cm4gdG9XSygiYmFjay9m
b3J3YXJkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlUmVsb2FkOgotICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicmVsb2FkIikp
OworICAgICAgICByZXR1cm4gdG9XSygicmVsb2FkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmln
YXRpb25UeXBlRm9ybVJlc3VibWl0dGVkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSByZXN1Ym1pdHRlZCIpKTsKKyAgICAgICAgcmV0
dXJuIHRvV0soImZvcm0gcmVzdWJtaXR0ZWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlv
blR5cGVPdGhlcjoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIm90aGVyIikpOworICAgICAgICByZXR1cm4gdG9XSygib3RoZXIiKTsKICAgICB9
Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImlsbGVn
YWwgdmFsdWUiKSk7CisgICAgcmV0dXJuIHRvV0soImlsbGVnYWwgdmFsdWUiKTsKIH0KIAogc3Rh
dGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9u
UmVmIHN0eWxlKQpAQCAtMTg1LDIzICsxNDAsMTQgQEAgc3RhdGljIFdURjo6U3RyaW5nIHN0eWxl
RGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlKQogICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBXVEY6OlN0cmluZyBzZWN1
cml0eU9yaWdpblRvU3RyKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luKQorc3RhdGljIFdURjo6
U3RyaW5nIHN0cmluZyhXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKIHsKLSAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ3snKTsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmln
aW5Db3B5UHJvdG9jb2wob3JpZ2luKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhX
S1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoV0tTZWN1
cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ30n
KTsKLQotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgcmV0dXJuIG1h
a2VTdHJpbmcoJ3snLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5UHJv
dG9jb2wob3JpZ2luKSkpLCAiLCAiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmln
aW5Db3B5SG9zdChvcmlnaW4pKSksICIsICIsIFdLU2VjdXJpdHlPcmlnaW5HZXRQb3J0KG9yaWdp
biksICd9Jyk7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBmcmFtZVRvU3RyKFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUgPSBhZG9w
dFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOworICAgIGF1dG8gbmFtZSA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7CiAg
ICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7CkBAIC0yMzUsMTIgKzE4
MSwxMiBAQCBzdGF0aWMgaW5saW5lIFdURjo6U3RyaW5nIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1
bHQoV0tVUkxSZWYgZmlsZVVybCkKICAgICBpZiAoIWZpbGVVcmwpCiAgICAgICAgIHJldHVybiAi
KG51bGwpIjsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY2hlbWVTdHJpbmcgPSBh
ZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJsKSk7CisgICAgYXV0byBzY2hlbWVTdHJpbmcg
PSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJsKSk7CiAgICAgaWYgKCFpc0xvY2FsRmls
ZVNjaGVtZShzY2hlbWVTdHJpbmcuZ2V0KCkpKQogICAgICAgICByZXR1cm4gdG9XVEZTdHJpbmco
YWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoZmlsZVVybCkpKTsKIAogICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1h
aW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7Cisg
ICAgYXV0byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5G
cmFtZSkpOwogICAgIGlmICghbWFpbkZyYW1lVVJMKQogICAgICAgICBtYWluRnJhbWVVUkwgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwobWFpbkZyYW1lKSk7CiAKQEAg
LTQzNCw4ICszODAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRlclRlc3Qo
KQogICAgIC8vIChzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzgzMzQ+KSwgaG93ZXZlciBmb3IgdGVzdHMsIHdlIHdhbnQgdG8gc3RhcnQgZWFjaCBvbmUgd2l0
aCBhIGNsZWFuIHN0YXRlLgogICAgIFdLQnVuZGxlRnJhbWVGb2N1cyhmcmFtZSk7CiAKLSAgICBK
U0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29u
dGV4dChmcmFtZSk7Ci0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVj
dChjb250ZXh0KTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0
KFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSkpOwogICAgIGFzc2lnbmVk
VXJsc0NhY2hlKCkuY2xlYXIoKTsKIAogICAgIC8vIFVzZXIgc2NyaXB0cyBuZWVkIHRvIGJlIHJl
bW92ZWQgYWZ0ZXIgdGhlIHRlc3QgYW5kIGJlZm9yZSBsb2FkaW5nIGFib3V0OmJsYW5rLCBhcyBv
dGhlcndpc2UgdGhleSB3b3VsZCBydW4gaW4gYWJvdXQ6YmxhbmssIGFuZCBwb3RlbnRpYWxseSBs
ZWFrIHJlc3VsdHMgaW50byBhIHN1YnNlcXVlc3QgdGVzdC4KQEAgLTQ1MSw3ICszOTYsNyBAQCB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRlclRlc3QoKQogLy8gU3RyaW5nIG91dHB1
dCBtdXN0IGJlIGlkZW50aWNhbCB0byAtW1dlYkZyYW1lIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJs
ZUZvclRlc3RSZXN1bHRdLgogc3RhdGljIHZvaWQgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJs
ZUZvclRlc3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CisgICAgYXV0byBuYW1lID0gYWRvcHRX
SyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKICAgICBpZiAoV0tCdW5kbGVGcmFtZUlz
TWFpbkZyYW1lKGZyYW1lKSkgewogICAgICAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0
KCkpKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIm1haW4gZnJh
bWUiKTsKQEAgLTQ4NiwyNyArNDMxLDIxIEBAIHN0YXRpYyB2b2lkIGR1bXBMb2FkRXZlbnQoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogZXZlbnROYW1lKQogCiBzdGF0aWMgaW5s
aW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VS
TFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJM
KHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gZmlyc3RQYXJ0eSA9IGFkb3B0
V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29raWVzKHJlcXVlc3QpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaHR0cE1ldGhvZCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0
Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwotCi0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCI8TlNVUkxSZXF1ZXN0IFVSTCAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwYXRo
U3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiLCBtYWluIGRvY3VtZW50IFVSTCAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpKTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgaHR0cCBtZXRob2QgIik7CisgICAgYXV0byB1
cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1dG8gZmly
c3RQYXJ0eSA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29raWVzKHJl
cXVlc3QpKTsKKyAgICBhdXRvIGh0dHBNZXRob2QgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlI
VFRQTWV0aG9kKHJlcXVlc3QpKTsKIAorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCI8TlNVUkxS
ZXF1ZXN0IFVSTCAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSksICIsIG1h
aW4gZG9jdW1lbnQgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQoZmlyc3RQYXJ0eS5n
ZXQoKSksICIsIGh0dHAgbWV0aG9kICIpOwogICAgIGlmIChXS1N0cmluZ0lzRW1wdHkoaHR0cE1l
dGhvZC5nZXQoKSkpCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG5vbmUp
Iik7CiAgICAgZWxzZQogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyho
dHRwTWV0aG9kKSk7Ci0KICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCiBzdGF0
aWMgaW5saW5lIHZvaWQgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRl
ciwgYm9vbCBzaG91bGREdW1wUmVzcG9uc2VIZWFkZXJzID0gZmFsc2UpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9u
c2UpKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9u
c2UpKTsKICAgICBpZiAoIXVybCkgewogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIihudWxsKSIpOwogICAgICAgICByZXR1cm47CkBAIC01MzUsMzEgKzQ3NCwyMCBAQCB1aW50
NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVyQ291bnQoV0tVUkxSZXNwb25z
ZVJlZiByZXNwb25zZSkKIAogc3RhdGljIGlubGluZSB2b2lkIGR1bXBFcnJvckRlc2NyaXB0aW9u
U3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLRXJyb3JSZWYgZXJyb3IsIFN0cmluZ0J1aWxkZXImIHN0
cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yRG9tYWlu
ID0gYWRvcHRXSyhXS0Vycm9yQ29weURvbWFpbihlcnJvcikpOwotICAgIGludCBlcnJvckNvZGUg
PSBXS0Vycm9yR2V0RXJyb3JDb2RlKGVycm9yKTsKKyAgICBhdXRvIGVycm9yRG9tYWluID0gdG9X
VEZTdHJpbmcoYWRvcHRXSyhXS0Vycm9yQ29weURvbWFpbihlcnJvcikpKTsKKyAgICBhdXRvIGVy
cm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJyb3IpOwogCiAgICAgLy8gV2UgbmVlZCB0
byBkbyBzb21lIGVycm9yIG1hcHBpbmcgaGVyZSB0byBtYXRjaCB0aGUgdGVzdCBleHBlY3RhdGlv
bnMgKE1hYyBlcnJvciBuYW1lcyBhcmUgZXhwZWN0ZWQpLgotICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKGVycm9yRG9tYWluLmdldCgpLCAiV2ViS2l0TmV0d29ya0Vycm9yIikp
IHsKLSAgICAgICAgZXJyb3JEb21haW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJOU1VSTEVycm9yRG9tYWluIikpOworICAgIGlmIChlcnJvckRvbWFpbiA9PSAiV2Vi
S2l0TmV0d29ya0Vycm9yIikgeworICAgICAgICBlcnJvckRvbWFpbiA9ICJOU1VSTEVycm9yRG9t
YWluIjsKICAgICAgICAgZXJyb3JDb2RlID0gLTk5OTsKICAgICB9CisgICAgaWYgKGVycm9yRG9t
YWluID09ICAiV2ViS2l0UG9saWN5RXJyb3IiKQorICAgICAgICBlcnJvckRvbWFpbiA9ICJXZWJL
aXRFcnJvckRvbWFpbiI7CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhl
cnJvckRvbWFpbi5nZXQoKSwgIldlYktpdFBvbGljeUVycm9yIikpCi0gICAgICAgIGVycm9yRG9t
YWluID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0RXJyb3JE
b21haW4iKSk7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxOU0Vycm9yIGRv
bWFpbiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhlcnJvckRvbWFp
bikpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBjb2RlICIpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGVycm9yQ29kZSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS0Vycm9yQ29weUZhaWxpbmdVUkwoZXJyb3IpKTsKLSAg
ICBpZiAodXJsLmdldCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxT
dHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGZhaWxpbmcgVVJMIFwiIik7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgIH0KLQorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCI8TlNFcnJvciBkb21haW4gIiwgZXJyb3JEb21haW4sICIsIGNvZGUgIiwgZXJyb3JDb2RlKTsK
KyAgICBpZiAoYXV0byB1cmwgPSBhZG9wdFdLKFdLRXJyb3JDb3B5RmFpbGluZ1VSTChlcnJvcikp
KQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCBmYWlsaW5nIFVSTCBcIiIsIHRvV1RG
U3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpKSwgJyInKTsKICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCkBAIC02OTUsNyArNjIzLDcgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpbmplY3RlZEJ1
bmRsZS50ZXN0UnVubmVyKCktPnRlc3RVUkwoKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1VS
TFJlZj4gdGVzdFVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVSTChm
cmFtZSkpOworICAgICAgICBhdXRvIHRlc3RVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5
UHJvdmlzaW9uYWxVUkwoZnJhbWUpKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpLT5zZXRUZXN0VVJMKHRlc3RVUkwuZ2V0KCkpOwogICAgIH0KIApAQCAtNzc0LDEzICs3MDIs
MTMgQEAgZW51bSBGcmFtZU5hbWVQb2xpY3kgeyBTaG91bGROb3RJbmNsdWRlRnJhbWVOYW1lLCBT
aG91bGRJbmNsdWRlRnJhbWVOYW1lIH07CiAKIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxk
ZXIsIEZyYW1lTmFtZVBvbGljeSBzaG91bGRJbmNsdWRlRnJhbWVOYW1lID0gU2hvdWxkTm90SW5j
bHVkZUZyYW1lTmFtZSkKIHsKLSAgICBkb3VibGUgeCA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0eVZh
bHVlKGZyYW1lLCAicGFnZVhPZmZzZXQiKTsKLSAgICBkb3VibGUgeSA9IG51bWVyaWNXaW5kb3dQ
cm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVlPZmZzZXQiKTsKKyAgICBkb3VibGUgeCA9IG51bWVy
aWNXaW5kb3dQcm9wZXJ0eShmcmFtZSwgInBhZ2VYT2Zmc2V0Iik7CisgICAgZG91YmxlIHkgPSBu
dW1lcmljV2luZG93UHJvcGVydHkoZnJhbWUsICJwYWdlWU9mZnNldCIpOwogICAgIGlmIChmYWJz
KHgpIDw9IDAuMDAwMDAwMDEgJiYgZmFicyh5KSA8PSAwLjAwMDAwMDAxKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoc2hvdWxkSW5jbHVkZUZyYW1lTmFtZSkgewotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZy
YW1lKSk7CisgICAgICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1l
KGZyYW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgJyIp
OwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJyAiKTsKQEAgLTc5NCw3ICs3MjIsNyBA
QCBzdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1lUmVmIGZy
YW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbgogCiBzdGF0aWMgdm9pZCBkdW1wRGVzY2VuZGFudEZy
YW1lU2Nyb2xsUG9zaXRpb25zKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXIm
IHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gY2hpbGRGcmFt
ZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsKKyAgICBh
dXRvIGNoaWxkRnJhbWVzID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weUNoaWxkRnJhbWVzKGZy
YW1lKSk7CiAgICAgc2l6ZV90IHNpemUgPSBXS0FycmF5R2V0U2l6ZShjaGlsZEZyYW1lcy5nZXQo
KSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgV0tC
dW5kbGVGcmFtZVJlZiBzdWJmcmFtZSA9IHN0YXRpY19jYXN0PFdLQnVuZGxlRnJhbWVSZWY+KFdL
QXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZEZyYW1lcy5nZXQoKSwgaSkpOwpAQCAtODEwLDI4ICs3
MzgsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBBbGxGcmFtZVNjcm9sbFBvc2l0
aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGUKICAgICBkdW1wRGVzY2VuZGFudEZyYW1l
U2Nyb2xsUG9zaXRpb25zKGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKIH0KIAotc3RhdGljIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKGNvbnN0IGNoYXIqIHN0cmluZykKLXsKLSAgICByZXR1
cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7Ci19Ci0KIHN0
YXRpYyBib29sIGhhc0RvY3VtZW50RWxlbWVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewot
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRDb250ZXh0KGZyYW1lKTsKLSAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRl
eHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7Ci0KLSAgICBKU1ZhbHVlUmVmIGRvY3VtZW50VmFs
dWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgdG9KUygiZG9j
dW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFkb2N1bWVudFZhbHVlKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGRvY3VtZW50
VmFsdWUpKTsKLSAgICBKU09iamVjdFJlZiBkb2N1bWVudCA9IEpTVmFsdWVUb09iamVjdChjb250
ZXh0LCBkb2N1bWVudFZhbHVlLCAwKTsKLQotICAgIEpTVmFsdWVSZWYgZG9jdW1lbnRFbGVtZW50
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGRvY3VtZW50LCB0b0pTKCJkb2N1
bWVudEVsZW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFkb2N1bWVudEVsZW1lbnRWYWx1ZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29u
dGV4dCwgZG9jdW1lbnRFbGVtZW50VmFsdWUpOworICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxl
RnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7CisgICAgcmV0dXJuIG9iamVjdFByb3Bl
cnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgeyAiZG9jdW1l
bnQiLCAiZG9jdW1lbnRFbGVtZW50IiB9KTsKIH0KIAogc3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4
dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQpAQCAtODU0
LDExICs3NjQsMTEgQEAgc3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQogCiBzdGF0aWMgdm9pZCBkdW1wRGVzY2Vu
ZGFudEZyYW1lc1RleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBjaGlsZEZyYW1lcyA9
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOworICAgIGF1dG8g
Y2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUp
KTsKICAgICBzaXplX3Qgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGNoaWxkRnJhbWVzLmdldCgpKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBXS0J1bmRs
ZUZyYW1lUmVmIHN1YmZyYW1lID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4oV0tBcnJh
eUdldEl0ZW1BdEluZGV4KGNoaWxkRnJhbWVzLmdldCgpLCBpKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJmcmFtZU5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5
TmFtZShzdWJmcmFtZSkpOworICAgICAgICBhdXRvIHN1YmZyYW1lTmFtZSA9IGFkb3B0V0soV0tC
dW5kbGVGcmFtZUNvcHlOYW1lKHN1YmZyYW1lKSk7CiAKICAgICAgICAgLy8gRHVtcFJlbmRlclRy
ZWUgaWdub3JlcyBlbXB0eSBmcmFtZXMsIHNvIGRvIHRoZSBzYW1lIHRoaW5nIGhlcmUuCiAgICAg
ICAgIGlmICghaGFzRG9jdW1lbnRFbGVtZW50KHN1YmZyYW1lKSkKQEAgLTg4NCw5ICs3OTQsOSBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZyYW1lc1RleHQoU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlcikKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJB
cmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxk
ZXIpCiB7CiAjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNFKERJUkVD
VDJEKQotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gd2tEYXRhID0gYWRvcHRXSyhXS0J1bmRs
ZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBj
ZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0RhdGEuZ2V0
KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IGNmU3RyaW5nID0gYWRvcHRDRihXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0
cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKKyAgICBhdXRvIHdrRGF0YSA9
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZyYW1lKSk7CisgICAgYXV0byBj
ZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0RhdGEuZ2V0
KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKKyAgICBhdXRvIGNmU3RyaW5nID0g
YWRvcHRDRihXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZl
RGF0YShjZkRhdGEuZ2V0KCkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjZlN0cmluZy5n
ZXQoKSk7CiAjZW5kaWYKIH0KQEAgLTkwMiw5ICs4MTIsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZHVtcCgpCiAgICAgV0tCdW5kbGVQYWdlRmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRh
dGUobV9wYWdlKTsKIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VH
ZXRNYWluRnJhbWUobV9wYWdlKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsUmVmID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFtZSkpOworICAgIGF1dG8gdXJsUmVmID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFtZSkpOwogICAgIFN0cmluZyB1cmwgPSB0
b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxSZWYuZ2V0KCkpKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1l
Q29weU1JTUVUeXBlRm9yUmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYuZ2V0KCkpKTsKKyAg
ICBhdXRvIG1pbWVUeXBlID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU1JTUVUeXBlRm9yUmVz
b3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYuZ2V0KCkpKTsKICAgICBpZiAodXJsLmZpbmQoImR1
bXBBc1RleHQvIikgIT0gbm90Rm91bmQgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
aW1lVHlwZS5nZXQoKSwgInRleHQvcGxhaW4iKSkKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUudGVz
dFJ1bm5lcigpLT5kdW1wQXNUZXh0KGZhbHNlKTsKIApAQCAtMTAxOCwyMSArOTI4LDE5IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUsIFdLQnVuZGxlCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5u
aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxk
KTsKLSAgICBKU09iamVjdFJlZiB3aW5kb3cgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29u
dGV4dCk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250
ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKIAogICAgIGlmIChXS0J1bmRsZVNjcmlwdFdvcmxk
Tm9ybWFsV29ybGQoKSAhPSB3b3JsZCkgewotICAgICAgICBKU09iamVjdFNldFByb3BlcnR5KGNv
bnRleHQsIHdpbmRvdywgdG9KUygiX193b3JsZElEIikuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVy
KGNvbnRleHQsIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZCh3b3JsZCkpLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICAgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHko
Y29udGV4dCwgIl9fd29ybGRJRCIsIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZCh3b3JsZCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBu
dWxscHRyOwotICAgIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwotICAgIGluamVjdGVkQnVuZGxlLmdjQ29u
dHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7
Ci0gICAgaW5qZWN0ZWRCdW5kbGUuZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtlV2luZG93
T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUu
dGV4dElucHV0Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywg
JmV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5tYWtlV2luZG93
T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLmdjQ29udHJvbGxlcigpLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLmV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKKyAgICBpbmplY3RlZEJ1bmRs
ZS50ZXh0SW5wdXRDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CiAjaWYg
SEFWRShBQ0NFU1NJQklMSVRZKQotICAgIGluamVjdGVkQnVuZGxlLmFjY2Vzc2liaWxpdHlDb250
cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsK
KyAgICBpbmplY3RlZEJ1bmRsZS5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpLT5tYWtlV2luZG93
T2JqZWN0KGNvbnRleHQpOwogI2VuZGlmCiAKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVj
dEludGVybmFsc09iamVjdChjb250ZXh0KTsKQEAgLTExMzYsNyArMTA0NCw3IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRJbml0aWF0ZUxvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSwgV0tCdW5kCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNU
ZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJl
Zj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRv
IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CiAgICAgYXNzaWdu
ZWRVcmxzQ2FjaGUoKS5hZGQoaWRlbnRpZmllciwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1
cmwuZ2V0KCkpKTsKIH0KIApAQCAtMTE3NSwxNiArMTA4MywxNiBAQCBXS1VSTFJlcXVlc3RSZWYg
SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZQogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkgJiYgaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiByZWRpcmVj
dFVSTCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKKyAgICBhdXRv
IHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwog
ICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkgJiYgaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSAmJiBy
ZWRpcmVjdFVSTCkgewogICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KCJSZXR1cm5p
bmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVx
dWVzdENvcHlVUkwocmVxdWVzdCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0
ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFtZSh1cmwuZ2V0KCkpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgp
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tV
UkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJl
cXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIGhvc3QgPSBhZG9wdFdLKFdLVVJMQ29w
eUhvc3ROYW1lKHVybC5nZXQoKSkpOworICAgIGF1dG8gc2NoZW1lID0gYWRvcHRXSyhXS1VSTENv
cHlTY2hlbWUodXJsLmdldCgpKSk7CisgICAgYXV0byB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJM
Q29weVN0cmluZyh1cmwuZ2V0KCkpKTsKICAgICBpZiAoaG9zdCAmJiAhV0tTdHJpbmdJc0VtcHR5
KGhvc3QuZ2V0KCkpCiAgICAgICAgICYmIGlzSFRUUE9ySFRUUFNTY2hlbWUoc2NoZW1lLmdldCgp
KQogICAgICAgICAmJiAhV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhob3N0LmdldCgpLCAi
MjU1LjI1NS4yNTUuMjU1IikgLy8gVXNlZCBpbiBzb21lIHRlc3RzIHRoYXQgZXhwZWN0IHRvIGdl
dCBiYWNrIGFuIGVycm9yLgpAQCAtMTE5MiwxMiArMTEwMCwxMiBAQCBXS1VSTFJlcXVlc3RSZWYg
SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZQogICAgICAgICBib29sIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBmYWxzZTsKICAgICAg
ICAgaWYgKGluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkgewogICAgICAgICAgICAgV0tC
dW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdl
KTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtYWluRnJhbWVVUkwgPSBhZG9w
dFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOworICAgICAgICAgICAgYXV0byBt
YWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOwog
ICAgICAgICAgICAgaWYgKCFtYWluRnJhbWVVUkwgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtYWluRnJhbWVVUkwuZ2V0KCkpKS5nZXQoKSwg
ImFib3V0OmJsYW5rIikpCiAgICAgICAgICAgICAgICAgbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhX
S0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKG1haW5GcmFtZSkpOwogCi0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1lSG9zdCA9IGFkb3B0V0soV0tVUkxD
b3B5SG9zdE5hbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7Ci0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1lU2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUo
bWFpbkZyYW1lVVJMLmdldCgpKSk7CisgICAgICAgICAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBh
ZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1lKG1haW5GcmFtZVVSTC5nZXQoKSkpOworICAgICAgICAg
ICAgYXV0byBtYWluRnJhbWVTY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShtYWluRnJh
bWVVUkwuZ2V0KCkpKTsKICAgICAgICAgICAgIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBpc0hUVFBP
ckhUVFBTU2NoZW1lKG1haW5GcmFtZVNjaGVtZS5nZXQoKSkgJiYgIWlzTG9jYWxIb3N0KG1haW5G
cmFtZUhvc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbWFpbkZyYW1lSXNFeHRl
cm5hbCAmJiAhaXNBbGxvd2VkSG9zdChob3N0LmdldCgpKSkgewpAQCAtMTIxNCw3ICsxMTIyLDcg
QEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9y
RnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAgICAgU3RyaW5nIGJvZHkgPSBpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVxdWVzdEhUVFBCb2R5KCk7CiAgICAgICAg
IGlmICghYm9keS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENTdHJpbmcgY0JvZHkgPSBib2R5
LnV0ZjgoKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYm9keSA9IGFkb3B0
V0soV0tEYXRhQ3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGNC
b2R5LmRhdGEoKSksIGNCb2R5Lmxlbmd0aCgpKSk7CisgICAgICAgICAgICBhdXRvIGJvZHkgPSBh
ZG9wdFdLKFdLRGF0YUNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihjQm9keS5kYXRhKCkpLCBjQm9keS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgcmV0dXJuIFdL
VVJMUmVxdWVzdENvcHlTZXR0aW5nSFRUUEJvZHkocmVxdWVzdCwgYm9keS5nZXQoKSk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0xMjQyLDkgKzExNTAsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
QgogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3Vy
Y2VSZXNwb25zZU1JTUVUeXBlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0
cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJM
Q29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtaW1lVHlwZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlNSU1FVHlw
ZShyZXNwb25zZSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVS
TChyZXNwb25zZSkpOworICAgIGF1dG8gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlMYXN0
UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKKyAgICBhdXRvIG1pbWVUeXBlU3RyaW5nID0gYWRv
cHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHJlc3BvbnNlKSk7CiAKICAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJp
bmcodXJsU3RyaW5nKSk7CkBAIC0xMzUwLDEwICsxMjU4LDggQEAgV0tCdW5kbGVQYWdlUG9saWN5
QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bihXS0IKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b25cbiIpOwogICAgICAgICBkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KHJlcXVlc3QsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiBpcyBtYWluIGZyYW1lIC0gIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBzaG91bGQgb3BlbiBVUkxzIGV4dGVy
bmFsbHkgLSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV0tCdW5kbGVOYXZpZ2F0
aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9uKSA/ICJ5
ZXMiIDogIm5vIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgaXMgbWFpbiBmcmFt
ZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxs
eSAtICIsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5hbFVSTHMo
bmF2aWdhdGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIpOwogICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnXG4nKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KQEAgLTEzNjEsMjQgKzEyNjcsMjEgQEAgV0tCdW5k
bGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbihXS0IKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBv
bGljeUFjdGlvblBhc3NUaHJvdWdoOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9
IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQo
KSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3Qp
KTsKKyAgICBhdXRvIHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQo
KSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7Ci0g
ICAgaWYgKGlzTG9jYWxGaWxlU2NoZW1lKHVybFNjaGVtZS5nZXQoKSkpIHsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZpbGVuYW1lID0gYWRvcHRXSyhXS1VSTENvcHlMYXN0UGF0
aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9X
VEZTdHJpbmcoZmlsZW5hbWUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgp
KSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykp
OwotICAgIH0KKyAgICBpZiAoaXNMb2NhbEZpbGVTY2hlbWUodXJsU2NoZW1lLmdldCgpKSkKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlM
YXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKSkpOworICAgIGVsc2UKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdl
dCgpKSkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB3aXRoIG5hdmlnYXRp
b24gdHlwZSBcJyIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKE5hdmln
YXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5
cGUobmF2aWdhdGlvbkFjdGlvbikpKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJcJyIpOwotICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZj4gaGl0VGVz
dFJlc3VsdFJlZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RS
ZXN1bHQobmF2aWdhdGlvbkFjdGlvbikpOworICAgIGF1dG8gaGl0VGVzdFJlc3VsdFJlZiA9IGFk
b3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RSZXN1bHQobmF2aWdhdGlv
bkFjdGlvbikpOwogICAgIGlmIChoaXRUZXN0UmVzdWx0UmVmKSB7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLQnVuZGxlTm9kZUhhbmRsZVJlZj4gbm9kZUhhbmRsZVJlZiA9IGFkb3B0V0soV0tCdW5k
bGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJlc3VsdFJlZi5nZXQoKSkpOwor
ICAgICAgICBhdXRvIG5vZGVIYW5kbGVSZWYgPSBhZG9wdFdLKFdLQnVuZGxlSGl0VGVzdFJlc3Vs
dENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYuZ2V0KCkpKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb3JpZ2luYXRpbmcgZnJvbSAiKTsKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBub2RlSGFu
ZGxlUmVmLmdldCgpKSk7CiAgICAgfQpAQCAtMTQwMCwxMiArMTMwMyw3IEBAIFdLQnVuZGxlUGFn
ZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNl
KFdLQnVuZGxlUGFnCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKSAmJiBp
bmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVFbmFibGVkKCkgJiYg
V0tVUkxSZXNwb25zZUlzQXR0YWNobWVudChyZXNwb25zZSkpIHsKLSAgICAgICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmls
ZW5hbWUgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUocmVzcG9u
c2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdh
dGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcJ1xuIik7Ci0gICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VT
dHJpbmcoIlBvbGljeSBkZWxlZ2F0ZTogcmVzb3VyY2UgaXMgYW4gYXR0YWNobWVudCwgc3VnZ2Vz
dGVkIGZpbGUgbmFtZSBcJyIsIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlT
dWdnZXN0ZWRGaWxlbmFtZShyZXNwb25zZSkpKSwgIlwnXG4iKSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwpAQCAtMTQ3MSwxMCArMTM2
OSwxMCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgYWRkTGVhZGluZ1NwYWNlU3RyaXBUcmFpbGluZ1Nw
YWNlc0FkZE5ld2xpbmUoY29uc3QgV1RGOjpTdHJpbgogCiBzdGF0aWMgV1RGOjpTdHJpbmcgbGFz
dEZpbGVVUkxQYXRoQ29tcG9uZW50KGNvbnN0IFdURjo6U3RyaW5nJiBwYXRoKQogewotICAgIHNp
emVfdCBwb3MgPSBwYXRoLmZpbmQoImZpbGU6Ly8iKTsKKyAgICBhdXRvIHBvcyA9IHBhdGguZmlu
ZCgiZmlsZTovLyIpOwogICAgIEFTU0VSVChXVEY6Om5vdEZvdW5kICE9IHBvcyk7CiAKLSAgICBX
VEY6OlN0cmluZyB0bXBQYXRoID0gcGF0aC5zdWJzdHJpbmcocG9zICsgNyk7CisgICAgYXV0byB0
bXBQYXRoID0gcGF0aC5zdWJzdHJpbmcocG9zICsgNyk7CiAgICAgaWYgKHRtcFBhdGgubGVuZ3Ro
KCkgPCAyKSAvLyBLZWVwIHRoZSBsb25lIHNsYXNoIHRvIGF2b2lkIGVtcHR5IG91dHB1dC4KICAg
ICAgICAgcmV0dXJuIHRtcFBhdGg7CiAKQEAgLTE1MjEsMTEgKzE0MTksNyBAQCB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQoV0tTdHJpbmdSZWYgc3RhdHVzYmFy
VGV4dCkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFN0
YXR1c0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FU
RSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iik7Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJ
IERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDoiLCB0b1dURlN0cmluZyhz
dGF0dXNiYXJUZXh0KSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2ls
bFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVm
KQpAQCAtMTU1OSwxNSArMTQ1Myw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFj
aEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmCiAgICAgICAg
IC8vIFJvdW5kaW5nIHVwIG9yIGRvd24gZG9lcyBub3QgcmVhbGx5IG1hdHRlciBmb3IgdGhlc2Ug
dGVzdHMuIEl0J3MKICAgICAgICAgLy8gc3VmZmljaWVudCB0byBqdXN0IGdldCBhIHJhbmdlIG9m
IDEwMDAwIHRvIGRldGVybWluZSBpZiB3ZSB3ZXJlCiAgICAgICAgIC8vIGFib3ZlIG9yIGJlbG93
IGEgdGhyZXNob2xkLgotICAgICAgICBpbnQ2NF90IHRydW5jYXRlZFNwYWNlTmVlZGVkID0gKHRv
dGFsQnl0ZXNOZWVkZWQgLyAxMDAwMCkgKiAxMDAwMDsKLQotICAgICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkg
REVMRUdBVEUgQVBQTElDQVRJT04gQ0FDSEUgQ0FMTEJBQ0s6IGV4Y2VlZGVkQXBwbGljYXRpb25D
YWNoZU9yaWdpblF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHNlY3VyaXR5T3JpZ2luVG9TdHIob3JpZ2luKSk7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvdGFsU3BhY2VOZWVkZWQ6fiIpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZE51bWJlcih0cnVuY2F0ZWRTcGFjZU5lZWRlZCk7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRU
ZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGF1dG8gdHJ1bmNhdGVkU3Bh
Y2VOZWVkZWQgPSAodG90YWxCeXRlc05lZWRlZCAvIDEwMDAwKSAqIDEwMDAwOworICAgICAgICBp
bmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIEFQUExJQ0FU
SU9OIENBQ0hFIENBTExCQUNLOiBleGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YUZv
clNlY3VyaXR5T3JpZ2luOiIsIHN0cmluZyhvcmlnaW4pLCAiIHRvdGFsU3BhY2VOZWVkZWQ6fiIs
IHRydW5jYXRlZFNwYWNlTmVlZGVkLCAnXG4nKSk7CiAgICAgfQogCiAgICAgaWYgKGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9u
Q2FjaGVRdW90YSgpKQpAQCAtMTU4MCwxNSArMTQ2Nyw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2lu
UmVmCiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEo
V0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIGRhdGFiYXNlTmFtZSwgV0tT
dHJpbmdSZWYgZGF0YWJhc2VEaXNwbGF5TmFtZSwgdWludDY0X3QgY3VycmVudFF1b3RhQnl0ZXMs
IHVpbnQ2NF90IGN1cnJlbnRPcmlnaW5Vc2FnZUJ5dGVzLCB1aW50NjRfdCBjdXJyZW50RGF0YWJh
c2VVc2FnZUJ5dGVzLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlQnl0ZXMpCiB7CiAgICAgYXV0byYg
aW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKGlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkp
IHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNl
ZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihvcmlnaW4pKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZGF0YWJhc2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGRhdGFiYXNlTmFtZSkpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxM
QkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iiwgc3RyaW5nKG9y
aWdpbiksICIgZGF0YWJhc2U6IiwgdG9XVEZTdHJpbmcoZGF0YWJhc2VOYW1lKSwgJ1xuJykpOwog
CiAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAgIGRvdWJs
ZSB0ZXN0RGVmYXVsdFF1b3RhID0gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5kYXRhYmFz
ZURlZmF1bHRRdW90YSgpOwpAQCAtMTYwMSwxMiArMTQ4MSw3IEBAIHVpbnQ2NF90IEluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9y
aWdpbiwKICAgICBpZiAobWF4UXVvdGEgPj0gMCkgewogICAgICAgICBpZiAoZGVmYXVsdFF1b3Rh
IDwgZXhwZWN0ZWRVc2FnZUJ5dGVzICYmIGV4cGVjdGVkVXNhZ2VCeXRlcyA8PSBtYXhRdW90YSkg
ewogICAgICAgICAgICAgbmV3UXVvdGEgPSBleHBlY3RlZFVzYWdlQnl0ZXM7Ci0KLSAgICAgICAg
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGluY3JlYXNl
ZCBxdW90YSB0byAiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKG5l
d1F1b3RhKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAg
ICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkp
OworICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBE
RUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVhc2VkIHF1b3RhIHRvICIsIG5ld1F1b3Rh
LCAnXG4nKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG5ld1F1b3RhOwpAQCAtMTY3
NSwxMyArMTU1MCw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRp
bmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICBpZiAoIWluamVjdGVkQnVuZGxl
LmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0g
ICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRpbmdJbkRP
TVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFn
ZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKLSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRpbmdJ
bkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdc
bicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxv
d0VkaXRpbmcoKTsKIH0KIApAQCAtMTY5MSwxMyArMTU2MSw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAg
ICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTog
c2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0
VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6
IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxk
LmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggYTYyNTU4OTcy
N2JjNzFiNzQxZWNmMjU2NTE1MjFlZmI0ZjQ5OTdmMy4uNzFjYzAxOGY0MTI2MDIzNWU5ZTQ3YWI5
NGEwNDczYjRmMzYxYzExMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCisjaW5jbHVkZSAiRGljdGlv
bmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAi
SW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5jbHVkZSAiSlNUZXN0UnVubmVyLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5j
bHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NUZXN0
UnVubmVyVXRpbHMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
PgpAQCAtNjksNyArNjksNyBAQCBSZWY8VGVzdFJ1bm5lcj4gVGVzdFJ1bm5lcjo6Y3JlYXRlKCkK
IH0KIAogVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcigpCi0gICAgOiBtX3VzZXJTdHlsZVNoZWV0TG9j
YXRpb24oYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpKQorICAgIDog
bV91c2VyU3R5bGVTaGVldExvY2F0aW9uKHRvV0soIiIpKQogewogICAgIHBsYXRmb3JtSW5pdGlh
bGl6ZSgpOwogfQpAQCAtODMsMzQgKzgzLDEwMiBAQCBKU0NsYXNzUmVmIFRlc3RSdW5uZXI6Ondy
YXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIEpTVGVzdFJ1bm5lcjo6dGVzdFJ1bm5lckNsYXNzKCk7
CiB9CiAKK3N0YXRpYyBXS0J1bmRsZVBhZ2VSZWYgcGFnZSgpCit7CisgICAgcmV0dXJuIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKK30KKworc3RhdGljIFdLQnVu
ZGxlRnJhbWVSZWYgbWFpbkZyYW1lKCkKK3sKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKHBhZ2UoKSk7Cit9CisKK3N0YXRpYyBKU0NvbnRleHRSZWYgbWFpbkpTQ29udGV4dCgp
Cit7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJh
bWUoKSk7Cit9CisKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheSgpCiB7Ci0gICAgV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7
Ci0gICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KHBhZ2UpOworICAgIFdLQnVuZGxlUGFnZUZv
cmNlUmVwYWludChwYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXlBbmRUcmFj
a1JlcGFpbnRzKCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBXVFI6OnBhZ2Uo
KTsKICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQocGFnZSk7CiAgICAgV0tCdW5kbGVQYWdl
U2V0VHJhY2tzUmVwYWludHMocGFnZSwgdHJ1ZSk7CiAgICAgV0tCdW5kbGVQYWdlUmVzZXRUcmFj
a2VkUmVwYWludHMocGFnZSk7CiB9CiAKK3N0YXRpYyBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4g
dG9XSyhkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0V0soV0tEb3VibGVDcmVhdGUo
dmFsdWUpKTsKK30KKworc3RhdGljIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gY3JlYXRl
V0tEaWN0aW9uYXJ5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8Y29uc3QgY2hhcios
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+PiBwYWlycykKK3sKKyAgICBhdXRvIHNpemUgPSBwYWly
cy5zaXplKCk7CisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBrZXlzKHNpemUpOworICAgIFZlY3Rv
cjxXS1R5cGVSZWY+IHZhbHVlcyhzaXplKTsKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+PiBzdHJpbmdzKHNpemUpOworICAgIGZvciAoYXV0byYgcGFpciA6IHBhaXJzKSB7Cisg
ICAgICAgIGF1dG8ga2V5ID0gdG9XSyhwYWlyLmZpcnN0KTsKKyAgICAgICAga2V5cy5hcHBlbmQo
a2V5LmdldCgpKTsKKyAgICAgICAgdmFsdWVzLmFwcGVuZChwYWlyLnNlY29uZC5nZXQoKSk7Cisg
ICAgICAgIHN0cmluZ3MuYXBwZW5kKFdURk1vdmUoa2V5KSk7CisgICAgfQorICAgIHJldHVybiBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShrZXlzLmRhdGEoKSwgdmFsdWVzLmRhdGEoKSwgc2l6
ZSkpOworfQorCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlV2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9
IG51bGxwdHIpCit7CisgICAgV0tUeXBlUmVmIHJhd1JldHVyblZhbHVlID0gbnVsbHB0cjsKKyAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSwgJnJhd1JldHVyblZhbHVlKTsK
KyAgICByZXR1cm4gYWRvcHRXSyhyYXdSZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyBib29sIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKGNvbnN0IGNoYXIqIG5hbWUsIFdL
VHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShwb3N0
U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5hbWUsIHZhbHVlKSk7Cit9CisKK3N0
YXRpYyBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlV2l0
aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIp
Cit7CisgICAgV0tUeXBlUmVmIHJhd1JldHVyblZhbHVlID0gbnVsbHB0cjsKKyAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCksIHRvV0sobmFtZSku
Z2V0KCksIHZhbHVlLCAmcmF3UmV0dXJuVmFsdWUpOworICAgIHJldHVybiBhZG9wdFdLKHJhd1Jl
dHVyblZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxw
dHIpCit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQorCitzdGF0aWMgdWludDY0X3QgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50NjQoY29uc3QgY2hhciogbmFtZSwg
V0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICByZXR1cm4gdWludDY0VmFsdWUocG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRoUmV0dXJuVmFsdWUobmFtZSwgdmFsdWUpKTsKK30K
Kworc3RhdGljIHVpbnQ2NF90IHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdVSW50NjQo
Y29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gdWludDY0VmFsdWUocG9zdFN5bmNocm9u
b3VzTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lKSk7Cit9CisKK3N0YXRpYyB2b2lkIG92ZXJy
aWRlUHJlZmVyZW5jZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIGF1dG8m
IGJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBXS0J1bmRsZU92ZXJy
aWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGJ1bmRsZS5idW5kbGUoKSwgYnVuZGxlLnBh
Z2VHcm91cCgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSk7Cit9CisKIGJvb2wgVGVzdFJ1bm5l
cjo6c2hvdWxkRHVtcFBpeGVscygpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
R2V0RHVtcFBpeGVscyIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsK
LSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlE
KCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9u
b3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldER1bXBQaXhlbHMiKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXREdW1wUGl4ZWxzKGJvb2wgZHVtcFBpeGVscykKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXREdW1wUGl4ZWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkdW1wUGl4ZWxzKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXREdW1wUGl4ZWxzIiwgZHVt
cFBpeGVscyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dChib29sIGR1bXBQaXhl
bHMpCkBAIC0xMjIsMTggKzE5MCwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OmR1bXBBc1RleHQoYm9v
bCBkdW1wUGl4ZWxzKQogICAgIAogV2hhdFRvRHVtcCBUZXN0UnVubmVyOjp3aGF0VG9EdW1wKCkg
Y29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRXaGF0VG9EdW1wIikpOwotICAg
IFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJ
RChyZXR1cm5EYXRhKSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V2hhdFRvRHVtcD4oV0tVSW50NjRHZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2hhdFRvRHVtcD4ocG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2NCgiR2V0V2hh
dFRvRHVtcCIpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXaGF0VG9EdW1wKFdoYXRUb0R1
bXAgd2hhdFRvRHVtcCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRXaGF0VG9EdW1w
IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHdoYXRUb0R1bXApKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRXaGF0VG9EdW1wIiwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHdoYXRUb0R1bXApKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRDdXN0
b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2ZSkKQEAgLTE1OCwy
NiArMjIwLDE5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgp
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG9uZSgpCiB7Ci0gICAgYXV0byYgaW5qZWN0
ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKTsKIAogICAgIHNldFdh
aXRVbnRpbERvbmUodHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2FpdFVudGlsRG9u
ZShib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFdhaXRVbnRpbERv
bmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTZXRXYWl0VW50aWxEb25lIiwgdmFsdWUpOwogfQogCiBib29sIFRlc3RSdW5uZXI6
OnNob3VsZFdhaXRVbnRpbERvbmUoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJHZXRXYWl0VW50aWxEb25lIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0
cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5E
YXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldFdhaXRVbnRpbERvbmUiKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKQEAgLTIxMCwxOCArMjY1LDEyIEBAIHZv
aWQgVGVzdFJ1bm5lcjo6Zm9yY2VJbW1lZGlhdGVDb21wbGV0aW9uKCkKIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGJvb2wgdmFsdWUpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0
RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpz
aG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiR2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0
YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
LCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRX
SyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0
dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJHZXREdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzIik7CiB9CiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6OmltYWdlQ291bnRJbkdl
bmVyYWxQYXN0ZWJvYXJkKCkgY29uc3QKQEAgLTIzMSwxOCArMjgwLDE0IEBAIHVuc2lnbmVkIFRl
c3RSdW5uZXI6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29uc3QKIAogdm9pZCBU
ZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0
YXJ0LCBib29sIGFsbEZyYW1lcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc291
cmNlV0sgPSB0b1dLKHNvdXJjZSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VBZGRVc2VyU2NyaXB0KElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc291cmNlV0suZ2V0KCks
CisgICAgV0tCdW5kbGVQYWdlQWRkVXNlclNjcmlwdChwYWdlKCksIHRvV0soc291cmNlKS5nZXQo
KSwKICAgICAgICAgKHJ1bkF0U3RhcnQgPyBrV0tJbmplY3RBdERvY3VtZW50U3RhcnQgOiBrV0tJ
bmplY3RBdERvY3VtZW50RW5kKSwKICAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVjdEluQWxs
RnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3VyY2VXSyA9IHRvV0soc291cmNlKTsK
LQotICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTdHlsZVNoZWV0KEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc291cmNlV0suZ2V0KCksCisgICAgV0tCdW5kbGVQYWdl
QWRkVXNlclN0eWxlU2hlZXQocGFnZSgpLCB0b1dLKHNvdXJjZSkuZ2V0KCksCiAgICAgICAgIChh
bGxGcmFtZXMgPyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6IGtXS0luamVjdEluVG9wRnJhbWVPbmx5
KSk7CiB9CiAKQEAgLTI1MywyOSArMjk4LDE3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6a2VlcFdlYkhp
c3RvcnkoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUs
IEpTU3RyaW5nUmVmIHNob3dVSSwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7Ci0gICAgV0tCdW5kbGVQ
YWdlRXhlY3V0ZUVkaXRpbmdDb21tYW5kKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyh2YWx1ZSkuZ2V0KCkpOworICAgIFdL
QnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChwYWdlKCksIHRvV0sobmFtZSkuZ2V0KCks
IHRvV0sodmFsdWUpLmdldCgpKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFdLRmluZE9wdGlvbnM+
IGZpbmRPcHRpb25zRnJvbUFycmF5KEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHsK
LSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsK
LSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICBh
dXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5ID0gSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHQsIG9wdGlvbnNBcnJheUFzVmFsdWUsIDApOwotICAgIEpTVmFsdWVSZWYg
bGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwg
bGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihj
b250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KKyAg
ICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CisgICAgYXV0byBvcHRpb25zQXJyYXkg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3B0aW9uc0FycmF5QXNWYWx1ZSwgbnVsbHB0cik7
CisgICAgYXV0byBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBvcHRpb25zQXJyYXkpOwog
ICAgIFdLRmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRp
Y19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1Zh
bHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9u
c0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFs
dWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBvcHRpb25OYW1lID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwotCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gb3B0aW9u
TmFtZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCkpOwogICAgICAgICBpZiAoSlNTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQ2FzZUluc2Vuc2l0aXZlIikpCiAg
ICAgICAgICAgICBvcHRpb25zIHw9IGtXS0ZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlOwogICAg
ICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0
KCksICJBdFdvcmRTdGFydHMiKSkKQEAgLTI5Niw3ICszMjksNyBAQCBzdGF0aWMgT3B0aW9uYWw8
V0tGaW5kT3B0aW9ucz4gZmluZE9wdGlvbnNGcm9tQXJyYXkoSlNWYWx1ZVJlZiBvcHRpb25zQXJy
YXlBc1ZhbAogYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTU3RyaW5nUmVmIHRhcmdldCwg
SlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogewogICAgIGlmIChhdXRvIG9wdGlvbnMg
PSBmaW5kT3B0aW9uc0Zyb21BcnJheShvcHRpb25zQXJyYXlBc1ZhbHVlKSkKLSAgICAgICAgcmV0
dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKKyAgICAgICAgcmV0
dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcocGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpv
cHRpb25zKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTMwNCwyOCArMzM3LDIzIEBAIGJv
b2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU1N0cmluZ1JlZiB0YXJnZXQsIEpTVmFsdWVSZWYg
b3B0aW9uc0FycmF5QXNWYWx1ZSkKIHZvaWQgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZ01hdGNoZXNJ
blBhZ2UoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFzVmFsdWUp
CiB7CiAgICAgaWYgKGF1dG8gb3B0aW9ucyA9IGZpbmRPcHRpb25zRnJvbUFycmF5KG9wdGlvbnNB
cnJheUFzVmFsdWUpKQotICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmluZFN0cmluZ01hdGNo
ZXMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRhcmdl
dCkuZ2V0KCksICpvcHRpb25zKTsKKyAgICAgICAgV0tCdW5kbGVQYWdlRmluZFN0cmluZ01hdGNo
ZXMocGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpyZXBsYWNlRmluZE1hdGNoZXNBdEluZGljZXMoSlNWYWx1ZVJlZiBtYXRjaEluZGlj
ZXNBc1ZhbHVlLCBKU1N0cmluZ1JlZiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0aW9uT25s
eSkKIHsKICAgICBhdXRvJiBidW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0g
ICAgYXV0byBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoYnVuZGxlLnBhZ2Uo
KS0+cGFnZSgpKTsKLSAgICBhdXRvIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlw
dENvbnRleHQobWFpbkZyYW1lKTsKLSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7CisgICAgYXV0byBjb250
ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogICAgIGF1dG8gbWF0Y2hJbmRpY2VzT2JqZWN0ID0gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIG1hdGNoSW5kaWNlc0FzVmFsdWUsIDApOwotICAgIGF1dG8g
bGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG1hdGNoSW5kaWNlc09i
amVjdCwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJc051
bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGxl
bmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG1hdGNoSW5kaWNlc09iamVjdCk7CiAKICAgICBh
dXRvIGluZGljZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIGF1dG8g
bGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVu
Z3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBtYXRjaEluZGljZXNPYmplY3QsIGksIDApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0
eUF0SW5kZXgoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0LCBpLCBudWxscHRyKTsKICAgICAg
ICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgYXV0byBpbmRleCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoc3Rk
Ojpyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKSkpOworICAg
ICAgICBhdXRvIGluZGV4ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgdmFsdWUsIG51bGxwdHIpKSk7CiAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKGlu
ZGljZXMuZ2V0KCksIGluZGV4LmdldCgpKTsKICAgICB9CiAgICAgV0tCdW5kbGVQYWdlUmVwbGFj
ZVN0cmluZ01hdGNoZXMoYnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBpbmRpY2VzLmdldCgpLCB0b1dL
KHJlcGxhY2VtZW50VGV4dCkuZ2V0KCksIHNlbGVjdGlvbk9ubHkpOwpAQCAtMzM0LDExICszNjIs
NyBAQCB2b2lkIFRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0SW5kaWNlcyhKU1ZhbHVl
UmVmIG1hdGNoSW5kaWNlc0FzVmFsdWUsIEpTUwogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERh
dGFiYXNlcygpCiB7CiAgICAgV0tCdW5kbGVDbGVhckFsbERhdGFiYXNlcyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGVs
ZXRlQWxsSW5kZXhlZERhdGFiYXNlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodHJ1ZSkpOwotCi0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJEZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzIiwg
dHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSh1aW50NjRfdCBx
dW90YSkKQEAgLTM0OCwyOSArMzcyLDI3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VR
dW90YSh1aW50NjRfdCBxdW90YSkKIAogdm9pZCBUZXN0UnVubmVyOjpzeW5jTG9jYWxTdG9yYWdl
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTeW5jTG9jYWxTdG9yYWdlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZSh0cnVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTeW5j
TG9jYWxTdG9yYWdlIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBs
aWNhdGlvbkNhY2hlcygpCiB7Ci0gICAgV0tCdW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5k
bGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlKHBhZ2UoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsK
LSAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCkpOwor
ICAgIFdLQnVuZGxlUGFnZUNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihwYWdlKCksIHRv
V0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhp
bXVtU2l6ZSh1aW50NjRfdCBzaXplKQogewotICAgIFdLQnVuZGxlUGFnZVNldEFwcENhY2hlTWF4
aW11bVNpemUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBzaXpl
KTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRBcHBDYWNoZU1heGltdW1TaXplKHBhZ2UoKSwgc2l6ZSk7
CiB9CiAKIGxvbmcgbG9uZyBUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9y
T3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVQYWdlR2V0
QXBwQ2FjaGVVc2FnZUZvck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUdl
dEFwcENhY2hlVXNhZ2VGb3JPcmlnaW4ocGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OmRpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVv
dGEoKQpAQCAtMzgxLDE1OCArNDAzLDEwOCBAQCB2b2lkIFRlc3RSdW5uZXI6OmRpc2FsbG93SW5j
cmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKQogc3RhdGljIGlubGluZSBKU1ZhbHVlUmVm
IHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29udGV4dCwgV0tBcnJheVJlZiBzdHJpbmdz
KQogewogICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHN0cmluZ3MpOwot
Ci0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQs
IDAsIDAsIDApOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIGFycmF5UmVzdWx0LCAwKTsKKyAgICBhdXRvIGFycmF5ID0gSlNPYmplY3RNYWtlQXJy
YXkoY29udGV4dCwgMCwgMCwgbnVsbHB0cik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN0cmluZ1JlZiA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoc3RyaW5ncywgaSkpOwotICAgICAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nSlMgPSB0b0pTKHN0cmluZ1JlZik7Ci0g
ICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2JqLCBpLCBK
U1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdKUy5nZXQoKSksIDApOworICAgICAgICBh
dXRvIHN0cmluZ1JlZiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0
SW5kZXgoc3RyaW5ncywgaSkpOworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChj
b250ZXh0LCBhcnJheSwgaSwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgdG9KUyhzdHJpbmdS
ZWYpLmdldCgpKSwgbnVsbHB0cik7CiAgICAgfQotCi0gICAgcmV0dXJuIGFycmF5UmVzdWx0Owor
ICAgIHJldHVybiBhcnJheTsKIH0KIAogSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0
aEFwcGxpY2F0aW9uQ2FjaGUoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tBcnJheVJlZj4gb3JpZ2lucyA9IGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weU9yaWdpbnNXaXRo
QXBwbGljYXRpb25DYWNoZShwYWdlKSk7Ci0KLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKLSAgICBKU0NvbnRleHRSZWYgY29u
dGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotCi0g
ICAgcmV0dXJuIHN0cmluZ0FycmF5VG9KUyhjb250ZXh0LCBvcmlnaW5zLmdldCgpKTsKKyAgICBy
ZXR1cm4gc3RyaW5nQXJyYXlUb0pTKG1haW5KU0NvbnRleHQoKSwgYWRvcHRXSyhXS0J1bmRsZVBh
Z2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKHBhZ2UoKSkpLmdldCgpKTsKIH0KIAog
Ym9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCiB7Ci0g
ICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSk7CisgICAg
cmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKHBhZ2UoKSwgdG9XSyhu
YW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FuT3BlbldpbmRvd3MoKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDYW5PcGVuV2luZG93cyIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUodHJ1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldENh
bk9wZW5XaW5kb3dzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0WFNTQXVkaXRv
ckVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBr
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRYU1NBdWRp
dG9yRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0
UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAo
KSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2Vi
S2l0WFNTQXVkaXRvckVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRNZWRpYURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
V2ViS2l0TWVkaWFEZXZpY2VzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFBy
ZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1
bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRl
UHJlZmVyZW5jZSgiV2ViS2l0TWVkaWFEZXZpY2VzRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFdlYlJUQ01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZChib29sIGVu
YWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdlYlJUQ01ETlNJQ0VDYW5kaWRhdGVz
RW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVu
bmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwg
a2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0
V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0Q3VzdG9tVXNlckFnZW50KEpTU3RyaW5nUmVmIHVzZXJBZ2VudCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDdXN0b21Vc2VyQWdlbnQiKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHRvV0sodXNlckFnZW50KS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0Q3VzdG9tVXNlckFnZW50IiwgdG9XSyh1
c2VyQWdlbnQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXZWJBUElTdGF0aXN0
aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5j
ZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBh
Z2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJl
bmNlKCJXZWJLaXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiKSk7
Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7
Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3Rl
ZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwg
ZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2Vi
R0wyRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdlYkdM
MkVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1
bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCks
IGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktp
dFdlYkdMMkVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXcml0
YWJsZVN0cmVhbUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJX
ZWJLaXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJv
b2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0
ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVy
cmlkZVByZWZlcmVuY2UoIldlYktpdFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxlZCIsIGVuYWJsZWQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQoYm9v
bCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRUcmFuc2Zvcm1TdHJlYW1BUElF
bmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5u
ZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBr
ZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRU
cmFuc2Zvcm1TdHJlYW1BUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIldlYktpdFJlYWRhYmxlQnl0ZVN0cmVhbUFQSUVuYWJsZWQiKSk7Ci0gICAg
YXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAg
V0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRs
ZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxl
ZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFJlYWRhYmxlQnl0ZVN0cmVh
bUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRFbmNyeXB0
ZWRNZWRpYUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJL
aXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQ
cmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRC
dW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlk
ZVByZWZlcmVuY2UoIldlYktpdEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBpY3R1cmVJblBpY3R1cmVBUElFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0UGljdHVyZUluUGljdHVyZUFQSUVu
YWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5l
cihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtl
eS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFBp
Y3R1cmVJblBpY3R1cmVBUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJXZWJLaXRHZW5lcmljQ3VlQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRl
Qm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmpl
Y3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92
ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0R2VuZXJpY0N1ZUFQSUVuYWJsZWQiLCBlbmFibGVkKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sIGVu
YWJsZWQpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUo
ZW5hYmxlZCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShlbmFi
bGVkKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGUiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRTd2Fw
VG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sIHNob3VsZFN3YXApCiB7Ci0g
ICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9u
T25OZXh0TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkU3dhcCkpOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVkQnVuZGxlLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRTaG91bGRTd2FwVG9FcGhl
bWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIsIHNob3VsZFN3YXApOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihi
b29sIHNob3VsZFN3YXApCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRT
d2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHNob3Vs
ZFN3YXApKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgi
U2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIiwgc2hvdWxkU3dh
cCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmls
ZVVSTHMoYm9vbCBlbmFibGVkKQpAQCAtNTU1LDkgKzUyNyw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsoYm9vbCBuZWVkc1F1aXJrKQog
ICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGVuYWJsZWQpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFBsdWdpbnNFbmFibGVkIikpOwotICAgIGF1dG8mIGlu
amVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxl
T3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxl
KCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAg
IFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRQbHVnaW5zRW5hYmxlZCIsIGVuYWJsZWQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQo
Ym9vbCBlbmFibGVkKQpAQCAtNTkxLDggKzU2MSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3Zl
T3JpZ2luQWNjZXNzQWxsb3dMaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0
CiBib29sIFRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJbmRleCkKIHsKICAg
ICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAg
ICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShp
bmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlSXNQYWdl
Qm94VmlzaWJsZShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkZyYW1lLCBwYWdlSW5kZXgp
OworICAgIHJldHVybiBXS0J1bmRsZUlzUGFnZUJveFZpc2libGUoaW5qZWN0ZWRCdW5kbGUuYnVu
ZGxlKCksIG1haW5GcmFtZSgpLCBwYWdlSW5kZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVtZW50LCBK
U1N0cmluZ1JlZiB2YWx1ZSkKQEAgLTYwMCwxNiArNTY5LDE0IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQs
IEpTU3RyCiAgICAgaWYgKCFlbGVtZW50IHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgZWxl
bWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlTm9kZUhh
bmRsZVJlZj4gbm9kZUhhbmRsZSA9IGFkb3B0V0soV0tCdW5kbGVOb2RlSGFuZGxlQ3JlYXRlKGNv
bnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGVsZW1lbnQpKSk7Ci0gICAgV0tCdW5kbGVO
b2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNlcihub2RlSGFuZGxlLmdldCgp
LCB0b1dLKHZhbHVlKS5nZXQoKSk7CisgICAgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0
RWxlbWVudFZhbHVlRm9yVXNlcihhZG9wdFdLKFdLQnVuZGxlTm9kZUhhbmRsZUNyZWF0ZShjb250
ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihlbGVtZW50KSkpLmdldCgpLCB0b1dLKHZhbHVl
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXVkaW9SZXN1bHQoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZGF0YSkKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICAvLyBGSVhNRSAoMTIzMDU4KTog
VXNlIGEgSlNDIEFQSSB0byBnZXQgYnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBleHBvc2Vk
LgotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYXVkaW9EYXRhID0gYWRvcHRXSyhXS0J1bmRs
ZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBjb250
ZXh0LCBkYXRhKSk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0QXVkaW9SZXN1bHQoYXVkaW9EYXRh
LmdldCgpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5zZXRBdWRpb1Jlc3VsdChhZG9wdFdLKFdLQnVu
ZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNv
bnRleHQsIGRhdGEpKS5nZXQoKSk7CiAgICAgc2V0V2hhdFRvRHVtcChXaGF0VG9EdW1wOjpBdWRp
byk7CiAgICAgc2V0RHVtcFBpeGVscyhmYWxzZSk7CiB9CkBAIC02MjEsMzMgKzU4OCwzMCBAQCB1
bnNpZ25lZCBUZXN0UnVubmVyOjp3aW5kb3dDb3VudCgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xl
YXJCYWNrRm9yd2FyZExpc3QoKQogewotICAgIFdLQnVuZGxlQ2xlYXJIaXN0b3J5Rm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVu
ZGxlQ2xlYXJIaXN0b3J5Rm9yVGVzdGluZyhwYWdlKCkpOwogfQogCi0vLyBPYmplY3QgQ3JlYXRp
b24KLQotdm9pZCBUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3Zv
aWQgVGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsK
LSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJ0ZXN0UnVubmVyIiwgdGhp
cywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSwgZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0
LCAidGVzdFJ1bm5lciIsIHRoaXMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNob3dXZWJJbnNw
ZWN0b3IoKQogewotICAgIFdLQnVuZGxlSW5zcGVjdG9yU2hvdyhXS0J1bmRsZVBhZ2VHZXRJbnNw
ZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAg
V0tCdW5kbGVJbnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihwYWdlKCkpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYkluc3BlY3RvcigpCiB7Ci0gICAgV0tCdW5k
bGVJbnNwZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JDbG9z
ZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgpKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6ZXZhbHVhdGVJbldlYkluc3BlY3RvcihKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwotICAgIFdLQnVu
ZGxlSW5zcGVjdG9yRXZhbHVhdGVTY3JpcHRGb3JUZXN0KFdLQnVuZGxlUGFnZUdldEluc3BlY3Rv
cihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpLCBzY3JpcHRXSy5n
ZXQoKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlwdEZvclRlc3QoV0tCdW5k
bGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSksIHRvV0soc2NyaXB0KS5nZXQoKSk7CiB9CiAKLXR5
cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdv
cmxkUmVmPiA+IFdvcmxkTWFwOwordXNpbmcgV29ybGRNYXAgPSBXVEY6Okhhc2hNYXA8dW5zaWdu
ZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+PjsKIHN0YXRpYyBXb3JsZE1h
cCYgd29ybGRNYXAoKQogewogICAgIHN0YXRpYyBXb3JsZE1hcCYgbWFwID0gKm5ldyBXb3JsZE1h
cDsKQEAgLTY1NiwxMiArNjIwLDExIEBAIHN0YXRpYyBXb3JsZE1hcCYgd29ybGRNYXAoKQogCiB1
bnNpZ25lZCBUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQoV0tCdW5kbGVTY3JpcHRXb3JsZFJl
ZiB3b3JsZCkKIHsKLSAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29ybGRNYXAo
KS5lbmQoKTsKLSAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdvcmxkTWFw
KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUgPT0g
d29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyB0aGUgYW50aS1wYXR0ZXJuIG9mIGl0ZXJhdGluZyBhbiBlbnRpcmUgbWFwLiBUeXBpY2FsbHkg
d2UgdXNlIGEgcGFpciBvZiBtYXBzIG9yIGp1c3QgYSB2ZWN0b3IgaW4gYSBjYXNlIGxpa2UgdGhp
cy4KKyAgICBmb3IgKGF1dG8mIG1hcEVudHJ5IDogd29ybGRNYXAoKSkgeworICAgICAgICBpZiAo
bWFwRW50cnkudmFsdWUgPT0gd29ybGQpCisgICAgICAgICAgICByZXR1cm4gbWFwRW50cnkua2V5
OwogICAgIH0KLQogICAgIHJldHVybiAwOwogfQogCkBAIC02ODEsNyArNjQ0LDcgQEAgdm9pZCBU
ZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChKU0NvbnRleHRSZWYgY29u
dGV4dCwgdW5zaWduZWQgd28KIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRs
ZUZyYW1lRm9ySmF2YVNjcmlwdENvbnRleHQoY29udGV4dCk7CiAgICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICAgICAgZnJhbWUgPSBtYWluRnJhbWUoKTsK
IAogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQuZ2V0KCkpOwogICAgIEpTRXZhbHVh
dGVTY3JpcHQoanNDb250ZXh0LCBzY3JpcHQsIDAsIDAsIDAsIDApOyAKQEAgLTY5Niw4ICs2NTks
NyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFBPU0lYTG9jYWxlKEpTU3RyaW5nUmVmIGxvY2FsZSkK
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlv
bikKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAg
IHJldHVybiBXS0J1bmRsZUZyYW1lU2V0VGV4dERpcmVjdGlvbihtYWluRnJhbWUsIHRvV0soZGly
ZWN0aW9uKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVTZXRUZXh0RGlyZWN0aW9u
KG1haW5GcmFtZSgpLCB0b1dLKGRpcmVjdGlvbikuZ2V0KCkpOwogfQogICAgIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChib29s
IHNob3VsZFN0YXlPblBhZ2UpCkBAIC03MDcsMTcgKzY2OSwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6
OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGJvb2wgc2hvdWxk
U3RheU9uUAogCiBib29sIFRlc3RSdW5uZXI6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTmF2aWdhdGlvbigpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpOwotICAg
IFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0g
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9y
UHJvdmlzaW9uYWxOYXZpZ2F0aW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJEaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlz
aW9uYWxOYXZpZ2F0aW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJDbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFs
TmF2aWdhdGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5KEpT
U3RyaW5nUmVmIHN0YXRlKQpAQCAtNzMwLDcgKzY4Nyw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cmVz
ZXRQYWdlVmlzaWJpbGl0eSgpCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldEhp
ZGRlbihmYWxzZSk7CiB9CiAKLXR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBKU1ZhbHVl
UmVmPiBDYWxsYmFja01hcDsKK3VzaW5nIENhbGxiYWNrTWFwID0gV1RGOjpIYXNoTWFwPHVuc2ln
bmVkLCBKU09iamVjdFJlZj47CiBzdGF0aWMgQ2FsbGJhY2tNYXAmIGNhbGxiYWNrTWFwKCkKIHsK
ICAgICBzdGF0aWMgQ2FsbGJhY2tNYXAmIG1hcCA9ICpuZXcgQ2FsbGJhY2tNYXA7CkBAIC03ODMs
MzggKzc0MCwzMiBAQCBzdGF0aWMgdm9pZCBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayh1bnNpZ25l
ZCBpbmRleCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBpZiAoIWNhbGxiYWNrKQogICAg
ICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CisgICAg
aWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2FsbGJhY2spKQorICAgICAgICByZXR1cm47
CiAgICAgaWYgKGNhbGxiYWNrTWFwKCkuY29udGFpbnMoaW5kZXgpKSB7CiAgICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkZBSUw6IFRyaWVk
IHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBjYWxsYmFjayBmb3IgdGhlIHNhbWUgZXZl
bnQgKGlkICIsIGluZGV4LCAiKVxuXG4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAg
ICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4
dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFt
ZSk7CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIGNhbGxiYWNr
TWFwKCkuYWRkKGluZGV4LCBjYWxsYmFjayk7CisgICAgY2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgs
IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGNhbGxiYWNrKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNh
bGxUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIHNpemVfdCBhcmd1bWVudENvdW50
ID0gMCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSA9IG51bGxwdHIpCiB7Ci0gICAgaWYg
KCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkKKyAgICBhdXRvIGNhbGxiYWNrID0gY2Fs
bGJhY2tNYXAoKS50YWtlKGluZGV4KTsKKyAgICBpZiAoIWNhbGxiYWNrKQogICAgICAgICByZXR1
cm47Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBK
U0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dCht
YWluRnJhbWUpOwotICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIGNhbGxiYWNrTWFwKCkudGFrZShpbmRleCksIDApOworICAgIGF1dG8gY29udGV4dCA9
IG1haW5KU0NvbnRleHQoKTsKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNh
bGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGFyZ3VtZW50Q291bnQs
IGFyZ3VtZW50cywgMCk7CiAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJUZXN0UnVubmVyQ2FsbGJhY2tzKCkKIHsKLSAg
ICBmb3IgKGF1dG8mIGl0ZXIgOiBjYWxsYmFja01hcCgpKSB7Ci0gICAgICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgICAgIEpTQ29udGV4dFJlZiBjb250
ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAg
ICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGl0ZXIu
dmFsdWUsIDApOwotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsK
LSAgICB9Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CisgICAgZm9yIChh
dXRvJiB2YWx1ZSA6IGNhbGxiYWNrTWFwKCkudmFsdWVzKCkpCisgICAgICAgIEpTVmFsdWVVbnBy
b3RlY3QoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlLCBudWxscHRyKSk7
CiAgICAgY2FsbGJhY2tNYXAoKS5jbGVhcigpOwogfQogCkBAIC04OTQsMjAgKzg0NSwxMiBAQCB2
b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJlbmNl
LCBKU1N0cmluZ1JlZiB2YWx1ZSkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRD
b29raWVzKGJvb2wgYWNjZXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFsd2F5
c0FjY2VwdENvb2tpZXMiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWNjZXB0KSk7Ci0KLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldEFsd2F5c0FjY2VwdENvb2tpZXMiLCBhY2NlcHQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29va2llcyhi
b29sIGFjY2VwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRPbmx5QWNjZXB0Rmly
c3RQYXJ0eUNvb2tpZXMiKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGFjY2VwdCkpOwotICAgIAotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0T25seUFjY2VwdEZpcnN0UGFydHlD
b29raWVzIiwgYWNjZXB0KTsKIH0KIAogZG91YmxlIFRlc3RSdW5uZXI6OnByZWNpc2VUaW1lKCkK
QEAgLTkyNCwxNSArODY3LDE1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRF
bmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGVu
YWJsZWQ7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW1wdHlVcmwgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7Ci0gICAgV0tTdHJpbmdSZWYgbG9j
YXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uLmdldCgpIDogZW1wdHlV
cmwuZ2V0KCk7CisgICAgYXV0byBlbXB0eVN0cmluZyA9IHRvV0soIiIpOworICAgIGF1dG8gbG9j
YXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uLmdldCgpIDogZW1wdHlT
dHJpbmcuZ2V0KCk7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7CiAgICAgV0tCdW5kbGVTZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGluamVj
dGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwgbG9jYXRpb24p
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJp
bmdSZWYgbG9jYXRpb24pCiB7Ci0gICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhsb2NhdGlvbikpOworICAgIG1fdXNlclN0eWxl
U2hlZXRMb2NhdGlvbiA9IHRvV0sobG9jYXRpb24pOwogCiAgICAgaWYgKG1fdXNlclN0eWxlU2hl
ZXRFbmFibGVkKQogICAgICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7CkBAIC05
NDYsOCArODg5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJs
ZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91
Z2hFbGVtZW50cyhib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVTZXRUYWJLZXlDeWNsZXNU
aHJvdWdoRWxlbWVudHMoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBh
Z2UoKS0+cGFnZSgpLCBlbmFibGVkKTsKKyAgICBXS0J1bmRsZVNldFRhYktleUN5Y2xlc1Rocm91
Z2hFbGVtZW50cyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHBhZ2UoKSwg
ZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKCkK
QEAgLTk3MywzNiArOTE1LDI4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFRlc3RSdW5uZXI6OmdyYW50
V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIGF1dG8m
IGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVu
ZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwg
aW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG9yaWdpbldLLmdldCgpLCB0cnVlKTsKKyAg
ICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSwgdHJ1ZSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNTdHJp
bmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9
IHRvV0sob3JpZ2luKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24o
aW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBv
cmlnaW5XSy5nZXQoKSwgZmFsc2UpOworICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVy
bWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHBhZ2UoKSwgdG9X
SyhvcmlnaW4pLmdldCgpLCBmYWxzZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxs
V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlUmVtb3ZlQWxsV2Vi
Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVk
QnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVJlbW92ZUFsbFdlYk5vdGlmaWNh
dGlvblBlcm1pc3Npb25zKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgcGFn
ZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNr
KEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFn
ZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0gV0tC
dW5kbGVHZXRXZWJOb3RpZmljYXRpb25JRChpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgY29udGV4
dCwgbm90aWZpY2F0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5wb3N0U2ltdWxhdGVXZWJOb3Rp
ZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7CisgICAgaW5qZWN0ZWRCdW5kbGUucG9zdFNp
bXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soV0tCdW5kbGVHZXRXZWJOb3RpZmljYXRpb25JRChp
bmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkpTQ29udGV4dCgpLCBub3RpZmljYXRpb24pKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBlbmFi
bGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgorICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgogICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oZW5hYmxlZCk7CiB9CiAK
QEAgLTEwMTEsMTAyICs5NDUsNTEgQEAgYm9vbCBUZXN0UnVubmVyOjppc0dlb2xvY2F0aW9uUHJv
dmlkZXJBY3RpdmUoKQogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNH
ZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBk
b3VibGUgYWNjdXJhY3ksIEpTVmFsdWVSZWYganNBbHRpdHVkZSwgSlNWYWx1ZVJlZiBqc0FsdGl0
dWRlQWNjdXJhY3ksIEpTVmFsdWVSZWYganNIZWFkaW5nLCBKU1ZhbHVlUmVmIGpzU3BlZWQsIEpT
VmFsdWVSZWYganNGbG9vckxldmVsKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1
cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVk
ZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3Bl
ZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVm
IG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdl
KCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0
SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLQotICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZSA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlz
VW5kZWZpbmVkKGNvbnRleHQsIGpzQWx0aXR1ZGUpKSB7Ci0gICAgICAgIHByb3ZpZGVzQWx0aXR1
ZGUgPSB0cnVlOwotICAgICAgICBhbHRpdHVkZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBq
c0FsdGl0dWRlLCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5ID0gMC47Ci0gICAgaWYgKCFK
U1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNBbHRpdHVkZUFjY3VyYWN5KSkgewotICAgICAg
ICBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kgPSB0cnVlOwotICAgICAgICBhbHRpdHVkZUFjY3Vy
YWN5ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzQWx0aXR1ZGVBY2N1cmFjeSwgMCk7Ci0g
ICAgfQotCi0gICAgYm9vbCBwcm92aWRlc0hlYWRpbmcgPSBmYWxzZTsKLSAgICBkb3VibGUgaGVh
ZGluZyA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzSGVhZGlu
ZykpIHsKLSAgICAgICAgcHJvdmlkZXNIZWFkaW5nID0gdHJ1ZTsKLSAgICAgICAgaGVhZGluZyA9
IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc0hlYWRpbmcsIDApOwotICAgIH0KLQotICAgIGJv
b2wgcHJvdmlkZXNTcGVlZCA9IGZhbHNlOwotICAgIGRvdWJsZSBzcGVlZCA9IDAuOwotICAgIGlm
ICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzU3BlZWQpKSB7Ci0gICAgICAgIHByb3Zp
ZGVzU3BlZWQgPSB0cnVlOwotICAgICAgICBzcGVlZCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBqc1NwZWVkLCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCA9IGZh
bHNlOwotICAgIGRvdWJsZSBmbG9vckxldmVsID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRl
ZmluZWQoY29udGV4dCwganNGbG9vckxldmVsKSkgewotICAgICAgICBwcm92aWRlc0Zsb29yTGV2
ZWwgPSB0cnVlOwotICAgICAgICBmbG9vckxldmVsID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IGpzRmxvb3JMZXZlbCwgMCk7Ci0gICAgfQotCi0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVz
QWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNj
dXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHBy
b3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFj
Y3VyYWN5LCBhbHRpdHVkZSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQsIGZsb29y
TGV2ZWwpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
VW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdlKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlV0sgPSB0b1dLKG1lc3NhZ2UpOwotICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJy
b3IobWVzc2FnZVdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKHRvV0sobWVzc2FnZSkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcm1pc3Npb24oYm9vbCBl
bmFibGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgogICAgIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGVuYWJsZWQpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbigpCiB7Ci0gICAgLy8g
RklYTUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbigpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzRG9p
bmdNZWRpYUNhcHR1cmUoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzRG9p
bmdNZWRpYUNhcHR1cmUiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShh
ZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAg
ICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc0Rv
aW5nTWVkaWFDYXB0dXJlIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlck1lZGlhUGVy
c2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4oYm9vbCBwZXJtaXNzaW9uLCBKU1N0cmluZ1JlZiBv
cmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9XSyhwYXJlbnRPcmlnaW4pOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9y
aWdpbihwZXJtaXNzaW9uLCBvcmlnaW5XSy5nZXQoKSwgcGFyZW50T3JpZ2luV0suZ2V0KCkpOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVy
bWlzc2lvbkZvck9yaWdpbihwZXJtaXNzaW9uLCB0b1dLKG9yaWdpbikuZ2V0KCksIHRvV0socGFy
ZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6OnVzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luLCBKU1N0cmlu
Z1JlZiBwYXJlbnRPcmlnaW4pIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBw
YXJlbnRPcmlnaW5XSyA9IHRvV0socGFyZW50T3JpZ2luKTsKLSAgICByZXR1cm4gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmln
aW4ob3JpZ2luV0suZ2V0KCksIHBhcmVudE9yaWdpbldLLmdldCgpKTsKKyAgICByZXR1cm4gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRG
b3JPcmlnaW4odG9XSyhvcmlnaW4pLmdldCgpLCB0b1dLKHBhcmVudE9yaWdpbikuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3Vu
dEZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdpbikK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9XSyhwYXJl
bnRPcmlnaW4pOwotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXNldFVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4ob3JpZ2luV0suZ2V0KCksIHBhcmVudE9y
aWdpbldLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucmVzZXRVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKHRvV0sob3JpZ2luKS5nZXQoKSwg
dG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpjYWxsU2hv
dWxkQ2xvc2VPbldlYlZpZXcoKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVDYWxsU2hvdWxkQ2xvc2VPbldl
YlZpZXcobWFpbkZyYW1lKTsKKyAgICByZXR1cm4gV0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlldyhtYWluRnJhbWUoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVCYWNr
TmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJCYWNrd2FyZCkKQEAgLTExMjIsMjAgKzEwMDUsMTcg
QEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHVuc2lnbmVkIGhvd0Zh
ckZvcndhcmQpCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpT
U3RyaW5nUmVmIHRhcmdldCwgYm9vbCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKQogewogICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdL
UmV0YWluUHRyPFdLVVJMUmVmPiBiYXNlVVJMV0sgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5
VVJMKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2Uo
KSkpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsV0sgPSBhZG9wdFdLKFdLVVJMQ3Jl
YXRlV2l0aEJhc2VVUkwoYmFzZVVSTFdLLmdldCgpLCB0b1dURlN0cmluZyh0b1dLKHVybCkpLnV0
ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nV0sg
PSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxXSy5nZXQoKSkpOwotCisgICAgYXV0byBiYXNl
VVJMV0sgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSgpKSk7CisgICAg
YXV0byB1cmxXSyA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMV0suZ2V0
KCksIHRvV1RGU3RyaW5nKHVybCkudXRmOCgpLmRhdGEoKSkpOworICAgIGF1dG8gdXJsU3RyaW5n
V0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxXSy5nZXQoKSkpOwogICAgIGluamVjdGVk
QnVuZGxlLnF1ZXVlTG9hZCh1cmxTdHJpbmdXSy5nZXQoKSwgdG9XSyh0YXJnZXQpLmdldCgpLCBz
aG91bGRPcGVuRXh0ZXJuYWxVUkxzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRI
VE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwsIEpTU3Ry
aW5nUmVmIHVucmVhY2hhYmxlVVJMKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBj
b250ZW50V0sgPSB0b1dLKGNvbnRlbnQpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBi
YXNlVVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJMKSA6IFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPigpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJsZVVSTFdLID0g
dW5yZWFjaGFibGVVUkwgPyB0b1dLKHVucmVhY2hhYmxlVVJMKSA6IFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPigpOwotCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9hZEhU
TUxTdHJpbmcoY29udGVudFdLLmdldCgpLCBiYXNlVVJMV0suZ2V0KCksIHVucmVhY2hhYmxlVVJM
V0suZ2V0KCkpOworICAgIGF1dG8gYmFzZVVSTFdLID0gYmFzZVVSTCA/IHRvV0soYmFzZVVSTCkg
OiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKKyAgICBhdXRvIHVucmVhY2hhYmxlVVJMV0sg
PSB1bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5yZWFjaGFibGVVUkwpIDogV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+KCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9hZEhU
TUxTdHJpbmcodG9XSyhjb250ZW50KS5nZXQoKSwgYmFzZVVSTFdLLmdldCgpLCB1bnJlYWNoYWJs
ZVVSTFdLLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZCgpCkBAIC0x
MTQ1LDE2MyArMTAyNSwxMTkgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZCgpCiAKIHZv
aWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9hZGluZ1NjcmlwdChzY3JpcHRX
Sy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9hZGluZ1Nj
cmlwdCh0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTm9u
TG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwotICAgIEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQoc2NyaXB0V0suZ2V0KCkpOworICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQodG9XSyhzY3Jp
cHQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRSZWplY3RzUHJvdGVjdGlvblNw
YWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoYm9vbCB2YWx1ZSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29u
dGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVl
Rm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwgdmFsdWUpOwogfQogICAgIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2wgaGFuZGxlc0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRI
YW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9v
bGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYW5kbGVzQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VzKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0SGFuZGxlc0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWlu
c3RQcm90ZWN0aW9uU3BhY2UoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZExvZ0NhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MoYm9vbCB2YWx1ZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGRMb2dEb3du
bG9hZENhbGxiYWNrcyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRoZW50
aWNhdGlvblVzZXJuYW1lKEpTU3RyaW5nUmVmIHVzZXJuYW1lKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyh1c2VybmFtZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEF1dGhlbnRpY2F0aW9uVXNl
cm5hbWUiLCB0b1dLKHVzZXJuYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
QXV0aGVudGljYXRpb25QYXNzd29yZChKU1N0cmluZ1JlZiBwYXNzd29yZCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcocGFzc3dvcmQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRBdXRoZW50aWNh
dGlvblBhc3N3b3JkIiwgdG9XSyhwYXNzd29yZCkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5u
ZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQiKSk7Ci0gICAgV0tUeXBlUmVmIHJl
dHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVy
biBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0
dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuKCJTZWN1cmVFdmVudElucHV0SXNFbmFibGVkIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wgc2hvdWxkQmxvY2spCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QmxvY2tBbGxQbHVnaW5zIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShz
aG91bGRCbG9jaykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEJsb2NrQWxsUGx1Z2lucyIsIHNo
b3VsZEJsb2NrKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2Rl
KEpTU3RyaW5nUmVmIG1vZGUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0UGx1Z2lu
U3VwcG9ydGVkTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKG1vZGUpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIiwgdG9XSyhtb2RlKS5nZXQoKSk7CiB9
CiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6ZmFpbE5leHROZXdDb2RlQmxvY2soKQogewotICAg
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1l
KTsKLSAgICByZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0NvZGVCbG9jayhjb250ZXh0KTsKKyAgICBy
ZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0NvZGVCbG9jayhtYWluSlNDb250ZXh0KCkpOwogfQogCi1K
U1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiB0aGVG
dW5jdGlvbikKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdDb21waWxlcyhKU1Zh
bHVlUmVmIGZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpudW1iZXJPZkRGR0Nv
bXBpbGVzKGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4gSlNDOjpudW1iZXJPZkRG
R0NvbXBpbGVzKG1haW5KU0NvbnRleHQoKSwgZnVuY3Rpb24pOwogfQogCi1KU1ZhbHVlUmVmIFRl
c3RSdW5uZXI6Om5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbikKK0pT
VmFsdWVSZWYgVGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlvbihKU1ZhbHVlUmVmIGZ1bmN0
aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0g
ICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpzZXROZXZlcklubGluZShjb250ZXh0LCB0
aGVGdW5jdGlvbik7CisgICAgcmV0dXJuIEpTQzo6c2V0TmV2ZXJJbmxpbmUobWFpbkpTQ29udGV4
dCgpLCBmdW5jdGlvbik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGVjaWRlTmF2
aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoYm9vbCB2YWx1ZSkKIHsKICAgICBtX3Nob3VsZERlY2lk
ZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5ID0gdmFsdWU7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkRGVjaWRlTmF2aWdh
dGlvblBvbGljeUFmdGVyRGVsYXkiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KGJvb2wgdmFsdWUpCiB7CiAgICAg
bV9zaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkgPSB2YWx1ZTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXki
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkRGVj
aWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5IiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE5hdmlnYXRpb25HZXN0dXJlc0Vu
YWJsZWQiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0SWdub3Jlc1ZpZXdwb3J0
U2NhbGVMaW1pdHMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRJ
Z25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5S
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIsIHZhbHVlKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlw
ZXMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGREb3du
bG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzIiwg
dmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50
YXRpb25BbmRNb3Rpb25BY2Nlc3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZEFsbG93RGV2
aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyIpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyIpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiVGVybWluYXRlU2VydmljZVdv
cmtlcnMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0VXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2Uo
IlNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MiLCB2YWx1ZSk7CiB9CiAKIHN0YXRp
YyB1bnNpZ25lZCBuZXh0VUlTY3JpcHRDYWxsYmFja0lEKCkKQEAgLTEzMTQsOTcgKzExNTAsNDgg
QEAgdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQsIEpTVmFs
dWVSZWYgY2FsbGJhY2spCiB7CiAgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG5leHRVSVNjcmlw
dENhbGxiYWNrSUQoKTsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhjYWxsYmFja0lELCBj
YWxsYmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSdW5VSVByb2Nlc3NTY3JpcHQi
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiB0ZXN0RGljdGlv
bmFyeSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNj
cmlwdFZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1VJbnQ2NFJlZj4gY2FsbGJhY2tJRFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShjYWxsYmFja0lEKSk7Ci0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5
LmdldCgpLCBzY3JpcHRLZXkuZ2V0KCksIHNjcmlwdFZhbHVlLmdldCgpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBjYWxsYmFja0lES2V5LmdldCgpLCBj
YWxsYmFja0lEVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgdGVzdERpY3Rpb25hcnkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUnVuVUlQcm9j
ZXNzU2NyaXB0IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU2NyaXB0IiwgdG9X
SyhzY3JpcHQpIH0sCisgICAgICAgIHsgIkNhbGxiYWNrSUQiLCBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGNhbGxiYWNrSUQpKS5nZXQoKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNWYWx1
ZVJlZiBjYWxsYmFjaykKIHsKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbmV4dFVJU2NyaXB0
Q2FsbGJhY2tJRCgpOwogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKGNhbGxiYWNrSUQsIGNh
bGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJ1blVJUHJvY2Vzc1NjcmlwdElt
bWVkaWF0ZWx5IikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
dGVzdERpY3Rpb25hcnkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzY3JpcHRWYWx1ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
c2NyaXB0KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGNhbGxiYWNrSURWYWx1ZSA9IGFkb3B0V0soV0tV
SW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpOwotCi0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSh0ZXN0
RGljdGlvbmFyeS5nZXQoKSwgc2NyaXB0S2V5LmdldCgpLCBzY3JpcHRWYWx1ZS5nZXQoKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSh0ZXN0RGljdGlvbmFyeS5nZXQoKSwgY2FsbGJhY2tJREtl
eS5nZXQoKSwgY2FsbGJhY2tJRFZhbHVlLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIHRlc3REaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IlJ1blVJUHJvY2Vzc1NjcmlwdEltbWVkaWF0ZWx5IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAg
ICAgICAgeyAiU2NyaXB0IiwgdG9XSyhzY3JpcHQpIH0sCisgICAgICAgIHsgIkNhbGxiYWNrSUQi
LCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQpKS5nZXQoKSB9LAorICAgIH0pLmdl
dCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdENhbGxiYWNrKHVuc2lnbmVk
IGNhbGxiYWNrSUQsIEpTU3RyaW5nUmVmIHJlc3VsdCkKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVm
IG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0KLSAgICBKU1ZhbHVl
UmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcmVzdWx0KTsKKyAg
ICBKU1ZhbHVlUmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcobWFpbkpTQ29udGV4
dCgpLCByZXN1bHQpOwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soY2FsbGJhY2tJRCwgMSwg
JnJlc3VsdFZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd2VkTWVudUFjdGlv
bnMoSlNWYWx1ZVJlZiBhY3Rpb25zKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFs
bG93ZWRNZW51QWN0aW9ucyIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotCi0gICAgYXV0
byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAg
IGF1dG8gbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIGF1
dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUp
OwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0
KCk7CiAgICAgYXV0byBhY3Rpb25zQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYWN0
aW9ucywgbnVsbHB0cik7Ci0gICAgYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkoY29udGV4dCwgYWN0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxw
dHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0
R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFjdGlvbnNBcnJheSwgaSwgMCk7Ci0gICAgICAg
IGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGF1dG8gYWN0aW9uTmFtZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgdmFsdWUsIDApKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGFjdGlvbiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoYWN0aW9uTmFtZS5n
ZXQoKSkpOwotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWN0
aW9uLmdldCgpKTsKKyAgICBhdXRvIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIGFjdGlv
bnNBcnJheSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBh
Y3Rpb25zQXJyYXksIGksIG51bGxwdHIpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNz
YWdlQm9keS5nZXQoKSwgdG9XS1N0cmluZyhjb250ZXh0LCB2YWx1ZSkuZ2V0KCkpOwogICAgIH0K
LQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRBbGxvd2VkTWVudUFj
dGlvbnMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFs
bEN1c3RvbU1lbnVBY3Rpb24oSlNTdHJpbmdSZWYgbmFtZSwgYm9vbCBkaXNtaXNzZXNBdXRvbWF0
aWNhbGx5LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxi
YWNrKEN1c3RvbU1lbnVBY3Rpb25DYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJJbnN0YWxsQ3VzdG9tTWVudUFjdGlvbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1l
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibmFtZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZVZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyhuYW1lKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdl
Qm9keS5nZXQoKSwgbmFtZUtleS5nZXQoKSwgbmFtZVZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGlzbWlzc2VzQXV0b21hdGljYWxseSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlWYWx1
ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBkaXNtaXNzZXNBdXRvbWF0
aWNhbGx5S2V5LmdldCgpLCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5VmFsdWUuZ2V0KCkpOwotCi0g
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiSW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24iLCBjcmVhdGVXS0RpY3Rp
b25hcnkoeworICAgICAgICB7ICJuYW1lIiwgdG9XSyhuYW1lKSB9LAorICAgICAgICB7ICJkaXNt
aXNzZXNBdXRvbWF0aWNhbGx5IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZGlzbWlzc2VzQXV0
b21hdGljYWxseSkpLmdldCgpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6Omluc3RhbGxEaWRCZWdpblN3aXBlQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKQEAg
LTE0NDksNTggKzEyMzYsMzAgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlU3dpcGVT
bmFwc2hvdENhbGxiYWNrKCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhclN0YXRpc3RpY3NEYXRh
Rm9yRG9tYWluKEpTU3RyaW5nUmVmIGRvbWFpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
ZG9tYWluKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhclN0YXRp
c3RpY3NEYXRhRm9yRG9tYWluIiwgdG9XSyhkb21haW4pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0
UnVubmVyOjpkb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlKHVuc2lnbmVkIGRv
bWFpbklEKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvbWFpbklEIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZG9tYWluSUQpKSk7Ci0K
LSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3Rv
cjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5
c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAg
IH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvZXNTdGF0aXN0aWNzRG9tYWluSURFeGlz
dEluRGF0YWJhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1
ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0g
bnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dl
dFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJu
IFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1
cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4oIkRvZXNTdGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UiLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJEb21haW5JRCIsIGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoZG9tYWluSUQpKSB9CisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0U3RhdGlzdGljc0VuYWJsZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzRW5hYmxlZCIs
IHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NFcGhlbWVyYWwoKQog
ewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRh
dGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBl
SUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jv
b2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0
YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5p
bmdCb29sZWFuKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0Rl
YnVnTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7
Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1l
c3NhZ2UoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFjaygpCkBAIC0xNTExLDEw
ICsxMjcwLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldERlYnVnTW9k
ZUNhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlRm9yRGVidWdNb2RlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1ZhbHVlUmVmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVy
KTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkp
OwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RN
ZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiLCB0b1dL
KGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxE
aWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNhbGxiYWNrKCkKQEAgLTE1MjYsMjcg
KzEyODIsMTAgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4oSlNTdHJp
bmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzLCBKU1YKIHsKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzTGFzdFNlZW5DYWxsYmFja0lELCBjb21wbGV0aW9uSGFu
ZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyho
b3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKHNlY29uZHMpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBy
YXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFs
dWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICBy
YXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUo
cmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAg
Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1l
c3NhZ2UoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAg
ICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCB0
b1dLKHNlY29uZHMpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NDYWxsRGlkU2V0TGFzdFNlZW5DYWxsYmFjaygpCkBAIC0xNTU4LDQ5ICsxMjk3LDE4
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKEpTU3RyaW5n
UmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiB0CiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJh
Y2soU2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRs
ZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFt
ZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjEiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZURvbWFpbjEpKSk7Ci0gICAgCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9w
RnJhbWVEb21haW4yIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcodG9wRnJhbWVEb21haW4yKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGFzdFNlZW4iKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShsYXN0U2VlbikpKTsKLQotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhZFVzZXJJ
bnRlcmFjdGlvbiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShoYWRVc2VySW50ZXJhY3Rpb24pKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUobW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIklzR3JhbmRmYXRoZXJlZCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVyZWQpKSk7Ci0KLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ByZXZhbGVudCIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVu
dCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIklzVmVyeVByZXZhbGVudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShpc1ZlcnlQcmV2YWxlbnQpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEYXRhUmVjb3Jkc1JlbW92ZWQiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkYXRhUmVjb3Jkc1Jl
bW92ZWQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkp
OwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdL
ZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ld
LmdldCgpOwotICAgIH0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzTWVy
Z2VTdGF0aXN0aWMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1
ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzTWVyZ2VTdGF0
aXN0aWMiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0so
aG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lRG9tYWluMSIsIHRvV0sodG9wRnJhbWVE
b21haW4xKSB9LAorICAgICAgICB7ICJUb3BGcmFtZURvbWFpbjIiLCB0b1dLKHRvcEZyYW1lRG9t
YWluMikgfSwKKyAgICAgICAgeyAiTGFzdFNlZW4iLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGxh
c3RTZWVuKSkgfSwKKyAgICAgICAgeyAiSGFkVXNlckludGVyYWN0aW9uIiwgYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkgfSwKKyAgICAgICAgeyAiTW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUobW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzR3JhbmRmYXRoZXJlZCIsIGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkpIH0sCisgICAgICAgIHsgIklzUHJldmFsZW50
IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKSB9LAorICAgICAgICB7ICJJ
c1ZlcnlQcmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ZlcnlQcmV2YWxlbnQp
KSB9LAorICAgICAgICB7ICJEYXRhUmVjb3Jkc1JlbW92ZWQiLCBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0TWVyZ2VTdGF0aXN0aWNDYWxsYmFjaygpCkBA
IC0xNjEyLDMxICsxMzIwLDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0V4cGly
ZWRTdGF0aXN0aWMoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgaGFkVXNlCiB7CiAgICAgY2Fj
aGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWNDYWxsYmFj
a0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7
Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhZFVzZXJJbnRlcmFjdGlvbikp
KTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiKSkpOwotICAgIHZhbHVl
cy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29r
aWVEYXRhUmVtb3ZhbCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkpOwotICAgIAotICAgIFZlY3RvcjxX
S1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4g
cmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwot
ICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljIikpOwotICAgIFdL
UmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlv
bmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXpl
KCkpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMiLCBjcmVhdGVXS0RpY3Rp
b25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAg
IHsgIkhhZFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhZFVzZXJJ
bnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0
YVJlbW92YWwiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1NjaGVkdWxlZEZvckFsbEJ1dENv
b2tpZURhdGFSZW1vdmFsKSkgfSwKKyAgICAgICAgeyAiSXNQcmV2YWxlbnQiLCBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpIH0KKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRFeHBpcmVkU3RhdGlzdGljQ2FsbGJhY2so
KQpAQCAtMTY0OCwyOSArMTMzNywxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZQogewogICAg
IGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUNh
bGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZh
bHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVl
cy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSk7Ci0gICAgCi0gICAgVmVj
dG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVl
czsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6
ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAg
ICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGlj
dGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5z
aXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwor
ICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiLCBjcmVhdGVX
S0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisg
ICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAorICAg
IH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFBy
ZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQpAQCAtMTY4MiwyOSArMTM1MiwxMCBAQCB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYg
aG9zdE5hbWUsIGJvb2wgdgogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRp
c3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7
CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFt
ZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7
Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtl
eXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotICAgIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICBy
YXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVz
W2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0
aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlz
LmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICAKLSAgICBX
S0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgi
U2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7
CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVmFs
dWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VmVyeVByZXZhbGVudFJl
c291cmNlQ2FsbGJhY2soKQpAQCAtMTcxNCwxMzggKzEzNjUsNTEgQEAgdm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzQ2FsbERpZFNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZUNhbGxiYWNrKCkKICAg
ICAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIikpOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJkdW1wUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyIpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
cmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkp
LmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuKCJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIsIHRvV0soaG9zdE5hbWUpLmdl
dCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVz
b3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJu
RGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRW
YWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgp
KTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
KCJJc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCB0b1dLKGhvc3ROYW1lKS5nZXQo
KSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVz
b3VyY2VVbmRlcihKU1N0cmluZ1JlZiBzdWJyZXNvdXJjZUhvc3QsIEpTU3RyaW5nUmVmIHRvcEZy
YW1lSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3VicmVzb3Vy
Y2VIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcoc3VicmVzb3VyY2VIb3N0KSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdCIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1l
SG9zdCkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXpl
KCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAg
ICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZh
bHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNT
dGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVh
dGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0g
ICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0
dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAg
IHsgIlN1YnJlc291cmNlSG9zdCIsIHRvV0soc3VicmVzb3VyY2VIb3N0KSB9LAorICAgICAgICB7
ICJUb3BGcmFtZUhvc3QiLCB0b1dLKHRvcEZyYW1lSG9zdCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9
CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRl
cihKU1N0cmluZ1JlZiBzdWJGcmFtZUhvc3QsIEpTU3RyaW5nUmVmIHRvcEZyYW1lSG9zdCkKIHsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJGcmFtZUhvc3QiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJGcmFtZUhv
c3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0KSkpOwotICAgIAotICAgIFZl
Y3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlw
ZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdl
dCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVV
bmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRh
KCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRy
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlE
KHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29s
ZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEp
KS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5n
Qm9vbGVhbigiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciIsIGNyZWF0ZVdL
RGljdGlvbmFyeSh7CisgICAgICAgIHsgIlN1YkZyYW1lSG9zdCIsIHRvV0soc3ViRnJhbWVIb3N0
KSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3QiLCB0b1dLKHRvcEZyYW1lSG9zdCkgfSwKKyAg
ICB9KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJl
ZEFzUmVkaXJlY3RpbmdUbyhKU1N0cmluZ1JlZiBob3N0UmVkaXJlY3RlZEZyb20sIEpTU3RyaW5n
UmVmIGhvc3RSZWRpcmVjdGVkVG8pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwot
ICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhvc3RSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RSZWRpcmVjdGVkRnJvbSkpKTsKLSAgICAKLSAg
ICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0
UmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcoaG9zdFJlZGlyZWN0ZWRUbykpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJh
d1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAg
ICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
IikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwg
cmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0
dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5H
ZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdl
dCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvIiwgY3JlYXRlV0tEaWN0
aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdFJlZGlyZWN0ZWRGcm9tIiwgdG9XSyhob3N0UmVkaXJl
Y3RlZEZyb20pIH0sCisgICAgICAgIHsgIkhvc3RSZWRpcmVjdGVkVG8iLCB0b1dLKGhvc3RSZWRp
cmVjdGVkVG8pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wg
dmFsdWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVu
bmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbkNhbGxiYWNrSUQs
IGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAg
ICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOwotICAgIAotICAgIFZlY3RvcjxX
S1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0g
ICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFs
dWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICBy
YXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0
aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNp
emUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIiwg
Y3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1l
KSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxE
aWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb25DYWxsYmFjaygpCkBAIC0xODU1LDI2MSArMTQxOSw5
NSBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0SGFzSGFkVXNlckludGVy
YWN0aW9uQ2FsbGJhY2soKQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0hhZFVz
ZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJJc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0
cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJ
RChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9v
bGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRh
KSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmlu
Z0Jvb2xlYW4oIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpOwogfQogCiBib29s
IFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZShKU1N0cmluZ1JlZiBz
dWJIb3N0LCBKU1N0cmluZ1JlZiB0b3BIb3N0KQogewotICAgIAotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN1Ykhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJIb3N0KSkpOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEhvc3QiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BIb3N0
KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7
Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tl
eXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0u
Z2V0KCk7Ci0gICAgfQotCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZSIpKTsK
LSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5
cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBl
UmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7
Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzT25seUluRGF0YWJh
c2VPbmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU3ViSG9zdCIsIHRvV0so
c3ViSG9zdCkgfSwKKyAgICAgICAgeyAiVG9wSG9zdCIsIHRvV0sodG9wSG9zdCkgfSwKKyAgICB9
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVy
ZWQoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBl
UmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSk7Ci0g
ICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVS
ZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3
VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0u
Z2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCBy
YXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZSgiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAg
ICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVlIiwg
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZUlUUERhdGFiYXNlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0VXNlSVRQ
RGF0YWJhc2UiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzR3Jh
bmRmYXRoZXJlZChKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
aG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0
YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1
ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsK
KyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJ
c1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4o
SlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUpCiB7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7
Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1lSG9zdE5hbWUpKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tU
eXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlz
W2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCBy
YXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbiIs
IGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFt
ZSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVIb3N0TmFtZSIsIHRvV0sodG9wRnJhbWVIb3N0TmFt
ZSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNT
dHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3ROYW1lIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
dG9wRnJhbWVIb3N0TmFtZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tl
eXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMu
c2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1Zh
bHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbiIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tl
eXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0
aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luIiwgY3JlYXRlV0tEaWN0aW9uYXJ5
KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJU
b3BGcmFtZUhvc3ROYW1lIiwgdG9XSyh0b3BGcmFtZUhvc3ROYW1lKSB9LAorICAgIH0pLmdldCgp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdFRvKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiBob3N0TmFtZVJlZGly
ZWN0ZWRUbykKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
Zyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJl
Y3RlZFRvKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNp
emUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwot
ICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAg
ICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0g
dmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNy
ZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsK
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0VG8iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJI
b3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJlY3Rl
ZFRvIiwgdG9XSyhob3N0TmFtZVJlZGlyZWN0ZWRUbykgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAK
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dEZyb20oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3Rl
ZEZyb20pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
aG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMu
c2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0g
PSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25h
cnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgp
KSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzU3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAg
ICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVk
aXJlY3RlZEZyb20iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pIH0sCisgICAgfSkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0VG8oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJl
Y3RlZFRvKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVj
dGVkVG8pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6
ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0g
ICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2
YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8iKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRl
KHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RUbyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1l
IiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVkVG8iLCB0
b1dLKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oSlNTdHJp
bmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pCiB7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7
Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pKSk7
Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAg
ICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tl
eXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0u
Z2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3Rp
Y3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rp
b25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5
cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdEZyb20iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRv
V0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iLCB0b1dL
KGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uKEpT
U3RyaW5nUmVmIGZyb21Ib3N0LCBKU1N0cmluZ1JlZiB0b0hvc3QpCiB7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tU
eXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkZyb21Ib3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoZnJvbUhvc3QpKSk7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9Ib3N0
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcodG9Ib3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlz
LnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkp
OwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewot
ICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ld
ID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rp
b25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6
ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNz
Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7Cisg
ICAgICAgIHsgIkZyb21Ib3N0IiwgdG9XSyhmcm9tSG9zdCkgfSwKKyAgICAgICAgeyAiVG9Ib3N0
IiwgdG9XSyh0b0hvc3QpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24iLCBz
ZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlm
eURhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKQEAgLTIxNDcsMTIgKzE1
NDUsOSBAQCB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5
Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb24sIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0
aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCBtZWRpYW5EYXlzU2luY2VVc2Vy
SW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVk
IHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSwgdW5zaWduZWQgdG9wM01lZGlh
blN1YkZyYW1lV2l0aG91dFVJLCB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0
VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUksIHVuc2lnbmVk
IHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkpCiB7Ci0gICAgV0tCdW5kbGVG
cmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIAog
ICAgIFN0cmluZyBzdHJpbmcgPSBtYWtlU3RyaW5nKCJ7IFwibnVtYmVyT2ZQcmV2YWxlbnRSZXNv
dXJjZXNcIiA6ICIsIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCAiLCBcIm51bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbnVtYmVyT2ZQcmV2YWxl
bnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCAiLCBcIm51bWJlck9mUHJldmFsZW50UmVz
b3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNv
dXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAiLCBcInRvcFByZXZhbGVudFJlc291cmNlV2l0
aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblwiIDogIiwgdG9wUHJldmFs
ZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLCAi
LCBcIm1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVz
ZXJJbnRlcmFjdGlvblwiIDogIiwgbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFs
ZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uLCAiLCBcInRvcDNOdW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVSVwiIDogIiwgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0
aFVJLCAiLCBcInRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSVwiIDogIiwgdG9wM01lZGlhblN1
YkZyYW1lV2l0aG91dFVJLCAiLCBcInRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSVwiIDog
IiwgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJLCAiLCBcInRvcDNNZWRpYW5VbmlxdWVS
ZWRpcmVjdHNXaXRob3V0VUlcIiA6ICIsIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0
VUksICIsIFwidG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSVwiIDogIiwgdG9w
M01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSwgIiB9Iik7CiAgICAgCi0gICAgSlNW
YWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQsIGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZy51dGY4KCkuZGF0YSgpKSkuZ2V0
KCkpOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyht
YWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5nKHN0cmluZy51dGY4KCkuZGF0YSgpKS5nZXQo
KSk7CiAKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0
cnlDYWxsYmFja0lELCAxLCAmcmVzdWx0KTsKIH0KQEAgLTIxNjQsMTYgKzE1NTksMTQgQEAgYm9v
bCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzTm90aWZ5T2JzZXJ2ZXIoKQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVj
b3JkcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc1Byb2Nlc3NTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNz
VXBkYXRlQ29va2llQmxvY2tpbmcoSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0QmxvY2tDb29raWVzRm9y
SG9zdENhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyIpKTsKLSAgICBXS0J1bmRsZVBv
c3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NVcGRh
dGVDb29raWVCbG9ja2luZyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxs
RGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdENhbGxiYWNrKCkKQEAgLTIxODMsMTM1ICsxNTc2LDgz
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRCbG9ja0Nvb2tpZXNGb3JI
b3N0Q2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTdWJtaXRUZWxlbWV0
cnkoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTdWJtaXRUZWxlbWV0
cnkiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTdWJtaXRUZWxlbWV0
cnkiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZSgiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiLCB2YWx1
ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0lzUnVubmluZ1Rlc3QoYm9v
bCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU2V0SXNSdW5u
aW5nVGVzdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0IiwgdmFsdWUpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVt
b3ZhbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbCIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7Ci0gICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0
YVJlY29yZHNSZW1vdmFsIiwgc2Vjb25kcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcykKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lIikpOwotICAgIFdL
UmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVh
dGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3Rh
dGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSIsIHNlY29uZHMpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCBlbnRyaWVzKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1heFN0YXRpc3RpY3NFbnRyaWVzIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGVudHJpZXMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzIiwgZW50cmllcyk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQgZW50cmllcykKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQcnVuZUVudHJpZXNEb3duVG8iKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoZW50cmllcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0UHJ1
bmVFbnRyaWVzRG93blRvIiwgZW50cmllcyk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKEpTVmFsdWVSZWYgY2FsbGJh
Y2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZENsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9y
ZSIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1l
c3NhZ2UoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIik7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3Rv
cmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQgaG91cnMsIEpTVmFsdWVSZWYgY2FsbGJhY2sp
CiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZENsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1v
ZGlmaWVkU2luY2VIb3VycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3VycykpOwotICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3Rp
Y3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzIiwgaG91
cnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRl
RGF0YVJlbW92YWwoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJD
YWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsQ2FsbGJh
Y2tJRCwgY2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3Rp
Y3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzQ2xlYXJUaHJv
dWdoV2Vic2l0ZURhdGFSZW1vdmFsIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGlj
c0RlbGV0ZUNvb2tpZXNGb3JIb3N0KEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIGluY2x1ZGVI
dHRwT25seUNvb2tpZXMpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4g
a2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhob3N0TmFtZSkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiKSkpOwotICAgIHZhbHVl
cy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaW5jbHVkZUh0dHBPbmx5Q29va2llcykp
KTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBl
UmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJh
d1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0
KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdL
ZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlz
dGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAg
eyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJJbmNsdWRlSHR0cE9u
bHlDb29raWVzIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaW5jbHVkZUh0dHBPbmx5Q29va2ll
cykpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGlj
c0hhc0xvY2FsU3RvcmFnZShKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBhdXRvIG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0
aWNzSGFzTG9jYWxTdG9yYWdlIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVy
bkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNT
RVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VN
ZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlIiwgdG9X
Syhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3ND
YWNoZU1heEFnZUNhcChkb3VibGUgc2Vjb25kcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3Vi
bGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzQ2FjaGVNYXhB
Z2VDYXAiLCBzZWNvbmRzKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNTdGF0aXN0aWNzSXNv
bGF0ZWRTZXNzaW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIGF1dG8gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYXNTdGF0aXN0aWNz
SXNvbGF0ZWRTZXNzaW9uIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRh
dGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJU
KFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICBy
ZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlUmV0dXJuaW5nQm9vbGVhbigiSGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vzc2lvbiIsIHRvV0so
aG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hv
dWxkRG93bmdyYWRlUmVmZXJyZXIoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTIzMjAsOSArMTY2MSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c1Nob3VsZERvd25ncmFkZVJlZmVycmVyKGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNz
RGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxl
cik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFk
ZVJlZmVycmVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzU2hv
dWxkRG93bmdyYWRlUmVmZXJyZXIiLCB2YWx1ZSk7CiAgICAgbV9oYXNTZXREb3duZ3JhZGVSZWZl
cnJlckNhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjMzOCwxMSArMTY3NywxMCBAQCB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKGJvb2wg
dmFsdWUsIEpTVmFsdWVSZQogICAgICAgICByZXR1cm47CiAKICAgICBjYWNoZVRlc3RSdW5uZXJD
YWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0NhbGxi
YWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRT
dGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKTsKKyAgICBhdXRvIG1lc3Nh
Z2VOYW1lID0gIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzIjsKICAg
ICBpZiAob25seU9uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uKQotICAgICAgICBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3Rp
Y3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgICAgIG1lc3NhZ2VOYW1lID0gIlNldFN0YXRpc3RpY3NTaG91
bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iOwor
ICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2VOYW1lLCB2YWx1ZSk7CiAgICAgbV9oYXNTZXRCbG9ja1Ro
aXJkUGFydHlDb29raWVzQ2FsbGJhY2sgPSB0cnVlOwogfQogCkBAIC0yMzU4LDkgKzE2OTYsNyBA
QCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZShib29sIHZhbHVlLCBKU1ZhbAogICAgICAgICByZXR1cm47CiAKICAgICBjYWNoZVRl
c3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGVDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGUiLCB2YWx1ZSk7CiAgICAgbV9oYXNTZXRGaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZUNhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjM4MywxMCArMTcxOSw3
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxDbGVhclRocm91Z2hXZWJzaXRlRGF0
YVJlbW92YWxDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRUb1NhbWVT
aXRlU3RyaWN0Q29va2llcyhKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNWYWx1ZVJlZiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlk
U2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7
Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU3RhdGlzdGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIikpOwotICAgIGF1
dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RO
YW1lKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIsIHRvV0so
aG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERp
ZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzQ2FsbGJhY2soKQpAQCAtMjM5OCwyNyArMTczMSwx
MCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmlj
dENvb2tpZXNDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRGaXJzdFBh
cnR5SG9zdENOQU1FRG9tYWluKEpTU3RyaW5nUmVmIGZpcnN0UGFydHlVUkxTdHJpbmcsIEpTU3Ry
aW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRGaXJzdFBhcnR5SG9z
dENOQU1FRG9tYWluQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotCi0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZpcnN0UGFydHlVUkwiKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhmaXJzdFBhcnR5VVJMU3Ry
aW5nKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNOQU1FIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoY25hbWVVUkxTdHJpbmcpKSk7Ci0gICAgCi0gICAgVmVjdG9y
PFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVm
PiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdl
dCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0g
ICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIikpOwotICAgIGF1dG8g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwg
cmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJTdGF0aXN0aWNz
U2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAg
ICAgIHsgIkZpcnN0UGFydHlVUkwiLCB0b1dLKGZpcnN0UGFydHlVUkxTdHJpbmcpIH0sCisgICAg
ICAgIHsgIkNOQU1FIiwgdG9XSyhjbmFtZVVSTFN0cmluZykgfSwKKyAgICB9KS5nZXQoKSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRGaXJzdFBhcnR5SG9zdENO
QU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQyOSwxMCArMTc0NSw3IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NhbGxEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluQ2FsbGJhY2so
KQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluKEpT
U3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRUaGlyZFBhcnR5
Q05BTUVEb21haW5DYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBhdXRvIG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlz
dGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhjbmFtZVVSTFN0cmluZykpOwotICAg
IFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdl
KCJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIiwgdG9XSyhjbmFtZVVSTFN0cmlu
ZykuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VGhp
cmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQ0Myw5ICsxNzU2LDggQEAgdm9pZCBU
ZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbkNhbGxi
YWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUo
SlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxs
YmFjayhTdGF0aXN0aWNzRGlkUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUNhbGxiYWNrSUQsIGNvbXBs
ZXRpb25IYW5kbGVyKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNz
UmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIpOworCisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50
U3RhdGUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFJlc2V0VG9D
b25zaXN0ZW50U3RhdGVDYWxsYmFjaygpCkBAIC0yNDg2LDk1ICsxNzk4LDQ2IEBAIHZvaWQgVGVz
dFJ1bm5lcjo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZ0NhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5l
cjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAg
ICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNr
SUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRBbGxTdG9y
YWdlQWNjZXNzRW50cmllcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOwor
ICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzIik7CiB9CiAK
LXZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllc0Nh
bGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQorc3RhdGljIEpTVmFsdWVSZWYgbWFrZURv
bWFpbnNWYWx1ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKIHsKLSAgICBXS0J1bmRs
ZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250
ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAg
Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiWyIpOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVy
LmFwcGVuZCgnWycpOwogICAgIGJvb2wgZmlyc3REb21haW4gPSB0cnVlOwogICAgIGZvciAoYXV0
byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBpZiAoZmlyc3REb21haW4pCi0gICAgICAg
ICAgICBmaXJzdERvbWFpbiA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiXCIiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZG9tYWluKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOworICAgICAgICBidWls
ZGVyLmFwcGVuZChmaXJzdERvbWFpbiA/ICJcIiIgOiAiLCBcIiIsIGRvbWFpbiwgJyInKTsKKyAg
ICAgICAgZmlyc3REb21haW4gPSBmYWxzZTsKICAgICB9Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJdIik7Ci0gICAgCi0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFr
ZUZyb21KU09OU3RyaW5nKGNvbnRleHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCisg
ICAgYnVpbGRlci5hcHBlbmQoJ10nKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0
cmluZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5nKGJ1aWxkZXIudG9TdHJpbmcoKS51
dGY4KCkuZGF0YSgpKS5nZXQoKSk7Cit9Cit2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZWNlaXZl
QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayhWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykK
K3sKKyAgICBhdXRvIHJlc3VsdCA9IG1ha2VEb21haW5zVmFsdWUoZG9tYWlucyk7CiAgICAgY2Fs
bFRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrSUQsIDEs
ICZyZXN1bHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmxvYWRlZFN1YnJlc291cmNlRG9tYWlu
cyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKExv
YWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiKSk7Ci0gICAgV0tC
dW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJMb2FkZWRT
dWJyZXNvdXJjZURvbWFpbnMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVjZWl2
ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlu
cykKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAg
IEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0
KG1haW5GcmFtZSk7Ci0gICAgCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdbJyk7Ci0gICAgYm9vbCBpc0ZpcnN0RG9tYWluID0gdHJ1
ZTsKLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAgICAgaWYgKGlzRmly
c3REb21haW4pCi0gICAgICAgICAgICBpc0ZpcnN0RG9tYWluID0gZmFsc2U7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChkb21haW4pOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IlwiIik7Ci0gICAgfQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCddJyk7Ci0gICAgCi0gICAg
SlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQsIGFk
b3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCisgICAgYXV0byByZXN1bHQgPSBtYWtlRG9tYWlu
c1ZhbHVlKGRvbWFpbnMpOwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soTG9hZGVkU3VicmVz
b3VyY2VEb21haW5zQ2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6YWRkTW9ja01lZGlhRGV2aWNlKEpTU3RyaW5nUmVmIHBlcnNpc3RlbnRJZCwgSlNTdHJpbmdS
ZWYgbGFiZWwsIGNvbnN0IGNoYXIqIHR5cGUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFs
dWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUGVyc2lzdGVudElEIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0socGVyc2lzdGVu
dElkKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGxhYmVsKSk7Ci0KLSAg
ICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUeXBl
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcodHlwZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBW
ZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXpl
KCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9
IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsK
LSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRNb2NrTWVkaWFEZXZpY2UiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdL
ZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJBZGRN
b2NrTWVkaWFEZXZpY2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJQZXJzaXN0
ZW50SUQiLCB0b1dLKHBlcnNpc3RlbnRJZCkgfSwKKyAgICAgICAgeyAiTGFiZWwiLCB0b1dLKGxh
YmVsKSB9LAorICAgICAgICB7ICJUeXBlIiwgdG9XSyh0eXBlKSB9LAorICAgIH0pLmdldCgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrQ2FtZXJhRGV2aWNlKEpTU3RyaW5nUmVmIHBl
cnNpc3RlbnRJZCwgSlNTdHJpbmdSZWYgbGFiZWwpCkBAIC0yNTk0LDE1MyArMTg1Nyw3MiBAQCB2
b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTY3JlZW5EZXZpY2UoSlNTdHJpbmdSZWYgcGVyc2lzdGVu
dElkLCBKU1N0cmluZ1JlZiBsYWJlbAogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyTW9ja01lZGlh
RGV2aWNlcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJNb2NrTWVkaWFEZXZp
Y2VzIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhck1vY2tNZWRpYURldmljZXMi
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVNb2NrTWVkaWFEZXZpY2UoSlNTdHJpbmdS
ZWYgcGVyc2lzdGVudElkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlbW92ZU1vY2tN
ZWRpYURldmljZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5KHRv
V0socGVyc2lzdGVudElkKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlJlbW92ZU1vY2tNZWRpYURldmljZSIsIHRvV0socGVyc2lzdGVudElkKSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6cmVzZXRNb2NrTWVkaWFEZXZpY2VzKCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJSZXNldE1vY2tNZWRpYURldmljZXMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoIlJlc2V0TW9ja01lZGlhRGV2aWNlcyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1v
Y2tDYW1lcmFPcmllbnRhdGlvbih1bnNpZ25lZCBvcmllbnRhdGlvbikKIHsKLSAgICBhdXRvIG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9j
a0NhbWVyYU9yaWVudGF0aW9uIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKG9yaWVudGF0aW9uKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iLCBvcmllbnRhdGlvbik7CiB9CiAKIGJv
b2wgVGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQoKQog
ewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCIpKTsKLSAgICBX
S1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAg
IEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVu
YWJsZWQiKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKKwogdm9pZCBUZXN0UnVubmVyOjpjb25u
ZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ29ubmVjdE1vY2tHYW1lcGFkIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0KLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNvbm5lY3RNb2NrR2FtZXBhZCIsIGluZGV4KTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgaW5kZXgp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlzY29ubmVjdE1vY2tHYW1lcGFkIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGluZGV4KSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkRp
c2Nvbm5lY3RNb2NrR2FtZXBhZCIsIGluZGV4KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRN
b2NrR2FtZXBhZERldGFpbHModW5zaWduZWQgaW5kZXgsIEpTU3RyaW5nUmVmIGdhbWVwYWRJRCwg
SlNTdHJpbmdSZWYgbWFwcGluZywgdW5zaWduZWQgYXhpc0NvdW50LCB1bnNpZ25lZCBidXR0b25D
b3VudCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSUQiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQodG9XSyhnYW1lcGFkSUQpKTsKLQotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1hcHBpbmciKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQodG9XSyhtYXBwaW5nKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAgIHZhbHVl
cy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNDb3VudCIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNDb3VudCkpKTsK
LQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkJ1dHRvbkNvdW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoYnV0dG9uQ291bnQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0g
ICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMu
c2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNb
aV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0
KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dhbWVwYWREZXRh
aWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZSgiU2V0TW9ja0dhbWVwYWREZXRhaWxzIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAg
eyAiR2FtZXBhZElEIiwgdG9XSyhnYW1lcGFkSUQpIH0sCisgICAgICAgIHsgIk1hcHBpbmciLCB0
b1dLKG1hcHBpbmcpIH0sCisgICAgICAgIHsgIkdhbWVwYWRJbmRleCIsIGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJBeGlzQ291bnQiLCBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGF4aXNDb3VudCkpIH0sCisgICAgICAgIHsgIkJ1dHRvbkNvdW50IiwgYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShidXR0b25Db3VudCkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKHVuc2lnbmVkIGluZGV4LCB1
bnNpZ25lZCBheGlzSW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+
PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNJbmRleCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpKTsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSk7Ci0KLSAgICBWZWN0
b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVz
OwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXpl
KHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICBy
YXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJh
d0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSIs
IGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkdhbWVwYWRJbmRleCIsIGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJBeGlzSW5kZXgiLCBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIHVuc2ln
bmVkIGJ1dHRvbkluZGV4LCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4g
dmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiR2FtZXBhZEluZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tV
SW50NjRDcmVhdGUoaW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25JbmRleCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbkluZGV4KSkpOwotCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpKTsKLQotICAgIFZl
Y3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1
ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNp
emUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAg
IHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0
ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TW9ja0dhbWVwYWRCdXR0b25W
YWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkdhbWVwYWRJbmRleCIsIGFk
b3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJCdXR0b25JbmRleCIs
IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uSW5kZXgpKSB9LAorICAgICAgICB7ICJWYWx1
ZSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsKIH0K
KwogI2Vsc2UKKwogdm9pZCBUZXN0UnVubmVyOjpjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQp
CiB7CiB9CkBAIC0yNzYwLDMwICsxOTQyLDI1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dh
bWVwYWRBeGlzVmFsdWUodW5zaWduZWQsIHVuc2lnbmVkLCBkb3VibGUpCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWduZWQsIHVuc2lnbmVkLCBkb3VibGUp
CiB7CiB9CisKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
T3BlblBhbmVsRmlsZXMoSlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogewotICAgIFdLQnVuZGxlUGFn
ZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwot
ICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250
ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKSk7CisgICAgSlNDb250ZXh0UmVmIGNv
bnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAKICAgICBpZiAoIUpTVmFsdWVJc0FycmF5KGNvbnRl
eHQsIGZpbGVzVmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09iamVjdFJlZiBmaWxl
cyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBmaWxlc1ZhbHVlLCBudWxscHRyKTsKLSAgICBz
dGF0aWMgYXV0byBsZW5ndGhQcm9wZXJ0eSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBmaWxlc0xlbmd0aFZhbHVlID0gSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBmaWxlcywgbGVuZ3RoUHJvcGVydHkuZ2V0KCksIG51
bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGZpbGVzTGVuZ3RoVmFs
dWUpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGZpbGVzID0gKEpTT2JqZWN0UmVmKWZp
bGVzVmFsdWU7CiAgICAgYXV0byBmaWxlVVJMcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7Ci0gICAgYXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKKyAgICBhdXRv
IGZpbGVzTGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgZmlsZXMpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIGZp
bGVWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZpbGVzLCBpLCBu
dWxscHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgZmlsZVZhbHVl
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gZmlsZSA9IGFkb3B0KEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgZmlsZVZhbHVlLCBudWxscHRyKSk7CisgICAgICAg
IGF1dG8gZmlsZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1ZSk7CiAgICAgICAg
IHNpemVfdCBmaWxlQnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6
ZShmaWxlLmdldCgpKSArIDE7CiAgICAgICAgIGF1dG8gZmlsZUJ1ZmZlciA9IG1ha2VVbmlxdWVB
cnJheTxjaGFyPihmaWxlQnVmZmVyU2l6ZSk7CiAgICAgICAgIEpTU3RyaW5nR2V0VVRGOENTdHJp
bmcoZmlsZS5nZXQoKSwgZmlsZUJ1ZmZlci5nZXQoKSwgZmlsZUJ1ZmZlclNpemUpOwpAQCAtMjc5
NywyMiArMTk3NCwxNSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKEpTVmFs
dWVSZWYgZmlsZXNWYWx1ZSkKIAogICAgIH0KIAotICAgIHN0YXRpYyBhdXRvIG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0T3BlblBhbmVsRmls
ZVVSTHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUu
Z2V0KCksIGZpbGVVUkxzLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE9wZW5QYW5l
bEZpbGVVUkxzIiwgZmlsZVVSTHMuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE9w
ZW5QYW5lbEZpbGVzTWVkaWFJY29uKEpTVmFsdWVSZWYgZGF0YSkKIHsKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShw
YWdlKSk7Ci0KLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKTsKICAgICAvLyBGSVhNRSAoMTIzMDU4KTogVXNlIGEgSlNDIEFQSSB0byBnZXQgYnVm
ZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBleHBvc2VkLgotICAgIFdLUmV0YWluUHRyPFdLRGF0
YVJlZj4gaWNvbkRhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJy
YXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKTsKLQotICAgIHN0YXRp
YyBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0T3BlblBhbmVsRmlsZVVSTHNNZWRpYUljb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIGljb25EYXRhLmdldCgpKTsKKyAgICBh
dXRvIGljb25EYXRhID0gYWRvcHRXSyhXS0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWFpbkpTQ29udGV4dCgpLCBk
YXRhKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRPcGVuUGFuZWxGaWxlVVJMc01lZGlhSWNv
biIsIGljb25EYXRhLmdldCgpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRhdGEpOwogI2Vu
ZGlmCkBAIC0yODIxLDExICsxOTkxLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxG
aWxlc01lZGlhSWNvbihKU1ZhbHVlUmVmIGRhdGEpCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFs
bFNlc3Npb25DcmVkZW50aWFscyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVz
dFJ1bm5lckNhbGxiYWNrKERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrSUQs
IGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZW1vdmVBbGxTZXNz
aW9uQ3JlZGVudGlhbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUpKTsKLSAgICAKLSAgICBXS0J1bmRs
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiUmVtb3Zl
QWxsU2Vzc2lvbkNyZWRlbnRpYWxzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2Fs
bERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrKCkKQEAgLTI4MzUsNDkgKzIw
MDEsMzMgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRp
YWxzQ2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGUoSlNTdHJpbmdS
ZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRE9NQ2FjaGUiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIkNsZWFyRE9NQ2FjaGUiLCB0b1dLKG9yaWdpbikuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGVzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDbGVhckRPTUNhY2hlcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJE
T01DYWNoZXMiKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNET01DYWNoZShKU1N0cmluZ1Jl
ZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFzRE9NQ2FjaGUiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9
IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVy
biBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0
dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuKCJIYXNET01DYWNoZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAK
IHVpbnQ2NF90IFRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZShKU1N0cmluZ1JlZiBvcmlnaW4pCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRE9NQ2FjaGVTaXplIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcob3JpZ2luKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgcmV0dXJuIFdLVUludDY0R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVybkRhdGEpKTsKKyAgICByZXR1cm4gcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50NjQoIkRPTUNhY2hlU2l6ZSIsIHRv
V0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dTdG9yYWdl
UXVvdGFJbmNyZWFzZShib29sIHdpbGxJbmNyZWFzZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIikpOwotICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh3aWxsSW5j
cmVhc2UpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRBbGxv
d1N0b3JhZ2VRdW90YUluY3JlYXNlIiwgd2lsbEluY3JlYXNlKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpnZXRBcHBsaWNhdGlvbk1hbmlmZXN0VGhlbihKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewog
ICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKEdldEFwcGxpY2F0aW9uTWFuaWZlc3RDYWxsYmFj
a0lELCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0QXBwbGlj
YXRpb25NYW5pZmVzdCIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAg
IFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFwcGxpY2F0aW9uTWFuaWZlc3QiKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpkaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0KCkKQEAgLTI4OTcsMjIxICsyMDQ3
LDEzMCBAQCBzaXplX3QgVGVzdFJ1bm5lcjo6dXNlclNjcmlwdEluamVjdGVkQ291bnQoKSBjb25z
dAogCiB2b2lkIFRlc3RSdW5uZXI6OmluamVjdFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluamVjdFVzZXJTY3JpcHQiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiSW5qZWN0VXNlclNjcmlwdCIsIHRvV0soc2NyaXB0
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2VuZERpc3BsYXlDb25maWd1cmF0aW9u
Q2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZvclRlc3RpbmciKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIlNlbmREaXNwbGF5Q29uZmlndXJhdGlvbkNoYW5nZWRNZXNz
YWdlRm9yVGVzdGluZyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNlcnZpY2VXb3JrZXJG
ZXRjaFRpbWVvdXQoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJs
ZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFNlcnZpY2VXb3JrZXJGZXRjaFRp
bWVvdXQiLCBzZWNvbmRzKTsKIH0KIAogLy8gV2ViQXV0aG4KIHZvaWQgVGVzdFJ1bm5lcjo6YWRk
VGVzdEtleVRvS2V5Y2hhaW4oSlNTdHJpbmdSZWYgcHJpdmF0ZUtleUJhc2U2NCwgSlNTdHJpbmdS
ZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlvblRhZ0Jhc2U2NCkKIHsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcml2YXRlS2V5IikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKHRvV0socHJpdmF0ZUtleUJhc2U2NCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvblRhZyIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uVGFnQmFzZTY0KSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJp
bmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJh
d0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5z
aXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNb
aV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QWRkVGVzdEtleVRvS2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKCJBZGRUZXN0S2V5VG9LZXljaGFpbiIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgIHsgIlByaXZhdGVLZXkiLCB0b1dLKHByaXZhdGVLZXlCYXNlNjQpIH0s
CisgICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAgICB7ICJB
cHBsaWNhdGlvblRhZyIsIHRvV0soYXBwbGljYXRpb25UYWdCYXNlNjQpIH0sCisgICAgfSkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFuVXBLZXljaGFpbihKU1N0cmluZ1JlZiBh
dHRyTGFiZWwsIEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpCiB7Ci0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBpZiAoYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgewot
ICAgICAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJBcHBsaWNhdGlvbkxhYmVsIikpKTsKLSAgICAgICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxp
Y2F0aW9uTGFiZWxCYXNlNjQpKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJh
d0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVz
aXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1
ZXNbaV0uZ2V0KCk7CisgICAgaWYgKCFhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB7CisgICAgICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFuVXBLZXljaGFpbiIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAg
ICAgICAgfSkuZ2V0KCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2xlYW5VcEtleWNoYWluIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlz
LmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYW5VcEtleWNoYWluIiwgY3JlYXRlV0tEaWN0
aW9uYXJ5KHsKKyAgICAgICAgeyAiQXR0ckxhYmVsIiwgdG9XSyhhdHRyTGFiZWwpIH0sCisgICAg
ICAgIHsgIkFwcGxpY2F0aW9uTGFiZWwiLCB0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpIH0s
CisgICAgfSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmtleUV4aXN0c0luS2V5Y2hh
aW4oSlNTdHJpbmdSZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxhYmVsQmFz
ZTY0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKSk7Ci0g
ICAgdmFsdWVzLmFwcGVuZCh0b1dLKGF0dHJMYWJlbCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25MYWJlbCIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpKTsKLQotICAg
IFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdW
YWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5y
ZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAg
ICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJLZXlFeGlzdHNJbktleWNoYWluIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShy
YXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAg
IFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQo
V0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJl
dHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
cmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4oIktleUV4aXN0c0luS2V5Y2hhaW4iLCBjcmVhdGVXS0RpY3Rpb25hcnko
eworICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAgICAgeyAi
QXBwbGljYXRpb25MYWJlbCIsIHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgfSwKKyAgICB9
KS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgVGVzdFJ1bm5lcjo6c2VydmVyVHJ1c3RFdmFs
dWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKSk7Ci0gICAgV0tUeXBlUmVm
IHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQo
V0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgcmV0
dXJuIFdLVUludDY0R2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4ocmV0
dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVy
bmluZ1VJbnQ2NCgiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50Iik7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3lu
Y2hyb25vdXNseShib29sIHNob3VsZERpc21pc3NBc3luY2hyb25vdXNseSkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91
c2x5IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGREaXNtaXNzQXN5bmNocm9ub3VzbHkpKTsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxl
cnRzQXN5bmNocm9ub3VzbHkiLCBzaG91bGREaXNtaXNzQXN5bmNocm9ub3VzbHkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9kYWwoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkFib3J0TW9kYWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkFib3J0TW9kYWwiKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKCkKIHsKLSAgICBh
dXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZSgiRHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCkKIHsKLSAgICBhdXRvIG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJBZENs
aWNrQXR0cmlidXRpb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCgp
CiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92
YWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
c1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRB
ZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGlt
ZXJGb3JUZXN0aW5nIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0QWRDbGlja0F0dHJp
YnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoSlNTdHJp
bmdSZWYgdXJsU3RyaW5nKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFkQ2xpY2tB
dHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIikpOwotICAgIGF1dG8gd3RmVVJMU3Ry
aW5nID0gdG9XVEZTdHJpbmcoV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodXJsU3RyaW5nKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VSTENy
ZWF0ZVdpdGhVVEY4Q1N0cmluZyh3dGZVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSkpOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0
QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmciLAorICAgICAgICBhZG9w
dFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRvV1RGU3RyaW5nKHVybFN0cmluZykudXRm
OCgpLmRhdGEoKSkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjptYXJrQWRDbGlja0F0dHJpYnV0
aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1h
cmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyIpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiTWFya0FkQ2xpY2tBdHRyaWJ1
dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T2Zm
c2NyZWVuQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk9m
ZnNjcmVlbkNhbnZhc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJl
bmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUu
cGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZl
cmVuY2UoIk9mZnNjcmVlbkNhbnZhc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogYm9vbCBUZXN0
UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYXNBcHBCb3VuZFNlc3Npb24i
KSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5E
YXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotCi0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkhhc0FwcEJvdW5kU2Vzc2lv
biIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQXBwQm91bmRTZXNzaW9uKCkKIHsKLSAg
ICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2xlYXJBcHBCb3VuZFNlc3Npb24iKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNs
ZWFyQXBwQm91bmRTZXNzaW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQm91bmRE
b21haW5zKEpTVmFsdWVSZWYgb3JpZ2luQXJyYXksIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soRGlkU2V0QXBwQm91bmREb21haW5z
Q2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpOworICAg
IEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogCiAgICAgaWYgKCFKU1Zh
bHVlSXNBcnJheShjb250ZXh0LCBvcmlnaW5BcnJheSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEpTT2JqZWN0UmVmIG9yaWdpbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3JpZ2luQXJy
YXksIG51bGxwdHIpOwotICAgIHN0YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5ID0gYWRvcHQoSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIG9y
aWdpbnNMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3JpZ2lucywg
bGVuZ3RoUHJvcGVydHkuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVy
KGNvbnRleHQsIG9yaWdpbnNMZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybjsKLQorICAgIGF1
dG8gb3JpZ2lucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBvcmlnaW5BcnJheSwgbnVsbHB0
cik7CiAgICAgYXV0byBvcmlnaW5VUkxzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgp
KTsKLSAgICBhdXRvIG9yaWdpbnNMZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVU
b051bWJlcihjb250ZXh0LCBvcmlnaW5zTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG9yaWdpbnNMZW5ndGg7ICsraSkgeworICAgIGF1dG8gb3JpZ2lu
c0xlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG9yaWdpbnMpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBvcmlnaW5zTGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZVJlZiBv
cmlnaW5WYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9yaWdpbnMs
IGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBvcmln
aW5WYWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIG9yaWdpbiA9
IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgb3JpZ2luVmFsdWUsIG51bGxwdHIp
KTsKKyAgICAgICAgYXV0byBvcmlnaW4gPSBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBvcmlnaW5W
YWx1ZSk7CiAgICAgICAgIHNpemVfdCBvcmlnaW5CdWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhp
bXVtVVRGOENTdHJpbmdTaXplKG9yaWdpbi5nZXQoKSkgKyAxOwogICAgICAgICBhdXRvIG9yaWdp
bkJ1ZmZlciA9IG1ha2VVbmlxdWVBcnJheTxjaGFyPihvcmlnaW5CdWZmZXJTaXplKTsKICAgICAg
ICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhvcmlnaW4uZ2V0KCksIG9yaWdpbkJ1ZmZlci5nZXQo
KSwgb3JpZ2luQnVmZmVyU2l6ZSk7CkBAIC0zMTE5LDcgKzIxNzgsNyBAQCB2b2lkIFRlc3RSdW5u
ZXI6OnNldEFwcEJvdW5kRG9tYWlucyhKU1ZhbHVlUmVmIG9yaWdpbkFycmF5LCBKU1ZhbHVlUmVm
IGNvbXBsZXRpbwogICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShvcmlnaW5VUkxzLmdldCgpLCBh
ZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9yaWdpbkJ1ZmZlci5nZXQoKSkpLmdl
dCgpKTsKICAgICB9CiAKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QXBwQm91bmREb21haW5zIikpOworICAgIGF1dG8gbWVz
c2FnZU5hbWUgPSB0b1dLKCJTZXRBcHBCb3VuZERvbWFpbnMiKTsKICAgICBXS0J1bmRsZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG9yaWdpblVSTHMuZ2V0KCkpOwogfQogCkBAIC0zMTI4LDYgKzIxODcsMTEgQEAgdm9p
ZCBUZXN0UnVubmVyOjpkaWRTZXRBcHBCb3VuZERvbWFpbnNDYWxsYmFjaygpCiAgICAgY2FsbFRl
c3RSdW5uZXJDYWxsYmFjayhEaWRTZXRBcHBCb3VuZERvbWFpbnNDYWxsYmFja0lEKTsKIH0KIAor
dm9pZCBUZXN0UnVubmVyOjpwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVl
KQoreworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkpLmdldCgpKTsKK30KKwogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAKIH0g
Ly8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCBjMGExNDA5MDVlZGYzZGRhNGE3NjFhYjYyMDdkOTdi
NDM2MjA4NmJiLi5hYWViNDEwZTNlZDA3ZmI2Y2E0ZjlmMDNiZmY3ZGUzNzIyNTI3ZjcwIDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
aAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
aApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gSlNXcmFwcGFibGUKICAgICB2aXJ0
dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmpl
Y3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAg
ICBib29sIGlzSU9TRmFtaWx5KCkgY29uc3QKICAgICB7CkBAIC0yNTMsNyArMjUzLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoYm9vbCBmKSB7IG1f
d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwgPSBmOyB9CiAgICAgYm9vbCB3aWxsU2VuZFJlcXVl
c3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSBjb25zdCB7IHJldHVybiBtX3dpbGxTZW5kUmVxdWVz
dFJldHVybnNOdWxsT25SZWRpcmVjdDsgfQogICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0
dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZikgeyBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxs
T25SZWRpcmVjdCA9IGY7IH0KLSAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdEFkZHNIVFRQQm9k
eShKU1N0cmluZ1JlZiBib2R5KSB7IG1fd2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHkgPSB0b1dURlN0
cmluZyh0b1dLKGJvZHkpKTsgfQorICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0QWRkc0hUVFBC
b2R5KEpTU3RyaW5nUmVmIGJvZHkpIHsgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keSA9IHRvV1RG
U3RyaW5nKGJvZHkpOyB9CiAgICAgU3RyaW5nIHdpbGxTZW5kUmVxdWVzdEhUVFBCb2R5KCkgY29u
c3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keTsgfQogCiAgICAgdm9pZCBzZXRU
ZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmKTsKQEAgLTI4Niw3ICsyODYsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2soKTsKICAgICB2b2lkIGNhbGxTZXRCYWNr
aW5nU2NhbGVGYWN0b3JDYWxsYmFjaygpOwogCi0gICAgdm9pZCBvdmVycmlkZVByZWZlcmVuY2Uo
SlNTdHJpbmdSZWYgcHJlZmVyZW5jZSwgSlNTdHJpbmdSZWYgdmFsdWUpOworICAgIHN0YXRpYyB2
b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJlbmNlLCBKU1N0cmluZ1Jl
ZiB2YWx1ZSk7CiAKICAgICAvLyBDb29raWVzIHRlc3RpbmcKICAgICB2b2lkIHNldEFsd2F5c0Fj
Y2VwdENvb2tpZXMoYm9vbCk7CkBAIC0zMDQsNyArMzA0LDcgQEAgcHVibGljOgogCiAgICAgLy8g
R2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCk7Ci0g
ICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJs
ZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNWYWx1ZVJlZiBhbHRpdHVkZSwgSlNWYWx1
ZVJlZiBhbHRpdHVkZUFjY3VyYWN5LCBKU1ZhbHVlUmVmIGhlYWRpbmcsIEpTVmFsdWVSZWYgc3Bl
ZWQsIEpTVmFsdWVSZWYgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFj
eSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFj
Y3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQs
IE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoSlNTdHJpbmdSZWYgbWVzc2FnZSk7CiAgICAgYm9v
bCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKIApAQCAtMzM1LDggKzMzNSw4IEBAIHB1
YmxpYzoKICAgICBib29sIHNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQoKSBjb25zdDsKIAogICAg
IEpTVmFsdWVSZWYgZmFpbE5leHROZXdDb2RlQmxvY2soKTsKLSAgICBKU1ZhbHVlUmVmIG51bWJl
ck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbik7Ci0gICAgSlNWYWx1ZVJlZiBu
ZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgdGhlRnVuY3Rpb24pOworICAgIEpTVmFsdWVS
ZWYgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIGZ1bmN0aW9uKTsKKyAgICBKU1ZhbHVl
UmVmIG5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiBmdW5jdGlvbik7CiAKICAgICBib29s
IHNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5KCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheTsgfQogICAgIHZvaWQgc2V0
U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoYm9vbCk7CkBAIC01NDksNiAr
NTQ5LDggQEAgcHJpdmF0ZToKIAogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtX3Rlc3RVUkw7
IC8vIFNldCBieSBJbmplY3RlZEJ1bmRsZVBhZ2Ugb25jZSBwcm92aXNpb25hbCBsb2FkIHN0YXJ0
cy4KIAorICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCk7CisKICAg
ICBTdHJpbmcgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keTsKICAgICBXVEY6OlNlY29uZHMgbV90
aW1lb3V0IHsgMzBfcyB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAppbmRleCA2NGFjODE5
NzE1M2FhZTBhMGFiNzFlYmJjMjk0MjQ4NGEzNWU2NWFkLi42ZTAwZDk5MjI1ZDFmMWFhYjI2MTU2
Yzg5MjViMDU2NmEzNjZkNzI5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0SW5wdXRDb250cm9s
bGVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSW5q
ZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKICNpbmNsdWRl
ICJKU1RleHRJbnB1dENvbnRyb2xsZXIuaCIKQEAgLTQwLDMwICs0MSwxNCBAQCBSZWY8VGV4dElu
cHV0Q29udHJvbGxlcj4gVGV4dElucHV0Q29udHJvbGxlcjo6Y3JlYXRlKCkKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBUZXh0SW5wdXRDb250cm9sbGVyKTsKIH0KIAotVGV4dElucHV0Q29udHJv
bGxlcjo6VGV4dElucHV0Q29udHJvbGxlcigpCi17Ci19Ci0KLVRleHRJbnB1dENvbnRyb2xsZXI6
On5UZXh0SW5wdXRDb250cm9sbGVyKCkKLXsKLX0KLQogSlNDbGFzc1JlZiBUZXh0SW5wdXRDb250
cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogewogICAgIHJldHVybiBKU1RleHRJbnB1dENvbnRyb2xs
ZXI6OnRleHRJbnB1dENvbnRyb2xsZXJDbGFzcygpOwogfQogCi12b2lkIFRleHRJbnB1dENvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXh0SW5wdXRDb250
cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNl
dFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgInRleHRJbnB1dENvbnRyb2xsZXIiLCB0
aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlLCBleGNlcHRpb24pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGFycmF5KQotewotICAgIGF1dG8gbGVu
Z3RoU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIp
KTsKLSAgICBpZiAoYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4
dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgbnVsbHB0cikpCi0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVl
LCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIDA7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHko
Y29udGV4dCwgInRleHRJbnB1dENvbnRyb2xsZXIiLCB0aGlzKTsKIH0KIAogc3RhdGljIFdLQXJy
YXlSZWYgY3JlYXRlQ29tcG9zaXRpb25IaWdobGlnaHREYXRhKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmIGpzSGlnaGxpZ2h0c1ZhbHVlKQpAQCAtNzIsNTAgKzU3LDE5IEBAIHN0YXRp
YyBXS0FycmF5UmVmIGNyZWF0ZUNvbXBvc2l0aW9uSGlnaGxpZ2h0RGF0YShKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBy
ZXN1bHQgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOwotICAgIGF1dG8ganNIaWdobGlnaHRzQXJy
YXkgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hsaWdodHNWYWx1ZSk7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwganNIaWdobGlnaHRzQXJyYXkpOwot
ICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgYXV0byBqc0Zy
b21LZXkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZnJvbSIpKTsKLSAg
ICBhdXRvIGpzTGVuZ3RoS2V5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Imxlbmd0aCIpKTsKLSAgICBhdXRvIGpzQ29sb3JLZXkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiY29sb3IiKSk7Ci0KLSAgICBhdXRvIHdrRnJvbUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZyb20iKSk7Ci0gICAgYXV0byB3a0xlbmd0
aEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsK
LSAgICBhdXRvIHdrQ29sb3JLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJjb2xvciIpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgICAgICBhdXRv
IGpzT2JqZWN0VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBqc0hp
Z2hsaWdodHNBcnJheSwgaSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24gfHwg
IUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBqc09iamVjdFZhbHVlKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGF1dG8ganNPYmplY3QgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVm
Pihqc09iamVjdFZhbHVlKTsKLSAgICAgICAgYXV0byBqc0Zyb21WYWx1ZSA9IEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwganNPYmplY3QsIGpzRnJvbUtleS5nZXQoKSwgbnVsbHB0cik7Ci0g
ICAgICAgIGlmICghanNGcm9tVmFsdWUgfHwgIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBqc0Zy
b21WYWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIGpzTGVuZ3Ro
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGpzT2JqZWN0LCBqc0xlbmd0aEtl
eS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmICghanNMZW5ndGhWYWx1ZSB8fCAhSlNWYWx1
ZUlzTnVtYmVyKGNvbnRleHQsIGpzTGVuZ3RoVmFsdWUpKQorICAgIGF1dG8gYXJyYXkgPSBjb25z
dF9jYXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hsaWdodHNWYWx1ZSk7CisgICAgdW5zaWduZWQgbGVu
Z3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIG51bGxwdHIpOworICAgICAgICBpZiAo
IXZhbHVlIHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgYXV0byBqc0NvbG9yVmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5KGNvbnRleHQsIGpzT2JqZWN0LCBqc0NvbG9yS2V5LmdldCgpLCBudWxscHRyKTsKLSAgICAg
ICAgaWYgKCFqc0NvbG9yVmFsdWUgfHwgIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBqc0NvbG9y
VmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBjb2xvciA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwganNDb2xvclZhbHVlLCBudWxscHRyKSk7
Ci0gICAgICAgIGF1dG8gd2tDb2xvciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcoY29sb3IuZ2V0KCkpKTsKLSAgICAgICAgYXV0byB3a0Zyb20gPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGxyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNGcm9tVmFsdWUsIG51bGxw
dHIpKSkpOwotICAgICAgICBhdXRvIHdrTGVuZ3RoID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShs
cm91bmQoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKSkp
OwotCisgICAgICAgIGF1dG8gb2JqZWN0ID0gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUp
OwogICAgICAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwg
d2tGcm9tS2V5LmdldCgpLCB3a0Zyb20uZ2V0KCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKGRpY3Rpb25hcnkuZ2V0KCksIHdrTGVuZ3RoS2V5LmdldCgpLCB3a0xlbmd0aC5nZXQoKSk7
Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwgd2tDb2xvcktl
eS5nZXQoKSwgd2tDb2xvci5nZXQoKSk7CisgICAgICAgIHNldFZhbHVlKGRpY3Rpb25hcnksICJm
cm9tIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBvYmpl
Y3QsICJmcm9tIikpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImxlbmd0aCIsIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihudW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVu
Z3RoIikpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImNvbG9yIiwgdG9XSyhzdHJp
bmdQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJjb2xvciIpKS5nZXQoKSk7CiAgICAgICAgIFdL
QXJyYXlBcHBlbmRJdGVtKHJlc3VsdCwgZGljdGlvbmFyeS5nZXQoKSk7CiAgICAgfQotCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaAppbmRleCA1NThjMmU2MTE0
MDgxNzg1ZTNiN2NhZTE5ZmVmZDM5NmFlYjM3YTk0Li5hNDRjMjhlODQ0MzkxNzI5MmE5YjM3YmNi
N2UyNTUyZDEyMTQ0Y2E0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaApAQCAtMjgsMTcgKzI4LDE3
IEBACiAjaW5jbHVkZSAiSlNXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKK3R5
cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwordHlwZWRl
ZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVmOwordHlwZWRlZiBjb25zdCBzdHJ1
Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNz
IFRleHRJbnB1dENvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgeworY2xhc3MgVGV4dElu
cHV0Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxUZXh0SW5wdXRDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5U
ZXh0SW5wdXRDb250cm9sbGVyKCk7Ci0KLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZpcnR1YWwg
SlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIHZv
aWQgc2V0TWFya2VkVGV4dChKU1N0cmluZ1JlZiB0ZXh0LCBpbnQgZnJvbSwgaW50IGxlbmd0aCwg
Ym9vbCBzdXBwcmVzc1VuZGVybGluZSwgSlNWYWx1ZVJlZiBoaWdobGlnaHRzKTsKICAgICBib29s
IGhhc01hcmtlZFRleHQoKTsKQEAgLTQ2LDcgKzQ2LDkgQEAgcHVibGljOgogICAgIHZvaWQgaW5z
ZXJ0VGV4dChKU1N0cmluZ1JlZiB0ZXh0KTsKIAogcHJpdmF0ZToKLSAgICBUZXh0SW5wdXRDb250
cm9sbGVyKCk7CisgICAgVGV4dElucHV0Q29udHJvbGxlcigpID0gZGVmYXVsdDsKKworICAgIEpT
Q2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVFIK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2Ev
QWN0aXZhdGVGb250c0NvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KaW5kZXggMDI0ZmU2MDU3M2I4ZjJjNTky
ZWJmZGIzNWYzYTQ0NDg1Y2RiOTc1Ni4uNWE1Yjc3ZWMxOTRkYTVmZTNmZmY5OTEzN2NlOWFjZDI2
ZGZlNGMxZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KQEAgLTEzNiw3ICsx
MzYsNyBAQCB2b2lkIGFjdGl2YXRlRm9udHMoKQogCiB2b2lkIGluc3RhbGxGYWtlSGVsdmV0aWNh
KFdLU3RyaW5nUmVmIGNvbmZpZ3VyYXRpb24pCiB7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBjb25maWd1cmF0aW9uU3RyaW5nID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uKSk7CisgICAgYXV0byBjb25maWd1cmF0aW9u
U3RyaW5nID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBjb25maWd1cmF0aW9uKSk7CiAgICAgTlNVUkwgKnJlc291cmNlVVJMID0gW3Jlc291cmNlc0Rp
cmVjdG9yeVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIkZha2VIZWx2ZXRpY2EtJUAudHRmIiwgY29uZmlndXJhdGlvblN0cmluZy5n
ZXQoKV0gaXNEaXJlY3Rvcnk6Tk9dOwogICAgIENGRXJyb3JSZWYgZXJyb3IgPSBudWxscHRyOwog
ICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkwoKF9fYnJpZGdlIENGVVJM
UmVmKXJlc291cmNlVVJMLCBrQ1RGb250TWFuYWdlclNjb3BlUHJvY2VzcywgJmVycm9yKSkgewpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9J
bmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0KaW5kZXggODE3NjE4Mjdh
ODgxZDA2ZGZlNzBhOWJkMzIyNDczMmFlMTliY2YyOC4uOTFkMjQ5YzcyN2Y2ODc1ZWQ0YTRjY2Yx
NTljMGY3N2Q3MmY4NWJkNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFnZUNv
Y29hLm1tCkBAIC00NywxMyArNDcsMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnBsYXRm
b3JtRGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmUKIAogU3Ry
aW5nIEluamVjdGVkQnVuZGxlUGFnZTo6cGxhdGZvcm1SZXNwb25zZU1pbWVUeXBlKFdLVVJMUmVz
cG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IG5zVVJM
UmVzcG9uc2UgPSBhZG9wdE5TKFdLVVJMUmVzcG9uc2VDb3B5TlNVUkxSZXNwb25zZShyZXNwb25z
ZSkpOworICAgIGF1dG8gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlO
U1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICAgcmV0dXJuIFtuc1VSTFJlc3BvbnNlLmdldCgp
IE1JTUVUeXBlXTsKIH0KIAogdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNwb25zZUhl
YWRlckNvdW50KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgUmV0YWluUHRyPE5T
VVJMUmVzcG9uc2U+IG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdLVVJMUmVzcG9uc2VDb3B5TlNV
UkxSZXNwb25zZShyZXNwb25zZSkpOworICAgIGF1dG8gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMo
V0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICAgaWYgKCFbbnNV
UkxSZXNwb25zZSBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKQogICAg
ICAgICByZXR1cm4geyB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
SU9TLm1tCmluZGV4IDg3Y2NkMjFjYTlhNzdhYTJkMGEyMWE0Y2FiNTIxY2FlZWZhOWM0YTIuLmM0
MTgyMzBmM2I0ZmRlNzE5YWM2Y2NjODRiNzQyZGJlY2ExNGQyNGEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9z
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5h
bWUoKQogewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
aW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJpb3MiKTsKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCkBAIC04
OSw3ICs4OSw3IEBAIHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoaWQgb2JqLCBO
U1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmVm
IGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBpZCByb290ID0gc3RhdGlj
X2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFnZSkp
OwogCiAgICAgaWQgcmVzdWx0ID0gZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKHJvb3QsIFtOU1N0
cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6aWRBdHRyaWJ1dGVdKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCmluZGV4IDUyMjM0YWE0ZDc0NzJjZGUwNzFkOWU4
Njk2OTBkOTM1NTI5YTIwZDIuLmJiYzhiYjE2Yzg2NGJjMjYxMGNmYWE2OWEwNmZkODEzYzc2OTVk
MDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQpAQCAtMTM2
LDExICsxMzYsNiBAQCBAZW5kCiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0aWMgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKQotewotICAgIHJldHVybiBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApKTsKLX0KLQogc3RhdGlj
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb25jYXRlbmF0ZUF0dHJpYnV0ZUFuZFZhbHVlKE5T
U3RyaW5nICphdHRyaWJ1dGUsIE5TU3RyaW5nICp2YWx1ZSkKIHsKICAgICBWZWN0b3I8VW5pQ2hh
cj4gYnVmZmVyKFthdHRyaWJ1dGUgbGVuZ3RoXSk7CkBAIC0zMzAsMjcgKzMyNSwyNyBAQCBSZWZQ
dHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xv
c2VkQnlSb3coKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNP
ZkRvY3VtZW50TGlua3MoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbigpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmco
KTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmFsbEF0dHJpYnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9mQXR0cmlidXRlVmFs
dWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3Ry
aW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShK
U1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBAIC0zODIsNyArMzc3LDcgQEAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpT
U3RyaW5nUmUKICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhhdHRyaWJ1dGUs
ICJBWFRleHR1YWxDb250ZXh0IikpCiAgICAgICAgIHJldHVybiBbW21fZWxlbWVudCBhY2Nlc3Np
YmlsaXR5VGV4dHVhbENvbnRleHRdIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICAKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwog
fQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUo
SlNTdHJpbmdSZWYgYXR0cmlidXRlKQpAQCAtNDQzLDE3ICs0MzgsMTcgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBhdHRyaWJ1
dGUpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpw
YXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpT
U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwog
fQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vi
cm9sZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4g
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCkBAIC00NjMsMTMgKzQ1OCwxMiBAQCBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURlc2Ny
aXB0aW9uKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmNvbXB1dGVkUm9sZVN0cmluZygpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1
cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKQEAgLTQ3OSw3ICs0NzMsNyBAQCBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24o
KQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3Jp
ZW50YXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCkBAIC00ODksNyArNDgzLDcg
QEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z1ZhbHVlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Omxhbmd1YWdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAg
IHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHQoKSBjb25zdApAQCAtNTQ5LDcgKzU0Myw3
IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9u
KCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVh
dGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9u
UG9pbnRMaW5lTnVtYmVyKCkKQEAgLTU4NCw3ICs1NzgsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzRm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIApAQCAtNTk2LDEzICs1ODksMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjM4LDcgKzYyOSw3IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpT
U3RyaW5nKCk7CiB9CiAKIC8vIHBhcmFtZXRlcml6ZWQgYXR0cmlidXRlcwpAQCAtNjU5LDcgKzY1
MCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpy
YW5nZUZvclBvc2l0aW9uKGludCB4LCBpbnQgeSkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9u
LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsK
KyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0
aW9uLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC03MTMsMzIgKzcwNCwzMiBAQCBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0VGV4dFdpdGhDcml0ZXJp
YShKU0NvbnRleAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJv
d0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0
dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mUm93cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmco
KTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkhlYWRlcigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRyYWl0cygpCkBAIC05MDMsMjMgKzg5NCwy
MSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXgo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xl
YXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nl
c3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsK
KyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQog
CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2ZVRlY2hub2xvZ3lTaW11bGF0
ZWRGb2N1cygpCkBAIC0xMDE2LDMxICsxMDA1LDI2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2Vs
ZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEwNTIsMTMgKzEwMzYsMTEgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc011bHRpTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTA3NCwyMiArMTA1NiwxOCBAQCBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cG9wdXBWYWx1ZSgpIGNvbnN0
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKCkKIHsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNl
bGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiAvLyBUZXh0IG1hcmtlcnMKQEAgLTExMzYs
NyArMTExNCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAgICAgaWQgdGV4dE1hcmtl
cnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKICAgICBpZiAoIVt0
ZXh0TWFya2VycyBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCi0gICAgICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJpbmdGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vy
c10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvRXZlbnRTZW5kZXJQcm94eUlPUy5t
bQppbmRleCBjYWIzZjE4YjM2NTlmNDkxNmJkNTAwODc5Mjg2ZDZhMjdjMGM5ZjkxLi45ODFhMWZk
MGRjNzU4MGNmMDEyZDMxNTZiOGY5ZGY5ODkzMDExYmZmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0V2ZW50U2VuZGVy
UHJveHlJT1MubW0KQEAgLTM2LDI0ICszNiwxMiBAQCBuYW1lc3BhY2UgV1RSIHsKIAogRXZlbnRT
ZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVzdENvbnRyb2xs
ZXIpCiAgICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RDb250cm9sbGVyKQotICAgICwgbV90aW1l
KDApCi0gICAgLCBtX3Bvc2l0aW9uKCkKLSAgICAsIG1fbGVmdE1vdXNlQnV0dG9uRG93bihmYWxz
ZSkKLSAgICAsIG1fY2xpY2tDb3VudCgwKQotICAgICwgbV9jbGlja1RpbWUoMCkKLSAgICAsIG1f
Y2xpY2tQb3NpdGlvbigpCi0gICAgLCBtX2NsaWNrQnV0dG9uKGtXS0V2ZW50TW91c2VCdXR0b25O
b0J1dHRvbikKLSAgICAsIGV2ZW50TnVtYmVyKDApCiB7CiAgICAgVU5VU0VEX1BBUkFNKG1fdGVz
dENvbnRyb2xsZXIpOwogICAgIFVOVVNFRF9QQVJBTShtX2xlZnRNb3VzZUJ1dHRvbkRvd24pOwog
ICAgIFVOVVNFRF9QQVJBTShldmVudE51bWJlcik7CiB9CiAKLUV2ZW50U2VuZGVyUHJveHk6On5F
dmVudFNlbmRlclByb3h5KCkKLXsKLX0KLQogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVD
bGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiB7CiAgICAgaWYgKG1fdGltZSAtIG1fY2xp
Y2tUaW1lIDwgMSAmJiBtX3Bvc2l0aW9uID09IG1fY2xpY2tQb3NpdGlvbiAmJiBidXR0b24gPT0g
bV9jbGlja0J1dHRvbikgewpAQCAtNzAsMTcgKzU4LDE0IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94
eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6Om1vdXNlRG93bih1bnNpZ25lZCBidXR0b25OdW1iZXIsIFdLRXZlbnRNb2RpZmll
cnMgbW9kaWZpZXJzKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6Om1vdXNlVXAodW5zaWduZWQgYnV0dG9uTnVtYmVyLCBXS0V2ZW50TW9kaWZpZXJzIG1v
ZGlmaWVycykKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5
Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9
CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykK
QEAgLTkwLDc5ICs3NSw2NiBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmxlYXBGb3J3YXJkKGlu
dCBtaWxsaXNlY29uZHMpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmlu
Z1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNpZ25lZCBrZXlMb2NhdGlv
bikKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3Vz
ZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBF
dmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMo
aW50IHgsIGludCB5LCBpbnQgcGhhc2UsIGludCBtb21lbnR1bSkKIHsKLSAgICAvLyBXcml0ZSBt
ZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojpjb250aW51b3VzTW91c2VTY3JvbGxCeShp
bnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmFkZFRvdWNoUG9p
bnQoaW50IHgsIGludCB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCiB7Ci0g
ICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2Rp
ZmllcihXS0V2ZW50TW9kaWZpZXJzLCBib29sIGVuYWJsZSkKIHsKLSAgICAvLyBXcml0ZSBtZS4K
IH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaFBvaW50UmFkaXVzKGludCByYWRp
dXNYLCBpbnQgcmFkaXVzWSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNl
bmRlclByb3h5Ojp0b3VjaFN0YXJ0KCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBF
dmVudFNlbmRlclByb3h5Ojp0b3VjaE1vdmUoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2
b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoRW5kKCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0K
IAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaENhbmNlbCgpCiB7Ci0gICAgLy8gV3JpdGUg
bWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y2xlYXJUb3VjaFBvaW50cygpCiB7Ci0g
ICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNo
UG9pbnQoaW50IGluZGV4KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQogewotICAgIC8vIFdyaXRlIG1l
LgogfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFj
Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJp
bGl0eUNvbW1vbk1hYy5tbQppbmRleCAyNWUwYzNkMDBlNDliYjJiNWVkMjAzZTE5MGNmMWVjYzkw
ZGYzYWY0Li4zNTRhOGY2NTU1YzZjMDAyNjVmNTY4MWE2YjM3MTUyYTg0YTU2MmMwIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmls
aXR5Q29tbW9uTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBv
cnQgIkFjY2Vzc2liaWxpdHlDb21tb25NYWMuaCIKIAogI2ltcG9ydCAiSlNXcmFwcGVyLmgiCisj
aW1wb3J0ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3Ry
aW5nUmVmQ0YuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogCkBAIC02MSwyNiArNjIsMjIg
QEAgQ2xhc3Mgd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJu
IGNsczsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgbWFrZUFycmF5UmVmRm9yQXJyYXkoSlNDb250
ZXh0UmVmIGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQorc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VK
U0FycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0FycmF5ICphcnJheSkKIHsKICAgICBOU1VJ
bnRlZ2VyIGNvdW50ID0gYXJyYXkuY291bnQ7CiAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbY291
bnRdOwotCiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAg
ICAgYXJndW1lbnRzW2ldID0gbWFrZVZhbHVlUmVmRm9yVmFsdWUoY29udGV4dCwgW2FycmF5IG9i
amVjdEF0SW5kZXg6aV0pOwotCiAgICAgcmV0dXJuIEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQs
IGNvdW50LCBhcmd1bWVudHMsIG51bGxwdHIpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBtYWtl
T2JqZWN0UmVmRm9yRGljdGlvbmFyeShKU0NvbnRleHRSZWYgY29udGV4dCwgTlNEaWN0aW9uYXJ5
ICpkaWN0aW9uYXJ5KQorc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VKU09iamVjdChKU0NvbnRleHRS
ZWYgY29udGV4dCwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQogewotICAgIEpTT2JqZWN0UmVm
IG9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBudWxscHRyLCBudWxscHRyKTsKLQorICAg
IGF1dG8gb2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIpOwog
ICAgIFtkaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TU3Ry
aW5nICprZXksIGlkIG9iaiwgQk9PTCAqKSB7CiAgICAgICAgIGlmIChKU1ZhbHVlUmVmIHByb3Bl
cnR5VmFsdWUgPSBtYWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBvYmopKQogICAgICAgICAg
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIFtrZXkgY3JlYXRlSlNTdHJp
bmdSZWZdLmdldCgpLCBwcm9wZXJ0eVZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51
bGxwdHIpOwogICAgIH1dOwotCiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIApAQCAtOTYsOSArOTMs
OSBAQCBKU1ZhbHVlUmVmIG1ha2VWYWx1ZVJlZkZvclZhbHVlKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBpZCB2YWx1ZSkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6d2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJDbGFzcygpXSkKICAgICAgICAgcmV0dXJuIHRvSlMoY29udGV4dCwgV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVs
ZW1lbnQ+KHZhbHVlKSkucHRyKCkpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNE
aWN0aW9uYXJ5IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBtYWtlT2JqZWN0UmVmRm9yRGljdGlv
bmFyeShjb250ZXh0LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBtYWtlSlNPYmplY3QoY29udGV4
dCwgdmFsdWUpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11d
KQotICAgICAgICByZXR1cm4gbWFrZUFycmF5UmVmRm9yQXJyYXkoY29udGV4dCwgdmFsdWUpOwor
ICAgICAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgdmFsdWUpOwogICAgIHJldHVybiBu
dWxscHRyOwogfQogCkBAIC0xMTUsMjggKzExMiwxNiBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFBy
ZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRS
ZQogCiAgICAgaWYgKHNlYXJjaEtleSkgewogICAgICAgICBpZCBzZWFyY2hLZXlQYXJhbWV0ZXIg
PSBuaWw7Ci0gICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoS2V5KSkg
ewotICAgICAgICAgICAgYXV0byBzZWFyY2hLZXlTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIHNlYXJjaEtleSwgbnVsbHB0cikpOwotICAgICAgICAgICAgaWYgKHNl
YXJjaEtleVN0cmluZykKLSAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNT
dHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZy5nZXQoKV07Ci0gICAg
ICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsKKyAg
ICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hLZXkpKQorICAgICAgICAg
ICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gdG9XVEZTdHJpbmcoY29udGV4dCwgc2VhcmNoS2V5KTsK
KyAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsK
ICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHQsIHNlYXJjaEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFy
Y2hLZXlBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlT
dHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwot
ICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJp
bmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleUFycmF5TGVuZ3Ro
VmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFs
dWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZh
bHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaEtleUFycmF5TGVu
Z3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXkpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaEtleUFycmF5TGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleVZhbHVlID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXksIGksIG51bGxwdHIpOwotICAgICAg
ICAgICAgICAgIEpTU3RyaW5nUmVmIHNlYXJjaEtleVN0cmluZyA9IEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgc2VhcmNoS2V5VmFsdWUsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgIGlm
IChzZWFyY2hLZXlTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hLZXlQ
YXJhbWV0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICAgICAgICAgICAgICBbc2VhcmNoS2V5UGFy
YW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtl
eVN0cmluZ11dOwotICAgICAgICAgICAgICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2VhcmNoS2V5
U3RyaW5nKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXV0byBzZWFyY2hL
ZXkgPSB0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250
ZXh0LCBzZWFyY2hLZXlBcnJheSwgaSwgbnVsbHB0cikpOworICAgICAgICAgICAgICAgIGlmICgh
c2VhcmNoS2V5UGFyYW1ldGVyKQorICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0
ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgICAgICAgICAgICAgIFtzZWFyY2hLZXlQ
YXJhbWV0ZXIgYWRkT2JqZWN0OnNlYXJjaEtleV07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHNlYXJjaEtleVBhcmFtZXRlcikKQEAgLTE0NCwxMCArMTI5LDkgQEAgTlNE
aWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNo
Q3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICB9CiAKICAgICBpZiAoc2VhcmNoVGV4dCAmJiBKU1N0
cmluZ0dldExlbmd0aChzZWFyY2hUZXh0KSkKLSAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1
dGUgc2V0T2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoVGV4dF0g
Zm9yS2V5OkAiQVhTZWFyY2hUZXh0Il07CisgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRl
IHNldE9iamVjdDp0b1dURlN0cmluZyhzZWFyY2hUZXh0KSBmb3JLZXk6QCJBWFNlYXJjaFRleHQi
XTsKIAogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKHZpc2libGVPbmx5
KSBmb3JLZXk6QCJBWFZpc2libGVPbmx5Il07Ci0KICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0
ZSBzZXRPYmplY3Q6QChpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkpIGZvcktleTpAIkFYSW1tZWRp
YXRlRGVzY2VuZGFudHNPbmx5Il07CiAKICAgICByZXR1cm4gcGFyYW1ldGVyaXplZEF0dHJpYnV0
ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFj
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KaW5kZXggOTEz
YWUwZjc1Y2RiNGVkNWRlZGRlYjkyNWY2Yzk1MDE4ZGRkMTcwNC4uYTg4N2RlNWM4NWQ1MDI4NGZk
MjQ0NzEyNTE2ZTg5Yzk5OGMzYWE1ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXJNYWMubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25IYW5kbGVyLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZS5oIgogI2ltcG9y
dCAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L1dLQnVuZGxl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGVQYWdlLmg+CkBAIC05Niw3ICs5Nyw3IEBAIHN0
YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoaWQgb2JqLCBOU1N0cmluZyAqaWRBdHRy
aWJ1dGUpCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmlidXRlKQog
ewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBQbGF0Zm9ybVVJRWxlbWVudCByb290ID0gc3RhdGlj
X2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFnZSkp
OwogCiAgICAgUmV0YWluUHRyPGlkPiByZXN1bHQ7CkBAIC0xMTEsNyArMTEyLDcgQEAgUmVmUHRy
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3Np
YmxlRWxlbWVudEJ5SWQoSlMKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQogewotICAgIHJldHVybiBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibWFjIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpT
U3RyaW5nKCJtYWMiKTsKIH0KIAogLy8gQVhUaHJlYWQgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IDUwYjNlMDIyMGI4ZDEyMmFk
MjJiYzk2ZDQyNGNmZDgzMzFiNjVmNTkuLjJlZmY0NTRlNjY3OTFkNjk4Zjk1YmVjNzY5NGEwOWZi
MmNjZjBhMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQpA
QCAtMzIsNyArMzIsNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgogI2lt
cG9ydCAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlUGFnZS5oIgot
CisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8QXBwS2l0L05TQWNjZXNzaWJpbGl0eS5o
PgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9KU1N0cmluZ1JlZkNGLmg+CkBAIC04NywxMSArODcsNiBAQCBAZW5kCiAKIG5hbWVzcGFj
ZSBXVFIgewogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKQotewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KG51bGxwdHIsIDApKTsKLX0KLQogUmVmUHRyPEFjY2Vzc2liaWxpdHlDb250cm9sbGVyPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzX2NvbnRyb2xsZXI7CiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKQEAgLTIwNiw3ICsyMDEsNyBA
QCBzdGF0aWMgTlNTdHJpbmcqIGRlc2NyaXB0aW9uT2ZWYWx1ZShpZCB2YWx1ZU9iamVjdCwgaWQg
ZWxlbWVudCkKIAogc3RhdGljIE5TU3RyaW5nICphdHRyaWJ1dGVzT2ZFbGVtZW50KGlkIGFjY2Vz
c2liaWxpdHlPYmplY3QpCiB7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGF0dHJpYnV0ZXMgPSBz
dXBwb3J0ZWRBdHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QpOworICAgIGF1dG8gYXR0cmli
dXRlcyA9IHN1cHBvcnRlZEF0dHJpYnV0ZXMoYWNjZXNzaWJpbGl0eU9iamVjdCk7CiAKICAgICBO
U011dGFibGVTdHJpbmcqIGF0dHJpYnV0ZXNTdHJpbmcgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmlu
Z107CiAgICAgZm9yIChOU1N0cmluZyogYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMuZ2V0KCkpIHsK
QEAgLTIyNywxNiArMjIyLDEzIEBAIHN0YXRpYyBOU1N0cmluZyAqYXR0cmlidXRlc09mRWxlbWVu
dChpZCBhY2Nlc3NpYmlsaXR5T2JqZWN0KQogICAgIHJldHVybiBhdHRyaWJ1dGVzU3RyaW5nOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIEpTVmFsdWVSZWYgY29udmVydFZlY3Rv
clRvT2JqZWN0QXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIFZlY3RvcjxUPiBjb25zdCYgZWxl
bWVudHMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgSlNPYmplY3RSZWYgbWFrZUpTQXJy
YXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxUPiYgZWxlbWVudHMpCiB7Ci0g
ICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAs
IDAsIDApOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIGFycmF5UmVzdWx0LCAwKTsKKyAgICBhdXRvIGFycmF5ID0gSlNPYmplY3RNYWtlQXJyYXko
Y29udGV4dCwgMCwgMCwgMCk7CiAgICAgc2l6ZV90IGVsZW1lbnRDb3VudCA9IGVsZW1lbnRzLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVsZW1lbnRDb3VudDsgKytpKQotICAg
ICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwgaSwgSlNP
YmplY3RNYWtlKGNvbnRleHQsIGVsZW1lbnRzW2ldLT53cmFwcGVyQ2xhc3MoKSwgZWxlbWVudHNb
aV0uZ2V0KCkpLCAwKTsKLQotICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAgICAgICAgSlNPYmpl
Y3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFrZShjb250
ZXh0LCBlbGVtZW50c1tpXS0+d3JhcHBlckNsYXNzKCksIGVsZW1lbnRzW2ldLmdldCgpKSwgMCk7
CisgICAgcmV0dXJuIGFycmF5OwogfQogCiBzdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IGNvbmNhdGVuYXRlQXR0cmlidXRlQW5kVmFsdWUoTlNTdHJpbmcqIGF0dHJpYnV0ZSwgTlNTdHJp
bmcqIHZhbHVlKQpAQCAtMjczLDI1ICsyNjUsMTMgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqc2Vs
ZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRleHRSZWYgY28K
ICAgICAKICAgICBpZiAoc2VhcmNoU3RyaW5ncykgewogICAgICAgICBOU011dGFibGVBcnJheSAq
c2VhcmNoU3RyaW5nc1BhcmFtZXRlciA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAg
IGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAgICAg
ICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cikpOwotICAgICAgICAgICAgaWYgKHNlYXJj
aFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIg
YWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0
cmluZy5nZXQoKV1dOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKEpTVmFsdWVJc09iamVj
dChjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgeworICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5n
KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKQorICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJh
bWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpXTsKKyAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hTdHJpbmdzQXJyYXkg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cik7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAwOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0gYWRvcHQoSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAgICAgIEpTVmFsdWVS
ZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcuZ2V0KCksIG51
bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlICYm
IEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSkp
Ci0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5n
dGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0
cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKLSAgICAgICAgICAgICAgICBpZiAo
c2VhcmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQ
YXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNo
U3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdW5zaWdu
ZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgc2VhcmNo
U3RyaW5nc0FycmF5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFy
Y2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5n
c1BhcmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmcoY29udGV4dCwgSlNPYmplY3RHZXRQcm9w
ZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSldOwog
ICAgICAgICB9CiAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpzZWFy
Y2hTdHJpbmdzUGFyYW1ldGVyIGZvcktleTpAIkFYU2VsZWN0VGV4dFNlYXJjaFN0cmluZ3MiXTsK
ICAgICB9CkBAIC0zMTQsMjQgKzI5NCwxMyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpzZWFyY2hU
ZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJlZiBjbwogCiAg
ICAgaWYgKHNlYXJjaFN0cmluZ3MpIHsKICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnNlYXJjaFN0
cmluZ3NQYXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICBpZiAoSlNW
YWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBhdXRv
IHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdz
U3RyaW5nKQotICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVj
dDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0
KCldXTsKLSAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNo
U3RyaW5ncykpIHsKKyAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hT
dHJpbmdzKSkKKyAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDp0
b1dURlN0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKV07CisgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAgICAgICAgICAgdW5zaWduZWQg
c2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gMDsKLQotICAgICAgICAgICAgYXV0byBsZW5ndGhQ
cm9wZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5n
dGgiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGxl
bmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmIChzZWFy
Y2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2Vh
cmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaFN0cmlu
Z3NBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLQotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRvcHQo
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAg
IFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpT
U3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IGFycmF5TGVuZ3Ro
KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpCisgICAgICAgICAgICAg
ICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNvbnRleHQs
IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwg
aSwgbnVsbHB0cikpXTsKICAgICAgICAgfQogICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0
ZSBzZXRPYmplY3Q6c2VhcmNoU3RyaW5nc1BhcmFtZXRlciBmb3JLZXk6QCJBWFNlYXJjaFRleHRT
ZWFyY2hTdHJpbmdzIl07CiAgICAgfQpAQCAtNDAxLDcgKzM3MCw3IEBAIEpTVmFsdWVSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SGVhZGVycygpIGNvbnN0CiAgICAgaWQgdmFsdWUgPSBh
dHRyaWJ1dGVWYWx1ZShtX2VsZW1lbnQuZ2V0KCksIE5TQWNjZXNzaWJpbGl0eVJvd0hlYWRlclVJ
RWxlbWVudHNBdHRyaWJ1dGUpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJh
eSBjbGFzc11dKQogICAgICAgICBlbGVtZW50cyA9IG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ+Pih2YWx1ZSk7Ci0gICAgcmV0dXJuIGNvbnZlcnRWZWN0b3JUb09iamVj
dEFycmF5PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4oY29udGV4dCwgZWxlbWVudHMp
OworICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0LCBlbGVtZW50cyk7CiAgICAgRU5EX0FY
X09CSkNfRVhDRVBUSU9OUwogfQogCkBAIC00MTUsNyArMzg0LDcgQEAgSlNWYWx1ZVJlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzKCkgY29uc3QKICAgICBpZCB2YWx1ZSA9
IGF0dHJpYnV0ZVZhbHVlKG1fZWxlbWVudC5nZXQoKSwgTlNBY2Nlc3NpYmlsaXR5Q29sdW1uSGVh
ZGVyVUlFbGVtZW50c0F0dHJpYnV0ZSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltO
U0FycmF5IGNsYXNzXV0pCiAgICAgICAgIGVsZW1lbnRzID0gbWFrZVZlY3RvcjxSZWZQdHI8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4+KHZhbHVlKTsKLSAgICByZXR1cm4gY29udmVydFZlY3RvclRv
T2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pihjb250ZXh0LCBlbGVt
ZW50cyk7CisgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNvbnRleHQsIGVsZW1lbnRzKTsKICAgICBF
TkRfQVhfT0JKQ19FWENFUFRJT05TCiB9CiAgICAgCkBAIC02MDcsNyArNTc2LDcgQEAgSlNWYWx1
ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0ZVZhbHVl
KEpTU3RyaW5nUmVmIGF0dHIKIAogICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4+IGVsZW1lbnRzOwogICAgIGdldFVJRWxlbWVudHNXaXRoQXR0cmlidXRlKGF0dHJpYnV0
ZSwgZWxlbWVudHMpOwotICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheTxSZWZQ
dHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KGNvbnRleHQsIGVsZW1lbnRzKTsKKyAgICByZXR1
cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgZWxlbWVudHMpOwogfQogCiBSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXR0cmlidXRl
VmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKSBjb25zdApAQCAtOTc2LDcgKzk0NSw2IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZCgpIGNvbnN0CiAKIGJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0CiB7Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTIyOSw3
ICsxMTk3LDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWFyY2hUZXh0
V2l0aENyaXRlcmlhKEpTQ29udGV4dFJlZiBjb250ZXh0LAogICAgIE5TRGljdGlvbmFyeSAqcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSA9IHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9y
Q3JpdGVyaWEoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgc3RhcnRGcm9tLCBkaXJlY3Rpb24pOwog
ICAgIGlkIHJlc3VsdCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAi
QVhTZWFyY2hUZXh0V2l0aENyaXRlcmlhIiBmb3JQYXJhbWV0ZXI6cGFyYW1ldGVyaXplZEF0dHJp
YnV0ZV07CiAgICAgaWYgKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQot
ICAgICAgICByZXR1cm4gY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2U+Pihjb250ZXh0LCBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlclJhbmdlPj4ocmVzdWx0KSk7CisgICAgICAgIHJldHVybiBtYWtlSlNB
cnJheShjb250ZXh0LCBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJh
bmdlPj4ocmVzdWx0KSk7CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogCiAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0xNTQ2LDEzICsxNTE0LDExIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0CiB7Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7
CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKQEAgLTE1NjIs
OCArMTUyOCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05T
U3RyaW5nIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZd
OwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1w
dHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQpA
QCAtMTU3Myw4ICsxNTM4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6
W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJpbmdS
ZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICByZXR1cm4gY3JlYXRl
RW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkKQEAgLTE1
ODMsNyArMTU0Nyw2IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp1cmwoKQogICAgIE5TVVJMICp1cmwgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdOwogICAgIHJldHVybiBb
W3VybCBhYnNvbHV0ZVN0cmluZ10gY3JlYXRlSlNTdHJpbmdSZWZdOyAgICAKICAgICBFTkRfQVhf
T0JKQ19FWENFUFRJT05TCi0gICAgCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTE2MjIs
NyArMTU4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBj
b25zdAogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwogICAgIHJlc3VsdCA9IFttX2VsZW1l
bnQgYWNjZXNzaWJpbGl0eUlzQXR0cmlidXRlU2V0dGFibGU6TlNBY2Nlc3NpYmlsaXR5Rm9jdXNl
ZEF0dHJpYnV0ZV07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwotICAgIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTE2NDgsMTkgKzE2MTAsMTYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
T2ZmU2NyZWVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2VkKCkg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkBAIC0xNjc1LDEzICsxNjM0LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJ
Z25vcmVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NpbmdsZUxp
bmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aUxpbmUoKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3
MTQsMTcgKzE2NzEsMTQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMo
KQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24oKQogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
ZGRTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKIH0KIAogLy8gVGV4dCBtYXJrZXJzCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCA0
MDNmNGZmODMyZWUwZWY3YzNjZmFiZGYwZjg3ZTJjY2JlNjE0ZjhhLi5hZGJiNGI3YjVkNTRmYjE0
YTljNGJkZThhOTIyNzVmMTFjMTQxNmQ5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KQEAgLTQ2LDE2
ICs0NiwxMSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6aW5zcGVjdG9y
VGVzdFN0dWJVUkwoKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgcmV0dXJuIG51bGxw
dHI7CiAjZWxzZQotICAgIENGQnVuZGxlUmVmIGluc3BlY3RvckJ1bmRsZSA9IENGQnVuZGxlR2V0
QnVuZGxlV2l0aElkZW50aWZpZXIoQ0ZTVFIoImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSIpKTsK
KyAgICBhdXRvIGluc3BlY3RvckJ1bmRsZSA9IENGQnVuZGxlR2V0QnVuZGxlV2l0aElkZW50aWZp
ZXIoQ0ZTVFIoImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSIpKTsKICAgICBpZiAoIWluc3BlY3Rv
ckJ1bmRsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxS
ZWY+IHVybCA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoaW5zcGVjdG9yQnVuZGxl
LCBDRlNUUigiVGVzdFN0dWIiKSwgQ0ZTVFIoImh0bWwiKSwgTlVMTCkpOwotICAgIGlmICghdXJs
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENGU3RyaW5nUmVmIHVybFN0cmluZyA9
IENGVVJMR2V0U3RyaW5nKHVybC5nZXQoKSk7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aENGU3RyaW5nKHVybFN0cmluZykpOworICAgIGF1dG8gcmVzb3VyY2VVUkwgPSBhZG9w
dENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKGluc3BlY3RvckJ1bmRsZSwgQ0ZTVFIoIlRlc3RT
dHViIiksIENGU1RSKCJodG1sIiksIE5VTEwpKTsKKyAgICByZXR1cm4gcmVzb3VyY2VVUkwgPyBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlVSTEdldFN0cmluZyhyZXNvdXJjZVVS
TC5nZXQoKSkpKSA6IG51bGxwdHI7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
U3RyaW5nRnVuY3Rpb25zLmgKaW5kZXggMWJjMDVjMGE1ZjNhODA0YzBiMTQxYjg5NjkwYjc1ZDI3
NzEwZTc2MS4uNjdmMzllNjlmMTU0MDhiOTJlYTNhZTk0N2M5ZmE5MmZlZWExMjhjZCAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNCwxNSArMjQsMTIgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFN0cmluZ0Z1bmN0aW9u
c19oCi0jZGVmaW5lIFN0cmluZ0Z1bmN0aW9uc19oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdC5oPgorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dL
UmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0L1dLU3RyaW5nUHJpdmF0ZS5oPgotI2luY2x1ZGUgPFdlYktpdC9XS1VSTC5oPgogI2luY2x1
ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgpAQCAtNDQsNyArNDEsOCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotLy8gQ29udmVyc2lvbiBm
dW5jdGlvbnMKK1dLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLU3RyaW5nKEpTQ29udGV4dFJl
ZiwgSlNWYWx1ZVJlZik7CitXVEY6OlN0cmluZyB0b1dURlN0cmluZyhKU0NvbnRleHRSZWYsIEpT
VmFsdWVSZWYpOwogCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soSlNTdHJp
bmdSZWYgc3RyaW5nKQogewpAQCAtNTYsOSArNTQsMTQgQEAgaW5saW5lIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB0b1dLKGNvbnN0IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiYgc3RyaW5nKQog
ICAgIHJldHVybiB0b1dLKHN0cmluZy5nZXQoKSk7CiB9CiAKK2lubGluZSBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdG9XSyhjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAgcmV0dXJuIGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7Cit9CisKIGlubGluZSBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKQog
ewotICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmlu
Zy51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJuIHRvV0soc3RyaW5nLnV0ZjgoKS5kYXRhKCkp
OwogfQogCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoV0tTdHJpbmdSZWYg
c3RyaW5nKQpAQCAtOTksNiArMTAyLDI1IEBAIGlubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmlu
Zyhjb25zdCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmluZykKICAgICByZXR1cm4gdG9X
VEZTdHJpbmcoc3RyaW5nLmdldCgpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV1RSCitpbmxpbmUg
V1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKQoreworICAgIHJldHVy
biB0b1dURlN0cmluZyh0b1dLKHN0cmluZykpOworfQogCi0jZW5kaWYgLy8gU3RyaW5nRnVuY3Rp
b25zX2gKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4mIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5nLmdl
dCgpKTsKK30KKworaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLU3RyaW5nKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB0b1dL
KGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSBXVEY6
OlN0cmluZyB0b1dURlN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1
ZSkKK3sKKyAgICAvLyBGSVhNRTogQ291bGQgbWFrZSB0aGlzIGVmZmljaWVudCBieSB1c2luZyB0
aGUgV1RGU3RyaW5nIGluc2lkZSBPcGFxdWVKU1N0cmluZyBpZiB3ZSB3YW50ZWQgdG8uCisgICAg
cmV0dXJuIHRvV1RGU3RyaW5nKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcAppbmRleCAxMzQ1YzQyYzExZTYyZGMwODhjNmYyZDM4Yjk5YjA5MzU2NGUwMTM4Li43NWQ5
ZmI2MDQ0NDE0NWYxZWNkZmFlZmQ5OTA4YWFlMjY4ODU0ZWYzIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkRpY3Rp
b25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJFdmVudFNlbmRlclByb3h5LmgiCiAjaW5jbHVk
ZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2luY2x1ZGUgIlN0
cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6
ZVRocmVhZGluZy5oPgpAQCAtNDk0LDggKzQ5NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6Omlu
aXRpYWxpemUoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKICAgICBXZWJDb3JlVGVzdFN1
cHBvcnQ6Omluc3RhbGxNb2NrR2FtZXBhZFByb3ZpZGVyKCk7CiAjZW5kaWYKIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBwYWdlR3JvdXBJZGVudGlmaWVyID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0VGVzdFJ1bm5lclBhZ2VHcm91cCIpKTsKLSAg
ICBtX3BhZ2VHcm91cC5hZG9wdChXS1BhZ2VHcm91cENyZWF0ZVdpdGhJZGVudGlmaWVyKHBhZ2VH
cm91cElkZW50aWZpZXIuZ2V0KCkpKTsKKyAgICBtX3BhZ2VHcm91cC5hZG9wdChXS1BhZ2VHcm91
cENyZWF0ZVdpdGhJZGVudGlmaWVyKHRvV0soIldlYktpdFRlc3RSdW5uZXJQYWdlR3JvdXAiKS5n
ZXQoKSkpOwogCiAgICAgbV9ldmVudFNlbmRlclByb3h5ID0gbWFrZVVuaXF1ZTxFdmVudFNlbmRl
clByb3h5Pih0aGlzKTsKIH0KQEAgLTUwNyw5ICs1MDYsOSBAQCBXS1JldGFpblB0cjxXS0NvbnRl
eHRDb25maWd1cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29uZmln
dXJhdAogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRGdWxseVN5bmNocm9ub3VzTW9kZUlz
QWxsb3dlZEZvclRlc3RpbmcoY29uZmlndXJhdGlvbi5nZXQoKSwgdHJ1ZSk7CiAgICAgV0tDb250
ZXh0Q29uZmlndXJhdGlvblNldElnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHNGb3JU
ZXN0aW5nKGNvbmZpZ3VyYXRpb24uZ2V0KCksIG9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNz
YWdpbmdUaW1lb3V0cyk7CiAKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gb3Zl
cnJpZGVMYW5ndWFnZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1
dG8gb3ZlcnJpZGVMYW5ndWFnZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwog
ICAgIGZvciAoYXV0byYgbGFuZ3VhZ2UgOiBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzKQotICAg
ICAgICBXS0FycmF5QXBwZW5kSXRlbShvdmVycmlkZUxhbmd1YWdlcy5nZXQoKSwgYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhsYW5ndWFnZS51dGY4KCkuZGF0YSgpKSkuZ2V0
KCkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShvdmVycmlkZUxhbmd1YWdlcy5nZXQoKSwg
dG9XSyhsYW5ndWFnZSkuZ2V0KCkpOwogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRPdmVy
cmlkZUxhbmd1YWdlcyhjb25maWd1cmF0aW9uLmdldCgpLCBvdmVycmlkZUxhbmd1YWdlcy5nZXQo
KSk7CiAKICAgICBpZiAob3B0aW9ucy5zaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlv
bigpKSB7CkBAIC04NDMsMzEgKzg0MiwyNCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFBy
ZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpbwogICAg
IFdLUHJlZmVyZW5jZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0dXJlcyhwcmVmZXJlbmNlcyk7
CiAKICAgICAvLyBTZXQgaW50ZXJuYWwgZmVhdHVyZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBkZWZh
dWx0IHZhbHVlcyBmb3IgdGVzdGluZy4KLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgYXN5bmNPdmVy
Zmxvd1Njcm9sbGluZ0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXN5
bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJu
YWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBhc3luY092ZXJmbG93U2Ny
b2xsaW5nRmVhdHVyZSk7CiAKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgYXN5bmNGcmFtZVNjcm9s
bGluZ0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXN5bmNGcmFtZVNj
cm9sbGluZ0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBhc3luY0ZyYW1lU2Nyb2xsaW5nRmVhdHVyZSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVu
Y2VzLCBmYWxzZSwgdG9XSygiQXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQiKS5nZXQoKSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVu
Y2VzLCBmYWxzZSwgdG9XSygiQXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJsZWQiKS5nZXQoKSk7CiAK
ICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9EQVRFKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1
dFR5cGVEYXRlRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1dFR5
cGVEYXRlRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVy
ZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlRGF0ZUZlYXR1cmUpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1
ZSwgdG9XSygiSW5wdXRUeXBlRGF0ZUVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFC
TEUoSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1
dFR5cGVEYXRlVGltZUxvY2FsRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJJbnB1dFR5cGVEYXRlVGltZUxvY2FsRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJ
bnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlRGF0
ZVRpbWVMb2NhbEZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVh
dHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlRGF0ZVRpbWVMb2Nh
bEVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9NT05USCkK
LSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlTW9udGhGZWF0dXJlID0gV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZU1vbnRoRW5hYmxlZCIpOwotICAgIFdLUHJl
ZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwg
aW5wdXRUeXBlTW9udGhGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZU1vbnRoRW5h
YmxlZCIpLmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUUpCi0gICAg
c3RhdGljIFdLU3RyaW5nUmVmIGlucHV0VHlwZVRpbWVGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIklucHV0VHlwZVRpbWVFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5
cGVUaW1lRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJl
Rm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVUaW1lRW5hYmxlZCIpLmdl
dCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1dFRUspCi0gICAgc3RhdGljIFdL
U3RyaW5nUmVmIGlucHV0VHlwZVdlZWtGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIklucHV0VHlwZVdlZWtFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVy
bmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVXZWVrRmVh
dHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHBy
ZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVXZWVrRW5hYmxlZCIpLmdldCgpKTsKICNl
bmRpZgogCiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcm5hbERlYnVnRmVhdHVyZSA6IG9wdGlv
bnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQpAQCAtOTIwLDI1ICs5MTIsMTYgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0
T3B0aW9ucyYgb3B0aW8KICAgICBXS1ByZWZlcmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJhY2tncm91
bmRzSW5EYXJrTW9kZShwcmVmZXJlbmNlcywgb3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3Vu
ZHNJbkRhcmtNb2RlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZUNhY2hlRW5hYmxlZChwcmVm
ZXJlbmNlcywgb3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENhY2hlKTsKIAotICAgIHN0YXRpYyBX
S1N0cmluZ1JlZiBkZWZhdWx0VGV4dEVuY29kaW5nID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIklTTy04ODU5LTEiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0RGVmYXVsdFRleHRFbmNv
ZGluZ05hbWUocHJlZmVyZW5jZXMsIGRlZmF1bHRUZXh0RW5jb2RpbmcpOwotCi0gICAgc3RhdGlj
IFdLU3RyaW5nUmVmIHN0YW5kYXJkRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJUaW1lcyIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBjdXJzaXZlRm9udEZhbWls
eSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsZSBDaGFuY2VyeSIpOwotICAg
IHN0YXRpYyBXS1N0cmluZ1JlZiBmYW50YXN5Rm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJQYXB5cnVzIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGZpeGVkRm9u
dEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDb3VyaWVyIik7Ci0gICAg
c3RhdGljIFdLU3RyaW5nUmVmIHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkFwcGxlIENvbG9yIEVtb2ppIik7Ci0gICAgc3RhdGljIFdLU3RyaW5n
UmVmIHNhbnNTZXJpZkZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SGVsdmV0aWNhIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHNlcmlmRm9udEZhbWlseSA9IFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lcyIpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShwcmVmZXJlbmNlcywgdG9XSygiSVNPLTg4NTktMSIp
LmdldCgpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNTZXRNaW5pbXVtRm9udFNpemUocHJlZmVyZW5j
ZXMsIDApOwotICAgIFdLUHJlZmVyZW5jZXNTZXRTdGFuZGFyZEZvbnRGYW1pbHkocHJlZmVyZW5j
ZXMsIHN0YW5kYXJkRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEN1cnNpdmVGb250
RmFtaWx5KHByZWZlcmVuY2VzLCBjdXJzaXZlRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldEZhbnRhc3lGb250RmFtaWx5KHByZWZlcmVuY2VzLCBmYW50YXN5Rm9udEZhbWlseSk7Ci0g
ICAgV0tQcmVmZXJlbmNlc1NldEZpeGVkRm9udEZhbWlseShwcmVmZXJlbmNlcywgZml4ZWRGb250
RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0UGljdG9ncmFwaEZvbnRGYW1pbHkocHJlZmVy
ZW5jZXMsIHBpY3RvZ3JhcGhGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0U2Fuc1Nl
cmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgc2Fuc1NlcmlmRm9udEZhbWlseSk7Ci0gICAgV0tQ
cmVmZXJlbmNlc1NldFNlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgc2VyaWZGb250RmFtaWx5
KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0U3RhbmRhcmRGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0
b1dLKCJUaW1lcyIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q3Vyc2l2ZUZvbnRGYW1p
bHkocHJlZmVyZW5jZXMsIHRvV0soIkFwcGxlIENoYW5jZXJ5IikuZ2V0KCkpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRGYW50YXN5Rm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiUGFweXJ1cyIp
LmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Rml4ZWRGb250RmFtaWx5KHByZWZlcmVuY2Vz
LCB0b1dLKCJDb3VyaWVyIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRQaWN0b2dyYXBo
Rm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiQXBwbGUgQ29sb3IgRW1vamkiKS5nZXQoKSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldFNhbnNTZXJpZkZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRv
V0soIkhlbHZldGljYSIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0U2VyaWZGb250RmFt
aWx5KHByZWZlcmVuY2VzLCB0b1dLKCJUaW1lcyIpLmdldCgpKTsKICAgICBXS1ByZWZlcmVuY2Vz
U2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsK
ICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgIFdLUHJlZmVyZW5jZXNTZXRNZWRpYVNvdXJj
ZUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwpAQCAtMTAxMCwzOCArOTkzLDI3IEBAIGJvb2wg
VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9w
dGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQobV9tYWlu
V2ViVmlldy0+cGFnZSgpLCBudWxscHRyKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJl
c2V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IHJlc2V0TWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgYXV0
byByZXNldE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZEdDS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2hvdWxkR0MiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBzaG91bGRHQ1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
bV9nY0JldHdlZW5UZXN0cykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0ocmVzZXRNZXNzYWdl
Qm9keS5nZXQoKSwgc2hvdWxkR0NLZXkuZ2V0KCksIHNob3VsZEdDVmFsdWUuZ2V0KCkpOworICAg
IHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJTaG91bGRHQyIsIG1fZ2NCZXR3ZWVuVGVzdHMp
OwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsbG93ZWRIb3N0c0tleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFsbG93ZWRIb3N0cyIpKTsKLSAgICBX
S1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gYWxsb3dlZEhvc3RzVmFsdWUgPSBhZG9wdFdL
KFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIGZvciAoYXV0byYgaG9zdCA6IG1fYWxsb3dl
ZEhvc3RzKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0hvc3QgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGhvc3QuY19zdHIoKSkpOwotICAgICAg
ICBXS0FycmF5QXBwZW5kSXRlbShhbGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSwgd2tIb3N0LmdldCgp
KTsKLSAgICB9Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5LmdldCgp
LCBhbGxvd2VkSG9zdHNLZXkuZ2V0KCksIGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpKTsKKyAgICBh
dXRvIGFsbG93ZWRIb3N0c1ZhbHVlID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsK
KyAgICBmb3IgKGF1dG8mIGhvc3QgOiBtX2FsbG93ZWRIb3N0cykKKyAgICAgICAgV0tBcnJheUFw
cGVuZEl0ZW0oYWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCksIHRvV0soaG9zdC5jX3N0cigpKS5nZXQo
KSk7CisgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkFsbG93ZWRIb3N0cyIsIGFsbG93
ZWRIb3N0c1ZhbHVlLmdldCgpKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVE
X1RSRUUpCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4SXNvbGF0ZWRNb2RlS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWNjZXNzaWJpbGl0eUlzb2xh
dGVkVHJlZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGF4SXNvbGF0ZWRNb2Rl
VmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRy
ZWVNb2RlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5LmdldCgp
LCBheElzb2xhdGVkTW9kZUtleS5nZXQoKSwgYXhJc29sYXRlZE1vZGVWYWx1ZS5nZXQoKSk7Cisg
ICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWUi
LCBtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKTsKICNlbmRpZgotICAgIAotICAgIGlm
IChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3RoKCkpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGpzY09wdGlvbnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJKU0NPcHRpb25zIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
anNjT3B0aW9uc1ZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhv
cHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSkpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCksIGpzY09wdGlvbnNLZXkuZ2V0KCksIGpzY09wdGlvbnNW
YWx1ZS5nZXQoKSk7Ci0gICAgfQorCisgICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5sZW5ndGgo
KSkKKyAgICAgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkpTQ09wdGlvbnMiLCBvcHRp
b25zLmpzY09wdGlvbnMuY19zdHIoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXZWJD
b3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGlu
ZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOwogI2VuZGlm
CiAKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHJl
c2V0TWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1
bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0
b1dLKCJSZXNldCIpLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsKIAogICAgIFdLQ29u
dGV4dFNldFNob3VsZFVzZUZvbnRTbW9vdGhpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmNvbnRleHQoKSwgZmFsc2UpOwogCkBAIC0xMjAzLDggKzExNzUsNyBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjp1cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KCkKIAogICAgIEFzeW5jVGFzayhb
XSgpIHsKICAgICAgICAgLy8gQWZ0ZXIgZWFjaCB0ZXN0LCB3ZSB1cGRhdGUgdGhlIGxpc3Qgb2Yg
bGl2ZSBkb2N1bWVudHMgc28gdGhhdCB3ZSBjYW4gZGV0ZWN0IHdoZW4gYW4gYWJhbmRvbmVkIGRv
Y3VtZW50IGZpcnN0IHNob3dlZCB1cC4KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0
TGl2ZURvY3VtZW50cyIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIHRvV0soIkdldExpdmVEb2N1bWVudHMiKS5nZXQoKSwgbnVsbHB0cik7CiAgICAgfSwg
NV9zKS5ydW4oKTsKIH0KIApAQCAtMTIxNSw4ICsxMTg2LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6Y2hlY2tGb3JXb3JsZExlYWtzKCkKIAogICAgIEFzeW5jVGFzayhbXSgpIHsKICAgICAgICAg
Ly8gVGhpcyBydW5zIGF0IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgdGVzdHMuIEl0IGNsZWFycyBj
YWNoZXMsIHJ1bnMgYSBHQyBhbmQgdGhlbiBmZXRjaGVzIHRoZSBsaXN0IG9mIGRvY3VtZW50cy4K
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2hlY2tGb3JXb3JsZExlYWtzIikpOwotICAg
ICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIpOworICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygiQ2hlY2tGb3JX
b3JsZExlYWtzIikuZ2V0KCksIG51bGxwdHIpOwogICAgIH0sIDIwX3MpLnJ1bigpOwogfQogCkBA
IC0xMzI0LDYgKzEyOTQsNyBAQCBjb25zdCBjaGFyKiBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1By
b2Nlc3NOYW1lKCkKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKKwogdm9pZCBUZXN0Q29udHJv
bGxlcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCBhbGxvd3MpCiB7CiAgICAgbV9h
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGFsbG93czsKQEAgLTE0MDAsOCArMTM3MSw4IEBAIHN0
YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYg
dmFsdWUpCiAKIHN0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFz
UmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcm
IHBhdGhPclVSTCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gYmFzZVVSTCA9IGFkb3B0
V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpOwotICAgIFdLUmV0YWluUHRyPFdL
VVJMUmVmPiByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNl
VVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7CisgICAgYXV0byBiYXNlVVJMID0gYWRvcHRXSyhj
cmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7CisgICAgYXV0byByZWxhdGl2ZVVSTCA9
IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0
cigpKSk7CiAgICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVS
TC5nZXQoKSkpKTsKIH0KIApAQCAtMTQxNSw4ICsxMzg2LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRl
VGVzdE9wdGlvbnNGcm9tVGVzdEhlYWRlcihUZXN0T3B0aW9ucyYgdGVzdE9wdGlvbnMsIGNvbnN0
IHN0ZDoKICAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZSA9IGFic29sdXRlUGF0aDsKICAgICBpZiAo
ZmlsZW5hbWUuZW1wdHkoKSkgewogICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2UgY29u
dmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhP
clVSTC5jX3N0cigpKSk7Ci0gICAgICAgIGZpbGVuYW1lID0gdGVzdFBhdGgod2tVUkwuZ2V0KCkp
OworICAgICAgICBmaWxlbmFtZSA9IHRlc3RQYXRoKGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRo
T3JVUkwuY19zdHIoKSkpLmdldCgpKTsKICAgICB9CiAKICAgICBpZiAoZmlsZW5hbWUuZW1wdHko
KSkKQEAgLTE2MTUsNiArMTU4NSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZVZp
ZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogfQogCiAjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykgJiYgIVBMQVRGT1JNKENPQ09BKQorCiBzdHJ1Y3QgQ29udGVudEV4
dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0IHsKICAgICBleHBsaWNpdCBDb250ZW50RXh0ZW5z
aW9uU3RvcmVDYWxsYmFja0NvbnRleHQoVGVzdENvbnRyb2xsZXImIGNvbnRyb2xsZXIpCiAgICAg
ICAgIDogdGVzdENvbnRyb2xsZXIoY29udHJvbGxlcikKQEAgLTE2NDIsMTUgKzE2MTMsOSBAQCBz
dGF0aWMgc3RkOjpzdHJpbmcgY29udGVudEV4dGVuc2lvbkpTT05QYXRoKFdLVVJMUmVmIHVybCkK
ICAgICBpZiAocGF0aC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHBhdGggKyAiLmpzb24iOwog
Ci0gICAgYXV0byBwID0gYWRvcHRXSyhXS1VSTENvcHlQYXRoKHVybCkpOwotICAgIGF1dG8gYnVm
ZmVyID0gc3RkOjp2ZWN0b3I8Y2hhcj4oV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXpl
KHAuZ2V0KCkpKTsKLSAgICBjb25zdCBhdXRvIGxlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJp
bmcocC5nZXQoKSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0gICAgcmV0dXJuIHN0
ZDo6c3RyaW5nKCJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzIikgKyBzdGQ6OnN0cmluZyhidWZmZXIu
ZGF0YSgpLCBsZW5ndGggLSAxKSArICIuanNvbiI7CisgICAgcmV0dXJuICJMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzIiArIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aCh1cmwpKS5nZXQoKSkgKyAi
Lmpzb24iOwogfQotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0jaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRF
eHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogewogICAgIGNvbnN0
IGNoYXIqIGNvbnRlbnRFeHRlbnNpb25zUGF0aCA9IGxpYnJhcnlQYXRoRm9yVGVzdGluZygpOwpA
QCAtMTY3MCwxMyArMTYzNSwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250
ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdAogICAgIH0KIAog
ICAgIHN0ZDo6c3RyaW5nIGpzb25GaWxlQ29udGVudHMge3N0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRv
cjxjaGFyPihqc29uRmlsZSksIHN0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPigpfTsKLSAg
ICBhdXRvIGpzb25Tb3VyY2UgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KGpzb25GaWxlQ29udGVudHMuY19zdHIoKSkpOworICAgIGF1dG8ganNvblNvdXJjZSA9IHRvV0so
anNvbkZpbGVDb250ZW50cy5jX3N0cigpKTsKIAotICAgIGF1dG8gc3RvcmVQYXRoID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250ZW50RXh0ZW5zaW9uc1BhdGgpKTsK
KyAgICBhdXRvIHN0b3JlUGF0aCA9IHRvV0soY29udGVudEV4dGVuc2lvbnNQYXRoKTsKICAgICBh
dXRvIGV4dGVuc2lvblN0b3JlID0gYWRvcHRXSyhXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVD
cmVhdGUoc3RvcmVQYXRoLmdldCgpKSk7CiAgICAgQVNTRVJUKGV4dGVuc2lvblN0b3JlKTsKIAot
ICAgIGF1dG8gZmlsdGVySWRlbnRpZmllciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRlc3RDb250ZW50RXh0ZW5zaW9uIikpOworICAgIGF1dG8gZmlsdGVySWRlbnRp
ZmllciA9IHRvV0soIlRlc3RDb250ZW50RXh0ZW5zaW9uIik7CiAKICAgICBDb250ZW50RXh0ZW5z
aW9uU3RvcmVDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7CiAgICAgV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlQ29tcGlsZShleHRlbnNpb25TdG9yZS5nZXQoKSwgZmlsdGVySWRlbnRp
Zmllci5nZXQoKSwganNvblNvdXJjZS5nZXQoKSwgJmNvbnRleHQsIGNvbnRlbnRFeHRlbnNpb25T
dG9yZUNhbGxiYWNrKTsKQEAgLTE3MDEsMTggKzE2NjYsMjIgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6cmVzZXRDb250ZW50RXh0ZW5zaW9ucygpCiAKICAgICBXS1VzZXJDb250ZW50Q29udHJvbGxl
clJlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVycyh1c2VyQ29udGVudENvbnRyb2xsZXIoKSk7CiAK
LSAgICBhdXRvIHN0b3JlUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoY29udGVudEV4dGVuc2lvbnNQYXRoKSk7CisgICAgYXV0byBzdG9yZVBhdGggPSB0b1dLKGNv
bnRlbnRFeHRlbnNpb25zUGF0aCk7CiAgICAgYXV0byBleHRlbnNpb25TdG9yZSA9IGFkb3B0V0so
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ3JlYXRlKHN0b3JlUGF0aC5nZXQoKSkpOwogICAg
IEFTU0VSVChleHRlbnNpb25TdG9yZSk7CiAKLSAgICBhdXRvIGZpbHRlcklkZW50aWZpZXIgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXN0Q29udGVudEV4dGVuc2lv
biIpKTsKKyAgICBhdXRvIGZpbHRlcklkZW50aWZpZXIgPSB0b1dLKCJUZXN0Q29udGVudEV4dGVu
c2lvbiIpOwogCiAgICAgQ29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0IGNvbnRl
eHQoKnRoaXMpOwogICAgIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZShleHRlbnNp
b25TdG9yZS5nZXQoKSwgZmlsdGVySWRlbnRpZmllci5nZXQoKSwgJmNvbnRleHQsIGNvbnRlbnRF
eHRlbnNpb25TdG9yZUNhbGxiYWNrKTsKICAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5vVGlt
ZW91dCk7CiAgICAgQVNTRVJUKCFjb250ZXh0LmZpbHRlcik7CiB9Ci0jZWxzZSAvLyBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykgJiYgIVBMQVRGT1JNKENPQ09BKQorCisjaWYgIUVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
CisKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0
KGNvbnN0IFRlc3RJbnZvY2F0aW9uJikKIHsKIH0KQEAgLTE3MjAsMTQgKzE2ODksMTMgQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3Qg
VGVzdEludm9jYXRpb24mKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50RXh0ZW5z
aW9ucygpCiB7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSNlbmRp
ZiAvLyAhUExBVEZPUk0oQ09DT0EpCisKKyNlbmRpZiAvLyAhRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKIAogY2xhc3MgQ29tbWFuZFRva2VuaXplciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQg
Q29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCiAgICAgICAgIDogbV9p
bnB1dChpbnB1dCkKLSAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKICAgICB7CiAgICAg
ICAgIHB1bXAoKTsKICAgICB9CkBAIC0xNzQwLDcgKzE3MDgsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAnXCcnOwogICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiBtX2lucHV0OwogICAgIHN0ZDo6c3RyaW5nIG1fbmV4dDsKLSAgICBzaXplX3QgbV9wb3NOZXh0
U2VwYXJhdG9yOworICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3IgeyAwIH07CiB9OwogCiB2
b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAoKQpAQCAtMTgxNCw4ICsxNzgyLDcgQEAgYm9vbCBU
ZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKiBpbnB1dExpbmUpCiAgICAgCiAgICAg
VGVzdE9wdGlvbnMgb3B0aW9ucyA9IHRlc3RPcHRpb25zRm9yVGVzdChjb21tYW5kKTsKIAotICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVSTChjb21t
YW5kLnBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IG1ha2VV
bmlxdWU8VGVzdEludm9jYXRpb24+KHdrVVJMLmdldCgpLCBvcHRpb25zKTsKKyAgICBtX2N1cnJl
bnRJbnZvY2F0aW9uID0gbWFrZVVuaXF1ZTxUZXN0SW52b2NhdGlvbj4oYWRvcHRXSyhjcmVhdGVU
ZXN0VVJMKGNvbW1hbmQucGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSwgb3B0aW9ucyk7CiAKICAg
ICBpZiAoY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzIHx8IG1fc2hvdWxkRHVtcFBpeGVsc0ZvckFs
bFRlc3RzKQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRJc1BpeGVsVGVzdChjb21t
YW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKQEAgLTE5NDQsMTggKzE5MTEsOSBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpncHVQcm9jZXNzRGlkQ3Jhc2goV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUHJv
Y2Vzc0lEIHByb2NlcwogICAgIHN0YXRpY19jYXN0PFRlc3RDb250cm9sbGVyKj4oY29uc3RfY2Fz
dDx2b2lkKj4oY2xpZW50SW5mbykpLT5ncHVQcm9jZXNzRGlkQ3Jhc2gocHJvY2Vzc0lEKTsKIH0K
IAotdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnksIGJvb2wgc3lu
Y2hyb25vdXMpCit2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGJvb2wgc3luY2hy
b25vdXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleSIpKTsKLSAgICBXS1N0cmluZ1JlZiBr
ZXkgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGtleUtleS5nZXQoKSkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9
IHN0YXRpY19jYXN0PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBtb2RpZmllcnNLZXkuZ2V0KCkpKSkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGxvY2F0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiTG9jYXRpb24iKSk7Ci0gICAgdW5zaWduZWQgbG9jYXRpb24gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxvY2F0aW9uS2V5LmdldCgp
KSkpKTsKLQotICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+a2V5RG93bihrZXksIG1vZGlmaWVycywg
bG9jYXRpb24pOworICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+a2V5RG93bihzdHJpbmdWYWx1ZShk
aWN0aW9uYXJ5LCAiS2V5IiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSwg
dWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkxvY2F0aW9uIikpOwogfQogCiB2b2lkIFRlc3RDb250
cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50c0xpc3QoV0tBcnJheVJlZiBsaXZlRG9jdW1l
bnRMaXN0KQpAQCAtMTk2NCwxOCArMTkyMiw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJl
Y2VpdmVMaXZlRG9jdW1lbnRzTGlzdChXS0FycmF5UmVmIGxpdmVEb2N1bWVudExpc3QpCiAKICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+IGRvY3VtZW50SW5mbzsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bURvY3VtZW50czsgKytpKSB7Ci0gICAgICAgIFdLVHlwZVJlZiBpdGVt
ID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGxpdmVEb2N1bWVudExpc3QsIGkpOwotICAgICAgICBp
ZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSkg
ewotICAgICAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIGxpdmVEb2N1bWVudEl0ZW0gPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KGl0ZW0pOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gaWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJpZCIpKTsKLSAgICAgICAgICAgIFdLVUludDY0UmVmIGRvY3VtZW50SUQgPSBzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsaXZlRG9jdW1lbnRJdGVt
LCBpZEtleS5nZXQoKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dXJsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidXJsIikpOwot
ICAgICAgICAgICAgV0tTdHJpbmdSZWYgZG9jdW1lbnRVUkwgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsaXZlRG9jdW1lbnRJdGVtLCB1cmxLZXku
Z2V0KCkpKTsKLQotICAgICAgICAgICAgZG9jdW1lbnRJbmZvLmFkZChXS1VJbnQ2NEdldFZhbHVl
KGRvY3VtZW50SUQpLCB0b1dURlN0cmluZyhkb2N1bWVudFVSTCkpOwotICAgICAgICB9CisgICAg
ICAgIGlmIChhdXRvIGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUoV0tBcnJheUdldEl0ZW1B
dEluZGV4KGxpdmVEb2N1bWVudExpc3QsIGkpKSkKKyAgICAgICAgICAgIGRvY3VtZW50SW5mby5h
ZGQodWludDY0VmFsdWUoZGljdGlvbmFyeSwgImlkIiksIHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVl
KGRpY3Rpb25hcnksICJ1cmwiKSkpOwogICAgIH0KIAogICAgIGlmICghZG9jdW1lbnRJbmZvLnNp
emUoKSkgewpAQCAtMjAwNyw2MCArMTk1NSwzNSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRS
ZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQog
ICAgICAgICBpZiAobV9zdGF0ZSAhPSBSdW5uaW5nVGVzdCkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgc3ViTWVzc2FnZU5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1Yk1lc3NhZ2VLZXkuZ2V0
KCkpKTsKLQotICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNz
YWdlTmFtZSwgIk1vdXNlRG93biIpIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3Vi
TWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBidXR0b25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJCdXR0b24iKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBidXR0b24gPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbktleS5nZXQo
KSkpKSk7CisgICAgICAgIGF1dG8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gc3ViTWVzc2FnZU5hbWUgPSBzdHJpbmdWYWx1ZShkaWN0aW9u
YXJ5LCAiU3ViTWVzc2FnZSIpOwogCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
TW9kaWZpZXJzIikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBz
dGF0aWNfY2FzdDxXS0V2ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgbW9kaWZpZXJzS2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9yd2FyZCB0
byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKQotICAgICAgICAgICAgICAgIG1fZXZlbnRT
ZW5kZXJQcm94eS0+bW91c2VEb3duKGJ1dHRvbiwgbW9kaWZpZXJzKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlVXAoYnV0dG9uLCBt
b2RpZmllcnMpOworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJv
eHktPm1vdXNlRG93bih1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiksIHVpbnQ2NFZh
bHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KIAorICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNz
YWdlTmFtZSwgIk1vdXNlVXAiKSkgeworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5t
b3VzZVVwKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFsdWUoZGlj
dGlvbmFyeSwgIk1vZGlmaWVycyIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1l
LCAiS2V5RG93biIpKSB7Ci0gICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmYWxzZSk7CisgICAgICAgICAg
ICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoZGljdGlvbmFyeSwg
ZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVNjcm9sbEJ5
IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGRvdWJs
ZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSk7Ci0K
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0g
V0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0KLSAgICAg
ICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgbV9ldmVudFNlbmRl
clByb3h5LT5tb3VzZVNjcm9sbEJ5KHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclBy
b3h5LT5tb3VzZVNjcm9sbEJ5KGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIiksIGRvdWJsZVZh
bHVlKGRpY3Rpb25hcnksICJZIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUs
ICJNb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKSkgewotICAgICAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJsZUdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBXS0Rv
dWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBoYXNlS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGhhc2UiKSk7Ci0gICAgICAgICAgICBp
bnQgcGhhc2UgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBwaGFzZUtleS5nZXQoKSkpKSk7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbW9tZW50dW1LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJNb21lbnR1bSIpKTsKLSAgICAgICAgICAgIGludCBtb21lbnR1bSA9IHN0YXRpY19jYXN0PGlu
dD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vbWVudHVtS2V5LmdldCgpKSkp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCisg
ICAgICAgICAgICBhdXRvIHggPSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAgICAg
ICAgICAgYXV0byB5ID0gZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKKyAgICAgICAgICAg
IGF1dG8gcGhhc2UgPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiUGhhc2UiKTsKKyAgICAgICAg
ICAgIGF1dG8gbW9tZW50dW0gPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9tZW50dW0iKTsK
ICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFu
ZE1vbWVudHVtUGhhc2VzKHgsIHksIHBoYXNlLCBtb21lbnR1bSk7Ci0KICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC0yMDgzLDQyICsyMDA2LDI2IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tT
dHJpbmdSZWYKICAgICAgICAgaWYgKG1fc3RhdGUgIT0gUnVubmluZ1Rlc3QpCiAgICAgICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN1Yk1lc3NhZ2VOYW1l
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJNZXNzYWdlS2V5LmdldCgpKSk7CisgICAgICAgIGF1dG8g
ZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8g
c3ViTWVzc2FnZU5hbWUgPSBzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAiU3ViTWVzc2FnZSIpOwog
CiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1l
LCAiS2V5RG93biIpKSB7Ci0gICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0cnVlKTsKLQorICAgICAgICAg
ICAgZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKGRpY3Rpb25hcnks
IHRydWUpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3Vi
TWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VVcCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gYnV0dG9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQnV0dG9uIikpOwotICAgICAgICAgICAgdW5zaWduZWQgYnV0dG9uID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25LZXku
Z2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZp
ZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXJz
IikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2Fz
dDxXS0V2ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9k
aWZpZXJzS2V5LmdldCgpKSkpKTsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSkgeworICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5tb3VzZURvd24odWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkJ1dHRvbiIp
LCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJzIikpOworICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICB9CiAKLSAgICAgICAgICAg
IC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSkKLSAgICAgICAgICAg
ICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRG93bihidXR0b24sIG1vZGlmaWVycyk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3Vz
ZVVwKGJ1dHRvbiwgbW9kaWZpZXJzKTsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsKKyAgICAgICAgICAgIG1fZXZl
bnRTZW5kZXJQcm94eS0+bW91c2VVcCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiks
IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7CiAgICAgICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlTW92ZVRv
IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGRvdWJs
ZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSk7Ci0K
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0g
V0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0KLSAgICAg
ICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgbV9ldmVudFNlbmRl
clByb3h5LT5tb3VzZU1vdmVUbyh4LCB5KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94
eS0+bW91c2VNb3ZlVG8oZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKSwgZG91YmxlVmFsdWUo
ZGljdGlvbmFyeSwgIlkiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
bnVsbHB0cik7CiAgICAgICAgIH0KIApAQCAtMjE0NCw4MSArMjA1MSw0OCBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxl
KFdLU3RyaW5nUmVmCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRm9yY2VDaGFuZ2VkIikpIHsKLSAgICAg
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvcmNlIikpOwotICAgICAgICAgICAgZG91YmxlIGZv
cmNlID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZvcmNlS2V5LmdldCgpKSkp
OwotCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRm9yY2VDaGFuZ2VkKGZv
cmNlKTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VGb3JjZUNoYW5nZWQo
ZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIkZvcmNlIikpOwogICAgICAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3Nh
Z2VOYW1lLCAiQ29udGludW91c01vdXNlU2Nyb2xsQnkiKSkgewotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZhbHVlKHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19j
YXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHBhZ2VkS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
UGFnZWQiKSk7Ci0gICAgICAgICAgICBib29sIHBhZ2VkID0gc3RhdGljX2Nhc3Q8Ym9vbD4oV0tV
SW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBhZ2VkS2V5LmdldCgpKSkpKTsKLQotICAg
ICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCisgICAgICAgICAgICBhdXRvIHggPSBk
b3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAgICAgICAgICAgYXV0byB5ID0gZG91Ymxl
VmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKKyAgICAgICAgICAgIGF1dG8gcGFnZWQgPSBib29sZWFu
VmFsdWUoZGljdGlvbmFyeSwgIlBhZ2VkIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJv
eHktPmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KHgsIHksIHBhZ2VkKTsKICAgICAgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTGVhcEZvcndh
cmQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lSW5NaWxsaXNlY29uZHMi
KSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0aW1lID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdL
VUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0aW1lS2V5LmdldCgpKSkpKTsKLQotICAg
ICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5sZWFwRm9yd2FyZCh0aW1lKTsKKyAgICAgICAg
ICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bGVhcEZvcndhcmQodWludDY0VmFsdWUoZGljdGlvbmFy
eSwgIlRpbWVJbk1pbGxpc2Vjb25kcyIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
ICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUs
ICJBZGRUb3VjaFBvaW50IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAg
ICAgICAgICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
WSIpKTsKLSAgICAgICAgICAgIGludCB5ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZh
bHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIG1fZXZl
bnRTZW5kZXJQcm94eS0+YWRkVG91Y2hQb2ludCh4LCB5KTsKKyAgICAgICAgICAgIG1fZXZlbnRT
ZW5kZXJQcm94eS0+YWRkVG91Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpLCB1
aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiVXBkYXRlVG91Y2hQb2ludCIpKSB7
Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAgICAgICAgIGlu
dCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGluZGV4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikp
OwotICAgICAgICAgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJZIikpOwotICAgICAgICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQorICAgICAgICAgICAg
YXV0byBpbmRleCA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJbmRleCIpOworICAgICAgICAg
ICAgYXV0byB4ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlgiKTsKKyAgICAgICAgICAgIGF1
dG8geSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJZIik7CiAgICAgICAgICAgICBtX2V2ZW50
U2VuZGVyUHJveHktPnVwZGF0ZVRvdWNoUG9pbnQoaW5kZXgsIHgsIHkpOwogICAgICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJTZXRUb3Vj
aE1vZGlmaWVyIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2Rp
ZmllcktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVy
IikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciA9IHN0YXRpY19jYXN0
PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb2Rp
ZmllcktleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBlbmFibGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFbmFi
bGUiKSk7Ci0gICAgICAgICAgICBib29sIGVuYWJsZSA9IHN0YXRpY19jYXN0PGJvb2w+KFdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBlbmFibGVLZXkuZ2V0KCkpKSkpOwotCisgICAg
ICAgICAgICBhdXRvIG1vZGlmaWVyID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlmaWVy
Iik7CisgICAgICAgICAgICBhdXRvIGVuYWJsZSA9IGJvb2xlYW5WYWx1ZShkaWN0aW9uYXJ5LCAi
RW5hYmxlIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnNldFRvdWNoTW9kaWZp
ZXIobW9kaWZpZXIsIGVuYWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIlNldFRvdWNoUG9pbnRSYWRpdXMiKSkgewotICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNYIikpOwotICAgICAgICAgICAgaW50IHggPSBz
dGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5Lmdl
dCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNZIikpOwotICAgICAg
ICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQorICAgICAgICAgICAgYXV0byB4ID0gdWludDY0VmFs
dWUoZGljdGlvbmFyeSwgIlJhZGl1c1giKTsKKyAgICAgICAgICAgIGF1dG8geSA9IHVpbnQ2NFZh
bHVlKGRpY3Rpb25hcnksICJSYWRpdXNZIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJv
eHktPnNldFRvdWNoUG9pbnRSYWRpdXMoeCwgeSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KQEAgLTIyNDksMTYgKzIxMjMsMTIgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21Jbmpl
Y3RlZEJ1bmRsZShXS1N0cmluZ1JlZgogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJSZWxlYXNlVG91Y2hQb2ludCIp
KSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAgICAgICAg
IGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGluZGV4S2V5LmdldCgpKSkpKTsKLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94
eS0+cmVsZWFzZVRvdWNoUG9pbnQoaW5kZXgpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclBy
b3h5LT5yZWxlYXNlVG91Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiSW5kZXgiKSk7
CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdl
TmFtZSwgIkNhbmNlbFRvdWNoUG9pbnQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSW5kZXgiKSk7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KFdL
VUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpbmRleEtleS5nZXQoKSkpKSk7Ci0gICAg
ICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmNhbmNlbFRvdWNoUG9pbnQoaW5kZXgpOworICAg
ICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5jYW5jZWxUb3VjaFBvaW50KHVpbnQ2NFZhbHVl
KGRpY3Rpb25hcnksICJJbmRleCIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcihudWxscHRyKTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0yMjc1LDE0ICsyMTQ1LDE2IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5q
ZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYKICAgICB9OwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBbHdheXNBY2NlcHRDb29raWVzIikpIHsK
LSAgICAgICAgV0tCb29sZWFuUmVmIGFjY2VwdCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBXS0hUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5ID0g
V0tCb29sZWFuR2V0VmFsdWUoYWNjZXB0KSA/IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdh
eXMgOiBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47
CisgICAgICAgIGF1dG8gcG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSkpCisgICAgICAgICAgICA/IGtXS0hUVFBDb29raWVBY2Nl
cHRQb2xpY3lBbHdheXMKKyAgICAgICAgICAgIDoga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeU9u
bHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAgICAgICByZXR1cm4gc2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShwb2xpY3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE9u
bHlBY2NlcHRGaXJzdFBhcnR5Q29va2llcyIpKSB7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBhY2Nl
cHQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tI
VFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKGFjY2VwdCkg
PyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9t
YWluIDoga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWlu
OworICAgICAgICBhdXRvIHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKQorICAgICAgICAgICAgPyBrV0tIVFRQQ29va2llQWNj
ZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluCisgICAgICAgICAgICA6
IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKICAg
ICAgICAgcmV0dXJuIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfQogCkBAIC0yNDAzLDEyICsyMjc1LDggQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wgc2hvdWxkQmxvY2spCiAKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgYXV0byBwb2xpY3kgPSBzaG91bGRCbG9jayA/IGtXS1BsdWdp
bkxvYWRDbGllbnRQb2xpY3lCbG9jayA6IGtXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3lBbGxvdzsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lTmV0c2NhcGUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1Z2lu
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lRmxhc2ggPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIu
cGx1Z2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbXB0eVN0cmluZyA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLSAgICBXS0NvbnRleHRT
ZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCBlbXB0eVN0
cmluZy5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBlbXB0eVN0cmluZy5nZXQoKSk7Ci0gICAg
V0tDb250ZXh0U2V0UGx1Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRleHQuZ2V0KCksIHBvbGlj
eSwgZW1wdHlTdHJpbmcuZ2V0KCksIG5hbWVGbGFzaC5nZXQoKSwgZW1wdHlTdHJpbmcuZ2V0KCkp
OworICAgIFdLQ29udGV4dFNldFBsdWdpbkxvYWRDbGllbnRQb2xpY3kobV9jb250ZXh0LmdldCgp
LCBwb2xpY3ksIHRvV0soIiIpLmdldCgpLCB0b1dLKCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1
Z2luIikuZ2V0KCksIHRvV0soIiIpLmdldCgpKTsKKyAgICBXS0NvbnRleHRTZXRQbHVnaW5Mb2Fk
Q2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCB0b1dLKCIiKS5nZXQoKSwgdG9X
SygiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbiIpLmdldCgpLCB0b1dLKCIiKS5n
ZXQoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjQyMywyOSArMjI5MSwyNCBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKGNvbnN0IFN0cmluZyYgbW9kZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBl
bXB0eUFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gYWxsT3JpZ2lucyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3BlY2lmaWNP
cmlnaW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsb2NhbGhvc3Qi
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGRmTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk15IHBlcnNvbmFsIFBERiIpKTsKLSAgICBXS0Nv
bnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBhbGxPcmlnaW5zLmdldCgp
LCBwZGZOYW1lLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAg
ICBhdXRvIGVtcHR5QXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVOZXRzY2FwZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4iKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlTmV0c2NhcGUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0
LW5ldHNjYXBlIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBtaW1lVHlw
ZXNOZXRzY2FwZSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgV0tBcnJh
eUFwcGVuZEl0ZW0obWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlTmV0c2NhcGUuZ2V0
KCkpOworICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRv
V0soIiIpLmdldCgpLCB0b1dLKCJNeSBwZXJzb25hbCBQREYiKS5nZXQoKSwgZW1wdHlBcnJheS5n
ZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bmFtZVBkZiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdCBi
dWlsdC1pbiBQREYiKSk7CisgICAgYXV0byBuYW1lTmV0c2NhcGUgPSB0b1dLKCJjb20uYXBwbGUu
dGVzdG5ldHNjYXBlcGx1Z2luIik7CisgICAgYXV0byBtaW1lVHlwZXNOZXRzY2FwZSA9IGFkb3B0
V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgV0tBcnJheUFwcGVuZEl0ZW0obWltZVR5
cGVzTmV0c2NhcGUuZ2V0KCksIHRvV0soImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2Nh
cGUiKS5nZXQoKSk7CisgICAgYXV0byBuYW1lUGRmID0gdG9XSygiV2ViS2l0IGJ1aWx0LWluIFBE
RiIpOwogCiAgICAgaWYgKG1fdW5zdXBwb3J0ZWRQbHVnaW5Nb2RlID09ICJhbGxPcmlnaW5zIikg
ewotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBh
bGxPcmlnaW5zLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBlLmdl
dCgpLCBlbXB0eUFycmF5LmdldCgpKTsKLSAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1
Z2luKG1fY29udGV4dC5nZXQoKSwgYWxsT3JpZ2lucy5nZXQoKSwgbmFtZVBkZi5nZXQoKSwgZW1w
dHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFkZFN1
cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBuYW1lTmV0c2Nh
cGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAg
ICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygi
IikuZ2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG1fdW5zdXBwb3J0ZWRQbHVn
aW5Nb2RlID09ICJzcGVjaWZpY09yaWdpbiIpIHsKLSAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9y
dGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgc3BlY2lmaWNPcmlnaW4uZ2V0KCksIG5hbWVOZXRz
Y2FwZS5nZXQoKSwgbWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwot
ICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBzcGVj
aWZpY09yaWdpbi5nZXQoKSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlB
cnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRl
eHQuZ2V0KCksIHRvV0soImxvY2FsaG9zdCIpLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1p
bWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250
ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygibG9jYWxob3N0Iiku
Z2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMjQ5MSwxNCArMjM1NCwxMiBAQCBib29s
IFRlc3RDb250cm9sbGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFdL
UGFnZVJlZiBwYWdlLCBXS1BybwogewogICAgIGlmIChtX3Nob3VsZExvZ0NhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpCiAgICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPm91
dHB1dFRleHQoImNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VcbiIpOwotICAg
IFdLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWUgYXV0aGVudGljYXRpb25TY2hl
bWUgPSBXS1Byb3RlY3Rpb25TcGFjZUdldEF1dGhlbnRpY2F0aW9uU2NoZW1lKHByb3RlY3Rpb25T
cGFjZSk7Ci0gICAgCi0gICAgaWYgKGF1dGhlbnRpY2F0aW9uU2NoZW1lID09IGtXS1Byb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVk
KSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGhvc3QgPSB0b1NURChhZG9wdFdLKFdLUHJvdGVjdGlv
blNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkpOworICAgIGF1dG8gc2NoZW1l
ID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRBdXRoZW50aWNhdGlvblNjaGVtZShwcm90ZWN0aW9uU3Bh
Y2UpOworICAgIGlmIChzY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQpIHsKKyAgICAgICAgYXV0byBob3N0
ID0gdG9TVEQoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rpb25TcGFj
ZSkpKTsKICAgICAgICAgcmV0dXJuIGhvc3QgPT0gImxvY2FsaG9zdCIgfHwgaG9zdCA9PSAiMTI3
LjAuMC4xIiB8fCAobV9hbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMgJiYg
bV9hbGxvd2VkSG9zdHMuZmluZChob3N0KSAhPSBtX2FsbG93ZWRIb3N0cy5lbmQoKSk7CiAgICAg
fQotICAgIAotICAgIHJldHVybiBhdXRoZW50aWNhdGlvblNjaGVtZSA8PSBrV0tQcm90ZWN0aW9u
U3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdlc3QgfHwgYXV0aGVudGljYXRpb25TY2hl
bWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVPQXV0aDsKKyAgICBy
ZXR1cm4gc2NoZW1lIDw9IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRU
UERpZ2VzdCB8fCBzY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hl
bWVPQXV0aDsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTmF2aWdhdGlvbihX
S1BhZ2VSZWYgcGFnZSwgV0tOYXZpZ2F0aW9uUmVmIG5hdmlnYXRpb24pCkBAIC0yNTA2LDggKzIz
NjcsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKFdLUGFnZVJl
ZiBwYWdlLCBXS05hdmlnYXRpb25SZWYgbmF2aWdhdAogICAgIGlmIChtX3N0YXRlICE9IFJlc2V0
dGluZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJM
ID0gYWRvcHRXSyhXS0ZyYW1lQ29weVVSTChXS1BhZ2VHZXRNYWluRnJhbWUocGFnZSkpKTsKLSAg
ICBpZiAoIVdLVVJMSXNFcXVhbCh3a1VSTC5nZXQoKSwgYmxhbmtVUkwoKSkpCisgICAgaWYgKCFX
S1VSTElzRXF1YWwoYWRvcHRXSyhXS0ZyYW1lQ29weVVSTChXS1BhZ2VHZXRNYWluRnJhbWUocGFn
ZSkpKS5nZXQoKSwgYmxhbmtVUkwoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZG9uZVJl
c2V0dGluZyA9IHRydWU7CkBAIC0yNTI3LDcgKzIzODcsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmIHBhZ2UsIFdLQXV0
aGVudAogICAgICAgICBtX3NlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCsr
OwogCiAgICAgICAgIGlmIChtX2FsbG93c0FueVNTTENlcnRpZmljYXRlKSB7Ci0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS0NyZWRlbnRpYWxSZWY+IGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3Jl
ZGVudGlhbENyZWF0ZSh0b1dLKCJhY2NlcHQgc2VydmVyIHRydXN0IikuZ2V0KCksIHRvV0soIiIp
LmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSk7CisgICAgICAgICAgICBhdXRv
IGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh0b1dLKCJhY2NlcHQgc2Vy
dmVyIHRydXN0IikuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVu
Y2VOb25lKSk7CiAgICAgICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVz
ZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgY3JlZGVudGlhbC5nZXQoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1NDEsOSArMjQwMSw5IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYgcGFn
ZSwgV0tBdXRoZW50CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBo
b3N0ID0gdG9TVEQoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rpb25T
cGFjZSkpLmdldCgpKTsKKyAgICBhdXRvIGhvc3QgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLUHJv
dGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkpOwogICAgIGludCBw
b3J0ID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRQb3J0KHByb3RlY3Rpb25TcGFjZSk7Ci0gICAgU3Ry
aW5nIG1lc3NhZ2UgPSBtYWtlU3RyaW5nKGhvc3QuY19zdHIoKSwgJzonLCBwb3J0LCAiIC0gZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIC0gIiwgdG9TdHJpbmcoYXV0aGVudGljYXRp
b25TY2hlbWUpLCAiIC0gIik7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSBtYWtlU3RyaW5nKGhvc3Qs
ICc6JywgcG9ydCwgIiAtIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAtICIsIHRv
U3RyaW5nKGF1dGhlbnRpY2F0aW9uU2NoZW1lKSwgIiAtICIpOwogICAgIGlmICghbV9oYW5kbGVz
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKQogICAgICAgICBtZXNzYWdlLmFwcGVuZCgiU2ltdWxh
dGluZyBjYW5jZWxsZWQgYXV0aGVudGljYXRpb24gc2hlZXRcbiIpOwogICAgIGVsc2UKQEAgLTI1
NTQsMTMgKzI0MTQsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKFdLUGFnZVJlZiBwYWdlLCBXS0F1dGhlbnQKICAgICAgICAgV0tBdXRo
ZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIs
IDApOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB1c2VybmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9hdXRo
ZW50aWNhdGlvblVzZXJuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gcGFzc3dvcmQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KG1fYXV0aGVudGljYXRpb25QYXNzd29yZC51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tDcmVkZW50aWFsUmVmPiBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRpYWxDcmVh
dGUodXNlcm5hbWUuZ2V0KCksIHBhc3N3b3JkLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVu
Y2VGb3JTZXNzaW9uKSk7CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRp
YWxDcmVhdGUodG9XSyhtX2F1dGhlbnRpY2F0aW9uVXNlcm5hbWUpLmdldCgpLCB0b1dLKG1fYXV0
aGVudGljYXRpb25QYXNzd29yZCkuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNl
c3Npb24pKTsKICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRp
YWwoZGVjaXNpb25MaXN0ZW5lciwgY3JlZGVudGlhbC5nZXQoKSk7CiB9CiAKLSAgICAKKwogLy8g
V0tDb250ZXh0RG93bmxvYWRDbGllbnQKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZG93bmxvYWRE
aWRTdGFydChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tEb3dubG9hZFJlZiBkb3dubG9hZCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTI3MDQsOSArMjU2Miw5IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiAgICAgZGVjaWRl
UG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKTsKIH0KIAot
dm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxh
dGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwg
ZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVh
ZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9v
ckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCkKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91
YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+
IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91
YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKQogewotICAgIG1fZ2VvbG9j
YXRpb25Qcm92aWRlci0+c2V0UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ks
IHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFs
dGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwg
c3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgbV9nZW9sb2NhdGlv
blByb3ZpZGVyLT5zZXRQb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgYWx0
aXR1ZGUsIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkLCBmbG9vckxldmVsKTsKIH0K
IAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWls
YWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSkKQEAgLTI4NTYsOSArMjcxNCw3IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2VyTWVkaWFQZXJtaXNzaW9uRm9y
T3JpZ2luKFdLRnJhbWVSZWYgZnJhbWUsCiB7CiAgICAgYXV0byBvcmlnaW5IYXNoID0gdXNlck1l
ZGlhT3JpZ2luSGFzaCh1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgdG9wTGV2ZWxEb2N1bWVudE9y
aWdpbik7CiAgICAgYXV0byBzYWx0ID0gc2FsdEZvck9yaWdpbihmcmFtZSwgb3JpZ2luSGFzaCk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNhbHRTdHJpbmcgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNhbHQudXRmOCgpLmRhdGEoKSkpOwotCi0gICAgV0tV
c2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tTZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGNoZWNrUmVxdWVz
dCwgc2FsdFN0cmluZy5nZXQoKSwgc2V0dGluZ3NGb3JPcmlnaW4ob3JpZ2luSGFzaCkucGVyc2lz
dGVudFBlcm1pc3Npb24oKSk7CisgICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tTZXRVc2Vy
TWVkaWFBY2Nlc3NJbmZvKGNoZWNrUmVxdWVzdCwgdG9XSyhzYWx0KS5nZXQoKSwgc2V0dGluZ3NG
b3JPcmlnaW4ob3JpZ2luSGFzaCkucGVyc2lzdGVudFBlcm1pc3Npb24oKSk7CiB9CiAKIGJvb2wg
VGVzdENvbnRyb2xsZXI6OmhhbmRsZURldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVx
dWVzdChXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKQEAgLTI5MTQsOCArMjc3MCw4IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0SWZQb3NzaWJsZSgpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAg
ICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGF1ZGlvRGV2aWNlVUlEcyA9IGFkb3B0V0soV0tV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdEF1ZGlvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IHZpZGVvRGV2aWNlVUlEcyA9IGFkb3B0V0soV0tV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFZpZGVvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7CisgICAg
ICAgIGF1dG8gYXVkaW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1VzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0QXVkaW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKKyAgICAgICAgYXV0byB2aWRlb0Rldmlj
ZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RWaWRlb0RldmljZVVJ
RHMocmVxdWVzdCkpOwogCiAgICAgICAgIGlmICghV0tBcnJheUdldFNpemUodmlkZW9EZXZpY2VV
SURzLmdldCgpKSAmJiAhV0tBcnJheUdldFNpemUoYXVkaW9EZXZpY2VVSURzLmdldCgpKSkgewog
ICAgICAgICAgICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdERlbnkocmVxdWVzdCwga1dL
Tm9Db25zdHJhaW50cyk7CkBAIC0yOTI2LDEzICsyNzgyLDEzIEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgp
CiAgICAgICAgIGlmIChXS0FycmF5R2V0U2l6ZSh2aWRlb0RldmljZVVJRHMuZ2V0KCkpKQogICAg
ICAgICAgICAgdmlkZW9EZXZpY2VVSUQgPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihX
S0FycmF5R2V0SXRlbUF0SW5kZXgodmlkZW9EZXZpY2VVSURzLmdldCgpLCAwKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHZpZGVvRGV2aWNlVUlEID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgICAgICAgICAgdmlkZW9EZXZpY2VVSUQgPSB0b1dL
KCIiKTsKIAogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9EZXZpY2VVSUQ7
CiAgICAgICAgIGlmIChXS0FycmF5R2V0U2l6ZShhdWRpb0RldmljZVVJRHMuZ2V0KCkpKQogICAg
ICAgICAgICAgYXVkaW9EZXZpY2VVSUQgPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihX
S0FycmF5R2V0SXRlbUF0SW5kZXgoYXVkaW9EZXZpY2VVSURzLmdldCgpLCAwKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGF1ZGlvRGV2aWNlVUlEID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgICAgICAgICAgYXVkaW9EZXZpY2VVSUQgPSB0b1dL
KCIiKTsKIAogICAgICAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0QWxsb3cocmVxdWVz
dCwgYXVkaW9EZXZpY2VVSUQuZ2V0KCksIHZpZGVvRGV2aWNlVUlELmdldCgpKTsKICAgICB9CkBA
IC0zMDU2LDEyICsyOTEyLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkTmF2aWdhdGVXaXRo
TmF2aWdhdGlvbkRhdGEoV0tOYXZpZ2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW8KICAgICBpZiAoIW1f
c2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gVVJMCiAgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5VVJMKG5h
dmlnYXRpb25EYXRhKSk7CiAgICAgYXV0byB1cmxTdHJpbmcgPSB0b1dURlN0cmluZyhhZG9wdFdL
KFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKSk7Ci0gICAgLy8gVGl0bGUKICAgICBhdXRvIHRp
dGxlID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weVRpdGxlKG5hdmln
YXRpb25EYXRhKSkpOwotICAgIC8vIEhUVFAgbWV0aG9kCiAgICAgYXV0byByZXF1ZXN0ID0gYWRv
cHRXSyhXS05hdmlnYXRpb25EYXRhQ29weU9yaWdpbmFsUmVxdWVzdChuYXZpZ2F0aW9uRGF0YSkp
OwogICAgIGF1dG8gbWV0aG9kID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5
SFRUUE1ldGhvZChyZXF1ZXN0LmdldCgpKSkpOwogCkBAIC0zMjA2LDcgKzMwNTksNyBAQCB2b2lk
IGdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2sodm9pZCogdXNlckRhdGEsIFdLQXJy
YXlSZWYgZG9tYWluTGlzdCkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdERvbWFpbnM7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKGRvbWFpbkxpc3QpOyBp
KyspIHsKLSAgICAgICAgYXV0byBkb21haW4gPSAgcmVpbnRlcnByZXRfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbkxpc3QsIGkpKTsKKyAgICAgICAgYXV0byBk
b21haW4gPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5k
ZXgoZG9tYWluTGlzdCwgaSkpOwogICAgICAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6dmVjdG9yPGNo
YXI+KFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShkb21haW4pKTsKICAgICAgICAg
YXV0byBzdHJpbmdMZW5ndGggPSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGRvbWFpbiwgYnVmZmVy
LmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CiAKQEAgLTM5NzgsNyArMzgzMSw3IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpCiB2b2lkIFRlc3RDb250
cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJp
bmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7CiAgICAgSW5BcHBCcm93c2VyUHJpdmFjeUNhbGxiYWNr
Q29udGV4dCBjb250ZXh0KCp0aGlzKTsKLSAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRhdGVCdW5k
bGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFT
dG9yZSgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1bmRsZUlkZW50
aWZpZXIudXRmOCgpLmRhdGEoKSkpLmdldCgpLCAmY29udGV4dCwgaW5BcHBCcm93c2VyUHJpdmFj
eVZvaWRSZXN1bHRDYWxsYmFjayk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlVXBkYXRlQnVuZGxl
SWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3Rv
cmUoKSwgdG9XSyhidW5kbGVJZGVudGlmaWVyKS5nZXQoKSwgJmNvbnRleHQsIGluQXBwQnJvd3Nl
clByaXZhY3lWb2lkUmVzdWx0Q2FsbGJhY2spOwogICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwg
bm9UaW1lb3V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmlu
ZGV4IGY5NGQ1N2MxNDdiMzE2ZjA3OGZhODVmMjIwZjQwNzYwOTQxMTNjOGMuLmZmODM5NGVjMDM4
NzdhNmRiYzBkYzRiM2U0OGMwZWY0ZjNmM2IzMzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmgKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8g
R2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCk7Ci0g
ICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJs
ZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3Vi
bGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1
ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHBy
b3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJs
ZSBmbG9vckxldmVsKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJs
ZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxk
b3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlv
bmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91
YmxlPiBmbG9vckxldmVsKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5h
dmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UpOwogICAgIHZvaWQgaGFuZGxl
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RSZWYpOwogICAgIGJvb2wgaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IGE1YjZkZDA1NTgw
YWUwYzJkOTU3MDc3ZGZlNDUwYTQ4NmU2ZDAxZWMuLjUwMTI3ZjY3ODQxZTAzYzU1NjhlMTllOTkx
MTc5N2M4ZmMyZDZiODIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVz
dEludm9jYXRpb24uaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlVJU2NyaXB0Q29udHJvbGxlci5o
IgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgpAQCAtNjYsMjEgKzY2LDE3IEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXVFIgewogCitzdGF0aWMgdm9pZCBwb3N0
UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIGJvZHkgPSBudWxscHRyKQor
eworICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCBib2R5
KTsKK30KKwogVGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKFdLVVJMUmVmIHVybCwgY29u
c3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgOiBtX29wdGlvbnMob3B0aW9ucykKICAgICAs
IG1fdXJsKHVybCkKICAgICAsIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFp
bigpLCB0aGlzLCAmVGVzdEludm9jYXRpb246OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tV
UkxDb3B5U3RyaW5nKG1fdXJsLmdldCgpKSk7Ci0KLSAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoID0g
V0tTdHJpbmdHZXRMZW5ndGgodXJsU3RyaW5nLmdldCgpKTsKLQotICAgIFZlY3RvcjxjaGFyPiB1
cmxWZWN0b3I7Ci0gICAgdXJsVmVjdG9yLnJlc2l6ZShzdHJpbmdMZW5ndGggKyAxKTsKLQotICAg
IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcodXJsU3RyaW5nLmdldCgpLCB1cmxWZWN0b3IuZGF0YSgp
LCBzdHJpbmdMZW5ndGggKyAxKTsKLQotICAgIG1fdXJsU3RyaW5nID0gU3RyaW5nKHVybFZlY3Rv
ci5kYXRhKCksIHN0cmluZ0xlbmd0aCk7CisgICAgbV91cmxTdHJpbmcgPSB0b1dURlN0cmluZyhh
ZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtX3VybC5nZXQoKSkpLmdldCgpKTsKIAogICAgIC8vIEZJ
WE1FOiBBdm9pZCBtdXRhdGluZyB0aGUgc2V0dGluZyB2aWEgYSB0ZXN0IGRpcmVjdG9yeSBsaWtl
IHRoaXMuCiAgICAgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0gdXJsQ29udGFpbnMoImxvYWRp
bmcvIikgJiYgIXVybENvbnRhaW5zKCI6Ly9sb2NhbGhvc3QiKTsKQEAgLTEyOSwyOCArMTI1LDEy
IEBAIGJvb2wgVGVzdEludm9jYXRpb246OnNob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFja3Mo
KSBjb25zdAogCiBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBUZXN0SW52b2Nh
dGlvbjo6Y3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gYmVnaW5UZXN0TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gdXNlRmxleGlibGVWaWV3cG9ydEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlVzZUZsZXhpYmxlVmlld3BvcnQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiB1c2VGbGV4aWJsZVZpZXdwb3J0VmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShvcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIHVzZUZsZXhpYmxlVmlld3BvcnRLZXkuZ2V0
KCksIHVzZUZsZXhpYmxlVmlld3BvcnRWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gZHVtcFBpeGVsc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkR1bXBQaXhlbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBk
dW1wUGl4ZWxzVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBQaXhlbHMpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCBkdW1w
UGl4ZWxzS2V5LmdldCgpLCBkdW1wUGl4ZWxzVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHRpbWVvdXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUaW1lb3V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB0aW1l
b3V0VmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1fdGltZW91dC5taWxsaXNlY29uZHMo
KSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCks
IHRpbWVvdXRLZXkuZ2V0KCksIHRpbWVvdXRWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyVmFs
dWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVycikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIGR1
bXBKU0NvbnNvbGVMb2dJblN0ZEVycktleS5nZXQoKSwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
VmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzVmFsdWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9wdGlvbnMoKS5hZGRpdGlvbmFsU3VwcG9y
dGVkSW1hZ2VUeXBlcy5jX3N0cigpKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRl
c3RNZXNzYWdlQm9keS5nZXQoKSwgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNLZXkuZ2V0
KCksIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzVmFsdWUuZ2V0KCkpOwotCisgICAgYXV0
byBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlVzZUZsZXhpYmxlVmll
d3BvcnQiLCBvcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCk7CisgICAgc2V0VmFsdWUoYmVn
aW5UZXN0TWVzc2FnZUJvZHksICJEdW1wUGl4ZWxzIiwgbV9kdW1wUGl4ZWxzKTsKKyAgICBzZXRW
YWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlRpbWVvdXQiLCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4obV90aW1lb3V0Lm1pbGxpc2Vjb25kcygpKSk7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVz
c2FnZUJvZHksICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBtX2R1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVycik7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJhZGRpdGlvbmFs
U3VwcG9ydGVkSW1hZ2VUeXBlcyIsIG9wdGlvbnMoKS5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VU
eXBlcy5jX3N0cigpKTsKICAgICByZXR1cm4gYmVnaW5UZXN0TWVzc2FnZUJvZHk7CiB9CiAKQEAg
LTE2OCw5ICsxNDgsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbnZva2UoKQogCiAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBjbGVhciBvdXQgdmlzaXRlZCBsaW5rcyBoZXJlLgogCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQmVnaW5UZXN0IikpOwotICAgIGF1dG8gYmVnaW5UZXN0TWVzc2Fn
ZUJvZHkgPSBjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCk7Ci0gICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBiZWdpblRlc3RNZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJCZWdpblRlc3QiLCBjcmVhdGVUZXN0U2V0dGlu
Z3NEaWN0aW9uYXJ5KCkuZ2V0KCkpOwogCiAgICAgbV9zdGFydGVkVGVzdGluZyA9IHRydWU7CiAK
QEAgLTMyNywxODUgKzMwNSwxMDQgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1l
c3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFjayIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1lc3NhZ2VCb2R5U3RyaW5nID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZUJvZHlTdHJpbmcsICJCZWdpblRlc3QiKSkgewor
ICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keSksICJCZWdpblRlc3QiKSkgewogICAgICAgICAgICAgbV9nb3RJbml0aWFsUmVzcG9u
c2UgPSB0cnVlOwogICAgICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm5vdGlm
eURvbmUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiRG9uZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Rp
Y3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9u
YXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiUGl4ZWxSZXN1bHRJc1BlbmRpbmciKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBw
aXhlbFJlc3VsdElzUGVuZGluZyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBpeGVsUmVzdWx0SXNQZW5k
aW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBXS0Jvb2xl
YW5HZXRWYWx1ZShwaXhlbFJlc3VsdElzUGVuZGluZyk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBt
X3BpeGVsUmVzdWx0SXNQZW5kaW5nID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIlBpeGVsUmVzdWx0SXNQZW5kaW5nIik7CiAgICAgICAgIGlmICghbV9waXhlbFJlc3VsdElz
UGVuZGluZykgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVz
dWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1
bHQiKSk7Ci0gICAgICAgICAgICBtX3BpeGVsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0tJbWFnZVJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBpeGVs
UmVzdWx0S2V5LmdldCgpKSk7CisgICAgICAgICAgICBtX3BpeGVsUmVzdWx0ID0gc3RhdGljX2Nh
c3Q8V0tJbWFnZVJlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUGl4ZWxSZXN1bHQi
KSk7CiAgICAgICAgICAgICBBU1NFUlQoIW1fcGl4ZWxSZXN1bHQgfHwgbV9kdW1wUGl4ZWxzKTsK
ICAgICAgICAgfQotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXBhaW50UmVj
dHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXBhaW50UmVj
dHMiKSk7Ci0gICAgICAgIG1fcmVwYWludFJlY3RzID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHJlcGFpbnRS
ZWN0c0tleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdWRp
b1Jlc3VsdEtleSA9ICBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdWRp
b1Jlc3VsdCIpKTsKLSAgICAgICAgbV9hdWRpb1Jlc3VsdCA9IHN0YXRpY19jYXN0PFdLRGF0YVJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGF1ZGlv
UmVzdWx0S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgbV9yZXBhaW50UmVjdHMgPSBzdGF0aWNfY2Fz
dDxXS0FycmF5UmVmPih2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJSZXBhaW50UmVjdHMi
KSk7CisgICAgICAgIG1fYXVkaW9SZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0RhdGFSZWY+KHZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkF1ZGlvUmVzdWx0IikpOwogICAgICAgICBkb25lKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlRleHRPdXRwdXQiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S1N0cmluZ1JlZiB0ZXh0T3V0cHV0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgbV90ZXh0T3V0cHV0LmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0T3V0cHV0
KSk7CisgICAgICAgIG1fdGV4dE91dHB1dC5hcHBlbmQodG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkR1bXBUb1N0ZEVyciIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRleHRPdXRwdXQgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgdG9X
VEZTdHJpbmcodGV4dE91dHB1dCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiJXMiLCB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKFdLQm9vbGVh
bkdldFZhbHVlKGJlZm9yZVVubG9hZFJldHVyblZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFkZENocm9tZUlucHV0Rmll
bGQiKSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+YWRkQ2hyb21lSW5wdXRGaWVsZCgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
YWxsQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBwb3N0UGFnZU1l
c3NhZ2UoIkNhbGxBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIpKSB7CiAgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5yZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxSZW1vdmVDaHJvbWVJbnB1dEZpZWxkQ2Fs
bGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbFJlbW92ZUNocm9tZUlu
cHV0RmllbGRDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRm9jdXNXZWJWaWV3
IikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
Pm1ha2VXZWJWaWV3Rmlyc3RSZXNwb25kZXIoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2FsbEZvY3VzV2ViVmlld0NhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBwb3N0UGFnZU1lc3Nh
Z2UoIkNhbGxGb2N1c1dlYlZpZXdDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRC
YWNraW5nU2NhbGVGYWN0b3IiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBkb3VibGUgYmFja2luZ1Nj
YWxlRmFjdG9yID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVz
c2FnZUJvZHkpKTsKLSAgICAgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9yKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGJhY2tpbmdT
Y2FsZUZhY3Rvcik7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbFNldEJhY2tp
bmdTY2FsZUZhY3RvckNhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBXS1BhZ2VTZXRDdXN0b21CYWNr
aW5nU2NhbGVGYWN0b3IoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnBhZ2UoKSwgZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNz
YWdlKCJDYWxsU2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgdWludDY0X3Qgbm90aWZpY2F0aW9u
SUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbklEKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRkc1Zpc2l0ZWRMaW5rcyIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlua3MoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgV0tCb29sZWFuR2V0
VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlua3MoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEdlb2xvY2F0aW9uUGVy
bWlzc2lvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oV0tCb29sZWFuR2V0
VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbGF0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImxhdGl0dWRlIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBsYXRpdHVk
ZVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBsYXRpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRv
dWJsZSBsYXRpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUobGF0aXR1ZGVXSyk7Ci0KLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvbmdpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibG9uZ2l0dWRlIikpOwotICAgICAgICBXS0RvdWJsZVJl
ZiBsb25naXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbG9uZ2l0dWRlS2V5V0suZ2V0KCkpKTsK
LSAgICAgICAgZG91YmxlIGxvbmdpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUobG9uZ2l0dWRlV0sp
OwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhY2N1cmFjeUtleVdLID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjdXJhY3kiKSk7Ci0gICAgICAg
IFdLRG91YmxlUmVmIGFjY3VyYWN5V0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGFjY3VyYWN5S2V5V0su
Z2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGFjY3VyYWN5ID0gV0tEb3VibGVHZXRWYWx1ZShhY2N1
cmFjeVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNBbHRp
dHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlk
ZXNBbHRpdHVkZSIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzQWx0aXR1ZGVXSyA9
IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVzQWx0aXR1ZGVLZXlXSy5nZXQoKSkpOwotICAgICAg
ICBib29sIHByb3ZpZGVzQWx0aXR1ZGUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc0FsdGl0
dWRlV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVkZUtleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWx0aXR1ZGUiKSk7Ci0g
ICAgICAgIFdLRG91YmxlUmVmIGFsdGl0dWRlV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGFsdGl0dWRl
S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGFsdGl0dWRlID0gV0tEb3VibGVHZXRWYWx1
ZShhbHRpdHVkZVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNBbHRp
dHVkZUFjY3VyYWN5ID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5
V0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVkZUFjY3VyYWN5
S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVkZUFj
Y3VyYWN5IikpOwotICAgICAgICBXS0RvdWJsZVJlZiBhbHRpdHVkZUFjY3VyYWN5V0sgPSBzdGF0
aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGFsdGl0dWRlQWNjdXJhY3lLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3Vi
bGUgYWx0aXR1ZGVBY2N1cmFjeSA9IFdLRG91YmxlR2V0VmFsdWUoYWx0aXR1ZGVBY2N1cmFjeVdL
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNIZWFkaW5nS2V5
V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0hlYWRp
bmciKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwcm92aWRlc0hlYWRpbmdXSyA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHByb3ZpZGVzSGVhZGluZ0tleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJv
dmlkZXNIZWFkaW5nID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNIZWFkaW5nV0spOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoZWFkaW5nS2V5V0sgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoZWFkaW5nIikpOwotICAgICAgICBXS0RvdWJs
ZVJlZiBoZWFkaW5nV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhlYWRpbmdLZXlXSy5nZXQoKSkpOwot
ICAgICAgICBkb3VibGUgaGVhZGluZyA9IFdLRG91YmxlR2V0VmFsdWUoaGVhZGluZ1dLKTsKLQot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNTcGVlZEtleVdLID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNTcGVlZCIpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzU3BlZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBy
b3ZpZGVzU3BlZWRLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzU3BlZWQgPSBX
S0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc1NwZWVkV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzcGVlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygic3BlZWQiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNwZWVkV0sgPSBzdGF0aWNf
Y2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHNwZWVkS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIHNwZWVkID0gV0tE
b3VibGVHZXRWYWx1ZShzcGVlZFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gcHJvdmlkZXNGbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJwcm92aWRlc0Zsb29yTGV2ZWwiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBw
cm92aWRlc0Zsb29yTGV2ZWxXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVzRmxvb3JMZXZl
bEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsID0gV0tCb29s
ZWFuR2V0VmFsdWUocHJvdmlkZXNGbG9vckxldmVsV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBmbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJmbG9vckxldmVsIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBmbG9vckxl
dmVsV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZsb29yTGV2ZWxLZXlXSy5nZXQoKSkpOwotICAgICAg
ICBkb3VibGUgZmxvb3JMZXZlbCA9IFdLRG91YmxlR2V0VmFsdWUoZmxvb3JMZXZlbFdLKTsKLQot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFs
dGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3Zp
ZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JM
ZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBsYXRpdHVkZSA9IGRv
dWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImxhdGl0dWRlIik7CisgICAgICAgIGF1
dG8gbG9uZ2l0dWRlID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAibG9uZ2l0
dWRlIik7CisgICAgICAgIGF1dG8gYWNjdXJhY3kgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJhY2N1cmFjeSIpOworICAgICAgICBhdXRvIGFsdGl0dWRlID0gb3B0aW9uYWxE
b3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJhbHRpdHVkZSIpOworICAgICAgICBh
dXRvIGFsdGl0dWRlQWNjdXJhY3kgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgImFsdGl0dWRlQWNjdXJhY3kiKTsKKyAgICAgICAgYXV0byBoZWFkaW5nID0gb3B0
aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJoZWFkaW5nIik7CisgICAg
ICAgIGF1dG8gc3BlZWQgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgInNwZWVkIik7CisgICAgICAgIGF1dG8gZmxvb3JMZXZlbCA9IG9wdGlvbmFsRG91YmxlVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiZmxvb3JMZXZlbCIpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUs
IGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLCBhbHRpdHVkZUFjY3VyYWN5LCBoZWFkaW5n
LCBzcGVlZCwgZmxvb3JMZXZlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIGVycm9yTWVzc2FnZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9k
eSk7CisgICAgICAgIFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihlcnJvck1lc3NhZ2UpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVzZXJNZWRp
YVBlcm1pc3Npb24oV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MTUsMTE3ICs0
MTIsNjYgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZXJNZWRpYVBlcnNpc3Rl
bnRQZXJtaXNzaW9uRm9yT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlv
bmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlS
ZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGVy
bWlzc2lvbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGVy
bWlzc2lvbiIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBlcm1pc3Npb25XSyA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHBlcm1pc3Npb25LZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHBlcm1pc3Np
b24gPSBXS0Jvb2xlYW5HZXRWYWx1ZShwZXJtaXNzaW9uV0spOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbldLID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBvcmlnaW5LZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwYXJlbnRP
cmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGFyZW50T3JpZ2luS2V5LmdldCgpKSk7Ci0KKyAg
ICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2Fn
ZUJvZHkpOworICAgICAgICBhdXRvIHBlcm1pc3Npb24gPSBib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAicGVybWlzc2lvbiIpOworICAgICAgICBhdXRvIG9yaWdpbldLID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAib3JpZ2luIik7CisgICAgICAgIGF1dG8g
cGFyZW50T3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJwYXJl
bnRPcmlnaW4iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVzZXJN
ZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Npb24sIG9yaWdpbldLLCBw
YXJlbnRPcmlnaW5XSyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlc2V0VXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Rp
Y3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9u
YXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdp
biIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG9y
aWdpbktleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJl
bnRPcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJl
bnRPcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbldLID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBwYXJlbnRPcmlnaW5LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBvcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIm9yaWdpbiIpOworICAgICAgICBhdXRvIHBhcmVudE9yaWdpbldLID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGFyZW50T3JpZ2luIik7CiAgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5yZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRG
b3JPcmlnaW4ob3JpZ2luV0ssIHBhcmVudE9yaWdpbldLKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBl
bmFibGVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJlbmFi
bGVkIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgZW5hYmxlZEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgZW5hYmxlZCA9IFdLQm9vbGVh
bkdldFZhbHVlKGVuYWJsZWRXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHBlcm1pc3NpdmVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
InBlcm1pc3NpdmUiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwZXJtaXNzaXZlV0sgPSBzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBwZXJtaXNzaXZlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwZXJt
aXNzaXZlID0gV0tCb29sZWFuR2V0VmFsdWUocGVybWlzc2l2ZVdLKTsKLQorICAgICAgICBhdXRv
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7Cisg
ICAgICAgIGF1dG8gZW5hYmxlZCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJlbmFibGVkIik7CisgICAgICAgIGF1dG8gcGVybWlzc2l2ZSA9IGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJwZXJtaXNzaXZlIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShlbmFibGVkLCBwZXJtaXNzaXZl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0SGlkZGVuIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaXNJbml0aWFsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJoaWRkZW4iKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBoaWRkZW5XSyA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGlzSW5pdGlhbEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgaGlkZGVu
ID0gV0tCb29sZWFuR2V0VmFsdWUoaGlkZGVuV0spOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRIaWRkZW4oaGlkZGVuKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJoaWRkZW4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlByb2Nlc3NXb3Jr
UXVldWUiKSkgewotICAgICAgICBpZiAoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtR
dWV1ZU1hbmFnZXIoKS5wcm9jZXNzV29ya1F1ZXVlKCkpIHsKLSAgICAgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIldvcmtRdWV1ZVByb2Nlc3NlZENhbGxiYWNrIikpOwotICAgICAgICAgICAg
V0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKLSAgICAg
ICAgfQorICAgICAgICBpZiAoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1h
bmFnZXIoKS5wcm9jZXNzV29ya1F1ZXVlKCkpCisgICAgICAgICAgICBwb3N0UGFnZU1lc3NhZ2Uo
IldvcmtRdWV1ZVByb2Nlc3NlZENhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVl
QmFja05hdmlnYXRpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBzdGVwQ291bnQg
PSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigp
LnF1ZXVlQmFja05hdmlnYXRpb24oc3RlcENvdW50KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUJhY2tOYXZpZ2F0aW9uKHVpbnQ2
NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlRm9yd2FyZE5h
dmlnYXRpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBzdGVwQ291bnQgPSBXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVl
Rm9yd2FyZE5hdmlnYXRpb24oc3RlcENvdW50KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHVpbnQ2
NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9hZCIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbG9hZERhdGFEaWN0aW9uYXJ5
ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoInVybCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdXJsV0sgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURp
Y3Rpb25hcnksIHVybEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0YXJnZXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0
YXJnZXQiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRhcmdldFdLID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCB0
YXJnZXRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2hv
dWxkT3BlbkV4dGVybmFsVVJMc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBz
aG91bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWVXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIHNob3VsZE9wZW5F
eHRlcm5hbFVSTHNLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZCh0b1dURlN0cmluZyh1cmxXSyksIHRv
V1RGU3RyaW5nKHRhcmdldFdLKSwgV0tCb29sZWFuR2V0VmFsdWUoc2hvdWxkT3BlbkV4dGVybmFs
VVJMc1ZhbHVlV0spKTsKKyAgICAgICAgYXV0byBsb2FkRGF0YURpY3Rpb25hcnkgPSBkaWN0aW9u
YXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHVybCA9IHRvV1RGU3RyaW5nKHN0
cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgInVybCIpKTsKKyAgICAgICAgYXV0byB0YXJn
ZXQgPSB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJ0YXJnZXQi
KSk7CisgICAgICAgIGF1dG8gc2hvdWxkT3BlbkV4dGVybmFsVVJMcyA9IGJvb2xlYW5WYWx1ZShs
b2FkRGF0YURpY3Rpb25hcnksICJzaG91bGRPcGVuRXh0ZXJuYWxVUkxzIik7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkKHVy
bCwgdGFyZ2V0LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
UXVldWVMb2FkSFRNTFN0cmluZyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25h
cnlSZWYgbG9hZERhdGFEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNvbnRlbnRL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb250ZW50IikpOwot
ICAgICAgICBXS1N0cmluZ1JlZiBjb250ZW50V0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIGNvbnRlbnRLZXku
Z2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYmFzZVVSTEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImJhc2VVUkwiKSk7Ci0gICAg
ICAgIFdLU3RyaW5nUmVmIGJhc2VVUkxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgYmFzZVVSTEtleS5nZXQo
KSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJsZVVSTEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVucmVhY2hhYmxlVVJM
IikpOwotICAgICAgICBXS1N0cmluZ1JlZiB1bnJlYWNoYWJsZVVSTFdLID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5
LCB1bnJlYWNoYWJsZVVSTEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbG9hZERhdGFEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBjb250
ZW50V0sgPSBzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJjb250ZW50Iik7CisgICAg
ICAgIGF1dG8gYmFzZVVSTFdLID0gc3RyaW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAiYmFz
ZVVSTCIpOworICAgICAgICBhdXRvIHVucmVhY2hhYmxlVVJMV0sgPSBzdHJpbmdWYWx1ZShsb2Fk
RGF0YURpY3Rpb25hcnksICJ1bnJlYWNoYWJsZVVSTCIpOwogICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZEhUTUxTdHJpbmcodG9X
VEZTdHJpbmcoY29udGVudFdLKSwgYmFzZVVSTFdLID8gdG9XVEZTdHJpbmcoYmFzZVVSTFdLKSA6
IFN0cmluZygpLCB1bnJlYWNoYWJsZVVSTFdLID8gdG9XVEZTdHJpbmcodW5yZWFjaGFibGVVUkxX
SykgOiBTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MzYsMTU0ICs0ODIs
MTE3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUxvYWRpbmdTY3JpcHQiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5nKHNjcmlw
dCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZU5vbkxvYWRpbmdTY3JpcHQiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3Jr
UXVldWVNYW5hZ2VyKCkucXVldWVOb25Mb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5nKHNjcmlwdCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGlu
dWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tC
b29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRSZWplY3RzUHJvdGVjdGlv
blNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoV0tCb29sZWFuR2V0
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFJl
amVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0SGFu
ZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhhbmRsZXNBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMo
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3Vs
ZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91
bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFdLQm9vbGVhbkdldFZh
bHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91
bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRMb2dEb3dubG9hZENh
bGxiYWNrcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzKFdLQm9vbGVhbkdl
dFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
aG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVzZXJuYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgdXNlcm5hbWUgPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRB
dXRoZW50aWNhdGlvblVzZXJuYW1lKHRvV1RGU3RyaW5nKHVzZXJuYW1lKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS1N0cmluZ1JlZiBwYXNzd29yZCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdl
Qm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHBhc3N3b3JkID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXV0aGVudGlj
YXRpb25QYXNzd29yZCh0b1dURlN0cmluZyhwYXNzd29yZCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRCbG9ja0FsbFBsdWdpbnMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVm
IHNob3VsZEJsb2NrID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRCbG9ja0FsbFBsdWdpbnMoV0tC
b29sZWFuR2V0VmFsdWUoc2hvdWxkQmxvY2spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldEJsb2NrQWxsUGx1Z2lucyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0UGx1Z2luU3VwcG9ydGVkTW9kZSIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1vZGUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVz
c2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBtb2RlID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0UGx1Z2luU3Vw
cG9ydGVkTW9kZSh0b1dURlN0cmluZyhtb2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNo
b3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5IikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGVj
aWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lkZU5hdmln
YXRpb25Qb2xpY3lBZnRlckRlbGF5KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkoV0tCb29sZWFuR2V0
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNo
b3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheShib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZCIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoV0tCb29sZWFuR2V0VmFsdWUodmFs
dWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE5hdmlnYXRpb25H
ZXN0dXJlc0VuYWJsZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldElnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0
cyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hv
dWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRG93bmxv
YWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREb3dubG9hZFVuZGlzcGxh
eWFibGVNSU1FVHlwZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKFdLQm9v
bGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKGJvb2xlYW5W
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU2hv
dWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoV0tCb29sZWFu
R2V0VmFsdWUodmFsdWUpLCB0cnVlKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSksIHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNz
U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRC
bG9ja1RoaXJkUGFydHlDb29raWVzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSwgZmFsc2UpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZEJs
b2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSwgZmFsc2UpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJSdW5VSVByb2Nlc3NTY3JpcHQiKSkgewotICAgICAgICBXS0Rp
Y3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9u
YXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
Y3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTY3JpcHQi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLQotICAg
ICAgICBVSVNjcmlwdEludm9jYXRpb25EYXRhKiBpbnZvY2F0aW9uRGF0YSA9IG5ldyBVSVNjcmlw
dEludm9jYXRpb25EYXRhKCk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBpbnZvY2F0aW9uRGF0
YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRhOwogICAgICAgICBpbnZvY2F0aW9uRGF0YS0+
dGVzdEludm9jYXRpb24gPSB0aGlzOwotICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJhY2tJ
RCA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgY2FsbGJhY2tJ
REtleS5nZXQoKSkpKTsKLSAgICAgICAgaW52b2NhdGlvbkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgc2NyaXB0S2V5LmdldCgpKSk7CisgICAgICAgIGludm9jYXRpb25EYXRh
LT5jYWxsYmFja0lEID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQ2FsbGJh
Y2tJRCIpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0U3RyaW5nID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU2NyaXB0Iik7CiAgICAgICAgIG1fcGVuZGluZ1VJ
U2NyaXB0SW52b2NhdGlvbkRhdGEgPSBpbnZvY2F0aW9uRGF0YTsKICAgICAgICAgV0tQYWdlQ2Fs
bEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBpbnZvY2F0aW9uRGF0YSwgcnVuVUlTaWRlU2NyaXB0QWZ0
ZXJVcGRhdGVDYWxsYmFjayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJ1blVJUHJvY2Vzc1Njcmlw
dEltbWVkaWF0ZWx5IikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0KLSAgICAgICAgVUlTY3JpcHRJbnZvY2F0aW9uRGF0
YSogaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSgpOworICAgICAg
ICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0aW9u
RGF0YTsKICAgICAgICAgaW52b2NhdGlvbkRhdGEtPnRlc3RJbnZvY2F0aW9uID0gdGhpczsKLSAg
ICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQgPSAodW5zaWduZWQpV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGNhbGxiYWNrSURLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIGlu
dm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNjcmlwdEtleS5n
ZXQoKSkpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJhY2tJRCA9IHVpbnQ2NFZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNhbGxiYWNrSUQiKTsKKyAgICAgICAgaW52b2NhdGlv
bkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IlNjcmlwdCIpOwogICAgICAgICBtX3BlbmRpbmdVSVNjcmlwdEludm9jYXRpb25EYXRhID0gaW52
b2NhdGlvbkRhdGE7CiAgICAgICAgIHJ1blVJU2lkZVNjcmlwdEltbWVkaWF0ZWx5KG51bGxwdHIs
IGludm9jYXRpb25EYXRhKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzkxLDExICs2MDAsOSBAQCB2
b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShX
S1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJJbnN0YWxsQ3VzdG9tTWVudUFjdGlvbiIpKSB7CiAgICAgICAg
IGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibmFtZSIpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG5hbWVL
ZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRpc21pc3Nlc0F1
dG9tYXRpY2FsbHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJk
aXNtaXNzZXNBdXRvbWF0aWNhbGx5IikpOwotICAgICAgICBhdXRvIGRpc21pc3Nlc0F1dG9tYXRp
Y2FsbHkgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5LmdldCgp
KSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbnN0YWxsQ3VzdG9tTWVu
dUFjdGlvbih0b1dURlN0cmluZyhuYW1lLmdldCgpKSwgV0tCb29sZWFuR2V0VmFsdWUoZGlzbWlz
c2VzQXV0b21hdGljYWxseSkpOworICAgICAgICBhdXRvIG5hbWUgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJuYW1lIik7CisgICAgICAgIGF1dG8gZGlzbWlzc2VzQXV0b21h
dGljYWxseSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJkaXNtaXNzZXNB
dXRvbWF0aWNhbGx5Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbnN0
YWxsQ3VzdG9tTWVudUFjdGlvbih0b1dURlN0cmluZyhuYW1lKSwgZGlzbWlzc2VzQXV0b21hdGlj
YWxseSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTgwNSw3ICs2MTIsNyBAQCB2b2lk
IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0
cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBWZWN0b3I8U3RyaW5nPiBhY3Rpb25zOwogICAg
ICAgICBhY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyArK2luZGV4KQotICAgICAgICAgICAgYWN0
aW9ucy5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlH
ZXRJdGVtQXRJbmRleChtZXNzYWdlQm9keUFycmF5LCBpbmRleCkpKSk7CisgICAgICAgICAgICBh
Y3Rpb25zLmFwcGVuZCh0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShXS0FycmF5R2V0SXRlbUF0SW5k
ZXgobWVzc2FnZUJvZHlBcnJheSwgaW5kZXgpKSkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0QWxsb3dlZE1lbnVBY3Rpb25zKGFjdGlvbnMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtODI4LDEwOCArNjM1LDYzIEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1l
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0RlYnVnTW9k
ZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc0RlYnVnTW9kZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9y
RGVidWdNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1Jl
ZiBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShob3N0TmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NMYXN0U2Vl
biIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0
aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJsZVJl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0xhc3RTZWVuKGhvc3ROYW1l
LCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0
TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJW
YWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c0xhc3RTZWVuKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRp
c3RpY3NNZXJnZVN0YXRpc3RpYyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlv
bmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlS
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3RO
YW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZURvbWFpbjFLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjEi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZURvbWFpbjJLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjIi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsYXN0U2VlbktleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxhc3RTZWVuIikpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGFkVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbktl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc0dyYW5k
ZmF0aGVyZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc0dy
YW5kZmF0aGVyZWQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc1ByZXZh
bGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFs
ZW50IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNWZXJ5UHJldmFsZW50
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNWZXJ5UHJldmFs
ZW50IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZGF0YVJlY29yZHNSZW1v
dmVkS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGF0YVJlY29y
ZHNSZW1vdmVkIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGltZXNBY2Nl
c3NlZEZpcnN0UGFydHlJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlRpbWVzQWNjZXNzZWRGaXJzdFBhcnR5SW50ZXJhY3Rpb24iKSk7Ci0KLSAg
ICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5
LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lRG9tYWluMSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgdG9wRnJhbWVEb21haW4xS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IHRvcEZyYW1lRG9tYWluMiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVEb21haW4yS2V5Lmdl
dCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGxhc3RTZWVuID0gc3RhdGljX2Nhc3Q8V0tEb3Vi
bGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBs
YXN0U2VlbktleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaGFkVXNlckludGVyYWN0
aW9uID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGFkVXNlckludGVyYWN0aW9uS2V5LmdldCgpKSk7Ci0g
ICAgICAgIFdLRG91YmxlUmVmIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBzdGF0aWNfY2Fz
dDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tC
b29sZWFuUmVmIGlzR3JhbmRmYXRoZXJlZCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzR3JhbmRmYXRo
ZXJlZEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNQcmV2YWxlbnQgPSBzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBpc1ByZXZhbGVudEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5S
ZWYgaXNWZXJ5UHJldmFsZW50ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNWZXJ5UHJldmFsZW50S2V5
LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgZGF0YVJlY29yZHNSZW1vdmVkS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyhob3N0
TmFtZSwgdG9wRnJhbWVEb21haW4xLCB0b3BGcmFtZURvbWFpbjIsIFdLRG91YmxlR2V0VmFsdWUo
bGFzdFNlZW4pLCBXS0Jvb2xlYW5HZXRWYWx1ZShoYWRVc2VySW50ZXJhY3Rpb24pLCBXS0RvdWJs
ZUdldFZhbHVlKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pLCBXS0Jvb2xlYW5HZXRWYWx1ZShp
c0dyYW5kZmF0aGVyZWQpLCBXS0Jvb2xlYW5HZXRWYWx1ZShpc1ByZXZhbGVudCksIFdLQm9vbGVh
bkdldFZhbHVlKGlzVmVyeVByZXZhbGVudCksIFdLVUludDY0R2V0VmFsdWUoZGF0YVJlY29yZHNS
ZW1vdmVkKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFy
eVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdG9wRnJh
bWVEb21haW4xID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVE
b21haW4xIik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVEb21haW4yID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVEb21haW4yIik7CisgICAgICAgIGF1dG8gbGFz
dFNlZW4gPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJMYXN0U2VlbiIpOwor
ICAgICAgICBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJIYWRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIGlzR3JhbmRmYXRoZXJl
ZCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc0dyYW5kZmF0aGVyZWQi
KTsKKyAgICAgICAgYXV0byBpc1ByZXZhbGVudCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJJc1ByZXZhbGVudCIpOworICAgICAgICBhdXRvIGlzVmVyeVByZXZhbGVudCA9
IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc1ZlcnlQcmV2YWxlbnQiKTsK
KyAgICAgICAgYXV0byBkYXRhUmVjb3Jkc1JlbW92ZWQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJEYXRhUmVjb3Jkc1JlbW92ZWQiKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyhob3N0TmFtZSwgdG9w
RnJhbWVEb21haW4xLCB0b3BGcmFtZURvbWFpbjIsIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rp
b24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxl
bnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7
Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGhhZFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBpc1ByZXZhbGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3RO
YW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgaGFkVXNlckludGVyYWN0aW9uID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGFkVXNlcklu
dGVyYWN0aW9uS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc1NjaGVkdWxlZEZv
ckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNTY2hlZHVsZWRG
b3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5S
ZWYgaXNQcmV2YWxlbnQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1ByZXZhbGVudEtleS5nZXQoKSkp
OwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRXhw
aXJlZFN0YXRpc3RpYyhob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUoaGFkVXNlckludGVyYWN0
aW9uKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCksIFdLQm9vbGVhbkdldFZhbHVlKGlzUHJldmFsZW50KSk7CisgICAgICAgIGF1dG8gbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhv
c3ROYW1lIik7CisgICAgICAgIGF1dG8gaGFkVXNlckludGVyYWN0aW9uID0gYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhhZFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBh
dXRvIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgPSBib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCIpOworICAgICAgICBhdXRvIGlzUHJldmFsZW50ID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIklzUHJldmFsZW50Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyhob3N0TmFtZSwgaGFkVXNl
ckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1By
ZXZhbGVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1l
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVz
b3VyY2UoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8g
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
Ikhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
aG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
YXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3RO
YW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUsIHZhbHVlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTQ0LDUxICs3MDYsMzUgQEAgdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVz
c2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9k
aWZpZWRTaW5jZUhvdXJzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgaG91cnMg
PSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
U3RvcmVNb2RpZmllZFNpbmNlSG91cnMoV0tVSW50NjRHZXRWYWx1ZShob3VycykpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModWludDY0VmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVy
cmVyIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKFdLQm9vbGVh
bkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoYm9vbGVhblZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFs
dWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTdGF0aXN0aWNzU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXMoaG9zdE5hbWUpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVzKHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NT
ZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBmaXJzdFBhcnR5VVJMU3RyaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRmlyc3RQYXJ0eVVSTCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGNuYW1lVVJMU3RyaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ05BTUUiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBm
aXJzdFBhcnR5VVJMU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmaXJzdFBhcnR5VVJMU3RyaW5n
S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBjbmFtZVVSTFN0cmluZ0tleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIGZpcnN0UGFydHlVUkxTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJGaXJzdFBhcnR5VVJMIik7CisgICAgICAgIGF1dG8gY25hbWVVUkxT
dHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJDTkFNRSIpOwogICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0UGFydHlI
b3N0Q05BTUVEb21haW4oZmlyc3RQYXJ0eVVSTFN0cmluZywgY25hbWVVUkxTdHJpbmcpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbihjbmFtZVVSTFN0cmlu
Zyk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVGhp
cmRQYXJ0eUNOQU1FRG9tYWluKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTEwMTIsOCArNzU4LDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdl
dEFwcGxpY2F0aW9uTWFuaWZlc3QiKSkgewogI2lmZGVmIF9fQkxPQ0tTX18KICAgICAgICAgV0tQ
YWdlR2V0QXBwbGljYXRpb25NYW5pZmVzdF9iKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIF57Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJEaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0IikpOwotICAgICAgICAgICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgICAgIHBvc3RQ
YWdlTWVzc2FnZSgiRGlkR2V0QXBwbGljYXRpb25NYW5pZmVzdCIpOwogICAgICAgICB9KTsKICNl
bHNlCiAgICAgICAgIC8vIEZJWE1FOiBBZGQgQVBJIGZvciBsb2FkaW5nIHRoZSBtYW5pZmVzdCBv
biBub24tX19CTE9DS1NfXyBwb3J0cy4KQEAgLTEwMjMsMTYgKzc2OCwxMCBAQCB2b2lkIFRlc3RJ
bnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1Jl
ZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFs
dWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9u
KGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAg
IGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0
TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNDMsOCArNzgyLDcgQEAgdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVz
c2FnZU5hbWUKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0QXBwQm91bmREb21haW5zIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0FycmF5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0FycmF5UmVm
IG9yaWdpblVSTHMgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBcHBCb3VuZERvbWFpbnMob3JpZ2lu
VVJMcyk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBcHBCb3VuZERv
bWFpbnMoc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4obWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMTA1NSw5NCArNzkzLDcwIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0
ZWRCCiB7CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJJbml0aWFsaXphdGlvbiIpKSB7CiAgICAgICAgIGF1dG8gc2V0dGluZ3MgPSBjcmVhdGVUZXN0
U2V0dGluZ3NEaWN0aW9uYXJ5KCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBy
ZXN1bWVUZXN0aW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
UmVzdW1lVGVzdGluZyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiByZXN1
bWVUZXN0aW5nVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX3N0YXJ0ZWRUZXN0aW5n
KSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oc2V0dGluZ3MuZ2V0KCksIHJlc3VtZVRl
c3RpbmdLZXkuZ2V0KCksIHJlc3VtZVRlc3RpbmdWYWx1ZS5nZXQoKSk7CisgICAgICAgIHNldFZh
bHVlKHNldHRpbmdzLCAiUmVzdW1lVGVzdGluZyIsIG1fc3RhcnRlZFRlc3RpbmcpOwogICAgICAg
ICByZXR1cm4gc2V0dGluZ3M7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXREdW1wUGl4ZWxzIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIG1fZHVtcFBpeGVscyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgbV9kdW1wUGl4ZWxzID0gYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0RHVtcFBpeGVscyIp
KQogICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wUGl4ZWxzKSk7
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFdoYXRUb0R1bXAiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBtX3doYXRUb0R1bXAgPSBzdGF0aWNf
Y2FzdDxXaGF0VG9EdW1wPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgbV93aGF0VG9EdW1wID0gc3RhdGljX2Nhc3Q8V2hh
dFRvRHVtcD4odWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiR2V0V2hhdFRvRHVtcCIpKQogICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obV93aGF0VG9EdW1wKSkpOwogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRXYWl0VW50aWxEb25l
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIHNldFdhaXRVbnRpbERvbmUoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSkpKSk7CisgICAgICAgIHNldFdhaXRVbnRpbERvbmUoYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldFdhaXRVbnRpbERvbmUi
KSkKICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fd2FpdFVudGlsRG9u
ZSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1fZHVt
cEZyYW1lTG9hZENhbGxiYWNrcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KFdLQm9vbGVh
bkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAg
ICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKSkK
ICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcEZyYW1lTG9hZENh
bGxiYWNrcykpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRDYW5PcGVuV2luZG93cyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBtX2Nhbk9w
ZW5XaW5kb3dzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oV0tCb29sZWFuR2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgbV9jYW5P
cGVuV2luZG93cyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0V2luZG93SXNLZXkiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIGlzS2V5VmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnNl
dFdpbmRvd0lzS2V5KFdLQm9vbGVhbkdldFZhbHVlKGlzS2V5VmFsdWUpKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnNldFdpbmRvd0lzS2V5KGJv
b2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFZpZXdTaXplIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aWR0aCIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlaWdodEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImhlaWdodCIpKTsKLQotICAgICAgICBXS0RvdWJsZVJlZiB3aWR0aFdL
ID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB3aWR0aEtleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJsZVJl
ZiBoZWlnaHRXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGVpZ2h0S2V5LmdldCgpKSk7Ci0KLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnJlc2l6ZVRvKFdL
RG91YmxlR2V0VmFsdWUod2lkdGhXSyksIFdLRG91YmxlR2V0VmFsdWUoaGVpZ2h0V0spKTsKKyAg
ICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2Fn
ZUJvZHkpOworICAgICAgICBhdXRvIHdpZHRoID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAid2lkdGgiKTsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBkb3VibGVWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJoZWlnaHQiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnJlc2l6ZVRvKHdpZHRoLCBoZWlnaHQpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKSkgewotICAg
ICAgICBib29sIGlzQWN0aXZlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzR2VvbG9j
YXRpb25Qcm92aWRlckFjdGl2ZSgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJl
c3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzQWN0aXZlKSk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIpKQorICAgICAgICByZXR1cm4g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzR2Vv
bG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldENhY2hlTW9kZWwiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAg
ICAgICB1aW50NjRfdCBtb2RlbCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHVpbnQ2NF90IG1vZGVsID0gdWludDY0VmFs
dWUobWVzc2FnZUJvZHkpOwogICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmVTZXRDYWNoZU1vZGVs
U3luY2hyb25vdXNseUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndlYnNp
dGVEYXRhU3RvcmUoKSwgbW9kZWwpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
LSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzV29y
a1F1ZXVlRW1wdHkiKSkgewotICAgICAgICBib29sIGlzRW1wdHkgPSBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLmlzV29ya1F1ZXVlRW1wdHkoKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShpc0VtcHR5KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNXb3JrUXVldWVFbXB0eSIp
KQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5pc1dvcmtRdWV1ZUVtcHR5KCkpKTsKIAot
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpIHsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9y
UHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkKKyAgICAgICAg
cmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oKSkpOwog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDbGVh
ckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpKSB7CiAg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhckRpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpOwpAQCAtMTE1MCw0MCArODY0LDM1IEBA
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJv
bm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZWN1cmVFdmVudElucHV0SXNFbmFibGVkIikp
IHsKLSNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KElzU2VjdXJlRXZlbnRJbnB1dEVuYWJsZWQoKSkpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAg
ICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKElzU2VjdXJlRXZlbnRJbnB1dEVuYWJs
ZWQoKSkpOwogI2Vsc2UKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiByZXN1bHQg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShmYWxzZSkpOworICAgICAgICByZXR1cm4gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoZmFsc2UpKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0Q3VzdG9tVXNlckFnZW50IikpIHsKLSAgICAgICAgV0tTdHJpbmdSZWYgdXNlckFn
ZW50ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tQ
YWdlU2V0Q3VzdG9tVXNlckFnZW50KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIHVzZXJBZ2VudCk7CisgICAgICAgIFdLUGFnZVNldEN1c3RvbVVzZXJB
Z2VudChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlIikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKFdLQm9vbGVhbkdldFZhbHVlKHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sZWFuVmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hv
dWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSkgewotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lv
bk9uTmV4dE5hdmlnYXRpb24oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJvb2xlYW5W
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRT
aG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSkgewotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uKFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW1hZ2VDb3VudElu
R2VuZXJhbFBhc3RlYm9hcmQiKSkgewotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5pbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCgpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShjb3VudCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkltYWdlQ291bnRJbkdlbmVy
YWxQYXN0ZWJvYXJkIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCgp
KSk7CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJEZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzIikpIHsKICAgICAgICAgV0tXZWJzaXRlRGF0
YVN0b3JlUmVtb3ZlQWxsSW5kZXhlZERhdGFiYXNlcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkud2Vic2l0ZURhdGFTdG9yZSgpLCBudWxscHRyLCB7IH0pOwpAQCAtMTE5MSwxNyArOTAwLDEw
IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5j
aHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRNb2NrTWVkaWFEZXZpY2UiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdl
dFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJzaXN0ZW50SURLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQZXJzaXN0ZW50SUQiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBsYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkxhYmVsIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dHlwZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlR5cGUiKSk7
Ci0KLSAgICAgICAgYXV0byBwZXJzaXN0ZW50SUQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBlcnNpc3Rl
bnRJREtleS5nZXQoKSkpOwotICAgICAgICBhdXRvIGxhYmVsID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBs
YWJlbEtleS5nZXQoKSkpOwotICAgICAgICBhdXRvIHR5cGUgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHR5
cGVLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gcGVyc2lzdGVudElEID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUGVyc2lzdGVudElEIik7CisgICAg
ICAgIGF1dG8gbGFiZWwgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJMYWJl
bCIpOworICAgICAgICBhdXRvIHR5cGUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJUeXBlIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5hZGRNb2Nr
TWVkaWFEZXZpY2UocGVyc2lzdGVudElELCBsYWJlbCwgdHlwZSk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KQEAgLTEyMTIsOSArOTE0LDcgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3Rl
ZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlJlbW92ZU1vY2tNZWRpYURldmljZSIpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBl
cnNpc3RlbnRJZCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJlbW92ZU1vY2tNZWRpYURldmljZShw
ZXJzaXN0ZW50SWQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVtb3Zl
TW9ja01lZGlhRGV2aWNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIApAQCAtMTIyNCwxNDIgKzkyNCw4NyBAQCBXS1JldGFpblB0cjxX
S1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJv
bUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uIikpIHsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbihXS1VJbnQ2
NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbih1
aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklz
TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkIikpIHsKLSAgICAgICAgYm9vbCBp
c01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCA9IFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5pc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgpOwotICAg
ICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNNb2NrUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlckVuYWJsZWQpKTsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5h
YmxlZCIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVk
KCkpKTsKICAgICAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIkhhc0FwcEJvdW5kU2Vzc2lvbiIpKSB7Ci0gICAgICAgIGJvb2wgaGFzQXBwQm91bmRT
ZXNzaW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc0FwcEJvdW5kU2Vzc2lvbigp
OwotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzQXBwQm91bmRTZXNz
aW9uKSk7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiSGFzQXBwQm91bmRTZXNzaW9uIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzQXBwQm91bmRTZXNz
aW9uKCkpKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNvbm5lY3RNb2NrR2FtZXBhZCIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7
Ci0KLSAgICAgICAgdWludDY0X3QgaW5kZXggPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6
OmNvbm5lY3RNb2NrR2FtZXBhZChpbmRleCk7Ci0gICAgICAgIAorICAgICAgICBXZWJDb3JlVGVz
dFN1cHBvcnQ6OmNvbm5lY3RNb2NrR2FtZXBhZCh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRpc2Nvbm5lY3RNb2NrR2FtZXBhZCIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBl
SUQoKSk7Ci0KLSAgICAgICAgdWludDY0X3QgaW5kZXggPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBXZWJDb3JlVGVzdFN1
cHBvcnQ6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZChpbmRleCk7Ci0KKyAgICAgICAgV2ViQ29yZVRl
c3RTdXBwb3J0OjpkaXNjb25uZWN0TW9ja0dhbWVwYWQodWludDY0VmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2FtZXBhZERldGFpbHMiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSW5kZXhLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSUQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtYXBwaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiTWFwcGluZyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4aXND
b3VudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNDb3Vu
dCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1dHRvbkNvdW50S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uQ291bnQiKSk7Ci0K
LSAgICAgICAgV0tVSW50NjRSZWYgZ2FtZXBhZEluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBnYW1l
cGFkSW5kZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgZ2FtZXBhZElEID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSURLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
bWFwcGluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbWFwcGluZ0tleS5nZXQoKSkpOwotICAgICAgICBX
S1VJbnQ2NFJlZiBheGlzQ291bnQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGF4aXNDb3VudEtleS5nZXQo
KSkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBidXR0b25Db3VudCA9IHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
YnV0dG9uQ291bnRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNl
dE1vY2tHYW1lcGFkRGV0YWlscyhXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRleCksIHRvV1RG
U3RyaW5nKGdhbWVwYWRJRCksIHRvV1RGU3RyaW5nKG1hcHBpbmcpLCBXS1VJbnQ2NEdldFZhbHVl
KGF4aXNDb3VudCksIFdLVUludDY0R2V0VmFsdWUoYnV0dG9uQ291bnQpKTsKKyAgICAgICAgYXV0
byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOwor
ICAgICAgICBhdXRvIGdhbWVwYWRJbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIkdhbWVwYWRJbmRleCIpOworICAgICAgICBhdXRvIGdhbWVwYWRJRCA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJRCIpOworICAgICAgICBhdXRvIG1h
cHBpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJNYXBwaW5nIik7Cisg
ICAgICAgIGF1dG8gYXhpc0NvdW50ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiQXhpc0NvdW50Iik7CisgICAgICAgIGF1dG8gYnV0dG9uQ291bnQgPSB1aW50NjRWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJCdXR0b25Db3VudCIpOworICAgICAgICBXZWJDb3JlVGVz
dFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkRGV0YWlscyhnYW1lcGFkSW5kZXgsIHRvV1RGU3RyaW5n
KGdhbWVwYWRJRCksIHRvV1RGU3RyaW5nKG1hcHBpbmcpLCBheGlzQ291bnQsIGJ1dHRvbkNvdW50
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9u
YXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4aXNJbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNJbmRleCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tVSW50NjRSZWYgZ2FtZXBhZEluZGV4ID0gc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSW5kZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tVSW50NjRS
ZWYgYXhpc0luZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBheGlzSW5kZXhLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgp
KSk7Ci0KLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZEF4aXNWYWx1
ZShXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRleCksIFdLVUludDY0R2V0VmFsdWUoYXhpc0lu
ZGV4KSwgV0tEb3VibGVHZXRWYWx1ZSh2YWx1ZSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBnYW1lcGFkSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJHYW1l
cGFkSW5kZXgiKTsKKyAgICAgICAgYXV0byBheGlzSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJBeGlzSW5kZXgiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGRvdWJs
ZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFdlYkNvcmVU
ZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUoZ2FtZXBhZEluZGV4LCBheGlzSW5k
ZXgsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2FtZXBhZEJ1
dHRvblZhbHVlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZ2FtZXBhZEluZGV4S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4Iikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uSW5kZXhLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25JbmRleCIpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tVSW50NjRSZWYgZ2Ft
ZXBhZEluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSW5kZXhLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tVSW50NjRSZWYgYnV0dG9uSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbklu
ZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8
V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0
TW9ja0dhbWVwYWRCdXR0b25WYWx1ZShXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRleCksIFdL
VUludDY0R2V0VmFsdWUoYnV0dG9uSW5kZXgpLCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7Ci0K
KyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVz
c2FnZUJvZHkpOworICAgICAgICBhdXRvIGdhbWVwYWRJbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJbmRleCIpOworICAgICAgICBhdXRvIGJ1dHRvbklu
ZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQnV0dG9uSW5kZXgiKTsK
KyAgICAgICAgYXV0byB2YWx1ZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IlZhbHVlIik7CisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRCdXR0
b25WYWx1ZShnYW1lcGFkSW5kZXgsIGJ1dHRvbkluZGV4LCB2YWx1ZSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0Q291bnRGb3JPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBv
cmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4i
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBvcmln
aW5LZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50
T3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50
T3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW5XSyA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgcGFyZW50T3JpZ2luS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRv
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7Cisg
ICAgICAgIGF1dG8gb3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJvcmlnaW4iKTsKKyAgICAgICAgYXV0byBwYXJlbnRPcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgInBhcmVudE9yaWdpbiIpOwogICAgICAgICB1bnNpZ25lZCBj
b3VudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS51c2VyTWVkaWFQZXJtaXNzaW9uUmVx
dWVzdENvdW50Rm9yT3JpZ2luKG9yaWdpbldLLCBwYXJlbnRPcmlnaW5XSyk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLVUludDY0UmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNv
dW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNEb2luZ01lZGlhQ2FwdHVyZSIpKSB7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzRG9pbmdNZWRpYUNhcHR1cmUo
KSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShjb3VudCkpOwogICAgIH0KKworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNEb2luZ01lZGlhQ2FwdHVyZSIpKQorICAgICAgICBy
ZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmlzRG9pbmdNZWRpYUNhcHR1cmUoKSkpOwogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYXJTdGF0aXN0aWNzRGF0YUZvckRvbWFpbiIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGRvbWFpbiA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4oZG9tYWluKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4oc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEb2Vz
U3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGRvbWFpbklES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRG9tYWluSUQiKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGRvbWFpbklEID0gc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBkb21haW5JREtleS5nZXQoKSkpOwotICAgICAgICBib29sIGRvbWFpbklERXhpc3Rz
ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRvZXNTdGF0aXN0aWNzRG9tYWluSURFeGlz
dEluRGF0YWJhc2UoV0tVSW50NjRHZXRWYWx1ZShkb21haW5JRCkpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRvbWFpbklE
RXhpc3RzKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGF1dG8gbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBkb21haW5JRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkRvbWFpbklE
Iik7CisgICAgICAgIGJvb2wgZG9tYWluSURFeGlzdHMgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZShkb21haW5JRCk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkb21haW5JREV4aXN0cykpOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0U3RhdGlzdGljc0VuYWJsZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFu
UmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRW5hYmxlZChXS0Jv
b2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc0VuYWJsZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzRXBoZW1lcmFsIikpIHsKLSAgICAg
ICAgYm9vbCBpc0VwaGVtZXJhbCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRp
c3RpY3NFcGhlbWVyYWwoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0VwaGVtZXJhbCkpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0VwaGVtZXJhbCgpKSk7CiAgICAgfQogICAg
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MiKSkgewpAQCAtMTM2OCwyMjQgKzEwMTMsMTI4IEBAIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91
c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdH
ZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBib29sIGlzUHJldmFsZW50ID0g
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
KGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICBib29sIGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7
CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiSXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAg
ICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudCA9IFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoaG9zdE5h
bWUpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0
aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpOwogICAg
IH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJ
RCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1YnJlc291cmNlSG9zdEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1YnJlc291cmNlSG9zdCIpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lSG9zdEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdCIpKTsKLSAgICAgICAgCi0g
ICAgICAgIFdLU3RyaW5nUmVmIHN1YnJlc291cmNlSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3Vi
cmVzb3VyY2VIb3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lSG9z
dCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIAor
ICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNz
YWdlQm9keSk7CisgICAgICAgIGF1dG8gc3VicmVzb3VyY2VIb3N0ID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiU3VicmVzb3VyY2VIb3N0Iik7CisgICAgICAgIGF1dG8gdG9w
RnJhbWVIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVI
b3N0Iik7CiAgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyID0gVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIoc3VicmVzb3VyY2VIb3N0LCB0b3BGcmFtZUhvc3QpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0
ZXJlZEFzU3VicmVzb3VyY2VVbmRlcikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyKSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9u
YXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViRnJhbWVIb3N0S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViRnJhbWVIb3N0IikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpOwotICAgICAg
ICAKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViRnJhbWVIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBz
dWJGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVIb3N0
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLQorICAgICAgICBh
dXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7
CisgICAgICAgIGF1dG8gc3ViRnJhbWVIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiU3ViRnJhbWVIb3N0Iik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVIb3N0ID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVIb3N0Iik7CiAgICAgICAg
IGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyID0gVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoc3ViRnJhbWVIb3N0
LCB0b3BGcmFtZUhvc3QpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcikpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKSk7CiAgICAgfQogICAgIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNz
UmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAg
ICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0
PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaG9zdFJlZGlyZWN0ZWRGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSG9zdFJlZGlyZWN0ZWRGcm9tIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaG9zdFJlZGlyZWN0ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkVG8iKSk7Ci0gICAgICAgIAotICAgICAg
ICBXS1N0cmluZ1JlZiBob3N0UmVkaXJlY3RlZEZyb20gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3RS
ZWRpcmVjdGVkRnJvbUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0UmVkaXJl
Y3RlZFRvID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0UmVkaXJlY3RlZFRvS2V5LmdldCgpKSk7Ci0g
ICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlW
YWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdFJlZGlyZWN0ZWRGcm9tID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdFJlZGlyZWN0ZWRGcm9tIik7Cisg
ICAgICAgIGF1dG8gaG9zdFJlZGlyZWN0ZWRUbyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkhvc3RSZWRpcmVjdGVkVG8iKTsKICAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNz
UmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhob3N0UmVkaXJlY3RlZEZyb20sIGhvc3RSZWRpcmVj
dGVkVG8pOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbykpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNS
ZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50
ZXJhY3Rpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9z
dE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBi
b29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5p
c1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0hh
ZFVzZXJJbnRlcmFjdGlvbikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBib29s
IGhhc0hhZFVzZXJJbnRlcmFjdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0
YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0hhZFVzZXJJbnRlcmFj
dGlvbikpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZSIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlw
ZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBhdXRvIHN1Ykhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdWJIb3N0IikpOwotICAgICAgICBhdXRvIHRvcEhvc3RLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BIb3N0IikpOwotICAgICAgICAKLSAgICAgICAg
V0tTdHJpbmdSZWYgc3ViSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViSG9zdEtleS5nZXQoKSkp
OwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BIb3N0
S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1Ykhvc3QgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTdWJIb3N0Iik7CisgICAgICAgIGF1dG8gdG9w
SG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEhvc3QiKTsKICAg
ICAgICAgYm9vbCBzdGF0aXN0aWNJbkRhdGFiYXNlT25jZSA9IFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5pc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2Uoc3ViSG9zdCwgdG9wSG9zdCk7
CiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzdGF0aXN0aWNJbkRhdGFi
YXNlT25jZSkpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJWYWx1ZSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1l
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotICAgICAg
ICAKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NHcmFu
ZGZhdGhlcmVkKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBh
dXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7
CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChob3N0TmFtZSwgdmFsdWUpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBpc0dyYW5k
ZmF0aGVyZWQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzR3JhbmRm
YXRoZXJlZChob3N0TmFtZSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhlcmVkKSk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVkID0gVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzR3Jh
bmRmYXRoZXJlZCkpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlSVRQRGF0YWJhc2UiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLQotICAg
ICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVzZUlUUERh
dGFiYXNlKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRVc2VJVFBEYXRhYmFzZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
b3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lSG9z
dE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFt
ZUhvc3ROYW1lIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IHRvcEZyYW1lSG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lSG9zdE5hbWVLZXku
Z2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25h
cnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHRvcEZy
YW1lSG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFt
ZUhvc3ROYW1lIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGhvc3ROYW1lLCB0b3BGcmFtZUhvc3RO
YW1lKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAg
ICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0
PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZy
YW1lSG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJU
b3BGcmFtZUhvc3ROYW1lIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lSG9zdE5h
bWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFt
ZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAg
ICAgIGF1dG8gdG9wRnJhbWVIb3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIlRvcEZyYW1lSG9zdE5hbWUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oaG9zdE5h
bWUsIHRvcEZyYW1lSG9zdE5hbWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKTsKLSAgICAgICAgCi0gICAg
ICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5n
ZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVSZWRpcmVjdGVk
VG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZVJlZGlyZWN0
ZWRUbyIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhob3N0TmFtZSwgaG9zdE5hbWVSZWRpcmVjdGVk
VG8pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
b3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lUmVk
aXJlY3RlZEZyb21LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
b3N0TmFtZVJlZGlyZWN0ZWRGcm9tIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYg
aG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20gPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhv
c3ROYW1lUmVkaXJlY3RlZEZyb21LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8g
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
Ikhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKTsK
ICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShob3N0TmFtZSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0VG8iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhv
c3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZVJlZGlyZWN0
ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1l
UmVkaXJlY3RlZFRvIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZVJlZGly
ZWN0ZWRUb0tleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhv
c3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsK
KyAgICAgICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZFRvIik7CiAgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRv
KGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0
VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIikpOwot
ICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXkuZ2V0
KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGlj
dGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8g
aG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShob3N0TmFt
ZSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIGF1dG8gZnJvbUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJGcm9tSG9zdCIpKTsKLSAgICAgICAgYXV0byB0b0hvc3RLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb0hvc3QiKSk7Ci0KLSAgICAgICAgV0tTdHJp
bmdSZWYgZnJvbUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZyb21Ib3N0S2V5LmdldCgpKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIHRvSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9Ib3N0S2V5Lmdl
dCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZnJvbUhvc3QgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJGcm9tSG9zdCIpOworICAgICAgICBhdXRv
IHRvSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvSG9zdCIpOwog
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0Nyb3NzU2l0
ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oZnJvbUhvc3QsIHRvSG9zdCk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24iKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tE
b3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFdLRG91YmxlR2V0VmFs
dWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIApAQCAtMTYwMCw5NyArMTE0
OSw2OSBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZl
U3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc05vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1NldElzUnVubmluZ1Rlc3Qi
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1
ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0lz
UnVubmluZ1Rlc3QoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFs
dWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZENs
YXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoV0tEb3VibGVHZXRWYWx1ZShzZWNvbmRz
KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWlu
aW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NHcmFuZGZh
dGhlcmluZ1RpbWUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0g
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoV0tEb3Vi
bGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1heFN0YXRpc3RpY3NFbnRy
aWVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJ
bnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgZW50cmllcyA9IHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMoV0tVSW50NjRHZXRW
YWx1ZShlbnRyaWVzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0UHJ1bmVFbnRyaWVzRG93blRvIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgZW50cmllcyA9IHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKFdLVUludDY0R2V0VmFsdWUoZW50
cmllcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c1BydW5lRW50cmllc0Rvd25Ubyh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdCIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0
VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSW5jbHVkZUh0dHBPbmx5Q29va2llcyIpKTsKLSAgICAgICAgCi0gICAgICAg
IFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQo
KSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaW5jbHVkZUh0dHBPbmx5Q29va2llcyA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0gICAgICAgIAotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0KGhvc3RO
YW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSk7CisgICAgICAg
IGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaW5jbHVkZUh0dHBPbmx5Q29va2llcyA9
IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJbmNsdWRlSHR0cE9ubHlDb29r
aWVzIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzRGVs
ZXRlQ29va2llc0Zvckhvc3QoaG9zdE5hbWUsIGluY2x1ZGVIdHRwT25seUNvb2tpZXMpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGJvb2wgaGFzTG9jYWxTdG9yYWdl
ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFn
ZShob3N0TmFtZSk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaGFzTG9jYWxTdG9yYWdlKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0
aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBz
ZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcChX
S0RvdWJsZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcChkb3VibGVWYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkhhc1N0YXRpc3RpY3NJc29sYXRlZFNl
c3Npb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
U3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBib29sIGhhc0lz
b2xhdGVkU2Vzc2lvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNTdGF0aXN0aWNz
SXNvbGF0ZWRTZXNzaW9uKGhvc3ROYW1lKTsKICAgICAgICAgYXV0byByZXN1bHQgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShoYXNJc29sYXRlZFNlc3Npb24pKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIkNsZWFyRE9NQ2FjaGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1Jl
ZiBvcmlnaW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCisgICAg
ICAgIGF1dG8gb3JpZ2luID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYXJET01DYWNoZShvcmlnaW4pOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xNzAxLDM1ICsxMjIyLDI0IEBAIFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VG
cm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJIYXNET01DYWNoZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0K
KyAgICAgICAgYXV0byBvcmlnaW4gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAg
IGJvb2wgaGFzRE9NQ2FjaGUgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzRE9NQ2Fj
aGUob3JpZ2luKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNET01DYWNoZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzRE9NQ2FjaGUpKTsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkRPTUNhY2hlU2l6ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdp
biA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KKyAgICAgICAgYXV0
byBvcmlnaW4gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGF1dG8gZG9tQ2Fj
aGVTaXplID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRvbUNhY2hlU2l6ZShvcmlnaW4p
OwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoZG9tQ2FjaGVTaXplKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRvbUNhY2hlU2l6ZSkpOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWxs
b3dTdG9yYWdlUXVvdGFJbmNyZWFzZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBhdXRvIGNhbklu
Y3JlYXNlID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNz
YWdlQm9keSkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWxsb3dT
dG9yYWdlUXVvdGFJbmNyZWFzZShjYW5JbmNyZWFzZSk7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkluamVjdFVzZXJTY3Jp
cHQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3Ry
aW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5pbmplY3RVc2VyU2NyaXB0KHNjcmlwdCk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5pbmplY3RVc2VyU2NyaXB0KHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTczOSwxNSArMTI0OSwx
MiBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3lu
Y2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2VydmljZVdvcmtlckZldGNoVGlt
ZW91dCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
b3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNf
Y2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoV0tEb3Vi
bGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhkb3VibGVWYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgYXV0byB1c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSkpOworICAgICAgICBhdXRvIHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5jb250ZXh0KCksIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xNzY1LDYwICsxMjcyLDM1IEBAIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91
c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRUZXN0S2V5VG9LZXljaGFpbiIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgdGVzdEtleURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gcHJpdmF0ZUtleUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlByaXZhdGVLZXkiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHByaXZh
dGVLZXlXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KHRlc3RLZXlEaWN0aW9uYXJ5LCBwcml2YXRlS2V5S2V5LmdldCgpKSk7Ci0KLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJMYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
YXR0ckxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleSh0ZXN0S2V5RGljdGlvbmFyeSwgYXR0ckxhYmVsS2V5LmdldCgpKSk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFwcGxpY2F0aW9uVGFnS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25UYWciKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIGFwcGxpY2F0aW9uVGFnV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0S2V5RGljdGlvbmFyeSwgYXBwbGljYXRpb25U
YWdLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIHRlc3RLZXlEaWN0aW9uYXJ5ID0gZGljdGlv
bmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBwcml2YXRlS2V5V0sgPSBzdHJp
bmdWYWx1ZSh0ZXN0S2V5RGljdGlvbmFyeSwgIlByaXZhdGVLZXkiKTsKKyAgICAgICAgYXV0byBh
dHRyTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3RLZXlEaWN0aW9uYXJ5LCAiQXR0ckxhYmVsIik7
CisgICAgICAgIGF1dG8gYXBwbGljYXRpb25UYWdXSyA9IHN0cmluZ1ZhbHVlKHRlc3RLZXlEaWN0
aW9uYXJ5LCAiQXBwbGljYXRpb25UYWciKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmFkZFRlc3RLZXlUb0tleWNoYWluKHRvV1RGU3RyaW5nKHByaXZhdGVLZXlXSyksIHRv
V1RGU3RyaW5nKGF0dHJMYWJlbFdLKSwgdG9XVEZTdHJpbmcoYXBwbGljYXRpb25UYWdXSykpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFuVXBLZXljaGFpbiIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgdGVzdERpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQXR0ckxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhdHRyTGFiZWxXSyA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3RE
aWN0aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gYXBwbGljYXRpb25MYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IGFwcGxpY2F0aW9uTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5LCBhcHBsaWNhdGlvbkxhYmVsS2V5LmdldCgp
KSk7Ci0KKyAgICAgICAgYXV0byB0ZXN0RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNz
YWdlQm9keSk7CisgICAgICAgIGF1dG8gYXR0ckxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0RGlj
dGlvbmFyeSwgIkF0dHJMYWJlbCIpOworICAgICAgICBhdXRvIGFwcGxpY2F0aW9uTGFiZWxXSyA9
IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXBwbGljYXRpb25MYWJlbCIpOwogICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYW5VcEtleWNoYWluKHRvV1RGU3RyaW5n
KGF0dHJMYWJlbFdLKSwgYXBwbGljYXRpb25MYWJlbFdLID8gdG9XVEZTdHJpbmcoYXBwbGljYXRp
b25MYWJlbFdLKSA6IFN0cmluZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJLZXlF
eGlzdHNJbktleWNoYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJl
ZiB0ZXN0RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdHRyTGFiZWxLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSk7Ci0gICAg
ICAgIFdLU3RyaW5nUmVmIGF0dHJMYWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERpY3Rpb25hcnksIGF0dHJMYWJlbEtleS5nZXQo
KSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhcHBsaWNhdGlvbkxhYmVs
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25M
YWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXBwbGljYXRpb25MYWJlbFdLID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERpY3Rpb25h
cnksIGFwcGxpY2F0aW9uTGFiZWxLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIHRlc3REaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBhdHRy
TGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXR0ckxhYmVsIik7CisgICAg
ICAgIGF1dG8gYXBwbGljYXRpb25MYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERpY3Rpb25hcnks
ICJBcHBsaWNhdGlvbkxhYmVsIik7CiAgICAgICAgIGJvb2wga2V5RXhpc3RzSW5LZXljaGFpbiA9
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5rZXlFeGlzdHNJbktleWNoYWluKHRvV1RGU3Ry
aW5nKGF0dHJMYWJlbFdLKSwgdG9XVEZTdHJpbmcoYXBwbGljYXRpb25MYWJlbFdLKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoa2V5RXhpc3RzSW5LZXljaGFpbikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoa2V5RXhpc3RzSW5LZXljaGFpbikpOwog
ICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50IikpIHsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0Nh
bGxzQ291bnQoKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNlcnZlclRydXN0RXZhbHVh
dGlvbkNhbGxiYWNrQ2FsbHNDb3VudCIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2VydmVyVHJ1c3RFdmFsdWF0aW9u
Q2FsbGJhY2tDYWxsc0NvdW50KCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hy
b25vdXNseSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9u
b3VzbHkoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3Vz
bHkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIApAQCAtMTg0OCwxNiArMTMzMCwxMyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRl
c3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhXS0Jvb2xlYW5HZXRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRD
bGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFkQ2xpY2tBdHRy
aWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VSTEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVUkxS
ZWYgdXJsID0gc3RhdGljX2Nhc3Q8V0tVUkxSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nKHVybCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhzdGF0aWNfY2FzdDxX
S1VSTFJlZj4obWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CkBAIC0xOTAyLDE3ICsxMzgxLDEwIEBAIHZvaWQgVGVzdEludm9jYXRpb246OnJ1blVJU2lkZVNj
cmlwdChXS1N0cmluZ1JlZiBzY3JpcHQsIHVuc2lnbmVkIHNjcmlwdENhbGxiYWNrCiAKIHZvaWQg
VGVzdEludm9jYXRpb246OnVpU2NyaXB0RGlkQ29tcGxldGUoY29uc3QgU3RyaW5nJiByZXN1bHQs
IHVuc2lnbmVkIHNjcmlwdENhbGxiYWNrSUQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Q2FsbFVJU2lkZVNjcmlwdENhbGxiYWNrIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxl
RGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc3VsdEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc3VsdCIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRS
ZWY+IGNhbGxiYWNrSURWYWx1ZSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoc2NyaXB0Q2FsbGJh
Y2tJRCkpOwotCi0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcmVz
dWx0S2V5LmdldCgpLCB0b1dLKHJlc3VsdCkuZ2V0KCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGNhbGxiYWNrSURLZXkuZ2V0KCksIGNhbGxiYWNrSURWYWx1
ZS5nZXQoKSk7Ci0KLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKG1lc3NhZ2VCb2R5
LCAiUmVzdWx0IiwgcmVzdWx0KTsKKyAgICBzZXRWYWx1ZShtZXNzYWdlQm9keSwgIkNhbGxiYWNr
SUQiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2NyaXB0Q2FsbGJhY2tJRCkpOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiQ2FsbFVJU2lkZVNjcmlwdENhbGxiYWNrIiwgbWVzc2FnZUJvZHkuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpvdXRwdXRUZXh0KGNvbnN0IFdURjo6U3RyaW5n
JiB0ZXh0KQpAQCAtMTkyMiwxNzQgKzEzOTQsMTQzIEBAIHZvaWQgVGVzdEludm9jYXRpb246Om91
dHB1dFRleHQoY29uc3QgV1RGOjpTdHJpbmcmIHRleHQpCiAKIHZvaWQgVGVzdEludm9jYXRpb246
OmRpZEJlZ2luU3dpcGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRCZWdp
blN3aXBlQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRCZWdpblN3aXBl
Q2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6d2lsbEVuZFN3aXBlKCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsV2lsbEVuZFN3aXBlQ2FsbGJhY2siKSk7Ci0g
ICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxXaWxsRW5kU3dpcGVDYWxsYmFjayIpOwogfQogCiB2b2lk
IFRlc3RJbnZvY2F0aW9uOjpkaWRFbmRTd2lwZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2FsbERpZEVuZFN3aXBlQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxE
aWRFbmRTd2lwZUNhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlbW92
ZVN3aXBlU25hcHNob3QoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRSZW1v
dmVTd2lwZVNuYXBzaG90Q2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVj
dGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRS
ZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6
bm90aWZ5RG93bmxvYWREb25lKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOb3RpZnlE
b3dubG9hZERvbmUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIk5vdGlmeURvd25sb2FkRG9uZSIp
OwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0YXRpc3RpY3NJbk1lbW9yeUFu
ZFBlcnNpc3RlbnRTdG9yZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZENs
ZWFyU3RhdGlzdGljc0luTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpOwotICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJDYWxsRGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUi
KTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdl
YnNpdGVEYXRhUmVtb3ZhbCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZENs
ZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIik7
CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVy
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0U2hvdWxkRG93bmdyYWRl
UmVmZXJyZXIiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlciIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRTaG91bGRCbG9j
a1RoaXJkUGFydHlDb29raWVzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlk
U2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiQ2FsbERpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiKTsKIH0KIAogdm9p
ZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRGaXJzdFBhcnR5V2Vic2l0
ZURhdGFSZW1vdmFsTW9kZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNl
dEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIik7CiB9CiAKIHZvaWQgVGVzdEludm9j
YXRpb246OmRpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKSk7Ci0gICAgV0tQ
YWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIpOwog
fQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWlu
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0eUhvc3RD
TkFNRURvbWFpbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEZpcnN0
UGFydHlIb3N0Q05BTUVEb21haW4iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
VGhpcmRQYXJ0eUNOQU1FRG9tYWluKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxs
RGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9J
bmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdl
KCJDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIik7CiB9CiAKIHZvaWQgVGVzdEludm9j
YXRpb246OmRpZFJlc2V0U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUi
KSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAw
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3Rl
bnRTdGF0ZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRCbG9ja0Nvb2tpZXNG
b3JIb3N0KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0QmxvY2tDb29r
aWVzRm9ySG9zdCIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEJsb2NrQ29va2ll
c0Zvckhvc3QiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U3RhdGlzdGljc0Rl
YnVnTW9kZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRTdGF0aXN0aWNz
RGVidWdNb2RlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlk
U2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmll
dygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IkNhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpOwogfQogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRTZXRMYXN0U2VlbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2FsbERpZFNldExhc3RTZWVuIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3Rl
ZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0
TGFzdFNlZW4iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkTWVyZ2VTdGF0aXN0aWMo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRNZXJnZVN0YXRpc3RpYyIpKTsK
LSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZE1lcmdlU3RhdGlzdGljIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNhbGxEaWRTZXRFeHBpcmVkU3RhdGlzdGljIikpOwotICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJDYWxsRGlkU2V0RXhwaXJlZFN0YXRpc3RpYyIpOwogfQogCiB2b2lkIFRlc3RJbnZv
Y2F0aW9uOjpkaWRTZXRQcmV2YWxlbnRSZXNvdXJjZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUGFnZVBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdl
KCJDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2UiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDYWxsRGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUGFnZVBvc3RN
ZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJDYWxsRGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlIik7CiB9CiAKIHZvaWQgVGVzdElu
dm9jYXRpb246OmRpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbigpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1Bh
Z2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbiIpOwogfQogCiB2b2lk
IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoVmVjdG9y
PFN0cmluZz4mJiBkb21haW5zKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRS
ZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlQXJyYXlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNy
ZWF0ZSgpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNy
ZWF0ZSgpKTsKICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpCi0gICAgICAgIFdLQXJy
YXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGRvbWFpbi51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotICAgIAotICAgIFdL
UGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgdG9X
Syhkb21haW4pLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZWNlaXZlQWxs
U3RvcmFnZUFjY2Vzc0VudHJpZXMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dEludm9jYXRpb246OmRpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMoVmVjdG9yPFN0
cmluZz4mJiBkb21haW5zKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRSZWNl
aXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zIikpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZUFycmF5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7CisgICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7CiAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKQotICAgICAgICBXS0FycmF5
QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhkb21haW4udXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKLQotICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgdG9XSyhkb21h
aW4pLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZWNlaXZlTG9hZGVkU3Vi
cmVzb3VyY2VEb21haW5zIiwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RJbnZv
Y2F0aW9uOjpkaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFjayIp
KTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFs
c0NhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEFwcEJvdW5kRG9t
YWlucygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEFwcEJvdW5kRG9t
YWlucyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEFwcEJvdW5kRG9t
YWlucyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlz
dGljcygpCkBAIC0yMTA0LDggKzE1NDUsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wQWRD
bGlja0F0dHJpYnV0aW9uKCkKIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6cGVyZm9ybUN1c3RvbU1l
bnVBY3Rpb24oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBlcmZvcm1DdXN0b21NZW51
QWN0aW9uIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJQZXJmb3JtQ3VzdG9tTWVudUFjdGlvbiIp
OwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9n
VGltZXJJZk5lZWRlZCgpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktp
dFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGEx
NWZjMGEwZTlhZmFlMzQxY2NjZDA2MDM4M2VkMzAxYTcyNDFiNmIuLjYxNzE4YWM2NTU4ODE3Nzhl
ODNjOTdmYmUxNzgyNzhjODcwZTZiOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0zNTUsNiArMzU1LDggQEAKIAkJODQxQ0MwMEQxODExODVCRjAwNDJFOUI2IC8qIE9w
dGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MUNDMDBFMTgxMTg1QkYwMDQyRTlC
NiAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOERENzZGQTEwNDg2QUE3NjAwRDk2QjVF
IC8qIFdlYktpdFRlc3RSdW5uZXIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4
ID0gMDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CisJCTkzMzhEMUJBMjUwQTc5RUIwMEU4MjdGNiAvKiBKU0Jhc2ljcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU0Jhc2ljcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5n
cy9KU0Jhc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzM4RDFCRTI1MEJE
OUREMDBFODI3RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0
aW9uYXJ5RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNzY0MTc2
MjEwRDczNjAwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzcyMTBENzM2MTAwQTNEQUFFIC8q
IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5M0M3ODgxRjI1MEM2OUU0MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZWZ0ZXN0RnVuY3Rpb25zLmNwcDsgcGF0
aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvUmVmdGVzdEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC04OTIsNiArODk0LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCiAJCQkJMzc4RDQ0MjIxMzM0NkQwMDAwNkE3NzdCIC8qIGNvbmZpZy5o
ICovLAorCQkJCTkzMzhEMUJFMjUwQkQ5REQwMEU4MjdGNiAvKiBEaWN0aW9uYXJ5RnVuY3Rpb25z
LmggKi8sCiAJCQkJQkM5OUE0ODQxMjA4OTAxQTAwN0U5RjA4IC8qIFN0cmluZ0Z1bmN0aW9ucy5o
ICovLAogCQkJCTlCMzZBMjcwMjA5NDUzQTAwMDNFMDY1MSAvKiBXaGF0VG9EdW1wLmggKi8sCiAJ
CQkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJOb3RpZmljYXRpb25Q
cm92aWRlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLmNwcAppbmRleCA0NTg2NzdmNTA5YjExNzQzOTNhZTRjMzhjYTA5NDU3YzhlODBmODRjLi5j
ZDVmYzY2MjE1YTRiMDM3OTY4MmM3MmIyZWMxZDFmMGI5ODA3M2IyIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcApAQCAtMTI2LDgg
KzEyNiw4IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6OmNsb3NlV2ViTm90aWZpY2F0
aW9uKFdLTm90aWZpY2F0aW9uUmVmIG5vdGlmaWNhdGlvCiAKICAgICByZW1vdmVHbG9iYWxJREZy
b21JRE1hcChtX2xvY2FsVG9HbG9iYWxOb3RpZmljYXRpb25JRE1hcCwgaWQpOwogCi0gICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IHdrSUQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGlkKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRXSyhXS011
dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIHdrSUQgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGlkKSk7CisgICAgYXV0byBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUo
KSk7CiAgICAgV0tBcnJheUFwcGVuZEl0ZW0oYXJyYXkuZ2V0KCksIHdrSUQuZ2V0KCkpOwogICAg
IFdLTm90aWZpY2F0aW9uTWFuYWdlclByb3ZpZGVyRGlkQ2xvc2VOb3RpZmljYXRpb25zKG5vdGlm
aWNhdGlvbk1hbmFnZXIsIGFycmF5LmdldCgpKTsKIH0KQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lk
IFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyOjpyZW1vdmVOb3RpZmljYXRpb25NYW5hZ2VyKFdLTm90
aWZpY2F0aW9uTWFuYWdlclJlZgogICAgIGF1dG8gdG9SZW1vdmUgPSBpdGVyYXRvci0+dmFsdWU7
CiAgICAgV0tSZXRhaW5QdHI8V0tOb3RpZmljYXRpb25NYW5hZ2VyUmVmPiBndWFyZChtYW5hZ2Vy
KTsKICAgICBtX293bmVkTm90aWZpY2F0aW9ucy5yZW1vdmUoaXRlcmF0b3IpOwotICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlD
cmVhdGUoKSk7CisgICAgYXV0byBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUo
KSk7CiAgICAgZm9yICh1aW50NjRfdCBub3RpZmljYXRpb25JRCA6IHRvUmVtb3ZlKSB7CiAgICAg
ICAgIGJvb2wgc3VjY2VzcyA9IG1fb3duaW5nTWFuYWdlci5yZW1vdmUobm90aWZpY2F0aW9uSUQp
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwpAQCAtMTczLDcgKzE3
Myw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6OnJlc2V0KCkKICAgICBmb3IgKGF1
dG8mIG5vdGlmaWNhdGlvblBhaXIgOiBtX293bmVkTm90aWZpY2F0aW9ucykgewogICAgICAgICBp
ZiAobm90aWZpY2F0aW9uUGFpci52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRX
SyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICAgICAgYXV0byBhcnJheSA9IGFkb3B0V0so
V0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgICAgIGZvciAodWludDY0X3Qgbm90aWZpY2F0
aW9uSUQgOiBub3RpZmljYXRpb25QYWlyLnZhbHVlKQogICAgICAgICAgICAgV0tBcnJheUFwcGVu
ZEl0ZW0oYXJyYXkuZ2V0KCksIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90aWZpY2F0aW9uSUQp
KS5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVl
TWFuYWdlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3Bw
CmluZGV4IDIwZDVhMWFhZGIyOWUzMzJiZTI5YjJiMWY0YzIzNjA5MTliYTBmZjEuLmM5ZDQ3ZmQ2
M2I4NGU0NmU0NjJhNTBmZjRiZTA3YmYzNDY4YWNhNjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIldv
cmtRdWV1ZU1hbmFnZXIuaCIKIAogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgorI2luY2x1
ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSA8V2ViS2l0L1dLUGFnZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2VQcml2YXRlLmg+
CkBAIC03NSw3ICs3Niw3IEBAIHRlbXBsYXRlIDxXb3JrUXVldWVJdGVtOjpUeXBlIHR5cGU+CiBj
bGFzcyBTY3JpcHRJdGVtIDogcHVibGljIFdvcmtRdWV1ZUl0ZW0gewogcHVibGljOgogICAgIGV4
cGxpY2l0IFNjcmlwdEl0ZW0oY29uc3QgU3RyaW5nJiBzY3JpcHQpCi0gICAgICAgIDogbV9zY3Jp
cHQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHQudXRmOCgpLmRh
dGEoKSkpKQorICAgICAgICA6IG1fc2NyaXB0KHRvV0soc2NyaXB0KSkKICAgICB7CiAgICAgfQog
CkBAIC0xNjEsNyArMTYyLDcgQEAgdm9pZCBXb3JrUXVldWVNYW5hZ2VyOjpxdWV1ZUxvYWRIVE1M
U3RyaW5nKGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJgogICAgIGNsYXNzIExv
YWRIVE1MU3RyaW5nSXRlbSA6IHB1YmxpYyBXb3JrUXVldWVJdGVtIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIExvYWRIVE1MU3RyaW5nSXRlbShjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0
cmluZyYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiB1bnJlYWNoYWJsZVVSTCkKLSAgICAgICAgICAg
IDogbV9jb250ZW50KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29udGVu
dC51dGY4KCkuZGF0YSgpKSkpCisgICAgICAgICAgICA6IG1fY29udGVudCh0b1dLKGNvbnRlbnQp
KQogICAgICAgICAgICAgLCBtX2Jhc2VVUkwoYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhiYXNlVVJMLnV0ZjgoKS5kYXRhKCkpKSkKICAgICAgICAgICAgICwgbV91bnJlYWNoYWJs
ZVVSTChhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHVucmVhY2hhYmxlVVJMLnV0
ZjgoKS5kYXRhKCkpKSkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cv
VGVzdEludm9jYXRpb25DRy5jcHAKaW5kZXggNjczMzhmNGFhODI3M2NmYjY4NzIyOWJmYmFkM2Zh
NGRkYjM3YjRkZi4uMDFjNTMxYTliNmFjZThlODE2OTQ4ZjY3NmNlNjMxZjUyNzk0YjZjNCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCkBAIC01
Miw3ICs1Miw3IEBAIHN0YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0RnJvbUNHSW1h
Z2UoQ0dJbWFnZVJlZiBpbWFnZSkKICAgICBzaXplX3Qgcm93Qnl0ZXMgPSAoNCAqIHBpeGVsc1dp
ZGUgKyA2MykgJiB+NjM7CiAKICAgICAvLyBDcmVhdGluZyB0aGlzIGJpdG1hcCBpbiB0aGUgZGV2
aWNlIGNvbG9yIHNwYWNlIHNob3VsZCBwcmV2ZW50IGFueSBjb2xvciBjb252ZXJzaW9uIHdoZW4g
dGhlIGltYWdlIG9mIHRoZSB3ZWIgdmlldyBpcyBkcmF3biBpbnRvIGl0LgotICAgIFJldGFpblB0
cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0
ZURldmljZVJHQigpKTsKKyAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFj
ZUNyZWF0ZURldmljZVJHQigpKTsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0bWFw
Q29udGV4dENyZWF0ZSgwLCBwaXhlbHNXaWRlLCBwaXhlbHNIaWdoLCA4LCByb3dCeXRlcywgY29s
b3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMySG9zdCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVDR0NvbnRl
eHRGcm9tQ0dJbWFnZShDR0ltYWdlUmVmIGltYWdlKQogCiBzdGF0aWMgQ0dDb250ZXh0UmVmIGNy
ZWF0ZUNHQ29udGV4dEZyb21JbWFnZShXS0ltYWdlUmVmIHdrSW1hZ2UpCiB7Ci0gICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihXS0ltYWdlQ3JlYXRlQ0dJbWFnZSh3a0lt
YWdlKSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoV0tJbWFnZUNyZWF0ZUNHSW1hZ2Uod2tJ
bWFnZSkpOwogICAgIHJldHVybiBjcmVhdGVDR0NvbnRleHRGcm9tQ0dJbWFnZShpbWFnZS5nZXQo
KSk7CiB9CiAKQEAgLTEwOSw5ICsxMDksOSBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0Zv
ckNvbnRleHQoQ0dDb250ZXh0UmVmIGJpdG1hcENvbnRleHQsIGNoYXIgaGFzaFN0cmluZwogCiBz
dGF0aWMgdm9pZCBkdW1wQml0bWFwKENHQ29udGV4dFJlZiBiaXRtYXBDb250ZXh0LCBjb25zdCBj
aGFyKiBjaGVja3N1bSkKIHsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpKTsKLSAgICBSZXRh
aW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gaW1hZ2VEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVN
dXRhYmxlKDAsIDApKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBpbWFn
ZURlc3QgPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGltYWdlRGF0
YS5nZXQoKSwga1VUVHlwZVBORywgMSwgMCkpOworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpKTsKKyAgICBhdXRvIGltYWdl
RGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisgICAgYXV0byBpbWFn
ZURlc3QgPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGltYWdlRGF0
YS5nZXQoKSwga1VUVHlwZVBORywgMSwgMCkpOwogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZElt
YWdlKGltYWdlRGVzdC5nZXQoKSwgaW1hZ2UuZ2V0KCksIDApOwogICAgIENHSW1hZ2VEZXN0aW5h
dGlvbkZpbmFsaXplKGltYWdlRGVzdC5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0gYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NvY29hL0NyYXNoUmVwb3J0ZXJJbmZvLm1tCmluZGV4IDRjNzlhYjViODVkNjQxODlh
N2UwYTI5NmVlYTkwYzFkODExOGRjM2QuLjQxMGQ5ZmRjYjMxZTJjNmU2Y2E3NjQ5NTYxNDYwNjM4
YzA5MTA1ZWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hS
ZXBvcnRlckluZm8ubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9DcmFzaFJl
cG9ydGVySW5mby5tbQpAQCAtMzUsMTIgKzM1LDEyIEBAIG5hbWVzcGFjZSBXVFIgewogCiBzdGF0
aWMgU3RyaW5nIHRlc3RQYXRoRnJvbVVSTChXS1VSTFJlZiB1cmwpCiB7Ci0gICAgUmV0YWluUHRy
PENGVVJMUmVmPiBjZlVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgdXJsKSk7CisgICAgYXV0byBjZlVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7CiAgICAgaWYgKCFjZlVSTCkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY2hlbWVDRlN0cmluZyA9
IGFkb3B0Q0YoQ0ZVUkxDb3B5U2NoZW1lKGNmVVJMLmdldCgpKSk7Ci0gICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBwYXRoQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVBhdGgoY2ZVUkwuZ2V0
KCkpKTsKKyAgICBhdXRvIHNjaGVtZUNGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlTY2hlbWUo
Y2ZVUkwuZ2V0KCkpKTsKKyAgICBhdXRvIHBhdGhDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5
UGF0aChjZlVSTC5nZXQoKSkpOwogCiAgICAgU3RyaW5nIHNjaGVtZVN0cmluZyhzY2hlbWVDRlN0
cmluZy5nZXQoKSk7CiAgICAgU3RyaW5nIHBhdGhTdHJpbmcocGF0aENGU3RyaW5nLmdldCgpKTsK
QEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIFN0cmluZyB0ZXN0UGF0aEZyb21VUkwoV0tVUkxSZWYg
dXJsKQogICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3RyaW5n
LCAiaHR0cCIpICYmICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWVTdHJpbmcs
ICJodHRwcyIpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGhvc3RDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5SG9zdE5hbWUoY2ZVUkwu
Z2V0KCkpKTsKKyAgICBhdXRvIGhvc3RDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5SG9zdE5h
bWUoY2ZVUkwuZ2V0KCkpKTsKICAgICBTdHJpbmcgaG9zdFN0cmluZyhob3N0Q0ZTdHJpbmcuZ2V0
KCkpOwogICAgIGlmIChob3N0U3RyaW5nID09ICIxMjcuMC4wLjEiKQogICAgICAgICByZXR1cm4g
cGF0aFN0cmluZzsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVz
dENvbnRyb2xsZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENv
bnRyb2xsZXJDb2NvYS5tbQppbmRleCAzNjUzMzdhZGY5OWYwYjljZGQ2YWYwOTdmYzAyYmU4N2E2
NzE2NjU3Li43MTMwMzI2YTNlNjFjZTJiZDBhNzZkZjcyODk4ZDllNGIwMDYzYjA0IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0K
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1t
CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFs
aXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFQKIAogdm9pZCBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYs
IGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewotICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbZ2xvYmFsV2ViVmll
d0NvbmZpZ3VyYXRpb24gY29weV0pOworICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsKIAogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAgICAgaWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlvbikKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbSBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQppbmRl
eCA1Yzg2MmU5YjBlYzc3ZDA1ZTA3NzI5ZGNlNjQ3NmY1ODkyMTIzYjM4Li45MTVmNDc2YzYxNWFl
NjEwOTBkOTBjYTc5NzZiZjhmMmM5OWI1NjZiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCkBAIC05MCw3ICs5MCw3IEBAIElH
Tk9SRV9XQVJOSU5HU19CRUdJTigiZGVwcmVjYXRlZC1pbXBsZW1lbnRhdGlvbnMiKQogLSAodm9p
ZClkcmFnSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGF0OihOU1BvaW50KXZpZXdMb2NhdGlvbiBv
ZmZzZXQ6KE5TU2l6ZSlpbml0aWFsT2Zmc2V0IGV2ZW50OihOU0V2ZW50ICopZXZlbnQgcGFzdGVi
b2FyZDooTlNQYXN0ZWJvYXJkICopcGJvYXJkIHNvdXJjZTooaWQpc291cmNlT2JqIHNsaWRlQmFj
azooQk9PTClzbGlkZUZsYWcKIElHTk9SRV9XQVJOSU5HU19FTkQKIHsKLSAgICBSZXRhaW5QdHI8
V2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mbz4gZHJhZ2dpbmdJbmZvID0gYWRvcHROUyhbW1dl
YktpdFRlc3RSdW5uZXJEcmFnZ2luZ0luZm8gYWxsb2NdIGluaXRXaXRoSW1hZ2U6YW5JbWFnZSBv
ZmZzZXQ6aW5pdGlhbE9mZnNldCBwYXN0ZWJvYXJkOnBib2FyZCBzb3VyY2U6c291cmNlT2JqXSk7
CisgICAgYXV0byBkcmFnZ2luZ0luZm8gPSBhZG9wdE5TKFtbV2ViS2l0VGVzdFJ1bm5lckRyYWdn
aW5nSW5mbyBhbGxvY10gaW5pdFdpdGhJbWFnZTphbkltYWdlIG9mZnNldDppbml0aWFsT2Zmc2V0
IHBhc3RlYm9hcmQ6cGJvYXJkIHNvdXJjZTpzb3VyY2VPYmpdKTsKICAgICBbc2VsZiBkcmFnZ2lu
Z1VwZGF0ZWQ6ZHJhZ2dpbmdJbmZvLmdldCgpXTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5oIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5oCmluZGV4
IGFiYzBhNTBjOTcwYzFiYjMzZjFmYjEwOTM5MzUyYWY4Y2E3ZTA0MDMuLmNjOTgxMzk0MjRmMjg4
MDY0NDM5ODk4MzQ1YzNlN2Q0ZWE1NTMzNzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmgKQEAgLTMyLDEyICszMiwx
NyBAQCBPQkpDX0NMQVNTIFRlc3RSdW5uZXJXS1dlYlZpZXc7CiBuYW1lc3BhY2UgV1RSIHsKIAog
Y2xhc3MgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EgOiBwdWJsaWMgVUlTY3JpcHRDb250cm9sbGVy
Q29tbW9uIHsKLXB1YmxpYzoKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBVSVNjcmlwdENvbnRy
b2xsZXJDb2NvYShVSVNjcmlwdENvbnRleHQmKTsKKyAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3
ZWJWaWV3KCkgY29uc3Q7CisKKyAgICB2b2lkIGRvQXN5bmNUYXNrKEpTVmFsdWVSZWYpIG92ZXJy
aWRlOworCitwcml2YXRlOgogICAgIHZvaWQgc2V0Vmlld1NjYWxlKGRvdWJsZSkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRNaW5pbXVtRWZmZWN0aXZlV2lkdGgoZG91YmxlKSBvdmVycmlkZTsKICAg
ICB2b2lkIGJlY29tZUZpcnN0UmVzcG9uZGVyKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXNpZ25G
aXJzdFJlc3BvbmRlcigpIG92ZXJyaWRlOwotICAgIHZvaWQgZG9Bc3luY1Rhc2soSlNWYWx1ZVJl
Zikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVWaWV3RnJvbVdpbmRvdyhKU1ZhbHVlUmVmKSBv
dmVycmlkZTsKICAgICB2b2lkIGFkZFZpZXdUb1dpbmRvdyhKU1ZhbHVlUmVmKSBvdmVycmlkZTsK
ICAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpIG92
ZXJyaWRlOwpAQCAtNTksMTEgKzY0LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbnNlcnRBdHRh
Y2htZW50Rm9yRmlsZVBhdGgoSlNTdHJpbmdSZWYgZmlsZVBhdGgsIEpTU3RyaW5nUmVmIGNvbnRl
bnRUeXBlLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKSBvdmVycmlkZTsKIAotcHJvdGVjdGVkOgotICAg
IGV4cGxpY2l0IFVJU2NyaXB0Q29udHJvbGxlckNvY29hKFVJU2NyaXB0Q29udGV4dCYpOwotICAg
IFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKLQotcHJpdmF0ZToKICAgICB2
b2lkIGNvbXBsZXRlVGFza0FzeW5jaHJvbm91c2x5QWZ0ZXJBY3Rpdml0eVN0YXRlVXBkYXRlKHVu
c2lnbmVkIGNhbGxiYWNrSUQpOwogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0KaW5kZXggOThiYjc0YjQxM2I5
NTAzZTY5ODgwN2VkYjg2Mjk4ZTM3MGRjZDBmMi4uNTg0Nzk3NmYyMTg1N2Y1M2Y0ODVlY2IxZmIx
ZWI5MTE3MjFhNTZkYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9V
SVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Nv
Y29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tCkBAIC0xMzUsMjIgKzEzNSwxOCBAQCB2b2lk
IFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjphZGRWaWV3VG9XaW5kb3coSlNWYWx1ZVJlZiBjYWxs
YmFjaykKIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6b3ZlcnJpZGVQcmVmZXJlbmNl
KEpTU3RyaW5nUmVmIHByZWZlcmVuY2VSZWYsIEpTU3RyaW5nUmVmIHZhbHVlUmVmKQogewotICAg
IFdLUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gd2ViVmlldygpLmNvbmZpZ3VyYXRpb24ucHJl
ZmVyZW5jZXM7Ci0KLSAgICBTdHJpbmcgcHJlZmVyZW5jZSA9IHRvV1RGU3RyaW5nKHRvV0socHJl
ZmVyZW5jZVJlZikpOwotICAgIFN0cmluZyB2YWx1ZSA9IHRvV1RGU3RyaW5nKHRvV0sodmFsdWVS
ZWYpKTsKLSAgICBpZiAocHJlZmVyZW5jZSA9PSAiV2ViS2l0TWluaW11bUZvbnRTaXplIikKLSAg
ICAgICAgcHJlZmVyZW5jZXMubWluaW11bUZvbnRTaXplID0gdmFsdWUudG9Eb3VibGUoKTsKKyAg
ICBpZiAodG9XVEZTdHJpbmcocHJlZmVyZW5jZVJlZikgPT0gIldlYktpdE1pbmltdW1Gb250U2l6
ZSIpCisgICAgICAgIHdlYlZpZXcoKS5jb25maWd1cmF0aW9uLnByZWZlcmVuY2VzLm1pbmltdW1G
b250U2l6ZSA9IHRvV1RGU3RyaW5nKHZhbHVlUmVmKS50b0RvdWJsZSgpOwogfQogCiB2b2lkIFVJ
U2NyaXB0Q29udHJvbGxlckNvY29hOjpmaW5kU3RyaW5nKEpTU3RyaW5nUmVmIHN0cmluZywgdW5z
aWduZWQgbG9uZyBvcHRpb25zLCB1bnNpZ25lZCBsb25nIG1heENvdW50KQogewotICAgIFt3ZWJW
aWV3KCkgX2ZpbmRTdHJpbmc6dG9XVEZTdHJpbmcodG9XSyhzdHJpbmcpKSBvcHRpb25zOm9wdGlv
bnMgbWF4Q291bnQ6bWF4Q291bnRdOworICAgIFt3ZWJWaWV3KCkgX2ZpbmRTdHJpbmc6dG9XVEZT
dHJpbmcoc3RyaW5nKSBvcHRpb25zOm9wdGlvbnMgbWF4Q291bnQ6bWF4Q291bnRdOwogfQogCiBK
U09iamVjdFJlZiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6Y29udGVudHNPZlVzZXJJbnRlcmZh
Y2VJdGVtKEpTU3RyaW5nUmVmIGludGVyZmFjZUl0ZW0pIGNvbnN0CiB7Ci0gICAgTlNEaWN0aW9u
YXJ5ICpjb250ZW50RGljdGlvbmFyeSA9IFt3ZWJWaWV3KCkgX2NvbnRlbnRzT2ZVc2VySW50ZXJm
YWNlSXRlbTp0b1dURlN0cmluZyh0b1dLKGludGVyZmFjZUl0ZW0pKV07CisgICAgTlNEaWN0aW9u
YXJ5ICpjb250ZW50RGljdGlvbmFyeSA9IFt3ZWJWaWV3KCkgX2NvbnRlbnRzT2ZVc2VySW50ZXJm
YWNlSXRlbTp0b1dURlN0cmluZyhpbnRlcmZhY2VJdGVtKV07CiAgICAgcmV0dXJuIEpTVmFsdWVU
b09iamVjdChtX2NvbnRleHQtPmpzQ29udGV4dCgpLCBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6
Y29udGVudERpY3Rpb25hcnkgaW5Db250ZXh0OltKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2Jh
bENvbnRleHRSZWY6bV9jb250ZXh0LT5qc0NvbnRleHQoKV1dLkpTVmFsdWVSZWYsIG51bGxwdHIp
OwogfQogCkBAIC0yMTksMTIgKzIxNSwxMCBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29h
OjpwYXN0ZSgpCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjppbnNlcnRBdHRhY2htZW50
Rm9yRmlsZVBhdGgoSlNTdHJpbmdSZWYgZmlsZVBhdGgsIEpTU3RyaW5nUmVmIGNvbnRlbnRUeXBl
LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBtX2Nv
bnRleHQtPnByZXBhcmVGb3JBc3luY1Rhc2soY2FsbGJhY2ssIENhbGxiYWNrVHlwZU5vblBlcnNp
c3RlbnQpOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB0ZXN0VVJMID0gYWRvcHRDRihXS1VS
TENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuY3VycmVudFRlc3RVUkwoKSkpOwotICAgIFJldGFpblB0cjxOU1VSTD4gYXR0YWNobWVudFVS
TCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6dG9XVEZTdHJpbmcodG9XSyhmaWxlUGF0aCkpIHJl
bGF0aXZlVG9VUkw6KF9fYnJpZGdlIE5TVVJMICopdGVzdFVSTC5nZXQoKV07Ci0KLSAgICBhdXRv
IGZpbGVXcmFwcGVyID0gYWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRoVVJM
OmF0dGFjaG1lbnRVUkwuZ2V0KCkgb3B0aW9uczowIGVycm9yOm5pbF0pOwotICAgIFt3ZWJWaWV3
KCkgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIuZ2V0KCkgY29u
dGVudFR5cGU6dG9XVEZTdHJpbmcodG9XSyhjb250ZW50VHlwZSkpIGNvbXBsZXRpb246XihCT09M
IHN1Y2Nlc3MpIHsKKyAgICBhdXRvIHRlc3RVUkwgPSBhZG9wdENGKFdLVVJMQ29weUNGVVJMKGtD
RkFsbG9jYXRvckRlZmF1bHQsIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jdXJyZW50VGVz
dFVSTCgpKSk7CisgICAgYXV0byBhdHRhY2htZW50VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0
aDp0b1dURlN0cmluZyhmaWxlUGF0aCkgcmVsYXRpdmVUb1VSTDooX19icmlkZ2UgTlNVUkwgKil0
ZXN0VVJMLmdldCgpXTsKKyAgICBhdXRvIGZpbGVXcmFwcGVyID0gYWRvcHROUyhbW05TRmlsZVdy
YXBwZXIgYWxsb2NdIGluaXRXaXRoVVJMOmF0dGFjaG1lbnRVUkwgb3B0aW9uczowIGVycm9yOm5p
bF0pOworICAgIFt3ZWJWaWV3KCkgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6Zmls
ZVdyYXBwZXIuZ2V0KCkgY29udGVudFR5cGU6dG9XVEZTdHJpbmcoY29udGVudFR5cGUpIGNvbXBs
ZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKICAgICAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIG1fY29udGV4dC0+YXN5bmNUYXNrQ29tcGxldGUoY2FsbGJh
Y2tJRCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdl
bmVyYXRvci5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9y
Lm1tCmluZGV4IGUyOTgzOGJhODI4ZmI0YmQ5MDg1N2FiNmJlZjJmZDQ2NTlmYjQyMTguLmQ0YjEx
NDgxMWVlNmJkZDI1MTVkZGUzNTVlZTEzZGU2MjExMGQ1NTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tCkBAIC0xODksNyArMTg5LDcgQEAg
LSAoaW5zdGFuY2V0eXBlKWluaXQKIAogLSAodm9pZClfc2VuZElPSElES2V5Ym9hcmRFdmVudDoo
dWludDY0X3QpdGltZXN0YW1wIHVzYWdlOih1aW50MzJfdCl1c2FnZSBpc0tleURvd246KGJvb2wp
aXNLZXlEb3duCiB7Ci0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRv
cHRDRihJT0hJREV2ZW50Q3JlYXRlS2V5Ym9hcmRFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LAor
ICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZlbnRDcmVhdGVLZXlib2FyZEV2ZW50
KGtDRkFsbG9jYXRvckRlZmF1bHQsCiAgICAgICAgIHRpbWVzdGFtcCwKICAgICAgICAga0hJRFBh
Z2VfS2V5Ym9hcmRPcktleXBhZCwKICAgICAgICAgdXNhZ2UsCkBAIC0zNjEsNyArMzYxLDcgQEAg
LSAoSU9ISURFdmVudFJlZilfY3JlYXRlSU9ISURFdmVudFR5cGU6KEhhbmRFdmVudFR5cGUpZXZl
bnRUeXBlCiAgICAgICAgIGV2ZW50TWFzayB8PSBrSU9ISUREaWdpdGl6ZXJFdmVudElkZW50aXR5
OwogCiAgICAgdWludDY0X3QgbWFjaFRpbWUgPSBtYWNoX2Fic29sdXRlX3RpbWUoKTsKLSAgICBS
ZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZlbnRDcmVh
dGVEaWdpdGl6ZXJFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtYWNoVGltZSwKKyAgICBhdXRv
IGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlRGlnaXRpemVyRXZlbnQoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgbWFjaFRpbWUsCiAgICAgICAgIGtJT0hJRERpZ2l0aXplclRyYW5zZHVj
ZXJUeXBlSGFuZCwKICAgICAgICAgMCwKICAgICAgICAgMCwKQEAgLTQ1Myw3ICs0NTMsNyBAQCAt
IChCT09MKV9zZW5kSElERXZlbnQ6KElPSElERXZlbnRSZWYpZXZlbnRSZWYKICAgICAgICAgX2lv
U3lzdGVtQ2xpZW50ID0gSU9ISURFdmVudFN5c3RlbUNsaWVudENyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0KTsKIAogICAgIGlmIChldmVudFJlZikgewotICAgICAgICBSZXRhaW5QdHI8SU9ISURF
dmVudFJlZj4gc3Ryb25nRXZlbnQgPSBldmVudFJlZjsKKyAgICAgICAgYXV0byBzdHJvbmdFdmVu
dCA9IGV2ZW50UmVmOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBeewogICAgICAgICAgICAgdWludDMyX3QgY29udGV4dElEID0gW1VJQXBwbGljYXRp
b24gc2hhcmVkQXBwbGljYXRpb25dLmtleVdpbmRvdy5fY29udGV4dElkOwogICAgICAgICAgICAg
QVNTRVJUKGNvbnRleHRJRCk7CkBAIC01MTIsNyArNTEyLDcgQEAgLSAodm9pZClfdXBkYXRlVG91
Y2hQb2ludHM6KENHUG9pbnQqKXBvaW50cyBjb3VudDooTlNVSW50ZWdlciljb3VudAogICAgICAg
ICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVi
dWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aSB3aXRoUG9pbnRJbldpbmRv
d0Nvb3JkaW5hdGVzOnBvaW50c1tpXSBpc1RvdWNoaW5nOllFU107CiAgICAgfQogICAgIAotICAg
IFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0
ZUlPSElERXZlbnRUeXBlOmhhbmRFdmVudFR5cGVdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRv
cHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6aGFuZEV2ZW50VHlwZV0pOwogICAgIFtz
ZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC01MjksNyArNTI5LDcg
QEAgLSAodm9pZCl0b3VjaERvd25BdFBvaW50czooQ0dQb2ludCopbG9jYXRpb25zIHRvdWNoQ291
bnQ6KE5TVUludGVnZXIpdG91Y2hDb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1
Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5k
aWNhdG9yRm9yVG91Y2g6aW5kZXggd2l0aFBvaW50SW5XaW5kb3dDb29yZGluYXRlczpsb2NhdGlv
bnNbaW5kZXhdIGlzVG91Y2hpbmc6WUVTXTsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8SU9ISURF
dmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpI
YW5kRXZlbnRUb3VjaGVkXSk7CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2Ny
ZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudFRvdWNoZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJ
REV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApAQCAtNTYzLDcgKzU2Myw3IEBAIC0gKHZvaWQp
bGlmdFVwQXRQb2ludHM6KENHUG9pbnQqKWxvY2F0aW9ucyB0b3VjaENvdW50OihOU1VJbnRlZ2Vy
KXRvdWNoQ291bnQKICAgICAgICAgW1tHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVk
R2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93XSB1cGRhdGVEZWJ1Z0luZGljYXRvckZvclRvdWNo
OmluZGV4IHdpdGhQb2ludEluV2luZG93Q29vcmRpbmF0ZXM6Q0dQb2ludFplcm8gaXNUb3VjaGlu
ZzpOT107CiAgICAgfQogICAgIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJl
ZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudExpZnRlZF0p
OworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlw
ZTpIYW5kRXZlbnRMaWZ0ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdl
dCgpXTsKICAgICAKICAgICBfYWN0aXZlUG9pbnRDb3VudCA9IG5ld1BvaW50Q291bnQ7CkBAIC02
NDEsNyArNjQxLDcgQEAgLSAodm9pZClzdHlsdXNEb3duQXRQb2ludDooQ0dQb2ludClsb2NhdGlv
biBhemltdXRoQW5nbGU6KENHRmxvYXQpYXppbXV0aEFuZ2xlIGEKICAgICBfYWN0aXZlUG9pbnRz
WzBdLmF6aW11dGhBbmdsZSA9IE1fUEkgKiAyIC0gYXppbXV0aEFuZ2xlOwogICAgIF9hY3RpdmVQ
b2ludHNbMF0uYWx0aXR1ZGVBbmdsZSA9IE1fUElfMiAtIGFsdGl0dWRlQW5nbGU7CiAKLSAgICBS
ZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJ
T0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudFRvdWNoZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0g
YWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRUb3VjaGVkXSk7
CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTY1NSw3
ICs2NTUsNyBAQCAtICh2b2lkKXN0eWx1c01vdmVUb1BvaW50OihDR1BvaW50KWxvY2F0aW9uIGF6
aW11dGhBbmdsZTooQ0dGbG9hdClhemltdXRoQW5nbGUgYQogICAgIF9hY3RpdmVQb2ludHNbMF0u
YXppbXV0aEFuZ2xlID0gTV9QSSAqIDIgLSBhemltdXRoQW5nbGU7CiAgICAgX2FjdGl2ZVBvaW50
c1swXS5hbHRpdHVkZUFuZ2xlID0gTV9QSV8yIC0gYWx0aXR1ZGVBbmdsZTsKIAotICAgIFJldGFp
blB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElE
RXZlbnRUeXBlOlN0eWx1c0V2ZW50TW92ZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRD
Rihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRNb3ZlZF0pOwogICAgIFtz
ZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC02NjgsNyArNjY4LDcg
QEAgLSAodm9pZClzdHlsdXNVcEF0UG9pbnQ6KENHUG9pbnQpbG9jYXRpb24KICAgICBfYWN0aXZl
UG9pbnRzWzBdLmF6aW11dGhBbmdsZSA9IDA7CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRpdHVk
ZUFuZ2xlID0gMDsKIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFk
b3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TGlmdGVkXSk7Cisg
ICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0
eWx1c0V2ZW50TGlmdGVkXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQo
KV07CiB9CiAKQEAgLTEwMjEsNyArMTAyMSw3IEBAIC0gKHZvaWQpZGlzcGF0Y2hFdmVudFdpdGhJ
bmZvOihOU0RpY3Rpb25hcnkgKilldmVudEluZm8KIHsKICAgICBBU1NFUlQoW05TVGhyZWFkIGlz
TWFpblRocmVhZF0pOwogCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0g
YWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFdpdGhJbmZvOmV2ZW50SW5mb10pOworICAg
IGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50V2l0aEluZm86
ZXZlbnRJbmZvXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJv
bGxlcklPUy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVy
SU9TLmgKaW5kZXggMjhkMDYwYzZkZmM0NzFhOTA1NDkwNjgzOTVjM2Q0MGY2YTljMDk2Yi4uODU0
NjQ0NzY2ZDhiYzVhODE1ZDI2N2U5YTdiYTRhMjA1ZDZlNjEyMiAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKQEAgLTI1LDExICsy
NSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKICNp
bXBvcnQgIlVJU2NyaXB0Q29udHJvbGxlckNvY29hLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIu
aD4KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CkBAIC0zNywxMyArMzcsMTQgQEAgY2xh
c3MgRmxvYXRSZWN0OwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVUlTY3JpcHRDb250cm9s
bGVySU9TIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKK2NsYXNzIFVJU2NyaXB0
Q29udHJvbGxlcklPUyBmaW5hbCA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSB7CiBw
dWJsaWM6CiAgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVySU9TKFVJU2NyaXB0Q29udGV4
dCYgY29udGV4dCkKICAgICAgICAgOiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShjb250ZXh0KQog
ICAgIHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCB3YWl0Rm9yT3V0c3RhbmRpbmdDYWxs
YmFja3MoKSBvdmVycmlkZTsKICAgICB2b2lkIGRvQWZ0ZXJQcmVzZW50YXRpb25VcGRhdGUoSlNW
YWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlv
blVwZGF0ZShKU1ZhbHVlUmVmKSBvdmVycmlkZTsKQEAgLTE1Niw3ICsxNTcsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXREaWRFbmRTY3JvbGxpbmdDYWxsYmFjayhKU1ZhbHVlUmVmKSBvdmVycmlk
ZTsKICAgICB2b2lkIGNsZWFyQWxsQ2FsbGJhY2tzKCkgb3ZlcnJpZGU7CiAKLXByaXZhdGU6CiAg
ICAgdm9pZCB3YWl0Rm9yTW9kYWxUcmFuc2l0aW9uVG9GaW5pc2goKSBjb25zdDsKICAgICB2b2lk
IHdhaXRGb3JTaW5nbGVUYXBUb1Jlc2V0KCkgY29uc3Q7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IHJlY3RGb3JNZW51QWN0aW9uKENGU3RyaW5nUmVmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQppbmRleCAxMzBjNDk3
YzI0MGQ4MzhiYjRhZmZmZDIwNzMxNDE3NWE4M2RiYjI2Li43YWY2ZWNmNTA5ODVmMTVlZjQ3YzE5
MThiNjVhMmViZGE2ZDI2YTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBAIC02OCwyNCArNjgsMTQgQEAgc3RhdGljIE5T
RGljdGlvbmFyeSAqdG9OU0RpY3Rpb25hcnkoQ0dSZWN0IHJlY3QpCiAgICAgfTsKIH0KIAotc3Rh
dGljIHVuc2lnbmVkIGFycmF5TGVuZ3RoKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBhcnJheSkKLXsKLSAgICBhdXRvIGxlbmd0aFN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgaWYgKGF1dG8gbGVuZ3RoVmFsdWUgPSBK
U09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIG51
bGxwdHIpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgIHJldHVybiAwOwotfQot
CiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gcGFyc2VNb2RpZmllckFycmF5KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIGFycmF5VmFsdWUpCiB7CiAgICAgaWYgKCFhcnJheVZhbHVlKQog
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gVGhlIHZhbHVlIG1heSBlaXRoZXIgYmUgYSBz
dHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBvZiBtb2RpZmllcnMuCi0g
ICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkgewotICAgICAgICBh
dXRvIHN0cmluZyA9IHRvV1RGU3RyaW5nKHRvV0soYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBhcnJheVZhbHVlLCBudWxscHRyKSkpKTsKLSAgICAgICAgcmV0dXJuIHsgc3RyaW5n
IH07Ci0gICAgfQorICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1ZSkp
CisgICAgICAgIHJldHVybiB7IHRvV1RGU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpIH07CiAK
ICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBhcnJheVZhbHVlKSkKICAgICAgICAg
cmV0dXJuIHsgfTsKQEAgLTkzLDE2ICs4Myw4IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJz
ZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWCiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOwogICAgIFZl
Y3RvcjxTdHJpbmc+IG1vZGlmaWVyczsKICAgICBtb2RpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIEpTVmFs
dWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwg
aSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgYXV0byBzdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNv
bnRleHQsIHZhbHVlLCAmZXhjZXB0aW9uKSk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbW9kaWZpZXJzLmFwcGVuZCh0b1dURlN0cmluZyh0
b1dLKHN0cmluZy5nZXQoKSkpKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQorICAgICAgICBtb2RpZmllcnMuYXBwZW5kKHRvV1RGU3RyaW5nKGNvbnRl
eHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBudWxscHRy
KSkpOwogICAgIHJldHVybiBtb2RpZmllcnM7CiB9CiAKQEAgLTUxNCwxMCArNDk2LDkgQEAgdm9p
ZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJlS2V5Ym9h
cmQoSlNTdHJpbmdSZWYgY2hhcmEKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250ZXh0
LT5wcmVwYXJlRm9yQXN5bmNUYXNrKGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25QZXJzaXN0ZW50
KTsKIAogICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUga2V5Ym9hcmQgaXMgYWxyZWFkeSBzaG93bi4K
LSAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlQcmVz
czp0b1dURlN0cmluZyh0b1dLKGNoYXJhY3RlcikpIGNvbXBsZXRpb25CbG9jazptYWtlQmxvY2tQ
dHIoW3RoaXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewotICAg
ICAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9jb250
ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShjYWxsYmFja0lEKTsKKyAgICBbW0hJREV2ZW50R2VuZXJh
dG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlQcmVzczp0b1dURlN0cmluZyhjaGFyYWN0
ZXIpIGNvbXBsZXRpb25CbG9jazptYWtlQmxvY2tQdHIoW3N0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY2FsbGJhY2tJRF0geworICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9jb250ZXh0KQor
ICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9jb250ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShjYWxs
YmFja0lEKTsKICAgICB9KS5nZXQoKV07CiB9CiAKQEAgLTUzNCw3ICs1MTUsNyBAQCB2b2lkIFVJ
U2NyaXB0Q29udHJvbGxlcklPUzo6cmF3S2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiB7CiAgICAg
Ly8gS2V5IGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50IG9yIHRoZSBu
YW1lIG9mIGEgc3BlY2lhbCBrZXkgKGUuZy4gImRvd25BcnJvdyIpLgogICAgIC8vIEhJREV2ZW50
R2VuZXJhdG9yIGtub3dzIGhvdyB0byBtYXAgdGhlc2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBhcHBy
b3ByaWF0ZSBrZXljb2RlLgotICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRH
ZW5lcmF0b3JdIGtleURvd246dG9XVEZTdHJpbmcodG9XSyhrZXkpKV07CisgICAgW1tISURFdmVu
dEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0ga2V5RG93bjp0b1dURlN0cmluZyhr
ZXkpXTsKICAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBz
ZW5kTWFya2VySElERXZlbnRXaXRoQ29tcGxldGlvbkJsb2NrOl57IC8qIERvIG5vdGhpbmcgKi8g
fV07CiB9CiAKQEAgLTU0Miw3ICs1MjMsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6
cmF3S2V5VXAoSlNTdHJpbmdSZWYga2V5KQogewogICAgIC8vIEtleSBjYW4gYmUgZWl0aGVyIGEg
c2luZ2xlIFVuaWNvZGUgY29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpYWwga2V5IChl
LmcuICJkb3duQXJyb3ciKS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93cyBob3cgdG8g
bWFwIHRoZXNlIHNwZWNpYWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29kZS4KLSAgICBb
W0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlVcDp0b1dURlN0
cmluZyh0b1dLKGtleSkpXTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50
R2VuZXJhdG9yXSBrZXlVcDp0b1dURlN0cmluZyhrZXkpXTsKICAgICBbW0hJREV2ZW50R2VuZXJh
dG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBzZW5kTWFya2VySElERXZlbnRXaXRoQ29tcGxl
dGlvbkJsb2NrOl57IC8qIERvIG5vdGhpbmcgKi8gfV07CiB9CiAKQEAgLTU1MCw3ICs1MzEsNyBA
QCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6a2V5RG93bihKU1N0cmluZ1JlZiBjaGFyYWN0
ZXIsIEpTVmFsdWVSZWYgbW9kaWZpZXJBcgogewogICAgIC8vIENoYXJhY3RlciBjYW4gYmUgZWl0
aGVyIGEgc2luZ2xlIFVuaWNvZGUgY29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpYWwg
a2V5IChlLmcuICJkb3duQXJyb3ciKS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93cyBo
b3cgdG8gbWFwIHRoZXNlIHNwZWNpYWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29kZS4K
LSAgICBTdHJpbmcgaW5wdXRTdHJpbmcgPSB0b1dURlN0cmluZyh0b1dLKGNoYXJhY3RlcikpOwor
ICAgIGF1dG8gaW5wdXRTdHJpbmcgPSB0b1dURlN0cmluZyhjaGFyYWN0ZXIpOwogICAgIGF1dG8g
bW9kaWZpZXJGbGFncyA9IHBhcnNlTW9kaWZpZXJBcnJheShtX2NvbnRleHQtPmpzQ29udGV4dCgp
LCBtb2RpZmllckFycmF5KTsKIAogICAgIGZvciAoYXV0byYgbW9kaWZpZXJGbGFnIDogbW9kaWZp
ZXJGbGFncykKQEAgLTcyNyw3ICs3MDgsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6
YXBwbHlBdXRvY29ycmVjdGlvbihKU1N0cmluZ1JlZiBuZXdTdHJpbmcsIEpTU3RyaW5nUgogICAg
IHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBtX2NvbnRleHQtPnByZXBhcmVGb3JBc3luY1Rhc2soY2Fs
bGJhY2ssIENhbGxiYWNrVHlwZU5vblBlcnNpc3RlbnQpOwogCiAgICAgVGVzdFJ1bm5lcldLV2Vi
VmlldyAqd2ViVmlldyA9IHRoaXMtPndlYlZpZXcoKTsKLSAgICBbd2ViVmlldyBhcHBseUF1dG9j
b3JyZWN0aW9uOnRvV1RGU3RyaW5nKHRvV0sobmV3U3RyaW5nKSkgdG9TdHJpbmc6dG9XVEZTdHJp
bmcodG9XSyhvbGRTdHJpbmcpKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFt0
aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKKyAgICBbd2Vi
VmlldyBhcHBseUF1dG9jb3JyZWN0aW9uOnRvV1RGU3RyaW5nKG5ld1N0cmluZykgdG9TdHJpbmc6
dG9XVEZTdHJpbmcob2xkU3RyaW5nKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRy
KFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgbWFrZUJsb2NrUHRy
KFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKICAgICAg
ICAgICAgIC8vIGFwcGx5QXV0b2NvcnJlY3Rpb24gY2FuIGNhbGwgaXRzIGNvbXBsZXRpb24gaGFu
ZGxlciBzeW5jaHJvbm91c2x5LAogICAgICAgICAgICAgLy8gd2hpY2ggbWFrZXMgVUlTY3JpcHRD
b250cm9sbGVyIHVuaGFwcHkgKHNlZSBidWcgMTcyODg0KS4KQEAgLTExNTcsNyArMTEzOCw3IEBA
IGJvb2wgVUlTY3JpcHRDb250cm9sbGVySU9TOjppc1Nob3dpbmdEYXRhTGlzdFN1Z2dlc3Rpb25z
KCkgY29uc3QKIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnNldEtleWJvYXJkSW5wdXRN
b2RlSWRlbnRpZmllcihKU1N0cmluZ1JlZiBpZGVudGlmaWVyKQogewotICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRLZXlib2FyZElucHV0TW9kZUlkZW50aWZpZXIodG9XVEZTdHJp
bmcodG9XSyhpZGVudGlmaWVyKSkpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRLZXlib2FyZElucHV0TW9kZUlkZW50aWZpZXIodG9XVEZTdHJpbmcoaWRlbnRpZmllcikpOwog
fQogCiAvLyBGSVhNRTogV3JpdGUgdGhpcyBpbiB0ZXJtcyBvZiBISURFdmVudEdlbmVyYXRvciBv
bmNlIHdlIGtub3cgaG93IHRvIHJlc2V0IGNhcHMgbG9jayBzdGF0ZQpAQCAtMTE3OCw3ICsxMTU5
LDcgQEAgYm9vbCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OmtleWJvYXJkSXNBdXRvbWF0aWNhbGx5
U2hpZnRlZCgpIGNvbnN0CiAKIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6YXR0
YWNobWVudEluZm8oSlNTdHJpbmdSZWYganNBdHRhY2htZW50SWRlbnRpZmllcikKIHsKLSAgICBh
dXRvIGF0dGFjaG1lbnRJZGVudGlmaWVyID0gdG9XVEZTdHJpbmcodG9XSyhqc0F0dGFjaG1lbnRJ
ZGVudGlmaWVyKSk7CisgICAgYXV0byBhdHRhY2htZW50SWRlbnRpZmllciA9IHRvV1RGU3RyaW5n
KGpzQXR0YWNobWVudElkZW50aWZpZXIpOwogICAgIF9XS0F0dGFjaG1lbnQgKmF0dGFjaG1lbnQg
PSBbd2ViVmlldygpIF9hdHRhY2htZW50Rm9ySWRlbnRpZmllcjphdHRhY2htZW50SWRlbnRpZmll
cl07CiAgICAgX1dLQXR0YWNobWVudEluZm8gKmF0dGFjaG1lbnRJbmZvID0gYXR0YWNobWVudC5p
bmZvOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRl
clByb3h5Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5t
bQppbmRleCAwNjcyYjU4MWJmNjViNWFkOWEyYjg1ZmVhODYxNjQ4ZjIyM2ViNGM1Li4xMDI3Mjg4
NDA4NGQyYzEwMjA4Y2ZhMDcxNGYxYjEwYzVlZmMwYTBiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW0KQEAgLTI3MiwyMCArMjcyLDEwIEBAIHN0
YXRpYyBOU1RpbWVJbnRlcnZhbCBhYnNvbHV0ZVRpbWVGb3JFdmVudFRpbWUoZG91YmxlIGN1cnJl
bnRFdmVudFRpbWUpCiAKIEV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVzdENv
bnRyb2xsZXIqIHRlc3RDb250cm9sbGVyKQogICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0Q29u
dHJvbGxlcikKLSAgICAsIG1fdGltZSgwKQotICAgICwgbV9wb3NpdGlvbigpCi0gICAgLCBtX2xl
ZnRNb3VzZUJ1dHRvbkRvd24oZmFsc2UpCi0gICAgLCBtX2NsaWNrQ291bnQoMCkKLSAgICAsIG1f
Y2xpY2tUaW1lKDApCi0gICAgLCBtX2NsaWNrUG9zaXRpb24oKQotICAgICwgbV9jbGlja0J1dHRv
bihrV0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b24pCi0gICAgLCBldmVudE51bWJlcigwKQogewog
fQogCi1FdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSgpCi17Ci19CitFdmVudFNl
bmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSgpID0gZGVmYXVsdDsKIAogdm9pZCBFdmVudFNl
bmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiB7CkBAIC0z
OTQsNyArMzg0LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlRm9yY2VFdmVudFN5bmNocm9ub3VzbHko
TlNFdmVudCAqZXZlbnQpCiAKIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5Ojpi
ZWdpblByZXNzdXJlRXZlbnQoaW50IHN0YWdlKQogewotICAgIFJldGFpblB0cjxFdmVudFNlbmRl
clN5bnRoZXRpY0V2ZW50PiBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5bnRoZXRpY0V2
ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3Np
dGlvbi54LCBtX3Bvc2l0aW9uLnkpCisgICAgYXV0byBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNl
bmRlclN5bnRoZXRpY0V2ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNN
YWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIGdsb2JhbExvY2F0
aW9uOihbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSBj
b252ZXJ0UmVjdFRvU2NyZWVuOk5TTWFrZVJlY3QobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnks
IDEsIDEpXS5vcmlnaW4pCiAgICAgICAgIHN0YWdlOnN0YWdlCiAgICAgICAgIHByZXNzdXJlOjAu
NQpAQCAtNDA5LDcgKzM5OSw3IEBAIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5
OjpiZWdpblByZXNzdXJlRXZlbnQoaW50IHN0YWdlKQogCiBSZXRhaW5QdHI8TlNFdmVudD4gRXZl
bnRTZW5kZXJQcm94eTo6cHJlc3N1cmVDaGFuZ2VFdmVudChpbnQgc3RhZ2UsIGZsb2F0IHByZXNz
dXJlLCBFdmVudFNlbmRlclByb3h5OjpQcmVzc3VyZUNoYW5nZURpcmVjdGlvbiBkaXJlY3Rpb24p
CiB7Ci0gICAgUmV0YWluUHRyPEV2ZW50U2VuZGVyU3ludGhldGljRXZlbnQ+IGV2ZW50ID0gYWRv
cHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50
QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKKyAgICBh
dXRvIGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGlu
aXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9z
aXRpb24ueSkKICAgICAgICAgZ2xvYmFsTG9jYXRpb246KFttX3Rlc3RDb250cm9sbGVyLT5tYWlu
V2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpIGNvbnZlcnRSZWN0VG9TY3JlZW46TlNNYWtlUmVj
dChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgMSwgMSldLm9yaWdpbikKICAgICAgICAgc3Rh
Z2U6c3RhZ2UKICAgICAgICAgcHJlc3N1cmU6cHJlc3N1cmUKQEAgLTQzMSwxMCArNDIxLDEwIEBA
IHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZUNsaWNrKCkKIHsKICAgICBzZW5kTW91
c2VEb3duVG9TdGFydFByZXNzdXJlRXZlbnRzKCk7CiAKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4g
YmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKLSAgICBSZXRhaW5QdHI8TlNF
dmVudD4gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFu
Z2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBmb3JjZUNs
aWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5j
cmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IHJlbGVhc2luZ1ByZXNzdXJlID0gcHJl
c3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7
CisgICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOworICAgIGF1
dG8gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VE
aXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gZm9yY2VDbGljayA9IHByZXNzdXJlQ2hh
bmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1
dG8gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hh
bmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKICAgICBOU0V2ZW50ICptb3VzZVVwID0gW05TRXZl
bnQgbW91c2VFdmVudFdpdGhUeXBlOk5TRXZlbnRUeXBlTGVmdE1vdXNlVXAKICAgICAgICAgbG9j
YXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIG1v
ZGlmaWVyRmxhZ3M6MApAQCAtNDY4LDkgKzQ1OCw5IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
c3RhcnRBbmRDYW5jZWxNb3VzZUZvcmNlQ2xpY2soKQogewogICAgIHNlbmRNb3VzZURvd25Ub1N0
YXJ0UHJlc3N1cmVFdmVudHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNz
dXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBpbmNy
ZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGly
ZWN0aW9uOjpJbmNyZWFzaW5nKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcmVsZWFzaW5nUHJl
c3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpE
ZWNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQo
MSk7CisgICAgYXV0byBpbmNyZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEs
IFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIHJlbGVhc2lu
Z1ByZXNzdXJlID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlv
bjo6RGVjcmVhc2luZyk7CiAgICAgTlNFdmVudCAqbW91c2VVcCA9IFtOU0V2ZW50IG1vdXNlRXZl
bnRXaXRoVHlwZTpOU0V2ZW50VHlwZUxlZnRNb3VzZVVwCiAgICAgICAgIGxvY2F0aW9uOk5TTWFr
ZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQogICAgICAgICBtb2RpZmllckZsYWdz
OjAKQEAgLTUwMyw5ICs0OTMsOSBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VE
b3duKCkKIHsKICAgICBzZW5kTW91c2VEb3duVG9TdGFydFByZXNzdXJlRXZlbnRzKCk7CiAKLSAg
ICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgx
KTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdl
RXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJldGFp
blB0cjxOU0V2ZW50PiBmb3JjZU1vdXNlRG93biA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJl
c3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gYmVnaW5QcmVzc3Vy
ZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKKyAgICBhdXRvIHByZUZvcmNlQ2xpY2sgPSBwcmVz
c3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsK
KyAgICBhdXRvIGZvcmNlTW91c2VEb3duID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3Vy
ZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CiAKICAgICBOU1ZpZXcgKnRhcmdldFZpZXcg
PSBbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkgaGl0VGVz
dDpbYmVnaW5QcmVzc3VyZSBsb2NhdGlvbkluV2luZG93XV07CiAgICAgdGFyZ2V0VmlldyA9IHRh
cmdldFZpZXcgPyB0YXJnZXRWaWV3IDogbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+
cGxhdGZvcm1WaWV3KCk7CkBAIC01MjYsOSArNTE2LDkgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5
Ojptb3VzZUZvcmNlRG93bigpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZVVw
KCkKIHsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1
cmVFdmVudCgyKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gc3RhZ2VUd29FdmVudCA9IHByZXNz
dXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwot
ICAgIFJldGFpblB0cjxOU0V2ZW50PiBzdGFnZU9uZUV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVu
dCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBiZWdp
blByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDIpOworICAgIGF1dG8gc3RhZ2VUd29FdmVu
dCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3Jl
YXNpbmcpOworICAgIGF1dG8gc3RhZ2VPbmVFdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwg
UHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwogCiAgICAgLy8gU2luY2UgQXBw
S2l0IGRvZXMgbm90IGltcGxlbWVudCBmb3JjZXVwL2Rvd24gYXMgbW91c2UgZXZlbnRzLCB3ZSBu
ZWVkIHRvIHNlbmQgdHdvIHByZXNzdXJlIGV2ZW50cyB0byBkZXRlY3QKICAgICAvLyB0aGUgY2hh
bmdlIGluIHN0YWdlIHRoYXQgbWFya3MgdGhvc2UgbW9tZW50cy4KQEAgLTU1MSw4ICs1NDEsOCBA
QCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0IGZvcmNlKQog
ewogICAgIGludCBzdGFnZSA9IGZvcmNlIDwgMSA/IDEgOiAyOwogICAgIGZsb2F0IHByZXNzdXJl
ID0gZm9yY2UgPCAxID8gZm9yY2UgOiBmb3JjZSAtIDE7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+
IGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoc3RhZ2UpOwotICAgIFJldGFpblB0
cjxOU0V2ZW50PiBwcmVzc3VyZUNoYW5nZWRFdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoc3Rh
Z2UsIHByZXNzdXJlLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAg
YXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KHN0YWdlKTsKKyAgICBhdXRv
IHByZXNzdXJlQ2hhbmdlZEV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudChzdGFnZSwgcHJlc3N1
cmUsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKIAogICAgIE5TVmlldyAq
dGFyZ2V0VmlldyA9IFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZp
ZXcoKSBoaXRUZXN0OltiZWdpblByZXNzdXJlIGxvY2F0aW9uSW5XaW5kb3ddXTsKICAgICB0YXJn
ZXRWaWV3ID0gdGFyZ2V0VmlldyA/IHRhcmdldFZpZXcgOiBtX3Rlc3RDb250cm9sbGVyLT5tYWlu
V2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKQEAgLTYxMSw4ICs2MDEsNyBAQCB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiAKIHZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9k
aWZpZXJzLCB1bnNpZ25lZCBrZXlMb2NhdGlvbikKIHsKLSAgICBOU1N0cmluZyogY2hhcmFjdGVy
ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDU3RyaW5nOnRvU1REKGtleSkuY19zdHIoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzpbTlNTdHJpbmcgZGVmYXVsdENT
dHJpbmdFbmNvZGluZ11dOworICAgIE5TU3RyaW5nKiBjaGFyYWN0ZXIgPSB0b1dURlN0cmluZyhr
ZXkpOwogCiAgICAgTlNTdHJpbmcgKmV2ZW50Q2hhcmFjdGVyID0gY2hhcmFjdGVyOwogICAgIHVu
c2lnbmVkIHNob3J0IGtleUNvZGUgPSAwOwpAQCAtODMyLDcgKzgyMSw3IEBAIHZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9k
aWZpZXJzLCB1bnNpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeShpbnQg
eCwgaW50IHkpCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IGNnU2Nyb2xsRXZlbnQgPSBh
ZG9wdENGKENHRXZlbnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVu
aXRMaW5lLCAyLCB5LCB4LCAwKSk7CisgICAgYXV0byBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihD
R0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwg
MiwgeSwgeCwgMCkpOwogCiAgICAgLy8gU2V0IHRoZSBDR0V2ZW50IGxvY2F0aW9uIGluIGZsaXBw
ZWQgY29vcmRzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBzY3JlZW4sIHdoaWNoCiAgICAgLy8gY29t
cGVuc2F0ZXMgZm9yIHRoZSBiZWhhdmlvciBvZiArW05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpd
IHdoZW4gdGhlIGV2ZW50IGhhcwpAQCAtODU5LDcgKzg0OCw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBib29sIHBhZ2VkKQog
CiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1
bVBoYXNlcyhpbnQgeCwgaW50IHksIGludCBwaGFzZSwgaW50IG1vbWVudHVtKQogewotICAgIFJl
dGFpblB0cjxDR0V2ZW50UmVmPiBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRl
U2Nyb2xsV2hlZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkp
OworICAgIGF1dG8gY2dTY3JvbGxFdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZVNjcm9sbFdo
ZWVsRXZlbnQyKDAsIGtDR1Njcm9sbEV2ZW50VW5pdExpbmUsIDIsIHksIHgsIDApKTsKIAogICAg
IC8vIFNldCB0aGUgQ0dFdmVudCBsb2NhdGlvbiBpbiBmbGlwcGVkIGNvb3JkcyByZWxhdGl2ZSB0
byB0aGUgZmlyc3Qgc2NyZWVuLCB3aGljaAogICAgIC8vIGNvbXBlbnNhdGVzIGZvciB0aGUgYmVo
YXZpb3Igb2YgK1tOU0V2ZW50IGV2ZW50V2l0aENHRXZlbnQ6XSB3aGVuIHRoZSBldmVudCBoYXMK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01h
Yy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQpp
bmRleCA2NDE3ODJjYTk3ZTFkYWZiOTAwOTE5ZGIxOWIzNDc0YTU1NDM4OGU1Li41YTRlOTZiODFl
YThjZGEwNmIzN2I0NjhlNTg4NTllZjcxZWI0NmI4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCkBAIC02NCw3ICs2NCw3IEBAIFBsYXRm
b3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24qIGNvbmZp
Z3VyYXRpb24sIGNvbnN0IFRlCiAgICAgaWYgKG1fb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUp
CiAgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldFZhbHVl
OkBZRVMgZm9yS2V5OkAiV2ViS2l0MlVzZVJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhIl07CiAK
LSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29waWVkQ29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOworICAgIGF1dG8gY29waWVkQ29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOwogICAgIFdLUHJlZmVyZW5j
ZXNTZXRUaHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdlIFdLUHJlZmVyZW5jZXNSZWYp
W2NvcGllZENvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCBtX29wdGlvbnMudXNlVGhyZWFkZWRT
Y3JvbGxpbmcpOwogCiAgICAgTlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIFRlc3RDb250
cm9sbGVyOjp2aWV3V2lkdGgsIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0KTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KaW5kZXggMTRiN2Rj
OWQwZjI0ZWMxMGU3OGFjMmIwZTAzNjVhOWVhNjQ5YWIyNi4uYjIyMjg3MWNkMGEzOTE5ZTMzZWQ2
MDZkMGY0NDE2ODg1NjkzYTIwNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9t
YWMvVGVzdENvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMv
VGVzdENvbnRyb2xsZXJNYWMubW0KQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlv
biYgdGVzdAogICAgIGlmICghdGVzdC51cmxDb250YWlucygiY29udGVudGV4dGVuc2lvbnMvIikp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdGVzdFVSTCA9IGFk
b3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGVzdC51cmwoKSkpOwor
ICAgIGF1dG8gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgdGVzdC51cmwoKSkpOwogICAgIE5TVVJMICpmaWx0ZXJVUkwgPSBbKF9fYnJpZGdlIE5T
VVJMICopdGVzdFVSTC5nZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhFeHRlbnNpb246QCJqc29uIl07
CiAKICAgICBfX2Jsb2NrIE5TU3RyaW5nICpjb250ZW50RXh0ZW5zaW9uU3RyaW5nOwpAQCAtMzcx
LDE0ICszNzEsMTQgQEAgc3RhdGljIE5TU2V0ICpzeXN0ZW1IaWRkZW5Gb250RmFtaWx5U2V0KCkK
IAogc3RhdGljIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGdlbmVyYXRlRm9udEFsbG93TGlzdCgp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IHJlc3VsdCA9IGFkb3B0V0so
V0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byByZXN1bHQgPSBhZG9wdFdLKFdLTXV0
YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAoTlNTdHJpbmcgKmZvbnRGYW1pbHkgaW4gYWxs
b3dlZEZvbnRGYW1pbHlTZXQoKSkgewogICAgICAgICBOU0FycmF5ICpmb250c0ZvckZhbWlseSA9
IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gYXZhaWxhYmxlTWVtYmVyc09mRm9u
dEZhbWlseTpmb250RmFtaWx5XTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZh
bWlseUluRm9udCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW2ZvbnRG
YW1pbHkgVVRGOFN0cmluZ10pKTsKKyAgICAgICAgYXV0byBmYW1pbHlJbkZvbnQgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFtmb250RmFtaWx5IFVURjhTdHJpbmddKSk7
CiAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdC5nZXQoKSwgZmFtaWx5SW5Gb250Lmdl
dCgpKTsKICAgICAgICAgZm9yIChOU0FycmF5ICpmb250SW5mbyBpbiBmb250c0ZvckZhbWlseSkg
ewogICAgICAgICAgICAgLy8gRm9udCBuYW1lIGlzIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgYXJy
YXkuCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZm9udE5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFtbZm9udEluZm8gb2JqZWN0QXRJbmRl
eDowXSBVVEY4U3RyaW5nXSkpOworICAgICAgICAgICAgYXV0byBmb250TmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW1tmb250SW5mbyBvYmplY3RBdEluZGV4OjBd
IFVURjhTdHJpbmddKSk7CiAgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShyZXN1bHQuZ2V0
KCksIGZvbnROYW1lLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM5NCw3ICszOTQsNyBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKICAgICAv
LyBUZXN0aW5nIHVzZXMgYSBwcml2YXRlIHNlc3Npb24sIHdoaWNoIGlzIG1lbW9yeSBvbmx5LiBI
b3dldmVyIGNyZWF0aW5nIG9uZSBpbnN0YW50aWF0ZXMgYSBzaGFyZWQgTlNVUkxDYWNoZSwKICAg
ICAvLyBhbmQgaWYgd2UgaGF2ZW4ndCBjcmVhdGVkIG9uZSB5ZXQsIHRoZSBkZWZhdWx0IG9uZSB3
aWxsIGJlIGNyZWF0ZWQgb24gZGlzay4KICAgICAvLyBNYWtpbmcgdGhlIHNoYXJlZCBjYWNoZSBt
ZW1vcnktb25seSBhdm9pZHMgdG91Y2hpbmcgdGhlIGZpbGUgc3lzdGVtLgotICAgIFJldGFpblB0
cjxOU1VSTENhY2hlPiBzaGFyZWRDYWNoZSA9CisgICAgYXV0byBzaGFyZWRDYWNoZSA9CiAgICAg
ICAgIGFkb3B0TlMoW1tOU1VSTENhY2hlIGFsbG9jXSBpbml0V2l0aE1lbW9yeUNhcGFjaXR5OjEw
MjQgKiAxMDI0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tDYXBh
Y2l0eTowCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrUGF0
aDpuaWxdKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0
Q29udHJvbGxlck1hYy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250
cm9sbGVyTWFjLmgKaW5kZXggMGVhYjg5NDllNmJlYmZlZTY1OTQ3NTg5YWZiOWU4ZDliOGJlMWVj
Ny4uMmQyZDFkNmI4NDZlNjg3OGIwYjFlYmRjMTY2N2MxNzVlOTE1NjY1ZiAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKQEAgLTMx
LDEzICszMSwxNCBAQCBPQkpDX0NMQVNTIFdLV2ViVmlldzsKIAogbmFtZXNwYWNlIFdUUiB7CiAK
LWNsYXNzIFVJU2NyaXB0Q29udHJvbGxlck1hYyA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJD
b2NvYSB7CitjbGFzcyBVSVNjcmlwdENvbnRyb2xsZXJNYWMgZmluYWwgOiBwdWJsaWMgVUlTY3Jp
cHRDb250cm9sbGVyQ29jb2EgewogcHVibGljOgogICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29udHJv
bGxlck1hYyhVSVNjcmlwdENvbnRleHQmIGNvbnRleHQpCiAgICAgICAgIDogVUlTY3JpcHRDb250
cm9sbGVyQ29jb2EoY29udGV4dCkKICAgICB7CiAgICAgfQogCitwcml2YXRlOgogICAgIHZvaWQg
cmVwbGFjZVRleHRBdFJhbmdlKEpTU3RyaW5nUmVmLCBpbnQsIGludCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCB6b29tVG9TY2FsZShkb3VibGUsIEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIGRvdWJs
ZSB6b29tU2NhbGUoKSBjb25zdCBvdmVycmlkZTsKQEAgLTYyLDcgKzYzLDYgQEAgcHVibGljOgog
CiAgICAgdm9pZCBhY3RpdmF0ZUF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpTVmFsdWVSZWYgY2Fs
bGJhY2spIG92ZXJyaWRlOwogCi1wcml2YXRlOgogICAgIE5TVGFibGVWaWV3ICpkYXRhTGlzdFN1
Z2dlc3Rpb25zVGFibGVWaWV3KCkgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KaW5kZXggY2QxMTMyOWE2NTQx
ZDdiNGViNzdkN2VjMTQ2ODhlOTkyMWYyN2M1My4uYjVjYjUxODE1MDU5ZTdhMDkzYTE0MjM5OTFl
ODkxN2UzZWQzMDkwOCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlT
Y3JpcHRDb250cm9sbGVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJ
U2NyaXB0Q29udHJvbGxlck1hYy5tbQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgVUlTY3JpcHRD
b250cm9sbGVyTWFjOjpjb21wbGV0ZUJhY2tTd2lwZShKU1ZhbHVlUmVmIGNhbGxiYWNrKQogCiB2
b2lkIFVJU2NyaXB0Q29udHJvbGxlck1hYzo6cGxheUJhY2tFdmVudFN0cmVhbShKU1N0cmluZ1Jl
ZiBldmVudFN0cmVhbSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKLSAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHN0cmVhbSA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgZXZlbnRTdHJlYW0pKTsKKyAgICBhdXRvIHN0cmVhbSA9IGFkb3B0Q0YoSlNT
dHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXZlbnRTdHJlYW0pKTsKICAg
ICBwbGF5QmFja0V2ZW50cyh3ZWJWaWV3KCksIG1fY29udGV4dCwgKF9fYnJpZGdlIE5TU3RyaW5n
ICopc3RyZWFtLmdldCgpLCBjYWxsYmFjayk7CiB9CiAK
</data>
<flag name="commit-queue"
          id="425679"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409860</attachid>
            <date>2020-09-27 15:02:47 -0700</date>
            <delta_ts>2020-09-27 18:46:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200927150246.patch</filename>
            <type>text/plain</type>
            <size>699668</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJmZWY0NTFlYS4u
Yzc4YjE0N2U1NzgzMGFiYWM4ODBkMjZmMmM0YWZiODcxODVkNmU5MyAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0NSBAQAorMjAy
MC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlmeWluZywgYnV0IGV2ZW4g
bW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVzdAorICAgICAgICBjb2Rl
IGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkgYW5kIHBhc3RlIHJhdGhl
ciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0ZXIgdGhlIHJlZmFjdG9y
aW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlzIGNvZGUgaXMgd3JpdHRl
biB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGluZyBmb3IgZWFjaCBmdW5j
dGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0
KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0NsYXNzIHdpdGggdGhpcy4g
UmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBjbGVhciB0aGlzIHBhc3Nl
cyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKHVp
RWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBSZW1vdmVkIHVubmVlZGVk
IGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3aGljaCBzdGFydHMgb3V0
IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9y
RHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IpOiBV
c2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoX3JldHVybkV4
cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2UgYW5kIGF1dG8uCisgICAg
ICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAo
Z2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChHQ0NvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6IFJlcGxhY2VkIGdldEpT
Q2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFpblB0ciB0byBtYWtlIGl0
IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVyLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKGVuY29kZUhv
c3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChleGVjQ29tbWFu
ZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAob3Zl
cnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKHF1ZXVlTG9hZENhbGxi
YWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5nQ2FsbGJhY2spOiBEaXR0
by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFs
T2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKTogUmVw
bGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRy
IHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisg
ICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25z
dCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAg
ICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQpOiBTaW1wbGlmaWVk
IHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sp
OiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAorICAgICAgICB0YWJsZSB2
YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBuZWVkIHRvIGJlIG9iamVj
dHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogRGl0dG8u
CisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4K
KyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTogVXNlIGFycmF5TGVuZ3Ro
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDogVXBkYXRlZCBmb3IgdGhl
IGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3Jt
TmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoY3JlYXRlRW1w
dHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50
TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
bGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
VmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oOiBSZW1vdmVkIHVubmVl
ZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGguCisgICAgICAgIFJlbW92
ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIgSlNWYWx1ZUlzT2JqZWN0
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSBj
b25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoY3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09iamVjdC4KKyAgICAgICAg
KHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSBjb25zdCk6
IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRnJh
bWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERlbGVnYXRlIGRpZENsZWFy
V2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6CisgICAgICAgIFVzZSBhdXRv
LiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LiBTaW1wbGlmaWVkIG9i
amVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0TlMgaW5zdGVhZCBvZiBy
ZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRDbGVhcldpbmRvd09iamVj
dEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNlIGNyZWF0ZUpTU3RyaW5n
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAg
ICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVuZ3RoLgorCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAgKEZy
YW1lTG9hZERlbGVnYXRlOjpkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lSW5TdGFuZGFyZFdv
cmxkKToKKyAgICAgICAgUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFrZVdpbmRvd09iamVjdC4K
KworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwOgorICAg
ICAgICAoV1RSOjp0b09wdGlvbmFsQm9vbCk6IFJlbmFtZWQgZnJvbSBKU1ZhbHVlTWFrZUJvb2xl
YW5Pck51bGwuCisgICAgICAgIChXVFI6OnRvT3B0aW9uYWxEb3VibGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6bWFrZVZhbHVlKTogQWRkZWQgd2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlw
ZXMuCisgICAgICAgIFJlcGxhY2VkIEpTVmFsdWVUb051bGxhYmxlQm9vbGVhbiBhbmQgSlNWYWx1
ZU1ha2VTdHJpbmdPck51bGwuCisgICAgICAgIChXVFI6OmNyZWF0ZUpTU3RyaW5nKTogQWRkZWQg
d2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlwZXMuCisgICAgICAgIChXVFI6OnByb3BlcnR5
KTogQWRkZWQuCisgICAgICAgIChXVFI6OnN0cmluZ1Byb3BlcnR5KTogQWRkZWQuCisgICAgICAg
IChXVFI6OmJvb2xlYW5Qcm9wZXJ0eSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpudW1lcmljUHJv
cGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6b2JqZWN0UHJvcGVydHkpOiBSZWZhY3RvcmVk
IHRvIGNhbGwgcHJvcGVydHkuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogQWRkZWQuCisg
ICAgICAgIChXVFI6OnNldEdsb2JhbE9iamVjdFByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChX
VFI6OmNhbGwpOiBSZWZhY3RvcmVkIHRvIGxldCBvYmplY3RQcm9wZXJ0eSBkbyBtb3JlIG9mIHRo
ZSBudWxsIGNoZWNraW5nLgorICAgICAgICAoV1RSOjpjYWxsQ29uc3RydWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmg6IFVwZGF0ZWQg
Zm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNX
cmFwcGFibGUuaDogUmVkdWNlZCBpbmNsdWRlcyBhIGJpdC4KKworICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmg6IEFkZGVkIHNldEdsb2JhbE9iamVjdFByb3Bl
cnR5LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250ZXh0LmNwcDoKKyAgICAgICAgKFVJU2NyaXB0Q29udGV4dDo6VUlTY3JpcHRDb250ZXh0
KTogUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFVJ
U2NyaXB0Q29udGV4dDo6cnVuVUlTY3JpcHQpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAg
IChVSVNjcmlwdENvbnRleHQ6Om9iamVjdEZyb21SZWN0IGNvbnN0KTogVXNlIHNldFByb3BlcnR5
LgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBUZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwOgorICAg
ICAgICAoV1RSOjp0b0RldmljZU9yaWVudGF0aW9uKTogVXNlIGNyZWF0ZUpTU3RyaW5nIGFuZCBK
U1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nLgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIu
bW06CisgICAgICAgICgtW0xheW91dFRlc3RTcGVsbENoZWNrZXIgc2V0UmVzdWx0c0Zyb21KU1Zh
bHVlOmluQ29udGV4dDpdKTogVXNlIGNyZWF0ZUpTU3RyaW5nCisgICAgICAgIGFuZCByZW1vdmVk
IHVubmVlZGVkIHVzZSBvZiBscm91bmRsLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9E
aWN0aW9uYXJ5RnVuY3Rpb25zLmg6IEFkZGVkLiBDb250YWlucyBjb252ZW5pZW5jZSBmdW5jdGlv
bnMKKyAgICAgICAgZm9yIGRlYWxpbmcgd2l0aCBXS0RpY3Rpb25hcnlSZWYuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaDogSW5pdGlhbGl6ZSBkYXRhIG1l
bWJlcnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmNwcDoKKyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbik6
IFVzZSBPcHRpb25hbCBpbnN0ZWFkIG9mIHNlcGFyYXRlIGJvb2wuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oOiBVcGRhdGVkIGZvciB0aGUgYWJv
dmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtOgor
ICAgICAgICAoX2dlbmVyYXRlSW1wbGVtZW50YXRpb25GaWxlKTogVXNlIHN0YXRpYyBpbml0aWFs
aXphdGlvbiBhbmQgYSBsYW1iZGEgaW5zdGVhZCBvZgorICAgICAgICBhbiBpZiBzdGF0ZW1lbnQg
dG8gaW5pdGlhbGl6ZS4KKyAgICAgICAgKF9wbGF0Zm9ybVR5cGVDb25zdHJ1Y3Rvcik6IFVzZSB0
b09wdGlvbmFsQm9vbCBhbmQgY3JlYXRlSlNTdHJpbmcuIEFsc28gYWRkZWQKKyAgICAgICAgc3Vw
cG9ydCBmb3IgbnVsbGFibGUgZG91YmxlcyBhbmQgdXNlZCBhdXRvIGEgYml0IG1vcmUuCisgICAg
ICAgIChfcmV0dXJuRXhwcmVzc2lvbik6IFVzZSBtYWtlVmFsdWUuCisKKyAgICAgICAgKiBJbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDogTWFkZSB0aGUgb3B0aW9uYWwgYXJn
dW1lbnRzIHRvIHRoZQorICAgICAgICBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiBmdW5jdGlv
biAiZG91YmxlPyIgaW5zdGVhZCBvZiAib2JqZWN0Ii4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXVFI6OmdldE1lbnVJdGVtQ2hpbGRyZW5DYWxsYmFjayk6IFVzZSBhdXRvIGFuZCBub3QgSlNW
YWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IE1vdmVkIHRvIEpTQmFz
aWNzLmgvY3BwLgorICAgICAgICAoV1RSOjpwYXJzZVRvdWNoTW9kaWZpZXIpOiBBZGRlZC4gRmFj
dG9yZWQgb3V0IG9mIHRoZQorICAgICAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3Vj
aE1vZGlmaWVyIGZ1bmN0aW9uLgorICAgICAgICAoV1RSOjpwYXJzZU1vZGlmaWVyQXJyYXkpOiBV
c2UgY3JlYXRlSlNTdHJpbmcgYW5kIHJlbW92ZSB1bm5lZWRlZCBpZ25vcmVkCisgICAgICAgIGV4
Y2VwdGlvbiBvdXQgYXJndW1lbnQsIHNpbmNlIHRoYXQgaXMgb3B0aW9uYWwuIEFsc28gYWRkZWQg
b3ZlcmxvYWQgdGhhdAorICAgICAgICBnZXRzIHRoZSBjb250ZXh0LgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNlbmRpbmdDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KTog
VXNlIGFkb3B0V0sgYW5kIHNldFZhbHVlLiBSZXR1cm4gYSBXS1JldGFpblB0ci4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKTogVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
b3VzZVVwKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1v
dXNlTW92ZVRvKTogVXNlIHNldFZhbHVlIGFuZAorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZXMuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9y
Y2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpz
dGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlRG93bik6IERpdHRvLgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlVXApOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNoYW5nZWQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bGVhcEZvcndhcmQpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hy
b25vdXNDbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OmNyZWF0ZUtl
eURvd25NZXNzYWdlQm9keSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6a2V5RG93bik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25v
dXNLZXlEb3duKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9s
bEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMpOiBVc2UKKyAgICAgICAgc2V0VmFsdWUgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
Y29udGludW91c01vdXNlU2Nyb2xsQnkpOiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpjb250ZXh0Q2xpY2spOiBVc2UgYXV0byBhbmQgbm90IEpTVmFsdWVUb09iamVjdC4KKyAg
ICAgICAgKFdUUjo6dG9Nb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKTogVXNlIGJvb2xlYW5Qcm9w
ZXJ0eS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6YWRkVG91Y2hQb2lu
dCk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAg
IChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcik6
IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaFBv
aW50UmFkaXVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnRvdWNoU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6dG91Y2hNb3ZlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoRW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoQ2FuY2VsKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmNsZWFyVG91Y2hQb2ludHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6cmVsZWFzZVRvdWNoUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FuY2VsVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNl
dEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUu
CisgICAgICAgIERlbGV0ZWQgdmFyaW91cyB1bm5lZWRlZCBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXVFI6OkdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdUUjo6R0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6R0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFBy
b3BlcnR5LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0Nv
bnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICBBbHNvIG1hcmtlZCB0
aGUgY2xhc3MgZmluYWwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRp
ZENyZWF0ZVBhZ2UpOiBVc2UgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6cmVwb3J0TGl2ZURvY3VtZW50cyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSk6IFVzZSBk
aWN0aW9uYXJ5VmFsdWUsCisgICAgICAgIGJvb2xlYW5WYWx1ZSwgcG9zdFBhZ2VNZXNzYWdlLCB2
YWx1ZSwgYW5kIG1vcmUgdG8gc3RyZWFtbGluZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGU6OmJvb2xlYW5Gb3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZTo6c3RyaW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OmJlZ2luVGVzdGluZyk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlOjpkb25lKTogVXNlIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6Y2xvc2VPdGhlclBhZ2VzKTogVXNlIHNldFZhbHVlIGFuZCB0b1dLLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6ZHVtcFRvU3RkRXJyKTogVXNlIHBvc3RQYWdlTWVzc2FnZQor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dCk6IFVzZSB0b1dLLgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVl
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBv
c3RBZGRDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdEZvY3VzV2ViVmlldyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdFNldEJhY2tpbmdTY2FsZUZhY3Rvcik6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdFNldFdpbmRvd0lzS2V5KTogVXNlIHRvV0suCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0Vmlld1NpemUpOiBVc2Ugc2V0VmFs
dWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2ltdWxhdGVX
ZWJOb3RpZmljYXRpb25DbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0QWRkc1Zpc2l0ZWRMaW5rcyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bik6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLAorICAgICAgICBhbmQgdXNlIE9w
dGlvbmFsIGluc3RlYWQgb2YgYm9vbC9kb3VibGUgcGFpcnMuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IpOiBV
c2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aXNHZW9s
b2NhdGlvblByb3ZpZGVyQWN0aXZlIGNvbnN0KTogVXNlIHRvV0sgYW5kIGJvb2xlYW5WYWx1ZS4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJv
YXJkIGNvbnN0KTogVXNlIHRvV0sgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVybWlzc2lvbik6IFVzZSBwb3N0UGFnZU1lc3NhZ2Uu
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcnNp
c3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKTogVXNlIHNldFZhbHVlCisgICAgICAgIGFuZCBwb3N0
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjp1c2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JP
cmlnaW4pOiBVc2V0IHNldFZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKTogVXNlIHNldFZh
bHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpz
ZXRIaWRkZW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldENhY2hl
TW9kZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nl
c3NXb3JrUXVldWUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6cHJvY2Vzc1dvcmtRdWV1ZSk6IFVzZSBwb3N0UGFnZU1lc3Nh
Z2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUZvcndhcmROYXZpZ2F0
aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWQpOiBV
c2Ugc2V0VmFsdWUgYW5kIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnF1ZXVlUmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpxdWV1ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
TWVzc2FnZSk6IEFkZGVkLiBPdmVybG9hZHMgZm9yIG1hbnkgdHlwZXMgdG8ga2VlcCBjYWxsZXIg
Y29kZSBzdHJlYW1saW5lZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0UGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6IFVwZGF0ZWQgZm9y
IHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6cHJvcGVydHlWYWx1ZSk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6OnByb3BlcnR5VmFsdWVEb3VibGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6cHJvcGVydHlW
YWx1ZUludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpudW1lcmljV2luZG93UHJvcGVydHkpOiBS
ZW5hbWVkIGZyb20gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUgZm9yIGJyZXZpdHkKKyAgICAg
ICAgYW5kIGZvciBjb25zaXN0ZW5jeSB3aXRoIEpTQmFzaWNzLmggZnVuY3Rpb25zLgorICAgICAg
ICAoV1RSOjpkdW1wUGF0aCk6IFVzZSBzdHJpbmdQcm9wZXJ0eSwgb2JqZWN0UHJvcGVydHksIGFu
ZCBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpyYW5nZVRvU3RyKTogVXNlIGF1dG8sIG51bWVy
aWNQcm9wZXJ0eSwgYW5kIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Ok5hdmlnYXRpb25UeXBl
VG9TdHJpbmcpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVuYW1lZCBmcm9t
IHNlY3VyaXR5T3JpZ2luVG9TdHIuIFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpmcmFt
ZVRvU3RyKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6cmVz
ZXRBZnRlclRlc3QpOiBSZW1vdmVkIHVubmVlZGVkIGxvY2FsLgorICAgICAgICAoV1RSOjpkdW1w
RnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCk6IFVzZSBhdXRvLgorICAgICAg
ICAoV1RSOjpkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogRGl0
dG8uCisgICAgICAgIChXVFI6OmR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OmR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKTogVXBkYXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdUUjo6dG9KUyk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6Omhhc0RvY3VtZW50RWxlbWVudCk6IFVzZSBvYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKTogVXNlIHNldEds
b2JhbE9iamVjdFByb3BlcnR5LAorICAgICAgICBhbmQgcGFzcyBmZXdlciBhcmd1bWVudHMgdG8g
bWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKTogU3RyZWFtbGluZSBjb2RlIGEgYml0LgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKTog
VXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Omxhc3RGaWxlVVJMUGF0aENvbXBvbmVudCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNi
YXJUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVh
Y2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGluZyk6IERpdHRv
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcik6IFVzZSB0b1dLLgor
ICAgICAgICAoV1RSOjpwYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6Om1haW5GcmFtZSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjptYWluSlNDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmRpc3BsYXkpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheUFuZFRyYWNrUmVwYWludHMpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6dG9X
Syk6IEFkZGVkIG92ZXJsb2FkIGZvciBkb3VibGUuCisgICAgICAgIChXVFI6OmNyZWF0ZVdLRGlj
dGlvbmFyeSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0
aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbik6IEFkZGVkLgorICAgICAgICAo
V1RSOjpwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NCk6IEFkZGVkLgor
ICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRk
ZWQuCisgICAgICAgIChXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IEFkZGVkLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wUGl4ZWxzIGNvbnN0KTogVXNlIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXREdW1wUGl4ZWxzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OndoYXRUb0R1bXAgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2hhdFRvRHVt
cCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRXYWl0VW50aWxEb25lKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNob3VsZFdhaXRVbnRpbERvbmUgY29uc3QpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlwdCk6IFVzZSBwYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpleGVjQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpmaW5k
T3B0aW9uc0Zyb21BcnJheSk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgYW5kIGNy
ZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNl
IHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmdNYXRjaGVzSW5QYWdl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0
SW5kaWNlcyk6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBhcnJheUxlbmd0aCBhbmQKKyAgICAgICAg
cmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIHN0ZDo6cm91bmQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk6IFVzZSBwYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVt
U2l6ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hl
RGlza1VzYWdlRm9yT3JpZ2luKTogRGl0dG8uCisgICAgICAgIChXVFI6OnN0cmluZ0FycmF5VG9K
Uyk6IFR3ZWFrZWQgY29kaW5nIHN0eWxlIGEgYml0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1lZGlhRGV2aWNl
c0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViUlRDTURO
U0lDRUNhbmRpZGF0ZXNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldEN1c3RvbVVzZXJBZ2VudCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdl
YkdMMkVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V3JpdGFi
bGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGUpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9u
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1
bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRQbHVnaW5zRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUpOiBVc2UgbWFpbkZyYW1lLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIpOiBSZW1vdmVkIGxvY2FsLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBdWRpb1Jlc3VsdCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6IFVzZSBwYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9i
amVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9y
KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9y
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKTog
VXNlIHJhbmdlLWJhc2VkIGZvciBsb29wLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24pOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5h
dmlnYXRpb24gY29uc3QpOgorICAgICAgICBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbik6CisgICAgICAgIFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y2FjaGVUZXN0UnVubmVy
Q2FsbGJhY2spOiBDaGFuZ2VkIG1hcCB0byBzdG9yZSBvYmplY3RzIGluc3RlYWQgb2YgdmFsdWVz
LgorICAgICAgICAoV1RSOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogU2ltcGxpZnkgc2luY2Ug
bWFwIGhhcyBvYmplY3RzLiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYXJUZXN0UnVubmVyQ2FsbGJhY2tzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T25seUFjY2VwdEZpcnN0UGFydHlD
b29raWVzKTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFVzZXJTdHlsZVNoZWV0RW5hYmxlZCk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24pOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsV2ViTm90
aWZpY2F0aW9uUGVybWlzc2lvbnMpOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6c2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBPcHRp
b25hbDxkb3VibGU+IGluc3RlYWQgb2YgYm9vbC9kb3VibGUKKyAgICAgICAgcGFpcnMsIGxldHRp
bmcgdGhlIElETCBiaW5kaW5ncyBkbyB0aGUgd29yayBmb3IgdXMuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFJl
bW92ZWQgbG9jYWwuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzRG9pbmdNZWRpYUNhcHR1
cmUgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlz
c2lvbkZvck9yaWdpbik6IFJlbW92ZWQgbG9jYWxzLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojp1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RDb3VudEZvck9yaWdpbik6IERJdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjYWxs
U2hvdWxkQ2xvc2VPbldlYlZpZXcpOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpxdWV1ZUxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IFJlbW92ZWQgYSBsb2NhbC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXMpOgorICAgICAgICBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQgY29uc3QpOiBVc2Ug
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKTogVXNlIG1h
aW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGls
ZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlv
bik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVOYXZp
Z2F0aW9uUG9saWN5QWZ0ZXJEZWxheSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNF
bmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldElnbm9yZXNWaWV3
cG9ydFNjYWxlTGltaXRzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNo
b3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0KTogVXNlIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHRJbW1lZGlhdGVseSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdENhbGxiYWNrKTog
VXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldEFsbG93ZWRN
ZW51QWN0aW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwKKyAgICAgICAgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbEN1c3Rv
bU1lbnVBY3Rpb24pOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvZXNTdGF0aXN0aWNzRG9tYWluSURF
eGlzdEluRGF0YWJhc2UpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
RW5hYmxlZCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppc1N0YXRpc3RpY3NFcGhlbWVyYWwpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzRGVidWdNb2RlKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRXhwaXJlZFN0
YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NWZXJ5UHJldmFs
ZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKTogVXNlIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZUlUUERh
dGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0dy
YW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Rp
ZFJ1blRlbGVtZXRyeUNhbGxiYWNrKTogVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSk6IFVzZSBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJpbmdUaW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NNYXhTdGF0aXN0aWNzRW50cmllcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKTog
VXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURh
dGFSZW1vdmFsKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NE
ZWxldGVDb29raWVzRm9ySG9zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UpOiBVc2UgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXApOiBVc2UgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aGFzU3RhdGlzdGljc0lzb2xh
dGVkU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlcik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NT
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmdldEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6Om1ha2VEb21haW5zVmFs
dWUpOiBGYWN0b3JlZCBvdXQuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2spOiBV
c2UgbWFrZURvbWFpbnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bG9hZGVkU3Vi
cmVzb3VyY2VEb21haW5zKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKTogVXNl
IG1ha2VEb21haW5zVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFkZE1vY2tNZWRp
YURldmljZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjbGVhck1vY2tNZWRpYURldmljZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6cmVtb3ZlTW9ja01lZGlhRGV2aWNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnJlc2V0TW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQpOiBV
c2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCk6IFVzZSBwb3N0U3luY2hy
b25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dh
bWVwYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRE
ZXRhaWxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFk
QXhpc1ZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1l
cGFkQnV0dG9uVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T3Bl
blBhbmVsRmlsZXMpOiBVc2UgbWFpbkpTQ29udGV4dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3Ry
aW5nLAorICAgICAgICBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRPcGVuUGFuZWxGaWxlc01lZGlhSWNvbik6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBw
b3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlbW92ZUFsbFNlc3Np
b25DcmVkZW50aWFscyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6Y2xlYXJET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpjbGVhckRPTUNhY2hlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpoYXNET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZSk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZSk6IFVzZSBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QXBw
bGljYXRpb25NYW5pZmVzdFRoZW4pOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmluamVjdFVzZXJTY3JpcHQpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdl
ZE1lc3NhZ2VGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6YWRkVGVzdEtleVRvS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYW5VcEtleWNoYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmtleUV4aXN0c0luS2V5Y2hhaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXJ2ZXJUcnVzdEV2YWx1
YXRpb25DYWxsYmFja0NhbGxzQ291bnQpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxk
RGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseSk6IFVzZQorICAgICAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphYm9ydE1vZGFs
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmR1bXBBZENsaWNrQXR0cmlidXRp
b24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92
YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9m
ZnNjcmVlbkNhbnZhc0VuYWJsZWQpOiBVc2Ugb3ZlcnJpZGVQcmVmZXJlbmNlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpj
bGVhckFwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBCb3VuZERvbWFpbnMpOiBVc2UgbWFpbkpTQ29udGV4
dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3RyaW5nLAorICAgICAgICBhbmQgdG9XSy4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6cG9zdE1lc3NhZ2UpOiBBZGRlZC4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOiBVcGRhdGVkIGZvciB0
aGUgYWJvdmUuIEFsc28gY2hhbmdlZAorICAgICAgICBvdmVycmlkZVByZWZlcmVuY2Ugb3QgYSBz
dGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OlRleHRJbnB1dENvbnRyb2xsZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6VGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdCk6IFVz
ZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBE
ZWxldGVkLiBVc2UgdGhlIG9uZSBmcm9tIEpTQmFzaWNzLmggbm93LgorICAgICAgICAoV1RSOjpj
cmVhdGVDb21wb3NpdGlvbkhpZ2hsaWdodERhdGEpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3Ry
aW5nLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVKU1N0cmluZyBmcm9tIEpTQmFzaWNzLmggbm93Lgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRV
SUVsZW1lbnRzKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRGVz
Y3JpcHRpb25PZkF0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0
aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omxhbmd1YWdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnZhbHVlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNGb2N1c2VkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRlIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9w
RWZmZWN0cyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29s
dW1ucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZSb3dzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2li
aWxpdHlWYWx1ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZT
Y3JlZW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDb2xsYXBzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tOgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRlclByb3h5OjpFdmVudFNlbmRlclByb3h5KTogSW5pdGlhbGl6ZSBpbiB0aGUgY2xh
c3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2Vu
ZGVyUHJveHkpOiBEZWxldGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbToKKyAgICAgICAgKFdUUjo6bWFr
ZUpTQXJyYXkpOiBSZXR1cm4gYSBKU09iamVjdFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VBcnJheVJl
ZkZvckFycmF5LgorICAgICAgICAoV1RSOjptYWtlSlNPYmplY3QpOiBSZXR1cm4gYSBKU09iamVj
dFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5LgorICAgICAgICAo
V1RSOjptYWtlVmFsdWVSZWZGb3JWYWx1ZSk6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAg
ICAgKFdUUjo6c2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENy
aXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nCisgICAgICAgIGFuZCBhcnJheUxlbmd0aC4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToK
KyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVK
U1N0cmluZyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6Y29udmVydFZl
Y3RvclRvT2JqZWN0QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJlbmFtZWQgZnJvbSBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheS4KKyAgICAgICAgKFdUUjo6
c2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYSk6IFVzZSB0b1dURlN0
cmluZyBhbmQgYXJyYXlMZW5ndGguCisgICAgICAgIChXVFI6OnNlYXJjaFRleHRQYXJhbWV0ZXJp
emVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm93SGVhZGVycyBjb25zdCk6IFVzZSBtYWtlSlNBcnJheS4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJh
eUF0dHJpYnV0ZVZhbHVlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlYXJjaFRleHRXaXRoQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlIGNvbnN0KTogVXNl
IGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
b2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppbnNwZWN0b3JUZXN0U3R1YlVSTCk6IFJlbW92ZSBsb2NhbHMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oOiBBZGRlZCB0b1dLU3RyaW5nIG92
ZXJsb2FkIHRoYXQgY29udmVydHMgZnJvbQorICAgICAgICBhIEpTVmFsdWVSZWYsIEpTU3RyaW5n
UmVmLCBvciBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYW5kIHRvV0sgb3ZlcmxvYWQgdGhhdCBj
b252ZXJ0cworICAgICAgICBmcm9tIGEgY29uc3QgY2hhciouCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemUpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpjaGVja0ZvcldvcmxkTGVha3MpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6
Y29udGVudEV4dGVuc2lvbkpTT05QYXRoKTogVXNlIHRvU1RELgorICAgICAgICAoV1RSOjpUZXN0
Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QpOiBVc2UgdG9XSy4K
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSk6IFVzZSBzdHJpbmdWYWx1ZQorICAgICAgICBhbmQgdWludDY0VmFs
dWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50
c0xpc3QpOiBVc2UgZGljdGlvbmFyeVZhbHVlIGFuZAorICAgICAgICB1aW50NjRWYWx1ZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIGRpY3Rpb25hcnlWYWx1ZSwKKyAgICAgICAgc3RyaW5nVmFsdWUsIHVpbnQ2
NFZhbHVlLCBkb3VibGVWYWx1ZSwgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0QmxvY2tBbGxQbHVnaW5z
KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5TdXBw
b3J0ZWRNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKTogUmVtb3ZlZCBsb2NhbC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSk6IFVzZSBhdXRvIGFuZCB0b1dURlN0cmluZworICAgICAgICBpbnN0ZWFkIG9mIHRvU1RE
LgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24pOiBVc2UgT3B0aW9uYWwgaW5zdGVhZCBvZiBwYWlycworICAgICAgICBvZiBib29sIGFuZCBk
b3VibGUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpoYW5kbGVDaGVja09mVXNlck1l
ZGlhUGVybWlzc2lvbkZvck9yaWdpbik6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3Np
YmxlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJ
ZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6IFVzZSB0b1dLLgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6
OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
VGVzdEluY292YXRpb24pOiBVc2UgdG9XVEZTdHJpbmcuCisgICAgICAgIChXVFI6OlRlc3RJbnZv
Y2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KTogVXNlIGF1dG8gYW5kIHNldFZh
bHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKTogVXNlIHBvc3RQYWdl
TWVzc2FnZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UKKyAg
ICAgICAgYW5kIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
UmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZQorICAgICAg
ICBkaWN0aW9uYXJ5VmFsdWUsIGJvb2xlYW5WYWx1ZSwgdmFsdWUsIHN0cmluZ1ZhbHVlLCBkb3Vi
bGVWYWx1ZSwgYW5kCisgICAgICAgIG9wdGlvbmFsRG91YmxlVmFsdWUuCisgICAgICAgIChXVFI6
OlRlc3RJbnZvY2F0aW9uOjp1aVNjcmlwdERpZENvbXBsZXRlKTogVXNlIHBvc3RQYWdlTWVzc2Fn
ZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRCZWdpblN3
aXBlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OndpbGxFbmRTd2lwZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
RW5kU3dpcGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92
ZVN3aXBlU25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246Om5v
dGlmeURvd25sb2FkRG9uZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
ZGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJz
aXRlRGF0YVJlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJ
bnZvY2F0aW9uOjpkaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OmRpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVzZXRTdGF0aXN0aWNzVG9Db25z
aXN0ZW50U3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNl
dEJsb2NrQ29va2llc0Zvckhvc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRp
b246OmRpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRMYXN0U2Vlbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkTWVyZ2VTdGF0aXN0aWMpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291
cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21h
aW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVBbGxT
ZXNzaW9uQ3JlZGVudGlhbHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldEFwcEJvdW5kRG9tYWlucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2Nh
dGlvbjo6cGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24pOiBEaXR0by4KKworICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICBBZGRlZCBKU0Jhc2ljcy5oIHRvIERpY3Rpb25hcnlGdW5jdGlvbnMuaCB0byBhcHBy
b3ByaWF0ZSB0YXJnZXRzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdUUjo6U2NyaXB0SXRlbTo6U2NyaXB0SXRlbSk6IFVzZSB0
b1dLLgorICAgICAgICAoV1RSOjpXb3JrUXVldWVNYW5hZ2VyOjpxdWV1ZUxvYWRIVE1MU3RyaW5n
KTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29u
dHJvbGxlckNvY29hLmg6IE1ha2UgbW9zdCBmdW5jdGlvbnMgcHJpdmF0ZS4KKworICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW06CisgICAg
ICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpvdmVycmlkZVByZWZlcmVuY2UpOiBV
c2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MuaDogTWFya2VkIHRoZSBjbGFzcyBmaW5hbCBhbmQgbWFkZQorICAgICAg
ICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6
IERlbGV0ZWQuIFVzZSB0aGUgb25lIGluIEpTQmFzaWNzLmguCisgICAgICAgIChXVFI6OnBhcnNl
TW9kaWZpZXJBcnJheSk6IFVzZSB0aGUgbmV3IHRvV1RGU3RyaW5nIG92ZXJsb2FkLgorICAgICAg
ICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJl
S2V5Ym9hcmQpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50
U2VuZGVyUHJveHkubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2Vu
ZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3duKTogVXNlIHRvV1RGU3RyaW5nLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmg6IE1hcmtl
ZCB0aGUgY2xhc3MgZmluYWwgYW5kIG1hZGUKKyAgICAgICAgbW9zdCBmdW5jdGlvbnMgcHJpdmF0
ZS4KKwogMjAyMC0wOS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHJ1bi13ZWJraXQtdGVzdHMgY29kZSB0aGF0IHN0cmlwcyB0cmFpbGluZyBzcGFj
ZXMgd2hlbiBjb21wYXJpbmcgZXhwZWN0ZWQudHh0IGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKaW5kZXggMWEwYzE2NzA2YjJhZTQy
NjBlMzJkMjkwNDQ5YmYyZDY1Y2ZhM2RmYS4uOWUyNDBlNTU5Y2E0NTIzMzc0Nzk4NGE2YmE5MzUx
NTRhYWNjZDdkZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogCiAvLyBTdGF0aWMgVmFsdWUgR2V0dGVycwogCkBA
IC00NywxNSArNDgsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRSb290RWxlbWVudENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzTwogCiAvLyBPYmplY3QgQ3Jl
YXRpb24KIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIiKSk7Ci0gICAgCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpT
Q2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyT2JqZWN0ID0g
SlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVsZWFz
ZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJTdHIuZ2V0KCksIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgSlNPYmplY3RNYWtl
KGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQoKSwgdGhpcykpOwogfQogCiBzdGF0aWMgSlNW
YWx1ZVJlZiBsb2dGb2N1c0V2ZW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwg
SlNWYWx1ZVJlZiopCkBAIC0xNTIsOSArMTQ3LDkgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0UGxh
dGZvcm1OYW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXMK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcGxhdGZvcm1OYW1lLmdldCgp
KTsKIH0KIAotSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFzcygp
CitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRl
SlNDbGFzcygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25z
W10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRpY0Z1bmN0aW9uIGZ1bmN0aW9uc1td
ID0gewogICAgICAgICB7ICJsb2dGb2N1c0V2ZW50cyIsIGxvZ0ZvY3VzRXZlbnRzQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAibG9nVmFsdWVDaGFuZ2VFdmVudHMiLCBsb2dWYWx1ZUNoYW5n
ZUV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImxvZ1Njcm9sbGluZ1N0YXJ0RXZl
bnRzIiwgbG9nU2Nyb2xsaW5nU3RhcnRFdmVudHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMTY2LDIx
ICsxNjEsMTggQEAgSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFz
cygpCiAgICAgICAgIHsgImVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSIsIGVuYWJsZUVuaGFu
Y2VkQWNjZXNzaWJpbGl0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAg
ICAgfTsKLQotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAg
IHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAi
Zm9jdXNlZEVsZW1lbnQiLCBnZXRGb2N1c2VkRWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgInJvb3RFbGVtZW50IiwgZ2V0Um9vdEVsZW1lbnRDYWxsYmFjaywgMCwga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7ICJlbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkIiwgZ2V0RW5oYW5jZWRB
Y2Nlc3NpYmlsaXR5RW5hYmxlZENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInBsYXRm
b3JtTmFtZSIsIGdldFBsYXRmb3JtTmFtZUNhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
MCwgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFz
c0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyIiwgMCwgc3RhdGljVmFsdWVzLCBzdGF0aWNGdW5jdGlvbnMsCisg
ICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAg
IDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgMCwg
dmFsdWVzLCBmdW5jdGlvbnMsCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7
CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pKTsKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAppbmRleCAxZGM3
ZDNiNTYzYTE1NGY0Y2U5YmY3YTMwMzBjOGM1YTc2OTdmMzlhLi44YTI4N2M0OGIxZGY1MzZiNDc1
YjYxODQxN2MyNjEzNWZiMzg2MTI2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAg
ICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKICAgICB+QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZv
aWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgLy8gQ29udHJvbGxlciBN
ZXRob2RzIC0gcGxhdGZvcm0taW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zCiAgICAgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCByb290RWxlbWVudCgpOwpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNzKCk7
CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsKIAog
I2lmIFBMQVRGT1JNKFdJTikKICAgICBIV0lORVZFTlRIT09LIG1fZm9jdXNFdmVudEhvb2sgeyBu
dWxscHRyIH07CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuY3BwCmluZGV4IDBlNWE1MGY2YjlkM2NlNWNhNzdiYTQ0ODY4N2MwMDljYmIxNzVkMjAuLjhl
Zjg1ZWVkZjA4NGQ2NzYyMjcxY2FmMmM4ZjQ0YWI4NTQ3OTI2NzEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCkBAIC0yMDYsNyArMjA2LDcg
QEAgc3RhdGljIEpTVmFsdWVSZWYgdWlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVkaWNhdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBz
dGFydEVsZW1lbnQgPSBudWxscHRyOwogICAgIGJvb2wgaXNEaXJlY3Rpb25OZXh0ID0gdHJ1ZTsK
ICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleSA9IG51bGxwdHI7Ci0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHNlYXJjaFRleHQgPSBudWxscHRyOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBzZWFyY2hUZXh0OwogICAgIGJvb2wgdmlzaWJsZU9ubHkgPSBmYWxzZTsKICAgICBib29s
IGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSA9IGZhbHNlOwogICAgIGlmIChhcmd1bWVudENvdW50
ID49IDUgJiYgYXJndW1lbnRDb3VudCA8PSA2KSB7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0gYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KaW5k
ZXggZWNlNTFlYTM5YTUxNjgzNTRiZDU2OTQ2MzU5MDg2ZDkwMjJlYTE5ZC4uMTRjNjI3MGY4MjMx
ZGMwZjI2YTA1ZTY5NWRhODQ3YmRmOGU0OGM4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQpA
QCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsMTAgKzQz
MSwxMCBAQCBzdWIgX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yCiB7CiAgICAgbXkgKCRzZWxmLCAk
dHlwZSwgJGFyZ3VtZW50TmFtZSkgPSBAXzsKIAotICAgIHJldHVybiAiSlNWYWx1ZVRvTnVsbGFi
bGVCb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9v
bGVhbiIgJiYgJHR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsQm9vbChj
b250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0
eXBlLT5pc051bGxhYmxlOwogICAgIHJldHVybiAiSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCAk
YXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAi
JGFyZ3VtZW50TmFtZSIgaWYgJHR5cGUtPm5hbWUgZXEgIm9iamVjdCI7Ci0gICAgcmV0dXJuICJh
ZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIp
KSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJl
dHVybiAiY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICQkc2VsZntj
b2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gIkpTVmFsdWVU
b051bWJlcihjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSIgaWYgJCRzZWxme2NvZGVH
ZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAidG8iIC4gX2lt
cGxlbWVudGF0aW9uQ2xhc3NOYW1lKCR0eXBlKSAuICIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSki
OwogfQpAQCAtNDcyLDExICs0NzIsMTEgQEAgc3ViIF9yZXR1cm5FeHByZXNzaW9uCiAgICAgbXkg
KCRzZWxmLCAkcmV0dXJuVHlwZSwgJGV4cHJlc3Npb24pID0gQF87CiAKICAgICByZXR1cm4gIkpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAidW5k
ZWZpbmVkIjsKLSAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICRyZXR1
cm5UeXBlLT5pc051bGxhYmxlOworICAgIHJldHVybiAibWFrZVZhbHVlKGNvbnRleHQsICR7ZXhw
cmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5
cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwg
JHtleHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICBy
ZXR1cm4gIiR7ZXhwcmVzc2lvbn0iIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJvYmplY3QiOwog
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCRyZXR1cm5UeXBlKTsKLSAg
ICByZXR1cm4gIkpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0u
Z2V0KCkpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkcmV0dXJuVHlw
ZSk7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSki
IGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKICAg
ICByZXR1cm4gInRvSlMoY29udGV4dCwgV1RGOjpnZXRQdHIoJHtleHByZXNzaW9ufSkpIjsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKaW5kZXggNGEzN2JmM2ExM2RhNGNh
ZWVhNDBhMGNmOGE3MDlmZTU4ZDM0ZWE0Yy4uYWVmN2VjOGE1MDViZmM1MWE4N2UzZDJmOWUxNjc1
MzlkZWUyOWRjNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVy
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcyICsy
OSw0OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgog
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotCi1HQ0NvbnRyb2xsZXI6OkdDQ29udHJvbGxlcigp
Ci17Ci19Ci0KLUdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcigpCi17Ci19CisjaW5jbHVkZSAi
SlNCYXNpY3MuaCIKIAogLy8gU3RhdGljIEZ1bmN0aW9ucwogCiBzdGF0aWMgSlNWYWx1ZVJlZiBj
b2xsZWN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+Y29sbGVjdCgpOworICAg
IGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLmNvbGxlY3QoKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
UmVmIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKLSAgICBib29sIHdhaXRVbnRpbERvbmUgPSBmYWxzZTsKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA+IDApCi0gICAgICAgIHdhaXRVbnRpbERvbmUgPSBKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1swXSk7Ci0KLSAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCh3YWl0VW50aWxE
b25lKTsKLQorICAgIGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBib29sIHdhaXRVbnRpbERv
bmUgPSBhcmd1bWVudENvdW50ID4gMCAmJiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVu
dGlsRG9uZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQog
CiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRKU09iamVjdENvdW50Q2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0g
ICAgc2l6ZV90IGpzT2JqZWN0Q291bnQgPSBjb250cm9sbGVyLT5nZXRKU09iamVjdENvdW50KCk7
Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwganNPYmplY3RDb3VudCk7
CisgICAgYXV0byYgY29udHJvbGxlciA9ICpzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJl
cihjb250ZXh0LCBjb250cm9sbGVyLmdldEpTT2JqZWN0Q291bnQoKSk7CiB9CiAKIC8vIE9iamVj
dCBDcmVhdGlvbgogCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCkKIHsKLSAgICBhdXRvIGdjQ29udHJvbGxlclN0ciA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJHQ0NvbnRyb2xsZXIiKSk7Ci0KLSAgICBKU0NsYXNzUmVmIGNs
YXNzUmVmID0gZ2V0SlNDbGFzcygpOwotICAgIEpTVmFsdWVSZWYgZ2NDb250cm9sbGVyT2JqZWN0
ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVs
ZWFzZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRv
d09iamVjdCwgZ2NDb250cm9sbGVyU3RyLmdldCgpLCBnY0NvbnRyb2xsZXJPYmplY3QsIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUs
IGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAi
R0NDb250cm9sbGVyIiwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQo
KSwgdGhpcykpOwogfQogCi1KU0NsYXNzUmVmIEdDQ29udHJvbGxlcjo6Z2V0SlNDbGFzcygpCitK
U1JldGFpblB0cjxKU0NsYXNzUmVmPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewot
ICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0geworICAgIHN0
YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKICAgICAgICAg
eyAiY29sbGVjdCIsIGNvbGxlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJjb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWQiLCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJnZXRKU09iamVjdENvdW50IiwgZ2V0SlNPYmplY3RDb3VudENhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBK
U0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNz
QXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIHN0YXRpY0Z1bmN0aW9ucywKKyAg
ICBzdGF0aWMgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAg
MCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiR0NDb250cm9sbGVyIiwgMCwgMCwgZnVuY3Rpb25z
LAogICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiAgICAgfTsKLQotICAg
IHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJldHVybiBhZG9w
dChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJv
bGxlci5oCmluZGV4IDY0MjQzODRkZjUzMGU4YzFmZGFlOGZiNjEzMTFiZjBhZGM0YTZhOGYuLjM3
YWE0NmE3NzRjZTNlNzBiODc4OWQ0NDNmMWU0MTgxNGFjNThmNWMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0dDQ29udHJvbGxlci5oCkBAIC0yNiwxOSArMjYsMTUgQEAKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBHQ0NvbnRyb2xsZXJfaAotI2RlZmluZSBHQ0NvbnRyb2xsZXJfaAorI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KIAogY2xhc3MgR0NDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBHQ0NvbnRyb2xsZXIoKTsKLSAgICB+R0NDb250cm9sbGVyKCk7Ci0KLSAg
ICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5k
b3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIC8vIENvbnRyb2xsZXIgTWV0aG9kcyAtIHBs
YXRmcm9tIGluZGVwZW5kYW50IGltcGxlbWVudGF0aW9ucwogICAgIHZvaWQgY29sbGVjdCgpIGNv
bnN0OwpAQCAtNDYsNyArNDIsNSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGdldEpTT2JqZWN0Q291
bnQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNz
KCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsK
IH07Ci0KLSNlbmRpZiAvLyBHQ0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVy
LmNwcAppbmRleCA1ZTUzNWFmMWRlYWQ4NDJkMmVmNGY1Zjc2NjAyYzgzYTk1MGI3NjUyLi4zN2Y2
OTFjYjc5NmI1NjM5MjYyODA0ZWUzZjQwMWNhYmRhZThmMGUxIDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0UnVubmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSAi
V29ya1F1ZXVlSXRlbS5oIgpAQCAtMzgsMTAgKzM5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDVGVzdFJ1bm5lclV0aWxzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVk1JbmxpbmVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Mb2dJ
bml0aWFsaXphdGlvbi5oPgpAQCAtNDg5LDcgKzQ4Nyw2IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRp
c3BsYXlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dz
IGltcGxlbWVudGF0aW9uCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRy
b2xsZXItPmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCk7CiAKQEAgLTQ5OCwxMiArNDk1LDEwIEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGVuY29kZUhvc3RO
YW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBt
YWMgaW1wbGVtZW50YXRpb24KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
KTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBhdXRvIGVuY29kZWRIb3N0TmFtZSA9IGNvbnRyb2xsZXItPmNvcHlFbmNv
ZGVkSG9zdE5hbWUobmFtZS5nZXQoKSk7CkBAIC01MTIsMjIgKzUwNywxMiBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBleGVjQ29tbWFuZENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgTWFjICYgV2luZG93cyBp
bXBsZW1lbnRhdGlvbnMuCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9w
dChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQorICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICAvLyBJZ25vcmluZyB0aGUgc2Vj
b25kIHBhcmFtZXRlciAodXNlckludGVyZmFjZSksIGFzIHRoaXMgY29tbWFuZCBlbXVsYXRlcyBh
IG1hbnVhbCBhY3Rpb24uCi0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdmFsdWU7Ci0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMykgewotICAgICAgICB2YWx1ZSA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKLSAgICAg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmFsdWUgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotCisgICAgYXV0byB2YWx1ZSA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDIgPyBhcmd1bWVu
dHNbMl0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5leGVjQ29tbWFuZChuYW1lLmdldCgpLCB2YWx1ZS5nZXQoKSk7CkBAIC01NDEs
MTEgKzUyNiw4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGZpbmRTdHJpbmdDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sCiAgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAK
LSAgICBhdXRvIHRhcmdldCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAg
SlNPYmplY3RSZWYgb3B0aW9ucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIHRhcmdl
dCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKKyAgICBhdXRv
IG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBudWxscHRy
KTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmZpbmRTdHJpbmcoY29udGV4dCwgdGFyZ2V0
LmdldCgpLCBvcHRpb25zKSk7CkBAIC01NjYsOCArNTQ4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
aXNDb21tYW5kRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW4KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29u
dGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIApA
QCAtNTc5LDEwICs1NjAsOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBvdmVycmlkZVByZWZlcmVuY2VD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZgogICAgIGlmIChhcmd1
bWVudENvdW50IDwgMikKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogCi0gICAgYXV0byBrZXkgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAg
ICBhdXRvIHZhbHVlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byBr
ZXkgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgYXV0
byB2YWx1ZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzFdKTsKIAog
ICAgIC8vIFNob3VsZCB1c2UgYDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zv
cndhcmRDYWNoZT10cnVlIF0gLS0+YCBpbnN0ZWFkLgogICAgIFJFTEVBU0VfQVNTRVJUKCFKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleS5nZXQoKSwgIldlYktpdFVzZXNCYWNrRm9yd2Fy
ZENhY2hlUHJlZmVyZW5jZUtleSIpKTsKQEAgLTY2MiwxNSArNjQxLDEwIEBAIHN0YXRpYyBKU1Zh
bHVlUmVmIHF1ZXVlTG9hZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gdXJsID0gYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAg
IGF1dG8gdXJsID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOwog
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
dGFyZ2V0OwotICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAgdGFyZ2V0ID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bikpOwotICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIH0gZWxzZQotICAgICAgICB0
YXJnZXQgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgIGF1
dG8gdGFyZ2V0ID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudENvdW50ID4g
MSA/IGFyZ3VtZW50c1sxXSA6IG51bGxwdHIpOwogCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnF1ZXVlTG9hZCh1cmwuZ2V0KCksIHRhcmdldC5nZXQoKSk7
CkBAIC02OTIsNyArNjY2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2FkSFRNTFN0cmlu
Z0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZgogICAgICAgICBiYXNl
VVJMID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOwogICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogICAgIH0gZWxzZQotICAg
ICAgICBiYXNlVVJMID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsK
KyAgICAgICAgYmFzZVVSTCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIAogICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKIApAQCAtMjA0NSwzNCArMjAxOSwyNCBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBydW5VSVNjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiwgSlNPYmplYwogCiBzdGF0aWMgdm9pZCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUoSlNPYmpl
Y3RSZWYgb2JqZWN0KQogewotICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIGNvbnRyb2xs
ZXItPmRlcmVmKCk7CisgICAgc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKS0+ZGVyZWYoKTsKIH0KIAogLy8gT2JqZWN0IENyZWF0aW9uCiAKLXZvaWQg
VGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFRlc3RSdW5u
ZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byB0
ZXN0UnVubmVyU3RyID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRlc3RS
dW5uZXIiKSk7CiAgICAgcmVmKCk7Ci0KLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlND
bGFzcygpOwotICAgIEpTVmFsdWVSZWYgbGF5b3V0VGVzdENvbnRvbGxlck9iamVjdCA9IEpTT2Jq
ZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xh
c3NSZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3Qs
IHRlc3RSdW5uZXJTdHIuZ2V0KCksIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4
Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGVz
dFJ1bm5lciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCksIHRo
aXMpKTsKIH0KIAotSlNDbGFzc1JlZiBUZXN0UnVubmVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWlu
UHRyPEpTQ2xhc3NSZWY+IFRlc3RSdW5uZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewotICAgIHN0YXRp
YyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMgPSBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMo
KTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zID0gVGVzdFJ1
bm5lcjo6c3RhdGljRnVuY3Rpb25zKCk7Ci0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNs
YXNzRGVmaW5pdGlvbiA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiVGVz
dFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAorICAgIHN0YXRpYyBj
b25zdCBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0geworICAgICAgICAwLCBrSlNDbGFz
c0F0dHJpYnV0ZU5vbmUsICJUZXN0UnVubmVyIiwgMCwgc3RhdGljVmFsdWVzKCksIHN0YXRpY0Z1
bmN0aW9ucygpLAogICAgICAgICAwLCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNs
YXNzRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRp
b24pKTsKIH0KIAogLy8gQ29uc3RhbnRzCkBAIC0yMTA3LDkgKzIwNzEsOSBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBnZXRSRU5ERVJfVFJFRV9TSE9XX0xBWUVSX0ZSQUdNRU5UUyhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYgogICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAzMik7
CiB9CiAKLUpTU3RhdGljVmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCitjb25zdCBK
U1N0YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogewotICAgIHN0YXRpYyBK
U1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNT
dGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAiZGlkQ2FuY2VsQ2xpZW50UmVkaXJl
Y3QiLCBnZXREaWRDYW5jZWxDbGllbnRSZWRpcmVjdCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJ0
aW1lb3V0IiwgZ2V0VGltZW91dENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImdsb2Jh
bEZsYWciLCBnZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIHNldEdsb2JhbEZsYWdDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCkBAIC0yMTI3LDEyICsyMDkxLDEyIEBAIEpTU3RhdGlj
VmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCiAgICAgICAgIHsgIlJFTkRFUl9UUkVF
X1NIT1dfTEFZRVJfRlJBR01FTlRTIiwgZ2V0UkVOREVSX1RSRUVfU0hPV19MQVlFUl9GUkFHTUVO
VFMsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAwLCAwLCAwLCAwIH0KICAgICB9OwotICAgIHJldHVy
biBzdGF0aWNWYWx1ZXM7CisgICAgcmV0dXJuIHZhbHVlczsKIH0KIAotSlNTdGF0aWNGdW5jdGlv
biogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKK2NvbnN0IEpTU3RhdGljRnVuY3Rpb24q
IFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRp
Y0Z1bmN0aW9uIGZ1bmN0aW9uc1tdID0gewogICAgICAgICB7ICJhYm9ydE1vZGFsIiwgYWJvcnRN
b2RhbENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZERpc2FsbG93ZWRVUkwiLCBhZGRE
aXNhbGxvd2VkVVJMQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkVVJMVG9SZWRpcmVj
dCIsIGFkZFVSTFRvUmVkaXJlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMjI5Nyw3ICsyMjYxLDcg
QEAgSlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKICAgICAg
ICAgeyAwLCAwLCAwIH0KICAgICB9OwogCi0gICAgcmV0dXJuIHN0YXRpY0Z1bmN0aW9uczsKKyAg
ICByZXR1cm4gZnVuY3Rpb25zOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxT
dHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKQEAgLTIzNDIs
MTQgKzIzMDYsMTEgQEAgdm9pZCBUZXN0UnVubmVyOjppZ25vcmVMZWdhY3lXZWJOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMoKQogCiB2b2lkIFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyRmlyZWQoKQogewotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAiRkFJTDogVGlt
ZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iOwotICAgIGZwcmlu
dGYodGVzdFJlc3VsdCwgIiVzIiwgbWVzc2FnZSk7CisgICAgZnB1dHMoIkZBSUw6IFRpbWVkIG91
dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIiwgdGVzdFJlc3VsdCk7CiAK
LSAgICBhdXRvIGFjY3VtdWxhdGVkTG9ncyA9IGdldEFuZFJlc2V0QWNjdW11bGF0ZWRMb2dzKCk7
Ci0gICAgaWYgKCFhY2N1bXVsYXRlZExvZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIG1lc3NhZ2UgPSAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4iOwotICAg
ICAgICBmcHJpbnRmKHRlc3RSZXN1bHQsICIlcyVzXG4iLCBtZXNzYWdlLCBhY2N1bXVsYXRlZExv
Z3MudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQorICAgIGF1dG8gbG9ncyA9IGdldEFuZFJlc2V0QWNj
dW11bGF0ZWRMb2dzKCk7CisgICAgaWYgKCFsb2dzLmlzRW1wdHkoKSkKKyAgICAgICAgZnByaW50
Zih0ZXN0UmVzdWx0LCAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4lc1xuIiwg
bG9ncy51dGY4KCkuZGF0YSgpKTsKIAogICAgIG5vdGlmeURvbmUoKTsKIH0KQEAgLTI0MDMsMjQg
KzIzNjQsMjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRBY2N1bW11bGF0ZUxvZ3NGb3JDaGFubmVs
KEpTU3RyaW5nUmVmIGNoYW5uZWwpCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRMb2dDaGFu
bmVsVG9BY2N1bXVsYXRlKHsgYnVmZmVyLmdldCgpIH0pOwogfQogCi10eXBlZGVmIFdURjo6SGFz
aE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVJlZj4gQ2FsbGJhY2tNYXA7Cit1c2luZyBDYWxsYmFja01h
cCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNPYmplY3RSZWY+Owogc3RhdGljIENhbGxiYWNr
TWFwJiBjYWxsYmFja01hcCgpCiB7CiAgICAgc3RhdGljIENhbGxiYWNrTWFwJiBtYXAgPSAqbmV3
IENhbGxiYWNrTWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2Fj
aGVUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIEpTVmFsdWVSZWYgY2FsbGJhY2sp
Cit2b2lkIFRlc3RSdW5uZXI6OmNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4
LCBKU1ZhbHVlUmVmIGNhbGxiYWNrVmFsdWUpCiB7Ci0gICAgaWYgKCFjYWxsYmFjaykKKyAgICBh
dXRvIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKKyAgICBpZiAoIWNhbGxiYWNrVmFs
dWUgfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYWxsYmFja1ZhbHVlKSkKICAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gY2FsbGJhY2sgPSAoSlNPYmplY3RSZWYpY2FsbGJhY2tWYWx1ZTsK
IAogICAgIGlmIChjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkgewotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBj
YWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICVkKVxuIiwgaW5kZXgpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5l
ciBjYWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICV1KVxuIiwgaW5kZXgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluRnJhbWVK
U0NvbnRleHQoKTsKICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAg
Y2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNrKTsKIH0KQEAgLTI0MzAsMjIgKzIzOTIs
MTggQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGlu
ZGV4LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY28KICAgICBpZiAoIWNhbGxiYWNrTWFwKCkuY29u
dGFpbnMoaW5kZXgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOwotICAgIGlmIChKU09iamVjdFJlZiBjYWxsYmFjayA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpLCAwKSkg
ewotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywg
MCk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgaWYgKGF1
dG8gY2FsbGJhY2sgPSBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpKSB7CisgICAgICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdldEdsb2JhbE9i
amVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBudWxscHRyKTsKICAgICAg
ICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAgfQogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OmNsZWFyVGVzdFJ1bm5lckNhbGxiYWNrcygpCiB7Ci0gICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKLQotICAgIGZvciAoYXV0byYgaXRl
ciA6IGNhbGxiYWNrTWFwKCkpIHsKLSAgICAgICAgaWYgKEpTT2JqZWN0UmVmIGNhbGxiYWNrID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGl0ZXIudmFsdWUsIDApKQotICAgICAgICAgICAgSlNW
YWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgfQotCisgICAgYXV0byBjb250
ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNh
bGxiYWNrTWFwKCkudmFsdWVzKCkpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwg
Y2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFwKCkuY2xlYXIoKTsKIH0KIApAQCAtMjUwOCwxNiAr
MjQ2NiwxMSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGZpbGVzVmFsdWUpCiB7CiAgICAgaWYgKCFKU1ZhbHVlSXNB
cnJheShjb250ZXh0LCBmaWxlc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgSlNPYmpl
Y3RSZWYgZmlsZXMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZmlsZXNWYWx1ZSwgbnVsbHB0
cik7Ci0gICAgc3RhdGljIGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgZmlsZXNMZW5ndGhW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZmlsZXMsIGxlbmd0aFByb3BlcnR5
LmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBmaWxl
c0xlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZmlsZXMgPSAoSlNPYmpl
Y3RSZWYpZmlsZXNWYWx1ZTsKKyAgICBhdXRvIGZpbGVzTGVuZ3RoID0gV1RSOjphcnJheUxlbmd0
aChjb250ZXh0LCBmaWxlcyk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVzLmNsZWFyKCk7Ci0gICAg
YXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbGVzTGVuZ3RoOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIGZpbGVWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZpbGVzLCBpLCBudWxscHRyKTsKICAgICAg
ICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgZmlsZVZhbHVlKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCmluZGV4IDE2NzEyMDU4YTEwY2U5
ODlhM2M4ZDQzZDY0NGY5YTllMzAwZDQwZGUuLmU4NTdhYTRkY2RhMjk3YzRmZTNlNzZhYzdlOWVh
ZjA1YTA5YzgwYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKQEAgLTU0LDcgKzU0LDcg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xlYW51cCgpOwogCi0gICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYp
OwogCiAgICAgdm9pZCBhZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCk7CiAgICAgY29u
c3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBhbGxvd2VkSG9zdHMoKSBjb25zdCB7IHJldHVybiBt
X2FsbG93ZWRIb3N0czsgfQpAQCAtNDk3LDcgKzQ5Nyw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp2
ZWN0b3I8Y2hhcj4gbV9vcGVuUGFuZWxGaWxlc01lZGlhSWNvbjsKICNlbmRpZgogCi0gICAgc3Rh
dGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOwotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBz
dGF0aWNWYWx1ZXMoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rp
b25zKCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3Mo
KTsKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzKCk7CisgICAg
c3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOwogfTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbQppbmRleCA2MWUwMWY1ZWQ3Njc1YTgzMGJhNmYzOGY4ZWNmNTg0MGZiYzgzOWNiLi5l
ODUyZGZkYWJjZDQzOTkzYjMxMzkzZDM1ZGYwMDU0Y2Y2Nzk0Zjc5IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBA
IC0yNCwxMiArMjQsMTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkR1
bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
IgorI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1ByaXZhdGUuaD4KQEAgLTE1NSw1
ICsxNTYsNSBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2li
aWxpdHlFbmFibGVkKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0
ZUpTU3RyaW5nKCJpb3MiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5kZXggZTNjOTA5ZDZkZDI3MDM5MjgzZWFj
Y2QzMmFlNDA5MjZjZThhOWU2NC4uNjQ1ZmM4NjNjZWYxMGEwMGY1YmI0YjdkMTM5YzZlMGRjZTQw
OGRlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW0KQEAgLTI0LDExICsyNCwxMiBAQAogICovCiAKICNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCIKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogI2lt
cG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCIKKyNpbXBvcnQgIkR1bXBS
ZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5oPgpAQCAtNDEsMTEgKzQyLDYgQEAKIAog
dHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwg
TlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKLSAgICA6IG1fZWxl
bWVudChlbGVtZW50KQotewotfQotCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChVSUFjY2Vzc2liaWxp
dHlIaWRkZW4pCiAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooQ0dQb2ludClwb2ludDsKIC0g
KGlkKWFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50OwpAQCAtMTEyLDkgKzEwOCw5IEBAIEBpbnRl
cmZhY2UgTlNPYmplY3QgKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyUHJpdmF0ZSkKIC0g
KENHUGF0aFJlZilfYWNjZXNzaWJpbGl0eVBhdGg7CiBAZW5kCiAKLXN0YXRpYyBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGlkIGVsZW1lbnQpCisgICAgOiBtX2VsZW1lbnQo
ZWxlbWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cyhudWxscHRyLCAwKSk7CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY29u
Y2F0ZW5hdGVBdHRyaWJ1dGVBbmRWYWx1ZShOU1N0cmluZyAqYXR0cmlidXRlLCBOU1N0cmluZyAq
dmFsdWUpCkBAIC0xODAsNyArMTc2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpmaWVsZHNldEFuY2VzdG9yRWxlbWVudCgpCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLQogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnVybCgpCiB7CiAgICAgTlNVUkwgKnVybCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0
eVVSTF07CkBAIC0yOTEsNyArMjg2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpsaW5rZWRFbGVtZW50KCkKIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KHVuc2lnbmVk
IGluZGV4KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtNTU4LDcgKzU1Miw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAgICAgaWQgdGV4
dE1hcmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKICAgICBp
ZiAoIXRleHRNYXJrZXJzIHx8ICFbdGV4dE1hcmtlcnMgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBj
bGFzc11dKQotICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgICAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJp
bmdGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCkBA
IC02ODEsMjIgKzY3NSwyMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3Vt
ZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbAogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2Vk
VUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJp
YnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJu
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0
dHJpYnV0ZSkKQEAgLTcxNiw3ICs3MTAsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZQogICAg
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGF0dHJpYnV0ZSwgIkFYVGV4dHVhbENv
bnRleHQiKSkKICAgICAgICAgcmV0dXJuIFtbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlUZXh0dWFs
Q29udGV4dF0gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkKCkKQEAgLTc1
NSwxNyArNzQ5LDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVT
dXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFnZVVwKCkKQEAg
LTc4OSwxNyArNzgzLDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFn
ZVJpZ2h0KCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvbGVEZXNjcmlwdGlvbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQpAQCAtODA5
LDcgKzgwMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpkZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFs
dWUoKQpAQCAtODE5LDcgKzgxMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRl
eHQoKSBjb25zdApAQCAtODQ5LDcgKzg0Myw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2V0VmFsdWUoSlNTdHJpbmdSZWYgdmFsdWVUZXh0KQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbigpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRM
aW5lTnVtYmVyKCkKQEAgLTg2OSw3ICs4NjMsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
Rm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtODkyLDcgKzg4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDaGVja2VkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lu
ZGV0ZXJtaW5hdGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTkwOCw3ICs5MDAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFyaWFJc0dyYWJiZWQoKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3Ry
aW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50
IGluZGV4KQpAQCAtOTE4LDM3ICs5MTAsMzcgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmxpbmVGb3JJbmRleChpbnQgaW5kZXgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQogewotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dDb3VudCgpCkBAIC05ODcsMjIgKzk3OSwxOSBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQg
Y29sLAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUo
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQg
eSkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2ZVRlY2hu
b2xvZ3lTaW11bGF0ZWRGb2N1cygpCkBAIC0xMDM1LDIzICsxMDI0LDIxIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3Rp
ZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQpAQCAtMTA4Myw0
MyArMTA3MCwzNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyKCkKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJs
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBz
ZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTExMzAsMTMgKzExMTAsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2lu
Z2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtMTE1MiwyNyArMTEzMCwyMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cG9wdXBWYWx1ZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGFrZUZvY3VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVj
dGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAogfQogCiB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRDb3VudEZv
clNlYXJjaFByZWRpY2F0ZShKU0NvbnRleHRSZWYgY29udGV4dCwgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgSlNWYWx1ZVJlZiBzZWFy
Y2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1t
ZWRpYXRlRGVzY2VuZGFudHNPbmx5KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gMDsKIH0KIApAQCAtMTIxNCwyMyArMTE4NywxOSBAQCBkb3VibGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xhc3NM
aXN0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXJyYXlBdHRy
aWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Jikg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4m
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB1bnNpZ25lZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZENoaWxkcmVuQ291bnQoKSBjb25zdApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgKaW5kZXggMzg1
MGI0MTQ0NjNlMDE1YzY3ZDU2ZWYwNGE1OTM4Yzk5MWM0N2VkOC4uMTViZjUxZjg0ZDNlODE4MWMw
MmNmNjYzYzc1NTM5ZGMyOGFkOWRkNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oCkBAIC00MSw0ICs0MSw0IEBAIEBpbnRlcmZhY2Ug
TlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQogLSAoSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+KWNyZWF0ZUpTU3RyaW5nUmVmOwogQGVuZAogCi1leHRlcm4gTlNEaWN0aW9uYXJ5ICpzZWFy
Y2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250
ZXh0UmVmLCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50ICpzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJl
Y3Rpb25OZXh0LCB1bnNpZ25lZCByZXN1bHRzTGltaXQsIEpTVmFsdWVSZWYgc2VhcmNoS2V5LCBK
U1N0cmluZ1JlZiBzZWFyY2hUZXh0LCBib29sIHZpc2libGVPbmx5LCBib29sIGltbWVkaWF0ZURl
c2NlbmRhbnRzT25seSk7CitOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZWYsIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5leHQsIHVuc2lnbmVkIHJl
c3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFyY2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQs
IGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1t
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KaW5k
ZXggNzk0MDczOGEzMzkwZWIyNzBhNjA4YmZkMDU5ZTE3MmFmNGI3OTA5Mi4uMDMwNjdlMmQwODky
MTRmYmU4NDY2N2IyODI0ZjhjZTMxNDgwZjk4NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogCisj
aW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZD
Ri5oPgogCiBAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQpA
QCAtNTYsNyArNTcsNiBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICBbcGFyYW1l
dGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c3RhcnRFbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVu
dCgpIGZvcktleTpAIkFYU3RhcnRFbGVtZW50Il07CiAKICAgICBbcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZSBzZXRPYmplY3Q6KGlzRGlyZWN0aW9uTmV4dCkgPyBAIkFYRGlyZWN0aW9uTmV4dCIgOiBA
IkFYRGlyZWN0aW9uUHJldmlvdXMiIGZvcktleTpAIkFYRGlyZWN0aW9uIl07Ci0KICAgICBbcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QChyZXN1bHRzTGltaXQpIGZvcktleTpAIkFY
UmVzdWx0c0xpbWl0Il07CiAKICAgICBpZiAoc2VhcmNoS2V5KSB7CkBAIC02NiwxNCArNjYsOCBA
QCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JT
ZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0cmlu
ZykKICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZy5nZXQoKV07CiAgICAgICAgIH0gZWxzZSBp
ZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsKLSAgICAgICAgICAgIEpT
T2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJj
aEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0
aCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJp
bmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAg
ICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcu
Z2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleUFycmF5TGVuZ3RoVmFs
dWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUp
KQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVl
LCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJj
aEtleUFycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaEtleTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHNlYXJjaEtleUFycmF5TGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hL
ZXlBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoS2V5
QXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoS2V5
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlBcnJh
eSwgaSwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2VhcmNoS2V5U3Ry
aW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hLZXlWYWx1ZSwgbnVsbHB0
cik7CkBAIC04OCwxMiArODIsMTEgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJh
bWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICAgICAg
aWYgKHNlYXJjaEtleVBhcmFtZXRlcikKICAgICAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmli
dXRlIHNldE9iamVjdDpzZWFyY2hLZXlQYXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWFyY2hLZXkiXTsK
ICAgICB9Ci0gICAgCisKICAgICBpZiAoc2VhcmNoVGV4dCAmJiBKU1N0cmluZ0dldExlbmd0aChz
ZWFyY2hUZXh0KSkKICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OltO
U1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoVGV4dF0gZm9yS2V5OkAiQVhTZWFy
Y2hUZXh0Il07Ci0gICAgCisKICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6
QCh2aXNpYmxlT25seSkgZm9yS2V5OkAiQVhWaXNpYmxlT25seSJdOwotICAgIAogICAgIFtwYXJh
bWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSkg
Zm9yS2V5OkAiQVhJbW1lZGlhdGVEZXNjZW5kYW50c09ubHkiXTsKICAgICAKICAgICByZXR1cm4g
cGFyYW1ldGVyaXplZEF0dHJpYnV0ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRleCA1MWYwMzFkZGJiY2Q4NTNh
ZGI0ZmU3MTQ3ZDg1YTUyNTc2YTAwNzhiLi45NWEwNmYzYTQwYTA0ODllM2UwYjBiMzE2NTc0YzNm
Y2JmMmVjZjExIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJBY2Nl
c3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2ltcG9ydCAi
SlNCYXNpY3MuaCIKICNpbXBvcnQgPEFwcEtpdC9OU0NvbG9yLmg+CiAjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+
CkBAIC0xNTgsNSArMTU5LDUgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5j
ZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZCgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm1hYyIpKTsKKyAgICByZXR1cm4g
V1RSOjpjcmVhdGVKU1N0cmluZygibWFjIik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IGUxZWZkN2Y0ZTE2
MWFmZmRlZTIyNGNjNDUzODQ4YjM5Y2I0OTcwNjMuLjY0OTFhMmQwYTVmYTRjNzRlNzIxNzkyNzhm
N2UxY2E5OWQ3NjhkNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFz
aWNzLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgpA
QCAtODAsMTEgKzgxLDYgQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9p
bnQ6KE5TUG9pbnQpcG9pbnQ7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZh
bHVlIGZvckF0dHJpYnV0ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWU7CiBAZW5kCiAKLXN0YXRp
YyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0gICAg
cmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkpOwot
fQotCiBzdGF0aWMgT3B0aW9uYWw8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gbWFrZVZlY3RvckVs
ZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCosIGlkIGVsZW1lbnQpCiB7CiAgICAg
cmV0dXJuIHsgeyBlbGVtZW50IH0gfTsKQEAgLTIyMSwxNCArMjE3LDggQEAgc3RhdGljIE5TRGlj
dGlvbmFyeSAqc2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0Nv
bnRleHRSZWYgY28KICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRP
YmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5n
LmdldCgpXV07CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hT
dHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVs
bHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAw
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJp
bmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJp
bmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgCisgICAgICAgICAg
ICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheSA9IChKU09iamVjdFJlZilzZWFyY2hTdHJpbmdzOwor
ICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVu
Z3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0
cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKICAgICAgICAgICAgICAgICBpZiAo
c2VhcmNoU3RyaW5nc1N0cmluZykKQEAgLTI2MiwxNCArMjUyLDggQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRl
eHRSZWYgY28KICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQogICAgICAgICAg
ICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKICAgICAgICAgfSBl
bHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAg
ICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNl
YXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJv
cGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5n
dGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNo
U3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJj
aFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAg
ICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaFN0cmluZ3M7
CisgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IFdUUjo6YXJyYXlM
ZW5ndGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNo
U3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgICAgIGlm
IChzZWFyY2hTdHJpbmdzU3RyaW5nKQpAQCAtMTQ0NiwxMyArMTQzMCwxMyBAQCB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxk
cmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIGZ1bmN0aW9uLgogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQpAQCAtMTQ2Myw3ICsxNDQ3LDcgQEAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcoKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBF
TkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQpAQCAt
MTQ3NCw3ICsxNDU4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0
cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogICAgIAotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVy
bCgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdh
dGUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KaW5k
ZXggMzY3MTQ5MzlmZGEwYTU2NzQ5Yzc5OTg4NmExZWE0Mzg5MjE4OWE0YS4uMzQyYjNhMDFkYzdl
YTg3OWFmMWI1NGIwZWUyNzNkNjgxMmY4ZjdhNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQpAQCAtMzExLDU0ICszMTEsMjYgQEAgSUdOT1JFX1dB
Uk5JTkdTX0VORAogCiAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxk
Rm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKIHsKLSAgICAvLyBNYWtlIE5ldy1TdHlsZSBUZXN0
UnVubmVyCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07
Ci0gICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0
KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBhdXRvIGNvbnRl
eHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07CisgICAgYXV0byB3ZWJWaWV3ID0gW2ZyYW1lIHdl
YlZpZXddOworICAgIGF1dG8gd2luZG93T2JqZWN0ID0gW2ZyYW1lIHdpbmRvd09iamVjdF07CiAK
LSAgICBBU1NFUlQoZ1Rlc3RSdW5uZXIpOwotICAgIGdUZXN0UnVubmVyLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNl
cHRpb24pOwotCi0gICAgZ2NDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIGds
b2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFs
T2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgZ1Rlc3RS
dW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgZ2NDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOwogCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJ
bnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiAKLSAgICAvLyBNYWtlIE9sZC1TdHlsZSBjb250cm9s
bGVycwotCi0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtmcmFtZSB3ZWJWaWV3XTsKLSAgICBXZWJT
Y3JpcHRPYmplY3QgKm9iaiA9IFtmcmFtZSB3aW5kb3dPYmplY3RdOwotI2lmICFQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIEFwcGxlU2NyaXB0Q29udHJvbGxlciAqYXNjID0gW1tBcHBsZVNjcmlw
dENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XTsKLSAgICBbb2JqIHNl
dFZhbHVlOmFzYyBmb3JLZXk6QCJhcHBsZVNjcmlwdENvbnRyb2xsZXIiXTsKLSAgICBbYXNjIHJl
bGVhc2VdOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFk
b3B0TlMoW1tBcHBsZVNjcmlwdENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3XSkuZ2V0KCkgZm9yS2V5OkAiYXBwbGVTY3JpcHRDb250cm9sbGVyIl07CiAjZW5kaWYKIAot
ICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgKmVzYyA9IFtbRXZlbnRTZW5kaW5nQ29udHJvbGxl
ciBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTplc2MgZm9yS2V5OkAiZXZlbnRTZW5k
ZXIiXTsKLSAgICBbZXNjIHJlbGVhc2VdOwotICAgIAotICAgIFtvYmogc2V0VmFsdWU6Z05hdmln
YXRpb25Db250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07Ci0gICAgCi0g
ICAgT2JqQ0NvbnRyb2xsZXIgKm9jYyA9IFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwot
ICAgIFtvYmogc2V0VmFsdWU6b2NjIGZvcktleTpAIm9iakNDb250cm9sbGVyIl07Ci0gICAgW29j
YyByZWxlYXNlXTsKLQotICAgIE9iakNQbHVnaW4gKnBsdWdpbiA9IFtbT2JqQ1BsdWdpbiBhbGxv
Y10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTpwbHVnaW4gZm9yS2V5OkAib2JqQ1BsdWdpbiJd
OwotICAgIFtwbHVnaW4gcmVsZWFzZV07Ci0gICAgCi0gICAgT2JqQ1BsdWdpbkZ1bmN0aW9uICpw
bHVnaW5GdW5jdGlvbiA9IFtbT2JqQ1BsdWdpbkZ1bmN0aW9uIGFsbG9jXSBpbml0XTsKLSAgICBb
b2JqIHNldFZhbHVlOnBsdWdpbkZ1bmN0aW9uIGZvcktleTpAIm9iakNQbHVnaW5GdW5jdGlvbiJd
OwotICAgIFtwbHVnaW5GdW5jdGlvbiByZWxlYXNlXTsKLQotICAgIFRleHRJbnB1dENvbnRyb2xs
ZXIgKnRpYyA9IFtbVGV4dElucHV0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXddOwotICAgIFtvYmogc2V0VmFsdWU6dGljIGZvcktleTpAInRleHRJbnB1dENvbnRyb2xs
ZXIiXTsKLSAgICBbdGljIHJlbGVhc2VdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRv
cHROUyhbW0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6
QCJldmVudFNlbmRlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6Z05hdmlnYXRpb25D
b250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07CisgICAgW3dpbmRvd09i
amVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQo
KSBmb3JLZXk6QCJvYmpDQ29udHJvbGxlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6
YWRvcHROUyhbW09iakNQbHVnaW4gYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDUGx1
Z2luIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ1BsdWdpbkZ1
bmN0aW9uIGFsbG9jXSBpbml0XSkuZ2V0KCkgZm9yS2V5OkAib2JqQ1BsdWdpbkZ1bmN0aW9uIl07
CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbVGV4dElucHV0Q29udHJvbGxl
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKS5nZXQoKSBmb3JLZXk6QCJ0ZXh0SW5w
dXRDb250cm9sbGVyIl07CiB9CiAKIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFt
ZTooV2ViRnJhbWUgKilmcmFtZSBpbklzb2xhdGVkV29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29y
bGQKQEAgLTM3MSw3ICszNDMsNyBAQCAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJh
bWU6KFdlYkZyYW1lICopZnJhbWUgaW5Jc29sYXRlZFdvcmxkOihXZWJTY3JpcAogICAgIGlmICgh
Z2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09iamVjdFNldFByb3BlcnR5
KGN0eCwgZ2xvYmFsT2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
X193b3JsZElEIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHdvcmxkSURGb3JXb3Js
ZCh3b3JsZCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICBKU09iamVj
dFNldFByb3BlcnR5KGN0eCwgZ2xvYmFsT2JqZWN0LCBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJfX3dv
cmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCB3b3JsZElERm9yV29ybGQod29y
bGQpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7CiB9CiAKIC0gKHZvaWQpd2Vi
VmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lOihXZWJG
cmFtZSAqKWZyYW1lIGluU2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggZWJhMDkzZWUxODdjZDMx
MGQwNTFiMjMwYWVkMmEzMDBmZTc5NDljMC4uZTIxMDcwYWMzMWIzNGNmY2JiNTc5ZDc3NzViNzYx
OTkxMTRhYmRmZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0K
QEAgLTMyLDYgKzMyLDcgQEAKIAogI2ltcG9ydCAiRGVmYXVsdFBvbGljeURlbGVnYXRlLmgiCiAj
aW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0
ICJMYXlvdXRUZXN0U3BlbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92
aWRlci5oIgogI2ltcG9ydCAiTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmgiCkBAIC02NzAs
MTUgKzY3MSwxMCBAQCBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZQogewogICAgIFdlYkZpbmRPcHRp
b25zIG9wdGlvbnMgPSAwOwogCi0gICAgYXV0byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYg
bGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwg
bGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihj
b250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdGFyZ2V0Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhcmdldCkpOworICAgIGF1dG8gbGVuZ3RoID0g
V1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBvcHRpb25zQXJyYXkpOworICAgIGF1dG8gdGFyZ2V0
Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHRhcmdldCkpOwogCi0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKICAgICAgICAgaWYg
KCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcAppbmRl
eCBmZDc3YWQxYzM5MjYzOGRhOTQxNDNlZTdkNWE4MjFlNjk0MTAyMzEzLi41ZjNiNzQwNDA1MDBm
MDMwZGEyYmVkMWFhZjk2NzNmOGI2MmJiMTY2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKQEAgLTM3MSwxOSArMzcxLDEwIEBAIHZvaWQgRnJh
bWVMb2FkRGVsZWdhdGU6OmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVJblN0YW5kYXJkV29y
bGQoSVdlYkZyYW1lKiBmCiAgICAgSVdlYkZyYW1lKiBwYXJlbnRGcmFtZSA9IDA7CiAgICAgZnJh
bWUtPnBhcmVudEZyYW1lKCZwYXJlbnRGcmFtZSk7CiAKLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlv
biA9IDA7Ci0KLSAgICA6OmdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdp
bmRvd09iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
bV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAm
ZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBtX2FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4
Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAgbV90ZXh0SW5wdXRDb250
cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlv
bik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOworICAgIDo6Z1Rlc3RSdW5uZXItPm1ha2VXaW5k
b3dPYmplY3QoY29udGV4dCk7CisgICAgbV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CisgICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0KTsKKyAgICBtX3RleHRJbnB1dENvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CiAKICAgICBKU1N0cmluZ1JlZiBldmVudFNlbmRlclN0ciA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJldmVudFNlbmRlciIpOwogICAgIEpTVmFsdWVSZWYgZXZlbnRT
ZW5kZXIgPSBtYWtlRXZlbnRTZW5kZXIoY29udGV4dCwgIXBhcmVudEZyYW1lKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwIGIvVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKaW5kZXggZmZmMGI3NDk5MGFm
YjllMTJhYzlkMDFhNzEwYTRjNTI4MGUxZTkwOC4uOTk1YWRlMDY2MDAxOGM5OGM2MmU0NGU1NmY2
ZjhmOTYyOTI5ZTgyMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5n
cy9KU0Jhc2ljcy5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jh
c2ljcy5jcHAKQEAgLTI4LDE5ICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSlNWYWx1
ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIE9wdGlv
bmFsPGJvb2w+IHZhbHVlKQorT3B0aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2woSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID8gSlNW
YWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxs
KGNvbnRleHQpOworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUp
IHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9w
dGlvbmFsKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKTsKK30KKworT3B0aW9uYWw8
ZG91YmxlPiB0b09wdGlvbmFsRG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHZhbHVlKQoreworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUp
IHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9w
dGlvbmFsKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogfQogCi1P
cHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYg
Y29udGV4dCwgT3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJc1Vu
ZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkg
PyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDxib29sPihKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQs
IHZhbHVlKSk7CisgICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQs
IHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCi1KU1ZhbHVl
UmVmIEpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmlu
Z1JlZiBzdHJpbmdPck51bGwpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNTdHJpbmdSZWYgc3RyaW5nKQogewotICAgIHJldHVybiBzdHJpbmdPck51bGwgPyBK
U1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdPck51bGwpIDogSlNWYWx1ZU1ha2VOdWxs
KGNvbnRleHQpOworICAgIHJldHVybiBzdHJpbmcgPyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0
LCBzdHJpbmcpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQpAQCAtNDgsMTkg
KzUzLDQzIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBj
aGFyKiBzdHJpbmcpCiAgICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHN0cmluZykpOwogfQogCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJp
bmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgYXV0byBz
dHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBudWxscHRy
KSk7CisgICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZyA6IGNyZWF0ZUpTU3RyaW5nKCIiKTsKK30K
KwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHN0cmluZykKIHsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY3JlYXRl
SlNTdHJpbmcoc3RyaW5nKS5nZXQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgcHJvcGVydHkoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sK
KyAgICByZXR1cm4gb2JqZWN0ID8gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3Qs
IGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBudWxscHRyKSA6IG51bGxwdHI7Cit9CisKK0pT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpKTsK
K30KKworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUpCit7CisgICAg
YXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7CisgICAgcmV0dXJu
IHZhbHVlID8gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgOiBkZWZhdWx0VmFsdWU7
Cit9CisKK2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBhdXRvIHZhbHVlID0gcHJv
cGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4gdmFsdWUgPyBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogMDsKK30KKwogSlNPYmplY3RSZWYg
b2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwg
Y29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb2Jq
ZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUpOworICAgIGF1dG8gdmFsdWUg
PSBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAgIHJldHVybiB2YWx1ZSA/IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpLCBu
dWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxjb25zdCBjaGFyKj4gbmFtZXMpCkBAIC03MCwyNyArOTksMzYgQEAgSlNPYmplY3RSZWYgb2Jq
ZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgc3Rk
Ojppbml0aWEKICAgICByZXR1cm4gb2JqZWN0OwogfQogCit1bnNpZ25lZCBhcnJheUxlbmd0aChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBu
dW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIik7Cit9CisKIHZvaWQgc2V0
UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3Qg
Y2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRl
eHQsIG9iamVjdCwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIEpTVmFsdWVNYWtlQm9vbGVh
bihjb250ZXh0LCB2YWx1ZSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7CiB9
CiAKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNv
bnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSlNPYmplY3RTZXRQcm9w
ZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGNyZWF0ZUpT
U3RyaW5nKG5hbWUpLmdldCgpLCB2YWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgc2V0
R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIqIG5h
bWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0
LCBuYW1lLCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCB2YWx1ZSkpOworfQorCiBKU1ZhbHVl
UmVmIGNhbGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3Qg
Y2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFsdWVSZWY+IGFyZ3VtZW50cykK
IHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYXV0byBm
dW5jdGlvbiA9IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7Ci0gICAgaWYg
KCFmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwgYXJndW1lbnRzLnNpemUo
KSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBmdW5jdGlvbiA/IEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwgYXJndW1lbnRz
LnNpemUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpIDogbnVsbHB0cjsKIH0KIAogSlNP
YmplY3RSZWYgY2FsbENvbnN0cnVjdG9yKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBjb25z
dCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJndW1lbnRz
KQogewogICAgIGF1dG8gY29uc3RydWN0b3IgPSBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHsgbmFtZSB9KTsKLSAgICBpZiAoIWNvbnN0
cnVjdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gSlNPYmplY3RDYWxs
QXNDb25zdHJ1Y3Rvcihjb250ZXh0LCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzLnNpemUoKSwgYXJn
dW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBjb25zdHJ1Y3RvciA/IEpTT2Jq
ZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dCwgY29uc3RydWN0b3IsIGFyZ3VtZW50cy5zaXpl
KCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9K
U0Jhc2ljcy5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oCmlu
ZGV4IDExZGRhNTI0N2E1YWI2YzA0MDk2M2RmMTlhYjBmNWUwMjk2Y2ViODIuLjY1ZjE4ZDdlY2Q4
MDE2ODMzMzM0ZGY1ZWI4ODhjY2M0YTBiMjFkNTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L0JpbmRpbmdzL0pTQmFzaWNzLmgKQEAgLTMyLDE2ICszMiwyOCBAQAogCiBuYW1lc3BhY2UgV1RS
IHsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVmLCBP
cHRpb25hbDxib29sPik7Ci1PcHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4o
SlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKK09wdGlvbmFsPGJvb2w+IHRvT3B0aW9uYWxCb29s
KEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitPcHRpb25hbDxkb3VibGU+IHRvT3B0aW9uYWxE
b3VibGUoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFr
ZVN0cmluZ09yTnVsbChKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmKTsKK0pTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiA9ICIiKTsKK0pTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwog
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciopOwog
SlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmLCBjb25zdCBjaGFyKik7CitKU1ZhbHVl
UmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYsIE9wdGlvbmFsPGJvb2w+KTsKK0pTVmFsdWVSZWYg
bWFrZVZhbHVlKEpTQ29udGV4dFJlZiwgSlNTdHJpbmdSZWYpOworCitKU1ZhbHVlUmVmIHByb3Bl
cnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOworYm9vbCBi
b29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFt
ZSwgYm9vbCBkZWZhdWx0VmFsdWUgPSBmYWxzZSk7Citkb3VibGUgbnVtZXJpY1Byb3BlcnR5KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOworSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHN0cmluZ1Byb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNv
bnN0IGNoYXIqIG5hbWUpOwordW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZik7CiBKU09iamVjdFJlZiBvYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFy
Kj4gbmFtZXMpOworCiB2b2lkIHNldFByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYs
IGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBzZXRHbG9iYWxPYmplY3RQcm9w
ZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYpOwordm9pZCBz
ZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGRv
dWJsZSB2YWx1ZSk7CisKIEpTVmFsdWVSZWYgY2FsbChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVm
LCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJn
dW1lbnRzKTsKIEpTT2JqZWN0UmVmIGNhbGxDb25zdHJ1Y3RvcihKU0dsb2JhbENvbnRleHRSZWYs
IGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlUmVmPiBhcmd1
bWVudHMpOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pT
V3JhcHBhYmxlLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBhYmxl
LmgKaW5kZXggOWUwZjA3ZGY1OTMyYWIzMDMzMWQ3YjYxZDE3MzUzYWU2ZTAxYzQ3My4uNTliZTFk
YWVhMjc3NTRlZTQ3NzViNGYzZTdhNWQ2ODJmYjFkNWYxZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGFibGUuaApAQCAtMjUsOSArMjUsMTAgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNDbGFzcyog
SlNDbGFzc1JlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNzIEpTV3JhcHBhYmxlIDogcHVi
bGljIFJlZkNvdW50ZWQ8SlNXcmFwcGFibGU+IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0Jp
bmRpbmdzL0pTV3JhcHBlci5oCmluZGV4IGY2Nzk4Zjk5YTRmZWM2NzU2M2QwOTE1NjNiNTA1MDlk
ZmM4NTcyZGEuLjliNmJhZDhhZjA0NGIyMDJmZjg3MjdhY2VkN2NiOWZmYjJjZWM1MmUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmgKKysrIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaApAQCAtNTAsNCArNTAs
OSBAQCBpbmxpbmUgdm9pZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcgogICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29u
dGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhwcm9wZXJ0eU5hbWUpLmdldCgpLCBKU1dyYXBw
ZXI6OndyYXAoY29udGV4dCwgdmFsdWUpLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOwogfQogCitp
bmxpbmUgdm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU1dyYXBwYWJsZSogdmFsdWUpCit7CisgICAgc2V0
R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgcHJvcGVydHlOYW1lLCBKU1dyYXBwZXI6Ondy
YXAoY29udGV4dCwgdmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9tYWMvRXZlbnRTZXJp
YWxpemVyTWFjLm1tIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9FdmVudFNlcmlhbGl6YXRpb24v
bWFjL0V2ZW50U2VyaWFsaXplck1hYy5tbQppbmRleCAwZjE3YjJjZDYzOWE2MzA2M2E0ODhkZjNh
MzNhMzVlMzJhMmVjY2MxLi5iZGQyMDdiZDQwOWYwNGVlNWYzODIzMTk0ZmEyNGU2MzI4ODU4OTE3
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9t
YWMvRXZlbnRTZXJpYWxpemVyTWFjLm1tCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvRXZl
bnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMubW0KQEAgLTE5NSw3ICsxOTUs
NyBAQCBAaW1wbGVtZW50YXRpb24gRXZlbnRTZXJpYWxpemVyCiAKICsgKE5TRGljdGlvbmFyeSAq
KWRpY3Rpb25hcnlGb3JFdmVudDooQ0dFdmVudFJlZilyYXdFdmVudCByZWxhdGl2ZVRvVGltZToo
Q0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5QdHI8Q0dF
dmVudFJlZj4gcGxhaW5FdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZShOVUxMKSk7CisgICAg
YXV0byBwbGFpbkV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsKICAgICBDR0V2
ZW50UmVmIHJhd1BsYWluRXZlbnQgPSBwbGFpbkV2ZW50LmdldCgpOwogCiAgICAgTlNNdXRhYmxl
RGljdGlvbmFyeSAqZGljdCA9IFtbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKQEAgLTIyNiw3ICsyMjYsNyBAQCArIChOU0RpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5Rm9yRXZlbnQ6KENHRXZlbnRSZWYpcmF3RXZlbnQgcmVsYXRpdmVUb1RpbWU6KENHRXZlbgog
CiArIChSZXRhaW5QdHI8Q0dFdmVudFJlZj4pY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5OihOU0Rp
Y3Rpb25hcnkgKilkaWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyByZWxhdGl2ZVRvVGlt
ZTooQ0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5QdHI8
Q0dFdmVudFJlZj4gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOworICAgIGF1
dG8gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOwogICAgIENHRXZlbnRSZWYg
cmF3RXZlbnQgPSBldmVudC5nZXQoKTsKIAogICAgIEZPUl9FQUNIX0NHRVZFTlRfSU5URUdFUl9G
SUVMRChTVE9SRV9JTlRFR0VSX0ZJRUxEX1RPX0VWRU5UKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBj
b25zdCBmbG9hdCBldmVudERpc3BhdGNoVGltZXJSYXRlID0gMS4gLyAxMjAuOwogCiArICh2b2lk
KXBsYXlTdHJlYW06KE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICopZXZlbnREaWN0cyB3aW5kb3c6
KE5TV2luZG93ICopd2luZG93IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKCkpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBSZXRhaW5QdHI8RXZlbnRTdHJlYW1QbGF5ZXI+IHBsYXllciA9IGFk
b3B0TlMoW1tFdmVudFN0cmVhbVBsYXllciBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gcGxheWVy
ID0gYWRvcHROUyhbW0V2ZW50U3RyZWFtUGxheWVyIGFsbG9jXSBpbml0XSk7CiAKICAgICBwbGF5
ZXItPl9yZW1haW5pbmdFdmVudERpY3Rpb25hcmllcyA9IGFkb3B0TlMoW2V2ZW50RGljdHMgbXV0
YWJsZUNvcHldKTsKICAgICBwbGF5ZXItPl93aW5kb3cgPSB3aW5kb3c7CkBAIC0yODIsNyArMjgy
LDcgQEAgLSAodm9pZClwbGF5YmFja1RpbWVyRmlyZWQ6KE5TVGltZXIgKil0aW1lcgogICAgIGF1
dG8gcmVtb3ZlTGlzdCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwog
ICAgIE5TRXZlbnQgKm5zRXZlbnQgPSBuaWw7CiAgICAgZm9yIChpZCBldmVudERpY3QgaW4gX3Jl
bWFpbmluZ0V2ZW50RGljdGlvbmFyaWVzLmdldCgpKSB7Ci0gICAgICAgIFJldGFpblB0cjxDR0V2
ZW50UmVmPiBldmVudCA9IFtFdmVudFNlcmlhbGl6ZXIgY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5
OmV2ZW50RGljdCBpbldpbmRvdzpfd2luZG93LmdldCgpIHJlbGF0aXZlVG9UaW1lOl9zdGFydFRp
bWVdOworICAgICAgICBhdXRvIGV2ZW50ID0gW0V2ZW50U2VyaWFsaXplciBjcmVhdGVFdmVudEZv
ckRpY3Rpb25hcnk6ZXZlbnREaWN0IGluV2luZG93Ol93aW5kb3cuZ2V0KCkgcmVsYXRpdmVUb1Rp
bWU6X3N0YXJ0VGltZV07CiAgICAgICAgIGlmIChDR0V2ZW50R2V0VGltZXN0YW1wKGV2ZW50Lmdl
dCgpKSA8IG1hY2hfYWJzb2x1dGVfdGltZSgpKSB7CiAgICAgICAgICAgICBuc0V2ZW50ID0gW05T
RXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpldmVudC5nZXQoKV07CiAgICAgICAgICAgICBbTlNBcHAg
cG9zdEV2ZW50Om5zRXZlbnQgYXRTdGFydDpOT107CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVu
bmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250ZXh0LmNwcAppbmRleCAy
NzA1YjM5YTI0N2RkMjU3ZDVjNmQ1OGM0NzBlOTYzM2E5MTlkZmQ0Li41ZGNmYjdjOTg3MmYzOTlm
MTU2NzRkOTcxMGRlYjI4OWIyZDEyMThkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAKQEAgLTI2LDkg
KzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJVSVNjcmlwdENvbnRleHQu
aCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVFI7CkBAIC00MywxMSArNDIsNyBAQCBVSVNjcmlwdENv
bnRleHQ6OlVJU2NyaXB0Q29udGV4dChVSVNjcmlwdENvbnRleHREZWxlZ2F0ZSYgZGVsZWdhdGUs
IFVJU2NyaXB0Q29udAogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKIHsKICAgICBtX2NvbnRy
b2xsZXIgPSBmYWN0b3J5KCp0aGlzKTsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9
IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChtX2NvbnRleHQuZ2V0KCkpOwotCi0gICAgSlNWYWx1
ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgIG1fY29udHJvbGxlci0+bWFrZVdpbmRvd09i
amVjdChtX2NvbnRleHQuZ2V0KCksIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7CisgICAgbV9j
b250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIFVJU2Ny
aXB0Q29udGV4dDo6flVJU2NyaXB0Q29udGV4dCgpCkBAIC02Niw5ICs2MSw3IEBAIHZvaWQgVUlT
Y3JpcHRDb250ZXh0OjpydW5VSVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgdW5zaWduZWQg
c2NyaXB0Q2FsbGJhY2tJCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRlU2NyaXB0
KG1fY29udGV4dC5nZXQoKSwgc3RyaW5nUmVmLmdldCgpLCAwLCAwLCAxLCAmZXhjZXB0aW9uKTsK
ICAgICAKICAgICBpZiAoIWhhc091dHN0YW5kaW5nQXN5bmNUYXNrcygpKSB7Ci0gICAgICAgIEpT
VmFsdWVSZWYgc3RyaW5naWZ5RXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBzdHJp
bmdpZmllZCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkobV9jb250ZXh0LmdldCgpLCByZXN1
bHQsICZzdHJpbmdpZnlFeGNlcHRpb24pKTsKLSAgICAgICAgcmVxdWVzdFVJU2NyaXB0Q29tcGxl
dGlvbihzdHJpbmdpZmllZC5nZXQoKSk7CisgICAgICAgIHJlcXVlc3RVSVNjcmlwdENvbXBsZXRp
b24oY3JlYXRlSlNTdHJpbmcobV9jb250ZXh0LmdldCgpLCByZXN1bHQpLmdldCgpKTsKICAgICAg
ICAgdHJ5VG9Db21wbGV0ZVVJU2NyaXB0Rm9yQ3VycmVudFBhcmVudENhbGxiYWNrKCk7CiAgICAg
fQogfQpAQCAtMTg5LDEwICsxODIsMTAgQEAgSlNPYmplY3RSZWYgVUlTY3JpcHRDb250ZXh0Ojpv
YmplY3RGcm9tUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpIGNvbnMKIHsKICAg
ICBKU09iamVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2UobV9jb250ZXh0LmdldCgpLCBudWxs
cHRyLCBudWxscHRyKTsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgp
LCBvYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZWZ0IikpLmdl
dCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QueCgpKSwga0pTUHJv
cGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1f
Y29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygidG9wIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3Qu
eSgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNl
dFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygid2lkdGgiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKG1fY29udGV4
dC5nZXQoKSwgcmVjdC53aWR0aCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRy
KTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpLmdldCgpLCBKU1ZhbHVl
TWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QuaGVpZ2h0KCkpLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZU5vbmUsIG51bGxwdHIpOworICAgIHNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwg
b2JqZWN0LCAibGVmdCIsIHJlY3QueCgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0
KCksIG9iamVjdCwgInRvcCIsIHJlY3QueSgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQu
Z2V0KCksIG9iamVjdCwgIndpZHRoIiwgcmVjdC53aWR0aCgpKTsKKyAgICBzZXRQcm9wZXJ0eSht
X2NvbnRleHQuZ2V0KCksIG9iamVjdCwgImhlaWdodCIsIHJlY3QuaGVpZ2h0KCkpOwogICAgIAog
ICAgIHJldHVybiBvYmplY3Q7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGE1YThkN2Nj
MmZjYzlmZWQ2ZmY1NTIyY2M5ZWQ2N2NlNDI5OGNhODEuLjM1MjRiNjBiZDgxY2Q5Y2FiMzEwYWEx
YjU2OGYyM2ZkNTE2OGRjZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCkBAIC02Myw3ICs2Myw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgd2FpdEZvck91dHN0YW5kaW5nQ2FsbGJhY2tzKCkgeyAvKiBub3RJbXBsZW1lbnRlZCgpOyAq
LyB9CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBUcmFuc2FjdGlvbiBoZWxwZXJzCiAg
ICAgCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNj
cmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyU2hhcmVkLmNwcAppbmRleCBjNmViMTQwYWEz
NTZjNjZkOGM0NTAyMTRlN2RiMmM4NWFkM2E3MWEzLi5iZmY0ZjM0MzNkYmQyOTU3NWQ2MjViNzM5
NGU2ZDlkMzgxY2FlYzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHAK
QEAgLTQxLDIwICs0MSwxNSBAQCBEZXZpY2VPcmllbnRhdGlvbiogdG9EZXZpY2VPcmllbnRhdGlv
bihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKICAgICAgICAgRGV2aWNl
T3JpZW50YXRpb246OkxhbmRzY2FwZUxlZnQsCiAgICAgICAgIERldmljZU9yaWVudGF0aW9uOjpM
YW5kc2NhcGVSaWdodAogICAgIH07Ci0KLSAgICBhdXRvIG9wdGlvbiA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKLSAgICBpZiAob3B0aW9uLT5z
dHJpbmcoKSA9PSAicG9ydHJhaXQiKQorICAgIGF1dG8gb3B0aW9uID0gY3JlYXRlSlNTdHJpbmco
Y29udGV4dCwgdmFsdWUpOworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9w
dGlvbi5nZXQoKSwgInBvcnRyYWl0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzBdOwotCi0g
ICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gInBvcnRyYWl0LXVwc2lkZWRvd24iKQorICAgIGlm
IChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgInBvcnRyYWl0LXVw
c2lkZWRvd24iKSkKICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbMV07Ci0KLSAgICBpZiAob3B0aW9u
LT5zdHJpbmcoKSA9PSAibGFuZHNjYXBlLWxlZnQiKQorICAgIGlmIChKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgImxhbmRzY2FwZS1sZWZ0IikpCiAgICAgICAgIHJl
dHVybiAmdmFsdWVzWzJdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gImxhbmRzY2Fw
ZS1yaWdodCIpCisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uLmdl
dCgpLCAibGFuZHNjYXBlLXJpZ2h0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzNdOwotCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTY4LDkgKzYzLDkgQEAgdm9pZCBVSVNjcmlwdENv
bnRyb2xsZXI6OmNvbnRleHREZXN0cm95ZWQoKQogICAgIG1fY29udGV4dCA9IG51bGxwdHI7CiB9
CiAKLXZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgInVp
Q29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgInVpQ29udHJvbGxlciIsIHRoaXMpOwogfQogCiBKU0NsYXNzUmVm
IFVJU2NyaXB0Q29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbSBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbQppbmRleCA4ZmMw
MjExNjdhYWMyMjE1MzZhMTc2NmU1MzkwMTlmZTY0NDA1OGUxLi5kODZlZjk1NmY4MGRmYTE5MjI5
NTRlMTE3OWFmMmIzNTJiOTgzOTI0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIubW0KKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNo
YXJlZC9jb2NvYS9MYXlvdXRUZXN0U3BlbGxDaGVja2VyLm1tCkBAIC0yNiw3ICsyNiw3IEBACiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkxheW91dFRlc3RTcGVsbENoZWNrZXIuaCIKIAot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbXBvcnQgIkpTQmFzaWNz
LmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KQEAgLTIxMiwxMSArMjEyLDExIEBAIC0gKHZvaWQp
c2V0UmVzdWx0czooVGV4dENoZWNraW5nUmVzdWx0c0RpY3Rpb25hcnkgKilyZXN1bHRzCiAtICh2
b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFsdWUgaW5Db250
ZXh0OihKU0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1dG8gcmVzdWx0c09iamVjdCA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCByZXN1bHRzVmFsdWUsIG51bGxwdHIpOwotICAgIGF1dG8g
ZnJvbVByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJm
cm9tIikpOwotICAgIGF1dG8gdG9Qcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygidG8iKSk7Ci0gICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gYWRvcHQo
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInR5cGUiKSk7Ci0gICAgYXV0byByZXBsYWNl
bWVudFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJy
ZXBsYWNlbWVudCIpKTsKLSAgICBhdXRvIGRldGFpbHNQcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGV0YWlscyIpKTsKKyAgICBhdXRvIGZyb21Qcm9w
ZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJmcm9tIik7CisgICAgYXV0byB0b1Byb3Bl
cnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoInRvIik7CisgICAgYXV0byB0eXBlUHJvcGVy
dHlOYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZygidHlwZSIpOworICAgIGF1dG8gcmVwbGFjZW1l
bnRQcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJyZXBsYWNlbWVudCIpOworICAg
IGF1dG8gZGV0YWlsc1Byb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoImRldGFpbHMi
KTsKICAgICBhdXRvIHJlc3VsdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxv
Y10gaW5pdF0pOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIHRoZSBPYmplY3RpdmUtQyBBUEkgd291
bGQgbWFrZSB0aGlzIGxvZ2ljIGVhc2llciB0byBmb2xsb3cuCkBAIC0yMjgsMTUgKzIyOCwxMyBA
QCAtICh2b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHRSZWYpYwogICAgICAgICBhdXRvIHJlc3VsdHNGb3JXb3JkID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgICAgIGZvciAoc2l6
ZV90IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBKU1Byb3BlcnR5TmFtZUFycmF5R2V0
Q291bnQocmVzdWx0c0FycmF5UHJvcGVydHlOYW1lcyk7ICsrcmVzdWx0SW5kZXgpIHsKICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0c09iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBKU09i
amVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCByZXN1bHRzQXJyYXksIHJlc3VsdEluZGV4
LCBudWxscHRyKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBsb25nIGZyb21WYWx1ZSA9IGxyb3Vu
ZGwoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
cmVzdWx0c09iamVjdCwgZnJvbVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxwdHIp
KTsKLSAgICAgICAgICAgIGxvbmcgdG9WYWx1ZSA9IGxyb3VuZGwoSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgdG9Qcm9w
ZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBhdXRvIHR5
cGVWYWx1ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0eXBlUHJvcGVydHlOYW1lLmdldCgpLCBu
dWxscHRyKSwgbnVsbHB0cikpOworICAgICAgICAgICAgbG9uZyBmcm9tVmFsdWUgPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2Jq
ZWN0LCBmcm9tUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBsb25nIHRvVmFsdWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0b1Byb3BlcnR5TmFtZS5nZXQoKSwgbnVs
bHB0ciksIG51bGxwdHIpOworICAgICAgICAgICAgYXV0byB0eXBlVmFsdWUgPSBXVFI6OmNyZWF0
ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09i
amVjdCwgdHlwZVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgYXV0
byByZXBsYWNlbWVudFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRz
T2JqZWN0LCByZXBsYWNlbWVudFByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cik7CiAgICAgICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHJlcGxhY2VtZW50VGV4dDsKLSAgICAgICAgICAg
IGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHJlcGxhY2VtZW50VmFsdWUpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byByZXBsYWNlbWVudEpTU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAg
ICAgICAgICAgcmVwbGFjZW1lbnRUZXh0ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCByZXBsYWNlbWVudEpTU3RyaW5nLmdldCgpKSk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCByZXBs
YWNlbWVudFZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRleHQgPSBhZG9wdENG
KEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoY29udGV4dCwgcmVwbGFjZW1lbnRWYWx1ZSkuZ2V0KCkpKTsKICAgICAgICAgICAgIGF1
dG8gZGV0YWlscyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogICAg
ICAgICAgICAgYXV0byBkZXRhaWxzVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQs
IHJlc3VsdHNPYmplY3QsIGRldGFpbHNQcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpOwogICAg
ICAgICAgICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgZGV0YWlsc1ZhbHVlKSkg
ewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25z
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlGdW5jdGlvbnMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lNTUxOGFiMzgxMzhkNmI3YmZhYTAzNTlmNzgyY2VjZDg3MzZmOTA5Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25zLmgKQEAg
LTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0
cmluZ0Z1bmN0aW9ucy5oIgorCituYW1lc3BhY2UgV1RSIHsKKworV0tEaWN0aW9uYXJ5UmVmIGRp
Y3Rpb25hcnlWYWx1ZShXS1R5cGVSZWYpOworCitib29sIGJvb2xlYW5WYWx1ZShXS1R5cGVSZWYp
OworYm9vbCBib29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYpOworCitk
b3VibGUgZG91YmxlVmFsdWUoV0tUeXBlUmVmKTsKK09wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxE
b3VibGVWYWx1ZShXS1R5cGVSZWYpOworCitXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShXS1R5cGVS
ZWYpOworV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoV0tUeXBlUmVmKTsKKwordWludDY0X3QgdWlu
dDY0VmFsdWUoV0tUeXBlUmVmKTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKGNvbnN0IFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4mKTsKKworV0tUeXBlUmVmIHZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29u
c3QgY2hhcioga2V5KTsKKworYm9vbCBib29sZWFuVmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25z
dCBjaGFyKiBrZXkpOworZG91YmxlIGRvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3Qg
Y2hhcioga2V5KTsKK1dLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29u
c3QgY2hhcioga2V5KTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29u
c3QgY2hhcioga2V5KTsKKworT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdL
RGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYs
IGNvbnN0IGNoYXIqIGtleSwgY29uc3QgT3B0aW9uYWw8VD4mIHZhbHVlKTsKK3ZvaWQgc2V0VmFs
dWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFy
KiBrZXksIFdLVHlwZVJlZiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBib29sIHZhbHVlKTsK
K3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4m
LCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29u
c3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXks
IHVpbnQ2NF90IHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGRvdWJsZSB2YWx1ZSk7Cit2b2lk
IHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29u
c3QgY2hhcioga2V5LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgYm9vbCBi
b29sZWFuVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dl
dFR5cGVJRCh2YWx1ZSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkgJiYgV0tCb29sZWFuR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPih2YWx1ZSkpOworfQorCitpbmxpbmUgYm9vbCBi
b29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7CisgICAg
cmV0dXJuIGJvb2xlYW5WYWx1ZSh2YWx1ZS5nZXQoKSk7Cit9CisKK2lubGluZSBXS0RpY3Rpb25h
cnlSZWYgZGljdGlvbmFyeVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFs
dWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpID8gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxpbmUg
ZG91YmxlIGRvdWJsZVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUg
JiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRG91YmxlR2V0VHlwZUlEKCkgPyBXS0RvdWJsZUdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPih2YWx1ZSkpIDogMDsKK30KKworaW5saW5l
IE9wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS1R5cGVSZWYgdmFsdWUpCit7
CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS0RvdWJsZUdldFR5
cGVJRCgpID8gbWFrZU9wdGlvbmFsKFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3Vi
bGVSZWY+KHZhbHVlKSkpIDogV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgV0tTdHJpbmdSZWYg
c3RyaW5nVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dl
dFR5cGVJRCh2YWx1ZSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSA/IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZT
dHJpbmcoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB0b1dURlN0cmluZyhzdHJpbmdW
YWx1ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUoV0tUeXBlUmVm
IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tV
SW50NjRHZXRUeXBlSUQoKSA/IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KHZhbHVlKSkgOiAwOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUoY29uc3Qg
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVl
KHZhbHVlLmdldCgpKTsKK30KKworaW5saW5lIFdLVHlwZVJlZiB2YWx1ZShXS0RpY3Rpb25hcnlS
ZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHRvV0soa2V5KS5nZXQoKSk7Cit9CisKK2lubGlu
ZSBib29sIGJvb2xlYW5WYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hh
cioga2V5KQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5
KSk7Cit9CisKK2lubGluZSBkb3VibGUgZG91YmxlVmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rp
b25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gZG91YmxlVmFsdWUodmFsdWUo
ZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShX
S0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVy
biBzdHJpbmdWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5lIHVpbnQ2
NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBr
ZXkpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHZhbHVlKGRpY3Rpb25hcnksIGtleSkpOwor
fQorCitpbmxpbmUgT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdLRGljdGlv
bmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIG9wdGlv
bmFsRG91YmxlVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSB2b2lk
IHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0
aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHRvV0soa2V5KS5nZXQoKSwgdmFsdWUpOwor
fQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBib29sIHZhbHVlKQorewor
ICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIGNv
bnN0IGNoYXIqIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgdG9XSyh2
YWx1ZSkuZ2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBj
b25zdCBXVEY6OlN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwga2V5
LCB0b1dLKHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXksIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKworaW5saW5lIHZvaWQg
c2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rp
b25hcnksIGNvbnN0IGNoYXIqIGtleSwgZG91YmxlIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRp
Y3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBjb25z
dCBPcHRpb25hbDxUPiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBzZXRWYWx1
ZShkaWN0aW9uYXJ5LCBrZXksICp2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmggYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaAppbmRleCA2NDQ3NjAzOTY4ZDIw
NjQyMGJlYjk0Mjc3M2IyNGI3ODk2NDFiNWM5Li5mYTNhODhkM2FmMzkzNGQ0Yzg4MjBiZjUwZmU5
Zjg5N2IzOGZkMDRhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHku
aApAQCAtMTEyLDE4ICsxMTIsMTkgQEAgcHJpdmF0ZToKICAgICBQT0lOVCBwb3NpdGlvbkluUG9p
bnQoKSBjb25zdCB7IHJldHVybiB7IHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueCksIHN0
YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueSkgfTsgfQogI2VuZGlmCiAKLSAgICBkb3VibGUg
bV90aW1lOwotICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKLSAgICBib29sIG1fbGVmdE1vdXNlQnV0
dG9uRG93bjsKLSAgICBpbnQgbV9jbGlja0NvdW50OwotICAgIGRvdWJsZSBtX2NsaWNrVGltZTsK
LSAgICBXS1BvaW50IG1fY2xpY2tQb3NpdGlvbjsKLSAgICBXS0V2ZW50TW91c2VCdXR0b24gbV9j
bGlja0J1dHRvbjsKKyAgICBkb3VibGUgbV90aW1lIHsgMCB9OworICAgIFdLUG9pbnQgbV9wb3Np
dGlvbiB7IH07CisgICAgYm9vbCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24geyBmYWxzZSB9OworICAg
IGludCBtX2NsaWNrQ291bnQgeyAwIH07CisgICAgZG91YmxlIG1fY2xpY2tUaW1lIHsgMCB9Owor
ICAgIFdLUG9pbnQgbV9jbGlja1Bvc2l0aW9uIHsgfTsKKyAgICBXS0V2ZW50TW91c2VCdXR0b24g
bV9jbGlja0J1dHRvbiB7IGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbiB9OwogICAgIHVuc2ln
bmVkIG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB7IDAgfTsKICNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBpbnQgZXZlbnROdW1iZXI7Ci0jZWxpZiBQTEFURk9STShXUEUpCi0gICAgdWludDMy
X3QgbV9idXR0b25TdGF0ZTsKKyAgICBpbnQgZXZlbnROdW1iZXIgeyAwIH07CisjZW5kaWYKKyNp
ZiBQTEFURk9STShXUEUpCisgICAgdWludDMyX3QgbV9idXR0b25TdGF0ZSB7IDAgfTsKICAgICBW
ZWN0b3I8c3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+IG1fdG91Y2hFdmVudHM7CiAg
ICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV91cGRhdGVkVG91Y2hFdmVudHM7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92
aWRlck1vY2suY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVy
TW9jay5jcHAKaW5kZXggNmY5M2NhMjczMDMwZjU3NzZlMzE4ZjllNDU2OTAyMmNlZTE0YjkwZC4u
YzQyNTFiMzAxZmI1NTRjN2VhZTYwMzE2Mjc1OTZmNTBiNzhhMjU5ZCAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKQEAgLTYzLDkg
KzYzLDkgQEAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6On5HZW9sb2NhdGlvblByb3ZpZGVyTW9j
aygpCiAgICAgV0tHZW9sb2NhdGlvbk1hbmFnZXJTZXRQcm92aWRlcihtX2dlb2xvY2F0aW9uTWFu
YWdlciwgMCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9u
KGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29s
IHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywg
ZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHBy
b3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIEdlb2xvY2F0aW9uUHJv
dmlkZXJNb2NrOjpzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFs
PGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBtX3Bv
c2l0aW9uLmFkb3B0KFdLR2VvbG9jYXRpb25Qb3NpdGlvbkNyZWF0ZV9jKFdhbGxUaW1lOjpub3co
KS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNj
dXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNT
cGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCkpOworICAgIG1fcG9z
aXRpb24uYWRvcHQoV0tHZW9sb2NhdGlvblBvc2l0aW9uQ3JlYXRlX2MoV2FsbFRpbWU6Om5vdygp
LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1
cmFjeSwgYWx0aXR1ZGUuaGFzVmFsdWUoKSwgYWx0aXR1ZGUudmFsdWVPcigwKSwgYWx0aXR1ZGVB
Y2N1cmFjeS5oYXNWYWx1ZSgpLCBhbHRpdHVkZUFjY3VyYWN5LnZhbHVlT3IoMCksIGhlYWRpbmcu
aGFzVmFsdWUoKSwgaGVhZGluZy52YWx1ZU9yKDApLCBzcGVlZC5oYXNWYWx1ZSgpLCBzcGVlZC52
YWx1ZU9yKDApLCBmbG9vckxldmVsLmhhc1ZhbHVlKCksIGZsb29yTGV2ZWwudmFsdWVPcigwKSkp
OwogCiAgICAgbV9oYXNFcnJvciA9IGZhbHNlOwogICAgIG1fZXJyb3JNZXNzYWdlLmNsZWFyKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmgK
aW5kZXggMWVkNGFkZjliMzkzOTNhMzMzYWEzMjUxMDk3YjllM2FhNDJjYzM2Yi4uOWJmNjMzODRh
ZTI3ZGIyOGM1ZjU0MDU2ODViODhmNzViZWQ3YjUxNiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaApAQCAtMzcsNyArMzcsNyBAQCBwdWJs
aWM6CiAgICAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2soV0tDb250ZXh0UmVmKTsKICAgICB+R2Vv
bG9jYXRpb25Qcm92aWRlck1vY2soKTsKIAotICAgIHZvaWQgc2V0UG9zaXRpb24oZG91YmxlIGxh
dGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwg
ZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVh
ZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9v
ckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25h
bDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJs
ZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRQb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tT
dHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKIAogICAgIHZvaWQgc3RhcnRVcGRhdGluZyhXS0dlb2xv
Y2F0aW9uTWFuYWdlclJlZik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmluZGV4
IDZhMDhhYWE2YjYzOWYzZjU1YzhjNDZhOTRjMmZlOTVkYjU0N2Y3ODIuLmFkNGEyNWFlNWIwN2I3
NThlMmUwYTkxZmFmMWI1MjgzMDNlYjg0OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuY3BwCkBAIC03NSw5ICs3NSw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnVw
ZGF0ZUlzb2xhdGVkVHJlZU1vZGUoKQogfQogI2VuZGlmCiAKLXZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsK
LSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgdGhpcyk7CiB9CiAKIEpT
Q2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCkBAIC05Niwx
NyArOTYsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5jZWRBY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpCiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKKwogUmVmPEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7
Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3QgPSBzdGF0aWNf
Y2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7
Ci0KICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHJvb3QpOwogfQog
CiBSZWY8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZv
Y3VzZWRFbGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgUGxhdGZvcm1VSUVsZW1l
bnQgZm9jdXNlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nl
c3NpYmlsaXR5Rm9jdXNlZE9iamVjdChwYWdlKSk7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNyZWF0ZShmb2N1c2VkRWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmgKaW5kZXggNjZjMzQzODIyYmJiYzY5NTk5YmFmNmE0NzY2MGExMzg3ZWUyNTFiMC4u
ZDljMmYxMjZmODcxY2UyZWVmMDdiMDAzNTgwZjZkYWNlNmM1NDIzNSAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgfkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9p
ZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAgICAgdmlydHVhbCBKU0NsYXNzUmVm
IHdyYXBwZXJDbGFzcygpOwogICAgIAogICAgIC8vIEVuaGFuY2VkIGFjY2Vzc2liaWxpdHkuCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdz
L0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQppbmRleCBiOWY1
ZWVmZmE0NjQ5ZjQxN2Y4MmIxNjE3MDlmNGFiYWUwOTk5MWYyLi41MmUzZWZhOTkxYjlkZDZjMTc1
ZGJiOGU0MTBlNmZlY2ZhYzMwMTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVy
YXRvclRlc3RSdW5uZXIucG0KQEAgLTI2MSw4ICsyNjEsNyBAQCAke2ltcGxlbWVudGF0aW9uQ2xh
c3NOYW1lfSogdG8ke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfShKU0NvbnRleHRSZWYgY29udGV4
dCwgSgogCiBKU0NsYXNzUmVmICR7Y2xhc3NOYW1lfTo6JHtjbGFzc1JlZkdldHRlcn0oKQogewot
ICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7Ci0gICAgaWYgKCFqc0NsYXNzKSB7CisgICAg
c3RhdGljIGNvbnN0IEpTQ2xhc3NSZWYganNDbGFzcyA9IFtdIHsKICAgICAgICAgSlNDbGFzc0Rl
ZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OwogICAgICAgICBk
ZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJAe1skdHlwZS0+bmFtZV19IjsKICAgICAgICAgZGVmaW5p
dGlvbi5wYXJlbnRDbGFzcyA9IEB7WyRzZWxmLT5fcGFyZW50Q2xhc3NSZWZHZXR0ZXJFeHByZXNz
aW9uKCRpbnRlcmZhY2UpXX07CkBAIC0yNzQsOCArMjczLDggQEAgRU9GCiAgICAgcHVzaChAY29u
dGVudHMsICIgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBmaW5hbGl6ZTtcbiIpIHVubGVz
cyBfcGFyZW50SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCiAgICAgcHVzaChAY29udGVudHMsIDw8
RU9GKTsKLSAgICAgICAganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0oKTsK
ICAgICByZXR1cm4ganNDbGFzczsKIH0KIApAQCAtNDc3LDEwICs0NzYsMTEgQEAgc3ViIF9wbGF0
Zm9ybVR5cGVDb25zdHJ1Y3RvcgogewogICAgIG15ICgkc2VsZiwgJHR5cGUsICRhcmd1bWVudE5h
bWUpID0gQF87CiAKLSAgICByZXR1cm4gIkpTVmFsdWVUb051bGxhYmxlQm9vbGVhbihjb250ZXh0
LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0eXBlLT5p
c051bGxhYmxlOworICAgIHJldHVybiAidG9PcHRpb25hbEJvb2woY29udGV4dCwgJGFyZ3VtZW50
TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkdHlwZS0+aXNOdWxsYWJsZTsK
ICAgICByZXR1cm4gIkpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlm
ICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gIiRhcmd1bWVudE5hbWUiIGlm
ICR0eXBlLT5uYW1lIGVxICJvYmplY3QiOwotICAgIHJldHVybiAiYWRvcHQoSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSkiIGlmICQkc2VsZntjb2Rl
R2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gImNyZWF0ZUpTU3Ry
aW5nKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklz
U3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsRG91YmxlKGNvbnRleHQs
ICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJpbWl0aXZlVHlw
ZSgkdHlwZSkgJiYgJHR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikiIGlmICQkc2VsZntjb2RlR2VuZXJh
dG9yfS0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gInRvIiAuIF9pbXBsZW1l
bnRhdGlvbkNsYXNzTmFtZSgkdHlwZSkgLiAiKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIjsKIH0K
QEAgLTQ5OSwxOCArNDk5LDE2IEBAIHN1YiBfcGxhdGZvcm1UeXBlVmFyaWFibGVEZWNsYXJhdGlv
bgogICAgICAgICAiSlNWYWx1ZVJlZiIgPT4gMSwKICAgICApOwogCi0gICAgbXkgJG51bGxWYWx1
ZSA9ICIwIjsKKyAgICBteSAkbnVsbFZhbHVlID0gIm51bGxwdHIiOwogICAgIGlmICgkcGxhdGZv
cm1UeXBlIGVxICJKU1ZhbHVlUmVmIikgewogICAgICAgICAkbnVsbFZhbHVlID0gIkpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpIjsKLSAgICB9IGVsc2lmIChkZWZpbmVkICRub25Qb2ludGVy
VHlwZXN7JHBsYXRmb3JtVHlwZX0gJiYgJHBsYXRmb3JtVHlwZSBuZSAiZG91YmxlIikgewotICAg
ICAgICAkbnVsbFZhbHVlID0gIiRwbGF0Zm9ybVR5cGUoKSI7CisgICAgfSBlbHNpZiAoZGVmaW5l
ZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9KSB7CisgICAgICAgICRudWxsVmFsdWUg
PSAkdHlwZS0+aXNOdWxsYWJsZSA/ICJXVEY6Om51bGxvcHQiIDogIiRwbGF0Zm9ybVR5cGUoKSI7
CiAgICAgfQogCi0gICAgJHBsYXRmb3JtVHlwZSAuPSAiKiIgdW5sZXNzIGRlZmluZWQgJG5vblBv
aW50ZXJUeXBlc3skcGxhdGZvcm1UeXBlfTsKLQotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAk
dmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiAmJiAkY29uc3RydWN0b3I7IiBpZiAkY29uZGl0aW9u
ICYmICRwbGF0Zm9ybVR5cGUgZXEgImJvb2wiOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAk
dmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiA/ICRjb25zdHJ1Y3RvciA6ICRudWxsVmFsdWU7IiBp
ZiAkY29uZGl0aW9uOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAkdmFyaWFibGVOYW1lID0g
JGNvbnN0cnVjdG9yOyI7CisgICAgcmV0dXJuICJib29sICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0
aW9uICYmICRjb25zdHJ1Y3RvcjsiIGlmICRjb25kaXRpb24gJiYgJHBsYXRmb3JtVHlwZSBlcSAi
Ym9vbCI7CisgICAgcmV0dXJuICJhdXRvICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uID8gJGNv
bnN0cnVjdG9yIDogJG51bGxWYWx1ZTsiIGlmICRjb25kaXRpb247CisgICAgcmV0dXJuICJhdXRv
ICR2YXJpYWJsZU5hbWUgPSAkY29uc3RydWN0b3I7IjsKIH0KIAogc3ViIF9yZXR1cm5FeHByZXNz
aW9uCkBAIC01MTgsMTEgKzUxNiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBteSAo
JHNlbGYsICRyZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAiSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1bmRl
ZmluZWQiOwotICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQsICR7
ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVy
blR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHBy
ZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlw
ZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJl
dHVybiAiJHtleHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7CiAg
ICAgcmV0dXJuICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYg
JCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwotICAg
IHJldHVybiAiSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufS5n
ZXQoKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBl
KTsKKyAgICByZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIg
aWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwogICAg
IHJldHVybiAidG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwogfQog
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL1Rlc3RSdW5uZXIuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAppbmRleCBmYmVmMzk2ZjVmNmYzYmZmNGY5OWM4YTU2
YTZlNjJhYzAxNDBmZmE0Li5mMzdlMDA2Nzc1YjhlMzA2MWM3Y2VjOGY5YjVlZjc4ODYxODA5MTBh
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL1Rlc3RSdW5uZXIuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKQEAgLTIxNSw3ICsyMTUsNyBAQCBpbnRlcmZh
Y2UgVGVzdFJ1bm5lciB7CiAKICAgICAvLyBHZW9sb2NhdGlvbgogICAgIHVuZGVmaW5lZCBzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhbiB2YWx1ZSk7Ci0gICAgdW5kZWZpbmVkIHNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgYWx0aXR1ZGUsIG9wdGlvbmFsIG9iamVj
dCBhbHRpdHVkZUFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgaGVhZGluZywgb3B0aW9uYWwgb2Jq
ZWN0IHNwZWVkLCBvcHRpb25hbCBvYmplY3QgZmxvb3JMZXZlbCk7CisgICAgdW5kZWZpbmVkIHNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBkb3VibGU/IGFsdGl0dWRlLCBvcHRpb25hbCBk
b3VibGU/IGFsdGl0dWRlQWNjdXJhY3ksIG9wdGlvbmFsIGRvdWJsZT8gaGVhZGluZywgb3B0aW9u
YWwgZG91YmxlPyBzcGVlZCwgb3B0aW9uYWwgZG91YmxlPyBmbG9vckxldmVsKTsKICAgICB1bmRl
ZmluZWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKERPTVN0cmlu
ZyBlcnJvck1lc3NhZ2UpOwogICAgIGJvb2xlYW4gaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZl
KCk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
RXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDU1M2ZkMDVlZjE2OWYz
NTIzYTA0MzFmMTMxNzQyZmJjMjIxNzA0MDkuLjQ0MjdmMDg5MjYwMTZhYTM0ODM5NzIyYzcxYmMz
YTA2MTJkZDI3ZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcApAQCAtMjYsMTAg
KzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kaW5nQ29u
dHJvbGxlci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5j
bHVkZSAiSlNFdmVudFNlbmRpbmdDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rp
b25zLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dL
QnVuZGxlRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oPgpA
QCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgTWVudUl0ZW1Qcml2YXRlRGF0YSB7CiB9OwogCiAjaWYg
RU5BQkxFKENPTlRFWFRfTUVOVVMpCisKIHN0YXRpYyBKU1ZhbHVlUmVmIG1lbnVJdGVtQ2xpY2tD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKIHsKICAg
ICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJdGVt
UHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtNjIsNyAr
NjMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNrQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iagogc3RhdGljIEpTVmFsdWVSZWYgZ2V0TWVu
dUl0ZW1UaXRsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmpl
Y3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewog
ICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRhID0gc3RhdGljX2Nhc3Q8TWVudUl0
ZW1Qcml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZSA9IGFkb3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5
VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQoKSkpOworICAgIGF1dG8gd2tUaXRsZSA9IGFk
b3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQo
KSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHdrVGl0bGUp
LmdldCgpKTsKIH0KIApAQCAtNzMsMTggKzc0LDE3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldE1l
bnVJdGVtQ2hpbGRyZW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYK
ICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJ
dGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CiAgICAgYXV0byBj
aGlsZHJlbiA9IGFkb3B0V0soV0tDb250ZXh0TWVudUNvcHlTdWJtZW51SXRlbXMocHJpdmF0ZURh
dGEtPm1faXRlbS5nZXQoKSkpOwogCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2Jq
ZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVj
dE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAoIVdLQXJyYXlHZXRTaXplKGNo
aWxkcmVuLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgICAgICByZXR1
cm4gYXJyYXk7CiAKLSAgICBKU09iamVjdFJlZiBhcnJheU9iamVjdCA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBX
S0FycmF5R2V0U2l6ZShjaGlsZHJlbi5nZXQoKSk7ICsraSkgewogICAgICAgICBhdXRvIGl0ZW0g
PSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4
KGNoaWxkcmVuLmdldCgpLCBpKSk7CiAgICAgICAgIGF1dG8qIHByaXZhdGVEYXRhID0gbmV3IE1l
bnVJdGVtUHJpdmF0ZURhdGEoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBpdGVtKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
YXJyYXlPYmplY3QsIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCks
IHByaXZhdGVEYXRhKSwgMCk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNv
bnRleHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFzcygp
LCBwcml2YXRlRGF0YSksIDApOwogICAgIH0KIAotICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAg
ICByZXR1cm4gYXJyYXk7CiB9CiAKIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY01lbnVJ
dGVtRnVuY3Rpb25zW10gPSB7CkBAIC0xMjYsNiArMTI2LDcgQEAgc3RhdGljIEpTQ2xhc3NSZWYg
Z2V0TWVudUl0ZW1DbGFzcygpCiAKICAgICByZXR1cm4gbWVudUl0ZW1DbGFzczsKIH0KKwogI2Vu
ZGlmCiAKIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXIoSlNTdHJpbmdSZWYg
bW9kaWZpZXIpCkBAIC0xNTAsMjUgKzE1MSwzMSBAQCBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBw
YXJzZU1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyKQogICAgIHJldHVybiAwOwogfQogCi1z
dGF0aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGFycmF5KQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK3N0YXRpYyB1aW50NjRfdCBw
YXJzZVRvdWNoTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIpCiB7Ci0gICAgYXV0byBsZW5n
dGhTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikp
OwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQsIGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIDApOwotICAgIGlmICghbGVuZ3RoVmFsdWUp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CisgICAgaWYgKEpTU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJjdHJsIikpCisgICAgICAgIHJldHVybiBr
V0tFdmVudE1vZGlmaWVyc0NvbnRyb2xLZXk7CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobW9kaWZpZXIsICJzaGlmdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2Rp
ZmllcnNTaGlmdEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2Rp
ZmllciwgImFsdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2RpZmllcnNBbHRLZXk7Cisg
ICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJtZXRhS2V5Iikp
CisgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVyc01ldGFLZXk7CisgICAgcmV0dXJuIDA7
CiB9CiAKKyNlbmRpZgorCiBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJy
YXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKICAgICBp
ZiAoIWFycmF5VmFsdWUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gVGhlIHZhbHVlIG1h
eSBlaXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBv
ZiBtb2RpZmllcnMuCi0gICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVl
KSkgewotICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgYXJyYXlWYWx1ZSwgMCkpOwotICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihzdHJp
bmcuZ2V0KCkpOwotICAgIH0KKyAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFycmF5
VmFsdWUpKQorICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihjcmVhdGVKU1N0cmluZyhjb250
ZXh0LCBhcnJheVZhbHVlKS5nZXQoKSk7CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250
ZXh0LCBhcnJheVZhbHVlKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzYsMjkgKzE4MywyMCBA
QCBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYQogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5TGVu
Z3RoKGNvbnRleHQsIGFycmF5KTsKICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IDA7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCAmZXhjZXB0aW9uKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRv
IHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsICZleGNl
cHRpb24pKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBtb2RpZmllcnMgfD0gcGFyc2VNb2RpZmllcihzdHJpbmcuZ2V0KCkpOworICAgICAg
ICBpZiAoYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFy
cmF5LCBpLCBudWxscHRyKSkKKyAgICAgICAgICAgIG1vZGlmaWVycyB8PSBwYXJzZU1vZGlmaWVy
KGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CiAgICAgfQogICAgIHJldHVy
biBtb2RpZmllcnM7CiB9CiAKLVJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXIpOwotfQotCi1FdmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNl
bmRpbmdDb250cm9sbGVyKCkKK3N0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXJB
cnJheShKU1ZhbHVlUmVmIGFycmF5VmFsdWUpCiB7CisgICAgcmV0dXJuIHBhcnNlTW9kaWZpZXJB
cnJheShXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpLCBhcnJh
eVZhbHVlKTsKIH0KIAotRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXIoKQorUmVmPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+IEV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OmNyZWF0ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcik7CiB9CiAKIEpTQ2xhc3NSZWYgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6d3JhcHBl
ckNsYXNzKCkKQEAgLTIwNiwyMzcgKzIwNCwxMTYgQEAgSlNDbGFzc1JlZiBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogICAgIHJldHVybiBKU0V2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmV2ZW50U2VuZGluZ0NvbnRyb2xsZXJDbGFzcygpOwogfQogCi1lbnVtIE1vdXNlU3Rh
dGUgewotICAgIE1vdXNlVXAsCi0gICAgTW91c2VEb3duCi19OworZW51bSBNb3VzZVN0YXRlIHsg
TW91c2VVcCwgTW91c2VEb3duIH07CiAKLXN0YXRpYyBXS011dGFibGVEaWN0aW9uYXJ5UmVmIGNy
ZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VTdGF0ZSBzdGF0ZSwgaW50IGJ1dHRvbiwgV0tFdmVu
dE1vZGlmaWVycyBtb2RpZmllcnMpCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlU3RhdGUgc3RhdGUsIGludCBidXR0b24sIFdL
RXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQogewotICAgIFdLTXV0YWJsZURpY3Rpb25hcnlSZWYg
RXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHN0YXRlID09IE1vdXNlVXAgPyAiTW91c2VVcCIgOiAiTW91c2VEb3duIikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGJ1dHRvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkJ1dHRvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gYnV0dG9uUmVm
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHksIGJ1dHRvbktleS5nZXQoKSwgYnV0dG9uUmVmLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlmaWVyc1JlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUobW9kaWZpZXJzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LCBtb2RpZmllcnNLZXkuZ2V0KCksIG1vZGlmaWVyc1JlZi5nZXQoKSk7Ci0KLSAgICBy
ZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3Nh
Z2UiLCBzdGF0ZSA9PSBNb3VzZVVwID8gIk1vdXNlVXAiIDogIk1vdXNlRG93biIpOworICAgIHNl
dFZhbHVlKGJvZHksICJCdXR0b24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbikpLmdl
dCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTW9kaWZpZXJzIiwgYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShtb2RpZmllcnMpKS5nZXQoKSk7CisgICAgcmV0dXJuIGJvZHk7CiB9CiAKIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9k
aWZpZXJBcnJheSkgCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBpbmplY3RlZEJ1bmRs
ZS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQ
YWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5k
bGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJz
IG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFycmF5KTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZURvd24sIGJ1dHRvbiwg
bW9kaWZpZXJzKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhwYWdlLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZl
bnRTZW5kZXIiLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBwYXJz
ZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJheSkpLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjptb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJB
cnJheSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFy
cmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBidXR0
b24sIG1vZGlmaWVycykpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVh
dGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlVXAsIGJ1dHRvbiwgcGFyc2VNb2RpZmllckFycmF5KG1v
ZGlmaWVyQXJyYXkpKS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
bW91c2VNb3ZlVG8oaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZU1vdmVUbyIpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VL
ZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlki
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJT
dWJNZXNzYWdlIiwgIk1vdXNlTW92ZVRvIik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CiAgICAgbV9wb3NpdGlvbiA9IFdLUG9p
bnRNYWtlKHgsIHkpOwotICAgIAotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgMCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9k
eS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNs
aWNrKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTW91c2VGb3JjZUNsaWNrIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVz
c2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZUNsaWNrIik7
CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQo
KSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c3RhcnRBbmRDYW5jZWxNb3Vz
ZUZvcmNlQ2xpY2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZl
bnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZl
bnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdl
IiwgIlN0YXJ0QW5kQ2FuY2VsTW91c2VGb3JjZUNsaWNrIik7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZURvd24oKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Vi
TWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlRG93biIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJN
ZXNzYWdlIiwgIk1vdXNlRm9yY2VEb3duIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6bW91c2VGb3JjZVVwKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VGb3JjZVVwIikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtl
eS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91
c2VGb3JjZVVwIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VG
b3JjZUNoYW5nZWQoZG91YmxlIGZvcmNlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlQ2hhbmdlZCIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkZvcmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBmb3JjZVJlZiA9
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoZm9yY2UpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGZvcmNlS2V5LmdldCgpLCBmb3JjZVJlZi5n
ZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAg
IGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZUZvcmNlQ2hhbmdlZCIpOworICAgIHNl
dFZhbHVlKGJvZHksICJGb3JjZSIsIGZvcmNlKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMZWFwRm9yd2Fy
ZCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVGltZUluTWlsbGlzZWNvbmRzIikpOwotICAgIFdLUmV0YWluUHRyPFdL
VUludDY0UmVmPiB0aW1lUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHRpbWVLZXkuZ2V0KCksIHRpbWVSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTGVh
cEZvcndhcmQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiVGltZUluTWlsbGlzZWNvbmRzIiwgYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMpKS5nZXQoKSk7CisgICAgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljaygpCiB7Ci0g
ICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOwotICAgIGludCBidXR0b24gPSAwOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLQot
ICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSBkb3duLgotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IG1vdXNlRG93bk1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3Vz
ZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlRG93bk1lc3NhZ2VCb2R5Lmdl
dCgpKTsKLQotICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSB1cC4KLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBtb3VzZVVwTWVzc2FnZUJvZHkgPSBhZG9wdFdLKGNyZWF0
ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlVXBNZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVz
c2FnZUJvZHkoTW91c2VEb3duLCAwLCAwKS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJF
dmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgMCwgMCkuZ2V0KCkp
OwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRl
S2V5RG93bk1lc3NhZ2VCb2R5KEpTU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2Rp
ZmllcnMsIGludCBsb2NhdGlvbikKIHsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleURvd24iKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5Lmdl
dCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4ga2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5Iikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
a2V5S2V5LmdldCgpLCB0b1dLKGtleSkuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJz
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyc0tleS5nZXQo
KSwgbW9kaWZpZXJzUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBs
b2NhdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxvY2F0
aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBsb2NhdGlvblJlZiA9IGFkb3B0
V0soV0tVSW50NjRDcmVhdGUobG9jYXRpb24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGxvY2F0aW9uS2V5LmdldCgpLCBsb2NhdGlvblJl
Zi5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRv
IGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiS2V5RG93biIpOworICAgIHNldFZhbHVlKGJvZHksICJL
ZXkiLCB0b1dLKGtleSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJNb2RpZmllcnMiLCBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiTG9jYXRpb24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxvY2F0aW9uKSkuZ2V0KCkp
OworICAgIHJldHVybiBib2R5OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Omtl
eURvd24oSlNTdHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2Nh
dGlvbikKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFy
cmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4ga2V5RG93bk1lc3Nh
Z2VCb2R5ID0gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgbW9kaWZpZXJzLCBsb2NhdGlv
bik7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlS2V5RG93bk1lc3NhZ2VC
b2R5KGtleSwgcGFyc2VNb2RpZmllckFycmF5KG1vZGlmaWVyQXJyYXkpLCBsb2NhdGlvbikuZ2V0
KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNjaGVkdWxlQXN5bmNocm9u
b3VzS2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBrZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHko
a2V5LCAwIC8qIG1vZGlmaWVycyAqLywgMCAvKiBsb2NhdGlvbiAqLyk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZUtleURvd25NZXNz
YWdlQm9keShrZXksIDAsIDApLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1l
c3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VTY3JvbGxCeSIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1
Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCiAgICAgV0tCdW5k
bGVQYWdlRm9yY2VSZXBhaW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSk7IC8vIFRyaWdnZXJzIGEgc2Nyb2xsaW5nIHRyZWUgY29tbWl0LgotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSk7CisKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VTY3JvbGxCeSIp
OworICAgIHNldFZhbHVlKGJvZHksICJYIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSkuZ2V0
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSku
Z2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsK
IH0KIAogc3RhdGljIHVpbnQ2NF90IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcoSlNTdHJpbmdSZWYg
cGhhc2VTdHIpCkBAIC00NzUsOTAgKzM1Miw1OCBAQCBzdGF0aWMgdWludDY0X3QgY2dFdmVudE1v
bWVudHVtUGhhc2VGcm9tU3RyaW5nKEpTU3RyaW5nUmVmIHBoYXNlU3RyKQogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNl
cyhpbnQgeCwgaW50IHksIEpTU3RyaW5nUmVmIHBoYXNlU3RyLCBKU1N0cmluZ1JlZiBtb21lbnR1
bVN0cikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAg
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIk1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLSAgICAKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHhSZWYgPSBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJl
ZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0K
ICAgICB1aW50NjRfdCBwaGFzZSA9IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcocGhhc2VTdHIpOwog
ICAgIHVpbnQ2NF90IG1vbWVudHVtID0gY2dFdmVudE1vbWVudHVtUGhhc2VGcm9tU3RyaW5nKG1v
bWVudHVtU3RyKTsKLSAgICAKKwogICAgIGlmIChwaGFzZSA9PSA0IC8qIGtDR1Njcm9sbFBoYXNl
RW5kZWQgKi8gfHwgcGhhc2UgPT0gOCAvKiBrQ0dTY3JvbGxQaGFzZUNhbmNlbGxlZCAqLykKICAg
ICAgICAgbV9zZW50V2hlZWxQaGFzZUVuZE9yQ2FuY2VsID0gdHJ1ZTsKLSAgICAKICAgICBpZiAo
bW9tZW50dW0gPT0gMyAvKiBrQ0dNb21lbnR1bVNjcm9sbFBoYXNlRW5kICovKQogICAgICAgICBt
X3NlbnRXaGVlbE1vbWVudHVtUGhhc2VFbmQgPSB0cnVlOwogCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBoYXNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiUGhhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHBoYXNlUmVmID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShwaGFzZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgcGhhc2VLZXkuZ2V0KCksIHBoYXNlUmVmLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb21lbnR1bUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vbWVudHVtIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLVUludDY0UmVmPiBtb21lbnR1bVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9t
ZW50dW0pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIG1vbWVudHVtS2V5LmdldCgpLCBtb21lbnR1bVJlZi5nZXQoKSk7Ci0KICAgICBXS0J1
bmRsZVBhZ2VGb3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpKTsgLy8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcgdHJlZSBjb21taXQuCi0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpKTsKKworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZVNjcm9sbEJ5
V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIGFk
b3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIs
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
UGhhc2UiLCBwaGFzZSk7CisgICAgc2V0VmFsdWUoYm9keSwgIk1vbWVudHVtIiwgbW9tZW50dW0p
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAog
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQg
eCwgaW50IHksIGJvb2wgcGFnZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5IikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3Vi
TWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0gYWRvcHRXSyhX
S0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gcGFnZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJQYWdlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcGFnZWRS
ZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHBhZ2VkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwYWdlZEtleS5nZXQoKSwgcGFnZWRS
ZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkNvbnRpbnVvdXNN
b3VzZVNjcm9sbEJ5Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlBhZ2VkIiwgcGFnZWQp
OwogICAgIC8vIEZJWE1FOiBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIGFzeW5jaHJvbm91cywgYXMg
c2Nyb2xsaW5nIGlzIGludHJpbnNpY2FsbHkgYXN5bmNocm9ub3VzLgogICAgIC8vIFNlZSBhbHNv
OiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODI1Nj4uCi0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogSlNWYWx1ZVJl
ZiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250ZXh0Q2xpY2soKQogewotICAgIFdLQnVuZGxl
UGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
OworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogI2lmIEVOQUJMRShDT05URVhUX01FTlVT
KQotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1
bmRsZVBhZ2VDb3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikp
OwotICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0
LCAwLCAwLCAwKTsKKyAgICBhdXRvIG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VD
b3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikpOworICAgIGF1
dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAo
IW1lbnVFbnRyaWVzKQotICAgICAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgICAgIHJldHVy
biBhcnJheTsKIAotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIGFycmF5UmVzdWx0LCAwKTsKICAgICBzaXplX3QgZW50cmllc1NpemUgPSBXS0FycmF5
R2V0U2l6ZShtZW51RW50cmllcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
bnRyaWVzU2l6ZTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0
SXRlbUF0SW5kZXgobWVudUVudHJpZXMuZ2V0KCksIGkpKSA9PSBXS0NvbnRleHRNZW51SXRlbUdl
dFR5cGVJRCgpKTsKIAogICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJlZiBpdGVtID0gc3RhdGlj
X2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZW51RW50
cmllcy5nZXQoKSwgaSkpOwogICAgICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0
YSA9IG5ldyBNZW51SXRlbVByaXZhdGVEYXRhKHBhZ2UsIGl0ZW0pOwotICAgICAgICBKU09iamVj
dFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwgaSwgSlNPYmplY3RNYWtlKGNv
bnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAwKTsKKyAgICAgICAgSlNP
YmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFrZShj
b250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCksIHByaXZhdGVEYXRhKSwgMCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgIHJldHVybiBhcnJheTsKICNlbHNlCiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogI2VuZGlmCkBAIC02MTUsMjEgKzQ2
MCwxNCBAQCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKiB0b01vbml0b3JXaGVlbEV2ZW50c09w
dGlvbnMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVgogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0
KGNvbnRleHQsIGFyZ3VtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRv
IHJlc2V0TGF0Y2hpbmdTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygicmVzZXRMYXRjaGluZyIpKTsKLSAgICBhdXRvIHJlc2V0TGF0Y2hpbmdWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50
LCBudWxscHRyKSwgcmVzZXRMYXRjaGluZ1N0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAgICBi
b29sIHJlc2V0TGF0Y2hpbmcgPSB0cnVlOwotICAgIGlmIChyZXNldExhdGNoaW5nVmFsdWUgJiYg
SlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5nVmFsdWUpKQotICAgICAgICBy
ZXNldExhdGNoaW5nID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5nVmFs
dWUpOwotCiAgICAgc3RhdGljIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMgb3B0aW9uczsKLSAg
ICBvcHRpb25zLnJlc2V0TGF0Y2hpbmcgPSByZXNldExhdGNoaW5nOworICAgIG9wdGlvbnMucmVz
ZXRMYXRjaGluZyA9IGJvb2xlYW5Qcm9wZXJ0eShjb250ZXh0LCAoSlNPYmplY3RSZWYpYXJndW1l
bnQsICJyZXNldExhdGNoaW5nIiwgdHJ1ZSk7CiAgICAgcmV0dXJuICZvcHRpb25zOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vbml0b3JXaGVlbEV2ZW50cyhNb25pdG9yV2hl
ZWxFdmVudHNPcHRpb25zKiBvcHRpb25zKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFn
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICAKICAg
ICBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgPSBmYWxzZTsKICAgICBtX3NlbnRXaGVlbE1v
bWVudHVtUGhhc2VFbmQgPSBmYWxzZTsKQEAgLTY2Myw3ICs1MDEsNyBAQCB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OmNhbGxBZnRlclNjcm9sbGluZ0NvbXBsZXRlcyhKU1ZhbHVlUmVmIGZ1
bmN0aW9uQ2FsbAogICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgCkBAIC02
ODMsMTk5ICs1MjEsMTAyIEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FsbEFmdGVy
U2Nyb2xsaW5nQ29tcGxldGVzKEpTVmFsdWVSZWYgZnVuY3Rpb25DYWxsCiB9CiAKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmFkZFRvdWNo
UG9pbnQoaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRUb3VjaFBvaW50IikpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5n
ZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJBZGRU
b3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oeCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHkp
KTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5Lmdl
dCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp1cGRhdGVUb3VjaFBvaW50
KGludCBpbmRleCwgaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVcGRhdGVUb3VjaFBvaW50IikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSW5kZXgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGluZGV4UmVmID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXkuZ2V0KCksIGluZGV4UmVmLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2
NFJlZj4geFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IHlSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiVXBkYXRlVG91Y2hQb2ludCIpOworICAgIHNl
dFZhbHVlKGJvZHksICJJbmRleCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbmRleCkpOworICAg
IHNldFZhbHVlKGJvZHksICJYIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHgpKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiWSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih5KSk7CisgICAgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKLXZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihjb25zdCBKU1N0cmluZ1Jl
ZiAmbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQordm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpz
ZXRUb3VjaE1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0VG91Y2hNb2RpZmllciIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdl
dCgpKTsKLQotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kID0gMDsKLSAgICBpZiAoSlNTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImN0cmwiKSkKLSAgICAgICAgbW9kID0ga1dL
RXZlbnRNb2RpZmllcnNDb250cm9sS2V5OwotICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1vZGlmaWVyLCAic2hpZnQiKSkKLSAgICAgICAgbW9kID0ga1dLRXZlbnRNb2RpZmll
cnNTaGlmdEtleTsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmll
ciwgImFsdCIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlmaWVyc0FsdEtleTsKLSAgICBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgIm1ldGEiKSkKLSAgICAg
ICAgbW9kID0ga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5OwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1vZGlmaWVyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiTW9kaWZpZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlmaWVy
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2QpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyS2V5LmdldCgpLCBtb2Rp
ZmllclJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRW5hYmxlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBlbmFibGVSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGVuYWJsZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgZW5hYmxlS2V5LmdldCgpLCBlbmFibGVSZWYuZ2V0KCkpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1
Yk1lc3NhZ2UiLCAiU2V0VG91Y2hNb2RpZmllciIpOworICAgIHNldFZhbHVlKGJvZHksICJNb2Rp
ZmllciIsIHBhcnNlVG91Y2hNb2RpZmllcihtb2RpZmllcikpOworICAgIHNldFZhbHVlKGJvZHks
ICJFbmFibGUiLCBlbmFibGUpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCi0KIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFRvdWNoUG9pbnRSYWRpdXMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1giKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHJhZGl1c1gpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXku
Z2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNZIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShy
YWRpdXNZKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlNl
dFRvdWNoUG9pbnRSYWRpdXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUmFkaXVzWCIsIHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihyYWRpdXNYKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlJhZGl1c1ki
LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmFkaXVzWSkpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OnRvdWNoU3RhcnQoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2Fn
ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaFN0YXJ0IikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2Fn
ZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAi
VG91Y2hTdGFydCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRl
ciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNo
TW92ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRl
ciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlRvdWNoTW92ZSIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VO
YW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7
CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwor
ICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlRvdWNoTW92ZSIpOworICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoRW5kKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hFbmQiKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBz
dWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVz
c2FnZSIsICJUb3VjaEVuZCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2
ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hDYW5jZWwiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBz
dWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJUb3VjaENhbmNlbCIp
OworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0
KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNsZWFyVG91Y2hQb2ludHMo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDbGVhclRvdWNoUG9pbnRzIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2Fn
ZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAw
KTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiQ2xlYXJUb3VjaFBvaW50cyIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkp
OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnJlbGVhc2VUb3VjaFBvaW50KGlu
dCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2Vu
ZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUmVsZWFzZVRvdWNoUG9pbnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBz
dWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5k
ZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5kZXhSZWYgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwgaW5kZXhSZWYuZ2V0KCkpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1
Yk1lc3NhZ2UiLCAiUmVsZWFzZVRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiSW5k
ZXgiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXgpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FuY2Vs
VG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiBpbmRleFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGluZGV4S2V5
LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJDYW5jZWxUb3Vj
aFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIkluZGV4Iiwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGluZGV4KSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgYm9keS5nZXQoKSk7CiB9CisKICNlbmRpZgogCiAvLyBPYmplY3QgQ3JlYXRpb24KIAotdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3ZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRS
ZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJl
dmVudFNlbmRlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImV2ZW50U2VuZGVyIiwgdGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRleCA5YTJhZmQ5NThjY2Q3MGVj
ZDIxZWM0ZTNiM2ZlYzRjZjdjYzg1YmE4Li5lYTQzN2ZiZGJlMGMzNDg5MDU3ZTMxNjA3NWFkZWE2
NTNhZGI1MTBkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaApAQCAtMzAsMjcgKzMwLDIz
IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLR2VvbWV0cnkuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+
CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwor
dHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVmOwordHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAK
IHN0cnVjdCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zIHsKLSAgICBNb25pdG9yV2hlZWxFdmVu
dHNPcHRpb25zKGJvb2wgcmVzZXRMYXRjaGluZyA9IHRydWUpCi0gICAgICAgIDogcmVzZXRMYXRj
aGluZyhyZXNldExhdGNoaW5nKQotICAgIHsgfQotCiAgICAgYm9vbCByZXNldExhdGNoaW5nIHsg
dHJ1ZSB9OwogfTsKIAogTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyogdG9Nb25pdG9yV2hlZWxF
dmVudHNPcHRpb25zKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAKLWNsYXNzIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgeworY2xhc3MgRXZlbnRTZW5kaW5n
Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5F
dmVudFNlbmRpbmdDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CiAKLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVy
Q2xhc3MoKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAg
IHZvaWQgbW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSk7CiAg
ICAgdm9pZCBtb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSk7CkBA
IC03Myw3ICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGtleURvd24oSlNTdHJpbmdSZWYga2V5
LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2NhdGlvbik7CiAgICAgdm9pZCBzY2hl
ZHVsZUFzeW5jaHJvbm91c0tleURvd24oSlNTdHJpbmdSZWYga2V5KTsKIAotICAgIC8vIFpvb20g
ZnVuY3Rpb25zLgogICAgIHZvaWQgdGV4dFpvb21JbigpOwogICAgIHZvaWQgdGV4dFpvb21PdXQo
KTsKICAgICB2b2lkIHpvb21QYWdlSW4oKTsKQEAgLTgxLDEwICs3Niw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNjYWxlUGFnZUJ5KGRvdWJsZSBzY2FsZSwgZG91YmxlIHgsIGRvdWJsZSB5KTsKIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgLy8gVG91Y2ggZXZlbnRzLgogICAgIHZvaWQg
YWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpOwogICAgIHZvaWQgdXBkYXRlVG91Y2hQb2ludChp
bnQgaW5kZXgsIGludCB4LCBpbnQgeSk7Ci0gICAgdm9pZCBzZXRUb3VjaE1vZGlmaWVyKGNvbnN0
IEpTU3RyaW5nUmVmICZtb2RpZmllciwgYm9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0VG91Y2hN
b2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllciwgYm9vbCBlbmFibGUpOwogICAgIHZvaWQgc2V0
VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOwogICAgIHZvaWQgdG91
Y2hTdGFydCgpOwogICAgIHZvaWQgdG91Y2hNb3ZlKCk7CkBAIC05Niw3ICs5MCwxMCBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyKCk7Cisg
ICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlcigpID0gZGVmYXVsdDsKKworICAgIEpTQ2xhc3NSZWYg
d3JhcHBlckNsYXNzKCkgZmluYWw7CisKICAgICBXS1BvaW50IG1fcG9zaXRpb247CiAgICAgYm9v
bCBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zZW50
V2hlZWxNb21lbnR1bVBoYXNlRW5kIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcAppbmRleCA5MzU4ZjRh
MGRlNWIzZDliYzMxNmI1ZTBhZGZkMDQxMjY2NDI1OGZmLi5kYjQyNWU3NWU4MGIwNTQwOGJkZjNl
M2UzNjQ3NjUxMDk2MzBkM2ZkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0zNywxNCArMzcsNiBAQCBSZWY8
R0NDb250cm9sbGVyPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgR0NDb250cm9sbGVyKTsKIH0KIAotR0NDb250cm9sbGVyOjpHQ0NvbnRyb2xsZXIoKQot
ewotfQotCi1HQ0NvbnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIoKQotewotfQotCiBKU0NsYXNzUmVm
IEdDQ29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKIHsKICAgICByZXR1cm4gSlNHQ0NvbnRyb2xs
ZXI6OmdDQ29udHJvbGxlckNsYXNzKCk7CkBAIC02NSwxMSArNTcsOSBAQCBzaXplX3QgR0NDb250
cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkKICAgICByZXR1cm4gV0tCdW5kbGVHZXRKYXZhU2Ny
aXB0T2JqZWN0c0NvdW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSk7CiB9
CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09i
amVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dP
YmplY3QsICJHQ0NvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIHNldEds
b2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJHQ0NvbnRyb2xsZXIiLCB0aGlzKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaAppbmRleCBkMzQ5YzFjZTk5MGU4N2Q3ZGYyZmNiOGM4
Mjg4NWJjYTMwNTcyYTBiLi4zNGFiMjQyNTEzOGMxZDc1ZmIyNGEyNTEwNzQzNjc4ZDgxOWVkYzIy
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29u
dHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0ND
b250cm9sbGVyLmgKQEAgLTI2LDI2ICsyNiwyNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJKU1dyYXBwYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4
dFJlZjsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIEdDQ29udHJvbGxlciA6IHB1YmxpYyBK
U1dyYXBwYWJsZSB7CitjbGFzcyBHQ0NvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgSlNXcmFwcGFi
bGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R0NDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAg
ICB2aXJ0dWFsIH5HQ0NvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKIAotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBw
ZXJDbGFzcygpOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAg
ICAgdm9pZCBjb2xsZWN0KCk7CiAgICAgdm9pZCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9v
bCB3YWl0VW50aWxEb25lKTsKICAgICBzaXplX3QgZ2V0SlNPYmplY3RDb3VudCgpOwogCiBwcml2
YXRlOgotICAgIEdDQ29udHJvbGxlcigpOworICAgIEdDQ29udHJvbGxlcigpID0gZGVmYXVsdDsK
KworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggN2FlODFiYjRiNTkwOTZjNThjOGI1YTE0Yzg4
YzRjMzNmOGMxNDU3MS4uYmJlOTNkYzVjZmYwMDAwM2IyMTM5ZDA1ZGRiNThkMTMwMGYxMjUwNCAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHAKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJJbmplY3RlZEJ1
bmRsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgorI2luY2x1ZGUgIkRpY3Rpb25h
cnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKLSNpbmNsdWRl
ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVu
ZGxlLmg+CkBAIC0xMTgsMTggKzExOCwxMyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRDcmVh
dGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIGlmICghaXNNYWluUGFnZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluaXRpYWxpemF0aW9uIikp
OwogICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOwogICAgIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKG1f
YnVuZGxlLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXN1bHQpOworICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShtX2J1bmRsZSwgdG9XSygiSW5pdGlhbGl6YXRpb24i
KS5nZXQoKSwgbnVsbHB0ciwgJnJlc3VsdCk7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECi0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJlc3VsdCkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gaW5pdGlhbGl6
YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KHJl
c3VsdCkpOworICAgIGF1dG8gaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhkaWN0
aW9uYXJ5VmFsdWUocmVzdWx0KSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVz
dW1lVGVzdGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJl
c3VtZVRlc3RpbmciKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VtZVRlc3RpbmdWYWx1ZSA9IFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkoaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5LmdldCgpLCByZXN1
bWVUZXN0aW5nS2V5LmdldCgpKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmVzdW1lVGVzdGlu
Z1ZhbHVlKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgaWYgKFdLQm9vbGVhbkdldFZh
bHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdW1lVGVzdGluZ1ZhbHVlKSkpCisgICAg
aWYgKGJvb2xlYW5WYWx1ZShpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkuZ2V0KCksICJSZXN1bWVU
ZXN0aW5nIikpCiAgICAgICAgIGJlZ2luVGVzdGluZyhpbml0aWFsaXphdGlvbkRpY3Rpb25hcnku
Z2V0KCksIEJlZ2luZ1Rlc3RpbmdNb2RlOjpSZXN1bWUpOwogfQogCkBAIC0xNzksMTYgKzE3NCwy
NCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldExvY2FsU2V0dGluZ3MoKQogICAgIHNldGxv
Y2FsZShMQ19BTEwsICIiKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKK3Zv
aWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKFdLU3RyaW5nUmVmLCBXS1R5cGVS
ZWYpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFcnJvciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShtX2J1bmRsZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgdG9XSygiRXJyb3IiKS5nZXQo
KSwgdG9XSygiVW5rbm93biIpLmdldCgpKTsKK30KKwordm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9z
dFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBuYW1lLCBXS1R5
cGVSZWYgYm9keSkKK3sKKyAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCB0b1dLKG5h
bWUpLmdldCgpLCBib2R5KTsKK30KKwordm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFBhZ2VNZXNz
YWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBi
b2R5KQoreworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIHRvV0sobmFtZSkuZ2V0
KCksIHRvV0soYm9keSkuZ2V0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBwb3N0R0NUYXNrKHZvaWQq
IGNvbnRleHQpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSByZWludGVycHJldF9jYXN0
PFdLQnVuZGxlUGFnZVJlZj4oY29udGV4dCk7CisgICAgYXV0byBwYWdlID0gcmVpbnRlcnByZXRf
Y2FzdDxXS0J1bmRsZVBhZ2VSZWY+KGNvbnRleHQpOwogICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5yZXBvcnRMaXZlRG9jdW1lbnRzKHBhZ2UpOwogICAgIFdLUmVsZWFzZShwYWdlKTsK
IH0KQEAgLTE5OSw2NyArMjAyLDQ0IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlcG9ydExpdmVE
b2N1bWVudHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiAgICAgV0tCdW5kbGVSZWxlYXNlTWVtb3J5
KG1fYnVuZGxlKTsKIAogICAgIGNvbnN0IGJvb2wgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3Vw
ID0gdHJ1ZTsKLSAgICBhdXRvIGRvY3VtZW50VVJMcyA9IGFkb3B0V0soV0tCdW5kbGVHZXRMaXZl
RG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFn
ZUdyb3VwKSk7Ci0gICAgYXV0byBhY2tNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkxpdmVEb2N1bWVudHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGRvY3VtZW50VVJMcy5nZXQoKSk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsICJMaXZlRG9jdW1lbnRzIiwgYWRvcHRXSyhXS0J1
bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBleGNsdWRlRG9j
dW1lbnRzSW5QYWdlR3JvdXApKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2Vp
dmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQogewogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQmVnaW5UZXN0IikpIHsKICAgICAgICAgQVNTRVJU
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VC
b2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZHVtcFBpeGVsc0tleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBQaXhlbHMiKSk7Ci0g
ICAgICAgIG1fZHVtcFBpeGVscyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGR1bXBQaXhlbHNLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHRpbWVvdXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJU
aW1lb3V0IikpOwotICAgICAgICBtX3RpbWVvdXQgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRz
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0aW1lb3V0S2V5LmdldCgpKSkpKTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyIikpOwotICAgICAgICBtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9
IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGR1bXBKU0NvbnNvbGVMb2dJblN0
ZEVycktleS5nZXQoKSkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNr
TWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2si
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhY2tNZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJlZ2luVGVzdCIpKTsKLSAgICAg
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGFj
a01lc3NhZ2VCb2R5LmdldCgpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIG1fZHVtcFBpeGVscyA9
IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJEdW1wUGl4ZWxzIik7CisgICAg
ICAgIG1fdGltZW91dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
VGltZW91dCIpKSkpOworICAgICAgICBtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIi
KTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsICJBY2siLCAiQmVnaW5UZXN0Iik7CiAg
ICAgICAgIGJlZ2luVGVzdGluZyhtZXNzYWdlQm9keURpY3Rpb25hcnksIEJlZ2luZ1Rlc3RpbmdN
b2RlOjpOZXcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZXNldCIpKSB7CiAgICAgICAgIEFTU0VS
VChtZXNzYWdlQm9keSk7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSlNDT3B0aW9ucyIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGpzY09wdGlvbnNTdHJpbmcgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGpzY09wdGlvbnNLZXkuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IGpzY09wdGlvbnNTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4odmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiSlNDT3B0aW9ucyIpKTsKICAgICAgICAgaWYgKGpzY09wdGlvbnNT
dHJpbmcpIHsKICAgICAgICAgICAgIFN0cmluZyBvcHRpb25zID0gdG9XVEZTdHJpbmcoanNjT3B0
aW9uc1N0cmluZyk7CiAgICAgICAgICAgICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9u
cy51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgfQotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzaG91bGRHQ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNob3VsZEdDIikpOwotICAgICAgICBib29sIHNob3VsZEdDID0gV0tCb29sZWFuR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgc2hvdWxkR0NLZXkuZ2V0KCkpKSk7CisgICAgICAgIGJvb2wg
c2hvdWxkR0MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU2hvdWxkR0Mi
KTsKICAgICAgICAgaWYgKHNob3VsZEdDKQogICAgICAgICAgICAgV0tCdW5kbGVHYXJiYWdlQ29s
bGVjdEphdmFTY3JpcHRPYmplY3RzKG1fYnVuZGxlKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklM
SVRZX0lTT0xBVEVEX1RSRUUpCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheElz
b2xhdGVkTW9kZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFj
Y2Vzc2liaWxpdHlJc29sYXRlZFRyZWUiKSk7Ci0gICAgICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xh
dGVkVHJlZU1vZGUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBheElzb2xh
dGVkTW9kZUtleS5nZXQoKSkpKTsKKyAgICAgICAgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVl
TW9kZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJBY2Nlc3NpYmlsaXR5
SXNvbGF0ZWRUcmVlIik7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBhbGxvd2VkSG9zdHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJBbGxvd2VkSG9zdHMiKSk7Ci0gICAgICAgIFdLVHlwZVJlZiBhbGxvd2VkSG9z
dHNWYWx1ZSA9IFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBhbGxvd2VkSG9zdHNLZXkuZ2V0KCkpOworICAgICAgICBhdXRvIGFsbG93ZWRIb3N0c1ZhbHVl
ID0gdmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQWxsb3dlZEhvc3RzIik7CiAgICAgICAg
IGlmIChhbGxvd2VkSG9zdHNWYWx1ZSAmJiBXS0dldFR5cGVJRChhbGxvd2VkSG9zdHNWYWx1ZSkg
PT0gV0tBcnJheUdldFR5cGVJRCgpKSB7CiAgICAgICAgICAgICBtX2FsbG93ZWRIb3N0cy5jbGVh
cigpOwotCi0gICAgICAgICAgICBXS0FycmF5UmVmIGFsbG93ZWRIb3N0c0FycmF5ID0gc3RhdGlj
X2Nhc3Q8V0tBcnJheVJlZj4oYWxsb3dlZEhvc3RzVmFsdWUpOwotICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDAsIHNpemUgPSBXS0FycmF5R2V0U2l6ZShhbGxvd2VkSG9zdHNBcnJheSk7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlH
ZXRJdGVtQXRJbmRleChhbGxvd2VkSG9zdHNBcnJheSwgaSk7Ci0gICAgICAgICAgICAgICAgaWYg
KGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRlbSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbV9hbGxvd2VkSG9zdHMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0
byBhcnJheSA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KGFsbG93ZWRIb3N0c1ZhbHVlKTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gV0tBcnJheUdldFNpemUoYXJyYXkp
OyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fYWxsb3dlZEhvc3RzLmFwcGVuZCh0
b1dURlN0cmluZyhXS0FycmF5R2V0SXRlbUF0SW5kZXgoYXJyYXksIGkpKSk7CiAgICAgICAgIH0K
IAogICAgICAgICBtX3N0YXRlID0gSWRsZTsKQEAgLTI3NSw5ICsyNTUsNyBAQCB2b2lkIEluamVj
dGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwg
V0tTdHJpbmdSZWYgbQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJHZXRMaXZlRG9jdW1lbnRzIikpIHsKICAgICAgICAgY29uc3QgYm9vbCBleGNs
dWRlRG9jdW1lbnRzSW5QYWdlR3JvdXAgPSBmYWxzZTsKLSAgICAgICAgYXV0byBkb2N1bWVudFVS
THMgPSBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdl
R3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCkpOwotICAgICAgICBhdXRvIGFja01l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGl2ZURv
Y3VtZW50cyIpKTsKLSAgICAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVz
c2FnZU5hbWUuZ2V0KCksIGRvY3VtZW50VVJMcy5nZXQoKSk7CisgICAgICAgIHBvc3RQYWdlTWVz
c2FnZSgiTGl2ZURvY3VtZW50cyIsIGFkb3B0V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxz
KG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MjgsNyArNDA2LDcgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
U3RyaW5nUmVmIG0KICAgICAgICAgVmVjdG9yPFN0cmluZz4gZG9tYWluczsKICAgICAgICAgZG9t
YWlucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0Fy
cmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKKyAgICAgICAgICAgIGF1dG8gaXRl
bSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5zQXJyYXksIGkpOwogICAgICAgICAgICAg
aWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRlbSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSkKICAg
ICAgICAgICAgICAgICBkb21haW5zLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oaXRlbSkpKTsKICAgICAgICAgfQpAQCAtNDQ2LDcgKzQyNCw3IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCBXS1N0cmluZ1JlZiBtCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnM7CiAgICAgICAg
IGRvbWFpbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0g
V0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CisgICAgICAgICAgICBhdXRv
IGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKICAgICAgICAg
ICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkp
CiAgICAgICAgICAgICAgICAgZG9tYWlucy51bmNoZWNrZWRBcHBlbmQodG9XVEZTdHJpbmcoc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAgICAgIH0KQEAgLTQ2NywxNyArNDQ1
LDEwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDYWxsVUlTaWRlU2NyaXB0Q2FsbGJh
Y2siKSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
c3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc3VsdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlJlc3VsdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDYWxsYmFja0lEIikpOwotCi0gICAgICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSAodW5zaWdu
ZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNhbGxiYWNrSURLZXkuZ2V0KCkp
KSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgcmVzdWx0U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCByZXN1bHRLZXkuZ2V0KCkpKTsKLSAgICAgICAgYXV0byByZXN1bHRKU1N0cmluZyA9IHRvSlMo
cmVzdWx0U3RyaW5nKTsKLQotICAgICAgICBtX3Rlc3RSdW5uZXItPnJ1blVJU2NyaXB0Q2FsbGJh
Y2soY2FsbGJhY2tJRCwgcmVzdWx0SlNTdHJpbmcuZ2V0KCkpOworICAgICAgICBhdXRvIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAg
IGF1dG8gY2FsbGJhY2tJRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNh
bGxiYWNrSUQiKTsKKyAgICAgICAgYXV0byByZXN1bHRTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJSZXN1bHQiKTsKKyAgICAgICAgbV90ZXN0UnVubmVyLT5ydW5V
SVNjcmlwdENhbGxiYWNrKGNhbGxiYWNrSUQsIHRvSlMocmVzdWx0U3RyaW5nKS5nZXQoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ5OCwyOSArNDY5LDE3IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBX
S1N0cmluZ1JlZiBtCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQi
KSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXMiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BQ
cmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rp
b25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BQcmV2YWxl
bnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24iKSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZWRpYW5EYXlzU2luY2VVc2VySW50
ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNZWRpYW5EYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkiKSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRo
b3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVk
aWFuU3ViUmVzb3VyY2VXaXRob3V0VUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhv
dXRVSSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcDNNZWRpYW5EYXRh
UmVjb3Jkc1JlbW92ZWRXaXRob3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUb3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJIikpOwotICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMgPSAodW5z
aWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRl
cmFjdGlvbktleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcFByZXZhbGVudFJl
c291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiA9ICh1bnNp
Z25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wUHJldmFsZW50UmVzb3Vy
Y2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uS2V5LmdldCgpKSkp
OwotICAgICAgICB1bnNpZ25lZCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxl
bnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVu
dFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWdu
ZWQgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJID0gKHVuc2lnbmVkKVdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRoVUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcDNNZWRpYW5TdWJGcmFt
ZVdpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
dG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25l
ZCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSUtleS5n
ZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhv
dXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01l
ZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSUtleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWdu
ZWQgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3Zl
ZFdpdGhvdXRVSUtleS5nZXQoKSkpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIG51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
TnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMiKTsKKyAgICAgICAgYXV0byBudW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24iKTsKKyAgICAgICAgYXV0byBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJOdW1iZXJP
ZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0
byB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50
ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BQcmV2YWxl
bnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24iKTsK
KyAgICAgICAgYXV0byBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNv
dXJjZVdpdGhVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJNZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhV
c2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNv
dXJjZXNXaXRoVUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTnVt
YmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFu
U3ViRnJhbWVXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJU
b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFuU3Vi
UmVzb3VyY2VXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJU
b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFu
VW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiVG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSIpOworICAgICAgICBhdXRv
IHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJUb3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJ
Iik7CiAKICAgICAgICAgbV90ZXN0UnVubmVyLT5zdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2Fs
bGJhY2sobnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMsIG51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0
VXNlckludGVyYWN0aW9uLCB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25E
YXlzU2luY2VVc2VySW50ZXJhY3Rpb24sIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblBy
ZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiwgdG9wM051bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVJLCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUksIHRvcDNNZWRpYW5T
dWJSZXNvdXJjZVdpdGhvdXRVSSwgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwg
dG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSk7CiAgICAgICAgIHJldHVybjsK
QEAgLTU0MSwzMSArNTAwLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3Nh
Z2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXJyb3IiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVbmtub3duIikpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKHBhZ2UsIGVycm9yTWVzc2FnZU5hbWUuZ2V0KCksIGVycm9yTWVzc2FnZUJv
ZHkuZ2V0KCkpOwotfQotCi1ib29sIEluamVjdGVkQnVuZGxlOjpib29sZWFuRm9yS2V5KFdLRGlj
dGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCi17Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHdrS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhrZXkpKTsKLSAgICBXS1R5cGVSZWYgdmFsdWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KGRpY3Rpb25hcnksIHdrS2V5LmdldCgpKTsKLSAgICBpZiAoV0tHZXRUeXBlSUQodmFsdWUp
ICE9IFdLQm9vbGVhbkdldFR5cGVJRCgpKSB7Ci0gICAgICAgIG91dHB1dFRleHQobWFrZVN0cmlu
ZygiQm9vbGVhbiB2YWx1ZSBmb3Iga2V5Iiwga2V5LCAiIG5vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5
XG4iKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIFdLQm9vbGVh
bkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4odmFsdWUpKTsKLX0KLQotU3RyaW5n
IEluamVjdGVkQnVuZGxlOjpzdHJpbmdGb3JLZXkoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnks
IGNvbnN0IGNoYXIqIGtleSkKLXsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGtleSkpOwotICAgIFdLU3Ry
aW5nUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkoZGljdGlvbmFyeSwgd2tLZXkuZ2V0KCkpKTsKLSAgICBpZiAoIXZhbHVlKSB7Ci0g
ICAgICAgIG91dHB1dFRleHQobWFrZVN0cmluZygiU3RyaW5nIHZhbHVlIGZvciBrZXkiLCBrZXks
ICIgbm90IGZvdW5kIGluIGRpY3Rpb25hcnlcbiIpKTsKLSAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0gICAgfQotICAgIHJldHVybiB0b1dURlN0cmluZyh2YWx1ZSk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJFcnJvciIsICJVbmtub3duIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OmJlZ2luVGVzdGluZyhXS0RpY3Rpb25hcnlSZWYgc2V0dGluZ3MsIEJlZ2luZ1Rlc3RpbmdNb2Rl
IHRlc3RpbmdNb2RlKQpAQCAtNTk4LDExICs1MzMsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6
YmVnaW5UZXN0aW5nKFdLRGljdGlvbmFyeVJlZiBzZXR0aW5ncywgQmVnaW5nVGVzdGluZ01vZGUg
dGUKICAgICBXS0J1bmRsZVNldEFsbG93U3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMUyhtX2J1bmRs
ZSwgbV9wYWdlR3JvdXAsIGZhbHNlKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
V0tCdW5kbGVQYWdlU2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmlndXJhdGlvbihwYWdlKCktPnBh
Z2UoKSwgIWJvb2xlYW5Gb3JLZXkoc2V0dGluZ3MsICJVc2VGbGV4aWJsZVZpZXdwb3J0IikpOwor
ICAgIFdLQnVuZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24ocGFnZSgp
LT5wYWdlKCksICFib29sZWFuVmFsdWUoc2V0dGluZ3MsICJVc2VGbGV4aWJsZVZpZXdwb3J0Iikp
OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6
OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhzdHJpbmdGb3JLZXko
c2V0dGluZ3MsICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpKTsKKyAgICBXZWJDb3Jl
VGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyh0
b1dURlN0cmluZyhzdHJpbmdWYWx1ZShzZXR0aW5ncywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzIikpKTsKICNlbmRpZgogCiAgICAgbV90ZXN0UnVubmVyLT5zZXRQbHVnaW5zRW5hYmxl
ZCh0cnVlKTsKQEAgLTY2MCwyNSArNTk1LDE1IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRvbmUo
KQogICAgIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPnJlc2V0VG9Db25zaXN0ZW50U3RhdGUo
KTsKICNlbmRpZgogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRvbmVNZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvbmUiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gZG9uZU1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHRJc1BlbmRpbmciKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBwaXhlbFJlc3VsdElzUGVuZGluZyA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgcGl4ZWxSZXN1bHRJc1BlbmRpbmdLZXkuZ2V0KCksIHBp
eGVsUmVzdWx0SXNQZW5kaW5nLmdldCgpKTsKLQotICAgIGlmICghbV9waXhlbFJlc3VsdElzUGVu
ZGluZykgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGl4ZWxSZXN1bHRLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaXhlbFJlc3VsdCIpKTsK
LSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIHBpeGVs
UmVzdWx0S2V5LmdldCgpLCBtX3BpeGVsUmVzdWx0LmdldCgpKTsKLSAgICB9Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcmVwYWludFJlY3RzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVwYWludFJlY3RzIikpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCByZXBhaW50UmVjdHNLZXkuZ2V0KCksIG1fcmVw
YWludFJlY3RzLmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9SZXN1
bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdWRpb1Jlc3Vs
dCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgYXVk
aW9SZXN1bHRLZXkuZ2V0KCksIG1fYXVkaW9SZXN1bHQuZ2V0KCkpOworICAgIHNldFZhbHVlKGJv
ZHksICJQaXhlbFJlc3VsdElzUGVuZGluZyIsIG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpOworICAg
IGlmICghbV9waXhlbFJlc3VsdElzUGVuZGluZykKKyAgICAgICAgc2V0VmFsdWUoYm9keSwgIlBp
eGVsUmVzdWx0IiwgbV9waXhlbFJlc3VsdC5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlJl
cGFpbnRSZWN0cyIsIG1fcmVwYWludFJlY3RzLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
QXVkaW9SZXN1bHQiLCBtX2F1ZGlvUmVzdWx0LmdldCgpKTsKIAotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgZG9u
ZU1lc3NhZ2VOYW1lLmdldCgpLCBkb25lTWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2Uo
KSwgdG9XSygiRG9uZSIpLmdldCgpLCBib2R5LmdldCgpKTsKIAogICAgIGNsb3NlT3RoZXJQYWdl
cygpOwogCkBAIC02OTEsOSArNjE2LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6Y2xvc2VPdGhl
clBhZ2VzKCkKICAgICBzaXplX3Qgc2l6ZSA9IG1fcGFnZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBwYWdlc1RvQ2xvc2UuYXBwZW5kKG1f
cGFnZXNbaV0tPnBhZ2UoKSk7Ci0gICAgc2l6ZSA9IHBhZ2VzVG9DbG9zZS5zaXplKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFdLQnVuZGxlUGFnZUNs
b3NlKHBhZ2VzVG9DbG9zZVtpXSk7CisgICAgZm9yIChhdXRvJiBwYWdlIDogcGFnZXNUb0Nsb3Nl
KQorICAgICAgICBXS0J1bmRsZVBhZ2VDbG9zZShwYWdlKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6ZHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcyhTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWlsZGVyKQpAQCAtNzA5LDEzICs2MzMsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkdW1w
VG9TdGRFcnIoY29uc3QgU3RyaW5nJiBvdXRwdXQpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
b3V0cHV0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkR1bXBUb1N0ZEVyciIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZUJvZHk7Ci0gICAgaWYgKGF1dG8gdXRmOCA9IG91dHB1dC50cnlHZXRVdGY4KCkpCi0gICAgICAg
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1dGY4
LT5kYXRhKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiT3V0IG9mIG1lbW9yeVxuIikpOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBjb252
ZXJ0IHRvIFVURi04IGluc3RlYWQgb2YgdXNpbmcgdG9XSz8KKyAgICBhdXRvIHN0cmluZyA9IG91
dHB1dC50cnlHZXRVdGY4KCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJEdW1wVG9TdGRFcnIiLCBz
dHJpbmcgPyBzdHJpbmctPmRhdGEoKSA6ICJPdXQgb2YgbWVtb3J5XG4iKTsKIH0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dChjb25zdCBTdHJpbmcmIG91dHB1dCkKQEAgLTcyNCwy
ODAgKzY0NCwxNTUgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dChjb25zdCBTdHJp
bmcmIG91dHB1dCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChvdXRwdXQuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGV4dE91dHB1dCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHk7Ci0gICAgaWYgKGF1dG8g
dXRmOCA9IG91dHB1dC50cnlHZXRVdGY4KCkpCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1dGY4LT5kYXRhKCkpKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiT3V0IG9mIG1lbW9yeVxuIikpOworICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgaGF2
ZSB0byBjb252ZXJ0IHRvIFVURi04IGluc3RlYWQgb2YgdXNpbmcgdG9XSz8KKyAgICBhdXRvIHN0
cmluZyA9IG91dHB1dC50cnlHZXRVdGY4KCk7CiAgICAgLy8gV2UgdXNlIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZSgpIGluc3RlYWQgb2YgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoKSB0byBtYWtlIHN1cmUgdGhhdCBhbGwgdGV4dCBvdXRwdXQKICAg
ICAvLyBpcyBkb25lIHZpYSBhc3luY2hyb25vdXMgSVBDLCBldmVuIGlmIHRoZSBjb25uZWN0aW9u
IGlzIGluIGZ1bGx5IHN5bmNocm9ub3VzIG1vZGUgZHVlIHRvIGEgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoKQogICAgIC8vIGNhbGwuIE90aGVyd2lzZSwgbWVz
c2FnZXMgbG9nZ2VkIHZpYSBzeW5jIGFuZCBhc3luYyBJUEMgbWF5IGVuZCB1cCBvdXQgb2Ygb3Jk
ZXIgYW5kIGNhdXNlIGZsYWtpbmVzcy4KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZUlnbm9y
aW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmlu
Z0Z1bGx5U3luY2hyb25vdXNNb2RlKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJUZXh0T3V0cHV0Iiku
Z2V0KCksIHRvV0soc3RyaW5nID8gc3RyaW5nLT5kYXRhKCkgOiAiT3V0IG9mIG1lbW9yeVxuIiku
Z2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0
dXJuVmFsdWUoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWZvcmVV
bmxvYWRSZXR1cm5WYWx1ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkJlZm9yZVVubG9hZFJldHVyblZhbHVl
IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OnBvc3RBZGRDaHJvbWVJbnB1dEZpZWxkKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJBZGRDaHJvbWVJbnB1dEZpZWxkIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJBZGRDaHJvbWVJbnB1dEZpZWxkIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnBvc3RSZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJSZW1vdmVDaHJvbWVJbnB1dEZpZWxkIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJSZW1vdmVDaHJvbWVJbnB1dEZpZWxkIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnBvc3RGb2N1c1dlYlZpZXcoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvY3Vz
V2ViVmlldyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRm9jdXNXZWJWaWV3
Iik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRCYWNraW5nU2NhbGVGYWN0b3Io
ZG91YmxlIGJhY2tpbmdTY2FsZUZhY3RvcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRCYWNraW5nU2NhbGVGYWN0b3IiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShiYWNraW5nU2NhbGVGYWN0b3IpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEJhY2tp
bmdTY2FsZUZhY3RvciIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYmFja2luZ1NjYWxlRmFjdG9y
KSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0V2luZG93SXNLZXkoYm9vbCBp
c0tleSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRXaW5kb3dJc0tleSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoaXNLZXkpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0V2luZG93SXNLZXkiKS5nZXQoKSwgYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoaXNLZXkpKS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnBvc3RTZXRWaWV3U2l6ZShkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Vmlld1NpemUiKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gd2lkdGhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJ3aWR0aCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVpZ2h0S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0Rv
dWJsZVJlZj4gd2lkdGhXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUod2lkdGgpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB3aWR0aEtleS5nZXQoKSwgd2lk
dGhXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gaGVpZ2h0V0sgPSBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGhlaWdodCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
bWVzc2FnZUJvZHkuZ2V0KCksIGhlaWdodEtleS5nZXQoKSwgaGVpZ2h0V0suZ2V0KCkpOwotCi0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0
byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZh
bHVlKGJvZHksICJ3aWR0aCIsIHdpZHRoKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiaGVpZ2h0Iiwg
aGVpZ2h0KTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0Vmlld1NpemUiKS5nZXQoKSwgYm9keS5nZXQoKSwg
MCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNhdGlv
bkNsaWNrKHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2siKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShub3RpZmljYXRp
b25JRCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90
aWZpY2F0aW9uSUQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRBZGRzVmlz
aXRlZExpbmtzKGJvb2wgYWRkc1Zpc2l0ZWRMaW5rcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRBZGRzVmlzaXRlZExpbmtzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShhZGRzVmlzaXRlZExpbmtz
KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRB
ZGRzVmlzaXRlZExpbmtzIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWRkc1Zpc2l0ZWRMaW5r
cykpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRHZW9sb2NhdGlv
blBlcm1pc3Npb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIs
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91Ymxl
IGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJs
ZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVk
ZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJv
dmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91Ymxl
IGZsb29yTGV2ZWwpCit2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwg
T3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3Vy
YWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9w
dGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxhdGl0dWRlS2V5V0sg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsYXRpdHVkZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbGF0aXR1ZGVXSyA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUobGF0aXR1ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5Lmdl
dCgpLCBsYXRpdHVkZUtleVdLLmdldCgpLCBsYXRpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBsb25naXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImxvbmdpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJs
ZVJlZj4gbG9uZ2l0dWRlV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGxvbmdpdHVkZSkpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGxvbmdpdHVkZUtleVdL
LmdldCgpLCBsb25naXR1ZGVXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gYWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImFjY3VyYWN5IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBhY2N1cmFjeVdLID0g
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShhY2N1cmFjeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFjY3VyYWN5S2V5V0suZ2V0KCksIGFjY3VyYWN5V0suZ2V0
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1ZGVLZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1
ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc0FsdGl0dWRlV0sg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92aWRlc0FsdGl0dWRlKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZUtleVdLLmdl
dCgpLCBwcm92aWRlc0FsdGl0dWRlV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGFsdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJhbHRpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gYWx0aXR1ZGVX
SyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYWx0aXR1ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhbHRpdHVkZUtleVdLLmdldCgpLCBhbHRpdHVkZVdL
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBy
b3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJv
dmlkZXNBbHRpdHVkZUFjY3VyYWN5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdl
Qm9keS5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5S2V5V0suZ2V0KCksIHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBhbHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJhbHRpdHVkZUFjY3VyYWN5IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVm
PiBhbHRpdHVkZUFjY3VyYWN5V0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGFsdGl0dWRlQWNj
dXJhY3kpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhbHRp
dHVkZUFjY3VyYWN5S2V5V0suZ2V0KCksIGFsdGl0dWRlQWNjdXJhY3lXSy5nZXQoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNIZWFkaW5nS2V5V0sgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0hlYWRpbmciKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc0hlYWRpbmdXSyA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKHByb3ZpZGVzSGVhZGluZykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
bWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzSGVhZGluZ0tleVdLLmdldCgpLCBwcm92aWRlc0hl
YWRpbmdXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVhZGluZ0tl
eVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVhZGluZyIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gaGVhZGluZ1dLID0gYWRvcHRXSyhXS0RvdWJs
ZUNyZWF0ZShoZWFkaW5nKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5n
ZXQoKSwgaGVhZGluZ0tleVdLLmdldCgpLCBoZWFkaW5nV0suZ2V0KCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzU3BlZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzU3BlZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBwcm92aWRlc1NwZWVkV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShw
cm92aWRlc1NwZWVkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgcHJvdmlkZXNTcGVlZEtleVdLLmdldCgpLCBwcm92aWRlc1NwZWVkV0suZ2V0KCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzcGVlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJs
ZVJlZj4gc3BlZWRXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc3BlZWQpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBzcGVlZEtleVdLLmdldCgpLCBzcGVl
ZFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0Zsb29y
TGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3Zp
ZGVzRmxvb3JMZXZlbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVz
Rmxvb3JMZXZlbFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNGbG9vckxldmVs
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNG
bG9vckxldmVsS2V5V0suZ2V0KCksIHByb3ZpZGVzRmxvb3JMZXZlbFdLLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmbG9vckxldmVsIikpOwotICAgIFdLUmV0YWluUHRy
PFdLRG91YmxlUmVmPiBmbG9vckxldmVsV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGZsb29y
TGV2ZWwpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBmbG9v
ckxldmVsS2V5V0suZ2V0KCksIGZsb29yTGV2ZWxXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgImxhdGl0dWRlIiwgbGF0aXR1ZGUpOworICAg
IHNldFZhbHVlKGJvZHksICJsb25naXR1ZGUiLCBsb25naXR1ZGUpOworICAgIHNldFZhbHVlKGJv
ZHksICJhY2N1cmFjeSIsIGFjY3VyYWN5KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiYWx0aXR1ZGUi
LCBhbHRpdHVkZSk7CisgICAgc2V0VmFsdWUoYm9keSwgImFsdGl0dWRlQWNjdXJhY3kiLCBhbHRp
dHVkZUFjY3VyYWN5KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiaGVhZGluZyIsIGhlYWRpbmcpOwor
ICAgIHNldFZhbHVlKGJvZHksICJzcGVlZCIsIHNwZWVkKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
Zmxvb3JMZXZlbCIsIGZsb29yTGV2ZWwpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb24iLCBib2R5KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9y
TWVzc2FnZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvblVuYXZhaWxhYmxlRXJyb3IiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2UpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9y
IiwgZXJyb3JNZXNzYWdlKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZTo6aXNHZW9sb2NhdGlv
blByb3ZpZGVyQWN0aXZlKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc0dl
b2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpOwotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAw
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBpc0FjdGl2ZSA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihyZXN1bHRUb1Bhc3MpKTsKLQotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1
ZShpc0FjdGl2ZS5nZXQoKSk7CisgICAgV0tUeXBlUmVmIHJlc3VsdCA9IG51bGxwdHI7CisgICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdl
KCksIHRvV0soIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKS5nZXQoKSwgMCwgJnJlc3VsdCk7
CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOwogfQogCiB1
bnNpZ25lZCBJbmplY3RlZEJ1bmRsZTo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSBj
b25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkltYWdlQ291bnRJbkdlbmVyYWxQYXN0
ZWJvYXJkIikpOwotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgMCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IGltYWdlQ291bnQgPSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXN1
bHRUb1Bhc3MpKTsKLSAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUlu
dDY0R2V0VmFsdWUoaW1hZ2VDb3VudC5nZXQoKSkpOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBu
dWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCIpLmdl
dCgpLCAwLCAmcmVzdWx0KTsKKyAgICByZXR1cm4gdWludDY0VmFsdWUoYWRvcHRXSyhyZXN1bHQp
LmdldCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVybWlzc2lv
bihib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZXJNZWRpYVBlcm1pc3Npb24iKSk7Ci0gICAg
YXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFVzZXJNZWRp
YVBlcm1pc3Npb24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24oKQogewotICAgIGF1
dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJS
ZXNldFVzZXJNZWRpYVBlcm1pc3Npb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIlJlc2V0VXNlck1lZGlhUGVybWlzc2lvbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
OjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbihib29sIHBlcm1pc3Np
b24sIFdLU3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luKQogewotICAg
IGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbiIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBwZXJtaXNzaW9uS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJwZXJtaXNzaW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcGVybWlzc2lv
bldLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocGVybWlzc2lvbikpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBlcm1pc3Npb25LZXlXSy5nZXQoKSwgcGVy
bWlzc2lvbldLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5L
ZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5n
ZXQoKSwgb3JpZ2luKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmln
aW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9y
aWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJl
bnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFyZW50T3JpZ2luKTsKLQotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGVybWlzc2lvbiIsIHBlcm1pc3Npb24pOworICAg
IHNldFZhbHVlKGJvZHksICJvcmlnaW4iLCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJvZHksICJw
YXJlbnRPcmlnaW4iLCBwYXJlbnRPcmlnaW4pOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0VXNl
ck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4iLCBib2R5KTsKIH0KIAogdW5zaWdu
ZWQgSW5qZWN0ZWRCdW5kbGU6OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmln
aW4oV0tTdHJpbmdSZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pIGNvbnN0CiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3Vu
dEZvck9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KG1lc3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5nZXQoKSwgb3JpZ2luKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJlbnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFy
ZW50T3JpZ2luKTsKLQotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXN1bHRUb1Bhc3MpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBjb3VudCA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KHJlc3VsdFRvUGFzcykpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihXS1VJbnQ2NEdldFZhbHVlKGNvdW50LmdldCgpKSk7CisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJv
cmlnaW4iLCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJvZHksICJwYXJlbnRPcmlnaW4iLCBwYXJl
bnRPcmlnaW4pOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOworICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dL
KCJVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikuZ2V0KCksIGJvZHku
Z2V0KCksICZyZXN1bHQpOworICAgIHJldHVybiB1aW50NjRWYWx1ZShhZG9wdFdLKHJlc3VsdCku
Z2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oV0tTdHJpbmdSZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBw
YXJlbnRPcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzZXRVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0
YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIG9yaWdpbktleVdLLmdldCgp
LCBvcmlnaW4pOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktl
eVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2lu
IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBhcmVudE9y
aWdpbktleVdLLmdldCgpLCBwYXJlbnRPcmlnaW4pOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OworICAgIHNldFZhbHVlKGJvZHksICJvcmlnaW4iLCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJv
ZHksICJwYXJlbnRPcmlnaW4iLCBwYXJlbnRPcmlnaW4pOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
UmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIiwgYm9keSk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5h
YmxlZCwgYm9vbCBwZXJtaXNzaXZlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEN1
c3RvbVBvbGljeURlbGVnYXRlIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlZEtleVdLID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZW5hYmxlZCIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IGVuYWJsZWRXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVu
YWJsZWQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBlbmFi
bGVkS2V5V0suZ2V0KCksIGVuYWJsZWRXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gcGVybWlzc2l2ZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygicGVybWlzc2l2ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBl
cm1pc3NpdmVXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHBlcm1pc3NpdmUpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwZXJtaXNzaXZlS2V5V0suZ2V0
KCksIHBlcm1pc3NpdmVXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShw
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgImVuYWJsZWQiLCBlbmFibGVkKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
cGVybWlzc2l2ZSIsIHBlcm1pc3NpdmUpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0Q3VzdG9t
UG9saWN5RGVsZWdhdGUiLCBib2R5KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0SGlk
ZGVuKGJvb2wgaGlkZGVuKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEhpZGRlbiIp
KTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBpc0luaXRpYWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImhpZGRlbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlz
SW5pdGlhbFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGlkZGVuKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgaXNJbml0aWFsS2V5V0suZ2V0KCksIGlz
SW5pdGlhbFdLLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8g
Ym9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiaGlkZGVuIiwgaGlkZGVuKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEhpZGRl
biIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRDYWNoZU1vZGVs
KGludCBtb2RlbCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDYWNoZU1vZGVsIikp
OwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tV
SW50NjRDcmVhdGUobW9kZWwpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0Q2FjaGVNb2RlbCIpLmdldCgp
LCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGVsKSkuZ2V0KCksIG51bGxwdHIpOwogfQogCiBi
b29sIEluamVjdGVkQnVuZGxlOjpzaG91bGRQcm9jZXNzV29ya1F1ZXVlKCkgY29uc3QKQEAgLTEw
MDUsMTEwICs4MDAsNzMgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtR
dWV1ZSgpIGNvbnN0CiAgICAgaWYgKCFtX3VzZVdvcmtRdWV1ZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNXb3JrUXVldWVFbXB0eSIpKTsKLSAg
ICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IDAsICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gaXNFbXB0
eSA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXN1bHRUb1Bhc3MpKTsKKyAg
ICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiSXNXb3JrUXVldWVF
bXB0eSIpLmdldCgpLCAwLCAmcmVzdWx0KTsKIAogICAgIC8vIFRoZSBJUEMgZmFpbGVkLiBUaGlz
IGhhcHBlbnMgd2hlbiBzd2FwcGluZyBwcm9jZXNzZXMgb24gbmF2aWdhdGlvbiBiZWNhdXNlIHRo
ZSBXZWJQYWdlUHJveHkgdW5yZWdpc3RlcnMgaXRzZWxmCiAgICAgLy8gYXMgYSBNZXNzYWdlUmVj
ZWl2ZXIgZnJvbSB0aGUgb2xkIFdlYlByb2Nlc3NQcm94eSBhbmQgcmVnaXN0ZXIgaXRzZWxmIHdp
dGggdGhlIG5ldyBXZWJQcm9jZXNzUHJveHkgaW5zdGVhZC4KLSAgICBpZiAoIWlzRW1wdHkpCisg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiAhV0tC
b29sZWFuR2V0VmFsdWUoaXNFbXB0eS5nZXQoKSk7CisgICAgYXV0byBpc0VtcHR5ID0gYm9vbGVh
blZhbHVlKGFkb3B0V0socmVzdWx0KS5nZXQoKSk7CisgICAgcmV0dXJuICFpc0VtcHR5OwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlOjpwcm9jZXNzV29ya1F1ZXVlKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJQcm9jZXNzV29ya1F1ZXVlIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJQcm9jZXNzV29ya1F1ZXVlIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnF1ZXVlQmFja05hdmlnYXRpb24odW5zaWduZWQgaG93RmFyQmFja3dhcmQpCiB7CiAgICAgbV91
c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVCYWNr
TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvd0ZhckJhY2t3YXJkKSk7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUJhY2tOYXZpZ2F0aW9uIiwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJCYWNrd2FyZCkpKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJGb3J3YXJk
KQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJGb3J3YXJkKSk7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUZv
cndhcmROYXZpZ2F0aW9uIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJGb3J3YXJkKSkp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWQoV0tTdHJpbmdSZWYgdXJsLCBX
S1N0cmluZ1JlZiB0YXJnZXQsIGJvb2wgc2hvdWxkT3BlbkV4dGVybmFsVVJMcykKIHsKICAgICBt
X3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZUxv
YWQiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBsb2FkRGF0
YSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB1cmxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJ1cmwiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwg
dXJsS2V5LmdldCgpLCB1cmwpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRhcmdl
dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRhcmdldCIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCB0YXJnZXRLZXkuZ2V0KCks
IHRhcmdldCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBzaG91
bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGRP
cGVuRXh0ZXJuYWxVUkxzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQo
KSwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc0tleS5nZXQoKSwgc2hvdWxkT3BlbkV4dGVybmFsVVJM
c1ZhbHVlLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbG9hZERhdGEuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAidXJsIiwgdXJsKTsKKyAgICBzZXRWYWx1ZShib2R5LCAidGFyZ2V0IiwgdGFyZ2V0KTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAic2hvdWxkT3BlbkV4dGVybmFsVVJMcyIsIHNob3VsZE9wZW5FeHRl
cm5hbFVSTHMpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVMb2FkIiwgYm9keS5nZXQoKSk7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoV0tTdHJpbmdS
ZWYgY29udGVudCwgV0tTdHJpbmdSZWYgYmFzZVVSTCwgV0tTdHJpbmdSZWYgdW5yZWFjaGFibGVV
UkwpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUXVldWVMb2FkSFRNTFN0cmluZyIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IGxvYWREYXRhID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNvbnRlbnRLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb250ZW50IikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIGNvbnRlbnRLZXkuZ2V0KCksIGNvbnRlbnQp
OwotCi0gICAgaWYgKGJhc2VVUkwpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGJhc2VVUkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJiYXNl
VVJMIikpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCBiYXNl
VVJMS2V5LmdldCgpLCBiYXNlVVJMKTsKLSAgICB9Ci0KLSAgICBpZiAodW5yZWFjaGFibGVVUkwp
IHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidW5yZWFjaGFibGVVUkwiKSk7
Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIHVucmVhY2hhYmxl
VVJMS2V5LmdldCgpLCB1bnJlYWNoYWJsZVVSTCk7Ci0gICAgfQotCi0gICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBsb2FkRGF0YS5n
ZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJjb250ZW50IiwgY29udGVudCk7CisgICAgaWYgKGJh
c2VVUkwpCisgICAgICAgIHNldFZhbHVlKGJvZHksICJiYXNlVVJMIiwgYmFzZVVSTCk7CisgICAg
aWYgKHVucmVhY2hhYmxlVVJMKQorICAgICAgICBzZXRWYWx1ZShib2R5LCAidW5yZWFjaGFibGVV
UkwiLCB1bnJlYWNoYWJsZVVSTCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUxvYWRIVE1M
U3RyaW5nIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlUmVsb2FkKCkK
IHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJRdWV1ZVJlbG9hZCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVS
ZWxvYWQiKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVMb2FkaW5nU2NyaXB0KFdL
U3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZUxvYWRpbmdTY3JpcHQiKSk7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBzY3JpcHQp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVMb2FkaW5nU2NyaXB0Iiwgc2NyaXB0KTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KFdLU3RyaW5nUmVm
IHNjcmlwdCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJRdWV1ZU5vbkxvYWRpbmdTY3JpcHQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBzY3JpcHQpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiUXVldWVOb25Mb2FkaW5nU2NyaXB0Iiwgc2NyaXB0KTsKIH0KIAog
Ym9vbCBJbmplY3RlZEJ1bmRsZTo6aXNBbGxvd2VkSG9zdChXS1N0cmluZ1JlZiBob3N0KQpAQCAt
MTE0Myw0ICs5MDEsNzIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6dGV4dEZpZWxkRGlkRW5kRWRp
dGluZygpCiAgICAgbV90ZXN0UnVubmVyLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nQ2FsbGJhY2so
KTsKIH0KIAordm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIq
IG5hbWUsIFdLVHlwZVJlZiBib2R5KQoreworICAgIHBvc3RQYWdlTWVzc2FnZShwYWdlKCktPnBh
Z2UoKSwgbmFtZSwgYm9keSk7Cit9CisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVz
c2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBib2R5KQoreworICAgIHBvc3RQYWdl
TWVzc2FnZShuYW1lLCB0b1dLKGJvZHkpKTsKK30KKwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBj
aGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZh
bHVlKTsKK30KKwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2
YWx1ZSkKK3sKKyAgICBwb3N0TWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHZh
bHVlKSkuZ2V0KCkpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hh
ciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSku
Z2V0KCksIHZhbHVlLCBudWxscHRyKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZShuYW1lLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwor
dm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVpbnQ2NF90IHZh
bHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKQoreworICAgIHVpbnQ2NF90IHByb21v
dGVkVmFsdWUgPSB2YWx1ZTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIHByb21v
dGVkVmFsdWUpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciog
bmFtZSwgZG91YmxlIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UobmFtZSwg
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0UGFn
ZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIGlmIChh
dXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpKQorICAgICAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZh
bHVlKTsKK30KKwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2
YWx1ZSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2Uo
Y29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIGlmIChhdXRvIHBhZ2Ug
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpKQorICAgICAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlLT5wYWdlKCksIHRvV0sobmFt
ZSkuZ2V0KCksIHZhbHVlLCBudWxscHRyKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0
KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAppbmRleCBiNzYwMTQzNmYw
YzY3Mjg1NjMzYTA4ZTI1Zjk0MmE4YWE5OGQ5NzBiLi44YWU2YWEyODBhMGQ5MWFiYmEyMTNmNTRi
ZWFiZTcwMmIxNGUyNTI2IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoK
IAogICAgIC8vIEdlb2xvY2F0aW9uLgogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KGJvb2wpOwotICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0
dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRp
dHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91
YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGlu
ZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxl
dmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwg
T3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3Vy
YWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9w
dGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKICAgICBi
b29sIGlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0OwogCkBAIC0xNjksOCArMTY5
LDEzIEBAIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBCZWdpbmdUZXN0aW5nTW9kZSB7IE5ldywg
UmVzdW1lIH07CiAgICAgdm9pZCBiZWdpblRlc3RpbmcoV0tEaWN0aW9uYXJ5UmVmIGluaXRpYWxT
ZXR0aW5ncywgQmVnaW5nVGVzdGluZ01vZGUpOwogCi0gICAgYm9vbCBib29sZWFuRm9yS2V5KFdL
RGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKLSAgICBTdHJpbmcgc3RyaW5nRm9yS2V5
KFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKyAgICBzdGF0aWMgdm9pZCBwb3N0
UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmLCBjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYg
Ym9keSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgcG9zdFBhZ2VNZXNz
YWdlKFdLQnVuZGxlUGFnZVJlZiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8
VD4mIGJvZHkpOworICAgIHN0YXRpYyB2b2lkIHBvc3RQYWdlTWVzc2FnZShXS0J1bmRsZVBhZ2VS
ZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGJvZHkpOworCisgICAgdm9pZCBwb3N0
UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIGJvZHkgPSBudWxscHRyKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBXS1JldGFpblB0cjxUPiYgYm9keSk7CisgICAgdm9pZCBwb3N0UGFnZU1l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogYm9keSk7CiAKICAgICBXS0J1bmRs
ZVJlZiBtX2J1bmRsZSB7IG51bGxwdHIgfTsKICAgICBXS0J1bmRsZVBhZ2VHcm91cFJlZiBtX3Bh
Z2VHcm91cCB7IG51bGxwdHIgfTsKQEAgLTIxMCw0ICsyMTUsMzMgQEAgcHJpdmF0ZToKICAgICBz
aXplX3QgbV91c2VyU2NyaXB0SW5qZWN0ZWRDb3VudCB7IDAgfTsKIH07CiAKK3ZvaWQgcG9zdE1l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cik7Cit2b2lk
IHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKTsKK3ZvaWQgcG9z
dE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpOworCit2b2lkIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0g
bnVsbHB0cik7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwg
Ym9vbCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFt
ZSwgdWludDY0X3QgdmFsdWUpOwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNo
YXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShj
b25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpOwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNz
YWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKKwordm9pZCBwb3N0UGFn
ZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cik7Cit2
b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKTsKK3ZvaWQg
cG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKKwor
dm9pZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVS
ZWYgdmFsdWUgPSBudWxscHRyKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoY29u
c3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShXS0J1
bmRsZVBhZ2VSZWYgcGFnZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4m
IGJvZHkpCit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsIG5hbWUsIGJvZHkuZ2V0KCkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0UGFnZU1l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkpCit7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKG5hbWUsIGJvZHkuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAppbmRleCBkODlmZWFmOWI2ZGFlNGM5Njg1MzFm
MGFiNjM4NTg5MWIxNGY5OGY4Li4yZjU2NDI3NzMxMTZkOWYxMDI0ZmE2ZmJlOWRjMzUyMGIxNWUx
OGE5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCkBAIC02MCw1MCArNjAsMTggQEAgdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIHBy
b3BlcnR5VmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29u
c3QgY2hhciogcHJvcGVydHlOYW1lKQorc3RhdGljIGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVy
dHkoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAo
IW9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWVTdHJpbmcg
PSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKLSAg
ICByZXR1cm4gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFt
ZVN0cmluZy5nZXQoKSwgMCk7Ci19Ci0KLXN0YXRpYyBkb3VibGUgcHJvcGVydHlWYWx1ZURvdWJs
ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBw
cm9wZXJ0eU5hbWUpCi17Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IHByb3BlcnR5VmFsdWUoY29u
dGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIDApOyAg
ICAKLX0KLQotc3RhdGljIGludCBwcm9wZXJ0eVZhbHVlSW50KEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKLXsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihwcm9wZXJ0eVZhbHVlRG91YmxlKGNvbnRleHQsIG9iamVj
dCwgcHJvcGVydHlOYW1lKSk7ICAgIAotfQotCi1zdGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQ
cm9wZXJ0eVZhbHVlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNvbnN0IGNoYXIqIHByb3BlcnR5
TmFtZSkKLXsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5VmFsdWVEb3Vi
bGUoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBwcm9wZXJ0eU5h
bWUpOworICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChmcmFtZSk7CisgICAgcmV0dXJuIG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRH
ZXRHbG9iYWxPYmplY3QoY29udGV4dCksIG5hbWUpOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcg
ZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5vZGVWYWx1
ZSkKIHsKLSAgICBKU1ZhbHVlUmVmIG5vZGVOYW1lVmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRl
eHQsIG5vZGVWYWx1ZSwgIm5vZGVOYW1lIik7Ci0gICAgYXV0byBqc1N0cmluZ05vZGVOYW1lID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBub2RlTmFtZVZhbHVlLCAwKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5vZGVOYW1lID0gdG9XSyhqc1N0cmluZ05vZGVO
YW1lKTsKLQotICAgIEpTVmFsdWVSZWYgcGFyZW50Tm9kZSA9IHByb3BlcnR5VmFsdWUoY29udGV4
dCwgbm9kZVZhbHVlLCAicGFyZW50Tm9kZSIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vZGVOYW1lKSk7
Ci0KLSAgICBpZiAocGFyZW50Tm9kZSAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgcGFyZW50
Tm9kZSkpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgPiAiKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4dCwgKEpTT2JqZWN0UmVm
KXBhcmVudE5vZGUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOworICAgIGF1dG8gbmFtZSA9IHRvV1RGU3RyaW5nKHN0cmluZ1Byb3BlcnR5KGNvbnRleHQs
IG5vZGVWYWx1ZSwgIm5vZGVOYW1lIikpOworICAgIGlmIChhdXRvIHBhcmVudE5vZGUgPSBvYmpl
Y3RQcm9wZXJ0eShjb250ZXh0LCBub2RlVmFsdWUsICJwYXJlbnROb2RlIikpCisgICAgICAgIHJl
dHVybiBtYWtlU3RyaW5nKG5hbWUsICIgPiAiLCBkdW1wUGF0aChjb250ZXh0LCBwYXJlbnROb2Rl
KSk7CisgICAgcmV0dXJuIG5hbWU7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBkdW1wUGF0aChX
S0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5k
bGVOb2RlSGFuZGxlUmVmIG5vZGUpCkBAIC0xMjYsNTMgKzk0LDQwIEBAIHN0YXRpYyBXVEY6OlN0
cmluZyByYW5nZVRvU3RyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxk
UmVmIHdvcmxkCiAgICAgaWYgKCFyYW5nZVJlZikKICAgICAgICAgcmV0dXJuICIobnVsbCkiOwog
Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShw
YWdlKTsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdl
dEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKLSAgICBKU1ZhbHVlUmVm
IHJhbmdlVmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdyYXBwZXJGb3JSYW5nZUZv
cldvcmxkKGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOworICAgIGF1dG8gZnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKKyAgICBhdXRvIHJh
bmdlVmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdyYXBwZXJGb3JSYW5nZUZvcldv
cmxkKGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOwogICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3Qo
Y29udGV4dCwgcmFuZ2VWYWx1ZSkpOwotICAgIEpTT2JqZWN0UmVmIHJhbmdlT2JqZWN0ID0gKEpT
T2JqZWN0UmVmKXJhbmdlVmFsdWU7Ci0KLSAgICBKU1ZhbHVlUmVmIHN0YXJ0Tm9kZVZhbHVlID0g
cHJvcGVydHlWYWx1ZShjb250ZXh0LCByYW5nZU9iamVjdCwgInN0YXJ0Q29udGFpbmVyIik7Ci0g
ICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzdGFydE5vZGVWYWx1ZSkpOwotICAg
IEpTT2JqZWN0UmVmIHN0YXJ0Tm9kZU9iamVjdCA9IChKU09iamVjdFJlZilzdGFydE5vZGVWYWx1
ZTsKLQotICAgIEpTVmFsdWVSZWYgZW5kTm9kZVZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0
LCByYW5nZU9iamVjdCwgImVuZENvbnRhaW5lciIpOwotICAgIEFTU0VSVChKU1ZhbHVlSXNPYmpl
Y3QoY29udGV4dCwgZW5kTm9kZVZhbHVlKSk7Ci0gICAgSlNPYmplY3RSZWYgZW5kTm9kZU9iamVj
dCA9IChKU09iamVjdFJlZillbmROb2RlVmFsdWU7Ci0KLSAgICBpbnQgc3RhcnRPZmZzZXQgPSBw
cm9wZXJ0eVZhbHVlSW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRPZmZzZXQiKTsKLSAg
ICBpbnQgZW5kT2Zmc2V0ID0gcHJvcGVydHlWYWx1ZUludChjb250ZXh0LCByYW5nZU9iamVjdCwg
ImVuZE9mZnNldCIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgicmFuZ2UgZnJvbSAiKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZE51bWJlcihzdGFydE9mZnNldCk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgb2YgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4
dCwgc3RhcnROb2RlT2JqZWN0KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIg
dG8gIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoZW5kT2Zmc2V0KTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChkdW1wUGF0aChjb250ZXh0LCBlbmROb2RlT2JqZWN0KSk7Ci0gICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBhdXRvIHJhbmdlT2JqZWN0ID0gKEpTT2JqZWN0UmVm
KXJhbmdlVmFsdWU7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygicmFuZ2UgZnJvbSAiLAorICAg
ICAgICBudW1lcmljUHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJzdGFydE9mZnNldCIp
LAorICAgICAgICAiIG9mICIsCisgICAgICAgIGR1bXBQYXRoKGNvbnRleHQsIG9iamVjdFByb3Bl
cnR5KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRDb250YWluZXIiKSksCisgICAgICAgICIg
dG8gIiwKKyAgICAgICAgbnVtZXJpY1Byb3BlcnR5KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5k
T2Zmc2V0IiksCisgICAgICAgICIgb2YgIiwKKyAgICAgICAgZHVtcFBhdGgoY29udGV4dCwgb2Jq
ZWN0UHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRDb250YWluZXIiKSkKKyAgICAp
OwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IE5hdmlnYXRpb25UeXBlVG9T
dHJpbmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7
CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQ6Ci0gICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsaW5rIGNsaWNrZWQi
KSk7CisgICAgICAgIHJldHVybiB0b1dLKCJsaW5rIGNsaWNrZWQiKTsKICAgICBjYXNlIGtXS0Zy
YW1lTmF2aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSBzdWJtaXR0ZWQiKSk7CisgICAgICAg
IHJldHVybiB0b1dLKCJmb3JtIHN1Ym1pdHRlZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0
aW9uVHlwZUJhY2tGb3J3YXJkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiYmFjay9mb3J3YXJkIikpOworICAgICAgICByZXR1cm4gdG9XSygi
YmFjay9mb3J3YXJkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlUmVsb2FkOgot
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicmVs
b2FkIikpOworICAgICAgICByZXR1cm4gdG9XSygicmVsb2FkIik7CiAgICAgY2FzZSBrV0tGcmFt
ZU5hdmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSByZXN1Ym1pdHRlZCIpKTsKKyAgICAg
ICAgcmV0dXJuIHRvV0soImZvcm0gcmVzdWJtaXR0ZWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2
aWdhdGlvblR5cGVPdGhlcjoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIm90aGVyIikpOworICAgICAgICByZXR1cm4gdG9XSygib3RoZXIiKTsK
ICAgICB9Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImlsbGVnYWwgdmFsdWUiKSk7CisgICAgcmV0dXJuIHRvV0soImlsbGVnYWwgdmFsdWUiKTsKIH0K
IAogc3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xh
cmF0aW9uUmVmIHN0eWxlKQpAQCAtMTg1LDIzICsxNDAsMTQgQEAgc3RhdGljIFdURjo6U3RyaW5n
IHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlKQogICAg
IHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBXVEY6OlN0cmlu
ZyBzZWN1cml0eU9yaWdpblRvU3RyKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luKQorc3RhdGlj
IFdURjo6U3RyaW5nIHN0cmluZyhXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKIHsKLSAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ3sn
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJp
dHlPcmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRv
cHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIo
V0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ30nKTsKLQotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoJ3snLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5D
b3B5UHJvdG9jb2wob3JpZ2luKSkpLCAiLCAiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJp
dHlPcmlnaW5Db3B5SG9zdChvcmlnaW4pKSksICIsICIsIFdLU2VjdXJpdHlPcmlnaW5HZXRQb3J0
KG9yaWdpbiksICd9Jyk7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBmcmFtZVRvU3RyKFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUg
PSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOworICAgIGF1dG8gbmFtZSA9
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CiAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUp
KSB7CiAgICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7CkBAIC0yMzUs
MTIgKzE4MSwxMiBAQCBzdGF0aWMgaW5saW5lIFdURjo6U3RyaW5nIHBhdGhTdWl0YWJsZUZvclRl
c3RSZXN1bHQoV0tVUkxSZWYgZmlsZVVybCkKICAgICBpZiAoIWZpbGVVcmwpCiAgICAgICAgIHJl
dHVybiAiKG51bGwpIjsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY2hlbWVTdHJp
bmcgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJsKSk7CisgICAgYXV0byBzY2hlbWVT
dHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJsKSk7CiAgICAgaWYgKCFpc0xv
Y2FsRmlsZVNjaGVtZShzY2hlbWVTdHJpbmcuZ2V0KCkpKQogICAgICAgICByZXR1cm4gdG9XVEZT
dHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoZmlsZVVybCkpKTsKIAogICAgIFdLQnVuZGxl
RnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxS
ZWY+IG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1l
KSk7CisgICAgYXV0byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJM
KG1haW5GcmFtZSkpOwogICAgIGlmICghbWFpbkZyYW1lVVJMKQogICAgICAgICBtYWluRnJhbWVV
UkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwobWFpbkZyYW1lKSk7
CiAKQEAgLTQzNCw4ICszODAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRl
clRlc3QoKQogICAgIC8vIChzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzgzMzQ+KSwgaG93ZXZlciBmb3IgdGVzdHMsIHdlIHdhbnQgdG8gc3RhcnQgZWFjaCBv
bmUgd2l0aCBhIGNsZWFuIHN0YXRlLgogICAgIFdLQnVuZGxlRnJhbWVGb2N1cyhmcmFtZSk7CiAK
LSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChmcmFtZSk7Ci0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFs
c09iamVjdChjb250ZXh0KTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxz
T2JqZWN0KFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSkpOwogICAgIGFz
c2lnbmVkVXJsc0NhY2hlKCkuY2xlYXIoKTsKIAogICAgIC8vIFVzZXIgc2NyaXB0cyBuZWVkIHRv
IGJlIHJlbW92ZWQgYWZ0ZXIgdGhlIHRlc3QgYW5kIGJlZm9yZSBsb2FkaW5nIGFib3V0OmJsYW5r
LCBhcyBvdGhlcndpc2UgdGhleSB3b3VsZCBydW4gaW4gYWJvdXQ6YmxhbmssIGFuZCBwb3RlbnRp
YWxseSBsZWFrIHJlc3VsdHMgaW50byBhIHN1YnNlcXVlc3QgdGVzdC4KQEAgLTQ1MSw3ICszOTYs
NyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRlclRlc3QoKQogLy8gU3RyaW5n
IG91dHB1dCBtdXN0IGJlIGlkZW50aWNhbCB0byAtW1dlYkZyYW1lIF9kcnRfZGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHRdLgogc3RhdGljIHZvaWQgZHVtcEZyYW1lRGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CisgICAgYXV0byBuYW1lID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKICAgICBpZiAoV0tCdW5kbGVG
cmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkgewogICAgICAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5h
bWUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIm1h
aW4gZnJhbWUiKTsKQEAgLTQ4NiwyNyArNDMxLDIxIEBAIHN0YXRpYyB2b2lkIGR1bXBMb2FkRXZl
bnQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogZXZlbnROYW1lKQogCiBzdGF0
aWMgaW5saW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikK
IHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RD
b3B5VVJMKHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gZmlyc3RQYXJ0eSA9
IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29raWVzKHJlcXVlc3QpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaHR0cE1ldGhvZCA9IGFkb3B0V0soV0tVUkxS
ZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwotCi0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCI8TlNVUkxSZXF1ZXN0IFVSTCAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSkpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiLCBtYWluIGRvY3VtZW50IFVSTCAiKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpKTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgaHR0cCBtZXRob2QgIik7CisgICAg
YXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1
dG8gZmlyc3RQYXJ0eSA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29r
aWVzKHJlcXVlc3QpKTsKKyAgICBhdXRvIGh0dHBNZXRob2QgPSBhZG9wdFdLKFdLVVJMUmVxdWVz
dENvcHlIVFRQTWV0aG9kKHJlcXVlc3QpKTsKIAorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCI8
TlNVUkxSZXF1ZXN0IFVSTCAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSks
ICIsIG1haW4gZG9jdW1lbnQgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQoZmlyc3RQ
YXJ0eS5nZXQoKSksICIsIGh0dHAgbWV0aG9kICIpOwogICAgIGlmIChXS1N0cmluZ0lzRW1wdHko
aHR0cE1ldGhvZC5nZXQoKSkpCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
KG5vbmUpIik7CiAgICAgZWxzZQogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0
cmluZyhodHRwTWV0aG9kKSk7Ci0KICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQog
CiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5n
QnVpbGRlciwgYm9vbCBzaG91bGREdW1wUmVzcG9uc2VIZWFkZXJzID0gZmFsc2UpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwo
cmVzcG9uc2UpKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwo
cmVzcG9uc2UpKTsKICAgICBpZiAoIXVybCkgewogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIihudWxsKSIpOwogICAgICAgICByZXR1cm47CkBAIC01MzUsMzEgKzQ3NCwyMCBA
QCB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVyQ291bnQoV0tVUkxS
ZXNwb25zZVJlZiByZXNwb25zZSkKIAogc3RhdGljIGlubGluZSB2b2lkIGR1bXBFcnJvckRlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLRXJyb3JSZWYgZXJyb3IsIFN0cmluZ0J1aWxk
ZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9y
RG9tYWluID0gYWRvcHRXSyhXS0Vycm9yQ29weURvbWFpbihlcnJvcikpOwotICAgIGludCBlcnJv
ckNvZGUgPSBXS0Vycm9yR2V0RXJyb3JDb2RlKGVycm9yKTsKKyAgICBhdXRvIGVycm9yRG9tYWlu
ID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS0Vycm9yQ29weURvbWFpbihlcnJvcikpKTsKKyAgICBh
dXRvIGVycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJyb3IpOwogCiAgICAgLy8gV2Ug
bmVlZCB0byBkbyBzb21lIGVycm9yIG1hcHBpbmcgaGVyZSB0byBtYXRjaCB0aGUgdGVzdCBleHBl
Y3RhdGlvbnMgKE1hYyBlcnJvciBuYW1lcyBhcmUgZXhwZWN0ZWQpLgotICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKGVycm9yRG9tYWluLmdldCgpLCAiV2ViS2l0TmV0d29ya0Vy
cm9yIikpIHsKLSAgICAgICAgZXJyb3JEb21haW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJOU1VSTEVycm9yRG9tYWluIikpOworICAgIGlmIChlcnJvckRvbWFpbiA9
PSAiV2ViS2l0TmV0d29ya0Vycm9yIikgeworICAgICAgICBlcnJvckRvbWFpbiA9ICJOU1VSTEVy
cm9yRG9tYWluIjsKICAgICAgICAgZXJyb3JDb2RlID0gLTk5OTsKICAgICB9CisgICAgaWYgKGVy
cm9yRG9tYWluID09ICAiV2ViS2l0UG9saWN5RXJyb3IiKQorICAgICAgICBlcnJvckRvbWFpbiA9
ICJXZWJLaXRFcnJvckRvbWFpbiI7CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhlcnJvckRvbWFpbi5nZXQoKSwgIldlYktpdFBvbGljeUVycm9yIikpCi0gICAgICAgIGVy
cm9yRG9tYWluID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0
RXJyb3JEb21haW4iKSk7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxOU0Vy
cm9yIGRvbWFpbiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhlcnJv
ckRvbWFpbikpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBjb2RlICIpOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGVycm9yQ29kZSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS0Vycm9yQ29weUZhaWxpbmdVUkwoZXJyb3Ip
KTsKLSAgICBpZiAodXJsLmdldCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGZhaWxpbmcgVVJMIFwiIik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgIH0KLQorICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCI8TlNFcnJvciBkb21haW4gIiwgZXJyb3JEb21haW4sICIsIGNvZGUgIiwgZXJyb3JD
b2RlKTsKKyAgICBpZiAoYXV0byB1cmwgPSBhZG9wdFdLKFdLRXJyb3JDb3B5RmFpbGluZ1VSTChl
cnJvcikpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCBmYWlsaW5nIFVSTCBcIiIs
IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpKSwgJyInKTsK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCkBAIC02OTUsNyArNjIzLDcgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpbmpl
Y3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnRlc3RVUkwoKSkgewotICAgICAgICBXS1JldGFpblB0
cjxXS1VSTFJlZj4gdGVzdFVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25h
bFVSTChmcmFtZSkpOworICAgICAgICBhdXRvIHRlc3RVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJh
bWVDb3B5UHJvdmlzaW9uYWxVUkwoZnJhbWUpKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUudGVz
dFJ1bm5lcigpLT5zZXRUZXN0VVJMKHRlc3RVUkwuZ2V0KCkpOwogICAgIH0KIApAQCAtNzc0LDEz
ICs3MDIsMTMgQEAgZW51bSBGcmFtZU5hbWVQb2xpY3kgeyBTaG91bGROb3RJbmNsdWRlRnJhbWVO
YW1lLCBTaG91bGRJbmNsdWRlRnJhbWVOYW1lIH07CiAKIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNj
cm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmlu
Z0J1aWxkZXIsIEZyYW1lTmFtZVBvbGljeSBzaG91bGRJbmNsdWRlRnJhbWVOYW1lID0gU2hvdWxk
Tm90SW5jbHVkZUZyYW1lTmFtZSkKIHsKLSAgICBkb3VibGUgeCA9IG51bWVyaWNXaW5kb3dQcm9w
ZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVhPZmZzZXQiKTsKLSAgICBkb3VibGUgeSA9IG51bWVyaWNX
aW5kb3dQcm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVlPZmZzZXQiKTsKKyAgICBkb3VibGUgeCA9
IG51bWVyaWNXaW5kb3dQcm9wZXJ0eShmcmFtZSwgInBhZ2VYT2Zmc2V0Iik7CisgICAgZG91Ymxl
IHkgPSBudW1lcmljV2luZG93UHJvcGVydHkoZnJhbWUsICJwYWdlWU9mZnNldCIpOwogICAgIGlm
IChmYWJzKHgpIDw9IDAuMDAwMDAwMDEgJiYgZmFicyh5KSA8PSAwLjAwMDAwMDAxKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkSW5jbHVkZUZyYW1lTmFtZSkgewotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlO
YW1lKGZyYW1lKSk7CisgICAgICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNv
cHlOYW1lKGZyYW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJh
bWUgJyIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJyAiKTsKQEAgLTc5NCw3ICs3
MjIsNyBAQCBzdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbgogCiBzdGF0aWMgdm9pZCBkdW1wRGVzY2Vu
ZGFudEZyYW1lU2Nyb2xsUG9zaXRpb25zKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1
aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gY2hp
bGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsK
KyAgICBhdXRvIGNoaWxkRnJhbWVzID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weUNoaWxkRnJh
bWVzKGZyYW1lKSk7CiAgICAgc2l6ZV90IHNpemUgPSBXS0FycmF5R2V0U2l6ZShjaGlsZEZyYW1l
cy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAg
ICAgV0tCdW5kbGVGcmFtZVJlZiBzdWJmcmFtZSA9IHN0YXRpY19jYXN0PFdLQnVuZGxlRnJhbWVS
ZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZEZyYW1lcy5nZXQoKSwgaSkpOwpAQCAtODEw
LDI4ICs3MzgsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBBbGxGcmFtZVNjcm9s
bFBvc2l0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGUKICAgICBkdW1wRGVzY2VuZGFu
dEZyYW1lU2Nyb2xsUG9zaXRpb25zKGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKIH0KIAotc3RhdGlj
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKGNvbnN0IGNoYXIqIHN0cmluZykKLXsKLSAg
ICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7Ci19
Ci0KIHN0YXRpYyBib29sIGhhc0RvY3VtZW50RWxlbWVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
KQogewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBK
U0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7Ci0KLSAgICBKU1ZhbHVlUmVmIGRvY3Vt
ZW50VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgdG9K
UygiZG9jdW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFkb2N1bWVudFZhbHVlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGRv
Y3VtZW50VmFsdWUpKTsKLSAgICBKU09iamVjdFJlZiBkb2N1bWVudCA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBkb2N1bWVudFZhbHVlLCAwKTsKLQotICAgIEpTVmFsdWVSZWYgZG9jdW1lbnRF
bGVtZW50VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGRvY3VtZW50LCB0b0pT
KCJkb2N1bWVudEVsZW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFkb2N1bWVudEVsZW1lbnRW
YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xl
YW4oY29udGV4dCwgZG9jdW1lbnRFbGVtZW50VmFsdWUpOworICAgIGF1dG8gY29udGV4dCA9IFdL
QnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7CisgICAgcmV0dXJuIG9iamVj
dFByb3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgeyAi
ZG9jdW1lbnQiLCAiZG9jdW1lbnRFbGVtZW50IiB9KTsKIH0KIAogc3RhdGljIHZvaWQgZHVtcEZy
YW1lVGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQpA
QCAtODU0LDExICs3NjQsMTEgQEAgc3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQogCiBzdGF0aWMgdm9pZCBkdW1w
RGVzY2VuZGFudEZyYW1lc1RleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBjaGlsZEZy
YW1lcyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOworICAg
IGF1dG8gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMo
ZnJhbWUpKTsKICAgICBzaXplX3Qgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGNoaWxkRnJhbWVzLmdl
dCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBX
S0J1bmRsZUZyYW1lUmVmIHN1YmZyYW1lID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4o
V0tBcnJheUdldEl0ZW1BdEluZGV4KGNoaWxkRnJhbWVzLmdldCgpLCBpKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJmcmFtZU5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJh
bWVDb3B5TmFtZShzdWJmcmFtZSkpOworICAgICAgICBhdXRvIHN1YmZyYW1lTmFtZSA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKHN1YmZyYW1lKSk7CiAKICAgICAgICAgLy8gRHVtcFJl
bmRlclRyZWUgaWdub3JlcyBlbXB0eSBmcmFtZXMsIHNvIGRvIHRoZSBzYW1lIHRoaW5nIGhlcmUu
CiAgICAgICAgIGlmICghaGFzRG9jdW1lbnRFbGVtZW50KHN1YmZyYW1lKSkKQEAgLTg4NCw5ICs3
OTQsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZyYW1lc1RleHQoU3RyaW5n
QnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9N
QXNXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmlu
Z0J1aWxkZXIpCiB7CiAjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNF
KERJUkVDVDJEKQotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gd2tEYXRhID0gYWRvcHRXSyhX
S0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0Rh
dGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKLSAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGNmU3RyaW5nID0gYWRvcHRDRihXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0
ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKKyAgICBhdXRvIHdr
RGF0YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZyYW1lKSk7CisgICAg
YXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0Rh
dGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKKyAgICBhdXRvIGNmU3Ry
aW5nID0gYWRvcHRDRihXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJB
cmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjZlN0
cmluZy5nZXQoKSk7CiAjZW5kaWYKIH0KQEAgLTkwMiw5ICs4MTIsOSBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZHVtcCgpCiAgICAgV0tCdW5kbGVQYWdlRmx1c2hQZW5kaW5nRWRpdG9yU3Rh
dGVVcGRhdGUobV9wYWdlKTsKIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJs
UmVmID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFtZSkpOworICAgIGF1dG8gdXJs
UmVmID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFtZSkpOwogICAgIFN0cmluZyB1
cmwgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxSZWYuZ2V0KCkpKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlID0gYWRvcHRXSyhXS0J1bmRs
ZUZyYW1lQ29weU1JTUVUeXBlRm9yUmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYuZ2V0KCkp
KTsKKyAgICBhdXRvIG1pbWVUeXBlID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU1JTUVUeXBl
Rm9yUmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYuZ2V0KCkpKTsKICAgICBpZiAodXJsLmZp
bmQoImR1bXBBc1RleHQvIikgIT0gbm90Rm91bmQgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtaW1lVHlwZS5nZXQoKSwgInRleHQvcGxhaW4iKSkKICAgICAgICAgaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5kdW1wQXNUZXh0KGZhbHNlKTsKIApAQCAtMTAxOCwyMSArOTI4LDE5
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rl
c3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUs
IHdvcmxkKTsKLSAgICBKU09iamVjdFJlZiB3aW5kb3cgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmpl
Y3QoY29udGV4dCk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKIAogICAgIGlmIChXS0J1bmRsZVNjcmlw
dFdvcmxkTm9ybWFsV29ybGQoKSAhPSB3b3JsZCkgewotICAgICAgICBKU09iamVjdFNldFByb3Bl
cnR5KGNvbnRleHQsIHdpbmRvdywgdG9KUygiX193b3JsZElEIikuZ2V0KCksIEpTVmFsdWVNYWtl
TnVtYmVyKGNvbnRleHQsIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZCh3b3JsZCkpLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICAgICAgc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkoY29udGV4dCwgIl9fd29ybGRJRCIsIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZCh3
b3JsZCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZiBleGNlcHRp
b24gPSBudWxscHRyOwotICAgIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+bWFrZVdpbmRv
d09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwotICAgIGluamVjdGVkQnVuZGxl
LmdjQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2Vw
dGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgaW5qZWN0ZWRC
dW5kbGUudGV4dElucHV0Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdp
bmRvdywgJmV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLmdjQ29udHJvbGxlcigp
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLmV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKKyAgICBpbmplY3Rl
ZEJ1bmRsZS50ZXh0SW5wdXRDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7
CiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotICAgIGluamVjdGVkQnVuZGxlLmFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0
aW9uKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOwogI2VuZGlmCiAKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6
OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKQEAgLTExMzYsNyArMTA0NCw3IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRJbml0aWF0ZUxvYWRGb3JSZXNvdXJjZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgV0tCdW5kCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAg
ICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CiAgICAg
YXNzaWduZWRVcmxzQ2FjaGUoKS5hZGQoaWRlbnRpZmllciwgcGF0aFN1aXRhYmxlRm9yVGVzdFJl
c3VsdCh1cmwuZ2V0KCkpKTsKIH0KIApAQCAtMTE3NSwxNiArMTA4MywxNiBAQCBXS1VSTFJlcXVl
c3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZQogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkgJiYg
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBy
ZWRpcmVjdFVSTCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKKyAg
ICBhdXRvIHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25z
ZSkpOwogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkgJiYgaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Qo
KSAmJiByZWRpcmVjdFVSTCkgewogICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KCJS
ZXR1cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdL
VVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBob3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFtZSh1cmwuZ2V0KCkpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJs
LmdldCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0
V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhX
S1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIGhvc3QgPSBhZG9wdFdLKFdL
VVJMQ29weUhvc3ROYW1lKHVybC5nZXQoKSkpOworICAgIGF1dG8gc2NoZW1lID0gYWRvcHRXSyhX
S1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CisgICAgYXV0byB1cmxTdHJpbmcgPSBhZG9wdFdL
KFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKICAgICBpZiAoaG9zdCAmJiAhV0tTdHJpbmdJ
c0VtcHR5KGhvc3QuZ2V0KCkpCiAgICAgICAgICYmIGlzSFRUUE9ySFRUUFNTY2hlbWUoc2NoZW1l
LmdldCgpKQogICAgICAgICAmJiAhV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhob3N0Lmdl
dCgpLCAiMjU1LjI1NS4yNTUuMjU1IikgLy8gVXNlZCBpbiBzb21lIHRlc3RzIHRoYXQgZXhwZWN0
IHRvIGdldCBiYWNrIGFuIGVycm9yLgpAQCAtMTE5MiwxMiArMTEwMCwxMiBAQCBXS1VSTFJlcXVl
c3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZQogICAgICAgICBib29sIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBmYWxzZTsK
ICAgICAgICAgaWYgKGluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkgewogICAgICAgICAg
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
bV9wYWdlKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtYWluRnJhbWVVUkwg
PSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOworICAgICAgICAgICAg
YXV0byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFt
ZSkpOwogICAgICAgICAgICAgaWYgKCFtYWluRnJhbWVVUkwgfHwgV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtYWluRnJhbWVVUkwuZ2V0KCkpKS5n
ZXQoKSwgImFib3V0OmJsYW5rIikpCiAgICAgICAgICAgICAgICAgbWFpbkZyYW1lVVJMID0gYWRv
cHRXSyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKG1haW5GcmFtZSkpOwogCi0gICAg
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1lSG9zdCA9IGFkb3B0V0so
V0tVUkxDb3B5SG9zdE5hbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7Ci0gICAgICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1lU2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlT
Y2hlbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7CisgICAgICAgICAgICBhdXRvIG1haW5GcmFtZUhv
c3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1lKG1haW5GcmFtZVVSTC5nZXQoKSkpOworICAg
ICAgICAgICAgYXV0byBtYWluRnJhbWVTY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSht
YWluRnJhbWVVUkwuZ2V0KCkpKTsKICAgICAgICAgICAgIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBp
c0hUVFBPckhUVFBTU2NoZW1lKG1haW5GcmFtZVNjaGVtZS5nZXQoKSkgJiYgIWlzTG9jYWxIb3N0
KG1haW5GcmFtZUhvc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbWFpbkZyYW1l
SXNFeHRlcm5hbCAmJiAhaXNBbGxvd2VkSG9zdChob3N0LmdldCgpKSkgewpAQCAtMTIxNCw3ICsx
MTIyLDcgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1
ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAgICAgU3RyaW5nIGJvZHkgPSBp
bmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVxdWVzdEhUVFBCb2R5KCk7CiAg
ICAgICAgIGlmICghYm9keS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENTdHJpbmcgY0JvZHkg
PSBib2R5LnV0ZjgoKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYm9keSA9
IGFkb3B0V0soV0tEYXRhQ3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGNCb2R5LmRhdGEoKSksIGNCb2R5Lmxlbmd0aCgpKSk7CisgICAgICAgICAgICBhdXRvIGJv
ZHkgPSBhZG9wdFdLKFdLRGF0YUNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihjQm9keS5kYXRhKCkpLCBjQm9keS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgcmV0
dXJuIFdLVVJMUmVxdWVzdENvcHlTZXR0aW5nSFRUUEJvZHkocmVxdWVzdCwgYm9keS5nZXQoKSk7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjQyLDkgKzExNTAsOSBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLQgogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
UmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1Jl
dGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNw
b25zZSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdL
KFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtaW1lVHlwZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlN
SU1FVHlwZShyZXNwb25zZSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNl
Q29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENv
cHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKKyAgICBhdXRvIG1pbWVUeXBlU3RyaW5n
ID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHJlc3BvbnNlKSk7CiAKICAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9X
VEZTdHJpbmcodXJsU3RyaW5nKSk7CkBAIC0xMzUwLDEwICsxMjU4LDggQEAgV0tCdW5kbGVQYWdl
UG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihXS0IKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb25cbiIpOwogICAgICAgICBkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KHJlcXVlc3QsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiBpcyBtYWluIGZyYW1lIC0gIik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBzaG91bGQgb3BlbiBVUkxz
IGV4dGVybmFsbHkgLSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV0tCdW5kbGVO
YXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9u
KSA/ICJ5ZXMiIDogIm5vIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgaXMgbWFp
biBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJu
byIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0
ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5h
bFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KQEAgLTEzNjEsMjQgKzEyNjcsMjEgQEAg
V0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIFdLQnVuZGxl
UGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVy
bC5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJl
cXVlc3QpKTsKKyAgICBhdXRvIHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVy
bC5nZXQoKSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQg
Iik7Ci0gICAgaWYgKGlzTG9jYWxGaWxlU2NoZW1lKHVybFNjaGVtZS5nZXQoKSkpIHsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZpbGVuYW1lID0gYWRvcHRXSyhXS1VSTENvcHlM
YXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJs
LmdldCgpKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0
cmluZykpOwotICAgIH0KKyAgICBpZiAoaXNMb2NhbEZpbGVTY2hlbWUodXJsU2NoZW1lLmdldCgp
KSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VS
TENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKSkpOworICAgIGVsc2UKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmco
dXJsLmdldCgpKSkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB3aXRoIG5h
dmlnYXRpb24gdHlwZSBcJyIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5n
KE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdh
dGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikpKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJcJyIpOwotICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZj4g
aGl0VGVzdFJlc3VsdFJlZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhp
dFRlc3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbikpOworICAgIGF1dG8gaGl0VGVzdFJlc3VsdFJl
ZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RSZXN1bHQobmF2
aWdhdGlvbkFjdGlvbikpOwogICAgIGlmIChoaXRUZXN0UmVzdWx0UmVmKSB7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLQnVuZGxlTm9kZUhhbmRsZVJlZj4gbm9kZUhhbmRsZVJlZiA9IGFkb3B0V0so
V0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJlc3VsdFJlZi5nZXQo
KSkpOworICAgICAgICBhdXRvIG5vZGVIYW5kbGVSZWYgPSBhZG9wdFdLKFdLQnVuZGxlSGl0VGVz
dFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYuZ2V0KCkpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb3JpZ2luYXRpbmcgZnJvbSAiKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBu
b2RlSGFuZGxlUmVmLmdldCgpKSk7CiAgICAgfQpAQCAtMTQwMCwxMiArMTMwMyw3IEBAIFdLQnVu
ZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJl
c3BvbnNlKFdLQnVuZGxlUGFnCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVFbmFibGVk
KCkgJiYgV0tVUkxSZXNwb25zZUlzQXR0YWNobWVudChyZXNwb25zZSkpIHsKLSAgICAgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZmlsZW5hbWUgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUo
cmVzcG9uc2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJQb2xpY3kg
ZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUg
XCciKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUp
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcJ1xuIik7Ci0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0
KG1ha2VTdHJpbmcoIlBvbGljeSBkZWxlZ2F0ZTogcmVzb3VyY2UgaXMgYW4gYXR0YWNobWVudCwg
c3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIsIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxSZXNwb25z
ZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShyZXNwb25zZSkpKSwgIlwnXG4iKSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwpAQCAtMTQ3MSwx
MCArMTM2OSwxMCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgYWRkTGVhZGluZ1NwYWNlU3RyaXBUcmFp
bGluZ1NwYWNlc0FkZE5ld2xpbmUoY29uc3QgV1RGOjpTdHJpbgogCiBzdGF0aWMgV1RGOjpTdHJp
bmcgbGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KGNvbnN0IFdURjo6U3RyaW5nJiBwYXRoKQogewot
ICAgIHNpemVfdCBwb3MgPSBwYXRoLmZpbmQoImZpbGU6Ly8iKTsKKyAgICBhdXRvIHBvcyA9IHBh
dGguZmluZCgiZmlsZTovLyIpOwogICAgIEFTU0VSVChXVEY6Om5vdEZvdW5kICE9IHBvcyk7CiAK
LSAgICBXVEY6OlN0cmluZyB0bXBQYXRoID0gcGF0aC5zdWJzdHJpbmcocG9zICsgNyk7CisgICAg
YXV0byB0bXBQYXRoID0gcGF0aC5zdWJzdHJpbmcocG9zICsgNyk7CiAgICAgaWYgKHRtcFBhdGgu
bGVuZ3RoKCkgPCAyKSAvLyBLZWVwIHRoZSBsb25lIHNsYXNoIHRvIGF2b2lkIGVtcHR5IG91dHB1
dC4KICAgICAgICAgcmV0dXJuIHRtcFBhdGg7CiAKQEAgLTE1MjEsMTEgKzE0MTksNyBAQCB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQoV0tTdHJpbmdSZWYgc3Rh
dHVzYmFyVGV4dCkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcFN0YXR1c0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBE
RUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iik7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCkpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVp
bGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJp
bmcoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDoiLCB0b1dURlN0
cmluZyhzdGF0dXNiYXJUZXh0KSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZy
YW1lUmVmKQpAQCAtMTU1OSwxNSArMTQ1Myw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
aWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmCiAg
ICAgICAgIC8vIFJvdW5kaW5nIHVwIG9yIGRvd24gZG9lcyBub3QgcmVhbGx5IG1hdHRlciBmb3Ig
dGhlc2UgdGVzdHMuIEl0J3MKICAgICAgICAgLy8gc3VmZmljaWVudCB0byBqdXN0IGdldCBhIHJh
bmdlIG9mIDEwMDAwIHRvIGRldGVybWluZSBpZiB3ZSB3ZXJlCiAgICAgICAgIC8vIGFib3ZlIG9y
IGJlbG93IGEgdGhyZXNob2xkLgotICAgICAgICBpbnQ2NF90IHRydW5jYXRlZFNwYWNlTmVlZGVk
ID0gKHRvdGFsQnl0ZXNOZWVkZWQgLyAxMDAwMCkgKiAxMDAwMDsKLQotICAgICAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiVUkgREVMRUdBVEUgQVBQTElDQVRJT04gQ0FDSEUgQ0FMTEJBQ0s6IGV4Y2VlZGVkQXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHNlY3VyaXR5T3JpZ2luVG9TdHIob3JpZ2luKSk7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvdGFsU3BhY2VOZWVkZWQ6fiIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0cnVuY2F0ZWRTcGFjZU5lZWRlZCk7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5v
dXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGF1dG8gdHJ1bmNh
dGVkU3BhY2VOZWVkZWQgPSAodG90YWxCeXRlc05lZWRlZCAvIDEwMDAwKSAqIDEwMDAwOworICAg
ICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIEFQ
UExJQ0FUSU9OIENBQ0hFIENBTExCQUNLOiBleGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5R
dW90YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmluZyhvcmlnaW4pLCAiIHRvdGFsU3BhY2VOZWVk
ZWQ6fiIsIHRydW5jYXRlZFNwYWNlTmVlZGVkLCAnXG4nKSk7CiAgICAgfQogCiAgICAgaWYgKGlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRGlzYWxsb3dJbmNyZWFzZUZvckFwcGxp
Y2F0aW9uQ2FjaGVRdW90YSgpKQpAQCAtMTU4MCwxNSArMTQ2Nyw4IEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5
T3JpZ2luUmVmCiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNl
UXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIGRhdGFiYXNlTmFt
ZSwgV0tTdHJpbmdSZWYgZGF0YWJhc2VEaXNwbGF5TmFtZSwgdWludDY0X3QgY3VycmVudFF1b3Rh
Qnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnRPcmlnaW5Vc2FnZUJ5dGVzLCB1aW50NjRfdCBjdXJyZW50
RGF0YWJhc2VVc2FnZUJ5dGVzLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlQnl0ZXMpCiB7CiAgICAg
YXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAg
aWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcERhdGFiYXNlQ2FsbGJh
Y2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNL
OiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihvcmlnaW4pKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZGF0YWJhc2U6Iik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGRhdGFiYXNlTmFtZSkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKKyAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBEQVRBQkFT
RSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iiwgc3Ry
aW5nKG9yaWdpbiksICIgZGF0YWJhc2U6IiwgdG9XVEZTdHJpbmcoZGF0YWJhc2VOYW1lKSwgJ1xu
JykpOwogCiAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAg
IGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5k
YXRhYmFzZURlZmF1bHRRdW90YSgpOwpAQCAtMTYwMSwxMiArMTQ4MSw3IEBAIHVpbnQ2NF90IElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2lu
UmVmIG9yaWdpbiwKICAgICBpZiAobWF4UXVvdGEgPj0gMCkgewogICAgICAgICBpZiAoZGVmYXVs
dFF1b3RhIDwgZXhwZWN0ZWRVc2FnZUJ5dGVzICYmIGV4cGVjdGVkVXNhZ2VCeXRlcyA8PSBtYXhR
dW90YSkgewogICAgICAgICAgICAgbmV3UXVvdGEgPSBleHBlY3RlZFVzYWdlQnl0ZXM7Ci0KLSAg
ICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGlu
Y3JlYXNlZCBxdW90YSB0byAiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVt
YmVyKG5ld1F1b3RhKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwot
ICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkpOworICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5n
KCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVhc2VkIHF1b3RhIHRvICIsIG5l
d1F1b3RhLCAnXG4nKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG5ld1F1b3RhOwpA
QCAtMTY3NSwxMyArMTU1MCw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdp
bkVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICBpZiAoIWluamVjdGVk
QnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygp
KSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRp
bmdJbkRPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3Ry
KG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVp
bGRlci50b1N0cmluZygpKTsKLSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5k
bGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVk
aXRpbmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5n
ZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTY5MSwxMyArMTU2MSw4IEBAIGJvb2wgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFu
Z2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxF
R0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUu
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQor
ICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggYTYy
NTU4OTcyN2JjNzFiNzQxZWNmMjU2NTE1MjFlZmI0ZjQ5OTdmMy4uNzFjYzAxOGY0MTI2MDIzNWU5
ZTQ3YWI5NGEwNDczYjRmMzYxYzExMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDExIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCisjaW5jbHVkZSAi
RGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5jbHVkZSAiSlNUZXN0UnVubmVyLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgi
CiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NUZXN0UnVubmVyVXRpbHMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oPgpAQCAtNjksNyArNjksNyBAQCBSZWY8VGVzdFJ1bm5lcj4gVGVzdFJ1bm5lcjo6Y3Jl
YXRlKCkKIH0KIAogVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcigpCi0gICAgOiBtX3VzZXJTdHlsZVNo
ZWV0TG9jYXRpb24oYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpKQor
ICAgIDogbV91c2VyU3R5bGVTaGVldExvY2F0aW9uKHRvV0soIiIpKQogewogICAgIHBsYXRmb3Jt
SW5pdGlhbGl6ZSgpOwogfQpAQCAtODMsMzQgKzgzLDEwMiBAQCBKU0NsYXNzUmVmIFRlc3RSdW5u
ZXI6OndyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIEpTVGVzdFJ1bm5lcjo6dGVzdFJ1bm5lckNs
YXNzKCk7CiB9CiAKK3N0YXRpYyBXS0J1bmRsZVBhZ2VSZWYgcGFnZSgpCit7CisgICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKK30KKworc3RhdGlj
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lKCkKK3sKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKHBhZ2UoKSk7Cit9CisKK3N0YXRpYyBKU0NvbnRleHRSZWYgbWFpbkpTQ29u
dGV4dCgpCit7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dCht
YWluRnJhbWUoKSk7Cit9CisKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheSgpCiB7Ci0gICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCk7Ci0gICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KHBhZ2UpOworICAgIFdLQnVuZGxl
UGFnZUZvcmNlUmVwYWludChwYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXlB
bmRUcmFja1JlcGFpbnRzKCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBXVFI6
OnBhZ2UoKTsKICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQocGFnZSk7CiAgICAgV0tCdW5k
bGVQYWdlU2V0VHJhY2tzUmVwYWludHMocGFnZSwgdHJ1ZSk7CiAgICAgV0tCdW5kbGVQYWdlUmVz
ZXRUcmFja2VkUmVwYWludHMocGFnZSk7CiB9CiAKK3N0YXRpYyBXS1JldGFpblB0cjxXS0RvdWJs
ZVJlZj4gdG9XSyhkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0V0soV0tEb3VibGVD
cmVhdGUodmFsdWUpKTsKK30KKworc3RhdGljIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4g
Y3JlYXRlV0tEaWN0aW9uYXJ5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8Y29uc3Qg
Y2hhciosIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+PiBwYWlycykKK3sKKyAgICBhdXRvIHNpemUg
PSBwYWlycy5zaXplKCk7CisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBrZXlzKHNpemUpOworICAg
IFZlY3RvcjxXS1R5cGVSZWY+IHZhbHVlcyhzaXplKTsKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+PiBzdHJpbmdzKHNpemUpOworICAgIGZvciAoYXV0byYgcGFpciA6IHBhaXJz
KSB7CisgICAgICAgIGF1dG8ga2V5ID0gdG9XSyhwYWlyLmZpcnN0KTsKKyAgICAgICAga2V5cy5h
cHBlbmQoa2V5LmdldCgpKTsKKyAgICAgICAgdmFsdWVzLmFwcGVuZChwYWlyLnNlY29uZC5nZXQo
KSk7CisgICAgICAgIHN0cmluZ3MuYXBwZW5kKFdURk1vdmUoa2V5KSk7CisgICAgfQorICAgIHJl
dHVybiBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShrZXlzLmRhdGEoKSwgdmFsdWVzLmRhdGEo
KSwgc2l6ZSkpOworfQorCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBwb3N0U3luY2hy
b25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2
YWx1ZSA9IG51bGxwdHIpCit7CisgICAgV0tUeXBlUmVmIHJhd1JldHVyblZhbHVlID0gbnVsbHB0
cjsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSwgJnJhd1JldHVyblZh
bHVlKTsKKyAgICByZXR1cm4gYWRvcHRXSyhyYXdSZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyBi
b29sIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKGNvbnN0IGNoYXIqIG5h
bWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1
ZShwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5hbWUsIHZhbHVlKSk7Cit9
CisKK3N0YXRpYyBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlV2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51
bGxwdHIpCit7CisgICAgV0tUeXBlUmVmIHJhd1JldHVyblZhbHVlID0gbnVsbHB0cjsKKyAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCksIHRvV0so
bmFtZSkuZ2V0KCksIHZhbHVlLCAmcmF3UmV0dXJuVmFsdWUpOworICAgIHJldHVybiBhZG9wdFdL
KHJhd1JldHVyblZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9
IG51bGxwdHIpCit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQorCitzdGF0aWMgdWludDY0
X3QgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50NjQoY29uc3QgY2hhciog
bmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICByZXR1cm4gdWludDY0VmFs
dWUocG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRoUmV0dXJuVmFsdWUobmFtZSwgdmFsdWUp
KTsKK30KKworc3RhdGljIHVpbnQ2NF90IHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdV
SW50NjQoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gdWludDY0VmFsdWUocG9zdFN5
bmNocm9ub3VzTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lKSk7Cit9CisKK3N0YXRpYyB2b2lk
IG92ZXJyaWRlUHJlZmVyZW5jZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAg
IGF1dG8mIGJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBXS0J1bmRs
ZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGJ1bmRsZS5idW5kbGUoKSwgYnVu
ZGxlLnBhZ2VHcm91cCgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSk7Cit9CisKIGJvb2wgVGVz
dFJ1bm5lcjo6c2hvdWxkRHVtcFBpeGVscygpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiR2V0RHVtcFBpeGVscyIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxw
dHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5E
YXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldER1bXBQaXhlbHMiKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXREdW1wUGl4ZWxzKGJvb2wgZHVtcFBpeGVscykKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXREdW1wUGl4ZWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkdW1wUGl4
ZWxzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXREdW1wUGl4ZWxz
IiwgZHVtcFBpeGVscyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dChib29sIGR1
bXBQaXhlbHMpCkBAIC0xMjIsMTggKzE5MCwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OmR1bXBBc1Rl
eHQoYm9vbCBkdW1wUGl4ZWxzKQogICAgIAogV2hhdFRvRHVtcCBUZXN0UnVubmVyOjp3aGF0VG9E
dW1wKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRXaGF0VG9EdW1wIikp
OwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dl
dFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V2hhdFRvRHVtcD4oV0tVSW50NjRHZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V2hhdFRvRHVtcD4ocG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2NCgi
R2V0V2hhdFRvRHVtcCIpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXaGF0VG9EdW1wKFdo
YXRUb0R1bXAgd2hhdFRvRHVtcCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRXaGF0
VG9EdW1wIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tVSW50NjRDcmVhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHdoYXRUb0R1bXApKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRXaGF0VG9EdW1wIiwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHdoYXRUb0R1bXApKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2ZSkKQEAg
LTE1OCwyNiArMjIwLDE5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG93bmxvYWRGaW5p
c2hlZCgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG9uZSgpCiB7Ci0gICAgYXV0byYg
aW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKTsKIAogICAg
IHNldFdhaXRVbnRpbERvbmUodHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2FpdFVu
dGlsRG9uZShib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFdhaXRV
bnRpbERvbmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKCJTZXRXYWl0VW50aWxEb25lIiwgdmFsdWUpOwogfQogCiBib29sIFRlc3RS
dW5uZXI6OnNob3VsZFdhaXRVbnRpbERvbmUoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJHZXRXYWl0VW50aWxEb25lIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0g
bnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZy
ZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4g
cG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldFdhaXRVbnRpbERvbmUi
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKQEAgLTIxMCwxOCArMjY1LDEy
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6Zm9yY2VJbW1lZGlhdGVDb21wbGV0aW9uKCkKIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGJvb2wgdmFsdWUpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZSgiU2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVu
bmVyOjpzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiR2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKTsKLSAgICBXS1R5cGVSZWYgcmV0
dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBu
dWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEp
ID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUo
YWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJHZXREdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzIik7CiB9CiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6OmltYWdlQ291
bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29uc3QKQEAgLTIzMSwxOCArMjgwLDE0IEBAIHVuc2ln
bmVkIFRlc3RSdW5uZXI6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29uc3QKIAog
dm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBy
dW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc291cmNlV0sgPSB0b1dLKHNvdXJjZSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VBZGRVc2VyU2Ny
aXB0KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc291cmNlV0su
Z2V0KCksCisgICAgV0tCdW5kbGVQYWdlQWRkVXNlclNjcmlwdChwYWdlKCksIHRvV0soc291cmNl
KS5nZXQoKSwKICAgICAgICAgKHJ1bkF0U3RhcnQgPyBrV0tJbmplY3RBdERvY3VtZW50U3RhcnQg
OiBrV0tJbmplY3RBdERvY3VtZW50RW5kKSwKICAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVj
dEluQWxsRnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJh
bWVzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3VyY2VXSyA9IHRvV0soc291
cmNlKTsKLQotICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTdHlsZVNoZWV0KEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc291cmNlV0suZ2V0KCksCisgICAgV0tCdW5k
bGVQYWdlQWRkVXNlclN0eWxlU2hlZXQocGFnZSgpLCB0b1dLKHNvdXJjZSkuZ2V0KCksCiAgICAg
ICAgIChhbGxGcmFtZXMgPyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6IGtXS0luamVjdEluVG9wRnJh
bWVPbmx5KSk7CiB9CiAKQEAgLTI1MywyOSArMjk4LDE3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6a2Vl
cFdlYkhpc3RvcnkoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVm
IG5hbWUsIEpTU3RyaW5nUmVmIHNob3dVSSwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7Ci0gICAgV0tC
dW5kbGVQYWdlRXhlY3V0ZUVkaXRpbmdDb21tYW5kKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyh2YWx1ZSkuZ2V0KCkpOwor
ICAgIFdLQnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChwYWdlKCksIHRvV0sobmFtZSku
Z2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFdLRmluZE9w
dGlvbnM+IGZpbmRPcHRpb25zRnJvbUFycmF5KEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1
ZSkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsK
LSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5ID0gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9wdGlvbnNBcnJheUFzVmFsdWUsIDApOwotICAgIEpTVmFs
dWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNB
cnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJc051
bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CisgICAgYXV0byBvcHRpb25z
QXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3B0aW9uc0FycmF5QXNWYWx1ZSwgbnVs
bHB0cik7CisgICAgYXV0byBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBvcHRpb25zQXJy
YXkpOwogICAgIFdLRmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7Ci0gICAgc2l6ZV90IGxlbmd0aCA9
IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVl
LCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
b3B0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4
dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBvcHRpb25O
YW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwotCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8g
b3B0aW9uTmFtZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlB
dEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCkpOwogICAgICAgICBpZiAoSlNTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQ2FzZUluc2Vuc2l0aXZl
IikpCiAgICAgICAgICAgICBvcHRpb25zIHw9IGtXS0ZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZl
OwogICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5h
bWUuZ2V0KCksICJBdFdvcmRTdGFydHMiKSkKQEAgLTI5Niw3ICszMjksNyBAQCBzdGF0aWMgT3B0
aW9uYWw8V0tGaW5kT3B0aW9ucz4gZmluZE9wdGlvbnNGcm9tQXJyYXkoSlNWYWx1ZVJlZiBvcHRp
b25zQXJyYXlBc1ZhbAogYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTU3RyaW5nUmVmIHRh
cmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogewogICAgIGlmIChhdXRvIG9w
dGlvbnMgPSBmaW5kT3B0aW9uc0Zyb21BcnJheShvcHRpb25zQXJyYXlBc1ZhbHVlKSkKLSAgICAg
ICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKKyAgICAg
ICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcocGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0
KCksICpvcHRpb25zKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTMwNCwyOCArMzM3LDIz
IEBAIGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU1N0cmluZ1JlZiB0YXJnZXQsIEpTVmFs
dWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHZvaWQgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZ01h
dGNoZXNJblBhZ2UoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFz
VmFsdWUpCiB7CiAgICAgaWYgKGF1dG8gb3B0aW9ucyA9IGZpbmRPcHRpb25zRnJvbUFycmF5KG9w
dGlvbnNBcnJheUFzVmFsdWUpKQotICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmluZFN0cmlu
Z01hdGNoZXMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dL
KHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKKyAgICAgICAgV0tCdW5kbGVQYWdlRmluZFN0cmlu
Z01hdGNoZXMocGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpyZXBsYWNlRmluZE1hdGNoZXNBdEluZGljZXMoSlNWYWx1ZVJlZiBtYXRj
aEluZGljZXNBc1ZhbHVlLCBKU1N0cmluZ1JlZiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0
aW9uT25seSkKIHsKICAgICBhdXRvJiBidW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCk7Ci0gICAgYXV0byBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoYnVuZGxl
LnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBhdXRvIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9
IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7CisgICAgYXV0
byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogICAgIGF1dG8gbWF0Y2hJbmRpY2VzT2JqZWN0
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG1hdGNoSW5kaWNlc0FzVmFsdWUsIDApOwotICAg
IGF1dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG1hdGNoSW5k
aWNlc09iamVjdCwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFs
dWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICBh
dXRvIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG1hdGNoSW5kaWNlc09iamVjdCk7CiAK
ICAgICBhdXRvIGluZGljZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAg
IGF1dG8gbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChj
b250ZXh0LCBtYXRjaEluZGljZXNPYmplY3QsIGksIDApOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0LCBpLCBudWxscHRyKTsK
ICAgICAgICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBpbmRleCA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoc3RkOjpyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKSkp
OworICAgICAgICBhdXRvIGluZGV4ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKSk7CiAgICAgICAgIFdLQXJyYXlBcHBlbmRJ
dGVtKGluZGljZXMuZ2V0KCksIGluZGV4LmdldCgpKTsKICAgICB9CiAgICAgV0tCdW5kbGVQYWdl
UmVwbGFjZVN0cmluZ01hdGNoZXMoYnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBpbmRpY2VzLmdldCgp
LCB0b1dLKHJlcGxhY2VtZW50VGV4dCkuZ2V0KCksIHNlbGVjdGlvbk9ubHkpOwpAQCAtMzM0LDEx
ICszNjIsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0SW5kaWNlcyhK
U1ZhbHVlUmVmIG1hdGNoSW5kaWNlc0FzVmFsdWUsIEpTUwogdm9pZCBUZXN0UnVubmVyOjpjbGVh
ckFsbERhdGFiYXNlcygpCiB7CiAgICAgV0tCdW5kbGVDbGVhckFsbERhdGFiYXNlcyhJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodHJ1ZSkpOwotCi0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJEZWxldGVBbGxJbmRleGVkRGF0YWJh
c2VzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSh1aW50
NjRfdCBxdW90YSkKQEAgLTM0OCwyOSArMzcyLDI3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0
YWJhc2VRdW90YSh1aW50NjRfdCBxdW90YSkKIAogdm9pZCBUZXN0UnVubmVyOjpzeW5jTG9jYWxT
dG9yYWdlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTeW5jTG9jYWxTdG9yYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJTeW5jTG9jYWxTdG9yYWdlIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJB
bGxBcHBsaWNhdGlvbkNhY2hlcygpCiB7Ci0gICAgV0tCdW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlv
bkNhY2hlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAg
V0tCdW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlKHBhZ2UoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdp
bikKIHsKLSAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0
KCkpOworICAgIFdLQnVuZGxlUGFnZUNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihwYWdl
KCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQ2Fj
aGVNYXhpbXVtU2l6ZSh1aW50NjRfdCBzaXplKQogewotICAgIFdLQnVuZGxlUGFnZVNldEFwcENh
Y2hlTWF4aW11bVNpemUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBzaXplKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRBcHBDYWNoZU1heGltdW1TaXplKHBhZ2UoKSwg
c2l6ZSk7CiB9CiAKIGxvbmcgbG9uZyBUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1Vz
YWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVQ
YWdlR2V0QXBwQ2FjaGVVc2FnZUZvck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxl
UGFnZUdldEFwcENhY2hlVXNhZ2VGb3JPcmlnaW4ocGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNh
Y2hlUXVvdGEoKQpAQCAtMzgxLDE1OCArNDAzLDEwOCBAQCB2b2lkIFRlc3RSdW5uZXI6OmRpc2Fs
bG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKQogc3RhdGljIGlubGluZSBKU1Zh
bHVlUmVmIHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29udGV4dCwgV0tBcnJheVJlZiBz
dHJpbmdzKQogewogICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHN0cmlu
Z3MpOwotCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNv
bnRleHQsIDAsIDAsIDApOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2Jq
ZWN0KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKKyAgICBhdXRvIGFycmF5ID0gSlNPYmplY3RN
YWtlQXJyYXkoY29udGV4dCwgMCwgMCwgbnVsbHB0cik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN0cmluZ1JlZiA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoc3RyaW5ncywgaSkpOwot
ICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nSlMgPSB0b0pTKHN0cmluZ1Jl
Zik7Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2Jq
LCBpLCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdKUy5nZXQoKSksIDApOworICAg
ICAgICBhdXRvIHN0cmluZ1JlZiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0
SXRlbUF0SW5kZXgoc3RyaW5ncywgaSkpOworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJ
bmRleChjb250ZXh0LCBhcnJheSwgaSwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgdG9KUyhz
dHJpbmdSZWYpLmdldCgpKSwgbnVsbHB0cik7CiAgICAgfQotCi0gICAgcmV0dXJuIGFycmF5UmVz
dWx0OworICAgIHJldHVybiBhcnJheTsKIH0KIAogSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmln
aW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tBcnJheVJlZj4gb3JpZ2lucyA9IGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weU9yaWdp
bnNXaXRoQXBwbGljYXRpb25DYWNoZShwYWdlKSk7Ci0KLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1h
aW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKLSAgICBKU0NvbnRleHRS
ZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUp
OwotCi0gICAgcmV0dXJuIHN0cmluZ0FycmF5VG9KUyhjb250ZXh0LCBvcmlnaW5zLmdldCgpKTsK
KyAgICByZXR1cm4gc3RyaW5nQXJyYXlUb0pTKG1haW5KU0NvbnRleHQoKSwgYWRvcHRXSyhXS0J1
bmRsZVBhZ2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKHBhZ2UoKSkpLmdldCgpKTsK
IH0KIAogYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUp
CiB7Ci0gICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSk7
CisgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKHBhZ2UoKSwg
dG9XSyhuYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FuT3BlbldpbmRv
d3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDYW5PcGVuV2luZG93cyIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUodHJ1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlNldENhbk9wZW5XaW5kb3dzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0WFNT
QXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRY
U1NBdWRpdG9yRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VG
b3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdl
R3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5j
ZSgiV2ViS2l0WFNTQXVkaXRvckVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRNZWRpYURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiV2ViS2l0TWVkaWFEZXZpY2VzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRl
Qm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmpl
Y3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92
ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0TWVkaWFEZXZpY2VzRW5hYmxlZCIsIGVuYWJsZWQpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdlYlJUQ01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZChi
b29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdlYlJUQ01ETlNJQ0VDYW5k
aWRhdGVzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JU
ZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3Jv
dXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgi
V2ViS2l0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tVXNlckFnZW50KEpTU3RyaW5nUmVmIHVzZXJBZ2VudCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDdXN0b21Vc2VyQWdlbnQiKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHRvV0sodXNlckFnZW50KS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0Q3VzdG9tVXNlckFnZW50Iiwg
dG9XSyh1c2VyQWdlbnQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXZWJBUElT
dGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktp
dFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJl
ZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVu
ZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQ
cmVmZXJlbmNlKCJXZWJLaXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCIsIGVuYWJsZWQpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKGJvb2wgZW5h
YmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJs
ZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihp
bmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5n
ZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdE1vZGVy
bk1lZGlhQ29udHJvbHNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0V2ViR0wyRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktp
dFdlYkdMMkVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9y
VGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdy
b3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2Uo
IldlYktpdFdlYkdMMkVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJXZWJLaXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0
ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVy
cmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwg
aW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RS
OjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxlZCIsIGVu
YWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRUcmFuc2Zvcm1TdHJl
YW1BUElFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRl
c3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91
cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJX
ZWJLaXRUcmFuc2Zvcm1TdHJlYW1BUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFJlYWRhYmxlQnl0ZVN0cmVhbUFQSUVuYWJsZWQiKSk7
Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7
Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3Rl
ZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwg
ZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFJlYWRhYmxlQnl0
ZVN0cmVhbUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRF
bmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJXZWJLaXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRC
dW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlk
ZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5q
ZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpv
dmVycmlkZVByZWZlcmVuY2UoIldlYktpdEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCIsIGVuYWJs
ZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBpY3R1cmVJblBpY3R1cmVBUElFbmFibGVk
KGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0UGljdHVyZUluUGljdHVy
ZUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVz
dFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3Vw
KCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldl
YktpdFBpY3R1cmVJblBpY3R1cmVBUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJXZWJLaXRHZW5lcmljQ3VlQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92
ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgp
LCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBX
VFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0R2VuZXJpY0N1ZUFQSUVuYWJsZWQiLCBlbmFi
bGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShi
b29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGUoZW5hYmxlZCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZShlbmFibGVkKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0QWxsb3dzQW55
U1NMQ2VydGlmaWNhdGUiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91
bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sIHNob3VsZFN3YXAp
CiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxT
ZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkU3dhcCkpOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVkQnVu
ZGxlLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRTaG91bGRTd2Fw
VG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIsIHNob3VsZFN3YXApOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdh
dGlvbihib29sIHNob3VsZFN3YXApCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRT
aG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KHNob3VsZFN3YXApKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiU2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIiwgc2hv
dWxkU3dhcCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NG
cm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQpAQCAtNTU1LDkgKzUyNyw3IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsoYm9vbCBuZWVkc1F1
aXJrKQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFBsdWdpbnNFbmFibGVkIikpOwotICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdL
QnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUu
YnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQp
OworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRQbHVnaW5zRW5hYmxlZCIsIGVu
YWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlw
Ym9hcmQoYm9vbCBlbmFibGVkKQpAQCAtNTkxLDggKzU2MSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
cmVtb3ZlT3JpZ2luQWNjZXNzQWxsb3dMaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2lu
LCBKU1N0CiBib29sIFRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJbmRleCkK
IHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxl
SXNQYWdlQm94VmlzaWJsZShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkZyYW1lLCBwYWdl
SW5kZXgpOworICAgIHJldHVybiBXS0J1bmRsZUlzUGFnZUJveFZpc2libGUoaW5qZWN0ZWRCdW5k
bGUuYnVuZGxlKCksIG1haW5GcmFtZSgpLCBwYWdlSW5kZXgpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVt
ZW50LCBKU1N0cmluZ1JlZiB2YWx1ZSkKQEAgLTYwMCwxNiArNTY5LDE0IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVs
ZW1lbnQsIEpTU3RyCiAgICAgaWYgKCFlbGVtZW50IHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4
dCwgZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLQnVuZGxl
Tm9kZUhhbmRsZVJlZj4gbm9kZUhhbmRsZSA9IGFkb3B0V0soV0tCdW5kbGVOb2RlSGFuZGxlQ3Jl
YXRlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGVsZW1lbnQpKSk7Ci0gICAgV0tC
dW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNlcihub2RlSGFuZGxl
LmdldCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CisgICAgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRN
TElucHV0RWxlbWVudFZhbHVlRm9yVXNlcihhZG9wdFdLKFdLQnVuZGxlTm9kZUhhbmRsZUNyZWF0
ZShjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihlbGVtZW50KSkpLmdldCgpLCB0b1dL
KHZhbHVlKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXVkaW9SZXN1bHQoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZGF0YSkKIHsKICAgICBhdXRvJiBpbmplY3Rl
ZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICAvLyBGSVhNRSAoMTIz
MDU4KTogVXNlIGEgSlNDIEFQSSB0byBnZXQgYnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBl
eHBvc2VkLgotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYXVkaW9EYXRhID0gYWRvcHRXSyhX
S0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgp
LCBjb250ZXh0LCBkYXRhKSk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0QXVkaW9SZXN1bHQoYXVk
aW9EYXRhLmdldCgpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5zZXRBdWRpb1Jlc3VsdChhZG9wdFdL
KFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxl
KCksIGNvbnRleHQsIGRhdGEpKS5nZXQoKSk7CiAgICAgc2V0V2hhdFRvRHVtcChXaGF0VG9EdW1w
OjpBdWRpbyk7CiAgICAgc2V0RHVtcFBpeGVscyhmYWxzZSk7CiB9CkBAIC02MjEsMzMgKzU4OCwz
MCBAQCB1bnNpZ25lZCBUZXN0UnVubmVyOjp3aW5kb3dDb3VudCgpCiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQogewotICAgIFdLQnVuZGxlQ2xlYXJIaXN0b3J5Rm9y
VGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOworICAg
IFdLQnVuZGxlQ2xlYXJIaXN0b3J5Rm9yVGVzdGluZyhwYWdlKCkpOwogfQogCi0vLyBPYmplY3Qg
Q3JlYXRpb24KLQotdm9pZCBUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3ZvaWQgVGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4
dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJ0ZXN0UnVubmVy
IiwgdGhpcywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSwgZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShj
b250ZXh0LCAidGVzdFJ1bm5lciIsIHRoaXMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNob3dX
ZWJJbnNwZWN0b3IoKQogewotICAgIFdLQnVuZGxlSW5zcGVjdG9yU2hvdyhXS0J1bmRsZVBhZ2VH
ZXRJbnNwZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7
CisgICAgV0tCdW5kbGVJbnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihwYWdl
KCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYkluc3BlY3RvcigpCiB7Ci0gICAg
V0tCdW5kbGVJbnNwZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0
b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgpKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3RvcihKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwotICAg
IFdLQnVuZGxlSW5zcGVjdG9yRXZhbHVhdGVTY3JpcHRGb3JUZXN0KFdLQnVuZGxlUGFnZUdldElu
c3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpLCBzY3Jp
cHRXSy5nZXQoKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlwdEZvclRlc3Qo
V0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSksIHRvV0soc2NyaXB0KS5nZXQoKSk7CiB9
CiAKLXR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBXS1JldGFpblB0cjxXS0J1bmRsZVNj
cmlwdFdvcmxkUmVmPiA+IFdvcmxkTWFwOwordXNpbmcgV29ybGRNYXAgPSBXVEY6Okhhc2hNYXA8
dW5zaWduZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+PjsKIHN0YXRpYyBX
b3JsZE1hcCYgd29ybGRNYXAoKQogewogICAgIHN0YXRpYyBXb3JsZE1hcCYgbWFwID0gKm5ldyBX
b3JsZE1hcDsKQEAgLTY1NiwxMiArNjIwLDExIEBAIHN0YXRpYyBXb3JsZE1hcCYgd29ybGRNYXAo
KQogCiB1bnNpZ25lZCBUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQoV0tCdW5kbGVTY3JpcHRX
b3JsZFJlZiB3b3JsZCkKIHsKLSAgICBXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gd29y
bGRNYXAoKS5lbmQoKTsKLSAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHdv
cmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFs
dWUgPT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyB0aGUgYW50aS1wYXR0ZXJuIG9mIGl0ZXJhdGluZyBhbiBlbnRpcmUgbWFwLiBUeXBp
Y2FsbHkgd2UgdXNlIGEgcGFpciBvZiBtYXBzIG9yIGp1c3QgYSB2ZWN0b3IgaW4gYSBjYXNlIGxp
a2UgdGhpcy4KKyAgICBmb3IgKGF1dG8mIG1hcEVudHJ5IDogd29ybGRNYXAoKSkgeworICAgICAg
ICBpZiAobWFwRW50cnkudmFsdWUgPT0gd29ybGQpCisgICAgICAgICAgICByZXR1cm4gbWFwRW50
cnkua2V5OwogICAgIH0KLQogICAgIHJldHVybiAwOwogfQogCkBAIC02ODEsNyArNjQ0LDcgQEAg
dm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChKU0NvbnRleHRS
ZWYgY29udGV4dCwgdW5zaWduZWQgd28KIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBX
S0J1bmRsZUZyYW1lRm9ySmF2YVNjcmlwdENvbnRleHQoY29udGV4dCk7CiAgICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICAgICAgZnJhbWUgPSBtYWluRnJh
bWUoKTsKIAogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSBXS0J1bmRsZUZyYW1l
R2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQuZ2V0KCkpOwogICAgIEpT
RXZhbHVhdGVTY3JpcHQoanNDb250ZXh0LCBzY3JpcHQsIDAsIDAsIDAsIDApOyAKQEAgLTY5Niw4
ICs2NTksNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFBPU0lYTG9jYWxlKEpTU3RyaW5nUmVmIGxv
Y2FsZSkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRp
cmVjdGlvbikKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFn
ZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkp
OwotICAgIHJldHVybiBXS0J1bmRsZUZyYW1lU2V0VGV4dERpcmVjdGlvbihtYWluRnJhbWUsIHRv
V0soZGlyZWN0aW9uKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVTZXRUZXh0RGly
ZWN0aW9uKG1haW5GcmFtZSgpLCB0b1dLKGRpcmVjdGlvbikuZ2V0KCkpOwogfQogICAgIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9h
ZChib29sIHNob3VsZFN0YXlPblBhZ2UpCkBAIC03MDcsMTcgKzY2OSwxMiBAQCB2b2lkIFRlc3RS
dW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGJvb2wg
c2hvdWxkU3RheU9uUAogCiBib29sIFRlc3RSdW5uZXI6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVj
dEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikp
OwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0
YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5
cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiRGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xl
YXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9y
UHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlKCJDbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTmF2aWdhdGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmls
aXR5KEpTU3RyaW5nUmVmIHN0YXRlKQpAQCAtNzMwLDcgKzY4Nyw3IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnNldEhpZGRlbihmYWxzZSk7CiB9CiAKLXR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBK
U1ZhbHVlUmVmPiBDYWxsYmFja01hcDsKK3VzaW5nIENhbGxiYWNrTWFwID0gV1RGOjpIYXNoTWFw
PHVuc2lnbmVkLCBKU09iamVjdFJlZj47CiBzdGF0aWMgQ2FsbGJhY2tNYXAmIGNhbGxiYWNrTWFw
KCkKIHsKICAgICBzdGF0aWMgQ2FsbGJhY2tNYXAmIG1hcCA9ICpuZXcgQ2FsbGJhY2tNYXA7CkBA
IC03ODMsMzggKzc0MCwzMiBAQCBzdGF0aWMgdm9pZCBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayh1
bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBpZiAoIWNhbGxiYWNr
KQogICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7
CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2FsbGJhY2spKQorICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKGNhbGxiYWNrTWFwKCkuY29udGFpbnMoaW5kZXgpKSB7CiAgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkZBSUw6
IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBjYWxsYmFjayBmb3IgdGhlIHNh
bWUgZXZlbnQgKGlkICIsIGluZGV4LCAiKVxuXG4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0KLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpT
Q29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1h
aW5GcmFtZSk7CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIGNh
bGxiYWNrTWFwKCkuYWRkKGluZGV4LCBjYWxsYmFjayk7CisgICAgY2FsbGJhY2tNYXAoKS5hZGQo
aW5kZXgsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGNhbGxiYWNrKSk7CiB9CiAKIHN0YXRpYyB2
b2lkIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIHNpemVfdCBhcmd1bWVu
dENvdW50ID0gMCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSA9IG51bGxwdHIpCiB7Ci0g
ICAgaWYgKCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkKKyAgICBhdXRvIGNhbGxiYWNr
ID0gY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KTsKKyAgICBpZiAoIWNhbGxiYWNrKQogICAgICAg
ICByZXR1cm47Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VH
ZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsK
LSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29u
dGV4dChtYWluRnJhbWUpOwotICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRvT2Jq
ZWN0KGNvbnRleHQsIGNhbGxiYWNrTWFwKCkudGFrZShpbmRleCksIDApOworICAgIGF1dG8gY29u
dGV4dCA9IG1haW5KU0NvbnRleHQoKTsKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRl
eHQsIGNhbGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgMCk7CiAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxs
YmFjayk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJUZXN0UnVubmVyQ2FsbGJhY2tzKCkK
IHsKLSAgICBmb3IgKGF1dG8mIGl0ZXIgOiBjYWxsYmFja01hcCgpKSB7Ci0gICAgICAgIFdLQnVu
ZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgICAgIEpTQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7
Ci0gICAgICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQs
IGl0ZXIudmFsdWUsIDApOwotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxi
YWNrKTsKLSAgICB9Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CisgICAg
Zm9yIChhdXRvJiB2YWx1ZSA6IGNhbGxiYWNrTWFwKCkudmFsdWVzKCkpCisgICAgICAgIEpTVmFs
dWVVbnByb3RlY3QoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHZhbHVlLCBudWxs
cHRyKSk7CiAgICAgY2FsbGJhY2tNYXAoKS5jbGVhcigpOwogfQogCkBAIC04OTQsMjAgKzg0NSwx
MiBAQCB2b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVm
ZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbHdheXNB
Y2NlcHRDb29raWVzKGJvb2wgYWNjZXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dEFsd2F5c0FjY2VwdENvb2tpZXMiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWNjZXB0KSk7Ci0KLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldEFsd2F5c0FjY2VwdENvb2tpZXMiLCBh
Y2NlcHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29v
a2llcyhib29sIGFjY2VwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRPbmx5QWNj
ZXB0Rmlyc3RQYXJ0eUNvb2tpZXMiKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGFjY2VwdCkpOwotICAg
IAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0T25seUFjY2VwdEZpcnN0
UGFydHlDb29raWVzIiwgYWNjZXB0KTsKIH0KIAogZG91YmxlIFRlc3RSdW5uZXI6OnByZWNpc2VU
aW1lKCkKQEAgLTkyNCwxNSArODY3LDE1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxl
U2hlZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3VzZXJTdHlsZVNoZWV0RW5hYmxl
ZCA9IGVuYWJsZWQ7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW1wdHlVcmwgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7Ci0gICAgV0tTdHJpbmdS
ZWYgbG9jYXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uLmdldCgpIDog
ZW1wdHlVcmwuZ2V0KCk7CisgICAgYXV0byBlbXB0eVN0cmluZyA9IHRvV0soIiIpOworICAgIGF1
dG8gbG9jYXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uLmdldCgpIDog
ZW1wdHlTdHJpbmcuZ2V0KCk7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgV0tCdW5kbGVTZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwgbG9j
YXRpb24pOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24o
SlNTdHJpbmdSZWYgbG9jYXRpb24pCiB7Ci0gICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhsb2NhdGlvbikpOworICAgIG1fdXNl
clN0eWxlU2hlZXRMb2NhdGlvbiA9IHRvV0sobG9jYXRpb24pOwogCiAgICAgaWYgKG1fdXNlclN0
eWxlU2hlZXRFbmFibGVkKQogICAgICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7
CkBAIC05NDYsOCArODg5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTcGF0aWFsTmF2aWdhdGlv
bkVuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xl
c1Rocm91Z2hFbGVtZW50cyhib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVTZXRUYWJLZXlD
eWNsZXNUaHJvdWdoRWxlbWVudHMoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVu
ZGxlLnBhZ2UoKS0+cGFnZSgpLCBlbmFibGVkKTsKKyAgICBXS0J1bmRsZVNldFRhYktleUN5Y2xl
c1Rocm91Z2hFbGVtZW50cyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHBh
Z2UoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExv
YWRzKCkKQEAgLTk3MywzNiArOTE1LDI4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFRlc3RSdW5uZXI6
OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAg
IGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAg
IFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihpbmplY3RlZEJ1bmRsZS5idW5k
bGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG9yaWdpbldLLmdldCgpLCB0cnVl
KTsKKyAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSwgdHJ1
ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24o
SlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmln
aW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFn
ZSgpLCBvcmlnaW5XSy5nZXQoKSwgZmFsc2UpOworICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0
aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHBhZ2Uo
KSwgdG9XSyhvcmlnaW4pLmdldCgpLCBmYWxzZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVt
b3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKQogewotICAgIGF1dG8mIGluamVjdGVk
QnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlUmVtb3Zl
QWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGlu
amVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVJlbW92ZUFsbFdlYk5v
dGlmaWNhdGlvblBlcm1pc3Npb25zKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgcGFnZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlv
bkNsaWNrKEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uKQogewogICAgIGF1dG8mIGluamVjdGVkQnVu
ZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYg
bWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2Uo
KS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklE
ID0gV0tCdW5kbGVHZXRXZWJOb3RpZmljYXRpb25JRChpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwg
Y29udGV4dCwgbm90aWZpY2F0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5wb3N0U2ltdWxhdGVX
ZWJOb3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7CisgICAgaW5qZWN0ZWRCdW5kbGUu
cG9zdFNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soV0tCdW5kbGVHZXRXZWJOb3RpZmljYXRp
b25JRChpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkpTQ29udGV4dCgpLCBub3RpZmljYXRp
b24pKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9v
bCBlbmFibGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1l
LgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgogICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oZW5hYmxlZCk7
CiB9CiAKQEAgLTEwMTEsMTAyICs5NDUsNTEgQEAgYm9vbCBUZXN0UnVubmVyOjppc0dlb2xvY2F0
aW9uUHJvdmlkZXJBY3RpdmUoKQogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBkb3VibGUgYWNjdXJhY3ksIEpTVmFsdWVSZWYganNBbHRpdHVkZSwgSlNWYWx1ZVJlZiBq
c0FsdGl0dWRlQWNjdXJhY3ksIEpTVmFsdWVSZWYganNIZWFkaW5nLCBKU1ZhbHVlUmVmIGpzU3Bl
ZWQsIEpTVmFsdWVSZWYganNGbG9vckxldmVsKQordm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJs
ZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBh
bHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJs
ZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZUZy
YW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRs
ZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLQotICAgIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZSA9IDAuOwotICAgIGlmICghSlNW
YWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzQWx0aXR1ZGUpKSB7Ci0gICAgICAgIHByb3ZpZGVz
QWx0aXR1ZGUgPSB0cnVlOwotICAgICAgICBhbHRpdHVkZSA9IEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBqc0FsdGl0dWRlLCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGVB
Y2N1cmFjeSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5ID0gMC47Ci0gICAg
aWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNBbHRpdHVkZUFjY3VyYWN5KSkgewot
ICAgICAgICBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kgPSB0cnVlOwotICAgICAgICBhbHRpdHVk
ZUFjY3VyYWN5ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzQWx0aXR1ZGVBY2N1cmFjeSwg
MCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc0hlYWRpbmcgPSBmYWxzZTsKLSAgICBkb3Vi
bGUgaGVhZGluZyA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpz
SGVhZGluZykpIHsKLSAgICAgICAgcHJvdmlkZXNIZWFkaW5nID0gdHJ1ZTsKLSAgICAgICAgaGVh
ZGluZyA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc0hlYWRpbmcsIDApOwotICAgIH0KLQot
ICAgIGJvb2wgcHJvdmlkZXNTcGVlZCA9IGZhbHNlOwotICAgIGRvdWJsZSBzcGVlZCA9IDAuOwot
ICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzU3BlZWQpKSB7Ci0gICAgICAg
IHByb3ZpZGVzU3BlZWQgPSB0cnVlOwotICAgICAgICBzcGVlZCA9IEpTVmFsdWVUb051bWJlcihj
b250ZXh0LCBqc1NwZWVkLCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3ZpZGVzRmxvb3JMZXZl
bCA9IGZhbHNlOwotICAgIGRvdWJsZSBmbG9vckxldmVsID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVl
SXNVbmRlZmluZWQoY29udGV4dCwganNGbG9vckxldmVsKSkgewotICAgICAgICBwcm92aWRlc0Zs
b29yTGV2ZWwgPSB0cnVlOwotICAgICAgICBmbG9vckxldmVsID0gSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGpzRmxvb3JMZXZlbCwgMCk7Ci0gICAgfQotCi0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHBy
b3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0
dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3Bl
ZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1
ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQs
IGZsb29yTGV2ZWwpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uVW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdlKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlV0sgPSB0b1dLKG1lc3NhZ2UpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxh
YmxlRXJyb3IobWVzc2FnZVdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKHRvV0sobWVzc2Fn
ZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcm1pc3Npb24o
Ym9vbCBlbmFibGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBkb25lIGJ5IGZy
YW1lLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgogICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGVuYWJsZWQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbigpCiB7Ci0g
ICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbigpOwogfQogCiBib29sIFRlc3RSdW5uZXI6
OmlzRG9pbmdNZWRpYUNhcHR1cmUoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IklzRG9pbmdNZWRpYUNhcHR1cmUiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxs
cHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJu
RGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRW
YWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgp
KTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
KCJJc0RvaW5nTWVkaWFDYXB0dXJlIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlck1l
ZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4oYm9vbCBwZXJtaXNzaW9uLCBKU1N0cmlu
Z1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9XSyhwYXJlbnRPcmlnaW4pOwotICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lv
bkZvck9yaWdpbihwZXJtaXNzaW9uLCBvcmlnaW5XSy5nZXQoKSwgcGFyZW50T3JpZ2luV0suZ2V0
KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJzaXN0
ZW50UGVybWlzc2lvbkZvck9yaWdpbihwZXJtaXNzaW9uLCB0b1dLKG9yaWdpbikuZ2V0KCksIHRv
V0socGFyZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6OnVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luLCBK
U1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBwYXJlbnRPcmlnaW5XSyA9IHRvV0socGFyZW50T3JpZ2luKTsKLSAgICByZXR1cm4gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRG
b3JPcmlnaW4ob3JpZ2luV0suZ2V0KCksIHBhcmVudE9yaWdpbldLLmdldCgpKTsKKyAgICByZXR1
cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
Q291bnRGb3JPcmlnaW4odG9XSyhvcmlnaW4pLmdldCgpLCB0b1dLKHBhcmVudE9yaWdpbikuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RDb3VudEZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9y
aWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9y
aWdpbik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9X
SyhwYXJlbnRPcmlnaW4pOwotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXNldFVz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4ob3JpZ2luV0suZ2V0KCksIHBh
cmVudE9yaWdpbldLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucmVz
ZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKHRvV0sob3JpZ2luKS5n
ZXQoKSwgdG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpj
YWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVDYWxsU2hvdWxkQ2xv
c2VPbldlYlZpZXcobWFpbkZyYW1lKTsKKyAgICByZXR1cm4gV0tCdW5kbGVGcmFtZUNhbGxTaG91
bGRDbG9zZU9uV2ViVmlldyhtYWluRnJhbWUoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVl
dWVCYWNrTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJCYWNrd2FyZCkKQEAgLTExMjIsMjAgKzEw
MDUsMTcgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHVuc2lnbmVk
IGhvd0ZhckZvcndhcmQpCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1
cmwsIEpTU3RyaW5nUmVmIHRhcmdldCwgYm9vbCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKQogewog
ICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwot
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBiYXNlVVJMV0sgPSBhZG9wdFdLKFdLQnVuZGxlRnJh
bWVDb3B5VVJMKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCkt
PnBhZ2UoKSkpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsV0sgPSBhZG9wdFdLKFdL
VVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTFdLLmdldCgpLCB0b1dURlN0cmluZyh0b1dLKHVy
bCkpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3Ry
aW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxXSy5nZXQoKSkpOwotCisgICAgYXV0
byBiYXNlVVJMV0sgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSgpKSk7
CisgICAgYXV0byB1cmxXSyA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJM
V0suZ2V0KCksIHRvV1RGU3RyaW5nKHVybCkudXRmOCgpLmRhdGEoKSkpOworICAgIGF1dG8gdXJs
U3RyaW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxXSy5nZXQoKSkpOwogICAgIGlu
amVjdGVkQnVuZGxlLnF1ZXVlTG9hZCh1cmxTdHJpbmdXSy5nZXQoKSwgdG9XSyh0YXJnZXQpLmdl
dCgpLCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1
ZUxvYWRIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkws
IEpTU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBjb250ZW50V0sgPSB0b1dLKGNvbnRlbnQpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBiYXNlVVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJMKSA6IFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPigpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJsZVVS
TFdLID0gdW5yZWFjaGFibGVVUkwgPyB0b1dLKHVucmVhY2hhYmxlVVJMKSA6IFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPigpOwotCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVl
TG9hZEhUTUxTdHJpbmcoY29udGVudFdLLmdldCgpLCBiYXNlVVJMV0suZ2V0KCksIHVucmVhY2hh
YmxlVVJMV0suZ2V0KCkpOworICAgIGF1dG8gYmFzZVVSTFdLID0gYmFzZVVSTCA/IHRvV0soYmFz
ZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKKyAgICBhdXRvIHVucmVhY2hhYmxl
VVJMV0sgPSB1bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5yZWFjaGFibGVVUkwpIDogV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+KCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVl
TG9hZEhUTUxTdHJpbmcodG9XSyhjb250ZW50KS5nZXQoKSwgYmFzZVVSTFdLLmdldCgpLCB1bnJl
YWNoYWJsZVVSTFdLLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZCgp
CkBAIC0xMTQ1LDE2MyArMTAyNSwxMTkgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZCgp
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlw
dCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dLKHNjcmlw
dCk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9hZGluZ1NjcmlwdChz
Y3JpcHRXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9h
ZGluZ1NjcmlwdCh0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1
ZXVlTm9uTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwotICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQoc2NyaXB0V0suZ2V0KCkpOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQodG9X
SyhzY3JpcHQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRSZWplY3RzUHJvdGVj
dGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoYm9vbCB2YWx1
ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRSZWplY3RzUHJvdGVjdGlvblNwYWNl
QW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZh
bHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENv
bnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwgdmFsdWUpOwogfQogICAgIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2wgaGFu
ZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYW5k
bGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0SGFu
ZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZXMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZExv
Z0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiLCB2YWx1ZSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MoYm9vbCB2YWx1ZSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNr
cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGRM
b2dEb3dubG9hZENhbGxiYWNrcyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRB
dXRoZW50aWNhdGlvblVzZXJuYW1lKEpTU3RyaW5nUmVmIHVzZXJuYW1lKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyh1c2VybmFtZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEF1dGhlbnRpY2F0
aW9uVXNlcm5hbWUiLCB0b1dLKHVzZXJuYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0QXV0aGVudGljYXRpb25QYXNzd29yZChKU1N0cmluZ1JlZiBwYXNzd29yZCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIikpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcocGFzc3dvcmQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRBdXRo
ZW50aWNhdGlvblBhc3N3b3JkIiwgdG9XSyhwYXNzd29yZCkuZ2V0KCkpOwogfQogCiBib29sIFRl
c3RSdW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQoKSBjb25zdAogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQiKSk7Ci0gICAgV0tUeXBl
UmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
IHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJTZWN1cmVFdmVudElucHV0SXNFbmFibGVkIik7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wgc2hvdWxkQmxvY2spCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QmxvY2tBbGxQbHVnaW5zIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShzaG91bGRCbG9jaykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEJsb2NrQWxsUGx1Z2lu
cyIsIHNob3VsZEJsb2NrKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5TdXBwb3J0
ZWRNb2RlKEpTU3RyaW5nUmVmIG1vZGUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
UGx1Z2luU3VwcG9ydGVkTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKG1vZGUpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIiwgdG9XSyhtb2RlKS5nZXQo
KSk7CiB9CiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6ZmFpbE5leHROZXdDb2RlQmxvY2soKQog
ewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlND
b250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFp
bkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0NvZGVCbG9jayhjb250ZXh0KTsK
KyAgICByZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0NvZGVCbG9jayhtYWluSlNDb250ZXh0KCkpOwog
fQogCi1KU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJl
ZiB0aGVGdW5jdGlvbikKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdDb21waWxl
cyhKU1ZhbHVlUmVmIGZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1l
ID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1l
R2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpudW1iZXJP
ZkRGR0NvbXBpbGVzKGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4gSlNDOjpudW1i
ZXJPZkRGR0NvbXBpbGVzKG1haW5KU0NvbnRleHQoKSwgZnVuY3Rpb24pOwogfQogCi1KU1ZhbHVl
UmVmIFRlc3RSdW5uZXI6Om5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiB0aGVGdW5jdGlv
bikKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlvbihKU1ZhbHVlUmVm
IGZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQ
YWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlw
dENvbnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpzZXROZXZlcklubGluZShjb250
ZXh0LCB0aGVGdW5jdGlvbik7CisgICAgcmV0dXJuIEpTQzo6c2V0TmV2ZXJJbmxpbmUobWFpbkpT
Q29udGV4dCgpLCBmdW5jdGlvbik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGVj
aWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoYm9vbCB2YWx1ZSkKIHsKICAgICBtX3Nob3Vs
ZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5ID0gdmFsdWU7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkRGVjaWRl
TmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KGJvb2wgdmFsdWUpCiB7
CiAgICAgbV9zaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkgPSB2YWx1ZTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVy
RGVsYXkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hv
dWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5IiwgdmFsdWUpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoYm9vbCB2YWx1ZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE5hdmlnYXRpb25HZXN0
dXJlc0VuYWJsZWQiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0SWdub3Jlc1Zp
ZXdwb3J0U2NhbGVMaW1pdHMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIsIHZhbHVl
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVN
SU1FVHlwZXMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91
bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5
cGVzIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZEFsbG93RGV2aWNl
T3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNz
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZEFs
bG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIikpOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyIp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyIpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiVGVybWluYXRlU2Vy
dmljZVdvcmtlcnMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUp
KTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UoIlNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MiLCB2YWx1ZSk7CiB9CiAK
IHN0YXRpYyB1bnNpZ25lZCBuZXh0VUlTY3JpcHRDYWxsYmFja0lEKCkKQEAgLTEzMTQsOTcgKzEx
NTAsNDggQEAgdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQs
IEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG5leHRV
SVNjcmlwdENhbGxiYWNrSUQoKTsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhjYWxsYmFj
a0lELCBjYWxsYmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSdW5VSVByb2Nlc3NT
Y3JpcHQiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiB0ZXN0
RGljdGlvbmFyeSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHNjcmlwdFZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzY3Jp
cHQpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gY2FsbGJhY2tJRFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShjYWxsYmFja0lEKSk7Ci0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0
aW9uYXJ5LmdldCgpLCBzY3JpcHRLZXkuZ2V0KCksIHNjcmlwdFZhbHVlLmdldCgpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBjYWxsYmFja0lES2V5Lmdl
dCgpLCBjYWxsYmFja0lEVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgdGVzdERpY3Rpb25hcnkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUnVu
VUlQcm9jZXNzU2NyaXB0IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU2NyaXB0
IiwgdG9XSyhzY3JpcHQpIH0sCisgICAgICAgIHsgIkNhbGxiYWNrSUQiLCBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGNhbGxiYWNrSUQpKS5nZXQoKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KEpTU3RyaW5nUmVmIHNjcmlwdCwg
SlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbmV4dFVJ
U2NyaXB0Q2FsbGJhY2tJRCgpOwogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKGNhbGxiYWNr
SUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJ1blVJUHJvY2Vzc1Nj
cmlwdEltbWVkaWF0ZWx5IikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gdGVzdERpY3Rpb25hcnkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzY3JpcHRWYWx1ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoc2NyaXB0KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJ
REtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGNhbGxiYWNrSURWYWx1ZSA9IGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpOwotCi0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bSh0ZXN0RGljdGlvbmFyeS5nZXQoKSwgc2NyaXB0S2V5LmdldCgpLCBzY3JpcHRWYWx1ZS5nZXQo
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSh0ZXN0RGljdGlvbmFyeS5nZXQoKSwgY2FsbGJh
Y2tJREtleS5nZXQoKSwgY2FsbGJhY2tJRFZhbHVlLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIHRlc3REaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIlJ1blVJUHJvY2Vzc1NjcmlwdEltbWVkaWF0ZWx5IiwgY3JlYXRlV0tEaWN0aW9uYXJ5
KHsKKyAgICAgICAgeyAiU2NyaXB0IiwgdG9XSyhzY3JpcHQpIH0sCisgICAgICAgIHsgIkNhbGxi
YWNrSUQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQpKS5nZXQoKSB9LAorICAg
IH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdENhbGxiYWNrKHVu
c2lnbmVkIGNhbGxiYWNrSUQsIEpTU3RyaW5nUmVmIHJlc3VsdCkKIHsKLSAgICBXS0J1bmRsZUZy
YW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0KLSAgICBK
U1ZhbHVlUmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcmVzdWx0
KTsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcobWFpbkpT
Q29udGV4dCgpLCByZXN1bHQpOwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soY2FsbGJhY2tJ
RCwgMSwgJnJlc3VsdFZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd2VkTWVu
dUFjdGlvbnMoSlNWYWx1ZVJlZiBhY3Rpb25zKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldEFsbG93ZWRNZW51QWN0aW9ucyIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJh
eVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotCi0g
ICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
OwotICAgIGF1dG8gbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwot
ICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWlu
RnJhbWUpOwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlND
b250ZXh0KCk7CiAgICAgYXV0byBhY3Rpb25zQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCwgYWN0aW9ucywgbnVsbHB0cik7Ci0gICAgYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwgYWN0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCks
IG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVl
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFjdGlvbnNBcnJheSwgaSwgMCk7Ci0g
ICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gYWN0aW9uTmFtZSA9IGFkb3B0KEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGFjdGlvbiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoYWN0aW9u
TmFtZS5nZXQoKSkpOwotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgYWN0aW9uLmdldCgpKTsKKyAgICBhdXRvIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQs
IGFjdGlvbnNBcnJheSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250
ZXh0LCBhY3Rpb25zQXJyYXksIGksIG51bGxwdHIpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRl
bShtZXNzYWdlQm9keS5nZXQoKSwgdG9XS1N0cmluZyhjb250ZXh0LCB2YWx1ZSkuZ2V0KCkpOwog
ICAgIH0KLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRBbGxvd2Vk
TWVudUFjdGlvbnMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
aW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24oSlNTdHJpbmdSZWYgbmFtZSwgYm9vbCBkaXNtaXNzZXNB
dXRvbWF0aWNhbGx5LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5l
ckNhbGxiYWNrKEN1c3RvbU1lbnVBY3Rpb25DYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJbnN0YWxsQ3VzdG9tTWVudUFjdGlvbiIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBuYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibmFtZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZVZhbHVlID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhuYW1lKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSht
ZXNzYWdlQm9keS5nZXQoKSwgbmFtZUtleS5nZXQoKSwgbmFtZVZhbHVlLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGlzbWlzc2VzQXV0b21hdGljYWxs
eSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGRpc21pc3Nlc0F1dG9tYXRpY2Fs
bHlWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBkaXNtaXNzZXNB
dXRvbWF0aWNhbGx5S2V5LmdldCgpLCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5VmFsdWUuZ2V0KCkp
OwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiSW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24iLCBjcmVhdGVX
S0RpY3Rpb25hcnkoeworICAgICAgICB7ICJuYW1lIiwgdG9XSyhuYW1lKSB9LAorICAgICAgICB7
ICJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZGlzbWlz
c2VzQXV0b21hdGljYWxseSkpLmdldCgpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6Omluc3RhbGxEaWRCZWdpblN3aXBlQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFj
aykKQEAgLTE0NDksNTggKzEyMzYsMzAgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3Zl
U3dpcGVTbmFwc2hvdENhbGxiYWNrKCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhclN0YXRpc3Rp
Y3NEYXRhRm9yRG9tYWluKEpTU3RyaW5nUmVmIGRvbWFpbikKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIikpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoZG9tYWluKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVh
clN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIiwgdG9XSyhkb21haW4pLmdldCgpKTsKIH0KIAogYm9v
bCBUZXN0UnVubmVyOjpkb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlKHVuc2ln
bmVkIGRvbWFpbklEKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtl
eXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvbWFpbklE
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZG9tYWluSUQp
KSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAg
IFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ld
ID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgp
OwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvZXNTdGF0aXN0aWNzRG9tYWlu
SURFeGlzdEluRGF0YWJhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCBy
YXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5E
YXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VS
VChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
cmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZVJldHVybmluZ0Jvb2xlYW4oIkRvZXNTdGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJh
c2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJEb21haW5JRCIsIGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoZG9tYWluSUQpKSB9CisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0VuYWJsZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVl
KSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzRW5h
YmxlZCIsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NFcGhlbWVy
YWwoKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKSk7Ci0gICAgV0tUeXBlUmVmIHJl
dHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVy
biBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0
dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlz
dGljc0RlYnVnTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZh
bHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
cG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFjaygpCkBAIC0x
NTExLDEwICsxMjcwLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldERl
YnVnTW9kZUNhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVu
dFJlc291cmNlRm9yRGVidWdNb2RlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1ZhbHVlUmVmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25I
YW5kbGVyKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0
TmFtZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAg
IHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUi
LCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGlj
c0NhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNhbGxiYWNrKCkKQEAgLTE1
MjYsMjcgKzEyODIsMTAgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4o
SlNTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzLCBKU1YKIHsKICAgICBjYWNoZVRl
c3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzTGFzdFNlZW5DYWxsYmFja0lELCBjb21wbGV0
aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlz
OwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5n
UmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1
ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAg
ICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlD
cmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7
Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
cG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7
CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVmFs
dWUiLCB0b1dLKHNlY29uZHMpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0TGFzdFNlZW5DYWxsYmFjaygpCkBAIC0xNTU4LDQ5ICsx
Mjk3LDE4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKEpT
U3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiB0CiB7CiAgICAgY2FjaGVUZXN0UnVubmVy
Q2FsbGJhY2soU2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljQ2FsbGJhY2tJRCwgY29tcGxldGlv
bkhhbmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyho
b3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjEiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZURvbWFpbjEpKSk7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVG9wRnJhbWVEb21haW4yIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVEb21haW4yKSkpOwotCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGFzdFNlZW4iKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShsYXN0U2VlbikpKTsKLQot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhh
ZFVzZXJJbnRlcmFjdGlvbiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShoYWRVc2VySW50ZXJhY3Rpb24pKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlckludGVyYWN0aW9u
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUobW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIklzR3JhbmRmYXRoZXJlZCIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVyZWQpKSk7Ci0KLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ByZXZh
bGVudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1By
ZXZhbGVudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIklzVmVyeVByZXZhbGVudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ZlcnlQcmV2YWxlbnQpKSk7Ci0KLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEYXRhUmVjb3Jkc1JlbW92
ZWQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkYXRhUmVj
b3Jkc1JlbW92ZWQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5z
aXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsK
LQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAg
ICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFs
dWVzW2ldLmdldCgpOwotICAgIH0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0
aWNzTWVyZ2VTdGF0aXN0aWMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCBy
YXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzTWVy
Z2VTdGF0aXN0aWMiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIs
IHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lRG9tYWluMSIsIHRvV0sodG9w
RnJhbWVEb21haW4xKSB9LAorICAgICAgICB7ICJUb3BGcmFtZURvbWFpbjIiLCB0b1dLKHRvcEZy
YW1lRG9tYWluMikgfSwKKyAgICAgICAgeyAiTGFzdFNlZW4iLCBhZG9wdFdLKFdLRG91YmxlQ3Jl
YXRlKGxhc3RTZWVuKSkgfSwKKyAgICAgICAgeyAiSGFkVXNlckludGVyYWN0aW9uIiwgYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkgfSwKKyAgICAgICAgeyAiTW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUobW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzR3JhbmRmYXRoZXJlZCIsIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkpIH0sCisgICAgICAgIHsgIklzUHJl
dmFsZW50IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKSB9LAorICAgICAg
ICB7ICJJc1ZlcnlQcmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ZlcnlQcmV2
YWxlbnQpKSB9LAorICAgICAgICB7ICJEYXRhUmVjb3Jkc1JlbW92ZWQiLCBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0TWVyZ2VTdGF0aXN0aWNDYWxsYmFj
aygpCkBAIC0xNjEyLDMxICsxMzIwLDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c0V4cGlyZWRTdGF0aXN0aWMoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgaGFkVXNlCiB7CiAg
ICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWND
YWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2
YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhZFVzZXJJbnRlcmFj
dGlvbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNTY2hlZHVsZWRGb3JBbGxC
dXRDb29raWVEYXRhUmVtb3ZhbCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkpOwotICAgIAotICAgIFZl
Y3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlw
ZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdl
dCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
RGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5
cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsK
KyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMiLCBjcmVhdGVX
S0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisg
ICAgICAgIHsgIkhhZFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhh
ZFVzZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsKSkgfSwKKyAgICAgICAgeyAiSXNQcmV2YWxlbnQiLCBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpIH0KKyAgICB9KS5nZXQoKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRFeHBpcmVkU3RhdGlzdGljQ2Fs
bGJhY2soKQpAQCAtMTY0OCwyOSArMTMzNywxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZQog
ewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSk7Ci0gICAgCi0g
ICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJh
d1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVz
LnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7
Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3
S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUp
IH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9
LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERp
ZFNldFByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQpAQCAtMTY4MiwyOSArMTM1MiwxMCBAQCB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoSlNTdHJp
bmdSZWYgaG9zdE5hbWUsIGJvb2wgdgogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNl
dFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFja0lELCBjb21wbGV0aW9uSGFu
ZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyho
b3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJh
d0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVz
aXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwot
ICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAg
ICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0g
dmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShy
YXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICAK
LSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVz
c2FnZSgiU2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAg
eyAiVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VmVyeVByZXZh
bGVudFJlc291cmNlQ2FsbGJhY2soKQpAQCAtMTcxNCwxMzggKzEzNjUsNTEgQEAgdm9pZCBUZXN0
UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZUNhbGxiYWNr
KCkKICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIikp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyIpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51
bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRU
eXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBX
S0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJu
RGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIsIHRvV0soaG9zdE5h
bWUpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
cmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkp
LmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuKCJJc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCB0b1dLKGhvc3ROYW1l
KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcihKU1N0cmluZ1JlZiBzdWJyZXNvdXJjZUhvc3QsIEpTU3RyaW5nUmVm
IHRvcEZyYW1lSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBr
ZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Vi
cmVzb3VyY2VIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcoc3VicmVzb3VyY2VIb3N0KSkpOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdCIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRv
cEZyYW1lSG9zdCkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5
cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgp
KTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tp
XSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25h
cnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgp
KSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRX
SyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0
dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7Cisg
ICAgICAgIHsgIlN1YnJlc291cmNlSG9zdCIsIHRvV0soc3VicmVzb3VyY2VIb3N0KSB9LAorICAg
ICAgICB7ICJUb3BGcmFtZUhvc3QiLCB0b1dLKHRvcEZyYW1lSG9zdCkgfSwKKyAgICB9KS5nZXQo
KSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJh
bWVVbmRlcihKU1N0cmluZ1JlZiBzdWJGcmFtZUhvc3QsIEpTU3RyaW5nUmVmIHRvcEZyYW1lSG9z
dCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJGcmFtZUhvc3QiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJG
cmFtZUhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0KSkpOwotICAgIAot
ICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9y
PFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlz
W2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAg
fQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVl
cy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBu
dWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0
VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4g
V0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVy
bkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0
dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlN1YkZyYW1lSG9zdCIsIHRvV0soc3ViRnJh
bWVIb3N0KSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3QiLCB0b1dLKHRvcEZyYW1lSG9zdCkg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVn
aXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhKU1N0cmluZ1JlZiBob3N0UmVkaXJlY3RlZEZyb20sIEpT
U3RyaW5nUmVmIGhvc3RSZWRpcmVjdGVkVG8pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFs
dWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RSZWRpcmVjdGVkRnJvbSkpKTsKLSAg
ICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0UmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdFJlZGlyZWN0ZWRUbykpKTsKLSAgICAKLSAgICBWZWN0
b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVS
ZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQo
KTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRh
dGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxw
dHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBl
SUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jv
b2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0
YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5p
bmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvIiwgY3JlYXRl
V0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdFJlZGlyZWN0ZWRGcm9tIiwgdG9XSyhob3N0
UmVkaXJlY3RlZEZyb20pIH0sCisgICAgICAgIHsgIkhvc3RSZWRpcmVjdGVkVG8iLCB0b1dLKGhv
c3RSZWRpcmVjdGVkVG8pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUs
IGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVU
ZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbkNhbGxi
YWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVl
czsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOwotICAgIAotICAgIFZl
Y3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1
ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNp
emUodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAg
ICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdL
ZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0
aW9uIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhv
c3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZh
bHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGlj
c0NhbGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb25DYWxsYmFjaygpCkBAIC0xODU1LDI2MSAr
MTQxOSw5NSBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0SGFzSGFkVXNl
ckludGVyYWN0aW9uQ2FsbGJhY2soKQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0hh
c0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0g
bnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dl
dFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJu
IFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1
cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpOwogfQog
CiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZShKU1N0cmlu
Z1JlZiBzdWJIb3N0LCBKU1N0cmluZ1JlZiB0b3BIb3N0KQogewotICAgIAotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlN1Ykhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJIb3N0KSkpOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEhvc3QiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0
b3BIb3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNp
emUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1
ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25j
ZSIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUo
cmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAg
V0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJu
RGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdl
dFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzT25seUlu
RGF0YWJhc2VPbmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU3ViSG9zdCIs
IHRvV0soc3ViSG9zdCkgfSwKKyAgICAgICAgeyAiVG9wSG9zdCIsIHRvV0sodG9wSG9zdCkgfSwK
KyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5k
ZmF0aGVyZWQoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCiB7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFs
dWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUp
KSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxX
S1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0g
ICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtl
eXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAg
ICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0dyYW5kZmF0
aGVyZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0
YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZSgiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiLCBjcmVhdGVXS0RpY3Rpb25hcnko
eworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZh
bHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZUlUUERhdGFiYXNlIikpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZSh2YWx1ZSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0
VXNlSVRQRGF0YWJhc2UiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0
aWNzR3JhbmRmYXRoZXJlZChKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0
dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5H
ZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdl
dCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuKCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUp
CiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5h
bWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1lSG9zdE5hbWUpKSk7Ci0gICAg
Ci0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0
b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0g
PSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7
Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0
YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyho
b3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVIb3N0TmFtZSIsIHRvV0sodG9wRnJhbWVI
b3N0TmFtZSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihKU1N0cmluZ1JlZiBob3N0TmFt
ZSwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+
PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3RO
YW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcodG9wRnJhbWVIb3N0TmFtZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+
IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2
YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAg
IHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdp
biIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCks
IHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJT
ZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luIiwgY3JlYXRlV0tEaWN0
aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAg
ICB7ICJUb3BGcmFtZUhvc3ROYW1lIiwgdG9XSyh0b3BGcmFtZUhvc3ROYW1lKSB9LAorICAgIH0p
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdFRvKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiBob3N0TmFt
ZVJlZGlyZWN0ZWRUbykKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBr
ZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9z
dE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhK
U1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1l
UmVkaXJlY3RlZFRvKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhr
ZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXpl
KCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkg
ewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVz
W2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvIikpOwotICAgIFdL
UmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlv
bmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXpl
KCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAg
ICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVk
aXJlY3RlZFRvIiwgdG9XSyhob3N0TmFtZVJlZGlyZWN0ZWRUbykgfSwKKyAgICB9KS5nZXQoKSk7
CiB9CiAKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdEZyb20oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVk
aXJlY3RlZEZyb20pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5
czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RO
YW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1l
UmVkaXJlY3RlZEZyb20pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlz
KGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNp
emUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1
ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rp
Y3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMu
c2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20iLCBjcmVhdGVXS0RpY3Rpb25hcnkoewor
ICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3RO
YW1lUmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pIH0sCisgICAg
fSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0VG8oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1l
UmVkaXJlY3RlZFRvKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtl
eXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAg
ICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0
TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpT
U3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZFRvIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVS
ZWRpcmVjdGVkVG8pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtl
eXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUo
KSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNb
aV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8iKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5
Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkp
OwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RvcEZy
YW1lVW5pcXVlUmVkaXJlY3RUbyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhv
c3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVk
VG8iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20o
SlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20p
CiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5h
bWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJlY3RlZEZy
b20pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgp
KTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAg
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1
ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0
YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUo
cmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFt
ZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20i
LCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0
aW9uKEpTU3RyaW5nUmVmIGZyb21Ib3N0LCBKU1N0cmluZ1JlZiB0b0hvc3QpCiB7Ci0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZyb21Ib3N0IikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoZnJvbUhvc3QpKSk7Ci0gICAg
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VG9Ib3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcodG9Ib3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5
cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5z
aXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsr
aSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFs
dWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tl
eXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0
aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIsIGNyZWF0ZVdLRGljdGlvbmFy
eSh7CisgICAgICAgIHsgIkZyb21Ib3N0IiwgdG9XSyhmcm9tSG9zdCkgfSwKKyAgICAgICAgeyAi
VG9Ib3N0IiwgdG9XSyh0b0hvc3QpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNv
bmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24iLCBzZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0YWxsU3RhdGlzdGljc0Rp
ZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKQEAgLTIxNDcs
MTIgKzE1NDUsOSBAQCB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVs
ZW1ldHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKICAgICAKIHZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVuc2lnbmVkIG51bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhV
c2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlcklu
dGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCBtZWRpYW5EYXlzU2lu
Y2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24sIHVu
c2lnbmVkIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSwgdW5zaWduZWQgdG9w
M01lZGlhblN1YkZyYW1lV2l0aG91dFVJLCB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VX
aXRob3V0VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUksIHVu
c2lnbmVkIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkpCiB7Ci0gICAgV0tC
dW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYg
Y29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwot
ICAgIAogICAgIFN0cmluZyBzdHJpbmcgPSBtYWtlU3RyaW5nKCJ7IFwibnVtYmVyT2ZQcmV2YWxl
bnRSZXNvdXJjZXNcIiA6ICIsIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCAiLCBcIm51bWJl
ck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbnVtYmVyT2ZQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCAiLCBcIm51bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbnVtYmVyT2ZQcmV2YWxl
bnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAiLCBcInRvcFByZXZhbGVudFJlc291
cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblwiIDogIiwgdG9w
UHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uLCAiLCBcIm1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNl
V2l0aFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9u
UHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uLCAiLCBcInRvcDNOdW1iZXJPZlBy
ZXZhbGVudFJlc291cmNlc1dpdGhVSVwiIDogIiwgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVJLCAiLCBcInRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSVwiIDogIiwgdG9wM01l
ZGlhblN1YkZyYW1lV2l0aG91dFVJLCAiLCBcInRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRV
SVwiIDogIiwgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJLCAiLCBcInRvcDNNZWRpYW5V
bmlxdWVSZWRpcmVjdHNXaXRob3V0VUlcIiA6ICIsIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNX
aXRob3V0VUksICIsIFwidG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSVwiIDog
IiwgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSwgIiB9Iik7CiAgICAgCi0g
ICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQs
IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZy51dGY4KCkuZGF0YSgp
KSkuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0
cmluZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5nKHN0cmluZy51dGY4KCkuZGF0YSgp
KS5nZXQoKSk7CiAKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRSdW5U
ZWxlbWV0cnlDYWxsYmFja0lELCAxLCAmcmVzdWx0KTsKIH0KQEAgLTIxNjQsMTYgKzE1NTksMTQg
QEAgYm9vbCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzTm90aWZ5T2JzZXJ2ZXIoKQogCiB2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmRE
YXRhUmVjb3JkcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc1Byb2Nl
c3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzVXBkYXRlQ29va2llQmxvY2tpbmcoSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0QmxvY2tDb29r
aWVzRm9ySG9zdENhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyIpKTsKLSAgICBXS0J1
bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3Rp
Y3NVcGRhdGVDb29raWVCbG9ja2luZyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3Rp
Y3NDYWxsRGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdENhbGxiYWNrKCkKQEAgLTIxODMsMTM1ICsx
NTc2LDgzIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRCbG9ja0Nvb2tp
ZXNGb3JIb3N0Q2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTdWJtaXRU
ZWxlbWV0cnkoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTdWJtaXRU
ZWxlbWV0cnkiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIs
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTdWJtaXRU
ZWxlbWV0cnkiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZSgiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQi
LCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0lzUnVubmluZ1Rl
c3QoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU2V0
SXNSdW5uaW5nVGVzdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0IiwgdmFsdWUpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRz
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7Ci0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsIiwgc2Vjb25kcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcykKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEb3Vi
bGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSIsIHNlY29uZHMpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCBlbnRy
aWVzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1heFN0YXRpc3RpY3NFbnRyaWVz
IikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKGVudHJpZXMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoIlNldE1heFN0YXRpc3RpY3NFbnRyaWVzIiwgZW50cmllcyk7CiB9CiAgICAgCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQgZW50cmll
cykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQcnVuZUVudHJpZXNEb3duVG8iKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoZW50cmllcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U2V0UHJ1bmVFbnRyaWVzRG93blRvIiwgZW50cmllcyk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKEpTVmFsdWVSZWYg
Y2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZENs
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3Rl
bnRTdG9yZSIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6
cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQgaG91cnMsIEpTVmFsdWVSZWYgY2Fs
bGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZENsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRT
dG9yZU1vZGlmaWVkU2luY2VIb3VycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3VycykpOwotICAgIFdLQnVuZGxl
UG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0
YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJz
IiwgaG91cnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhclRocm91Z2hX
ZWJzaXRlRGF0YVJlbW92YWwoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RS
dW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFs
Q2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0
YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tCdW5kbGVQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzQ2xl
YXJUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0KEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIGlu
Y2x1ZGVIdHRwT25seUNvb2tpZXMpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwot
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaW5jbHVkZUh0dHBPbmx5Q29v
a2llcykpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8
V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwot
ICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNb
aV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhv
c3QiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAg
ICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJJbmNsdWRl
SHR0cE9ubHlDb29raWVzIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaW5jbHVkZUh0dHBPbmx5
Q29va2llcykpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3Rh
dGlzdGljc0hhc0xvY2FsU3RvcmFnZShKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBhdXRv
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNT
dGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVm
IHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0g
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdl
IiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NDYWNoZU1heEFnZUNhcChkb3VibGUgc2Vjb25kcykKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRz
KSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzQ2Fj
aGVNYXhBZ2VDYXAiLCBzZWNvbmRzKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNTdGF0aXN0
aWNzSXNvbGF0ZWRTZXNzaW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIGF1dG8gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYXNTdGF0
aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJl
dHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAg
QVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vzc2lvbiIs
IHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTIzMjAsOSArMTY2MSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29t
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0
aXN0aWNzRGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJDYWxsYmFja0lELCBjb21wbGV0aW9u
SGFuZGxlcik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1Nob3VsZERv
d25ncmFkZVJlZmVycmVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiLCB2YWx1ZSk7CiAgICAgbV9oYXNTZXREb3duZ3Jh
ZGVSZWZlcnJlckNhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjMzOCwxMSArMTY3NywxMCBAQCB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVz
KGJvb2wgdmFsdWUsIEpTVmFsdWVSZQogICAgICAgICByZXR1cm47CiAKICAgICBjYWNoZVRlc3RS
dW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2ll
c0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKTsKKyAgICBhdXRv
IG1lc3NhZ2VOYW1lID0gIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVz
IjsKICAgICBpZiAob25seU9uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uKQotICAgICAgICBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0
YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgICAgIG1lc3NhZ2VOYW1lID0gIlNldFN0YXRpc3Rp
Y3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24iOworICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2VOYW1lLCB2YWx1ZSk7CiAgICAgbV9oYXNTZXRC
bG9ja1RoaXJkUGFydHlDb29raWVzQ2FsbGJhY2sgPSB0cnVlOwogfQogCkBAIC0yMzU4LDkgKzE2
OTYsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZShib29sIHZhbHVlLCBKU1ZhbAogICAgICAgICByZXR1cm47CiAKICAgICBj
YWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGVDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiLCB2YWx1ZSk7CiAgICAgbV9oYXNTZXRGaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUNhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjM4MywxMCAr
MTcxOSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxDbGVhclRocm91Z2hXZWJz
aXRlRGF0YVJlbW92YWxDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRU
b1NhbWVTaXRlU3RyaWN0Q29va2llcyhKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNWYWx1ZVJlZiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0
aWNzRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFu
ZGxlcik7Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIikpOwot
ICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KGhvc3ROYW1lKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIs
IHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNz
Q2FsbERpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzQ2FsbGJhY2soKQpAQCAtMjM5OCwyNyAr
MTczMSwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VG9TYW1lU2l0
ZVN0cmljdENvb2tpZXNDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRG
aXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKEpTU3RyaW5nUmVmIGZpcnN0UGFydHlVUkxTdHJpbmcs
IEpTU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRGaXJzdFBh
cnR5SG9zdENOQU1FRG9tYWluQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotCi0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZpcnN0UGFydHlVUkwiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhmaXJzdFBhcnR5
VVJMU3RyaW5nKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkNOQU1FIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoY25hbWVVUkxTdHJpbmcpKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tU
eXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlz
W2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAg
fQotCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIikpOwotICAg
IGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRh
dGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBv
c3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJTdGF0
aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7
CisgICAgICAgIHsgIkZpcnN0UGFydHlVUkwiLCB0b1dLKGZpcnN0UGFydHlVUkxTdHJpbmcpIH0s
CisgICAgICAgIHsgIkNOQU1FIiwgdG9XSyhjbmFtZVVSTFN0cmluZykgfSwKKyAgICB9KS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRGaXJzdFBhcnR5
SG9zdENOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQyOSwxMCArMTc0NSw3IEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluQ2Fs
bGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9t
YWluKEpTU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRUaGly
ZFBhcnR5Q05BTUVEb21haW5DYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBh
dXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U3RhdGlzdGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKTsKLSAgICBhdXRvIG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhjbmFtZVVSTFN0cmluZykp
OwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RN
ZXNzYWdlKCJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIiwgdG9XSyhjbmFtZVVS
TFN0cmluZykuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlk
U2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQ0Myw5ICsxNzU2LDggQEAg
dm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRoaXJkUGFydHlDTkFNRURvbWFp
bkNhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50
U3RhdGUoSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUNhbGxiYWNrSUQs
IGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0
aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIpOworCisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1Jlc2V0VG9Db25z
aXN0ZW50U3RhdGUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFJl
c2V0VG9Db25zaXN0ZW50U3RhdGVDYWxsYmFjaygpCkBAIC0yNDg2LDk1ICsxNzk4LDQ2IEBAIHZv
aWQgVGVzdFJ1bm5lcjo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZ0NhbGxiYWNrKCkKIHZvaWQgVGVz
dFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoSlNWYWx1ZVJlZiBjYWxsYmFjaykK
IHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9yYWdlQWNjZXNzRW50cmllc0Nh
bGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRB
bGxTdG9yYWdlQWNjZXNzRW50cmllcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzIik7
CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50
cmllc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQorc3RhdGljIEpTVmFsdWVSZWYg
bWFrZURvbWFpbnNWYWx1ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKIHsKLSAgICBX
S0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7
Ci0gICAgCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiWyIpOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBi
dWlsZGVyLmFwcGVuZCgnWycpOwogICAgIGJvb2wgZmlyc3REb21haW4gPSB0cnVlOwogICAgIGZv
ciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBpZiAoZmlyc3REb21haW4pCi0g
ICAgICAgICAgICBmaXJzdERvbWFpbiA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZG9t
YWluKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOworICAgICAg
ICBidWlsZGVyLmFwcGVuZChmaXJzdERvbWFpbiA/ICJcIiIgOiAiLCBcIiIsIGRvbWFpbiwgJyIn
KTsKKyAgICAgICAgZmlyc3REb21haW4gPSBmYWxzZTsKICAgICB9Ci0gICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJdIik7Ci0gICAgCi0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1Zh
bHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkp
OwotCisgICAgYnVpbGRlci5hcHBlbmQoJ10nKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VGcm9t
SlNPTlN0cmluZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5nKGJ1aWxkZXIudG9TdHJp
bmcoKS51dGY4KCkuZGF0YSgpKS5nZXQoKSk7Cit9Cit2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRS
ZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayhWZWN0b3I8U3RyaW5nPiYgZG9t
YWlucykKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1ha2VEb21haW5zVmFsdWUoZG9tYWlucyk7CiAg
ICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNr
SUQsIDEsICZyZXN1bHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmxvYWRlZFN1YnJlc291cmNl
RG9tYWlucyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxi
YWNrKExvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJM
b2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlk
UmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiYg
ZG9tYWlucykKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFn
ZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkp
OwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0KG1haW5GcmFtZSk7Ci0gICAgCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdbJyk7Ci0gICAgYm9vbCBpc0ZpcnN0RG9tYWlu
ID0gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAgICAgaWYg
KGlzRmlyc3REb21haW4pCi0gICAgICAgICAgICBpc0ZpcnN0RG9tYWluID0gZmFsc2U7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChkb21haW4pOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIlwiIik7Ci0gICAgfQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCddJyk7Ci0gICAg
Ci0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRl
eHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCisgICAgYXV0byByZXN1bHQgPSBtYWtl
RG9tYWluc1ZhbHVlKGRvbWFpbnMpOwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soTG9hZGVk
U3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKEpTU3RyaW5nUmVmIHBlcnNpc3RlbnRJZCwgSlNT
dHJpbmdSZWYgbGFiZWwsIGNvbnN0IGNoYXIqIHR5cGUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVm
Pj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiUGVyc2lzdGVudElEIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0socGVy
c2lzdGVudElkKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGxhYmVsKSk7
Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJUeXBlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcodHlwZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsK
LSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5
cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5
c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5n
ZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRNb2NrTWVkaWFEZXZp
Y2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJBZGRNb2NrTWVkaWFEZXZpY2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJQ
ZXJzaXN0ZW50SUQiLCB0b1dLKHBlcnNpc3RlbnRJZCkgfSwKKyAgICAgICAgeyAiTGFiZWwiLCB0
b1dLKGxhYmVsKSB9LAorICAgICAgICB7ICJUeXBlIiwgdG9XSyh0eXBlKSB9LAorICAgIH0pLmdl
dCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrQ2FtZXJhRGV2aWNlKEpTU3RyaW5n
UmVmIHBlcnNpc3RlbnRJZCwgSlNTdHJpbmdSZWYgbGFiZWwpCkBAIC0yNTk0LDE1MyArMTg1Nyw3
MiBAQCB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTY3JlZW5EZXZpY2UoSlNTdHJpbmdSZWYgcGVy
c2lzdGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbAogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyTW9j
a01lZGlhRGV2aWNlcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJNb2NrTWVk
aWFEZXZpY2VzIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhck1vY2tNZWRpYURl
dmljZXMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVNb2NrTWVkaWFEZXZpY2UoSlNT
dHJpbmdSZWYgcGVyc2lzdGVudElkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlbW92
ZU1vY2tNZWRpYURldmljZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VC
b2R5KHRvV0socGVyc2lzdGVudElkKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlJlbW92ZU1vY2tNZWRpYURldmljZSIsIHRvV0socGVyc2lzdGVudElkKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRNb2NrTWVkaWFEZXZpY2VzKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJSZXNldE1vY2tNZWRpYURldmljZXMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIlJlc2V0TW9ja01lZGlhRGV2aWNlcyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbih1bnNpZ25lZCBvcmllbnRhdGlvbikKIHsKLSAgICBh
dXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKG9yaWVudGF0aW9uKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKCJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iLCBvcmllbnRhdGlvbik7CiB9
CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJs
ZWQoKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCIpKTsK
LSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEp
OwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBl
SUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hy
b25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlckVuYWJsZWQiKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKKwogdm9pZCBUZXN0UnVubmVy
Ojpjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ29ubmVjdE1vY2tHYW1lcGFkIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0KLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNvbm5lY3RNb2NrR2FtZXBhZCIsIGluZGV4
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQg
aW5kZXgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlzY29ubmVjdE1vY2tHYW1lcGFk
IikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKGluZGV4KSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoIkRpc2Nvbm5lY3RNb2NrR2FtZXBhZCIsIGluZGV4KTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRNb2NrR2FtZXBhZERldGFpbHModW5zaWduZWQgaW5kZXgsIEpTU3RyaW5nUmVmIGdhbWVw
YWRJRCwgSlNTdHJpbmdSZWYgbWFwcGluZywgdW5zaWduZWQgYXhpc0NvdW50LCB1bnNpZ25lZCBi
dXR0b25Db3VudCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlz
OwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSUQi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhnYW1lcGFkSUQpKTsKLQotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1hcHBpbmciKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQodG9XSyhtYXBwaW5nKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNDb3Vu
dCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNDb3Vu
dCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkJ1dHRvbkNvdW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoYnV0dG9uQ291bnQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tl
eXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXpl
KGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJh
d0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNb
aV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dhbWVw
YWREZXRhaWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVz
LmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZSgiU2V0TW9ja0dhbWVwYWREZXRhaWxzIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAg
ICAgICAgeyAiR2FtZXBhZElEIiwgdG9XSyhnYW1lcGFkSUQpIH0sCisgICAgICAgIHsgIk1hcHBp
bmciLCB0b1dLKG1hcHBpbmcpIH0sCisgICAgICAgIHsgIkdhbWVwYWRJbmRleCIsIGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJBeGlzQ291bnQiLCBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKGF4aXNDb3VudCkpIH0sCisgICAgICAgIHsgIkJ1dHRvbkNvdW50Iiwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25Db3VudCkpIH0sCisgICAgfSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCB1bnNpZ25lZCBheGlzSW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5
cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNJbmRleCIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpKTsKLQotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSk7Ci0KLSAg
ICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3
VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMu
cmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAg
ICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3Jl
YXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwot
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZEF4aXNW
YWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkdhbWVwYWRJbmRleCIsIGFk
b3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJBeGlzSW5kZXgiLCBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpIH0sCisgICAgICAgIHsgIlZhbHVlIiwg
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWduZWQgaW5kZXgs
IHVuc2lnbmVkIGJ1dHRvbkluZGV4LCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBl
UmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25JbmRleCIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbkluZGV4KSkpOwotCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpKTsKLQot
ICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiBy
YXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVl
cy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlIikpOwotICAgIFdLUmV0
YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFy
eUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkp
KTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TW9ja0dhbWVwYWRC
dXR0b25WYWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkdhbWVwYWRJbmRl
eCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJCdXR0b25J
bmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uSW5kZXgpKSB9LAorICAgICAgICB7
ICJWYWx1ZSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgp
KTsKIH0KKwogI2Vsc2UKKwogdm9pZCBUZXN0UnVubmVyOjpjb25uZWN0TW9ja0dhbWVwYWQodW5z
aWduZWQpCiB7CiB9CkBAIC0yNzYwLDMwICsxOTQyLDI1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
TW9ja0dhbWVwYWRBeGlzVmFsdWUodW5zaWduZWQsIHVuc2lnbmVkLCBkb3VibGUpCiB2b2lkIFRl
c3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWduZWQsIHVuc2lnbmVkLCBk
b3VibGUpCiB7CiB9CisKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0T3BlblBhbmVsRmlsZXMoSlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogewotICAgIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRDb250ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKSk7CisgICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAKICAgICBpZiAoIUpTVmFsdWVJc0FycmF5
KGNvbnRleHQsIGZpbGVzVmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09iamVjdFJl
ZiBmaWxlcyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBmaWxlc1ZhbHVlLCBudWxscHRyKTsK
LSAgICBzdGF0aWMgYXV0byBsZW5ndGhQcm9wZXJ0eSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBmaWxlc0xlbmd0aFZhbHVl
ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBmaWxlcywgbGVuZ3RoUHJvcGVydHkuZ2V0
KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGZpbGVzTGVu
Z3RoVmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGZpbGVzID0gKEpTT2JqZWN0
UmVmKWZpbGVzVmFsdWU7CiAgICAgYXV0byBmaWxlVVJMcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJy
YXlDcmVhdGUoKSk7Ci0gICAgYXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKKyAg
ICBhdXRvIGZpbGVzTGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgZmlsZXMpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVl
UmVmIGZpbGVWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZpbGVz
LCBpLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgZmls
ZVZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gZmlsZSA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgZmlsZVZhbHVlLCBudWxscHRyKSk7Cisg
ICAgICAgIGF1dG8gZmlsZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1ZSk7CiAg
ICAgICAgIHNpemVfdCBmaWxlQnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3Ry
aW5nU2l6ZShmaWxlLmdldCgpKSArIDE7CiAgICAgICAgIGF1dG8gZmlsZUJ1ZmZlciA9IG1ha2VV
bmlxdWVBcnJheTxjaGFyPihmaWxlQnVmZmVyU2l6ZSk7CiAgICAgICAgIEpTU3RyaW5nR2V0VVRG
OENTdHJpbmcoZmlsZS5nZXQoKSwgZmlsZUJ1ZmZlci5nZXQoKSwgZmlsZUJ1ZmZlclNpemUpOwpA
QCAtMjc5NywyMiArMTk3NCwxNSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVz
KEpTVmFsdWVSZWYgZmlsZXNWYWx1ZSkKIAogICAgIH0KIAotICAgIHN0YXRpYyBhdXRvIG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0T3BlblBh
bmVsRmlsZVVSTHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIGZpbGVVUkxzLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE9w
ZW5QYW5lbEZpbGVVUkxzIiwgZmlsZVVSTHMuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldE9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKEpTVmFsdWVSZWYgZGF0YSkKIHsKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShwYWdlKSk7Ci0KLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKTsKICAgICAvLyBGSVhNRSAoMTIzMDU4KTogVXNlIGEgSlNDIEFQSSB0byBn
ZXQgYnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBleHBvc2VkLgotICAgIFdLUmV0YWluUHRy
PFdLRGF0YVJlZj4gaWNvbkRhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJ
bnQ4QXJyYXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKTsKLQotICAg
IHN0YXRpYyBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0T3BlblBhbmVsRmlsZVVSTHNNZWRpYUljb24iKSk7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIGljb25EYXRhLmdldCgpKTsK
KyAgICBhdXRvIGljb25EYXRhID0gYWRvcHRXSyhXS0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50
OEFycmF5KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWFpbkpTQ29udGV4
dCgpLCBkYXRhKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRPcGVuUGFuZWxGaWxlVVJMc01l
ZGlhSWNvbiIsIGljb25EYXRhLmdldCgpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRhdGEp
OwogI2VuZGlmCkBAIC0yODIxLDExICsxOTkxLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRPcGVu
UGFuZWxGaWxlc01lZGlhSWNvbihKU1ZhbHVlUmVmIGRhdGEpCiB2b2lkIFRlc3RSdW5uZXI6OnJl
bW92ZUFsbFNlc3Npb25DcmVkZW50aWFscyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNh
Y2hlVGVzdFJ1bm5lckNhbGxiYWNrKERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxi
YWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZW1vdmVB
bGxTZXNzaW9uQ3JlZGVudGlhbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUpKTsKLSAgICAKLSAgICBX
S0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgi
UmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrKCkKQEAgLTI4MzUs
NDkgKzIwMDEsMzMgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlQWxsU2Vzc2lvbkNy
ZWRlbnRpYWxzQ2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGUoSlNT
dHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRE9NQ2Fj
aGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyRE9NQ2FjaGUiLCB0b1dLKG9yaWdpbikuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGVzKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDbGVhckRPTUNhY2hlcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
Q2xlYXJET01DYWNoZXMiKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNET01DYWNoZShKU1N0
cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFzRE9NQ2FjaGUi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJu
RGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
IHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJIYXNET01DYWNoZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7
CiB9CiAKIHVpbnQ2NF90IFRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZShKU1N0cmluZ1JlZiBvcmln
aW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRE9NQ2FjaGVTaXplIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcob3JpZ2luKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxs
cHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgcmV0dXJuIFdLVUludDY0
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVybkRhdGEpKTsKKyAgICByZXR1
cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50NjQoIkRPTUNhY2hlU2l6
ZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dT
dG9yYWdlUXVvdGFJbmNyZWFzZShib29sIHdpbGxJbmNyZWFzZSkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh3
aWxsSW5jcmVhc2UpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJT
ZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIiwgd2lsbEluY3JlYXNlKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1hbmlmZXN0VGhlbihKU1ZhbHVlUmVmIGNhbGxiYWNr
KQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKEdldEFwcGxpY2F0aW9uTWFuaWZlc3RD
YWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0
QXBwbGljYXRpb25NYW5pZmVzdCIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIp
OworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFwcGxpY2F0aW9uTWFuaWZlc3QiKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpkaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0KCkKQEAgLTI4OTcsMjIx
ICsyMDQ3LDEzMCBAQCBzaXplX3QgVGVzdFJ1bm5lcjo6dXNlclNjcmlwdEluamVjdGVkQ291bnQo
KSBjb25zdAogCiB2b2lkIFRlc3RSdW5uZXI6OmluamVjdFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYg
c2NyaXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluamVjdFVzZXJTY3JpcHQiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiSW5qZWN0VXNlclNjcmlwdCIsIHRvV0so
c2NyaXB0KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2VuZERpc3BsYXlDb25maWd1
cmF0aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZvclRlc3RpbmciKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNlbmREaXNwbGF5Q29uZmlndXJhdGlvbkNoYW5n
ZWRNZXNzYWdlRm9yVGVzdGluZyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNlcnZpY2VX
b3JrZXJGZXRjaFRpbWVvdXQoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMp
KTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFNlcnZpY2VXb3JrZXJG
ZXRjaFRpbWVvdXQiLCBzZWNvbmRzKTsKIH0KIAogLy8gV2ViQXV0aG4KIHZvaWQgVGVzdFJ1bm5l
cjo6YWRkVGVzdEtleVRvS2V5Y2hhaW4oSlNTdHJpbmdSZWYgcHJpdmF0ZUtleUJhc2U2NCwgSlNT
dHJpbmdSZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlvblRhZ0Jhc2U2NCkKIHsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcml2YXRlS2V5IikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKHRvV0socHJpdmF0ZUtleUJhc2U2NCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvblRhZyIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uVGFnQmFzZTY0KSk7Ci0KLSAgICBWZWN0b3I8
V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwot
ICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZh
bHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdW
YWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQWRkVGVzdEtleVRvS2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9u
YXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMu
ZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJBZGRUZXN0S2V5VG9LZXljaGFpbiIsIGNyZWF0ZVdL
RGljdGlvbmFyeSh7CisgICAgICAgIHsgIlByaXZhdGVLZXkiLCB0b1dLKHByaXZhdGVLZXlCYXNl
NjQpIH0sCisgICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAg
ICB7ICJBcHBsaWNhdGlvblRhZyIsIHRvV0soYXBwbGljYXRpb25UYWdCYXNlNjQpIH0sCisgICAg
fSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFuVXBLZXljaGFpbihKU1N0cmlu
Z1JlZiBhdHRyTGFiZWwsIEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpCiB7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBpZiAoYXBwbGljYXRpb25MYWJlbEJhc2U2
NCkgewotICAgICAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpKTsKLSAgICAgICAgdmFsdWVzLmFwcGVuZCh0b1dL
KGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdS
ZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tl
eXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXpl
KCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0g
PSB2YWx1ZXNbaV0uZ2V0KCk7CisgICAgaWYgKCFhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB7Cisg
ICAgICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFuVXBLZXljaGFpbiIsIGNyZWF0ZVdL
RGljdGlvbmFyeSh7CisgICAgICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkg
fSwKKyAgICAgICAgfSkuZ2V0KCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYW5VcEtleWNoYWluIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShy
YXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYW5VcEtleWNoYWluIiwgY3JlYXRl
V0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiQXR0ckxhYmVsIiwgdG9XSyhhdHRyTGFiZWwpIH0s
CisgICAgICAgIHsgIkFwcGxpY2F0aW9uTGFiZWwiLCB0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNl
NjQpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmtleUV4aXN0c0lu
S2V5Y2hhaW4oSlNTdHJpbmdSZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxh
YmVsQmFzZTY0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7
Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGF0dHJMYWJlbCkpOwotCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25MYWJl
bCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpKTsK
LQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVm
PiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1Zh
bHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7
Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJLZXlFeGlzdHNJbktleWNoYWluIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNy
ZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsK
LQotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBB
U1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVz
c2FnZVJldHVybmluZ0Jvb2xlYW4oIktleUV4aXN0c0luS2V5Y2hhaW4iLCBjcmVhdGVXS0RpY3Rp
b25hcnkoeworICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAg
ICAgeyAiQXBwbGljYXRpb25MYWJlbCIsIHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgfSwK
KyAgICB9KS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgVGVzdFJ1bm5lcjo6c2VydmVyVHJ1
c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKSk7Ci0gICAgV0tU
eXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBB
U1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0g
ICAgcmV0dXJuIFdLVUludDY0R2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ1VJbnQ2NCgiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50
Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVy
dHNBc3luY2hyb25vdXNseShib29sIHNob3VsZERpc21pc3NBc3luY2hyb25vdXNseSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5j
aHJvbm91c2x5IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGREaXNtaXNzQXN5bmNocm9ub3VzbHkpKTsK
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNob3VsZERpc21pc3NKYXZhU2Ny
aXB0QWxlcnRzQXN5bmNocm9ub3VzbHkiLCBzaG91bGREaXNtaXNzQXN5bmNocm9ub3VzbHkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9kYWwoKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkFib3J0TW9kYWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkFib3J0TW9k
YWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKCkKIHsK
LSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCkKIHsKLSAgICBhdXRv
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xl
YXJBZENsaWNrQXR0cmlidXRpb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVt
b3ZhbCgpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0
YVJlbW92YWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIs
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyQWRDbGlja0F0dHJp
YnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVl
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJy
aWRlVGltZXJGb3JUZXN0aW5nIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0QWRDbGlj
a0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmco
SlNTdHJpbmdSZWYgdXJsU3RyaW5nKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIikpOwotICAgIGF1dG8gd3Rm
VVJMU3RyaW5nID0gdG9XVEZTdHJpbmcoV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodXJsU3Ry
aW5nKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh3dGZVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSkpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZSgiU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmciLAorICAgICAg
ICBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRvV1RGU3RyaW5nKHVybFN0cmlu
ZykudXRmOCgpLmRhdGEoKSkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjptYXJrQWRDbGlja0F0
dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyIpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiTWFya0FkQ2xpY2tB
dHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0T2Zmc2NyZWVuQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk9mZnNjcmVlbkNhbnZhc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQ
cmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRC
dW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlk
ZVByZWZlcmVuY2UoIk9mZnNjcmVlbkNhbnZhc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogYm9v
bCBUZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYXNBcHBCb3VuZFNl
c3Npb24iKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZy
ZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotCi0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0so
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVy
biBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkhhc0FwcEJvdW5k
U2Vzc2lvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQXBwQm91bmRTZXNzaW9uKCkK
IHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2xlYXJBcHBCb3VuZFNlc3Npb24iKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoIkNsZWFyQXBwQm91bmRTZXNzaW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBw
Qm91bmREb21haW5zKEpTVmFsdWVSZWYgb3JpZ2luQXJyYXksIEpTVmFsdWVSZWYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soRGlkU2V0QXBwQm91bmRE
b21haW5zQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkp
OworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogCiAgICAgaWYg
KCFKU1ZhbHVlSXNBcnJheShjb250ZXh0LCBvcmlnaW5BcnJheSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEpTT2JqZWN0UmVmIG9yaWdpbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3Jp
Z2luQXJyYXksIG51bGxwdHIpOwotICAgIHN0YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5ID0gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVl
UmVmIG9yaWdpbnNMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3Jp
Z2lucywgbGVuZ3RoUHJvcGVydHkuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlz
TnVtYmVyKGNvbnRleHQsIG9yaWdpbnNMZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybjsKLQor
ICAgIGF1dG8gb3JpZ2lucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBvcmlnaW5BcnJheSwg
bnVsbHB0cik7CiAgICAgYXV0byBvcmlnaW5VUkxzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNy
ZWF0ZSgpKTsKLSAgICBhdXRvIG9yaWdpbnNMZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBvcmlnaW5zTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9yaWdpbnNMZW5ndGg7ICsraSkgeworICAgIGF1dG8g
b3JpZ2luc0xlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG9yaWdpbnMpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5zTGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1
ZVJlZiBvcmlnaW5WYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9y
aWdpbnMsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0
LCBvcmlnaW5WYWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIG9y
aWdpbiA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgb3JpZ2luVmFsdWUsIG51
bGxwdHIpKTsKKyAgICAgICAgYXV0byBvcmlnaW4gPSBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBv
cmlnaW5WYWx1ZSk7CiAgICAgICAgIHNpemVfdCBvcmlnaW5CdWZmZXJTaXplID0gSlNTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKG9yaWdpbi5nZXQoKSkgKyAxOwogICAgICAgICBhdXRv
IG9yaWdpbkJ1ZmZlciA9IG1ha2VVbmlxdWVBcnJheTxjaGFyPihvcmlnaW5CdWZmZXJTaXplKTsK
ICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhvcmlnaW4uZ2V0KCksIG9yaWdpbkJ1ZmZl
ci5nZXQoKSwgb3JpZ2luQnVmZmVyU2l6ZSk7CkBAIC0zMTE5LDcgKzIxNzgsNyBAQCB2b2lkIFRl
c3RSdW5uZXI6OnNldEFwcEJvdW5kRG9tYWlucyhKU1ZhbHVlUmVmIG9yaWdpbkFycmF5LCBKU1Zh
bHVlUmVmIGNvbXBsZXRpbwogICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShvcmlnaW5VUkxzLmdl
dCgpLCBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9yaWdpbkJ1ZmZlci5nZXQo
KSkpLmdldCgpKTsKICAgICB9CiAKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QXBwQm91bmREb21haW5zIikpOworICAgIGF1
dG8gbWVzc2FnZU5hbWUgPSB0b1dLKCJTZXRBcHBCb3VuZERvbWFpbnMiKTsKICAgICBXS0J1bmRs
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG9yaWdpblVSTHMuZ2V0KCkpOwogfQogCkBAIC0zMTI4LDYgKzIxODcsMTEg
QEAgdm9pZCBUZXN0UnVubmVyOjpkaWRTZXRBcHBCb3VuZERvbWFpbnNDYWxsYmFjaygpCiAgICAg
Y2FsbFRlc3RSdW5uZXJDYWxsYmFjayhEaWRTZXRBcHBCb3VuZERvbWFpbnNDYWxsYmFja0lEKTsK
IH0KIAordm9pZCBUZXN0UnVubmVyOjpwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29s
IHZhbHVlKQoreworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5E
CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCBjMGExNDA5MDVlZGYzZGRhNGE3NjFhYjYy
MDdkOTdiNDM2MjA4NmJiLi5hYWViNDEwZTNlZDA3ZmI2Y2E0ZjlmMDNiZmY3ZGUzNzIyNTI3Zjcw
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RS
dW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RS
dW5uZXIuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gSlNXcmFwcGFibGUKICAg
ICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5k
b3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7
CiAKICAgICBib29sIGlzSU9TRmFtaWx5KCkgY29uc3QKICAgICB7CkBAIC0yNTMsNyArMjUzLDcg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoYm9vbCBm
KSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwgPSBmOyB9CiAgICAgYm9vbCB3aWxsU2Vu
ZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSBjb25zdCB7IHJldHVybiBtX3dpbGxTZW5k
UmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdDsgfQogICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1
ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZikgeyBtX3dpbGxTZW5kUmVxdWVzdFJldHVy
bnNOdWxsT25SZWRpcmVjdCA9IGY7IH0KLSAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdEFkZHNI
VFRQQm9keShKU1N0cmluZ1JlZiBib2R5KSB7IG1fd2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHkgPSB0
b1dURlN0cmluZyh0b1dLKGJvZHkpKTsgfQorICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0QWRk
c0hUVFBCb2R5KEpTU3RyaW5nUmVmIGJvZHkpIHsgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keSA9
IHRvV1RGU3RyaW5nKGJvZHkpOyB9CiAgICAgU3RyaW5nIHdpbGxTZW5kUmVxdWVzdEhUVFBCb2R5
KCkgY29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keTsgfQogCiAgICAgdm9p
ZCBzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmKTsKQEAgLTI4Niw3ICsyODYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2soKTsKICAgICB2b2lkIGNhbGxT
ZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaygpOwogCi0gICAgdm9pZCBvdmVycmlkZVByZWZl
cmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVyZW5jZSwgSlNTdHJpbmdSZWYgdmFsdWUpOworICAgIHN0
YXRpYyB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJlbmNlLCBKU1N0
cmluZ1JlZiB2YWx1ZSk7CiAKICAgICAvLyBDb29raWVzIHRlc3RpbmcKICAgICB2b2lkIHNldEFs
d2F5c0FjY2VwdENvb2tpZXMoYm9vbCk7CkBAIC0zMDQsNyArMzA0LDcgQEAgcHVibGljOgogCiAg
ICAgLy8gR2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9v
bCk7Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUs
IGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNWYWx1ZVJlZiBhbHRpdHVkZSwg
SlNWYWx1ZVJlZiBhbHRpdHVkZUFjY3VyYWN5LCBKU1ZhbHVlUmVmIGhlYWRpbmcsIEpTVmFsdWVS
ZWYgc3BlZWQsIEpTVmFsdWVSZWYgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBh
Y2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRp
dHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4g
c3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoSlNTdHJpbmdSZWYgbWVzc2FnZSk7CiAg
ICAgYm9vbCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKIApAQCAtMzM1LDggKzMzNSw4
IEBAIHB1YmxpYzoKICAgICBib29sIHNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQoKSBjb25zdDsK
IAogICAgIEpTVmFsdWVSZWYgZmFpbE5leHROZXdDb2RlQmxvY2soKTsKLSAgICBKU1ZhbHVlUmVm
IG51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbik7Ci0gICAgSlNWYWx1
ZVJlZiBuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgdGhlRnVuY3Rpb24pOworICAgIEpT
VmFsdWVSZWYgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIGZ1bmN0aW9uKTsKKyAgICBK
U1ZhbHVlUmVmIG5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiBmdW5jdGlvbik7CiAKICAg
ICBib29sIHNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheTsgfQogICAgIHZv
aWQgc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoYm9vbCk7CkBAIC01
NDksNiArNTQ5LDggQEAgcHJpdmF0ZToKIAogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtX3Rl
c3RVUkw7IC8vIFNldCBieSBJbmplY3RlZEJ1bmRsZVBhZ2Ugb25jZSBwcm92aXNpb25hbCBsb2Fk
IHN0YXJ0cy4KIAorICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCk7
CisKICAgICBTdHJpbmcgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keTsKICAgICBXVEY6OlNlY29u
ZHMgbV90aW1lb3V0IHsgMzBfcyB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAppbmRleCA2
NGFjODE5NzE1M2FhZTBhMGFiNzFlYmJjMjk0MjQ4NGEzNWU2NWFkLi42ZTAwZDk5MjI1ZDFmMWFh
YjI2MTU2Yzg5MjViMDU2NmEzNjZkNzI5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0SW5wdXRD
b250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVk
ZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKICNp
bmNsdWRlICJKU1RleHRJbnB1dENvbnRyb2xsZXIuaCIKQEAgLTQwLDMwICs0MSwxNCBAQCBSZWY8
VGV4dElucHV0Q29udHJvbGxlcj4gVGV4dElucHV0Q29udHJvbGxlcjo6Y3JlYXRlKCkKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0SW5wdXRDb250cm9sbGVyKTsKIH0KIAotVGV4dElucHV0
Q29udHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcigpCi17Ci19Ci0KLVRleHRJbnB1dENvbnRy
b2xsZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKCkKLXsKLX0KLQogSlNDbGFzc1JlZiBUZXh0SW5w
dXRDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogewogICAgIHJldHVybiBKU1RleHRJbnB1dENv
bnRyb2xsZXI6OnRleHRJbnB1dENvbnRyb2xsZXJDbGFzcygpOwogfQogCi12b2lkIFRleHRJbnB1
dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXh0SW5w
dXRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewot
ICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgInRleHRJbnB1dENvbnRyb2xs
ZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgYXJyYXlM
ZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGFycmF5KQotewotICAgIGF1
dG8gbGVuZ3RoU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxl
bmd0aCIpKTsKLSAgICBpZiAoYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgbnVsbHB0cikpCi0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0
aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIDA7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkoY29udGV4dCwgInRleHRJbnB1dENvbnRyb2xsZXIiLCB0aGlzKTsKIH0KIAogc3RhdGlj
IFdLQXJyYXlSZWYgY3JlYXRlQ29tcG9zaXRpb25IaWdobGlnaHREYXRhKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIGpzSGlnaGxpZ2h0c1ZhbHVlKQpAQCAtNzIsNTAgKzU3LDE5IEBA
IHN0YXRpYyBXS0FycmF5UmVmIGNyZWF0ZUNvbXBvc2l0aW9uSGlnaGxpZ2h0RGF0YShKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
YXV0byByZXN1bHQgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOwotICAgIGF1dG8ganNIaWdobGln
aHRzQXJyYXkgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hsaWdodHNWYWx1ZSk7Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwganNIaWdobGlnaHRzQXJy
YXkpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgYXV0
byBqc0Zyb21LZXkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZnJvbSIp
KTsKLSAgICBhdXRvIGpzTGVuZ3RoS2V5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKLSAgICBhdXRvIGpzQ29sb3JLZXkgPSBhZG9wdChKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29sb3IiKSk7Ci0KLSAgICBhdXRvIHdrRnJvbUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZyb20iKSk7Ci0gICAgYXV0byB3
a0xlbmd0aEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0
aCIpKTsKLSAgICBhdXRvIHdrQ29sb3JLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJjb2xvciIpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgICAg
ICBhdXRvIGpzT2JqZWN0VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBqc0hpZ2hsaWdodHNBcnJheSwgaSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRp
b24gfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBqc09iamVjdFZhbHVlKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8ganNPYmplY3QgPSBjb25zdF9jYXN0PEpTT2Jq
ZWN0UmVmPihqc09iamVjdFZhbHVlKTsKLSAgICAgICAgYXV0byBqc0Zyb21WYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwganNPYmplY3QsIGpzRnJvbUtleS5nZXQoKSwgbnVsbHB0
cik7Ci0gICAgICAgIGlmICghanNGcm9tVmFsdWUgfHwgIUpTVmFsdWVJc051bWJlcihjb250ZXh0
LCBqc0Zyb21WYWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIGpz
TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGpzT2JqZWN0LCBqc0xl
bmd0aEtleS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmICghanNMZW5ndGhWYWx1ZSB8fCAh
SlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGpzTGVuZ3RoVmFsdWUpKQorICAgIGF1dG8gYXJyYXkg
PSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hsaWdodHNWYWx1ZSk7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIG51bGxwdHIpOworICAgICAg
ICBpZiAoIXZhbHVlIHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQogICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBqc0NvbG9yVmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIGpzT2JqZWN0LCBqc0NvbG9yS2V5LmdldCgpLCBudWxscHRyKTsK
LSAgICAgICAgaWYgKCFqc0NvbG9yVmFsdWUgfHwgIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBq
c0NvbG9yVmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBjb2xv
ciA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwganNDb2xvclZhbHVlLCBudWxs
cHRyKSk7Ci0gICAgICAgIGF1dG8gd2tDb2xvciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcoY29sb3IuZ2V0KCkpKTsKLSAgICAgICAgYXV0byB3a0Zyb20gPSBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKGxyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNGcm9tVmFsdWUs
IG51bGxwdHIpKSkpOwotICAgICAgICBhdXRvIHdrTGVuZ3RoID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShscm91bmQoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzTGVuZ3RoVmFsdWUsIG51bGxw
dHIpKSkpOwotCisgICAgICAgIGF1dG8gb2JqZWN0ID0gY29uc3RfY2FzdDxKU09iamVjdFJlZj4o
dmFsdWUpOwogICAgICAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5n
ZXQoKSwgd2tGcm9tS2V5LmdldCgpLCB3a0Zyb20uZ2V0KCkpOwotICAgICAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHdrTGVuZ3RoS2V5LmdldCgpLCB3a0xlbmd0aC5n
ZXQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwgd2tD
b2xvcktleS5nZXQoKSwgd2tDb2xvci5nZXQoKSk7CisgICAgICAgIHNldFZhbHVlKGRpY3Rpb25h
cnksICJmcm9tIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bWVyaWNQcm9wZXJ0eShjb250ZXh0
LCBvYmplY3QsICJmcm9tIikpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImxlbmd0
aCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihudW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0
LCAibGVuZ3RoIikpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImNvbG9yIiwgdG9X
SyhzdHJpbmdQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJjb2xvciIpKS5nZXQoKSk7CiAgICAg
ICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdCwgZGljdGlvbmFyeS5nZXQoKSk7CiAgICAgfQot
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaAppbmRleCA1NThj
MmU2MTE0MDgxNzg1ZTNiN2NhZTE5ZmVmZDM5NmFlYjM3YTk0Li5hNDRjMjhlODQ0MzkxNzI5MmE5
YjM3YmNiN2UyNTUyZDEyMTQ0Y2E0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaApAQCAtMjgsMTcg
KzI4LDE3IEBACiAjaW5jbHVkZSAiSlNXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+
CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwor
dHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVmOwordHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAK
LWNsYXNzIFRleHRJbnB1dENvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgeworY2xhc3Mg
VGV4dElucHV0Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxUZXh0SW5wdXRDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0
dWFsIH5UZXh0SW5wdXRDb250cm9sbGVyKCk7Ci0KLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZp
cnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09i
amVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAog
ICAgIHZvaWQgc2V0TWFya2VkVGV4dChKU1N0cmluZ1JlZiB0ZXh0LCBpbnQgZnJvbSwgaW50IGxl
bmd0aCwgYm9vbCBzdXBwcmVzc1VuZGVybGluZSwgSlNWYWx1ZVJlZiBoaWdobGlnaHRzKTsKICAg
ICBib29sIGhhc01hcmtlZFRleHQoKTsKQEAgLTQ2LDcgKzQ2LDkgQEAgcHVibGljOgogICAgIHZv
aWQgaW5zZXJ0VGV4dChKU1N0cmluZ1JlZiB0ZXh0KTsKIAogcHJpdmF0ZToKLSAgICBUZXh0SW5w
dXRDb250cm9sbGVyKCk7CisgICAgVGV4dElucHV0Q29udHJvbGxlcigpID0gZGVmYXVsdDsKKwor
ICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
Y29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KaW5kZXggMDI0ZmU2MDU3M2I4
ZjJjNTkyZWJmZGIzNWYzYTQ0NDg1Y2RiOTc1Ni4uNWE1Yjc3ZWMxOTRkYTVmZTNmZmY5OTEzN2Nl
OWFjZDI2ZGZlNGMxZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KQEAgLTEz
Niw3ICsxMzYsNyBAQCB2b2lkIGFjdGl2YXRlRm9udHMoKQogCiB2b2lkIGluc3RhbGxGYWtlSGVs
dmV0aWNhKFdLU3RyaW5nUmVmIGNvbmZpZ3VyYXRpb24pCiB7Ci0gICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBjb25maWd1cmF0aW9uU3RyaW5nID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmlu
ZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uKSk7CisgICAgYXV0byBjb25maWd1
cmF0aW9uU3RyaW5nID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBjb25maWd1cmF0aW9uKSk7CiAgICAgTlNVUkwgKnJlc291cmNlVVJMID0gW3Jlc291
cmNlc0RpcmVjdG9yeVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIkZha2VIZWx2ZXRpY2EtJUAudHRmIiwgY29uZmlndXJhdGlvblN0
cmluZy5nZXQoKV0gaXNEaXJlY3Rvcnk6Tk9dOwogICAgIENGRXJyb3JSZWYgZXJyb3IgPSBudWxs
cHRyOwogICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkwoKF9fYnJpZGdl
IENGVVJMUmVmKXJlc291cmNlVVJMLCBrQ1RGb250TWFuYWdlclNjb3BlUHJvY2VzcywgJmVycm9y
KSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9j
b2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0KaW5kZXggODE3
NjE4MjdhODgxZDA2ZGZlNzBhOWJkMzIyNDczMmFlMTliY2YyOC4uOTFkMjQ5YzcyN2Y2ODc1ZWQ0
YTRjY2YxNTljMGY3N2Q3MmY4NWJkNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbQorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxl
UGFnZUNvY29hLm1tCkBAIC00NywxMyArNDcsMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OnBsYXRmb3JtRGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmUK
IAogU3RyaW5nIEluamVjdGVkQnVuZGxlUGFnZTo6cGxhdGZvcm1SZXNwb25zZU1pbWVUeXBlKFdL
VVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+
IG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdLVVJMUmVzcG9uc2VDb3B5TlNVUkxSZXNwb25zZShy
ZXNwb25zZSkpOworICAgIGF1dG8gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25z
ZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICAgcmV0dXJuIFtuc1VSTFJlc3BvbnNl
LmdldCgpIE1JTUVUeXBlXTsKIH0KIAogdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNw
b25zZUhlYWRlckNvdW50KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgUmV0YWlu
UHRyPE5TVVJMUmVzcG9uc2U+IG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdLVVJMUmVzcG9uc2VD
b3B5TlNVUkxSZXNwb25zZShyZXNwb25zZSkpOworICAgIGF1dG8gbnNVUkxSZXNwb25zZSA9IGFk
b3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICAgaWYg
KCFbbnNVUkxSZXNwb25zZSBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11d
KQogICAgICAgICByZXR1cm4geyB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbSBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tCmluZGV4IDg3Y2NkMjFjYTlhNzdhYTJkMGEyMWE0Y2FiNTIxY2FlZWZhOWM0
YTIuLmM0MTgyMzBmM2I0ZmRlNzE5YWM2Y2NjODRiNzQyZGJlY2ExNGQyNGEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBAIC02Miw3ICs2Miw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkK
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0
Zm9ybU5hbWUoKQogewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJpb3MiKTsKIH0K
IAogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgp
CkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoaWQg
b2JqLCBOU1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3Ry
aW5nUmVmIGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBpZCByb290ID0g
c3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3Qo
cGFnZSkpOwogCiAgICAgaWQgcmVzdWx0ID0gZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKHJvb3Qs
IFtOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6aWRBdHRyaWJ1dGVdKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCmluZGV4IDUyMjM0YWE0ZDc0NzJjZGUw
NzFkOWU4Njk2OTBkOTM1NTI5YTIwZDIuLmJiYzhiYjE2Yzg2NGJjMjYxMGNmYWE2OWEwNmZkODEz
Yzc2OTVkMDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQpA
QCAtMTM2LDExICsxMzYsNiBAQCBAZW5kCiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0aWMgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKQotewotICAgIHJldHVy
biBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApKTsKLX0KLQog
c3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb25jYXRlbmF0ZUF0dHJpYnV0ZUFuZFZh
bHVlKE5TU3RyaW5nICphdHRyaWJ1dGUsIE5TU3RyaW5nICp2YWx1ZSkKIHsKICAgICBWZWN0b3I8
VW5pQ2hhcj4gYnVmZmVyKFthdHRyaWJ1dGUgbGVuZ3RoXSk7CkBAIC0zMzAsMjcgKzMyNSwyNyBA
QCBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
ZGlzY2xvc2VkQnlSb3coKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkRvY3VtZW50TGlua3MoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbigpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9mQXR0cmli
dXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVW
YWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBAIC0zODIsNyArMzc3LDcgQEAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZh
bHVlKEpTU3RyaW5nUmUKICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhhdHRy
aWJ1dGUsICJBWFRleHR1YWxDb250ZXh0IikpCiAgICAgICAgIHJldHVybiBbW21fZWxlbWVudCBh
Y2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRdIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICAKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRl
VmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQpAQCAtNDQzLDE3ICs0MzgsMTcgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBh
dHRyaWJ1dGUpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c3Vicm9sZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCkBAIC00NjMsMTMgKzQ1OCwx
MiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9s
ZURlc2NyaXB0aW9uKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZygpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpT
U3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKQEAgLTQ3OSw3ICs0NzMsNyBA
QCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3Jp
cHRpb24oKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6b3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCkBAIC00ODksNyAr
NDgzLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnN0cmluZ1ZhbHVlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omxhbmd1YWdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHQoKSBjb25zdApAQCAtNTQ5LDcg
KzU0Myw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCiAKIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2Ny
aXB0aW9uKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5z
ZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkKQEAgLTU4NCw3ICs1NzgsNiBAQCBib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzRm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNTk2LDEzICs1ODksMTEgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjM4LDcgKzYyOSw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMoKSBj
b25zdAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIC8vIHBhcmFtZXRlcml6ZWQgYXR0cmlidXRlcwpAQCAtNjU5
LDcgKzY1MCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpyYW5nZUZvclBvc2l0aW9uKGludCB4LCBpbnQgeSkKIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxv
Y2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2lnbmVk
IGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC03MTMsMzIgKzcwNCwzMiBAQCBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0VGV4dFdpdGhD
cml0ZXJpYShKU0NvbnRleAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycygpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mUm93cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsK
KyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRyYWl0cygpCkBAIC05MDMsMjMg
Kzg5NCwyMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0
SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
LSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0
cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2ZVRlY2hub2xvZ3lT
aW11bGF0ZWRGb2N1cygpCkBAIC0xMDE2LDMxICsxMDA1LDI2IEBAIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011
bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUo
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEwNTIsMTMgKzEwMzYsMTEg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTA3NCwyMiArMTA1NiwxOCBAQCBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cG9wdXBWYWx1ZSgp
IGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKCkKIHsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlv
bigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiAvLyBUZXh0IG1hcmtlcnMKQEAg
LTExMzYsNyArMTExNCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAgICAgaWQgdGV4
dE1hcmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKICAgICBp
ZiAoIVt0ZXh0TWFya2VycyBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCi0gICAgICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVKU1N0
cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJpbmdGb3JUZXh0TWFya2Vyczp0ZXh0
TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvRXZlbnRTZW5kZXJQcm94
eUlPUy5tbQppbmRleCBjYWIzZjE4YjM2NTlmNDkxNmJkNTAwODc5Mjg2ZDZhMjdjMGM5ZjkxLi45
ODFhMWZkMGRjNzU4MGNmMDEyZDMxNTZiOGY5ZGY5ODkzMDExYmZmIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9T
Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0V2ZW50
U2VuZGVyUHJveHlJT1MubW0KQEAgLTM2LDI0ICszNiwxMiBAQCBuYW1lc3BhY2UgV1RSIHsKIAog
RXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVzdENv
bnRyb2xsZXIpCiAgICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RDb250cm9sbGVyKQotICAgICwg
bV90aW1lKDApCi0gICAgLCBtX3Bvc2l0aW9uKCkKLSAgICAsIG1fbGVmdE1vdXNlQnV0dG9uRG93
bihmYWxzZSkKLSAgICAsIG1fY2xpY2tDb3VudCgwKQotICAgICwgbV9jbGlja1RpbWUoMCkKLSAg
ICAsIG1fY2xpY2tQb3NpdGlvbigpCi0gICAgLCBtX2NsaWNrQnV0dG9uKGtXS0V2ZW50TW91c2VC
dXR0b25Ob0J1dHRvbikKLSAgICAsIGV2ZW50TnVtYmVyKDApCiB7CiAgICAgVU5VU0VEX1BBUkFN
KG1fdGVzdENvbnRyb2xsZXIpOwogICAgIFVOVVNFRF9QQVJBTShtX2xlZnRNb3VzZUJ1dHRvbkRv
d24pOwogICAgIFVOVVNFRF9QQVJBTShldmVudE51bWJlcik7CiB9CiAKLUV2ZW50U2VuZGVyUHJv
eHk6On5FdmVudFNlbmRlclByb3h5KCkKLXsKLX0KLQogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1
cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiB7CiAgICAgaWYgKG1fdGltZSAt
IG1fY2xpY2tUaW1lIDwgMSAmJiBtX3Bvc2l0aW9uID09IG1fY2xpY2tQb3NpdGlvbiAmJiBidXR0
b24gPT0gbV9jbGlja0J1dHRvbikgewpAQCAtNzAsMTcgKzU4LDE0IEBAIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQogCiB2b2lkIEV2
ZW50U2VuZGVyUHJveHk6Om1vdXNlRG93bih1bnNpZ25lZCBidXR0b25OdW1iZXIsIFdLRXZlbnRN
b2RpZmllcnMgbW9kaWZpZXJzKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6Om1vdXNlVXAodW5zaWduZWQgYnV0dG9uTnVtYmVyLCBXS0V2ZW50TW9kaWZp
ZXJzIG1vZGlmaWVycykKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRl
clByb3h5Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCiB7Ci0gICAgLy8gV3JpdGUg
bWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vj
b25kcykKQEAgLTkwLDc5ICs3NSw2NiBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmxlYXBGb3J3
YXJkKGludCBtaWxsaXNlY29uZHMpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihX
S1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNpZ25lZCBrZXlM
b2NhdGlvbikKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5
Ojptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAog
dm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1Q
aGFzZXMoaW50IHgsIGludCB5LCBpbnQgcGhhc2UsIGludCBtb21lbnR1bSkKIHsKLSAgICAvLyBX
cml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojpjb250aW51b3VzTW91c2VTY3Jv
bGxCeShpbnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmFkZFRv
dWNoUG9pbnQoaW50IHgsIGludCB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2
ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkp
CiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91
Y2hNb2RpZmllcihXS0V2ZW50TW9kaWZpZXJzLCBib29sIGVuYWJsZSkKIHsKLSAgICAvLyBXcml0
ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaFBvaW50UmFkaXVzKGlu
dCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBF
dmVudFNlbmRlclByb3h5Ojp0b3VjaFN0YXJ0KCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAog
dm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaE1vdmUoKQogewotICAgIC8vIFdyaXRlIG1lLgog
fQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoRW5kKCkKIHsKLSAgICAvLyBXcml0ZSBt
ZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaENhbmNlbCgpCiB7Ci0gICAgLy8g
V3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y2xlYXJUb3VjaFBvaW50cygp
CiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVsZWFz
ZVRvdWNoUG9pbnQoaW50IGluZGV4KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2
ZW50U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQogewotICAgIC8vIFdy
aXRlIG1lLgogfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29t
bW9uTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNj
ZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQppbmRleCAyNWUwYzNkMDBlNDliYjJiNWVkMjAzZTE5MGNm
MWVjYzkwZGYzYWY0Li4zNTRhOGY2NTU1YzZjMDAyNjVmNTY4MWE2YjM3MTUyYTg0YTU2MmMwIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nl
c3NpYmlsaXR5Q29tbW9uTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlDb21tb25NYWMuaCIKIAogI2ltcG9ydCAiSlNXcmFwcGVy
LmgiCisjaW1wb3J0ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogCkBAIC02MSwyNiAr
NjIsMjIgQEAgQ2xhc3Mgd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygpCiAgICAg
cmV0dXJuIGNsczsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgbWFrZUFycmF5UmVmRm9yQXJyYXko
SlNDb250ZXh0UmVmIGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQorc3RhdGljIEpTT2JqZWN0UmVm
IG1ha2VKU0FycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0FycmF5ICphcnJheSkKIHsKICAg
ICBOU1VJbnRlZ2VyIGNvdW50ID0gYXJyYXkuY291bnQ7CiAgICAgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbY291bnRdOwotCiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
ICAgICAgICAgYXJndW1lbnRzW2ldID0gbWFrZVZhbHVlUmVmRm9yVmFsdWUoY29udGV4dCwgW2Fy
cmF5IG9iamVjdEF0SW5kZXg6aV0pOwotCiAgICAgcmV0dXJuIEpTT2JqZWN0TWFrZUFycmF5KGNv
bnRleHQsIGNvdW50LCBhcmd1bWVudHMsIG51bGxwdHIpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJl
ZiBtYWtlT2JqZWN0UmVmRm9yRGljdGlvbmFyeShKU0NvbnRleHRSZWYgY29udGV4dCwgTlNEaWN0
aW9uYXJ5ICpkaWN0aW9uYXJ5KQorc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VKU09iamVjdChKU0Nv
bnRleHRSZWYgY29udGV4dCwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQogewotICAgIEpTT2Jq
ZWN0UmVmIG9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBudWxscHRyLCBudWxscHRyKTsK
LQorICAgIGF1dG8gb2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxw
dHIpOwogICAgIFtkaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpe
KE5TU3RyaW5nICprZXksIGlkIG9iaiwgQk9PTCAqKSB7CiAgICAgICAgIGlmIChKU1ZhbHVlUmVm
IHByb3BlcnR5VmFsdWUgPSBtYWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBvYmopKQogICAg
ICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIFtrZXkgY3JlYXRl
SlNTdHJpbmdSZWZdLmdldCgpLCBwcm9wZXJ0eVZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5v
bmUsIG51bGxwdHIpOwogICAgIH1dOwotCiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIApAQCAtOTYs
OSArOTMsOSBAQCBKU1ZhbHVlUmVmIG1ha2VWYWx1ZVJlZkZvclZhbHVlKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBpZCB2YWx1ZSkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6d2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygpXSkKICAgICAgICAgcmV0dXJuIHRvSlMoY29udGV4
dCwgV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8UGxhdGZv
cm1VSUVsZW1lbnQ+KHZhbHVlKSkucHRyKCkpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFz
czpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBtYWtlT2JqZWN0UmVmRm9y
RGljdGlvbmFyeShjb250ZXh0LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBtYWtlSlNPYmplY3Qo
Y29udGV4dCwgdmFsdWUpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBj
bGFzc11dKQotICAgICAgICByZXR1cm4gbWFrZUFycmF5UmVmRm9yQXJyYXkoY29udGV4dCwgdmFs
dWUpOworICAgICAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgdmFsdWUpOwogICAgIHJl
dHVybiBudWxscHRyOwogfQogCkBAIC0xMTUsMjggKzExMiwxNiBAQCBOU0RpY3Rpb25hcnkgKnNl
YXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0Nv
bnRleHRSZQogCiAgICAgaWYgKHNlYXJjaEtleSkgewogICAgICAgICBpZCBzZWFyY2hLZXlQYXJh
bWV0ZXIgPSBuaWw7Ci0gICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNo
S2V5KSkgewotICAgICAgICAgICAgYXV0byBzZWFyY2hLZXlTdHJpbmcgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaEtleSwgbnVsbHB0cikpOwotICAgICAgICAgICAg
aWYgKHNlYXJjaEtleVN0cmluZykKLSAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZy5nZXQoKV07
Ci0gICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkp
IHsKKyAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hLZXkpKQorICAg
ICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gdG9XVEZTdHJpbmcoY29udGV4dCwgc2VhcmNo
S2V5KTsKKyAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtl
eSkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzZWFyY2hLZXlBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJv
cGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlID0g
SlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgbGVuZ3RoUHJvcGVy
dHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleUFycmF5
TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVu
Z3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxl
bmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaEtleUFy
cmF5TGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXkpOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaEtleUFycmF5TGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleVZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXksIGksIG51bGxwdHIpOwot
ICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVmIHNlYXJjaEtleVN0cmluZyA9IEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCwgc2VhcmNoS2V5VmFsdWUsIG51bGxwdHIpOwotICAgICAgICAgICAg
ICAgIGlmIChzZWFyY2hLZXlTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFy
Y2hLZXlQYXJhbWV0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0
ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICAgICAgICAgICAgICBbc2VhcmNo
S2V5UGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNl
YXJjaEtleVN0cmluZ11dOwotICAgICAgICAgICAgICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2Vh
cmNoS2V5U3RyaW5nKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXV0byBz
ZWFyY2hLZXkgPSB0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRl
eChjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgaSwgbnVsbHB0cikpOworICAgICAgICAgICAgICAg
IGlmICghc2VhcmNoS2V5UGFyYW1ldGVyKQorICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQ
YXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgICAgICAgICAgICAgIFtzZWFy
Y2hLZXlQYXJhbWV0ZXIgYWRkT2JqZWN0OnNlYXJjaEtleV07CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKHNlYXJjaEtleVBhcmFtZXRlcikKQEAgLTE0NCwxMCArMTI5LDkg
QEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9y
U2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICB9CiAKICAgICBpZiAoc2VhcmNoVGV4dCAm
JiBKU1N0cmluZ0dldExlbmd0aChzZWFyY2hUZXh0KSkKLSAgICAgICAgW3BhcmFtZXRlcml6ZWRB
dHRyaWJ1dGUgc2V0T2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNo
VGV4dF0gZm9yS2V5OkAiQVhTZWFyY2hUZXh0Il07CisgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0
cmlidXRlIHNldE9iamVjdDp0b1dURlN0cmluZyhzZWFyY2hUZXh0KSBmb3JLZXk6QCJBWFNlYXJj
aFRleHQiXTsKIAogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKHZpc2li
bGVPbmx5KSBmb3JLZXk6QCJBWFZpc2libGVPbmx5Il07Ci0KICAgICBbcGFyYW1ldGVyaXplZEF0
dHJpYnV0ZSBzZXRPYmplY3Q6QChpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkpIGZvcktleTpAIkFY
SW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5Il07CiAKICAgICByZXR1cm4gcGFyYW1ldGVyaXplZEF0
dHJpYnV0ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KaW5k
ZXggOTEzYWUwZjc1Y2RiNGVkNWRlZGRlYjkyNWY2Yzk1MDE4ZGRkMTcwNC4uYTg4N2RlNWM4NWQ1
MDI4NGZkMjQ0NzEyNTE2ZTg5Yzk5OGMzYWE1ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0K
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJNYWMubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIkFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZS5oIgog
I2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
QnVuZGxlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGVQYWdlLmg+CkBAIC05Niw3ICs5Nyw3
IEBAIHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoaWQgb2JqLCBOU1N0cmluZyAq
aWRBdHRyaWJ1dGUpCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmli
dXRlKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBQbGF0Zm9ybVVJRWxlbWVudCByb290ID0g
c3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3Qo
cGFnZSkpOwogCiAgICAgUmV0YWluUHRyPGlkPiByZXN1bHQ7CkBAIC0xMTEsNyArMTEyLDcgQEAg
UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjph
Y2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlMKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQogewotICAgIHJldHVybiBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibWFjIikpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCJtYWMiKTsKIH0KIAogLy8gQVhUaHJlYWQgaW1wbGVtZW50YXRpb24KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IDUwYjNlMDIyMGI4
ZDEyMmFkMjJiYzk2ZDQyNGNmZDgzMzFiNjVmNTkuLjJlZmY0NTRlNjY3OTFkNjk4Zjk1YmVjNzY5
NGEwOWZiMmNjZjBhMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1h
Yy5tbQpAQCAtMzIsNyArMzIsNyBAQAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
IgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlUGFn
ZS5oIgotCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8QXBwS2l0L05TQWNjZXNzaWJp
bGl0eS5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CkBAIC04NywxMSArODcsNiBAQCBAZW5kCiAKIG5h
bWVzcGFjZSBXVFIgewogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKQotewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKG51bGxwdHIsIDApKTsKLX0KLQogUmVmUHRyPEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzX2NvbnRyb2xsZXI7CiAKIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKQEAgLTIwNiw3ICsy
MDEsNyBAQCBzdGF0aWMgTlNTdHJpbmcqIGRlc2NyaXB0aW9uT2ZWYWx1ZShpZCB2YWx1ZU9iamVj
dCwgaWQgZWxlbWVudCkKIAogc3RhdGljIE5TU3RyaW5nICphdHRyaWJ1dGVzT2ZFbGVtZW50KGlk
IGFjY2Vzc2liaWxpdHlPYmplY3QpCiB7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGF0dHJpYnV0
ZXMgPSBzdXBwb3J0ZWRBdHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QpOworICAgIGF1dG8g
YXR0cmlidXRlcyA9IHN1cHBvcnRlZEF0dHJpYnV0ZXMoYWNjZXNzaWJpbGl0eU9iamVjdCk7CiAK
ICAgICBOU011dGFibGVTdHJpbmcqIGF0dHJpYnV0ZXNTdHJpbmcgPSBbTlNNdXRhYmxlU3RyaW5n
IHN0cmluZ107CiAgICAgZm9yIChOU1N0cmluZyogYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMuZ2V0
KCkpIHsKQEAgLTIyNywxNiArMjIyLDEzIEBAIHN0YXRpYyBOU1N0cmluZyAqYXR0cmlidXRlc09m
RWxlbWVudChpZCBhY2Nlc3NpYmlsaXR5T2JqZWN0KQogICAgIHJldHVybiBhdHRyaWJ1dGVzU3Ry
aW5nOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIEpTVmFsdWVSZWYgY29udmVy
dFZlY3RvclRvT2JqZWN0QXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIFZlY3RvcjxUPiBjb25z
dCYgZWxlbWVudHMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgSlNPYmplY3RSZWYgbWFr
ZUpTQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxUPiYgZWxlbWVudHMp
CiB7Ci0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRl
eHQsIDAsIDAsIDApOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKKyAgICBhdXRvIGFycmF5ID0gSlNPYmplY3RNYWtl
QXJyYXkoY29udGV4dCwgMCwgMCwgMCk7CiAgICAgc2l6ZV90IGVsZW1lbnRDb3VudCA9IGVsZW1l
bnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVsZW1lbnRDb3VudDsgKytp
KQotICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwg
aSwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGVsZW1lbnRzW2ldLT53cmFwcGVyQ2xhc3MoKSwgZWxl
bWVudHNbaV0uZ2V0KCkpLCAwKTsKLQotICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAgICAgICAg
SlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFr
ZShjb250ZXh0LCBlbGVtZW50c1tpXS0+d3JhcHBlckNsYXNzKCksIGVsZW1lbnRzW2ldLmdldCgp
KSwgMCk7CisgICAgcmV0dXJuIGFycmF5OwogfQogCiBzdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IGNvbmNhdGVuYXRlQXR0cmlidXRlQW5kVmFsdWUoTlNTdHJpbmcqIGF0dHJpYnV0ZSwg
TlNTdHJpbmcqIHZhbHVlKQpAQCAtMjczLDI1ICsyNjUsMTMgQEAgc3RhdGljIE5TRGljdGlvbmFy
eSAqc2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRleHRS
ZWYgY28KICAgICAKICAgICBpZiAoc2VhcmNoU3RyaW5ncykgewogICAgICAgICBOU011dGFibGVB
cnJheSAqc2VhcmNoU3RyaW5nc1BhcmFtZXRlciA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0g
ICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAg
ICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cikpOwotICAgICAgICAgICAgaWYg
KHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJh
bWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3Ry
aW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKEpTVmFsdWVJ
c09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgeworICAgICAgICBpZiAoSlNWYWx1ZUlz
U3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKQorICAgICAgICAgICAgW3NlYXJjaFN0cmlu
Z3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3Mp
XTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hTdHJpbmdz
QXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cik7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAwOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0gYWRvcHQo
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAgICAgIEpT
VmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcuZ2V0
KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZh
bHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhW
YWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJy
YXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNl
YXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFN0
cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6
c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
dW5zaWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwg
c2VhcmNoU3RyaW5nc0FycmF5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBbc2VhcmNo
U3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmcoY29udGV4dCwgSlNPYmplY3RH
ZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBpLCBudWxscHRy
KSldOwogICAgICAgICB9CiAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVj
dDpzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGZvcktleTpAIkFYU2VsZWN0VGV4dFNlYXJjaFN0cmlu
Z3MiXTsKICAgICB9CkBAIC0zMTQsMjQgKzI5NCwxMyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpz
ZWFyY2hUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJlZiBj
bwogCiAgICAgaWYgKHNlYXJjaFN0cmluZ3MpIHsKICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnNl
YXJjaFN0cmluZ3NQYXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICBp
ZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAg
ICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hT
dHJpbmdzU3RyaW5nKQotICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFk
ZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJp
bmcuZ2V0KCldXTsKLSAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwg
c2VhcmNoU3RyaW5ncykpIHsKKyAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBz
ZWFyY2hTdHJpbmdzKSkKKyAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9i
amVjdDp0b1dURlN0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKV07CisgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5ID0gSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAgICAgICAgICAgdW5z
aWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gMDsKLQotICAgICAgICAgICAgYXV0byBs
ZW5ndGhQcm9wZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJsZW5ndGgiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJy
YXksIGxlbmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlm
IChzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4
dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJj
aFN0cmluZ3NBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLQot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJ
bmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxwdHIpLCBudWxscHRyKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAgICAg
ICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IGFycmF5
TGVuZ3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpCisgICAgICAg
ICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNv
bnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NB
cnJheSwgaSwgbnVsbHB0cikpXTsKICAgICAgICAgfQogICAgICAgICBbcGFyYW1ldGVyaXplZEF0
dHJpYnV0ZSBzZXRPYmplY3Q6c2VhcmNoU3RyaW5nc1BhcmFtZXRlciBmb3JLZXk6QCJBWFNlYXJj
aFRleHRTZWFyY2hTdHJpbmdzIl07CiAgICAgfQpAQCAtNDAxLDcgKzM3MCw3IEBAIEpTVmFsdWVS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SGVhZGVycygpIGNvbnN0CiAgICAgaWQgdmFs
dWUgPSBhdHRyaWJ1dGVWYWx1ZShtX2VsZW1lbnQuZ2V0KCksIE5TQWNjZXNzaWJpbGl0eVJvd0hl
YWRlclVJRWxlbWVudHNBdHRyaWJ1dGUpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpb
TlNBcnJheSBjbGFzc11dKQogICAgICAgICBlbGVtZW50cyA9IG1ha2VWZWN0b3I8UmVmUHRyPEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pih2YWx1ZSk7Ci0gICAgcmV0dXJuIGNvbnZlcnRWZWN0b3JU
b09iamVjdEFycmF5PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4oY29udGV4dCwgZWxl
bWVudHMpOworICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0LCBlbGVtZW50cyk7CiAgICAg
RU5EX0FYX09CSkNfRVhDRVBUSU9OUwogfQogCkBAIC00MTUsNyArMzg0LDcgQEAgSlNWYWx1ZVJl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzKCkgY29uc3QKICAgICBpZCB2
YWx1ZSA9IGF0dHJpYnV0ZVZhbHVlKG1fZWxlbWVudC5nZXQoKSwgTlNBY2Nlc3NpYmlsaXR5Q29s
dW1uSGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNs
YXNzOltOU0FycmF5IGNsYXNzXV0pCiAgICAgICAgIGVsZW1lbnRzID0gbWFrZVZlY3RvcjxSZWZQ
dHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KHZhbHVlKTsKLSAgICByZXR1cm4gY29udmVydFZl
Y3RvclRvT2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pihjb250ZXh0
LCBlbGVtZW50cyk7CisgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNvbnRleHQsIGVsZW1lbnRzKTsK
ICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiB9CiAgICAgCkBAIC02MDcsNyArNTc2LDcgQEAg
SlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0
ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHIKIAogICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4+IGVsZW1lbnRzOwogICAgIGdldFVJRWxlbWVudHNXaXRoQXR0cmlidXRlKGF0
dHJpYnV0ZSwgZWxlbWVudHMpOwotICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJh
eTxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KGNvbnRleHQsIGVsZW1lbnRzKTsKKyAg
ICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgZWxlbWVudHMpOwogfQogCiBSZWZQdHI8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXR0
cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKSBjb25zdApAQCAtOTc2LDcgKzk0NSw2
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZCgpIGNvbnN0CiAKIGJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAt
MTIyOSw3ICsxMTk3LDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWFy
Y2hUZXh0V2l0aENyaXRlcmlhKEpTQ29udGV4dFJlZiBjb250ZXh0LAogICAgIE5TRGljdGlvbmFy
eSAqcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSA9IHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmli
dXRlRm9yQ3JpdGVyaWEoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgc3RhcnRGcm9tLCBkaXJlY3Rp
b24pOwogICAgIGlkIHJlc3VsdCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlOkAiQVhTZWFyY2hUZXh0V2l0aENyaXRlcmlhIiBmb3JQYXJhbWV0ZXI6cGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZV07CiAgICAgaWYgKFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFz
c11dKQotICAgICAgICByZXR1cm4gY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVmUHRyPEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+Pihjb250ZXh0LCBtYWtlVmVjdG9yPFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPj4ocmVzdWx0KSk7CisgICAgICAgIHJldHVybiBt
YWtlSlNBcnJheShjb250ZXh0LCBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlclJhbmdlPj4ocmVzdWx0KSk7CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogCiAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0xNTQ2LDEzICsxNTE0LDExIEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QK
IAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4oKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3Ry
aW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKQEAg
LTE1NjIsOCArMTUyOCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xh
c3M6W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJp
bmdSZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICByZXR1cm4gY3Jl
YXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRV
UkkoKQpAQCAtMTU3Myw4ICsxNTM4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9m
Q2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNT
dHJpbmdSZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkK
QEAgLTE1ODMsNyArMTU0Nyw2IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp1cmwoKQogICAgIE5TVVJMICp1cmwgPSBbbV9lbGVtZW50IGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdOwogICAgIHJl
dHVybiBbW3VybCBhYnNvbHV0ZVN0cmluZ10gY3JlYXRlSlNTdHJpbmdSZWZdOyAgICAKICAgICBF
TkRfQVhfT0JKQ19FWENFUFRJT05TCi0gICAgCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAg
LTE2MjIsNyArMTU4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2Fi
bGUoKSBjb25zdAogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwogICAgIHJlc3VsdCA9IFtt
X2VsZW1lbnQgYWNjZXNzaWJpbGl0eUlzQXR0cmlidXRlU2V0dGFibGU6TlNBY2Nlc3NpYmlsaXR5
Rm9jdXNlZEF0dHJpYnV0ZV07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwotICAgIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE2NDgsMTkgKzE2MTAsMTYgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzT2ZmU2NyZWVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFw
c2VkKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCkBAIC0xNjc1LDEzICsxNjM0LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNJZ25vcmVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Np
bmdsZUxpbmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aUxpbmUoKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
QEAgLTE3MTQsMTcgKzE2NzEsMTQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtl
Rm9jdXMoKQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24oKQog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphZGRTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24oKQogewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKIH0KIAogLy8gVGV4dCBtYXJrZXJzCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpp
bmRleCA0MDNmNGZmODMyZWUwZWY3YzNjZmFiZGYwZjg3ZTJjY2JlNjE0ZjhhLi5hZGJiNGI3YjVk
NTRmYjE0YTljNGJkZThhOTIyNzVmMTFjMTQxNmQ5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KQEAg
LTQ2LDE2ICs0NiwxMSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6aW5z
cGVjdG9yVGVzdFN0dWJVUkwoKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgcmV0dXJu
IG51bGxwdHI7CiAjZWxzZQotICAgIENGQnVuZGxlUmVmIGluc3BlY3RvckJ1bmRsZSA9IENGQnVu
ZGxlR2V0QnVuZGxlV2l0aElkZW50aWZpZXIoQ0ZTVFIoImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JV
SSIpKTsKKyAgICBhdXRvIGluc3BlY3RvckJ1bmRsZSA9IENGQnVuZGxlR2V0QnVuZGxlV2l0aElk
ZW50aWZpZXIoQ0ZTVFIoImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSIpKTsKICAgICBpZiAoIWlu
c3BlY3RvckJ1bmRsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8
Q0ZVUkxSZWY+IHVybCA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoaW5zcGVjdG9y
QnVuZGxlLCBDRlNUUigiVGVzdFN0dWIiKSwgQ0ZTVFIoImh0bWwiKSwgTlVMTCkpOwotICAgIGlm
ICghdXJsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENGU3RyaW5nUmVmIHVybFN0
cmluZyA9IENGVVJMR2V0U3RyaW5nKHVybC5nZXQoKSk7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3Ry
aW5nQ3JlYXRlV2l0aENGU3RyaW5nKHVybFN0cmluZykpOworICAgIGF1dG8gcmVzb3VyY2VVUkwg
PSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKGluc3BlY3RvckJ1bmRsZSwgQ0ZTVFIo
IlRlc3RTdHViIiksIENGU1RSKCJodG1sIiksIE5VTEwpKTsKKyAgICByZXR1cm4gcmVzb3VyY2VV
UkwgPyBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlVSTEdldFN0cmluZyhyZXNv
dXJjZVVSTC5nZXQoKSkpKSA6IG51bGxwdHI7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKaW5kZXggMWJjMDVjMGE1ZjNhODA0YzBiMTQxYjg5Njkw
Yjc1ZDI3NzEwZTc2MS4uNjdmMzllNjlmMTU0MDhiOTJlYTNhZTk0N2M5ZmE5MmZlZWExMjhjZCAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNCwxNSArMjQsMTIgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFN0cmluZ0Z1
bmN0aW9uc19oCi0jZGVmaW5lIFN0cmluZ0Z1bmN0aW9uc19oCisjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdC5oPgorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSA8V2Vi
S2l0L1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0L1dLU3RyaW5nUHJpdmF0ZS5oPgotI2luY2x1ZGUgPFdlYktpdC9XS1VSTC5oPgog
I2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgpAQCAtNDQsNyArNDEsOCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotLy8gQ29udmVy
c2lvbiBmdW5jdGlvbnMKK1dLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLU3RyaW5nKEpTQ29u
dGV4dFJlZiwgSlNWYWx1ZVJlZik7CitXVEY6OlN0cmluZyB0b1dURlN0cmluZyhKU0NvbnRleHRS
ZWYsIEpTVmFsdWVSZWYpOwogCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0so
SlNTdHJpbmdSZWYgc3RyaW5nKQogewpAQCAtNTYsOSArNTQsMTQgQEAgaW5saW5lIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB0b1dLKGNvbnN0IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiYgc3Ry
aW5nKQogICAgIHJldHVybiB0b1dLKHN0cmluZy5nZXQoKSk7CiB9CiAKK2lubGluZSBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAgcmV0dXJu
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7Cit9CisKIGlu
bGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBXVEY6OlN0cmluZyYgc3Ry
aW5nKQogewotICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJuIHRvV0soc3RyaW5nLnV0ZjgoKS5k
YXRhKCkpOwogfQogCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoV0tTdHJp
bmdSZWYgc3RyaW5nKQpAQCAtOTksNiArMTAyLDI1IEBAIGlubGluZSBXVEY6OlN0cmluZyB0b1dU
RlN0cmluZyhjb25zdCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmluZykKICAgICByZXR1
cm4gdG9XVEZTdHJpbmcoc3RyaW5nLmdldCgpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV1RSCitp
bmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKQoreworICAg
IHJldHVybiB0b1dURlN0cmluZyh0b1dLKHN0cmluZykpOworfQogCi0jZW5kaWYgLy8gU3RyaW5n
RnVuY3Rpb25zX2gKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4mIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3Ry
aW5nLmdldCgpKTsKK30KKworaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLU3Ry
aW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIHJldHVy
biB0b1dLKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGlu
ZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJl
ZiB2YWx1ZSkKK3sKKyAgICAvLyBGSVhNRTogQ291bGQgbWFrZSB0aGlzIGVmZmljaWVudCBieSB1
c2luZyB0aGUgV1RGU3RyaW5nIGluc2lkZSBPcGFxdWVKU1N0cmluZyBpZiB3ZSB3YW50ZWQgdG8u
CisgICAgcmV0dXJuIHRvV1RGU3RyaW5nKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcAppbmRleCAxMzQ1YzQyYzExZTYyZGMwODhjNmYyZDM4Yjk5YjA5MzU2NGUwMTM4
Li43NWQ5ZmI2MDQ0NDE0NWYxZWNkZmFlZmQ5OTA4YWFlMjY4ODU0ZWYzIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUg
IkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJFdmVudFNlbmRlclByb3h5LmgiCiAj
aW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2luY2x1
ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5p
dGlhbGl6ZVRocmVhZGluZy5oPgpAQCAtNDk0LDggKzQ5NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemUoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKICAgICBXZWJDb3Jl
VGVzdFN1cHBvcnQ6Omluc3RhbGxNb2NrR2FtZXBhZFByb3ZpZGVyKCk7CiAjZW5kaWYKIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYWdlR3JvdXBJZGVudGlmaWVyID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0VGVzdFJ1bm5lclBhZ2VHcm91cCIp
KTsKLSAgICBtX3BhZ2VHcm91cC5hZG9wdChXS1BhZ2VHcm91cENyZWF0ZVdpdGhJZGVudGlmaWVy
KHBhZ2VHcm91cElkZW50aWZpZXIuZ2V0KCkpKTsKKyAgICBtX3BhZ2VHcm91cC5hZG9wdChXS1Bh
Z2VHcm91cENyZWF0ZVdpdGhJZGVudGlmaWVyKHRvV0soIldlYktpdFRlc3RSdW5uZXJQYWdlR3Jv
dXAiKS5nZXQoKSkpOwogCiAgICAgbV9ldmVudFNlbmRlclByb3h5ID0gbWFrZVVuaXF1ZTxFdmVu
dFNlbmRlclByb3h5Pih0aGlzKTsKIH0KQEAgLTUwNyw5ICs1MDYsOSBAQCBXS1JldGFpblB0cjxX
S0NvbnRleHRDb25maWd1cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0
Q29uZmlndXJhdAogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRGdWxseVN5bmNocm9ub3Vz
TW9kZUlzQWxsb3dlZEZvclRlc3RpbmcoY29uZmlndXJhdGlvbi5nZXQoKSwgdHJ1ZSk7CiAgICAg
V0tDb250ZXh0Q29uZmlndXJhdGlvblNldElnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91
dHNGb3JUZXN0aW5nKGNvbmZpZ3VyYXRpb24uZ2V0KCksIG9wdGlvbnMuaWdub3JlU3luY2hyb25v
dXNNZXNzYWdpbmdUaW1lb3V0cyk7CiAKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJl
Zj4gb3ZlcnJpZGVMYW5ndWFnZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwor
ICAgIGF1dG8gb3ZlcnJpZGVMYW5ndWFnZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRl
KCkpOwogICAgIGZvciAoYXV0byYgbGFuZ3VhZ2UgOiBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2Vz
KQotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShvdmVycmlkZUxhbmd1YWdlcy5nZXQoKSwgYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhsYW5ndWFnZS51dGY4KCkuZGF0YSgp
KSkuZ2V0KCkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShvdmVycmlkZUxhbmd1YWdlcy5n
ZXQoKSwgdG9XSyhsYW5ndWFnZSkuZ2V0KCkpOwogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25T
ZXRPdmVycmlkZUxhbmd1YWdlcyhjb25maWd1cmF0aW9uLmdldCgpLCBvdmVycmlkZUxhbmd1YWdl
cy5nZXQoKSk7CiAKICAgICBpZiAob3B0aW9ucy5zaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbigpKSB7CkBAIC04NDMsMzEgKzg0MiwyNCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpy
ZXNldFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRp
bwogICAgIFdLUHJlZmVyZW5jZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0dXJlcyhwcmVmZXJl
bmNlcyk7CiAKICAgICAvLyBTZXQgaW50ZXJuYWwgZmVhdHVyZXMgdGhhdCBoYXZlIGRpZmZlcmVu
dCBkZWZhdWx0IHZhbHVlcyBmb3IgdGVzdGluZy4KLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgYXN5
bmNPdmVyZmxvd1Njcm9sbGluZ0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0
SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBhc3luY092ZXJm
bG93U2Nyb2xsaW5nRmVhdHVyZSk7CiAKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgYXN5bmNGcmFt
ZVNjcm9sbGluZ0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXN5bmNG
cmFtZVNjcm9sbGluZ0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBhc3luY0ZyYW1lU2Nyb2xsaW5nRmVh
dHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHBy
ZWZlcmVuY2VzLCBmYWxzZSwgdG9XSygiQXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQiKS5n
ZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHBy
ZWZlcmVuY2VzLCBmYWxzZSwgdG9XSygiQXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJsZWQiKS5nZXQo
KSk7CiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9EQVRFKQotICAgIHN0YXRpYyBXS1N0cmluZ1Jl
ZiBpbnB1dFR5cGVEYXRlRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJ
bnB1dFR5cGVEYXRlRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVn
RmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlRGF0ZUZlYXR1cmUpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNl
cywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlRGF0ZUVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKQotICAgIHN0YXRpYyBXS1N0cmluZ1Jl
ZiBpbnB1dFR5cGVEYXRlVGltZUxvY2FsRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJJbnB1dFR5cGVEYXRlVGltZUxvY2FsRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5j
ZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRU
eXBlRGF0ZVRpbWVMb2NhbEZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERl
YnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlRGF0ZVRp
bWVMb2NhbEVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9N
T05USCkKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlTW9udGhGZWF0dXJlID0gV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZU1vbnRoRW5hYmxlZCIpOwotICAg
IFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywg
dHJ1ZSwgaW5wdXRUeXBlTW9udGhGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJu
YWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZU1v
bnRoRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUUp
Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0VHlwZVRpbWVGZWF0dXJlID0gV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlwZVRpbWVFbmFibGVkIik7Ci0gICAgV0tQcmVm
ZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBp
bnB1dFR5cGVUaW1lRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdG
ZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVUaW1lRW5hYmxl
ZCIpLmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1dFRUspCi0gICAgc3Rh
dGljIFdLU3RyaW5nUmVmIGlucHV0VHlwZVdlZWtGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIklucHV0VHlwZVdlZWtFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1Nl
dEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVX
ZWVrRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9y
S2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVXZWVrRW5hYmxlZCIpLmdldCgp
KTsKICNlbmRpZgogCiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcm5hbERlYnVnRmVhdHVyZSA6
IG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQpAQCAtOTIwLDI1ICs5MTIsMTYgQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyhjb25z
dCBUZXN0T3B0aW9ucyYgb3B0aW8KICAgICBXS1ByZWZlcmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJh
Y2tncm91bmRzSW5EYXJrTW9kZShwcmVmZXJlbmNlcywgb3B0aW9ucy5wdW5jaE91dFdoaXRlQmFj
a2dyb3VuZHNJbkRhcmtNb2RlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZUNhY2hlRW5hYmxl
ZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENhY2hlKTsKIAotICAgIHN0
YXRpYyBXS1N0cmluZ1JlZiBkZWZhdWx0VGV4dEVuY29kaW5nID0gV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIklTTy04ODU5LTEiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0RGVmYXVsdFRl
eHRFbmNvZGluZ05hbWUocHJlZmVyZW5jZXMsIGRlZmF1bHRUZXh0RW5jb2RpbmcpOwotCi0gICAg
c3RhdGljIFdLU3RyaW5nUmVmIHN0YW5kYXJkRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJUaW1lcyIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBjdXJzaXZlRm9u
dEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsZSBDaGFuY2VyeSIp
OwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBmYW50YXN5Rm9udEZhbWlseSA9IFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJQYXB5cnVzIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGZp
eGVkRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDb3VyaWVyIik7
Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxlIENvbG9yIEVtb2ppIik7Ci0gICAgc3RhdGljIFdL
U3RyaW5nUmVmIHNhbnNTZXJpZkZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSGVsdmV0aWNhIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHNlcmlmRm9udEZhbWls
eSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lcyIpOworICAgIFdLUHJlZmVy
ZW5jZXNTZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShwcmVmZXJlbmNlcywgdG9XSygiSVNPLTg4
NTktMSIpLmdldCgpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNTZXRNaW5pbXVtRm9udFNpemUocHJl
ZmVyZW5jZXMsIDApOwotICAgIFdLUHJlZmVyZW5jZXNTZXRTdGFuZGFyZEZvbnRGYW1pbHkocHJl
ZmVyZW5jZXMsIHN0YW5kYXJkRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEN1cnNp
dmVGb250RmFtaWx5KHByZWZlcmVuY2VzLCBjdXJzaXZlRm9udEZhbWlseSk7Ci0gICAgV0tQcmVm
ZXJlbmNlc1NldEZhbnRhc3lGb250RmFtaWx5KHByZWZlcmVuY2VzLCBmYW50YXN5Rm9udEZhbWls
eSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEZpeGVkRm9udEZhbWlseShwcmVmZXJlbmNlcywgZml4
ZWRGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0UGljdG9ncmFwaEZvbnRGYW1pbHko
cHJlZmVyZW5jZXMsIHBpY3RvZ3JhcGhGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0
U2Fuc1NlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgc2Fuc1NlcmlmRm9udEZhbWlseSk7Ci0g
ICAgV0tQcmVmZXJlbmNlc1NldFNlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgc2VyaWZGb250
RmFtaWx5KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0U3RhbmRhcmRGb250RmFtaWx5KHByZWZlcmVu
Y2VzLCB0b1dLKCJUaW1lcyIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q3Vyc2l2ZUZv
bnRGYW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIkFwcGxlIENoYW5jZXJ5IikuZ2V0KCkpOworICAg
IFdLUHJlZmVyZW5jZXNTZXRGYW50YXN5Rm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiUGFw
eXJ1cyIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Rml4ZWRGb250RmFtaWx5KHByZWZl
cmVuY2VzLCB0b1dLKCJDb3VyaWVyIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRQaWN0
b2dyYXBoRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiQXBwbGUgQ29sb3IgRW1vamkiKS5n
ZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFNhbnNTZXJpZkZvbnRGYW1pbHkocHJlZmVyZW5j
ZXMsIHRvV0soIkhlbHZldGljYSIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0U2VyaWZG
b250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJUaW1lcyIpLmdldCgpKTsKICAgICBXS1ByZWZl
cmVuY2VzU2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQocHJlZmVyZW5jZXMsIGZh
bHNlKTsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgIFdLUHJlZmVyZW5jZXNTZXRNZWRp
YVNvdXJjZUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwpAQCAtMTAxMCwzOCArOTkzLDI3IEBA
IGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3Qg
VGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQo
bV9tYWluV2ViVmlldy0+cGFnZSgpLCBudWxscHRyKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlJlc2V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IHJl
c2V0TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Cisg
ICAgYXV0byByZXNldE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZEdDS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2hvdWxkR0MiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBzaG91bGRHQ1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUobV9nY0JldHdlZW5UZXN0cykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0ocmVzZXRN
ZXNzYWdlQm9keS5nZXQoKSwgc2hvdWxkR0NLZXkuZ2V0KCksIHNob3VsZEdDVmFsdWUuZ2V0KCkp
OworICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJTaG91bGRHQyIsIG1fZ2NCZXR3ZWVu
VGVzdHMpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsbG93ZWRIb3N0c0tleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFsbG93ZWRIb3N0cyIpKTsK
LSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gYWxsb3dlZEhvc3RzVmFsdWUgPSBh
ZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIGZvciAoYXV0byYgaG9zdCA6IG1f
YWxsb3dlZEhvc3RzKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0hvc3Qg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGhvc3QuY19zdHIoKSkpOwot
ICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShhbGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSwgd2tIb3N0
LmdldCgpKTsKLSAgICB9Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5
LmdldCgpLCBhbGxvd2VkSG9zdHNLZXkuZ2V0KCksIGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpKTsK
KyAgICBhdXRvIGFsbG93ZWRIb3N0c1ZhbHVlID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0
ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGhvc3QgOiBtX2FsbG93ZWRIb3N0cykKKyAgICAgICAgV0tB
cnJheUFwcGVuZEl0ZW0oYWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCksIHRvV0soaG9zdC5jX3N0cigp
KS5nZXQoKSk7CisgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkFsbG93ZWRIb3N0cyIs
IGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lT
T0xBVEVEX1RSRUUpCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4SXNvbGF0ZWRNb2Rl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWNjZXNzaWJpbGl0
eUlzb2xhdGVkVHJlZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGF4SXNvbGF0
ZWRNb2RlVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2FjY2Vzc2liaWxpdHlJc29s
YXRlZFRyZWVNb2RlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5
LmdldCgpLCBheElzb2xhdGVkTW9kZUtleS5nZXQoKSwgYXhJc29sYXRlZE1vZGVWYWx1ZS5nZXQo
KSk7CisgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkFjY2Vzc2liaWxpdHlJc29sYXRl
ZFRyZWUiLCBtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKTsKICNlbmRpZgotICAgIAot
ICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3RoKCkpIHsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGpzY09wdGlvbnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJKU0NPcHRpb25zIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4ganNjT3B0aW9uc1ZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhvcHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSkpOwotICAgICAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCksIGpzY09wdGlvbnNLZXkuZ2V0KCksIGpzY09w
dGlvbnNWYWx1ZS5nZXQoKSk7Ci0gICAgfQorCisgICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5s
ZW5ndGgoKSkKKyAgICAgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkpTQ09wdGlvbnMi
LCBvcHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9y
VGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOwog
I2VuZGlmCiAKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCB0b1dLKCJSZXNldCIpLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsKIAogICAg
IFdLQ29udGV4dFNldFNob3VsZFVzZUZvbnRTbW9vdGhpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwogCkBAIC0xMjAzLDggKzExNzUsNyBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjp1cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KCkKIAogICAgIEFzeW5j
VGFzayhbXSgpIHsKICAgICAgICAgLy8gQWZ0ZXIgZWFjaCB0ZXN0LCB3ZSB1cGRhdGUgdGhlIGxp
c3Qgb2YgbGl2ZSBkb2N1bWVudHMgc28gdGhhdCB3ZSBjYW4gZGV0ZWN0IHdoZW4gYW4gYWJhbmRv
bmVkIGRvY3VtZW50IGZpcnN0IHNob3dlZCB1cC4KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiR2V0TGl2ZURvY3VtZW50cyIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVj
dGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgV0tQYWdlUG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmll
dygpLT5wYWdlKCksIHRvV0soIkdldExpdmVEb2N1bWVudHMiKS5nZXQoKSwgbnVsbHB0cik7CiAg
ICAgfSwgNV9zKS5ydW4oKTsKIH0KIApAQCAtMTIxNSw4ICsxMTg2LDcgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6Y2hlY2tGb3JXb3JsZExlYWtzKCkKIAogICAgIEFzeW5jVGFzayhbXSgpIHsKICAg
ICAgICAgLy8gVGhpcyBydW5zIGF0IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgdGVzdHMuIEl0IGNs
ZWFycyBjYWNoZXMsIHJ1bnMgYSBHQyBhbmQgdGhlbiBmZXRjaGVzIHRoZSBsaXN0IG9mIGRvY3Vt
ZW50cy4KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2hlY2tGb3JXb3JsZExlYWtzIikp
OwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIpOworICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygiQ2hl
Y2tGb3JXb3JsZExlYWtzIikuZ2V0KCksIG51bGxwdHIpOwogICAgIH0sIDIwX3MpLnJ1bigpOwog
fQogCkBAIC0xMzI0LDYgKzEyOTQsNyBAQCBjb25zdCBjaGFyKiBUZXN0Q29udHJvbGxlcjo6bmV0
d29ya1Byb2Nlc3NOYW1lKCkKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKKwogdm9pZCBUZXN0
Q29udHJvbGxlcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCBhbGxvd3MpCiB7CiAg
ICAgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGFsbG93czsKQEAgLTE0MDAsOCArMTM3MSw4
IEBAIHN0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZShjb25zdCBzdGQ6OnN0
cmluZyYgdmFsdWUpCiAKIHN0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJW
YWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpz
dHJpbmcmIHBhdGhPclVSTCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gYmFzZVVSTCA9
IGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpOwotICAgIFdLUmV0YWlu
UHRyPFdLVVJMUmVmPiByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVS
TChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7CisgICAgYXV0byBiYXNlVVJMID0gYWRv
cHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7CisgICAgYXV0byByZWxhdGl2
ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1
ZS5jX3N0cigpKSk7CiAgICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aChyZWxh
dGl2ZVVSTC5nZXQoKSkpKTsKIH0KIApAQCAtMTQxNSw4ICsxMzg2LDcgQEAgc3RhdGljIHZvaWQg
dXBkYXRlVGVzdE9wdGlvbnNGcm9tVGVzdEhlYWRlcihUZXN0T3B0aW9ucyYgdGVzdE9wdGlvbnMs
IGNvbnN0IHN0ZDoKICAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZSA9IGFic29sdXRlUGF0aDsKICAg
ICBpZiAoZmlsZW5hbWUuZW1wdHkoKSkgewogICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1
Y2UgY29udmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJM
KHBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAgICAgIGZpbGVuYW1lID0gdGVzdFBhdGgod2tVUkwu
Z2V0KCkpOworICAgICAgICBmaWxlbmFtZSA9IHRlc3RQYXRoKGFkb3B0V0soY3JlYXRlVGVzdFVS
TChwYXRoT3JVUkwuY19zdHIoKSkpLmdldCgpKTsKICAgICB9CiAKICAgICBpZiAoZmlsZW5hbWUu
ZW1wdHkoKSkKQEAgLTE2MTUsNiArMTU4NSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZp
Z3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogfQogCiAjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykgJiYgIVBMQVRGT1JNKENPQ09BKQorCiBzdHJ1Y3QgQ29u
dGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0IHsKICAgICBleHBsaWNpdCBDb250ZW50
RXh0ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRleHQoVGVzdENvbnRyb2xsZXImIGNvbnRyb2xsZXIp
CiAgICAgICAgIDogdGVzdENvbnRyb2xsZXIoY29udHJvbGxlcikKQEAgLTE2NDIsMTUgKzE2MTMs
OSBAQCBzdGF0aWMgc3RkOjpzdHJpbmcgY29udGVudEV4dGVuc2lvbkpTT05QYXRoKFdLVVJMUmVm
IHVybCkKICAgICBpZiAocGF0aC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHBhdGggKyAiLmpz
b24iOwogCi0gICAgYXV0byBwID0gYWRvcHRXSyhXS1VSTENvcHlQYXRoKHVybCkpOwotICAgIGF1
dG8gYnVmZmVyID0gc3RkOjp2ZWN0b3I8Y2hhcj4oV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJp
bmdTaXplKHAuZ2V0KCkpKTsKLSAgICBjb25zdCBhdXRvIGxlbmd0aCA9IFdLU3RyaW5nR2V0VVRG
OENTdHJpbmcocC5nZXQoKSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0gICAgcmV0
dXJuIHN0ZDo6c3RyaW5nKCJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzIikgKyBzdGQ6OnN0cmluZyhi
dWZmZXIuZGF0YSgpLCBsZW5ndGggLSAxKSArICIuanNvbiI7CisgICAgcmV0dXJuICJMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzIiArIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aCh1cmwpKS5nZXQo
KSkgKyAiLmpzb24iOwogfQotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0jaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNv
bnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogewogICAg
IGNvbnN0IGNoYXIqIGNvbnRlbnRFeHRlbnNpb25zUGF0aCA9IGxpYnJhcnlQYXRoRm9yVGVzdGlu
ZygpOwpAQCAtMTY3MCwxMyArMTYzNSwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1
cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdAogICAg
IH0KIAogICAgIHN0ZDo6c3RyaW5nIGpzb25GaWxlQ29udGVudHMge3N0ZDo6aXN0cmVhbWJ1Zl9p
dGVyYXRvcjxjaGFyPihqc29uRmlsZSksIHN0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPigp
fTsKLSAgICBhdXRvIGpzb25Tb3VyY2UgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKGpzb25GaWxlQ29udGVudHMuY19zdHIoKSkpOworICAgIGF1dG8ganNvblNvdXJjZSA9
IHRvV0soanNvbkZpbGVDb250ZW50cy5jX3N0cigpKTsKIAotICAgIGF1dG8gc3RvcmVQYXRoID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb250ZW50RXh0ZW5zaW9uc1Bh
dGgpKTsKKyAgICBhdXRvIHN0b3JlUGF0aCA9IHRvV0soY29udGVudEV4dGVuc2lvbnNQYXRoKTsK
ICAgICBhdXRvIGV4dGVuc2lvblN0b3JlID0gYWRvcHRXSyhXS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVDcmVhdGUoc3RvcmVQYXRoLmdldCgpKSk7CiAgICAgQVNTRVJUKGV4dGVuc2lvblN0b3Jl
KTsKIAotICAgIGF1dG8gZmlsdGVySWRlbnRpZmllciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRlc3RDb250ZW50RXh0ZW5zaW9uIikpOworICAgIGF1dG8gZmlsdGVy
SWRlbnRpZmllciA9IHRvV0soIlRlc3RDb250ZW50RXh0ZW5zaW9uIik7CiAKICAgICBDb250ZW50
RXh0ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7CiAgICAgV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZShleHRlbnNpb25TdG9yZS5nZXQoKSwgZmlsdGVy
SWRlbnRpZmllci5nZXQoKSwganNvblNvdXJjZS5nZXQoKSwgJmNvbnRleHQsIGNvbnRlbnRFeHRl
bnNpb25TdG9yZUNhbGxiYWNrKTsKQEAgLTE3MDEsMTggKzE2NjYsMjIgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6cmVzZXRDb250ZW50RXh0ZW5zaW9ucygpCiAKICAgICBXS1VzZXJDb250ZW50Q29u
dHJvbGxlclJlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVycyh1c2VyQ29udGVudENvbnRyb2xsZXIo
KSk7CiAKLSAgICBhdXRvIHN0b3JlUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoY29udGVudEV4dGVuc2lvbnNQYXRoKSk7CisgICAgYXV0byBzdG9yZVBhdGggPSB0
b1dLKGNvbnRlbnRFeHRlbnNpb25zUGF0aCk7CiAgICAgYXV0byBleHRlbnNpb25TdG9yZSA9IGFk
b3B0V0soV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ3JlYXRlKHN0b3JlUGF0aC5nZXQoKSkp
OwogICAgIEFTU0VSVChleHRlbnNpb25TdG9yZSk7CiAKLSAgICBhdXRvIGZpbHRlcklkZW50aWZp
ZXIgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXN0Q29udGVudEV4
dGVuc2lvbiIpKTsKKyAgICBhdXRvIGZpbHRlcklkZW50aWZpZXIgPSB0b1dLKCJUZXN0Q29udGVu
dEV4dGVuc2lvbiIpOwogCiAgICAgQ29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0
IGNvbnRleHQoKnRoaXMpOwogICAgIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZShl
eHRlbnNpb25TdG9yZS5nZXQoKSwgZmlsdGVySWRlbnRpZmllci5nZXQoKSwgJmNvbnRleHQsIGNv
bnRlbnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrKTsKICAgICBydW5VbnRpbChjb250ZXh0LmRvbmUs
IG5vVGltZW91dCk7CiAgICAgQVNTRVJUKCFjb250ZXh0LmZpbHRlcik7CiB9Ci0jZWxzZSAvLyBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykgJiYgIVBMQVRGT1JNKENPQ09BKQorCisjaWYgIUVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCisKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25G
b3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJikKIHsKIH0KQEAgLTE3MjAsMTQgKzE2ODksMTMg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3Qo
Y29uc3QgVGVzdEludm9jYXRpb24mKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50
RXh0ZW5zaW9ucygpCiB7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
LSNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCisKKyNlbmRpZiAvLyAhRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKIAogY2xhc3MgQ29tbWFuZFRva2VuaXplciB7CiBwdWJsaWM6CiAgICAgZXhw
bGljaXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCiAgICAgICAg
IDogbV9pbnB1dChpbnB1dCkKLSAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKICAgICB7
CiAgICAgICAgIHB1bXAoKTsKICAgICB9CkBAIC0xNzQwLDcgKzE3MDgsNyBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAnXCcnOwogICAgIGNvbnN0IHN0ZDo6
c3RyaW5nJiBtX2lucHV0OwogICAgIHN0ZDo6c3RyaW5nIG1fbmV4dDsKLSAgICBzaXplX3QgbV9w
b3NOZXh0U2VwYXJhdG9yOworICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3IgeyAwIH07CiB9
OwogCiB2b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAoKQpAQCAtMTgxNCw4ICsxNzgyLDcgQEAg
Ym9vbCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKiBpbnB1dExpbmUpCiAgICAg
CiAgICAgVGVzdE9wdGlvbnMgb3B0aW9ucyA9IHRlc3RPcHRpb25zRm9yVGVzdChjb21tYW5kKTsK
IAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVS
TChjb21tYW5kLnBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAgbV9jdXJyZW50SW52b2NhdGlvbiA9
IG1ha2VVbmlxdWU8VGVzdEludm9jYXRpb24+KHdrVVJMLmdldCgpLCBvcHRpb25zKTsKKyAgICBt
X2N1cnJlbnRJbnZvY2F0aW9uID0gbWFrZVVuaXF1ZTxUZXN0SW52b2NhdGlvbj4oYWRvcHRXSyhj
cmVhdGVUZXN0VVJMKGNvbW1hbmQucGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSwgb3B0aW9ucyk7
CiAKICAgICBpZiAoY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzIHx8IG1fc2hvdWxkRHVtcFBpeGVs
c0ZvckFsbFRlc3RzKQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRJc1BpeGVsVGVz
dChjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKQEAgLTE5NDQsMTggKzE5MTEsOSBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjpncHVQcm9jZXNzRGlkQ3Jhc2goV0tDb250ZXh0UmVmIGNvbnRleHQs
IFdLUHJvY2Vzc0lEIHByb2NlcwogICAgIHN0YXRpY19jYXN0PFRlc3RDb250cm9sbGVyKj4oY29u
c3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5ncHVQcm9jZXNzRGlkQ3Jhc2gocHJvY2Vzc0lE
KTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJv
bUluamVjdGVkQnVuZGxlKFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnksIGJv
b2wgc3luY2hyb25vdXMpCit2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlS2V5RG93bk1l
c3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGJvb2wg
c3luY2hyb25vdXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleSIpKTsKLSAgICBXS1N0cmlu
Z1JlZiBrZXkgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGtleUtleS5nZXQoKSkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlm
aWVycyA9IHN0YXRpY19jYXN0PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBtb2RpZmllcnNLZXkuZ2V0KCkpKSkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGxvY2F0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiTG9jYXRpb24iKSk7Ci0gICAgdW5zaWduZWQgbG9jYXRpb24gPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxvY2F0aW9uS2V5
LmdldCgpKSkpKTsKLQotICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+a2V5RG93bihrZXksIG1vZGlm
aWVycywgbG9jYXRpb24pOworICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+a2V5RG93bihzdHJpbmdW
YWx1ZShkaWN0aW9uYXJ5LCAiS2V5IiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmll
cnMiKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkxvY2F0aW9uIikpOwogfQogCiB2b2lkIFRl
c3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50c0xpc3QoV0tBcnJheVJlZiBsaXZl
RG9jdW1lbnRMaXN0KQpAQCAtMTk2NCwxOCArMTkyMiw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OmRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdChXS0FycmF5UmVmIGxpdmVEb2N1bWVudExpc3Qp
CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+IGRvY3VtZW50SW5mbzsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bURvY3VtZW50czsgKytpKSB7Ci0gICAgICAgIFdLVHlwZVJl
ZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGxpdmVEb2N1bWVudExpc3QsIGkpOwotICAg
ICAgICBpZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSkgewotICAgICAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIGxpdmVEb2N1bWVudEl0ZW0gPSBz
dGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KGl0ZW0pOwotCi0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJpZCIpKTsKLSAgICAgICAgICAgIFdLVUludDY0UmVmIGRvY3VtZW50SUQgPSBzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsaXZlRG9jdW1l
bnRJdGVtLCBpZEtleS5nZXQoKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdXJsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidXJs
IikpOwotICAgICAgICAgICAgV0tTdHJpbmdSZWYgZG9jdW1lbnRVUkwgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsaXZlRG9jdW1lbnRJdGVtLCB1
cmxLZXkuZ2V0KCkpKTsKLQotICAgICAgICAgICAgZG9jdW1lbnRJbmZvLmFkZChXS1VJbnQ2NEdl
dFZhbHVlKGRvY3VtZW50SUQpLCB0b1dURlN0cmluZyhkb2N1bWVudFVSTCkpOwotICAgICAgICB9
CisgICAgICAgIGlmIChhdXRvIGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUoV0tBcnJheUdl
dEl0ZW1BdEluZGV4KGxpdmVEb2N1bWVudExpc3QsIGkpKSkKKyAgICAgICAgICAgIGRvY3VtZW50
SW5mby5hZGQodWludDY0VmFsdWUoZGljdGlvbmFyeSwgImlkIiksIHRvV1RGU3RyaW5nKHN0cmlu
Z1ZhbHVlKGRpY3Rpb25hcnksICJ1cmwiKSkpOwogICAgIH0KIAogICAgIGlmICghZG9jdW1lbnRJ
bmZvLnNpemUoKSkgewpAQCAtMjAwNyw2MCArMTk1NSwzNSBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZQogICAgICAgICBpZiAobV9zdGF0ZSAhPSBSdW5uaW5nVGVzdCkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICAgICAg
V0tTdHJpbmdSZWYgc3ViTWVzc2FnZU5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1Yk1lc3NhZ2VL
ZXkuZ2V0KCkpKTsKLQotICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhz
dWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBidXR0b25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJCdXR0b24iKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBidXR0b24gPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbktl
eS5nZXQoKSkpKSk7CisgICAgICAgIGF1dG8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc3ViTWVzc2FnZU5hbWUgPSBzdHJpbmdWYWx1ZShk
aWN0aW9uYXJ5LCAiU3ViTWVzc2FnZSIpOwogCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiTW9kaWZpZXJzIikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmll
cnMgPSBzdGF0aWNfY2FzdDxXS0V2ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgbW9kaWZpZXJzS2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9y
d2FyZCB0byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKQotICAgICAgICAgICAgICAgIG1f
ZXZlbnRTZW5kZXJQcm94eS0+bW91c2VEb3duKGJ1dHRvbiwgbW9kaWZpZXJzKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlVXAoYnV0
dG9uLCBtb2RpZmllcnMpOworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPm1vdXNlRG93bih1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiksIHVp
bnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KIAorICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhz
dWJNZXNzYWdlTmFtZSwgIk1vdXNlVXAiKSkgeworICAgICAgICAgICAgbV9ldmVudFNlbmRlclBy
b3h5LT5tb3VzZVVwKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFs
dWUoZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3Nh
Z2VOYW1lLCAiS2V5RG93biIpKSB7Ci0gICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmYWxzZSk7CisgICAg
ICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoZGljdGlv
bmFyeSwgZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVNj
cm9sbEJ5IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAg
IGRvdWJsZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkp
KSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJs
ZSB5ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0K
LSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5tb3VzZVNjcm9sbEJ5KHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNl
bmRlclByb3h5LT5tb3VzZVNjcm9sbEJ5KGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIiksIGRv
dWJsZVZhbHVlKGRpY3Rpb25hcnksICJZIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2Fn
ZU5hbWUsICJNb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKSkgewotICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0Rv
dWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkg
PSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBoYXNlS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGhhc2UiKSk7Ci0gICAgICAg
ICAgICBpbnQgcGhhc2UgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBwaGFzZUtleS5nZXQoKSkpKSk7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbW9tZW50dW1LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJNb21lbnR1bSIpKTsKLSAgICAgICAgICAgIGludCBtb21lbnR1bSA9IHN0YXRpY19j
YXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vbWVudHVtS2V5Lmdl
dCgpKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9j
ZXNzCisgICAgICAgICAgICBhdXRvIHggPSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOwor
ICAgICAgICAgICAgYXV0byB5ID0gZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKKyAgICAg
ICAgICAgIGF1dG8gcGhhc2UgPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiUGhhc2UiKTsKKyAg
ICAgICAgICAgIGF1dG8gbW9tZW50dW0gPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9tZW50
dW0iKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VTY3JvbGxCeVdpdGhX
aGVlbEFuZE1vbWVudHVtUGhhc2VzKHgsIHksIHBoYXNlLCBtb21lbnR1bSk7Ci0KICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMDgzLDQyICsyMDA2LDI2IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5k
bGUoV0tTdHJpbmdSZWYKICAgICAgICAgaWYgKG1fc3RhdGUgIT0gUnVubmluZ1Rlc3QpCiAgICAg
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN1Yk1lc3Nh
Z2VOYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJNZXNzYWdlS2V5LmdldCgpKSk7CisgICAgICAg
IGF1dG8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAg
IGF1dG8gc3ViTWVzc2FnZU5hbWUgPSBzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAiU3ViTWVzc2Fn
ZSIpOwogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3Nh
Z2VOYW1lLCAiS2V5RG93biIpKSB7Ci0gICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0cnVlKTsKLQorICAg
ICAgICAgICAgZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKGRpY3Rp
b25hcnksIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxw
dHIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VVcCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQnV0dG9uIikpOwotICAgICAgICAgICAgdW5zaWduZWQgYnV0dG9uID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0
b25LZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9k
aWZpZXJzIikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0
aWNfY2FzdDxXS0V2ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgbW9kaWZpZXJzS2V5LmdldCgpKSkpKTsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSkgeworICAgICAgICAgICAg
bV9ldmVudFNlbmRlclByb3h5LT5tb3VzZURvd24odWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkJ1
dHRvbiIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJzIikpOworICAgICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICB9CiAKLSAgICAg
ICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSkKLSAgICAg
ICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRG93bihidXR0b24sIG1vZGlmaWVy
cyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5
LT5tb3VzZVVwKGJ1dHRvbiwgbW9kaWZpZXJzKTsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsKKyAgICAgICAgICAg
IG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VVcCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0
dG9uIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7CiAgICAgICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNl
TW92ZVRvIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAg
IGRvdWJsZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkp
KSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJs
ZSB5ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0K
LSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5tb3VzZU1vdmVUbyh4LCB5KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5k
ZXJQcm94eS0+bW91c2VNb3ZlVG8oZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKSwgZG91Ymxl
VmFsdWUoZGljdGlvbmFyeSwgIlkiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIApAQCAtMjE0NCw4MSArMjA1MSw0OCBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKFdLU3RyaW5nUmVmCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRm9yY2VDaGFuZ2VkIikpIHsK
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvcmNlIikpOwotICAgICAgICAgICAgZG91
YmxlIGZvcmNlID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZvcmNlS2V5Lmdl
dCgpKSkpOwotCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRm9yY2VDaGFu
Z2VkKGZvcmNlKTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VGb3JjZUNo
YW5nZWQoZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIkZvcmNlIikpOwogICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1
Yk1lc3NhZ2VOYW1lLCAiQ29udGludW91c01vdXNlU2Nyb2xsQnkiKSkgewotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZh
bHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHBhZ2VkS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUGFnZWQiKSk7Ci0gICAgICAgICAgICBib29sIHBhZ2VkID0gc3RhdGljX2Nhc3Q8Ym9v
bD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBhZ2VkS2V5LmdldCgpKSkpKTsK
LQotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCisgICAgICAgICAgICBhdXRv
IHggPSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAgICAgICAgICAgYXV0byB5ID0g
ZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKKyAgICAgICAgICAgIGF1dG8gcGFnZWQgPSBi
b29sZWFuVmFsdWUoZGljdGlvbmFyeSwgIlBhZ2VkIik7CiAgICAgICAgICAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KHgsIHksIHBhZ2VkKTsKICAgICAgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTGVh
cEZvcndhcmQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lSW5NaWxsaXNl
Y29uZHMiKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0aW1lID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0aW1lS2V5LmdldCgpKSkpKTsK
LQotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5sZWFwRm9yd2FyZCh0aW1lKTsKKyAg
ICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bGVhcEZvcndhcmQodWludDY0VmFsdWUoZGlj
dGlvbmFyeSwgIlRpbWVJbk1pbGxpc2Vjb25kcyIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2Fn
ZU5hbWUsICJBZGRUb3VjaFBvaW50IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIp
KTsKLSAgICAgICAgICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVl
KHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiWSIpKTsKLSAgICAgICAgICAgIGludCB5ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2
NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAg
IG1fZXZlbnRTZW5kZXJQcm94eS0+YWRkVG91Y2hQb2ludCh4LCB5KTsKKyAgICAgICAgICAgIG1f
ZXZlbnRTZW5kZXJQcm94eS0+YWRkVG91Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAi
WCIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpKTsKICAgICAgICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiVXBkYXRlVG91Y2hQb2lu
dCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAgICAg
ICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGluZGV4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJYIikpOwotICAgICAgICAgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdL
VUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQorICAgICAg
ICAgICAgYXV0byBpbmRleCA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJbmRleCIpOworICAg
ICAgICAgICAgYXV0byB4ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlgiKTsKKyAgICAgICAg
ICAgIGF1dG8geSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJZIik7CiAgICAgICAgICAgICBt
X2V2ZW50U2VuZGVyUHJveHktPnVwZGF0ZVRvdWNoUG9pbnQoaW5kZXgsIHgsIHkpOwogICAgICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJT
ZXRUb3VjaE1vZGlmaWVyIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtb2RpZmllcktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1v
ZGlmaWVyIikpOwotICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciA9IHN0YXRp
Y19jYXN0PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBtb2RpZmllcktleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBlbmFibGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJFbmFibGUiKSk7Ci0gICAgICAgICAgICBib29sIGVuYWJsZSA9IHN0YXRpY19jYXN0PGJvb2w+
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBlbmFibGVLZXkuZ2V0KCkpKSkpOwot
CisgICAgICAgICAgICBhdXRvIG1vZGlmaWVyID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1v
ZGlmaWVyIik7CisgICAgICAgICAgICBhdXRvIGVuYWJsZSA9IGJvb2xlYW5WYWx1ZShkaWN0aW9u
YXJ5LCAiRW5hYmxlIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnNldFRvdWNo
TW9kaWZpZXIobW9kaWZpZXIsIGVuYWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIlNldFRvdWNoUG9pbnRSYWRpdXMiKSkg
ewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNYIikpOwotICAgICAgICAgICAgaW50
IHggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4
S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNZIikpOwot
ICAgICAgICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQorICAgICAgICAgICAgYXV0byB4ID0gdWlu
dDY0VmFsdWUoZGljdGlvbmFyeSwgIlJhZGl1c1giKTsKKyAgICAgICAgICAgIGF1dG8geSA9IHVp
bnQ2NFZhbHVlKGRpY3Rpb25hcnksICJSYWRpdXNZIik7CiAgICAgICAgICAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPnNldFRvdWNoUG9pbnRSYWRpdXMoeCwgeSk7CiAgICAgICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KQEAgLTIyNDksMTYgKzIxMjMs
MTIgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZgogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJSZWxlYXNlVG91Y2hQ
b2ludCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAg
ICAgICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGluZGV4S2V5LmdldCgpKSkpKTsKLSAgICAgICAgICAgIG1fZXZlbnRTZW5k
ZXJQcm94eS0+cmVsZWFzZVRvdWNoUG9pbnQoaW5kZXgpOworICAgICAgICAgICAgbV9ldmVudFNl
bmRlclByb3h5LT5yZWxlYXNlVG91Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiSW5k
ZXgiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIkNhbmNlbFRvdWNoUG9pbnQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxp
bnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpbmRleEtleS5nZXQoKSkpKSk7
Ci0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmNhbmNlbFRvdWNoUG9pbnQoaW5kZXgp
OworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5jYW5jZWxUb3VjaFBvaW50KHVpbnQ2
NFZhbHVlKGRpY3Rpb25hcnksICJJbmRleCIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0yMjc1LDE0ICsyMTQ1
LDE2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYKICAgICB9OwogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBbHdheXNBY2NlcHRDb29raWVz
IikpIHsKLSAgICAgICAgV0tCb29sZWFuUmVmIGFjY2VwdCA9IHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS0hUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9s
aWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoYWNjZXB0KSA/IGtXS0hUVFBDb29raWVBY2NlcHRQb2xp
Y3lBbHdheXMgOiBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnRE
b21haW47CisgICAgICAgIGF1dG8gcG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpCisgICAgICAgICAgICA/IGtXS0hUVFBDb29r
aWVBY2NlcHRQb2xpY3lBbHdheXMKKyAgICAgICAgICAgIDoga1dLSFRUUENvb2tpZUFjY2VwdFBv
bGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAgICAgICByZXR1cm4gc2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShwb2xpY3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29va2llcyIpKSB7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiBhY2NlcHQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgV0tIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKGFj
Y2VwdCkgPyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3Vt
ZW50RG9tYWluIDoga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50
RG9tYWluOworICAgICAgICBhdXRvIHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKQorICAgICAgICAgICAgPyBrV0tIVFRQQ29v
a2llQWNjZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluCisgICAgICAg
ICAgICA6IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFp
bjsKICAgICAgICAgcmV0dXJuIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfQogCkBAIC0yNDAzLDEyICsyMjc1LDggQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wgc2hvdWxkQmxvY2sp
CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgYXV0byBwb2xpY3kgPSBzaG91bGRCbG9jayA/IGtX
S1BsdWdpbkxvYWRDbGllbnRQb2xpY3lCbG9jayA6IGtXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3lB
bGxvdzsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lTmV0c2NhcGUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb20uYXBwbGUudGVzdG5ldHNjYXBl
cGx1Z2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lRmxhc2ggPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb20ubWFjcm9tZWRpYS5GbGFzaCBQ
bGF5ZXIucGx1Z2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbXB0eVN0cmlu
ZyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLSAgICBXS0Nv
bnRleHRTZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCBl
bXB0eVN0cmluZy5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBlbXB0eVN0cmluZy5nZXQoKSk7
Ci0gICAgV0tDb250ZXh0U2V0UGx1Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRleHQuZ2V0KCks
IHBvbGljeSwgZW1wdHlTdHJpbmcuZ2V0KCksIG5hbWVGbGFzaC5nZXQoKSwgZW1wdHlTdHJpbmcu
Z2V0KCkpOworICAgIFdLQ29udGV4dFNldFBsdWdpbkxvYWRDbGllbnRQb2xpY3kobV9jb250ZXh0
LmdldCgpLCBwb2xpY3ksIHRvV0soIiIpLmdldCgpLCB0b1dLKCJjb20uYXBwbGUudGVzdG5ldHNj
YXBlcGx1Z2luIikuZ2V0KCksIHRvV0soIiIpLmdldCgpKTsKKyAgICBXS0NvbnRleHRTZXRQbHVn
aW5Mb2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCB0b1dLKCIiKS5nZXQo
KSwgdG9XSygiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbiIpLmdldCgpLCB0b1dL
KCIiKS5nZXQoKSk7CiAjZW5kaWYKIH0KIApAQCAtMjQyMywyOSArMjI5MSwyNCBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKGNvbnN0IFN0cmluZyYgbW9kZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5
UmVmPiBlbXB0eUFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWxsT3JpZ2lucyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Bl
Y2lmaWNPcmlnaW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsb2Nh
bGhvc3QiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGRmTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk15IHBlcnNvbmFsIFBERiIpKTsKLSAg
ICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBhbGxPcmlnaW5z
LmdldCgpLCBwZGZOYW1lLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgp
KTsKKyAgICBhdXRvIGVtcHR5QXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkp
OwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVOZXRzY2FwZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVn
aW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlTmV0c2NhcGUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhcHBsaWNhdGlvbi94LXdlYmtp
dC10ZXN0LW5ldHNjYXBlIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBt
aW1lVHlwZXNOZXRzY2FwZSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAg
V0tBcnJheUFwcGVuZEl0ZW0obWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlTmV0c2Nh
cGUuZ2V0KCkpOworICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0
KCksIHRvV0soIiIpLmdldCgpLCB0b1dLKCJNeSBwZXJzb25hbCBQREYiKS5nZXQoKSwgZW1wdHlB
cnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbmFtZVBkZiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldl
YktpdCBidWlsdC1pbiBQREYiKSk7CisgICAgYXV0byBuYW1lTmV0c2NhcGUgPSB0b1dLKCJjb20u
YXBwbGUudGVzdG5ldHNjYXBlcGx1Z2luIik7CisgICAgYXV0byBtaW1lVHlwZXNOZXRzY2FwZSA9
IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgV0tBcnJheUFwcGVuZEl0ZW0o
bWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIHRvV0soImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3Qt
bmV0c2NhcGUiKS5nZXQoKSk7CisgICAgYXV0byBuYW1lUGRmID0gdG9XSygiV2ViS2l0IGJ1aWx0
LWluIFBERiIpOwogCiAgICAgaWYgKG1fdW5zdXBwb3J0ZWRQbHVnaW5Nb2RlID09ICJhbGxPcmln
aW5zIikgewotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0Lmdl
dCgpLCBhbGxPcmlnaW5zLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNj
YXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKLSAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9y
dGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgYWxsT3JpZ2lucy5nZXQoKSwgbmFtZVBkZi5nZXQo
KSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4
dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBuYW1l
TmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgp
KTsKKyAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwg
dG9XSygiIikuZ2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJy
YXkuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG1fdW5zdXBwb3J0
ZWRQbHVnaW5Nb2RlID09ICJzcGVjaWZpY09yaWdpbiIpIHsKLSAgICAgICAgV0tDb250ZXh0QWRk
U3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgc3BlY2lmaWNPcmlnaW4uZ2V0KCksIG5h
bWVOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0
KCkpOwotICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgp
LCBzcGVjaWZpY09yaWdpbi5nZXQoKSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwg
ZW1wdHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbiht
X2NvbnRleHQuZ2V0KCksIHRvV0soImxvY2FsaG9zdCIpLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0
KCksIG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAgICAg
V0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygibG9jYWxo
b3N0IikuZ2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXku
Z2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMjQ5MSwxNCArMjM1NCwxMiBA
QCBib29sIFRlc3RDb250cm9sbGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKFdLUGFnZVJlZiBwYWdlLCBXS1BybwogewogICAgIGlmIChtX3Nob3VsZExvZ0NhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpCiAgICAgICAgIG1fY3VycmVudEludm9jYXRp
b24tPm91dHB1dFRleHQoImNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VcbiIp
OwotICAgIFdLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWUgYXV0aGVudGljYXRp
b25TY2hlbWUgPSBXS1Byb3RlY3Rpb25TcGFjZUdldEF1dGhlbnRpY2F0aW9uU2NoZW1lKHByb3Rl
Y3Rpb25TcGFjZSk7Ci0gICAgCi0gICAgaWYgKGF1dGhlbnRpY2F0aW9uU2NoZW1lID09IGtXS1By
b3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVx
dWVzdGVkKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGhvc3QgPSB0b1NURChhZG9wdFdLKFdLUHJv
dGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkpOworICAgIGF1dG8g
c2NoZW1lID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRBdXRoZW50aWNhdGlvblNjaGVtZShwcm90ZWN0
aW9uU3BhY2UpOworICAgIGlmIChzY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGlj
YXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQpIHsKKyAgICAgICAgYXV0
byBob3N0ID0gdG9TVEQoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rp
b25TcGFjZSkpKTsKICAgICAgICAgcmV0dXJuIGhvc3QgPT0gImxvY2FsaG9zdCIgfHwgaG9zdCA9
PSAiMTI3LjAuMC4xIiB8fCAobV9hbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9z
dHMgJiYgbV9hbGxvd2VkSG9zdHMuZmluZChob3N0KSAhPSBtX2FsbG93ZWRIb3N0cy5lbmQoKSk7
CiAgICAgfQotICAgIAotICAgIHJldHVybiBhdXRoZW50aWNhdGlvblNjaGVtZSA8PSBrV0tQcm90
ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdlc3QgfHwgYXV0aGVudGljYXRp
b25TY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVPQXV0aDsK
KyAgICByZXR1cm4gc2NoZW1lIDw9IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2No
ZW1lSFRUUERpZ2VzdCB8fCBzY2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRp
b25TY2hlbWVPQXV0aDsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTmF2aWdh
dGlvbihXS1BhZ2VSZWYgcGFnZSwgV0tOYXZpZ2F0aW9uUmVmIG5hdmlnYXRpb24pCkBAIC0yNTA2
LDggKzIzNjcsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKFdL
UGFnZVJlZiBwYWdlLCBXS05hdmlnYXRpb25SZWYgbmF2aWdhdAogICAgIGlmIChtX3N0YXRlICE9
IFJlc2V0dGluZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IHdrVVJMID0gYWRvcHRXSyhXS0ZyYW1lQ29weVVSTChXS1BhZ2VHZXRNYWluRnJhbWUocGFnZSkp
KTsKLSAgICBpZiAoIVdLVVJMSXNFcXVhbCh3a1VSTC5nZXQoKSwgYmxhbmtVUkwoKSkpCisgICAg
aWYgKCFXS1VSTElzRXF1YWwoYWRvcHRXSyhXS0ZyYW1lQ29weVVSTChXS1BhZ2VHZXRNYWluRnJh
bWUocGFnZSkpKS5nZXQoKSwgYmxhbmtVUkwoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
ZG9uZVJlc2V0dGluZyA9IHRydWU7CkBAIC0yNTI3LDcgKzIzODcsNyBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmIHBhZ2Us
IFdLQXV0aGVudAogICAgICAgICBtX3NlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHND
b3VudCsrOwogCiAgICAgICAgIGlmIChtX2FsbG93c0FueVNTTENlcnRpZmljYXRlKSB7Ci0gICAg
ICAgICAgICBXS1JldGFpblB0cjxXS0NyZWRlbnRpYWxSZWY+IGNyZWRlbnRpYWwgPSBhZG9wdFdL
KFdLQ3JlZGVudGlhbENyZWF0ZSh0b1dLKCJhY2NlcHQgc2VydmVyIHRydXN0IikuZ2V0KCksIHRv
V0soIiIpLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSk7CisgICAgICAgICAg
ICBhdXRvIGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh0b1dLKCJhY2Nl
cHQgc2VydmVyIHRydXN0IikuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBrV0tDcmVkZW50aWFsUGVy
c2lzdGVuY2VOb25lKSk7CiAgICAgICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0
ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgY3JlZGVudGlhbC5nZXQoKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1NDEsOSArMjQwMSw5IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VS
ZWYgcGFnZSwgV0tBdXRoZW50CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGQ6OnN0
cmluZyBob3N0ID0gdG9TVEQoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3Rl
Y3Rpb25TcGFjZSkpLmdldCgpKTsKKyAgICBhdXRvIGhvc3QgPSB0b1dURlN0cmluZyhhZG9wdFdL
KFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkpOwogICAg
IGludCBwb3J0ID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRQb3J0KHByb3RlY3Rpb25TcGFjZSk7Ci0g
ICAgU3RyaW5nIG1lc3NhZ2UgPSBtYWtlU3RyaW5nKGhvc3QuY19zdHIoKSwgJzonLCBwb3J0LCAi
IC0gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIC0gIiwgdG9TdHJpbmcoYXV0aGVu
dGljYXRpb25TY2hlbWUpLCAiIC0gIik7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSBtYWtlU3RyaW5n
KGhvc3QsICc6JywgcG9ydCwgIiAtIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAt
ICIsIHRvU3RyaW5nKGF1dGhlbnRpY2F0aW9uU2NoZW1lKSwgIiAtICIpOwogICAgIGlmICghbV9o
YW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKQogICAgICAgICBtZXNzYWdlLmFwcGVuZCgi
U2ltdWxhdGluZyBjYW5jZWxsZWQgYXV0aGVudGljYXRpb24gc2hlZXRcbiIpOwogICAgIGVsc2UK
QEAgLTI1NTQsMTMgKzI0MTQsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdLUGFnZVJlZiBwYWdlLCBXS0F1dGhlbnQKICAgICAgICAg
V0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlz
dGVuZXIsIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB1c2VybmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
bV9hdXRoZW50aWNhdGlvblVzZXJuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gcGFzc3dvcmQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKG1fYXV0aGVudGljYXRpb25QYXNzd29yZC51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tDcmVkZW50aWFsUmVmPiBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRp
YWxDcmVhdGUodXNlcm5hbWUuZ2V0KCksIHBhc3N3b3JkLmdldCgpLCBrV0tDcmVkZW50aWFsUGVy
c2lzdGVuY2VGb3JTZXNzaW9uKSk7CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0Ny
ZWRlbnRpYWxDcmVhdGUodG9XSyhtX2F1dGhlbnRpY2F0aW9uVXNlcm5hbWUpLmdldCgpLCB0b1dL
KG1fYXV0aGVudGljYXRpb25QYXNzd29yZCkuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5j
ZUZvclNlc3Npb24pKTsKICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNy
ZWRlbnRpYWwoZGVjaXNpb25MaXN0ZW5lciwgY3JlZGVudGlhbC5nZXQoKSk7CiB9CiAKLSAgICAK
KwogLy8gV0tDb250ZXh0RG93bmxvYWRDbGllbnQKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZG93
bmxvYWREaWRTdGFydChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tEb3dubG9hZFJlZiBkb3dubG9h
ZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTI3MDQsOSArMjU2Miw5IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiAgICAg
ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKTsK
IH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91
YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJv
dmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1
cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3Vi
bGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlk
ZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCkKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxk
b3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9u
YWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKQogewotICAgIG1f
Z2VvbG9jYXRpb25Qcm92aWRlci0+c2V0UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNj
dXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNT
cGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgbV9nZW9s
b2NhdGlvblByb3ZpZGVyLT5zZXRQb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFj
eSwgYWx0aXR1ZGUsIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkLCBmbG9vckxldmVs
KTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25V
bmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSkKQEAgLTI4NTYsOSArMjcx
NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2VyTWVkaWFQZXJtaXNz
aW9uRm9yT3JpZ2luKFdLRnJhbWVSZWYgZnJhbWUsCiB7CiAgICAgYXV0byBvcmlnaW5IYXNoID0g
dXNlck1lZGlhT3JpZ2luSGFzaCh1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgdG9wTGV2ZWxEb2N1
bWVudE9yaWdpbik7CiAgICAgYXV0byBzYWx0ID0gc2FsdEZvck9yaWdpbihmcmFtZSwgb3JpZ2lu
SGFzaCk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNhbHRTdHJpbmcgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNhbHQudXRmOCgpLmRhdGEoKSkpOwotCi0g
ICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tTZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGNoZWNr
UmVxdWVzdCwgc2FsdFN0cmluZy5nZXQoKSwgc2V0dGluZ3NGb3JPcmlnaW4ob3JpZ2luSGFzaCku
cGVyc2lzdGVudFBlcm1pc3Npb24oKSk7CisgICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tT
ZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGNoZWNrUmVxdWVzdCwgdG9XSyhzYWx0KS5nZXQoKSwgc2V0
dGluZ3NGb3JPcmlnaW4ob3JpZ2luSGFzaCkucGVyc2lzdGVudFBlcm1pc3Npb24oKSk7CiB9CiAK
IGJvb2wgVGVzdENvbnRyb2xsZXI6OmhhbmRsZURldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzUmVxdWVzdChXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKQEAgLTI5MTQsOCArMjc3MCw4
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0SWZQb3NzaWJsZSgpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGF1ZGlvRGV2aWNlVUlEcyA9IGFkb3B0
V0soV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdEF1ZGlvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IHZpZGVvRGV2aWNlVUlEcyA9IGFkb3B0
V0soV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFZpZGVvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7
CisgICAgICAgIGF1dG8gYXVkaW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0QXVkaW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKKyAgICAgICAgYXV0byB2aWRl
b0RldmljZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RWaWRlb0Rl
dmljZVVJRHMocmVxdWVzdCkpOwogCiAgICAgICAgIGlmICghV0tBcnJheUdldFNpemUodmlkZW9E
ZXZpY2VVSURzLmdldCgpKSAmJiAhV0tBcnJheUdldFNpemUoYXVkaW9EZXZpY2VVSURzLmdldCgp
KSkgewogICAgICAgICAgICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdERlbnkocmVxdWVz
dCwga1dLTm9Db25zdHJhaW50cyk7CkBAIC0yOTI2LDEzICsyNzgyLDEzIEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0SWZQb3Nz
aWJsZSgpCiAgICAgICAgIGlmIChXS0FycmF5R2V0U2l6ZSh2aWRlb0RldmljZVVJRHMuZ2V0KCkp
KQogICAgICAgICAgICAgdmlkZW9EZXZpY2VVSUQgPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5n
UmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgodmlkZW9EZXZpY2VVSURzLmdldCgpLCAwKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZpZGVvRGV2aWNlVUlEID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgICAgICAgICAgdmlkZW9EZXZpY2VVSUQg
PSB0b1dLKCIiKTsKIAogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9EZXZp
Y2VVSUQ7CiAgICAgICAgIGlmIChXS0FycmF5R2V0U2l6ZShhdWRpb0RldmljZVVJRHMuZ2V0KCkp
KQogICAgICAgICAgICAgYXVkaW9EZXZpY2VVSUQgPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5n
UmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoYXVkaW9EZXZpY2VVSURzLmdldCgpLCAwKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGF1ZGlvRGV2aWNlVUlEID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgICAgICAgICAgYXVkaW9EZXZpY2VVSUQg
PSB0b1dLKCIiKTsKIAogICAgICAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0QWxsb3co
cmVxdWVzdCwgYXVkaW9EZXZpY2VVSUQuZ2V0KCksIHZpZGVvRGV2aWNlVUlELmdldCgpKTsKICAg
ICB9CkBAIC0zMDU2LDEyICsyOTEyLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkTmF2aWdh
dGVXaXRoTmF2aWdhdGlvbkRhdGEoV0tOYXZpZ2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW8KICAgICBp
ZiAoIW1fc2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gVVJMCiAgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5
VVJMKG5hdmlnYXRpb25EYXRhKSk7CiAgICAgYXV0byB1cmxTdHJpbmcgPSB0b1dURlN0cmluZyhh
ZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKSk7Ci0gICAgLy8gVGl0bGUKICAgICBh
dXRvIHRpdGxlID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weVRpdGxl
KG5hdmlnYXRpb25EYXRhKSkpOwotICAgIC8vIEhUVFAgbWV0aG9kCiAgICAgYXV0byByZXF1ZXN0
ID0gYWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weU9yaWdpbmFsUmVxdWVzdChuYXZpZ2F0aW9u
RGF0YSkpOwogICAgIGF1dG8gbWV0aG9kID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTFJlcXVl
c3RDb3B5SFRUUE1ldGhvZChyZXF1ZXN0LmdldCgpKSkpOwogCkBAIC0zMjA2LDcgKzMwNTksNyBA
QCB2b2lkIGdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2sodm9pZCogdXNlckRhdGEs
IFdLQXJyYXlSZWYgZG9tYWluTGlzdCkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdERvbWFp
bnM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKGRvbWFpbkxp
c3QpOyBpKyspIHsKLSAgICAgICAgYXV0byBkb21haW4gPSAgcmVpbnRlcnByZXRfY2FzdDxXS1N0
cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbkxpc3QsIGkpKTsKKyAgICAgICAg
YXV0byBkb21haW4gPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRl
bUF0SW5kZXgoZG9tYWluTGlzdCwgaSkpOwogICAgICAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6dmVj
dG9yPGNoYXI+KFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShkb21haW4pKTsKICAg
ICAgICAgYXV0byBzdHJpbmdMZW5ndGggPSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGRvbWFpbiwg
YnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CiAKQEAgLTM5NzgsNyArMzgzMSw3IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpCiB2b2lkIFRl
c3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25z
dCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7CiAgICAgSW5BcHBCcm93c2VyUHJpdmFjeUNh
bGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKLSAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRh
dGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0
ZURhdGFTdG9yZSgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1bmRs
ZUlkZW50aWZpZXIudXRmOCgpLmRhdGEoKSkpLmdldCgpLCAmY29udGV4dCwgaW5BcHBCcm93c2Vy
UHJpdmFjeVZvaWRSZXN1bHRDYWxsYmFjayk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlVXBkYXRl
QnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVE
YXRhU3RvcmUoKSwgdG9XSyhidW5kbGVJZGVudGlmaWVyKS5nZXQoKSwgJmNvbnRleHQsIGluQXBw
QnJvd3NlclByaXZhY3lWb2lkUmVzdWx0Q2FsbGJhY2spOwogICAgIHJ1blVudGlsKGNvbnRleHQu
ZG9uZSwgbm9UaW1lb3V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oCmluZGV4IGY5NGQ1N2MxNDdiMzE2ZjA3OGZhODVmMjIwZjQwNzYwOTQxMTNjOGMuLmZmODM5
NGVjMDM4NzdhNmRiYzBkYzRiM2U0OGMwZWY0ZjNmM2IzMzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgLy8gR2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9v
bCk7Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUs
IGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRl
LCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUg
YWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBi
b29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWws
IGRvdWJsZSBmbG9vckxldmVsKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
KGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRp
b25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ks
IE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9u
YWw8ZG91YmxlPiBmbG9vckxldmVsKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UpOwogICAgIHZvaWQg
aGFuZGxlR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXS0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RSZWYpOwogICAgIGJvb2wgaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IGE1YjZk
ZDA1NTgwYWUwYzJkOTU3MDc3ZGZlNDUwYTQ4NmU2ZDAxZWMuLjUwMTI3ZjY3ODQxZTAzYzU1Njhl
MTllOTkxMTc5N2M4ZmMyZDZiODIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9j
YXRpb24uY3BwCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiVGVzdEludm9jYXRpb24uaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMu
aCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlVJU2NyaXB0Q29udHJv
bGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgpAQCAtNjYsMjEgKzY2LDE3
IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXVFIgewogCitzdGF0aWMgdm9p
ZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIGJvZHkgPSBudWxs
cHRyKQoreworICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgp
LCBib2R5KTsKK30KKwogVGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKFdLVVJMUmVmIHVy
bCwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgOiBtX29wdGlvbnMob3B0aW9ucykK
ICAgICAsIG1fdXJsKHVybCkKICAgICAsIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoUnVuTG9v
cDo6bWFpbigpLCB0aGlzLCAmVGVzdEludm9jYXRpb246OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVy
RmlyZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0
V0soV0tVUkxDb3B5U3RyaW5nKG1fdXJsLmdldCgpKSk7Ci0KLSAgICBzaXplX3Qgc3RyaW5nTGVu
Z3RoID0gV0tTdHJpbmdHZXRMZW5ndGgodXJsU3RyaW5nLmdldCgpKTsKLQotICAgIFZlY3Rvcjxj
aGFyPiB1cmxWZWN0b3I7Ci0gICAgdXJsVmVjdG9yLnJlc2l6ZShzdHJpbmdMZW5ndGggKyAxKTsK
LQotICAgIFdLU3RyaW5nR2V0VVRGOENTdHJpbmcodXJsU3RyaW5nLmdldCgpLCB1cmxWZWN0b3Iu
ZGF0YSgpLCBzdHJpbmdMZW5ndGggKyAxKTsKLQotICAgIG1fdXJsU3RyaW5nID0gU3RyaW5nKHVy
bFZlY3Rvci5kYXRhKCksIHN0cmluZ0xlbmd0aCk7CisgICAgbV91cmxTdHJpbmcgPSB0b1dURlN0
cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtX3VybC5nZXQoKSkpLmdldCgpKTsKIAogICAg
IC8vIEZJWE1FOiBBdm9pZCBtdXRhdGluZyB0aGUgc2V0dGluZyB2aWEgYSB0ZXN0IGRpcmVjdG9y
eSBsaWtlIHRoaXMuCiAgICAgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0gdXJsQ29udGFpbnMo
ImxvYWRpbmcvIikgJiYgIXVybENvbnRhaW5zKCI6Ly9sb2NhbGhvc3QiKTsKQEAgLTEyOSwyOCAr
MTI1LDEyIEBAIGJvb2wgVGVzdEludm9jYXRpb246OnNob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxs
YmFja3MoKSBjb25zdAogCiBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBUZXN0
SW52b2NhdGlvbjo6Y3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gYmVnaW5UZXN0TWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdXNlRmxleGlibGVWaWV3cG9ydEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlVzZUZsZXhpYmxlVmlld3BvcnQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiB1c2VGbGV4aWJsZVZpZXdwb3J0VmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShvcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCkpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIHVzZUZsZXhpYmxlVmlld3BvcnRL
ZXkuZ2V0KCksIHVzZUZsZXhpYmxlVmlld3BvcnRWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gZHVtcFBpeGVsc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkR1bXBQaXhlbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBkdW1wUGl4ZWxzVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBQaXhl
bHMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgp
LCBkdW1wUGl4ZWxzS2V5LmdldCgpLCBkdW1wUGl4ZWxzVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVvdXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUaW1lb3V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiB0aW1lb3V0VmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1fdGltZW91dC5taWxsaXNl
Y29uZHMoKSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHku
Z2V0KCksIHRpbWVvdXRLZXkuZ2V0KCksIHRpbWVvdXRWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBKU0NvbnNvbGVMb2dJblN0
ZEVycikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0
KCksIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycktleS5nZXQoKSwgZHVtcEpTQ29uc29sZUxvZ0lu
U3RkRXJyVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzVmFsdWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9wdGlvbnMoKS5hZGRpdGlvbmFs
U3VwcG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShi
ZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNL
ZXkuZ2V0KCksIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzVmFsdWUuZ2V0KCkpOwotCisg
ICAgYXV0byBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlVzZUZsZXhp
YmxlVmlld3BvcnQiLCBvcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCk7CisgICAgc2V0VmFs
dWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJEdW1wUGl4ZWxzIiwgbV9kdW1wUGl4ZWxzKTsKKyAg
ICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlRpbWVvdXQiLCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4obV90aW1lb3V0Lm1pbGxpc2Vjb25kcygpKSk7CisgICAgc2V0VmFsdWUoYmVnaW5U
ZXN0TWVzc2FnZUJvZHksICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBtX2R1bXBKU0NvbnNv
bGVMb2dJblN0ZEVycik7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJhZGRp
dGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIG9wdGlvbnMoKS5hZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlcy5jX3N0cigpKTsKICAgICByZXR1cm4gYmVnaW5UZXN0TWVzc2FnZUJvZHk7CiB9
CiAKQEAgLTE2OCw5ICsxNDgsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbnZva2UoKQogCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBjbGVhciBvdXQgdmlzaXRlZCBsaW5rcyBoZXJlLgogCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQmVnaW5UZXN0IikpOwotICAgIGF1dG8gYmVnaW5UZXN0
TWVzc2FnZUJvZHkgPSBjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCk7Ci0gICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBiZWdpblRlc3RNZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJCZWdpblRlc3QiLCBjcmVhdGVUZXN0
U2V0dGluZ3NEaWN0aW9uYXJ5KCkuZ2V0KCkpOwogCiAgICAgbV9zdGFydGVkVGVzdGluZyA9IHRy
dWU7CiAKQEAgLTMyNywxODUgKzMwNSwxMDQgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IkFjayIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tT
dHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1lc3NhZ2VCb2R5U3RyaW5n
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZUJvZHlTdHJpbmcsICJCZWdpblRlc3Qi
KSkgeworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keSksICJCZWdpblRlc3QiKSkgewogICAgICAgICAgICAgbV9nb3RJbml0aWFs
UmVzcG9uc2UgPSB0cnVlOwogICAgICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm5vdGlmeURvbmUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRG9uZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tE
aWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHRJc1BlbmRpbmciKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiBwaXhlbFJlc3VsdElzUGVuZGluZyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBpeGVsUmVzdWx0
SXNQZW5kaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBX
S0Jvb2xlYW5HZXRWYWx1ZShwaXhlbFJlc3VsdElzUGVuZGluZyk7Ci0KKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBtX3BpeGVsUmVzdWx0SXNQZW5kaW5nID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIlBpeGVsUmVzdWx0SXNQZW5kaW5nIik7CiAgICAgICAgIGlmICghbV9waXhlbFJl
c3VsdElzUGVuZGluZykgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBp
eGVsUmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4
ZWxSZXN1bHQiKSk7Ci0gICAgICAgICAgICBtX3BpeGVsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0tJ
bWFnZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHBpeGVsUmVzdWx0S2V5LmdldCgpKSk7CisgICAgICAgICAgICBtX3BpeGVsUmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8V0tJbWFnZVJlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUGl4ZWxS
ZXN1bHQiKSk7CiAgICAgICAgICAgICBBU1NFUlQoIW1fcGl4ZWxSZXN1bHQgfHwgbV9kdW1wUGl4
ZWxzKTsKICAgICAgICAgfQotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXBh
aW50UmVjdHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXBh
aW50UmVjdHMiKSk7Ci0gICAgICAgIG1fcmVwYWludFJlY3RzID0gc3RhdGljX2Nhc3Q8V0tBcnJh
eVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHJl
cGFpbnRSZWN0c0tleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBhdWRpb1Jlc3VsdEtleSA9ICBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJBdWRpb1Jlc3VsdCIpKTsKLSAgICAgICAgbV9hdWRpb1Jlc3VsdCA9IHN0YXRpY19jYXN0PFdL
RGF0YVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGF1ZGlvUmVzdWx0S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgbV9yZXBhaW50UmVjdHMgPSBzdGF0
aWNfY2FzdDxXS0FycmF5UmVmPih2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJSZXBhaW50
UmVjdHMiKSk7CisgICAgICAgIG1fYXVkaW9SZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0RhdGFSZWY+
KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkF1ZGlvUmVzdWx0IikpOwogICAgICAgICBk
b25lKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlRleHRPdXRwdXQiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS1N0cmluZ1JlZiB0ZXh0T3V0cHV0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgbV90ZXh0T3V0cHV0LmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0
T3V0cHV0KSk7CisgICAgICAgIG1fdGV4dE91dHB1dC5hcHBlbmQodG9XVEZTdHJpbmcoc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkR1bXBUb1N0ZEVyciIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRleHRPdXRwdXQgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVz
IiwgdG9XVEZTdHJpbmcodGV4dE91dHB1dCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiJXMiLCB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpLnV0
ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1
ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgYmVmb3JlVW5sb2FkUmV0dXJu
VmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKFdL
Qm9vbGVhbkdldFZhbHVlKGJlZm9yZVVubG9hZFJldHVyblZhbHVlKSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShib29sZWFu
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFkZENocm9tZUlu
cHV0RmllbGQiKSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+YWRkQ2hyb21lSW5wdXRGaWVsZCgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDYWxsQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQ
b3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBwb3N0
UGFnZU1lc3NhZ2UoIkNhbGxBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIpKSB7CiAgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5yZW1vdmVDaHJvbWVJbnB1dEZpZWxk
KCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxSZW1vdmVDaHJvbWVJbnB1dEZp
ZWxkQ2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRs
ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbFJlbW92ZUNo
cm9tZUlucHV0RmllbGRDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRm9jdXNX
ZWJWaWV3IikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPm1ha2VXZWJWaWV3Rmlyc3RSZXNwb25kZXIoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbEZvY3VzV2ViVmlld0NhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxGb2N1c1dlYlZpZXdDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRCYWNraW5nU2NhbGVGYWN0b3IiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBkb3VibGUgYmFj
a2luZ1NjYWxlRmFjdG9yID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJl
Zj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFj
dG9yKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGJh
Y2tpbmdTY2FsZUZhY3Rvcik7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbFNl
dEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBXS1BhZ2VTZXRDdXN0
b21CYWNraW5nU2NhbGVGYWN0b3IoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcG9zdFBh
Z2VNZXNzYWdlKCJDYWxsU2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2siKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgdWludDY0X3Qgbm90aWZp
Y2F0aW9uSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlv
bklEKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRkc1Zpc2l0ZWRMaW5rcyIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlua3Mo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgV0tCb29s
ZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlu
a3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgYm9v
bGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEdlb2xvY2F0
aW9uUGVybWlzc2lvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxl
ZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oV0tCb29s
ZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbGF0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImxhdGl0dWRlIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBs
YXRpdHVkZVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBsYXRpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAg
ICAgIGRvdWJsZSBsYXRpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUobGF0aXR1ZGVXSyk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvbmdpdHVkZUtleVdLID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibG9uZ2l0dWRlIikpOwotICAgICAgICBXS0Rv
dWJsZVJlZiBsb25naXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbG9uZ2l0dWRlS2V5V0suZ2V0
KCkpKTsKLSAgICAgICAgZG91YmxlIGxvbmdpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUobG9uZ2l0
dWRlV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhY2N1cmFjeUtleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjdXJhY3kiKSk7Ci0g
ICAgICAgIFdLRG91YmxlUmVmIGFjY3VyYWN5V0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGFjY3VyYWN5
S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGFjY3VyYWN5ID0gV0tEb3VibGVHZXRWYWx1
ZShhY2N1cmFjeVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlk
ZXNBbHRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
cHJvdmlkZXNBbHRpdHVkZSIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzQWx0aXR1
ZGVXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVzQWx0aXR1ZGVLZXlXSy5nZXQoKSkpOwot
ICAgICAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRl
c0FsdGl0dWRlV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVk
ZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWx0aXR1ZGUi
KSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGFsdGl0dWRlV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJs
ZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGFs
dGl0dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGFsdGl0dWRlID0gV0tEb3VibGVH
ZXRWYWx1ZShhbHRpdHVkZVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
cHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kiKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBy
b3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5ID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNBbHRpdHVkZUFj
Y3VyYWN5V0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVkZUFj
Y3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRp
dHVkZUFjY3VyYWN5IikpOwotICAgICAgICBXS0RvdWJsZVJlZiBhbHRpdHVkZUFjY3VyYWN5V0sg
PSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGFsdGl0dWRlQWNjdXJhY3lLZXlXSy5nZXQoKSkpOwotICAgICAg
ICBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSA9IFdLRG91YmxlR2V0VmFsdWUoYWx0aXR1ZGVBY2N1
cmFjeVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNIZWFk
aW5nS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRl
c0hlYWRpbmciKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwcm92aWRlc0hlYWRpbmdXSyA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHByb3ZpZGVzSGVhZGluZ0tleVdLLmdldCgpKSk7Ci0gICAgICAgIGJv
b2wgcHJvdmlkZXNIZWFkaW5nID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNIZWFkaW5nV0sp
OwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoZWFkaW5nS2V5V0sgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoZWFkaW5nIikpOwotICAgICAgICBX
S0RvdWJsZVJlZiBoZWFkaW5nV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhlYWRpbmdLZXlXSy5nZXQo
KSkpOwotICAgICAgICBkb3VibGUgaGVhZGluZyA9IFdLRG91YmxlR2V0VmFsdWUoaGVhZGluZ1dL
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNTcGVlZEtleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNTcGVlZCIp
KTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzU3BlZWRXSyA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHByb3ZpZGVzU3BlZWRLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzU3Bl
ZWQgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc1NwZWVkV0spOwotCi0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzcGVlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygic3BlZWQiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNwZWVkV0sgPSBz
dGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHNwZWVkS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIHNwZWVk
ID0gV0tEb3VibGVHZXRWYWx1ZShzcGVlZFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gcHJvdmlkZXNGbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0Zsb29yTGV2ZWwiKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiBwcm92aWRlc0Zsb29yTGV2ZWxXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVzRmxv
b3JMZXZlbEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsID0g
V0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNGbG9vckxldmVsV0spOwotCi0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBmbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJmbG9vckxldmVsIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBm
bG9vckxldmVsV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZsb29yTGV2ZWxLZXlXSy5nZXQoKSkpOwot
ICAgICAgICBkb3VibGUgZmxvb3JMZXZlbCA9IFdLRG91YmxlR2V0VmFsdWUoZmxvb3JMZXZlbFdL
KTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1
ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ks
IHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVz
Rmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBsYXRpdHVk
ZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImxhdGl0dWRlIik7CisgICAg
ICAgIGF1dG8gbG9uZ2l0dWRlID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
bG9uZ2l0dWRlIik7CisgICAgICAgIGF1dG8gYWNjdXJhY3kgPSBkb3VibGVWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJhY2N1cmFjeSIpOworICAgICAgICBhdXRvIGFsdGl0dWRlID0gb3B0
aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJhbHRpdHVkZSIpOworICAg
ICAgICBhdXRvIGFsdGl0dWRlQWNjdXJhY3kgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgImFsdGl0dWRlQWNjdXJhY3kiKTsKKyAgICAgICAgYXV0byBoZWFkaW5n
ID0gb3B0aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJoZWFkaW5nIik7
CisgICAgICAgIGF1dG8gc3BlZWQgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgInNwZWVkIik7CisgICAgICAgIGF1dG8gZmxvb3JMZXZlbCA9IG9wdGlvbmFsRG91
YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiZmxvb3JMZXZlbCIpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0
aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLCBhbHRpdHVkZUFjY3VyYWN5LCBo
ZWFkaW5nLCBzcGVlZCwgZmxvb3JMZXZlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihlcnJvck1lc3NhZ2UpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVz
ZXJNZWRpYVBlcm1pc3Npb24oV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MTUs
MTE3ICs0MTIsNjYgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZXJNZWRpYVBl
cnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gcGVybWlzc2lvbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygicGVybWlzc2lvbiIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBlcm1pc3Npb25XSyA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHBlcm1pc3Npb25LZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHBl
cm1pc3Npb24gPSBXS0Jvb2xlYW5HZXRWYWx1ZShwZXJtaXNzaW9uV0spOwotCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbldL
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBvcmlnaW5LZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBw
YXJlbnRPcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGFyZW50T3JpZ2luS2V5LmdldCgpKSk7
Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUo
bWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHBlcm1pc3Npb24gPSBib29sZWFuVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAicGVybWlzc2lvbiIpOworICAgICAgICBhdXRvIG9yaWdpbldL
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAib3JpZ2luIik7CisgICAgICAg
IGF1dG8gcGFyZW50T3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJwYXJlbnRPcmlnaW4iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Npb24sIG9yaWdp
bldLLCBwYXJlbnRPcmlnaW5XSyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlc2V0VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tE
aWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Im9yaWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIG9yaWdpbktleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBwYXJlbnRPcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbldLID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBwYXJlbnRPcmlnaW5LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAg
ICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgYXV0byBvcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIm9yaWdpbiIpOworICAgICAgICBhdXRvIHBhcmVudE9yaWdpbldLID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGFyZW50T3JpZ2luIik7CiAgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
Q291bnRGb3JPcmlnaW4ob3JpZ2luV0ssIHBhcmVudE9yaWdpbldLKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBlbmFibGVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJlbmFibGVkIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgZW5hYmxlZEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgZW5hYmxlZCA9IFdL
Qm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHBlcm1pc3NpdmVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoInBlcm1pc3NpdmUiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwZXJtaXNzaXZlV0sg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBwZXJtaXNzaXZlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9v
bCBwZXJtaXNzaXZlID0gV0tCb29sZWFuR2V0VmFsdWUocGVybWlzc2l2ZVdLKTsKLQorICAgICAg
ICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gZW5hYmxlZCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJlbmFibGVkIik7CisgICAgICAgIGF1dG8gcGVybWlzc2l2ZSA9IGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJwZXJtaXNzaXZlIik7CiAgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShlbmFibGVkLCBwZXJt
aXNzaXZlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0SGlkZGVuIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaXNJbml0aWFsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJoaWRkZW4iKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBoaWRkZW5XSyA9
IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGlzSW5pdGlhbEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wg
aGlkZGVuID0gV0tCb29sZWFuR2V0VmFsdWUoaGlkZGVuV0spOwotCi0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRIaWRkZW4oaGlkZGVuKTsKKyAgICAgICAgYXV0byBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJoaWRkZW4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlByb2Nl
c3NXb3JrUXVldWUiKSkgewotICAgICAgICBpZiAoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LndvcmtRdWV1ZU1hbmFnZXIoKS5wcm9jZXNzV29ya1F1ZXVlKCkpIHsKLSAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIldvcmtRdWV1ZVByb2Nlc3NlZENhbGxiYWNrIikpOwotICAgICAg
ICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
LSAgICAgICAgfQorICAgICAgICBpZiAoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtR
dWV1ZU1hbmFnZXIoKS5wcm9jZXNzV29ya1F1ZXVlKCkpCisgICAgICAgICAgICBwb3N0UGFnZU1l
c3NhZ2UoIldvcmtRdWV1ZVByb2Nlc3NlZENhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlF1ZXVlQmFja05hdmlnYXRpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBzdGVw
Q291bnQgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdl
Qm9keSkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFu
YWdlcigpLnF1ZXVlQmFja05hdmlnYXRpb24oc3RlcENvdW50KTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUJhY2tOYXZpZ2F0aW9u
KHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlRm9y
d2FyZE5hdmlnYXRpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBzdGVwQ291bnQg
PSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigp
LnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oc3RlcENvdW50KTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUZvcndhcmROYXZpZ2F0aW9u
KHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9h
ZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0
aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbG9hZERhdGFEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoInVybCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdXJsV0sg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2Fk
RGF0YURpY3Rpb25hcnksIHVybEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB0YXJnZXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJ0YXJnZXQiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRhcmdldFdLID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9u
YXJ5LCB0YXJnZXRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc2hvdWxkT3BlbkV4dGVybmFsVVJMc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWVXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIHNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHNLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZCh0b1dURlN0cmluZyh1cmxX
SyksIHRvV1RGU3RyaW5nKHRhcmdldFdLKSwgV0tCb29sZWFuR2V0VmFsdWUoc2hvdWxkT3BlbkV4
dGVybmFsVVJMc1ZhbHVlV0spKTsKKyAgICAgICAgYXV0byBsb2FkRGF0YURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHVybCA9IHRvV1RGU3Ry
aW5nKHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgInVybCIpKTsKKyAgICAgICAgYXV0
byB0YXJnZXQgPSB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJ0
YXJnZXQiKSk7CisgICAgICAgIGF1dG8gc2hvdWxkT3BlbkV4dGVybmFsVVJMcyA9IGJvb2xlYW5W
YWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJzaG91bGRPcGVuRXh0ZXJuYWxVUkxzIik7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVM
b2FkKHVybCwgdGFyZ2V0LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiUXVldWVMb2FkSFRNTFN0cmluZyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Rp
Y3Rpb25hcnlSZWYgbG9hZERhdGFEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5
UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNv
bnRlbnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb250ZW50
IikpOwotICAgICAgICBXS1N0cmluZ1JlZiBjb250ZW50V0sgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIGNvbnRl
bnRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYmFzZVVS
TEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImJhc2VVUkwiKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGJhc2VVUkxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgYmFzZVVSTEtl
eS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJs
ZVVSTEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVucmVhY2hh
YmxlVVJMIikpOwotICAgICAgICBXS1N0cmluZ1JlZiB1bnJlYWNoYWJsZVVSTFdLID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0
aW9uYXJ5LCB1bnJlYWNoYWJsZVVSTEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbG9hZERh
dGFEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBjb250ZW50V0sgPSBzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJjb250ZW50Iik7
CisgICAgICAgIGF1dG8gYmFzZVVSTFdLID0gc3RyaW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5
LCAiYmFzZVVSTCIpOworICAgICAgICBhdXRvIHVucmVhY2hhYmxlVVJMV0sgPSBzdHJpbmdWYWx1
ZShsb2FkRGF0YURpY3Rpb25hcnksICJ1bnJlYWNoYWJsZVVSTCIpOwogICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZEhUTUxTdHJp
bmcodG9XVEZTdHJpbmcoY29udGVudFdLKSwgYmFzZVVSTFdLID8gdG9XVEZTdHJpbmcoYmFzZVVS
TFdLKSA6IFN0cmluZygpLCB1bnJlYWNoYWJsZVVSTFdLID8gdG9XVEZTdHJpbmcodW5yZWFjaGFi
bGVVUkxXSykgOiBTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MzYsMTU0
ICs0ODIsMTE3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUlu
amVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUxvYWRpbmdTY3Jp
cHQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3Ry
aW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5n
KHNjcmlwdCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZU5vbkxvYWRpbmdTY3JpcHQiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVOb25Mb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5nKHNj
cmlwdCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5k
Q29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRSZWplY3RzUHJv
dGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoV0tCb29s
ZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhhbmRsZXNBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFdLQm9vbGVh
bkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2xlYW5W
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRMb2dEb3du
bG9hZENhbGxiYWNrcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzKFdLQm9v
bGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVzZXJuYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgdXNlcm5hbWUgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKHRvV1RGU3RyaW5nKHVzZXJuYW1lKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS1N0cmluZ1JlZiBwYXNzd29yZCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPiht
ZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHBhc3N3b3JkID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXV0
aGVudGljYXRpb25QYXNzd29yZCh0b1dURlN0cmluZyhwYXNzd29yZCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRCbG9ja0FsbFBsdWdpbnMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIHNob3VsZEJsb2NrID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRCbG9ja0FsbFBsdWdp
bnMoV0tCb29sZWFuR2V0VmFsdWUoc2hvdWxkQmxvY2spKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldEJsb2NrQWxsUGx1Z2lucyhib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0UGx1Z2luU3VwcG9ydGVkTW9kZSIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1vZGUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBtb2RlID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0UGx1
Z2luU3VwcG9ydGVkTW9kZSh0b1dURlN0cmluZyhtb2RlKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5IikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hv
dWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoV0tCb29sZWFuR2V0VmFsdWUodmFs
dWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lk
ZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVs
YXkiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkoV0tCb29s
ZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheShib29sZWFuVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5h
YmxlZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tC
b29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoV0tCb29sZWFuR2V0VmFs
dWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE5hdmln
YXRpb25HZXN0dXJlc0VuYWJsZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRJZ25vcmVzVmlld3BvcnRTY2Fs
ZUxpbWl0cyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxk
RG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREb3dubG9hZFVu
ZGlzcGxheWFibGVNSU1FVHlwZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nl
c3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNz
KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKGJv
b2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0
aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0
aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoV0tC
b29sZWFuR2V0VmFsdWUodmFsdWUpLCB0cnVlKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keSksIHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0
aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NT
aG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSwgZmFs
c2UpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1No
b3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSwgZmFs
c2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSdW5VSVByb2Nlc3NTY3JpcHQiKSkgewotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tE
aWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
Y3JpcHQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsK
LQotICAgICAgICBVSVNjcmlwdEludm9jYXRpb25EYXRhKiBpbnZvY2F0aW9uRGF0YSA9IG5ldyBV
SVNjcmlwdEludm9jYXRpb25EYXRhKCk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBpbnZvY2F0
aW9uRGF0YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRhOwogICAgICAgICBpbnZvY2F0aW9u
RGF0YS0+dGVzdEludm9jYXRpb24gPSB0aGlzOwotICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2Fs
bGJhY2tJRCA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgY2Fs
bGJhY2tJREtleS5nZXQoKSkpKTsKLSAgICAgICAgaW52b2NhdGlvbkRhdGEtPnNjcmlwdFN0cmlu
ZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgc2NyaXB0S2V5LmdldCgpKSk7CisgICAgICAgIGludm9jYXRp
b25EYXRhLT5jYWxsYmFja0lEID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
Q2FsbGJhY2tJRCIpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0U3RyaW5nID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU2NyaXB0Iik7CiAgICAgICAgIG1fcGVu
ZGluZ1VJU2NyaXB0SW52b2NhdGlvbkRhdGEgPSBpbnZvY2F0aW9uRGF0YTsKICAgICAgICAgV0tQ
YWdlQ2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBpbnZvY2F0aW9uRGF0YSwgcnVuVUlTaWRlU2Ny
aXB0QWZ0ZXJVcGRhdGVDYWxsYmFjayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJ1blVJUHJvY2Vz
c1NjcmlwdEltbWVkaWF0ZWx5IikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0KLSAgICAgICAgVUlTY3JpcHRJbnZvY2F0
aW9uRGF0YSogaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSgpOwor
ICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNz
YWdlQm9keSk7CisgICAgICAgIGF1dG8gaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZv
Y2F0aW9uRGF0YTsKICAgICAgICAgaW52b2NhdGlvbkRhdGEtPnRlc3RJbnZvY2F0aW9uID0gdGhp
czsKLSAgICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQgPSAodW5zaWduZWQpV0tVSW50
NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNhbGxiYWNrSURLZXkuZ2V0KCkpKSk7Ci0gICAg
ICAgIGludm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNjcmlw
dEtleS5nZXQoKSkpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJhY2tJRCA9IHVpbnQ2
NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNhbGxiYWNrSUQiKTsKKyAgICAgICAgaW52
b2NhdGlvbkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIlNjcmlwdCIpOwogICAgICAgICBtX3BlbmRpbmdVSVNjcmlwdEludm9jYXRpb25EYXRh
ID0gaW52b2NhdGlvbkRhdGE7CiAgICAgICAgIHJ1blVJU2lkZVNjcmlwdEltbWVkaWF0ZWx5KG51
bGxwdHIsIGludm9jYXRpb25EYXRhKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzkxLDExICs2MDAs
OSBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbnN0YWxsQ3VzdG9tTWVudUFjdGlvbiIpKSB7CiAg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9u
YXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBu
YW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibmFtZSIpKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IG5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRpc21p
c3Nlc0F1dG9tYXRpY2FsbHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IikpOwotICAgICAgICBhdXRvIGRpc21pc3Nlc0F1
dG9tYXRpY2FsbHkgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5
LmdldCgpKSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbnN0YWxsQ3Vz
dG9tTWVudUFjdGlvbih0b1dURlN0cmluZyhuYW1lLmdldCgpKSwgV0tCb29sZWFuR2V0VmFsdWUo
ZGlzbWlzc2VzQXV0b21hdGljYWxseSkpOworICAgICAgICBhdXRvIG5hbWUgPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJuYW1lIik7CisgICAgICAgIGF1dG8gZGlzbWlzc2Vz
QXV0b21hdGljYWxseSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJkaXNt
aXNzZXNBdXRvbWF0aWNhbGx5Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5pbnN0YWxsQ3VzdG9tTWVudUFjdGlvbih0b1dURlN0cmluZyhuYW1lKSwgZGlzbWlzc2VzQXV0
b21hdGljYWxseSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTgwNSw3ICs2MTIsNyBA
QCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRs
ZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBWZWN0b3I8U3RyaW5nPiBhY3Rpb25z
OwogICAgICAgICBhY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyArK2luZGV4KQotICAgICAgICAg
ICAgYWN0aW9ucy5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
QXJyYXlHZXRJdGVtQXRJbmRleChtZXNzYWdlQm9keUFycmF5LCBpbmRleCkpKSk7CisgICAgICAg
ICAgICBhY3Rpb25zLmFwcGVuZCh0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShXS0FycmF5R2V0SXRl
bUF0SW5kZXgobWVzc2FnZUJvZHlBcnJheSwgaW5kZXgpKSkpOwogICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0QWxsb3dlZE1lbnVBY3Rpb25zKGFjdGlvbnMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtODI4LDEwOCArNjM1LDYzIEBAIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3Nh
Z2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0Rl
YnVnTW9kZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0RlYnVnTW9kZShib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlRm9yRGVidWdNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0
cmluZ1JlZiBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZv
ckRlYnVnTW9kZShob3N0TmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NM
YXN0U2VlbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3RO
YW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Rv
dWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0xhc3RTZWVuKGhv
c3ROYW1lLCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1l
Iik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc0xhc3RTZWVuKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9z
dE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZURvbWFp
bjFLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURv
bWFpbjEiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZURvbWFp
bjJLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURv
bWFpbjIiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsYXN0U2VlbktleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxhc3RTZWVuIikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGFkVXNlckludGVyYWN0aW9uS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9zdFJlY2VudFVzZXJJbnRlcmFj
dGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBp
c0dyYW5kZmF0aGVyZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJJc0dyYW5kZmF0aGVyZWQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBp
c1ByZXZhbGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklz
UHJldmFsZW50IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNWZXJ5UHJl
dmFsZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNWZXJ5
UHJldmFsZW50IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZGF0YVJlY29y
ZHNSZW1vdmVkS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGF0
YVJlY29yZHNSZW1vdmVkIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGlt
ZXNBY2Nlc3NlZEZpcnN0UGFydHlJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlRpbWVzQWNjZXNzZWRGaXJzdFBhcnR5SW50ZXJhY3Rpb24iKSk7
Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3RO
YW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lRG9tYWluMSA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgdG9wRnJhbWVEb21haW4xS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIHRvcEZyYW1lRG9tYWluMiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVEb21haW4y
S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGxhc3RTZWVuID0gc3RhdGljX2Nhc3Q8
V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBsYXN0U2VlbktleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaGFkVXNlcklu
dGVyYWN0aW9uID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGFkVXNlckludGVyYWN0aW9uS2V5LmdldCgp
KSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBzdGF0
aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKTsKLSAgICAg
ICAgV0tCb29sZWFuUmVmIGlzR3JhbmRmYXRoZXJlZCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzR3Jh
bmRmYXRoZXJlZEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNQcmV2YWxlbnQg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1ByZXZhbGVudEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgaXNWZXJ5UHJldmFsZW50ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNWZXJ5UHJldmFs
ZW50S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGRhdGFSZWNvcmRzUmVtb3ZlZCA9
IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgZGF0YVJlY29yZHNSZW1vdmVkS2V5LmdldCgpKSk7Ci0KLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3Rp
Yyhob3N0TmFtZSwgdG9wRnJhbWVEb21haW4xLCB0b3BGcmFtZURvbWFpbjIsIFdLRG91YmxlR2V0
VmFsdWUobGFzdFNlZW4pLCBXS0Jvb2xlYW5HZXRWYWx1ZShoYWRVc2VySW50ZXJhY3Rpb24pLCBX
S0RvdWJsZUdldFZhbHVlKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pLCBXS0Jvb2xlYW5HZXRW
YWx1ZShpc0dyYW5kZmF0aGVyZWQpLCBXS0Jvb2xlYW5HZXRWYWx1ZShpc1ByZXZhbGVudCksIFdL
Qm9vbGVhbkdldFZhbHVlKGlzVmVyeVByZXZhbGVudCksIFdLVUludDY0R2V0VmFsdWUoZGF0YVJl
Y29yZHNSZW1vdmVkKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGlj
dGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8g
dG9wRnJhbWVEb21haW4xID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9w
RnJhbWVEb21haW4xIik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVEb21haW4yID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVEb21haW4yIik7CisgICAgICAgIGF1
dG8gbGFzdFNlZW4gPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJMYXN0U2Vl
biIpOworICAgICAgICBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJIYWRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIGlzR3JhbmRm
YXRoZXJlZCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc0dyYW5kZmF0
aGVyZWQiKTsKKyAgICAgICAgYXV0byBpc1ByZXZhbGVudCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJJc1ByZXZhbGVudCIpOworICAgICAgICBhdXRvIGlzVmVyeVByZXZh
bGVudCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc1ZlcnlQcmV2YWxl
bnQiKTsKKyAgICAgICAgYXV0byBkYXRhUmVjb3Jkc1JlbW92ZWQgPSB1aW50NjRWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJEYXRhUmVjb3Jkc1JlbW92ZWQiKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyhob3N0TmFt
ZSwgdG9wRnJhbWVEb21haW4xLCB0b3BGcmFtZURvbWFpbjIsIGxhc3RTZWVuLCBoYWRVc2VySW50
ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQ
cmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhhZFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29r
aWVEYXRhUmVtb3ZhbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBpc1ByZXZhbGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVm
IGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgaGFkVXNlckludGVyYWN0aW9uID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGFk
VXNlckludGVyYWN0aW9uS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNTY2hl
ZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgaXNQcmV2YWxlbnQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1ByZXZhbGVudEtleS5n
ZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzRXhwaXJlZFN0YXRpc3RpYyhob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUoaGFkVXNlcklu
dGVyYWN0aW9uKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVE
YXRhUmVtb3ZhbCksIFdLQm9vbGVhbkdldFZhbHVlKGlzUHJldmFsZW50KSk7CisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaGFkVXNlckludGVyYWN0aW9uID0gYm9vbGVh
blZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhhZFVzZXJJbnRlcmFjdGlvbiIpOworICAg
ICAgICBhdXRvIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgPSBib29sZWFu
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVE
YXRhUmVtb3ZhbCIpOworICAgICAgICBhdXRvIGlzUHJldmFsZW50ID0gYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIklzUHJldmFsZW50Iik7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyhob3N0TmFtZSwg
aGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFs
LCBpc1ByZXZhbGVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhv
c3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBX
S0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwot
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAg
IGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNl
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVz
b3VyY2UoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8g
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
Ikhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUsIHZhbHVlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTQ0LDUxICs3MDYsMzUgQEAgdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdS
ZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0
b3JlTW9kaWZpZWRTaW5jZUhvdXJzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYg
aG91cnMgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnMoV0tVSW50NjRHZXRWYWx1ZShob3VycykpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0NsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModWludDY0VmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFk
ZVJlZmVycmVyIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKFdL
Qm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NGaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5S
ZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTdGF0aXN0aWNzU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkp
OwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXMoaG9zdE5hbWUpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29r
aWVzKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRp
c3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBmaXJzdFBhcnR5VVJMU3RyaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRmlyc3RQYXJ0eVVSTCIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGNuYW1lVVJMU3RyaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ05BTUUiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmlu
Z1JlZiBmaXJzdFBhcnR5VVJMU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmaXJzdFBhcnR5VVJM
U3RyaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBjbmFtZVVSTFN0cmluZ0tleS5nZXQoKSkpOwotICAgICAgICAKKyAg
ICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2Fn
ZUJvZHkpOworICAgICAgICBhdXRvIGZpcnN0UGFydHlVUkxTdHJpbmcgPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJGaXJzdFBhcnR5VVJMIik7CisgICAgICAgIGF1dG8gY25h
bWVVUkxTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJDTkFNRSIp
OwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0
UGFydHlIb3N0Q05BTUVEb21haW4oZmlyc3RQYXJ0eVVSTFN0cmluZywgY25hbWVVUkxTdHJpbmcp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmlu
Z0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbihjbmFtZVVS
TFN0cmluZyk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMTIsOCArNzU4LDcgQEAgdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVz
c2FnZU5hbWUKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkdldEFwcGxpY2F0aW9uTWFuaWZlc3QiKSkgewogI2lmZGVmIF9fQkxPQ0tTX18KICAgICAg
ICAgV0tQYWdlR2V0QXBwbGljYXRpb25NYW5pZmVzdF9iKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIF57Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJEaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0IikpOwotICAgICAgICAgICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgICAg
IHBvc3RQYWdlTWVzc2FnZSgiRGlkR2V0QXBwbGljYXRpb25NYW5pZmVzdCIpOwogICAgICAgICB9
KTsKICNlbHNlCiAgICAgICAgIC8vIEZJWE1FOiBBZGQgQVBJIGZvciBsb2FkaW5nIHRoZSBtYW5p
ZmVzdCBvbiBub24tX19CTE9DS1NfXyBwb3J0cy4KQEAgLTEwMjMsMTYgKzc2OCwxMCBAQCB2b2lk
IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0
cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlv
biIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0
aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5S
ZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVy
YWN0aW9uKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRv
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7Cisg
ICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGhvc3ROYW1lLCB2YWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNDMsOCArNzgyLDcgQEAgdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdS
ZWYgbWVzc2FnZU5hbWUKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0QXBwQm91bmREb21haW5zIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0FycmF5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Fy
cmF5UmVmIG9yaWdpblVSTHMgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBcHBCb3VuZERvbWFpbnMo
b3JpZ2luVVJMcyk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBcHBC
b3VuZERvbWFpbnMoc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4obWVzc2FnZUJvZHkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA1NSw5NCArNzkzLDcwIEBAIFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9t
SW5qZWN0ZWRCCiB7CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJJbml0aWFsaXphdGlvbiIpKSB7CiAgICAgICAgIGF1dG8gc2V0dGluZ3MgPSBjcmVh
dGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiByZXN1bWVUZXN0aW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUmVzdW1lVGVzdGluZyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiByZXN1bWVUZXN0aW5nVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX3N0YXJ0ZWRU
ZXN0aW5nKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oc2V0dGluZ3MuZ2V0KCksIHJl
c3VtZVRlc3RpbmdLZXkuZ2V0KCksIHJlc3VtZVRlc3RpbmdWYWx1ZS5nZXQoKSk7CisgICAgICAg
IHNldFZhbHVlKHNldHRpbmdzLCAiUmVzdW1lVGVzdGluZyIsIG1fc3RhcnRlZFRlc3RpbmcpOwog
ICAgICAgICByZXR1cm4gc2V0dGluZ3M7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXREdW1wUGl4ZWxzIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
Ci0gICAgICAgIG1fZHVtcFBpeGVscyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgbV9kdW1wUGl4ZWxzID0gYm9vbGVh
blZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0RHVtcFBp
eGVscyIpKQogICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wUGl4
ZWxzKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldFdoYXRUb0R1bXAiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBtX3doYXRUb0R1bXAgPSBz
dGF0aWNfY2FzdDxXaGF0VG9EdW1wPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgbV93aGF0VG9EdW1wID0gc3RhdGljX2Nh
c3Q8V2hhdFRvRHVtcD4odWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiR2V0V2hhdFRvRHVtcCIpKQogICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4obV93aGF0VG9EdW1wKSkpOwogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRXYWl0VW50
aWxEb25lIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIHNldFdhaXRVbnRpbERvbmUoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSkpKSk7CisgICAgICAgIHNldFdhaXRVbnRpbERvbmUoYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldFdhaXRVbnRp
bERvbmUiKSkKICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fd2FpdFVu
dGlsRG9uZSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAg
IG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KFdL
Qm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7
CisgICAgICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldER1bXBGcmFtZUxvYWRDYWxsYmFj
a3MiKSkKICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcEZyYW1l
TG9hZENhbGxiYWNrcykpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRDYW5PcGVuV2luZG93cyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBt
X2Nhbk9wZW5XaW5kb3dzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oV0tCb29sZWFuR2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAg
bV9jYW5PcGVuV2luZG93cyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0V2luZG93SXNLZXkiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tCb29sZWFuUmVmIGlzS2V5VmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnNldFdpbmRvd0lzS2V5KFdLQm9vbGVhbkdldFZhbHVlKGlzS2V5VmFsdWUpKTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnNldFdpbmRvd0lz
S2V5KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldFZpZXdTaXplIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5
UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aWR0aCIpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlaWdodEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImhlaWdodCIpKTsKLQotICAgICAgICBXS0RvdWJsZVJlZiB3
aWR0aFdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB3aWR0aEtleS5nZXQoKSkpOwotICAgICAgICBXS0Rv
dWJsZVJlZiBoZWlnaHRXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGVpZ2h0S2V5LmdldCgpKSk7Ci0K
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnJlc2l6
ZVRvKFdLRG91YmxlR2V0VmFsdWUod2lkdGhXSyksIFdLRG91YmxlR2V0VmFsdWUoaGVpZ2h0V0sp
KTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUo
bWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHdpZHRoID0gZG91YmxlVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAid2lkdGgiKTsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBkb3VibGVWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJoZWlnaHQiKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnJlc2l6ZVRvKHdpZHRoLCBoZWlnaHQpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKSkg
ewotICAgICAgICBib29sIGlzQWN0aXZlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlz
R2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzQWN0aXZlKSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIpKQorICAgICAgICBy
ZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldENhY2hlTW9kZWwiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkp
OwotICAgICAgICB1aW50NjRfdCBtb2RlbCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHVpbnQ2NF90IG1vZGVsID0gdWlu
dDY0VmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmVTZXRDYWNo
ZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LndlYnNpdGVEYXRhU3RvcmUoKSwgbW9kZWwpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IklzV29ya1F1ZXVlRW1wdHkiKSkgewotICAgICAgICBib29sIGlzRW1wdHkgPSBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLmlzV29ya1F1ZXVlRW1wdHkoKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShpc0VtcHR5KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNXb3JrUXVldWVF
bXB0eSIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5pc1dvcmtRdWV1ZUVtcHR5KCkp
KTsKIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpIHsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkKKyAg
ICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24o
KSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJDbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIp
KSB7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhckRpZFJlY2VpdmVT
ZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpOwpAQCAtMTE1MCw0MCArODY0
LDM1IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVT
eW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZWN1cmVFdmVudElucHV0SXNFbmFi
bGVkIikpIHsKLSNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
ICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKElzU2VjdXJlRXZlbnRJbnB1dEVuYWJsZWQoKSkpOworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKElzU2VjdXJlRXZlbnRJbnB1
dEVuYWJsZWQoKSkpOwogI2Vsc2UKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBy
ZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShmYWxzZSkpOworICAgICAgICByZXR1cm4g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZmFsc2UpKTsKICNlbmRpZgotICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0Q3VzdG9tVXNlckFnZW50IikpIHsKLSAgICAgICAgV0tTdHJpbmdSZWYg
dXNlckFnZW50ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgV0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIHVzZXJBZ2VudCk7CisgICAgICAgIFdLUGFnZVNldEN1c3Rv
bVVzZXJBZ2VudChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlIikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKFdLQm9vbGVhbkdldFZh
bHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
ICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSkgewotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFs
U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJv
b2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSkgewotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNl
c3Npb25Pbk5leHROYXZpZ2F0aW9uKFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oYm9vbGVh
blZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAot
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW1hZ2VD
b3VudEluR2VuZXJhbFBhc3RlYm9hcmQiKSkgewotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCgp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShjb3VudCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkltYWdlQ291bnRJ
bkdlbmVyYWxQYXN0ZWJvYXJkIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVi
b2FyZCgpKSk7CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJEZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzIikpIHsKICAgICAgICAgV0tXZWJz
aXRlRGF0YVN0b3JlUmVtb3ZlQWxsSW5kZXhlZERhdGFiYXNlcyhUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkud2Vic2l0ZURhdGFTdG9yZSgpLCBudWxscHRyLCB7IH0pOwpAQCAtMTE5MSwxNyAr
OTAwLDEwIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2Vp
dmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRNb2NrTWVkaWFEZXZpY2Ui
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlv
bmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJzaXN0ZW50SURLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQZXJzaXN0ZW50SUQiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkxhYmVsIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdHlwZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlR5
cGUiKSk7Ci0KLSAgICAgICAgYXV0byBwZXJzaXN0ZW50SUQgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBl
cnNpc3RlbnRJREtleS5nZXQoKSkpOwotICAgICAgICBhdXRvIGxhYmVsID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBsYWJlbEtleS5nZXQoKSkpOwotICAgICAgICBhdXRvIHR5cGUgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHR5cGVLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gcGVyc2lzdGVu
dElEID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUGVyc2lzdGVudElEIik7
CisgICAgICAgIGF1dG8gbGFiZWwgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJMYWJlbCIpOworICAgICAgICBhdXRvIHR5cGUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJUeXBlIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5h
ZGRNb2NrTWVkaWFEZXZpY2UocGVyc2lzdGVudElELCBsYWJlbCwgdHlwZSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KQEAgLTEyMTIsOSArOTE0LDcgQEAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21J
bmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlJlbW92ZU1vY2tNZWRpYURldmljZSIpKSB7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIHBlcnNpc3RlbnRJZCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7
Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJlbW92ZU1vY2tNZWRpYURl
dmljZShwZXJzaXN0ZW50SWQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
cmVtb3ZlTW9ja01lZGlhRGV2aWNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTIyNCwxNDIgKzkyNCw4NyBAQCBXS1JldGFp
blB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNz
YWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uIikpIHsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbihX
S1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tDYW1lcmFPcmllbnRh
dGlvbih1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIklzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkIikpIHsKLSAgICAgICAg
Ym9vbCBpc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCA9IFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5pc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgp
OwotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNNb2NrUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQpKTsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyRW5hYmxlZCIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJF
bmFibGVkKCkpKTsKICAgICAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIkhhc0FwcEJvdW5kU2Vzc2lvbiIpKSB7Ci0gICAgICAgIGJvb2wgaGFzQXBw
Qm91bmRTZXNzaW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc0FwcEJvdW5kU2Vz
c2lvbigpOwotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzQXBwQm91
bmRTZXNzaW9uKSk7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiSGFzQXBwQm91bmRTZXNzaW9uIikpCisgICAgICAgIHJldHVybiBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzQXBwQm91
bmRTZXNzaW9uKCkpKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNvbm5lY3RNb2NrR2FtZXBhZCIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBl
SUQoKSk7Ci0KLSAgICAgICAgdWludDY0X3QgaW5kZXggPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBXZWJDb3JlVGVzdFN1
cHBvcnQ6OmNvbm5lY3RNb2NrR2FtZXBhZChpbmRleCk7Ci0gICAgICAgIAorICAgICAgICBXZWJD
b3JlVGVzdFN1cHBvcnQ6OmNvbm5lY3RNb2NrR2FtZXBhZCh1aW50NjRWYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRpc2Nvbm5lY3RNb2NrR2FtZXBhZCIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRH
ZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgdWludDY0X3QgaW5kZXggPSBXS1VJbnQ2NEdldFZhbHVl
KHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBXZWJDb3Jl
VGVzdFN1cHBvcnQ6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZChpbmRleCk7Ci0KKyAgICAgICAgV2Vi
Q29yZVRlc3RTdXBwb3J0OjpkaXNjb25uZWN0TW9ja0dhbWVwYWQodWludDY0VmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2FtZXBhZERldGFp
bHMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSW5kZXhLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSURLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSUQiKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtYXBwaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTWFwcGluZyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGF4aXNDb3VudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4
aXNDb3VudCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1dHRvbkNvdW50
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uQ291bnQi
KSk7Ci0KLSAgICAgICAgV0tVSW50NjRSZWYgZ2FtZXBhZEluZGV4ID0gc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBnYW1lcGFkSW5kZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgZ2FtZXBhZElE
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSURLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgbWFwcGluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbWFwcGluZ0tleS5nZXQoKSkpOwotICAg
ICAgICBXS1VJbnQ2NFJlZiBheGlzQ291bnQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGF4aXNDb3VudEtl
eS5nZXQoKSkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBidXR0b25Db3VudCA9IHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgYnV0dG9uQ291bnRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXZWJDb3JlVGVzdFN1cHBv
cnQ6OnNldE1vY2tHYW1lcGFkRGV0YWlscyhXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRleCks
IHRvV1RGU3RyaW5nKGdhbWVwYWRJRCksIHRvV1RGU3RyaW5nKG1hcHBpbmcpLCBXS1VJbnQ2NEdl
dFZhbHVlKGF4aXNDb3VudCksIFdLVUludDY0R2V0VmFsdWUoYnV0dG9uQ291bnQpKTsKKyAgICAg
ICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJv
ZHkpOworICAgICAgICBhdXRvIGdhbWVwYWRJbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkdhbWVwYWRJbmRleCIpOworICAgICAgICBhdXRvIGdhbWVwYWRJRCA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJRCIpOworICAgICAgICBh
dXRvIG1hcHBpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJNYXBwaW5n
Iik7CisgICAgICAgIGF1dG8gYXhpc0NvdW50ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiQXhpc0NvdW50Iik7CisgICAgICAgIGF1dG8gYnV0dG9uQ291bnQgPSB1aW50NjRW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJCdXR0b25Db3VudCIpOworICAgICAgICBXZWJD
b3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkRGV0YWlscyhnYW1lcGFkSW5kZXgsIHRvV1RG
U3RyaW5nKGdhbWVwYWRJRCksIHRvV1RGU3RyaW5nKG1hcHBpbmcpLCBheGlzQ291bnQsIGJ1dHRv
bkNvdW50KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2FtZXBhZEF4aXNW
YWx1ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4aXNJbmRleEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNJbmRleCIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tVSW50NjRSZWYgZ2FtZXBhZEluZGV4
ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSW5kZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tV
SW50NjRSZWYgYXhpc0luZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBheGlzSW5kZXhLZXkuZ2V0KCkp
KTsKLSAgICAgICAgV0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5
LmdldCgpKSk7Ci0KLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZEF4
aXNWYWx1ZShXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRleCksIFdLVUludDY0R2V0VmFsdWUo
YXhpc0luZGV4KSwgV0tEb3VibGVHZXRWYWx1ZSh2YWx1ZSkpOwotCisgICAgICAgIGF1dG8gbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgYXV0byBnYW1lcGFkSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJHYW1lcGFkSW5kZXgiKTsKKyAgICAgICAgYXV0byBheGlzSW5kZXggPSB1aW50NjRWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJBeGlzSW5kZXgiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9
IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFdl
YkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUoZ2FtZXBhZEluZGV4LCBh
eGlzSW5kZXgsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2Ft
ZXBhZEJ1dHRvblZhbHVlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5
UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZ2FtZXBhZElu
ZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZElu
ZGV4IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uSW5kZXhLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25JbmRleCIpKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tVSW50NjRS
ZWYgZ2FtZXBhZEluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSW5kZXhLZXkuZ2V0KCkp
KTsKLSAgICAgICAgV0tVSW50NjRSZWYgYnV0dG9uSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1
dHRvbkluZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9y
dDo6c2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZShXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRl
eCksIFdLVUludDY0R2V0VmFsdWUoYnV0dG9uSW5kZXgpLCBXS0RvdWJsZUdldFZhbHVlKHZhbHVl
KSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFs
dWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGdhbWVwYWRJbmRleCA9IHVpbnQ2NFZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJbmRleCIpOworICAgICAgICBhdXRvIGJ1
dHRvbkluZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQnV0dG9uSW5k
ZXgiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIlZhbHVlIik7CisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVw
YWRCdXR0b25WYWx1ZShnYW1lcGFkSW5kZXgsIGJ1dHRvbkluZGV4LCB2YWx1ZSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlVzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBvcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJv
cmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBvcmlnaW5LZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
cGFyZW50T3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
cGFyZW50T3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW5XSyA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgcGFyZW50T3JpZ2luS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAg
ICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gb3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJvcmlnaW4iKTsKKyAgICAgICAgYXV0byBwYXJlbnRPcmlnaW5XSyA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgInBhcmVudE9yaWdpbiIpOwogICAgICAgICB1bnNp
Z25lZCBjb3VudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS51c2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKG9yaWdpbldLLCBwYXJlbnRPcmlnaW5XSyk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGNvdW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNEb2luZ01lZGlhQ2FwdHVy
ZSIpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzRG9pbmdNZWRpYUNh
cHR1cmUoKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShjb3VudCkpOwogICAgIH0KKworICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNEb2luZ01lZGlhQ2FwdHVyZSIpKQorICAg
ICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmlzRG9pbmdNZWRpYUNhcHR1cmUoKSkpOwogICAgIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYXJTdGF0aXN0aWNzRGF0YUZvckRv
bWFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tT
dHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGRvbWFpbiA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4oZG9tYWluKTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21h
aW4oc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJEb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGRvbWFpbklES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRG9tYWluSUQiKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGRvbWFpbklEID0gc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBkb21haW5JREtleS5nZXQoKSkpOwotICAgICAgICBib29sIGRvbWFpbklE
RXhpc3RzID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRvZXNTdGF0aXN0aWNzRG9tYWlu
SURFeGlzdEluRGF0YWJhc2UoV0tVSW50NjRHZXRWYWx1ZShkb21haW5JRCkpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRv
bWFpbklERXhpc3RzKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGF1dG8gbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgYXV0byBkb21haW5JRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkRv
bWFpbklEIik7CisgICAgICAgIGJvb2wgZG9tYWluSURFeGlzdHMgPSBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZShkb21haW5J
RCk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkb21haW5JREV4aXN0
cykpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0U3RhdGlzdGljc0VuYWJsZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tC
b29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRW5hYmxl
ZChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc0VuYWJsZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzRXBoZW1lcmFsIikpIHsK
LSAgICAgICAgYm9vbCBpc0VwaGVtZXJhbCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5p
c1N0YXRpc3RpY3NFcGhlbWVyYWwoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBy
ZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0VwaGVtZXJhbCkpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0VwaGVtZXJhbCgpKSk7CiAgICAg
fQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiKSkgewpAQCAtMTM2OCwyMjQgKzEwMTMsMTI4
IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5j
aHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tT
dHJpbmdHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBib29sIGlzUHJldmFs
ZW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1ByZXZhbGVudFJl
c291cmNlKGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICBib29sIGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVu
dCkpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiSXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsK
LSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudCA9IFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
aG9zdE5hbWUpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
aXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkp
OwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdl
dFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1YnJlc291cmNlSG9zdEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1YnJlc291cmNlSG9zdCIpKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lSG9zdEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdCIpKTsKLSAgICAg
ICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIHN1YnJlc291cmNlSG9zdCA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgc3VicmVzb3VyY2VIb3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZy
YW1lSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0S2V5LmdldCgpKSk7Ci0gICAg
ICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1
ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc3VicmVzb3VyY2VIb3N0ID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU3VicmVzb3VyY2VIb3N0Iik7CisgICAgICAgIGF1
dG8gdG9wRnJhbWVIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9w
RnJhbWVIb3N0Iik7CiAgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1
YnJlc291cmNlVW5kZXIoc3VicmVzb3VyY2VIb3N0LCB0b3BGcmFtZUhvc3QpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlz
UmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcikpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJy
ZXNvdXJjZVVuZGVyKSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVV
bmRlciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViRnJhbWVIb3N0
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViRnJhbWVIb3N0
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpOwot
ICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViRnJhbWVIb3N0ID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBzdWJGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJh
bWVIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLQorICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gc3ViRnJhbWVIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiU3ViRnJhbWVIb3N0Iik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVIb3N0
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVIb3N0Iik7CiAg
ICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyID0gVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoc3ViRnJh
bWVIb3N0LCB0b3BGcmFtZUhvc3QpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJl
c3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRl
cikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKSk7CiAgICAgfQogICAgIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0
aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaG9zdFJlZGlyZWN0ZWRGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdFJlZGlyZWN0ZWRGcm9tIikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdFJlZGlyZWN0ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkVG8iKSk7Ci0gICAgICAgIAot
ICAgICAgICBXS1N0cmluZ1JlZiBob3N0UmVkaXJlY3RlZEZyb20gPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGhvc3RSZWRpcmVjdGVkRnJvbUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0
UmVkaXJlY3RlZFRvID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0UmVkaXJlY3RlZFRvS2V5LmdldCgp
KSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rp
b25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdFJlZGlyZWN0ZWRGcm9t
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdFJlZGlyZWN0ZWRGcm9t
Iik7CisgICAgICAgIGF1dG8gaG9zdFJlZGlyZWN0ZWRUbyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIkhvc3RSZWRpcmVjdGVkVG8iKTsKICAgICAgICAgYm9vbCBpc1JlZ2lz
dGVyZWRBc1JlZGlyZWN0aW5nVG8gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0
aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhob3N0UmVkaXJlY3RlZEZyb20sIGhvc3RS
ZWRpcmVjdGVkVG8pOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbykpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NIYXNIYWRV
c2VySW50ZXJhY3Rpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdS
ZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5pc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGhhc0hhZFVzZXJJbnRlcmFjdGlvbikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5pc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0hhZFVzZXJJ
bnRlcmFjdGlvbikpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZSIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBhdXRvIHN1Ykhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdWJIb3N0IikpOwotICAgICAgICBhdXRvIHRvcEhvc3RLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BIb3N0IikpOwotICAgICAgICAKLSAg
ICAgICAgV0tTdHJpbmdSZWYgc3ViSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViSG9zdEtleS5n
ZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0
b3BIb3N0S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1Ykhvc3QgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTdWJIb3N0Iik7CisgICAgICAgIGF1
dG8gdG9wSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEhvc3Qi
KTsKICAgICAgICAgYm9vbCBzdGF0aXN0aWNJbkRhdGFiYXNlT25jZSA9IFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2Uoc3ViSG9zdCwgdG9w
SG9zdCk7CiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzdGF0aXN0aWNJ
bkRhdGFiYXNlT25jZSkpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhv
c3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBX
S0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwot
ICAgICAgICAKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NHcmFuZGZhdGhlcmVkKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChob3N0TmFtZSwgdmFsdWUp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NHcmFuZGZhdGhl
cmVkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0
cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1l
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBp
c0dyYW5kZmF0aGVyZWQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNz
R3JhbmRmYXRoZXJlZChob3N0TmFtZSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4g
cmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhlcmVkKSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVkID0gVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGlzR3JhbmRmYXRoZXJlZCkpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlSVRQRGF0YWJhc2UiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LQotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVz
ZUlUUERhdGFiYXNlKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VJVFBEYXRhYmFzZShib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAg
ICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0
PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZy
YW1lSG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJU
b3BGcmFtZUhvc3ROYW1lIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lSG9zdE5h
bWVLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRv
IHRvcEZyYW1lSG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJU
b3BGcmFtZUhvc3ROYW1lIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGhvc3ROYW1lLCB0b3BGcmFt
ZUhvc3ROYW1lKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGlj
c1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHRvcEZyYW1lSG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJUb3BGcmFtZUhvc3ROYW1lIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYg
aG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1l
SG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBo
b3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7
CisgICAgICAgIGF1dG8gdG9wRnJhbWVIb3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIlRvcEZyYW1lSG9zdE5hbWUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4o
aG9zdE5hbWUsIHRvcEZyYW1lSG9zdE5hbWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKTsKLSAgICAgICAg
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFt
ZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkuZ2V0KCkpKTsKLSAgICAg
ICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVl
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVSZWRp
cmVjdGVkVG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZVJl
ZGlyZWN0ZWRUbyIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhob3N0TmFtZSwgaG9zdE5hbWVSZWRp
cmVjdGVkVG8pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAg
ICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0
PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3RO
YW1lUmVkaXJlY3RlZEZyb21LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJp
bmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20gPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAg
IGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9
IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZEZy
b20iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShob3N0TmFtZSwgaG9zdE5hbWVSZWRpcmVjdGVk
RnJvbSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0VG8iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAg
IFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0Rp
Y3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZVJl
ZGlyZWN0ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhv
c3ROYW1lUmVkaXJlY3RlZFRvIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9z
dE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
U3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFt
ZVJlZGlyZWN0ZWRUb0tleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5h
bWUiKTsKKyAgICAgICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9IHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZFRvIik7CiAgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvKGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9u
YXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9t
IikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1l
UmVkaXJlY3RlZEZyb20gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lUmVkaXJlY3RlZEZyb21L
ZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9
IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAg
IGF1dG8gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKTsKICAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSho
b3N0TmFtZSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25h
cnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIGF1dG8gZnJvbUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJGcm9tSG9zdCIpKTsKLSAgICAgICAgYXV0byB0b0hvc3RLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb0hvc3QiKSk7Ci0KLSAgICAgICAg
V0tTdHJpbmdSZWYgZnJvbUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZyb21Ib3N0S2V5LmdldCgp
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9Ib3N0
S2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZnJvbUhvc3Qg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJGcm9tSG9zdCIpOworICAgICAg
ICBhdXRvIHRvSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvSG9z
dCIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0Ny
b3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oZnJvbUhvc3QsIHRvSG9zdCk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91
YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nh
c3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFdLRG91Ymxl
R2V0VmFsdWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIApAQCAtMTYwMCw5
NyArMTE0OSw2OSBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc05vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1
ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1NldElzUnVubmlu
Z1Rlc3QiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdChXS0Jvb2xlYW5HZXRWYWx1
ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc0lzUnVubmluZ1Rlc3QoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5S
ZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1
ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1No
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3Rp
Y3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoV0tEb3VibGVHZXRWYWx1ZShz
ZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZVZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NH
cmFuZGZhdGhlcmluZ1RpbWUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNv
bmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUo
V0tEb3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZVZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1heFN0YXRpc3Rp
Y3NFbnRyaWVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgZW50cmllcyA9IHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMoV0tVSW50
NjRHZXRWYWx1ZShlbnRyaWVzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModWludDY0VmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0UHJ1bmVFbnRyaWVzRG93
blRvIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJ
bnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgZW50cmllcyA9IHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKFdLVUludDY0R2V0VmFs
dWUoZW50cmllcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdCIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9u
YXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSW5jbHVkZUh0dHBPbmx5Q29va2llcyIpKTsKLSAgICAgICAgCi0g
ICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtl
eS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaW5jbHVkZUh0dHBPbmx5Q29va2llcyA9
IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0gICAgICAgIAotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0
KGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSk7Cisg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaW5jbHVkZUh0dHBPbmx5Q29v
a2llcyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJbmNsdWRlSHR0cE9u
bHlDb29raWVzIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0
aWNzRGVsZXRlQ29va2llc0Zvckhvc3QoaG9zdE5hbWUsIGluY2x1ZGVIdHRwT25seUNvb2tpZXMp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFn
ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJp
bmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9z
dE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGJvb2wgaGFzTG9jYWxT
dG9yYWdlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0hhc0xvY2Fs
U3RvcmFnZShob3N0TmFtZSk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoaGFzTG9jYWxTdG9yYWdlKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJs
ZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NDYWNoZU1heEFn
ZUNhcChXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcChkb3VibGVWYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkhhc1N0YXRpc3RpY3NJc29s
YXRlZFNlc3Npb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYg
aG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAg
ICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBib29s
IGhhc0lzb2xhdGVkU2Vzc2lvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNTdGF0
aXN0aWNzSXNvbGF0ZWRTZXNzaW9uKGhvc3ROYW1lKTsKICAgICAgICAgYXV0byByZXN1bHQgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNJc29sYXRlZFNlc3Npb24pKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIkNsZWFyRE9NQ2FjaGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0
cmluZ1JlZiBvcmlnaW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwot
CisgICAgICAgIGF1dG8gb3JpZ2luID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYXJET01DYWNoZShvcmlnaW4pOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xNzAxLDM1ICsxMjIyLDI0IEBAIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01l
c3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJIYXNET01DYWNoZSIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9k
eSk7Ci0KKyAgICAgICAgYXV0byBvcmlnaW4gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAg
ICAgICAgIGJvb2wgaGFzRE9NQ2FjaGUgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFz
RE9NQ2FjaGUob3JpZ2luKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNET01DYWNoZSkpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzRE9NQ2Fj
aGUpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIkRPTUNhY2hlU2l6ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IG9yaWdpbiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KKyAgICAg
ICAgYXV0byBvcmlnaW4gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGF1dG8g
ZG9tQ2FjaGVTaXplID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRvbUNhY2hlU2l6ZShv
cmlnaW4pOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoZG9tQ2FjaGVTaXplKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRvbUNhY2hlU2l6ZSkpOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBhdXRv
IGNhbkluY3JlYXNlID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihtZXNzYWdlQm9keSkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZShjYW5JbmNyZWFzZSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGJvb2xlYW5W
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkluamVjdFVz
ZXJTY3JpcHQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5pbmplY3RVc2VyU2NyaXB0KHNjcmlwdCk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5pbmplY3RVc2VyU2NyaXB0KHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTczOSwxNSAr
MTI0OSwxMiBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNl
aXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2VydmljZVdvcmtlckZl
dGNoVGltZW91dCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBz
dGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rpbmco
V0tEb3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhkb3VibGVWYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgYXV0byB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpOworICAgICAgICBhdXRvIHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAg
ICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xNzY1LDYwICsxMjcyLDM1
IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5j
aHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRUZXN0S2V5VG9LZXljaGFpbiIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgdGVzdEtleURpY3Rpb25hcnkg
PSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJpdmF0ZUtleUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlByaXZhdGVLZXkiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IHByaXZhdGVLZXlXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KHRlc3RLZXlEaWN0aW9uYXJ5LCBwcml2YXRlS2V5S2V5LmdldCgpKSk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJMYWJlbEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgYXR0ckxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleSh0ZXN0S2V5RGljdGlvbmFyeSwgYXR0ckxhYmVsS2V5LmdldCgpKSk7Ci0K
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFwcGxpY2F0aW9uVGFnS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25UYWciKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIGFwcGxpY2F0aW9uVGFnV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0S2V5RGljdGlvbmFyeSwgYXBwbGlj
YXRpb25UYWdLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIHRlc3RLZXlEaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBwcml2YXRlS2V5V0sg
PSBzdHJpbmdWYWx1ZSh0ZXN0S2V5RGljdGlvbmFyeSwgIlByaXZhdGVLZXkiKTsKKyAgICAgICAg
YXV0byBhdHRyTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3RLZXlEaWN0aW9uYXJ5LCAiQXR0ckxh
YmVsIik7CisgICAgICAgIGF1dG8gYXBwbGljYXRpb25UYWdXSyA9IHN0cmluZ1ZhbHVlKHRlc3RL
ZXlEaWN0aW9uYXJ5LCAiQXBwbGljYXRpb25UYWciKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLmFkZFRlc3RLZXlUb0tleWNoYWluKHRvV1RGU3RyaW5nKHByaXZhdGVLZXlX
SyksIHRvV1RGU3RyaW5nKGF0dHJMYWJlbFdLKSwgdG9XVEZTdHJpbmcoYXBwbGljYXRpb25UYWdX
SykpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFuVXBLZXljaGFpbiIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0
VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgdGVzdERpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhdHRyTGFi
ZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KHRlc3REaWN0aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gYXBwbGljYXRpb25MYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFiZWwiKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5LCBhcHBsaWNhdGlvbkxhYmVsS2V5
LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byB0ZXN0RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1
ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gYXR0ckxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0
ZXN0RGljdGlvbmFyeSwgIkF0dHJMYWJlbCIpOworICAgICAgICBhdXRvIGFwcGxpY2F0aW9uTGFi
ZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXBwbGljYXRpb25MYWJlbCIpOwog
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYW5VcEtleWNoYWluKHRvV1RG
U3RyaW5nKGF0dHJMYWJlbFdLKSwgYXBwbGljYXRpb25MYWJlbFdLID8gdG9XVEZTdHJpbmcoYXBw
bGljYXRpb25MYWJlbFdLKSA6IFN0cmluZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJLZXlFeGlzdHNJbktleWNoYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlv
bmFyeVJlZiB0ZXN0RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdHRyTGFiZWxL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGF0dHJMYWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERpY3Rpb25hcnksIGF0dHJMYWJlbEtl
eS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhcHBsaWNhdGlv
bkxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGlj
YXRpb25MYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXBwbGljYXRpb25MYWJlbFdLID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERp
Y3Rpb25hcnksIGFwcGxpY2F0aW9uTGFiZWxLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIHRl
c3REaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBhdHRyTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXR0ckxhYmVsIik7
CisgICAgICAgIGF1dG8gYXBwbGljYXRpb25MYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERpY3Rp
b25hcnksICJBcHBsaWNhdGlvbkxhYmVsIik7CiAgICAgICAgIGJvb2wga2V5RXhpc3RzSW5LZXlj
aGFpbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5rZXlFeGlzdHNJbktleWNoYWluKHRv
V1RGU3RyaW5nKGF0dHJMYWJlbFdLKSwgdG9XVEZTdHJpbmcoYXBwbGljYXRpb25MYWJlbFdLKSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoa2V5RXhpc3RzSW5LZXljaGFpbikpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoa2V5RXhpc3RzSW5LZXljaGFp
bikpOwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50IikpIHsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxs
YmFja0NhbGxzQ291bnQoKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNlcnZlclRydXN0
RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2VydmVyVHJ1c3RFdmFs
dWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50KCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNB
c3luY2hyb25vdXNseSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5
bmNocm9ub3VzbHkoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNo
cm9ub3VzbHkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIApAQCAtMTg0OCwxNiArMTMzMCwxMyBAQCBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVj
dGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhXS0Jvb2xl
YW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIikpIHsKICAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VSTEdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tVUkxSZWYgdXJsID0gc3RhdGljX2Nhc3Q8V0tVUkxSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZl
cnNpb25VUkxGb3JUZXN0aW5nKHVybCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhzdGF0aWNf
Y2FzdDxXS1VSTFJlZj4obWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCkBAIC0xOTAyLDE3ICsxMzgxLDEwIEBAIHZvaWQgVGVzdEludm9jYXRpb246OnJ1blVJ
U2lkZVNjcmlwdChXS1N0cmluZ1JlZiBzY3JpcHQsIHVuc2lnbmVkIHNjcmlwdENhbGxiYWNrCiAK
IHZvaWQgVGVzdEludm9jYXRpb246OnVpU2NyaXB0RGlkQ29tcGxldGUoY29uc3QgU3RyaW5nJiBy
ZXN1bHQsIHVuc2lnbmVkIHNjcmlwdENhbGxiYWNrSUQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2FsbFVJU2lkZVNjcmlwdENhbGxiYWNrIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc3VsdEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc3VsdCIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IGNhbGxiYWNrSURWYWx1ZSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoc2NyaXB0
Q2FsbGJhY2tJRCkpOwotCi0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgcmVzdWx0S2V5LmdldCgpLCB0b1dLKHJlc3VsdCkuZ2V0KCkpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGNhbGxiYWNrSURLZXkuZ2V0KCksIGNhbGxiYWNr
SURWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKG1lc3Nh
Z2VCb2R5LCAiUmVzdWx0IiwgcmVzdWx0KTsKKyAgICBzZXRWYWx1ZShtZXNzYWdlQm9keSwgIkNh
bGxiYWNrSUQiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2NyaXB0Q2FsbGJhY2tJRCkpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiQ2FsbFVJU2lkZVNjcmlwdENhbGxiYWNrIiwgbWVzc2FnZUJvZHku
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpvdXRwdXRUZXh0KGNvbnN0IFdURjo6
U3RyaW5nJiB0ZXh0KQpAQCAtMTkyMiwxNzQgKzEzOTQsMTQzIEBAIHZvaWQgVGVzdEludm9jYXRp
b246Om91dHB1dFRleHQoY29uc3QgV1RGOjpTdHJpbmcmIHRleHQpCiAKIHZvaWQgVGVzdEludm9j
YXRpb246OmRpZEJlZ2luU3dpcGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxE
aWRCZWdpblN3aXBlQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRCZWdp
blN3aXBlQ2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6d2lsbEVuZFN3aXBl
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsV2lsbEVuZFN3aXBlQ2FsbGJhY2si
KSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAw
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxXaWxsRW5kU3dpcGVDYWxsYmFjayIpOwogfQog
CiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRFbmRTd2lwZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbERpZEVuZFN3aXBlQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmll
dygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IkNhbGxEaWRFbmRTd2lwZUNhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRp
ZFJlbW92ZVN3aXBlU25hcHNob3QoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxE
aWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNh
bGxEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2Nh
dGlvbjo6bm90aWZ5RG93bmxvYWREb25lKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJO
b3RpZnlEb3dubG9hZERvbmUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIk5vdGlmeURvd25sb2Fk
RG9uZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0YXRpc3RpY3NJbk1l
bW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bERpZENsZWFyU3RhdGlzdGljc0luTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpOwotICAgIFdL
UGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJDYWxsRGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50
U3RvcmUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzVGhy
b3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bERpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tQ
YWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vic2l0ZURhdGFSZW1v
dmFsIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFNob3VsZERvd25ncmFkZVJl
ZmVycmVyKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0U2hvdWxkRG93
bmdyYWRlUmVmZXJyZXIiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRTaG91bGRE
b3duZ3JhZGVSZWZlcnJlciIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRTaG91
bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
YWxsRGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpKTsKLSAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiQ2FsbERpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiKTsKIH0K
IAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRGaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2Fs
bERpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIik7CiB9CiAKIHZvaWQgVGVz
dEludm9jYXRpb246OmRpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKSk7Ci0g
ICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2ll
cyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1F
RG9tYWluKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0
eUhvc3RDTkFNRURvbWFpbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNl
dEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIikpOwotICAgIFdLUGFnZVBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIik7CiB9CiAKIHZvaWQgVGVz
dEludm9jYXRpb246OmRpZFJlc2V0U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlKCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50
U3RhdGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZXNldFN0YXRpc3RpY3NUb0Nv
bnNpc3RlbnRTdGF0ZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRCbG9ja0Nv
b2tpZXNGb3JIb3N0KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0Qmxv
Y2tDb29raWVzRm9ySG9zdCIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEJsb2Nr
Q29va2llc0Zvckhvc3QiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U3RhdGlz
dGljc0RlYnVnTW9kZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFN0
YXRpc3RpY3NEZWJ1Z01vZGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRTdGF0
aXN0aWNzRGVidWdNb2RlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFByZXZh
bGVudFJlc291cmNlRm9yRGVidWdNb2RlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
YWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSk7Ci0gICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIkNhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpOwogfQogCiB2
b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRMYXN0U2VlbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbERpZFNldExhc3RTZWVuIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9J
bmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxs
RGlkU2V0TGFzdFNlZW4iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkTWVyZ2VTdGF0
aXN0aWMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRNZXJnZVN0YXRpc3Rp
YyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZE1lcmdlU3RhdGlzdGljIik7CiB9CiAK
IHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMoKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRFeHBpcmVkU3RhdGlzdGljIikpOwotICAgIFdL
UGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0RXhwaXJlZFN0YXRpc3RpYyIpOwogfQogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRTZXRQcmV2YWxlbnRSZXNvdXJjZSgpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2UiKTsKIH0KIAogdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsRGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJDYWxsRGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbigpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAg
ICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbiIpOwogfQog
CiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMo
VmVjdG9yPFN0cmluZz4mJiBkb21haW5zKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNh
bGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiKSk7Ci0gICAgCi0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVB
cnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVB
cnJheUNyZWF0ZSgpKTsKICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpCi0gICAgICAg
IFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGRvbWFpbi51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotICAgIAot
ICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgdG9XSyhkb21haW4pLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZWNl
aXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZv
aWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMoVmVj
dG9yPFN0cmluZz4mJiBkb21haW5zKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxE
aWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zIikpOwotICAgIAotICAgIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZUFycmF5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJy
YXlDcmVhdGUoKSk7CisgICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJy
YXlDcmVhdGUoKSk7CiAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKQotICAgICAgICBX
S0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhkb21haW4udXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKLQotICAgIFdL
UGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgdG9X
Syhkb21haW4pLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZWNlaXZlTG9h
ZGVkU3VicmVzb3VyY2VEb21haW5zIiwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMoKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxs
YmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVk
ZW50aWFsc0NhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEFwcEJv
dW5kRG9tYWlucygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEFwcEJv
dW5kRG9tYWlucyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEFwcEJv
dW5kRG9tYWlucyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcygpCkBAIC0yMTA0LDggKzE1NDUsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpk
dW1wQWRDbGlja0F0dHJpYnV0aW9uKCkKIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6cGVyZm9ybUN1
c3RvbU1lbnVBY3Rpb24oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBlcmZvcm1DdXN0
b21NZW51QWN0aW9uIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJQZXJmb3JtQ3VzdG9tTWVudUFj
dGlvbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbml0aWFsaXplV2FpdFRvRHVtcFdh
dGNoZG9nVGltZXJJZk5lZWRlZCgpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGExNWZjMGEwZTlhZmFlMzQxY2NjZDA2MDM4M2VkMzAxYTcyNDFiNmIuLjYxNzE4YWM2NTU4
ODE3NzhlODNjOTdmYmUxNzgyNzhjODcwZTZiOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0zNTUsNiArMzU1LDggQEAKIAkJODQxQ0MwMEQxODExODVCRjAwNDJFOUI2
IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MUNDMDBFMTgxMTg1QkYw
MDQyRTlCNiAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9w
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOERENzZGQTEwNDg2QUE3NjAw
RDk2QjVFIC8qIFdlYktpdFRlc3RSdW5uZXIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXI7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CisJCTkzMzhEMUJBMjUwQTc5RUIwMEU4MjdGNiAvKiBKU0Jhc2ljcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBKU0Jhc2ljcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU0Jhc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzM4RDFC
RTI1MEJEOUREMDBFODI3RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaWN0aW9uYXJ5RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
NzY0MTc2MjEwRDczNjAwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRv
dy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzcyMTBENzM2MTAwQTNE
QUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0M3ODgxRjI1MEM2OUU0MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZWZ0ZXN0RnVuY3Rpb25zLmNw
cDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvUmVmdGVzdEZ1bmN0aW9ucy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTIsNiArODk0LDcgQEAKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMzc4RDQ0MjIxMzM0NkQwMDAwNkE3NzdCIC8qIGNv
bmZpZy5oICovLAorCQkJCTkzMzhEMUJFMjUwQkQ5REQwMEU4MjdGNiAvKiBEaWN0aW9uYXJ5RnVu
Y3Rpb25zLmggKi8sCiAJCQkJQkM5OUE0ODQxMjA4OTAxQTAwN0U5RjA4IC8qIFN0cmluZ0Z1bmN0
aW9ucy5oICovLAogCQkJCTlCMzZBMjcwMjA5NDUzQTAwMDNFMDY1MSAvKiBXaGF0VG9EdW1wLmgg
Ki8sCiAJCQkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJOb3RpZmlj
YXRpb25Qcm92aWRlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlv
blByb3ZpZGVyLmNwcAppbmRleCA0NTg2NzdmNTA5YjExNzQzOTNhZTRjMzhjYTA5NDU3YzhlODBm
ODRjLi5jZDVmYzY2MjE1YTRiMDM3OTY4MmM3MmIyZWMxZDFmMGI5ODA3M2IyIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcApAQCAt
MTI2LDggKzEyNiw4IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6OmNsb3NlV2ViTm90
aWZpY2F0aW9uKFdLTm90aWZpY2F0aW9uUmVmIG5vdGlmaWNhdGlvCiAKICAgICByZW1vdmVHbG9i
YWxJREZyb21JRE1hcChtX2xvY2FsVG9HbG9iYWxOb3RpZmljYXRpb25JRE1hcCwgaWQpOwogCi0g
ICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHdrSUQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KGlkKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRX
SyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIHdrSUQgPSBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGlkKSk7CisgICAgYXV0byBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlD
cmVhdGUoKSk7CiAgICAgV0tBcnJheUFwcGVuZEl0ZW0oYXJyYXkuZ2V0KCksIHdrSUQuZ2V0KCkp
OwogICAgIFdLTm90aWZpY2F0aW9uTWFuYWdlclByb3ZpZGVyRGlkQ2xvc2VOb3RpZmljYXRpb25z
KG5vdGlmaWNhdGlvbk1hbmFnZXIsIGFycmF5LmdldCgpKTsKIH0KQEAgLTE0NCw3ICsxNDQsNyBA
QCB2b2lkIFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyOjpyZW1vdmVOb3RpZmljYXRpb25NYW5hZ2Vy
KFdLTm90aWZpY2F0aW9uTWFuYWdlclJlZgogICAgIGF1dG8gdG9SZW1vdmUgPSBpdGVyYXRvci0+
dmFsdWU7CiAgICAgV0tSZXRhaW5QdHI8V0tOb3RpZmljYXRpb25NYW5hZ2VyUmVmPiBndWFyZCht
YW5hZ2VyKTsKICAgICBtX293bmVkTm90aWZpY2F0aW9ucy5yZW1vdmUoaXRlcmF0b3IpOwotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxl
QXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlD
cmVhdGUoKSk7CiAgICAgZm9yICh1aW50NjRfdCBub3RpZmljYXRpb25JRCA6IHRvUmVtb3ZlKSB7
CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fb3duaW5nTWFuYWdlci5yZW1vdmUobm90aWZpY2F0
aW9uSUQpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwpAQCAtMTcz
LDcgKzE3Myw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6OnJlc2V0KCkKICAgICBm
b3IgKGF1dG8mIG5vdGlmaWNhdGlvblBhaXIgOiBtX293bmVkTm90aWZpY2F0aW9ucykgewogICAg
ICAgICBpZiAobm90aWZpY2F0aW9uUGFpci52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0g
YWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICAgICAgYXV0byBhcnJheSA9IGFk
b3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgICAgIGZvciAodWludDY0X3Qgbm90
aWZpY2F0aW9uSUQgOiBub3RpZmljYXRpb25QYWlyLnZhbHVlKQogICAgICAgICAgICAgV0tBcnJh
eUFwcGVuZEl0ZW0oYXJyYXkuZ2V0KCksIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90aWZpY2F0
aW9uSUQpKS5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29y
a1F1ZXVlTWFuYWdlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFn
ZXIuY3BwCmluZGV4IDIwZDVhMWFhZGIyOWUzMzJiZTI5YjJiMWY0YzIzNjA5MTliYTBmZjEuLmM5
ZDQ3ZmQ2M2I4NGU0NmU0NjJhNTBmZjRiZTA3YmYzNDY4YWNhNjAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIldvcmtRdWV1ZU1hbmFnZXIuaCIKIAogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgor
I2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSA8V2ViS2l0L1dLUGFnZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2VQcml2
YXRlLmg+CkBAIC03NSw3ICs3Niw3IEBAIHRlbXBsYXRlIDxXb3JrUXVldWVJdGVtOjpUeXBlIHR5
cGU+CiBjbGFzcyBTY3JpcHRJdGVtIDogcHVibGljIFdvcmtRdWV1ZUl0ZW0gewogcHVibGljOgog
ICAgIGV4cGxpY2l0IFNjcmlwdEl0ZW0oY29uc3QgU3RyaW5nJiBzY3JpcHQpCi0gICAgICAgIDog
bV9zY3JpcHQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHQudXRm
OCgpLmRhdGEoKSkpKQorICAgICAgICA6IG1fc2NyaXB0KHRvV0soc2NyaXB0KSkKICAgICB7CiAg
ICAgfQogCkBAIC0xNjEsNyArMTYyLDcgQEAgdm9pZCBXb3JrUXVldWVNYW5hZ2VyOjpxdWV1ZUxv
YWRIVE1MU3RyaW5nKGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJgogICAgIGNs
YXNzIExvYWRIVE1MU3RyaW5nSXRlbSA6IHB1YmxpYyBXb3JrUXVldWVJdGVtIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIExvYWRIVE1MU3RyaW5nSXRlbShjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNv
bnN0IFN0cmluZyYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiB1bnJlYWNoYWJsZVVSTCkKLSAgICAg
ICAgICAgIDogbV9jb250ZW50KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Y29udGVudC51dGY4KCkuZGF0YSgpKSkpCisgICAgICAgICAgICA6IG1fY29udGVudCh0b1dLKGNv
bnRlbnQpKQogICAgICAgICAgICAgLCBtX2Jhc2VVUkwoYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhiYXNlVVJMLnV0ZjgoKS5kYXRhKCkpKSkKICAgICAgICAgICAgICwgbV91bnJl
YWNoYWJsZVVSTChhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHVucmVhY2hhYmxl
VVJMLnV0ZjgoKS5kYXRhKCkpKSkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKaW5kZXggNjczMzhmNGFhODI3M2NmYjY4NzIyOWJm
YmFkM2ZhNGRkYjM3YjRkZi4uMDFjNTMxYTliNmFjZThlODE2OTQ4ZjY3NmNlNjMxZjUyNzk0YjZj
NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNH
LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3Bw
CkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0RnJv
bUNHSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSkKICAgICBzaXplX3Qgcm93Qnl0ZXMgPSAoNCAqIHBp
eGVsc1dpZGUgKyA2MykgJiB+NjM7CiAKICAgICAvLyBDcmVhdGluZyB0aGlzIGJpdG1hcCBpbiB0
aGUgZGV2aWNlIGNvbG9yIHNwYWNlIHNob3VsZCBwcmV2ZW50IGFueSBjb2xvciBjb252ZXJzaW9u
IHdoZW4gdGhlIGltYWdlIG9mIHRoZSB3ZWIgdmlldyBpcyBkcmF3biBpbnRvIGl0LgotICAgIFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFj
ZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29s
b3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENH
Qml0bWFwQ29udGV4dENyZWF0ZSgwLCBwaXhlbHNXaWRlLCBwaXhlbHNIaWdoLCA4LCByb3dCeXRl
cywgY29sb3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtD
R0JpdG1hcEJ5dGVPcmRlcjMySG9zdCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVD
R0NvbnRleHRGcm9tQ0dJbWFnZShDR0ltYWdlUmVmIGltYWdlKQogCiBzdGF0aWMgQ0dDb250ZXh0
UmVmIGNyZWF0ZUNHQ29udGV4dEZyb21JbWFnZShXS0ltYWdlUmVmIHdrSW1hZ2UpCiB7Ci0gICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihXS0ltYWdlQ3JlYXRlQ0dJbWFn
ZSh3a0ltYWdlKSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoV0tJbWFnZUNyZWF0ZUNHSW1h
Z2Uod2tJbWFnZSkpOwogICAgIHJldHVybiBjcmVhdGVDR0NvbnRleHRGcm9tQ0dJbWFnZShpbWFn
ZS5nZXQoKSk7CiB9CiAKQEAgLTEwOSw5ICsxMDksOSBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0
cmluZ0ZvckNvbnRleHQoQ0dDb250ZXh0UmVmIGJpdG1hcENvbnRleHQsIGNoYXIgaGFzaFN0cmlu
ZwogCiBzdGF0aWMgdm9pZCBkdW1wQml0bWFwKENHQ29udGV4dFJlZiBiaXRtYXBDb250ZXh0LCBj
b25zdCBjaGFyKiBjaGVja3N1bSkKIHsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2Ug
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpKTsKLSAg
ICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gaW1hZ2VEYXRhID0gYWRvcHRDRihDRkRhdGFD
cmVhdGVNdXRhYmxlKDAsIDApKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVm
PiBpbWFnZURlc3QgPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGlt
YWdlRGF0YS5nZXQoKSwga1VUVHlwZVBORywgMSwgMCkpOworICAgIGF1dG8gaW1hZ2UgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpKTsKKyAgICBhdXRv
IGltYWdlRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisgICAgYXV0
byBpbWFnZURlc3QgPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGlt
YWdlRGF0YS5nZXQoKSwga1VUVHlwZVBORywgMSwgMCkpOwogICAgIENHSW1hZ2VEZXN0aW5hdGlv
bkFkZEltYWdlKGltYWdlRGVzdC5nZXQoKSwgaW1hZ2UuZ2V0KCksIDApOwogICAgIENHSW1hZ2VE
ZXN0aW5hdGlvbkZpbmFsaXplKGltYWdlRGVzdC5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0gYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2NvY29hL0NyYXNoUmVwb3J0ZXJJbmZvLm1tCmluZGV4IDRjNzlhYjViODVk
NjQxODlhN2UwYTI5NmVlYTkwYzFkODExOGRjM2QuLjQxMGQ5ZmRjYjMxZTJjNmU2Y2E3NjQ5NTYx
NDYwNjM4YzA5MTA1ZWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
Q3Jhc2hSZXBvcnRlckluZm8ubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9D
cmFzaFJlcG9ydGVySW5mby5tbQpAQCAtMzUsMTIgKzM1LDEyIEBAIG5hbWVzcGFjZSBXVFIgewog
CiBzdGF0aWMgU3RyaW5nIHRlc3RQYXRoRnJvbVVSTChXS1VSTFJlZiB1cmwpCiB7Ci0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiBjZlVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgdXJsKSk7CisgICAgYXV0byBjZlVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZV
Ukwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7CiAgICAgaWYgKCFjZlVSTCkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY2hlbWVDRlN0
cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5U2NoZW1lKGNmVVJMLmdldCgpKSk7Ci0gICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBwYXRoQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVBhdGgoY2ZV
UkwuZ2V0KCkpKTsKKyAgICBhdXRvIHNjaGVtZUNGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlT
Y2hlbWUoY2ZVUkwuZ2V0KCkpKTsKKyAgICBhdXRvIHBhdGhDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZV
UkxDb3B5UGF0aChjZlVSTC5nZXQoKSkpOwogCiAgICAgU3RyaW5nIHNjaGVtZVN0cmluZyhzY2hl
bWVDRlN0cmluZy5nZXQoKSk7CiAgICAgU3RyaW5nIHBhdGhTdHJpbmcocGF0aENGU3RyaW5nLmdl
dCgpKTsKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIFN0cmluZyB0ZXN0UGF0aEZyb21VUkwoV0tV
UkxSZWYgdXJsKQogICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1l
U3RyaW5nLCAiaHR0cCIpICYmICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWVT
dHJpbmcsICJodHRwcyIpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGhvc3RDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5SG9zdE5hbWUo
Y2ZVUkwuZ2V0KCkpKTsKKyAgICBhdXRvIGhvc3RDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5
SG9zdE5hbWUoY2ZVUkwuZ2V0KCkpKTsKICAgICBTdHJpbmcgaG9zdFN0cmluZyhob3N0Q0ZTdHJp
bmcuZ2V0KCkpOwogICAgIGlmIChob3N0U3RyaW5nID09ICIxMjcuMC4wLjEiKQogICAgICAgICBy
ZXR1cm4gcGF0aFN0cmluZzsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29j
b2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VGVzdENvbnRyb2xsZXJDb2NvYS5tbQppbmRleCAzNjUzMzdhZGY5OWYwYjljZGQ2YWYwOTdmYzAy
YmU4N2E2NzE2NjU3Li43MTMwMzI2YTNlNjFjZTJiZDBhNzZkZjcyODk4ZDllNGIwMDYzYjA0IDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29j
b2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNv
Y29hLm1tCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1J
bml0aWFsaXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFQKIAogdm9p
ZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KFdLUGFnZUNvbmZpZ3VyYXRp
b25SZWYsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewotICAgIFJldGFpblB0cjxXS1dl
YlZpZXdDb25maWd1cmF0aW9uPiBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbZ2xvYmFs
V2ViVmlld0NvbmZpZ3VyYXRpb24gY29weV0pOworICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsKIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlvbikKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmll
dy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5t
bQppbmRleCA1Yzg2MmU5YjBlYzc3ZDA1ZTA3NzI5ZGNlNjQ3NmY1ODkyMTIzYjM4Li45MTVmNDc2
YzYxNWFlNjEwOTBkOTBjYTc5NzZiZjhmMmM5OWI1NjZiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCkBAIC05MCw3ICs5MCw3
IEBAIElHTk9SRV9XQVJOSU5HU19CRUdJTigiZGVwcmVjYXRlZC1pbXBsZW1lbnRhdGlvbnMiKQog
LSAodm9pZClkcmFnSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGF0OihOU1BvaW50KXZpZXdMb2Nh
dGlvbiBvZmZzZXQ6KE5TU2l6ZSlpbml0aWFsT2Zmc2V0IGV2ZW50OihOU0V2ZW50ICopZXZlbnQg
cGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGJvYXJkIHNvdXJjZTooaWQpc291cmNlT2JqIHNs
aWRlQmFjazooQk9PTClzbGlkZUZsYWcKIElHTk9SRV9XQVJOSU5HU19FTkQKIHsKLSAgICBSZXRh
aW5QdHI8V2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mbz4gZHJhZ2dpbmdJbmZvID0gYWRvcHRO
UyhbW1dlYktpdFRlc3RSdW5uZXJEcmFnZ2luZ0luZm8gYWxsb2NdIGluaXRXaXRoSW1hZ2U6YW5J
bWFnZSBvZmZzZXQ6aW5pdGlhbE9mZnNldCBwYXN0ZWJvYXJkOnBib2FyZCBzb3VyY2U6c291cmNl
T2JqXSk7CisgICAgYXV0byBkcmFnZ2luZ0luZm8gPSBhZG9wdE5TKFtbV2ViS2l0VGVzdFJ1bm5l
ckRyYWdnaW5nSW5mbyBhbGxvY10gaW5pdFdpdGhJbWFnZTphbkltYWdlIG9mZnNldDppbml0aWFs
T2Zmc2V0IHBhc3RlYm9hcmQ6cGJvYXJkIHNvdXJjZTpzb3VyY2VPYmpdKTsKICAgICBbc2VsZiBk
cmFnZ2luZ1VwZGF0ZWQ6ZHJhZ2dpbmdJbmZvLmdldCgpXTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5o
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5o
CmluZGV4IGFiYzBhNTBjOTcwYzFiYjMzZjFmYjEwOTM5MzUyYWY4Y2E3ZTA0MDMuLmNjOTgxMzk0
MjRmMjg4MDY0NDM5ODk4MzQ1YzNlN2Q0ZWE1NTMzNzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmgKQEAgLTMyLDEy
ICszMiwxNyBAQCBPQkpDX0NMQVNTIFRlc3RSdW5uZXJXS1dlYlZpZXc7CiBuYW1lc3BhY2UgV1RS
IHsKIAogY2xhc3MgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EgOiBwdWJsaWMgVUlTY3JpcHRDb250
cm9sbGVyQ29tbW9uIHsKLXB1YmxpYzoKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBVSVNjcmlw
dENvbnRyb2xsZXJDb2NvYShVSVNjcmlwdENvbnRleHQmKTsKKyAgICBUZXN0UnVubmVyV0tXZWJW
aWV3ICp3ZWJWaWV3KCkgY29uc3Q7CisKKyAgICB2b2lkIGRvQXN5bmNUYXNrKEpTVmFsdWVSZWYp
IG92ZXJyaWRlOworCitwcml2YXRlOgogICAgIHZvaWQgc2V0Vmlld1NjYWxlKGRvdWJsZSkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzZXRNaW5pbXVtRWZmZWN0aXZlV2lkdGgoZG91YmxlKSBvdmVycmlk
ZTsKICAgICB2b2lkIGJlY29tZUZpcnN0UmVzcG9uZGVyKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBy
ZXNpZ25GaXJzdFJlc3BvbmRlcigpIG92ZXJyaWRlOwotICAgIHZvaWQgZG9Bc3luY1Rhc2soSlNW
YWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVWaWV3RnJvbVdpbmRvdyhKU1ZhbHVl
UmVmKSBvdmVycmlkZTsKICAgICB2b2lkIGFkZFZpZXdUb1dpbmRvdyhKU1ZhbHVlUmVmKSBvdmVy
cmlkZTsKICAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiwgSlNTdHJpbmdS
ZWYpIG92ZXJyaWRlOwpAQCAtNTksMTEgKzY0LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbnNl
cnRBdHRhY2htZW50Rm9yRmlsZVBhdGgoSlNTdHJpbmdSZWYgZmlsZVBhdGgsIEpTU3RyaW5nUmVm
IGNvbnRlbnRUeXBlLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKSBvdmVycmlkZTsKIAotcHJvdGVjdGVk
OgotICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29udHJvbGxlckNvY29hKFVJU2NyaXB0Q29udGV4dCYp
OwotICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKLQotcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXBsZXRlVGFza0FzeW5jaHJvbm91c2x5QWZ0ZXJBY3Rpdml0eVN0YXRlVXBk
YXRlKHVuc2lnbmVkIGNhbGxiYWNrSUQpOwogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0KaW5kZXggOThiYjc0
YjQxM2I5NTAzZTY5ODgwN2VkYjg2Mjk4ZTM3MGRjZDBmMi4uNTg0Nzk3NmYyMTg1N2Y1M2Y0ODVl
Y2IxZmIxZWI5MTE3MjFhNTZkYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9j
b2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tCkBAIC0xMzUsMjIgKzEzNSwxOCBA
QCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjphZGRWaWV3VG9XaW5kb3coSlNWYWx1ZVJl
ZiBjYWxsYmFjaykKIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6b3ZlcnJpZGVQcmVm
ZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2VSZWYsIEpTU3RyaW5nUmVmIHZhbHVlUmVmKQog
ewotICAgIFdLUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gd2ViVmlldygpLmNvbmZpZ3VyYXRp
b24ucHJlZmVyZW5jZXM7Ci0KLSAgICBTdHJpbmcgcHJlZmVyZW5jZSA9IHRvV1RGU3RyaW5nKHRv
V0socHJlZmVyZW5jZVJlZikpOwotICAgIFN0cmluZyB2YWx1ZSA9IHRvV1RGU3RyaW5nKHRvV0so
dmFsdWVSZWYpKTsKLSAgICBpZiAocHJlZmVyZW5jZSA9PSAiV2ViS2l0TWluaW11bUZvbnRTaXpl
IikKLSAgICAgICAgcHJlZmVyZW5jZXMubWluaW11bUZvbnRTaXplID0gdmFsdWUudG9Eb3VibGUo
KTsKKyAgICBpZiAodG9XVEZTdHJpbmcocHJlZmVyZW5jZVJlZikgPT0gIldlYktpdE1pbmltdW1G
b250U2l6ZSIpCisgICAgICAgIHdlYlZpZXcoKS5jb25maWd1cmF0aW9uLnByZWZlcmVuY2VzLm1p
bmltdW1Gb250U2l6ZSA9IHRvV1RGU3RyaW5nKHZhbHVlUmVmKS50b0RvdWJsZSgpOwogfQogCiB2
b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpmaW5kU3RyaW5nKEpTU3RyaW5nUmVmIHN0cmlu
ZywgdW5zaWduZWQgbG9uZyBvcHRpb25zLCB1bnNpZ25lZCBsb25nIG1heENvdW50KQogewotICAg
IFt3ZWJWaWV3KCkgX2ZpbmRTdHJpbmc6dG9XVEZTdHJpbmcodG9XSyhzdHJpbmcpKSBvcHRpb25z
Om9wdGlvbnMgbWF4Q291bnQ6bWF4Q291bnRdOworICAgIFt3ZWJWaWV3KCkgX2ZpbmRTdHJpbmc6
dG9XVEZTdHJpbmcoc3RyaW5nKSBvcHRpb25zOm9wdGlvbnMgbWF4Q291bnQ6bWF4Q291bnRdOwog
fQogCiBKU09iamVjdFJlZiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6Y29udGVudHNPZlVzZXJJ
bnRlcmZhY2VJdGVtKEpTU3RyaW5nUmVmIGludGVyZmFjZUl0ZW0pIGNvbnN0CiB7Ci0gICAgTlNE
aWN0aW9uYXJ5ICpjb250ZW50RGljdGlvbmFyeSA9IFt3ZWJWaWV3KCkgX2NvbnRlbnRzT2ZVc2Vy
SW50ZXJmYWNlSXRlbTp0b1dURlN0cmluZyh0b1dLKGludGVyZmFjZUl0ZW0pKV07CisgICAgTlNE
aWN0aW9uYXJ5ICpjb250ZW50RGljdGlvbmFyeSA9IFt3ZWJWaWV3KCkgX2NvbnRlbnRzT2ZVc2Vy
SW50ZXJmYWNlSXRlbTp0b1dURlN0cmluZyhpbnRlcmZhY2VJdGVtKV07CiAgICAgcmV0dXJuIEpT
VmFsdWVUb09iamVjdChtX2NvbnRleHQtPmpzQ29udGV4dCgpLCBbSlNWYWx1ZSB2YWx1ZVdpdGhP
YmplY3Q6Y29udGVudERpY3Rpb25hcnkgaW5Db250ZXh0OltKU0NvbnRleHQgY29udGV4dFdpdGhK
U0dsb2JhbENvbnRleHRSZWY6bV9jb250ZXh0LT5qc0NvbnRleHQoKV1dLkpTVmFsdWVSZWYsIG51
bGxwdHIpOwogfQogCkBAIC0yMTksMTIgKzIxNSwxMCBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxl
ckNvY29hOjpwYXN0ZSgpCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjppbnNlcnRBdHRh
Y2htZW50Rm9yRmlsZVBhdGgoSlNTdHJpbmdSZWYgZmlsZVBhdGgsIEpTU3RyaW5nUmVmIGNvbnRl
bnRUeXBlLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQg
PSBtX2NvbnRleHQtPnByZXBhcmVGb3JBc3luY1Rhc2soY2FsbGJhY2ssIENhbGxiYWNrVHlwZU5v
blBlcnNpc3RlbnQpOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB0ZXN0VVJMID0gYWRvcHRD
RihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuY3VycmVudFRlc3RVUkwoKSkpOwotICAgIFJldGFpblB0cjxOU1VSTD4gYXR0YWNo
bWVudFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6dG9XVEZTdHJpbmcodG9XSyhmaWxlUGF0
aCkpIHJlbGF0aXZlVG9VUkw6KF9fYnJpZGdlIE5TVVJMICopdGVzdFVSTC5nZXQoKV07Ci0KLSAg
ICBhdXRvIGZpbGVXcmFwcGVyID0gYWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRX
aXRoVVJMOmF0dGFjaG1lbnRVUkwuZ2V0KCkgb3B0aW9uczowIGVycm9yOm5pbF0pOwotICAgIFt3
ZWJWaWV3KCkgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIuZ2V0
KCkgY29udGVudFR5cGU6dG9XVEZTdHJpbmcodG9XSyhjb250ZW50VHlwZSkpIGNvbXBsZXRpb246
XihCT09MIHN1Y2Nlc3MpIHsKKyAgICBhdXRvIHRlc3RVUkwgPSBhZG9wdENGKFdLVVJMQ29weUNG
VVJMKGtDRkFsbG9jYXRvckRlZmF1bHQsIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jdXJy
ZW50VGVzdFVSTCgpKSk7CisgICAgYXV0byBhdHRhY2htZW50VVJMID0gW05TVVJMIGZpbGVVUkxX
aXRoUGF0aDp0b1dURlN0cmluZyhmaWxlUGF0aCkgcmVsYXRpdmVUb1VSTDooX19icmlkZ2UgTlNV
UkwgKil0ZXN0VVJMLmdldCgpXTsKKyAgICBhdXRvIGZpbGVXcmFwcGVyID0gYWRvcHROUyhbW05T
RmlsZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRoVVJMOmF0dGFjaG1lbnRVUkwgb3B0aW9uczowIGVy
cm9yOm5pbF0pOworICAgIFt3ZWJWaWV3KCkgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBw
ZXI6ZmlsZVdyYXBwZXIuZ2V0KCkgY29udGVudFR5cGU6dG9XVEZTdHJpbmcoY29udGVudFR5cGUp
IGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKICAgICAgICAgaWYgKCFtX2NvbnRleHQpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fY29udGV4dC0+YXN5bmNUYXNrQ29tcGxldGUo
Y2FsbGJhY2tJRCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURF
dmVudEdlbmVyYXRvci5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2Vu
ZXJhdG9yLm1tCmluZGV4IGUyOTgzOGJhODI4ZmI0YmQ5MDg1N2FiNmJlZjJmZDQ2NTlmYjQyMTgu
LjBjNDQ2MzM1YjI0MGQ2YTdlMDY3NDE0Y2E5YzMwNDBhYTZlMzU0NjMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tCkBAIC0xODksNyArMTg5
LDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXQKIAogLSAodm9pZClfc2VuZElPSElES2V5Ym9hcmRF
dmVudDoodWludDY0X3QpdGltZXN0YW1wIHVzYWdlOih1aW50MzJfdCl1c2FnZSBpc0tleURvd246
KGJvb2wpaXNLZXlEb3duCiB7Ci0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVm
ID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlS2V5Ym9hcmRFdmVudChrQ0ZBbGxvY2F0b3JEZWZh
dWx0LAorICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZlbnRDcmVhdGVLZXlib2Fy
ZEV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsCiAgICAgICAgIHRpbWVzdGFtcCwKICAgICAgICAg
a0hJRFBhZ2VfS2V5Ym9hcmRPcktleXBhZCwKICAgICAgICAgdXNhZ2UsCkBAIC0zNjEsNyArMzYx
LDcgQEAgLSAoSU9ISURFdmVudFJlZilfY3JlYXRlSU9ISURFdmVudFR5cGU6KEhhbmRFdmVudFR5
cGUpZXZlbnRUeXBlCiAgICAgICAgIGV2ZW50TWFzayB8PSBrSU9ISUREaWdpdGl6ZXJFdmVudElk
ZW50aXR5OwogCiAgICAgdWludDY0X3QgbWFjaFRpbWUgPSBtYWNoX2Fic29sdXRlX3RpbWUoKTsK
LSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZl
bnRDcmVhdGVEaWdpdGl6ZXJFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtYWNoVGltZSwKKyAg
ICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlRGlnaXRpemVyRXZlbnQo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgbWFjaFRpbWUsCiAgICAgICAgIGtJT0hJRERpZ2l0aXplclRy
YW5zZHVjZXJUeXBlSGFuZCwKICAgICAgICAgMCwKICAgICAgICAgMCwKQEAgLTQ1Myw3ICs0NTMs
NyBAQCAtIChCT09MKV9zZW5kSElERXZlbnQ6KElPSElERXZlbnRSZWYpZXZlbnRSZWYKICAgICAg
ICAgX2lvU3lzdGVtQ2xpZW50ID0gSU9ISURFdmVudFN5c3RlbUNsaWVudENyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0KTsKIAogICAgIGlmIChldmVudFJlZikgewotICAgICAgICBSZXRhaW5QdHI8
SU9ISURFdmVudFJlZj4gc3Ryb25nRXZlbnQgPSBldmVudFJlZjsKKyAgICAgICAgYXV0byBzdHJv
bmdFdmVudCA9IHJldGFpblB0cihldmVudFJlZik7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CiAgICAgICAgICAgICB1aW50MzJfdCBjb250ZXh0
SUQgPSBbVUlBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl0ua2V5V2luZG93Ll9jb250ZXh0
SWQ7CiAgICAgICAgICAgICBBU1NFUlQoY29udGV4dElEKTsKQEAgLTUxMiw3ICs1MTIsNyBAQCAt
ICh2b2lkKV91cGRhdGVUb3VjaFBvaW50czooQ0dQb2ludCopcG9pbnRzIGNvdW50OihOU1VJbnRl
Z2VyKWNvdW50CiAgICAgICAgIFtbR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHNoYXJlZEdl
bmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvd10gdXBkYXRlRGVidWdJbmRpY2F0b3JGb3JUb3VjaDpp
IHdpdGhQb2ludEluV2luZG93Q29vcmRpbmF0ZXM6cG9pbnRzW2ldIGlzVG91Y2hpbmc6WUVTXTsK
ICAgICB9CiAgICAgCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRv
cHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6aGFuZEV2ZW50VHlwZV0pOworICAgIGF1
dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpoYW5kRXZl
bnRUeXBlXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAK
QEAgLTUyOSw3ICs1MjksNyBAQCAtICh2b2lkKXRvdWNoRG93bkF0UG9pbnRzOihDR1BvaW50Kils
b2NhdGlvbnMgdG91Y2hDb3VudDooTlNVSW50ZWdlcil0b3VjaENvdW50CiAgICAgICAgIFtbR2Vu
ZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRv
d10gdXBkYXRlRGVidWdJbmRpY2F0b3JGb3JUb3VjaDppbmRleCB3aXRoUG9pbnRJbldpbmRvd0Nv
b3JkaW5hdGVzOmxvY2F0aW9uc1tpbmRleF0gaXNUb3VjaGluZzpZRVNdOwogICAgIH0KIAotICAg
IFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0
ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudFRvdWNoZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0g
YWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6SGFuZEV2ZW50VG91Y2hlZF0pOwog
ICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC01NjMsNyAr
NTYzLDcgQEAgLSAodm9pZClsaWZ0VXBBdFBvaW50czooQ0dQb2ludCopbG9jYXRpb25zIHRvdWNo
Q291bnQ6KE5TVUludGVnZXIpdG91Y2hDb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRvdWNoZXNE
ZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0ZURlYnVn
SW5kaWNhdG9yRm9yVG91Y2g6aW5kZXggd2l0aFBvaW50SW5XaW5kb3dDb29yZGluYXRlczpDR1Bv
aW50WmVybyBpc1RvdWNoaW5nOk5PXTsKICAgICB9CiAgICAgCi0gICAgUmV0YWluUHRyPElPSElE
RXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6
SGFuZEV2ZW50TGlmdGVkXSk7CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2Ny
ZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudExpZnRlZF0pOwogICAgIFtzZWxmIF9zZW5kSElE
RXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogICAgIAogICAgIF9hY3RpdmVQb2ludENvdW50ID0gbmV3
UG9pbnRDb3VudDsKQEAgLTY0MSw3ICs2NDEsNyBAQCAtICh2b2lkKXN0eWx1c0Rvd25BdFBvaW50
OihDR1BvaW50KWxvY2F0aW9uIGF6aW11dGhBbmdsZTooQ0dGbG9hdClhemltdXRoQW5nbGUgYQog
ICAgIF9hY3RpdmVQb2ludHNbMF0uYXppbXV0aEFuZ2xlID0gTV9QSSAqIDIgLSBhemltdXRoQW5n
bGU7CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRpdHVkZUFuZ2xlID0gTV9QSV8yIC0gYWx0aXR1
ZGVBbmdsZTsKIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0
Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50VG91Y2hlZF0pOworICAg
IGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpTdHls
dXNFdmVudFRvdWNoZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgp
XTsKIH0KIApAQCAtNjU1LDcgKzY1NSw3IEBAIC0gKHZvaWQpc3R5bHVzTW92ZVRvUG9pbnQ6KENH
UG9pbnQpbG9jYXRpb24gYXppbXV0aEFuZ2xlOihDR0Zsb2F0KWF6aW11dGhBbmdsZSBhCiAgICAg
X2FjdGl2ZVBvaW50c1swXS5hemltdXRoQW5nbGUgPSBNX1BJICogMiAtIGF6aW11dGhBbmdsZTsK
ICAgICBfYWN0aXZlUG9pbnRzWzBdLmFsdGl0dWRlQW5nbGUgPSBNX1BJXzIgLSBhbHRpdHVkZUFu
Z2xlOwogCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihb
c2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRNb3ZlZF0pOworICAgIGF1dG8g
ZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVu
dE1vdmVkXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAK
QEAgLTY2OCw3ICs2NjgsNyBAQCAtICh2b2lkKXN0eWx1c1VwQXRQb2ludDooQ0dQb2ludClsb2Nh
dGlvbgogICAgIF9hY3RpdmVQb2ludHNbMF0uYXppbXV0aEFuZ2xlID0gMDsKICAgICBfYWN0aXZl
UG9pbnRzWzBdLmFsdGl0dWRlQW5nbGUgPSAwOwogCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRS
ZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVz
RXZlbnRMaWZ0ZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRl
SU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRMaWZ0ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2
ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApAQCAtMTAyMSw3ICsxMDIxLDcgQEAgLSAodm9pZClk
aXNwYXRjaEV2ZW50V2l0aEluZm86KE5TRGljdGlvbmFyeSAqKWV2ZW50SW5mbwogewogICAgIEFT
U0VSVChbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSk7CiAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVu
dFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50V2l0aEluZm86
ZXZlbnRJbmZvXSk7CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlP
SElERXZlbnRXaXRoSW5mbzpldmVudEluZm9dKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2
ZW50UmVmLmdldCgpXTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9V
SVNjcmlwdENvbnRyb2xsZXJJT1MuaAppbmRleCAyOGQwNjBjNmRmYzQ3MWE5MDU0OTA2ODM5NWMz
ZDQwZjZhOWMwOTZiLi44NTQ2NDQ3NjZkOGJjNWE4MTVkMjY3ZTlhN2JhNGEyMDVkNmU2MTIyIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJ
T1MuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJ
T1MuaApAQCAtMjUsMTEgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKwogI2ltcG9ydCAiVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaCIKICNpbXBv
cnQgPHd0Zi9CbG9ja1B0ci5oPgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UmVjdDsKQEAgLTM3
LDEzICszNywxNCBAQCBjbGFzcyBGbG9hdFJlY3Q7CiAKIG5hbWVzcGFjZSBXVFIgewogCi1jbGFz
cyBVSVNjcmlwdENvbnRyb2xsZXJJT1MgOiBwdWJsaWMgVUlTY3JpcHRDb250cm9sbGVyQ29jb2Eg
eworY2xhc3MgVUlTY3JpcHRDb250cm9sbGVySU9TIGZpbmFsIDogcHVibGljIFVJU2NyaXB0Q29u
dHJvbGxlckNvY29hIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBVSVNjcmlwdENvbnRyb2xsZXJJ
T1MoVUlTY3JpcHRDb250ZXh0JiBjb250ZXh0KQogICAgICAgICA6IFVJU2NyaXB0Q29udHJvbGxl
ckNvY29hKGNvbnRleHQpCiAgICAgewogICAgIH0KIAorcHJpdmF0ZToKICAgICB2b2lkIHdhaXRG
b3JPdXRzdGFuZGluZ0NhbGxiYWNrcygpIG92ZXJyaWRlOwogICAgIHZvaWQgZG9BZnRlclByZXNl
bnRhdGlvblVwZGF0ZShKU1ZhbHVlUmVmKSBvdmVycmlkZTsKICAgICB2b2lkIGRvQWZ0ZXJOZXh0
U3RhYmxlUHJlc2VudGF0aW9uVXBkYXRlKEpTVmFsdWVSZWYpIG92ZXJyaWRlOwpAQCAtMTU2LDcg
KzE1Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERpZEVuZFNjcm9sbGluZ0NhbGxiYWNrKEpT
VmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJBbGxDYWxsYmFja3MoKSBvdmVycmlk
ZTsKIAotcHJpdmF0ZToKICAgICB2b2lkIHdhaXRGb3JNb2RhbFRyYW5zaXRpb25Ub0ZpbmlzaCgp
IGNvbnN0OwogICAgIHZvaWQgd2FpdEZvclNpbmdsZVRhcFRvUmVzZXQoKSBjb25zdDsKICAgICBX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdEZvck1lbnVBY3Rpb24oQ0ZTdHJpbmdSZWYpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVy
SU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9T
Lm1tCmluZGV4IDEzMGM0OTdjMjQwZDgzOGJiNGFmZmZkMjA3MzE0MTc1YTgzZGJiMjYuLjdhZjZl
Y2Y1MDk4NWYxNWVmNDdjMTkxOGI2NWEyZWJkYTZkMjZhMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTY4LDI0ICs2
OCwxNCBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICp0b05TRGljdGlvbmFyeShDR1JlY3QgcmVjdCkK
ICAgICB9OwogfQogCi1zdGF0aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGFycmF5KQotewotICAgIGF1dG8gbGVuZ3RoU3RyaW5nID0gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBpZiAoYXV0
byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgYXJyYXksIGxlbmd0
aFN0cmluZy5nZXQoKSwgbnVsbHB0cikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZU1vZGlmaWVyQXJy
YXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKICAgICBp
ZiAoIWFycmF5VmFsdWUpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBUaGUgdmFsdWUg
bWF5IGVpdGhlciBiZSBhIHN0cmluZyB3aXRoIGEgc2luZ2xlIG1vZGlmaWVyIG9yIGFuIGFycmF5
IG9mIG1vZGlmaWVycy4KLSAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFycmF5VmFs
dWUpKSB7Ci0gICAgICAgIGF1dG8gc3RyaW5nID0gdG9XVEZTdHJpbmcodG9XSyhhZG9wdChKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFycmF5VmFsdWUsIG51bGxwdHIpKSkpOwotICAgICAg
ICByZXR1cm4geyBzdHJpbmcgfTsKLSAgICB9CisgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250
ZXh0LCBhcnJheVZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHsgdG9XVEZTdHJpbmcoY29udGV4dCwg
YXJyYXlWYWx1ZSkgfTsKIAogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGFycmF5
VmFsdWUpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtOTMsMTYgKzgzLDggQEAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IHBhcnNlTW9kaWZpZXJBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlZiBhcnJheVYKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0
LCBhcnJheSk7CiAgICAgVmVjdG9yPFN0cmluZz4gbW9kaWZpZXJzOwogICAgIG1vZGlmaWVycy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0
cjsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIGFycmF5LCBpLCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsICZleGNlcHRpb24pKTsKLSAgICAgICAgaWYg
KGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtb2RpZmllcnMuYXBw
ZW5kKHRvV1RGU3RyaW5nKHRvV0soc3RyaW5nLmdldCgpKSkpOwotICAgIH0KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIG1vZGlmaWVycy5hcHBlbmQo
dG9XVEZTdHJpbmcoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
YXJyYXksIGksIG51bGxwdHIpKSk7CiAgICAgcmV0dXJuIG1vZGlmaWVyczsKIH0KIApAQCAtNTE0
LDEwICs0OTYsOSBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6dHlwZUNoYXJhY3RlclVz
aW5nSGFyZHdhcmVLZXlib2FyZChKU1N0cmluZ1JlZiBjaGFyYQogICAgIHVuc2lnbmVkIGNhbGxi
YWNrSUQgPSBtX2NvbnRleHQtPnByZXBhcmVGb3JBc3luY1Rhc2soY2FsbGJhY2ssIENhbGxiYWNr
VHlwZU5vblBlcnNpc3RlbnQpOwogCiAgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSBrZXlib2FyZCBp
cyBhbHJlYWR5IHNob3duLgotICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRH
ZW5lcmF0b3JdIGtleVByZXNzOnRvV1RGU3RyaW5nKHRvV0soY2hhcmFjdGVyKSkgY29tcGxldGlv
bkJsb2NrOm1ha2VCbG9ja1B0cihbdGhpcywgc3Ryb25nVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBj
YWxsYmFja0lEXSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX2NvbnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNrSUQpOworICAg
IFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVByZXNzOnRv
V1RGU3RyaW5nKGNoYXJhY3RlcikgY29tcGxldGlvbkJsb2NrOm1ha2VCbG9ja1B0cihbc3Ryb25n
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFja0lEXSB7CisgICAgICAgIGlmIChzdHJvbmdU
aGlzLT5tX2NvbnRleHQpCisgICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2NvbnRleHQtPmFzeW5j
VGFza0NvbXBsZXRlKGNhbGxiYWNrSUQpOwogICAgIH0pLmdldCgpXTsKIH0KIApAQCAtNTM0LDcg
KzUxNSw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjpyYXdLZXlEb3duKEpTU3RyaW5n
UmVmIGtleSkKIHsKICAgICAvLyBLZXkgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSBVbmljb2RlIGNv
ZGUgcG9pbnQgb3IgdGhlIG5hbWUgb2YgYSBzcGVjaWFsIGtleSAoZS5nLiAiZG93bkFycm93Iiku
CiAgICAgLy8gSElERXZlbnRHZW5lcmF0b3Iga25vd3MgaG93IHRvIG1hcCB0aGVzZSBzcGVjaWFs
IGtleXMgdG8gdGhlIGFwcHJvcHJpYXRlIGtleWNvZGUuCi0gICAgW1tISURFdmVudEdlbmVyYXRv
ciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0ga2V5RG93bjp0b1dURlN0cmluZyh0b1dLKGtleSkp
XTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlE
b3duOnRvV1RGU3RyaW5nKGtleSldOwogICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElE
RXZlbnRHZW5lcmF0b3JdIHNlbmRNYXJrZXJISURFdmVudFdpdGhDb21wbGV0aW9uQmxvY2s6Xnsg
LyogRG8gbm90aGluZyAqLyB9XTsKIH0KIApAQCAtNTQyLDcgKzUyMyw3IEBAIHZvaWQgVUlTY3Jp
cHRDb250cm9sbGVySU9TOjpyYXdLZXlVcChKU1N0cmluZ1JlZiBrZXkpCiB7CiAgICAgLy8gS2V5
IGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50IG9yIHRoZSBuYW1lIG9m
IGEgc3BlY2lhbCBrZXkgKGUuZy4gImRvd25BcnJvdyIpLgogICAgIC8vIEhJREV2ZW50R2VuZXJh
dG9yIGtub3dzIGhvdyB0byBtYXAgdGhlc2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0
ZSBrZXljb2RlLgotICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0
b3JdIGtleVVwOnRvV1RGU3RyaW5nKHRvV0soa2V5KSldOworICAgIFtbSElERXZlbnRHZW5lcmF0
b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVVwOnRvV1RGU3RyaW5nKGtleSldOwogICAg
IFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIHNlbmRNYXJrZXJI
SURFdmVudFdpdGhDb21wbGV0aW9uQmxvY2s6XnsgLyogRG8gbm90aGluZyAqLyB9XTsKIH0KIApA
QCAtNTUwLDcgKzUzMSw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjprZXlEb3duKEpT
U3RyaW5nUmVmIGNoYXJhY3RlciwgSlNWYWx1ZVJlZiBtb2RpZmllckFyCiB7CiAgICAgLy8gQ2hh
cmFjdGVyIGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50IG9yIHRoZSBu
YW1lIG9mIGEgc3BlY2lhbCBrZXkgKGUuZy4gImRvd25BcnJvdyIpLgogICAgIC8vIEhJREV2ZW50
R2VuZXJhdG9yIGtub3dzIGhvdyB0byBtYXAgdGhlc2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBhcHBy
b3ByaWF0ZSBrZXljb2RlLgotICAgIFN0cmluZyBpbnB1dFN0cmluZyA9IHRvV1RGU3RyaW5nKHRv
V0soY2hhcmFjdGVyKSk7CisgICAgYXV0byBpbnB1dFN0cmluZyA9IHRvV1RGU3RyaW5nKGNoYXJh
Y3Rlcik7CiAgICAgYXV0byBtb2RpZmllckZsYWdzID0gcGFyc2VNb2RpZmllckFycmF5KG1fY29u
dGV4dC0+anNDb250ZXh0KCksIG1vZGlmaWVyQXJyYXkpOwogCiAgICAgZm9yIChhdXRvJiBtb2Rp
ZmllckZsYWcgOiBtb2RpZmllckZsYWdzKQpAQCAtNzI3LDcgKzcwOCw3IEBAIHZvaWQgVUlTY3Jp
cHRDb250cm9sbGVySU9TOjphcHBseUF1dG9jb3JyZWN0aW9uKEpTU3RyaW5nUmVmIG5ld1N0cmlu
ZywgSlNTdHJpbmdSCiAgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG1fY29udGV4dC0+cHJlcGFy
ZUZvckFzeW5jVGFzayhjYWxsYmFjaywgQ2FsbGJhY2tUeXBlTm9uUGVyc2lzdGVudCk7CiAKICAg
ICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3ID0gdGhpcy0+d2ViVmlldygpOwotICAgIFt3
ZWJWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246dG9XVEZTdHJpbmcodG9XSyhuZXdTdHJpbmcpKSB0
b1N0cmluZzp0b1dURlN0cmluZyh0b1dLKG9sZFN0cmluZykpIHdpdGhDb21wbGV0aW9uSGFuZGxl
cjptYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJh
Y2tJRF0geworICAgIFt3ZWJWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246dG9XVEZTdHJpbmcobmV3
U3RyaW5nKSB0b1N0cmluZzp0b1dURlN0cmluZyhvbGRTdHJpbmcpIHdpdGhDb21wbGV0aW9uSGFu
ZGxlcjptYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2Fs
bGJhY2tJRF0gewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBtYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2Fs
bGJhY2tJRF0gewogICAgICAgICAgICAgLy8gYXBwbHlBdXRvY29ycmVjdGlvbiBjYW4gY2FsbCBp
dHMgY29tcGxldGlvbiBoYW5kbGVyIHN5bmNocm9ub3VzbHksCiAgICAgICAgICAgICAvLyB3aGlj
aCBtYWtlcyBVSVNjcmlwdENvbnRyb2xsZXIgdW5oYXBweSAoc2VlIGJ1ZyAxNzI4ODQpLgpAQCAt
MTE1Nyw3ICsxMTM4LDcgQEAgYm9vbCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OmlzU2hvd2luZ0Rh
dGFMaXN0U3VnZ2VzdGlvbnMoKSBjb25zdAogCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6
c2V0S2V5Ym9hcmRJbnB1dE1vZGVJZGVudGlmaWVyKEpTU3RyaW5nUmVmIGlkZW50aWZpZXIpCiB7
Ci0gICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEtleWJvYXJkSW5wdXRNb2RlSWRl
bnRpZmllcih0b1dURlN0cmluZyh0b1dLKGlkZW50aWZpZXIpKSk7CisgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldEtleWJvYXJkSW5wdXRNb2RlSWRlbnRpZmllcih0b1dURlN0cmlu
ZyhpZGVudGlmaWVyKSk7CiB9CiAKIC8vIEZJWE1FOiBXcml0ZSB0aGlzIGluIHRlcm1zIG9mIEhJ
REV2ZW50R2VuZXJhdG9yIG9uY2Ugd2Uga25vdyBob3cgdG8gcmVzZXQgY2FwcyBsb2NrIHN0YXRl
CkBAIC0xMTc4LDcgKzExNTksNyBAQCBib29sIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6a2V5Ym9h
cmRJc0F1dG9tYXRpY2FsbHlTaGlmdGVkKCkgY29uc3QKIAogSlNPYmplY3RSZWYgVUlTY3JpcHRD
b250cm9sbGVySU9TOjphdHRhY2htZW50SW5mbyhKU1N0cmluZ1JlZiBqc0F0dGFjaG1lbnRJZGVu
dGlmaWVyKQogewotICAgIGF1dG8gYXR0YWNobWVudElkZW50aWZpZXIgPSB0b1dURlN0cmluZyh0
b1dLKGpzQXR0YWNobWVudElkZW50aWZpZXIpKTsKKyAgICBhdXRvIGF0dGFjaG1lbnRJZGVudGlm
aWVyID0gdG9XVEZTdHJpbmcoanNBdHRhY2htZW50SWRlbnRpZmllcik7CiAgICAgX1dLQXR0YWNo
bWVudCAqYXR0YWNobWVudCA9IFt3ZWJWaWV3KCkgX2F0dGFjaG1lbnRGb3JJZGVudGlmaWVyOmF0
dGFjaG1lbnRJZGVudGlmaWVyXTsKICAgICBfV0tBdHRhY2htZW50SW5mbyAqYXR0YWNobWVudElu
Zm8gPSBhdHRhY2htZW50LmluZm87CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9F
dmVudFNlbmRlclByb3h5Lm1tCmluZGV4IDA2NzJiNTgxYmY2NWI1YWQ5YTJiODVmZWE4NjE2NDhm
MjIzZWI0YzUuLjEwMjcyODg0MDg0ZDJjMTAyMDhjZmEwNzE0ZjFiMTBjNWVmYzBhMGIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5tbQpAQCAtMjcy
LDIwICsyNzIsMTAgQEAgc3RhdGljIE5TVGltZUludGVydmFsIGFic29sdXRlVGltZUZvckV2ZW50
VGltZShkb3VibGUgY3VycmVudEV2ZW50VGltZSkKIAogRXZlbnRTZW5kZXJQcm94eTo6RXZlbnRT
ZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVzdENvbnRyb2xsZXIpCiAgICAgOiBtX3Rlc3RD
b250cm9sbGVyKHRlc3RDb250cm9sbGVyKQotICAgICwgbV90aW1lKDApCi0gICAgLCBtX3Bvc2l0
aW9uKCkKLSAgICAsIG1fbGVmdE1vdXNlQnV0dG9uRG93bihmYWxzZSkKLSAgICAsIG1fY2xpY2tD
b3VudCgwKQotICAgICwgbV9jbGlja1RpbWUoMCkKLSAgICAsIG1fY2xpY2tQb3NpdGlvbigpCi0g
ICAgLCBtX2NsaWNrQnV0dG9uKGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbikKLSAgICAsIGV2
ZW50TnVtYmVyKDApCiB7CiB9CiAKLUV2ZW50U2VuZGVyUHJveHk6On5FdmVudFNlbmRlclByb3h5
KCkKLXsKLX0KK0V2ZW50U2VuZGVyUHJveHk6On5FdmVudFNlbmRlclByb3h5KCkgPSBkZWZhdWx0
OwogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50
IGJ1dHRvbikKIHsKQEAgLTM5NCw3ICszODQsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVGb3JjZUV2
ZW50U3luY2hyb25vdXNseShOU0V2ZW50ICpldmVudCkKIAogUmV0YWluUHRyPE5TRXZlbnQ+IEV2
ZW50U2VuZGVyUHJveHk6OmJlZ2luUHJlc3N1cmVFdmVudChpbnQgc3RhZ2UpCiB7Ci0gICAgUmV0
YWluUHRyPEV2ZW50U2VuZGVyU3ludGhldGljRXZlbnQ+IGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50
U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpO
U01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKKyAgICBhdXRvIGV2ZW50ID0g
YWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2
ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAg
ICAgICAgZ2xvYmFsTG9jYXRpb246KFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5w
bGF0Zm9ybVdpbmRvdygpIGNvbnZlcnRSZWN0VG9TY3JlZW46TlNNYWtlUmVjdChtX3Bvc2l0aW9u
LngsIG1fcG9zaXRpb24ueSwgMSwgMSldLm9yaWdpbikKICAgICAgICAgc3RhZ2U6c3RhZ2UKICAg
ICAgICAgcHJlc3N1cmU6MC41CkBAIC00MDksNyArMzk5LDcgQEAgUmV0YWluUHRyPE5TRXZlbnQ+
IEV2ZW50U2VuZGVyUHJveHk6OmJlZ2luUHJlc3N1cmVFdmVudChpbnQgc3RhZ2UpCiAKIFJldGFp
blB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5OjpwcmVzc3VyZUNoYW5nZUV2ZW50KGludCBz
dGFnZSwgZmxvYXQgcHJlc3N1cmUsIEV2ZW50U2VuZGVyUHJveHk6OlByZXNzdXJlQ2hhbmdlRGly
ZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBSZXRhaW5QdHI8RXZlbnRTZW5kZXJTeW50aGV0aWNF
dmVudD4gZXZlbnQgPSBhZG9wdE5TKFtbRXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudCBhbGxvY10g
aW5pdFByZXNzdXJlRXZlbnRBdExvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9w
b3NpdGlvbi55KQorICAgIGF1dG8gZXZlbnQgPSBhZG9wdE5TKFtbRXZlbnRTZW5kZXJTeW50aGV0
aWNFdmVudCBhbGxvY10gaW5pdFByZXNzdXJlRXZlbnRBdExvY2F0aW9uOk5TTWFrZVBvaW50KG1f
cG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQogICAgICAgICBnbG9iYWxMb2NhdGlvbjooW21fdGVz
dENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkgY29udmVydFJlY3RU
b1NjcmVlbjpOU01ha2VSZWN0KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55LCAxLCAxKV0ub3Jp
Z2luKQogICAgICAgICBzdGFnZTpzdGFnZQogICAgICAgICBwcmVzc3VyZTpwcmVzc3VyZQpAQCAt
NDMxLDEwICs0MjEsMTAgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlQ2xpY2so
KQogewogICAgIHNlbmRNb3VzZURvd25Ub1N0YXJ0UHJlc3N1cmVFdmVudHMoKTsKIAotICAgIFJl
dGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOwot
ICAgIFJldGFpblB0cjxOU0V2ZW50PiBwcmVGb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVu
dCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0gICAgUmV0YWluUHRy
PE5TRXZlbnQ+IGZvcmNlQ2xpY2sgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJlQ2hh
bmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcmVsZWFz
aW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0
aW9uOjpEZWNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJl
RXZlbnQoMSk7CisgICAgYXV0byBwcmVGb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgx
LCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBmb3JjZUNs
aWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5j
cmVhc2luZyk7CisgICAgYXV0byByZWxlYXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZl
bnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwogICAgIE5TRXZlbnQg
Km1vdXNlVXAgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNFdmVudFR5cGVMZWZ0TW91
c2VVcAogICAgICAgICBsb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRp
b24ueSkKICAgICAgICAgbW9kaWZpZXJGbGFnczowCkBAIC00NjgsOSArNDU4LDkgQEAgdm9pZCBF
dmVudFNlbmRlclByb3h5OjpzdGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljaygpCiB7CiAgICAg
c2VuZE1vdXNlRG93blRvU3RhcnRQcmVzc3VyZUV2ZW50cygpOwogCi0gICAgUmV0YWluUHRyPE5T
RXZlbnQ+IGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMSk7Ci0gICAgUmV0YWlu
UHRyPE5TRXZlbnQ+IGluY3JlYXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwg
UHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2
ZW50PiByZWxlYXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVD
aGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOworICAgIGF1dG8gYmVnaW5QcmVzc3VyZSA9IGJl
Z2luUHJlc3N1cmVFdmVudCgxKTsKKyAgICBhdXRvIGluY3JlYXNpbmdQcmVzc3VyZSA9IHByZXNz
dXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwor
ICAgIGF1dG8gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNz
dXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKICAgICBOU0V2ZW50ICptb3VzZVVwID0g
W05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TRXZlbnRUeXBlTGVmdE1vdXNlVXAKICAgICAg
ICAgbG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAg
ICAgIG1vZGlmaWVyRmxhZ3M6MApAQCAtNTAzLDkgKzQ5Myw5IEBAIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6bW91c2VGb3JjZURvd24oKQogewogICAgIHNlbmRNb3VzZURvd25Ub1N0YXJ0UHJlc3N1
cmVFdmVudHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVn
aW5QcmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBwcmVGb3JjZUNsaWNr
ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVh
c2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGZvcmNlTW91c2VEb3duID0gcHJlc3N1cmVD
aGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAg
YXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOworICAgIGF1dG8gcHJl
Rm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rp
b246OkluY3JlYXNpbmcpOworICAgIGF1dG8gZm9yY2VNb3VzZURvd24gPSBwcmVzc3VyZUNoYW5n
ZUV2ZW50KDIsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKIAogICAgIE5T
VmlldyAqdGFyZ2V0VmlldyA9IFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVZpZXcoKSBoaXRUZXN0OltiZWdpblByZXNzdXJlIGxvY2F0aW9uSW5XaW5kb3ddXTsKICAg
ICB0YXJnZXRWaWV3ID0gdGFyZ2V0VmlldyA/IHRhcmdldFZpZXcgOiBtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKQEAgLTUyNiw5ICs1MTYsOSBAQCB2b2lk
IEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VEb3duKCkKIAogdm9pZCBFdmVudFNlbmRlclBy
b3h5Ojptb3VzZUZvcmNlVXAoKQogewotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNz
dXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDIpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBzdGFn
ZVR3b0V2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlv
bjo6RGVjcmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IHN0YWdlT25lRXZlbnQgPSBw
cmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5n
KTsKKyAgICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMik7CisgICAg
YXV0byBzdGFnZVR3b0V2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5n
ZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBzdGFnZU9uZUV2ZW50ID0gcHJlc3N1
cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CiAK
ICAgICAvLyBTaW5jZSBBcHBLaXQgZG9lcyBub3QgaW1wbGVtZW50IGZvcmNldXAvZG93biBhcyBt
b3VzZSBldmVudHMsIHdlIG5lZWQgdG8gc2VuZCB0d28gcHJlc3N1cmUgZXZlbnRzIHRvIGRldGVj
dAogICAgIC8vIHRoZSBjaGFuZ2UgaW4gc3RhZ2UgdGhhdCBtYXJrcyB0aG9zZSBtb21lbnRzLgpA
QCAtNTUxLDggKzU0MSw4IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZUNoYW5n
ZWQoZmxvYXQgZm9yY2UpCiB7CiAgICAgaW50IHN0YWdlID0gZm9yY2UgPCAxID8gMSA6IDI7CiAg
ICAgZmxvYXQgcHJlc3N1cmUgPSBmb3JjZSA8IDEgPyBmb3JjZSA6IGZvcmNlIC0gMTsKLSAgICBS
ZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudChzdGFn
ZSk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IHByZXNzdXJlQ2hhbmdlZEV2ZW50ID0gcHJlc3N1
cmVDaGFuZ2VFdmVudChzdGFnZSwgcHJlc3N1cmUsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJ
bmNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQo
c3RhZ2UpOworICAgIGF1dG8gcHJlc3N1cmVDaGFuZ2VkRXZlbnQgPSBwcmVzc3VyZUNoYW5nZUV2
ZW50KHN0YWdlLCBwcmVzc3VyZSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcp
OwogCiAgICAgTlNWaWV3ICp0YXJnZXRWaWV3ID0gW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJW
aWV3KCktPnBsYXRmb3JtVmlldygpIGhpdFRlc3Q6W2JlZ2luUHJlc3N1cmUgbG9jYXRpb25Jbldp
bmRvd11dOwogICAgIHRhcmdldFZpZXcgPSB0YXJnZXRWaWV3ID8gdGFyZ2V0VmlldyA6IG1fdGVz
dENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOwpAQCAtNjExLDggKzYw
MSw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25k
cykKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjprZXlEb3duKFdLU3RyaW5nUmVmIGtleSwgV0tF
dmVudE1vZGlmaWVycyBtb2RpZmllcnMsIHVuc2lnbmVkIGtleUxvY2F0aW9uKQogewotICAgIE5T
U3RyaW5nKiBjaGFyYWN0ZXIgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6dG9TVEQoa2V5
KS5jX3N0cigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOltO
U1N0cmluZyBkZWZhdWx0Q1N0cmluZ0VuY29kaW5nXV07CisgICAgTlNTdHJpbmcqIGNoYXJhY3Rl
ciA9IHRvV1RGU3RyaW5nKGtleSk7CiAKICAgICBOU1N0cmluZyAqZXZlbnRDaGFyYWN0ZXIgPSBj
aGFyYWN0ZXI7CiAgICAgdW5zaWduZWQgc2hvcnQga2V5Q29kZSA9IDA7CkBAIC04MzIsNyArODIx
LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjprZXlEb3duKFdLU3RyaW5nUmVmIGtleSwgV0tF
dmVudE1vZGlmaWVycyBtb2RpZmllcnMsIHVuc2kKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojpt
b3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4g
Y2dTY3JvbGxFdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZVNjcm9sbFdoZWVsRXZlbnQyKDAs
IGtDR1Njcm9sbEV2ZW50VW5pdExpbmUsIDIsIHksIHgsIDApKTsKKyAgICBhdXRvIGNnU2Nyb2xs
RXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3Jv
bGxFdmVudFVuaXRMaW5lLCAyLCB5LCB4LCAwKSk7CiAKICAgICAvLyBTZXQgdGhlIENHRXZlbnQg
bG9jYXRpb24gaW4gZmxpcHBlZCBjb29yZHMgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IHNjcmVlbiwg
d2hpY2gKICAgICAvLyBjb21wZW5zYXRlcyBmb3IgdGhlIGJlaGF2aW9yIG9mICtbTlNFdmVudCBl
dmVudFdpdGhDR0V2ZW50Ol0gd2hlbiB0aGUgZXZlbnQgaGFzCkBAIC04NTksNyArODQ4LDcgQEAg
dm9pZCBFdmVudFNlbmRlclByb3h5Ojpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50
IHksIGJvb2wgcGFnZWQpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeVdp
dGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKGludCB4LCBpbnQgeSwgaW50IHBoYXNlLCBpbnQgbW9t
ZW50dW0pCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IGNnU2Nyb2xsRXZlbnQgPSBhZG9w
dENGKENHRXZlbnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRM
aW5lLCAyLCB5LCB4LCAwKSk7CisgICAgYXV0byBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2
ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwg
eSwgeCwgMCkpOwogCiAgICAgLy8gU2V0IHRoZSBDR0V2ZW50IGxvY2F0aW9uIGluIGZsaXBwZWQg
Y29vcmRzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBzY3JlZW4sIHdoaWNoCiAgICAgLy8gY29tcGVu
c2F0ZXMgZm9yIHRoZSBiZWhhdmlvciBvZiArW05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpdIHdo
ZW4gdGhlIGV2ZW50IGhhcwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMv
UGxhdGZvcm1XZWJWaWV3TWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZv
cm1XZWJWaWV3TWFjLm1tCmluZGV4IDY0MTc4MmNhOTdlMWRhZmI5MDA5MTlkYjE5YjM0NzRhNTU0
Mzg4ZTUuLjVhNGU5NmI4MWVhOGNkYTA2YjM3YjQ2OGU1ODg1OWVmNzFlYjQ2YjggMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KQEAgLTY0
LDcgKzY0LDcgQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiogY29uZmlndXJhdGlvbiwgY29uc3QgVGUKICAgICBpZiAobV9vcHRpb25zLnVz
ZVJlbW90ZUxheWVyVHJlZSkKICAgICAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gc2V0VmFsdWU6QFlFUyBmb3JLZXk6QCJXZWJLaXQyVXNlUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWEiXTsKIAotICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBj
b3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbY29uZmlndXJhdGlvbiBjb3B5XSk7CisgICAg
YXV0byBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbY29uZmlndXJhdGlvbiBjb3B5XSk7
CiAgICAgV0tQcmVmZXJlbmNlc1NldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgoX19icmlkZ2Ug
V0tQcmVmZXJlbmNlc1JlZilbY29waWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIG1fb3B0
aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyk7CiAKICAgICBOU1JlY3QgcmVjdCA9IE5TTWFrZVJl
Y3QoMCwgMCwgVGVzdENvbnRyb2xsZXI6OnZpZXdXaWR0aCwgVGVzdENvbnRyb2xsZXI6OnZpZXdI
ZWlnaHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRy
b2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1h
Yy5tbQppbmRleCAxNGI3ZGM5ZDBmMjRlYzEwZTc4YWMyYjBlMDM2NWE5ZWE2NDlhYjI2Li5iMjIy
ODcxY2QwYTM5MTllMzNlZDYwNmQwZjQ0MTY4ODU2OTNhMjA1IDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQpAQCAtMTg0LDcgKzE4NCw3IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNv
bnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0CiAgICAgaWYgKCF0ZXN0LnVybENvbnRhaW5zKCJjb250
ZW50ZXh0ZW5zaW9ucy8iKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmV0YWluUHRyPENGVVJM
UmVmPiB0ZXN0VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCB0ZXN0LnVybCgpKSk7CisgICAgYXV0byB0ZXN0VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVS
TChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0ZXN0LnVybCgpKSk7CiAgICAgTlNVUkwgKmZpbHRlclVS
TCA9IFsoX19icmlkZ2UgTlNVUkwgKil0ZXN0VVJMLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aEV4
dGVuc2lvbjpAImpzb24iXTsKIAogICAgIF9fYmxvY2sgTlNTdHJpbmcgKmNvbnRlbnRFeHRlbnNp
b25TdHJpbmc7CkBAIC0zNzEsMTQgKzM3MSwxNCBAQCBzdGF0aWMgTlNTZXQgKnN5c3RlbUhpZGRl
bkZvbnRGYW1pbHlTZXQoKQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gZ2VuZXJh
dGVGb250QWxsb3dMaXN0KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4g
cmVzdWx0ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgZm9yIChOU1N0cmluZyAq
Zm9udEZhbWlseSBpbiBhbGxvd2VkRm9udEZhbWlseVNldCgpKSB7CiAgICAgICAgIE5TQXJyYXkg
KmZvbnRzRm9yRmFtaWx5ID0gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBhdmFp
bGFibGVNZW1iZXJzT2ZGb250RmFtaWx5OmZvbnRGYW1pbHldOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gZmFtaWx5SW5Gb250ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhbZm9udEZhbWlseSBVVEY4U3RyaW5nXSkpOworICAgICAgICBhdXRvIGZhbWls
eUluRm9udCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW2ZvbnRGYW1p
bHkgVVRGOFN0cmluZ10pKTsKICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0ocmVzdWx0LmdldCgp
LCBmYW1pbHlJbkZvbnQuZ2V0KCkpOwogICAgICAgICBmb3IgKE5TQXJyYXkgKmZvbnRJbmZvIGlu
IGZvbnRzRm9yRmFtaWx5KSB7CiAgICAgICAgICAgICAvLyBGb250IG5hbWUgaXMgdGhlIGZpcnN0
IGVudHJ5IGluIHRoZSBhcnJheS4KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBmb250TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW1tmb250
SW5mbyBvYmplY3RBdEluZGV4OjBdIFVURjhTdHJpbmddKSk7CisgICAgICAgICAgICBhdXRvIGZv
bnROYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhbW2ZvbnRJbmZv
IG9iamVjdEF0SW5kZXg6MF0gVVRGOFN0cmluZ10pKTsKICAgICAgICAgICAgIFdLQXJyYXlBcHBl
bmRJdGVtKHJlc3VsdC5nZXQoKSwgZm9udE5hbWUuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMzk0LDcgKzM5NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6
ZUNvbnRleHQoKQogICAgIC8vIFRlc3RpbmcgdXNlcyBhIHByaXZhdGUgc2Vzc2lvbiwgd2hpY2gg
aXMgbWVtb3J5IG9ubHkuIEhvd2V2ZXIgY3JlYXRpbmcgb25lIGluc3RhbnRpYXRlcyBhIHNoYXJl
ZCBOU1VSTENhY2hlLAogICAgIC8vIGFuZCBpZiB3ZSBoYXZlbid0IGNyZWF0ZWQgb25lIHlldCwg
dGhlIGRlZmF1bHQgb25lIHdpbGwgYmUgY3JlYXRlZCBvbiBkaXNrLgogICAgIC8vIE1ha2luZyB0
aGUgc2hhcmVkIGNhY2hlIG1lbW9yeS1vbmx5IGF2b2lkcyB0b3VjaGluZyB0aGUgZmlsZSBzeXN0
ZW0uCi0gICAgUmV0YWluUHRyPE5TVVJMQ2FjaGU+IHNoYXJlZENhY2hlID0KKyAgICBhdXRvIHNo
YXJlZENhY2hlID0KICAgICAgICAgYWRvcHROUyhbW05TVVJMQ2FjaGUgYWxsb2NdIGluaXRXaXRo
TWVtb3J5Q2FwYWNpdHk6MTAyNCAqIDEwMjQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlza0NhcGFjaXR5OjAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpc2tQYXRoOm5pbF0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaAppbmRleCAwZWFiODk0OWU2YmViZmVlNjU5NDc1
ODlhZmI5ZThkOWI4YmUxZWM3Li4yZDJkMWQ2Yjg0NmU2ODc4YjBiMWViZGMxNjY3YzE3NWU5MTU2
NjVmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRy
b2xsZXJNYWMuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRy
b2xsZXJNYWMuaApAQCAtMzEsMTMgKzMxLDE0IEBAIE9CSkNfQ0xBU1MgV0tXZWJWaWV3OwogCiBu
YW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVUlTY3JpcHRDb250cm9sbGVyTWFjIDogcHVibGljIFVJ
U2NyaXB0Q29udHJvbGxlckNvY29hIHsKK2NsYXNzIFVJU2NyaXB0Q29udHJvbGxlck1hYyBmaW5h
bCA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSB7CiBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgVUlTY3JpcHRDb250cm9sbGVyTWFjKFVJU2NyaXB0Q29udGV4dCYgY29udGV4dCkKICAgICAg
ICAgOiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShjb250ZXh0KQogICAgIHsKICAgICB9CiAKK3By
aXZhdGU6CiAgICAgdm9pZCByZXBsYWNlVGV4dEF0UmFuZ2UoSlNTdHJpbmdSZWYsIGludCwgaW50
KSBvdmVycmlkZTsKICAgICB2b2lkIHpvb21Ub1NjYWxlKGRvdWJsZSwgSlNWYWx1ZVJlZikgb3Zl
cnJpZGU7CiAgICAgZG91YmxlIHpvb21TY2FsZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjIsNyAr
NjMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFjdGl2YXRlQXRQb2ludChsb25nIHgsIGxvbmcg
eSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykgb3ZlcnJpZGU7CiAKLXByaXZhdGU6CiAgICAgTlNUYWJs
ZVZpZXcgKmRhdGFMaXN0U3VnZ2VzdGlvbnNUYWJsZVZpZXcoKSBjb25zdDsKIH07CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5t
bSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQpp
bmRleCBjZDExMzI5YTY1NDFkN2I0ZWI3N2Q3ZWMxNDY4OGU5OTIxZjI3YzUzLi5iNWNiNTE4MTUw
NTllN2EwOTNhMTQyMzk5MWU4OTE3ZTNlZDMwOTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCkBAIC0yMTQsNyArMjE0LDcg
QEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJNYWM6OmNvbXBsZXRlQmFja1N3aXBlKEpTVmFsdWVS
ZWYgY2FsbGJhY2spCiAKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyTWFjOjpwbGF5QmFja0V2ZW50
U3RyZWFtKEpTU3RyaW5nUmVmIGV2ZW50U3RyZWFtLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewot
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3RyZWFtID0gYWRvcHRDRihKU1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBldmVudFN0cmVhbSkpOworICAgIGF1dG8gc3Ry
ZWFtID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBl
dmVudFN0cmVhbSkpOwogICAgIHBsYXlCYWNrRXZlbnRzKHdlYlZpZXcoKSwgbV9jb250ZXh0LCAo
X19icmlkZ2UgTlNTdHJpbmcgKilzdHJlYW0uZ2V0KCksIGNhbGxiYWNrKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409864</attachid>
            <date>2020-09-27 18:46:52 -0700</date>
            <delta_ts>2020-09-27 18:55:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200927184651.patch</filename>
            <type>text/plain</type>
            <size>699639</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3Njg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJmZWY0NTFlYS4u
Yzc4YjE0N2U1NzgzMGFiYWM4ODBkMjZmMmM0YWZiODcxODVkNmU5MyAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0NSBAQAorMjAy
MC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlmeWluZywgYnV0IGV2ZW4g
bW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVzdAorICAgICAgICBjb2Rl
IGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkgYW5kIHBhc3RlIHJhdGhl
ciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0ZXIgdGhlIHJlZmFjdG9y
aW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlzIGNvZGUgaXMgd3JpdHRl
biB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGluZyBmb3IgZWFjaCBmdW5j
dGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0
KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0NsYXNzIHdpdGggdGhpcy4g
UmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBjbGVhciB0aGlzIHBhc3Nl
cyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKHVp
RWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBSZW1vdmVkIHVubmVlZGVk
IGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3aGljaCBzdGFydHMgb3V0
IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9y
RHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IpOiBV
c2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoX3JldHVybkV4
cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2UgYW5kIGF1dG8uCisgICAg
ICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAo
Z2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChHQ0NvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6IFJlcGxhY2VkIGdldEpT
Q2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFpblB0ciB0byBtYWtlIGl0
IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVyLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKGVuY29kZUhv
c3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChleGVjQ29tbWFu
ZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAob3Zl
cnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKHF1ZXVlTG9hZENhbGxi
YWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5nQ2FsbGJhY2spOiBEaXR0
by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFs
T2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKTogUmVw
bGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRy
IHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisg
ICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25z
dCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAg
ICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQpOiBTaW1wbGlmaWVk
IHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sp
OiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAorICAgICAgICB0YWJsZSB2
YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBuZWVkIHRvIGJlIG9iamVj
dHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogRGl0dG8u
CisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4K
KyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTogVXNlIGFycmF5TGVuZ3Ro
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDogVXBkYXRlZCBmb3IgdGhl
IGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3Jt
TmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoY3JlYXRlRW1w
dHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50
TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
bGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
VmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oOiBSZW1vdmVkIHVubmVl
ZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGguCisgICAgICAgIFJlbW92
ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIgSlNWYWx1ZUlzT2JqZWN0
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSBj
b25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoY3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09iamVjdC4KKyAgICAgICAg
KHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSBjb25zdCk6
IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRnJh
bWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERlbGVnYXRlIGRpZENsZWFy
V2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6CisgICAgICAgIFVzZSBhdXRv
LiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LiBTaW1wbGlmaWVkIG9i
amVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0TlMgaW5zdGVhZCBvZiBy
ZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRDbGVhcldpbmRvd09iamVj
dEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNlIGNyZWF0ZUpTU3RyaW5n
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAg
ICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVuZ3RoLgorCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAgKEZy
YW1lTG9hZERlbGVnYXRlOjpkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lSW5TdGFuZGFyZFdv
cmxkKToKKyAgICAgICAgUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFrZVdpbmRvd09iamVjdC4K
KworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwOgorICAg
ICAgICAoV1RSOjp0b09wdGlvbmFsQm9vbCk6IFJlbmFtZWQgZnJvbSBKU1ZhbHVlTWFrZUJvb2xl
YW5Pck51bGwuCisgICAgICAgIChXVFI6OnRvT3B0aW9uYWxEb3VibGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6bWFrZVZhbHVlKTogQWRkZWQgd2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlw
ZXMuCisgICAgICAgIFJlcGxhY2VkIEpTVmFsdWVUb051bGxhYmxlQm9vbGVhbiBhbmQgSlNWYWx1
ZU1ha2VTdHJpbmdPck51bGwuCisgICAgICAgIChXVFI6OmNyZWF0ZUpTU3RyaW5nKTogQWRkZWQg
d2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlwZXMuCisgICAgICAgIChXVFI6OnByb3BlcnR5
KTogQWRkZWQuCisgICAgICAgIChXVFI6OnN0cmluZ1Byb3BlcnR5KTogQWRkZWQuCisgICAgICAg
IChXVFI6OmJvb2xlYW5Qcm9wZXJ0eSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpudW1lcmljUHJv
cGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6b2JqZWN0UHJvcGVydHkpOiBSZWZhY3RvcmVk
IHRvIGNhbGwgcHJvcGVydHkuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogQWRkZWQuCisg
ICAgICAgIChXVFI6OnNldEdsb2JhbE9iamVjdFByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChX
VFI6OmNhbGwpOiBSZWZhY3RvcmVkIHRvIGxldCBvYmplY3RQcm9wZXJ0eSBkbyBtb3JlIG9mIHRo
ZSBudWxsIGNoZWNraW5nLgorICAgICAgICAoV1RSOjpjYWxsQ29uc3RydWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmg6IFVwZGF0ZWQg
Zm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNX
cmFwcGFibGUuaDogUmVkdWNlZCBpbmNsdWRlcyBhIGJpdC4KKworICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmg6IEFkZGVkIHNldEdsb2JhbE9iamVjdFByb3Bl
cnR5LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250ZXh0LmNwcDoKKyAgICAgICAgKFVJU2NyaXB0Q29udGV4dDo6VUlTY3JpcHRDb250ZXh0
KTogUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFVJ
U2NyaXB0Q29udGV4dDo6cnVuVUlTY3JpcHQpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAg
IChVSVNjcmlwdENvbnRleHQ6Om9iamVjdEZyb21SZWN0IGNvbnN0KTogVXNlIHNldFByb3BlcnR5
LgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBUZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwOgorICAg
ICAgICAoV1RSOjp0b0RldmljZU9yaWVudGF0aW9uKTogVXNlIGNyZWF0ZUpTU3RyaW5nIGFuZCBK
U1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nLgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIu
bW06CisgICAgICAgICgtW0xheW91dFRlc3RTcGVsbENoZWNrZXIgc2V0UmVzdWx0c0Zyb21KU1Zh
bHVlOmluQ29udGV4dDpdKTogVXNlIGNyZWF0ZUpTU3RyaW5nCisgICAgICAgIGFuZCByZW1vdmVk
IHVubmVlZGVkIHVzZSBvZiBscm91bmRsLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9E
aWN0aW9uYXJ5RnVuY3Rpb25zLmg6IEFkZGVkLiBDb250YWlucyBjb252ZW5pZW5jZSBmdW5jdGlv
bnMKKyAgICAgICAgZm9yIGRlYWxpbmcgd2l0aCBXS0RpY3Rpb25hcnlSZWYuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaDogSW5pdGlhbGl6ZSBkYXRhIG1l
bWJlcnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmNwcDoKKyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbik6
IFVzZSBPcHRpb25hbCBpbnN0ZWFkIG9mIHNlcGFyYXRlIGJvb2wuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oOiBVcGRhdGVkIGZvciB0aGUgYWJv
dmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtOgor
ICAgICAgICAoX2dlbmVyYXRlSW1wbGVtZW50YXRpb25GaWxlKTogVXNlIHN0YXRpYyBpbml0aWFs
aXphdGlvbiBhbmQgYSBsYW1iZGEgaW5zdGVhZCBvZgorICAgICAgICBhbiBpZiBzdGF0ZW1lbnQg
dG8gaW5pdGlhbGl6ZS4KKyAgICAgICAgKF9wbGF0Zm9ybVR5cGVDb25zdHJ1Y3Rvcik6IFVzZSB0
b09wdGlvbmFsQm9vbCBhbmQgY3JlYXRlSlNTdHJpbmcuIEFsc28gYWRkZWQKKyAgICAgICAgc3Vw
cG9ydCBmb3IgbnVsbGFibGUgZG91YmxlcyBhbmQgdXNlZCBhdXRvIGEgYml0IG1vcmUuCisgICAg
ICAgIChfcmV0dXJuRXhwcmVzc2lvbik6IFVzZSBtYWtlVmFsdWUuCisKKyAgICAgICAgKiBJbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDogTWFkZSB0aGUgb3B0aW9uYWwgYXJn
dW1lbnRzIHRvIHRoZQorICAgICAgICBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiBmdW5jdGlv
biAiZG91YmxlPyIgaW5zdGVhZCBvZiAib2JqZWN0Ii4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXVFI6OmdldE1lbnVJdGVtQ2hpbGRyZW5DYWxsYmFjayk6IFVzZSBhdXRvIGFuZCBub3QgSlNW
YWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IE1vdmVkIHRvIEpTQmFz
aWNzLmgvY3BwLgorICAgICAgICAoV1RSOjpwYXJzZVRvdWNoTW9kaWZpZXIpOiBBZGRlZC4gRmFj
dG9yZWQgb3V0IG9mIHRoZQorICAgICAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3Vj
aE1vZGlmaWVyIGZ1bmN0aW9uLgorICAgICAgICAoV1RSOjpwYXJzZU1vZGlmaWVyQXJyYXkpOiBV
c2UgY3JlYXRlSlNTdHJpbmcgYW5kIHJlbW92ZSB1bm5lZWRlZCBpZ25vcmVkCisgICAgICAgIGV4
Y2VwdGlvbiBvdXQgYXJndW1lbnQsIHNpbmNlIHRoYXQgaXMgb3B0aW9uYWwuIEFsc28gYWRkZWQg
b3ZlcmxvYWQgdGhhdAorICAgICAgICBnZXRzIHRoZSBjb250ZXh0LgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNlbmRpbmdDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KTog
VXNlIGFkb3B0V0sgYW5kIHNldFZhbHVlLiBSZXR1cm4gYSBXS1JldGFpblB0ci4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKTogVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
b3VzZVVwKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1v
dXNlTW92ZVRvKTogVXNlIHNldFZhbHVlIGFuZAorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZXMuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9y
Y2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpz
dGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlRG93bik6IERpdHRvLgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlVXApOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNoYW5nZWQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bGVhcEZvcndhcmQpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hy
b25vdXNDbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OmNyZWF0ZUtl
eURvd25NZXNzYWdlQm9keSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6a2V5RG93bik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25v
dXNLZXlEb3duKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9s
bEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMpOiBVc2UKKyAgICAgICAgc2V0VmFsdWUgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
Y29udGludW91c01vdXNlU2Nyb2xsQnkpOiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpjb250ZXh0Q2xpY2spOiBVc2UgYXV0byBhbmQgbm90IEpTVmFsdWVUb09iamVjdC4KKyAg
ICAgICAgKFdUUjo6dG9Nb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKTogVXNlIGJvb2xlYW5Qcm9w
ZXJ0eS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6YWRkVG91Y2hQb2lu
dCk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAg
IChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcik6
IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaFBv
aW50UmFkaXVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnRvdWNoU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6dG91Y2hNb3ZlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoRW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoQ2FuY2VsKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmNsZWFyVG91Y2hQb2ludHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6cmVsZWFzZVRvdWNoUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FuY2VsVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNl
dEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUu
CisgICAgICAgIERlbGV0ZWQgdmFyaW91cyB1bm5lZWRlZCBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXVFI6OkdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdUUjo6R0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6R0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFBy
b3BlcnR5LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0Nv
bnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICBBbHNvIG1hcmtlZCB0
aGUgY2xhc3MgZmluYWwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRp
ZENyZWF0ZVBhZ2UpOiBVc2UgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6cmVwb3J0TGl2ZURvY3VtZW50cyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSk6IFVzZSBk
aWN0aW9uYXJ5VmFsdWUsCisgICAgICAgIGJvb2xlYW5WYWx1ZSwgcG9zdFBhZ2VNZXNzYWdlLCB2
YWx1ZSwgYW5kIG1vcmUgdG8gc3RyZWFtbGluZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGU6OmJvb2xlYW5Gb3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZTo6c3RyaW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OmJlZ2luVGVzdGluZyk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlOjpkb25lKTogVXNlIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6Y2xvc2VPdGhlclBhZ2VzKTogVXNlIHNldFZhbHVlIGFuZCB0b1dLLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6ZHVtcFRvU3RkRXJyKTogVXNlIHBvc3RQYWdlTWVzc2FnZQor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dCk6IFVzZSB0b1dLLgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVl
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBv
c3RBZGRDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdEZvY3VzV2ViVmlldyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdFNldEJhY2tpbmdTY2FsZUZhY3Rvcik6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdFNldFdpbmRvd0lzS2V5KTogVXNlIHRvV0suCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0Vmlld1NpemUpOiBVc2Ugc2V0VmFs
dWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2ltdWxhdGVX
ZWJOb3RpZmljYXRpb25DbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0QWRkc1Zpc2l0ZWRMaW5rcyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bik6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLAorICAgICAgICBhbmQgdXNlIE9w
dGlvbmFsIGluc3RlYWQgb2YgYm9vbC9kb3VibGUgcGFpcnMuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IpOiBV
c2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aXNHZW9s
b2NhdGlvblByb3ZpZGVyQWN0aXZlIGNvbnN0KTogVXNlIHRvV0sgYW5kIGJvb2xlYW5WYWx1ZS4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJv
YXJkIGNvbnN0KTogVXNlIHRvV0sgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVybWlzc2lvbik6IFVzZSBwb3N0UGFnZU1lc3NhZ2Uu
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcnNp
c3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKTogVXNlIHNldFZhbHVlCisgICAgICAgIGFuZCBwb3N0
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjp1c2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JP
cmlnaW4pOiBVc2V0IHNldFZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKTogVXNlIHNldFZh
bHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpz
ZXRIaWRkZW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldENhY2hl
TW9kZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nl
c3NXb3JrUXVldWUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6cHJvY2Vzc1dvcmtRdWV1ZSk6IFVzZSBwb3N0UGFnZU1lc3Nh
Z2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUZvcndhcmROYXZpZ2F0
aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWQpOiBV
c2Ugc2V0VmFsdWUgYW5kIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnF1ZXVlUmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpxdWV1ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
TWVzc2FnZSk6IEFkZGVkLiBPdmVybG9hZHMgZm9yIG1hbnkgdHlwZXMgdG8ga2VlcCBjYWxsZXIg
Y29kZSBzdHJlYW1saW5lZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0UGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6IFVwZGF0ZWQgZm9y
IHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6cHJvcGVydHlWYWx1ZSk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6OnByb3BlcnR5VmFsdWVEb3VibGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6cHJvcGVydHlW
YWx1ZUludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpudW1lcmljV2luZG93UHJvcGVydHkpOiBS
ZW5hbWVkIGZyb20gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUgZm9yIGJyZXZpdHkKKyAgICAg
ICAgYW5kIGZvciBjb25zaXN0ZW5jeSB3aXRoIEpTQmFzaWNzLmggZnVuY3Rpb25zLgorICAgICAg
ICAoV1RSOjpkdW1wUGF0aCk6IFVzZSBzdHJpbmdQcm9wZXJ0eSwgb2JqZWN0UHJvcGVydHksIGFu
ZCBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpyYW5nZVRvU3RyKTogVXNlIGF1dG8sIG51bWVy
aWNQcm9wZXJ0eSwgYW5kIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Ok5hdmlnYXRpb25UeXBl
VG9TdHJpbmcpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVuYW1lZCBmcm9t
IHNlY3VyaXR5T3JpZ2luVG9TdHIuIFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpmcmFt
ZVRvU3RyKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6cmVz
ZXRBZnRlclRlc3QpOiBSZW1vdmVkIHVubmVlZGVkIGxvY2FsLgorICAgICAgICAoV1RSOjpkdW1w
RnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCk6IFVzZSBhdXRvLgorICAgICAg
ICAoV1RSOjpkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogRGl0
dG8uCisgICAgICAgIChXVFI6OmR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OmR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKTogVXBkYXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdUUjo6dG9KUyk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6Omhhc0RvY3VtZW50RWxlbWVudCk6IFVzZSBvYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKTogVXNlIHNldEds
b2JhbE9iamVjdFByb3BlcnR5LAorICAgICAgICBhbmQgcGFzcyBmZXdlciBhcmd1bWVudHMgdG8g
bWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKTogU3RyZWFtbGluZSBjb2RlIGEgYml0LgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKTog
VXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Omxhc3RGaWxlVVJMUGF0aENvbXBvbmVudCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNi
YXJUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVh
Y2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGluZyk6IERpdHRv
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcik6IFVzZSB0b1dLLgor
ICAgICAgICAoV1RSOjpwYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6Om1haW5GcmFtZSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjptYWluSlNDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmRpc3BsYXkpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheUFuZFRyYWNrUmVwYWludHMpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6dG9X
Syk6IEFkZGVkIG92ZXJsb2FkIGZvciBkb3VibGUuCisgICAgICAgIChXVFI6OmNyZWF0ZVdLRGlj
dGlvbmFyeSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0
aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbik6IEFkZGVkLgorICAgICAgICAo
V1RSOjpwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NCk6IEFkZGVkLgor
ICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRk
ZWQuCisgICAgICAgIChXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IEFkZGVkLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wUGl4ZWxzIGNvbnN0KTogVXNlIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXREdW1wUGl4ZWxzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OndoYXRUb0R1bXAgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2hhdFRvRHVt
cCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRXYWl0VW50aWxEb25lKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNob3VsZFdhaXRVbnRpbERvbmUgY29uc3QpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlwdCk6IFVzZSBwYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpleGVjQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpmaW5k
T3B0aW9uc0Zyb21BcnJheSk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgYW5kIGNy
ZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNl
IHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmdNYXRjaGVzSW5QYWdl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0
SW5kaWNlcyk6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBhcnJheUxlbmd0aCBhbmQKKyAgICAgICAg
cmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIHN0ZDo6cm91bmQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk6IFVzZSBwYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVt
U2l6ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hl
RGlza1VzYWdlRm9yT3JpZ2luKTogRGl0dG8uCisgICAgICAgIChXVFI6OnN0cmluZ0FycmF5VG9K
Uyk6IFR3ZWFrZWQgY29kaW5nIHN0eWxlIGEgYml0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1lZGlhRGV2aWNl
c0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViUlRDTURO
U0lDRUNhbmRpZGF0ZXNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldEN1c3RvbVVzZXJBZ2VudCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdl
YkdMMkVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V3JpdGFi
bGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGUpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9u
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1
bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRQbHVnaW5zRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUpOiBVc2UgbWFpbkZyYW1lLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIpOiBSZW1vdmVkIGxvY2FsLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBdWRpb1Jlc3VsdCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6IFVzZSBwYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9i
amVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9y
KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9y
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKTog
VXNlIHJhbmdlLWJhc2VkIGZvciBsb29wLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24pOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5h
dmlnYXRpb24gY29uc3QpOgorICAgICAgICBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbik6CisgICAgICAgIFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y2FjaGVUZXN0UnVubmVy
Q2FsbGJhY2spOiBDaGFuZ2VkIG1hcCB0byBzdG9yZSBvYmplY3RzIGluc3RlYWQgb2YgdmFsdWVz
LgorICAgICAgICAoV1RSOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogU2ltcGxpZnkgc2luY2Ug
bWFwIGhhcyBvYmplY3RzLiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYXJUZXN0UnVubmVyQ2FsbGJhY2tzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T25seUFjY2VwdEZpcnN0UGFydHlD
b29raWVzKTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFVzZXJTdHlsZVNoZWV0RW5hYmxlZCk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24pOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsV2ViTm90
aWZpY2F0aW9uUGVybWlzc2lvbnMpOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6c2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBPcHRp
b25hbDxkb3VibGU+IGluc3RlYWQgb2YgYm9vbC9kb3VibGUKKyAgICAgICAgcGFpcnMsIGxldHRp
bmcgdGhlIElETCBiaW5kaW5ncyBkbyB0aGUgd29yayBmb3IgdXMuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFJl
bW92ZWQgbG9jYWwuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzRG9pbmdNZWRpYUNhcHR1
cmUgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlz
c2lvbkZvck9yaWdpbik6IFJlbW92ZWQgbG9jYWxzLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojp1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RDb3VudEZvck9yaWdpbik6IERJdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjYWxs
U2hvdWxkQ2xvc2VPbldlYlZpZXcpOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpxdWV1ZUxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IFJlbW92ZWQgYSBsb2NhbC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXMpOgorICAgICAgICBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQgY29uc3QpOiBVc2Ug
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKTogVXNlIG1h
aW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGls
ZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlv
bik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVOYXZp
Z2F0aW9uUG9saWN5QWZ0ZXJEZWxheSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNF
bmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldElnbm9yZXNWaWV3
cG9ydFNjYWxlTGltaXRzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNo
b3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0KTogVXNlIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHRJbW1lZGlhdGVseSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdENhbGxiYWNrKTog
VXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldEFsbG93ZWRN
ZW51QWN0aW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwKKyAgICAgICAgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbEN1c3Rv
bU1lbnVBY3Rpb24pOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvZXNTdGF0aXN0aWNzRG9tYWluSURF
eGlzdEluRGF0YWJhc2UpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
RW5hYmxlZCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppc1N0YXRpc3RpY3NFcGhlbWVyYWwpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzRGVidWdNb2RlKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRXhwaXJlZFN0
YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NWZXJ5UHJldmFs
ZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKTogVXNlIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZUlUUERh
dGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0dy
YW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Rp
ZFJ1blRlbGVtZXRyeUNhbGxiYWNrKTogVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSk6IFVzZSBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJpbmdUaW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NNYXhTdGF0aXN0aWNzRW50cmllcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKTog
VXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURh
dGFSZW1vdmFsKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NE
ZWxldGVDb29raWVzRm9ySG9zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UpOiBVc2UgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXApOiBVc2UgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aGFzU3RhdGlzdGljc0lzb2xh
dGVkU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlcik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NT
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmdldEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6Om1ha2VEb21haW5zVmFs
dWUpOiBGYWN0b3JlZCBvdXQuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2spOiBV
c2UgbWFrZURvbWFpbnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bG9hZGVkU3Vi
cmVzb3VyY2VEb21haW5zKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKTogVXNl
IG1ha2VEb21haW5zVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFkZE1vY2tNZWRp
YURldmljZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjbGVhck1vY2tNZWRpYURldmljZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6cmVtb3ZlTW9ja01lZGlhRGV2aWNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnJlc2V0TW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQpOiBV
c2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCk6IFVzZSBwb3N0U3luY2hy
b25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dh
bWVwYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRE
ZXRhaWxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFk
QXhpc1ZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1l
cGFkQnV0dG9uVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T3Bl
blBhbmVsRmlsZXMpOiBVc2UgbWFpbkpTQ29udGV4dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3Ry
aW5nLAorICAgICAgICBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRPcGVuUGFuZWxGaWxlc01lZGlhSWNvbik6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBw
b3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlbW92ZUFsbFNlc3Np
b25DcmVkZW50aWFscyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6Y2xlYXJET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpjbGVhckRPTUNhY2hlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpoYXNET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZSk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZSk6IFVzZSBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QXBw
bGljYXRpb25NYW5pZmVzdFRoZW4pOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmluamVjdFVzZXJTY3JpcHQpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdl
ZE1lc3NhZ2VGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6YWRkVGVzdEtleVRvS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYW5VcEtleWNoYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmtleUV4aXN0c0luS2V5Y2hhaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXJ2ZXJUcnVzdEV2YWx1
YXRpb25DYWxsYmFja0NhbGxzQ291bnQpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxk
RGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseSk6IFVzZQorICAgICAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphYm9ydE1vZGFs
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmR1bXBBZENsaWNrQXR0cmlidXRp
b24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92
YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9m
ZnNjcmVlbkNhbnZhc0VuYWJsZWQpOiBVc2Ugb3ZlcnJpZGVQcmVmZXJlbmNlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpj
bGVhckFwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBCb3VuZERvbWFpbnMpOiBVc2UgbWFpbkpTQ29udGV4
dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3RyaW5nLAorICAgICAgICBhbmQgdG9XSy4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6cG9zdE1lc3NhZ2UpOiBBZGRlZC4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOiBVcGRhdGVkIGZvciB0
aGUgYWJvdmUuIEFsc28gY2hhbmdlZAorICAgICAgICBvdmVycmlkZVByZWZlcmVuY2Ugb3QgYSBz
dGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OlRleHRJbnB1dENvbnRyb2xsZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6VGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdCk6IFVz
ZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBE
ZWxldGVkLiBVc2UgdGhlIG9uZSBmcm9tIEpTQmFzaWNzLmggbm93LgorICAgICAgICAoV1RSOjpj
cmVhdGVDb21wb3NpdGlvbkhpZ2hsaWdodERhdGEpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3Ry
aW5nLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVKU1N0cmluZyBmcm9tIEpTQmFzaWNzLmggbm93Lgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRV
SUVsZW1lbnRzKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRGVz
Y3JpcHRpb25PZkF0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0
aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omxhbmd1YWdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnZhbHVlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNGb2N1c2VkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRlIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9w
RWZmZWN0cyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29s
dW1ucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZSb3dzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2li
aWxpdHlWYWx1ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZT
Y3JlZW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDb2xsYXBzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tOgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRlclByb3h5OjpFdmVudFNlbmRlclByb3h5KTogSW5pdGlhbGl6ZSBpbiB0aGUgY2xh
c3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2Vu
ZGVyUHJveHkpOiBEZWxldGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbToKKyAgICAgICAgKFdUUjo6bWFr
ZUpTQXJyYXkpOiBSZXR1cm4gYSBKU09iamVjdFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VBcnJheVJl
ZkZvckFycmF5LgorICAgICAgICAoV1RSOjptYWtlSlNPYmplY3QpOiBSZXR1cm4gYSBKU09iamVj
dFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5LgorICAgICAgICAo
V1RSOjptYWtlVmFsdWVSZWZGb3JWYWx1ZSk6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAg
ICAgKFdUUjo6c2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENy
aXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nCisgICAgICAgIGFuZCBhcnJheUxlbmd0aC4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToK
KyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVK
U1N0cmluZyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6Y29udmVydFZl
Y3RvclRvT2JqZWN0QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJlbmFtZWQgZnJvbSBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheS4KKyAgICAgICAgKFdUUjo6
c2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYSk6IFVzZSB0b1dURlN0
cmluZyBhbmQgYXJyYXlMZW5ndGguCisgICAgICAgIChXVFI6OnNlYXJjaFRleHRQYXJhbWV0ZXJp
emVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm93SGVhZGVycyBjb25zdCk6IFVzZSBtYWtlSlNBcnJheS4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJh
eUF0dHJpYnV0ZVZhbHVlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlYXJjaFRleHRXaXRoQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlIGNvbnN0KTogVXNl
IGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
b2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppbnNwZWN0b3JUZXN0U3R1YlVSTCk6IFJlbW92ZSBsb2NhbHMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oOiBBZGRlZCB0b1dLU3RyaW5nIG92
ZXJsb2FkIHRoYXQgY29udmVydHMgZnJvbQorICAgICAgICBhIEpTVmFsdWVSZWYsIEpTU3RyaW5n
UmVmLCBvciBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYW5kIHRvV0sgb3ZlcmxvYWQgdGhhdCBj
b252ZXJ0cworICAgICAgICBmcm9tIGEgY29uc3QgY2hhciouCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemUpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpjaGVja0ZvcldvcmxkTGVha3MpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6
Y29udGVudEV4dGVuc2lvbkpTT05QYXRoKTogVXNlIHRvU1RELgorICAgICAgICAoV1RSOjpUZXN0
Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QpOiBVc2UgdG9XSy4K
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSk6IFVzZSBzdHJpbmdWYWx1ZQorICAgICAgICBhbmQgdWludDY0VmFs
dWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50
c0xpc3QpOiBVc2UgZGljdGlvbmFyeVZhbHVlIGFuZAorICAgICAgICB1aW50NjRWYWx1ZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIGRpY3Rpb25hcnlWYWx1ZSwKKyAgICAgICAgc3RyaW5nVmFsdWUsIHVpbnQ2
NFZhbHVlLCBkb3VibGVWYWx1ZSwgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0QmxvY2tBbGxQbHVnaW5z
KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5TdXBw
b3J0ZWRNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKTogUmVtb3ZlZCBsb2NhbC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSk6IFVzZSBhdXRvIGFuZCB0b1dURlN0cmluZworICAgICAgICBpbnN0ZWFkIG9mIHRvU1RE
LgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24pOiBVc2UgT3B0aW9uYWwgaW5zdGVhZCBvZiBwYWlycworICAgICAgICBvZiBib29sIGFuZCBk
b3VibGUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpoYW5kbGVDaGVja09mVXNlck1l
ZGlhUGVybWlzc2lvbkZvck9yaWdpbik6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3Np
YmxlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJ
ZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6IFVzZSB0b1dLLgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6
OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
VGVzdEluY292YXRpb24pOiBVc2UgdG9XVEZTdHJpbmcuCisgICAgICAgIChXVFI6OlRlc3RJbnZv
Y2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KTogVXNlIGF1dG8gYW5kIHNldFZh
bHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKTogVXNlIHBvc3RQYWdl
TWVzc2FnZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UKKyAg
ICAgICAgYW5kIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
UmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZQorICAgICAg
ICBkaWN0aW9uYXJ5VmFsdWUsIGJvb2xlYW5WYWx1ZSwgdmFsdWUsIHN0cmluZ1ZhbHVlLCBkb3Vi
bGVWYWx1ZSwgYW5kCisgICAgICAgIG9wdGlvbmFsRG91YmxlVmFsdWUuCisgICAgICAgIChXVFI6
OlRlc3RJbnZvY2F0aW9uOjp1aVNjcmlwdERpZENvbXBsZXRlKTogVXNlIHBvc3RQYWdlTWVzc2Fn
ZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRCZWdpblN3
aXBlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OndpbGxFbmRTd2lwZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
RW5kU3dpcGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92
ZVN3aXBlU25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246Om5v
dGlmeURvd25sb2FkRG9uZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
ZGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJz
aXRlRGF0YVJlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJ
bnZvY2F0aW9uOjpkaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OmRpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVzZXRTdGF0aXN0aWNzVG9Db25z
aXN0ZW50U3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNl
dEJsb2NrQ29va2llc0Zvckhvc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRp
b246OmRpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRMYXN0U2Vlbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkTWVyZ2VTdGF0aXN0aWMpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291
cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21h
aW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVBbGxT
ZXNzaW9uQ3JlZGVudGlhbHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldEFwcEJvdW5kRG9tYWlucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2Nh
dGlvbjo6cGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24pOiBEaXR0by4KKworICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICBBZGRlZCBKU0Jhc2ljcy5oIHRvIERpY3Rpb25hcnlGdW5jdGlvbnMuaCB0byBhcHBy
b3ByaWF0ZSB0YXJnZXRzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdUUjo6U2NyaXB0SXRlbTo6U2NyaXB0SXRlbSk6IFVzZSB0
b1dLLgorICAgICAgICAoV1RSOjpXb3JrUXVldWVNYW5hZ2VyOjpxdWV1ZUxvYWRIVE1MU3RyaW5n
KTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29u
dHJvbGxlckNvY29hLmg6IE1ha2UgbW9zdCBmdW5jdGlvbnMgcHJpdmF0ZS4KKworICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW06CisgICAg
ICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpvdmVycmlkZVByZWZlcmVuY2UpOiBV
c2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MuaDogTWFya2VkIHRoZSBjbGFzcyBmaW5hbCBhbmQgbWFkZQorICAgICAg
ICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6
IERlbGV0ZWQuIFVzZSB0aGUgb25lIGluIEpTQmFzaWNzLmguCisgICAgICAgIChXVFI6OnBhcnNl
TW9kaWZpZXJBcnJheSk6IFVzZSB0aGUgbmV3IHRvV1RGU3RyaW5nIG92ZXJsb2FkLgorICAgICAg
ICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJl
S2V5Ym9hcmQpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50
U2VuZGVyUHJveHkubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2Vu
ZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3duKTogVXNlIHRvV1RGU3RyaW5nLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmg6IE1hcmtl
ZCB0aGUgY2xhc3MgZmluYWwgYW5kIG1hZGUKKyAgICAgICAgbW9zdCBmdW5jdGlvbnMgcHJpdmF0
ZS4KKwogMjAyMC0wOS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHJ1bi13ZWJraXQtdGVzdHMgY29kZSB0aGF0IHN0cmlwcyB0cmFpbGluZyBzcGFj
ZXMgd2hlbiBjb21wYXJpbmcgZXhwZWN0ZWQudHh0IGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKaW5kZXggMWEwYzE2NzA2YjJhZTQy
NjBlMzJkMjkwNDQ5YmYyZDY1Y2ZhM2RmYS4uOWUyNDBlNTU5Y2E0NTIzMzc0Nzk4NGE2YmE5MzUx
NTRhYWNjZDdkZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogCiAvLyBTdGF0aWMgVmFsdWUgR2V0dGVycwogCkBA
IC00NywxNSArNDgsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRSb290RWxlbWVudENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzTwogCiAvLyBPYmplY3QgQ3Jl
YXRpb24KIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIiKSk7Ci0gICAgCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpT
Q2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyT2JqZWN0ID0g
SlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVsZWFz
ZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJTdHIuZ2V0KCksIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgSlNPYmplY3RNYWtl
KGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQoKSwgdGhpcykpOwogfQogCiBzdGF0aWMgSlNW
YWx1ZVJlZiBsb2dGb2N1c0V2ZW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwg
SlNWYWx1ZVJlZiopCkBAIC0xNTIsOSArMTQ3LDkgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0UGxh
dGZvcm1OYW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXMK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcGxhdGZvcm1OYW1lLmdldCgp
KTsKIH0KIAotSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFzcygp
CitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRl
SlNDbGFzcygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25z
W10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRpY0Z1bmN0aW9uIGZ1bmN0aW9uc1td
ID0gewogICAgICAgICB7ICJsb2dGb2N1c0V2ZW50cyIsIGxvZ0ZvY3VzRXZlbnRzQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAibG9nVmFsdWVDaGFuZ2VFdmVudHMiLCBsb2dWYWx1ZUNoYW5n
ZUV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImxvZ1Njcm9sbGluZ1N0YXJ0RXZl
bnRzIiwgbG9nU2Nyb2xsaW5nU3RhcnRFdmVudHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMTY2LDIx
ICsxNjEsMTggQEAgSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFz
cygpCiAgICAgICAgIHsgImVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSIsIGVuYWJsZUVuaGFu
Y2VkQWNjZXNzaWJpbGl0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAg
ICAgfTsKLQotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAg
IHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAi
Zm9jdXNlZEVsZW1lbnQiLCBnZXRGb2N1c2VkRWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgInJvb3RFbGVtZW50IiwgZ2V0Um9vdEVsZW1lbnRDYWxsYmFjaywgMCwga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7ICJlbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkIiwgZ2V0RW5oYW5jZWRB
Y2Nlc3NpYmlsaXR5RW5hYmxlZENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInBsYXRm
b3JtTmFtZSIsIGdldFBsYXRmb3JtTmFtZUNhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
MCwgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFz
c0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyIiwgMCwgc3RhdGljVmFsdWVzLCBzdGF0aWNGdW5jdGlvbnMsCisg
ICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAg
IDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgMCwg
dmFsdWVzLCBmdW5jdGlvbnMsCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7
CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pKTsKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAppbmRleCAxZGM3
ZDNiNTYzYTE1NGY0Y2U5YmY3YTMwMzBjOGM1YTc2OTdmMzlhLi44YTI4N2M0OGIxZGY1MzZiNDc1
YjYxODQxN2MyNjEzNWZiMzg2MTI2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAg
ICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKICAgICB+QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZv
aWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgLy8gQ29udHJvbGxlciBN
ZXRob2RzIC0gcGxhdGZvcm0taW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zCiAgICAgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCByb290RWxlbWVudCgpOwpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNzKCk7
CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsKIAog
I2lmIFBMQVRGT1JNKFdJTikKICAgICBIV0lORVZFTlRIT09LIG1fZm9jdXNFdmVudEhvb2sgeyBu
dWxscHRyIH07CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuY3BwCmluZGV4IDBlNWE1MGY2YjlkM2NlNWNhNzdiYTQ0ODY4N2MwMDljYmIxNzVkMjAuLjhl
Zjg1ZWVkZjA4NGQ2NzYyMjcxY2FmMmM4ZjQ0YWI4NTQ3OTI2NzEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCkBAIC0yMDYsNyArMjA2LDcg
QEAgc3RhdGljIEpTVmFsdWVSZWYgdWlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVkaWNhdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBz
dGFydEVsZW1lbnQgPSBudWxscHRyOwogICAgIGJvb2wgaXNEaXJlY3Rpb25OZXh0ID0gdHJ1ZTsK
ICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleSA9IG51bGxwdHI7Ci0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHNlYXJjaFRleHQgPSBudWxscHRyOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBzZWFyY2hUZXh0OwogICAgIGJvb2wgdmlzaWJsZU9ubHkgPSBmYWxzZTsKICAgICBib29s
IGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSA9IGZhbHNlOwogICAgIGlmIChhcmd1bWVudENvdW50
ID49IDUgJiYgYXJndW1lbnRDb3VudCA8PSA2KSB7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0gYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KaW5k
ZXggZWNlNTFlYTM5YTUxNjgzNTRiZDU2OTQ2MzU5MDg2ZDkwMjJlYTE5ZC4uMTRjNjI3MGY4MjMx
ZGMwZjI2YTA1ZTY5NWRhODQ3YmRmOGU0OGM4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQpA
QCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsMTAgKzQz
MSwxMCBAQCBzdWIgX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yCiB7CiAgICAgbXkgKCRzZWxmLCAk
dHlwZSwgJGFyZ3VtZW50TmFtZSkgPSBAXzsKIAotICAgIHJldHVybiAiSlNWYWx1ZVRvTnVsbGFi
bGVCb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9v
bGVhbiIgJiYgJHR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsQm9vbChj
b250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0
eXBlLT5pc051bGxhYmxlOwogICAgIHJldHVybiAiSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCAk
YXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAi
JGFyZ3VtZW50TmFtZSIgaWYgJHR5cGUtPm5hbWUgZXEgIm9iamVjdCI7Ci0gICAgcmV0dXJuICJh
ZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIp
KSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJl
dHVybiAiY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICQkc2VsZntj
b2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gIkpTVmFsdWVU
b051bWJlcihjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSIgaWYgJCRzZWxme2NvZGVH
ZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAidG8iIC4gX2lt
cGxlbWVudGF0aW9uQ2xhc3NOYW1lKCR0eXBlKSAuICIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSki
OwogfQpAQCAtNDcyLDExICs0NzIsMTEgQEAgc3ViIF9yZXR1cm5FeHByZXNzaW9uCiAgICAgbXkg
KCRzZWxmLCAkcmV0dXJuVHlwZSwgJGV4cHJlc3Npb24pID0gQF87CiAKICAgICByZXR1cm4gIkpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAidW5k
ZWZpbmVkIjsKLSAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICRyZXR1
cm5UeXBlLT5pc051bGxhYmxlOworICAgIHJldHVybiAibWFrZVZhbHVlKGNvbnRleHQsICR7ZXhw
cmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5
cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwg
JHtleHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICBy
ZXR1cm4gIiR7ZXhwcmVzc2lvbn0iIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJvYmplY3QiOwog
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCRyZXR1cm5UeXBlKTsKLSAg
ICByZXR1cm4gIkpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0u
Z2V0KCkpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkcmV0dXJuVHlw
ZSk7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSki
IGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKICAg
ICByZXR1cm4gInRvSlMoY29udGV4dCwgV1RGOjpnZXRQdHIoJHtleHByZXNzaW9ufSkpIjsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKaW5kZXggNGEzN2JmM2ExM2RhNGNh
ZWVhNDBhMGNmOGE3MDlmZTU4ZDM0ZWE0Yy4uYWVmN2VjOGE1MDViZmM1MWE4N2UzZDJmOWUxNjc1
MzlkZWUyOWRjNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVy
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcyICsy
OSw0OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgog
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotCi1HQ0NvbnRyb2xsZXI6OkdDQ29udHJvbGxlcigp
Ci17Ci19Ci0KLUdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcigpCi17Ci19CisjaW5jbHVkZSAi
SlNCYXNpY3MuaCIKIAogLy8gU3RhdGljIEZ1bmN0aW9ucwogCiBzdGF0aWMgSlNWYWx1ZVJlZiBj
b2xsZWN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+Y29sbGVjdCgpOworICAg
IGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLmNvbGxlY3QoKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
UmVmIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKLSAgICBib29sIHdhaXRVbnRpbERvbmUgPSBmYWxzZTsKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA+IDApCi0gICAgICAgIHdhaXRVbnRpbERvbmUgPSBKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1swXSk7Ci0KLSAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCh3YWl0VW50aWxE
b25lKTsKLQorICAgIGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBib29sIHdhaXRVbnRpbERv
bmUgPSBhcmd1bWVudENvdW50ID4gMCAmJiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVu
dGlsRG9uZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQog
CiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRKU09iamVjdENvdW50Q2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0g
ICAgc2l6ZV90IGpzT2JqZWN0Q291bnQgPSBjb250cm9sbGVyLT5nZXRKU09iamVjdENvdW50KCk7
Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwganNPYmplY3RDb3VudCk7
CisgICAgYXV0byYgY29udHJvbGxlciA9ICpzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJl
cihjb250ZXh0LCBjb250cm9sbGVyLmdldEpTT2JqZWN0Q291bnQoKSk7CiB9CiAKIC8vIE9iamVj
dCBDcmVhdGlvbgogCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCkKIHsKLSAgICBhdXRvIGdjQ29udHJvbGxlclN0ciA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJHQ0NvbnRyb2xsZXIiKSk7Ci0KLSAgICBKU0NsYXNzUmVmIGNs
YXNzUmVmID0gZ2V0SlNDbGFzcygpOwotICAgIEpTVmFsdWVSZWYgZ2NDb250cm9sbGVyT2JqZWN0
ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVs
ZWFzZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRv
d09iamVjdCwgZ2NDb250cm9sbGVyU3RyLmdldCgpLCBnY0NvbnRyb2xsZXJPYmplY3QsIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUs
IGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAi
R0NDb250cm9sbGVyIiwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQo
KSwgdGhpcykpOwogfQogCi1KU0NsYXNzUmVmIEdDQ29udHJvbGxlcjo6Z2V0SlNDbGFzcygpCitK
U1JldGFpblB0cjxKU0NsYXNzUmVmPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewot
ICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0geworICAgIHN0
YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKICAgICAgICAg
eyAiY29sbGVjdCIsIGNvbGxlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJjb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWQiLCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJnZXRKU09iamVjdENvdW50IiwgZ2V0SlNPYmplY3RDb3VudENhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBK
U0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNz
QXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIHN0YXRpY0Z1bmN0aW9ucywKKyAg
ICBzdGF0aWMgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAg
MCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiR0NDb250cm9sbGVyIiwgMCwgMCwgZnVuY3Rpb25z
LAogICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiAgICAgfTsKLQotICAg
IHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJldHVybiBhZG9w
dChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJv
bGxlci5oCmluZGV4IDY0MjQzODRkZjUzMGU4YzFmZGFlOGZiNjEzMTFiZjBhZGM0YTZhOGYuLjM3
YWE0NmE3NzRjZTNlNzBiODc4OWQ0NDNmMWU0MTgxNGFjNThmNWMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0dDQ29udHJvbGxlci5oCkBAIC0yNiwxOSArMjYsMTUgQEAKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBHQ0NvbnRyb2xsZXJfaAotI2RlZmluZSBHQ0NvbnRyb2xsZXJfaAorI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KIAogY2xhc3MgR0NDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBHQ0NvbnRyb2xsZXIoKTsKLSAgICB+R0NDb250cm9sbGVyKCk7Ci0KLSAg
ICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5k
b3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIC8vIENvbnRyb2xsZXIgTWV0aG9kcyAtIHBs
YXRmcm9tIGluZGVwZW5kYW50IGltcGxlbWVudGF0aW9ucwogICAgIHZvaWQgY29sbGVjdCgpIGNv
bnN0OwpAQCAtNDYsNyArNDIsNSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGdldEpTT2JqZWN0Q291
bnQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNz
KCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsK
IH07Ci0KLSNlbmRpZiAvLyBHQ0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVy
LmNwcAppbmRleCA1ZTUzNWFmMWRlYWQ4NDJkMmVmNGY1Zjc2NjAyYzgzYTk1MGI3NjUyLi4zN2Y2
OTFjYjc5NmI1NjM5MjYyODA0ZWUzZjQwMWNhYmRhZThmMGUxIDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0UnVubmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSAi
V29ya1F1ZXVlSXRlbS5oIgpAQCAtMzgsMTAgKzM5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDVGVzdFJ1bm5lclV0aWxzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVk1JbmxpbmVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Mb2dJ
bml0aWFsaXphdGlvbi5oPgpAQCAtNDg5LDcgKzQ4Nyw2IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRp
c3BsYXlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dz
IGltcGxlbWVudGF0aW9uCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRy
b2xsZXItPmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCk7CiAKQEAgLTQ5OCwxMiArNDk1LDEwIEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGVuY29kZUhvc3RO
YW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBt
YWMgaW1wbGVtZW50YXRpb24KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
KTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBhdXRvIGVuY29kZWRIb3N0TmFtZSA9IGNvbnRyb2xsZXItPmNvcHlFbmNv
ZGVkSG9zdE5hbWUobmFtZS5nZXQoKSk7CkBAIC01MTIsMjIgKzUwNywxMiBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBleGVjQ29tbWFuZENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgTWFjICYgV2luZG93cyBp
bXBsZW1lbnRhdGlvbnMuCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9w
dChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQorICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICAvLyBJZ25vcmluZyB0aGUgc2Vj
b25kIHBhcmFtZXRlciAodXNlckludGVyZmFjZSksIGFzIHRoaXMgY29tbWFuZCBlbXVsYXRlcyBh
IG1hbnVhbCBhY3Rpb24uCi0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdmFsdWU7Ci0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMykgewotICAgICAgICB2YWx1ZSA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKLSAgICAg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmFsdWUgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotCisgICAgYXV0byB2YWx1ZSA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDIgPyBhcmd1bWVu
dHNbMl0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5leGVjQ29tbWFuZChuYW1lLmdldCgpLCB2YWx1ZS5nZXQoKSk7CkBAIC01NDEs
MTEgKzUyNiw4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGZpbmRTdHJpbmdDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sCiAgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAK
LSAgICBhdXRvIHRhcmdldCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAg
SlNPYmplY3RSZWYgb3B0aW9ucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIHRhcmdl
dCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKKyAgICBhdXRv
IG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBudWxscHRy
KTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmZpbmRTdHJpbmcoY29udGV4dCwgdGFyZ2V0
LmdldCgpLCBvcHRpb25zKSk7CkBAIC01NjYsOCArNTQ4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
aXNDb21tYW5kRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW4KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29u
dGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIApA
QCAtNTc5LDEwICs1NjAsOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBvdmVycmlkZVByZWZlcmVuY2VD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZgogICAgIGlmIChhcmd1
bWVudENvdW50IDwgMikKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogCi0gICAgYXV0byBrZXkgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAg
ICBhdXRvIHZhbHVlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byBr
ZXkgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgYXV0
byB2YWx1ZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzFdKTsKIAog
ICAgIC8vIFNob3VsZCB1c2UgYDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zv
cndhcmRDYWNoZT10cnVlIF0gLS0+YCBpbnN0ZWFkLgogICAgIFJFTEVBU0VfQVNTRVJUKCFKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleS5nZXQoKSwgIldlYktpdFVzZXNCYWNrRm9yd2Fy
ZENhY2hlUHJlZmVyZW5jZUtleSIpKTsKQEAgLTY2MiwxNSArNjQxLDEwIEBAIHN0YXRpYyBKU1Zh
bHVlUmVmIHF1ZXVlTG9hZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gdXJsID0gYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAg
IGF1dG8gdXJsID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOwog
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
dGFyZ2V0OwotICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAgdGFyZ2V0ID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bikpOwotICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIH0gZWxzZQotICAgICAgICB0
YXJnZXQgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgIGF1
dG8gdGFyZ2V0ID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudENvdW50ID4g
MSA/IGFyZ3VtZW50c1sxXSA6IG51bGxwdHIpOwogCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnF1ZXVlTG9hZCh1cmwuZ2V0KCksIHRhcmdldC5nZXQoKSk7
CkBAIC02OTIsNyArNjY2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2FkSFRNTFN0cmlu
Z0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZgogICAgICAgICBiYXNl
VVJMID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOwogICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogICAgIH0gZWxzZQotICAg
ICAgICBiYXNlVVJMID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsK
KyAgICAgICAgYmFzZVVSTCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIAogICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKIApAQCAtMjA0NSwzNCArMjAxOSwyNCBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBydW5VSVNjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiwgSlNPYmplYwogCiBzdGF0aWMgdm9pZCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUoSlNPYmpl
Y3RSZWYgb2JqZWN0KQogewotICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIGNvbnRyb2xs
ZXItPmRlcmVmKCk7CisgICAgc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKS0+ZGVyZWYoKTsKIH0KIAogLy8gT2JqZWN0IENyZWF0aW9uCiAKLXZvaWQg
VGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFRlc3RSdW5u
ZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byB0
ZXN0UnVubmVyU3RyID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRlc3RS
dW5uZXIiKSk7CiAgICAgcmVmKCk7Ci0KLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlND
bGFzcygpOwotICAgIEpTVmFsdWVSZWYgbGF5b3V0VGVzdENvbnRvbGxlck9iamVjdCA9IEpTT2Jq
ZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xh
c3NSZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3Qs
IHRlc3RSdW5uZXJTdHIuZ2V0KCksIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4
Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGVz
dFJ1bm5lciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCksIHRo
aXMpKTsKIH0KIAotSlNDbGFzc1JlZiBUZXN0UnVubmVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWlu
UHRyPEpTQ2xhc3NSZWY+IFRlc3RSdW5uZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewotICAgIHN0YXRp
YyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMgPSBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMo
KTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zID0gVGVzdFJ1
bm5lcjo6c3RhdGljRnVuY3Rpb25zKCk7Ci0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNs
YXNzRGVmaW5pdGlvbiA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiVGVz
dFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAorICAgIHN0YXRpYyBj
b25zdCBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0geworICAgICAgICAwLCBrSlNDbGFz
c0F0dHJpYnV0ZU5vbmUsICJUZXN0UnVubmVyIiwgMCwgc3RhdGljVmFsdWVzKCksIHN0YXRpY0Z1
bmN0aW9ucygpLAogICAgICAgICAwLCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNs
YXNzRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRp
b24pKTsKIH0KIAogLy8gQ29uc3RhbnRzCkBAIC0yMTA3LDkgKzIwNzEsOSBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBnZXRSRU5ERVJfVFJFRV9TSE9XX0xBWUVSX0ZSQUdNRU5UUyhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYgogICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAzMik7
CiB9CiAKLUpTU3RhdGljVmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCitjb25zdCBK
U1N0YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogewotICAgIHN0YXRpYyBK
U1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNT
dGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAiZGlkQ2FuY2VsQ2xpZW50UmVkaXJl
Y3QiLCBnZXREaWRDYW5jZWxDbGllbnRSZWRpcmVjdCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJ0
aW1lb3V0IiwgZ2V0VGltZW91dENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImdsb2Jh
bEZsYWciLCBnZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIHNldEdsb2JhbEZsYWdDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCkBAIC0yMTI3LDEyICsyMDkxLDEyIEBAIEpTU3RhdGlj
VmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCiAgICAgICAgIHsgIlJFTkRFUl9UUkVF
X1NIT1dfTEFZRVJfRlJBR01FTlRTIiwgZ2V0UkVOREVSX1RSRUVfU0hPV19MQVlFUl9GUkFHTUVO
VFMsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAwLCAwLCAwLCAwIH0KICAgICB9OwotICAgIHJldHVy
biBzdGF0aWNWYWx1ZXM7CisgICAgcmV0dXJuIHZhbHVlczsKIH0KIAotSlNTdGF0aWNGdW5jdGlv
biogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKK2NvbnN0IEpTU3RhdGljRnVuY3Rpb24q
IFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRp
Y0Z1bmN0aW9uIGZ1bmN0aW9uc1tdID0gewogICAgICAgICB7ICJhYm9ydE1vZGFsIiwgYWJvcnRN
b2RhbENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZERpc2FsbG93ZWRVUkwiLCBhZGRE
aXNhbGxvd2VkVVJMQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkVVJMVG9SZWRpcmVj
dCIsIGFkZFVSTFRvUmVkaXJlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMjI5Nyw3ICsyMjYxLDcg
QEAgSlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKICAgICAg
ICAgeyAwLCAwLCAwIH0KICAgICB9OwogCi0gICAgcmV0dXJuIHN0YXRpY0Z1bmN0aW9uczsKKyAg
ICByZXR1cm4gZnVuY3Rpb25zOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxT
dHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKQEAgLTIzNDIs
MTQgKzIzMDYsMTEgQEAgdm9pZCBUZXN0UnVubmVyOjppZ25vcmVMZWdhY3lXZWJOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMoKQogCiB2b2lkIFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyRmlyZWQoKQogewotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAiRkFJTDogVGlt
ZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iOwotICAgIGZwcmlu
dGYodGVzdFJlc3VsdCwgIiVzIiwgbWVzc2FnZSk7CisgICAgZnB1dHMoIkZBSUw6IFRpbWVkIG91
dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIiwgdGVzdFJlc3VsdCk7CiAK
LSAgICBhdXRvIGFjY3VtdWxhdGVkTG9ncyA9IGdldEFuZFJlc2V0QWNjdW11bGF0ZWRMb2dzKCk7
Ci0gICAgaWYgKCFhY2N1bXVsYXRlZExvZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIG1lc3NhZ2UgPSAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4iOwotICAg
ICAgICBmcHJpbnRmKHRlc3RSZXN1bHQsICIlcyVzXG4iLCBtZXNzYWdlLCBhY2N1bXVsYXRlZExv
Z3MudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQorICAgIGF1dG8gbG9ncyA9IGdldEFuZFJlc2V0QWNj
dW11bGF0ZWRMb2dzKCk7CisgICAgaWYgKCFsb2dzLmlzRW1wdHkoKSkKKyAgICAgICAgZnByaW50
Zih0ZXN0UmVzdWx0LCAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4lc1xuIiwg
bG9ncy51dGY4KCkuZGF0YSgpKTsKIAogICAgIG5vdGlmeURvbmUoKTsKIH0KQEAgLTI0MDMsMjQg
KzIzNjQsMjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRBY2N1bW11bGF0ZUxvZ3NGb3JDaGFubmVs
KEpTU3RyaW5nUmVmIGNoYW5uZWwpCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRMb2dDaGFu
bmVsVG9BY2N1bXVsYXRlKHsgYnVmZmVyLmdldCgpIH0pOwogfQogCi10eXBlZGVmIFdURjo6SGFz
aE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVJlZj4gQ2FsbGJhY2tNYXA7Cit1c2luZyBDYWxsYmFja01h
cCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNPYmplY3RSZWY+Owogc3RhdGljIENhbGxiYWNr
TWFwJiBjYWxsYmFja01hcCgpCiB7CiAgICAgc3RhdGljIENhbGxiYWNrTWFwJiBtYXAgPSAqbmV3
IENhbGxiYWNrTWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2Fj
aGVUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIEpTVmFsdWVSZWYgY2FsbGJhY2sp
Cit2b2lkIFRlc3RSdW5uZXI6OmNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4
LCBKU1ZhbHVlUmVmIGNhbGxiYWNrVmFsdWUpCiB7Ci0gICAgaWYgKCFjYWxsYmFjaykKKyAgICBh
dXRvIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKKyAgICBpZiAoIWNhbGxiYWNrVmFs
dWUgfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYWxsYmFja1ZhbHVlKSkKICAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gY2FsbGJhY2sgPSAoSlNPYmplY3RSZWYpY2FsbGJhY2tWYWx1ZTsK
IAogICAgIGlmIChjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkgewotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBj
YWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICVkKVxuIiwgaW5kZXgpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5l
ciBjYWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICV1KVxuIiwgaW5kZXgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluRnJhbWVK
U0NvbnRleHQoKTsKICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAg
Y2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNrKTsKIH0KQEAgLTI0MzAsMjIgKzIzOTIs
MTggQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGlu
ZGV4LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY28KICAgICBpZiAoIWNhbGxiYWNrTWFwKCkuY29u
dGFpbnMoaW5kZXgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOwotICAgIGlmIChKU09iamVjdFJlZiBjYWxsYmFjayA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpLCAwKSkg
ewotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywg
MCk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgaWYgKGF1
dG8gY2FsbGJhY2sgPSBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpKSB7CisgICAgICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdldEdsb2JhbE9i
amVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBudWxscHRyKTsKICAgICAg
ICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAgfQogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OmNsZWFyVGVzdFJ1bm5lckNhbGxiYWNrcygpCiB7Ci0gICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKLQotICAgIGZvciAoYXV0byYgaXRl
ciA6IGNhbGxiYWNrTWFwKCkpIHsKLSAgICAgICAgaWYgKEpTT2JqZWN0UmVmIGNhbGxiYWNrID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGl0ZXIudmFsdWUsIDApKQotICAgICAgICAgICAgSlNW
YWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgfQotCisgICAgYXV0byBjb250
ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNh
bGxiYWNrTWFwKCkudmFsdWVzKCkpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwg
Y2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFwKCkuY2xlYXIoKTsKIH0KIApAQCAtMjUwOCwxNiAr
MjQ2NiwxMSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGZpbGVzVmFsdWUpCiB7CiAgICAgaWYgKCFKU1ZhbHVlSXNB
cnJheShjb250ZXh0LCBmaWxlc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgSlNPYmpl
Y3RSZWYgZmlsZXMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZmlsZXNWYWx1ZSwgbnVsbHB0
cik7Ci0gICAgc3RhdGljIGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgZmlsZXNMZW5ndGhW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZmlsZXMsIGxlbmd0aFByb3BlcnR5
LmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBmaWxl
c0xlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZmlsZXMgPSAoSlNPYmpl
Y3RSZWYpZmlsZXNWYWx1ZTsKKyAgICBhdXRvIGZpbGVzTGVuZ3RoID0gV1RSOjphcnJheUxlbmd0
aChjb250ZXh0LCBmaWxlcyk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVzLmNsZWFyKCk7Ci0gICAg
YXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbGVzTGVuZ3RoOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIGZpbGVWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZpbGVzLCBpLCBudWxscHRyKTsKICAgICAg
ICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgZmlsZVZhbHVlKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCmluZGV4IDE2NzEyMDU4YTEwY2U5
ODlhM2M4ZDQzZDY0NGY5YTllMzAwZDQwZGUuLmU4NTdhYTRkY2RhMjk3YzRmZTNlNzZhYzdlOWVh
ZjA1YTA5YzgwYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKQEAgLTU0LDcgKzU0LDcg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xlYW51cCgpOwogCi0gICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYp
OwogCiAgICAgdm9pZCBhZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCk7CiAgICAgY29u
c3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBhbGxvd2VkSG9zdHMoKSBjb25zdCB7IHJldHVybiBt
X2FsbG93ZWRIb3N0czsgfQpAQCAtNDk3LDcgKzQ5Nyw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp2
ZWN0b3I8Y2hhcj4gbV9vcGVuUGFuZWxGaWxlc01lZGlhSWNvbjsKICNlbmRpZgogCi0gICAgc3Rh
dGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOwotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBz
dGF0aWNWYWx1ZXMoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rp
b25zKCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3Mo
KTsKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzKCk7CisgICAg
c3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOwogfTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbQppbmRleCA2MWUwMWY1ZWQ3Njc1YTgzMGJhNmYzOGY4ZWNmNTg0MGZiYzgzOWNiLi5l
ODUyZGZkYWJjZDQzOTkzYjMxMzkzZDM1ZGYwMDU0Y2Y2Nzk0Zjc5IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBA
IC0yNCwxMiArMjQsMTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkR1
bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
IgorI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1ByaXZhdGUuaD4KQEAgLTE1NSw1
ICsxNTYsNSBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2li
aWxpdHlFbmFibGVkKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0
ZUpTU3RyaW5nKCJpb3MiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5kZXggZTNjOTA5ZDZkZDI3MDM5MjgzZWFj
Y2QzMmFlNDA5MjZjZThhOWU2NC4uNjQ1ZmM4NjNjZWYxMGEwMGY1YmI0YjdkMTM5YzZlMGRjZTQw
OGRlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW0KQEAgLTI0LDExICsyNCwxMiBAQAogICovCiAKICNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCIKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogI2lt
cG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCIKKyNpbXBvcnQgIkR1bXBS
ZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5oPgpAQCAtNDEsMTEgKzQyLDYgQEAKIAog
dHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwg
TlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKLSAgICA6IG1fZWxl
bWVudChlbGVtZW50KQotewotfQotCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChVSUFjY2Vzc2liaWxp
dHlIaWRkZW4pCiAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooQ0dQb2ludClwb2ludDsKIC0g
KGlkKWFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50OwpAQCAtMTEyLDkgKzEwOCw5IEBAIEBpbnRl
cmZhY2UgTlNPYmplY3QgKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyUHJpdmF0ZSkKIC0g
KENHUGF0aFJlZilfYWNjZXNzaWJpbGl0eVBhdGg7CiBAZW5kCiAKLXN0YXRpYyBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGlkIGVsZW1lbnQpCisgICAgOiBtX2VsZW1lbnQo
ZWxlbWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cyhudWxscHRyLCAwKSk7CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY29u
Y2F0ZW5hdGVBdHRyaWJ1dGVBbmRWYWx1ZShOU1N0cmluZyAqYXR0cmlidXRlLCBOU1N0cmluZyAq
dmFsdWUpCkBAIC0xODAsNyArMTc2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpmaWVsZHNldEFuY2VzdG9yRWxlbWVudCgpCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLQogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnVybCgpCiB7CiAgICAgTlNVUkwgKnVybCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0
eVVSTF07CkBAIC0yOTEsNyArMjg2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpsaW5rZWRFbGVtZW50KCkKIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KHVuc2lnbmVk
IGluZGV4KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtNTU4LDcgKzU1Miw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAgICAgaWQgdGV4
dE1hcmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKICAgICBp
ZiAoIXRleHRNYXJrZXJzIHx8ICFbdGV4dE1hcmtlcnMgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBj
bGFzc11dKQotICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgICAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJp
bmdGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCkBA
IC02ODEsMjIgKzY3NSwyMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3Vt
ZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbAogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2Vk
VUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJp
YnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJu
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0
dHJpYnV0ZSkKQEAgLTcxNiw3ICs3MTAsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZQogICAg
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGF0dHJpYnV0ZSwgIkFYVGV4dHVhbENv
bnRleHQiKSkKICAgICAgICAgcmV0dXJuIFtbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlUZXh0dWFs
Q29udGV4dF0gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkKCkKQEAgLTc1
NSwxNyArNzQ5LDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVT
dXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFnZVVwKCkKQEAg
LTc4OSwxNyArNzgzLDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFn
ZVJpZ2h0KCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvbGVEZXNjcmlwdGlvbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQpAQCAtODA5
LDcgKzgwMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpkZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFs
dWUoKQpAQCAtODE5LDcgKzgxMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRl
eHQoKSBjb25zdApAQCAtODQ5LDcgKzg0Myw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2V0VmFsdWUoSlNTdHJpbmdSZWYgdmFsdWVUZXh0KQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbigpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRM
aW5lTnVtYmVyKCkKQEAgLTg2OSw3ICs4NjMsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
Rm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtODkyLDcgKzg4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDaGVja2VkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lu
ZGV0ZXJtaW5hdGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTkwOCw3ICs5MDAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFyaWFJc0dyYWJiZWQoKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3Ry
aW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50
IGluZGV4KQpAQCAtOTE4LDM3ICs5MTAsMzcgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmxpbmVGb3JJbmRleChpbnQgaW5kZXgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQogewotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dDb3VudCgpCkBAIC05ODcsMjIgKzk3OSwxOSBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQg
Y29sLAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUo
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQg
eSkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2ZVRlY2hu
b2xvZ3lTaW11bGF0ZWRGb2N1cygpCkBAIC0xMDM1LDIzICsxMDI0LDIxIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3Rp
ZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQpAQCAtMTA4Myw0
MyArMTA3MCwzNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyKCkKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJs
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBz
ZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTExMzAsMTMgKzExMTAsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2lu
Z2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtMTE1MiwyNyArMTEzMCwyMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cG9wdXBWYWx1ZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGFrZUZvY3VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVj
dGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAogfQogCiB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRDb3VudEZv
clNlYXJjaFByZWRpY2F0ZShKU0NvbnRleHRSZWYgY29udGV4dCwgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgSlNWYWx1ZVJlZiBzZWFy
Y2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1t
ZWRpYXRlRGVzY2VuZGFudHNPbmx5KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gMDsKIH0KIApAQCAtMTIxNCwyMyArMTE4NywxOSBAQCBkb3VibGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xhc3NM
aXN0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXJyYXlBdHRy
aWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Jikg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4m
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB1bnNpZ25lZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZENoaWxkcmVuQ291bnQoKSBjb25zdApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgKaW5kZXggMzg1
MGI0MTQ0NjNlMDE1YzY3ZDU2ZWYwNGE1OTM4Yzk5MWM0N2VkOC4uMTViZjUxZjg0ZDNlODE4MWMw
MmNmNjYzYzc1NTM5ZGMyOGFkOWRkNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oCkBAIC00MSw0ICs0MSw0IEBAIEBpbnRlcmZhY2Ug
TlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQogLSAoSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+KWNyZWF0ZUpTU3RyaW5nUmVmOwogQGVuZAogCi1leHRlcm4gTlNEaWN0aW9uYXJ5ICpzZWFy
Y2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250
ZXh0UmVmLCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50ICpzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJl
Y3Rpb25OZXh0LCB1bnNpZ25lZCByZXN1bHRzTGltaXQsIEpTVmFsdWVSZWYgc2VhcmNoS2V5LCBK
U1N0cmluZ1JlZiBzZWFyY2hUZXh0LCBib29sIHZpc2libGVPbmx5LCBib29sIGltbWVkaWF0ZURl
c2NlbmRhbnRzT25seSk7CitOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZWYsIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5leHQsIHVuc2lnbmVkIHJl
c3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFyY2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQs
IGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1t
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KaW5k
ZXggNzk0MDczOGEzMzkwZWIyNzBhNjA4YmZkMDU5ZTE3MmFmNGI3OTA5Mi4uMDMwNjdlMmQwODky
MTRmYmU4NDY2N2IyODI0ZjhjZTMxNDgwZjk4NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogCisj
aW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZD
Ri5oPgogCiBAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQpA
QCAtNTYsNyArNTcsNiBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICBbcGFyYW1l
dGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c3RhcnRFbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVu
dCgpIGZvcktleTpAIkFYU3RhcnRFbGVtZW50Il07CiAKICAgICBbcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZSBzZXRPYmplY3Q6KGlzRGlyZWN0aW9uTmV4dCkgPyBAIkFYRGlyZWN0aW9uTmV4dCIgOiBA
IkFYRGlyZWN0aW9uUHJldmlvdXMiIGZvcktleTpAIkFYRGlyZWN0aW9uIl07Ci0KICAgICBbcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QChyZXN1bHRzTGltaXQpIGZvcktleTpAIkFY
UmVzdWx0c0xpbWl0Il07CiAKICAgICBpZiAoc2VhcmNoS2V5KSB7CkBAIC02NiwxNCArNjYsOCBA
QCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JT
ZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0cmlu
ZykKICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZy5nZXQoKV07CiAgICAgICAgIH0gZWxzZSBp
ZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsKLSAgICAgICAgICAgIEpT
T2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJj
aEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0
aCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJp
bmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAg
ICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcu
Z2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleUFycmF5TGVuZ3RoVmFs
dWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUp
KQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVl
LCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJj
aEtleUFycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaEtleTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHNlYXJjaEtleUFycmF5TGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hL
ZXlBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoS2V5
QXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoS2V5
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlBcnJh
eSwgaSwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2VhcmNoS2V5U3Ry
aW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hLZXlWYWx1ZSwgbnVsbHB0
cik7CkBAIC04OCwxMiArODIsMTEgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJh
bWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICAgICAg
aWYgKHNlYXJjaEtleVBhcmFtZXRlcikKICAgICAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmli
dXRlIHNldE9iamVjdDpzZWFyY2hLZXlQYXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWFyY2hLZXkiXTsK
ICAgICB9Ci0gICAgCisKICAgICBpZiAoc2VhcmNoVGV4dCAmJiBKU1N0cmluZ0dldExlbmd0aChz
ZWFyY2hUZXh0KSkKICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OltO
U1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoVGV4dF0gZm9yS2V5OkAiQVhTZWFy
Y2hUZXh0Il07Ci0gICAgCisKICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6
QCh2aXNpYmxlT25seSkgZm9yS2V5OkAiQVhWaXNpYmxlT25seSJdOwotICAgIAogICAgIFtwYXJh
bWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSkg
Zm9yS2V5OkAiQVhJbW1lZGlhdGVEZXNjZW5kYW50c09ubHkiXTsKICAgICAKICAgICByZXR1cm4g
cGFyYW1ldGVyaXplZEF0dHJpYnV0ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRleCA1MWYwMzFkZGJiY2Q4NTNh
ZGI0ZmU3MTQ3ZDg1YTUyNTc2YTAwNzhiLi45NWEwNmYzYTQwYTA0ODllM2UwYjBiMzE2NTc0YzNm
Y2JmMmVjZjExIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJBY2Nl
c3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2ltcG9ydCAi
SlNCYXNpY3MuaCIKICNpbXBvcnQgPEFwcEtpdC9OU0NvbG9yLmg+CiAjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+
CkBAIC0xNTgsNSArMTU5LDUgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5j
ZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZCgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm1hYyIpKTsKKyAgICByZXR1cm4g
V1RSOjpjcmVhdGVKU1N0cmluZygibWFjIik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IGUxZWZkN2Y0ZTE2
MWFmZmRlZTIyNGNjNDUzODQ4YjM5Y2I0OTcwNjMuLjY0OTFhMmQwYTVmYTRjNzRlNzIxNzkyNzhm
N2UxY2E5OWQ3NjhkNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFz
aWNzLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgpA
QCAtODAsMTEgKzgxLDYgQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9p
bnQ6KE5TUG9pbnQpcG9pbnQ7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZh
bHVlIGZvckF0dHJpYnV0ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWU7CiBAZW5kCiAKLXN0YXRp
YyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0gICAg
cmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkpOwot
fQotCiBzdGF0aWMgT3B0aW9uYWw8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gbWFrZVZlY3RvckVs
ZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCosIGlkIGVsZW1lbnQpCiB7CiAgICAg
cmV0dXJuIHsgeyBlbGVtZW50IH0gfTsKQEAgLTIyMSwxNCArMjE3LDggQEAgc3RhdGljIE5TRGlj
dGlvbmFyeSAqc2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0Nv
bnRleHRSZWYgY28KICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRP
YmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5n
LmdldCgpXV07CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hT
dHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVs
bHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAw
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJp
bmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJp
bmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgCisgICAgICAgICAg
ICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheSA9IChKU09iamVjdFJlZilzZWFyY2hTdHJpbmdzOwor
ICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVu
Z3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0
cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKICAgICAgICAgICAgICAgICBpZiAo
c2VhcmNoU3RyaW5nc1N0cmluZykKQEAgLTI2MiwxNCArMjUyLDggQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRl
eHRSZWYgY28KICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQogICAgICAgICAg
ICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKICAgICAgICAgfSBl
bHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAg
ICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNl
YXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJv
cGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5n
dGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNo
U3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJj
aFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAg
ICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaFN0cmluZ3M7
CisgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IFdUUjo6YXJyYXlM
ZW5ndGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNo
U3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgICAgIGlm
IChzZWFyY2hTdHJpbmdzU3RyaW5nKQpAQCAtMTQ0NiwxMyArMTQzMCwxMyBAQCB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxk
cmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIGZ1bmN0aW9uLgogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQpAQCAtMTQ2Myw3ICsxNDQ3LDcgQEAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcoKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBF
TkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQpAQCAt
MTQ3NCw3ICsxNDU4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0
cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogICAgIAotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVy
bCgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdh
dGUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KaW5k
ZXggMzY3MTQ5MzlmZGEwYTU2NzQ5Yzc5OTg4NmExZWE0Mzg5MjE4OWE0YS4uMzQyYjNhMDFkYzdl
YTg3OWFmMWI1NGIwZWUyNzNkNjgxMmY4ZjdhNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQpAQCAtMzExLDU0ICszMTEsMjYgQEAgSUdOT1JFX1dB
Uk5JTkdTX0VORAogCiAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxk
Rm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKIHsKLSAgICAvLyBNYWtlIE5ldy1TdHlsZSBUZXN0
UnVubmVyCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07
Ci0gICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0
KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBhdXRvIGNvbnRl
eHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07CisgICAgYXV0byB3ZWJWaWV3ID0gW2ZyYW1lIHdl
YlZpZXddOworICAgIGF1dG8gd2luZG93T2JqZWN0ID0gW2ZyYW1lIHdpbmRvd09iamVjdF07CiAK
LSAgICBBU1NFUlQoZ1Rlc3RSdW5uZXIpOwotICAgIGdUZXN0UnVubmVyLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNl
cHRpb24pOwotCi0gICAgZ2NDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIGds
b2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFs
T2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgZ1Rlc3RS
dW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgZ2NDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOwogCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJ
bnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiAKLSAgICAvLyBNYWtlIE9sZC1TdHlsZSBjb250cm9s
bGVycwotCi0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtmcmFtZSB3ZWJWaWV3XTsKLSAgICBXZWJT
Y3JpcHRPYmplY3QgKm9iaiA9IFtmcmFtZSB3aW5kb3dPYmplY3RdOwotI2lmICFQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIEFwcGxlU2NyaXB0Q29udHJvbGxlciAqYXNjID0gW1tBcHBsZVNjcmlw
dENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XTsKLSAgICBbb2JqIHNl
dFZhbHVlOmFzYyBmb3JLZXk6QCJhcHBsZVNjcmlwdENvbnRyb2xsZXIiXTsKLSAgICBbYXNjIHJl
bGVhc2VdOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFk
b3B0TlMoW1tBcHBsZVNjcmlwdENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3XSkuZ2V0KCkgZm9yS2V5OkAiYXBwbGVTY3JpcHRDb250cm9sbGVyIl07CiAjZW5kaWYKIAot
ICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgKmVzYyA9IFtbRXZlbnRTZW5kaW5nQ29udHJvbGxl
ciBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTplc2MgZm9yS2V5OkAiZXZlbnRTZW5k
ZXIiXTsKLSAgICBbZXNjIHJlbGVhc2VdOwotICAgIAotICAgIFtvYmogc2V0VmFsdWU6Z05hdmln
YXRpb25Db250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07Ci0gICAgCi0g
ICAgT2JqQ0NvbnRyb2xsZXIgKm9jYyA9IFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwot
ICAgIFtvYmogc2V0VmFsdWU6b2NjIGZvcktleTpAIm9iakNDb250cm9sbGVyIl07Ci0gICAgW29j
YyByZWxlYXNlXTsKLQotICAgIE9iakNQbHVnaW4gKnBsdWdpbiA9IFtbT2JqQ1BsdWdpbiBhbGxv
Y10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTpwbHVnaW4gZm9yS2V5OkAib2JqQ1BsdWdpbiJd
OwotICAgIFtwbHVnaW4gcmVsZWFzZV07Ci0gICAgCi0gICAgT2JqQ1BsdWdpbkZ1bmN0aW9uICpw
bHVnaW5GdW5jdGlvbiA9IFtbT2JqQ1BsdWdpbkZ1bmN0aW9uIGFsbG9jXSBpbml0XTsKLSAgICBb
b2JqIHNldFZhbHVlOnBsdWdpbkZ1bmN0aW9uIGZvcktleTpAIm9iakNQbHVnaW5GdW5jdGlvbiJd
OwotICAgIFtwbHVnaW5GdW5jdGlvbiByZWxlYXNlXTsKLQotICAgIFRleHRJbnB1dENvbnRyb2xs
ZXIgKnRpYyA9IFtbVGV4dElucHV0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXddOwotICAgIFtvYmogc2V0VmFsdWU6dGljIGZvcktleTpAInRleHRJbnB1dENvbnRyb2xs
ZXIiXTsKLSAgICBbdGljIHJlbGVhc2VdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRv
cHROUyhbW0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6
QCJldmVudFNlbmRlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6Z05hdmlnYXRpb25D
b250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07CisgICAgW3dpbmRvd09i
amVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQo
KSBmb3JLZXk6QCJvYmpDQ29udHJvbGxlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6
YWRvcHROUyhbW09iakNQbHVnaW4gYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDUGx1
Z2luIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ1BsdWdpbkZ1
bmN0aW9uIGFsbG9jXSBpbml0XSkuZ2V0KCkgZm9yS2V5OkAib2JqQ1BsdWdpbkZ1bmN0aW9uIl07
CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbVGV4dElucHV0Q29udHJvbGxl
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKS5nZXQoKSBmb3JLZXk6QCJ0ZXh0SW5w
dXRDb250cm9sbGVyIl07CiB9CiAKIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFt
ZTooV2ViRnJhbWUgKilmcmFtZSBpbklzb2xhdGVkV29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29y
bGQKQEAgLTM3MSw3ICszNDMsNyBAQCAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJh
bWU6KFdlYkZyYW1lICopZnJhbWUgaW5Jc29sYXRlZFdvcmxkOihXZWJTY3JpcAogICAgIGlmICgh
Z2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09iamVjdFNldFByb3BlcnR5
KGN0eCwgZ2xvYmFsT2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
X193b3JsZElEIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHdvcmxkSURGb3JXb3Js
ZCh3b3JsZCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICBKU09iamVj
dFNldFByb3BlcnR5KGN0eCwgZ2xvYmFsT2JqZWN0LCBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJfX3dv
cmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCB3b3JsZElERm9yV29ybGQod29y
bGQpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7CiB9CiAKIC0gKHZvaWQpd2Vi
VmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lOihXZWJG
cmFtZSAqKWZyYW1lIGluU2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggZWJhMDkzZWUxODdjZDMx
MGQwNTFiMjMwYWVkMmEzMDBmZTc5NDljMC4uZTIxMDcwYWMzMWIzNGNmY2JiNTc5ZDc3NzViNzYx
OTkxMTRhYmRmZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0K
QEAgLTMyLDYgKzMyLDcgQEAKIAogI2ltcG9ydCAiRGVmYXVsdFBvbGljeURlbGVnYXRlLmgiCiAj
aW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0
ICJMYXlvdXRUZXN0U3BlbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92
aWRlci5oIgogI2ltcG9ydCAiTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmgiCkBAIC02NzAs
MTUgKzY3MSwxMCBAQCBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZQogewogICAgIFdlYkZpbmRPcHRp
b25zIG9wdGlvbnMgPSAwOwogCi0gICAgYXV0byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYg
bGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwg
bGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihj
b250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdGFyZ2V0Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhcmdldCkpOworICAgIGF1dG8gbGVuZ3RoID0g
V1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBvcHRpb25zQXJyYXkpOworICAgIGF1dG8gdGFyZ2V0
Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHRhcmdldCkpOwogCi0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKICAgICAgICAgaWYg
KCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcAppbmRl
eCBmZDc3YWQxYzM5MjYzOGRhOTQxNDNlZTdkNWE4MjFlNjk0MTAyMzEzLi41ZjNiNzQwNDA1MDBm
MDMwZGEyYmVkMWFhZjk2NzNmOGI2MmJiMTY2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKQEAgLTM3MSwxOSArMzcxLDEwIEBAIHZvaWQgRnJh
bWVMb2FkRGVsZWdhdGU6OmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVJblN0YW5kYXJkV29y
bGQoSVdlYkZyYW1lKiBmCiAgICAgSVdlYkZyYW1lKiBwYXJlbnRGcmFtZSA9IDA7CiAgICAgZnJh
bWUtPnBhcmVudEZyYW1lKCZwYXJlbnRGcmFtZSk7CiAKLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlv
biA9IDA7Ci0KLSAgICA6OmdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdp
bmRvd09iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
bV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAm
ZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBtX2FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4
Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAgbV90ZXh0SW5wdXRDb250
cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlv
bik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOworICAgIDo6Z1Rlc3RSdW5uZXItPm1ha2VXaW5k
b3dPYmplY3QoY29udGV4dCk7CisgICAgbV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CisgICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0KTsKKyAgICBtX3RleHRJbnB1dENvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CiAKICAgICBKU1N0cmluZ1JlZiBldmVudFNlbmRlclN0ciA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJldmVudFNlbmRlciIpOwogICAgIEpTVmFsdWVSZWYgZXZlbnRT
ZW5kZXIgPSBtYWtlRXZlbnRTZW5kZXIoY29udGV4dCwgIXBhcmVudEZyYW1lKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwIGIvVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKaW5kZXggZmZmMGI3NDk5MGFm
YjllMTJhYzlkMDFhNzEwYTRjNTI4MGUxZTkwOC4uNTkzMGU0ZjI3YzkwYTc2ODNlMTc3NDQ2Nzk0
MDgyNDhmNTQwZTg4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5n
cy9KU0Jhc2ljcy5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jh
c2ljcy5jcHAKQEAgLTI4LDE5ICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSlNWYWx1
ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIE9wdGlv
bmFsPGJvb2w+IHZhbHVlKQorT3B0aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2woSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID8gSlNW
YWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxs
KGNvbnRleHQpOworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUp
IHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9w
dGlvbmFsKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKTsKK30KKworT3B0aW9uYWw8
ZG91YmxlPiB0b09wdGlvbmFsRG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHZhbHVlKQoreworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUp
IHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9w
dGlvbmFsKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogfQogCi1P
cHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYg
Y29udGV4dCwgT3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJc1Vu
ZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkg
PyBXVEY6Om51bGxvcHQgOiBPcHRpb25hbDxib29sPihKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQs
IHZhbHVlKSk7CisgICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQs
IHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCi1KU1ZhbHVl
UmVmIEpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmlu
Z1JlZiBzdHJpbmdPck51bGwpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNTdHJpbmdSZWYgc3RyaW5nKQogewotICAgIHJldHVybiBzdHJpbmdPck51bGwgPyBK
U1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdPck51bGwpIDogSlNWYWx1ZU1ha2VOdWxs
KGNvbnRleHQpOworICAgIHJldHVybiBzdHJpbmcgPyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0
LCBzdHJpbmcpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQpAQCAtNDgsMTkg
KzUzLDQzIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBj
aGFyKiBzdHJpbmcpCiAgICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHN0cmluZykpOwogfQogCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJp
bmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgYXV0byBz
dHJpbmcgPSBhZG9wdCh2YWx1ZSA/IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUs
IG51bGxwdHIpIDogbnVsbHB0cik7CisgICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZyA6IGNyZWF0
ZUpTU3RyaW5nKCIiKTsKK30KKwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IGNoYXIqIHN0cmluZykKIHsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJp
bmcoY29udGV4dCwgY3JlYXRlSlNTdHJpbmcoc3RyaW5nKS5nZXQoKSk7CiB9CiAKK0pTVmFsdWVS
ZWYgcHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29u
c3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gb2JqZWN0ID8gSlNPYmplY3RHZXRQcm9wZXJ0
eShjb250ZXh0LCBvYmplY3QsIGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBudWxscHRyKSA6
IG51bGxwdHI7Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1l
KQoreworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0
LCBvYmplY3QsIG5hbWUpKTsKK30KKworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBkZWZh
dWx0VmFsdWUpCit7CisgICAgYXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwg
bmFtZSk7CisgICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1
ZSkgOiBkZWZhdWx0VmFsdWU7Cit9CisKK2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAg
ICBhdXRvIHZhbHVlID0gcHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1
cm4gdmFsdWUgPyBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogMDsK
K30KKwogSlNPYmplY3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkoY29udGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgbnVsbHB0
cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUp
OworICAgIGF1dG8gdmFsdWUgPSBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAg
IHJldHVybiB2YWx1ZSA/IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0
LCBvYmplY3QsIG5hbWUpLCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIG9i
amVjdFByb3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gbmFtZXMpCkBAIC03MCwyNyArOTksMzYg
QEAgSlNPYmplY3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgc3RkOjppbml0aWEKICAgICByZXR1cm4gb2JqZWN0OwogfQogCit1bnNp
Z25lZCBhcnJheUxlbmd0aChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0
KQoreworICAgIHJldHVybiBudW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3Ro
Iik7Cit9CisKIHZvaWQgc2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBKU09iamVj
dFNldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCks
IEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB2YWx1ZSksIGtKU1Byb3BlcnR5QXR0cmlidXRl
Tm9uZSwgbnVsbHB0cik7CiB9CiAKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250
ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYgdmFsdWUpCit7Cisg
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3Qo
Y29udGV4dCksIGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCB2YWx1ZSwga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgbnVsbHB0
cik7Cit9CisKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBzZXRHbG9iYWxPYmpl
Y3RQcm9wZXJ0eShjb250ZXh0LCBuYW1lLCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCB2YWx1
ZSkpOworfQorCiBKU1ZhbHVlUmVmIGNhbGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFs
dWVSZWY+IGFyZ3VtZW50cykKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgYXV0byBmdW5jdGlvbiA9IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIG9iamVj
dCwgbmFtZSk7Ci0gICAgaWYgKCFmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVj
dCwgYXJndW1lbnRzLnNpemUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJl
dHVybiBmdW5jdGlvbiA/IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24s
IG9iamVjdCwgYXJndW1lbnRzLnNpemUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpIDog
bnVsbHB0cjsKIH0KIAogSlNPYmplY3RSZWYgY2FsbENvbnN0cnVjdG9yKEpTR2xvYmFsQ29udGV4
dFJlZiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNW
YWx1ZVJlZj4gYXJndW1lbnRzKQogewogICAgIGF1dG8gY29uc3RydWN0b3IgPSBvYmplY3RQcm9w
ZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHsgbmFtZSB9
KTsKLSAgICBpZiAoIWNvbnN0cnVjdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rvcihjb250ZXh0LCBjb25zdHJ1Y3RvciwgYXJn
dW1lbnRzLnNpemUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBj
b25zdHJ1Y3RvciA/IEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dCwgY29uc3RydWN0
b3IsIGFyZ3VtZW50cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKSA6IG51bGxw
dHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5k
aW5ncy9KU0Jhc2ljcy5oCmluZGV4IDExZGRhNTI0N2E1YWI2YzA0MDk2M2RmMTlhYjBmNWUwMjk2
Y2ViODIuLjY1ZjE4ZDdlY2Q4MDE2ODMzMzM0ZGY1ZWI4ODhjY2M0YTBiMjFkNTMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaAorKysgYi9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmgKQEAgLTMyLDE2ICszMiwyOCBA
QAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51
bGwoSlNDb250ZXh0UmVmLCBPcHRpb25hbDxib29sPik7Ci1PcHRpb25hbDxib29sPiBKU1ZhbHVl
VG9OdWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKK09wdGlvbmFsPGJv
b2w+IHRvT3B0aW9uYWxCb29sKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitPcHRpb25hbDxk
b3VibGU+IHRvT3B0aW9uYWxEb3VibGUoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAotSlNW
YWx1ZVJlZiBKU1ZhbHVlTWFrZVN0cmluZ09yTnVsbChKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVm
KTsKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiA9
ICIiKTsKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhKU0NvbnRleHRS
ZWYsIEpTVmFsdWVSZWYpOwogCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJp
bmcoY29uc3QgY2hhciopOwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmLCBjb25z
dCBjaGFyKik7CitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYsIE9wdGlvbmFsPGJv
b2w+KTsKK0pTVmFsdWVSZWYgbWFrZVZhbHVlKEpTQ29udGV4dFJlZiwgSlNTdHJpbmdSZWYpOwor
CitKU1ZhbHVlUmVmIHByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNo
YXIqIG5hbWUpOworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUgPSBmYWxzZSk7Citkb3VibGUg
bnVtZXJpY1Byb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5h
bWUpOworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZ1Byb3BlcnR5KEpTQ29udGV4dFJl
ZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOwordW5zaWduZWQgYXJyYXlMZW5ndGgo
SlNDb250ZXh0UmVmLCBKU09iamVjdFJlZik7CiBKU09iamVjdFJlZiBvYmplY3RQcm9wZXJ0eShK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKIEpTT2JqZWN0UmVm
IG9iamVjdFByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxjb25zdCBjaGFyKj4gbmFtZXMpOworCiB2b2lkIHNldFByb3BlcnR5KEpTQ29udGV4
dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBz
ZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIEpT
VmFsdWVSZWYpOwordm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIGNv
bnN0IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSk7CisKIEpTVmFsdWVSZWYgY2FsbChKU0NvbnRl
eHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8SlNWYWx1ZVJlZj4gYXJndW1lbnRzKTsKIEpTT2JqZWN0UmVmIGNhbGxDb25zdHJ1Y3RvcihK
U0dsb2JhbENvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxKU1ZhbHVlUmVmPiBhcmd1bWVudHMpOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVy
U2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBhYmxlLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0Jp
bmRpbmdzL0pTV3JhcHBhYmxlLmgKaW5kZXggOWUwZjA3ZGY1OTMyYWIzMDMzMWQ3YjYxZDE3MzUz
YWU2ZTAxYzQ3My4uNTliZTFkYWVhMjc3NTRlZTQ3NzViNGYzZTdhNWQ2ODJmYjFkNWYxZSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCisr
KyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGFibGUuaApAQCAtMjUs
OSArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAordHlwZWRlZiBzdHJ1
Y3QgT3BhcXVlSlNDbGFzcyogSlNDbGFzc1JlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNz
IEpTV3JhcHBhYmxlIDogcHVibGljIFJlZkNvdW50ZWQ8SlNXcmFwcGFibGU+IHsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmggYi9Ub29scy9U
ZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBlci5oCmluZGV4IGY2Nzk4Zjk5YTRmZWM2
NzU2M2QwOTE1NjNiNTA1MDlkZmM4NTcyZGEuLjliNmJhZDhhZjA0NGIyMDJmZjg3MjdhY2VkN2Ni
OWZmYjJjZWM1MmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3Mv
SlNXcmFwcGVyLmgKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBw
ZXIuaApAQCAtNTAsNCArNTAsOSBAQCBpbmxpbmUgdm9pZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcgogICAgIEpTT2Jq
ZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhwcm9wZXJ0eU5h
bWUpLmdldCgpLCBKU1dyYXBwZXI6OndyYXAoY29udGV4dCwgdmFsdWUpLCBhdHRyaWJ1dGVzLCBl
eGNlcHRpb24pOwogfQogCitpbmxpbmUgdm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0Nv
bnRleHRSZWYgY29udGV4dCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU1dyYXBwYWJsZSog
dmFsdWUpCit7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgcHJvcGVydHlO
YW1lLCBKU1dyYXBwZXI6OndyYXAoY29udGV4dCwgdmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXph
dGlvbi9tYWMvRXZlbnRTZXJpYWxpemVyTWFjLm1tIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9F
dmVudFNlcmlhbGl6YXRpb24vbWFjL0V2ZW50U2VyaWFsaXplck1hYy5tbQppbmRleCAwZjE3YjJj
ZDYzOWE2MzA2M2E0ODhkZjNhMzNhMzVlMzJhMmVjY2MxLi5iZGQyMDdiZDQwOWYwNGVlNWYzODIz
MTk0ZmEyNGU2MzI4ODU4OTE3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2
ZW50U2VyaWFsaXphdGlvbi9tYWMvRXZlbnRTZXJpYWxpemVyTWFjLm1tCisrKyBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvRXZlbnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMu
bW0KQEAgLTE5NSw3ICsxOTUsNyBAQCBAaW1wbGVtZW50YXRpb24gRXZlbnRTZXJpYWxpemVyCiAK
ICsgKE5TRGljdGlvbmFyeSAqKWRpY3Rpb25hcnlGb3JFdmVudDooQ0dFdmVudFJlZilyYXdFdmVu
dCByZWxhdGl2ZVRvVGltZTooQ0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsK
LSAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4gcGxhaW5FdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENy
ZWF0ZShOVUxMKSk7CisgICAgYXV0byBwbGFpbkV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRl
KE5VTEwpKTsKICAgICBDR0V2ZW50UmVmIHJhd1BsYWluRXZlbnQgPSBwbGFpbkV2ZW50LmdldCgp
OwogCiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqZGljdCA9IFtbW05TTXV0YWJsZURpY3Rpb25h
cnkgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKQEAgLTIyNiw3ICsyMjYsNyBAQCArIChOU0Rp
Y3Rpb25hcnkgKilkaWN0aW9uYXJ5Rm9yRXZlbnQ6KENHRXZlbnRSZWYpcmF3RXZlbnQgcmVsYXRp
dmVUb1RpbWU6KENHRXZlbgogCiArIChSZXRhaW5QdHI8Q0dFdmVudFJlZj4pY3JlYXRlRXZlbnRG
b3JEaWN0aW9uYXJ5OihOU0RpY3Rpb25hcnkgKilkaWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdp
bmRvdyByZWxhdGl2ZVRvVGltZTooQ0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAK
IHsKLSAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVh
dGUoTlVMTCkpOworICAgIGF1dG8gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkp
OwogICAgIENHRXZlbnRSZWYgcmF3RXZlbnQgPSBldmVudC5nZXQoKTsKIAogICAgIEZPUl9FQUNI
X0NHRVZFTlRfSU5URUdFUl9GSUVMRChTVE9SRV9JTlRFR0VSX0ZJRUxEX1RPX0VWRU5UKTsKQEAg
LTI2NCw3ICsyNjQsNyBAQCBjb25zdCBmbG9hdCBldmVudERpc3BhdGNoVGltZXJSYXRlID0gMS4g
LyAxMjAuOwogCiArICh2b2lkKXBsYXlTdHJlYW06KE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICop
ZXZlbnREaWN0cyB3aW5kb3c6KE5TV2luZG93ICopd2luZG93IGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkKF4pKCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBSZXRhaW5QdHI8RXZlbnRTdHJlYW1Q
bGF5ZXI+IHBsYXllciA9IGFkb3B0TlMoW1tFdmVudFN0cmVhbVBsYXllciBhbGxvY10gaW5pdF0p
OworICAgIGF1dG8gcGxheWVyID0gYWRvcHROUyhbW0V2ZW50U3RyZWFtUGxheWVyIGFsbG9jXSBp
bml0XSk7CiAKICAgICBwbGF5ZXItPl9yZW1haW5pbmdFdmVudERpY3Rpb25hcmllcyA9IGFkb3B0
TlMoW2V2ZW50RGljdHMgbXV0YWJsZUNvcHldKTsKICAgICBwbGF5ZXItPl93aW5kb3cgPSB3aW5k
b3c7CkBAIC0yODIsNyArMjgyLDcgQEAgLSAodm9pZClwbGF5YmFja1RpbWVyRmlyZWQ6KE5TVGlt
ZXIgKil0aW1lcgogICAgIGF1dG8gcmVtb3ZlTGlzdCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF0pOwogICAgIE5TRXZlbnQgKm5zRXZlbnQgPSBuaWw7CiAgICAgZm9yIChp
ZCBldmVudERpY3QgaW4gX3JlbWFpbmluZ0V2ZW50RGljdGlvbmFyaWVzLmdldCgpKSB7Ci0gICAg
ICAgIFJldGFpblB0cjxDR0V2ZW50UmVmPiBldmVudCA9IFtFdmVudFNlcmlhbGl6ZXIgY3JlYXRl
RXZlbnRGb3JEaWN0aW9uYXJ5OmV2ZW50RGljdCBpbldpbmRvdzpfd2luZG93LmdldCgpIHJlbGF0
aXZlVG9UaW1lOl9zdGFydFRpbWVdOworICAgICAgICBhdXRvIGV2ZW50ID0gW0V2ZW50U2VyaWFs
aXplciBjcmVhdGVFdmVudEZvckRpY3Rpb25hcnk6ZXZlbnREaWN0IGluV2luZG93Ol93aW5kb3cu
Z2V0KCkgcmVsYXRpdmVUb1RpbWU6X3N0YXJ0VGltZV07CiAgICAgICAgIGlmIChDR0V2ZW50R2V0
VGltZXN0YW1wKGV2ZW50LmdldCgpKSA8IG1hY2hfYWJzb2x1dGVfdGltZSgpKSB7CiAgICAgICAg
ICAgICBuc0V2ZW50ID0gW05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpldmVudC5nZXQoKV07CiAg
ICAgICAgICAgICBbTlNBcHAgcG9zdEV2ZW50Om5zRXZlbnQgYXRTdGFydDpOT107CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRl
eHQuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRD
b250ZXh0LmNwcAppbmRleCAyNzA1YjM5YTI0N2RkMjU3ZDVjNmQ1OGM0NzBlOTYzM2E5MTlkZmQ0
Li41ZGNmYjdjOTg3MmYzOTlmMTU2NzRkOTcxMGRlYjI4OWIyZDEyMThkIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dGV4dC5jcHAKQEAgLTI2LDkgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJVSVNjcmlwdENvbnRleHQuaCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAi
VUlTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0
UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVFI7CkBAIC00MywxMSAr
NDIsNyBAQCBVSVNjcmlwdENvbnRleHQ6OlVJU2NyaXB0Q29udGV4dChVSVNjcmlwdENvbnRleHRE
ZWxlZ2F0ZSYgZGVsZWdhdGUsIFVJU2NyaXB0Q29udAogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0
ZSkKIHsKICAgICBtX2NvbnRyb2xsZXIgPSBmYWN0b3J5KCp0aGlzKTsKLQotICAgIEpTT2JqZWN0
UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChtX2NvbnRleHQuZ2V0
KCkpOwotCi0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgIG1fY29udHJv
bGxlci0+bWFrZVdpbmRvd09iamVjdChtX2NvbnRleHQuZ2V0KCksIGdsb2JhbE9iamVjdCwgJmV4
Y2VwdGlvbik7CisgICAgbV9jb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KG1fY29udGV4dC5n
ZXQoKSk7CiB9CiAKIFVJU2NyaXB0Q29udGV4dDo6flVJU2NyaXB0Q29udGV4dCgpCkBAIC02Niw5
ICs2MSw3IEBAIHZvaWQgVUlTY3JpcHRDb250ZXh0OjpydW5VSVNjcmlwdChjb25zdCBTdHJpbmcm
IHNjcmlwdCwgdW5zaWduZWQgc2NyaXB0Q2FsbGJhY2tJCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQg
PSBKU0V2YWx1YXRlU2NyaXB0KG1fY29udGV4dC5nZXQoKSwgc3RyaW5nUmVmLmdldCgpLCAwLCAw
LCAxLCAmZXhjZXB0aW9uKTsKICAgICAKICAgICBpZiAoIWhhc091dHN0YW5kaW5nQXN5bmNUYXNr
cygpKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYgc3RyaW5naWZ5RXhjZXB0aW9uID0gbnVsbHB0cjsK
LSAgICAgICAgYXV0byBzdHJpbmdpZmllZCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkobV9j
b250ZXh0LmdldCgpLCByZXN1bHQsICZzdHJpbmdpZnlFeGNlcHRpb24pKTsKLSAgICAgICAgcmVx
dWVzdFVJU2NyaXB0Q29tcGxldGlvbihzdHJpbmdpZmllZC5nZXQoKSk7CisgICAgICAgIHJlcXVl
c3RVSVNjcmlwdENvbXBsZXRpb24oY3JlYXRlSlNTdHJpbmcobV9jb250ZXh0LmdldCgpLCByZXN1
bHQpLmdldCgpKTsKICAgICAgICAgdHJ5VG9Db21wbGV0ZVVJU2NyaXB0Rm9yQ3VycmVudFBhcmVu
dENhbGxiYWNrKCk7CiAgICAgfQogfQpAQCAtMTg5LDEwICsxODIsMTAgQEAgSlNPYmplY3RSZWYg
VUlTY3JpcHRDb250ZXh0OjpvYmplY3RGcm9tUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IHJlY3QpIGNvbnMKIHsKICAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2UobV9j
b250ZXh0LmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVy
dHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJsZWZ0IikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCks
IHJlY3QueCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09i
amVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygidG9wIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2Nv
bnRleHQuZ2V0KCksIHJlY3QueSgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRy
KTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygid2lkdGgiKSkuZ2V0KCksIEpTVmFsdWVN
YWtlTnVtYmVyKG1fY29udGV4dC5nZXQoKSwgcmVjdC53aWR0aCgpKSwga0pTUHJvcGVydHlBdHRy
aWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5n
ZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0
IikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QuaGVpZ2h0
KCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOworICAgIHNldFByb3BlcnR5
KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCAibGVmdCIsIHJlY3QueCgpKTsKKyAgICBzZXRQcm9w
ZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgInRvcCIsIHJlY3QueSgpKTsKKyAgICBzZXRQ
cm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgIndpZHRoIiwgcmVjdC53aWR0aCgpKTsK
KyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgImhlaWdodCIsIHJlY3Qu
aGVpZ2h0KCkpOwogICAgIAogICAgIHJldHVybiBvYmplY3Q7CiB9CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaCBi
L1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxl
ci5oCmluZGV4IGE1YThkN2NjMmZjYzlmZWQ2ZmY1NTIyY2M5ZWQ2N2NlNDI5OGNhODEuLjM1MjRi
NjBiZDgxY2Q5Y2FiMzEwYWExYjU2OGYyM2ZkNTE2OGRjZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCisrKyBi
L1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxl
ci5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvck91dHN0YW5kaW5nQ2FsbGJhY2tzKCkgeyAvKiBu
b3RJbXBsZW1lbnRlZCgpOyAqLyB9CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250
ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBUcmFu
c2FjdGlvbiBoZWxwZXJzCiAgICAgCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyU2hhcmVkLmNw
cAppbmRleCBjNmViMTQwYWEzNTZjNjZkOGM0NTAyMTRlN2RiMmM4NWFkM2E3MWEzLi5iZmY0ZjM0
MzNkYmQyOTU3NWQ2MjViNzM5NGU2ZDlkMzgxY2FlYzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlclNoYXJlZC5jcHAKQEAgLTQxLDIwICs0MSwxNSBAQCBEZXZpY2VPcmllbnRhdGlvbiog
dG9EZXZpY2VPcmllbnRhdGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1
ZSkKICAgICAgICAgRGV2aWNlT3JpZW50YXRpb246OkxhbmRzY2FwZUxlZnQsCiAgICAgICAgIERl
dmljZU9yaWVudGF0aW9uOjpMYW5kc2NhcGVSaWdodAogICAgIH07Ci0KLSAgICBhdXRvIG9wdGlv
biA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsK
LSAgICBpZiAob3B0aW9uLT5zdHJpbmcoKSA9PSAicG9ydHJhaXQiKQorICAgIGF1dG8gb3B0aW9u
ID0gY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpOworICAgIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgInBvcnRyYWl0IikpCiAgICAgICAgIHJldHVy
biAmdmFsdWVzWzBdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gInBvcnRyYWl0LXVw
c2lkZWRvd24iKQorICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5n
ZXQoKSwgInBvcnRyYWl0LXVwc2lkZWRvd24iKSkKICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbMV07
Ci0KLSAgICBpZiAob3B0aW9uLT5zdHJpbmcoKSA9PSAibGFuZHNjYXBlLWxlZnQiKQorICAgIGlm
IChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgImxhbmRzY2FwZS1s
ZWZ0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzJdOwotCi0gICAgaWYgKG9wdGlvbi0+c3Ry
aW5nKCkgPT0gImxhbmRzY2FwZS1yaWdodCIpCisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcob3B0aW9uLmdldCgpLCAibGFuZHNjYXBlLXJpZ2h0IikpCiAgICAgICAgIHJldHVy
biAmdmFsdWVzWzNdOwotCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTY4LDkgKzYzLDkg
QEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OmNvbnRleHREZXN0cm95ZWQoKQogICAgIG1fY29u
dGV4dCA9IG51bGxwdHI7CiB9CiAKLXZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93
T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93
T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQs
IHdpbmRvd09iamVjdCwgInVpQ29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7Cisg
ICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInVpQ29udHJvbGxlciIsIHRoaXMp
OwogfQogCiBKU0NsYXNzUmVmIFVJU2NyaXB0Q29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hl
Y2tlci5tbSBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hl
Y2tlci5tbQppbmRleCA4ZmMwMjExNjdhYWMyMjE1MzZhMTc2NmU1MzkwMTlmZTY0NDA1OGUxLi5k
ODZlZjk1NmY4MGRmYTE5MjI5NTRlMTE3OWFmMmIzNTJiOTgzOTI0IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIubW0KKysrIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9jb2NvYS9MYXlvdXRUZXN0U3BlbGxDaGVja2VyLm1tCkBA
IC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkxheW91dFRlc3RT
cGVsbENoZWNrZXIuaCIKIAotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4K
KyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KQEAgLTIxMiwxMSAr
MjEyLDExIEBAIC0gKHZvaWQpc2V0UmVzdWx0czooVGV4dENoZWNraW5nUmVzdWx0c0RpY3Rpb25h
cnkgKilyZXN1bHRzCiAtICh2b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZily
ZXN1bHRzVmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1dG8g
cmVzdWx0c09iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCByZXN1bHRzVmFsdWUsIG51
bGxwdHIpOwotICAgIGF1dG8gZnJvbVByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJmcm9tIikpOwotICAgIGF1dG8gdG9Qcm9wZXJ0eU5hbWUgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidG8iKSk7Ci0gICAgYXV0byB0eXBlUHJv
cGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInR5cGUiKSk7
Ci0gICAgYXV0byByZXBsYWNlbWVudFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJyZXBsYWNlbWVudCIpKTsKLSAgICBhdXRvIGRldGFpbHNQcm9wZXJ0
eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGV0YWlscyIpKTsK
KyAgICBhdXRvIGZyb21Qcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJmcm9tIik7
CisgICAgYXV0byB0b1Byb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoInRvIik7Cisg
ICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZygidHlwZSIpOwor
ICAgIGF1dG8gcmVwbGFjZW1lbnRQcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJy
ZXBsYWNlbWVudCIpOworICAgIGF1dG8gZGV0YWlsc1Byb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoImRldGFpbHMiKTsKICAgICBhdXRvIHJlc3VsdHMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIHRoZSBP
YmplY3RpdmUtQyBBUEkgd291bGQgbWFrZSB0aGlzIGxvZ2ljIGVhc2llciB0byBmb2xsb3cuCkBA
IC0yMjgsMTUgKzIyOCwxMyBAQCAtICh2b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1
ZVJlZilyZXN1bHRzVmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHRSZWYpYwogICAgICAgICBhdXRv
IHJlc3VsdHNGb3JXb3JkID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
CiAgICAgICAgIGZvciAoc2l6ZV90IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBKU1By
b3BlcnR5TmFtZUFycmF5R2V0Q291bnQocmVzdWx0c0FycmF5UHJvcGVydHlOYW1lcyk7ICsrcmVz
dWx0SW5kZXgpIHsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0c09iamVjdCA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCByZXN1bHRz
QXJyYXksIHJlc3VsdEluZGV4LCBudWxscHRyKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBsb25n
IGZyb21WYWx1ZSA9IGxyb3VuZGwoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgZnJvbVByb3BlcnR5TmFtZS5nZXQoKSwg
bnVsbHB0ciksIG51bGxwdHIpKTsKLSAgICAgICAgICAgIGxvbmcgdG9WYWx1ZSA9IGxyb3VuZGwo
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVz
dWx0c09iamVjdCwgdG9Qcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0g
ICAgICAgICAgICBhdXRvIHR5cGVWYWx1ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0eXBlUHJv
cGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwgbnVsbHB0cikpOworICAgICAgICAgICAgbG9uZyBm
cm9tVmFsdWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShj
b250ZXh0LCByZXN1bHRzT2JqZWN0LCBmcm9tUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwg
bnVsbHB0cik7CisgICAgICAgICAgICBsb25nIHRvVmFsdWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0b1Byb3Bl
cnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxwdHIpOworICAgICAgICAgICAgYXV0byB0eXBl
VmFsdWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgcmVzdWx0c09iamVjdCwgdHlwZVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cikp
OwogICAgICAgICAgICAgYXV0byByZXBsYWNlbWVudFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0
eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCByZXBsYWNlbWVudFByb3BlcnR5TmFtZS5nZXQoKSwg
bnVsbHB0cik7CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHJlcGxhY2VtZW50
VGV4dDsKLSAgICAgICAgICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHJlcGxh
Y2VtZW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXBsYWNlbWVudEpTU3RyaW5n
ID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlLCBu
dWxscHRyKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRUZXh0ID0gYWRvcHRDRihKU1N0
cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZXBsYWNlbWVudEpTU3RyaW5n
LmdldCgpKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVm
aW5lZChjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXBsYWNl
bWVudFRleHQgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgcmVwbGFjZW1lbnRWYWx1ZSkuZ2V0KCkp
KTsKICAgICAgICAgICAgIGF1dG8gZGV0YWlscyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdF0pOwogICAgICAgICAgICAgYXV0byBkZXRhaWxzVmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIGRldGFpbHNQcm9wZXJ0eU5hbWUuZ2V0
KCksIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4
dCwgZGV0YWlsc1ZhbHVlKSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9E
aWN0aW9uYXJ5RnVuY3Rpb25zLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlG
dW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTUxOGFiMzgxMzhkNmI3YmZhYTAzNTlmNzgyY2VjZDg3
MzZmOTA5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9u
YXJ5RnVuY3Rpb25zLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgorCituYW1lc3BhY2UgV1RSIHsKKwor
V0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnlWYWx1ZShXS1R5cGVSZWYpOworCitib29sIGJvb2xl
YW5WYWx1ZShXS1R5cGVSZWYpOworYm9vbCBib29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiYpOworCitkb3VibGUgZG91YmxlVmFsdWUoV0tUeXBlUmVmKTsKK09wdGlvbmFs
PGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS1R5cGVSZWYpOworCitXS1N0cmluZ1JlZiBz
dHJpbmdWYWx1ZShXS1R5cGVSZWYpOworV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoV0tUeXBlUmVm
KTsKKwordWludDY0X3QgdWludDY0VmFsdWUoV0tUeXBlUmVmKTsKK3VpbnQ2NF90IHVpbnQ2NFZh
bHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4mKTsKKworV0tUeXBlUmVmIHZhbHVlKFdL
RGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKworYm9vbCBib29sZWFuVmFsdWUoV0tE
aWN0aW9uYXJ5UmVmLCBjb25zdCBjaGFyKiBrZXkpOworZG91YmxlIGRvdWJsZVZhbHVlKFdLRGlj
dGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKK1dLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdL
RGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKFdL
RGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKworT3B0aW9uYWw8ZG91YmxlPiBvcHRp
b25hbERvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFi
bGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgT3B0aW9uYWw8VD4mIHZh
bHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVl
KGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhciog
a2V5LCBib29sIHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKTsK
K3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4m
LCBjb25zdCBjaGFyKiBrZXksIHVpbnQ2NF90IHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3Qg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGRv
dWJsZSB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURp
Y3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUp
OworCitpbmxpbmUgYm9vbCBib29sZWFuVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJl
dHVybiB2YWx1ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkg
JiYgV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPih2YWx1ZSkpOwor
fQorCitpbmxpbmUgYm9vbCBib29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiYgdmFsdWUpCit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZSh2YWx1ZS5nZXQoKSk7Cit9CisK
K2lubGluZSBXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpID8gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPih2YWx1ZSkgOiBudWxs
cHRyOworfQorCitpbmxpbmUgZG91YmxlIGRvdWJsZVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRG91YmxlR2V0VHlw
ZUlEKCkgPyBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPih2YWx1ZSkp
IDogMDsKK30KKworaW5saW5lIE9wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShX
S1R5cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVl
KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpID8gbWFrZU9wdGlvbmFsKFdLRG91YmxlR2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KHZhbHVlKSkpIDogV1RGOjpudWxsb3B0OworfQorCitp
bmxpbmUgV0tTdHJpbmdSZWYgc3RyaW5nVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJl
dHVybiB2YWx1ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSA/
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxpbmUg
V1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB0
b1dURlN0cmluZyhzdHJpbmdWYWx1ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdWludDY0X3QgdWlu
dDY0VmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dldFR5
cGVJRCh2YWx1ZSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSA/IFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KHZhbHVlKSkgOiAwOworfQorCitpbmxpbmUgdWludDY0X3Qg
dWludDY0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7CisgICAg
cmV0dXJuIHVpbnQ2NFZhbHVlKHZhbHVlLmdldCgpKTsKK30KKworaW5saW5lIFdLVHlwZVJlZiB2
YWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAg
IHJldHVybiBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHRvV0soa2V5KS5n
ZXQoKSk7Cit9CisKK2lubGluZSBib29sIGJvb2xlYW5WYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGlj
dGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUodmFs
dWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBkb3VibGUgZG91YmxlVmFsdWUoV0tE
aWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4g
ZG91YmxlVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBXS1N0cmlu
Z1JlZiBzdHJpbmdWYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhciog
a2V5KQoreworICAgIHJldHVybiBzdHJpbmdWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsK
K30KKworaW5saW5lIHVpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9u
YXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHZhbHVlKGRp
Y3Rpb25hcnksIGtleSkpOworfQorCitpbmxpbmUgT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERv
dWJsZVZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7
CisgICAgcmV0dXJuIG9wdGlvbmFsRG91YmxlVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7
Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURp
Y3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1
ZSkKK3sKKyAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHRvV0soa2V5
KS5nZXQoKSwgdmFsdWUpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5
LCBib29sIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVl
KGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBj
b25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rp
b25hcnksIGtleSwgdG9XSyh2YWx1ZSkuZ2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1
ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwg
Y29uc3QgY2hhcioga2V5LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0VmFs
dWUoZGljdGlvbmFyeSwga2V5LCB0b1dLKHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lk
IHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0
aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHNldFZhbHVl
KGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsK
K30KKworaW5saW5lIHZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4mIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSwgZG91YmxlIHZhbHVlKQor
eworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2
YWx1ZSkpLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZXRWYWx1ZShj
b25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29u
c3QgY2hhcioga2V5LCBjb25zdCBPcHRpb25hbDxUPiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
KQorICAgICAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXksICp2YWx1ZSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNl
bmRlclByb3h5LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaApp
bmRleCA2NDQ3NjAzOTY4ZDIwNjQyMGJlYjk0Mjc3M2IyNGI3ODk2NDFiNWM5Li5mYTNhODhkM2Fm
MzkzNGQ0Yzg4MjBiZjUwZmU5Zjg5N2IzOGZkMDRhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0V2ZW50U2VuZGVyUHJveHkuaApAQCAtMTEyLDE4ICsxMTIsMTkgQEAgcHJpdmF0ZToKICAgICBQ
T0lOVCBwb3NpdGlvbkluUG9pbnQoKSBjb25zdCB7IHJldHVybiB7IHN0YXRpY19jYXN0PExPTkc+
KG1fcG9zaXRpb24ueCksIHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueSkgfTsgfQogI2Vu
ZGlmCiAKLSAgICBkb3VibGUgbV90aW1lOwotICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKLSAgICBi
b29sIG1fbGVmdE1vdXNlQnV0dG9uRG93bjsKLSAgICBpbnQgbV9jbGlja0NvdW50OwotICAgIGRv
dWJsZSBtX2NsaWNrVGltZTsKLSAgICBXS1BvaW50IG1fY2xpY2tQb3NpdGlvbjsKLSAgICBXS0V2
ZW50TW91c2VCdXR0b24gbV9jbGlja0J1dHRvbjsKKyAgICBkb3VibGUgbV90aW1lIHsgMCB9Owor
ICAgIFdLUG9pbnQgbV9wb3NpdGlvbiB7IH07CisgICAgYm9vbCBtX2xlZnRNb3VzZUJ1dHRvbkRv
d24geyBmYWxzZSB9OworICAgIGludCBtX2NsaWNrQ291bnQgeyAwIH07CisgICAgZG91YmxlIG1f
Y2xpY2tUaW1lIHsgMCB9OworICAgIFdLUG9pbnQgbV9jbGlja1Bvc2l0aW9uIHsgfTsKKyAgICBX
S0V2ZW50TW91c2VCdXR0b24gbV9jbGlja0J1dHRvbiB7IGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1
dHRvbiB9OwogICAgIHVuc2lnbmVkIG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB7IDAgfTsK
ICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpbnQgZXZlbnROdW1iZXI7Ci0jZWxpZiBQTEFURk9S
TShXUEUpCi0gICAgdWludDMyX3QgbV9idXR0b25TdGF0ZTsKKyAgICBpbnQgZXZlbnROdW1iZXIg
eyAwIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShXUEUpCisgICAgdWludDMyX3QgbV9idXR0b25T
dGF0ZSB7IDAgfTsKICAgICBWZWN0b3I8c3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+
IG1fdG91Y2hFdmVudHM7CiAgICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWdu
ZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV91cGRh
dGVkVG91Y2hFdmVudHM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9H
ZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKaW5kZXggNmY5M2NhMjczMDMwZjU3NzZlMzE4Zjll
NDU2OTAyMmNlZTE0YjkwZC4uYzQyNTFiMzAxZmI1NTRjN2VhZTYwMzE2Mjc1OTZmNTBiNzhhMjU5
ZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVy
TW9jay5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVy
TW9jay5jcHAKQEAgLTYzLDkgKzYzLDkgQEAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6On5HZW9s
b2NhdGlvblByb3ZpZGVyTW9jaygpCiAgICAgV0tHZW9sb2NhdGlvbk1hbmFnZXJTZXRQcm92aWRl
cihtX2dlb2xvY2F0aW9uTWFuYWdlciwgMCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Qcm92aWRl
ck1vY2s6OnNldFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91
YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9v
bCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29s
IHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91
YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2
b2lkIEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUs
IGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRp
dHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+
IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JM
ZXZlbCkKIHsKLSAgICBtX3Bvc2l0aW9uLmFkb3B0KFdLR2VvbG9jYXRpb25Qb3NpdGlvbkNyZWF0
ZV9jKFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgbGF0aXR1
ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92
aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywg
aGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JM
ZXZlbCkpOworICAgIG1fcG9zaXRpb24uYWRvcHQoV0tHZW9sb2NhdGlvblBvc2l0aW9uQ3JlYXRl
X2MoV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpLCBsYXRpdHVk
ZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGUuaGFzVmFsdWUoKSwgYWx0aXR1ZGUudmFs
dWVPcigwKSwgYWx0aXR1ZGVBY2N1cmFjeS5oYXNWYWx1ZSgpLCBhbHRpdHVkZUFjY3VyYWN5LnZh
bHVlT3IoMCksIGhlYWRpbmcuaGFzVmFsdWUoKSwgaGVhZGluZy52YWx1ZU9yKDApLCBzcGVlZC5o
YXNWYWx1ZSgpLCBzcGVlZC52YWx1ZU9yKDApLCBmbG9vckxldmVsLmhhc1ZhbHVlKCksIGZsb29y
TGV2ZWwudmFsdWVPcigwKSkpOwogCiAgICAgbV9oYXNFcnJvciA9IGZhbHNlOwogICAgIG1fZXJy
b3JNZXNzYWdlLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dl
b2xvY2F0aW9uUHJvdmlkZXJNb2NrLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0
aW9uUHJvdmlkZXJNb2NrLmgKaW5kZXggMWVkNGFkZjliMzkzOTNhMzMzYWEzMjUxMDk3YjllM2Fh
NDJjYzM2Yi4uOWJmNjMzODRhZTI3ZGIyOGM1ZjU0MDU2ODViODhmNzViZWQ3YjUxNiAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaApAQCAt
MzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2soV0tDb250
ZXh0UmVmKTsKICAgICB+R2VvbG9jYXRpb25Qcm92aWRlck1vY2soKTsKIAotICAgIHZvaWQgc2V0
UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJh
Y3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNI
ZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQs
IGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBz
ZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1
cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVk
ZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3Bl
ZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRQb3NpdGlvblVu
YXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKIAogICAgIHZvaWQgc3Rh
cnRVcGRhdGluZyhXS0dlb2xvY2F0aW9uTWFuYWdlclJlZik7CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuY3BwCmluZGV4IDZhMDhhYWE2YjYzOWYzZjU1YzhjNDZhOTRjMmZlOTVkYjU0N2Y3
ODIuLmFkNGEyNWFlNWIwN2I3NThlMmUwYTkxZmFmMWI1MjgzMDNlYjg0OGQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCkBAIC03NSw5ICs3NSw5IEBAIHZvaWQgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OnVwZGF0ZUlzb2xhdGVkVHJlZU1vZGUoKQogfQogI2VuZGlmCiAKLXZv
aWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3Qs
ICJhY2Nlc3NpYmlsaXR5Q29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAg
c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVy
IiwgdGhpcyk7CiB9CiAKIEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OndyYXBw
ZXJDbGFzcygpCkBAIC05NiwxNyArOTYsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6ZW5oYW5jZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZCgpCiB9CiAKICNpZiBQTEFURk9STShDT0NP
QSkKKwogUmVmPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
Ojpyb290RWxlbWVudCgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVt
ZW50IHJvb3QgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5
Um9vdE9iamVjdChwYWdlKSk7Ci0KICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y3JlYXRlKHJvb3QpOwogfQogCiBSZWY8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYg
cGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBh
dXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAg
ICAgUGxhdGZvcm1VSUVsZW1lbnQgZm9jdXNlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxQbGF0Zm9y
bVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Rm9jdXNlZE9iamVjdChwYWdlKSk7CiAgICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShmb2N1c2VkRWxlbWVudCk7CiB9CmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKaW5kZXggNjZjMzQzODIyYmJiYzY5NTk5YmFmNmE0
NzY2MGExMzg3ZWUyNTFiMC4uZDljMmYxMjZmODcxY2UyZWVmMDdiMDAzNTgwZjZkYWNlNmM1NDIz
NSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAg
ICAgfkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmpl
Y3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAgICAg
dmlydHVhbCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOwogICAgIAogICAgIC8vIEVuaGFuY2Vk
IGFjY2Vzc2liaWxpdHkuCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1
bm5lci5wbQppbmRleCBiOWY1ZWVmZmE0NjQ5ZjQxN2Y4MmIxNjE3MDlmNGFiYWUwOTk5MWYyLi41
MmUzZWZhOTkxYjlkZDZjMTc1ZGJiOGU0MTBlNmZlY2ZhYzMwMTA4IDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JU
ZXN0UnVubmVyLnBtCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG0KQEAgLTI2MSw4ICsyNjEsNyBAQCAk
e2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfSogdG8ke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfShK
U0NvbnRleHRSZWYgY29udGV4dCwgSgogCiBKU0NsYXNzUmVmICR7Y2xhc3NOYW1lfTo6JHtjbGFz
c1JlZkdldHRlcn0oKQogewotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7Ci0gICAgaWYg
KCFqc0NsYXNzKSB7CisgICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NSZWYganNDbGFzcyA9IFtdIHsK
ICAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlv
bkVtcHR5OwogICAgICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJAe1skdHlwZS0+bmFtZV19
IjsKICAgICAgICAgZGVmaW5pdGlvbi5wYXJlbnRDbGFzcyA9IEB7WyRzZWxmLT5fcGFyZW50Q2xh
c3NSZWZHZXR0ZXJFeHByZXNzaW9uKCRpbnRlcmZhY2UpXX07CkBAIC0yNzQsOCArMjczLDggQEAg
RU9GCiAgICAgcHVzaChAY29udGVudHMsICIgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBm
aW5hbGl6ZTtcbiIpIHVubGVzcyBfcGFyZW50SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCiAgICAg
cHVzaChAY29udGVudHMsIDw8RU9GKTsKLSAgICAgICAganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUo
JmRlZmluaXRpb24pOwotICAgIH0KKyAgICAgICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmRlZmlu
aXRpb24pOworICAgIH0oKTsKICAgICByZXR1cm4ganNDbGFzczsKIH0KIApAQCAtNDc3LDEwICs0
NzYsMTEgQEAgc3ViIF9wbGF0Zm9ybVR5cGVDb25zdHJ1Y3RvcgogewogICAgIG15ICgkc2VsZiwg
JHR5cGUsICRhcmd1bWVudE5hbWUpID0gQF87CiAKLSAgICByZXR1cm4gIkpTVmFsdWVUb051bGxh
YmxlQm9vbGVhbihjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJv
b2xlYW4iICYmICR0eXBlLT5pc051bGxhYmxlOworICAgIHJldHVybiAidG9PcHRpb25hbEJvb2wo
Y29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAk
dHlwZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwg
JGFyZ3VtZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4g
IiRhcmd1bWVudE5hbWUiIGlmICR0eXBlLT5uYW1lIGVxICJvYmplY3QiOwotICAgIHJldHVybiAi
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRy
KSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICBy
ZXR1cm4gImNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7
Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJ0b09wdGlv
bmFsRG91YmxlKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRv
cn0tPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgJiYgJHR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0
dXJuICJKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKTsKICAgICByZXR1
cm4gInRvIiAuIF9pbXBsZW1lbnRhdGlvbkNsYXNzTmFtZSgkdHlwZSkgLiAiKGNvbnRleHQsICRh
cmd1bWVudE5hbWUpIjsKIH0KQEAgLTQ5OSwxOCArNDk5LDE2IEBAIHN1YiBfcGxhdGZvcm1UeXBl
VmFyaWFibGVEZWNsYXJhdGlvbgogICAgICAgICAiSlNWYWx1ZVJlZiIgPT4gMSwKICAgICApOwog
Ci0gICAgbXkgJG51bGxWYWx1ZSA9ICIwIjsKKyAgICBteSAkbnVsbFZhbHVlID0gIm51bGxwdHIi
OwogICAgIGlmICgkcGxhdGZvcm1UeXBlIGVxICJKU1ZhbHVlUmVmIikgewogICAgICAgICAkbnVs
bFZhbHVlID0gIkpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpIjsKLSAgICB9IGVsc2lmIChk
ZWZpbmVkICRub25Qb2ludGVyVHlwZXN7JHBsYXRmb3JtVHlwZX0gJiYgJHBsYXRmb3JtVHlwZSBu
ZSAiZG91YmxlIikgewotICAgICAgICAkbnVsbFZhbHVlID0gIiRwbGF0Zm9ybVR5cGUoKSI7Cisg
ICAgfSBlbHNpZiAoZGVmaW5lZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9KSB7Cisg
ICAgICAgICRudWxsVmFsdWUgPSAkdHlwZS0+aXNOdWxsYWJsZSA/ICJXVEY6Om51bGxvcHQiIDog
IiRwbGF0Zm9ybVR5cGUoKSI7CiAgICAgfQogCi0gICAgJHBsYXRmb3JtVHlwZSAuPSAiKiIgdW5s
ZXNzIGRlZmluZWQgJG5vblBvaW50ZXJUeXBlc3skcGxhdGZvcm1UeXBlfTsKLQotICAgIHJldHVy
biAiJHBsYXRmb3JtVHlwZSAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiAmJiAkY29uc3RydWN0
b3I7IiBpZiAkY29uZGl0aW9uICYmICRwbGF0Zm9ybVR5cGUgZXEgImJvb2wiOwotICAgIHJldHVy
biAiJHBsYXRmb3JtVHlwZSAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiA/ICRjb25zdHJ1Y3Rv
ciA6ICRudWxsVmFsdWU7IiBpZiAkY29uZGl0aW9uOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlw
ZSAkdmFyaWFibGVOYW1lID0gJGNvbnN0cnVjdG9yOyI7CisgICAgcmV0dXJuICJib29sICR2YXJp
YWJsZU5hbWUgPSAkY29uZGl0aW9uICYmICRjb25zdHJ1Y3RvcjsiIGlmICRjb25kaXRpb24gJiYg
JHBsYXRmb3JtVHlwZSBlcSAiYm9vbCI7CisgICAgcmV0dXJuICJhdXRvICR2YXJpYWJsZU5hbWUg
PSAkY29uZGl0aW9uID8gJGNvbnN0cnVjdG9yIDogJG51bGxWYWx1ZTsiIGlmICRjb25kaXRpb247
CisgICAgcmV0dXJuICJhdXRvICR2YXJpYWJsZU5hbWUgPSAkY29uc3RydWN0b3I7IjsKIH0KIAog
c3ViIF9yZXR1cm5FeHByZXNzaW9uCkBAIC01MTgsMTEgKzUxNiwxMSBAQCBzdWIgX3JldHVybkV4
cHJlc3Npb24KICAgICBteSAoJHNlbGYsICRyZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsK
IAogICAgIHJldHVybiAiSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5U
eXBlLT5uYW1lIGVxICJ1bmRlZmluZWQiOwotICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFu
T3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAi
Ym9vbGVhbiIgJiYgJHJldHVyblR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFs
dWUoY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29s
ZWFuIiAmJiAkcmV0dXJuVHlwZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtl
Qm9vbGVhbihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEg
ImJvb2xlYW4iOwogICAgIHJldHVybiAiJHtleHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5h
bWUgZXEgIm9iamVjdCI7CiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUo
JHJldHVyblR5cGUpOwotICAgIHJldHVybiAiSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4
dCwgJHtleHByZXNzaW9ufS5nZXQoKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJp
bmdUeXBlKCRyZXR1cm5UeXBlKTsKKyAgICByZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4
cHJlc3Npb259LmdldCgpKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUo
JHJldHVyblR5cGUpOwogICAgIHJldHVybiAidG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4
cHJlc3Npb259KSkiOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAppbmRleCBmYmVmMzk2
ZjVmNmYzYmZmNGY5OWM4YTU2YTZlNjJhYzAxNDBmZmE0Li5mMzdlMDA2Nzc1YjhlMzA2MWM3Y2Vj
OGY5YjVlZjc4ODYxODA5MTBhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKQEAgLTIxNSw3
ICsyMTUsNyBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAKICAgICAvLyBHZW9sb2NhdGlvbgog
ICAgIHVuZGVmaW5lZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhbiB2YWx1ZSk7Ci0g
ICAgdW5kZWZpbmVkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwg
ZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgYWx0aXR1
ZGUsIG9wdGlvbmFsIG9iamVjdCBhbHRpdHVkZUFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgaGVh
ZGluZywgb3B0aW9uYWwgb2JqZWN0IHNwZWVkLCBvcHRpb25hbCBvYmplY3QgZmxvb3JMZXZlbCk7
CisgICAgdW5kZWZpbmVkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBkb3VibGU/IGFs
dGl0dWRlLCBvcHRpb25hbCBkb3VibGU/IGFsdGl0dWRlQWNjdXJhY3ksIG9wdGlvbmFsIGRvdWJs
ZT8gaGVhZGluZywgb3B0aW9uYWwgZG91YmxlPyBzcGVlZCwgb3B0aW9uYWwgZG91YmxlPyBmbG9v
ckxldmVsKTsKICAgICB1bmRlZmluZWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWls
YWJsZUVycm9yKERPTVN0cmluZyBlcnJvck1lc3NhZ2UpOwogICAgIGJvb2xlYW4gaXNHZW9sb2Nh
dGlvblByb3ZpZGVyQWN0aXZlKCk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCmlu
ZGV4IDU1M2ZkMDVlZjE2OWYzNTIzYTA0MzFmMTMxNzQyZmJjMjIxNzA0MDkuLjQ0MjdmMDg5MjYw
MTZhYTM0ODM5NzIyYzcxYmMzYTA2MTJkZDI3ZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9s
bGVyLmNwcApAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0
aW9ucy5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRC
dW5kbGVQYWdlLmgiCiAjaW5jbHVkZSAiSlNFdmVudFNlbmRpbmdDb250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlLmg+CiAj
aW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5k
bGVQYWdlUHJpdmF0ZS5oPgpAQCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgTWVudUl0ZW1Qcml2YXRl
RGF0YSB7CiB9OwogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCisKIHN0YXRpYyBKU1ZhbHVl
UmVmIG1lbnVJdGVtQ2xpY2tDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBK
U1ZhbHVlUmVmKikKIHsKICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0
YXRpY19jYXN0PE1lbnVJdGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwpAQCAtNjIsNyArNjMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNr
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iagogc3RhdGlj
IEpTVmFsdWVSZWYgZ2V0TWVudUl0ZW1UaXRsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQogewogICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRhID0g
c3RhdGljX2Nhc3Q8TWVudUl0ZW1Qcml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmpl
Y3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZSA9IGFkb3B0V0soV0tD
b250ZXh0TWVudUl0ZW1Db3B5VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQoKSkpOworICAg
IGF1dG8gd2tUaXRsZSA9IGFkb3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5VGl0bGUocHJpdmF0
ZURhdGEtPm1faXRlbS5nZXQoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250
ZXh0LCB0b0pTKHdrVGl0bGUpLmdldCgpKTsKIH0KIApAQCAtNzMsMTggKzc0LDE3IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIGdldE1lbnVJdGVtQ2hpbGRyZW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYKICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9
IHN0YXRpY19jYXN0PE1lbnVJdGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUob2Jq
ZWN0KSk7CiAgICAgYXV0byBjaGlsZHJlbiA9IGFkb3B0V0soV0tDb250ZXh0TWVudUNvcHlTdWJt
ZW51SXRlbXMocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQoKSkpOwogCi0gICAgSlNWYWx1ZVJlZiBh
cnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOworICAgIGF1
dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAo
IVdLQXJyYXlHZXRTaXplKGNoaWxkcmVuLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGFycmF5UmVz
dWx0OworICAgICAgICByZXR1cm4gYXJyYXk7CiAKLSAgICBKU09iamVjdFJlZiBhcnJheU9iamVj
dCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBXS0FycmF5R2V0U2l6ZShjaGlsZHJlbi5nZXQoKSk7ICsraSkgewog
ICAgICAgICBhdXRvIGl0ZW0gPSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KGNoaWxkcmVuLmdldCgpLCBpKSk7CiAgICAgICAgIGF1dG8qIHBy
aXZhdGVEYXRhID0gbmV3IE1lbnVJdGVtUHJpdmF0ZURhdGEoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBpdGVtKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eUF0SW5kZXgoY29udGV4dCwgYXJyYXlPYmplY3QsIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBn
ZXRNZW51SXRlbUNsYXNzKCksIHByaXZhdGVEYXRhKSwgMCk7CisgICAgICAgIEpTT2JqZWN0U2V0
UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwg
Z2V0TWVudUl0ZW1DbGFzcygpLCBwcml2YXRlRGF0YSksIDApOwogICAgIH0KIAotICAgIHJldHVy
biBhcnJheVJlc3VsdDsKKyAgICByZXR1cm4gYXJyYXk7CiB9CiAKIHN0YXRpYyBKU1N0YXRpY0Z1
bmN0aW9uIHN0YXRpY01lbnVJdGVtRnVuY3Rpb25zW10gPSB7CkBAIC0xMjYsNiArMTI2LDcgQEAg
c3RhdGljIEpTQ2xhc3NSZWYgZ2V0TWVudUl0ZW1DbGFzcygpCiAKICAgICByZXR1cm4gbWVudUl0
ZW1DbGFzczsKIH0KKwogI2VuZGlmCiAKIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9k
aWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIpCkBAIC0xNTAsMjUgKzE1MSwzMSBAQCBzdGF0aWMg
V0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyKQogICAg
IHJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGFycmF5KQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisK
K3N0YXRpYyB1aW50NjRfdCBwYXJzZVRvdWNoTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIp
CiB7Ci0gICAgYXV0byBsZW5ndGhTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVj
dEdldFByb3BlcnR5KGNvbnRleHQsIGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIDApOwotICAg
IGlmICghbGVuZ3RoVmFsdWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7
CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJjdHJsIikp
CisgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVyc0NvbnRyb2xLZXk7CisgICAgaWYgKEpT
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJzaGlmdCIpKQorICAgICAgICBy
ZXR1cm4ga1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImFsdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRN
b2RpZmllcnNBbHRLZXk7CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9k
aWZpZXIsICJtZXRhS2V5IikpCisgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVyc01ldGFL
ZXk7CisgICAgcmV0dXJuIDA7CiB9CiAKKyNlbmRpZgorCiBzdGF0aWMgV0tFdmVudE1vZGlmaWVy
cyBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJy
YXlWYWx1ZSkKIHsKICAgICBpZiAoIWFycmF5VmFsdWUpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgLy8gVGhlIHZhbHVlIG1heSBlaXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBtb2Rp
ZmllciBvciBhbiBhcnJheSBvZiBtb2RpZmllcnMuCi0gICAgaWYgKEpTVmFsdWVJc1N0cmluZyhj
b250ZXh0LCBhcnJheVZhbHVlKSkgewotICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJyYXlWYWx1ZSwgMCkpOwotICAgICAgICByZXR1cm4g
cGFyc2VNb2RpZmllcihzdHJpbmcuZ2V0KCkpOwotICAgIH0KKyAgICBpZiAoSlNWYWx1ZUlzU3Ry
aW5nKGNvbnRleHQsIGFycmF5VmFsdWUpKQorICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKS5nZXQoKSk7CiAKICAgICBpZiAoIUpT
VmFsdWVJc09iamVjdChjb250ZXh0LCBhcnJheVZhbHVlKSkKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0xNzYsMjkgKzE4MywyMCBAQCBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVy
QXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYQogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIGFycmF5KTsKICAgICBXS0V2ZW50TW9kaWZp
ZXJzIG1vZGlmaWVycyA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICAgICAgSlNWYWx1
ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBp
LCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgdmFsdWUsICZleGNlcHRpb24pKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtb2RpZmllcnMgfD0gcGFyc2VNb2RpZmllcihzdHJp
bmcuZ2V0KCkpOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlB
dEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBudWxscHRyKSkKKyAgICAgICAgICAgIG1vZGlmaWVy
cyB8PSBwYXJzZU1vZGlmaWVyKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7
CiAgICAgfQogICAgIHJldHVybiBtb2RpZmllcnM7CiB9CiAKLVJlZjxFdmVudFNlbmRpbmdDb250
cm9sbGVyPiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIpOwotfQotCi1FdmVudFNlbmRpbmdD
b250cm9sbGVyOjpFdmVudFNlbmRpbmdDb250cm9sbGVyKCkKK3N0YXRpYyBXS0V2ZW50TW9kaWZp
ZXJzIHBhcnNlTW9kaWZpZXJBcnJheShKU1ZhbHVlUmVmIGFycmF5VmFsdWUpCiB7CisgICAgcmV0
dXJuIHBhcnNlTW9kaWZpZXJBcnJheShXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQo
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSkpLCBhcnJheVZhbHVlKTsKIH0KIAotRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
fkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKQorUmVmPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+IEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRXZlbnRTZW5kaW5nQ29udHJvbGxlcik7CiB9CiAKIEpTQ2xhc3NSZWYgRXZlbnRTZW5kaW5n
Q29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKQEAgLTIwNiwyMzcgKzIwNCwxMTYgQEAgSlNDbGFz
c1JlZiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogICAgIHJldHVybiBK
U0V2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmV2ZW50U2VuZGluZ0NvbnRyb2xsZXJDbGFzcygpOwog
fQogCi1lbnVtIE1vdXNlU3RhdGUgewotICAgIE1vdXNlVXAsCi0gICAgTW91c2VEb3duCi19Owor
ZW51bSBNb3VzZVN0YXRlIHsgTW91c2VVcCwgTW91c2VEb3duIH07CiAKLXN0YXRpYyBXS011dGFi
bGVEaWN0aW9uYXJ5UmVmIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VTdGF0ZSBzdGF0ZSwg
aW50IGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMpCitzdGF0aWMgV0tSZXRhaW5Q
dHI8V0tEaWN0aW9uYXJ5UmVmPiBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlU3RhdGUgc3Rh
dGUsIGludCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQogewotICAgIFdLTXV0
YWJsZURpY3Rpb25hcnlSZWYgRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0YXRlID09IE1vdXNlVXAgPyAiTW91c2VV
cCIgOiAiTW91c2VEb3duIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1dHRvbktleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJ
bnQ2NFJlZj4gYnV0dG9uUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b24pKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHksIGJ1dHRvbktleS5n
ZXQoKSwgYnV0dG9uUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
b2RpZmllcnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2Rp
ZmllcnMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlmaWVyc1JlZiA9IGFk
b3B0V0soV0tVSW50NjRDcmVhdGUobW9kaWZpZXJzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LCBtb2RpZmllcnNLZXkuZ2V0KCksIG1vZGlmaWVyc1Jl
Zi5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRv
IGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCBzdGF0ZSA9PSBNb3VzZVVwID8gIk1vdXNlVXAiIDogIk1v
dXNlRG93biIpOworICAgIHNldFZhbHVlKGJvZHksICJCdXR0b24iLCBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGJ1dHRvbikpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTW9kaWZpZXJzIiwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKS5nZXQoKSk7CisgICAgcmV0dXJuIGJv
ZHk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKGludCBidXR0
b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSkgCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBh
Z2UgPSBpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAg
ICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0
LCBtb2RpZmllckFycmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShN
b3VzZURvd24sIGJ1dHRvbiwgbW9kaWZpZXJzKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNl
RG93biwgYnV0dG9uLCBwYXJzZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJheSkpLmdldCgpKTsK
IH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVVwKGludCBidXR0b24sIEpT
VmFsdWVSZWYgbW9kaWZpZXJBcnJheSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1l
KTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShj
b250ZXh0LCBtb2RpZmllckFycmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdl
Qm9keShNb3VzZVVwLCBidXR0b24sIG1vZGlmaWVycykpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgi
RXZlbnRTZW5kZXIiLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlVXAsIGJ1dHRvbiwgcGFy
c2VNb2RpZmllckFycmF5KG1vZGlmaWVyQXJyYXkpKS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8oaW50IHgsIGludCB5KQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZU1v
dmVUbyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYg
PSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCisg
ICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAg
IHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIk1vdXNlTW92ZVRvIik7CisgICAgc2V0VmFs
dWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0
VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CiAgICAg
bV9wb3NpdGlvbiA9IFdLUG9pbnRNYWtlKHgsIHkpOwotICAgIAotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2Uo
IkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6bW91c2VGb3JjZUNsaWNrKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VGb3JjZUNsaWNrIikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2Fn
ZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAi
TW91c2VGb3JjZUNsaWNrIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50
U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
c3RhcnRBbmRDYW5jZWxNb3VzZUZvcmNlQ2xpY2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxl
RGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVz
c2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGFydEFuZENhbmNlbE1vdXNl
Rm9yY2VDbGljayIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsK
LQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBi
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVl
KGJvZHksICJTdWJNZXNzYWdlIiwgIlN0YXJ0QW5kQ2FuY2VsTW91c2VGb3JjZUNsaWNrIik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7
CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZURvd24oKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJNb3VzZUZvcmNlRG93biIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdl
dCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAg
YXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNl
dFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIk1vdXNlRm9yY2VEb3duIik7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZv
aWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZVVwKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VGb3Jj
ZVVwIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
IlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZVVwIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5n
Q29udHJvbGxlcjo6bW91c2VGb3JjZUNoYW5nZWQoZG91YmxlIGZvcmNlKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZv
cmNlQ2hhbmdlZCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvcmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91
YmxlUmVmPiBmb3JjZVJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoZm9yY2UpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGZvcmNlS2V5
LmdldCgpLCBmb3JjZVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZUZvcmNl
Q2hhbmdlZCIpOworICAgIHNldFZhbHVlKGJvZHksICJGb3JjZSIsIGZvcmNlKTsKKyAgICBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAog
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRz
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJMZWFwRm9yd2FyZCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1l
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZUluTWlsbGlzZWNvbmRzIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB0aW1lUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShtaWxsaXNlY29uZHMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHRpbWVLZXkuZ2V0KCksIHRpbWVSZWYuZ2V0KCkpOwotCi0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
IlN1Yk1lc3NhZ2UiLCAiTGVhcEZvcndhcmQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiVGltZUlu
TWlsbGlzZWNvbmRzIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMpKS5nZXQo
KSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5n
ZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hy
b25vdXNDbGljaygpCiB7Ci0gICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOwotICAg
IGludCBidXR0b24gPSAwOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJF
dmVudFNlbmRlciIpKTsKLQotICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSBkb3duLgotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1vdXNlRG93bk1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBtb2RpZmll
cnMpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNl
RG93bk1lc3NhZ2VCb2R5LmdldCgpKTsKLQotICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSB1cC4K
LSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtb3VzZVVwTWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBtb2Rp
ZmllcnMpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1v
dXNlVXBNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRl
ciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VEb3duLCAwLCAwKS5nZXQoKSk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91
c2VVcCwgMCwgMCkuZ2V0KCkpOwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KEpTU3RyaW5nUmVmIGtleSwgV0tF
dmVudE1vZGlmaWVycyBtb2RpZmllcnMsIGludCBsb2NhdGlvbikKIHsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleURvd24i
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiS2V5IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwga2V5S2V5LmdldCgpLCB0b1dLKGtleSkuZ2V0KCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJ
bnQ2NFJlZj4gbW9kaWZpZXJzUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IG1vZGlmaWVyc0tleS5nZXQoKSwgbW9kaWZpZXJzUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBsb2NhdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkxvY2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBs
b2NhdGlvblJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobG9jYXRpb24pKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGxvY2F0aW9uS2V5
LmdldCgpLCBsb2NhdGlvblJlZi5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRXZlbnRTZW5kZXJNZXNz
YWdlQm9keTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiS2V5RG93biIpOworICAg
IHNldFZhbHVlKGJvZHksICJLZXkiLCB0b1dLKGtleSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJv
ZHksICJNb2RpZmllcnMiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpLmdldCgp
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTG9jYXRpb24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KGxvY2F0aW9uKSkuZ2V0KCkpOworICAgIHJldHVybiBib2R5OwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OmtleURvd24oSlNTdHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlm
aWVyQXJyYXksIGludCBsb2NhdGlvbikKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1l
KTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShj
b250ZXh0LCBtb2RpZmllckFycmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4ga2V5RG93bk1lc3NhZ2VCb2R5ID0gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwg
bW9kaWZpZXJzLCBsb2NhdGlvbik7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQo
KSwgMCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3Jl
YXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgcGFyc2VNb2RpZmllckFycmF5KG1vZGlmaWVyQXJy
YXkpLCBsb2NhdGlvbikuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBrZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVL
ZXlEb3duTWVzc2FnZUJvZHkoa2V5LCAwIC8qIG1vZGlmaWVycyAqLywgMCAvKiBsb2NhdGlvbiAq
Lyk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIGtleURv
d25NZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIs
IGNyZWF0ZUtleURvd25NZXNzYWdlQm9keShrZXksIDAsIDApLmdldCgpKTsKIH0KIAogdm9pZCBF
dmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
TW91c2VTY3JvbGxCeSIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJl
Zj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVS
ZWY+IHlSZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0
KCkpOwotCiAgICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7IC8vIFRyaWdnZXJzIGEgc2Nyb2xsaW5nIHRyZWUgY29t
bWl0LgotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSk7CisKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0
YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2Ui
LCAiTW91c2VTY3JvbGxCeSIpOworICAgIHNldFZhbHVlKGJvZHksICJYIiwgYWRvcHRXSyhXS0Rv
dWJsZUNyZWF0ZSh4KSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhX
S0RvdWJsZUNyZWF0ZSh5KSkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5k
ZXIiLCBib2R5LmdldCgpKTsKIH0KIAogc3RhdGljIHVpbnQ2NF90IGNnRXZlbnRQaGFzZUZyb21T
dHJpbmcoSlNTdHJpbmdSZWYgcGhhc2VTdHIpCkBAIC00NzUsOTAgKzM1Miw1OCBAQCBzdGF0aWMg
dWludDY0X3QgY2dFdmVudE1vbWVudHVtUGhhc2VGcm9tU3RyaW5nKEpTU3RyaW5nUmVmIHBoYXNl
U3RyKQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQgeCwgaW50IHksIEpTU3RyaW5nUmVmIHBoYXNlU3RyLCBK
U1N0cmluZ1JlZiBtb21lbnR1bVN0cikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxB
bmRNb21lbnR1bVBoYXNlcyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdl
dCgpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
b3VibGVSZWY+IHhSZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhS
ZWYuZ2V0KCkpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQo
KSwgeVJlZi5nZXQoKSk7Ci0KICAgICB1aW50NjRfdCBwaGFzZSA9IGNnRXZlbnRQaGFzZUZyb21T
dHJpbmcocGhhc2VTdHIpOwogICAgIHVpbnQ2NF90IG1vbWVudHVtID0gY2dFdmVudE1vbWVudHVt
UGhhc2VGcm9tU3RyaW5nKG1vbWVudHVtU3RyKTsKLSAgICAKKwogICAgIGlmIChwaGFzZSA9PSA0
IC8qIGtDR1Njcm9sbFBoYXNlRW5kZWQgKi8gfHwgcGhhc2UgPT0gOCAvKiBrQ0dTY3JvbGxQaGFz
ZUNhbmNlbGxlZCAqLykKICAgICAgICAgbV9zZW50V2hlZWxQaGFzZUVuZE9yQ2FuY2VsID0gdHJ1
ZTsKLSAgICAKICAgICBpZiAobW9tZW50dW0gPT0gMyAvKiBrQ0dNb21lbnR1bVNjcm9sbFBoYXNl
RW5kICovKQogICAgICAgICBtX3NlbnRXaGVlbE1vbWVudHVtUGhhc2VFbmQgPSB0cnVlOwogCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBoYXNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGhhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRS
ZWY+IHBoYXNlUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShwaGFzZSkpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgcGhhc2VLZXkuZ2V0
KCksIHBoYXNlUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb21l
bnR1bUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vbWVudHVt
IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtb21lbnR1bVJlZiA9IGFkb3B0V0so
V0tVSW50NjRDcmVhdGUobW9tZW50dW0pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vbWVudHVtS2V5LmdldCgpLCBtb21lbnR1bVJlZi5n
ZXQoKSk7Ci0KICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsgLy8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcgdHJlZSBj
b21taXQuCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpKTsKKworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2Fn
ZSIsICJNb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiWCIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAiWSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiUGhhc2UiLCBwaGFzZSk7CisgICAgc2V0VmFsdWUoYm9keSwgIk1v
bWVudHVtIiwgbW9tZW50dW0pOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBi
b2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3Vz
TW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNvbnRpbnVvdXNN
b3VzZVNjcm9sbEJ5IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVm
PiB4UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJl
Zj4geVJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFnZWRLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQYWdlZCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1VJbnQ2NFJlZj4gcGFnZWRSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHBhZ2VkKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwYWdl
ZEtleS5nZXQoKSwgcGFnZWRSZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNz
YWdlIiwgIkNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgi
LCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
IlkiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9k
eSwgIlBhZ2VkIiwgcGFnZWQpOwogICAgIC8vIEZJWE1FOiBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJl
IGFzeW5jaHJvbm91cywgYXMgc2Nyb2xsaW5nIGlzIGludHJpbnNpY2FsbHkgYXN5bmNocm9ub3Vz
LgogICAgIC8vIFNlZSBhbHNvOiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0ODI1Nj4uCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsK
KyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgp
KTsKIH0KIAogSlNWYWx1ZVJlZiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250ZXh0Q2xpY2so
KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogI2lmIEVO
QUJMRShDT05URVhUX01FTlVTKQotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IG1lbnVFbnRy
aWVzID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3co
cGFnZSwgbV9wb3NpdGlvbikpOwotICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVj
dE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKKyAgICBhdXRvIG1lbnVFbnRyaWVzID0gYWRv
cHRXSyhXS0J1bmRsZVBhZ2VDb3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9w
b3NpdGlvbikpOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAw
LCAwLCAwKTsKICAgICBpZiAoIW1lbnVFbnRyaWVzKQotICAgICAgICByZXR1cm4gYXJyYXlSZXN1
bHQ7CisgICAgICAgIHJldHVybiBhcnJheTsKIAotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKICAgICBzaXplX3QgZW50
cmllc1NpemUgPSBXS0FycmF5R2V0U2l6ZShtZW51RW50cmllcy5nZXQoKSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBlbnRyaWVzU2l6ZTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChXS0FycmF5R2V0SXRlbUF0SW5kZXgobWVudUVudHJpZXMuZ2V0KCksIGkpKSA9PSBX
S0NvbnRleHRNZW51SXRlbUdldFR5cGVJRCgpKTsKIAogICAgICAgICBXS0NvbnRleHRNZW51SXRl
bVJlZiBpdGVtID0gc3RhdGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJ
dGVtQXRJbmRleChtZW51RW50cmllcy5nZXQoKSwgaSkpOwogICAgICAgICBNZW51SXRlbVByaXZh
dGVEYXRhKiBwcml2YXRlRGF0YSA9IG5ldyBNZW51SXRlbVByaXZhdGVEYXRhKHBhZ2UsIGl0ZW0p
OwotICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwg
aSwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEp
LCAwKTsKKyAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXks
IGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCksIHByaXZhdGVEYXRh
KSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgIHJldHVybiBhcnJh
eTsKICNlbHNlCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogI2Vu
ZGlmCkBAIC02MTUsMjEgKzQ2MCwxNCBAQCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKiB0b01v
bml0b3JXaGVlbEV2ZW50c09wdGlvbnMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVgogICAgIGlm
ICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50KSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBhdXRvIHJlc2V0TGF0Y2hpbmdTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygicmVzZXRMYXRjaGluZyIpKTsKLSAgICBhdXRvIHJlc2V0TGF0
Y2hpbmdWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0
KGNvbnRleHQsIGFyZ3VtZW50LCBudWxscHRyKSwgcmVzZXRMYXRjaGluZ1N0cmluZy5nZXQoKSwg
bnVsbHB0cik7Ci0KLSAgICBib29sIHJlc2V0TGF0Y2hpbmcgPSB0cnVlOwotICAgIGlmIChyZXNl
dExhdGNoaW5nVmFsdWUgJiYgSlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5n
VmFsdWUpKQotICAgICAgICByZXNldExhdGNoaW5nID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0
LCByZXNldExhdGNoaW5nVmFsdWUpOwotCiAgICAgc3RhdGljIE1vbml0b3JXaGVlbEV2ZW50c09w
dGlvbnMgb3B0aW9uczsKLSAgICBvcHRpb25zLnJlc2V0TGF0Y2hpbmcgPSByZXNldExhdGNoaW5n
OworICAgIG9wdGlvbnMucmVzZXRMYXRjaGluZyA9IGJvb2xlYW5Qcm9wZXJ0eShjb250ZXh0LCAo
SlNPYmplY3RSZWYpYXJndW1lbnQsICJyZXNldExhdGNoaW5nIiwgdHJ1ZSk7CiAgICAgcmV0dXJu
ICZvcHRpb25zOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vbml0b3JXaGVl
bEV2ZW50cyhNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKiBvcHRpb25zKQogewotICAgIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKTsKICAgICAKICAgICBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgPSBmYWxzZTsK
ICAgICBtX3NlbnRXaGVlbE1vbWVudHVtUGhhc2VFbmQgPSBmYWxzZTsKQEAgLTY2Myw3ICs1MDEs
NyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNhbGxBZnRlclNjcm9sbGluZ0NvbXBs
ZXRlcyhKU1ZhbHVlUmVmIGZ1bmN0aW9uQ2FsbAogICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5G
cmFtZSk7CiAgICAgCkBAIC02ODMsMTk5ICs1MjEsMTAyIEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6Y2FsbEFmdGVyU2Nyb2xsaW5nQ29tcGxldGVzKEpTVmFsdWVSZWYgZnVuY3Rpb25D
YWxsCiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRUb3VjaFBvaW50
IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB4UmVmID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geVJlZiA9IGFk
b3B0V0soV0tVSW50NjRDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0
KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
U3ViTWVzc2FnZSIsICJBZGRUb3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oeCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHkpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZl
bnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVy
Ojp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVcGRhdGVU
b3VjaFBvaW50IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IGluZGV4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXku
Z2V0KCksIGluZGV4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBX
S1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoeCkp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
eEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
eUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHlSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHkp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiVXBkYXRlVG91
Y2hQb2ludCIpOworICAgIHNldFZhbHVlKGJvZHksICJJbmRleCIsIHN0YXRpY19jYXN0PHVpbnQ2
NF90PihpbmRleCkpOworICAgIHNldFZhbHVlKGJvZHksICJYIiwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih5
KSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5n
ZXQoKSk7CiB9CiAKLXZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmll
cihjb25zdCBKU1N0cmluZ1JlZiAmbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQordm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyLCBi
b29sIGVuYWJsZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50
U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0VG91Y2hNb2RpZmllciIpKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCks
IHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kID0gMDsK
LSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImN0cmwiKSkK
LSAgICAgICAgbW9kID0ga1dLRXZlbnRNb2RpZmllcnNDb250cm9sS2V5OwotICAgIGlmIChKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVyLCAic2hpZnQiKSkKLSAgICAgICAgbW9k
ID0ga1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleTsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtb2RpZmllciwgImFsdCIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlm
aWVyc0FsdEtleTsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmll
ciwgIm1ldGEiKSkKLSAgICAgICAgbW9kID0ga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5OwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IG1vZGlmaWVyUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2QpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlm
aWVyS2V5LmdldCgpLCBtb2RpZmllclJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gZW5hYmxlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRW5hYmxlIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBlbmFibGVSZWYgPSBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKGVuYWJsZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgZW5hYmxlS2V5LmdldCgpLCBlbmFibGVSZWYu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiU2V0VG91Y2hNb2RpZmllciIpOworICAgIHNl
dFZhbHVlKGJvZHksICJNb2RpZmllciIsIHBhcnNlVG91Y2hNb2RpZmllcihtb2RpZmllcikpOwor
ICAgIHNldFZhbHVlKGJvZHksICJFbmFibGUiLCBlbmFibGUpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCi0KIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50
IHJhZGl1c1kpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNl
bmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldFRvdWNoUG9pbnRSYWRpdXMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgp
LCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
eEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1giKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKHJhZGl1c1gpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJSYWRpdXNZIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShyYWRpdXNZKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHks
ICJTdWJNZXNzYWdlIiwgIlNldFRvdWNoUG9pbnRSYWRpdXMiKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiUmFkaXVzWCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYWRpdXNYKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgIlJhZGl1c1kiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmFkaXVzWSkpOworICAg
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwog
fQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoU3RhcnQoKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3Vj
aFN0YXJ0IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
LmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9k
eSwgIlN1Yk1lc3NhZ2UiLCAiVG91Y2hTdGFydCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VN
ZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OnRvdWNoTW92ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvdWNoTW92ZSIpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXku
Z2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlRvdWNo
TW92ZSIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJv
ZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoRW5kKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVG91Y2hFbmQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQo
KSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1
dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJUb3VjaEVuZCIpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1l
c3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hDYW5jZWwiKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJN
ZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2Fn
ZSIsICJUb3VjaENhbmNlbCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OmNsZWFyVG91Y2hQb2ludHMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhclRvdWNoUG9pbnRzIikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtl
eS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiQ2xl
YXJUb3VjaFBvaW50cyIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNl
bmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnJl
bGVhc2VUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rp
b25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2Fn
ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2Ui
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVsZWFzZVRvdWNoUG9pbnQiKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJN
ZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJJbmRleCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5kZXhSZWYg
PSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwgaW5kZXhSZWYu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiUmVsZWFzZVRvdWNoUG9pbnQiKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAiSW5kZXgiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXgpKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsK
IH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KGludCBp
bmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FuY2VsVG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1l
c3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBpbmRleFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoaW5kZXgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIGluZGV4S2V5LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVz
c2FnZSIsICJDYW5jZWxUb3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIkluZGV4Iiwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGluZGV4KSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CisKICNlbmRpZgogCiAvLyBPYmpl
Y3QgQ3JlYXRpb24KIAotdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bWFrZVdpbmRv
d09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0
LCB3aW5kb3dPYmplY3QsICJldmVudFNlbmRlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7Cisg
ICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgImV2ZW50U2VuZGVyIiwgdGhpcyk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRl
eCA5YTJhZmQ5NThjY2Q3MGVjZDIxZWM0ZTNiM2ZlYzRjZjdjYzg1YmE4Li5lYTQzN2ZiZGJlMGMz
NDg5MDU3ZTMxNjA3NWFkZWE2NTNhZGI1MTBkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIu
aApAQCAtMzAsMjcgKzMwLDIzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLR2VvbWV0cnkuaD4KICNp
bmNsdWRlIDx3dGYvUmVmLmg+CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4
dCogSlNDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5n
UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwog
bmFtZXNwYWNlIFdUUiB7CiAKIHN0cnVjdCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zIHsKLSAg
ICBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKGJvb2wgcmVzZXRMYXRjaGluZyA9IHRydWUpCi0g
ICAgICAgIDogcmVzZXRMYXRjaGluZyhyZXNldExhdGNoaW5nKQotICAgIHsgfQotCiAgICAgYm9v
bCByZXNldExhdGNoaW5nIHsgdHJ1ZSB9OwogfTsKIAogTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9u
cyogdG9Nb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7
CiAKLWNsYXNzIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgewor
Y2xhc3MgRXZlbnRTZW5kaW5nQ29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBjcmVhdGUo
KTsKLSAgICB2aXJ0dWFsIH5FdmVudFNlbmRpbmdDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIG1h
a2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZpcnR1YWwg
SlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlND
b250ZXh0UmVmKTsKIAogICAgIHZvaWQgbW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYg
bW9kaWZpZXJBcnJheSk7CiAgICAgdm9pZCBtb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYg
bW9kaWZpZXJBcnJheSk7CkBAIC03Myw3ICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGtleURv
d24oSlNTdHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2NhdGlv
bik7CiAgICAgdm9pZCBzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24oSlNTdHJpbmdSZWYga2V5
KTsKIAotICAgIC8vIFpvb20gZnVuY3Rpb25zLgogICAgIHZvaWQgdGV4dFpvb21JbigpOwogICAg
IHZvaWQgdGV4dFpvb21PdXQoKTsKICAgICB2b2lkIHpvb21QYWdlSW4oKTsKQEAgLTgxLDEwICs3
Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjYWxlUGFnZUJ5KGRvdWJsZSBzY2FsZSwgZG91Ymxl
IHgsIGRvdWJsZSB5KTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgLy8gVG91Y2gg
ZXZlbnRzLgogICAgIHZvaWQgYWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpOwogICAgIHZvaWQg
dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSk7Ci0gICAgdm9pZCBzZXRU
b3VjaE1vZGlmaWVyKGNvbnN0IEpTU3RyaW5nUmVmICZtb2RpZmllciwgYm9vbCBlbmFibGUpOwor
ICAgIHZvaWQgc2V0VG91Y2hNb2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllciwgYm9vbCBlbmFi
bGUpOwogICAgIHZvaWQgc2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1
c1kpOwogICAgIHZvaWQgdG91Y2hTdGFydCgpOwogICAgIHZvaWQgdG91Y2hNb3ZlKCk7CkBAIC05
Niw3ICs5MCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBFdmVudFNlbmRp
bmdDb250cm9sbGVyKCk7CisgICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlcigpID0gZGVmYXVsdDsK
KworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CisKICAgICBXS1BvaW50IG1f
cG9zaXRpb247CiAgICAgYm9vbCBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9zZW50V2hlZWxNb21lbnR1bVBoYXNlRW5kIHsgZmFsc2UgfTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVy
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVy
LmNwcAppbmRleCA5MzU4ZjRhMGRlNWIzZDliYzMxNmI1ZTBhZGZkMDQxMjY2NDI1OGZmLi5kYjQy
NWU3NWU4MGIwNTQwOGJkZjNlM2UzNjQ3NjUxMDk2MzBkM2ZkIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0z
NywxNCArMzcsNiBAQCBSZWY8R0NDb250cm9sbGVyPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR0NDb250cm9sbGVyKTsKIH0KIAotR0NDb250cm9sbGVy
OjpHQ0NvbnRyb2xsZXIoKQotewotfQotCi1HQ0NvbnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIoKQot
ewotfQotCiBKU0NsYXNzUmVmIEdDQ29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKIHsKICAgICBy
ZXR1cm4gSlNHQ0NvbnRyb2xsZXI6OmdDQ29udHJvbGxlckNsYXNzKCk7CkBAIC02NSwxMSArNTcs
OSBAQCBzaXplX3QgR0NDb250cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkKICAgICByZXR1cm4g
V0tCdW5kbGVHZXRKYXZhU2NyaXB0T2JqZWN0c0NvdW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSk7CiB9CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIEdDQ29udHJv
bGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
d2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6
bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0
eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJHQ0NvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNl
cHRpb24pOworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJHQ0NvbnRyb2xs
ZXIiLCB0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaAppbmRleCBkMzQ5YzFj
ZTk5MGU4N2Q3ZGYyZmNiOGM4Mjg4NWJjYTMwNTcyYTBiLi4zNGFiMjQyNTEzOGMxZDc1ZmIyNGEy
NTEwNzQzNjc4ZDgxOWVkYzIyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmgKQEAgLTI2LDI2ICsyNiwyNiBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJKU1dyYXBwYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVK
U0NvbnRleHQqIEpTQ29udGV4dFJlZjsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIEdDQ29u
dHJvbGxlciA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CitjbGFzcyBHQ0NvbnRyb2xsZXIgZmluYWwg
OiBwdWJsaWMgSlNXcmFwcGFibGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R0NDb250cm9s
bGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5HQ0NvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQg
bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIAotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVh
bCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYpOwogCiAgICAgdm9pZCBjb2xsZWN0KCk7CiAgICAgdm9pZCBjb2xsZWN0T25B
bHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKTsKICAgICBzaXplX3QgZ2V0SlNPYmpl
Y3RDb3VudCgpOwogCiBwcml2YXRlOgotICAgIEdDQ29udHJvbGxlcigpOworICAgIEdDQ29udHJv
bGxlcigpID0gZGVmYXVsdDsKKworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggN2FlODFiYjRi
NTkwOTZjNThjOGI1YTE0Yzg4YzRjMzNmOGMxNDU3MS4uYmJlOTNkYzVjZmYwMDAwM2IyMTM5ZDA1
ZGRiNThkMTMwMGYxMjUwNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTI3LDggKzI3LDggQEAKICNp
bmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgor
I2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRs
ZVBhZ2UuaCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJXZWJDb3Jl
VGVzdFN1cHBvcnQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcHRpb25zLmg+CiAjaW5j
bHVkZSA8V2ViS2l0L1dLQnVuZGxlLmg+CkBAIC0xMTgsMTggKzExOCwxMyBAQCB2b2lkIEluamVj
dGVkQnVuZGxlOjpkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIGlmICgh
aXNNYWluUGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkluaXRpYWxpemF0aW9uIikpOwogICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOwogICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKG1fYnVuZGxlLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZy
ZXN1bHQpOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShtX2J1bmRsZSwgdG9X
SygiSW5pdGlhbGl6YXRpb24iKS5nZXQoKSwgbnVsbHB0ciwgJnJlc3VsdCk7CiAgICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJlc3Vs
dCkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlv
bmFyeVJlZj4gaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KHJlc3VsdCkpOworICAgIGF1dG8gaW5pdGlhbGl6YXRpb25EaWN0aW9u
YXJ5ID0gYWRvcHRXSyhkaWN0aW9uYXJ5VmFsdWUocmVzdWx0KSk7CiAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gcmVzdW1lVGVzdGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlJlc3VtZVRlc3RpbmciKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VtZVRl
c3RpbmdWYWx1ZSA9IFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoaW5pdGlhbGl6YXRpb25EaWN0
aW9uYXJ5LmdldCgpLCByZXN1bWVUZXN0aW5nS2V5LmdldCgpKTsKLSAgICBBU1NFUlQoV0tHZXRU
eXBlSUQocmVzdW1lVGVzdGluZ1ZhbHVlKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
aWYgKFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdW1lVGVz
dGluZ1ZhbHVlKSkpCisgICAgaWYgKGJvb2xlYW5WYWx1ZShpbml0aWFsaXphdGlvbkRpY3Rpb25h
cnkuZ2V0KCksICJSZXN1bWVUZXN0aW5nIikpCiAgICAgICAgIGJlZ2luVGVzdGluZyhpbml0aWFs
aXphdGlvbkRpY3Rpb25hcnkuZ2V0KCksIEJlZ2luZ1Rlc3RpbmdNb2RlOjpSZXN1bWUpOwogfQog
CkBAIC0xNzksMTYgKzE3NCwyNCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldExvY2FsU2V0
dGluZ3MoKQogICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJl
ZiBtZXNzYWdlQm9keSkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKFdL
U3RyaW5nUmVmLCBXS1R5cGVSZWYpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVy
cm9yTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJF
cnJvciIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7Ci0gICAg
V0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJy
b3JNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwg
dG9XSygiRXJyb3IiKS5nZXQoKSwgdG9XSygiVW5rbm93biIpLmdldCgpKTsKK30KKwordm9pZCBJ
bmplY3RlZEJ1bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25z
dCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgYm9keSkKK3sKKyAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShwYWdlLCB0b1dLKG5hbWUpLmdldCgpLCBib2R5KTsKK30KKwordm9pZCBJbmplY3RlZEJ1
bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBjaGFyKiBib2R5KQoreworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBh
Z2UsIHRvV0sobmFtZSkuZ2V0KCksIHRvV0soYm9keSkuZ2V0KCkpOwogfQogCiBzdGF0aWMgdm9p
ZCBwb3N0R0NUYXNrKHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2Ug
PSByZWludGVycHJldF9jYXN0PFdLQnVuZGxlUGFnZVJlZj4oY29udGV4dCk7CisgICAgYXV0byBw
YWdlID0gcmVpbnRlcnByZXRfY2FzdDxXS0J1bmRsZVBhZ2VSZWY+KGNvbnRleHQpOwogICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXBvcnRMaXZlRG9jdW1lbnRzKHBhZ2UpOwogICAg
IFdLUmVsZWFzZShwYWdlKTsKIH0KQEAgLTE5OSw2NyArMjAyLDQ0IEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnJlcG9ydExpdmVEb2N1bWVudHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiAgICAgV0tC
dW5kbGVSZWxlYXNlTWVtb3J5KG1fYnVuZGxlKTsKIAogICAgIGNvbnN0IGJvb2wgZXhjbHVkZURv
Y3VtZW50c0luUGFnZUdyb3VwID0gdHJ1ZTsKLSAgICBhdXRvIGRvY3VtZW50VVJMcyA9IGFkb3B0
V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhj
bHVkZURvY3VtZW50c0luUGFnZUdyb3VwKSk7Ci0gICAgYXV0byBhY2tNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxpdmVEb2N1bWVudHMiKSk7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGRv
Y3VtZW50VVJMcy5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsICJMaXZlRG9jdW1l
bnRzIiwgYWRvcHRXSyhXS0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUsIG1fcGFn
ZUdyb3VwLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXApKSk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBX
S1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQogewogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQmVnaW5UZXN0Iikp
IHsKICAgICAgICAgQVNTRVJUKG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZHVtcFBpeGVsc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkR1bXBQaXhlbHMiKSk7Ci0gICAgICAgIG1fZHVtcFBpeGVscyA9IFdLQm9vbGVhbkdldFZhbHVl
KHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGR1bXBQaXhlbHNLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVvdXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUaW1lb3V0IikpOwotICAgICAgICBtX3RpbWVvdXQgPSBTZWNvbmRz
Ojpmcm9tTWlsbGlzZWNvbmRzKFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0aW1l
b3V0S2V5LmdldCgpKSkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZHVt
cEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikpOwotICAgICAgICBtX2R1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVyciA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGR1
bXBKU0NvbnNvbGVMb2dJblN0ZEVycktleS5nZXQoKSkpKTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJBY2siKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBh
Y2tNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJl
Z2luVGVzdCIpKTsKLSAgICAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVz
c2FnZU5hbWUuZ2V0KCksIGFja01lc3NhZ2VCb2R5LmdldCgpKTsKLQorICAgICAgICBhdXRvIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAg
ICAgIG1fZHVtcFBpeGVscyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJE
dW1wUGl4ZWxzIik7CisgICAgICAgIG1fdGltZW91dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29u
ZHMoV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4odmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiVGltZW91dCIpKSkpOworICAgICAgICBtX2R1bXBKU0NvbnNvbGVM
b2dJblN0ZEVyciA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJEdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIiKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsICJBY2si
LCAiQmVnaW5UZXN0Iik7CiAgICAgICAgIGJlZ2luVGVzdGluZyhtZXNzYWdlQm9keURpY3Rpb25h
cnksIEJlZ2luZ1Rlc3RpbmdNb2RlOjpOZXcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZXNldCIp
KSB7CiAgICAgICAgIEFTU0VSVChtZXNzYWdlQm9keSk7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBX
S0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0
aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBqc2NPcHRpb25zS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SlNDT3B0aW9ucyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGpzY09wdGlv
bnNTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGpzY09wdGlvbnNLZXkuZ2V0KCkpKTsKKyAgICAg
ICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJv
ZHkpOworICAgICAgICBhdXRvIGpzY09wdGlvbnNTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSlNDT3B0aW9ucyIpKTsKICAgICAg
ICAgaWYgKGpzY09wdGlvbnNTdHJpbmcpIHsKICAgICAgICAgICAgIFN0cmluZyBvcHRpb25zID0g
dG9XVEZTdHJpbmcoanNjT3B0aW9uc1N0cmluZyk7CiAgICAgICAgICAgICBKU0M6Ok9wdGlvbnM6
OnNldE9wdGlvbnMob3B0aW9ucy51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgfQotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzaG91bGRHQ0tleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNob3VsZEdDIikpOwotICAgICAgICBib29sIHNob3VsZEdD
ID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc2hvdWxkR0NLZXkuZ2V0KCkp
KSk7CisgICAgICAgIGJvb2wgc2hvdWxkR0MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiU2hvdWxkR0MiKTsKICAgICAgICAgaWYgKHNob3VsZEdDKQogICAgICAgICAgICAg
V0tCdW5kbGVHYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKG1fYnVuZGxlKTsKIAogI2lm
IEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBheElzb2xhdGVkTW9kZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWUiKSk7Ci0gICAgICAgIG1f
YWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBheElzb2xhdGVkTW9kZUtleS5nZXQoKSkpKTsKKyAgICAgICAgbV9hY2Nlc3Np
YmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIik7CiAjZW5kaWYKICAgICAgICAgCi0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbGxvd2VkSG9zdHNLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBbGxvd2VkSG9zdHMiKSk7Ci0gICAgICAgIFdL
VHlwZVJlZiBhbGxvd2VkSG9zdHNWYWx1ZSA9IFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBhbGxvd2VkSG9zdHNLZXkuZ2V0KCkpOworICAgICAgICBhdXRv
IGFsbG93ZWRIb3N0c1ZhbHVlID0gdmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQWxsb3dl
ZEhvc3RzIik7CiAgICAgICAgIGlmIChhbGxvd2VkSG9zdHNWYWx1ZSAmJiBXS0dldFR5cGVJRChh
bGxvd2VkSG9zdHNWYWx1ZSkgPT0gV0tBcnJheUdldFR5cGVJRCgpKSB7CiAgICAgICAgICAgICBt
X2FsbG93ZWRIb3N0cy5jbGVhcigpOwotCi0gICAgICAgICAgICBXS0FycmF5UmVmIGFsbG93ZWRI
b3N0c0FycmF5ID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4oYWxsb3dlZEhvc3RzVmFsdWUpOwot
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBXS0FycmF5R2V0U2l6ZShhbGxv
d2VkSG9zdHNBcnJheSk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBXS1R5cGVS
ZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChhbGxvd2VkSG9zdHNBcnJheSwgaSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRlbSkgPT0gV0tTdHJpbmdH
ZXRUeXBlSUQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9hbGxvd2VkSG9zdHMuYXBwZW5kKHRv
V1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgYXV0byBhcnJheSA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KGFsbG93
ZWRIb3N0c1ZhbHVlKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gV0tB
cnJheUdldFNpemUoYXJyYXkpOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fYWxs
b3dlZEhvc3RzLmFwcGVuZCh0b1dURlN0cmluZyhXS0FycmF5R2V0SXRlbUF0SW5kZXgoYXJyYXks
IGkpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBtX3N0YXRlID0gSWRsZTsKQEAgLTI3NSw5ICsy
NTUsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1
bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRMaXZlRG9jdW1lbnRzIikpIHsKICAgICAg
ICAgY29uc3QgYm9vbCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXAgPSBmYWxzZTsKLSAgICAg
ICAgYXV0byBkb2N1bWVudFVSTHMgPSBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJM
cyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCkpOwot
ICAgICAgICBhdXRvIGFja01lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTGl2ZURvY3VtZW50cyIpKTsKLSAgICAgICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGRvY3VtZW50VVJMcy5nZXQoKSk7Cisg
ICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiTGl2ZURvY3VtZW50cyIsIGFkb3B0V0soV0tCdW5kbGVH
ZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50
c0luUGFnZUdyb3VwKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MjgsNyArNDA2
LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5k
bGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICAgICAgVmVjdG9yPFN0cmluZz4gZG9t
YWluczsKICAgICAgICAgZG9tYWlucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgV0tU
eXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKKyAg
ICAgICAgICAgIGF1dG8gaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5zQXJyYXks
IGkpOwogICAgICAgICAgICAgaWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRlbSkgPT0gV0tTdHJp
bmdHZXRUeXBlSUQoKSkKICAgICAgICAgICAgICAgICBkb21haW5zLmFwcGVuZCh0b1dURlN0cmlu
ZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKICAgICAgICAgfQpAQCAtNDQ2LDcg
KzQyNCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdL
QnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+
IGRvbWFpbnM7CiAgICAgICAgIGRvbWFpbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAg
IFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7
CisgICAgICAgICAgICBhdXRvIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0Fy
cmF5LCBpKTsKICAgICAgICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdL
U3RyaW5nR2V0VHlwZUlEKCkpCiAgICAgICAgICAgICAgICAgZG9tYWlucy51bmNoZWNrZWRBcHBl
bmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAgICAg
IH0KQEAgLTQ2NywxNyArNDQ1LDEwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVN
ZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDYWxs
VUlTaWRlU2NyaXB0Q2FsbGJhY2siKSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc3VsdEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc3VsdCIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwotCi0gICAgICAgIHVuc2lnbmVkIGNh
bGxiYWNrSUQgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNh
bGxiYWNrSURLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgcmVzdWx0U3RyaW5n
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCByZXN1bHRLZXkuZ2V0KCkpKTsKLSAgICAgICAgYXV0byByZXN1
bHRKU1N0cmluZyA9IHRvSlMocmVzdWx0U3RyaW5nKTsKLQotICAgICAgICBtX3Rlc3RSdW5uZXIt
PnJ1blVJU2NyaXB0Q2FsbGJhY2soY2FsbGJhY2tJRCwgcmVzdWx0SlNTdHJpbmcuZ2V0KCkpOwor
ICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNz
YWdlQm9keSk7CisgICAgICAgIGF1dG8gY2FsbGJhY2tJRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIkNhbGxiYWNrSUQiKTsKKyAgICAgICAgYXV0byByZXN1bHRTdHJpbmcg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJSZXN1bHQiKTsKKyAgICAgICAg
bV90ZXN0UnVubmVyLT5ydW5VSVNjcmlwdENhbGxiYWNrKGNhbGxiYWNrSUQsIHRvSlMocmVzdWx0
U3RyaW5nKS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ5OCwyOSArNDY5
LDE3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVsZW1ldHJ5RmluaXNoZWQiKSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG51bWJlck9mUHJldmFsZW50UmVz
b3VyY2VzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXMiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOdW1iZXJPZlByZXZhbGVudFJlc291
cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25LZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOdW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlz
U2luY2VVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJUb3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VV
c2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZWRp
YW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJh
Y3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNZWRpYW5E
YXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rp
b24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJUb3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUlLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVkaWFuU3ViRnJh
bWVXaXRob3V0VUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVk
aWFuU3ViUmVzb3VyY2VXaXRob3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUb3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJ
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhblVu
aXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUlLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVk
V2l0aG91dFVJIikpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxl
bnRSZXNvdXJjZXMgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSAodW5zaWdu
ZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG51bWJlck9mUHJldmFsZW50UmVz
b3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uID0gKHVuc2ln
bmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlByZXZhbGVudFJl
c291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2ln
bmVkIHRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJ
bnRlcmFjdGlvbiA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
dG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVy
YWN0aW9uS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCBtZWRpYW5EYXlzU2luY2VVc2Vy
SW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24gPSAodW5zaWdu
ZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1lZGlhbkRheXNTaW5jZVVzZXJJ
bnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkp
KTsKLSAgICAgICAgdW5zaWduZWQgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJ
ID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3AzTnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVk
IHRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVl
KHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJS2V5LmdldCgpKSkp
OwotICAgICAgICB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkgPSAodW5z
aWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRpYW5TdWJSZXNv
dXJjZVdpdGhvdXRVSUtleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9wM01lZGlhblVu
aXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSUtleS5nZXQoKSkp
KTsKLSAgICAgICAgdW5zaWduZWQgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRV
SSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlh
bkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSUtleS5nZXQoKSkpKTsKKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzID0gdWludDY0VmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMiKTsKKyAgICAgICAg
YXV0byBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSB1aW50
NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJOdW1iZXJPZlByZXZhbGVudFJlc291cmNl
c1dpdGhVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBudW1iZXJPZlByZXZhbGVudFJl
c291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24iKTsKKyAgICAgICAgYXV0byB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rp
b25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJUb3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VV
c2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJNZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2
YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byB0b3AzTnVt
YmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJUb3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkiKTsKKyAgICAg
ICAgYXV0byB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJUb3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkiKTsKKyAgICAgICAg
YXV0byB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJUb3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkiKTsKKyAgICAg
ICAgYXV0byB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJID0gdWludDY0VmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRV
SSIpOworICAgICAgICBhdXRvIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkg
PSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTWVkaWFuRGF0YVJlY29y
ZHNSZW1vdmVkV2l0aG91dFVJIik7CiAKICAgICAgICAgbV90ZXN0UnVubmVyLT5zdGF0aXN0aWNz
RGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sobnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMsIG51bWJl
ck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgbnVtYmVyT2ZQcmV2YWxl
bnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB0b3BQcmV2YWxlbnRSZXNvdXJjZVdp
dGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24sIG1lZGlhbkRheXNTaW5j
ZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiwgdG9w
M051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJLCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRo
b3V0VUksIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSwgdG9wM01lZGlhblVuaXF1ZVJl
ZGlyZWN0c1dpdGhvdXRVSSwgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSk7
CiAgICAgICAgIHJldHVybjsKQEAgLTU0MSwzMSArNTAwLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5n
UmVmIG0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBlcnJvck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRXJyb3IiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVbmtub3duIikp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGVycm9yTWVzc2FnZU5hbWUuZ2V0
KCksIGVycm9yTWVzc2FnZUJvZHkuZ2V0KCkpOwotfQotCi1ib29sIEluamVjdGVkQnVuZGxlOjpi
b29sZWFuRm9yS2V5KFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkp
Ci17Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhrZXkpKTsKLSAgICBXS1R5cGVSZWYgdmFsdWUgPSBXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHdrS2V5LmdldCgpKTsKLSAgICBpZiAo
V0tHZXRUeXBlSUQodmFsdWUpICE9IFdLQm9vbGVhbkdldFR5cGVJRCgpKSB7Ci0gICAgICAgIG91
dHB1dFRleHQobWFrZVN0cmluZygiQm9vbGVhbiB2YWx1ZSBmb3Iga2V5Iiwga2V5LCAiIG5vdCBm
b3VuZCBpbiBkaWN0aW9uYXJ5XG4iKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4odmFs
dWUpKTsKLX0KLQotU3RyaW5nIEluamVjdGVkQnVuZGxlOjpzdHJpbmdGb3JLZXkoV0tEaWN0aW9u
YXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKLXsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gd2tLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KGtleSkpOwotICAgIFdLU3RyaW5nUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoZGljdGlvbmFyeSwgd2tLZXkuZ2V0KCkpKTsKLSAg
ICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgIG91dHB1dFRleHQobWFrZVN0cmluZygiU3RyaW5nIHZh
bHVlIGZvciBrZXkiLCBrZXksICIgbm90IGZvdW5kIGluIGRpY3Rpb25hcnlcbiIpKTsKLSAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiB0b1dURlN0cmluZyh2
YWx1ZSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFcnJvciIsICJVbmtub3duIik7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OmJlZ2luVGVzdGluZyhXS0RpY3Rpb25hcnlSZWYgc2V0dGluZ3Ms
IEJlZ2luZ1Rlc3RpbmdNb2RlIHRlc3RpbmdNb2RlKQpAQCAtNTk4LDExICs1MzMsMTEgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0aW5nKFdLRGljdGlvbmFyeVJlZiBzZXR0aW5ncywg
QmVnaW5nVGVzdGluZ01vZGUgdGUKICAgICBXS0J1bmRsZVNldEFsbG93U3RvcmFnZUFjY2Vzc0Zy
b21GaWxlVVJMUyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGZhbHNlKTsKIAogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgV0tCdW5kbGVQYWdlU2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmln
dXJhdGlvbihwYWdlKCktPnBhZ2UoKSwgIWJvb2xlYW5Gb3JLZXkoc2V0dGluZ3MsICJVc2VGbGV4
aWJsZVZpZXdwb3J0IikpOworICAgIFdLQnVuZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENv
bmZpZ3VyYXRpb24ocGFnZSgpLT5wYWdlKCksICFib29sZWFuVmFsdWUoc2V0dGluZ3MsICJVc2VG
bGV4aWJsZVZpZXdwb3J0IikpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBX
ZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVz
dGluZyhzdHJpbmdGb3JLZXkoc2V0dGluZ3MsICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBl
cyIpKTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzRm9yVGVzdGluZyh0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShzZXR0aW5ncywgImFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIikpKTsKICNlbmRpZgogCiAgICAgbV90ZXN0UnVubmVy
LT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVlKTsKQEAgLTY2MCwyNSArNTk1LDE1IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OmRvbmUoKQogICAgIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPnJlc2V0
VG9Db25zaXN0ZW50U3RhdGUoKTsKICNlbmRpZgogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGRvbmVNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkRvbmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gZG9u
ZU1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHRJc1BlbmRpbmci
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwaXhlbFJlc3VsdElzUGVuZGluZyA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgcGl4ZWxSZXN1bHRJc1Bl
bmRpbmdLZXkuZ2V0KCksIHBpeGVsUmVzdWx0SXNQZW5kaW5nLmdldCgpKTsKLQotICAgIGlmICgh
bV9waXhlbFJlc3VsdElzUGVuZGluZykgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gcGl4ZWxSZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJQaXhlbFJlc3VsdCIpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkb25lTWVzc2Fn
ZUJvZHkuZ2V0KCksIHBpeGVsUmVzdWx0S2V5LmdldCgpLCBtX3BpeGVsUmVzdWx0LmdldCgpKTsK
LSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVwYWludFJlY3RzS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVwYWludFJlY3RzIikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCByZXBhaW50UmVj
dHNLZXkuZ2V0KCksIG1fcmVwYWludFJlY3RzLmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gYXVkaW9SZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJBdWRpb1Jlc3VsdCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNz
YWdlQm9keS5nZXQoKSwgYXVkaW9SZXN1bHRLZXkuZ2V0KCksIG1fYXVkaW9SZXN1bHQuZ2V0KCkp
OworICAgIHNldFZhbHVlKGJvZHksICJQaXhlbFJlc3VsdElzUGVuZGluZyIsIG1fcGl4ZWxSZXN1
bHRJc1BlbmRpbmcpOworICAgIGlmICghbV9waXhlbFJlc3VsdElzUGVuZGluZykKKyAgICAgICAg
c2V0VmFsdWUoYm9keSwgIlBpeGVsUmVzdWx0IiwgbV9waXhlbFJlc3VsdC5nZXQoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlJlcGFpbnRSZWN0cyIsIG1fcmVwYWludFJlY3RzLmdldCgpKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiQXVkaW9SZXN1bHQiLCBtX2F1ZGlvUmVzdWx0LmdldCgpKTsKIAot
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShw
YWdlKCktPnBhZ2UoKSwgZG9uZU1lc3NhZ2VOYW1lLmdldCgpLCBkb25lTWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3Vz
TW9kZShwYWdlKCktPnBhZ2UoKSwgdG9XSygiRG9uZSIpLmdldCgpLCBib2R5LmdldCgpKTsKIAog
ICAgIGNsb3NlT3RoZXJQYWdlcygpOwogCkBAIC02OTEsOSArNjE2LDggQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6Y2xvc2VPdGhlclBhZ2VzKCkKICAgICBzaXplX3Qgc2l6ZSA9IG1fcGFnZXMuc2l6
ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBwYWdl
c1RvQ2xvc2UuYXBwZW5kKG1fcGFnZXNbaV0tPnBhZ2UoKSk7Ci0gICAgc2l6ZSA9IHBhZ2VzVG9D
bG9zZS5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAg
ICAgIFdLQnVuZGxlUGFnZUNsb3NlKHBhZ2VzVG9DbG9zZVtpXSk7CisgICAgZm9yIChhdXRvJiBw
YWdlIDogcGFnZXNUb0Nsb3NlKQorICAgICAgICBXS0J1bmRsZVBhZ2VDbG9zZShwYWdlKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcyhT
dHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQpAQCAtNzA5LDEzICs2MzMsOSBAQCB2b2lkIElu
amVjdGVkQnVuZGxlOjpkdW1wVG9TdGRFcnIoY29uc3QgU3RyaW5nJiBvdXRwdXQpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAob3V0cHV0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBUb1N0ZEVyciIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZUJvZHk7Ci0gICAgaWYgKGF1dG8gdXRmOCA9IG91dHB1dC50cnlH
ZXRVdGY4KCkpCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyh1dGY4LT5kYXRhKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiT3V0IG9mIG1lbW9y
eVxuIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIC8vIEZJWE1FOiBEbyB3ZSBy
ZWFsbHkgaGF2ZSB0byBjb252ZXJ0IHRvIFVURi04IGluc3RlYWQgb2YgdXNpbmcgdG9XSz8KKyAg
ICBhdXRvIHN0cmluZyA9IG91dHB1dC50cnlHZXRVdGY4KCk7CisgICAgcG9zdFBhZ2VNZXNzYWdl
KCJEdW1wVG9TdGRFcnIiLCBzdHJpbmcgPyBzdHJpbmctPmRhdGEoKSA6ICJPdXQgb2YgbWVtb3J5
XG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dChjb25zdCBTdHJpbmcm
IG91dHB1dCkKQEAgLTcyNCwyODAgKzY0NCwxNTUgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6b3V0
cHV0VGV4dChjb25zdCBTdHJpbmcmIG91dHB1dCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChv
dXRwdXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVGV4dE91dHB1dCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJv
ZHk7Ci0gICAgaWYgKGF1dG8gdXRmOCA9IG91dHB1dC50cnlHZXRVdGY4KCkpCi0gICAgICAgIG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1dGY4LT5k
YXRhKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiT3V0IG9mIG1lbW9yeVxuIikpOworICAgIC8vIEZJWE1F
OiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBjb252ZXJ0IHRvIFVURi04IGluc3RlYWQgb2YgdXNpbmcg
dG9XSz8KKyAgICBhdXRvIHN0cmluZyA9IG91dHB1dC50cnlHZXRVdGY4KCk7CiAgICAgLy8gV2Ug
dXNlIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZSgp
IGluc3RlYWQgb2YgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoKSB0byBtYWtlIHN1cmUgdGhhdCBh
bGwgdGV4dCBvdXRwdXQKICAgICAvLyBpcyBkb25lIHZpYSBhc3luY2hyb25vdXMgSVBDLCBldmVu
IGlmIHRoZSBjb25uZWN0aW9uIGlzIGluIGZ1bGx5IHN5bmNocm9ub3VzIG1vZGUgZHVlIHRvIGEg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoKQogICAgIC8vIGNh
bGwuIE90aGVyd2lzZSwgbWVzc2FnZXMgbG9nZ2VkIHZpYSBzeW5jIGFuZCBhc3luYyBJUEMgbWF5
IGVuZCB1cCBvdXQgb2Ygb3JkZXIgYW5kIGNhdXNlIGZsYWtpbmVzcy4KLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNNb2RlKHBhZ2UoKS0+cGFnZSgpLCB0
b1dLKCJUZXh0T3V0cHV0IikuZ2V0KCksIHRvV0soc3RyaW5nID8gc3RyaW5nLT5kYXRhKCkgOiAi
T3V0IG9mIG1lbW9yeVxuIikuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0
TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUp
KTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkJlZm9y
ZVVubG9hZFJldHVyblZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQo
KSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RBZGRDaHJvbWVJbnB1dEZpZWxkKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRDaHJvbWVJbnB1dEZpZWxkIikpOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJBZGRDaHJvbWVJbnB1dEZpZWxkIik7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RSZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZW1vdmVDaHJvbWVJbnB1dEZpZWxkIikpOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
MCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJSZW1vdmVDaHJvbWVJbnB1dEZpZWxkIik7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RGb2N1c1dlYlZpZXcoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkZvY3VzV2ViVmlldyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiRm9jdXNXZWJWaWV3Iik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRC
YWNraW5nU2NhbGVGYWN0b3IoZG91YmxlIGJhY2tpbmdTY2FsZUZhY3RvcikKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRCYWNraW5nU2NhbGVGYWN0b3IiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShiYWNr
aW5nU2NhbGVGYWN0b3IpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIlNldEJhY2tpbmdTY2FsZUZhY3RvciIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUo
YmFja2luZ1NjYWxlRmFjdG9yKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0
V2luZG93SXNLZXkoYm9vbCBpc0tleSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRX
aW5kb3dJc0tleSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNLZXkpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0V2luZG93SXNL
ZXkiKS5nZXQoKSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNLZXkpKS5nZXQoKSwgMCk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRWaWV3U2l6ZShkb3VibGUgd2lkdGgsIGRv
dWJsZSBoZWlnaHQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Vmlld1NpemUiKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aWR0aCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaGVpZ2h0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiaGVpZ2h0IikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gd2lkdGhXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVh
dGUod2lkdGgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB3
aWR0aEtleS5nZXQoKSwgd2lkdGhXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0RvdWJs
ZVJlZj4gaGVpZ2h0V0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGhlaWdodCkpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGhlaWdodEtleS5nZXQoKSwgaGVp
Z2h0V0suZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJ3aWR0aCIsIHdpZHRoKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiaGVpZ2h0IiwgaGVpZ2h0KTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0Vmlld1NpemUiKS5n
ZXQoKSwgYm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTaW11
bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2siKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShub3RpZmljYXRpb25JRCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiU2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIsIGFkb3B0V0so
V0tVSW50NjRDcmVhdGUobm90aWZpY2F0aW9uSUQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnBvc3RTZXRBZGRzVmlzaXRlZExpbmtzKGJvb2wgYWRkc1Zpc2l0ZWRMaW5rcykKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBZGRzVmlzaXRlZExpbmtzIikpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShhZGRzVmlzaXRlZExpbmtzKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJTZXRBZGRzVmlzaXRlZExpbmtzIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoYWRkc1Zpc2l0ZWRMaW5rcykpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRHZW9sb2NhdGlvblBlcm1pc3Npb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbiIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKSk7CiB9
CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJs
ZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3Zp
ZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91Ymxl
IGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVz
Rmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFs
PGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGxhdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJsYXRpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbGF0aXR1ZGVXSyA9
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUobGF0aXR1ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBsYXRpdHVkZUtleVdLLmdldCgpLCBsYXRpdHVkZVdLLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsb25naXR1ZGVLZXlXSyA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxvbmdpdHVkZSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbG9uZ2l0dWRlV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3Jl
YXRlKGxvbmdpdHVkZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0
KCksIGxvbmdpdHVkZUtleVdLLmdldCgpLCBsb25naXR1ZGVXSy5nZXQoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gYWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImFjY3VyYWN5IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91Ymxl
UmVmPiBhY2N1cmFjeVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShhY2N1cmFjeSkpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFjY3VyYWN5S2V5V0suZ2V0
KCksIGFjY3VyYWN5V0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBy
b3ZpZGVzQWx0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoInByb3ZpZGVzQWx0aXR1ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBw
cm92aWRlc0FsdGl0dWRlV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92aWRlc0FsdGl0
dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlk
ZXNBbHRpdHVkZUtleVdLLmdldCgpLCBwcm92aWRlc0FsdGl0dWRlV0suZ2V0KCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rv
dWJsZVJlZj4gYWx0aXR1ZGVXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYWx0aXR1ZGUpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhbHRpdHVkZUtleVdL
LmdldCgpLCBhbHRpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLID0gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5KSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5S2V5
V0suZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVkZUFjY3VyYWN5IikpOwotICAgIFdLUmV0
YWluUHRyPFdLRG91YmxlUmVmPiBhbHRpdHVkZUFjY3VyYWN5V0sgPSBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKGFsdGl0dWRlQWNjdXJhY3kpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCBhbHRpdHVkZUFjY3VyYWN5S2V5V0suZ2V0KCksIGFsdGl0dWRlQWNjdXJh
Y3lXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNIZWFk
aW5nS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRl
c0hlYWRpbmciKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc0hlYWRp
bmdXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzSGVhZGluZykpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzSGVhZGluZ0tleVdL
LmdldCgpLCBwcm92aWRlc0hlYWRpbmdXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaGVhZGluZ0tleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiaGVhZGluZyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gaGVhZGluZ1dL
ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShoZWFkaW5nKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgaGVhZGluZ0tleVdLLmdldCgpLCBoZWFkaW5nV0suZ2V0
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzU3BlZWRLZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzU3BlZWQiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc1NwZWVkV0sgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShwcm92aWRlc1NwZWVkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNTcGVlZEtleVdLLmdldCgpLCBwcm92aWRlc1Nw
ZWVkV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNwZWVkS2V5V0sg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzcGVlZCIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RvdWJsZVJlZj4gc3BlZWRXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUo
c3BlZWQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBzcGVl
ZEtleVdLLmdldCgpLCBzcGVlZFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBwcm92aWRlc0Zsb29yTGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoInByb3ZpZGVzRmxvb3JMZXZlbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IHByb3ZpZGVzRmxvb3JMZXZlbFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
cHJvdmlkZXNGbG9vckxldmVsKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9k
eS5nZXQoKSwgcHJvdmlkZXNGbG9vckxldmVsS2V5V0suZ2V0KCksIHByb3ZpZGVzRmxvb3JMZXZl
bFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmbG9vckxldmVsS2V5
V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmbG9vckxldmVsIikp
OwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBmbG9vckxldmVsV0sgPSBhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKGZsb29yTGV2ZWwpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCBmbG9vckxldmVsS2V5V0suZ2V0KCksIGZsb29yTGV2ZWxXSy5nZXQoKSk7
Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgImxhdGl0dWRl
IiwgbGF0aXR1ZGUpOworICAgIHNldFZhbHVlKGJvZHksICJsb25naXR1ZGUiLCBsb25naXR1ZGUp
OworICAgIHNldFZhbHVlKGJvZHksICJhY2N1cmFjeSIsIGFjY3VyYWN5KTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiYWx0aXR1ZGUiLCBhbHRpdHVkZSk7CisgICAgc2V0VmFsdWUoYm9keSwgImFsdGl0
dWRlQWNjdXJhY3kiLCBhbHRpdHVkZUFjY3VyYWN5KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiaGVh
ZGluZyIsIGhlYWRpbmcpOworICAgIHNldFZhbHVlKGJvZHksICJzcGVlZCIsIHNwZWVkKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiZmxvb3JMZXZlbCIsIGZsb29yTGV2ZWwpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iLCBib2R5KTsKIH0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9y
KFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IiKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBlcnJv
ck1lc3NhZ2UpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b25VbmF2YWlsYWJsZUVycm9yIiwgZXJyb3JNZXNzYWdlKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1
bmRsZTo6aXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29uc3QKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJJc0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpOwotICAgIFdLVHlwZVJl
ZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgJnJlc3Vs
dFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBpc0FjdGl2ZSA9IGFkb3B0
V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXN1bHRUb1Bhc3MpKTsKLQotICAgIHJldHVy
biBXS0Jvb2xlYW5HZXRWYWx1ZShpc0FjdGl2ZS5nZXQoKSk7CisgICAgV0tUeXBlUmVmIHJlc3Vs
dCA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKS5n
ZXQoKSwgMCwgJnJlc3VsdCk7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShhZG9wdFdLKHJlc3Vs
dCkuZ2V0KCkpOwogfQogCiB1bnNpZ25lZCBJbmplY3RlZEJ1bmRsZTo6aW1hZ2VDb3VudEluR2Vu
ZXJhbFBhc3RlYm9hcmQoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkltYWdl
Q291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkIikpOwotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3Mg
PSAwOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGltYWdlQ291bnQgPSBhZG9wdFdLKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihyZXN1bHRUb1Bhc3MpKTsKLSAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoaW1hZ2VDb3VudC5nZXQoKSkpOworICAgIFdL
VHlwZVJlZiByZXN1bHQgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJJbWFnZUNvdW50SW5HZW5l
cmFsUGFzdGVib2FyZCIpLmdldCgpLCAwLCAmcmVzdWx0KTsKKyAgICByZXR1cm4gdWludDY0VmFs
dWUoYWRvcHRXSyhyZXN1bHQpLmdldCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0
VXNlck1lZGlhUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZXJNZWRpYVBl
cm1pc3Npb24iKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKGVuYWJsZWQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIlNldFVzZXJNZWRpYVBlcm1pc3Npb24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShl
bmFibGVkKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1p
c3Npb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb24iKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJlc2V0VXNlck1lZGlhUGVybWlzc2lvbiIpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9y
aWdpbihib29sIHBlcm1pc3Npb24sIFdLU3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgcGFy
ZW50T3JpZ2luKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9y
aWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJtaXNzaW9uS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJwZXJtaXNzaW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9v
bGVhblJlZj4gcGVybWlzc2lvbldLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocGVybWlzc2lv
bikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBlcm1pc3Np
b25LZXlXSy5nZXQoKSwgcGVybWlzc2lvbldLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBvcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIm9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5Lmdl
dCgpLCBvcmlnaW5LZXlXSy5nZXQoKSwgb3JpZ2luKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBwYXJlbnRPcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCBwYXJlbnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFyZW50T3JpZ2luKTsKLQot
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGVybWlzc2lvbiIs
IHBlcm1pc3Npb24pOworICAgIHNldFZhbHVlKGJvZHksICJvcmlnaW4iLCBvcmlnaW4pOworICAg
IHNldFZhbHVlKGJvZHksICJwYXJlbnRPcmlnaW4iLCBwYXJlbnRPcmlnaW4pOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiU2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4iLCBi
b2R5KTsKIH0KIAogdW5zaWduZWQgSW5qZWN0ZWRCdW5kbGU6OnVzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0Q291bnRGb3JPcmlnaW4oV0tTdHJpbmdSZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBwYXJl
bnRPcmlnaW4pIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFi
bGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5nZXQoKSwg
b3JpZ2luKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJlbnRPcmln
aW5LZXlXSy5nZXQoKSwgcGFyZW50T3JpZ2luKTsKLQotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bh
c3MgPSAwOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZy
ZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBjb3VudCA9IGFkb3B0
V0soc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJlc3VsdFRvUGFzcykpOwotCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdldFZhbHVlKGNvdW50LmdldCgpKSk7Cisg
ICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAg
IHNldFZhbHVlKGJvZHksICJvcmlnaW4iLCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJvZHksICJw
YXJlbnRPcmlnaW4iLCBwYXJlbnRPcmlnaW4pOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxs
cHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBh
Z2UoKS0+cGFnZSgpLCB0b1dLKCJVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3Jp
Z2luIikuZ2V0KCksIGJvZHkuZ2V0KCksICZyZXN1bHQpOworICAgIHJldHVybiB1aW50NjRWYWx1
ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNl
dFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oV0tTdHJpbmdSZWYgb3Jp
Z2luLCBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikpOwotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
Zygib3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCks
IG9yaWdpbktleVdLLmdldCgpLCBvcmlnaW4pOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHBhcmVudE9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygicGFyZW50T3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJv
ZHkuZ2V0KCksIHBhcmVudE9yaWdpbktleVdLLmdldCgpLCBwYXJlbnRPcmlnaW4pOwotCi0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJvcmlnaW4iLCBvcmlnaW4p
OworICAgIHNldFZhbHVlKGJvZHksICJwYXJlbnRPcmlnaW4iLCBwYXJlbnRPcmlnaW4pOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9y
T3JpZ2luIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEN1c3RvbVBvbGlj
eURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldEN1c3RvbVBvbGljeURlbGVnYXRlIikpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5h
YmxlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZW5hYmxl
ZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGVuYWJsZWRXSyA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCBlbmFibGVkS2V5V0suZ2V0KCksIGVuYWJsZWRXSy5nZXQoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGVybWlzc2l2ZUtleVdLID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGVybWlzc2l2ZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IHBlcm1pc3NpdmVXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHBl
cm1pc3NpdmUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBw
ZXJtaXNzaXZlS2V5V0suZ2V0KCksIHBlcm1pc3NpdmVXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgImVuYWJsZWQiLCBlbmFibGVkKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAicGVybWlzc2l2ZSIsIHBlcm1pc3NpdmUpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiLCBib2R5KTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6c2V0SGlkZGVuKGJvb2wgaGlkZGVuKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldEhpZGRlbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc0luaXRpYWxLZXlXSyA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhpZGRlbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IGlzSW5pdGlhbFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGlk
ZGVuKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgaXNJbml0
aWFsS2V5V0suZ2V0KCksIGlzSW5pdGlhbFdLLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiaGlkZGVuIiwgaGlkZGVuKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIlNldEhpZGRlbiIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjpzZXRDYWNoZU1vZGVsKGludCBtb2RlbCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRDYWNoZU1vZGVsIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kZWwpKTsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBXS0J1bmRsZVBhZ2VQ
b3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0
Q2FjaGVNb2RlbCIpLmdldCgpLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGVsKSkuZ2V0KCks
IG51bGxwdHIpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlOjpzaG91bGRQcm9jZXNzV29ya1F1
ZXVlKCkgY29uc3QKQEAgLTEwMDUsMTEwICs4MDAsNzMgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZTo6
c2hvdWxkUHJvY2Vzc1dvcmtRdWV1ZSgpIGNvbnN0CiAgICAgaWYgKCFtX3VzZVdvcmtRdWV1ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNXb3Jr
UXVldWVFbXB0eSIpKTsKLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDAsICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gaXNFbXB0eSA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihy
ZXN1bHRUb1Bhc3MpKTsKKyAgICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwg
dG9XSygiSXNXb3JrUXVldWVFbXB0eSIpLmdldCgpLCAwLCAmcmVzdWx0KTsKIAogICAgIC8vIFRo
ZSBJUEMgZmFpbGVkLiBUaGlzIGhhcHBlbnMgd2hlbiBzd2FwcGluZyBwcm9jZXNzZXMgb24gbmF2
aWdhdGlvbiBiZWNhdXNlIHRoZSBXZWJQYWdlUHJveHkgdW5yZWdpc3RlcnMgaXRzZWxmCiAgICAg
Ly8gYXMgYSBNZXNzYWdlUmVjZWl2ZXIgZnJvbSB0aGUgb2xkIFdlYlByb2Nlc3NQcm94eSBhbmQg
cmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlIG5ldyBXZWJQcm9jZXNzUHJveHkgaW5zdGVhZC4KLSAg
ICBpZiAoIWlzRW1wdHkpCisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiAhV0tCb29sZWFuR2V0VmFsdWUoaXNFbXB0eS5nZXQoKSk7CisgICAgYXV0
byBpc0VtcHR5ID0gYm9vbGVhblZhbHVlKGFkb3B0V0socmVzdWx0KS5nZXQoKSk7CisgICAgcmV0
dXJuICFpc0VtcHR5OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwcm9jZXNzV29ya1F1ZXVl
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcm9jZXNzV29ya1F1ZXVlIikpOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJQcm9jZXNzV29ya1F1ZXVlIik7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlQmFja05hdmlnYXRpb24odW5zaWduZWQgaG93RmFyQmFj
a3dhcmQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiUXVldWVCYWNrTmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2
NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvd0ZhckJhY2t3YXJk
KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1
ZUJhY2tOYXZpZ2F0aW9uIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJCYWNrd2FyZCkp
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbih1bnNp
Z25lZCBob3dGYXJGb3J3YXJkKQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShob3dGYXJGb3J3YXJkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJRdWV1ZUZvcndhcmROYXZpZ2F0aW9uIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShob3dGYXJGb3J3YXJkKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWQo
V0tTdHJpbmdSZWYgdXJsLCBXS1N0cmluZ1JlZiB0YXJnZXQsIGJvb2wgc2hvdWxkT3BlbkV4dGVy
bmFsVVJMcykKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJRdWV1ZUxvYWQiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBsb2FkRGF0YSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1cmwiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShsb2FkRGF0YS5nZXQoKSwgdXJsS2V5LmdldCgpLCB1cmwpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRhcmdldEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoInRhcmdldCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgp
LCB0YXJnZXRLZXkuZ2V0KCksIHRhcmdldCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc2hvdWxkT3BlbkV4dGVybmFsVVJMc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWUgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShsb2FkRGF0YS5nZXQoKSwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc0tleS5nZXQoKSwgc2hv
dWxkT3BlbkV4dGVybmFsVVJMc1ZhbHVlLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbG9hZERhdGEuZ2V0KCkp
OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAidXJsIiwgdXJsKTsKKyAgICBzZXRWYWx1ZShib2R5LCAidGFy
Z2V0IiwgdGFyZ2V0KTsKKyAgICBzZXRWYWx1ZShib2R5LCAic2hvdWxkT3BlbkV4dGVybmFsVVJM
cyIsIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVM
b2FkIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZEhU
TUxTdHJpbmcoV0tTdHJpbmdSZWYgY29udGVudCwgV0tTdHJpbmdSZWYgYmFzZVVSTCwgV0tTdHJp
bmdSZWYgdW5yZWFjaGFibGVVUkwpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVMb2FkSFRNTFN0cmluZyIpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGxvYWREYXRhID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGNvbnRlbnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb250
ZW50IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIGNvbnRlbnRL
ZXkuZ2V0KCksIGNvbnRlbnQpOwotCi0gICAgaWYgKGJhc2VVUkwpIHsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJiYXNlVVJMIikpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxv
YWREYXRhLmdldCgpLCBiYXNlVVJMS2V5LmdldCgpLCBiYXNlVVJMKTsKLSAgICB9Ci0KLSAgICBp
ZiAodW5yZWFjaGFibGVVUkwpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVu
cmVhY2hhYmxlVVJMS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
dW5yZWFjaGFibGVVUkwiKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEu
Z2V0KCksIHVucmVhY2hhYmxlVVJMS2V5LmdldCgpLCB1bnJlYWNoYWJsZVVSTCk7Ci0gICAgfQot
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBsb2FkRGF0YS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJjb250ZW50IiwgY29u
dGVudCk7CisgICAgaWYgKGJhc2VVUkwpCisgICAgICAgIHNldFZhbHVlKGJvZHksICJiYXNlVVJM
IiwgYmFzZVVSTCk7CisgICAgaWYgKHVucmVhY2hhYmxlVVJMKQorICAgICAgICBzZXRWYWx1ZShi
b2R5LCAidW5yZWFjaGFibGVVUkwiLCB1bnJlYWNoYWJsZVVSTCk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJRdWV1ZUxvYWRIVE1MU3RyaW5nIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnF1ZXVlUmVsb2FkKCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZVJlbG9hZCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiUXVldWVSZWxvYWQiKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVl
dWVMb2FkaW5nU2NyaXB0KFdLU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBtX3VzZVdvcmtRdWV1
ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZUxvYWRpbmdTY3JpcHQi
KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBzY3JpcHQpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVMb2FkaW5nU2Ny
aXB0Iiwgc2NyaXB0KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVOb25Mb2FkaW5n
U2NyaXB0KFdLU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZU5vbkxvYWRpbmdTY3JpcHQiKSk7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBzY3JpcHQpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVOb25Mb2FkaW5nU2NyaXB0
Iiwgc2NyaXB0KTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZTo6aXNBbGxvd2VkSG9zdChXS1N0
cmluZ1JlZiBob3N0KQpAQCAtMTE0Myw0ICs5MDEsNzIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6
dGV4dEZpZWxkRGlkRW5kRWRpdGluZygpCiAgICAgbV90ZXN0UnVubmVyLT50ZXh0RmllbGREaWRF
bmRFZGl0aW5nQ2FsbGJhY2soKTsKIH0KIAordm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFBhZ2VN
ZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiBib2R5KQoreworICAgIHBvc3RQYWdl
TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbmFtZSwgYm9keSk7Cit9CisKK3ZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBib2R5
KQoreworICAgIHBvc3RQYWdlTWVzc2FnZShuYW1lLCB0b1dLKGJvZHkpKTsKK30KKwordm9pZCBw
b3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgV0tC
dW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRv
V0sobmFtZSkuZ2V0KCksIHZhbHVlKTsKK30KKwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFy
KiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSkKK3sKKyAgICBwb3N0TWVzc2FnZShuYW1lLCBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlLCBudWxscHRyKTsKK30KKwordm9pZCBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIq
IG5hbWUsIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UobmFt
ZSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKQorewor
ICAgIHVpbnQ2NF90IHByb21vdGVkVmFsdWUgPSB2YWx1ZTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKG5hbWUsIHByb21vdGVkVmFsdWUpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsK
K30KKwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZh
bHVlKQoreworICAgIGlmIChhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpKQorICAgICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLT5wYWdlKCksIHRv
V0sobmFtZSkuZ2V0KCksIHZhbHVlKTsKK30KKwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3Qg
Y2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UobmFtZSwgYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQorewor
ICAgIGlmIChhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpKQor
ICAgICAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdl
LT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlLCBudWxscHRyKTsKK30KKwordm9pZCBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQor
eworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
aCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
aAppbmRleCBiNzYwMTQzNmYwYzY3Mjg1NjMzYTA4ZTI1Zjk0MmE4YWE5OGQ5NzBiLi44YWU2YWEy
ODBhMGQ5MWFiYmEyMTNmNTRiZWFiZTcwMmIxNGUyNTI2IDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCkBAIC05Niw3
ICs5Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEdlb2xvY2F0aW9uLgogICAgIHZvaWQgc2V0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uKGJvb2wpOwotICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ks
IGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFk
aW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJv
b2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFs
PGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBz
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJy
b3JNZXNzYWdlKTsKICAgICBib29sIGlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0
OwogCkBAIC0xNjksOCArMTY5LDEzIEBAIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBCZWdpbmdU
ZXN0aW5nTW9kZSB7IE5ldywgUmVzdW1lIH07CiAgICAgdm9pZCBiZWdpblRlc3RpbmcoV0tEaWN0
aW9uYXJ5UmVmIGluaXRpYWxTZXR0aW5ncywgQmVnaW5nVGVzdGluZ01vZGUpOwogCi0gICAgYm9v
bCBib29sZWFuRm9yS2V5KFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKLSAgICBT
dHJpbmcgc3RyaW5nRm9yS2V5KFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKyAg
ICBzdGF0aWMgdm9pZCBwb3N0UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmLCBjb25zdCBjaGFy
KiBuYW1lLCBXS1R5cGVSZWYgYm9keSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGlj
IHZvaWQgcG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiwgY29uc3QgY2hhciogbmFtZSwg
Y29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkpOworICAgIHN0YXRpYyB2b2lkIHBvc3RQYWdlTWVz
c2FnZShXS0J1bmRsZVBhZ2VSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGJvZHkp
OworCisgICAgdm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVm
IGJvZHkgPSBudWxscHRyKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHBvc3RQYWdl
TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBXS1JldGFpblB0cjxUPiYgYm9keSk7Cisg
ICAgdm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogYm9k
eSk7CiAKICAgICBXS0J1bmRsZVJlZiBtX2J1bmRsZSB7IG51bGxwdHIgfTsKICAgICBXS0J1bmRs
ZVBhZ2VHcm91cFJlZiBtX3BhZ2VHcm91cCB7IG51bGxwdHIgfTsKQEAgLTIxMCw0ICsyMTUsMzMg
QEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV91c2VyU2NyaXB0SW5qZWN0ZWRDb3VudCB7IDAgfTsK
IH07CiAKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVl
ID0gbnVsbHB0cik7Cit2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVk
IHZhbHVlKTsKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciog
dmFsdWUpOworCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwg
V0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cik7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
Y29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoY29uc3QgY2hhciogbmFtZSwgdWludDY0X3QgdmFsdWUpOwordm9pZCBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKTsKK3ZvaWQgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpOwordm9pZCBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVl
KTsKKwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZh
bHVlID0gbnVsbHB0cik7Cit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBi
b29sIHZhbHVlKTsKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0
IGNoYXIqIHZhbHVlKTsKKwordm9pZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZShjb25zdCBj
aGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBudWxscHRyKTsKK3ZvaWQgcG9zdFN5bmNocm9u
b3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVl
KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBv
c3RQYWdlTWVzc2FnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgY29uc3QgY2hhciogbmFtZSwgY29u
c3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkpCit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsIG5h
bWUsIGJvZHkuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIEluamVjdGVk
QnVuZGxlOjpwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5Q
dHI8VD4mIGJvZHkpCit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKG5hbWUsIGJvZHkuZ2V0KCkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAppbmRleCBkODlm
ZWFmOWI2ZGFlNGM5Njg1MzFmMGFiNjM4NTg5MWIxNGY5OGY4Li4yZjU2NDI3NzMxMTZkOWYxMDI0
ZmE2ZmJlOWRjMzUyMGIxNWUxOGE5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCkBAIC02MCw1
MCArNjAsMTggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0
YXRpYyBKU1ZhbHVlUmVmIHByb3BlcnR5VmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQorc3RhdGljIGRvdWJsZSBu
dW1lcmljV2luZG93UHJvcGVydHkoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciog
bmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byBw
cm9wZXJ0eU5hbWVTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhw
cm9wZXJ0eU5hbWUpKTsKLSAgICByZXR1cm4gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBv
YmplY3QsIHByb3BlcnR5TmFtZVN0cmluZy5nZXQoKSwgMCk7Ci19Ci0KLXN0YXRpYyBkb3VibGUg
cHJvcGVydHlWYWx1ZURvdWJsZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2Jq
ZWN0LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9
IHByb3BlcnR5VmFsdWUoY29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmICgh
dmFsdWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgdmFsdWUsIDApOyAgICAKLX0KLQotc3RhdGljIGludCBwcm9wZXJ0eVZhbHVlSW50KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3Bl
cnR5TmFtZSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihwcm9wZXJ0eVZhbHVlRG91
YmxlKGNvbnRleHQsIG9iamVjdCwgcHJvcGVydHlOYW1lKSk7ICAgIAotfQotCi1zdGF0aWMgZG91
YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0eVZhbHVlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNv
bnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKLXsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7Ci0gICAgcmV0dXJu
IHByb3BlcnR5VmFsdWVEb3VibGUoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNv
bnRleHQpLCBwcm9wZXJ0eU5hbWUpOworICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7CisgICAgcmV0dXJuIG51bWVyaWNQcm9wZXJ0eShj
b250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIG5hbWUpOwogfQogCiBz
dGF0aWMgV1RGOjpTdHJpbmcgZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIG5vZGVWYWx1ZSkKIHsKLSAgICBKU1ZhbHVlUmVmIG5vZGVOYW1lVmFsdWUgPSBw
cm9wZXJ0eVZhbHVlKGNvbnRleHQsIG5vZGVWYWx1ZSwgIm5vZGVOYW1lIik7Ci0gICAgYXV0byBq
c1N0cmluZ05vZGVOYW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBub2Rl
TmFtZVZhbHVlLCAwKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5vZGVOYW1lID0g
dG9XSyhqc1N0cmluZ05vZGVOYW1lKTsKLQotICAgIEpTVmFsdWVSZWYgcGFyZW50Tm9kZSA9IHBy
b3BlcnR5VmFsdWUoY29udGV4dCwgbm9kZVZhbHVlLCAicGFyZW50Tm9kZSIpOwotCi0gICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RG
U3RyaW5nKG5vZGVOYW1lKSk7Ci0KLSAgICBpZiAocGFyZW50Tm9kZSAmJiBKU1ZhbHVlSXNPYmpl
Y3QoY29udGV4dCwgcGFyZW50Tm9kZSkpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgPiAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29u
dGV4dCwgKEpTT2JqZWN0UmVmKXBhcmVudE5vZGUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOworICAgIGF1dG8gbmFtZSA9IHRvV1RGU3RyaW5nKHN0cmlu
Z1Byb3BlcnR5KGNvbnRleHQsIG5vZGVWYWx1ZSwgIm5vZGVOYW1lIikpOworICAgIGlmIChhdXRv
IHBhcmVudE5vZGUgPSBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBub2RlVmFsdWUsICJwYXJlbnRO
b2RlIikpCisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKG5hbWUsICIgPiAiLCBkdW1wUGF0aChj
b250ZXh0LCBwYXJlbnROb2RlKSk7CisgICAgcmV0dXJuIG5hbWU7CiB9CiAKIHN0YXRpYyBXVEY6
OlN0cmluZyBkdW1wUGF0aChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3Js
ZFJlZiB3b3JsZCwgV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGUpCkBAIC0xMjYsNTMgKzk0LDQw
IEBAIHN0YXRpYyBXVEY6OlN0cmluZyByYW5nZVRvU3RyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBX
S0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkCiAgICAgaWYgKCFyYW5nZVJlZikKICAgICAgICAg
cmV0dXJuICIobnVsbCkiOwogCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxl
UGFnZUdldE1haW5GcmFtZShwYWdlKTsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxk
KTsKLSAgICBKU1ZhbHVlUmVmIHJhbmdlVmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlw
dFdyYXBwZXJGb3JSYW5nZUZvcldvcmxkKGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOworICAgIGF1
dG8gZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CisgICAgYXV0byBjb250
ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdv
cmxkKTsKKyAgICBhdXRvIHJhbmdlVmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdy
YXBwZXJGb3JSYW5nZUZvcldvcmxkKGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOwogICAgIEFTU0VS
VChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgcmFuZ2VWYWx1ZSkpOwotICAgIEpTT2JqZWN0UmVm
IHJhbmdlT2JqZWN0ID0gKEpTT2JqZWN0UmVmKXJhbmdlVmFsdWU7Ci0KLSAgICBKU1ZhbHVlUmVm
IHN0YXJ0Tm9kZVZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCByYW5nZU9iamVjdCwgInN0
YXJ0Q29udGFpbmVyIik7Ci0gICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzdGFy
dE5vZGVWYWx1ZSkpOwotICAgIEpTT2JqZWN0UmVmIHN0YXJ0Tm9kZU9iamVjdCA9IChKU09iamVj
dFJlZilzdGFydE5vZGVWYWx1ZTsKLQotICAgIEpTVmFsdWVSZWYgZW5kTm9kZVZhbHVlID0gcHJv
cGVydHlWYWx1ZShjb250ZXh0LCByYW5nZU9iamVjdCwgImVuZENvbnRhaW5lciIpOwotICAgIEFT
U0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgZW5kTm9kZVZhbHVlKSk7Ci0gICAgSlNPYmpl
Y3RSZWYgZW5kTm9kZU9iamVjdCA9IChKU09iamVjdFJlZillbmROb2RlVmFsdWU7Ci0KLSAgICBp
bnQgc3RhcnRPZmZzZXQgPSBwcm9wZXJ0eVZhbHVlSW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAi
c3RhcnRPZmZzZXQiKTsKLSAgICBpbnQgZW5kT2Zmc2V0ID0gcHJvcGVydHlWYWx1ZUludChjb250
ZXh0LCByYW5nZU9iamVjdCwgImVuZE9mZnNldCIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgicmFuZ2UgZnJvbSAi
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihzdGFydE9mZnNldCk7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb2YgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoZHVtcFBhdGgoY29udGV4dCwgc3RhcnROb2RlT2JqZWN0KSk7Ci0gICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIgdG8gIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIo
ZW5kT2Zmc2V0KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChjb250ZXh0LCBlbmROb2RlT2JqZWN0KSk7
Ci0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBhdXRvIHJhbmdlT2Jq
ZWN0ID0gKEpTT2JqZWN0UmVmKXJhbmdlVmFsdWU7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygi
cmFuZ2UgZnJvbSAiLAorICAgICAgICBudW1lcmljUHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmpl
Y3QsICJzdGFydE9mZnNldCIpLAorICAgICAgICAiIG9mICIsCisgICAgICAgIGR1bXBQYXRoKGNv
bnRleHQsIG9iamVjdFByb3BlcnR5KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRDb250YWlu
ZXIiKSksCisgICAgICAgICIgdG8gIiwKKyAgICAgICAgbnVtZXJpY1Byb3BlcnR5KGNvbnRleHQs
IHJhbmdlT2JqZWN0LCAiZW5kT2Zmc2V0IiksCisgICAgICAgICIgb2YgIiwKKyAgICAgICAgZHVt
cFBhdGgoY29udGV4dCwgb2JqZWN0UHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRD
b250YWluZXIiKSkKKyAgICApOwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cGUpCiB7CiAg
ICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlTGlua0Ns
aWNrZWQ6Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJsaW5rIGNsaWNrZWQiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJsaW5rIGNsaWNrZWQi
KTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkOgotICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSBzdWJt
aXR0ZWQiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJmb3JtIHN1Ym1pdHRlZCIpOwogICAgIGNh
c2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZUJhY2tGb3J3YXJkOgotICAgICAgICByZXR1cm4gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYmFjay9mb3J3YXJkIikpOworICAg
ICAgICByZXR1cm4gdG9XSygiYmFjay9mb3J3YXJkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmln
YXRpb25UeXBlUmVsb2FkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygicmVsb2FkIikpOworICAgICAgICByZXR1cm4gdG9XSygicmVsb2FkIik7
CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVkOgotICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSByZXN1
Ym1pdHRlZCIpKTsKKyAgICAgICAgcmV0dXJuIHRvV0soImZvcm0gcmVzdWJtaXR0ZWQiKTsKICAg
ICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVPdGhlcjoKLSAgICAgICAgcmV0dXJuIGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm90aGVyIikpOworICAgICAgICByZXR1
cm4gdG9XSygib3RoZXIiKTsKICAgICB9Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImlsbGVnYWwgdmFsdWUiKSk7CisgICAgcmV0dXJuIHRvV0soImls
bGVnYWwgdmFsdWUiKTsKIH0KIAogc3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tC
dW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlKQpAQCAtMTg1LDIzICsxNDAsMTQgQEAg
c3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0
aW9uUmVmIHN0eWxlKQogICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAK
LXN0YXRpYyBXVEY6OlN0cmluZyBzZWN1cml0eU9yaWdpblRvU3RyKFdLU2VjdXJpdHlPcmlnaW5S
ZWYgb3JpZ2luKQorc3RhdGljIFdURjo6U3RyaW5nIHN0cmluZyhXS1NlY3VyaXR5T3JpZ2luUmVm
IG9yaWdpbikKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJ3snKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
ZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkpKTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkp
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmROdW1iZXIoV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSk7Ci0gICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ30nKTsKLQotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoJ3snLCB0b1dURlN0cmluZyhhZG9wdFdL
KFdLU2VjdXJpdHlPcmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkpLCAiLCAiLCB0b1dURlN0cmlu
ZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9zdChvcmlnaW4pKSksICIsICIsIFdLU2Vj
dXJpdHlPcmlnaW5HZXRQb3J0KG9yaWdpbiksICd9Jyk7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmlu
ZyBmcmFtZVRvU3RyKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkp
OworICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7
CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGlmIChXS0J1bmRsZUZyYW1l
SXNNYWluRnJhbWUoZnJhbWUpKSB7CiAgICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUu
Z2V0KCkpKSB7CkBAIC0yMzUsMTIgKzE4MSwxMiBAQCBzdGF0aWMgaW5saW5lIFdURjo6U3RyaW5n
IHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZWYgZmlsZVVybCkKICAgICBpZiAoIWZp
bGVVcmwpCiAgICAgICAgIHJldHVybiAiKG51bGwpIjsKIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzY2hlbWVTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJsKSk7
CisgICAgYXV0byBzY2hlbWVTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJs
KSk7CiAgICAgaWYgKCFpc0xvY2FsRmlsZVNjaGVtZShzY2hlbWVTdHJpbmcuZ2V0KCkpKQogICAg
ICAgICByZXR1cm4gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoZmlsZVVybCkp
KTsKIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFt
ZUNvcHlVUkwobWFpbkZyYW1lKSk7CisgICAgYXV0byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdL
QnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOwogICAgIGlmICghbWFpbkZyYW1lVVJMKQog
ICAgICAgICBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9u
YWxVUkwobWFpbkZyYW1lKSk7CiAKQEAgLTQzNCw4ICszODAsNyBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6cmVzZXRBZnRlclRlc3QoKQogICAgIC8vIChzZWUgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgzMzQ+KSwgaG93ZXZlciBmb3IgdGVzdHMsIHdlIHdh
bnQgdG8gc3RhcnQgZWFjaCBvbmUgd2l0aCBhIGNsZWFuIHN0YXRlLgogICAgIFdLQnVuZGxlRnJh
bWVGb2N1cyhmcmFtZSk7CiAKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVu
ZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7Ci0gICAgV2ViQ29yZVRlc3RTdXBw
b3J0OjpyZXNldEludGVybmFsc09iamVjdChjb250ZXh0KTsKKyAgICBXZWJDb3JlVGVzdFN1cHBv
cnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChmcmFtZSkpOwogICAgIGFzc2lnbmVkVXJsc0NhY2hlKCkuY2xlYXIoKTsKIAogICAgIC8vIFVz
ZXIgc2NyaXB0cyBuZWVkIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgdGhlIHRlc3QgYW5kIGJlZm9yZSBs
b2FkaW5nIGFib3V0OmJsYW5rLCBhcyBvdGhlcndpc2UgdGhleSB3b3VsZCBydW4gaW4gYWJvdXQ6
YmxhbmssIGFuZCBwb3RlbnRpYWxseSBsZWFrIHJlc3VsdHMgaW50byBhIHN1YnNlcXVlc3QgdGVz
dC4KQEAgLTQ1MSw3ICszOTYsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRl
clRlc3QoKQogLy8gU3RyaW5nIG91dHB1dCBtdXN0IGJlIGlkZW50aWNhbCB0byAtW1dlYkZyYW1l
IF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdLgogc3RhdGljIHZvaWQgZHVt
cEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7
CisgICAgYXV0byBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsK
ICAgICBpZiAoV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkgewogICAgICAgICBpZiAo
V0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIm1haW4gZnJhbWUiKTsKQEAgLTQ4NiwyNyArNDMxLDIxIEBAIHN0YXRp
YyB2b2lkIGR1bXBMb2FkRXZlbnQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciog
ZXZlbnROYW1lKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1
aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRv
cHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1VS
TFJlZj4gZmlyc3RQYXJ0eSA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JD
b29raWVzKHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaHR0cE1ldGhv
ZCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwotCi0gICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8TlNVUkxSZXF1ZXN0IFVSTCAiKTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSkp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBtYWluIGRvY3VtZW50IFVSTCAi
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZp
cnN0UGFydHkuZ2V0KCkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgaHR0
cCBtZXRob2QgIik7CisgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwo
cmVxdWVzdCkpOworICAgIGF1dG8gZmlyc3RQYXJ0eSA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29w
eUZpcnN0UGFydHlGb3JDb29raWVzKHJlcXVlc3QpKTsKKyAgICBhdXRvIGh0dHBNZXRob2QgPSBh
ZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlIVFRQTWV0aG9kKHJlcXVlc3QpKTsKIAorICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCI8TlNVUkxSZXF1ZXN0IFVSTCAiLCBwYXRoU3VpdGFibGVGb3JUZXN0
UmVzdWx0KHVybC5nZXQoKSksICIsIG1haW4gZG9jdW1lbnQgVVJMICIsIHBhdGhTdWl0YWJsZUZv
clRlc3RSZXN1bHQoZmlyc3RQYXJ0eS5nZXQoKSksICIsIGh0dHAgbWV0aG9kICIpOwogICAgIGlm
IChXS1N0cmluZ0lzRW1wdHkoaHR0cE1ldGhvZC5nZXQoKSkpCiAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiKG5vbmUpIik7CiAgICAgZWxzZQogICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyhodHRwTWV0aG9kKSk7Ci0KICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnPicpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlc3BvbnNlRGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgU3Ry
aW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgYm9vbCBzaG91bGREdW1wUmVzcG9uc2VIZWFkZXJz
ID0gZmFsc2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tV
UkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tV
UkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKICAgICBpZiAoIXVybCkgewogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIihudWxsKSIpOwogICAgICAgICByZXR1cm47CkBA
IC01MzUsMzEgKzQ3NCwyMCBAQCB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNl
SGVhZGVyQ291bnQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKIAogc3RhdGljIGlubGluZSB2
b2lkIGR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLRXJyb3JSZWYg
ZXJyb3IsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGVycm9yRG9tYWluID0gYWRvcHRXSyhXS0Vycm9yQ29weURvbWFpbihlcnJv
cikpOwotICAgIGludCBlcnJvckNvZGUgPSBXS0Vycm9yR2V0RXJyb3JDb2RlKGVycm9yKTsKKyAg
ICBhdXRvIGVycm9yRG9tYWluID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS0Vycm9yQ29weURvbWFp
bihlcnJvcikpKTsKKyAgICBhdXRvIGVycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJy
b3IpOwogCiAgICAgLy8gV2UgbmVlZCB0byBkbyBzb21lIGVycm9yIG1hcHBpbmcgaGVyZSB0byBt
YXRjaCB0aGUgdGVzdCBleHBlY3RhdGlvbnMgKE1hYyBlcnJvciBuYW1lcyBhcmUgZXhwZWN0ZWQp
LgotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGVycm9yRG9tYWluLmdldCgp
LCAiV2ViS2l0TmV0d29ya0Vycm9yIikpIHsKLSAgICAgICAgZXJyb3JEb21haW4gPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOU1VSTEVycm9yRG9tYWluIikpOworICAg
IGlmIChlcnJvckRvbWFpbiA9PSAiV2ViS2l0TmV0d29ya0Vycm9yIikgeworICAgICAgICBlcnJv
ckRvbWFpbiA9ICJOU1VSTEVycm9yRG9tYWluIjsKICAgICAgICAgZXJyb3JDb2RlID0gLTk5OTsK
ICAgICB9CisgICAgaWYgKGVycm9yRG9tYWluID09ICAiV2ViS2l0UG9saWN5RXJyb3IiKQorICAg
ICAgICBlcnJvckRvbWFpbiA9ICJXZWJLaXRFcnJvckRvbWFpbiI7CiAKLSAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhlcnJvckRvbWFpbi5nZXQoKSwgIldlYktpdFBvbGljeUVy
cm9yIikpCi0gICAgICAgIGVycm9yRG9tYWluID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiV2ViS2l0RXJyb3JEb21haW4iKSk7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIjxOU0Vycm9yIGRvbWFpbiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh0b1dURlN0cmluZyhlcnJvckRvbWFpbikpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiLCBjb2RlICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGVycm9yQ29k
ZSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS0Vycm9yQ29w
eUZhaWxpbmdVUkwoZXJyb3IpKTsKLSAgICBpZiAodXJsLmdldCgpKSB7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1
cmwuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGZhaWxp
bmcgVVJMIFwiIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVy
bFN0cmluZykpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgIH0KLQor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCI8TlNFcnJvciBkb21haW4gIiwgZXJyb3JEb21haW4s
ICIsIGNvZGUgIiwgZXJyb3JDb2RlKTsKKyAgICBpZiAoYXV0byB1cmwgPSBhZG9wdFdLKFdLRXJy
b3JDb3B5RmFpbGluZ1VSTChlcnJvcikpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
LCBmYWlsaW5nIFVSTCBcIiIsIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVy
bC5nZXQoKSkpKSwgJyInKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCkBA
IC02OTUsNyArNjIzLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFN0YXJ0UHJvdmlz
aW9uYWxMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnRlc3RVUkwoKSkgewot
ICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdGVzdFVSTCA9IGFkb3B0V0soV0tCdW5kbGVG
cmFtZUNvcHlQcm92aXNpb25hbFVSTChmcmFtZSkpOworICAgICAgICBhdXRvIHRlc3RVUkwgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwoZnJhbWUpKTsKICAgICAgICAg
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zZXRUZXN0VVJMKHRlc3RVUkwuZ2V0KCkpOwog
ICAgIH0KIApAQCAtNzc0LDEzICs3MDIsMTMgQEAgZW51bSBGcmFtZU5hbWVQb2xpY3kgeyBTaG91
bGROb3RJbmNsdWRlRnJhbWVOYW1lLCBTaG91bGRJbmNsdWRlRnJhbWVOYW1lIH07CiAKIHN0YXRp
YyB2b2lkIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0
cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIEZyYW1lTmFtZVBvbGljeSBzaG91bGRJbmNsdWRl
RnJhbWVOYW1lID0gU2hvdWxkTm90SW5jbHVkZUZyYW1lTmFtZSkKIHsKLSAgICBkb3VibGUgeCA9
IG51bWVyaWNXaW5kb3dQcm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVhPZmZzZXQiKTsKLSAgICBk
b3VibGUgeSA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVlPZmZzZXQi
KTsKKyAgICBkb3VibGUgeCA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0eShmcmFtZSwgInBhZ2VYT2Zm
c2V0Iik7CisgICAgZG91YmxlIHkgPSBudW1lcmljV2luZG93UHJvcGVydHkoZnJhbWUsICJwYWdl
WU9mZnNldCIpOwogICAgIGlmIChmYWJzKHgpIDw9IDAuMDAwMDAwMDEgJiYgZmFicyh5KSA8PSAw
LjAwMDAwMDAxKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkSW5jbHVkZUZyYW1l
TmFtZSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0V0so
V0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CisgICAgICAgIGF1dG8gbmFtZSA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiZnJhbWUgJyIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0
b1dURlN0cmluZyhuYW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
JyAiKTsKQEAgLTc5NCw3ICs3MjIsNyBAQCBzdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3Np
dGlvbihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbgogCiBzdGF0
aWMgdm9pZCBkdW1wRGVzY2VuZGFudEZyYW1lU2Nyb2xsUG9zaXRpb25zKFdLQnVuZGxlRnJhbWVS
ZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tBcnJheVJlZj4gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hp
bGRGcmFtZXMoZnJhbWUpKTsKKyAgICBhdXRvIGNoaWxkRnJhbWVzID0gYWRvcHRXSyhXS0J1bmRs
ZUZyYW1lQ29weUNoaWxkRnJhbWVzKGZyYW1lKSk7CiAgICAgc2l6ZV90IHNpemUgPSBXS0FycmF5
R2V0U2l6ZShjaGlsZEZyYW1lcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKICAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBzdWJmcmFtZSA9IHN0YXRpY19j
YXN0PFdLQnVuZGxlRnJhbWVSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZEZyYW1lcy5n
ZXQoKSwgaSkpOwpAQCAtODEwLDI4ICs3MzgsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmR1bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGUK
ICAgICBkdW1wRGVzY2VuZGFudEZyYW1lU2Nyb2xsUG9zaXRpb25zKGZyYW1lLCBzdHJpbmdCdWls
ZGVyKTsKIH0KIAotc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKGNvbnN0IGNo
YXIqIHN0cmluZykKLXsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc3RyaW5nKSk7Ci19Ci0KIHN0YXRpYyBib29sIGhhc0RvY3VtZW50RWxlbWVudChXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBKU09iamVjdFJl
ZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7Ci0KLSAg
ICBKU1ZhbHVlUmVmIGRvY3VtZW50VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQs
IGdsb2JhbE9iamVjdCwgdG9KUygiZG9jdW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFkb2N1
bWVudFZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoSlNWYWx1ZUlz
T2JqZWN0KGNvbnRleHQsIGRvY3VtZW50VmFsdWUpKTsKLSAgICBKU09iamVjdFJlZiBkb2N1bWVu
dCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBkb2N1bWVudFZhbHVlLCAwKTsKLQotICAgIEpT
VmFsdWVSZWYgZG9jdW1lbnRFbGVtZW50VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQsIGRvY3VtZW50LCB0b0pTKCJkb2N1bWVudEVsZW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYg
KCFkb2N1bWVudEVsZW1lbnRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgZG9jdW1lbnRFbGVtZW50VmFsdWUpOworICAg
IGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7
CisgICAgcmV0dXJuIG9iamVjdFByb3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9i
amVjdChjb250ZXh0KSwgeyAiZG9jdW1lbnQiLCAiZG9jdW1lbnRFbGVtZW50IiB9KTsKIH0KIAog
c3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdC
dWlsZGVyJiBidWlsZGVyKQpAQCAtODU0LDExICs3NjQsMTEgQEAgc3RhdGljIHZvaWQgZHVtcEZy
YW1lVGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQog
CiBzdGF0aWMgdm9pZCBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxX
S0FycmF5UmVmPiBjaGlsZEZyYW1lcyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZy
YW1lcyhmcmFtZSkpOworICAgIGF1dG8gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJh
bWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsKICAgICBzaXplX3Qgc2l6ZSA9IFdLQXJyYXlHZXRT
aXplKGNoaWxkRnJhbWVzLmdldCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewogICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIHN1YmZyYW1lID0gc3RhdGljX2Nhc3Q8
V0tCdW5kbGVGcmFtZVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGNoaWxkRnJhbWVzLmdldCgp
LCBpKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJmcmFtZU5hbWUgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShzdWJmcmFtZSkpOworICAgICAgICBhdXRvIHN1
YmZyYW1lTmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKHN1YmZyYW1lKSk7CiAK
ICAgICAgICAgLy8gRHVtcFJlbmRlclRyZWUgaWdub3JlcyBlbXB0eSBmcmFtZXMsIHNvIGRvIHRo
ZSBzYW1lIHRoaW5nIGhlcmUuCiAgICAgICAgIGlmICghaGFzRG9jdW1lbnRFbGVtZW50KHN1YmZy
YW1lKSkKQEAgLTg4NCw5ICs3OTQsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFs
bEZyYW1lc1RleHQoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0
cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7CiAjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0o
V0lOX0NBSVJPKSAmJiAhVVNFKERJUkVDVDJEKQotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4g
d2tEYXRhID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKLSAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBX
S0RhdGFHZXRCeXRlcyh3a0RhdGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkp
KTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmU3RyaW5nID0gYWRvcHRDRihXZWJDb3Jl
VGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0
KCkpKTsKKyAgICBhdXRvIHdrRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNo
aXZlKGZyYW1lKSk7CisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBX
S0RhdGFHZXRCeXRlcyh3a0RhdGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkp
KTsKKyAgICBhdXRvIGNmU3RyaW5nID0gYWRvcHRDRihXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0
ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChjZlN0cmluZy5nZXQoKSk7CiAjZW5kaWYKIH0KQEAgLTkwMiw5ICs4MTIs
OSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcCgpCiAgICAgV0tCdW5kbGVQYWdlRmx1
c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUobV9wYWdlKTsKIAogICAgIFdLQnVuZGxlRnJhbWVS
ZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKTsKLSAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gdXJsUmVmID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFt
ZSkpOworICAgIGF1dG8gdXJsUmVmID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFt
ZSkpOwogICAgIFN0cmluZyB1cmwgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmlu
Zyh1cmxSZWYuZ2V0KCkpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBl
ID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU1JTUVUeXBlRm9yUmVzb3VyY2VXaXRoVVJMKGZy
YW1lLCB1cmxSZWYuZ2V0KCkpKTsKKyAgICBhdXRvIG1pbWVUeXBlID0gYWRvcHRXSyhXS0J1bmRs
ZUZyYW1lQ29weU1JTUVUeXBlRm9yUmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYuZ2V0KCkp
KTsKICAgICBpZiAodXJsLmZpbmQoImR1bXBBc1RleHQvIikgIT0gbm90Rm91bmQgfHwgV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtaW1lVHlwZS5nZXQoKSwgInRleHQvcGxhaW4iKSkKICAg
ICAgICAgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5kdW1wQXNUZXh0KGZhbHNlKTsKIApA
QCAtMTAxOCwyMSArOTI4LDE5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldp
bmRvd0ZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlCiAgICAgaWYgKCFp
bmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250
ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKLSAgICBKU09iamVjdFJlZiB3aW5kb3cgPSBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5k
bGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKIAogICAg
IGlmIChXS0J1bmRsZVNjcmlwdFdvcmxkTm9ybWFsV29ybGQoKSAhPSB3b3JsZCkgewotICAgICAg
ICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvdywgdG9KUygiX193b3JsZElEIiku
Z2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIFRlc3RSdW5uZXI6OndvcmxkSURGb3JX
b3JsZCh3b3JsZCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICAgICAg
c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgIl9fd29ybGRJRCIsIFRlc3RSdW5uZXI6
OndvcmxkSURGb3JXb3JsZCh3b3JsZCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
SlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgIGluamVjdGVkQnVuZGxlLnRlc3RS
dW5uZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwot
ICAgIGluamVjdGVkQnVuZGxlLmdjQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRl
eHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuZXZlbnRTZW5kaW5n
Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlv
bik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUudGV4dElucHV0Q29udHJvbGxlcigpLT5tYWtlV2luZG93
T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVu
ZGxlLmdjQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVj
dGVkQnVuZGxlLmV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250
ZXh0KTsKKyAgICBpbmplY3RlZEJ1bmRsZS50ZXh0SW5wdXRDb250cm9sbGVyKCktPm1ha2VXaW5k
b3dPYmplY3QoY29udGV4dCk7CiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotICAgIGluamVjdGVk
QnVuZGxlLmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4
dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOwogI2VuZGlmCiAKICAgICBX
ZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKQEAgLTEx
MzYsNyArMTA0NCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRJbml0aWF0ZUxvYWRG
b3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kCiAgICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5
VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVS
TChyZXF1ZXN0KSk7CiAgICAgYXNzaWduZWRVcmxzQ2FjaGUoKS5hZGQoaWRlbnRpZmllciwgcGF0
aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwuZ2V0KCkpKTsKIH0KIApAQCAtMTE3NSwxNiArMTA4
MywxNiBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVl
c3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5p
c1Rlc3RSdW5uaW5nKCkgJiYgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJl
cXVlc3RSZXR1cm5zTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFdLUmV0
YWluUHRyPFdLVVJMUmVmPiByZWRpcmVjdFVSTCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlV
UkwocmVzcG9uc2UpKTsKKyAgICBhdXRvIHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VSTFJlc3Bv
bnNlQ29weVVSTChyZXNwb25zZSkpOwogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5u
aW5nKCkgJiYgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1
cm5zTnVsbE9uUmVkaXJlY3QoKSAmJiByZWRpcmVjdFVSTCkgewogICAgICAgICBpbmplY3RlZEJ1
bmRsZS5vdXRwdXRUZXh0KCJSZXR1cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVm
PiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFtZSh1cmwu
Z2V0KCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NoZW1lID0gYWRvcHRXSyhX
S1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOworICAgIGF1
dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRv
IGhvc3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1lKHVybC5nZXQoKSkpOworICAgIGF1dG8g
c2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CisgICAgYXV0byB1
cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKICAgICBpZiAo
aG9zdCAmJiAhV0tTdHJpbmdJc0VtcHR5KGhvc3QuZ2V0KCkpCiAgICAgICAgICYmIGlzSFRUUE9y
SFRUUFNTY2hlbWUoc2NoZW1lLmdldCgpKQogICAgICAgICAmJiAhV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhob3N0LmdldCgpLCAiMjU1LjI1NS4yNTUuMjU1IikgLy8gVXNlZCBpbiBzb21l
IHRlc3RzIHRoYXQgZXhwZWN0IHRvIGdldCBiYWNrIGFuIGVycm9yLgpAQCAtMTE5MiwxMiArMTEw
MCwxMiBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVl
c3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgICAgICBib29sIG1haW5GcmFtZUlz
RXh0ZXJuYWwgPSBmYWxzZTsKICAgICAgICAgaWYgKGluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5p
bmcoKSkgewogICAgICAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVmPiBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFt
ZSkpOworICAgICAgICAgICAgYXV0byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJh
bWVDb3B5VVJMKG1haW5GcmFtZSkpOwogICAgICAgICAgICAgaWYgKCFtYWluRnJhbWVVUkwgfHwg
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtYWlu
RnJhbWVVUkwuZ2V0KCkpKS5nZXQoKSwgImFib3V0OmJsYW5rIikpCiAgICAgICAgICAgICAgICAg
bWFpbkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKG1h
aW5GcmFtZSkpOwogCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWFpbkZy
YW1lSG9zdCA9IGFkb3B0V0soV0tVUkxDb3B5SG9zdE5hbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7
Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1lU2NoZW1lID0g
YWRvcHRXSyhXS1VSTENvcHlTY2hlbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7CisgICAgICAgICAg
ICBhdXRvIG1haW5GcmFtZUhvc3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1lKG1haW5GcmFt
ZVVSTC5nZXQoKSkpOworICAgICAgICAgICAgYXV0byBtYWluRnJhbWVTY2hlbWUgPSBhZG9wdFdL
KFdLVVJMQ29weVNjaGVtZShtYWluRnJhbWVVUkwuZ2V0KCkpKTsKICAgICAgICAgICAgIG1haW5G
cmFtZUlzRXh0ZXJuYWwgPSBpc0hUVFBPckhUVFBTU2NoZW1lKG1haW5GcmFtZVNjaGVtZS5nZXQo
KSkgJiYgIWlzTG9jYWxIb3N0KG1haW5GcmFtZUhvc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAg
ICAgIGlmICghbWFpbkZyYW1lSXNFeHRlcm5hbCAmJiAhaXNBbGxvd2VkSG9zdChob3N0LmdldCgp
KSkgewpAQCAtMTIxNCw3ICsxMTIyLDcgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxl
UGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAg
ICAgU3RyaW5nIGJvZHkgPSBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVx
dWVzdEhUVFBCb2R5KCk7CiAgICAgICAgIGlmICghYm9keS5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIENTdHJpbmcgY0JvZHkgPSBib2R5LnV0ZjgoKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRy
PFdLRGF0YVJlZj4gYm9keSA9IGFkb3B0V0soV0tEYXRhQ3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGNCb2R5LmRhdGEoKSksIGNCb2R5Lmxlbmd0aCgpKSk7Cisg
ICAgICAgICAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLRGF0YUNyZWF0ZShyZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihjQm9keS5kYXRhKCkpLCBjQm9keS5sZW5ndGgoKSkp
OwogICAgICAgICAgICAgcmV0dXJuIFdLVVJMUmVxdWVzdENvcHlTZXR0aW5nSFRUUEJvZHkocmVx
dWVzdCwgYm9keS5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjQyLDkgKzExNTAsOSBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2Uo
V0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQgogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJl
c3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1
cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtaW1lVHlwZVN0cmluZyA9IGFkb3B0V0so
V0tVUkxSZXNwb25zZUNvcHlNSU1FVHlwZShyZXNwb25zZSkpOworICAgIGF1dG8gdXJsID0gYWRv
cHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8gdXJsU3RyaW5n
ID0gYWRvcHRXSyhXS1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKKyAgICBh
dXRvIG1pbWVUeXBlU3RyaW5nID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHJl
c3BvbnNlKSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7CkBAIC0xMzUwLDEwICsxMjU4
LDggQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25cbiIpOwogICAgICAgICBkdW1wUmVxdWVzdERlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlcXVlc3QsIHN0cmluZ0J1aWxkZXIpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBpcyBtYWluIGZyYW1lIC0gIik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFt
ZSkgPyAieWVzIiA6ICJubyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IiBzaG91bGQgb3BlbiBVUkxzIGV4dGVybmFsbHkgLSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJM
cyhuYXZpZ2F0aW9uQWN0aW9uKSA/ICJ5ZXMiIDogIm5vIik7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIgaXMgbWFpbiBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShm
cmFtZSkgPyAieWVzIiA6ICJubyIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIHNo
b3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdl
dFNob3VsZE9wZW5FeHRlcm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIp
OwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgaW5qZWN0ZWRC
dW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KQEAgLTEz
NjEsMjQgKzEyNjcsMjEgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICBpZiAoIWluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwogCi0gICAgV0tS
ZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1
ZXN0KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFNjaGVtZSA9IGFkb3B0V0so
V0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VS
TFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIHVybFNjaGVtZSA9IGFkb3B0V0so
V0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRl
OiBhdHRlbXB0IHRvIGxvYWQgIik7Ci0gICAgaWYgKGlzTG9jYWxGaWxlU2NoZW1lKHVybFNjaGVt
ZS5nZXQoKSkpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZpbGVuYW1lID0g
YWRvcHRXSyhXS1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhX
S1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgIH0KKyAgICBpZiAoaXNMb2NhbEZpbGVTY2hl
bWUodXJsU2NoZW1lLmdldCgpKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZT
dHJpbmcoYWRvcHRXSyhXS1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKSkpOwor
ICAgIGVsc2UKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRX
SyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiB3aXRoIG5hdmlnYXRpb24gdHlwZSBcJyIpOwogICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHRvV1RGU3RyaW5nKE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0
aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikpKSk7CiAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcJyIpOwotICAgIFdLUmV0YWluUHRyPFdLQnVuZGxl
SGl0VGVzdFJlc3VsdFJlZj4gaGl0VGVzdFJlc3VsdFJlZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZp
Z2F0aW9uQWN0aW9uQ29weUhpdFRlc3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbikpOworICAgIGF1
dG8gaGl0VGVzdFJlc3VsdFJlZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29w
eUhpdFRlc3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbikpOwogICAgIGlmIChoaXRUZXN0UmVzdWx0
UmVmKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlTm9kZUhhbmRsZVJlZj4gbm9kZUhh
bmRsZVJlZiA9IGFkb3B0V0soV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0
VGVzdFJlc3VsdFJlZi5nZXQoKSkpOworICAgICAgICBhdXRvIG5vZGVIYW5kbGVSZWYgPSBhZG9w
dFdLKFdLQnVuZGxlSGl0VGVzdFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYu
Z2V0KCkpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb3JpZ2luYXRp
bmcgZnJvbSAiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdl
LCBtX3dvcmxkLmdldCgpLCBub2RlSGFuZGxlUmVmLmdldCgpKSk7CiAgICAgfQpAQCAtMTQwMCwx
MiArMTMwMyw3IEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKFdLQnVuZGxlUGFnCiB7CiAgICAgYXV0byYgaW5qZWN0
ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgaWYgKGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9s
aWN5RGVsZWdhdGVFbmFibGVkKCkgJiYgV0tVUkxSZXNwb25zZUlzQXR0YWNobWVudChyZXNwb25z
ZSkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZmlsZW5hbWUgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5
U3VnZ2VzdGVkRmlsZW5hbWUocmVzcG9uc2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1
Z2dlc3RlZCBmaWxlIG5hbWUgXCciKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9X
VEZTdHJpbmcoZmlsZW5hbWUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJcJ1xuIik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlBvbGljeSBkZWxlZ2F0ZTogcmVzb3VyY2Ug
aXMgYW4gYXR0YWNobWVudCwgc3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIsIHRvV1RGU3RyaW5nKGFk
b3B0V0soV0tVUkxSZXNwb25zZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShyZXNwb25zZSkpKSwgIlwn
XG4iKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NU
aHJvdWdoOwpAQCAtMTQ3MSwxMCArMTM2OSwxMCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgYWRkTGVh
ZGluZ1NwYWNlU3RyaXBUcmFpbGluZ1NwYWNlc0FkZE5ld2xpbmUoY29uc3QgV1RGOjpTdHJpbgog
CiBzdGF0aWMgV1RGOjpTdHJpbmcgbGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KGNvbnN0IFdURjo6
U3RyaW5nJiBwYXRoKQogewotICAgIHNpemVfdCBwb3MgPSBwYXRoLmZpbmQoImZpbGU6Ly8iKTsK
KyAgICBhdXRvIHBvcyA9IHBhdGguZmluZCgiZmlsZTovLyIpOwogICAgIEFTU0VSVChXVEY6Om5v
dEZvdW5kICE9IHBvcyk7CiAKLSAgICBXVEY6OlN0cmluZyB0bXBQYXRoID0gcGF0aC5zdWJzdHJp
bmcocG9zICsgNyk7CisgICAgYXV0byB0bXBQYXRoID0gcGF0aC5zdWJzdHJpbmcocG9zICsgNyk7
CiAgICAgaWYgKHRtcFBhdGgubGVuZ3RoKCkgPCAyKSAvLyBLZWVwIHRoZSBsb25lIHNsYXNoIHRv
IGF2b2lkIGVtcHR5IG91dHB1dC4KICAgICAgICAgcmV0dXJuIHRtcFBhdGg7CiAKQEAgLTE1MjEs
MTEgKzE0MTksNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRl
eHQoV0tTdHJpbmdSZWYgc3RhdHVzYmFyVGV4dCkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6
Iik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCkp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5v
dXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3Rh
dHVzVGV4dDoiLCB0b1dURlN0cmluZyhzdGF0dXNiYXJUZXh0KSwgJ1xuJykpOwogfQogCiB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1JlZiBt
ZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVmKQpAQCAtMTU1OSwxNSArMTQ1Myw4IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1Nl
Y3VyaXR5T3JpZ2luUmVmCiAgICAgICAgIC8vIFJvdW5kaW5nIHVwIG9yIGRvd24gZG9lcyBub3Qg
cmVhbGx5IG1hdHRlciBmb3IgdGhlc2UgdGVzdHMuIEl0J3MKICAgICAgICAgLy8gc3VmZmljaWVu
dCB0byBqdXN0IGdldCBhIHJhbmdlIG9mIDEwMDAwIHRvIGRldGVybWluZSBpZiB3ZSB3ZXJlCiAg
ICAgICAgIC8vIGFib3ZlIG9yIGJlbG93IGEgdGhyZXNob2xkLgotICAgICAgICBpbnQ2NF90IHRy
dW5jYXRlZFNwYWNlTmVlZGVkID0gKHRvdGFsQnl0ZXNOZWVkZWQgLyAxMDAwMCkgKiAxMDAwMDsK
LQotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgQVBQTElDQVRJT04gQ0FDSEUgQ0FMTEJB
Q0s6IGV4Y2VlZGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhRm9yU2VjdXJpdHlPcmlnaW46
Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlY3VyaXR5T3JpZ2luVG9TdHIob3Jp
Z2luKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvdGFsU3BhY2VO
ZWVkZWQ6fiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0cnVuY2F0ZWRT
cGFjZU5lZWRlZCk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Cisg
ICAgICAgIGF1dG8gdHJ1bmNhdGVkU3BhY2VOZWVkZWQgPSAodG90YWxCeXRlc05lZWRlZCAvIDEw
MDAwKSAqIDEwMDAwOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJp
bmcoIlVJIERFTEVHQVRFIEFQUExJQ0FUSU9OIENBQ0hFIENBTExCQUNLOiBleGNlZWRlZEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5RdW90YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmluZyhvcmlnaW4p
LCAiIHRvdGFsU3BhY2VOZWVkZWQ6fiIsIHRydW5jYXRlZFNwYWNlTmVlZGVkLCAnXG4nKSk7CiAg
ICAgfQogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRGlzYWxs
b3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpKQpAQCAtMTU4MCwxNSArMTQ2Nyw4
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmln
aW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmCiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sIFdLU3Ry
aW5nUmVmIGRhdGFiYXNlTmFtZSwgV0tTdHJpbmdSZWYgZGF0YWJhc2VEaXNwbGF5TmFtZSwgdWlu
dDY0X3QgY3VycmVudFF1b3RhQnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnRPcmlnaW5Vc2FnZUJ5dGVz
LCB1aW50NjRfdCBjdXJyZW50RGF0YWJhc2VVc2FnZUJ5dGVzLCB1aW50NjRfdCBleHBlY3RlZFVz
YWdlQnl0ZXMpCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7Ci0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRF
IERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdp
bjoiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihv
cmlnaW4pKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZGF0YWJhc2U6
Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGRhdGFiYXNlTmFt
ZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAg
ICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxs
YmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJV
SSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2Vj
dXJpdHlPcmlnaW46Iiwgc3RyaW5nKG9yaWdpbiksICIgZGF0YWJhc2U6IiwgdG9XVEZTdHJpbmco
ZGF0YWJhc2VOYW1lKSwgJ1xuJykpOwogCiAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhID0gNSAq
IDEwMjQgKiAxMDI0OwogICAgIGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5kYXRhYmFzZURlZmF1bHRRdW90YSgpOwpAQCAtMTYwMSwxMiArMTQ4
MSw3IEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90
YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwKICAgICBpZiAobWF4UXVvdGEgPj0gMCkgewog
ICAgICAgICBpZiAoZGVmYXVsdFF1b3RhIDwgZXhwZWN0ZWRVc2FnZUJ5dGVzICYmIGV4cGVjdGVk
VXNhZ2VCeXRlcyA8PSBtYXhRdW90YSkgewogICAgICAgICAgICAgbmV3UXVvdGEgPSBleHBlY3Rl
ZFVzYWdlQnl0ZXM7Ci0KLSAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
LSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgREFU
QUJBU0UgQ0FMTEJBQ0s6IGluY3JlYXNlZCBxdW90YSB0byAiKTsKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTnVtYmVyKG5ld1F1b3RhKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCdcbicpOwotICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVh
c2VkIHF1b3RhIHRvICIsIG5ld1F1b3RhLCAnXG4nKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
cmV0dXJuIG5ld1F1b3RhOwpAQCAtMTY3NSwxMyArMTU1MCw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkK
ICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRF
OiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKLSAgICB9CisgICAgaWYgKGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAg
ICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVH
QVRFOiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTY5MSwxMyArMTU2
MSw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKFdLQnVuZGxl
UmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5u
aW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCByYW5nZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAg
ICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwot
ICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRp
dGluZ0NhbGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VT
dHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIsIHJh
bmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1
cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5jcHAKaW5kZXggYTYyNTU4OTcyN2JjNzFiNzQxZWNmMjU2NTE1MjFlZmI0ZjQ5OTdmMy4u
NzFjYzAxOGY0MTI2MDIzNWU5ZTQ3YWI5NGEwNDczYjRmMzYxYzExMCAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYsMTEgKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5l
ci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkluamVj
dGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5jbHVkZSAi
SlNUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAi
U3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0NUZXN0UnVubmVyVXRpbHMuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgpAQCAtNjksNyArNjksNyBAQCBSZWY8VGVzdFJ1bm5l
cj4gVGVzdFJ1bm5lcjo6Y3JlYXRlKCkKIH0KIAogVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcigpCi0g
ICAgOiBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24oYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiIikpKQorICAgIDogbV91c2VyU3R5bGVTaGVldExvY2F0aW9uKHRvV0soIiIp
KQogewogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogfQpAQCAtODMsMzQgKzgzLDEwMiBAQCBK
U0NsYXNzUmVmIFRlc3RSdW5uZXI6OndyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIEpTVGVzdFJ1
bm5lcjo6dGVzdFJ1bm5lckNsYXNzKCk7CiB9CiAKK3N0YXRpYyBXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSgpCit7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKTsKK30KKworc3RhdGljIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lKCkKK3sKKyAgICBy
ZXR1cm4gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSk7Cit9CisKK3N0YXRpYyBKU0Nv
bnRleHRSZWYgbWFpbkpTQ29udGV4dCgpCit7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUoKSk7Cit9CisKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlz
cGxheSgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KHBh
Z2UpOworICAgIFdLQnVuZGxlUGFnZUZvcmNlUmVwYWludChwYWdlKCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAg
ICBhdXRvIHBhZ2UgPSBXVFI6OnBhZ2UoKTsKICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQo
cGFnZSk7CiAgICAgV0tCdW5kbGVQYWdlU2V0VHJhY2tzUmVwYWludHMocGFnZSwgdHJ1ZSk7CiAg
ICAgV0tCdW5kbGVQYWdlUmVzZXRUcmFja2VkUmVwYWludHMocGFnZSk7CiB9CiAKK3N0YXRpYyBX
S1JldGFpblB0cjxXS0RvdWJsZVJlZj4gdG9XSyhkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJu
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKTsKK30KKworc3RhdGljIFdLUmV0YWluUHRy
PFdLRGljdGlvbmFyeVJlZj4gY3JlYXRlV0tEaWN0aW9uYXJ5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxzdGQ6OnBhaXI8Y29uc3QgY2hhciosIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+PiBwYWlycykK
K3sKKyAgICBhdXRvIHNpemUgPSBwYWlycy5zaXplKCk7CisgICAgVmVjdG9yPFdLU3RyaW5nUmVm
PiBrZXlzKHNpemUpOworICAgIFZlY3RvcjxXS1R5cGVSZWY+IHZhbHVlcyhzaXplKTsKKyAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBzdHJpbmdzKHNpemUpOworICAgIGZvciAo
YXV0byYgcGFpciA6IHBhaXJzKSB7CisgICAgICAgIGF1dG8ga2V5ID0gdG9XSyhwYWlyLmZpcnN0
KTsKKyAgICAgICAga2V5cy5hcHBlbmQoa2V5LmdldCgpKTsKKyAgICAgICAgdmFsdWVzLmFwcGVu
ZChwYWlyLnNlY29uZC5nZXQoKSk7CisgICAgICAgIHN0cmluZ3MuYXBwZW5kKFdURk1vdmUoa2V5
KSk7CisgICAgfQorICAgIHJldHVybiBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShrZXlzLmRh
dGEoKSwgdmFsdWVzLmRhdGEoKSwgc2l6ZSkpOworfQorCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiBwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIq
IG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgV0tUeXBlUmVmIHJhd1Jl
dHVyblZhbHVlID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2
YWx1ZSwgJnJhd1JldHVyblZhbHVlKTsKKyAgICByZXR1cm4gYWRvcHRXSyhyYXdSZXR1cm5WYWx1
ZSk7Cit9CisKK3N0YXRpYyBib29sIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAg
cmV0dXJuIGJvb2xlYW5WYWx1ZShwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVl
KG5hbWUsIHZhbHVlKSk7Cit9CisKK3N0YXRpYyBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIFdL
VHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgV0tUeXBlUmVmIHJhd1JldHVyblZhbHVl
ID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhwYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlLCAmcmF3UmV0dXJuVmFsdWUpOwor
ICAgIHJldHVybiBhZG9wdFdLKHJhd1JldHVyblZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKGNvbnN0IGNoYXIqIG5hbWUs
IFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOwor
fQorCitzdGF0aWMgdWludDY0X3QgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdV
SW50NjQoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAg
ICByZXR1cm4gdWludDY0VmFsdWUocG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRoUmV0dXJu
VmFsdWUobmFtZSwgdmFsdWUpKTsKK30KKworc3RhdGljIHVpbnQ2NF90IHBvc3RTeW5jaHJvbm91
c01lc3NhZ2VSZXR1cm5pbmdVSW50NjQoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4g
dWludDY0VmFsdWUocG9zdFN5bmNocm9ub3VzTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lKSk7
Cit9CisKK3N0YXRpYyB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShjb25zdCBjaGFyKiBuYW1lLCBi
b29sIHZhbHVlKQoreworICAgIGF1dG8mIGJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKTsKKyAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGJ1
bmRsZS5idW5kbGUoKSwgYnVuZGxlLnBhZ2VHcm91cCgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1
ZSk7Cit9CisKIGJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcFBpeGVscygpIGNvbnN0CiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0RHVtcFBpeGVscyIpKTsKLSAgICBXS1R5cGVSZWYg
cmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0
YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1
ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsK
KyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldER1
bXBQaXhlbHMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXREdW1wUGl4ZWxzKGJvb2wgZHVt
cFBpeGVscykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXREdW1wUGl4ZWxzIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShkdW1wUGl4ZWxzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNz
YWdlKCJTZXREdW1wUGl4ZWxzIiwgZHVtcFBpeGVscyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
ZHVtcEFzVGV4dChib29sIGR1bXBQaXhlbHMpCkBAIC0xMjIsMTggKzE5MCwxMiBAQCB2b2lkIFRl
c3RSdW5uZXI6OmR1bXBBc1RleHQoYm9vbCBkdW1wUGl4ZWxzKQogICAgIAogV2hhdFRvRHVtcCBU
ZXN0UnVubmVyOjp3aGF0VG9EdW1wKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJHZXRXaGF0VG9EdW1wIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsK
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEp
OwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS1VJbnQ2NEdldFR5cGVJ
RCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2hhdFRvRHVtcD4oV0tVSW50NjRHZXRWYWx1
ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2hhdFRvRHVtcD4ocG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ1VJbnQ2NCgiR2V0V2hhdFRvRHVtcCIpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRXaGF0VG9EdW1wKFdoYXRUb0R1bXAgd2hhdFRvRHVtcCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRXaGF0VG9EdW1wIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHdoYXRUb0R1bXApKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJT
ZXRXaGF0VG9EdW1wIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHdoYXRUb0R1bXApKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJv
b2wgcGVybWlzc2l2ZSkKQEAgLTE1OCwyNiArMjIwLDE5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6d2Fp
dFVudGlsRG93bmxvYWRGaW5pc2hlZCgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG9u
ZSgpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0
UnVubmluZygpKTsKIAogICAgIHNldFdhaXRVbnRpbERvbmUodHJ1ZSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0V2FpdFVudGlsRG9uZShib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldFdhaXRVbnRpbERvbmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRXYWl0VW50aWxEb25lIiwgdmFsdWUp
OwogfQogCiBib29sIFRlc3RSdW5uZXI6OnNob3VsZFdhaXRVbnRpbERvbmUoKSBjb25zdAogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRXYWl0VW50aWxEb25lIikpOwotICAgIFdLVHlw
ZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0
dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5H
ZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdl
dCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4o
IkdldFdhaXRVbnRpbERvbmUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkK
QEAgLTIxMCwxOCArMjY1LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6Zm9yY2VJbW1lZGlhdGVDb21w
bGV0aW9uKCkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJh
Y2tzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldER1bXBGcmFt
ZUxvYWRDYWxsYmFja3MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIsIHZhbHVlKTsK
IH0KIAogYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKTsK
LSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0
VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4g
V0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVy
bkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5p
bmdCb29sZWFuKCJHZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIik7CiB9CiAKIHVuc2lnbmVkIFRl
c3RSdW5uZXI6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29uc3QKQEAgLTIzMSwx
OCArMjgwLDE0IEBAIHVuc2lnbmVkIFRlc3RSdW5uZXI6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0
ZWJvYXJkKCkgY29uc3QKIAogdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5n
UmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc291cmNlV0sgPSB0b1dLKHNvdXJjZSk7Ci0KLSAgICBXS0J1
bmRsZVBhZ2VBZGRVc2VyU2NyaXB0KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgc291cmNlV0suZ2V0KCksCisgICAgV0tCdW5kbGVQYWdlQWRkVXNlclNjcmlwdChw
YWdlKCksIHRvV0soc291cmNlKS5nZXQoKSwKICAgICAgICAgKHJ1bkF0U3RhcnQgPyBrV0tJbmpl
Y3RBdERvY3VtZW50U3RhcnQgOiBrV0tJbmplY3RBdERvY3VtZW50RW5kKSwKICAgICAgICAgKGFs
bEZyYW1lcyA/IGtXS0luamVjdEluQWxsRnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBz
b3VyY2UsIGJvb2wgYWxsRnJhbWVzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
b3VyY2VXSyA9IHRvV0soc291cmNlKTsKLQotICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTdHlsZVNo
ZWV0KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc291cmNlV0su
Z2V0KCksCisgICAgV0tCdW5kbGVQYWdlQWRkVXNlclN0eWxlU2hlZXQocGFnZSgpLCB0b1dLKHNv
dXJjZSkuZ2V0KCksCiAgICAgICAgIChhbGxGcmFtZXMgPyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6
IGtXS0luamVjdEluVG9wRnJhbWVPbmx5KSk7CiB9CiAKQEAgLTI1MywyOSArMjk4LDE3IEBAIHZv
aWQgVGVzdFJ1bm5lcjo6a2VlcFdlYkhpc3RvcnkoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmV4ZWND
b21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHNob3dVSSwgSlNTdHJpbmdSZWYg
dmFsdWUpCiB7Ci0gICAgV0tCdW5kbGVQYWdlRXhlY3V0ZUVkaXRpbmdDb21tYW5kKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9X
Syh2YWx1ZSkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChw
YWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKIH0KIAogc3RhdGlj
IE9wdGlvbmFsPFdLRmluZE9wdGlvbnM+IGZpbmRPcHRpb25zRnJvbUFycmF5KEpTVmFsdWVSZWYg
b3B0aW9uc0FycmF5QXNWYWx1ZSkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7
Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENv
bnRleHQobWFpbkZyYW1lKTsKLSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNPYmplY3RSZWYg
b3B0aW9uc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9wdGlvbnNBcnJheUFzVmFs
dWUsIDApOwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAg
ICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7
CisgICAgYXV0byBvcHRpb25zQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3B0aW9u
c0FycmF5QXNWYWx1ZSwgbnVsbHB0cik7CisgICAgYXV0byBsZW5ndGggPSBhcnJheUxlbmd0aChj
b250ZXh0LCBvcHRpb25zQXJyYXkpOwogICAgIFdLRmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7Ci0g
ICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0
eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1Zh
bHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgYXV0byBvcHRpb25OYW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCB2YWx1ZSwgMCkpOwotCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CisgICAgICAgIGF1dG8gb3B0aW9uTmFtZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIEpT
T2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCkpOwog
ICAgICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgp
LCAiQ2FzZUluc2Vuc2l0aXZlIikpCiAgICAgICAgICAgICBvcHRpb25zIHw9IGtXS0ZpbmRPcHRp
b25zQ2FzZUluc2Vuc2l0aXZlOwogICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJBdFdvcmRTdGFydHMiKSkKQEAgLTI5Niw3ICsz
MjksNyBAQCBzdGF0aWMgT3B0aW9uYWw8V0tGaW5kT3B0aW9ucz4gZmluZE9wdGlvbnNGcm9tQXJy
YXkoSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbAogYm9vbCBUZXN0UnVubmVyOjpmaW5kU3Ry
aW5nKEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQog
ewogICAgIGlmIChhdXRvIG9wdGlvbnMgPSBmaW5kT3B0aW9uc0Zyb21BcnJheShvcHRpb25zQXJy
YXlBc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCks
ICpvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcocGFnZSgp
LCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0K
QEAgLTMwNCwyOCArMzM3LDIzIEBAIGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU1N0cmlu
Z1JlZiB0YXJnZXQsIEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHZvaWQgVGVzdFJ1
bm5lcjo6ZmluZFN0cmluZ01hdGNoZXNJblBhZ2UoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVl
UmVmIG9wdGlvbnNBcnJheUFzVmFsdWUpCiB7CiAgICAgaWYgKGF1dG8gb3B0aW9ucyA9IGZpbmRP
cHRpb25zRnJvbUFycmF5KG9wdGlvbnNBcnJheUFzVmFsdWUpKQotICAgICAgICByZXR1cm4gV0tC
dW5kbGVQYWdlRmluZFN0cmluZ01hdGNoZXMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKKyAgICAgICAgV0tC
dW5kbGVQYWdlRmluZFN0cmluZ01hdGNoZXMocGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpv
cHRpb25zKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZXBsYWNlRmluZE1hdGNoZXNBdEluZGlj
ZXMoSlNWYWx1ZVJlZiBtYXRjaEluZGljZXNBc1ZhbHVlLCBKU1N0cmluZ1JlZiByZXBsYWNlbWVu
dFRleHQsIGJvb2wgc2VsZWN0aW9uT25seSkKIHsKICAgICBhdXRvJiBidW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgYXV0byBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VH
ZXRNYWluRnJhbWUoYnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBhdXRvIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICBhdXRvIGxl
bmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJs
ZW5ndGgiKSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogICAgIGF1dG8g
bWF0Y2hJbmRpY2VzT2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG1hdGNoSW5kaWNl
c0FzVmFsdWUsIDApOwotICAgIGF1dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
KGNvbnRleHQsIG1hdGNoSW5kaWNlc09iamVjdCwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAw
KTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAg
ICAgIHJldHVybjsKKyAgICBhdXRvIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG1hdGNo
SW5kaWNlc09iamVjdCk7CiAKICAgICBhdXRvIGluZGljZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFy
cmF5Q3JlYXRlKCkpOwotICAgIGF1dG8gbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBtYXRjaEluZGljZXNPYmplY3QsIGksIDApOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2Jq
ZWN0LCBpLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwg
dmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBpbmRleCA9IGFk
b3B0V0soV0tVSW50NjRDcmVhdGUoc3RkOjpyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
dmFsdWUsIG51bGxwdHIpKSkpOworICAgICAgICBhdXRvIGluZGV4ID0gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKSk7CiAgICAg
ICAgIFdLQXJyYXlBcHBlbmRJdGVtKGluZGljZXMuZ2V0KCksIGluZGV4LmdldCgpKTsKICAgICB9
CiAgICAgV0tCdW5kbGVQYWdlUmVwbGFjZVN0cmluZ01hdGNoZXMoYnVuZGxlLnBhZ2UoKS0+cGFn
ZSgpLCBpbmRpY2VzLmdldCgpLCB0b1dLKHJlcGxhY2VtZW50VGV4dCkuZ2V0KCksIHNlbGVjdGlv
bk9ubHkpOwpAQCAtMzM0LDExICszNjIsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnJlcGxhY2VGaW5k
TWF0Y2hlc0F0SW5kaWNlcyhKU1ZhbHVlUmVmIG1hdGNoSW5kaWNlc0FzVmFsdWUsIEpTUwogdm9p
ZCBUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcygpCiB7CiAgICAgV0tCdW5kbGVDbGVhckFs
bERhdGFiYXNlcyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcyIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUodHJ1ZSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJEZWxl
dGVBbGxJbmRleGVkRGF0YWJhc2VzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
RGF0YWJhc2VRdW90YSh1aW50NjRfdCBxdW90YSkKQEAgLTM0OCwyOSArMzcyLDI3IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSh1aW50NjRfdCBxdW90YSkKIAogdm9pZCBUZXN0
UnVubmVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
eW5jTG9jYWxTdG9yYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKCJTeW5jTG9jYWxTdG9yYWdlIiwgdHJ1ZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCiB7Ci0gICAgV0tCdW5kbGVQ
YWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlKHBhZ2Uo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2lu
KEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9u
Q2FjaGVGb3JPcmlnaW4oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCB0b1dLKG9yaWdpbikuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZUNsZWFyQXBwbGljYXRpb25D
YWNoZUZvck9yaWdpbihwYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1aW50NjRfdCBzaXplKQogewotICAgIFdL
QnVuZGxlUGFnZVNldEFwcENhY2hlTWF4aW11bVNpemUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBzaXplKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRBcHBDYWNoZU1h
eGltdW1TaXplKHBhZ2UoKSwgc2l6ZSk7CiB9CiAKIGxvbmcgbG9uZyBUZXN0UnVubmVyOjphcHBs
aWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAg
ICByZXR1cm4gV0tCdW5kbGVQYWdlR2V0QXBwQ2FjaGVVc2FnZUZvck9yaWdpbihJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIFdLQnVuZGxlUGFnZUdldEFwcENhY2hlVXNhZ2VGb3JPcmlnaW4ocGFnZSgpLCB0
b1dLKG9yaWdpbikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc2FsbG93SW5jcmVh
c2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKQpAQCAtMzgxLDE1OCArNDAzLDEwOCBAQCB2b2lk
IFRlc3RSdW5uZXI6OmRpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKQog
c3RhdGljIGlubGluZSBKU1ZhbHVlUmVmIHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29u
dGV4dCwgV0tBcnJheVJlZiBzdHJpbmdzKQogewogICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IFdL
QXJyYXlHZXRTaXplKHN0cmluZ3MpOwotCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpT
T2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwotICAgIEpTT2JqZWN0UmVmIGFycmF5
T2JqID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKKyAgICBhdXRv
IGFycmF5ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgbnVsbHB0cik7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IHN0cmluZ1JlZiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5k
ZXgoc3RyaW5ncywgaSkpOwotICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5n
SlMgPSB0b0pTKHN0cmluZ1JlZik7Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIGFycmF5T2JqLCBpLCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdK
Uy5nZXQoKSksIDApOworICAgICAgICBhdXRvIHN0cmluZ1JlZiA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoc3RyaW5ncywgaSkpOworICAgICAgICBKU09i
amVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgSlNWYWx1ZU1ha2VTdHJp
bmcoY29udGV4dCwgdG9KUyhzdHJpbmdSZWYpLmdldCgpKSwgbnVsbHB0cik7CiAgICAgfQotCi0g
ICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgIHJldHVybiBhcnJheTsKIH0KIAogSlNWYWx1ZVJl
ZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoKQogewotICAgIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gb3JpZ2lucyA9IGFkb3B0V0soV0tC
dW5kbGVQYWdlQ29weU9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShwYWdlKSk7Ci0KLSAgICBX
S0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdl
KTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0
Q29udGV4dChtYWluRnJhbWUpOwotCi0gICAgcmV0dXJuIHN0cmluZ0FycmF5VG9KUyhjb250ZXh0
LCBvcmlnaW5zLmdldCgpKTsKKyAgICByZXR1cm4gc3RyaW5nQXJyYXlUb0pTKG1haW5KU0NvbnRl
eHQoKSwgYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hl
KHBhZ2UoKSkpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVk
KEpTU3RyaW5nUmVmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0Nv
bW1hbmRFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
dG9XSyhuYW1lKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1h
bmRFbmFibGVkKHBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0Q2FuT3BlbldpbmRvd3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRD
YW5PcGVuV2luZG93cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodHJ1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIlNldENhbk9wZW5XaW5kb3dzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3Rl
ZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJy
aWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBp
bmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6
Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0WFNTQXVkaXRvckVuYWJsZWQiLCBlbmFibGVkKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRNZWRpYURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0TWVkaWFEZXZpY2VzRW5hYmxlZCIpKTsKLSAg
ICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAg
ICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVu
ZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFi
bGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0TWVkaWFEZXZpY2VzRW5h
YmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdlYlJUQ01ETlNJQ0VD
YW5kaWRhdGVzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktp
dFdlYlJUQ01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRl
Qm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmpl
Y3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92
ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkIiwg
ZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tVXNlckFnZW50KEpTU3Ry
aW5nUmVmIHVzZXJBZ2VudCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDdXN0b21V
c2VyQWdlbnQiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHRvV0sodXNl
ckFnZW50KS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0
Q3VzdG9tVXNlckFnZW50IiwgdG9XSyh1c2VyQWdlbnQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIldlYktpdFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkIikpOwotICAgIGF1dG8m
IGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVu
ZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVu
ZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOwor
ICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
a2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0TW9kZXJu
TWVkaWFDb250cm9sc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJl
bmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUu
cGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZl
cmVuY2UoIldlYktpdE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2ViR0wyRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIldlYktpdFdlYkdMMkVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRC
dW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlk
ZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5q
ZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpv
dmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkdMMkVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQoYm9vbCBlbmFibGVk
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQiKSk7
Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7
Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3Rl
ZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwg
ZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdyaXRhYmxlU3Ry
ZWFtQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRyYW5z
Zm9ybVN0cmVhbUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJX
ZWJLaXRUcmFuc2Zvcm1TdHJlYW1BUElFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVu
ZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVC
b29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVj
dGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3Zl
cnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRUcmFuc2Zvcm1TdHJlYW1BUElFbmFibGVkIiwgZW5hYmxl
ZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxl
ZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFJlYWRhYmxlQnl0ZVN0
cmVhbUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9y
VGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdy
b3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2Uo
IldlYktpdFJlYWRhYmxlQnl0ZVN0cmVhbUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQiKSk7Ci0g
ICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0g
ICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1
bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5h
YmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEVuY3J5cHRlZE1lZGlh
QVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBpY3R1cmVJ
blBpY3R1cmVBUElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2Vi
S2l0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJv
b2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0
ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVy
cmlkZVByZWZlcmVuY2UoIldlYktpdFBpY3R1cmVJblBpY3R1cmVBUElFbmFibGVkIiwgZW5hYmxl
ZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQoYm9vbCBl
bmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRHZW5lcmljQ3VlQVBJRW5hYmxlZCIp
KTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVj
dGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgp
LCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0R2VuZXJpY0N1
ZUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZShib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoZW5hYmxlZCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVj
dGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRBbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZShlbmFibGVkKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiU2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlv
bihib29sIHNob3VsZFN3YXApCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91
bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
c2hvdWxkU3dhcCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlKCJTZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIsIHNo
b3VsZFN3YXApOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1bHRT
ZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sIHNob3VsZFN3YXApCiB7Ci0gICAgYXV0byYgaW5q
ZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRp
b24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHNob3VsZFN3YXApKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5l
eHROYXZpZ2F0aW9uIiwgc2hvdWxkU3dhcCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxs
b3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQpAQCAtNTU1LDkgKzUy
Nyw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxz
UXVpcmsoYm9vbCBuZWVkc1F1aXJrKQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5z
RW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFBsdWdpbnNF
bmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5u
ZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBr
ZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRQ
bHVnaW5zRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEphdmFT
Y3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQpAQCAtNTkxLDggKzU2MSw3IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzQWxsb3dMaXN0RW50cnkoSlNTdHJp
bmdSZWYgc291cmNlT3JpZ2luLCBKU1N0CiBib29sIFRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2li
bGUoaW50IHBhZ2VJbmRleCkKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdL
QnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0g
ICAgcmV0dXJuIFdLQnVuZGxlSXNQYWdlQm94VmlzaWJsZShpbmplY3RlZEJ1bmRsZS5idW5kbGUo
KSwgbWFpbkZyYW1lLCBwYWdlSW5kZXgpOworICAgIHJldHVybiBXS0J1bmRsZUlzUGFnZUJveFZp
c2libGUoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIG1haW5GcmFtZSgpLCBwYWdlSW5kZXgpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNWYWx1ZVJlZiBlbGVtZW50LCBKU1N0cmluZ1JlZiB2YWx1ZSkKQEAgLTYwMCwxNiArNTY5
LDE0IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyCiAgICAgaWYgKCFlbGVtZW50IHx8ICFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdL
UmV0YWluUHRyPFdLQnVuZGxlTm9kZUhhbmRsZVJlZj4gbm9kZUhhbmRsZSA9IGFkb3B0V0soV0tC
dW5kbGVOb2RlSGFuZGxlQ3JlYXRlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGVs
ZW1lbnQpKSk7Ci0gICAgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFZhbHVl
Rm9yVXNlcihub2RlSGFuZGxlLmdldCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CisgICAgV0tCdW5k
bGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNlcihhZG9wdFdLKFdLQnVu
ZGxlTm9kZUhhbmRsZUNyZWF0ZShjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihlbGVt
ZW50KSkpLmdldCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0QXVkaW9SZXN1bHQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZGF0YSkKIHsK
ICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsK
ICAgICAvLyBGSVhNRSAoMTIzMDU4KTogVXNlIGEgSlNDIEFQSSB0byBnZXQgYnVmZmVyIGNvbnRl
bnRzIG9uY2Ugc3VjaCBpcyBleHBvc2VkLgotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYXVk
aW9EYXRhID0gYWRvcHRXSyhXS0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5KGluamVj
dGVkQnVuZGxlLmJ1bmRsZSgpLCBjb250ZXh0LCBkYXRhKSk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUu
c2V0QXVkaW9SZXN1bHQoYXVkaW9EYXRhLmdldCgpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5zZXRB
dWRpb1Jlc3VsdChhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoaW5q
ZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKS5nZXQoKSk7CiAgICAgc2V0V2hh
dFRvRHVtcChXaGF0VG9EdW1wOjpBdWRpbyk7CiAgICAgc2V0RHVtcFBpeGVscyhmYWxzZSk7CiB9
CkBAIC02MjEsMzMgKzU4OCwzMCBAQCB1bnNpZ25lZCBUZXN0UnVubmVyOjp3aW5kb3dDb3VudCgp
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQogewotICAgIFdLQnVu
ZGxlQ2xlYXJIaXN0b3J5Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlQ2xlYXJIaXN0b3J5Rm9yVGVzdGluZyhwYWdlKCkp
OwogfQogCi0vLyBPYmplY3QgQ3JlYXRpb24KLQotdm9pZCBUZXN0UnVubmVyOjptYWtlV2luZG93
T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgVGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dP
YmplY3QsICJ0ZXN0UnVubmVyIiwgdGhpcywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9i
YWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGVzdFJ1bm5lciIsIHRoaXMpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IoKQogewotICAgIFdLQnVuZGxlSW5zcGVjdG9y
U2hvdyhXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JTaG93KFdLQnVuZGxlUGFn
ZUdldEluc3BlY3RvcihwYWdlKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYklu
c3BlY3RvcigpCiB7Ci0gICAgV0tCdW5kbGVJbnNwZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJ
bnNwZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7Cisg
ICAgV0tCdW5kbGVJbnNwZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgp
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3RvcihKU1N0cmlu
Z1JlZiBzY3JpcHQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0g
dG9XSyhzY3JpcHQpOwotICAgIFdLQnVuZGxlSW5zcGVjdG9yRXZhbHVhdGVTY3JpcHRGb3JUZXN0
KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCkpLCBzY3JpcHRXSy5nZXQoKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JFdmFs
dWF0ZVNjcmlwdEZvclRlc3QoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSksIHRvV0so
c2NyaXB0KS5nZXQoKSk7CiB9CiAKLXR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBXS1Jl
dGFpblB0cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVmPiA+IFdvcmxkTWFwOwordXNpbmcgV29ybGRN
YXAgPSBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29y
bGRSZWY+PjsKIHN0YXRpYyBXb3JsZE1hcCYgd29ybGRNYXAoKQogewogICAgIHN0YXRpYyBXb3Js
ZE1hcCYgbWFwID0gKm5ldyBXb3JsZE1hcDsKQEAgLTY1NiwxMiArNjIwLDExIEBAIHN0YXRpYyBX
b3JsZE1hcCYgd29ybGRNYXAoKQogCiB1bnNpZ25lZCBUZXN0UnVubmVyOjp3b3JsZElERm9yV29y
bGQoV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCkKIHsKLSAgICBXb3JsZE1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gd29ybGRNYXAoKS5lbmQoKTsKLSAgICBmb3IgKFdvcmxkTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGlmIChpdC0+dmFsdWUgPT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmtl
eTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB0aGUgYW50aS1wYXR0ZXJuIG9mIGl0ZXJhdGluZyBh
biBlbnRpcmUgbWFwLiBUeXBpY2FsbHkgd2UgdXNlIGEgcGFpciBvZiBtYXBzIG9yIGp1c3QgYSB2
ZWN0b3IgaW4gYSBjYXNlIGxpa2UgdGhpcy4KKyAgICBmb3IgKGF1dG8mIG1hcEVudHJ5IDogd29y
bGRNYXAoKSkgeworICAgICAgICBpZiAobWFwRW50cnkudmFsdWUgPT0gd29ybGQpCisgICAgICAg
ICAgICByZXR1cm4gbWFwRW50cnkua2V5OwogICAgIH0KLQogICAgIHJldHVybiAwOwogfQogCkBA
IC02ODEsNyArNjQ0LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZChKU0NvbnRleHRSZWYgY29udGV4dCwgdW5zaWduZWQgd28KIAogICAgIFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZUZyYW1lRm9ySmF2YVNjcmlwdENvbnRleHQoY29udGV4
dCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICAg
ICAgZnJhbWUgPSBtYWluRnJhbWUoKTsKIAogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29y
bGQuZ2V0KCkpOwogICAgIEpTRXZhbHVhdGVTY3JpcHQoanNDb250ZXh0LCBzY3JpcHQsIDAsIDAs
IDAsIDApOyAKQEAgLTY5Niw4ICs2NTksNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFBPU0lYTG9j
YWxlKEpTU3RyaW5nUmVmIGxvY2FsZSkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0
aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbikKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCkpOwotICAgIHJldHVybiBXS0J1bmRsZUZyYW1lU2V0VGV4dERpcmVj
dGlvbihtYWluRnJhbWUsIHRvV0soZGlyZWN0aW9uKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVu
ZGxlRnJhbWVTZXRUZXh0RGlyZWN0aW9uKG1haW5GcmFtZSgpLCB0b1dLKGRpcmVjdGlvbikuZ2V0
KCkpOwogfQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJI
YW5kbGluZ0JlZm9yZVVubG9hZChib29sIHNob3VsZFN0YXlPblBhZ2UpCkBAIC03MDcsMTcgKzY2
OSwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5n
QmVmb3JlVW5sb2FkKGJvb2wgc2hvdWxkU3RheU9uUAogCiBib29sIFRlc3RSdW5uZXI6OmRpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpIGNvbnN0CiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlz
aW9uYWxOYXZpZ2F0aW9uIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBu
dWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEp
ID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUo
YWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiRGlk
UmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIik7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6Y2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25h
bE5hdmlnYXRpb24oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRGlkUmVjZWl2
ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJDbGVhckRpZFJlY2VpdmVTZXJ2
ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFBhZ2VWaXNpYmlsaXR5KEpTU3RyaW5nUmVmIHN0YXRlKQpAQCAtNzMwLDcgKzY4Nyw3
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnNldEhpZGRlbihmYWxzZSk7CiB9CiAKLXR5cGVkZWYgV1RGOjpI
YXNoTWFwPHVuc2lnbmVkLCBKU1ZhbHVlUmVmPiBDYWxsYmFja01hcDsKK3VzaW5nIENhbGxiYWNr
TWFwID0gV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBKU09iamVjdFJlZj47CiBzdGF0aWMgQ2FsbGJh
Y2tNYXAmIGNhbGxiYWNrTWFwKCkKIHsKICAgICBzdGF0aWMgQ2FsbGJhY2tNYXAmIG1hcCA9ICpu
ZXcgQ2FsbGJhY2tNYXA7CkBAIC03ODMsMzggKzc0MCwzMiBAQCBzdGF0aWMgdm9pZCBjYWNoZVRl
c3RSdW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsK
ICAgICBpZiAoIWNhbGxiYWNrKQogICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGNvbnRleHQg
PSBtYWluSlNDb250ZXh0KCk7CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2Fs
bGJhY2spKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGNhbGxiYWNrTWFwKCkuY29udGFpbnMo
aW5kZXgpKSB7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0
KG1ha2VTdHJpbmcoIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBj
YWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICIsIGluZGV4LCAiKVxuXG4iKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdL
QnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwg
Y2FsbGJhY2spOwotICAgIGNhbGxiYWNrTWFwKCkuYWRkKGluZGV4LCBjYWxsYmFjayk7CisgICAg
Y2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGNhbGxiYWNr
KSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5k
ZXgsIHNpemVfdCBhcmd1bWVudENvdW50ID0gMCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSA9IG51bGxwdHIpCiB7Ci0gICAgaWYgKCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkK
KyAgICBhdXRvIGNhbGxiYWNrID0gY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KTsKKyAgICBpZiAo
IWNhbGxiYWNrKQogICAgICAgICByZXR1cm47Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIEpTT2JqZWN0UmVmIGNhbGxi
YWNrID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGNhbGxiYWNrTWFwKCkudGFrZShpbmRleCks
IDApOworICAgIGF1dG8gY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKICAgICBKU09iamVjdENh
bGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3Qo
Y29udGV4dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgMCk7CiAgICAgSlNWYWx1ZVVucHJv
dGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJUZXN0
UnVubmVyQ2FsbGJhY2tzKCkKIHsKLSAgICBmb3IgKGF1dG8mIGl0ZXIgOiBjYWxsYmFja01hcCgp
KSB7Ci0gICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0g
ICAgICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0KG1haW5GcmFtZSk7Ci0gICAgICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHQsIGl0ZXIudmFsdWUsIDApOwotICAgICAgICBKU1ZhbHVlVW5wcm90
ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKLSAgICB9Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWlu
SlNDb250ZXh0KCk7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNhbGxiYWNrTWFwKCkudmFsdWVz
KCkpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIHZhbHVlLCBudWxscHRyKSk7CiAgICAgY2FsbGJhY2tNYXAoKS5jbGVhcigpOwogfQog
CkBAIC04OTQsMjAgKzg0NSwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5j
ZShKU1N0cmluZ1JlZiBwcmVmZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSkKIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWNjZXB0KQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldEFsd2F5c0FjY2VwdENvb2tpZXMiKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
YWNjZXB0KSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldEFsd2F5
c0FjY2VwdENvb2tpZXMiLCBhY2NlcHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE9ubHlB
Y2NlcHRGaXJzdFBhcnR5Q29va2llcyhib29sIGFjY2VwdCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMiKSk7Ci0gICAgCi0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKGFjY2VwdCkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U2V0T25seUFjY2VwdEZpcnN0UGFydHlDb29raWVzIiwgYWNjZXB0KTsKIH0KIAogZG91YmxlIFRl
c3RSdW5uZXI6OnByZWNpc2VUaW1lKCkKQEAgLTkyNCwxNSArODY3LDE1IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3Vz
ZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGVuYWJsZWQ7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gZW1wdHlVcmwgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIi
KSk7Ci0gICAgV0tTdHJpbmdSZWYgbG9jYXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVl
dExvY2F0aW9uLmdldCgpIDogZW1wdHlVcmwuZ2V0KCk7CisgICAgYXV0byBlbXB0eVN0cmluZyA9
IHRvV0soIiIpOworICAgIGF1dG8gbG9jYXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVl
dExvY2F0aW9uLmdldCgpIDogZW1wdHlTdHJpbmcuZ2V0KCk7CiAgICAgYXV0byYgaW5qZWN0ZWRC
dW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgV0tCdW5kbGVTZXRVc2Vy
U3R5bGVTaGVldExvY2F0aW9uKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRs
ZS5wYWdlR3JvdXAoKSwgbG9jYXRpb24pOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgbG9jYXRpb24pCiB7Ci0gICAgbV91c2VyU3R5
bGVTaGVldExvY2F0aW9uID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhsb2Nh
dGlvbikpOworICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IHRvV0sobG9jYXRpb24pOwog
CiAgICAgaWYgKG1fdXNlclN0eWxlU2hlZXRFbmFibGVkKQogICAgICAgICBzZXRVc2VyU3R5bGVT
aGVldEVuYWJsZWQodHJ1ZSk7CkBAIC05NDYsOCArODg5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpz
ZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGVuYWJsZWQpCiB7Ci0gICAg
YXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAg
V0tCdW5kbGVTZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoaW5qZWN0ZWRCdW5kbGUuYnVu
ZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBlbmFibGVkKTsKKyAgICBXS0J1
bmRsZVNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIHBhZ2UoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U2VyaWFsaXplSFRUUExvYWRzKCkKQEAgLTk3MywzNiArOTE1LDI4IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
CiB2b2lkIFRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmlu
Z1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0g
dG9XSyhvcmlnaW4pOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihp
bmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG9y
aWdpbldLLmdldCgpLCB0cnVlKTsKKyAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCksIHRvV0so
b3JpZ2luKS5nZXQoKSwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlm
aWNhdGlvblBlcm1pc3Npb24oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBhdXRvJiBpbmplY3Rl
ZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVNldFdl
Yk5vdGlmaWNhdGlvblBlcm1pc3Npb24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVk
QnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBvcmlnaW5XSy5nZXQoKSwgZmFsc2UpOworICAgIFdLQnVu
ZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIHBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpLCBmYWxzZSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKQogewot
ICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwot
ICAgIFdLQnVuZGxlUmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoaW5qZWN0ZWRC
dW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1
bmRsZVJlbW92ZUFsbFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25zKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgcGFnZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzaW11
bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uKQogewogICAg
IGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAg
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGlu
amVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9
IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHVpbnQ2
NF90IG5vdGlmaWNhdGlvbklEID0gV0tCdW5kbGVHZXRXZWJOb3RpZmljYXRpb25JRChpbmplY3Rl
ZEJ1bmRsZS5idW5kbGUoKSwgY29udGV4dCwgbm90aWZpY2F0aW9uKTsKLSAgICBpbmplY3RlZEJ1
bmRsZS5wb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7Cisg
ICAgaW5qZWN0ZWRCdW5kbGUucG9zdFNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soV0tCdW5k
bGVHZXRXZWJOb3RpZmljYXRpb25JRChpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkpTQ29u
dGV4dCgpLCBub3RpZmljYXRpb24pKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2Nh
dGlvblBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3Vs
ZCBiZSBkb25lIGJ5IGZyYW1lLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5
IGZyYW1lLgogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBl
cm1pc3Npb24oZW5hYmxlZCk7CiB9CiAKQEAgLTEwMTEsMTAyICs5NDUsNTEgQEAgYm9vbCBUZXN0
UnVubmVyOjppc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKQogICAgIHJldHVybiBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7CiB9CiAK
LXZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0
dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIEpTVmFsdWVSZWYganNBbHRp
dHVkZSwgSlNWYWx1ZVJlZiBqc0FsdGl0dWRlQWNjdXJhY3ksIEpTVmFsdWVSZWYganNIZWFkaW5n
LCBKU1ZhbHVlUmVmIGpzU3BlZWQsIEpTVmFsdWVSZWYganNGbG9vckxldmVsKQordm9pZCBUZXN0
UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJs
ZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwg
T3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRp
bmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkK
IHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLQot
ICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZSA9
IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzQWx0aXR1ZGUpKSB7
Ci0gICAgICAgIHByb3ZpZGVzQWx0aXR1ZGUgPSB0cnVlOwotICAgICAgICBhbHRpdHVkZSA9IEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBqc0FsdGl0dWRlLCAwKTsKLSAgICB9Ci0KLSAgICBib29s
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZUFj
Y3VyYWN5ID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNBbHRp
dHVkZUFjY3VyYWN5KSkgewotICAgICAgICBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kgPSB0cnVl
OwotICAgICAgICBhbHRpdHVkZUFjY3VyYWN5ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpz
QWx0aXR1ZGVBY2N1cmFjeSwgMCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc0hlYWRpbmcg
PSBmYWxzZTsKLSAgICBkb3VibGUgaGVhZGluZyA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5k
ZWZpbmVkKGNvbnRleHQsIGpzSGVhZGluZykpIHsKLSAgICAgICAgcHJvdmlkZXNIZWFkaW5nID0g
dHJ1ZTsKLSAgICAgICAgaGVhZGluZyA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc0hlYWRp
bmcsIDApOwotICAgIH0KLQotICAgIGJvb2wgcHJvdmlkZXNTcGVlZCA9IGZhbHNlOwotICAgIGRv
dWJsZSBzcGVlZCA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpz
U3BlZWQpKSB7Ci0gICAgICAgIHByb3ZpZGVzU3BlZWQgPSB0cnVlOwotICAgICAgICBzcGVlZCA9
IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc1NwZWVkLCAwKTsKLSAgICB9Ci0KLSAgICBib29s
IHByb3ZpZGVzRmxvb3JMZXZlbCA9IGZhbHNlOwotICAgIGRvdWJsZSBmbG9vckxldmVsID0gMC47
Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNGbG9vckxldmVsKSkgewot
ICAgICAgICBwcm92aWRlc0Zsb29yTGV2ZWwgPSB0cnVlOwotICAgICAgICBmbG9vckxldmVsID0g
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzRmxvb3JMZXZlbCwgMCk7Ci0gICAgfQotCi0gICAg
aW5qZWN0ZWRCdW5kbGUuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdp
dHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0
dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywg
cHJvdmlkZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7Cisg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
KGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZSwgYWx0aXR1ZGVBY2N1cmFj
eSwgaGVhZGluZywgc3BlZWQsIGZsb29yTGV2ZWwpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNz
YWdlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlV0sgPSB0b1dLKG1l
c3NhZ2UpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IobWVzc2FnZVdLLmdldCgpKTsKKyAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJs
ZUVycm9yKHRvV0sobWVzc2FnZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVz
ZXJNZWRpYVBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNo
b3VsZCBiZSBkb25lIGJ5IGZyYW1lLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25l
IGJ5IGZyYW1lLgogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQ
ZXJtaXNzaW9uKGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlh
UGVybWlzc2lvbigpCiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJh
bWUuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbigpOwogfQog
CiBib29sIFRlc3RSdW5uZXI6OmlzRG9pbmdNZWRpYUNhcHR1cmUoKSBjb25zdAogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIklzRG9pbmdNZWRpYUNhcHR1cmUiKSk7Ci0gICAgV0tUeXBlUmVm
IHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQo
V0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJl
dHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
cmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKCJJc0RvaW5nTWVkaWFDYXB0dXJlIik7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4oYm9vbCBw
ZXJtaXNzaW9uLCBKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdpbikK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9XSyhwYXJl
bnRPcmlnaW4pOwotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQ
ZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbihwZXJtaXNzaW9uLCBvcmlnaW5XSy5nZXQoKSwg
cGFyZW50T3JpZ2luV0suZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5z
ZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbihwZXJtaXNzaW9uLCB0b1dL
KG9yaWdpbikuZ2V0KCksIHRvV0socGFyZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVk
IFRlc3RSdW5uZXI6OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oSlNT
dHJpbmdSZWYgb3JpZ2luLCBKU1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pIGNvbnN0CiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5XSyA9IHRvV0socGFyZW50T3JpZ2lu
KTsKLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4ob3JpZ2luV0suZ2V0KCksIHBhcmVudE9yaWdpbldL
LmdldCgpKTsKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4odG9XSyhvcmlnaW4pLmdldCgpLCB0b1dL
KHBhcmVudE9yaWdpbikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4sIEpT
U3RyaW5nUmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
b3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBh
cmVudE9yaWdpbldLID0gdG9XSyhwYXJlbnRPcmlnaW4pOwotICAgIEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5yZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4o
b3JpZ2luV0suZ2V0KCksIHBhcmVudE9yaWdpbldLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3Jp
Z2luKHRvV0sob3JpZ2luKS5nZXQoKSwgdG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsKIH0KIAog
Ym9vbCBUZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQogewotICAgIFdLQnVu
ZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxl
RnJhbWVDYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcobWFpbkZyYW1lKTsKKyAgICByZXR1cm4gV0tC
dW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhtYWluRnJhbWUoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6cXVldWVCYWNrTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJCYWNrd2Fy
ZCkKQEAgLTExMjIsMjAgKzEwMDUsMTcgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUZvcndhcmRO
YXZpZ2F0aW9uKHVuc2lnbmVkIGhvd0ZhckZvcndhcmQpCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVl
TG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCwgYm9vbCBzaG91bGRPcGVu
RXh0ZXJuYWxVUkxzKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBiYXNlVVJMV0sgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmpl
Y3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSkpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4g
dXJsV0sgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTFdLLmdldCgpLCB0
b1dURlN0cmluZyh0b1dLKHVybCkpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdXJsU3RyaW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxXSy5n
ZXQoKSkpOwotCisgICAgYXV0byBiYXNlVVJMV0sgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5
VVJMKG1haW5GcmFtZSgpKSk7CisgICAgYXV0byB1cmxXSyA9IGFkb3B0V0soV0tVUkxDcmVhdGVX
aXRoQmFzZVVSTChiYXNlVVJMV0suZ2V0KCksIHRvV1RGU3RyaW5nKHVybCkudXRmOCgpLmRhdGEo
KSkpOworICAgIGF1dG8gdXJsU3RyaW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxX
Sy5nZXQoKSkpOwogICAgIGluamVjdGVkQnVuZGxlLnF1ZXVlTG9hZCh1cmxTdHJpbmdXSy5nZXQo
KSwgdG9XSyh0YXJnZXQpLmdldCgpLCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpT
U3RyaW5nUmVmIGJhc2VVUkwsIEpTU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjb250ZW50V0sgPSB0b1dLKGNvbnRlbnQpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBiYXNlVVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJM
KSA6IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPigpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB1bnJlYWNoYWJsZVVSTFdLID0gdW5yZWFjaGFibGVVUkwgPyB0b1dLKHVucmVhY2hhYmxl
VVJMKSA6IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPigpOwotCi0gICAgSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29udGVudFdLLmdldCgpLCBiYXNlVVJM
V0suZ2V0KCksIHVucmVhY2hhYmxlVVJMV0suZ2V0KCkpOworICAgIGF1dG8gYmFzZVVSTFdLID0g
YmFzZVVSTCA/IHRvV0soYmFzZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKKyAg
ICBhdXRvIHVucmVhY2hhYmxlVVJMV0sgPSB1bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5yZWFjaGFi
bGVVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnF1ZXVlTG9hZEhUTUxTdHJpbmcodG9XSyhjb250ZW50KS5nZXQoKSwgYmFz
ZVVSTFdLLmdldCgpLCB1bnJlYWNoYWJsZVVSTFdLLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpxdWV1ZVJlbG9hZCgpCkBAIC0xMTQ1LDE2MyArMTAyNSwxMTkgQEAgdm9pZCBUZXN0UnVu
bmVyOjpxdWV1ZVJlbG9hZCgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0
KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2Ny
aXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1
ZXVlTG9hZGluZ1NjcmlwdChzY3JpcHRXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnF1ZXVlTG9hZGluZ1NjcmlwdCh0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQp
OwotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQo
c2NyaXB0V0suZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZU5v
bkxvYWRpbmdTY3JpcHQodG9XSyhzY3JpcHQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZXMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRSZWpl
Y3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0UmVqZWN0c1By
b3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwgdmFs
dWUpOwogfQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VzKGJvb2wgaGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcykKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShoYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiU2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIGhhbmRsZXNB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3Vs
ZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCB2YWx1ZSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIlNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2Ui
LCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxs
YmFja3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRM
b2dEb3dubG9hZENhbGxiYWNrcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJTZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyIsIHZhbHVlKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKEpTU3RyaW5nUmVmIHVzZXJu
YW1lKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEF1dGhlbnRpY2F0aW9uVXNlcm5h
bWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh1c2VybmFtZSkpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIlNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUiLCB0b1dLKHVzZXJuYW1lKS5nZXQoKSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25QYXNzd29yZChKU1N0cmluZ1Jl
ZiBwYXNzd29yZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBdXRoZW50aWNhdGlv
blBhc3N3b3JkIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcocGFzc3dvcmQpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJTZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIiwgdG9XSyhwYXNzd29yZCkuZ2V0
KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQoKSBj
b25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJs
ZWQiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1
cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJTZWN1cmVFdmVudElucHV0
SXNFbmFibGVkIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QmxvY2tBbGxQbHVnaW5zKGJv
b2wgc2hvdWxkQmxvY2spCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QmxvY2tBbGxQ
bHVnaW5zIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGRCbG9jaykpOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IlNldEJsb2NrQWxsUGx1Z2lucyIsIHNob3VsZEJsb2NrKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKEpTU3RyaW5nUmVmIG1vZGUpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0UGx1Z2luU3VwcG9ydGVkTW9kZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpT
U3RyaW5nKG1vZGUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRQbHVnaW5TdXBwb3J0ZWRNb2Rl
IiwgdG9XSyhtb2RlKS5nZXQoKSk7CiB9CiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6ZmFpbE5l
eHROZXdDb2RlQmxvY2soKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0Nv
ZGVCbG9jayhjb250ZXh0KTsKKyAgICByZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0NvZGVCbG9jayht
YWluSlNDb250ZXh0KCkpOwogfQogCi1KU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om51bWJlck9mREZH
Q29tcGlsZXMoSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbikKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6
bnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIGZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxl
RnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICBy
ZXR1cm4gSlNDOjpudW1iZXJPZkRGR0NvbXBpbGVzKGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKKyAg
ICByZXR1cm4gSlNDOjpudW1iZXJPZkRGR0NvbXBpbGVzKG1haW5KU0NvbnRleHQoKSwgZnVuY3Rp
b24pOwogfQogCi1KU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om5ldmVySW5saW5lRnVuY3Rpb24oSlNW
YWx1ZVJlZiB0aGVGdW5jdGlvbikKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVG
dW5jdGlvbihKU1ZhbHVlUmVmIGZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRs
ZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpz
ZXROZXZlcklubGluZShjb250ZXh0LCB0aGVGdW5jdGlvbik7CisgICAgcmV0dXJuIEpTQzo6c2V0
TmV2ZXJJbmxpbmUobWFpbkpTQ29udGV4dCgpLCBmdW5jdGlvbik7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoYm9vbCB2YWx1
ZSkKIHsKICAgICBtX3Nob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5ID0gdmFs
dWU7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBv
bGljeUFmdGVyRGVsYXkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiU2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkiLCB2YWx1ZSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRl
bGF5KGJvb2wgdmFsdWUpCiB7CiAgICAgbV9zaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVy
RGVsYXkgPSB2YWx1ZTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGREZWNpZGVS
ZXNwb25zZVBvbGljeUFmdGVyRGVsYXkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiU2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5IiwgdmFs
dWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQo
Ym9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXROYXZpZ2F0aW9uR2Vz
dHVyZXNFbmFibGVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IlNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbCB2YWx1ZSkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRJZ25vcmVzVmlld3BvcnRT
Y2FsZUxpbWl0cyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREb3du
bG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkRG93bmxvYWRV
bmRpc3BsYXlhYmxlTUlNRVR5cGVzIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoYm9vbCB2YWx1ZSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0
aW9uQW5kTW90aW9uQWNjZXNzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIlNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiLCB2
YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIikpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJUZXJtaW5h
dGVOZXR3b3JrUHJvY2VzcyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXJtaW5hdGVTZXJ2aWNl
V29ya2VycyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiVGVybWluYXRlU2VydmljZVdvcmtlcnMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MiLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBuZXh0VUlTY3JpcHRDYWxsYmFja0lE
KCkKQEAgLTEzMTQsOTcgKzExNTAsNDggQEAgdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdChK
U1N0cmluZ1JlZiBzY3JpcHQsIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgdW5zaWduZWQg
Y2FsbGJhY2tJRCA9IG5leHRVSVNjcmlwdENhbGxiYWNrSUQoKTsKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhjYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJSdW5VSVByb2Nlc3NTY3JpcHQiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiB0ZXN0RGljdGlvbmFyeSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBj
YWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bGJhY2tJRCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gY2FsbGJhY2tJRFZhbHVl
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjYWxsYmFja0lEKSk7Ci0KLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBzY3JpcHRLZXkuZ2V0KCksIHNjcmlwdFZh
bHVlLmdldCgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgp
LCBjYWxsYmFja0lES2V5LmdldCgpLCBjYWxsYmFja0lEVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgdGVzdERpY3Rpb25hcnkuZ2V0KCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiUnVuVUlQcm9jZXNzU2NyaXB0IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsK
KyAgICAgICAgeyAiU2NyaXB0IiwgdG9XSyhzY3JpcHQpIH0sCisgICAgICAgIHsgIkNhbGxiYWNr
SUQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQpKS5nZXQoKSB9LAorICAgIH0p
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KEpT
U3RyaW5nUmVmIHNjcmlwdCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICB1bnNpZ25lZCBj
YWxsYmFja0lEID0gbmV4dFVJU2NyaXB0Q2FsbGJhY2tJRCgpOwogICAgIGNhY2hlVGVzdFJ1bm5l
ckNhbGxiYWNrKGNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlJ1blVJUHJvY2Vzc1NjcmlwdEltbWVkaWF0ZWx5IikpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gdGVzdERpY3Rpb25hcnkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2Ny
aXB0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0Iikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRWYWx1ZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoc2NyaXB0KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGNhbGxi
YWNrSURWYWx1ZSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpOwotCi0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbSh0ZXN0RGljdGlvbmFyeS5nZXQoKSwgc2NyaXB0S2V5LmdldCgp
LCBzY3JpcHRWYWx1ZS5nZXQoKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSh0ZXN0RGljdGlv
bmFyeS5nZXQoKSwgY2FsbGJhY2tJREtleS5nZXQoKSwgY2FsbGJhY2tJRFZhbHVlLmdldCgpKTsK
LQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHRlc3REaWN0aW9uYXJ5LmdldCgp
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJ1blVJUHJvY2Vzc1NjcmlwdEltbWVkaWF0ZWx5Iiwg
Y3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU2NyaXB0IiwgdG9XSyhzY3JpcHQpIH0s
CisgICAgICAgIHsgIkNhbGxiYWNrSUQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNhbGxiYWNr
SUQpKS5nZXQoKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpydW5V
SVNjcmlwdENhbGxiYWNrKHVuc2lnbmVkIGNhbGxiYWNrSUQsIEpTU3RyaW5nUmVmIHJlc3VsdCkK
IHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpT
Q29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1h
aW5GcmFtZSk7Ci0KLSAgICBKU1ZhbHVlUmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1ZU1ha2VTdHJp
bmcoY29udGV4dCwgcmVzdWx0KTsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1
ZU1ha2VTdHJpbmcobWFpbkpTQ29udGV4dCgpLCByZXN1bHQpOwogICAgIGNhbGxUZXN0UnVubmVy
Q2FsbGJhY2soY2FsbGJhY2tJRCwgMSwgJnJlc3VsdFZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRBbGxvd2VkTWVudUFjdGlvbnMoSlNWYWx1ZVJlZiBhY3Rpb25zKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldEFsbG93ZWRNZW51QWN0aW9ucyIpKTsKLSAgICBXS1JldGFp
blB0cjxXS011dGFibGVBcnJheVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFy
cmF5Q3JlYXRlKCkpOwotCi0gICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIGF1dG8gbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKHBhZ2UpOwotICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRv
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRv
IGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAgICAgYXV0byBhY3Rpb25zQXJyYXkgPSBKU1Zh
bHVlVG9PYmplY3QoY29udGV4dCwgYWN0aW9ucywgbnVsbHB0cik7Ci0gICAgYXV0byBsZW5ndGhW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgYWN0aW9uc0FycmF5LCBsZW5ndGhQ
cm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNv
bnRleHQsIGxlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsZW5ndGgg
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1
ZSwgMCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFjdGlv
bnNBcnJheSwgaSwgMCk7Ci0gICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZh
bHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gYWN0aW9uTmFtZSA9
IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFjdGlvbiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoYWN0aW9uTmFtZS5nZXQoKSkpOwotICAgICAgICBXS0FycmF5QXBwZW5kSXRl
bShtZXNzYWdlQm9keS5nZXQoKSwgYWN0aW9uLmdldCgpKTsKKyAgICBhdXRvIGxlbmd0aCA9IGFy
cmF5TGVuZ3RoKGNvbnRleHQsIGFjdGlvbnNBcnJheSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFBy
b3BlcnR5QXRJbmRleChjb250ZXh0LCBhY3Rpb25zQXJyYXksIGksIG51bGxwdHIpOworICAgICAg
ICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgdG9XS1N0cmluZyhjb250ZXh0
LCB2YWx1ZSkuZ2V0KCkpOwogICAgIH0KLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBh
Z2UsIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJTZXRBbGxvd2VkTWVudUFjdGlvbnMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24oSlNTdHJpbmdSZWYgbmFt
ZSwgYm9vbCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewog
ICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKEN1c3RvbU1lbnVBY3Rpb25DYWxsYmFja0lELCBj
YWxsYmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnN0YWxsQ3VzdG9tTWVudUFj
dGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygibmFtZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZVZh
bHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhuYW1lKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgbmFtZUtleS5nZXQoKSwgbmFtZVZh
bHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkaXNtaXNzZXNBdXRv
bWF0aWNhbGx5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGlz
bWlzc2VzQXV0b21hdGljYWxseSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGRp
c21pc3Nlc0F1dG9tYXRpY2FsbHlWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRpc21p
c3Nlc0F1dG9tYXRpY2FsbHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5
LmdldCgpLCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5LmdldCgpLCBkaXNtaXNzZXNBdXRvbWF0
aWNhbGx5VmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiSW5zdGFsbEN1c3RvbU1l
bnVBY3Rpb24iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJuYW1lIiwgdG9XSyhu
YW1lKSB9LAorICAgICAgICB7ICJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IiwgYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoZGlzbWlzc2VzQXV0b21hdGljYWxseSkpLmdldCgpIH0sCisgICAgfSkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxEaWRCZWdpblN3aXBlQ2FsbGJhY2so
SlNWYWx1ZVJlZiBjYWxsYmFjaykKQEAgLTE0NDksNTggKzEyMzYsMzAgQEAgdm9pZCBUZXN0UnVu
bmVyOjpjYWxsRGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrKCkKIAogdm9pZCBUZXN0UnVu
bmVyOjpjbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKEpTU3RyaW5nUmVmIGRvbWFpbikKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoZG9tYWluKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKCJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIiwgdG9XSyhkb21haW4p
LmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpkb2VzU3RhdGlzdGljc0RvbWFpbklERXhp
c3RJbkRhdGFiYXNlKHVuc2lnbmVkIGRvbWFpbklEKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+
IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkRvbWFpbklEIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoZG9tYWluSUQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMo
a2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6
ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewot
ICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ld
ID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRv
ZXNTdGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRl
KHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAg
IFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVy
bkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkRvZXNTdGF0aXN0aWNzRG9t
YWluSURFeGlzdEluRGF0YWJhc2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJE
b21haW5JRCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZG9tYWluSUQpKSB9CisgICAgfSkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgdmFs
dWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0VuYWJsZWQiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJTZXRTdGF0aXN0aWNzRW5hYmxlZCIsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpp
c1N0YXRpc3RpY3NFcGhlbWVyYWwoKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKSk7
Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRh
KTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlw
ZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwi
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFs
dWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVy
Q2FsbGJhY2soU2V0U3RhdGlzdGljc0RlYnVnTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5k
bGVyKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiLCB2
YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01v
ZGVDYWxsYmFjaygpCkBAIC0xNTExLDEwICsxMjcwLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2FsbERpZFNldERlYnVnTW9kZUNhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKEpTU3RyaW5nUmVmIGhvc3RO
YW1lLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5l
ckNhbGxiYWNrKFNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNhbGxi
YWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVz
b3VyY2VGb3JEZWJ1Z01vZGUiLCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZUNhbGxiYWNrKCkKQEAgLTE1MjYsMjcgKzEyODIsMTAgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzTGFzdFNlZW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzLCBK
U1YKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzTGFzdFNlZW5D
YWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2
YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKSk7Ci0gICAgCi0g
ICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8
V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBr
ZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0g
ICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NMYXN0U2Vl
biIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCks
IHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkg
fSwKKyAgICAgICAgeyAiVmFsdWUiLCB0b1dLKHNlY29uZHMpIH0sCisgICAgfSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0TGFzdFNlZW5DYWxsYmFj
aygpCkBAIC0xNTU4LDQ5ICsxMjk3LDE4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c01lcmdlU3RhdGlzdGljKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiB0CiB7CiAg
ICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljQ2Fs
bGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFs
dWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjEiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BG
cmFtZURvbWFpbjEpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVEb21haW4yIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVEb21haW4yKSkp
OwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiTGFzdFNlZW4iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0
ZShsYXN0U2VlbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYWRVc2VySW50ZXJhY3Rpb24pKSk7Ci0KLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3Vi
bGVDcmVhdGUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikpKTsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzR3JhbmRmYXRoZXJlZCIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0
aGVyZWQpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJc1ByZXZhbGVudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzVmVyeVByZXZhbGVudCIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ZlcnlQcmV2YWxlbnQpKSk7
Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJEYXRhUmVjb3Jkc1JlbW92ZWQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShkYXRhUmVjb3Jkc1JlbW92ZWQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdS
ZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVl
cyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAg
cmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRl
KHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAg
IFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdl
KCJTZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAg
ICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlRvcEZyYW1l
RG9tYWluMSIsIHRvV0sodG9wRnJhbWVEb21haW4xKSB9LAorICAgICAgICB7ICJUb3BGcmFtZURv
bWFpbjIiLCB0b1dLKHRvcEZyYW1lRG9tYWluMikgfSwKKyAgICAgICAgeyAiTGFzdFNlZW4iLCBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGxhc3RTZWVuKSkgfSwKKyAgICAgICAgeyAiSGFkVXNlcklu
dGVyYWN0aW9uIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkg
fSwKKyAgICAgICAgeyAiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tEb3Vi
bGVDcmVhdGUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzR3Jh
bmRmYXRoZXJlZCIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkpIH0s
CisgICAgICAgIHsgIklzUHJldmFsZW50IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2
YWxlbnQpKSB9LAorICAgICAgICB7ICJJc1ZlcnlQcmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShpc1ZlcnlQcmV2YWxlbnQpKSB9LAorICAgICAgICB7ICJEYXRhUmVjb3Jkc1JlbW92
ZWQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpIH0sCisgICAg
fSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0TWVy
Z2VTdGF0aXN0aWNDYWxsYmFjaygpCkBAIC0xNjEyLDMxICsxMzIwLDEyIEBAIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMoSlNTdHJpbmdSZWYgaG9zdE5hbWUs
IGJvb2wgaGFkVXNlCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGlj
c0V4cGlyZWRTdGF0aXN0aWNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNl
ckludGVyYWN0aW9uIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKGhhZFVzZXJJbnRlcmFjdGlvbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0
YVJlbW92YWwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
aXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCkpKTsKLQotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50Iikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50
KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7
Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tl
eXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0u
Z2V0KCk7Ci0gICAgfQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NFeHBp
cmVkU3RhdGlzdGljIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFs
dWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0V4cGlyZWRT
dGF0aXN0aWMiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRv
V0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhhZFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGhhZFVzZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKSkgfSwKKyAgICAgICAgeyAi
SXNQcmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpIH0KKyAg
ICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRF
eHBpcmVkU3RhdGlzdGljQ2FsbGJhY2soKQpAQCAtMTY0OCwyOSArMTMzNywxMCBAQCB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0
TmFtZSwgYm9vbCB2YWx1ZQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dmFsdWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZl
Y3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUo
KSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tp
XSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQo
KTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3
VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFt
ZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQpAQCAtMTY4
MiwyOSArMTM1MiwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdgogewogICAgIGNhY2hlVGVz
dFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFj
a0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7
Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0
b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVz
OwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXpl
KHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5z
aXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAg
ICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
RGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5
cy5zaXplKCkpKTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0
TmFtZSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3ND
YWxsRGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQpAQCAtMTcxNCwxMzggKzEz
NjUsNTEgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZUNhbGxiYWNrKCkKICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImR1bXBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyIpOwogfQogCiBib29sIFRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3RO
YW1lKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc1ByZXZhbGVudFJl
c291cmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVS
ZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsK
LSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlE
KCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9u
b3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0
YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0
dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBB
U1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFn
ZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UiLCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0
aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihKU1N0cmluZ1JlZiBzdWJyZXNvdXJj
ZUhvc3QsIEpTU3RyaW5nUmVmIHRvcEZyYW1lSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+
PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU3VicmVzb3VyY2VIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoc3VicmVzb3VyY2VIb3N0KSkpOwotICAg
IAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlRvcEZyYW1lSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1lSG9zdCkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJp
bmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1Zh
bHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VV
bmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRh
KCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRy
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlE
KHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29s
ZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEp
KS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5n
Qm9vbGVhbigiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIsIGNyZWF0
ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlN1YnJlc291cmNlSG9zdCIsIHRvV0soc3VicmVz
b3VyY2VIb3N0KSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3QiLCB0b1dLKHRvcEZyYW1lSG9z
dCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNz
UmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihKU1N0cmluZ1JlZiBzdWJGcmFtZUhvc3QsIEpTU3Ry
aW5nUmVmIHRvcEZyYW1lSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0K
LSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
dWJGcmFtZUhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyhzdWJGcmFtZUhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJh
bWVIb3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNp
emUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1
ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rp
b25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5
cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBl
UmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7
Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFz
U3ViRnJhbWVVbmRlciIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlN1YkZyYW1l
SG9zdCIsIHRvV0soc3ViRnJhbWVIb3N0KSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3QiLCB0
b1dLKHRvcEZyYW1lSG9zdCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5l
cjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhKU1N0cmluZ1JlZiBob3N0
UmVkaXJlY3RlZEZyb20sIEpTU3RyaW5nUmVmIGhvc3RSZWRpcmVjdGVkVG8pCiB7Ci0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RSZWRp
cmVjdGVkRnJvbSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0UmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdFJlZGlyZWN0ZWRUbykp
KTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwot
ICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlz
W2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdl
dCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NS
ZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFy
eVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRh
dGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYg
cmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRp
cmVjdGluZ1RvIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdFJlZGlyZWN0
ZWRGcm9tIiwgdG9XSyhob3N0UmVkaXJlY3RlZEZyb20pIH0sCisgICAgICAgIHsgIkhvc3RSZWRp
cmVjdGVkVG8iLCB0b1dLKGhvc3RSZWRpcmVjdGVkVG8pIH0sCisgICAgfSkuZ2V0KCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oSlNT
dHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0hhc0hhZFVz
ZXJJbnRlcmFjdGlvbkNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZh
bHVlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVl
KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8
V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwot
ICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBr
ZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0g
ICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NIYXNIYWRV
c2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdW
YWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAi
SG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb25DYWxsYmFj
aygpCkBAIC0xODU1LDI2MSArMTQxOSw5NSBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3ND
YWxsRGlkU2V0SGFzSGFkVXNlckludGVyYWN0aW9uQ2FsbGJhY2soKQogCiBib29sIFRlc3RSdW5u
ZXI6OmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFt
ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50
ZXJhY3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlw
ZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEp
OwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBl
SUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbiIpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc09ubHlJbkRh
dGFiYXNlT25jZShKU1N0cmluZ1JlZiBzdWJIb3N0LCBKU1N0cmluZ1JlZiB0b3BIb3N0KQogewot
ICAgIAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Ykhvc3QiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJIb3N0KSkp
OwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlRvcEhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyh0b3BIb3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1Jl
Zj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVz
KHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICBy
YXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgYXV0byBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGlj
c09ubHlJbkRhdGFiYXNlT25jZSIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tl
eXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRh
dGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFs
dWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7
CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigi
SXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAg
ICAgICAgeyAiU3ViSG9zdCIsIHRvV0soc3ViSG9zdCkgfSwKKyAgICAgICAgeyAiVG9wSG9zdCIs
IHRvV0sodG9wSG9zdCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFs
dWUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9z
dE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUodmFsdWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdL
ZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6
ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAg
ICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZh
bHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0
YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUp
IH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9
LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VJVFBEYXRhYmFz
ZShib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZUlUUERhdGFi
YXNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiU2V0VXNlSVRQRGF0YWJhc2UiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVz
dFJ1bm5lcjo6aXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChKU1N0cmluZ1JlZiBob3N0TmFtZSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJu
RGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
IHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIiwgdG9XSyho
b3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVm
IHRvcEZyYW1lSG9zdE5hbWUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
Pj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAg
IAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ikhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1l
SG9zdE5hbWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMu
c2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0g
PSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4iKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5
Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkp
OwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YmZy
YW1lVW5kZXJUb3BGcmFtZU9yaWdpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsg
Ikhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVIb3N0TmFt
ZSIsIHRvV0sodG9wRnJhbWVIb3N0TmFtZSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihK
U1N0cmluZ1JlZiBob3N0TmFtZSwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSkKIHsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVl
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsK
LSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJUb3BGcmFtZUhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0TmFtZSkpKTsKLSAgICAKLSAgICBW
ZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5
cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNb
aV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9
Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCks
IHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3Jp
Z2luIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhv
c3ROYW1lKSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3ROYW1lIiwgdG9XSyh0b3BGcmFtZUhv
c3ROYW1lKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBK
U1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRUbykKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+
PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGly
ZWN0ZWRUbyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0
cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3
VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
a2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsK
LSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdFRvIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRh
dGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8iLCBjcmVhdGVXS0Rp
Y3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAg
ICAgIHsgIkhvc3ROYW1lUmVkaXJlY3RlZFRvIiwgdG9XSyhob3N0TmFtZVJlZGlyZWN0ZWRUbykg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3Ry
aW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4g
dmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVj
dGVkRnJvbSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdL
U3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiBy
YXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgp
OwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0RnJvbSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVl
cy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20iLCBjcmVh
dGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0s
CisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpT
U3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+
IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJl
Y3RlZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkVG8pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3Ry
aW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdW
YWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwot
ICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
VG8iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyIsIGNyZWF0ZVdLRGljdGlvbmFy
eSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAi
SG9zdE5hbWVSZWRpcmVjdGVkVG8iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSB9LAorICAg
IH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3RO
YW1lUmVkaXJlY3RlZEZyb20pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
Pj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAg
IAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ikhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhv
c3ROYW1lUmVkaXJlY3RlZEZyb20pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBy
YXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFs
dWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICBy
YXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tl
eXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0
aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20iLCBjcmVhdGVXS0RpY3Rpb25hcnkoewor
ICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3RO
YW1lUmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pIH0sCisgICAg
fSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uKEpTU3RyaW5nUmVmIGZyb21Ib3N0LCBKU1N0cmluZ1JlZiB0
b0hvc3QpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZyb21Ib3N0Iikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
ZnJvbUhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG9Ib3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9Ib3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxX
S1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4g
cmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQo
KTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhM
aW5rRGVjb3JhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1Zh
bHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIs
IGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkZyb21Ib3N0IiwgdG9XSyhmcm9tSG9z
dCkgfSwKKyAgICAgICAgeyAiVG9Ib3N0IiwgdG9XSyh0b0hvc3QpIH0sCisgICAgfSkuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0
YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RG91YmxlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykp
OwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24iLCBzZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpp
bnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBj
YWxsYmFjaykKQEAgLTIxNDcsMTIgKzE1NDUsOSBAQCB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxT
dGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKICAg
ICAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVu
c2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIG51bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wUHJldmFsZW50
UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLCB1bnNp
Z25lZCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhV
c2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dp
dGhVSSwgdW5zaWduZWQgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJLCB1bnNpZ25lZCB0b3Az
TWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRp
cmVjdHNXaXRob3V0VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRo
b3V0VUkpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VH
ZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsK
LSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29u
dGV4dChtYWluRnJhbWUpOwotICAgIAogICAgIFN0cmluZyBzdHJpbmcgPSBtYWtlU3RyaW5nKCJ7
IFwibnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNcIiA6ICIsIG51bWJlck9mUHJldmFsZW50UmVz
b3VyY2VzLCAiLCBcIm51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlv
blwiIDogIiwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCAi
LCBcIm51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvblwiIDog
IiwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAiLCBc
InRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRl
cmFjdGlvblwiIDogIiwgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5
c1NpbmNlVXNlckludGVyYWN0aW9uLCAiLCBcIm1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlv
blByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbWVkaWFuRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uLCAi
LCBcInRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSVwiIDogIiwgdG9wM051bWJl
ck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJLCAiLCBcInRvcDNNZWRpYW5TdWJGcmFtZVdpdGhv
dXRVSVwiIDogIiwgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJLCAiLCBcInRvcDNNZWRpYW5T
dWJSZXNvdXJjZVdpdGhvdXRVSVwiIDogIiwgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJ
LCAiLCBcInRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUlcIiA6ICIsIHRvcDNNZWRp
YW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUksICIsIFwidG9wM01lZGlhbkRhdGFSZWNvcmRzUmVt
b3ZlZFdpdGhvdXRVSVwiIDogIiwgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRV
SSwgIiB9Iik7CiAgICAgCi0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21K
U09OU3RyaW5nKGNvbnRleHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0
cmluZy51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNW
YWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5nKHN0
cmluZy51dGY4KCkuZGF0YSgpKS5nZXQoKSk7CiAKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNr
KFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELCAxLCAmcmVzdWx0KTsKIH0KQEAg
LTIxNjQsMTYgKzE1NTksMTQgQEAgYm9vbCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzTm90aWZ5T2Jz
ZXJ2ZXIoKQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzUHJv
Y2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZSgiU3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMiKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzVXBkYXRlQ29va2llQmxvY2tpbmcoSlNWYWx1ZVJlZiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0
aWNzRGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdENhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVy
KTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9j
a2luZyIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9z
dE1lc3NhZ2UoIlN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyIpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdENhbGxiYWNr
KCkKQEAgLTIxODMsMTM1ICsxNTc2LDgzIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Nh
bGxEaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0Q2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NTdWJtaXRUZWxlbWV0cnkoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN0YXRpc3RpY3NTdWJtaXRUZWxlbWV0cnkiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlN0YXRpc3RpY3NTdWJtaXRUZWxlbWV0cnkiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVl
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc0lzUnVubmluZ1Rlc3QoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdGF0aXN0aWNzU2V0SXNSdW5uaW5nVGVzdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsK
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTZXRJc1J1bm5p
bmdUZXN0IiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCIsIHZhbHVlKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRp
c3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShz
ZWNvbmRzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIiwgc2Vjb25kcyk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUg
c2Vjb25kcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzR3JhbmRm
YXRoZXJpbmdUaW1lIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSIsIHNlY29u
ZHMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50
cmllcyh1bnNpZ25lZCBlbnRyaWVzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1h
eFN0YXRpc3RpY3NFbnRyaWVzIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGVudHJpZXMpKTsKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldE1heFN0YXRpc3RpY3NFbnRyaWVzIiwgZW50cmllcyk7
CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3du
VG8odW5zaWduZWQgZW50cmllcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQcnVu
ZUVudHJpZXNEb3duVG8iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZW50cmllcykpOwotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiU2V0UHJ1bmVFbnRyaWVzRG93blRvIiwgZW50cmllcyk7CiB9CiAg
ICAgCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJh
Y2soU3RhdGlzdGljc0RpZENsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lE
LCBjYWxsYmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudFN0b3JlIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQgaG91
cnMsIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2so
U3RhdGlzdGljc0RpZENsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lELCBj
YWxsYmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3VycyIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3Vy
cykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdU
Ujo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3Jl
TW9kaWZpZWRTaW5jZUhvdXJzIiwgaG91cnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwoSlNWYWx1ZVJlZiBjYWxsYmFjaykK
IHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJUaHJvdWdo
V2Vic2l0ZURhdGFSZW1vdmFsQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwi
KSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNz
YWdlKCJTdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIik7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0KEpTU3RyaW5nUmVm
IGhvc3ROYW1lLCBib29sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMpCiB7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tU
eXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLQotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluY2x1ZGVIdHRwT25s
eUNvb2tpZXMiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
aW5jbHVkZUh0dHBPbmx5Q29va2llcykpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3
S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNp
emUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
cmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVl
c1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNz
RGVsZXRlQ29va2llc0Zvckhvc3QiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0IiwgY3JlYXRl
V0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAor
ICAgICAgICB7ICJJbmNsdWRlSHR0cE9ubHlDb29raWVzIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaW5jbHVkZUh0dHBPbmx5Q29va2llcykpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29s
IFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZShKU1N0cmluZ1JlZiBob3N0
TmFtZSkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlIikpOwotICAgIGF1dG8g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1l
KSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRX
SyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0
dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0
aWNzSGFzTG9jYWxTdG9yYWdlIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcChkb3VibGUgc2Vjb25kcykKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rv
dWJsZUNyZWF0ZShzZWNvbmRzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJTZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiLCBzZWNvbmRzKTsKIH0KIAogYm9vbCBUZXN0
UnVubmVyOjpoYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1l
KQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIikpOwotICAgIGF1dG8gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7
Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAm
cmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJu
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSGFzU3RhdGlzdGlj
c0lzb2xhdGVkU2Vzc2lvbiIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoYm9vbCB2YWx1ZSwg
SlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzMjAsOSArMTY2MSw3IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKGJvb2wgdmFs
dWUsIEpTVmFsdWVSZWYgY29tCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBjYWNoZVRlc3RS
dW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJDYWxs
YmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyIikpOwotICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkp
OwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RN
ZXNzYWdlKCJTZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiLCB2YWx1ZSk7CiAg
ICAgbV9oYXNTZXREb3duZ3JhZGVSZWZlcnJlckNhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjMz
OCwxMSArMTY3NywxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRCbG9j
a1RoaXJkUGFydHlDb29raWVzKGJvb2wgdmFsdWUsIEpTVmFsdWVSZQogICAgICAgICByZXR1cm47
CiAKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0U2hvdWxkQmxv
Y2tUaGlyZFBhcnR5Q29va2llc0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29v
a2llcyIpKTsKKyAgICBhdXRvIG1lc3NhZ2VOYW1lID0gIlNldFN0YXRpc3RpY3NTaG91bGRCbG9j
a1RoaXJkUGFydHlDb29raWVzIjsKICAgICBpZiAob25seU9uU2l0ZXNXaXRob3V0VXNlckludGVy
YWN0aW9uKQotICAgICAgICBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25T
aXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAg
V0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgICAgIG1lc3NhZ2VO
YW1lID0gIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb24iOworICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2VOYW1lLCB2YWx1
ZSk7CiAgICAgbV9oYXNTZXRCbG9ja1RoaXJkUGFydHlDb29raWVzQ2FsbGJhY2sgPSB0cnVlOwog
fQogCkBAIC0yMzU4LDkgKzE2OTYsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NG
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZShib29sIHZhbHVlLCBKU1ZhbAogICAgICAg
ICByZXR1cm47CiAKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0
Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVDYWxsYmFja0lELCBjb21wbGV0aW9uSGFu
ZGxlcik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0ZpcnN0UGFydHlX
ZWJzaXRlRGF0YVJlbW92YWxNb2RlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVu
ZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRT
dGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiLCB2YWx1ZSk7CiAgICAg
bV9oYXNTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUNhbGxiYWNrID0gdHJ1ZTsK
IH0KIApAQCAtMjM4MywxMCArMTcxOSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Nh
bGxDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWxDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyhKU1N0cmluZ1JlZiBob3N0
TmFtZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNDYWxsYmFj
a0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldFRvU2FtZVNpdGVT
dHJpY3RDb29raWVzIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRUb1NhbWVT
aXRlU3RyaWN0Q29va2llcyIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzQ2FsbGJh
Y2soKQpAQCAtMjM5OCwyNyArMTczMSwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3ND
YWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKEpTU3RyaW5nUmVmIGZp
cnN0UGFydHlVUkxTdHJpbmcsIEpTU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVlUmVm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRp
c3RpY3NEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluQ2FsbGJhY2tJRCwgY29tcGxldGlv
bkhhbmRsZXIpOwotCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZpcnN0UGFy
dHlVUkwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhK
U1N0cmluZyhmaXJzdFBhcnR5VVJMU3RyaW5nKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNOQU1FIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoY25hbWVVUkxTdHJp
bmcpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgp
KTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAg
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1
ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENO
QU1FRG9tYWluIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFy
eUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkp
KTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXVFI6
OnBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkZpcnN0UGFydHlVUkwiLCB0b1dLKGZpcnN0
UGFydHlVUkxTdHJpbmcpIH0sCisgICAgICAgIHsgIkNOQU1FIiwgdG9XSyhjbmFtZVVSTFN0cmlu
ZykgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Nh
bGxEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQyOSwxMCAr
MTc0NSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRGaXJzdFBhcnR5
SG9zdENOQU1FRG9tYWluQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0
VGhpcmRQYXJ0eUNOQU1FRG9tYWluKEpTU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVl
UmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0
YXRpc3RpY3NEaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW5DYWxsYmFja0lELCBjb21wbGV0aW9u
SGFuZGxlcik7Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKTsK
LSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
ZyhjbmFtZVVSTFN0cmluZykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9t
YWluIiwgdG9XSyhjbmFtZVVSTFN0cmluZykuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAt
MjQ0Myw5ICsxNzU2LDggQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRo
aXJkUGFydHlDTkFNRURvbWFpbkNhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGlj
c1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkUmVzZXRUb0NvbnNpc3Rl
bnRTdGF0ZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICAKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSIpKTsKLSAgICBX
S0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworCisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3Rh
dGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
dGF0aXN0aWNzQ2FsbERpZFJlc2V0VG9Db25zaXN0ZW50U3RhdGVDYWxsYmFjaygpCkBAIC0yNDg2
LDk1ICsxNzk4LDQ2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZ0Nh
bGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoSlNW
YWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9y
YWdlQWNjZXNzRW50cmllc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJHZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyIpKTsKLSAgICBXS0J1bmRs
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFsbFN0b3Jh
Z2VBY2Nlc3NFbnRyaWVzIik7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlY2VpdmVB
bGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQor
c3RhdGljIEpTVmFsdWVSZWYgbWFrZURvbWFpbnNWYWx1ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZG9tYWlucykKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFn
ZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkp
OwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0KG1haW5GcmFtZSk7Ci0gICAgCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiWyIpOworICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgnWycpOwogICAgIGJvb2wgZmlyc3REb21h
aW4gPSB0cnVlOwogICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBp
ZiAoZmlyc3REb21haW4pCi0gICAgICAgICAgICBmaXJzdERvbWFpbiA9IGZhbHNlOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoZG9tYWluKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJcIiIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChmaXJzdERvbWFpbiA/ICJcIiIgOiAi
LCBcIiIsIGRvbWFpbiwgJyInKTsKKyAgICAgICAgZmlyc3REb21haW4gPSBmYWxzZTsKICAgICB9
Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJdIik7Ci0gICAgCi0gICAgSlNWYWx1
ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQsIGFkb3B0KEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4
KCkuZGF0YSgpKSkuZ2V0KCkpOwotCisgICAgYnVpbGRlci5hcHBlbmQoJ10nKTsKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3Ry
aW5nKGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKS5nZXQoKSk7Cit9Cit2b2lkIFRl
c3RSdW5uZXI6OmNhbGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayhW
ZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1ha2VEb21haW5z
VmFsdWUoZG9tYWlucyk7CiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9yYWdlQWNj
ZXNzRW50cmllc0NhbGxiYWNrSUQsIDEsICZyZXN1bHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OmxvYWRlZFN1YnJlc291cmNlRG9tYWlucyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNh
Y2hlVGVzdFJ1bm5lckNhbGxiYWNrKExvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrSUQs
IGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMb2FkZWRTdWJyZXNv
dXJjZURvbWFpbnMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBX
VFI6OnBvc3RNZXNzYWdlKCJMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNr
KFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucykKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgCi0gICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdbJyk7Ci0gICAg
Ym9vbCBpc0ZpcnN0RG9tYWluID0gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFp
bnMpIHsKLSAgICAgICAgaWYgKGlzRmlyc3REb21haW4pCi0gICAgICAgICAgICBpc0ZpcnN0RG9t
YWluID0gZmFsc2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJc
IiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkb21haW4pOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiIik7Ci0gICAgfQotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCddJyk7Ci0gICAgCi0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZy
b21KU09OU3RyaW5nKGNvbnRleHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCisgICAg
YXV0byByZXN1bHQgPSBtYWtlRG9tYWluc1ZhbHVlKGRvbWFpbnMpOwogICAgIGNhbGxUZXN0UnVu
bmVyQ2FsbGJhY2soTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2tJRCwgMSwgJnJlc3Vs
dCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKEpTU3RyaW5nUmVm
IHBlcnNpc3RlbnRJZCwgSlNTdHJpbmdSZWYgbGFiZWwsIGNvbnN0IGNoYXIqIHR5cGUpCiB7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGVyc2lzdGVudElEIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKHRvV0socGVyc2lzdGVudElkKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZCh0b1dLKGxhYmVsKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJUeXBlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodHlwZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0
cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAg
cmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVz
LnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVl
c1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJBZGRNb2NrTWVkaWFEZXZpY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKCJBZGRNb2NrTWVkaWFEZXZpY2UiLCBjcmVhdGVXS0RpY3Rpb25h
cnkoeworICAgICAgICB7ICJQZXJzaXN0ZW50SUQiLCB0b1dLKHBlcnNpc3RlbnRJZCkgfSwKKyAg
ICAgICAgeyAiTGFiZWwiLCB0b1dLKGxhYmVsKSB9LAorICAgICAgICB7ICJUeXBlIiwgdG9XSyh0
eXBlKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrQ2Ft
ZXJhRGV2aWNlKEpTU3RyaW5nUmVmIHBlcnNpc3RlbnRJZCwgSlNTdHJpbmdSZWYgbGFiZWwpCkBA
IC0yNTk0LDE1MyArMTg1Nyw3MiBAQCB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTY3JlZW5EZXZp
Y2UoSlNTdHJpbmdSZWYgcGVyc2lzdGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbAogCiB2b2lkIFRl
c3RSdW5uZXI6OmNsZWFyTW9ja01lZGlhRGV2aWNlcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2xlYXJNb2NrTWVkaWFEZXZpY2VzIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJDbGVhck1vY2tNZWRpYURldmljZXMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVN
b2NrTWVkaWFEZXZpY2UoSlNTdHJpbmdSZWYgcGVyc2lzdGVudElkKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlJlbW92ZU1vY2tNZWRpYURldmljZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1R5cGVSZWY+IG1lc3NhZ2VCb2R5KHRvV0socGVyc2lzdGVudElkKSk7Ci0KLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlJlbW92ZU1vY2tNZWRpYURldmljZSIsIHRvV0socGVy
c2lzdGVudElkKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRNb2NrTWVkaWFEZXZpY2Vz
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXNldE1vY2tNZWRpYURldmljZXMiKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlJlc2V0TW9ja01lZGlhRGV2aWNlcyIpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbih1bnNpZ25lZCBvcmll
bnRhdGlvbikKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uIikpOwotICAgIGF1dG8g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG9yaWVudGF0aW9uKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24i
LCBvcmllbnRhdGlvbik7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlckVuYWJsZWQoKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc01vY2tSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyRW5hYmxlZCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVs
bHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9
PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFk
b3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAg
IHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNNb2NrUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQiKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykK
Kwogdm9pZCBUZXN0UnVubmVyOjpjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgaW5kZXgpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ29ubmVjdE1vY2tHYW1lcGFkIikpOwotICAgIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KGluZGV4KSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNvbm5lY3RN
b2NrR2FtZXBhZCIsIGluZGV4KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9j
a0dhbWVwYWQodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlz
Y29ubmVjdE1vY2tHYW1lcGFkIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0KLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIkRpc2Nvbm5lY3RNb2NrR2FtZXBhZCIsIGluZGV4KTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZERldGFpbHModW5zaWduZWQgaW5kZXgs
IEpTU3RyaW5nUmVmIGdhbWVwYWRJRCwgSlNTdHJpbmdSZWYgbWFwcGluZywgdW5zaWduZWQgYXhp
c0NvdW50LCB1bnNpZ25lZCBidXR0b25Db3VudCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2
YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJHYW1lcGFkSUQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhnYW1lcGFkSUQp
KTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk1hcHBpbmciKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhtYXBwaW5nKSk7Ci0KLSAg
ICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1l
cGFkSW5kZXgiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShp
bmRleCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkF4aXNDb3VudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGF4aXNDb3VudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbkNvdW50IikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uQ291bnQpKSk7Ci0KLSAgICBWZWN0b3I8
V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwot
ICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZh
bHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdW
YWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0TW9ja0dhbWVwYWREZXRhaWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlz
LmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TW9ja0dhbWVwYWREZXRhaWxzIiwgY3JlYXRl
V0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiR2FtZXBhZElEIiwgdG9XSyhnYW1lcGFkSUQpIH0s
CisgICAgICAgIHsgIk1hcHBpbmciLCB0b1dLKG1hcHBpbmcpIH0sCisgICAgICAgIHsgIkdhbWVw
YWRJbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJB
eGlzQ291bnQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNDb3VudCkpIH0sCisgICAgICAg
IHsgIkJ1dHRvbkNvdW50IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25Db3VudCkpIH0s
CisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQXhp
c1ZhbHVlKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBheGlzSW5kZXgsIGRvdWJsZSB2YWx1ZSkK
IHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNJbmRl
eCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRl
eCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlZhbHVlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVh
dGUodmFsdWUpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVj
dG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgp
KTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBr
ZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0g
ICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCBy
YXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJT
ZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsg
IkdhbWVwYWRJbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAg
ICB7ICJBeGlzSW5kZXgiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpIH0sCisg
ICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpIH0sCisgICAg
fSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFs
dWUodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGJ1dHRvbkluZGV4LCBkb3VibGUgdmFsdWUpCiB7
Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSk7Ci0KLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25JbmRl
eCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbklu
ZGV4KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNy
ZWF0ZSh2YWx1ZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBW
ZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXpl
KCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9
IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsK
LSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZEJ1dHRvblZh
bHVlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZSgiU2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAg
ICAgIHsgIkdhbWVwYWRJbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAor
ICAgICAgICB7ICJCdXR0b25JbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uSW5k
ZXgpKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUp
KSB9LAorICAgIH0pLmdldCgpKTsKIH0KKwogI2Vsc2UKKwogdm9pZCBUZXN0UnVubmVyOjpjb25u
ZWN0TW9ja0dhbWVwYWQodW5zaWduZWQpCiB7CiB9CkBAIC0yNzYwLDMwICsxOTQyLDI1IEBAIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUodW5zaWduZWQsIHVuc2lnbmVk
LCBkb3VibGUpCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5z
aWduZWQsIHVuc2lnbmVkLCBkb3VibGUpCiB7CiB9CisKICNlbmRpZiAvLyBQTEFURk9STShNQUMp
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXMoSlNWYWx1ZVJlZiBmaWxlc1Zh
bHVlKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5k
bGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdl
KSk7CisgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAKICAgICBp
ZiAoIUpTVmFsdWVJc0FycmF5KGNvbnRleHQsIGZpbGVzVmFsdWUpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBKU09iamVjdFJlZiBmaWxlcyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBmaWxl
c1ZhbHVlLCBudWxscHRyKTsKLSAgICBzdGF0aWMgYXV0byBsZW5ndGhQcm9wZXJ0eSA9IGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJl
ZiBmaWxlc0xlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBmaWxlcywg
bGVuZ3RoUHJvcGVydHkuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVy
KGNvbnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRv
IGZpbGVzID0gKEpTT2JqZWN0UmVmKWZpbGVzVmFsdWU7CiAgICAgYXV0byBmaWxlVVJMcyA9IGFk
b3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgYXV0byBmaWxlc0xlbmd0aCA9IHN0
YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGZpbGVzTGVuZ3RoVmFs
dWUsIG51bGxwdHIpKTsKKyAgICBhdXRvIGZpbGVzTGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4
dCwgZmlsZXMpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7ICsraSkg
ewogICAgICAgICBKU1ZhbHVlUmVmIGZpbGVWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdElu
ZGV4KGNvbnRleHQsIGZpbGVzLCBpLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNT
dHJpbmcoY29udGV4dCwgZmlsZVZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGF1dG8gZmlsZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgZmlsZVZh
bHVlLCBudWxscHRyKSk7CisgICAgICAgIGF1dG8gZmlsZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRl
eHQsIGZpbGVWYWx1ZSk7CiAgICAgICAgIHNpemVfdCBmaWxlQnVmZmVyU2l6ZSA9IEpTU3RyaW5n
R2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShmaWxlLmdldCgpKSArIDE7CiAgICAgICAgIGF1dG8g
ZmlsZUJ1ZmZlciA9IG1ha2VVbmlxdWVBcnJheTxjaGFyPihmaWxlQnVmZmVyU2l6ZSk7CiAgICAg
ICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoZmlsZS5nZXQoKSwgZmlsZUJ1ZmZlci5nZXQoKSwg
ZmlsZUJ1ZmZlclNpemUpOwpAQCAtMjc5NywyMiArMTk3NCwxNSBAQCB2b2lkIFRlc3RSdW5uZXI6
OnNldE9wZW5QYW5lbEZpbGVzKEpTVmFsdWVSZWYgZmlsZXNWYWx1ZSkKIAogICAgIH0KIAotICAg
IHN0YXRpYyBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0T3BlblBhbmVsRmlsZVVSTHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIGZpbGVVUkxzLmdldCgpKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlNldE9wZW5QYW5lbEZpbGVVUkxzIiwgZmlsZVVSTHMuZ2V0KCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKEpTVmFsdWVSZWYg
ZGF0YSkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFdLQnVuZGxlUGFnZVJlZiBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIEpT
Q29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdL
QnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKSk7Ci0KLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICAvLyBGSVhNRSAoMTIzMDU4KTog
VXNlIGEgSlNDIEFQSSB0byBnZXQgYnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBleHBvc2Vk
LgotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gaWNvbkRhdGEgPSBhZG9wdFdLKFdLQnVuZGxl
Q3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRl
eHQsIGRhdGEpKTsKLQotICAgIHN0YXRpYyBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0T3BlblBhbmVsRmlsZVVSTHNNZWRpYUljb24i
KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCks
IGljb25EYXRhLmdldCgpKTsKKyAgICBhdXRvIGljb25EYXRhID0gYWRvcHRXSyhXS0J1bmRsZUNy
ZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWFpbkpTQ29udGV4dCgpLCBkYXRhKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRP
cGVuUGFuZWxGaWxlVVJMc01lZGlhSWNvbiIsIGljb25EYXRhLmdldCgpKTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKGRhdGEpOwogI2VuZGlmCkBAIC0yODIxLDExICsxOTkxLDcgQEAgdm9pZCBU
ZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxlc01lZGlhSWNvbihKU1ZhbHVlUmVmIGRhdGEpCiB2
b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFscyhKU1ZhbHVlUmVmIGNh
bGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKERpZFJlbW92ZUFsbFNlc3Np
b25DcmVkZW50aWFsc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRy
dWUpKTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsK
KyAgICBwb3N0TWVzc2FnZSgiUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzIiwgdHJ1ZSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0Nh
bGxiYWNrKCkKQEAgLTI4MzUsNDkgKzIwMDEsMzMgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlk
UmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6
OmNsZWFyRE9NQ2FjaGUoSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNsZWFyRE9NQ2FjaGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsK
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyRE9NQ2FjaGUiLCB0b1dL
KG9yaWdpbikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGVzKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhckRPTUNhY2hlcyIpKTsKLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJET01DYWNoZXMiKTsKIH0KIAogYm9vbCBUZXN0UnVubmVy
OjpoYXNET01DYWNoZShKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSGFzRE9NQ2FjaGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAg
ICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1
cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJIYXNET01DYWNoZSIsIHRv
V0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHVpbnQ2NF90IFRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6
ZShKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRE9NQ2Fj
aGVTaXplIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcob3JpZ2luKSk7Ci0gICAgV0tUeXBlUmVm
IHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0g
ICAgcmV0dXJuIFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVy
bkRhdGEpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdV
SW50NjQoIkRPTUNhY2hlU2l6ZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZShib29sIHdpbGxJbmNyZWFzZSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh3aWxsSW5jcmVhc2UpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlKCJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIiwgd2lsbEluY3Jl
YXNlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1hbmlmZXN0VGhlbihK
U1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKEdldEFw
cGxpY2F0aW9uTWFuaWZlc3RDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiR2V0QXBwbGljYXRpb25NYW5pZmVzdCIpKTsKLSAgICBXS0J1bmRsZVBv
c3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFwcGxpY2F0aW9u
TWFuaWZlc3QiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaWRHZXRBcHBsaWNhdGlvbk1hbmlm
ZXN0KCkKQEAgLTI4OTcsMjIxICsyMDQ3LDEzMCBAQCBzaXplX3QgVGVzdFJ1bm5lcjo6dXNlclNj
cmlwdEluamVjdGVkQ291bnQoKSBjb25zdAogCiB2b2lkIFRlc3RSdW5uZXI6OmluamVjdFVzZXJT
Y3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklu
amVjdFVzZXJTY3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiSW5qZWN0
VXNlclNjcmlwdCIsIHRvV0soc2NyaXB0KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nKCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVz
c2FnZUZvclRlc3RpbmciKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNlbmREaXNwbGF5
Q29uZmlndXJhdGlvbkNoYW5nZWRNZXNzYWdlRm9yVGVzdGluZyIpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQoZG91YmxlIHNlY29uZHMpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQiLCBzZWNvbmRzKTsKIH0KIAogLy8gV2ViQXV0
aG4KIHZvaWQgVGVzdFJ1bm5lcjo6YWRkVGVzdEtleVRvS2V5Y2hhaW4oSlNTdHJpbmdSZWYgcHJp
dmF0ZUtleUJhc2U2NCwgSlNTdHJpbmdSZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNh
dGlvblRhZ0Jhc2U2NCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBr
ZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcml2YXRl
S2V5IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0socHJpdmF0ZUtleUJhc2U2NCkpOwotCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0
ckxhYmVsIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNh
dGlvblRhZyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uVGFnQmFzZTY0
KSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlw
ZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICBy
YXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdl
dCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWRkVGVzdEtleVRvS2V5Y2hhaW4iKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9u
YXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUo
KSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJBZGRUZXN0S2V5VG9L
ZXljaGFpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlByaXZhdGVLZXkiLCB0
b1dLKHByaXZhdGVLZXlCYXNlNjQpIH0sCisgICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0
ckxhYmVsKSB9LAorICAgICAgICB7ICJBcHBsaWNhdGlvblRhZyIsIHRvV0soYXBwbGljYXRpb25U
YWdCYXNlNjQpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFu
VXBLZXljaGFpbihKU1N0cmluZ1JlZiBhdHRyTGFiZWwsIEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9u
TGFiZWxCYXNlNjQpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5
czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVs
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBpZiAoYXBw
bGljYXRpb25MYWJlbEJhc2U2NCkgewotICAgICAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpKTsKLSAgICAgICAg
dmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpKTsKLSAgICB9Ci0KLSAg
ICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3
VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMu
cmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAg
ICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7CisgICAgaWYgKCFhcHBsaWNhdGlv
bkxhYmVsQmFzZTY0KSB7CisgICAgICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFuVXBL
ZXljaGFpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgICAgICB7ICJBdHRyTGFiZWwi
LCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAgICAgfSkuZ2V0KCkpOworICAgICAgICByZXR1cm47
CiAgICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYW5VcEtleWNoYWluIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
RGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5
cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYW5V
cEtleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiQXR0ckxhYmVsIiwg
dG9XSyhhdHRyTGFiZWwpIH0sCisgICAgICAgIHsgIkFwcGxpY2F0aW9uTGFiZWwiLCB0b1dLKGFw
cGxpY2F0aW9uTGFiZWxCYXNlNjQpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RS
dW5uZXI6OmtleUV4aXN0c0luS2V5Y2hhaW4oSlNTdHJpbmdSZWYgYXR0ckxhYmVsLCBKU1N0cmlu
Z1JlZiBhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZh
bHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkF0dHJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGF0dHJMYWJlbCkp
OwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQXBwbGljYXRpb25MYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0
aW9uTGFiZWxCYXNlNjQpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAg
ICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5z
aXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tp
XSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQo
KTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJLZXlFeGlzdHNJbktleWNoYWlu
IikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwg
cmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsK
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZy
ZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4g
cG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIktleUV4aXN0c0luS2V5Y2hh
aW4iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0
dHJMYWJlbCkgfSwKKyAgICAgICAgeyAiQXBwbGljYXRpb25MYWJlbCIsIHRvV0soYXBwbGljYXRp
b25MYWJlbEJhc2U2NCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgVGVz
dFJ1bm5lcjo6c2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50KCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxz
Q291bnQiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZy
ZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tVSW50
NjRHZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLVUludDY0R2V0VmFsdWUoYWRvcHRXSyhzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9z
dFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2NCgiU2VydmVyVHJ1c3RFdmFsdWF0aW9u
Q2FsbGJhY2tDYWxsc0NvdW50Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGlz
bWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseShib29sIHNob3VsZERpc21pc3NBc3lu
Y2hyb25vdXNseSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTaG91bGREaXNtaXNzSmF2
YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGREaXNtaXNz
QXN5bmNocm9ub3VzbHkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNo
b3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkiLCBzaG91bGREaXNtaXNz
QXN5bmNocm9ub3VzbHkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9kYWwoKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFib3J0TW9kYWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIkFib3J0TW9kYWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkdW1wQWRDbGlj
a0F0dHJpYnV0aW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRHVtcEFkQ2xpY2tB
dHRyaWJ1dGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0
aW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2xlYXJBZENsaWNrQXR0cmlidXRpb24iKSk7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkNsZWFyQWRDbGlja0F0dHJpYnV0
aW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhy
b3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCgpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
c1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9y
VGVzdGluZyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZSgiU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciLCB2
YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVy
c2lvblVSTEZvclRlc3RpbmcoSlNTdHJpbmdSZWYgdXJsU3RyaW5nKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5n
IikpOwotICAgIGF1dG8gd3RmVVJMU3RyaW5nID0gdG9XVEZTdHJpbmcoV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh3dGZVUkxTdHJpbmcu
dXRmOCgpLmRhdGEoKSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZv
clRlc3RpbmciLAorICAgICAgICBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRv
V1RGU3RyaW5nKHVybFN0cmluZykudXRmOCgpLmRhdGEoKSkpKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIk1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiTWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nIik7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0T2Zmc2NyZWVuQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIk9mZnNjcmVlbkNhbnZhc0VuYWJsZWQiKSk7Ci0gICAgYXV0
byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tC
dW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5i
dW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7
CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIk9mZnNjcmVlbkNhbnZhc0VuYWJsZWQiLCBl
bmFibGVkKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24oKQogewot
ICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJIYXNBcHBCb3VuZFNlc3Npb24iKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBu
dWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0
dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotCi0gICAgcmV0dXJuIFdLQm9vbGVh
bkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSku
Z2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4oIkhhc0FwcEJvdW5kU2Vzc2lvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFy
QXBwQm91bmRTZXNzaW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJBcHBCb3VuZFNlc3Npb24iKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyQXBwQm91bmRTZXNzaW9uIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0QXBwQm91bmREb21haW5zKEpTVmFsdWVSZWYgb3JpZ2luQXJyYXksIEpT
VmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJh
Y2soRGlkU2V0QXBwQm91bmREb21haW5zQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwog
Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENv
bnRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSkpOworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkpTQ29u
dGV4dCgpOwogCiAgICAgaWYgKCFKU1ZhbHVlSXNBcnJheShjb250ZXh0LCBvcmlnaW5BcnJheSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0UmVmIG9yaWdpbnMgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgb3JpZ2luQXJyYXksIG51bGxwdHIpOwotICAgIHN0YXRpYyBhdXRvIGxl
bmd0aFByb3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0
aCIpKTsKLSAgICBKU1ZhbHVlUmVmIG9yaWdpbnNMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkoY29udGV4dCwgb3JpZ2lucywgbGVuZ3RoUHJvcGVydHkuZ2V0KCksIG51bGxwdHIpOwot
ICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIG9yaWdpbnNMZW5ndGhWYWx1ZSkpCi0g
ICAgICAgIHJldHVybjsKLQorICAgIGF1dG8gb3JpZ2lucyA9IEpTVmFsdWVUb09iamVjdChjb250
ZXh0LCBvcmlnaW5BcnJheSwgbnVsbHB0cik7CiAgICAgYXV0byBvcmlnaW5VUkxzID0gYWRvcHRX
SyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBhdXRvIG9yaWdpbnNMZW5ndGggPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBvcmlnaW5zTGVuZ3RoVmFs
dWUsIG51bGxwdHIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9yaWdpbnNMZW5ndGg7
ICsraSkgeworICAgIGF1dG8gb3JpZ2luc0xlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG9y
aWdpbnMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5zTGVuZ3RoOyArK2kp
IHsKICAgICAgICAgSlNWYWx1ZVJlZiBvcmlnaW5WYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlB
dEluZGV4KGNvbnRleHQsIG9yaWdpbnMsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFs
dWVJc1N0cmluZyhjb250ZXh0LCBvcmlnaW5WYWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBhdXRvIG9yaWdpbiA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgb3JpZ2luVmFsdWUsIG51bGxwdHIpKTsKKyAgICAgICAgYXV0byBvcmlnaW4gPSBjcmVhdGVK
U1N0cmluZyhjb250ZXh0LCBvcmlnaW5WYWx1ZSk7CiAgICAgICAgIHNpemVfdCBvcmlnaW5CdWZm
ZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKG9yaWdpbi5nZXQoKSkg
KyAxOwogICAgICAgICBhdXRvIG9yaWdpbkJ1ZmZlciA9IG1ha2VVbmlxdWVBcnJheTxjaGFyPihv
cmlnaW5CdWZmZXJTaXplKTsKICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhvcmlnaW4u
Z2V0KCksIG9yaWdpbkJ1ZmZlci5nZXQoKSwgb3JpZ2luQnVmZmVyU2l6ZSk7CkBAIC0zMTE5LDcg
KzIxNzgsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEFwcEJvdW5kRG9tYWlucyhKU1ZhbHVlUmVm
IG9yaWdpbkFycmF5LCBKU1ZhbHVlUmVmIGNvbXBsZXRpbwogICAgICAgICBXS0FycmF5QXBwZW5k
SXRlbShvcmlnaW5VUkxzLmdldCgpLCBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KG9yaWdpbkJ1ZmZlci5nZXQoKSkpLmdldCgpKTsKICAgICB9CiAKLSAgICBhdXRvIG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QXBwQm91bmRE
b21haW5zIikpOworICAgIGF1dG8gbWVzc2FnZU5hbWUgPSB0b1dLKCJTZXRBcHBCb3VuZERvbWFp
bnMiKTsKICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG9yaWdpblVSTHMuZ2V0KCkpOwogfQogCkBA
IC0zMTI4LDYgKzIxODcsMTEgQEAgdm9pZCBUZXN0UnVubmVyOjpkaWRTZXRBcHBCb3VuZERvbWFp
bnNDYWxsYmFjaygpCiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhEaWRTZXRBcHBCb3VuZERv
bWFpbnNDYWxsYmFja0lEKTsKIH0KIAordm9pZCBUZXN0UnVubmVyOjpwb3N0TWVzc2FnZShjb25z
dCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwogQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCBjMGExNDA5
MDVlZGYzZGRhNGE3NjFhYjYyMDdkOTdiNDM2MjA4NmJiLi5hYWViNDEwZTNlZDA3ZmI2Y2E0Zjlm
MDNiZmY3ZGUzNzIyNTI3ZjcwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gSlNXcmFwcGFibGUKICAgICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CiAK
LSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5k
b3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICBib29sIGlzSU9TRmFtaWx5KCkgY29uc3QKICAgICB7
CkBAIC0yNTMsNyArMjUzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0
UmV0dXJuc051bGwoYm9vbCBmKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwgPSBmOyB9
CiAgICAgYm9vbCB3aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdDsgfQogICAgIHZv
aWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZikgeyBtX3dp
bGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCA9IGY7IH0KLSAgICB2b2lkIHNldFdp
bGxTZW5kUmVxdWVzdEFkZHNIVFRQQm9keShKU1N0cmluZ1JlZiBib2R5KSB7IG1fd2lsbFNlbmRS
ZXF1ZXN0SFRUUEJvZHkgPSB0b1dURlN0cmluZyh0b1dLKGJvZHkpKTsgfQorICAgIHZvaWQgc2V0
V2lsbFNlbmRSZXF1ZXN0QWRkc0hUVFBCb2R5KEpTU3RyaW5nUmVmIGJvZHkpIHsgbV93aWxsU2Vu
ZFJlcXVlc3RIVFRQQm9keSA9IHRvV1RGU3RyaW5nKGJvZHkpOyB9CiAgICAgU3RyaW5nIHdpbGxT
ZW5kUmVxdWVzdEhUVFBCb2R5KCkgY29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RIVFRQ
Qm9keTsgfQogCiAgICAgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmKTsKQEAgLTI4
Niw3ICsyODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2so
KTsKICAgICB2b2lkIGNhbGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaygpOwogCi0gICAg
dm9pZCBvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVyZW5jZSwgSlNTdHJpbmdS
ZWYgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1Jl
ZiBwcmVmZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSk7CiAKICAgICAvLyBDb29raWVzIHRlc3Rp
bmcKICAgICB2b2lkIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCk7CkBAIC0zMDQsNyArMzA0
LDcgQEAgcHVibGljOgogCiAgICAgLy8gR2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRHZW9sb2Nh
dGlvblBlcm1pc3Npb24oYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNW
YWx1ZVJlZiBhbHRpdHVkZSwgSlNWYWx1ZVJlZiBhbHRpdHVkZUFjY3VyYWN5LCBKU1ZhbHVlUmVm
IGhlYWRpbmcsIEpTVmFsdWVSZWYgc3BlZWQsIEpTVmFsdWVSZWYgZmxvb3JMZXZlbCk7CisgICAg
dm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBs
b25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0
aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcs
IE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAg
ICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoSlNTdHJp
bmdSZWYgbWVzc2FnZSk7CiAgICAgYm9vbCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsK
IApAQCAtMzM1LDggKzMzNSw4IEBAIHB1YmxpYzoKICAgICBib29sIHNlY3VyZUV2ZW50SW5wdXRJ
c0VuYWJsZWQoKSBjb25zdDsKIAogICAgIEpTVmFsdWVSZWYgZmFpbE5leHROZXdDb2RlQmxvY2so
KTsKLSAgICBKU1ZhbHVlUmVmIG51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiB0aGVGdW5j
dGlvbik7Ci0gICAgSlNWYWx1ZVJlZiBuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgdGhl
RnVuY3Rpb24pOworICAgIEpTVmFsdWVSZWYgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVm
IGZ1bmN0aW9uKTsKKyAgICBKU1ZhbHVlUmVmIG5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJl
ZiBmdW5jdGlvbik7CiAKICAgICBib29sIHNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRl
ckRlbGF5KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0
ZXJEZWxheTsgfQogICAgIHZvaWQgc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVy
RGVsYXkoYm9vbCk7CkBAIC01NDksNiArNTQ5LDggQEAgcHJpdmF0ZToKIAogICAgIFdLUmV0YWlu
UHRyPFdLVVJMUmVmPiBtX3Rlc3RVUkw7IC8vIFNldCBieSBJbmplY3RlZEJ1bmRsZVBhZ2Ugb25j
ZSBwcm92aXNpb25hbCBsb2FkIHN0YXJ0cy4KIAorICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3Qg
Y2hhciogbmFtZSwgYm9vbCk7CisKICAgICBTdHJpbmcgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9k
eTsKICAgICBXVEY6OlNlY29uZHMgbV90aW1lb3V0IHsgMzBfcyB9OwogCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIu
Y3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250
cm9sbGVyLmNwcAppbmRleCA2NGFjODE5NzE1M2FhZTBhMGFiNzFlYmJjMjk0MjQ4NGEzNWU2NWFk
Li42ZTAwZDk5MjI1ZDFmMWFhYjI2MTU2Yzg5MjViMDU2NmEzNjZkNzI5IDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIu
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0
Q29udHJvbGxlci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVu
Y3Rpb25zLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3Rl
ZEJ1bmRsZVBhZ2UuaCIKICNpbmNsdWRlICJKU1RleHRJbnB1dENvbnRyb2xsZXIuaCIKQEAgLTQw
LDMwICs0MSwxNCBAQCBSZWY8VGV4dElucHV0Q29udHJvbGxlcj4gVGV4dElucHV0Q29udHJvbGxl
cjo6Y3JlYXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0SW5wdXRDb250cm9sbGVy
KTsKIH0KIAotVGV4dElucHV0Q29udHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcigpCi17Ci19
Ci0KLVRleHRJbnB1dENvbnRyb2xsZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKCkKLXsKLX0KLQog
SlNDbGFzc1JlZiBUZXh0SW5wdXRDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogewogICAgIHJl
dHVybiBKU1RleHRJbnB1dENvbnRyb2xsZXI6OnRleHRJbnB1dENvbnRyb2xsZXJDbGFzcygpOwog
fQogCi12b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQordm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwg
InRleHRJbnB1dENvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOwotfQotCi1zdGF0
aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGFycmF5KQotewotICAgIGF1dG8gbGVuZ3RoU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBpZiAoYXV0byBsZW5ndGhWYWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgbnVs
bHB0cikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIDA7CisgICAg
c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRleHRJbnB1dENvbnRyb2xsZXIiLCB0
aGlzKTsKIH0KIAogc3RhdGljIFdLQXJyYXlSZWYgY3JlYXRlQ29tcG9zaXRpb25IaWdobGlnaHRE
YXRhKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzSGlnaGxpZ2h0c1ZhbHVlKQpA
QCAtNzIsNTAgKzU3LDE5IEBAIHN0YXRpYyBXS0FycmF5UmVmIGNyZWF0ZUNvbXBvc2l0aW9uSGln
aGxpZ2h0RGF0YShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgYXV0byByZXN1bHQgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOwot
ICAgIGF1dG8ganNIaWdobGlnaHRzQXJyYXkgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc0hp
Z2hsaWdodHNWYWx1ZSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4
dCwganNIaWdobGlnaHRzQXJyYXkpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotCi0gICAgYXV0byBqc0Zyb21LZXkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiZnJvbSIpKTsKLSAgICBhdXRvIGpzTGVuZ3RoS2V5ID0gYWRvcHQoSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBhdXRvIGpzQ29sb3JLZXkg
PSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29sb3IiKSk7Ci0KLSAgICBh
dXRvIHdrRnJvbUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZy
b20iKSk7Ci0gICAgYXV0byB3a0xlbmd0aEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBhdXRvIHdrQ29sb3JLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb2xvciIpKTsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24g
PSBudWxscHRyOwotICAgICAgICBhdXRvIGpzT2JqZWN0VmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBqc0hpZ2hsaWdodHNBcnJheSwgaSwgJmV4Y2VwdGlvbik7Ci0g
ICAgICAgIGlmIChleGNlcHRpb24gfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBqc09iamVj
dFZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8ganNPYmplY3Qg
PSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc09iamVjdFZhbHVlKTsKLSAgICAgICAgYXV0byBq
c0Zyb21WYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwganNPYmplY3QsIGpzRnJv
bUtleS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmICghanNGcm9tVmFsdWUgfHwgIUpTVmFs
dWVJc051bWJlcihjb250ZXh0LCBqc0Zyb21WYWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBhdXRvIGpzTGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQsIGpzT2JqZWN0LCBqc0xlbmd0aEtleS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmICgh
anNMZW5ndGhWYWx1ZSB8fCAhSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGpzTGVuZ3RoVmFsdWUp
KQorICAgIGF1dG8gYXJyYXkgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hsaWdodHNW
YWx1ZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBh
dXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGks
IG51bGxwdHIpOworICAgICAgICBpZiAoIXZhbHVlIHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4
dCwgdmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBqc0NvbG9y
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGpzT2JqZWN0LCBqc0NvbG9yS2V5
LmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFqc0NvbG9yVmFsdWUgfHwgIUpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCBqc0NvbG9yVmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgYXV0byBjb2xvciA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
anNDb2xvclZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgIGF1dG8gd2tDb2xvciA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoY29sb3IuZ2V0KCkpKTsKLSAgICAgICAgYXV0byB3
a0Zyb20gPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwganNGcm9tVmFsdWUsIG51bGxwdHIpKSkpOwotICAgICAgICBhdXRvIHdrTGVuZ3RoID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShscm91bmQoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpz
TGVuZ3RoVmFsdWUsIG51bGxwdHIpKSkpOwotCisgICAgICAgIGF1dG8gb2JqZWN0ID0gY29uc3Rf
Y2FzdDxKU09iamVjdFJlZj4odmFsdWUpOwogICAgICAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwgd2tGcm9tS2V5LmdldCgpLCB3a0Zyb20uZ2V0KCkpOwot
ICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHdrTGVuZ3RoS2V5
LmdldCgpLCB3a0xlbmd0aC5nZXQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGlj
dGlvbmFyeS5nZXQoKSwgd2tDb2xvcktleS5nZXQoKSwgd2tDb2xvci5nZXQoKSk7CisgICAgICAg
IHNldFZhbHVlKGRpY3Rpb25hcnksICJmcm9tIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bWVy
aWNQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJmcm9tIikpKTsKKyAgICAgICAgc2V0VmFsdWUo
ZGljdGlvbmFyeSwgImxlbmd0aCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihudW1lcmljUHJvcGVy
dHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIikpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlv
bmFyeSwgImNvbG9yIiwgdG9XSyhzdHJpbmdQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJjb2xv
ciIpKS5nZXQoKSk7CiAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdCwgZGljdGlvbmFy
eS5nZXQoKSk7CiAgICAgfQotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVy
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRy
b2xsZXIuaAppbmRleCA1NThjMmU2MTE0MDgxNzg1ZTNiN2NhZTE5ZmVmZDM5NmFlYjM3YTk0Li5h
NDRjMjhlODQ0MzkxNzI5MmE5YjM3YmNiN2UyNTUyZDEyMTQ0Y2E0IDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRy
b2xsZXIuaApAQCAtMjgsMTcgKzI4LDE3IEBACiAjaW5jbHVkZSAiSlNXcmFwcGFibGUuaCIKICNp
bmNsdWRlIDx3dGYvUmVmLmg+CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4
dCogSlNDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5n
UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwog
bmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIFRleHRJbnB1dENvbnRyb2xsZXIgOiBwdWJsaWMgSlNX
cmFwcGFibGUgeworY2xhc3MgVGV4dElucHV0Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dy
YXBwYWJsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxUZXh0SW5wdXRDb250cm9sbGVyPiBj
cmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5UZXh0SW5wdXRDb250cm9sbGVyKCk7Ci0KLSAgICAvLyBK
U1dyYXBwYWJsZQotICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKIAotICAg
IHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09i
amVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3Qo
SlNDb250ZXh0UmVmKTsKIAogICAgIHZvaWQgc2V0TWFya2VkVGV4dChKU1N0cmluZ1JlZiB0ZXh0
LCBpbnQgZnJvbSwgaW50IGxlbmd0aCwgYm9vbCBzdXBwcmVzc1VuZGVybGluZSwgSlNWYWx1ZVJl
ZiBoaWdobGlnaHRzKTsKICAgICBib29sIGhhc01hcmtlZFRleHQoKTsKQEAgLTQ2LDcgKzQ2LDkg
QEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0VGV4dChKU1N0cmluZ1JlZiB0ZXh0KTsKIAogcHJp
dmF0ZToKLSAgICBUZXh0SW5wdXRDb250cm9sbGVyKCk7CisgICAgVGV4dElucHV0Q29udHJvbGxl
cigpID0gZGVmYXVsdDsKKworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0K
aW5kZXggMDI0ZmU2MDU3M2I4ZjJjNTkyZWJmZGIzNWYzYTQ0NDg1Y2RiOTc1Ni4uNWE1Yjc3ZWMx
OTRkYTVmZTNmZmY5OTEzN2NlOWFjZDI2ZGZlNGMxZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZv
bnRzQ29jb2EubW0KQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIGFjdGl2YXRlRm9udHMoKQogCiB2
b2lkIGluc3RhbGxGYWtlSGVsdmV0aWNhKFdLU3RyaW5nUmVmIGNvbmZpZ3VyYXRpb24pCiB7Ci0g
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb25maWd1cmF0aW9uU3RyaW5nID0gYWRvcHRDRihX
S1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uKSk7
CisgICAgYXV0byBjb25maWd1cmF0aW9uU3RyaW5nID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0
cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uKSk7CiAgICAgTlNVUkwgKnJl
c291cmNlVVJMID0gW3Jlc291cmNlc0RpcmVjdG9yeVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENv
bXBvbmVudDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkZha2VIZWx2ZXRpY2EtJUAudHRm
IiwgY29uZmlndXJhdGlvblN0cmluZy5nZXQoKV0gaXNEaXJlY3Rvcnk6Tk9dOwogICAgIENGRXJy
b3JSZWYgZXJyb3IgPSBudWxscHRyOwogICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9u
dHNGb3JVUkwoKF9fYnJpZGdlIENGVVJMUmVmKXJlc291cmNlVVJMLCBrQ1RGb250TWFuYWdlclNj
b3BlUHJvY2VzcywgJmVycm9yKSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbSBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdl
Q29jb2EubW0KaW5kZXggODE3NjE4MjdhODgxZDA2ZGZlNzBhOWJkMzIyNDczMmFlMTliY2YyOC4u
OTFkMjQ5YzcyN2Y2ODc1ZWQ0YTRjY2YxNTljMGY3N2Q3MmY4NWJkNSAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBh
Z2VDb2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2Nv
Y29hL0luamVjdGVkQnVuZGxlUGFnZUNvY29hLm1tCkBAIC00NywxMyArNDcsMTMgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OnBsYXRmb3JtRGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFt
ZShXS0J1bmRsZUZyYW1lUmUKIAogU3RyaW5nIEluamVjdGVkQnVuZGxlUGFnZTo6cGxhdGZvcm1S
ZXNwb25zZU1pbWVUeXBlKFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgUmV0YWlu
UHRyPE5TVVJMUmVzcG9uc2U+IG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdLVVJMUmVzcG9uc2VD
b3B5TlNVUkxSZXNwb25zZShyZXNwb25zZSkpOworICAgIGF1dG8gbnNVUkxSZXNwb25zZSA9IGFk
b3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICAgcmV0
dXJuIFtuc1VSTFJlc3BvbnNlLmdldCgpIE1JTUVUeXBlXTsKIH0KIAogdWludDY0X3QgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpyZXNwb25zZUhlYWRlckNvdW50KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9u
c2UpCiB7Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IG5zVVJMUmVzcG9uc2UgPSBhZG9w
dE5TKFdLVVJMUmVzcG9uc2VDb3B5TlNVUkxSZXNwb25zZShyZXNwb25zZSkpOworICAgIGF1dG8g
bnNVUkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJl
c3BvbnNlKSk7CiAgICAgaWYgKCFbbnNVUkxSZXNwb25zZSBpc0tpbmRPZkNsYXNzOltOU0hUVFBV
UkxSZXNwb25zZSBjbGFzc11dKQogICAgICAgICByZXR1cm4geyB9OwogCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9z
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCmluZGV4IDg3Y2NkMjFjYTlhNzdhYTJkMGEy
MWE0Y2FiNTIxY2FlZWZhOWM0YTIuLmM0MTgyMzBmM2I0ZmRlNzE5YWM2Y2NjODRiNzQyZGJlY2Ex
NGQyNGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
aW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBA
IC02Miw3ICs2Miw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlm
aWNhdGlvbkxpc3RlbmVyKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQogewotICAgIHJldHVybiBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpT
U3RyaW5nKCJpb3MiKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRU
b0NvbnNpc3RlbnRTdGF0ZSgpCkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpZCBmaW5kQWNjZXNz
aWJsZU9iamVjdEJ5SWQoaWQgb2JqLCBOU1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAKIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJs
ZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxlUGFn
ZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwor
ICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KTsKICAgICBpZCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNz
aWJpbGl0eVJvb3RPYmplY3QocGFnZSkpOwogCiAgICAgaWQgcmVzdWx0ID0gZmluZEFjY2Vzc2li
bGVPYmplY3RCeUlkKHJvb3QsIFtOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6aWRBdHRy
aWJ1dGVdKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCmluZGV4
IDUyMjM0YWE0ZDc0NzJjZGUwNzFkOWU4Njk2OTBkOTM1NTI5YTIwZDIuLmJiYzhiYjE2Yzg2NGJj
MjYxMGNmYWE2OWEwNmZkODEzYzc2OTVkMDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudElPUy5tbQpAQCAtMTM2LDExICsxMzYsNiBAQCBAZW5kCiAKIG5hbWVzcGFjZSBX
VFIgewogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKQotewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51
bGxwdHIsIDApKTsKLX0KLQogc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb25jYXRl
bmF0ZUF0dHJpYnV0ZUFuZFZhbHVlKE5TU3RyaW5nICphdHRyaWJ1dGUsIE5TU3RyaW5nICp2YWx1
ZSkKIHsKICAgICBWZWN0b3I8VW5pQ2hhcj4gYnVmZmVyKFthdHRyaWJ1dGUgbGVuZ3RoXSk7CkBA
IC0zMzAsMjcgKzMyNSwyNyBAQCBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3coKQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50
cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MoKQogewotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVzT2ZDaGlsZHJlbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQogewotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdE
ZXNjcmlwdGlvbk9mQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogewotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBAIC0zODIsNyAr
Mzc3LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmUKICAgICBpZiAoSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhhdHRyaWJ1dGUsICJBWFRleHR1YWxDb250ZXh0IikpCiAgICAgICAgIHJl
dHVybiBbW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRdIGNyZWF0ZUpTU3Ry
aW5nUmVmXTsKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQpAQCAtNDQzLDE3
ICs0MzgsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBv
cnRlZChKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQogewot
ICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3Ry
aW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigp
CkBAIC00NjMsMTMgKzQ1OCwxMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZygpCiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkK
QEAgLTQ3OSw3ICs0NzMsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdW
YWx1ZSgpCkBAIC00ODksNyArNDgzLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKCkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHQo
KSBjb25zdApAQCAtNTQ5LDcgKzU0Myw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjptYXhWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9uKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0
cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkKQEAgLTU4NCw3ICs1Nzgs
NiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNTk2LDEzICs1ODks
MTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiB7Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjM4LDcg
KzYyOSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNv
bnN0CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
cmlhRHJvcEVmZmVjdHMoKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIC8vIHBhcmFtZXRlcml6ZWQg
YXR0cmlidXRlcwpAQCAtNjU5LDcgKzY1MCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyYW5nZUZvclBvc2l0aW9uKGludCB4LCBpbnQgeSkKIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0Zv
clJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC03MTMsMzIg
KzcwNCwzMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2VsZWN0VGV4dFdpdGhDcml0ZXJpYShKU0NvbnRleAogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycygp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRl
SlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZD
b2x1bW5zKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNP
ZlZpc2libGVDZWxscygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRy
YWl0cygpCkBAIC05MDMsMjMgKzg5NCwyMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIHsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAg
IHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3Vt
ZW50VVJJKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFz
c2lzdGl2ZVRlY2hub2xvZ3lTaW11bGF0ZWRGb2N1cygpCkBAIC0xMDE2LDMxICsxMDA1LDI2IEBA
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogCiBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZT
Y3JlZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAg
LTEwNTIsMTMgKzEwMzYsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9y
ZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSgp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNvbnN0CiB7Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTA3NCwy
MiArMTA1NiwxOCBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cG9wdXBWYWx1ZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dGFrZUZvY3VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigpCiB7
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiAv
LyBUZXh0IG1hcmtlcnMKQEAgLTExMzYsNyArMTExNCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNj
ZXNzCiB7CiAgICAgaWQgdGV4dE1hcmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFy
a2VyUmFuZ2UoKTsKICAgICBpZiAoIVt0ZXh0TWFya2VycyBpc0tpbmRPZkNsYXNzOltOU0FycmF5
IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJpbmdG
b3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNl
bmRlclByb3h5SU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9p
b3MvRXZlbnRTZW5kZXJQcm94eUlPUy5tbQppbmRleCBjYWIzZjE4YjM2NTlmNDkxNmJkNTAwODc5
Mjg2ZDZhMjdjMGM5ZjkxLi5iMmUyODg0YTBiM2UzNmIyNDEyMGYyMWQzZThiZGM3MWFkZDQ3MWIw
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9F
dmVudFNlbmRlclByb3h5SU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0KQEAgLTM2LDIzICszNiwxMyBAQCBu
YW1lc3BhY2UgV1RSIHsKIAogRXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0
Q29udHJvbGxlciogdGVzdENvbnRyb2xsZXIpCiAgICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RD
b250cm9sbGVyKQotICAgICwgbV90aW1lKDApCi0gICAgLCBtX3Bvc2l0aW9uKCkKLSAgICAsIG1f
bGVmdE1vdXNlQnV0dG9uRG93bihmYWxzZSkKLSAgICAsIG1fY2xpY2tDb3VudCgwKQotICAgICwg
bV9jbGlja1RpbWUoMCkKLSAgICAsIG1fY2xpY2tQb3NpdGlvbigpCi0gICAgLCBtX2NsaWNrQnV0
dG9uKGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbikKLSAgICAsIGV2ZW50TnVtYmVyKDApCiB7
CiAgICAgVU5VU0VEX1BBUkFNKG1fdGVzdENvbnRyb2xsZXIpOwogICAgIFVOVVNFRF9QQVJBTSht
X2xlZnRNb3VzZUJ1dHRvbkRvd24pOwogICAgIFVOVVNFRF9QQVJBTShldmVudE51bWJlcik7CiB9
CiAKLUV2ZW50U2VuZGVyUHJveHk6On5FdmVudFNlbmRlclByb3h5KCkKLXsKLX0KK0V2ZW50U2Vu
ZGVyUHJveHk6On5FdmVudFNlbmRlclByb3h5KCkgPSBkZWZhdWx0OwogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKIHsKQEAgLTcw
LDE3ICs2MCwxNCBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JC
dXR0b24oaW50IGJ1dHRvbikKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24odW5z
aWduZWQgYnV0dG9uTnVtYmVyLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycykKIHsKLSAgICAv
LyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKHVuc2lnbmVk
IGJ1dHRvbk51bWJlciwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMpCiB7Ci0gICAgLy8gV3Jp
dGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8oZG91YmxlIHgs
IGRvdWJsZSB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCkBAIC05MCw3OSArNzcsNjYgQEAgdm9p
ZCBFdmVudFNlbmRlclByb3h5OjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQogCiB2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OmtleURvd24oV0tTdHJpbmdSZWYga2V5LCBXS0V2ZW50TW9kaWZp
ZXJzIG1vZGlmaWVycywgdW5zaWduZWQga2V5TG9jYXRpb24pCiB7Ci0gICAgLy8gV3JpdGUgbWUu
CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHkp
CiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VT
Y3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKGludCB4LCBpbnQgeSwgaW50IHBoYXNl
LCBpbnQgbW9tZW50dW0pCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBib29sIHBhZ2Vk
KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKwog
dm9pZCBFdmVudFNlbmRlclByb3h5OjphZGRUb3VjaFBvaW50KGludCB4LCBpbnQgeSkKIHsKLSAg
ICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVUb3VjaFBv
aW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2
b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIoV0tFdmVudE1vZGlmaWVycywg
Ym9vbCBlbmFibGUpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCiB7Ci0g
ICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCgp
CiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hN
b3ZlKCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0
b3VjaEVuZCgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94
eTo6dG91Y2hDYW5jZWwoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OmNsZWFyVG91Y2hQb2ludHMoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2
b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlbGVhc2VUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAg
ICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBv
aW50KGludCBpbmRleCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KKwogI2VuZGlmCiAKIH0gLy8g
bmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KaW5kZXgg
MjVlMGMzZDAwZTQ5YmIyYjVlZDIwM2UxOTBjZjFlY2M5MGRmM2FmNC4uMzU0YThmNjU1NWM2YzAw
MjY1ZjU2ODFhNmIzNzE1MmE4NGE1NjJjMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29t
bW9uTWFjLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9u
TWFjLmgiCiAKICNpbXBvcnQgIkpTV3JhcHBlci5oIgorI2ltcG9ydCAiU3RyaW5nRnVuY3Rpb25z
LmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAjaW1wb3J0IDxv
YmpjL3J1bnRpbWUuaD4KIApAQCAtNjEsMjYgKzYyLDIyIEBAIENsYXNzIHdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQ2xhc3MoKQogICAgIHJldHVybiBjbHM7CiB9CiAKLXN0YXRpYyBKU1Zh
bHVlUmVmIG1ha2VBcnJheVJlZkZvckFycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0FycmF5
ICphcnJheSkKK3N0YXRpYyBKU09iamVjdFJlZiBtYWtlSlNBcnJheShKU0NvbnRleHRSZWYgY29u
dGV4dCwgTlNBcnJheSAqYXJyYXkpCiB7CiAgICAgTlNVSW50ZWdlciBjb3VudCA9IGFycmF5LmNv
dW50OwogICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzW2NvdW50XTsKLQogICAgIGZvciAoTlNVSW50
ZWdlciBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIGFyZ3VtZW50c1tpXSA9IG1ha2VW
YWx1ZVJlZkZvclZhbHVlKGNvbnRleHQsIFthcnJheSBvYmplY3RBdEluZGV4OmldKTsKLQogICAg
IHJldHVybiBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBjb3VudCwgYXJndW1lbnRzLCBudWxs
cHRyKTsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnko
SlNDb250ZXh0UmVmIGNvbnRleHQsIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSkKK3N0YXRpYyBK
U09iamVjdFJlZiBtYWtlSlNPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIE5TRGljdGlvbmFy
eSAqZGljdGlvbmFyeSkKIHsKLSAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2Uo
Y29udGV4dCwgbnVsbHB0ciwgbnVsbHB0cik7Ci0KKyAgICBhdXRvIG9iamVjdCA9IEpTT2JqZWN0
TWFrZShjb250ZXh0LCBudWxscHRyLCBudWxscHRyKTsKICAgICBbZGljdGlvbmFyeSBlbnVtZXJh
dGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqa2V5LCBpZCBvYmosIEJPT0wg
KikgewogICAgICAgICBpZiAoSlNWYWx1ZVJlZiBwcm9wZXJ0eVZhbHVlID0gbWFrZVZhbHVlUmVm
Rm9yVmFsdWUoY29udGV4dCwgb2JqKSkKICAgICAgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHko
Y29udGV4dCwgb2JqZWN0LCBba2V5IGNyZWF0ZUpTU3RyaW5nUmVmXS5nZXQoKSwgcHJvcGVydHlW
YWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKICAgICB9XTsKLQogICAg
IHJldHVybiBvYmplY3Q7CiB9CiAKQEAgLTk2LDkgKzkzLDkgQEAgSlNWYWx1ZVJlZiBtYWtlVmFs
dWVSZWZGb3JWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgaWQgdmFsdWUpCiAgICAgaWYgKFt2
YWx1ZSBpc0tpbmRPZkNsYXNzOndlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MoKV0p
CiAgICAgICAgIHJldHVybiB0b0pTKGNvbnRleHQsIFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y3JlYXRlKHN0YXRpY19jYXN0PFBsYXRmb3JtVUlFbGVtZW50Pih2YWx1ZSkpLnB0cigpKTsK
ICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQotICAg
ICAgICByZXR1cm4gbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkoY29udGV4dCwgdmFsdWUpOwor
ICAgICAgICByZXR1cm4gbWFrZUpTT2JqZWN0KGNvbnRleHQsIHZhbHVlKTsKICAgICBpZiAoW3Zh
bHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIG1ha2VB
cnJheVJlZkZvckFycmF5KGNvbnRleHQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG1ha2VKU0Fy
cmF5KGNvbnRleHQsIHZhbHVlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMTE1LDI4
ICsxMTIsMTYgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKIAogICAgIGlmIChzZWFyY2hLZXkp
IHsKICAgICAgICAgaWQgc2VhcmNoS2V5UGFyYW1ldGVyID0gbmlsOwotICAgICAgICBpZiAoSlNW
YWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaEtleSkpIHsKLSAgICAgICAgICAgIGF1dG8gc2Vh
cmNoS2V5U3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hL
ZXksIG51bGxwdHIpKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hLZXlTdHJpbmcpCi0gICAgICAg
ICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gW05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmlu
Z1JlZjpzZWFyY2hLZXlTdHJpbmcuZ2V0KCldOwotICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWVJ
c09iamVjdChjb250ZXh0LCBzZWFyY2hLZXkpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlSXNTdHJp
bmcoY29udGV4dCwgc2VhcmNoS2V5KSkKKyAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9
IHRvV1RGU3RyaW5nKGNvbnRleHQsIHNlYXJjaEtleSk7CisgICAgICAgIGVsc2UgaWYgKEpTVmFs
dWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hLZXkpKSB7CiAgICAgICAgICAgICBKU09iamVjdFJl
ZiBzZWFyY2hLZXlBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hLZXksIG51
bGxwdHIpOwotICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSAwOwot
Ci0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0gYWRvcHQoSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWYg
c2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
c2VhcmNoS2V5QXJyYXksIGxlbmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAg
ICAgICAgICAgIGlmIChzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJl
cihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBz
ZWFyY2hLZXlBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotCisgICAg
ICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRl
eHQsIHNlYXJjaEtleUFycmF5KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzZWFyY2hLZXlBcnJheUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJl
ZiBzZWFyY2hLZXlWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNl
YXJjaEtleUFycmF5LCBpLCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBKU1N0cmluZ1JlZiBz
ZWFyY2hLZXlTdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaEtleVZh
bHVlLCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBpZiAoc2VhcmNoS2V5U3RyaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghc2VhcmNoS2V5UGFyYW1ldGVyKQotICAgICAgICAgICAg
ICAgICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsK
LSAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEtleVBhcmFtZXRlciBhZGRPYmplY3Q6W05TU3Ry
aW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hLZXlTdHJpbmddXTsKLSAgICAgICAgICAg
ICAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHNlYXJjaEtleVN0cmluZyk7Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNoS2V5ID0gdG9XVEZTdHJpbmcoY29udGV4
dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXksIGks
IG51bGxwdHIpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNlYXJjaEtleVBhcmFtZXRlcikKKyAg
ICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5XTsKKyAgICAgICAgICAgICAgICBbc2VhcmNoS2V5UGFyYW1ldGVyIGFkZE9iamVjdDpzZWFy
Y2hLZXldOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChzZWFyY2hLZXlQ
YXJhbWV0ZXIpCkBAIC0xNDQsMTAgKzEyOSw5IEBAIE5TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGlj
YXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlCiAg
ICAgfQogCiAgICAgaWYgKHNlYXJjaFRleHQgJiYgSlNTdHJpbmdHZXRMZW5ndGgoc2VhcmNoVGV4
dCkpCi0gICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpbTlNTdHJpbmcg
c3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFRleHRdIGZvcktleTpAIkFYU2VhcmNoVGV4dCJd
OworICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6dG9XVEZTdHJpbmco
c2VhcmNoVGV4dCkgZm9yS2V5OkAiQVhTZWFyY2hUZXh0Il07CiAKICAgICBbcGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QCh2aXNpYmxlT25seSkgZm9yS2V5OkAiQVhWaXNpYmxlT25s
eSJdOwotCiAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OkAoaW1tZWRpYXRl
RGVzY2VuZGFudHNPbmx5KSBmb3JLZXk6QCJBWEltbWVkaWF0ZURlc2NlbmRhbnRzT25seSJdOwog
CiAgICAgcmV0dXJuIHBhcmFtZXRlcml6ZWRBdHRyaWJ1dGU7CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyTWFjLm1tCmluZGV4IDkxM2FlMGY3NWNkYjRlZDVkZWRkZWI5MjVm
NmM5NTAxOGRkZDE3MDQuLmE4ODdkZTVjODVkNTAyODRmZDI0NDcxMjUxNmU4OWM5OThjM2FhNWYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0zNSw2
ICszNSw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIgog
I2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlUGFnZS5o
IgorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
UmVmQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XS0J1bmRsZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
QnVuZGxlUGFnZS5oPgpAQCAtOTYsNyArOTcsNyBAQCBzdGF0aWMgaWQgZmluZEFjY2Vzc2libGVP
YmplY3RCeUlkKGlkIG9iaiwgTlNTdHJpbmcgKmlkQXR0cmlidXRlKQogCiBSZWZQdHI8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVt
ZW50QnlJZChKU1N0cmluZ1JlZiBpZEF0dHJpYnV0ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYg
cGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBh
dXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAg
ICAgUGxhdGZvcm1VSUVsZW1lbnQgcm9vdCA9IHN0YXRpY19jYXN0PFBsYXRmb3JtVUlFbGVtZW50
PihXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpKTsKIAogICAgIFJldGFpblB0cjxpZD4g
cmVzdWx0OwpAQCAtMTExLDcgKzExMiw3IEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTCiAKIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1O
YW1lKCkKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Im1hYyIpKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygibWFjIik7CiB9CiAKIC8v
IEFYVGhyZWFkIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudE1hYy5tbQppbmRleCA1MGIzZTAyMjBiOGQxMjJhZDIyYmM5NmQ0MjRjZmQ4MzMxYjY1ZjU5
Li4yZWZmNDU0ZTY2NzkxZDY5OGY5NWJlYzc2OTRhMDlmYjJjY2YwYTExIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
bWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KQEAgLTMyLDcgKzMyLDcgQEAKICNpbXBv
cnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlLmgi
CiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKLQorI2ltcG9ydCAiSlNCYXNpY3MuaCIK
ICNpbXBvcnQgPEFwcEtpdC9OU0FjY2Vzc2liaWxpdHkuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgpA
QCAtODcsMTEgKzg3LDYgQEAgQGVuZAogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVFbXB0eUpTU3RyaW5nKCkKLXsKLSAgICByZXR1cm4g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhudWxscHRyLCAwKSk7Ci19Ci0KIFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c19j
b250cm9sbGVyOwogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KGlkIGVsZW1lbnQpCkBAIC0yMDYsNyArMjAxLDcgQEAgc3RhdGljIE5TU3RyaW5nKiBkZXNj
cmlwdGlvbk9mVmFsdWUoaWQgdmFsdWVPYmplY3QsIGlkIGVsZW1lbnQpCiAKIHN0YXRpYyBOU1N0
cmluZyAqYXR0cmlidXRlc09mRWxlbWVudChpZCBhY2Nlc3NpYmlsaXR5T2JqZWN0KQogewotICAg
IFJldGFpblB0cjxOU0FycmF5PiBhdHRyaWJ1dGVzID0gc3VwcG9ydGVkQXR0cmlidXRlcyhhY2Nl
c3NpYmlsaXR5T2JqZWN0KTsKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBzdXBwb3J0ZWRBdHRyaWJ1
dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QpOwogCiAgICAgTlNNdXRhYmxlU3RyaW5nKiBhdHRyaWJ1
dGVzU3RyaW5nID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOwogICAgIGZvciAoTlNTdHJpbmcq
IGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzLmdldCgpKSB7CkBAIC0yMjcsMTYgKzIyMiwxMyBAQCBz
dGF0aWMgTlNTdHJpbmcgKmF0dHJpYnV0ZXNPZkVsZW1lbnQoaWQgYWNjZXNzaWJpbGl0eU9iamVj
dCkKICAgICByZXR1cm4gYXR0cmlidXRlc1N0cmluZzsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLXN0YXRpYyBKU1ZhbHVlUmVmIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBWZWN0b3I8VD4gY29uc3QmIGVsZW1lbnRzKQordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VKU0FycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0
LCBjb25zdCBWZWN0b3I8VD4mIGVsZW1lbnRzKQogewotICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1
bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKLSAgICBKU09iamVjdFJl
ZiBhcnJheU9iaiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7Cisg
ICAgYXV0byBhcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwogICAg
IHNpemVfdCBlbGVtZW50Q291bnQgPSBlbGVtZW50cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBlbGVtZW50Q291bnQ7ICsraSkKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eUF0SW5kZXgoY29udGV4dCwgYXJyYXlPYmosIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBlbGVt
ZW50c1tpXS0+d3JhcHBlckNsYXNzKCksIGVsZW1lbnRzW2ldLmdldCgpKSwgMCk7Ci0KLSAgICBy
ZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNv
bnRleHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZWxlbWVudHNbaV0tPndyYXBw
ZXJDbGFzcygpLCBlbGVtZW50c1tpXS5nZXQoKSksIDApOworICAgIHJldHVybiBhcnJheTsKIH0K
IAogc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb25jYXRlbmF0ZUF0dHJpYnV0ZUFu
ZFZhbHVlKE5TU3RyaW5nKiBhdHRyaWJ1dGUsIE5TU3RyaW5nKiB2YWx1ZSkKQEAgLTI3MywyNSAr
MjY1LDEzIEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnNlbGVjdFRleHRQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yQ3JpdGVyaWEoSlNDb250ZXh0UmVmIGNvCiAgICAgCiAgICAgaWYgKHNlYXJjaFN0
cmluZ3MpIHsKICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnNlYXJjaFN0cmluZ3NQYXJhbWV0ZXIg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NT
dHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3Ms
IG51bGxwdHIpKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQotICAgICAg
ICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3Ry
aW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5n
cykpIHsKKyAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdz
KSkKKyAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDp0b1dURlN0
cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKV07CisgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgSlNPYmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNo
U3RyaW5nc0FycmF5TGVuZ3RoID0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBs
ZW5ndGhQcm9wZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJsZW5ndGgiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJy
YXksIGxlbmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlm
IChzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4
dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJj
aFN0cmluZ3NBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaFN0
cmluZ3NBcnJheUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJp
bmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBKU09iamVjdEdl
dFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxwdHIp
LCBudWxscHRyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0g
ICAgICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNT
dHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyAr
K2kpCisgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRv
V1RGU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNl
YXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0cikpXTsKICAgICAgICAgfQogICAgICAgICBbcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c2VhcmNoU3RyaW5nc1BhcmFtZXRlciBmb3JL
ZXk6QCJBWFNlbGVjdFRleHRTZWFyY2hTdHJpbmdzIl07CiAgICAgfQpAQCAtMzE0LDI0ICsyOTQs
MTMgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVGb3JDcml0ZXJpYShKU0NvbnRleHRSZWYgY28KIAogICAgIGlmIChzZWFyY2hTdHJpbmdzKSB7
CiAgICAgICAgIE5TTXV0YWJsZUFycmF5ICpzZWFyY2hTdHJpbmdzUGFyYW1ldGVyID0gW05TTXV0
YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBz
ZWFyY2hTdHJpbmdzKSkgewotICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRy
KSk7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAgICAg
ICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhK
U1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5nLmdldCgpXV07Ci0gICAgICAgIH0gZWxzZSBp
ZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7CisgICAgICAgIGlm
IChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpCisgICAgICAgICAgICBb
c2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmcoY29udGV4dCwgc2Vh
cmNoU3RyaW5ncyldOworICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNl
YXJjaFN0cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdz
LCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0
aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNW
YWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQo
KSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFs
dWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZh
bHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJh
eUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAg
IGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0Fy
cmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwotICAgICAgICAgICAgICAgIGlmIChzZWFyY2hT
dHJpbmdzU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRl
ciBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdz
U3RyaW5nLmdldCgpXV07Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB1bnNpZ25lZCBzZWFy
Y2hTdHJpbmdzQXJyYXlMZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hTdHJpbmdz
QXJyYXkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaFN0cmlu
Z3NBcnJheUxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1l
dGVyIGFkZE9iamVjdDp0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJ
bmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxwdHIpKV07CiAgICAgICAg
IH0KICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OnNlYXJjaFN0cmlu
Z3NQYXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWFyY2hUZXh0U2VhcmNoU3RyaW5ncyJdOwogICAgIH0K
QEAgLTQwMSw3ICszNzAsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJv
d0hlYWRlcnMoKSBjb25zdAogICAgIGlkIHZhbHVlID0gYXR0cmlidXRlVmFsdWUobV9lbGVtZW50
LmdldCgpLCBOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlKTsKICAg
ICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKICAgICAgICAgZWxl
bWVudHMgPSBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4odmFsdWUp
OwotICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheTxSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4+KGNvbnRleHQsIGVsZW1lbnRzKTsKKyAgICByZXR1cm4gbWFrZUpTQXJy
YXkoY29udGV4dCwgZWxlbWVudHMpOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKIH0KIApA
QCAtNDE1LDcgKzM4NCw3IEBAIEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29s
dW1uSGVhZGVycygpIGNvbnN0CiAgICAgaWQgdmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZShtX2VsZW1l
bnQuZ2V0KCksIE5TQWNjZXNzaWJpbGl0eUNvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGUp
OwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQogICAgICAg
ICBlbGVtZW50cyA9IG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pih2
YWx1ZSk7Ci0gICAgcmV0dXJuIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5PFJlZlB0cjxBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Pj4oY29udGV4dCwgZWxlbWVudHMpOworICAgIHJldHVybiBtYWtl
SlNBcnJheShjb250ZXh0LCBlbGVtZW50cyk7CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwog
fQogICAgIApAQCAtNjA3LDcgKzU3Niw3IEBAIEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dWlFbGVtZW50QXJyYXlBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyCiAKICAg
ICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+PiBlbGVtZW50czsKICAgICBn
ZXRVSUVsZW1lbnRzV2l0aEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGVsZW1lbnRzKTsKLSAgICByZXR1
cm4gY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+Pihjb250ZXh0LCBlbGVtZW50cyk7CisgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNvbnRleHQs
IGVsZW1lbnRzKTsKIH0KIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJp
YnV0ZSkgY29uc3QKQEAgLTk3Niw3ICs5NDUsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzU2VsZWN0ZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
U2VsZWN0ZWRPcHRpb25BY3RpdmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEyMjksNyArMTE5Nyw3IEBAIEpTVmFsdWVSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYShKU0NvbnRleHRS
ZWYgY29udGV4dCwKICAgICBOU0RpY3Rpb25hcnkgKnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgPSBz
ZWFyY2hUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKGNvbnRleHQsIHNlYXJj
aFN0cmluZ3MsIHN0YXJ0RnJvbSwgZGlyZWN0aW9uKTsKICAgICBpZCByZXN1bHQgPSBbbV9lbGVt
ZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFYU2VhcmNoVGV4dFdpdGhDcml0ZXJp
YSIgZm9yUGFyYW1ldGVyOnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwogICAgIGlmIChbcmVzdWx0
IGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRW
ZWN0b3JUb09iamVjdEFycmF5PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPj4o
Y29udGV4dCwgbWFrZVZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4+
KHJlc3VsdCkpOworICAgICAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgbWFrZVZlY3Rv
cjxSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4+KHJlc3VsdCkpOwogICAgIEVO
RF9BWF9PQkpDX0VYQ0VQVElPTlMKIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtMTU0NiwxMyAr
MTUxNCwxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0
SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
LSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0
cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCkBAIC0xNTYyLDggKzE1MjgsNyBAQCBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygp
CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQogICAgICAg
ICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBFTkRfQVhfT0JKQ19FWENF
UFRJT05TCi0gICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1
cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKQEAgLTE1NzMsOCArMTUzOCw3IEBAIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVS
SSgpCiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQogICAg
ICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBFTkRfQVhfT0JKQ19F
WENFUFRJT05TCi0gICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCgpCkBAIC0xNTgzLDcgKzE1NDcsNiBAQCBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkKICAgICBOU1VS
TCAqdXJsID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3Np
YmlsaXR5VVJMQXR0cmlidXRlXTsKICAgICByZXR1cm4gW1t1cmwgYWJzb2x1dGVTdHJpbmddIGNy
ZWF0ZUpTU3RyaW5nUmVmXTsgICAgCiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwotICAgIAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0xNjIyLDcgKzE1ODUsNiBAQCBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKICAgICBCRUdJTl9BWF9PQkpD
X0VYQ0VQVElPTlMKICAgICByZXN1bHQgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlJc0F0dHJp
YnV0ZVNldHRhYmxlOk5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdOwogICAgIEVORF9B
WF9PQkpDX0VYQ0VQVElPTlMKLSAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNjQ4
LDE5ICsxNjEwLDE2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVj
dGFibGUoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSgp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbigpIGNvbnN0CiB7Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTY3NSwxMyArMTYzNCwxMSBA
QCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzE0LDE3ICsxNjcxLDE0IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKCkKIAogdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKCkKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVt
b3ZlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIC8vIFRleHQg
bWFya2VycwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9tYWMvVGVzdFJ1bm5lck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggNDAzZjRmZjgzMmVlMGVmN2MzY2ZhYmRm
MGY4N2UyY2NiZTYxNGY4YS4uYWRiYjRiN2I1ZDU0ZmIxNGE5YzRiZGU4YTkyMjc1ZjExYzE0MTZk
OSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMv
VGVzdFJ1bm5lck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCkBAIC00NiwxNiArNDYsMTEgQEAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6Omluc3BlY3RvclRlc3RTdHViVVJMKCkKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgIHJldHVybiBudWxscHRyOwogI2Vsc2UKLSAgICBDRkJ1bmRs
ZVJlZiBpbnNwZWN0b3JCdW5kbGUgPSBDRkJ1bmRsZUdldEJ1bmRsZVdpdGhJZGVudGlmaWVyKENG
U1RSKCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiKSk7CisgICAgYXV0byBpbnNwZWN0b3JCdW5k
bGUgPSBDRkJ1bmRsZUdldEJ1bmRsZVdpdGhJZGVudGlmaWVyKENGU1RSKCJjb20uYXBwbGUuV2Vi
SW5zcGVjdG9yVUkiKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JCdW5kbGUpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmwgPSBhZG9wdENGKENGQnVu
ZGxlQ29weVJlc291cmNlVVJMKGluc3BlY3RvckJ1bmRsZSwgQ0ZTVFIoIlRlc3RTdHViIiksIENG
U1RSKCJodG1sIiksIE5VTEwpKTsKLSAgICBpZiAoIXVybCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBDRlN0cmluZ1JlZiB1cmxTdHJpbmcgPSBDRlVSTEdldFN0cmluZyh1cmwuZ2V0
KCkpOwotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyh1cmxTdHJp
bmcpKTsKKyAgICBhdXRvIHJlc291cmNlVVJMID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJj
ZVVSTChpbnNwZWN0b3JCdW5kbGUsIENGU1RSKCJUZXN0U3R1YiIpLCBDRlNUUigiaHRtbCIpLCBO
VUxMKSk7CisgICAgcmV0dXJuIHJlc291cmNlVVJMID8gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRo
Q0ZTdHJpbmcoQ0ZVUkxHZXRTdHJpbmcocmVzb3VyY2VVUkwuZ2V0KCkpKSkgOiBudWxscHRyOwog
I2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVu
Y3Rpb25zLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCmluZGV4
IDFiYzA1YzBhNWYzYTgwNGMwYjE0MWI4OTY5MGI3NWQyNzcxMGU3NjEuLjY3ZjM5ZTY5ZjE1NDA4
YjkyZWEzYWU5NDdjOWZhOTJmZWVhMTI4Y2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJp
bmdGdW5jdGlvbnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEw
IFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMjQsMTUgKzI0LDEyIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBTdHJpbmdGdW5jdGlvbnNfaAotI2RlZmluZSBTdHJpbmdGdW5j
dGlvbnNfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRl
ICJKU0Jhc2ljcy5oIgogI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUg
PFdlYktpdC9XS1N0cmluZy5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1N0cmluZ1ByaXZhdGUuaD4K
LSNpbmNsdWRlIDxXZWJLaXQvV0tVUkwuaD4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUg
PHN0cmluZz4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KQEAgLTQ0LDcgKzQxLDggQEAKIAog
bmFtZXNwYWNlIFdUUiB7CiAKLS8vIENvbnZlcnNpb24gZnVuY3Rpb25zCitXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdG9XS1N0cmluZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOworV1RGOjpT
dHJpbmcgdG9XVEZTdHJpbmcoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAogaW5saW5lIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKEpTU3RyaW5nUmVmIHN0cmluZykKIHsKQEAgLTU2
LDkgKzU0LDE0IEBAIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4mIHN0cmluZykKICAgICByZXR1cm4gdG9XSyhzdHJpbmcu
Z2V0KCkpOwogfQogCitpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soY29uc3Qg
Y2hhciogc3RyaW5nKQoreworICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKHN0cmluZykpOworfQorCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHRvV0soY29uc3QgV1RGOjpTdHJpbmcmIHN0cmluZykKIHsKLSAgICByZXR1cm4gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAg
IHJldHVybiB0b1dLKHN0cmluZy51dGY4KCkuZGF0YSgpKTsKIH0KIAogaW5saW5lIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiB0b0pTKFdLU3RyaW5nUmVmIHN0cmluZykKQEAgLTk5LDYgKzEwMiwy
NSBAQCBpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3QgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+JiBzdHJpbmcpCiAgICAgcmV0dXJuIHRvV1RGU3RyaW5nKHN0cmluZy5nZXQoKSk7
CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdUUgoraW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5n
KEpTU3RyaW5nUmVmIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9XVEZTdHJpbmcodG9XSyhzdHJp
bmcpKTsKK30KIAotI2VuZGlmIC8vIFN0cmluZ0Z1bmN0aW9uc19oCitpbmxpbmUgV1RGOjpTdHJp
bmcgdG9XVEZTdHJpbmcoY29uc3QgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+JiBzdHJpbmcpCit7
CisgICAgcmV0dXJuIHRvV1RGU3RyaW5nKHN0cmluZy5nZXQoKSk7Cit9CisKK2lubGluZSBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XS1N0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9XSyhjcmVhdGVKU1N0cmluZyhjb250ZXh0
LCB2YWx1ZSkuZ2V0KCkpOworfQorCitpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgLy8gRklYTUU6IENv
dWxkIG1ha2UgdGhpcyBlZmZpY2llbnQgYnkgdXNpbmcgdGhlIFdURlN0cmluZyBpbnNpZGUgT3Bh
cXVlSlNTdHJpbmcgaWYgd2Ugd2FudGVkIHRvLgorICAgIHJldHVybiB0b1dURlN0cmluZyhjcmVh
dGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVFIKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggMTM0NWM0MmMxMWU2
MmRjMDg4YzZmMmQzOGI5OWIwOTM1NjRlMDEzOC4uNzVkOWZiNjA0NDQxNDVmMWVjZGZhZWZkOTkw
OGFhZTI2ODg1NGVmMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKQEAgLTI2LDEwICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5j
bHVkZSAiRXZlbnRTZW5kZXJQcm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNs
dWRlICJUZXN0SW52b2NhdGlvbi5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KQEAgLTQ5NCw4
ICs0OTQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjLCBjb25z
dCBjaGFyKiBhcmd2W10pCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbnN0YWxsTW9ja0dhbWVw
YWRQcm92aWRlcigpOwogI2VuZGlmCiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFn
ZUdyb3VwSWRlbnRpZmllciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IldlYktpdFRlc3RSdW5uZXJQYWdlR3JvdXAiKSk7Ci0gICAgbV9wYWdlR3JvdXAuYWRvcHQoV0tQ
YWdlR3JvdXBDcmVhdGVXaXRoSWRlbnRpZmllcihwYWdlR3JvdXBJZGVudGlmaWVyLmdldCgpKSk7
CisgICAgbV9wYWdlR3JvdXAuYWRvcHQoV0tQYWdlR3JvdXBDcmVhdGVXaXRoSWRlbnRpZmllcih0
b1dLKCJXZWJLaXRUZXN0UnVubmVyUGFnZUdyb3VwIikuZ2V0KCkpKTsKIAogICAgIG1fZXZlbnRT
ZW5kZXJQcm94eSA9IG1ha2VVbmlxdWU8RXZlbnRTZW5kZXJQcm94eT4odGhpcyk7CiB9CkBAIC01
MDcsOSArNTA2LDkgQEAgV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gVGVz
dENvbnRyb2xsZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXQKICAgICBXS0NvbnRleHRDb25m
aWd1cmF0aW9uU2V0RnVsbHlTeW5jaHJvbm91c01vZGVJc0FsbG93ZWRGb3JUZXN0aW5nKGNvbmZp
Z3VyYXRpb24uZ2V0KCksIHRydWUpOwogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRJZ25v
cmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzRm9yVGVzdGluZyhjb25maWd1cmF0aW9uLmdl
dCgpLCBvcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMpOwogCi0gICAg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG92ZXJyaWRlTGFuZ3VhZ2VzID0gYWRvcHRX
SyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIG92ZXJyaWRlTGFuZ3VhZ2VzID0g
YWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICBmb3IgKGF1dG8mIGxhbmd1YWdl
IDogb3B0aW9ucy5vdmVycmlkZUxhbmd1YWdlcykKLSAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0o
b3ZlcnJpZGVMYW5ndWFnZXMuZ2V0KCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcobGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKKyAgICAgICAgV0tBcnJheUFw
cGVuZEl0ZW0ob3ZlcnJpZGVMYW5ndWFnZXMuZ2V0KCksIHRvV0sobGFuZ3VhZ2UpLmdldCgpKTsK
ICAgICBXS0NvbnRleHRDb25maWd1cmF0aW9uU2V0T3ZlcnJpZGVMYW5ndWFnZXMoY29uZmlndXJh
dGlvbi5nZXQoKSwgb3ZlcnJpZGVMYW5ndWFnZXMuZ2V0KCkpOwogCiAgICAgaWYgKG9wdGlvbnMu
c2hvdWxkRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSkgewpAQCAtODQzLDMxICs4NDIs
MjQgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZh
bHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW8KICAgICBXS1ByZWZlcmVuY2VzUmVzZXRBbGxJ
bnRlcm5hbERlYnVnRmVhdHVyZXMocHJlZmVyZW5jZXMpOwogCiAgICAgLy8gU2V0IGludGVybmFs
IGZlYXR1cmVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVmYXVsdCB2YWx1ZXMgZm9yIHRlc3Rpbmcu
Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdGZWF0dXJlID0g
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFi
bGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHBy
ZWZlcmVuY2VzLCBmYWxzZSwgYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0ZlYXR1cmUpOwogCi0gICAg
c3RhdGljIFdLU3RyaW5nUmVmIGFzeW5jRnJhbWVTY3JvbGxpbmdGZWF0dXJlID0gV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkFzeW5jRnJhbWVTY3JvbGxpbmdFbmFibGVkIik7Ci0gICAg
V0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBm
YWxzZSwgYXN5bmNGcmFtZVNjcm9sbGluZ0ZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJ
bnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgZmFsc2UsIHRvV0soIkFzeW5j
T3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJ
bnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgZmFsc2UsIHRvV0soIkFzeW5j
RnJhbWVTY3JvbGxpbmdFbmFibGVkIikuZ2V0KCkpOwogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVf
REFURSkKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlRGF0ZUZlYXR1cmUgPSBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5wdXRUeXBlRGF0ZUVuYWJsZWQiKTsKLSAgICBX
S1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRy
dWUsIGlucHV0VHlwZURhdGVGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxE
ZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZURhdGVF
bmFibGVkIikuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfREFURVRJTUVM
T0NBTCkKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlRGF0ZVRpbWVMb2NhbEZlYXR1
cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5wdXRUeXBlRGF0ZVRpbWVMb2Nh
bEVuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JL
ZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlwZURhdGVUaW1lTG9jYWxGZWF0dXJlKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMs
IHRydWUsIHRvV0soIklucHV0VHlwZURhdGVUaW1lTG9jYWxFbmFibGVkIikuZ2V0KCkpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfTU9OVEgpCi0gICAgc3RhdGljIFdLU3RyaW5nUmVm
IGlucHV0VHlwZU1vbnRoRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJ
bnB1dFR5cGVNb250aEVuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlwZU1vbnRoRmVhdHVyZSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVu
Y2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVNb250aEVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1
dFR5cGVUaW1lRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1dFR5
cGVUaW1lRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVy
ZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlVGltZUZlYXR1cmUpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1
ZSwgdG9XSygiSW5wdXRUeXBlVGltZUVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFC
TEUoSU5QVVRfVFlQRV9XRUVLKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1dFR5cGVXZWVr
RmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1dFR5cGVXZWVrRW5h
YmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShw
cmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlV2Vla0ZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5j
ZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygi
SW5wdXRUeXBlV2Vla0VuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKIAogICAgIGZvciAoY29uc3Qg
YXV0byYgaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgOiBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJl
cykKQEAgLTkyMCwyNSArOTEyLDE2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVy
ZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvCiAgICAgV0tQ
cmVmZXJlbmNlc1NldFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUocHJlZmVyZW5j
ZXMsIG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSk7CiAgICAgV0tQ
cmVmZXJlbmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
QmFja0ZvcndhcmRDYWNoZSk7CiAKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgZGVmYXVsdFRleHRF
bmNvZGluZyA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJU08tODg1OS0xIik7Ci0g
ICAgV0tQcmVmZXJlbmNlc1NldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKHByZWZlcmVuY2VzLCBk
ZWZhdWx0VGV4dEVuY29kaW5nKTsKLQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBzdGFuZGFyZEZv
bnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZXMiKTsKLSAgICBz
dGF0aWMgV0tTdHJpbmdSZWYgY3Vyc2l2ZUZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQXBwbGUgQ2hhbmNlcnkiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgZmFu
dGFzeUZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGFweXJ1cyIp
OwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBmaXhlZEZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ291cmllciIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBwaWN0
b2dyYXBoRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsZSBD
b2xvciBFbW9qaSIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBzYW5zU2VyaWZGb250RmFtaWx5
ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhlbHZldGljYSIpOwotICAgIHN0YXRp
YyBXS1N0cmluZ1JlZiBzZXJpZkZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVGltZXMiKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RGVmYXVsdFRleHRFbmNvZGluZ05h
bWUocHJlZmVyZW5jZXMsIHRvV0soIklTTy04ODU5LTEiKS5nZXQoKSk7CiAKICAgICBXS1ByZWZl
cmVuY2VzU2V0TWluaW11bUZvbnRTaXplKHByZWZlcmVuY2VzLCAwKTsKLSAgICBXS1ByZWZlcmVu
Y2VzU2V0U3RhbmRhcmRGb250RmFtaWx5KHByZWZlcmVuY2VzLCBzdGFuZGFyZEZvbnRGYW1pbHkp
OwotICAgIFdLUHJlZmVyZW5jZXNTZXRDdXJzaXZlRm9udEZhbWlseShwcmVmZXJlbmNlcywgY3Vy
c2l2ZUZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRGYW50YXN5Rm9udEZhbWlseShw
cmVmZXJlbmNlcywgZmFudGFzeUZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRGaXhl
ZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIGZpeGVkRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldFBpY3RvZ3JhcGhGb250RmFtaWx5KHByZWZlcmVuY2VzLCBwaWN0b2dyYXBoRm9udEZh
bWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFNhbnNTZXJpZkZvbnRGYW1pbHkocHJlZmVyZW5j
ZXMsIHNhbnNTZXJpZkZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRTZXJpZkZvbnRG
YW1pbHkocHJlZmVyZW5jZXMsIHNlcmlmRm9udEZhbWlseSk7CisgICAgV0tQcmVmZXJlbmNlc1Nl
dFN0YW5kYXJkRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiVGltZXMiKS5nZXQoKSk7Cisg
ICAgV0tQcmVmZXJlbmNlc1NldEN1cnNpdmVGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJB
cHBsZSBDaGFuY2VyeSIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RmFudGFzeUZvbnRG
YW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIlBhcHlydXMiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldEZpeGVkRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiQ291cmllciIpLmdldCgp
KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0UGljdG9ncmFwaEZvbnRGYW1pbHkocHJlZmVyZW5jZXMs
IHRvV0soIkFwcGxlIENvbG9yIEVtb2ppIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRT
YW5zU2VyaWZGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJIZWx2ZXRpY2EiKS5nZXQoKSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldFNlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygi
VGltZXMiKS5nZXQoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEFzeW5jaHJvbm91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKICAgICBXS1ByZWZlcmVuY2VzU2V0TWVkaWFTb3VyY2VFbmFibGVkKHByZWZlcmVuY2VzLCB0
cnVlKTsKQEAgLTEwMTAsMzggKzk5MywyNyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0
YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogCiAg
ICAgV0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50KG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgbnVsbHB0
cik7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXNldCIpKTsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiByZXNldE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIGF1dG8gcmVzZXRNZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzaG91bGRHQ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNob3VsZEdDIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gc2hvdWxk
R0NWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZ2NCZXR3ZWVuVGVzdHMpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCksIHNob3VsZEdDS2V5
LmdldCgpLCBzaG91bGRHQ1ZhbHVlLmdldCgpKTsKKyAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VC
b2R5LCAiU2hvdWxkR0MiLCBtX2djQmV0d2VlblRlc3RzKTsKIAotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBhbGxvd2VkSG9zdHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJBbGxvd2VkSG9zdHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJy
YXlSZWY+IGFsbG93ZWRIb3N0c1ZhbHVlID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgp
KTsKLSAgICBmb3IgKGF1dG8mIGhvc3QgOiBtX2FsbG93ZWRIb3N0cykgewotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tIb3N0ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhob3N0LmNfc3RyKCkpKTsKLSAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oYWxs
b3dlZEhvc3RzVmFsdWUuZ2V0KCksIHdrSG9zdC5nZXQoKSk7Ci0gICAgfQotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0ocmVzZXRNZXNzYWdlQm9keS5nZXQoKSwgYWxsb3dlZEhvc3RzS2V5LmdldCgp
LCBhbGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSk7CisgICAgYXV0byBhbGxvd2VkSG9zdHNWYWx1ZSA9
IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgZm9yIChhdXRvJiBob3N0IDog
bV9hbGxvd2VkSG9zdHMpCisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKGFsbG93ZWRIb3N0c1Zh
bHVlLmdldCgpLCB0b1dLKGhvc3QuY19zdHIoKSkuZ2V0KCkpOworICAgIHNldFZhbHVlKHJlc2V0
TWVzc2FnZUJvZHksICJBbGxvd2VkSG9zdHMiLCBhbGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSk7CiAK
ICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBheElzb2xhdGVkTW9kZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWUiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBheElzb2xhdGVkTW9kZVZhbHVlID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUobV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0ocmVzZXRNZXNzYWdlQm9keS5nZXQoKSwgYXhJc29sYXRlZE1vZGVLZXkuZ2V0
KCksIGF4SXNvbGF0ZWRNb2RlVmFsdWUuZ2V0KCkpOworICAgIHNldFZhbHVlKHJlc2V0TWVzc2Fn
ZUJvZHksICJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIiwgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0
ZWRUcmVlTW9kZSk7CiAjZW5kaWYKLSAgICAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxl
bmd0aCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSlNDT3B0aW9ucyIpKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGpzY09wdGlvbnNWYWx1ZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcob3B0aW9ucy5qc2NPcHRpb25zLmNfc3Ry
KCkpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5LmdldCgp
LCBqc2NPcHRpb25zS2V5LmdldCgpLCBqc2NPcHRpb25zVmFsdWUuZ2V0KCkpOwotICAgIH0KKwor
ICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3RoKCkpCisgICAgICAgIHNldFZhbHVlKHJl
c2V0TWVzc2FnZUJvZHksICJKU0NPcHRpb25zIiwgb3B0aW9ucy5qc2NPcHRpb25zLmNfc3RyKCkp
OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRp
dGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKTsKICNlbmRpZgogCi0gICAgV0tQYWdlUG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmll
dygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsK
KyAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygiUmVzZXQiKS5nZXQoKSwgcmVz
ZXRNZXNzYWdlQm9keS5nZXQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRTaG91bGRVc2VGb250U21v
b3RoaW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsKIApA
QCAtMTIwMyw4ICsxMTc1LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlTGl2ZURvY3Vt
ZW50c0FmdGVyVGVzdCgpCiAKICAgICBBc3luY1Rhc2soW10oKSB7CiAgICAgICAgIC8vIEFmdGVy
IGVhY2ggdGVzdCwgd2UgdXBkYXRlIHRoZSBsaXN0IG9mIGxpdmUgZG9jdW1lbnRzIHNvIHRoYXQg
d2UgY2FuIGRldGVjdCB3aGVuIGFuIGFiYW5kb25lZCBkb2N1bWVudCBmaXJzdCBzaG93ZWQgdXAu
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldExpdmVEb2N1bWVudHMiKSk7Ci0gICAg
ICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
cik7CisgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKCJHZXRMaXZlRG9j
dW1lbnRzIikuZ2V0KCksIG51bGxwdHIpOwogICAgIH0sIDVfcykucnVuKCk7CiB9CiAKQEAgLTEy
MTUsOCArMTE4Niw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNoZWNrRm9yV29ybGRMZWFrcygp
CiAKICAgICBBc3luY1Rhc2soW10oKSB7CiAgICAgICAgIC8vIFRoaXMgcnVucyBhdCB0aGUgZW5k
IG9mIGEgc2VyaWVzIG9mIHRlc3RzLiBJdCBjbGVhcnMgY2FjaGVzLCBydW5zIGEgR0MgYW5kIHRo
ZW4gZmV0Y2hlcyB0aGUgbGlzdCBvZiBkb2N1bWVudHMuCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNoZWNrRm9yV29ybGRMZWFrcyIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIHRvV0soIkNoZWNrRm9yV29ybGRMZWFrcyIpLmdldCgpLCBudWxs
cHRyKTsKICAgICB9LCAyMF9zKS5ydW4oKTsKIH0KIApAQCAtMTMyNCw2ICsxMjk0LDcgQEAgY29u
c3QgY2hhciogVGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9jZXNzTmFtZSgpCiB9CiAKICNpZiAh
UExBVEZPUk0oQ09DT0EpCisKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEFsbG93c0FueVNTTENl
cnRpZmljYXRlKGJvb2wgYWxsb3dzKQogewogICAgIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGUg
PSBhbGxvd3M7CkBAIC0xNDAwLDggKzEzNzEsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQogCiBzdGF0aWMgc3RkOjpz
dHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChjb25zdCBzdGQ6
OnN0cmluZyYgdmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVUkxSZWY+IGJhc2VVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9y
VVJMLmNfc3RyKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gcmVsYXRpdmVVUkwgPSBh
ZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIo
KSkpOworICAgIGF1dG8gYmFzZVVSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwu
Y19zdHIoKSkpOworICAgIGF1dG8gcmVsYXRpdmVVUkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0
aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIoKSkpOwogICAgIHJldHVybiB0b1NU
RChhZG9wdFdLKFdLVVJMQ29weVBhdGgocmVsYXRpdmVVUkwuZ2V0KCkpKSk7CiB9CiAKQEAgLTE0
MTUsOCArMTM4Niw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVRlc3RPcHRpb25zRnJvbVRlc3RIZWFk
ZXIoVGVzdE9wdGlvbnMmIHRlc3RPcHRpb25zLCBjb25zdCBzdGQ6CiAgICAgc3RkOjpzdHJpbmcg
ZmlsZW5hbWUgPSBhYnNvbHV0ZVBhdGg7CiAgICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpIHsKICAg
ICAgICAgLy8gR3Jvc3MuIE5lZWQgdG8gcmVkdWNlIGNvbnZlcnNpb25zIGJldHdlZW4gYWxsIHRo
ZSBzdHJpbmcgdHlwZXMgYW5kIFVSTHMuCi0gICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3
a1VSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpOwotICAgICAg
ICBmaWxlbmFtZSA9IHRlc3RQYXRoKHdrVVJMLmdldCgpKTsKKyAgICAgICAgZmlsZW5hbWUgPSB0
ZXN0UGF0aChhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7
CiAgICAgfQogCiAgICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpCkBAIC0xNjE1LDYgKzE1ODUsNyBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52
b2NhdGlvbiYgdGVzdCkKIH0KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpICYmICFQ
TEFURk9STShDT0NPQSkKKwogc3RydWN0IENvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrQ29u
dGV4dCB7CiAgICAgZXhwbGljaXQgQ29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0
KFRlc3RDb250cm9sbGVyJiBjb250cm9sbGVyKQogICAgICAgICA6IHRlc3RDb250cm9sbGVyKGNv
bnRyb2xsZXIpCkBAIC0xNjQyLDE1ICsxNjEzLDkgQEAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnRl
bnRFeHRlbnNpb25KU09OUGF0aChXS1VSTFJlZiB1cmwpCiAgICAgaWYgKHBhdGgubGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybiBwYXRoICsgIi5qc29uIjsKIAotICAgIGF1dG8gcCA9IGFkb3B0V0so
V0tVUkxDb3B5UGF0aCh1cmwpKTsKLSAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6dmVjdG9yPGNoYXI+
KFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShwLmdldCgpKSk7Ci0gICAgY29uc3Qg
YXV0byBsZW5ndGggPSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKHAuZ2V0KCksIGJ1ZmZlci5kYXRh
KCksIGJ1ZmZlci5zaXplKCkpOwotICAgIHJldHVybiBzdGQ6OnN0cmluZygiTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cyIpICsgc3RkOjpzdHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoIC0gMSkgKyAi
Lmpzb24iOworICAgIHJldHVybiAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cyIgKyB0b1NURChhZG9w
dFdLKFdLVVJMQ29weVBhdGgodXJsKSkuZ2V0KCkpICsgIi5qc29uIjsKIH0KLSNlbmRpZgogCi0j
aWYgIVBMQVRGT1JNKENPQ09BKQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB2b2lk
IFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBU
ZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKICAgICBjb25zdCBjaGFyKiBjb250ZW50RXh0ZW5zaW9u
c1BhdGggPSBsaWJyYXJ5UGF0aEZvclRlc3RpbmcoKTsKQEAgLTE2NzAsMTMgKzE2MzUsMTMgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29u
c3QgVGVzdEludm9jYXRpb24mIHRlc3QKICAgICB9CiAKICAgICBzdGQ6OnN0cmluZyBqc29uRmls
ZUNvbnRlbnRzIHtzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4oanNvbkZpbGUpLCBzdGQ6
OmlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4oKX07Ci0gICAgYXV0byBqc29uU291cmNlID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhqc29uRmlsZUNvbnRlbnRzLmNfc3Ry
KCkpKTsKKyAgICBhdXRvIGpzb25Tb3VyY2UgPSB0b1dLKGpzb25GaWxlQ29udGVudHMuY19zdHIo
KSk7CiAKLSAgICBhdXRvIHN0b3JlUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoY29udGVudEV4dGVuc2lvbnNQYXRoKSk7CisgICAgYXV0byBzdG9yZVBhdGggPSB0
b1dLKGNvbnRlbnRFeHRlbnNpb25zUGF0aCk7CiAgICAgYXV0byBleHRlbnNpb25TdG9yZSA9IGFk
b3B0V0soV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ3JlYXRlKHN0b3JlUGF0aC5nZXQoKSkp
OwogICAgIEFTU0VSVChleHRlbnNpb25TdG9yZSk7CiAKLSAgICBhdXRvIGZpbHRlcklkZW50aWZp
ZXIgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXN0Q29udGVudEV4
dGVuc2lvbiIpKTsKKyAgICBhdXRvIGZpbHRlcklkZW50aWZpZXIgPSB0b1dLKCJUZXN0Q29udGVu
dEV4dGVuc2lvbiIpOwogCiAgICAgQ29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0
IGNvbnRleHQoKnRoaXMpOwogICAgIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGUo
ZXh0ZW5zaW9uU3RvcmUuZ2V0KCksIGZpbHRlcklkZW50aWZpZXIuZ2V0KCksIGpzb25Tb3VyY2Uu
Z2V0KCksICZjb250ZXh0LCBjb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFjayk7CkBAIC0xNzAx
LDE4ICsxNjY2LDIyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2lv
bnMoKQogCiAgICAgV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZW1vdmVBbGxVc2VyQ29udGVudEZp
bHRlcnModXNlckNvbnRlbnRDb250cm9sbGVyKCkpOwogCi0gICAgYXV0byBzdG9yZVBhdGggPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnRlbnRFeHRlbnNpb25zUGF0
aCkpOworICAgIGF1dG8gc3RvcmVQYXRoID0gdG9XSyhjb250ZW50RXh0ZW5zaW9uc1BhdGgpOwog
ICAgIGF1dG8gZXh0ZW5zaW9uU3RvcmUgPSBhZG9wdFdLKFdLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUNyZWF0ZShzdG9yZVBhdGguZ2V0KCkpKTsKICAgICBBU1NFUlQoZXh0ZW5zaW9uU3RvcmUp
OwogCi0gICAgYXV0byBmaWx0ZXJJZGVudGlmaWVyID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVGVzdENvbnRlbnRFeHRlbnNpb24iKSk7CisgICAgYXV0byBmaWx0ZXJJ
ZGVudGlmaWVyID0gdG9XSygiVGVzdENvbnRlbnRFeHRlbnNpb24iKTsKIAogICAgIENvbnRlbnRF
eHRlbnNpb25TdG9yZUNhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKICAgICBXS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmUoZXh0ZW5zaW9uU3RvcmUuZ2V0KCksIGZpbHRlcklk
ZW50aWZpZXIuZ2V0KCksICZjb250ZXh0LCBjb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFjayk7
CiAgICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBub1RpbWVvdXQpOwogICAgIEFTU0VSVCghY29u
dGV4dC5maWx0ZXIpOwogfQotI2Vsc2UgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKwor
I2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpICYmICFQTEFURk9STShDT0NPQSkK
KworI2lmICFFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCiB2b2lkIFRlc3RDb250cm9sbGVy
Ojpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYp
CiB7CiB9CkBAIC0xNzIwLDE0ICsxNjg5LDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZp
Z3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJikKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2lvbnMoKQogewogfQotI2VuZGlmIC8v
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQor
CisjZW5kaWYgLy8gIUVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKIGNsYXNzIENvbW1hbmRU
b2tlbml6ZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IENvbW1hbmRUb2tlbml6ZXIoY29uc3Qg
c3RkOjpzdHJpbmcmIGlucHV0KQogICAgICAgICA6IG1faW5wdXQoaW5wdXQpCi0gICAgICAgICwg
bV9wb3NOZXh0U2VwYXJhdG9yKDApCiAgICAgewogICAgICAgICBwdW1wKCk7CiAgICAgfQpAQCAt
MTc0MCw3ICsxNzA4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgY2hhciBrU2VwYXJh
dG9yID0gJ1wnJzsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbV9pbnB1dDsKICAgICBzdGQ6OnN0
cmluZyBtX25leHQ7Ci0gICAgc2l6ZV90IG1fcG9zTmV4dFNlcGFyYXRvcjsKKyAgICBzaXplX3Qg
bV9wb3NOZXh0U2VwYXJhdG9yIHsgMCB9OwogfTsKIAogdm9pZCBDb21tYW5kVG9rZW5pemVyOjpw
dW1wKCkKQEAgLTE4MTQsOCArMTc4Miw3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3Qo
Y29uc3QgY2hhciogaW5wdXRMaW5lKQogICAgIAogICAgIFRlc3RPcHRpb25zIG9wdGlvbnMgPSB0
ZXN0T3B0aW9uc0ZvclRlc3QoY29tbWFuZCk7CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4g
d2tVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwoY29tbWFuZC5wYXRoT3JVUkwuY19zdHIoKSkp
OwotICAgIG1fY3VycmVudEludm9jYXRpb24gPSBtYWtlVW5pcXVlPFRlc3RJbnZvY2F0aW9uPih3
a1VSTC5nZXQoKSwgb3B0aW9ucyk7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IG1ha2VVbmlx
dWU8VGVzdEludm9jYXRpb24+KGFkb3B0V0soY3JlYXRlVGVzdFVSTChjb21tYW5kLnBhdGhPclVS
TC5jX3N0cigpKSkuZ2V0KCksIG9wdGlvbnMpOwogCiAgICAgaWYgKGNvbW1hbmQuc2hvdWxkRHVt
cFBpeGVscyB8fCBtX3Nob3VsZER1bXBQaXhlbHNGb3JBbGxUZXN0cykKICAgICAgICAgbV9jdXJy
ZW50SW52b2NhdGlvbi0+c2V0SXNQaXhlbFRlc3QoY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7
CkBAIC0xOTQ0LDE4ICsxOTExLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Z3B1UHJvY2Vzc0Rp
ZENyYXNoKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1Byb2Nlc3NJRCBwcm9jZXMKICAgICBzdGF0
aWNfY2FzdDxUZXN0Q29udHJvbGxlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+
Z3B1UHJvY2Vzc0RpZENyYXNoKHByb2Nlc3NJRCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6
OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBib29sIHN5bmNocm9ub3VzKQordm9pZCBUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLRGlj
dGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBib29sIHN5bmNocm9ub3VzKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBrZXlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJLZXkiKSk7Ci0gICAgV0tTdHJpbmdSZWYga2V5ID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBr
ZXlLZXkuZ2V0KCkpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7
Ci0gICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2FzdDxXS0V2ZW50TW9k
aWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9kaWZpZXJzS2V5Lmdl
dCgpKSkpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsb2NhdGlvbktleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxvY2F0aW9uIikpOwotICAgIHVu
c2lnbmVkIGxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBsb2NhdGlvbktleS5nZXQoKSkpKSk7Ci0KLSAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPmtleURvd24oa2V5LCBtb2RpZmllcnMsIGxvY2F0aW9uKTsKKyAgICBtX2V2ZW50
U2VuZGVyUHJveHktPmtleURvd24oc3RyaW5nVmFsdWUoZGljdGlvbmFyeSwgIktleSIpLCB1aW50
NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJzIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnks
ICJMb2NhdGlvbiIpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUxpdmVE
b2N1bWVudHNMaXN0KFdLQXJyYXlSZWYgbGl2ZURvY3VtZW50TGlzdCkKQEAgLTE5NjQsMTggKzE5
MjIsOCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50c0xpc3Qo
V0tBcnJheVJlZiBsaXZlRG9jdW1lbnRMaXN0KQogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgU3Ry
aW5nPiBkb2N1bWVudEluZm87CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Eb2N1bWVu
dHM7ICsraSkgewotICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChsaXZlRG9jdW1lbnRMaXN0LCBpKTsKLSAgICAgICAgaWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQo
aXRlbSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpIHsKLSAgICAgICAgICAgIFdLRGljdGlv
bmFyeVJlZiBsaXZlRG9jdW1lbnRJdGVtID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihp
dGVtKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlkS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaWQiKSk7Ci0gICAgICAgICAgICBX
S1VJbnQ2NFJlZiBkb2N1bWVudElEID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobGl2ZURvY3VtZW50SXRlbSwgaWRLZXkuZ2V0KCkpKTsKLQotICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVybCIpKTsKLSAgICAgICAgICAgIFdLU3RyaW5nUmVm
IGRvY3VtZW50VVJMID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobGl2ZURvY3VtZW50SXRlbSwgdXJsS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgICAg
IGRvY3VtZW50SW5mby5hZGQoV0tVSW50NjRHZXRWYWx1ZShkb2N1bWVudElEKSwgdG9XVEZTdHJp
bmcoZG9jdW1lbnRVUkwpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBkaWN0aW9uYXJ5
ID0gZGljdGlvbmFyeVZhbHVlKFdLQXJyYXlHZXRJdGVtQXRJbmRleChsaXZlRG9jdW1lbnRMaXN0
LCBpKSkpCisgICAgICAgICAgICBkb2N1bWVudEluZm8uYWRkKHVpbnQ2NFZhbHVlKGRpY3Rpb25h
cnksICJpZCIpLCB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAidXJsIikpKTsK
ICAgICB9CiAKICAgICBpZiAoIWRvY3VtZW50SW5mby5zaXplKCkpIHsKQEAgLTIwMDcsNjAgKzE5
NTUsMzUgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICAgICAgaWYgKG1fc3RhdGUgIT0g
UnVubmluZ1Rlc3QpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0Rp
Y3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN1Yk1lc3NhZ2VOYW1lID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBzdWJNZXNzYWdlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSB8
fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VVcCIp
KSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uIikpOwotICAgICAgICAg
ICAgdW5zaWduZWQgYnV0dG9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25LZXkuZ2V0KCkpKSkpOworICAgICAgICBhdXRvIGRp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1
Yk1lc3NhZ2VOYW1lID0gc3RyaW5nVmFsdWUoZGljdGlvbmFyeSwgIlN1Yk1lc3NhZ2UiKTsKIAot
ICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICAgICAg
ICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8V0tFdmVudE1vZGlm
aWVycz4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vZGlmaWVyc0tleS5nZXQo
KSkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3Vz
ZURvd24iKSkKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRG93bihi
dXR0b24sIG1vZGlmaWVycyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9l
dmVudFNlbmRlclByb3h5LT5tb3VzZVVwKGJ1dHRvbiwgbW9kaWZpZXJzKTsKKyAgICAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24i
KSkgeworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZURvd24odWludDY0VmFs
dWUoZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZp
ZXJzIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKKyAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsK
KyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VVcCh1aW50NjRWYWx1ZShkaWN0
aW9uYXJ5LCAiQnV0dG9uIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIktleURvd24iKSkgewotICAgICAg
ICAgICAgZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgZmFsc2UpOworICAgICAgICAgICAgZGlkUmVjZWl2ZUtleURvd25NZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKGRpY3Rpb25hcnksIGZhbHNlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VTY3JvbGxCeSIpKSB7Ci0gICAgICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdl
YlByb2Nlc3MKLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VTY3JvbGxCeSh4
LCB5KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VTY3JvbGxCeShkb3Vi
bGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpLCBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VTY3JvbGxCeVdpdGhXaGVl
bEFuZE1vbWVudHVtUGhhc2VzIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsK
LSAgICAgICAgICAgIGRvdWJsZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Rv
dWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHhLZXkuZ2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
WSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBwaGFzZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlBoYXNlIikpOwotICAgICAgICAgICAgaW50IHBoYXNlID0gc3RhdGljX2Nhc3Q8
aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGhhc2VLZXkuZ2V0KCkpKSkp
OwotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vbWVudHVtS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9tZW50dW0iKSk7Ci0gICAgICAg
ICAgICBpbnQgbW9tZW50dW0gPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBtb21lbnR1bUtleS5nZXQoKSkpKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcworICAgICAgICAgICAgYXV0byB4ID0gZG91
YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKTsKKyAgICAgICAgICAgIGF1dG8geSA9IGRvdWJsZVZh
bHVlKGRpY3Rpb25hcnksICJZIik7CisgICAgICAgICAgICBhdXRvIHBoYXNlID0gdWludDY0VmFs
dWUoZGljdGlvbmFyeSwgIlBoYXNlIik7CisgICAgICAgICAgICBhdXRvIG1vbWVudHVtID0gdWlu
dDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vbWVudHVtIik7CiAgICAgICAgICAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyh4LCB5LCBw
aGFzZSwgbW9tZW50dW0pOwotCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAt
MjA4Myw0MiArMjAwNiwyNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hy
b25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmCiAgICAgICAgIGlmICht
X3N0YXRlICE9IFJ1bm5pbmdUZXN0KQogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKG51bGxwdHIpOwogCi0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwot
ICAgICAgICBXS1N0cmluZ1JlZiBzdWJNZXNzYWdlTmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3Vi
TWVzc2FnZUtleS5nZXQoKSkpOworICAgICAgICBhdXRvIGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5
VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1Yk1lc3NhZ2VOYW1lID0gc3RyaW5n
VmFsdWUoZGljdGlvbmFyeSwgIlN1Yk1lc3NhZ2UiKTsKIAogICAgICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIktleURvd24iKSkgewotICAgICAg
ICAgICAgZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgdHJ1ZSk7Ci0KKyAgICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3duTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZShkaWN0aW9uYXJ5LCB0cnVlKTsKICAgICAgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VEb3du
IikgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNl
VXAiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1dHRvbktleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbiIpKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGJ1dHRvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYnV0dG9uS2V5LmdldCgpKSkpKTsKLQotICAgICAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICAgICAgICAgIFdLRXZl
bnRNb2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8V0tFdmVudE1vZGlmaWVycz4oV0tV
SW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vZGlmaWVyc0tleS5nZXQoKSkpKSk7Cisg
ICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAi
TW91c2VEb3duIikpIHsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VEb3du
KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFsdWUoZGljdGlvbmFy
eSwgIk1vZGlmaWVycyIpKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihu
dWxscHRyKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlByb2Nl
c3MKLSAgICAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3Nh
Z2VOYW1lLCAiTW91c2VEb3duIikpCi0gICAgICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5
LT5tb3VzZURvd24oYnV0dG9uLCBtb2RpZmllcnMpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VVcChidXR0b24sIG1vZGlmaWVycyk7
CisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1l
LCAiTW91c2VVcCIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlVXAo
dWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5
LCAiTW9kaWZpZXJzIikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51
bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZU1vdmVUbyIpKSB7Ci0gICAgICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdl
YlByb2Nlc3MKLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VNb3ZlVG8oeCwg
eSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlTW92ZVRvKGRvdWJsZVZh
bHVlKGRpY3Rpb25hcnksICJYIiksIGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJZIikpOwogICAg
ICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAK
QEAgLTIxNDQsODEgKzIwNTEsNDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5
bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZgogICAgICAgICB9
CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5h
bWUsICJNb3VzZUZvcmNlQ2hhbmdlZCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gZm9yY2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJGb3JjZSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSBmb3JjZSA9IFdLRG91YmxlR2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBmb3JjZUtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5tb3VzZUZvcmNlQ2hhbmdlZChmb3JjZSk7CisgICAgICAgICAgICBtX2V2
ZW50U2VuZGVyUHJveHktPm1vdXNlRm9yY2VDaGFuZ2VkKGRvdWJsZVZhbHVlKGRpY3Rpb25hcnks
ICJGb3JjZSIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRy
KTsKICAgICAgICAgfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogICAgICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIkNvbnRpbnVvdXNNb3Vz
ZVNjcm9sbEJ5IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAg
ICAgIGRvdWJsZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0
KCkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRv
dWJsZSB5ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7
Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYWdlZEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBhZ2VkIikpOwotICAgICAgICAgICAg
Ym9vbCBwYWdlZCA9IHN0YXRpY19jYXN0PGJvb2w+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBwYWdlZEtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8g
V2ViUHJvY2VzcworICAgICAgICAgICAgYXV0byB4ID0gZG91YmxlVmFsdWUoZGljdGlvbmFyeSwg
IlgiKTsKKyAgICAgICAgICAgIGF1dG8geSA9IGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJZIik7
CisgICAgICAgICAgICBhdXRvIHBhZ2VkID0gYm9vbGVhblZhbHVlKGRpY3Rpb25hcnksICJQYWdl
ZCIpOwogICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5jb250aW51b3VzTW91c2VTY3Jv
bGxCeSh4LCB5LCBwYWdlZCk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
bnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIkxlYXBGb3J3YXJkIikpIHsKLSAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVGltZUluTWlsbGlzZWNvbmRzIikpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgdGltZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgdGltZUtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQ
cm94eS0+bGVhcEZvcndhcmQodGltZSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHkt
PmxlYXBGb3J3YXJkKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJUaW1lSW5NaWxsaXNlY29uZHMi
KSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAg
ICAgIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiQWRkVG91Y2hQb2ludCIpKSB7Ci0g
ICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBpbnQgeCA9IHN0YXRp
Y19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkp
KSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgICAgICAgICBpbnQg
eSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlL
ZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmFkZFRvdWNo
UG9pbnQoeCwgeSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmFkZFRvdWNoUG9p
bnQodWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlgiKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwg
IlkiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIlVwZGF0ZVRvdWNoUG9pbnQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxp
bnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpbmRleEtleS5nZXQoKSkpKSk7
Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGludCB4ID0g
c3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5n
ZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAg
IGludCB5ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgeUtleS5nZXQoKSkpKSk7Ci0KKyAgICAgICAgICAgIGF1dG8gaW5kZXggPSB1aW50NjRWYWx1
ZShkaWN0aW9uYXJ5LCAiSW5kZXgiKTsKKyAgICAgICAgICAgIGF1dG8geCA9IHVpbnQ2NFZhbHVl
KGRpY3Rpb25hcnksICJYIik7CisgICAgICAgICAgICBhdXRvIHkgPSB1aW50NjRWYWx1ZShkaWN0
aW9uYXJ5LCAiWSIpOwogICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT51cGRhdGVUb3Vj
aFBvaW50KGluZGV4LCB4LCB5KTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiU2V0VG91Y2hNb2RpZmllciIpKSB7Ci0gICAgICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllciIpKTsKLSAgICAgICAgICAgIFdLRXZl
bnRNb2RpZmllcnMgbW9kaWZpZXIgPSBzdGF0aWNfY2FzdDxXS0V2ZW50TW9kaWZpZXJzPihXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9kaWZpZXJLZXkuZ2V0KCkpKSkpOwotCi0g
ICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRW5hYmxlIikpOwotICAgICAgICAgICAgYm9v
bCBlbmFibGUgPSBzdGF0aWNfY2FzdDxib29sPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgZW5hYmxlS2V5LmdldCgpKSkpKTsKLQorICAgICAgICAgICAgYXV0byBtb2RpZmllciA9
IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllciIpOworICAgICAgICAgICAgYXV0byBl
bmFibGUgPSBib29sZWFuVmFsdWUoZGljdGlvbmFyeSwgIkVuYWJsZSIpOwogICAgICAgICAgICAg
bV9ldmVudFNlbmRlclByb3h5LT5zZXRUb3VjaE1vZGlmaWVyKG1vZGlmaWVyLCBlbmFibGUpOwog
ICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5h
bWUsICJTZXRUb3VjaFBvaW50UmFkaXVzIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
UmFkaXVzWCIpKTsKLSAgICAgICAgICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2
NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUmFkaXVzWSIpKTsKLSAgICAgICAgICAgIGludCB5ID0gc3RhdGljX2Nh
c3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKSk7
Ci0KKyAgICAgICAgICAgIGF1dG8geCA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJSYWRpdXNY
Iik7CisgICAgICAgICAgICBhdXRvIHkgPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiUmFkaXVz
WSIpOwogICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5zZXRUb3VjaFBvaW50UmFkaXVz
KHgsIHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwog
ICAgICAgICB9CkBAIC0yMjQ5LDE2ICsyMTIzLDEyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRp
ZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1
Yk1lc3NhZ2VOYW1lLCAiUmVsZWFzZVRvdWNoUG9pbnQiKSkgewotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2Fz
dDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpbmRleEtleS5nZXQoKSkp
KSk7Ci0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnJlbGVhc2VUb3VjaFBvaW50KGlu
ZGV4KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+cmVsZWFzZVRvdWNoUG9pbnQo
dWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkluZGV4IikpOwogICAgICAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJDYW5jZWxUb3VjaFBvaW50
IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgICAgICAg
ICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaW5kZXhLZXkuZ2V0KCkpKSkpOwotICAgICAgICAgICAgbV9ldmVudFNlbmRlclBy
b3h5LT5jYW5jZWxUb3VjaFBvaW50KGluZGV4KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQ
cm94eS0+Y2FuY2VsVG91Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiSW5kZXgiKSk7
CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAg
IH0KICNlbmRpZgpAQCAtMjI3NSwxNCArMjE0NSwxNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpk
aWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVm
CiAgICAgfTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0QWx3YXlzQWNjZXB0Q29va2llcyIpKSB7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBh
Y2NlcHQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
V0tIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKGFjY2Vw
dCkgPyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIDoga1dLSFRUUENvb2tpZUFjY2Vw
dFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOworICAgICAgICBhdXRvIHBvbGljeSA9
IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkp
KQorICAgICAgICAgICAgPyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzCisgICAgICAg
ICAgICA6IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFp
bjsKICAgICAgICAgcmV0dXJuIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5LCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tp
ZXMiKSkgewotICAgICAgICBXS0Jvb2xlYW5SZWYgYWNjZXB0ID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShhY2NlcHQpID8ga1dLSFRUUENvb2tpZUFjY2VwdFBv
bGljeUV4Y2x1c2l2ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiA6IGtXS0hUVFBDb29raWVBY2Nl
cHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKKyAgICAgICAgYXV0byBwb2xpY3kg
PSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5
KSkKKyAgICAgICAgICAgID8ga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJv
bU1haW5Eb2N1bWVudERvbWFpbgorICAgICAgICAgICAgOiBrV0tIVFRQQ29va2llQWNjZXB0UG9s
aWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAgICAgICAgIHJldHVybiBzZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0KIApAQCAtMjQwMywxMiArMjI3NSw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEJsb2Nr
QWxsUGx1Z2lucyhib29sIHNob3VsZEJsb2NrKQogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGF1
dG8gcG9saWN5ID0gc2hvdWxkQmxvY2sgPyBrV0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5QmxvY2sg
OiBrV0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5QWxsb3c7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbmFtZU5ldHNjYXBlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbmFtZUZsYXNoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbiIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gZW1wdHlTdHJpbmcgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCIiKSk7Ci0gICAgV0tDb250ZXh0U2V0UGx1Z2luTG9hZENsaWVudFBvbGlj
eShtX2NvbnRleHQuZ2V0KCksIHBvbGljeSwgZW1wdHlTdHJpbmcuZ2V0KCksIG5hbWVOZXRzY2Fw
ZS5nZXQoKSwgZW1wdHlTdHJpbmcuZ2V0KCkpOwotICAgIFdLQ29udGV4dFNldFBsdWdpbkxvYWRD
bGllbnRQb2xpY3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ksIGVtcHR5U3RyaW5nLmdldCgpLCBu
YW1lRmxhc2guZ2V0KCksIGVtcHR5U3RyaW5nLmdldCgpKTsKKyAgICBXS0NvbnRleHRTZXRQbHVn
aW5Mb2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCB0b1dLKCIiKS5nZXQo
KSwgdG9XSygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdpbiIpLmdldCgpLCB0b1dLKCIiKS5n
ZXQoKSk7CisgICAgV0tDb250ZXh0U2V0UGx1Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRleHQu
Z2V0KCksIHBvbGljeSwgdG9XSygiIikuZ2V0KCksIHRvV0soImNvbS5tYWNyb21lZGlhLkZsYXNo
IFBsYXllci5wbHVnaW4iKS5nZXQoKSwgdG9XSygiIikuZ2V0KCkpOwogI2VuZGlmCiB9CiAKQEAg
LTI0MjMsMjkgKzIyOTEsMjQgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luU3VwcG9y
dGVkTW9kZShjb25zdCBTdHJpbmcmIG1vZGUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gZW1wdHlBcnJheSA9IGFkb3B0V0soV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsbE9y
aWdpbnMgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNwZWNpZmljT3JpZ2luID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibG9jYWxob3N0IikpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHBkZk5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJNeSBwZXJzb25hbCBQREYiKSk7Ci0gICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2lu
KG1fY29udGV4dC5nZXQoKSwgYWxsT3JpZ2lucy5nZXQoKSwgcGRmTmFtZS5nZXQoKSwgZW1wdHlB
cnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAgYXV0byBlbXB0eUFycmF5ID0gYWRv
cHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBuYW1lTmV0c2NhcGUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1Z2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtaW1lVHlwZU5ldHNjYXBlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2FwZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gbWltZVR5cGVzTmV0c2NhcGUgPSBhZG9wdFdLKFdL
TXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1pbWVUeXBlc05l
dHNjYXBlLmdldCgpLCBtaW1lVHlwZU5ldHNjYXBlLmdldCgpKTsKKyAgICBXS0NvbnRleHRBZGRT
dXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCIiKS5nZXQoKSwgdG9XSygiTXkg
cGVyc29uYWwgUERGIikuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkp
OwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVQZGYgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXQgYnVpbHQtaW4gUERGIikpOworICAgIGF1
dG8gbmFtZU5ldHNjYXBlID0gdG9XSygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdpbiIpOwor
ICAgIGF1dG8gbWltZVR5cGVzTmV0c2NhcGUgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRl
KCkpOworICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCB0b1dL
KCJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIikuZ2V0KCkpOworICAgIGF1dG8g
bmFtZVBkZiA9IHRvV0soIldlYktpdCBidWlsdC1pbiBQREYiKTsKIAogICAgIGlmIChtX3Vuc3Vw
cG9ydGVkUGx1Z2luTW9kZSA9PSAiYWxsT3JpZ2lucyIpIHsKLSAgICAgICAgV0tDb250ZXh0QWRk
U3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgYWxsT3JpZ2lucy5nZXQoKSwgbmFtZU5l
dHNjYXBlLmdldCgpLCBtaW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7
Ci0gICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIGFs
bE9yaWdpbnMuZ2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJy
YXkuZ2V0KCkpOworICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0
LmdldCgpLCB0b1dLKCIiKS5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBtaW1lVHlwZXNOZXRz
Y2FwZS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFkZFN1cHBv
cnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBuYW1lUGRmLmdldCgp
LCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChtX3Vuc3VwcG9ydGVkUGx1Z2luTW9kZSA9PSAic3BlY2lmaWNPcmln
aW4iKSB7Ci0gICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0
KCksIHNwZWNpZmljT3JpZ2luLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05l
dHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKLSAgICAgICAgV0tDb250ZXh0QWRkU3Vw
cG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgc3BlY2lmaWNPcmlnaW4uZ2V0KCksIG5hbWVQ
ZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAgICAgICBX
S0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCJsb2NhbGhv
c3QiKS5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBtaW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwg
ZW1wdHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbiht
X2NvbnRleHQuZ2V0KCksIHRvV0soImxvY2FsaG9zdCIpLmdldCgpLCBuYW1lUGRmLmdldCgpLCBl
bXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIH0KQEAgLTI0OTEsMTQgKzIzNTQsMTIgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6Y2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShXS1BhZ2VSZWYgcGFnZSwgV0tQcm8KIHsK
ICAgICBpZiAobV9zaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5vdXRwdXRUZXh0KCJjYW5BdXRoZW50aWNh
dGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlXG4iKTsKLSAgICBXS1Byb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lID0gV0tQcm90ZWN0aW9uU3BhY2VH
ZXRBdXRoZW50aWNhdGlvblNjaGVtZShwcm90ZWN0aW9uU3BhY2UpOwotICAgIAotICAgIGlmIChh
dXRoZW50aWNhdGlvblNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNj
aGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZCkgewotICAgICAgICBzdGQ6OnN0cmlu
ZyBob3N0ID0gdG9TVEQoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rp
b25TcGFjZSkpLmdldCgpKTsKKyAgICBhdXRvIHNjaGVtZSA9IFdLUHJvdGVjdGlvblNwYWNlR2V0
QXV0aGVudGljYXRpb25TY2hlbWUocHJvdGVjdGlvblNwYWNlKTsKKyAgICBpZiAoc2NoZW1lID09
IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0
aW9uUmVxdWVzdGVkKSB7CisgICAgICAgIGF1dG8gaG9zdCA9IHRvU1REKGFkb3B0V0soV0tQcm90
ZWN0aW9uU3BhY2VDb3B5SG9zdChwcm90ZWN0aW9uU3BhY2UpKSk7CiAgICAgICAgIHJldHVybiBo
b3N0ID09ICJsb2NhbGhvc3QiIHx8IGhvc3QgPT0gIjEyNy4wLjAuMSIgfHwgKG1fYWxsb3dBbnlI
VFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzICYmIG1fYWxsb3dlZEhvc3RzLmZpbmQoaG9z
dCkgIT0gbV9hbGxvd2VkSG9zdHMuZW5kKCkpOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gYXV0
aGVudGljYXRpb25TY2hlbWUgPD0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hl
bWVIVFRQRGlnZXN0IHx8IGF1dGhlbnRpY2F0aW9uU2NoZW1lID09IGtXS1Byb3RlY3Rpb25TcGFj
ZUF1dGhlbnRpY2F0aW9uU2NoZW1lT0F1dGg7CisgICAgcmV0dXJuIHNjaGVtZSA8PSBrV0tQcm90
ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdlc3QgfHwgc2NoZW1lID09IGtX
S1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lT0F1dGg7CiB9CiAKIHZvaWQgVGVz
dENvbnRyb2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24oV0tQYWdlUmVmIHBhZ2UsIFdLTmF2aWdh
dGlvblJlZiBuYXZpZ2F0aW9uKQpAQCAtMjUwNiw4ICsyMzY3LDcgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6ZGlkRmluaXNoTmF2aWdhdGlvbihXS1BhZ2VSZWYgcGFnZSwgV0tOYXZpZ2F0aW9uUmVm
IG5hdmlnYXQKICAgICBpZiAobV9zdGF0ZSAhPSBSZXNldHRpbmcpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTCA9IGFkb3B0V0soV0tGcmFtZUNvcHlV
UkwoV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpKSk7Ci0gICAgaWYgKCFXS1VSTElzRXF1YWwod2tV
UkwuZ2V0KCksIGJsYW5rVVJMKCkpKQorICAgIGlmICghV0tVUkxJc0VxdWFsKGFkb3B0V0soV0tG
cmFtZUNvcHlVUkwoV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpKSkuZ2V0KCksIGJsYW5rVVJMKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RvbmVSZXNldHRpbmcgPSB0cnVlOwpAQCAtMjUy
Nyw3ICsyMzg3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKFdLUGFnZVJlZiBwYWdlLCBXS0F1dGhlbnQKICAgICAgICAgbV9zZXJ2ZXJU
cnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQrKzsKIAogICAgICAgICBpZiAobV9hbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tDcmVkZW50
aWFsUmVmPiBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRpYWxDcmVhdGUodG9XSygiYWNj
ZXB0IHNlcnZlciB0cnVzdCIpLmdldCgpLCB0b1dLKCIiKS5nZXQoKSwga1dLQ3JlZGVudGlhbFBl
cnNpc3RlbmNlTm9uZSkpOworICAgICAgICAgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHRXSyhX
S0NyZWRlbnRpYWxDcmVhdGUodG9XSygiYWNjZXB0IHNlcnZlciB0cnVzdCIpLmdldCgpLCB0b1dL
KCIiKS5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSkpOwogICAgICAgICAgICAg
V0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlz
dGVuZXIsIGNyZWRlbnRpYWwuZ2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC0yNTQxLDkgKzI0MDEsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmIHBhZ2UsIFdLQXV0aGVudAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgc3RkOjpzdHJpbmcgaG9zdCA9IHRvU1REKGFkb3B0V0soV0tQ
cm90ZWN0aW9uU3BhY2VDb3B5SG9zdChwcm90ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CisgICAgYXV0
byBob3N0ID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHBy
b3RlY3Rpb25TcGFjZSkpLmdldCgpKTsKICAgICBpbnQgcG9ydCA9IFdLUHJvdGVjdGlvblNwYWNl
R2V0UG9ydChwcm90ZWN0aW9uU3BhY2UpOwotICAgIFN0cmluZyBtZXNzYWdlID0gbWFrZVN0cmlu
Zyhob3N0LmNfc3RyKCksICc6JywgcG9ydCwgIiAtIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSAtICIsIHRvU3RyaW5nKGF1dGhlbnRpY2F0aW9uU2NoZW1lKSwgIiAtICIpOworICAg
IFN0cmluZyBtZXNzYWdlID0gbWFrZVN0cmluZyhob3N0LCAnOicsIHBvcnQsICIgLSBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgLSAiLCB0b1N0cmluZyhhdXRoZW50aWNhdGlvblNj
aGVtZSksICIgLSAiKTsKICAgICBpZiAoIW1faGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
cykKICAgICAgICAgbWVzc2FnZS5hcHBlbmQoIlNpbXVsYXRpbmcgY2FuY2VsbGVkIGF1dGhlbnRp
Y2F0aW9uIHNoZWV0XG4iKTsKICAgICBlbHNlCkBAIC0yNTU0LDEzICsyNDE0LDExIEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VS
ZWYgcGFnZSwgV0tBdXRoZW50CiAgICAgICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3Rl
bmVyVXNlQ3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVyLCAwKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXNlcm5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1fYXV0aGVudGljYXRpb25Vc2VybmFtZS51dGY4
KCkuZGF0YSgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhc3N3b3JkID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhtX2F1dGhlbnRpY2F0aW9uUGFzc3dv
cmQudXRmOCgpLmRhdGEoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLQ3JlZGVudGlhbFJlZj4gY3Jl
ZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHVzZXJuYW1lLmdldCgpLCBwYXNz
d29yZC5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikpOworICAgIGF1
dG8gY3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHRvV0sobV9hdXRoZW50
aWNhdGlvblVzZXJuYW1lKS5nZXQoKSwgdG9XSyhtX2F1dGhlbnRpY2F0aW9uUGFzc3dvcmQpLmdl
dCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKSk7CiAgICAgV0tBdXRoZW50
aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIGNy
ZWRlbnRpYWwuZ2V0KCkpOwogfQogCi0gICAgCisKIC8vIFdLQ29udGV4dERvd25sb2FkQ2xpZW50
CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRvd25sb2FkRGlkU3RhcnQoV0tDb250ZXh0UmVmIGNv
bnRleHQsIFdLRG93bmxvYWRSZWYgZG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBA
IC0yNzA0LDkgKzI1NjIsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBl
cm1pc3Npb24oYm9vbCBlbmFibGVkKQogICAgIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RJZlBvc3NpYmxlKCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVk
ZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5
LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVl
ZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2
ZWwpCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8
ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRp
b25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRv
dWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBtX2dlb2xvY2F0aW9uUHJvdmlkZXItPnNldFBvc2l0
aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRp
dHVkZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRl
c0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkLCBwcm92aWRlc0Zsb29yTGV2
ZWwsIGZsb29yTGV2ZWwpOworICAgIG1fZ2VvbG9jYXRpb25Qcm92aWRlci0+c2V0UG9zaXRpb24o
bGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLCBhbHRpdHVkZUFjY3VyYWN5
LCBoZWFkaW5nLCBzcGVlZCwgZmxvb3JMZXZlbCk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBl
cnJvck1lc3NhZ2UpCkBAIC0yODU2LDkgKzI3MTQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpo
YW5kbGVDaGVja09mVXNlck1lZGlhUGVybWlzc2lvbkZvck9yaWdpbihXS0ZyYW1lUmVmIGZyYW1l
LAogewogICAgIGF1dG8gb3JpZ2luSGFzaCA9IHVzZXJNZWRpYU9yaWdpbkhhc2godXNlck1lZGlh
RG9jdW1lbnRPcmlnaW4sIHRvcExldmVsRG9jdW1lbnRPcmlnaW4pOwogICAgIGF1dG8gc2FsdCA9
IHNhbHRGb3JPcmlnaW4oZnJhbWUsIG9yaWdpbkhhc2gpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzYWx0U3RyaW5nID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhzYWx0LnV0ZjgoKS5kYXRhKCkpKTsKLQotICAgIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNr
U2V0VXNlck1lZGlhQWNjZXNzSW5mbyhjaGVja1JlcXVlc3QsIHNhbHRTdHJpbmcuZ2V0KCksIHNl
dHRpbmdzRm9yT3JpZ2luKG9yaWdpbkhhc2gpLnBlcnNpc3RlbnRQZXJtaXNzaW9uKCkpOworICAg
IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrU2V0VXNlck1lZGlhQWNjZXNzSW5mbyhjaGVja1Jl
cXVlc3QsIHRvV0soc2FsdCkuZ2V0KCksIHNldHRpbmdzRm9yT3JpZ2luKG9yaWdpbkhhc2gpLnBl
cnNpc3RlbnRQZXJtaXNzaW9uKCkpOwogfQogCiBib29sIFRlc3RDb250cm9sbGVyOjpoYW5kbGVE
ZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1JlcXVlc3QoV0tTZWN1cml0eU9yaWdpblJl
ZiBvcmlnaW4pCkBAIC0yOTE0LDggKzI3NzAsOCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkZWNp
ZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBXS1JldGFpblB0cjxXS0FycmF5
UmVmPiBhdWRpb0RldmljZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RBdWRpb0RldmljZVVJRHMocmVxdWVzdCkpOwotICAgICAgICBXS1JldGFpblB0cjxXS0FycmF5
UmVmPiB2aWRlb0RldmljZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RWaWRlb0RldmljZVVJRHMocmVxdWVzdCkpOworICAgICAgICBhdXRvIGF1ZGlvRGV2aWNlVUlE
cyA9IGFkb3B0V0soV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdEF1ZGlvRGV2aWNlVUlEcyhy
ZXF1ZXN0KSk7CisgICAgICAgIGF1dG8gdmlkZW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1VzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0VmlkZW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKIAogICAgICAg
ICBpZiAoIVdLQXJyYXlHZXRTaXplKHZpZGVvRGV2aWNlVUlEcy5nZXQoKSkgJiYgIVdLQXJyYXlH
ZXRTaXplKGF1ZGlvRGV2aWNlVUlEcy5nZXQoKSkpIHsKICAgICAgICAgICAgIFdLVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3REZW55KHJlcXVlc3QsIGtXS05vQ29uc3RyYWludHMpOwpAQCAtMjky
NiwxMyArMjc4MiwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkZWNpZGVQb2xpY3lGb3JVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKQogICAgICAgICBpZiAoV0tBcnJheUdl
dFNpemUodmlkZW9EZXZpY2VVSURzLmdldCgpKSkKICAgICAgICAgICAgIHZpZGVvRGV2aWNlVUlE
ID0gcmVpbnRlcnByZXRfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHZp
ZGVvRGV2aWNlVUlEcy5nZXQoKSwgMCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2aWRl
b0RldmljZVVJRCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsK
KyAgICAgICAgICAgIHZpZGVvRGV2aWNlVUlEID0gdG9XSygiIik7CiAKICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGF1ZGlvRGV2aWNlVUlEOwogICAgICAgICBpZiAoV0tBcnJheUdl
dFNpemUoYXVkaW9EZXZpY2VVSURzLmdldCgpKSkKICAgICAgICAgICAgIGF1ZGlvRGV2aWNlVUlE
ID0gcmVpbnRlcnByZXRfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGF1
ZGlvRGV2aWNlVUlEcy5nZXQoKSwgMCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhdWRp
b0RldmljZVVJRCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsK
KyAgICAgICAgICAgIGF1ZGlvRGV2aWNlVUlEID0gdG9XSygiIik7CiAKICAgICAgICAgV0tVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdEFsbG93KHJlcXVlc3QsIGF1ZGlvRGV2aWNlVUlELmdldCgp
LCB2aWRlb0RldmljZVVJRC5nZXQoKSk7CiAgICAgfQpAQCAtMzA1NiwxMiArMjkxMiw5IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKFdLTmF2aWdh
dGlvbkRhdGFSZWYgbmF2aWdhdGlvCiAgICAgaWYgKCFtX3Nob3VsZExvZ0hpc3RvcnlDbGllbnRD
YWxsYmFja3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFVSTAogICAgIGF1dG8gdXJsID0g
YWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weVVSTChuYXZpZ2F0aW9uRGF0YSkpOwogICAgIGF1
dG8gdXJsU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdl
dCgpKSkpOwotICAgIC8vIFRpdGxlCiAgICAgYXV0byB0aXRsZSA9IHRvV1RGU3RyaW5nKGFkb3B0
V0soV0tOYXZpZ2F0aW9uRGF0YUNvcHlUaXRsZShuYXZpZ2F0aW9uRGF0YSkpKTsKLSAgICAvLyBI
VFRQIG1ldGhvZAogICAgIGF1dG8gcmVxdWVzdCA9IGFkb3B0V0soV0tOYXZpZ2F0aW9uRGF0YUNv
cHlPcmlnaW5hbFJlcXVlc3QobmF2aWdhdGlvbkRhdGEpKTsKICAgICBhdXRvIG1ldGhvZCA9IHRv
V1RGU3RyaW5nKGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdC5nZXQo
KSkpKTsKIApAQCAtMzIwNiw3ICszMDU5LDcgQEAgdm9pZCBnZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllc0NhbGxiYWNrKHZvaWQqIHVzZXJEYXRhLCBXS0FycmF5UmVmIGRvbWFpbkxpc3QpCiAKICAg
ICBWZWN0b3I8U3RyaW5nPiByZXN1bHREb21haW5zOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBXS0FycmF5R2V0U2l6ZShkb21haW5MaXN0KTsgaSsrKSB7Ci0gICAgICAgIGF1dG8gZG9t
YWluID0gIHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChkb21haW5MaXN0LCBpKSk7CisgICAgICAgIGF1dG8gZG9tYWluID0gcmVpbnRlcnByZXRfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbkxpc3QsIGkpKTsKICAg
ICAgICAgYXV0byBidWZmZXIgPSBzdGQ6OnZlY3RvcjxjaGFyPihXS1N0cmluZ0dldE1heGltdW1V
VEY4Q1N0cmluZ1NpemUoZG9tYWluKSk7CiAgICAgICAgIGF1dG8gc3RyaW5nTGVuZ3RoID0gV0tT
dHJpbmdHZXRVVEY4Q1N0cmluZyhkb21haW4sIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkp
OwogCkBAIC0zOTc4LDcgKzM4MzEsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZWluaXRpYWxp
emVBcHBCb3VuZERvbWFpbnMoKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlQnVuZGxlSWRl
bnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQog
ewogICAgIEluQXBwQnJvd3NlclByaXZhY3lDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7
Ci0gICAgV0tXZWJzaXRlRGF0YVN0b3JlVXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1By
b2Nlc3MoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3RvcmUoKSwgYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhidW5kbGVJZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpKS5n
ZXQoKSwgJmNvbnRleHQsIGluQXBwQnJvd3NlclByaXZhY3lWb2lkUmVzdWx0Q2FsbGJhY2spOwor
ICAgIFdLV2Vic2l0ZURhdGFTdG9yZVVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0b3JlKCksIHRvV0soYnVuZGxlSWRlbnRp
ZmllcikuZ2V0KCksICZjb250ZXh0LCBpbkFwcEJyb3dzZXJQcml2YWN5Vm9pZFJlc3VsdENhbGxi
YWNrKTsKICAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5vVGltZW91dCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRleCBmOTRkNTdjMTQ3YjMxNmYwNzhm
YTg1ZjIyMGY0MDc2MDk0MTEzYzhjLi5mZjgzOTRlYzAzODc3YTZkYmMwZGM0YjNlNDhjMGVmNGYz
ZjNiMzM5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC0xNDAs
NyArMTQwLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIEdlb2xvY2F0aW9uLgogICAgIHZvaWQg
c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wpOwotICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNj
dXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlk
ZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3Bl
ZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9p
ZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9u
YWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9w
dGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAg
dm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdS
ZWYgZXJyb3JNZXNzYWdlKTsKICAgICB2b2lkIGhhbmRsZUdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3QoV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmKTsKICAgICBib29sIGlzR2Vv
bG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RJbnZvY2F0aW9uLmNwcAppbmRleCBhNWI2ZGQwNTU4MGFlMGMyZDk1NzA3N2RmZTQ1MGE0ODZl
NmQwMWVjLi41MDEyN2Y2Nzg0MWUwM2M1NTY4ZTE5ZTk5MTE3OTdjOGZjMmQ2YjgyIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcApAQCAtMjcsOCArMjcsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCiAKKyNpbmNs
dWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3Lmgi
Ci0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJVSVNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlVGVz
dFN1cHBvcnQuaCIKQEAgLTY2LDIxICs2NiwxNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBu
YW1lc3BhY2UgV1RSIHsKIAorc3RhdGljIHZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIq
IG5hbWUsIFdLVHlwZVJlZiBib2R5ID0gbnVsbHB0cikKK3sKKyAgICBXS1BhZ2VQb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgYm9keSk7Cit9CisKIFRlc3RJbnZvY2F0aW9u
OjpUZXN0SW52b2NhdGlvbihXS1VSTFJlZiB1cmwsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25z
KQogICAgIDogbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX3VybCh1cmwpCiAgICAgLCBtX3dh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRlc3RJbnZvY2F0
aW9uOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtX3VybC5nZXQo
KSkpOwotCi0gICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IFdLU3RyaW5nR2V0TGVuZ3RoKHVybFN0
cmluZy5nZXQoKSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gdXJsVmVjdG9yOwotICAgIHVybFZlY3Rv
ci5yZXNpemUoc3RyaW5nTGVuZ3RoICsgMSk7Ci0KLSAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5n
KHVybFN0cmluZy5nZXQoKSwgdXJsVmVjdG9yLmRhdGEoKSwgc3RyaW5nTGVuZ3RoICsgMSk7Ci0K
LSAgICBtX3VybFN0cmluZyA9IFN0cmluZyh1cmxWZWN0b3IuZGF0YSgpLCBzdHJpbmdMZW5ndGgp
OworICAgIG1fdXJsU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmco
bV91cmwuZ2V0KCkpKS5nZXQoKSk7CiAKICAgICAvLyBGSVhNRTogQXZvaWQgbXV0YXRpbmcgdGhl
IHNldHRpbmcgdmlhIGEgdGVzdCBkaXJlY3RvcnkgbGlrZSB0aGlzLgogICAgIG1fZHVtcEZyYW1l
TG9hZENhbGxiYWNrcyA9IHVybENvbnRhaW5zKCJsb2FkaW5nLyIpICYmICF1cmxDb250YWlucygi
Oi8vbG9jYWxob3N0Iik7CkBAIC0xMjksMjggKzEyNSwxMiBAQCBib29sIFRlc3RJbnZvY2F0aW9u
OjpzaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKCkgY29uc3QKIAogV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gVGVzdEludm9jYXRpb246OmNyZWF0ZVRlc3RTZXR0aW5n
c0RpY3Rpb25hcnkoKQogewotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+
IGJlZ2luVGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVzZUZsZXhpYmxlVmlld3BvcnRL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVc2VGbGV4aWJsZVZp
ZXdwb3J0IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gdXNlRmxleGlibGVWaWV3
cG9ydFZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUob3B0aW9ucygpLnVzZUZsZXhpYmxl
Vmlld3BvcnQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5
LmdldCgpLCB1c2VGbGV4aWJsZVZpZXdwb3J0S2V5LmdldCgpLCB1c2VGbGV4aWJsZVZpZXdwb3J0
VmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGR1bXBQaXhlbHNL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wUGl4ZWxzIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZHVtcFBpeGVsc1ZhbHVlID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wUGl4ZWxzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgZHVtcFBpeGVsc0tleS5nZXQoKSwgZHVtcFBp
eGVsc1ZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lb3V0
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZW91dCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gdGltZW91dFZhbHVlID0gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShtX3RpbWVvdXQubWlsbGlzZWNvbmRzKCkpKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCB0aW1lb3V0S2V5LmdldCgpLCB0aW1l
b3V0VmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVycktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyclZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUobV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJL
ZXkuZ2V0KCksIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyclZhbHVlLmdldCgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0tleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhZGRpdGlvbmFs
U3VwcG9ydGVkSW1hZ2VUeXBlc1ZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhvcHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSkp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIGFk
ZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzS2V5LmdldCgpLCBhZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlc1ZhbHVlLmdldCgpKTsKLQorICAgIGF1dG8gYmVnaW5UZXN0TWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYmVn
aW5UZXN0TWVzc2FnZUJvZHksICJVc2VGbGV4aWJsZVZpZXdwb3J0Iiwgb3B0aW9ucygpLnVzZUZs
ZXhpYmxlVmlld3BvcnQpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiRHVt
cFBpeGVscyIsIG1fZHVtcFBpeGVscyk7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJv
ZHksICJUaW1lb3V0Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdGltZW91dC5taWxsaXNlY29u
ZHMoKSkpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiRHVtcEpTQ29uc29s
ZUxvZ0luU3RkRXJyIiwgbV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOworICAgIHNldFZhbHVl
KGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCBv
cHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7CiAgICAgcmV0
dXJuIGJlZ2luVGVzdE1lc3NhZ2VCb2R5OwogfQogCkBAIC0xNjgsOSArMTQ4LDcgQEAgdm9pZCBU
ZXN0SW52b2NhdGlvbjo6aW52b2tlKCkKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2xlYXIg
b3V0IHZpc2l0ZWQgbGlua3MgaGVyZS4KIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJlZ2lu
VGVzdCIpKTsKLSAgICBhdXRvIGJlZ2luVGVzdE1lc3NhZ2VCb2R5ID0gY3JlYXRlVGVzdFNldHRp
bmdzRGljdGlvbmFyeSgpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiQmVnaW5UZXN0IiwgY3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpLmdldCgpKTsK
IAogICAgIG1fc3RhcnRlZFRlc3RpbmcgPSB0cnVlOwogCkBAIC0zMjcsMTg1ICszMDUsMTA0IEBA
IHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxl
KFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBY2siKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S1N0cmluZ1JlZiBtZXNzYWdlQm9keVN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VCb2R5U3RyaW5nLCAiQmVnaW5UZXN0IikpIHsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpLCAiQmVnaW5UZXN0Iikp
IHsKICAgICAgICAgICAgIG1fZ290SW5pdGlhbFJlc3BvbnNlID0gdHJ1ZTsKICAgICAgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ub3RpZnlEb25lKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRv
bmUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdElzUGVuZGluZ0tl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0SXNQ
ZW5kaW5nIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBwaXhlbFJlc3VsdElzUGVuZGluZ0tleS5nZXQoKSkpOwotICAgICAg
ICBtX3BpeGVsUmVzdWx0SXNQZW5kaW5nID0gV0tCb29sZWFuR2V0VmFsdWUocGl4ZWxSZXN1bHRJ
c1BlbmRpbmcpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlv
bmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgbV9waXhlbFJlc3VsdElzUGVuZGluZyA9
IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJQaXhlbFJlc3VsdElzUGVuZGlu
ZyIpOwogICAgICAgICBpZiAoIW1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpIHsKLSAgICAgICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0IikpOwotICAgICAgICAgICAgbV9w
aXhlbFJlc3VsdCA9IHN0YXRpY19jYXN0PFdLSW1hZ2VSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwaXhlbFJlc3VsdEtleS5nZXQoKSkpOworICAg
ICAgICAgICAgbV9waXhlbFJlc3VsdCA9IHN0YXRpY19jYXN0PFdLSW1hZ2VSZWY+KHZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIlBpeGVsUmVzdWx0IikpOwogICAgICAgICAgICAgQVNTRVJU
KCFtX3BpeGVsUmVzdWx0IHx8IG1fZHVtcFBpeGVscyk7CiAgICAgICAgIH0KLQotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVwYWludFJlY3RzS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVwYWludFJlY3RzIikpOwotICAgICAgICBtX3JlcGFp
bnRSZWN0cyA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCByZXBhaW50UmVjdHNLZXkuZ2V0KCkpKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9SZXN1bHRLZXkgPSAgYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXVkaW9SZXN1bHQiKSk7Ci0gICAgICAgIG1f
YXVkaW9SZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0RhdGFSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhdWRpb1Jlc3VsdEtleS5nZXQoKSkpOwotCisg
ICAgICAgIG1fcmVwYWludFJlY3RzID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4odmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiUmVwYWludFJlY3RzIikpOworICAgICAgICBtX2F1ZGlvUmVz
dWx0ID0gc3RhdGljX2Nhc3Q8V0tEYXRhUmVmPih2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJBdWRpb1Jlc3VsdCIpKTsKICAgICAgICAgZG9uZSgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJU
ZXh0T3V0cHV0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdGV4dE91dHB1dCA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIG1fdGV4dE91
dHB1dC5hcHBlbmQodG9XVEZTdHJpbmcodGV4dE91dHB1dCkpOworICAgICAgICBtX3RleHRPdXRw
dXQuYXBwZW5kKHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJEdW1wVG9TdGRFcnIiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmlu
Z1JlZiB0ZXh0T3V0cHV0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIHRvV1RGU3RyaW5nKHRleHRPdXRwdXQpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgdG9XVEZTdHJpbmco
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiQmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tC
b29sZWFuUmVmIGJlZm9yZVVubG9hZFJldHVyblZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShXS0Jvb2xlYW5HZXRWYWx1ZShiZWZvcmVVbmxvYWRS
ZXR1cm5WYWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QmVm
b3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJBZGRDaHJvbWVJbnB1dEZpZWxkIikpIHsKICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPmFkZENocm9tZUlucHV0RmllbGQo
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbEFkZENocm9tZUlucHV0RmllbGRD
YWxsYmFjayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsQWRkQ2hyb21lSW5w
dXRGaWVsZENhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlbW92ZUNocm9tZUlucHV0
RmllbGQiKSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDYWxsUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrIikpOwotICAgICAgICBXS1Bh
Z2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBw
b3N0UGFnZU1lc3NhZ2UoIkNhbGxSZW1vdmVDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkZvY3VzV2ViVmlldyIpKSB7CiAgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5tYWtlV2ViVmlld0ZpcnN0UmVzcG9u
ZGVyKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxGb2N1c1dlYlZpZXdDYWxs
YmFjayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCAwKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRm9jdXNXZWJWaWV3Q2Fs
bGJhY2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QmFja2luZ1NjYWxlRmFjdG9yIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5
cGVJRCgpKTsKLSAgICAgICAgZG91YmxlIGJhY2tpbmdTY2FsZUZhY3RvciA9IFdLRG91YmxlR2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFdL
UGFnZVNldEN1c3RvbUJhY2tpbmdTY2FsZUZhY3RvcihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBiYWNraW5nU2NhbGVGYWN0b3IpOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjayIp
KTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCAwKTsKKyAgICAgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9yKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGRvdWJsZVZhbHVlKG1l
c3NhZ2VCb2R5KSk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbFNldEJhY2tpbmdTY2Fs
ZUZhY3RvckNhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNpbXVsYXRlV2ViTm90aWZp
Y2F0aW9uQ2xpY2siKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBub3RpZmljYXRpb25J
RCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5
KSk7CisgICAgICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0gdWludDY0VmFsdWUobWVzc2Fn
ZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2ltdWxhdGVXZWJO
b3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dEFkZHNWaXNpdGVkTGlua3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGVu
YWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBXS1BhZ2VTZXRBZGRzVmlzaXRlZExpbmtzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSykpOworICAg
ICAgICBXS1BhZ2VTZXRBZGRzVmlzaXRlZExpbmtzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRHZW9sb2NhdGlvblBlcm1pc3Npb24iKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uKFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSykpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25h
cnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVm
PihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxhdGl0
dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsYXRpdHVk
ZSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgbGF0aXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdLRG91
YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
bGF0aXR1ZGVLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgbGF0aXR1ZGUgPSBXS0RvdWJs
ZUdldFZhbHVlKGxhdGl0dWRlV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBsb25naXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImxvbmdpdHVkZSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgbG9uZ2l0dWRlV0sgPSBzdGF0aWNf
Y2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGxvbmdpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBsb25naXR1
ZGUgPSBXS0RvdWJsZUdldFZhbHVlKGxvbmdpdHVkZVdLKTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gYWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImFjY3VyYWN5IikpOwotICAgICAgICBXS0RvdWJsZVJlZiBhY2N1cmFjeVdL
ID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBhY2N1cmFjeUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJs
ZSBhY2N1cmFjeSA9IFdLRG91YmxlR2V0VmFsdWUoYWNjdXJhY3lXSyk7Ci0KLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1ZGUiKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiBwcm92aWRlc0FsdGl0dWRlV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92
aWRlc0FsdGl0dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92aWRlc0FsdGl0dWRl
ID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNBbHRpdHVkZVdLKTsKLQotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImFsdGl0dWRlIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBhbHRp
dHVkZVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhbHRpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAgICAg
IGRvdWJsZSBhbHRpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUoYWx0aXR1ZGVXSyk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeUtleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNBbHRpdHVk
ZUFjY3VyYWN5IikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNBbHRpdHVkZUFjY3Vy
YWN5V0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lLZXlXSy5n
ZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSA9IFdLQm9vbGVh
bkdldFZhbHVlKHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLKTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gYWx0aXR1ZGVBY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICAgICAgV0tE
b3VibGVSZWYgYWx0aXR1ZGVBY2N1cmFjeVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhbHRpdHVkZUFj
Y3VyYWN5S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3kgPSBX
S0RvdWJsZUdldFZhbHVlKGFsdGl0dWRlQWNjdXJhY3lXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzSGVhZGluZ0tleVdLID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNIZWFkaW5nIikpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgcHJvdmlkZXNIZWFkaW5nV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc0hlYWRp
bmdLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzSGVhZGluZyA9IFdLQm9vbGVh
bkdldFZhbHVlKHByb3ZpZGVzSGVhZGluZ1dLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaGVhZGluZ0tleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiaGVhZGluZyIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgaGVhZGluZ1dLID0gc3RhdGlj
X2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBoZWFkaW5nS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGhlYWRpbmcg
PSBXS0RvdWJsZUdldFZhbHVlKGhlYWRpbmdXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHByb3ZpZGVzU3BlZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoInByb3ZpZGVzU3BlZWQiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwcm92
aWRlc1NwZWVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc1NwZWVkS2V5V0suZ2V0KCkp
KTsKLSAgICAgICAgYm9vbCBwcm92aWRlc1NwZWVkID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlk
ZXNTcGVlZFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3BlZWRLZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInNwZWVkIikpOwotICAg
ICAgICBXS0RvdWJsZVJlZiBzcGVlZFdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzcGVlZEtleVdLLmdl
dCgpKSk7Ci0gICAgICAgIGRvdWJsZSBzcGVlZCA9IFdLRG91YmxlR2V0VmFsdWUoc3BlZWRXSyk7
Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzRmxvb3JMZXZlbEtl
eVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNGbG9v
ckxldmVsIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNGbG9vckxldmVsV0sgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc0Zsb29yTGV2ZWxLZXlXSy5nZXQoKSkpOwotICAgICAg
ICBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCA9IFdLQm9vbGVhbkdldFZhbHVlKHByb3ZpZGVzRmxv
b3JMZXZlbFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmxvb3JMZXZl
bEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZmxvb3JMZXZl
bCIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgZmxvb3JMZXZlbFdLID0gc3RhdGljX2Nhc3Q8V0tE
b3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBmbG9vckxldmVsS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGZsb29yTGV2ZWwgPSBX
S0RvdWJsZUdldFZhbHVlKGZsb29yTGV2ZWxXSyk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1
ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgcHJvdmlkZXNBbHRpdHVk
ZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHBy
b3ZpZGVzU3BlZWQsIHNwZWVkLCBwcm92aWRlc0Zsb29yTGV2ZWwsIGZsb29yTGV2ZWwpOworICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gbGF0aXR1ZGUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJsYXRpdHVkZSIpOworICAgICAgICBhdXRvIGxvbmdpdHVkZSA9IGRvdWJsZVZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImxvbmdpdHVkZSIpOworICAgICAgICBhdXRvIGFj
Y3VyYWN5ID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiYWNjdXJhY3kiKTsK
KyAgICAgICAgYXV0byBhbHRpdHVkZSA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiYWx0aXR1ZGUiKTsKKyAgICAgICAgYXV0byBhbHRpdHVkZUFjY3VyYWN5ID0g
b3B0aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJhbHRpdHVkZUFjY3Vy
YWN5Iik7CisgICAgICAgIGF1dG8gaGVhZGluZyA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiaGVhZGluZyIpOworICAgICAgICBhdXRvIHNwZWVkID0gb3B0aW9u
YWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJzcGVlZCIpOworICAgICAgICBh
dXRvIGZsb29yTGV2ZWwgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgImZsb29yTGV2ZWwiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBh
bHRpdHVkZSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQsIGZsb29yTGV2ZWwpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxl
RXJyb3IiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
U3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1Jl
ZiBlcnJvck1lc3NhZ2UgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxh
YmxlRXJyb3IoZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlck1lZGlh
UGVybWlzc2lvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdL
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKFdLQm9vbGVhbkdl
dFZhbHVlKGVuYWJsZWRXSykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0VXNlck1lZGlhUGVybWlzc2lvbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTE1LDExNyArNDEyLDY2IEBAIHZvaWQgVGVzdEludm9j
YXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1l
c3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbiIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9u
YXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBlcm1pc3Npb25LZXlXSyA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBlcm1pc3Npb24iKSk7Ci0gICAgICAgIFdL
Qm9vbGVhblJlZiBwZXJtaXNzaW9uV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwZXJtaXNzaW9uS2V5
V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwZXJtaXNzaW9uID0gV0tCb29sZWFuR2V0VmFsdWUo
cGVybWlzc2lvbldLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2lu
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwot
ICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgb3JpZ2luS2V5
LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdp
bktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdp
biIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHBhcmVudE9yaWdpbktleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBw
ZXJtaXNzaW9uID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgInBlcm1pc3Np
b24iKTsKKyAgICAgICAgYXV0byBvcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIm9yaWdpbiIpOworICAgICAgICBhdXRvIHBhcmVudE9yaWdpbldLID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGFyZW50T3JpZ2luIik7CiAgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lv
bkZvck9yaWdpbihwZXJtaXNzaW9uLCBvcmlnaW5XSywgcGFyZW50T3JpZ2luV0spOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmln
aW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIG9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBvcmlnaW5LZXkuZ2V0KCkpKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgICAgICBX
S1N0cmluZ1JlZiBwYXJlbnRPcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGFyZW50T3JpZ2lu
S2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gb3JpZ2luV0sg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJvcmlnaW4iKTsKKyAgICAgICAg
YXV0byBwYXJlbnRPcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
InBhcmVudE9yaWdpbiIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVz
ZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKG9yaWdpbldLLCBwYXJl
bnRPcmlnaW5XSyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEN1c3RvbVBvbGljeURlbGVnYXRl
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlZEtleVdLID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZW5hYmxlZCIpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGVuYWJsZWRLZXlXSy5nZXQoKSkp
OwotICAgICAgICBib29sIGVuYWJsZWQgPSBXS0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVkV0spOwot
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJtaXNzaXZlS2V5V0sgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwZXJtaXNzaXZlIikpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgcGVybWlzc2l2ZVdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGVybWlzc2l2
ZUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcGVybWlzc2l2ZSA9IFdLQm9vbGVhbkdldFZh
bHVlKHBlcm1pc3NpdmVXSyk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGVuYWJsZWQgPSBi
b29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiZW5hYmxlZCIpOworICAgICAgICBh
dXRvIHBlcm1pc3NpdmUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGVy
bWlzc2l2ZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0Q3VzdG9t
UG9saWN5RGVsZWdhdGUoZW5hYmxlZCwgcGVybWlzc2l2ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldEhpZGRlbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzSW5pdGlhbEtleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGlkZGVuIikpOwotICAg
ICAgICBXS0Jvb2xlYW5SZWYgaGlkZGVuV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc0luaXRpYWxL
ZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIGhpZGRlbiA9IFdLQm9vbGVhbkdldFZhbHVlKGhp
ZGRlbldLKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGlkZGVu
KGhpZGRlbik7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFy
eVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldEhpZGRlbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiaGlkZGVuIikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJQcm9jZXNzV29ya1F1ZXVlIikpIHsKLSAgICAgICAgaWYg
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucHJvY2Vzc1dv
cmtRdWV1ZSgpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXb3JrUXVldWVQ
cm9jZXNzZWRDYWxsYmFjayIpKTsKLSAgICAgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucHJvY2Vzc1dvcmtRdWV1
ZSgpKQorICAgICAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJXb3JrUXVldWVQcm9jZXNzZWRDYWxs
YmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUJhY2tOYXZpZ2F0aW9uIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJ
RCgpKTsKLSAgICAgICAgdWludDY0X3Qgc3RlcENvdW50ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUJhY2tOYXZpZ2F0aW9uKHN0
ZXBDb3VudCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVN
YW5hZ2VyKCkucXVldWVCYWNrTmF2aWdhdGlvbih1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUZvcndhcmROYXZpZ2F0aW9uIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsK
LSAgICAgICAgdWludDY0X3Qgc3RlcENvdW50ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHN0ZXBD
b3VudCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5h
Z2VyKCkucXVldWVGb3J3YXJkTmF2aWdhdGlvbih1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUxvYWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIGxvYWREYXRhRGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB1cmxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1cmwiKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVybFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCB1cmxLZXkuZ2V0KCkp
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGFyZ2V0S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidGFyZ2V0IikpOwotICAgICAgICBXS1N0
cmluZ1JlZiB0YXJnZXRXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgdGFyZ2V0S2V5LmdldCgpKSk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzaG91bGRPcGVuRXh0ZXJu
YWxVUkxzIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1Zh
bHVlV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobG9hZERhdGFEaWN0aW9uYXJ5LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzS2V5LmdldCgpKSk7
Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIo
KS5xdWV1ZUxvYWQodG9XVEZTdHJpbmcodXJsV0spLCB0b1dURlN0cmluZyh0YXJnZXRXSyksIFdL
Qm9vbGVhbkdldFZhbHVlKHNob3VsZE9wZW5FeHRlcm5hbFVSTHNWYWx1ZVdLKSk7CisgICAgICAg
IGF1dG8gbG9hZERhdGFEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byB1cmwgPSB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rp
b25hcnksICJ1cmwiKSk7CisgICAgICAgIGF1dG8gdGFyZ2V0ID0gdG9XVEZTdHJpbmcoc3RyaW5n
VmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAidGFyZ2V0IikpOworICAgICAgICBhdXRvIHNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHMgPSBib29sZWFuVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAic2hv
dWxkT3BlbkV4dGVybmFsVVJMcyIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZCh1cmwsIHRhcmdldCwgc2hvdWxkT3BlbkV4
dGVybmFsVVJMcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9hZEhUTUxTdHJpbmciKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIGxvYWREYXRhRGljdGlvbmFy
eSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjb250ZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29udGVudCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgY29u
dGVudFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobG9hZERhdGFEaWN0aW9uYXJ5LCBjb250ZW50S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJiYXNlVVJMIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBiYXNlVVJM
V0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShs
b2FkRGF0YURpY3Rpb25hcnksIGJhc2VVUkxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJ1bnJlYWNoYWJsZVVSTCIpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgdW5yZWFjaGFibGVVUkxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgdW5yZWFjaGFibGVVUkxLZXkuZ2V0
KCkpKTsKLQorICAgICAgICBhdXRvIGxvYWREYXRhRGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1
ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gY29udGVudFdLID0gc3RyaW5nVmFsdWUobG9h
ZERhdGFEaWN0aW9uYXJ5LCAiY29udGVudCIpOworICAgICAgICBhdXRvIGJhc2VVUkxXSyA9IHN0
cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgImJhc2VVUkwiKTsKKyAgICAgICAgYXV0byB1
bnJlYWNoYWJsZVVSTFdLID0gc3RyaW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAidW5yZWFj
aGFibGVVUkwiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1
ZU1hbmFnZXIoKS5xdWV1ZUxvYWRIVE1MU3RyaW5nKHRvV1RGU3RyaW5nKGNvbnRlbnRXSyksIGJh
c2VVUkxXSyA/IHRvV1RGU3RyaW5nKGJhc2VVUkxXSykgOiBTdHJpbmcoKSwgdW5yZWFjaGFibGVV
UkxXSyA/IHRvV1RGU3RyaW5nKHVucmVhY2hhYmxlVVJMV0spIDogU3RyaW5nKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtNjM2LDE1NCArNDgyLDExNyBAQCB2b2lkIFRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNz
YWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiUXVldWVMb2FkaW5nU2NyaXB0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tT
dHJpbmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwog
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1
ZXVlTG9hZGluZ1NjcmlwdCh0b1dURlN0cmluZyhzY3JpcHQpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiUXVldWVOb25Mb2FkaW5nU2NyaXB0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTm9u
TG9hZGluZ1NjcmlwdCh0b1dURlN0cmluZyhzY3JpcHQpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5k
Q29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKFdLQm9vbGVh
bkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2
YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91
bGRMb2dEb3dubG9hZENhbGxiYWNrcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFj
a3MoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEF1
dGhlbnRpY2F0aW9uVXNlcm5hbWUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiB1
c2VybmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAg
IFdLU3RyaW5nUmVmIHVzZXJuYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSh0
b1dURlN0cmluZyh1c2VybmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBdXRoZW50aWNh
dGlvblBhc3N3b3JkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGFzc3dvcmQg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmlu
Z1JlZiBwYXNzd29yZCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQodG9XVEZTdHJp
bmcocGFzc3dvcmQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QmxvY2tBbGxQbHVnaW5zIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBzaG91bGRCbG9jayA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0QmxvY2tBbGxQbHVnaW5zKFdLQm9vbGVhbkdldFZhbHVlKHNob3VsZEJs
b2NrKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRCbG9ja0FsbFBs
dWdpbnMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFBsdWdpblN1cHBvcnRlZE1vZGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBt
b2RlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tT
dHJpbmdSZWYgbW9kZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFBsdWdpblN1cHBvcnRlZE1vZGUodG9XVEZTdHJpbmco
bW9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9s
aWN5QWZ0ZXJEZWxheSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRl
ckRlbGF5KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheShi
b29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxk
RGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
Qm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGVjaWRlUmVz
cG9uc2VQb2xpY3lBZnRlckRlbGF5KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGlj
eUFmdGVyRGVsYXkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXROYXZpZ2F0aW9uR2Vz
dHVyZXNFbmFibGVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKGJvb2xlYW5W
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0SWdub3Jlc1Zp
ZXdwb3J0U2NhbGVMaW1pdHMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZh
bHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhX
S0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbGVhblZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJs
ZU1JTUVUeXBlcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBl
cyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKGJvb2xlYW5W
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRBbGxvd0Rl
dmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
Qm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkQWxsb3dEZXZp
Y2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkQWxsb3dEZXZpY2VP
cmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tp
ZXNPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91
bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSwgdHJ1ZSk7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxk
QmxvY2tUaGlyZFBhcnR5Q29va2llcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpLCB0cnVlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNv
b2tpZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyhX
S0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSksIGZhbHNlKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKGJv
b2xlYW5WYWx1ZShtZXNzYWdlQm9keSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUnVu
VUlQcm9jZXNzU2NyaXB0IikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0KLSAgICAgICAgVUlTY3JpcHRJbnZvY2F0aW9u
RGF0YSogaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSgpOworICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0
aW9uRGF0YTsKICAgICAgICAgaW52b2NhdGlvbkRhdGEtPnRlc3RJbnZvY2F0aW9uID0gdGhpczsK
LSAgICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQgPSAodW5zaWduZWQpV0tVSW50NjRH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNhbGxiYWNrSURLZXkuZ2V0KCkpKSk7Ci0gICAgICAg
IGludm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNjcmlwdEtl
eS5nZXQoKSkpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJhY2tJRCA9IHVpbnQ2NFZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNhbGxiYWNrSUQiKTsKKyAgICAgICAgaW52b2Nh
dGlvbkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIlNjcmlwdCIpOwogICAgICAgICBtX3BlbmRpbmdVSVNjcmlwdEludm9jYXRpb25EYXRhID0g
aW52b2NhdGlvbkRhdGE7CiAgICAgICAgIFdLUGFnZUNhbGxBZnRlck5leHRQcmVzZW50YXRpb25V
cGRhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
aW52b2NhdGlvbkRhdGEsIHJ1blVJU2lkZVNjcmlwdEFmdGVyVXBkYXRlQ2FsbGJhY2spOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJSdW5VSVByb2Nlc3NTY3JpcHRJbW1lZGlhdGVseSIpKSB7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHNjcmlwdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNjcmlwdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikp
OwotCi0gICAgICAgIFVJU2NyaXB0SW52b2NhdGlvbkRhdGEqIGludm9jYXRpb25EYXRhID0gbmV3
IFVJU2NyaXB0SW52b2NhdGlvbkRhdGEoKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGludm9j
YXRpb25EYXRhID0gbmV3IFVJU2NyaXB0SW52b2NhdGlvbkRhdGE7CiAgICAgICAgIGludm9jYXRp
b25EYXRhLT50ZXN0SW52b2NhdGlvbiA9IHRoaXM7Ci0gICAgICAgIGludm9jYXRpb25EYXRhLT5j
YWxsYmFja0lEID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBj
YWxsYmFja0lES2V5LmdldCgpKSkpOwotICAgICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0U3Ry
aW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzY3JpcHRLZXkuZ2V0KCkpKTsKKyAgICAgICAgaW52b2Nh
dGlvbkRhdGEtPmNhbGxiYWNrSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJDYWxsYmFja0lEIik7CisgICAgICAgIGludm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTY3JpcHQiKTsKICAgICAgICAgbV9w
ZW5kaW5nVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSA9IGludm9jYXRpb25EYXRhOwogICAgICAgICBy
dW5VSVNpZGVTY3JpcHRJbW1lZGlhdGVseShudWxscHRyLCBpbnZvY2F0aW9uRGF0YSk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTc5MSwxMSArNjAwLDkgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlk
UmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUK
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW5z
dGFsbEN1c3RvbU1lbnVBY3Rpb24iKSkgewogICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIm5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBuYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBuYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGlzbWlzc2VzQXV0b21hdGljYWxseSIp
KTsKLSAgICAgICAgYXV0byBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5ID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgZGlzbWlzc2VzQXV0b21hdGljYWxseUtleS5nZXQoKSkpOwotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuaW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24odG9XVEZTdHJpbmcobmFt
ZS5nZXQoKSksIFdLQm9vbGVhbkdldFZhbHVlKGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkpKTsKKyAg
ICAgICAgYXV0byBuYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAibmFt
ZSIpOworICAgICAgICBhdXRvIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkgPSBib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiZGlzbWlzc2VzQXV0b21hdGljYWxseSIpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24odG9X
VEZTdHJpbmcobmFtZSksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC04MDUsNyArNjEyLDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gYWN0aW9uczsKICAgICAgICAgYWN0aW9ucy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNpemUpOwogICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgc2l6ZTsgKytpbmRleCkKLSAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKHRvV1RGU3RyaW5n
KHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgobWVzc2FnZUJv
ZHlBcnJheSwgaW5kZXgpKSkpOworICAgICAgICAgICAgYWN0aW9ucy5hcHBlbmQodG9XVEZTdHJp
bmcoc3RyaW5nVmFsdWUoV0tBcnJheUdldEl0ZW1BdEluZGV4KG1lc3NhZ2VCb2R5QXJyYXksIGlu
ZGV4KSkpKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFsbG93ZWRN
ZW51QWN0aW9ucyhhY3Rpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTgyOCwxMDgg
KzYzNSw2MyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21Jbmpl
Y3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0RlYnVn
TW9kZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tC
b29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoV0tCb29sZWFuR2V0VmFsdWUodmFs
dWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoaG9zdE5hbWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTGFzdFNlZW4iKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFs
dWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsK
LQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5h
bWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxX
S0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NMYXN0U2Vlbihob3N0TmFtZSwgV0tEb3VibGVHZXRWYWx1ZSh2YWx1
ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1
ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gZG91
YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NMYXN0U2Vlbihob3N0TmFtZSwgdmFs
dWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVEb21haW4xS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVEb21haW4xIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVEb21haW4yS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVEb21haW4yIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbGFzdFNlZW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJMYXN0U2VlbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGhhZFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNHcmFuZGZhdGhlcmVkS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNHcmFuZGZhdGhlcmVkIikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNQcmV2YWxlbnRLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ByZXZhbGVudCIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGlzVmVyeVByZXZhbGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIklzVmVyeVByZXZhbGVudCIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGRhdGFSZWNvcmRzUmVtb3ZlZEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRhdGFSZWNvcmRzUmVtb3ZlZCIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVzQWNjZXNzZWRGaXJzdFBhcnR5SW50ZXJhY3Rp
b25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lc0FjY2Vz
c2VkRmlyc3RQYXJ0eUludGVyYWN0aW9uIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3RO
YW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0
cmluZ1JlZiB0b3BGcmFtZURvbWFpbjEgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lRG9tYWlu
MUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZURvbWFpbjIgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHRvcEZyYW1lRG9tYWluMktleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJs
ZVJlZiBsYXN0U2VlbiA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbGFzdFNlZW5LZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGhhZFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJsZVJlZiBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc0dyYW5kZmF0aGVy
ZWQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc0dyYW5kZmF0aGVyZWRLZXkuZ2V0KCkpKTsKLSAgICAg
ICAgV0tCb29sZWFuUmVmIGlzUHJldmFsZW50ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNQcmV2YWxl
bnRLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzVmVyeVByZXZhbGVudCA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGlzVmVyeVByZXZhbGVudEtleS5nZXQoKSkpOwotICAgICAgICBXS1VJ
bnQ2NFJlZiBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGRhdGFSZWNvcmRz
UmVtb3ZlZEtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMoaG9zdE5hbWUsIHRvcEZyYW1lRG9tYWluMSwg
dG9wRnJhbWVEb21haW4yLCBXS0RvdWJsZUdldFZhbHVlKGxhc3RTZWVuKSwgV0tCb29sZWFuR2V0
VmFsdWUoaGFkVXNlckludGVyYWN0aW9uKSwgV0tEb3VibGVHZXRWYWx1ZShtb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNHcmFuZGZhdGhlcmVkKSwgV0tCb29s
ZWFuR2V0VmFsdWUoaXNQcmV2YWxlbnQpLCBXS0Jvb2xlYW5HZXRWYWx1ZShpc1ZlcnlQcmV2YWxl
bnQpLCBXS1VJbnQ2NEdldFZhbHVlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpOworICAgICAgICBhdXRv
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7Cisg
ICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHRvcEZyYW1lRG9tYWluMSA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lRG9tYWluMSIpOworICAgICAgICBhdXRv
IHRvcEZyYW1lRG9tYWluMiA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRv
cEZyYW1lRG9tYWluMiIpOworICAgICAgICBhdXRvIGxhc3RTZWVuID0gZG91YmxlVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiTGFzdFNlZW4iKTsKKyAgICAgICAgYXV0byBoYWRVc2VySW50
ZXJhY3Rpb24gPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSGFkVXNlcklu
dGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IGRv
dWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b24iKTsKKyAgICAgICAgYXV0byBpc0dyYW5kZmF0aGVyZWQgPSBib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiSXNHcmFuZGZhdGhlcmVkIik7CisgICAgICAgIGF1dG8gaXNQcmV2
YWxlbnQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNQcmV2YWxlbnQi
KTsKKyAgICAgICAgYXV0byBpc1ZlcnlQcmV2YWxlbnQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiSXNWZXJ5UHJldmFsZW50Iik7CisgICAgICAgIGF1dG8gZGF0YVJlY29y
ZHNSZW1vdmVkID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRGF0YVJlY29y
ZHNSZW1vdmVkIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzTWVyZ2VTdGF0aXN0aWMoaG9zdE5hbWUsIHRvcEZyYW1lRG9tYWluMSwgdG9wRnJhbWVE
b21haW4yLCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRh
dGFSZWNvcmRzUmVtb3ZlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNz
RXhwaXJlZFN0YXRpc3RpYyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFy
eVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1l
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoYWRVc2VySW50ZXJhY3Rpb25LZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYWRVc2VySW50ZXJhY3Rp
b24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURh
dGFSZW1vdmFsIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNQcmV2YWxl
bnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ByZXZhbGVu
dCIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
aG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGhhZFVzZXJJbnRlcmFj
dGlvbiA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhhZFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpOwot
ICAgICAgICBXS0Jvb2xlYW5SZWYgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWxLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzUHJldmFsZW50ID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgaXNQcmV2YWxlbnRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMoaG9zdE5hbWUs
IFdLQm9vbGVhbkdldFZhbHVlKGhhZFVzZXJJbnRlcmFjdGlvbiksIFdLQm9vbGVhbkdldFZhbHVl
KGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpLCBXS0Jvb2xlYW5HZXRWYWx1
ZShpc1ByZXZhbGVudCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRv
IGhhZFVzZXJJbnRlcmFjdGlvbiA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJIYWRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBpc1NjaGVkdWxlZEZvckFsbEJ1
dENvb2tpZURhdGFSZW1vdmFsID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiKTsKKyAgICAgICAgYXV0byBp
c1ByZXZhbGVudCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc1ByZXZh
bGVudCIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c0V4cGlyZWRTdGF0aXN0aWMoaG9zdE5hbWUsIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVs
ZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsK
LQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIp
KTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9z
dE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lLCBXS0Jvb2xl
YW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBh
dXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UoaG9zdE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3Rh
dGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAg
IFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0Rp
Y3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAg
ICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5n
ZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2
YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rp
b25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHZh
bHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVu
dFJlc291cmNlKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTk0NCw1MSArNzA2LDM1IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNz
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3VycyIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGhvdXJzID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0
YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJz
KFdLVUludDY0R2V0VmFsdWUoaG91cnMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRT
aW5jZUhvdXJzKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlciIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NTaG91bGREb3duZ3JhZGVSZWZlcnJlcihXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZERvd25n
cmFkZVJlZmVycmVyKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUoV0tCb29sZWFu
R2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZShib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1NldFRvU2FtZVNp
dGVTdHJpY3RDb29raWVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29r
aWVzKGhvc3ROYW1lKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0
YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llcyhzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURv
bWFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmlyc3RQYXJ0eVVS
TFN0cmluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZpcnN0
UGFydHlVUkwiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjbmFtZVVSTFN0
cmluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNOQU1FIikp
OwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgZmlyc3RQYXJ0eVVSTFN0cmluZyA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgZmlyc3RQYXJ0eVVSTFN0cmluZ0tleS5nZXQoKSkpOwotICAgICAgICBX
S1N0cmluZ1JlZiBjbmFtZVVSTFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgY25hbWVVUkxTdHJp
bmdLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBmaXJzdFBh
cnR5VVJMU3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRmlyc3RQ
YXJ0eVVSTCIpOworICAgICAgICBhdXRvIGNuYW1lVVJMU3RyaW5nID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiQ05BTUUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKGZpcnN0UGFy
dHlVUkxTdHJpbmcsIGNuYW1lVVJMU3RyaW5nKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlz
dGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIGNuYW1lVVJMU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NU
aGlyZFBhcnR5Q05BTUVEb21haW4oY25hbWVVUkxTdHJpbmcpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbihzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDEy
LDggKzc1OCw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUlu
amVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRBcHBsaWNhdGlvbk1hbmlmZXN0Iikp
IHsKICNpZmRlZiBfX0JMT0NLU19fCiAgICAgICAgIFdLUGFnZUdldEFwcGxpY2F0aW9uTWFuaWZl
c3RfYihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBe
ewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlkR2V0QXBwbGljYXRpb25NYW5p
ZmVzdCIpKTsKLSAgICAgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCk7CisgICAgICAgICAgICBwb3N0UGFnZU1lc3NhZ2UoIkRpZEdldEFwcGxp
Y2F0aW9uTWFuaWZlc3QiKTsKICAgICAgICAgfSk7CiAjZWxzZQogICAgICAgICAvLyBGSVhNRTog
QWRkIEFQSSBmb3IgbG9hZGluZyB0aGUgbWFuaWZlc3Qgb24gbm9uLV9fQkxPQ0tTX18gcG9ydHMu
CkBAIC0xMDIzLDE2ICs3NjgsMTAgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1l
c3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0
YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tE
aWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ikhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLQotICAg
ICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXku
Z2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
dmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihob3N0TmFtZSwgV0tCb29sZWFuR2V0
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB2
YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1ZSIpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbihob3N0TmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0xMDQzLDggKzc4Miw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFwcEJvdW5kRG9tYWlu
cyIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tBcnJh
eUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tBcnJheVJlZiBvcmlnaW5VUkxzID0gc3RhdGljX2Nh
c3Q8V0tBcnJheVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0QXBwQm91bmREb21haW5zKG9yaWdpblVSTHMpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXBwQm91bmREb21haW5zKHN0YXRpY19jYXN0PFdLQXJy
YXlSZWY+KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNTUs
OTQgKzc5Myw3MCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogewogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW5pdGlhbGl6YXRpb24iKSkgewog
ICAgICAgICBhdXRvIHNldHRpbmdzID0gY3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVzdW1lVGVzdGluZ0tleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc3VtZVRlc3RpbmciKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcmVzdW1lVGVzdGluZ1ZhbHVlID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUobV9zdGFydGVkVGVzdGluZykpOwotICAgICAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKHNldHRpbmdzLmdldCgpLCByZXN1bWVUZXN0aW5nS2V5LmdldCgpLCByZXN1bWVU
ZXN0aW5nVmFsdWUuZ2V0KCkpOworICAgICAgICBzZXRWYWx1ZShzZXR0aW5ncywgIlJlc3VtZVRl
c3RpbmciLCBtX3N0YXJ0ZWRUZXN0aW5nKTsKICAgICAgICAgcmV0dXJuIHNldHRpbmdzOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0RHVtcFBpeGVscyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBtX2R1bXBQaXhlbHMgPSBXS0Jv
b2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSk7Cisg
ICAgICAgIG1fZHVtcFBpeGVscyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkdldER1bXBQaXhlbHMiKSkKICAgICAgICAgcmV0dXJuIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcFBpeGVscykpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRXaGF0VG9EdW1wIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgp
KTsKLSAgICAgICAgbV93aGF0VG9EdW1wID0gc3RhdGljX2Nhc3Q8V2hhdFRvRHVtcD4oV0tVSW50
NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAg
ICAgIG1fd2hhdFRvRHVtcCA9IHN0YXRpY19jYXN0PFdoYXRUb0R1bXA+KHVpbnQ2NFZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldFdoYXRUb0R1bXAiKSkK
ICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KG1fd2hhdFRvRHVtcCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0V2FpdFVudGlsRG9uZSIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBzZXRXYWl0VW50aWxEb25lKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KFdLQm9vbGVhbkdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSkpOworICAgICAg
ICBzZXRXYWl0VW50aWxEb25lKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJHZXRXYWl0VW50aWxEb25lIikpCiAgICAgICAgIHJldHVybiBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShtX3dhaXRVbnRpbERvbmUpKTsKIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0RHVtcEZyYW1lTG9hZENhbGxi
YWNrcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tC
b29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBtX2R1bXBGcmFtZUxvYWRDYWxs
YmFja3MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJHZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIikpCiAgICAgICAgIHJldHVybiBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MpKTsKIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0Q2FuT3BlbldpbmRv
d3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgbV9jYW5PcGVuV2luZG93cyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIG1fY2FuT3BlbldpbmRvd3MgPSBib29sZWFuVmFs
dWUobWVzc2FnZUJvZHkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFdpbmRvd0lz
S2V5IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc0tleVZhbHVlID0gc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5zZXRXaW5kb3dJc0tleShXS0Jvb2xlYW5H
ZXRWYWx1ZShpc0tleVZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5zZXRXaW5kb3dJc0tleShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRWaWV3U2l6ZSIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBz
dGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHdpZHRoS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygid2lkdGgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBo
ZWlnaHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoZWlnaHQi
KSk7Ci0KLSAgICAgICAgV0tEb3VibGVSZWYgd2lkdGhXSyA9IHN0YXRpY19jYXN0PFdLRG91Ymxl
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgd2lk
dGhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgaGVpZ2h0V0sgPSBzdGF0aWNfY2Fz
dDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGhlaWdodEtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5yZXNpemVUbyhXS0RvdWJsZUdldFZhbHVlKHdpZHRoV0sp
LCBXS0RvdWJsZUdldFZhbHVlKGhlaWdodFdLKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byB3
aWR0aCA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIndpZHRoIik7CisgICAg
ICAgIGF1dG8gaGVpZ2h0ID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiaGVp
Z2h0Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5yZXNpemVUbyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJ
c0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpIHsKLSAgICAgICAgYm9vbCBpc0FjdGl2ZSA9IFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShpc0FjdGl2ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzR2VvbG9jYXRp
b25DbGllbnRBY3RpdmUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUo
KSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRDYWNoZU1vZGVsIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgdWludDY0X3QgbW9kZWwgPSBX
S1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwor
ICAgICAgICB1aW50NjRfdCBtb2RlbCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlU2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5n
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53ZWJzaXRlRGF0YVN0b3JlKCksIG1vZGVsKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1dvcmtRdWV1ZUVtcHR5IikpIHsKLSAgICAg
ICAgYm9vbCBpc0VtcHR5ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1h
bmFnZXIoKS5pc1dvcmtRdWV1ZUVtcHR5KCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNFbXB0eSkpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIklzV29ya1F1ZXVlRW1wdHkiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVN
YW5hZ2VyKCkuaXNXb3JrUXVldWVFbXB0eSgpKSk7CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigp
KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9y
UHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJl
Y3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuY2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5h
dmlnYXRpb24oKTsKQEAgLTExNTAsNDAgKzg2NCwzNSBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVk
QgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCIpKSB7Ci0jaWYgUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShJc1NlY3VyZUV2ZW50SW5wdXRFbmFi
bGVkKCkpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShJc1NlY3VyZUV2ZW50SW5wdXRFbmFibGVkKCkpKTsKICNlbHNlCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGZhbHNl
KSk7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEN1c3RvbVVzZXJBZ2Vu
dCIpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVzZXJBZ2VudCA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUGFnZVNldEN1c3RvbVVzZXJBZ2VudChU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB1c2VyQWdl
bnQpOworICAgICAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZSIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZShXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Np
b25Pbk5leHROYXZpZ2F0aW9uIikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKFdLQm9v
bGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRTd2FwVG9FcGhlbWVy
YWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Np
b25Pbk5leHROYXZpZ2F0aW9uIikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihXS0Jvb2xl
YW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNl
c3Npb25Pbk5leHROYXZpZ2F0aW9uKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkIikpIHsK
LSAgICAgICAgdW5zaWduZWQgY291bnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW1h
Z2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY291bnQpKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCIpKQorICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuaW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSkpOwogICAgIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGVsZXRlQWxsSW5kZXhlZERh
dGFiYXNlcyIpKSB7CiAgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUFsbEluZGV4ZWRE
YXRhYmFzZXMoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndlYnNpdGVEYXRhU3RvcmUoKSwg
bnVsbHB0ciwgeyB9KTsKQEAgLTExOTEsMTcgKzkwMCwxMCBAQCBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVj
dGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiQWRkTW9ja01lZGlhRGV2aWNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gcGVyc2lzdGVudElES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiUGVyc2lzdGVudElEIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbGFi
ZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMYWJlbCIpKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHR5cGVLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUeXBlIikpOwotCi0gICAgICAgIGF1dG8gcGVyc2lz
dGVudElEID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwZXJzaXN0ZW50SURLZXkuZ2V0KCkpKTsKLSAgICAg
ICAgYXV0byBsYWJlbCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbGFiZWxLZXkuZ2V0KCkpKTsKLSAgICAg
ICAgYXV0byB0eXBlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0eXBlS2V5LmdldCgpKSk7Ci0KKyAgICAg
ICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJv
ZHkpOworICAgICAgICBhdXRvIHBlcnNpc3RlbnRJRCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIlBlcnNpc3RlbnRJRCIpOworICAgICAgICBhdXRvIGxhYmVsID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTGFiZWwiKTsKKyAgICAgICAgYXV0byB0eXBl
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVHlwZSIpOwogICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuYWRkTW9ja01lZGlhRGV2aWNlKHBlcnNpc3RlbnRJ
RCwgbGFiZWwsIHR5cGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xMjEy
LDkgKzkxNCw3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJl
Y2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZW1vdmVNb2NrTWVkaWFE
ZXZpY2UiKSkgewotICAgICAgICBXS1N0cmluZ1JlZiBwZXJzaXN0ZW50SWQgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5yZW1vdmVNb2NrTWVkaWFEZXZpY2UocGVyc2lzdGVudElkKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJlbW92ZU1vY2tNZWRpYURldmljZShzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAg
LTEyMjQsMTQyICs5MjQsODcgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlv
bjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tD
YW1lcmFPcmllbnRhdGlvbiIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24odWludDY0VmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc01vY2tSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyRW5hYmxlZCIpKSB7Ci0gICAgICAgIGJvb2wgaXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlckVuYWJsZWQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNNb2NrUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQoKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkKSk7Ci0g
ICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
SXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQiKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc01v
Y2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgpKSk7CiAgICAgCi0gICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJIYXNBcHBCb3VuZFNlc3Np
b24iKSkgewotICAgICAgICBib29sIGhhc0FwcEJvdW5kU2Vzc2lvbiA9IFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5oYXNBcHBCb3VuZFNlc3Npb24oKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGhhc0FwcEJvdW5kU2Vzc2lvbikpOwotICAgIH0KKyAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkhhc0FwcEJvdW5kU2Vz
c2lvbiIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmhhc0FwcEJvdW5kU2Vzc2lvbigpKSk7CiAKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJDb25uZWN0TW9ja0dhbWVwYWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIHVpbnQ2NF90IGlu
ZGV4ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJv
ZHkpKTsKLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpjb25uZWN0TW9ja0dhbWVwYWQoaW5k
ZXgpOwotICAgICAgICAKKyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpjb25uZWN0TW9ja0dh
bWVwYWQodWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJEaXNjb25uZWN0TW9ja0dhbWVwYWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIHVpbnQ2
NF90IGluZGV4ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVz
c2FnZUJvZHkpKTsKLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpkaXNjb25uZWN0TW9ja0dh
bWVwYWQoaW5kZXgpOwotCisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6ZGlzY29ubmVjdE1v
Y2tHYW1lcGFkKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0TW9ja0dhbWVwYWREZXRhaWxzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAg
ICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdL
RGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gZ2FtZXBhZEluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiR2FtZXBhZEluZGV4IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
Z2FtZXBhZElES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2Ft
ZXBhZElEIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWFwcGluZ0tleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1hcHBpbmciKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheGlzQ291bnRLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBeGlzQ291bnQiKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBidXR0b25Db3VudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkJ1dHRvbkNvdW50IikpOwotCi0gICAgICAgIFdLVUludDY0UmVmIGdh
bWVwYWRJbmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZ2FtZXBhZEluZGV4S2V5LmdldCgpKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIGdhbWVwYWRJRCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZ2FtZXBhZElE
S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1hcHBpbmcgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIG1hcHBpbmdLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgYXhpc0NvdW50ID0g
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBheGlzQ291bnRLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tVSW50NjRS
ZWYgYnV0dG9uQ291bnQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbkNvdW50S2V5LmdldCgpKSk7
Ci0KLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZERldGFpbHMoV0tV
SW50NjRHZXRWYWx1ZShnYW1lcGFkSW5kZXgpLCB0b1dURlN0cmluZyhnYW1lcGFkSUQpLCB0b1dU
RlN0cmluZyhtYXBwaW5nKSwgV0tVSW50NjRHZXRWYWx1ZShheGlzQ291bnQpLCBXS1VJbnQ2NEdl
dFZhbHVlKGJ1dHRvbkNvdW50KSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBnYW1lcGFkSW5k
ZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJHYW1lcGFkSW5kZXgiKTsK
KyAgICAgICAgYXV0byBnYW1lcGFkSUQgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJHYW1lcGFkSUQiKTsKKyAgICAgICAgYXV0byBtYXBwaW5nID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiTWFwcGluZyIpOworICAgICAgICBhdXRvIGF4aXNDb3VudCA9
IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkF4aXNDb3VudCIpOworICAgICAg
ICBhdXRvIGJ1dHRvbkNvdW50ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
QnV0dG9uQ291bnQiKTsKKyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBh
ZERldGFpbHMoZ2FtZXBhZEluZGV4LCB0b1dURlN0cmluZyhnYW1lcGFkSUQpLCB0b1dURlN0cmlu
ZyhtYXBwaW5nKSwgYXhpc0NvdW50LCBidXR0b25Db3VudCk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAg
ICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBnYW1lcGFkSW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJHYW1lcGFkSW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBheGlzSW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
eGlzSW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAg
ICAgIFdLVUludDY0UmVmIGdhbWVwYWRJbmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZ2FtZXBhZElu
ZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGF4aXNJbmRleCA9IHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgYXhpc0luZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFdlYkNvcmVU
ZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUoV0tVSW50NjRHZXRWYWx1ZShnYW1l
cGFkSW5kZXgpLCBXS1VJbnQ2NEdldFZhbHVlKGF4aXNJbmRleCksIFdLRG91YmxlR2V0VmFsdWUo
dmFsdWUpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25h
cnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZ2FtZXBhZEluZGV4ID0gdWludDY0
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiR2FtZXBhZEluZGV4Iik7CisgICAgICAgIGF1
dG8gYXhpc0luZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQXhpc0lu
ZGV4Iik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJWYWx1ZSIpOworICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1l
cGFkQXhpc1ZhbHVlKGdhbWVwYWRJbmRleCwgYXhpc0luZGV4LCB2YWx1ZSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZSIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBz
dGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGJ1dHRvbkluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQnV0dG9uSW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZh
bHVlIikpOwotCi0gICAgICAgIFdLVUludDY0UmVmIGdhbWVwYWRJbmRleCA9IHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgZ2FtZXBhZEluZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGJ1dHRv
bkluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25JbmRleEtleS5nZXQoKSkpOwotICAgICAg
ICBXS0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsK
LQotICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUo
V0tVSW50NjRHZXRWYWx1ZShnYW1lcGFkSW5kZXgpLCBXS1VJbnQ2NEdldFZhbHVlKGJ1dHRvbklu
ZGV4KSwgV0tEb3VibGVHZXRWYWx1ZSh2YWx1ZSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBnYW1lcGFkSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJHYW1l
cGFkSW5kZXgiKTsKKyAgICAgICAgYXV0byBidXR0b25JbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIkJ1dHRvbkluZGV4Iik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBk
b3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1ZSIpOworICAgICAgICBXZWJD
b3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUoZ2FtZXBhZEluZGV4LCBi
dXR0b25JbmRleCwgdmFsdWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2lu
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1Jl
ZiBvcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgb3JpZ2luS2V5LmdldCgpKSk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICAgICAgV0tT
dHJpbmdSZWYgcGFyZW50T3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBhcmVudE9yaWdpbktl
eS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIG9yaWdpbldLID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAib3JpZ2luIik7CisgICAgICAgIGF1
dG8gcGFyZW50T3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJw
YXJlbnRPcmlnaW4iKTsKICAgICAgICAgdW5zaWduZWQgY291bnQgPSBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkudXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihvcmln
aW5XSywgcGFyZW50T3JpZ2luV0spOwotICAgICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4g
cmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjb3VudCkpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIklzRG9pbmdNZWRpYUNhcHR1cmUiKSkgewotICAgICAgICBXS1JldGFpblB0cjxX
S1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5pc0RvaW5nTWVkaWFDYXB0dXJlKCkpKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY291bnQpKTsKICAg
ICB9CisKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IklzRG9pbmdNZWRpYUNhcHR1cmUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0RvaW5nTWVkaWFDYXB0dXJlKCkp
KTsKICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4iKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S1N0cmluZ1JlZiBkb21haW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkp
OwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhclN0YXRpc3RpY3NE
YXRhRm9yRG9tYWluKGRvbWFpbik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5jbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0
SW5EYXRhYmFzZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkb21haW5JREtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvbWFpbklEIikpOwotICAgICAg
ICBXS1VJbnQ2NFJlZiBkb21haW5JRCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZG9tYWluSURLZXkuZ2V0
KCkpKTsKLSAgICAgICAgYm9vbCBkb21haW5JREV4aXN0cyA9IFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5kb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlKFdLVUludDY0R2V0
VmFsdWUoZG9tYWluSUQpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkb21haW5JREV4aXN0cykpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25h
cnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZG9tYWluSUQgPSB1aW50NjRWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJEb21haW5JRCIpOworICAgICAgICBib29sIGRvbWFp
bklERXhpc3RzID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRvZXNTdGF0aXN0aWNzRG9t
YWluSURFeGlzdEluRGF0YWJhc2UoZG9tYWluSUQpOworICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoZG9tYWluSURFeGlzdHMpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NFbmFibGVk
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc0VuYWJsZWQoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NFbmFibGVk
KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IklzU3RhdGlzdGljc0VwaGVtZXJhbCIpKSB7Ci0gICAgICAgIGJvb2wgaXNFcGhlbWVyYWwgPSBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzRXBoZW1lcmFsKCk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaXNFcGhlbWVyYWwpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJu
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0
YXRpc3RpY3NFcGhlbWVyYWwoKSkpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgImR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
IikpIHsKQEAgLTEzNjgsMjI0ICsxMDEzLDEyOCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRl
c3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiSXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotCi0gICAgICAg
IFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQ
cmV2YWxlbnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYm9vbCBpc1ByZXZh
bGVudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZShzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAgICByZXR1cm4gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1Jl
ZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0
aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVu
dCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBib29sIGlzUHJldmFsZW50ID0g
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZShzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tE
aWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzdWJyZXNvdXJjZUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTdWJyZXNvdXJjZUhvc3QiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b3BGcmFtZUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJUb3BGcmFtZUhvc3QiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBzdWJy
ZXNvdXJjZUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1YnJlc291cmNlSG9zdEtleS5nZXQoKSkp
OwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRv
cEZyYW1lSG9zdEtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IHN1YnJlc291cmNlSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlN1
YnJlc291cmNlSG9zdCIpOworICAgICAgICBhdXRvIHRvcEZyYW1lSG9zdCA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lSG9zdCIpOwogICAgICAgICBib29sIGlz
UmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5pc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKHN1YnJlc291cmNlSG9z
dCwgdG9wRnJhbWVIb3N0KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIp
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcikpOwogICAgIH0KICAgICAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3Rh
dGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAg
ICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1YkZyYW1lSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN1YkZyYW1lSG9zdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHRvcEZyYW1lSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRvcEZyYW1lSG9zdCIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVm
IHN1YkZyYW1lSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViRnJhbWVIb3N0S2V5LmdldCgpKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9w
RnJhbWVIb3N0S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1YkZyYW1l
SG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlN1YkZyYW1lSG9zdCIp
OworICAgICAgICBhdXRvIHRvcEZyYW1lSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIlRvcEZyYW1lSG9zdCIpOwogICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlciA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NSZWdp
c3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lSG9zdCwgdG9wRnJhbWVIb3N0KTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlcikpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5n
VG8iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3RSZWRpcmVjdGVk
RnJvbUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RSZWRp
cmVjdGVkRnJvbSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3RSZWRp
cmVjdGVkVG9LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0
UmVkaXJlY3RlZFRvIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdFJlZGly
ZWN0ZWRGcm9tID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0UmVkaXJlY3RlZEZyb21LZXkuZ2V0KCkp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdFJlZGlyZWN0ZWRUbyA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgaG9zdFJlZGlyZWN0ZWRUb0tleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIGhvc3RSZWRpcmVjdGVkRnJvbSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkhvc3RSZWRpcmVjdGVkRnJvbSIpOworICAgICAgICBhdXRvIGhvc3RSZWRpcmVj
dGVkVG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0UmVkaXJlY3Rl
ZFRvIik7CiAgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvID0gVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5n
VG8oaG9zdFJlZGlyZWN0ZWRGcm9tLCBob3N0UmVkaXJlY3RlZFRvKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lz
dGVyZWRBc1JlZGlyZWN0aW5nVG8pKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdU
bykpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiSXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsK
LSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rp
b24gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzSGFzSGFkVXNlcklu
dGVyYWN0aW9uKGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1
bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNIYWRVc2VySW50ZXJhY3Rpb24pKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb24g
PSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVy
YWN0aW9uKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShoYXNIYWRVc2VySW50ZXJhY3Rpb24pKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRp
c3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYXV0byBzdWJIb3N0S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViSG9zdCIpKTsKLSAgICAg
ICAgYXV0byB0b3BIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVG9wSG9zdCIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIHN1Ykhvc3QgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHN1Ykhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
dG9wSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wSG9zdEtleS5nZXQoKSkpOwotCisgICAgICAg
IGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgYXV0byBzdWJIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiU3ViSG9zdCIpOworICAgICAgICBhdXRvIHRvcEhvc3QgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJUb3BIb3N0Iik7CiAgICAgICAgIGJvb2wgc3RhdGlzdGljSW5E
YXRhYmFzZU9uY2UgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzT25s
eUluRGF0YWJhc2VPbmNlKHN1Ykhvc3QsIHRvcEhvc3QpOwogICAgICAgICByZXR1cm4gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoc3RhdGlzdGljSW5EYXRhYmFzZU9uY2UpKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRT
dGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAg
ICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdL
RGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0gICAg
ICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9z
dE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgCi0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChob3N0TmFtZSwgV0tC
b29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1l
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAg
ICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1
ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0dy
YW5kZmF0aGVyZWQoaG9zdE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiSXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAot
ICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVkID0gVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoaG9zdE5hbWUpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKGlzR3JhbmRmYXRoZXJlZCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBi
b29sIGlzR3JhbmRmYXRoZXJlZCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRp
c3RpY3NHcmFuZGZhdGhlcmVkKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVyZWQpKTsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVz
ZUlUUERhdGFiYXNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VJVFBEYXRhYmFzZShXS0Jvb2xlYW5HZXRWYWx1
ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlSVRQ
RGF0YWJhc2UoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4iKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKTsKLSAgICAgICAg
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFt
ZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZUhvc3ROYW1lID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3ROYW1lS2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0
byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOwor
ICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZUhvc3ROYW1lID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVIb3N0TmFtZSIpOwogICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbihob3N0TmFtZSwgdG9wRnJhbWVIb3N0TmFtZSk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3ROYW1lS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKTsKLSAg
ICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBo
b3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZUhvc3ROYW1l
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAg
IAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHRvcEZyYW1lSG9zdE5h
bWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZUhvc3ROYW1l
Iik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGhvc3ROYW1lLCB0b3BGcmFtZUhvc3ROYW1lKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tE
aWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
aG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0
TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lUmVkaXJl
Y3RlZFRvS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWVSZWRpcmVjdGVkVG8iKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFt
ZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lUmVk
aXJlY3RlZFRvS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8g
aG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIp
OworICAgICAgICBhdXRvIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKTsKICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8oaG9zdE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZFRvKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20iKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIp
KTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJl
ZGlyZWN0ZWRGcm9tID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tS2V5
LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBh
dXRvIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20o
aG9zdE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKTsKLSAgICAg
ICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0
TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRU
byA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkuZ2V0KCkpKTsKLSAg
ICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZh
bHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVS
ZWRpcmVjdGVkVG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFt
ZVJlZGlyZWN0ZWRUbyIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhob3N0TmFtZSwgaG9zdE5hbWVSZWRp
cmVjdGVkVG8pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNz
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0g
ICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0
TmFtZVJlZGlyZWN0ZWRGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3Ry
aW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwot
ICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAg
ICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20g
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZVJlZGlyZWN0ZWRG
cm9tIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oaG9zdE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZEZy
b20pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzQ3Jvc3NT
aXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAg
ICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0
PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBhdXRvIGZyb21Ib3N0S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRnJvbUhvc3QiKSk7Ci0g
ICAgICAgIGF1dG8gdG9Ib3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVG9Ib3N0IikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGZyb21Ib3N0ID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBmcm9tSG9zdEtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b0hv
c3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIHRvSG9zdEtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAg
ICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJv
ZHkpOworICAgICAgICBhdXRvIGZyb21Ib3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiRnJvbUhvc3QiKTsKKyAgICAgICAgYXV0byB0b0hvc3QgPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJUb0hvc3QiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9u
KGZyb21Ib3N0LCB0b0hvc3QpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRp
c3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tE
b3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbihXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KICAgICAKQEAgLTE2MDAsOTcgKzExNDksNjkgQEAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21J
bmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0IikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0lz
UnVubmluZ1Rlc3QoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0
aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNv
cmRzUmVtb3ZhbChkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0dyYW5kZmF0
aGVyaW5nVGltZShkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRNYXhTdGF0aXN0aWNzRW50cmllcyIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLVUludDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c01heFN0YXRpc3RpY3NFbnRyaWVzKFdLVUludDY0R2V0VmFsdWUoZW50cmllcykpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NF
bnRyaWVzKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFBydW5lRW50cmllc0Rvd25UbyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
VUludDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1BydW5l
RW50cmllc0Rvd25UbyhXS1VJbnQ2NEdldFZhbHVlKGVudHJpZXMpKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odWlu
dDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0
aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0g
ICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1
ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluY2x1ZGVIdHRw
T25seUNvb2tpZXMiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFu
UmVmIGluY2x1ZGVIdHRwT25seUNvb2tpZXMgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5n
ZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0
YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdChob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUo
aW5jbHVkZUh0dHBPbmx5Q29va2llcykpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5h
bWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAg
ICAgICBhdXRvIGluY2x1ZGVIdHRwT25seUNvb2tpZXMgPSBib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiSW5jbHVkZUh0dHBPbmx5Q29va2llcyIpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0KGhvc3RO
YW1lLCBpbmNsdWRlSHR0cE9ubHlDb29raWVzKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJJc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAg
ICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVz
c2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHkpOwogICAgICAgICBib29sIGhhc0xvY2FsU3RvcmFnZSA9IFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5pc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UoaG9zdE5hbWUpOwogICAgICAgICBh
dXRvIHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0xvY2FsU3RvcmFnZSkpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdL
RG91YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAoV0tEb3VibGVHZXRWYWx1ZShzZWNvbmRz
KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzQ2Fj
aGVNYXhBZ2VDYXAoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJIYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAg
ICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYm9vbCBoYXNJc29sYXRlZFNlc3Npb24gPSBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vzc2lvbihob3N0TmFt
ZSk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzSXNv
bGF0ZWRTZXNzaW9uKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDbGVhckRPTUNhY2hl
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmlu
Z0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQorICAgICAgICBhdXRvIG9yaWdpbiA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmNsZWFyRE9NQ2FjaGUob3JpZ2luKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpA
QCAtMTcwMSwzNSArMTIyMiwyNCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSGFzRE9N
Q2FjaGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
U3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW4gPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCisgICAgICAgIGF1dG8gb3JpZ2luID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBib29sIGhhc0RPTUNhY2hlID0gVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc0RPTUNhY2hlKG9yaWdpbik7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFz
RE9NQ2FjaGUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGhhc0RPTUNhY2hlKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJET01DYWNoZVNpemUiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW4gPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4obWVzc2FnZUJvZHkpOwotCisgICAgICAgIGF1dG8gb3JpZ2luID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHkpOwogICAgICAgICBhdXRvIGRvbUNhY2hlU2l6ZSA9IFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5kb21DYWNoZVNpemUob3JpZ2luKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRvbUNhY2hlU2l6ZSkp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShkb21DYWNoZVNpemUpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2Ui
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICAgICAgYXV0byBjYW5JbmNyZWFzZSA9IFdLQm9vbGVhbkdldFZh
bHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UoY2Fu
SW5jcmVhc2UpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWxsb3dT
dG9yYWdlUXVvdGFJbmNyZWFzZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJJbmplY3RVc2VyU2NyaXB0IikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VC
b2R5KTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW5qZWN0VXNlclNj
cmlwdChzY3JpcHQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW5qZWN0
VXNlclNjcmlwdChzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKQEAgLTE3MzksMTUgKzEyNDksMTIgQEAgV0tSZXRhaW5QdHI8V0tUeXBl
UmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21Jbmpl
Y3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNlcnZpY2VX
b3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2VydmljZVdvcmtlckZldGNo
VGltZW91dEZvclRlc3RpbmcoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgICAgIGF1dG8gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9
IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkp
KTsKKyAgICAgICAgYXV0byB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gYm9vbGVh
blZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCB1
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQpAQCAtMTc2NSw2MCArMTI3MiwzNSBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRl
c3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiQWRkVGVzdEtleVRvS2V5Y2hhaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIHRlc3RLZXlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVm
PihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByaXZh
dGVLZXlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcml2YXRl
S2V5IikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwcml2YXRlS2V5V0sgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0S2V5RGljdGlvbmFyeSwg
cHJpdmF0ZUtleUtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBhdHRyTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
dHRyTGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGF0dHJMYWJlbFdLID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdEtleURpY3Rpb25h
cnksIGF0dHJMYWJlbEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBhcHBsaWNhdGlvblRhZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkFwcGxpY2F0aW9uVGFnIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhcHBsaWNhdGlv
blRhZ1dLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkodGVzdEtleURpY3Rpb25hcnksIGFwcGxpY2F0aW9uVGFnS2V5LmdldCgpKSk7Ci0KKyAgICAg
ICAgYXV0byB0ZXN0S2V5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7
CisgICAgICAgIGF1dG8gcHJpdmF0ZUtleVdLID0gc3RyaW5nVmFsdWUodGVzdEtleURpY3Rpb25h
cnksICJQcml2YXRlS2V5Iik7CisgICAgICAgIGF1dG8gYXR0ckxhYmVsV0sgPSBzdHJpbmdWYWx1
ZSh0ZXN0S2V5RGljdGlvbmFyeSwgIkF0dHJMYWJlbCIpOworICAgICAgICBhdXRvIGFwcGxpY2F0
aW9uVGFnV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0S2V5RGljdGlvbmFyeSwgIkFwcGxpY2F0aW9uVGFn
Iik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5hZGRUZXN0S2V5VG9LZXlj
aGFpbih0b1dURlN0cmluZyhwcml2YXRlS2V5V0spLCB0b1dURlN0cmluZyhhdHRyTGFiZWxXSyks
IHRvV1RGU3RyaW5nKGFwcGxpY2F0aW9uVGFnV0spKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJDbGVhblVwS2V5Y2hhaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIHRlc3REaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNz
YWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJMYWJlbEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgYXR0ckxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0RGljdGlvbmFyeSwgYXR0ckxhYmVsS2V5
LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFwcGxpY2F0aW9u
TGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNh
dGlvbkxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxhYmVsV0sgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0RGlj
dGlvbmFyeSwgYXBwbGljYXRpb25MYWJlbEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gdGVz
dERpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IGF0dHJMYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERpY3Rpb25hcnksICJBdHRyTGFiZWwiKTsK
KyAgICAgICAgYXV0byBhcHBsaWNhdGlvbkxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0RGljdGlv
bmFyeSwgIkFwcGxpY2F0aW9uTGFiZWwiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmNsZWFuVXBLZXljaGFpbih0b1dURlN0cmluZyhhdHRyTGFiZWxXSyksIGFwcGxpY2F0
aW9uTGFiZWxXSyA/IHRvV1RGU3RyaW5nKGFwcGxpY2F0aW9uTGFiZWxXSykgOiBTdHJpbmcoKSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiS2V5RXhpc3RzSW5LZXljaGFpbiIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0
VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgdGVzdERpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhdHRyTGFi
ZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KHRlc3REaWN0aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gYXBwbGljYXRpb25MYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFiZWwiKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5LCBhcHBsaWNhdGlvbkxhYmVsS2V5
LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byB0ZXN0RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1
ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gYXR0ckxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0
ZXN0RGljdGlvbmFyeSwgIkF0dHJMYWJlbCIpOworICAgICAgICBhdXRvIGFwcGxpY2F0aW9uTGFi
ZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXBwbGljYXRpb25MYWJlbCIpOwog
ICAgICAgICBib29sIGtleUV4aXN0c0luS2V5Y2hhaW4gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkua2V5RXhpc3RzSW5LZXljaGFpbih0b1dURlN0cmluZyhhdHRyTGFiZWxXSyksIHRvV1RG
U3RyaW5nKGFwcGxpY2F0aW9uTGFiZWxXSykpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGtleUV4aXN0c0luS2V5Y2hhaW4p
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGtleUV4aXN0c0luS2V5Y2hhaW4pKTsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNlcnZlclRydXN0RXZhbHVhdGlv
bkNhbGxiYWNrQ2FsbHNDb3VudCIpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4g
cmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50KCkpKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQi
KSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCgpKSk7
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNo
b3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91
bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KFdLQm9vbGVhbkdldFZhbHVl
KHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRE
aXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTE4NDgsMTYgKzEz
MzAsMTMgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2
ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFkQ2xpY2tBdHRyaWJ1dGlv
bk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uT3Zl
cnJpZGVUaW1lckZvclRlc3RpbmcoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRl
VGltZXJGb3JUZXN0aW5nKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9y
VGVzdGluZyIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tVUkxHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLVVJMUmVmIHVybCA9IHN0YXRpY19jYXN0PFdL
VVJMUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyh1cmwpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvblVSTEZvclRlc3Rpbmcoc3RhdGljX2Nhc3Q8V0tVUkxSZWY+KG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTkwMiwxNyArMTM4MSwxMCBA
QCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpydW5VSVNpZGVTY3JpcHQoV0tTdHJpbmdSZWYgc2NyaXB0
LCB1bnNpZ25lZCBzY3JpcHRDYWxsYmFjawogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjp1aVNjcmlw
dERpZENvbXBsZXRlKGNvbnN0IFN0cmluZyYgcmVzdWx0LCB1bnNpZ25lZCBzY3JpcHRDYWxsYmFj
a0lEKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxVSVNpZGVTY3JpcHRDYWxsYmFj
ayIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiByZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJSZXN1bHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxi
YWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFj
a0lEIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBjYWxsYmFja0lEVmFsdWUgPSBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKHNjcmlwdENhbGxiYWNrSUQpKTsKLQotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHJlc3VsdEtleS5nZXQoKSwgdG9XSyhyZXN1
bHQpLmdldCgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBj
YWxsYmFja0lES2V5LmdldCgpLCBjYWxsYmFja0lEVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShtZXNzYWdlQm9keSwgIlJlc3VsdCIsIHJlc3VsdCk7Cisg
ICAgc2V0VmFsdWUobWVzc2FnZUJvZHksICJDYWxsYmFja0lEIiwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHNjcmlwdENhbGxiYWNrSUQpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxVSVNpZGVT
Y3JpcHRDYWxsYmFjayIsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0SW52b2Nh
dGlvbjo6b3V0cHV0VGV4dChjb25zdCBXVEY6OlN0cmluZyYgdGV4dCkKQEAgLTE5MjIsMTc0ICsx
Mzk0LDE0MyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpvdXRwdXRUZXh0KGNvbnN0IFdURjo6U3Ry
aW5nJiB0ZXh0KQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRCZWdpblN3aXBlKCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkQmVnaW5Td2lwZUNhbGxiYWNrIikpOwotICAg
IFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkQmVnaW5Td2lwZUNhbGxiYWNrIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OndpbGxFbmRTd2lwZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2FsbFdpbGxFbmRTd2lwZUNhbGxiYWNrIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9J
bmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxs
V2lsbEVuZFN3aXBlQ2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkRW5k
U3dpcGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRFbmRTd2lwZUNhbGxi
YWNrIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkRW5kU3dpcGVDYWxsYmFjayIpOwog
fQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVTd2lwZVNuYXBzaG90KCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNr
IikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
MCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxi
YWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246Om5vdGlmeURvd25sb2FkRG9uZSgpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTm90aWZ5RG93bmxvYWREb25lIikpOwotICAgIFdL
UGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJOb3RpZnlEb3dubG9hZERvbmUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NJbk1lbW9yeUFu
ZFBlcnNpc3RlbnRTdG9yZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZENsZWFyU3Rh
dGlzdGljc0luTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIik7CiB9CiAKIHZvaWQgVGVzdEludm9j
YXRpb246OmRpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwoKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vi
c2l0ZURhdGFSZW1vdmFsIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRs
ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkQ2xlYXJTdGF0
aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0
aW9uOjpkaWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlcigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbERpZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyIikpOwotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJDYWxsRGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiKTsKIH0KIAogdm9p
ZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcygpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0
eUNvb2tpZXMiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRTaG91bGRC
bG9ja1RoaXJkUGFydHlDb29raWVzIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNl
dEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiKSk7Ci0g
ICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRUb1NhbWVTaXRl
U3RyaWN0Q29va2llcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFRv
U2FtZVNpdGVTdHJpY3RDb29raWVzIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3Rl
ZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxs
RGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZGlkU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4iKSk7Ci0gICAgV0tQ
YWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIik7
CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbigp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFRoaXJkUGFydHlDTkFNRURv
bWFpbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFRoaXJkUGFydHlD
TkFNRURvbWFpbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZXNldFN0YXRpc3Rp
Y3NUb0NvbnNpc3RlbnRTdGF0ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERp
ZFJlc2V0U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlIikpOwotICAgIFdLUGFnZVBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdl
KCJDYWxsRGlkUmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUiKTsKIH0KIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdCgpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEJsb2NrQ29va2llc0Zvckhvc3QiKSk7Ci0gICAgV0tQ
YWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0Iik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikpOwotICAgIFdL
UGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIpOwogfQogCiB2b2lk
IFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSgpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlRm9y
RGVidWdNb2RlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0UHJldmFsZW50UmVz
b3VyY2VGb3JEZWJ1Z01vZGUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0TGFz
dFNlZW4oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRMYXN0U2VlbiIp
KTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldExhc3RTZWVuIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZE1lcmdlU3RhdGlzdGljKCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDYWxsRGlkTWVyZ2VTdGF0aXN0aWMiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNh
bGxEaWRNZXJnZVN0YXRpc3RpYyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRF
eHBpcmVkU3RhdGlzdGljKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0
RXhwaXJlZFN0YXRpc3RpYyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEV4cGly
ZWRTdGF0aXN0aWMiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50
UmVzb3VyY2UoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRQcmV2YWxl
bnRSZXNvdXJjZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFByZXZhbGVudFJl
c291cmNlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFZlcnlQcmV2
YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFZlcnlQcmV2
YWxlbnRSZXNvdXJjZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRIYXNIYWRV
c2VySW50ZXJhY3Rpb24oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRI
YXNIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRI
YXNIYWRVc2VySW50ZXJhY3Rpb24iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVj
ZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucykKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzIikpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgZm9yIChhdXRv
JiBkb21haW4gOiBkb21haW5zKQotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9k
eS5nZXQoKSwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkb21haW4udXRm
OCgpLmRhdGEoKSkpLmdldCgpKTsKLSAgICAKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAgICAgV0tBcnJh
eUFwcGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHRvV0soZG9tYWluKS5nZXQoKSk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzIiwg
bWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZl
TG9hZGVkU3VicmVzb3VyY2VEb21haW5zKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucykKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9t
YWlucyIpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAoYXV0byYg
ZG9tYWluIDogZG9tYWlucykKLSAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2FnZUJvZHku
Z2V0KCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZG9tYWluLnV0Zjgo
KS5kYXRhKCkpKS5nZXQoKSk7Ci0KLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAgICAgV0tBcnJheUFwcGVu
ZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHRvV0soZG9tYWluKS5nZXQoKSk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJDYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWlucyIsIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3ZlQWxsU2Vz
c2lvbkNyZWRlbnRpYWxzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVt
b3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmll
dygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IkNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFjayIpOwogfQogCiB2b2lk
IFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRBcHBCb3VuZERvbWFpbnMoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNhbGxEaWRTZXRBcHBCb3VuZERvbWFpbnMiKSk7Ci0gICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRBcHBCb3VuZERvbWFpbnMiKTsKIH0KIAogdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKQpAQCAtMjEwNCw4ICsxNTQ1
LDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbigpCiAKIHZv
aWQgVGVzdEludm9jYXRpb246OnBlcmZvcm1DdXN0b21NZW51QWN0aW9uKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJQZXJmb3JtQ3VzdG9tTWVudUFjdGlvbiIpKTsKLSAgICBXS1BhZ2VQ
b3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiUGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24iKTsKIH0KIAogdm9pZCBUZXN0SW52b2Nh
dGlvbjo6aW5pdGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQoKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhMTVmYzBhMGU5YWZhZTM0MWNjY2QwNjAz
ODNlZDMwMWE3MjQxYjZiLi42MTcxOGFjNjU1ODgxNzc4ZTgzYzk3ZmJlMTc4Mjc4Yzg3MGU2Yjhm
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktp
dFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzU1LDYgKzM1NSw4IEBA
CiAJCTg0MUNDMDBEMTgxMTg1QkYwMDQyRTlCNiAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NDFDQzAwRTE4MTE4NUJGMDA0MkU5QjYgLyogT3B0aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBXZWJLaXRUZXN0UnVubmVyICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQu
bWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJLaXRUZXN0
UnVubmVyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQk5MzM4RDFCQTI1
MEE3OUVCMDBFODI3RjYgLyogSlNCYXNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNCYXNpY3MuaDsg
cGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzOEQxQkUyNTBCRDlERDAwRTgyN0Y2IC8qIERpY3Rpb25h
cnlGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGlvbmFyeUZ1bmN0aW9ucy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzc2NDE3NjIxMEQ3MzYwMDBBM0RBQUUgLyogV2Vi
S2l0VGVzdFJ1bm5lcldpbmRvdy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzNzY0MTc3MjEwRDczNjEwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXJXaW5k
b3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDNzg4MUYyNTBDNjlFNDAwQzBB
QTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gUmVmdGVzdEZ1bmN0aW9ucy5jcHA7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVk
L1JlZnRlc3RGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODky
LDYgKzg5NCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTM3
OEQ0NDIyMTMzNDZEMDAwMDZBNzc3QiAvKiBjb25maWcuaCAqLywKKwkJCQk5MzM4RDFCRTI1MEJE
OUREMDBFODI3RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9ucy5oICovLAogCQkJCUJDOTlBNDg0MTIw
ODkwMUEwMDdFOUYwOCAvKiBTdHJpbmdGdW5jdGlvbnMuaCAqLywKIAkJCQk5QjM2QTI3MDIwOTQ1
M0EwMDAzRTA2NTEgLyogV2hhdFRvRHVtcC5oICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9XZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAKaW5kZXggNDU4Njc3ZjUw
OWIxMTc0MzkzYWU0YzM4Y2EwOTQ1N2M4ZTgwZjg0Yy4uY2Q1ZmM2NjIxNWE0YjAzNzk2ODJjNzJi
MmVjMWQxZjBiOTgwNzNiMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJO
b3RpZmljYXRpb25Qcm92aWRlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJO
b3RpZmljYXRpb25Qcm92aWRlci5jcHAKQEAgLTEyNiw4ICsxMjYsOCBAQCB2b2lkIFdlYk5vdGlm
aWNhdGlvblByb3ZpZGVyOjpjbG9zZVdlYk5vdGlmaWNhdGlvbihXS05vdGlmaWNhdGlvblJlZiBu
b3RpZmljYXRpbwogCiAgICAgcmVtb3ZlR2xvYmFsSURGcm9tSURNYXAobV9sb2NhbFRvR2xvYmFs
Tm90aWZpY2F0aW9uSURNYXAsIGlkKTsKIAotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB3
a0lEID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpZCkpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0
YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Cisg
ICAgYXV0byB3a0lEID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpZCkpOworICAgIGF1dG8gYXJy
YXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIFdLQXJyYXlBcHBlbmRJ
dGVtKGFycmF5LmdldCgpLCB3a0lELmdldCgpKTsKICAgICBXS05vdGlmaWNhdGlvbk1hbmFnZXJQ
cm92aWRlckRpZENsb3NlTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25NYW5hZ2VyLCBhcnJheS5n
ZXQoKSk7CiB9CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25Qcm92aWRl
cjo6cmVtb3ZlTm90aWZpY2F0aW9uTWFuYWdlcihXS05vdGlmaWNhdGlvbk1hbmFnZXJSZWYKICAg
ICBhdXRvIHRvUmVtb3ZlID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIFdLUmV0YWluUHRyPFdLTm90
aWZpY2F0aW9uTWFuYWdlclJlZj4gZ3VhcmQobWFuYWdlcik7CiAgICAgbV9vd25lZE5vdGlmaWNh
dGlvbnMucmVtb3ZlKGl0ZXJhdG9yKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJl
Zj4gYXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gYXJy
YXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAodWludDY0X3Qg
bm90aWZpY2F0aW9uSUQgOiB0b1JlbW92ZSkgewogICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX293
bmluZ01hbmFnZXIucmVtb3ZlKG5vdGlmaWNhdGlvbklEKTsKICAgICAgICAgQVNTRVJUX1VOVVNF
RChzdWNjZXNzLCBzdWNjZXNzKTsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFdlYk5vdGlmaWNh
dGlvblByb3ZpZGVyOjpyZXNldCgpCiAgICAgZm9yIChhdXRvJiBub3RpZmljYXRpb25QYWlyIDog
bV9vd25lZE5vdGlmaWNhdGlvbnMpIHsKICAgICAgICAgaWYgKG5vdGlmaWNhdGlvblBhaXIudmFs
dWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUo
KSk7CisgICAgICAgIGF1dG8gYXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkp
OwogICAgICAgICBmb3IgKHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEIDogbm90aWZpY2F0aW9uUGFp
ci52YWx1ZSkKICAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKGFycmF5LmdldCgpLCBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKG5vdGlmaWNhdGlvbklEKSkuZ2V0KCkpOwogCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcAppbmRleCAyMGQ1YTFhYWRiMjllMzMy
YmUyOWIyYjFmNGMyMzYwOTE5YmEwZmYxLi5jOWQ0N2ZkNjNiODRlNDZlNDYyYTUwZmY0YmUwN2Jm
MzQ2OGFjYTYwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1h
bmFnZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5j
cHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJXb3JrUXVldWVNYW5hZ2VyLmgiCiAKICNp
bmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2UuaD4K
ICNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlUHJpdmF0ZS5oPgpAQCAtNzUsNyArNzYsNyBAQCB0ZW1w
bGF0ZSA8V29ya1F1ZXVlSXRlbTo6VHlwZSB0eXBlPgogY2xhc3MgU2NyaXB0SXRlbSA6IHB1Ymxp
YyBXb3JrUXVldWVJdGVtIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTY3JpcHRJdGVtKGNvbnN0
IFN0cmluZyYgc2NyaXB0KQotICAgICAgICA6IG1fc2NyaXB0KGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoc2NyaXB0LnV0ZjgoKS5kYXRhKCkpKSkKKyAgICAgICAgOiBtX3Nj
cmlwdCh0b1dLKHNjcmlwdCkpCiAgICAgewogICAgIH0KIApAQCAtMTYxLDcgKzE2Miw3IEBAIHZv
aWQgV29ya1F1ZXVlTWFuYWdlcjo6cXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBTdHJpbmcmIGNv
bnRlbnQsIGNvbnN0IFN0cmluZyYKICAgICBjbGFzcyBMb2FkSFRNTFN0cmluZ0l0ZW0gOiBwdWJs
aWMgV29ya1F1ZXVlSXRlbSB7CiAgICAgcHVibGljOgogICAgICAgICBMb2FkSFRNTFN0cmluZ0l0
ZW0oY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIGNvbnN0IFN0
cmluZyYgdW5yZWFjaGFibGVVUkwpCi0gICAgICAgICAgICA6IG1fY29udGVudChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnRlbnQudXRmOCgpLmRhdGEoKSkpKQorICAg
ICAgICAgICAgOiBtX2NvbnRlbnQodG9XSyhjb250ZW50KSkKICAgICAgICAgICAgICwgbV9iYXNl
VVJMKGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcoYmFzZVVSTC51dGY4KCkuZGF0
YSgpKSkpCiAgICAgICAgICAgICAsIG1fdW5yZWFjaGFibGVVUkwoYWRvcHRXSyhXS1VSTENyZWF0
ZVdpdGhVVEY4Q1N0cmluZyh1bnJlYWNoYWJsZVVSTC51dGY4KCkuZGF0YSgpKSkpCiAgICAgICAg
IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25D
Ry5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCmlu
ZGV4IDY3MzM4ZjRhYTgyNzNjZmI2ODcyMjliZmJhZDNmYTRkZGIzN2I0ZGYuLjAxYzUzMWE5YjZh
Y2U4ZTgxNjk0OGY2NzZjZTYzMWY1Mjc5NGI2YzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcApAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgQ0dD
b250ZXh0UmVmIGNyZWF0ZUNHQ29udGV4dEZyb21DR0ltYWdlKENHSW1hZ2VSZWYgaW1hZ2UpCiAg
ICAgc2l6ZV90IHJvd0J5dGVzID0gKDQgKiBwaXhlbHNXaWRlICsgNjMpICYgfjYzOwogCiAgICAg
Ly8gQ3JlYXRpbmcgdGhpcyBiaXRtYXAgaW4gdGhlIGRldmljZSBjb2xvciBzcGFjZSBzaG91bGQg
cHJldmVudCBhbnkgY29sb3IgY29udmVyc2lvbiB3aGVuIHRoZSBpbWFnZSBvZiB0aGUgd2ViIHZp
ZXcgaXMgZHJhd24gaW50byBpdC4KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xv
clNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgYXV0
byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CiAg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgcGl4ZWxz
V2lkZSwgcGl4ZWxzSGlnaCwgOCwgcm93Qnl0ZXMsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpOwogICAg
IGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02Myw3ICs2Myw3IEBA
IHN0YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0RnJvbUNHSW1hZ2UoQ0dJbWFnZVJl
ZiBpbWFnZSkKIAogc3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVDR0NvbnRleHRGcm9tSW1hZ2Uo
V0tJbWFnZVJlZiB3a0ltYWdlKQogewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9
IGFkb3B0Q0YoV0tJbWFnZUNyZWF0ZUNHSW1hZ2Uod2tJbWFnZSkpOworICAgIGF1dG8gaW1hZ2Ug
PSBhZG9wdENGKFdLSW1hZ2VDcmVhdGVDR0ltYWdlKHdrSW1hZ2UpKTsKICAgICByZXR1cm4gY3Jl
YXRlQ0dDb250ZXh0RnJvbUNHSW1hZ2UoaW1hZ2UuZ2V0KCkpOwogfQogCkBAIC0xMDksOSArMTA5
LDkgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDb250ZXh0KENHQ29udGV4dFJlZiBi
aXRtYXBDb250ZXh0LCBjaGFyIGhhc2hTdHJpbmcKIAogc3RhdGljIHZvaWQgZHVtcEJpdG1hcChD
R0NvbnRleHRSZWYgYml0bWFwQ29udGV4dCwgY29uc3QgY2hhciogY2hlY2tzdW0pCiB7Ci0gICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGVJbWFnZShiaXRtYXBDb250ZXh0KSk7Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+
IGltYWdlRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7Ci0gICAgUmV0
YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gaW1hZ2VEZXN0ID0gYWRvcHRDRihDR0ltYWdl
RGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShpbWFnZURhdGEuZ2V0KCksIGtVVFR5cGVQTkcsIDEs
IDApKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShiaXRtYXBDb250ZXh0KSk7CisgICAgYXV0byBpbWFnZURhdGEgPSBhZG9wdENGKENGRGF0YUNy
ZWF0ZU11dGFibGUoMCwgMCkpOworICAgIGF1dG8gaW1hZ2VEZXN0ID0gYWRvcHRDRihDR0ltYWdl
RGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShpbWFnZURhdGEuZ2V0KCksIGtVVFR5cGVQTkcsIDEs
IDApKTsKICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShpbWFnZURlc3QuZ2V0KCksIGlt
YWdlLmdldCgpLCAwKTsKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShpbWFnZURlc3Qu
Z2V0KCkpOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0NyYXNo
UmVwb3J0ZXJJbmZvLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9DcmFzaFJlcG9y
dGVySW5mby5tbQppbmRleCA0Yzc5YWI1Yjg1ZDY0MTg5YTdlMGEyOTZlZWE5MGMxZDgxMThkYzNk
Li40MTBkOWZkY2IzMWUyYzZlNmNhNzY0OTU2MTQ2MDYzOGMwOTEwNWViIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0NyYXNoUmVwb3J0ZXJJbmZvLm1tCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0KQEAgLTM1LDEy
ICszNSwxMiBAQCBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGljIFN0cmluZyB0ZXN0UGF0aEZyb21V
UkwoV0tVUkxSZWYgdXJsKQogewotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2ZVUkwgPSBhZG9w
dENGKFdLVVJMQ29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybCkpOworICAgIGF1dG8g
Y2ZVUkwgPSBhZG9wdENGKFdLVVJMQ29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybCkp
OwogICAgIGlmICghY2ZVUkwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gc2NoZW1lQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVNjaGVt
ZShjZlVSTC5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcGF0aENGU3RyaW5n
ID0gYWRvcHRDRihDRlVSTENvcHlQYXRoKGNmVVJMLmdldCgpKSk7CisgICAgYXV0byBzY2hlbWVD
RlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5U2NoZW1lKGNmVVJMLmdldCgpKSk7CisgICAgYXV0
byBwYXRoQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVBhdGgoY2ZVUkwuZ2V0KCkpKTsKIAog
ICAgIFN0cmluZyBzY2hlbWVTdHJpbmcoc2NoZW1lQ0ZTdHJpbmcuZ2V0KCkpOwogICAgIFN0cmlu
ZyBwYXRoU3RyaW5nKHBhdGhDRlN0cmluZy5nZXQoKSk7CkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRp
YyBTdHJpbmcgdGVzdFBhdGhGcm9tVVJMKFdLVVJMUmVmIHVybCkKICAgICBpZiAoIWVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0cmluZywgImh0dHAiKSAmJiAhZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3RyaW5nLCAiaHR0cHMiKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBob3N0Q0ZTdHJpbmcg
PSBhZG9wdENGKENGVVJMQ29weUhvc3ROYW1lKGNmVVJMLmdldCgpKSk7CisgICAgYXV0byBob3N0
Q0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weUhvc3ROYW1lKGNmVVJMLmdldCgpKSk7CiAgICAg
U3RyaW5nIGhvc3RTdHJpbmcoaG9zdENGU3RyaW5nLmdldCgpKTsKICAgICBpZiAoaG9zdFN0cmlu
ZyA9PSAiMTI3LjAuMC4xIikKICAgICAgICAgcmV0dXJuIHBhdGhTdHJpbmc7CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0gYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KaW5kZXgg
MzY1MzM3YWRmOTlmMGI5Y2RkNmFmMDk3ZmMwMmJlODdhNjcxNjY1Ny4uNzEzMDMyNmEzZTYxY2Uy
YmQwYTc2ZGY3Mjg5OGQ5ZTRiMDA2M2IwNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQpAQCAtMTQyLDcgKzE0Miw3IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZURhdGFTdG9yZShXS1BhZ2VDb25m
aWd1cmF0aW9uUmVmLCBjb25zdCBUCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3Jl
YXRlV2ViVmlldyhXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0
aW9ucykKIHsKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29waWVkQ29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsK
KyAgICBhdXRvIGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtnbG9iYWxXZWJWaWV3Q29u
ZmlndXJhdGlvbiBjb3B5XSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChv
cHRpb25zLnVzZURhdGFEZXRlY3Rpb24pCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KaW5kZXggNWM4NjJlOWIwZWM3N2QwNWUwNzcy
OWRjZTY0NzZmNTg5MjEyM2IzOC4uOTE1ZjQ3NmM2MTVhZTYxMDkwZDkwY2E3OTc2YmY4ZjJjOTli
NTY2YiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVy
V0tXZWJWaWV3Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5l
cldLV2ViVmlldy5tbQpAQCAtOTAsNyArOTAsNyBAQCBJR05PUkVfV0FSTklOR1NfQkVHSU4oImRl
cHJlY2F0ZWQtaW1wbGVtZW50YXRpb25zIikKIC0gKHZvaWQpZHJhZ0ltYWdlOihOU0ltYWdlICop
YW5JbWFnZSBhdDooTlNQb2ludCl2aWV3TG9jYXRpb24gb2Zmc2V0OihOU1NpemUpaW5pdGlhbE9m
ZnNldCBldmVudDooTlNFdmVudCAqKWV2ZW50IHBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBi
b2FyZCBzb3VyY2U6KGlkKXNvdXJjZU9iaiBzbGlkZUJhY2s6KEJPT0wpc2xpZGVGbGFnCiBJR05P
UkVfV0FSTklOR1NfRU5ECiB7Ci0gICAgUmV0YWluUHRyPFdlYktpdFRlc3RSdW5uZXJEcmFnZ2lu
Z0luZm8+IGRyYWdnaW5nSW5mbyA9IGFkb3B0TlMoW1tXZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJ
bmZvIGFsbG9jXSBpbml0V2l0aEltYWdlOmFuSW1hZ2Ugb2Zmc2V0OmluaXRpYWxPZmZzZXQgcGFz
dGVib2FyZDpwYm9hcmQgc291cmNlOnNvdXJjZU9ial0pOworICAgIGF1dG8gZHJhZ2dpbmdJbmZv
ID0gYWRvcHROUyhbW1dlYktpdFRlc3RSdW5uZXJEcmFnZ2luZ0luZm8gYWxsb2NdIGluaXRXaXRo
SW1hZ2U6YW5JbWFnZSBvZmZzZXQ6aW5pdGlhbE9mZnNldCBwYXN0ZWJvYXJkOnBib2FyZCBzb3Vy
Y2U6c291cmNlT2JqXSk7CiAgICAgW3NlbGYgZHJhZ2dpbmdVcGRhdGVkOmRyYWdnaW5nSW5mby5n
ZXQoKV07CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29j
b2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29j
b2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaAppbmRleCBhYmMwYTUwYzk3MGMxYmIzM2YxZmIx
MDkzOTM1MmFmOGNhN2UwNDAzLi5jYzk4MTM5NDI0ZjI4ODA2NDQzOTg5ODM0NWMzZTdkNGVhNTUz
Mzc4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29u
dHJvbGxlckNvY29hLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlw
dENvbnRyb2xsZXJDb2NvYS5oCkBAIC0zMiwxMiArMzIsMTcgQEAgT0JKQ19DTEFTUyBUZXN0UnVu
bmVyV0tXZWJWaWV3OwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNzIFVJU2NyaXB0Q29udHJvbGxl
ckNvY29hIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvbW1vbiB7Ci1wdWJsaWM6Citwcm90
ZWN0ZWQ6CisgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EoVUlTY3JpcHRDb250
ZXh0Jik7CisgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldygpIGNvbnN0OworCisgICAg
dm9pZCBkb0FzeW5jVGFzayhKU1ZhbHVlUmVmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKICAgICB2
b2lkIHNldFZpZXdTY2FsZShkb3VibGUpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TWluaW11bUVm
ZmVjdGl2ZVdpZHRoKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBiZWNvbWVGaXJzdFJlc3Bv
bmRlcigpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzaWduRmlyc3RSZXNwb25kZXIoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRvQXN5bmNUYXNrKEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIHZvaWQg
cmVtb3ZlVmlld0Zyb21XaW5kb3coSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCBhZGRW
aWV3VG9XaW5kb3coSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCBvdmVycmlkZVByZWZl
cmVuY2UoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKSBvdmVycmlkZTsKQEAgLTU5LDExICs2NCw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW5zZXJ0QXR0YWNobWVudEZvckZpbGVQYXRoKEpTU3Ry
aW5nUmVmIGZpbGVQYXRoLCBKU1N0cmluZ1JlZiBjb250ZW50VHlwZSwgSlNWYWx1ZVJlZiBjYWxs
YmFjaykgb3ZlcnJpZGU7CiAKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBVSVNjcmlwdENvbnRy
b2xsZXJDb2NvYShVSVNjcmlwdENvbnRleHQmKTsKLSAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3
ZWJWaWV3KCkgY29uc3Q7Ci0KLXByaXZhdGU6CiAgICAgdm9pZCBjb21wbGV0ZVRhc2tBc3luY2hy
b25vdXNseUFmdGVyQWN0aXZpdHlTdGF0ZVVwZGF0ZSh1bnNpZ25lZCBjYWxsYmFja0lEKTsKIH07
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250
cm9sbGVyQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29u
dHJvbGxlckNvY29hLm1tCmluZGV4IDk4YmI3NGI0MTNiOTUwM2U2OTg4MDdlZGI4NjI5OGUzNzBk
Y2QwZjIuLjU4NDc5NzZmMjE4NTdmNTNmNDg1ZWNiMWZiMWViOTExNzIxYTU2ZGEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2Eu
bW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJD
b2NvYS5tbQpAQCAtMTM1LDIyICsxMzUsMTggQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2Nv
YTo6YWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYgY2FsbGJhY2spCiAKIHZvaWQgVUlTY3JpcHRD
b250cm9sbGVyQ29jb2E6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJlbmNl
UmVmLCBKU1N0cmluZ1JlZiB2YWx1ZVJlZikKIHsKLSAgICBXS1ByZWZlcmVuY2VzICpwcmVmZXJl
bmNlcyA9IHdlYlZpZXcoKS5jb25maWd1cmF0aW9uLnByZWZlcmVuY2VzOwotCi0gICAgU3RyaW5n
IHByZWZlcmVuY2UgPSB0b1dURlN0cmluZyh0b1dLKHByZWZlcmVuY2VSZWYpKTsKLSAgICBTdHJp
bmcgdmFsdWUgPSB0b1dURlN0cmluZyh0b1dLKHZhbHVlUmVmKSk7Ci0gICAgaWYgKHByZWZlcmVu
Y2UgPT0gIldlYktpdE1pbmltdW1Gb250U2l6ZSIpCi0gICAgICAgIHByZWZlcmVuY2VzLm1pbmlt
dW1Gb250U2l6ZSA9IHZhbHVlLnRvRG91YmxlKCk7CisgICAgaWYgKHRvV1RGU3RyaW5nKHByZWZl
cmVuY2VSZWYpID09ICJXZWJLaXRNaW5pbXVtRm9udFNpemUiKQorICAgICAgICB3ZWJWaWV3KCku
Y29uZmlndXJhdGlvbi5wcmVmZXJlbmNlcy5taW5pbXVtRm9udFNpemUgPSB0b1dURlN0cmluZyh2
YWx1ZVJlZikudG9Eb3VibGUoKTsKIH0KIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6
ZmluZFN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcsIHVuc2lnbmVkIGxvbmcgb3B0aW9ucywgdW5z
aWduZWQgbG9uZyBtYXhDb3VudCkKIHsKLSAgICBbd2ViVmlldygpIF9maW5kU3RyaW5nOnRvV1RG
U3RyaW5nKHRvV0soc3RyaW5nKSkgb3B0aW9uczpvcHRpb25zIG1heENvdW50Om1heENvdW50XTsK
KyAgICBbd2ViVmlldygpIF9maW5kU3RyaW5nOnRvV1RGU3RyaW5nKHN0cmluZykgb3B0aW9uczpv
cHRpb25zIG1heENvdW50Om1heENvdW50XTsKIH0KIAogSlNPYmplY3RSZWYgVUlTY3JpcHRDb250
cm9sbGVyQ29jb2E6OmNvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbShKU1N0cmluZ1JlZiBpbnRl
cmZhY2VJdGVtKSBjb25zdAogewotICAgIE5TRGljdGlvbmFyeSAqY29udGVudERpY3Rpb25hcnkg
PSBbd2ViVmlldygpIF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06dG9XVEZTdHJpbmcodG9X
SyhpbnRlcmZhY2VJdGVtKSldOworICAgIE5TRGljdGlvbmFyeSAqY29udGVudERpY3Rpb25hcnkg
PSBbd2ViVmlldygpIF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06dG9XVEZTdHJpbmcoaW50
ZXJmYWNlSXRlbSldOwogICAgIHJldHVybiBKU1ZhbHVlVG9PYmplY3QobV9jb250ZXh0LT5qc0Nv
bnRleHQoKSwgW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OmNvbnRlbnREaWN0aW9uYXJ5IGluQ29u
dGV4dDpbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOm1fY29udGV4dC0+
anNDb250ZXh0KCldXS5KU1ZhbHVlUmVmLCBudWxscHRyKTsKIH0KIApAQCAtMjE5LDEyICsyMTUs
MTAgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6cGFzdGUoKQogdm9pZCBVSVNjcmlw
dENvbnRyb2xsZXJDb2NvYTo6aW5zZXJ0QXR0YWNobWVudEZvckZpbGVQYXRoKEpTU3RyaW5nUmVm
IGZpbGVQYXRoLCBKU1N0cmluZ1JlZiBjb250ZW50VHlwZSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykK
IHsKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250ZXh0LT5wcmVwYXJlRm9yQXN5bmNU
YXNrKGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25QZXJzaXN0ZW50KTsKLQotICAgIFJldGFpblB0
cjxDRlVSTFJlZj4gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmN1cnJlbnRUZXN0VVJMKCkpKTsK
LSAgICBSZXRhaW5QdHI8TlNVUkw+IGF0dGFjaG1lbnRVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQ
YXRoOnRvV1RGU3RyaW5nKHRvV0soZmlsZVBhdGgpKSByZWxhdGl2ZVRvVVJMOihfX2JyaWRnZSBO
U1VSTCAqKXRlc3RVUkwuZ2V0KCldOwotCi0gICAgYXV0byBmaWxlV3JhcHBlciA9IGFkb3B0TlMo
W1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFVSTDphdHRhY2htZW50VVJMLmdldCgpIG9w
dGlvbnM6MCBlcnJvcjpuaWxdKTsKLSAgICBbd2ViVmlldygpIF9pbnNlcnRBdHRhY2htZW50V2l0
aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyLmdldCgpIGNvbnRlbnRUeXBlOnRvV1RGU3RyaW5nKHRv
V0soY29udGVudFR5cGUpKSBjb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzKSB7CisgICAgYXV0byB0
ZXN0VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY3VycmVudFRlc3RVUkwoKSkpOworICAgIGF1dG8gYXR0
YWNobWVudFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6dG9XVEZTdHJpbmcoZmlsZVBhdGgp
IHJlbGF0aXZlVG9VUkw6KF9fYnJpZGdlIE5TVVJMICopdGVzdFVSTC5nZXQoKV07CisgICAgYXV0
byBmaWxlV3JhcHBlciA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFVS
TDphdHRhY2htZW50VVJMIG9wdGlvbnM6MCBlcnJvcjpuaWxdKTsKKyAgICBbd2ViVmlldygpIF9p
bnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyLmdldCgpIGNvbnRlbnRU
eXBlOnRvV1RGU3RyaW5nKGNvbnRlbnRUeXBlKSBjb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzKSB7
CiAgICAgICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBt
X2NvbnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNrSUQpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IubW0gYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbQppbmRleCBlMjk4MzhiYTgyOGZi
NGJkOTA4NTdhYjZiZWYyZmQ0NjU5ZmI0MjE4Li4wYzQ0NjMzNWIyNDBkNmE3ZTA2NzQxNGNhOWMz
MDQwYWE2ZTM1NDYzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURF
dmVudEdlbmVyYXRvci5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVu
dEdlbmVyYXRvci5tbQpAQCAtMTg5LDcgKzE4OSw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0CiAK
IC0gKHZvaWQpX3NlbmRJT0hJREtleWJvYXJkRXZlbnQ6KHVpbnQ2NF90KXRpbWVzdGFtcCB1c2Fn
ZToodWludDMyX3QpdXNhZ2UgaXNLZXlEb3duOihib29sKWlzS2V5RG93bgogewotICAgIFJldGFp
blB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0ZUtl
eWJvYXJkRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRv
cHRDRihJT0hJREV2ZW50Q3JlYXRlS2V5Ym9hcmRFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LAog
ICAgICAgICB0aW1lc3RhbXAsCiAgICAgICAgIGtISURQYWdlX0tleWJvYXJkT3JLZXlwYWQsCiAg
ICAgICAgIHVzYWdlLApAQCAtMzYxLDcgKzM2MSw3IEBAIC0gKElPSElERXZlbnRSZWYpX2NyZWF0
ZUlPSElERXZlbnRUeXBlOihIYW5kRXZlbnRUeXBlKWV2ZW50VHlwZQogICAgICAgICBldmVudE1h
c2sgfD0ga0lPSElERGlnaXRpemVyRXZlbnRJZGVudGl0eTsKIAogICAgIHVpbnQ2NF90IG1hY2hU
aW1lID0gbWFjaF9hYnNvbHV0ZV90aW1lKCk7Ci0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+
IGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlRGlnaXRpemVyRXZlbnQoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgbWFjaFRpbWUsCisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoSU9I
SURFdmVudENyZWF0ZURpZ2l0aXplckV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1hY2hUaW1l
LAogICAgICAgICBrSU9ISUREaWdpdGl6ZXJUcmFuc2R1Y2VyVHlwZUhhbmQsCiAgICAgICAgIDAs
CiAgICAgICAgIDAsCkBAIC00NTMsNyArNDUzLDcgQEAgLSAoQk9PTClfc2VuZEhJREV2ZW50OihJ
T0hJREV2ZW50UmVmKWV2ZW50UmVmCiAgICAgICAgIF9pb1N5c3RlbUNsaWVudCA9IElPSElERXZl
bnRTeXN0ZW1DbGllbnRDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7CiAKICAgICBpZiAoZXZl
bnRSZWYpIHsKLSAgICAgICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IHN0cm9uZ0V2ZW50ID0g
ZXZlbnRSZWY7CisgICAgICAgIGF1dG8gc3Ryb25nRXZlbnQgPSByZXRhaW5QdHIoZXZlbnRSZWYp
OwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewog
ICAgICAgICAgICAgdWludDMyX3QgY29udGV4dElEID0gW1VJQXBwbGljYXRpb24gc2hhcmVkQXBw
bGljYXRpb25dLmtleVdpbmRvdy5fY29udGV4dElkOwogICAgICAgICAgICAgQVNTRVJUKGNvbnRl
eHRJRCk7CkBAIC01MTIsNyArNTEyLDcgQEAgLSAodm9pZClfdXBkYXRlVG91Y2hQb2ludHM6KENH
UG9pbnQqKXBvaW50cyBjb3VudDooTlNVSW50ZWdlciljb3VudAogICAgICAgICBbW0dlbmVyYXRl
ZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVw
ZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aSB3aXRoUG9pbnRJbldpbmRvd0Nvb3JkaW5hdGVz
OnBvaW50c1tpXSBpc1RvdWNoaW5nOllFU107CiAgICAgfQogICAgIAotICAgIFJldGFpblB0cjxJ
T0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRU
eXBlOmhhbmRFdmVudFR5cGVdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBf
Y3JlYXRlSU9ISURFdmVudFR5cGU6aGFuZEV2ZW50VHlwZV0pOwogICAgIFtzZWxmIF9zZW5kSElE
RXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC01MjksNyArNTI5LDcgQEAgLSAodm9pZCl0
b3VjaERvd25BdFBvaW50czooQ0dQb2ludCopbG9jYXRpb25zIHRvdWNoQ291bnQ6KE5TVUludGVn
ZXIpdG91Y2hDb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFy
ZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91
Y2g6aW5kZXggd2l0aFBvaW50SW5XaW5kb3dDb29yZGluYXRlczpsb2NhdGlvbnNbaW5kZXhdIGlz
VG91Y2hpbmc6WUVTXTsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZl
bnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpIYW5kRXZlbnRUb3Vj
aGVkXSk7CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZl
bnRUeXBlOkhhbmRFdmVudFRvdWNoZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50
UmVmLmdldCgpXTsKIH0KIApAQCAtNTYzLDcgKzU2Myw3IEBAIC0gKHZvaWQpbGlmdFVwQXRQb2lu
dHM6KENHUG9pbnQqKWxvY2F0aW9ucyB0b3VjaENvdW50OihOU1VJbnRlZ2VyKXRvdWNoQ291bnQK
ICAgICAgICAgW1tHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVkR2VuZXJhdGVkVG91
Y2hlc0RlYnVnV2luZG93XSB1cGRhdGVEZWJ1Z0luZGljYXRvckZvclRvdWNoOmluZGV4IHdpdGhQ
b2ludEluV2luZG93Q29vcmRpbmF0ZXM6Q0dQb2ludFplcm8gaXNUb3VjaGluZzpOT107CiAgICAg
fQogICAgIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0Yo
W3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudExpZnRlZF0pOworICAgIGF1dG8g
ZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpIYW5kRXZlbnRM
aWZ0ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKICAgICAK
ICAgICBfYWN0aXZlUG9pbnRDb3VudCA9IG5ld1BvaW50Q291bnQ7CkBAIC02NDEsNyArNjQxLDcg
QEAgLSAodm9pZClzdHlsdXNEb3duQXRQb2ludDooQ0dQb2ludClsb2NhdGlvbiBhemltdXRoQW5n
bGU6KENHRmxvYXQpYXppbXV0aEFuZ2xlIGEKICAgICBfYWN0aXZlUG9pbnRzWzBdLmF6aW11dGhB
bmdsZSA9IE1fUEkgKiAyIC0gYXppbXV0aEFuZ2xlOwogICAgIF9hY3RpdmVQb2ludHNbMF0uYWx0
aXR1ZGVBbmdsZSA9IE1fUElfMiAtIGFsdGl0dWRlQW5nbGU7CiAKLSAgICBSZXRhaW5QdHI8SU9I
SURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlw
ZTpTdHlsdXNFdmVudFRvdWNoZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2Vs
ZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRUb3VjaGVkXSk7CiAgICAgW3NlbGYg
X3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTY1NSw3ICs2NTUsNyBAQCAt
ICh2b2lkKXN0eWx1c01vdmVUb1BvaW50OihDR1BvaW50KWxvY2F0aW9uIGF6aW11dGhBbmdsZToo
Q0dGbG9hdClhemltdXRoQW5nbGUgYQogICAgIF9hY3RpdmVQb2ludHNbMF0uYXppbXV0aEFuZ2xl
ID0gTV9QSSAqIDIgLSBhemltdXRoQW5nbGU7CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRpdHVk
ZUFuZ2xlID0gTV9QSV8yIC0gYWx0aXR1ZGVBbmdsZTsKIAotICAgIFJldGFpblB0cjxJT0hJREV2
ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0
eWx1c0V2ZW50TW92ZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3Jl
YXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRNb3ZlZF0pOwogICAgIFtzZWxmIF9zZW5kSElE
RXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC02NjgsNyArNjY4LDcgQEAgLSAodm9pZClz
dHlsdXNVcEF0UG9pbnQ6KENHUG9pbnQpbG9jYXRpb24KICAgICBfYWN0aXZlUG9pbnRzWzBdLmF6
aW11dGhBbmdsZSA9IDA7CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRpdHVkZUFuZ2xlID0gMDsK
IAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYg
X2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TGlmdGVkXSk7CisgICAgYXV0byBldmVu
dFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TGlm
dGVkXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAg
LTEwMjEsNyArMTAyMSw3IEBAIC0gKHZvaWQpZGlzcGF0Y2hFdmVudFdpdGhJbmZvOihOU0RpY3Rp
b25hcnkgKilldmVudEluZm8KIHsKICAgICBBU1NFUlQoW05TVGhyZWFkIGlzTWFpblRocmVhZF0p
OwogCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2Vs
ZiBfY3JlYXRlSU9ISURFdmVudFdpdGhJbmZvOmV2ZW50SW5mb10pOworICAgIGF1dG8gZXZlbnRS
ZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50V2l0aEluZm86ZXZlbnRJbmZvXSk7
CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5oIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKaW5kZXgg
MjhkMDYwYzZkZmM0NzFhOTA1NDkwNjgzOTVjM2Q0MGY2YTljMDk2Yi4uODU0NjQ0NzY2ZDhiYzVh
ODE1ZDI2N2U5YTdiYTRhMjA1ZDZlNjEyMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKQEAgLTI1LDExICsyNSwxMSBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKICNpbXBvcnQgIlVJU2Ny
aXB0Q29udHJvbGxlckNvY29hLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZsb2F0UG9p
bnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CkBAIC0zNywxMyArMzcsMTQgQEAgY2xhc3MgRmxvYXRSZWN0
OwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVUlTY3JpcHRDb250cm9sbGVySU9TIDogcHVi
bGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKK2NsYXNzIFVJU2NyaXB0Q29udHJvbGxlcklP
UyBmaW5hbCA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSB7CiBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVySU9TKFVJU2NyaXB0Q29udGV4dCYgY29udGV4dCkK
ICAgICAgICAgOiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShjb250ZXh0KQogICAgIHsKICAgICB9
CiAKK3ByaXZhdGU6CiAgICAgdm9pZCB3YWl0Rm9yT3V0c3RhbmRpbmdDYWxsYmFja3MoKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRvQWZ0ZXJQcmVzZW50YXRpb25VcGRhdGUoSlNWYWx1ZVJlZikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZShKU1Zh
bHVlUmVmKSBvdmVycmlkZTsKQEAgLTE1Niw3ICsxNTcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXREaWRFbmRTY3JvbGxpbmdDYWxsYmFjayhKU1ZhbHVlUmVmKSBvdmVycmlkZTsKICAgICB2b2lk
IGNsZWFyQWxsQ2FsbGJhY2tzKCkgb3ZlcnJpZGU7CiAKLXByaXZhdGU6CiAgICAgdm9pZCB3YWl0
Rm9yTW9kYWxUcmFuc2l0aW9uVG9GaW5pc2goKSBjb25zdDsKICAgICB2b2lkIHdhaXRGb3JTaW5n
bGVUYXBUb1Jlc2V0KCkgY29uc3Q7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RGb3JNZW51
QWN0aW9uKENGU3RyaW5nUmVmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQppbmRleCAxMzBjNDk3YzI0MGQ4MzhiYjRh
ZmZmZDIwNzMxNDE3NWE4M2RiYjI2Li43YWY2ZWNmNTA5ODVmMTVlZjQ3YzE5MThiNjVhMmViZGE2
ZDI2YTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENv
bnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRD
b250cm9sbGVySU9TLm1tCkBAIC02OCwyNCArNjgsMTQgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAq
dG9OU0RpY3Rpb25hcnkoQ0dSZWN0IHJlY3QpCiAgICAgfTsKIH0KIAotc3RhdGljIHVuc2lnbmVk
IGFycmF5TGVuZ3RoKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBhcnJheSkKLXsK
LSAgICBhdXRvIGxlbmd0aFN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJsZW5ndGgiKSk7Ci0gICAgaWYgKGF1dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFBy
b3BlcnR5KGNvbnRleHQsIGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIG51bGxwdHIpKQotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBsZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMgVmVj
dG9yPFN0cmluZz4gcGFyc2VNb2RpZmllckFycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmIGFycmF5VmFsdWUpCiB7CiAgICAgaWYgKCFhcnJheVZhbHVlKQogICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgLy8gVGhlIHZhbHVlIG1heSBlaXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBh
IHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBvZiBtb2RpZmllcnMuCi0gICAgaWYgKEpTVmFs
dWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkgewotICAgICAgICBhdXRvIHN0cmluZyA9
IHRvV1RGU3RyaW5nKHRvV0soYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcnJh
eVZhbHVlLCBudWxscHRyKSkpKTsKLSAgICAgICAgcmV0dXJuIHsgc3RyaW5nIH07Ci0gICAgfQor
ICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1ZSkpCisgICAgICAgIHJl
dHVybiB7IHRvV1RGU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpIH07CiAKICAgICBpZiAoIUpT
VmFsdWVJc09iamVjdChjb250ZXh0LCBhcnJheVZhbHVlKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
QEAgLTkzLDE2ICs4Myw4IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZU1vZGlmaWVyQXJy
YXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWCiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOwogICAgIFZlY3RvcjxTdHJpbmc+
IG1vZGlmaWVyczsKICAgICBtb2RpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIEpTVmFsdWVSZWYgdmFsdWUg
PSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgJmV4Y2VwdGlv
bik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgYXV0byBzdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVl
LCAmZXhjZXB0aW9uKSk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgbW9kaWZpZXJzLmFwcGVuZCh0b1dURlN0cmluZyh0b1dLKHN0cmluZy5n
ZXQoKSkpKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQorICAgICAgICBtb2RpZmllcnMuYXBwZW5kKHRvV1RGU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0
R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBudWxscHRyKSkpOwogICAgIHJl
dHVybiBtb2RpZmllcnM7CiB9CiAKQEAgLTUxNCwxMCArNDk2LDkgQEAgdm9pZCBVSVNjcmlwdENv
bnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJlS2V5Ym9hcmQoSlNTdHJpbmdS
ZWYgY2hhcmEKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250ZXh0LT5wcmVwYXJlRm9y
QXN5bmNUYXNrKGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25QZXJzaXN0ZW50KTsKIAogICAgIC8v
IEFzc3VtZXMgdGhhdCB0aGUga2V5Ym9hcmQgaXMgYWxyZWFkeSBzaG93bi4KLSAgICBbW0hJREV2
ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlQcmVzczp0b1dURlN0cmlu
Zyh0b1dLKGNoYXJhY3RlcikpIGNvbXBsZXRpb25CbG9jazptYWtlQmxvY2tQdHIoW3RoaXMsIHN0
cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewotICAgICAgICBpZiAoIW1f
Y29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9jb250ZXh0LT5hc3luY1Rh
c2tDb21wbGV0ZShjYWxsYmFja0lEKTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJ
REV2ZW50R2VuZXJhdG9yXSBrZXlQcmVzczp0b1dURlN0cmluZyhjaGFyYWN0ZXIpIGNvbXBsZXRp
b25CbG9jazptYWtlQmxvY2tQdHIoW3N0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJh
Y2tJRF0geworICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9jb250ZXh0KQorICAgICAgICAgICAg
c3Ryb25nVGhpcy0+bV9jb250ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShjYWxsYmFja0lEKTsKICAg
ICB9KS5nZXQoKV07CiB9CiAKQEAgLTUzNCw3ICs1MTUsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJv
bGxlcklPUzo6cmF3S2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiB7CiAgICAgLy8gS2V5IGNhbiBi
ZSBlaXRoZXIgYSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3Bl
Y2lhbCBrZXkgKGUuZy4gImRvd25BcnJvdyIpLgogICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtu
b3dzIGhvdyB0byBtYXAgdGhlc2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXlj
b2RlLgotICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtl
eURvd246dG9XVEZTdHJpbmcodG9XSyhrZXkpKV07CisgICAgW1tISURFdmVudEdlbmVyYXRvciBz
aGFyZWRISURFdmVudEdlbmVyYXRvcl0ga2V5RG93bjp0b1dURlN0cmluZyhrZXkpXTsKICAgICBb
W0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBzZW5kTWFya2VySElE
RXZlbnRXaXRoQ29tcGxldGlvbkJsb2NrOl57IC8qIERvIG5vdGhpbmcgKi8gfV07CiB9CiAKQEAg
LTU0Miw3ICs1MjMsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6cmF3S2V5VXAoSlNT
dHJpbmdSZWYga2V5KQogewogICAgIC8vIEtleSBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIFVuaWNv
ZGUgY29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpYWwga2V5IChlLmcuICJkb3duQXJy
b3ciKS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93cyBob3cgdG8gbWFwIHRoZXNlIHNw
ZWNpYWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29kZS4KLSAgICBbW0hJREV2ZW50R2Vu
ZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlVcDp0b1dURlN0cmluZyh0b1dLKGtl
eSkpXTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBr
ZXlVcDp0b1dURlN0cmluZyhrZXkpXTsKICAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJ
REV2ZW50R2VuZXJhdG9yXSBzZW5kTWFya2VySElERXZlbnRXaXRoQ29tcGxldGlvbkJsb2NrOl57
IC8qIERvIG5vdGhpbmcgKi8gfV07CiB9CiAKQEAgLTU1MCw3ICs1MzEsNyBAQCB2b2lkIFVJU2Ny
aXB0Q29udHJvbGxlcklPUzo6a2V5RG93bihKU1N0cmluZ1JlZiBjaGFyYWN0ZXIsIEpTVmFsdWVS
ZWYgbW9kaWZpZXJBcgogewogICAgIC8vIENoYXJhY3RlciBjYW4gYmUgZWl0aGVyIGEgc2luZ2xl
IFVuaWNvZGUgY29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpYWwga2V5IChlLmcuICJk
b3duQXJyb3ciKS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93cyBob3cgdG8gbWFwIHRo
ZXNlIHNwZWNpYWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29kZS4KLSAgICBTdHJpbmcg
aW5wdXRTdHJpbmcgPSB0b1dURlN0cmluZyh0b1dLKGNoYXJhY3RlcikpOworICAgIGF1dG8gaW5w
dXRTdHJpbmcgPSB0b1dURlN0cmluZyhjaGFyYWN0ZXIpOwogICAgIGF1dG8gbW9kaWZpZXJGbGFn
cyA9IHBhcnNlTW9kaWZpZXJBcnJheShtX2NvbnRleHQtPmpzQ29udGV4dCgpLCBtb2RpZmllckFy
cmF5KTsKIAogICAgIGZvciAoYXV0byYgbW9kaWZpZXJGbGFnIDogbW9kaWZpZXJGbGFncykKQEAg
LTcyNyw3ICs3MDgsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6YXBwbHlBdXRvY29y
cmVjdGlvbihKU1N0cmluZ1JlZiBuZXdTdHJpbmcsIEpTU3RyaW5nUgogICAgIHVuc2lnbmVkIGNh
bGxiYWNrSUQgPSBtX2NvbnRleHQtPnByZXBhcmVGb3JBc3luY1Rhc2soY2FsbGJhY2ssIENhbGxi
YWNrVHlwZU5vblBlcnNpc3RlbnQpOwogCiAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmll
dyA9IHRoaXMtPndlYlZpZXcoKTsKLSAgICBbd2ViVmlldyBhcHBseUF1dG9jb3JyZWN0aW9uOnRv
V1RGU3RyaW5nKHRvV0sobmV3U3RyaW5nKSkgdG9TdHJpbmc6dG9XVEZTdHJpbmcodG9XSyhvbGRT
dHJpbmcpKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKKyAgICBbd2ViVmlldyBhcHBseUF1
dG9jb3JyZWN0aW9uOnRvV1RGU3RyaW5nKG5ld1N0cmluZykgdG9TdHJpbmc6dG9XVEZTdHJpbmco
b2xkU3RyaW5nKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJv
bmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKICAgICAgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgbWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJv
bmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKICAgICAgICAgICAgIC8vIGFw
cGx5QXV0b2NvcnJlY3Rpb24gY2FuIGNhbGwgaXRzIGNvbXBsZXRpb24gaGFuZGxlciBzeW5jaHJv
bm91c2x5LAogICAgICAgICAgICAgLy8gd2hpY2ggbWFrZXMgVUlTY3JpcHRDb250cm9sbGVyIHVu
aGFwcHkgKHNlZSBidWcgMTcyODg0KS4KQEAgLTExNTcsNyArMTEzOCw3IEBAIGJvb2wgVUlTY3Jp
cHRDb250cm9sbGVySU9TOjppc1Nob3dpbmdEYXRhTGlzdFN1Z2dlc3Rpb25zKCkgY29uc3QKIAog
dm9pZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnNldEtleWJvYXJkSW5wdXRNb2RlSWRlbnRpZmll
cihKU1N0cmluZ1JlZiBpZGVudGlmaWVyKQogewotICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRLZXlib2FyZElucHV0TW9kZUlkZW50aWZpZXIodG9XVEZTdHJpbmcodG9XSyhpZGVu
dGlmaWVyKSkpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRLZXlib2FyZElu
cHV0TW9kZUlkZW50aWZpZXIodG9XVEZTdHJpbmcoaWRlbnRpZmllcikpOwogfQogCiAvLyBGSVhN
RTogV3JpdGUgdGhpcyBpbiB0ZXJtcyBvZiBISURFdmVudEdlbmVyYXRvciBvbmNlIHdlIGtub3cg
aG93IHRvIHJlc2V0IGNhcHMgbG9jayBzdGF0ZQpAQCAtMTE3OCw3ICsxMTU5LDcgQEAgYm9vbCBV
SVNjcmlwdENvbnRyb2xsZXJJT1M6OmtleWJvYXJkSXNBdXRvbWF0aWNhbGx5U2hpZnRlZCgpIGNv
bnN0CiAKIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6YXR0YWNobWVudEluZm8o
SlNTdHJpbmdSZWYganNBdHRhY2htZW50SWRlbnRpZmllcikKIHsKLSAgICBhdXRvIGF0dGFjaG1l
bnRJZGVudGlmaWVyID0gdG9XVEZTdHJpbmcodG9XSyhqc0F0dGFjaG1lbnRJZGVudGlmaWVyKSk7
CisgICAgYXV0byBhdHRhY2htZW50SWRlbnRpZmllciA9IHRvV1RGU3RyaW5nKGpzQXR0YWNobWVu
dElkZW50aWZpZXIpOwogICAgIF9XS0F0dGFjaG1lbnQgKmF0dGFjaG1lbnQgPSBbd2ViVmlldygp
IF9hdHRhY2htZW50Rm9ySWRlbnRpZmllcjphdHRhY2htZW50SWRlbnRpZmllcl07CiAgICAgX1dL
QXR0YWNobWVudEluZm8gKmF0dGFjaG1lbnRJbmZvID0gYXR0YWNobWVudC5pbmZvOwogCmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5tbQppbmRleCAwNjcy
YjU4MWJmNjViNWFkOWEyYjg1ZmVhODYxNjQ4ZjIyM2ViNGM1Li4xMDI3Mjg4NDA4NGQyYzEwMjA4
Y2ZhMDcxNGYxYjEwYzVlZmMwYTBiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L21hYy9FdmVudFNlbmRlclByb3h5Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFj
L0V2ZW50U2VuZGVyUHJveHkubW0KQEAgLTI3MiwyMCArMjcyLDEwIEBAIHN0YXRpYyBOU1RpbWVJ
bnRlcnZhbCBhYnNvbHV0ZVRpbWVGb3JFdmVudFRpbWUoZG91YmxlIGN1cnJlbnRFdmVudFRpbWUp
CiAKIEV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVzdENvbnRyb2xsZXIqIHRl
c3RDb250cm9sbGVyKQogICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0Q29udHJvbGxlcikKLSAg
ICAsIG1fdGltZSgwKQotICAgICwgbV9wb3NpdGlvbigpCi0gICAgLCBtX2xlZnRNb3VzZUJ1dHRv
bkRvd24oZmFsc2UpCi0gICAgLCBtX2NsaWNrQ291bnQoMCkKLSAgICAsIG1fY2xpY2tUaW1lKDAp
Ci0gICAgLCBtX2NsaWNrUG9zaXRpb24oKQotICAgICwgbV9jbGlja0J1dHRvbihrV0tFdmVudE1v
dXNlQnV0dG9uTm9CdXR0b24pCi0gICAgLCBldmVudE51bWJlcigwKQogewogfQogCi1FdmVudFNl
bmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSgpCi17Ci19CitFdmVudFNlbmRlclByb3h5Ojp+
RXZlbnRTZW5kZXJQcm94eSgpID0gZGVmYXVsdDsKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1
cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiB7CkBAIC0zOTQsNyArMzg0LDcg
QEAgc3RhdGljIHZvaWQgaGFuZGxlRm9yY2VFdmVudFN5bmNocm9ub3VzbHkoTlNFdmVudCAqZXZl
bnQpCiAKIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5OjpiZWdpblByZXNzdXJl
RXZlbnQoaW50IHN0YWdlKQogewotICAgIFJldGFpblB0cjxFdmVudFNlbmRlclN5bnRoZXRpY0V2
ZW50PiBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5bnRoZXRpY0V2ZW50IGFsbG9jXSBp
bml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bv
c2l0aW9uLnkpCisgICAgYXV0byBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5bnRoZXRp
Y0V2ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9w
b3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIGdsb2JhbExvY2F0aW9uOihbbV90ZXN0
Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSBjb252ZXJ0UmVjdFRv
U2NyZWVuOk5TTWFrZVJlY3QobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIDEsIDEpXS5vcmln
aW4pCiAgICAgICAgIHN0YWdlOnN0YWdlCiAgICAgICAgIHByZXNzdXJlOjAuNQpAQCAtNDA5LDcg
KzM5OSw3IEBAIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5OjpiZWdpblByZXNz
dXJlRXZlbnQoaW50IHN0YWdlKQogCiBSZXRhaW5QdHI8TlNFdmVudD4gRXZlbnRTZW5kZXJQcm94
eTo6cHJlc3N1cmVDaGFuZ2VFdmVudChpbnQgc3RhZ2UsIGZsb2F0IHByZXNzdXJlLCBFdmVudFNl
bmRlclByb3h5OjpQcmVzc3VyZUNoYW5nZURpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgUmV0
YWluUHRyPEV2ZW50U2VuZGVyU3ludGhldGljRXZlbnQ+IGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50
U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpO
U01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKKyAgICBhdXRvIGV2ZW50ID0g
YWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2
ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAg
ICAgICAgZ2xvYmFsTG9jYXRpb246KFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5w
bGF0Zm9ybVdpbmRvdygpIGNvbnZlcnRSZWN0VG9TY3JlZW46TlNNYWtlUmVjdChtX3Bvc2l0aW9u
LngsIG1fcG9zaXRpb24ueSwgMSwgMSldLm9yaWdpbikKICAgICAgICAgc3RhZ2U6c3RhZ2UKICAg
ICAgICAgcHJlc3N1cmU6cHJlc3N1cmUKQEAgLTQzMSwxMCArNDIxLDEwIEBAIHZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6bW91c2VGb3JjZUNsaWNrKCkKIHsKICAgICBzZW5kTW91c2VEb3duVG9TdGFy
dFByZXNzdXJlRXZlbnRzKCk7CiAKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3Vy
ZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcHJlRm9y
Y2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246
OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBmb3JjZUNsaWNrID0gcHJlc3N1
cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0g
ICAgUmV0YWluUHRyPE5TRXZlbnQ+IHJlbGVhc2luZ1ByZXNzdXJlID0gcHJlc3N1cmVDaGFuZ2VF
dmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBi
ZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOworICAgIGF1dG8gcHJlRm9yY2VD
bGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246Oklu
Y3JlYXNpbmcpOworICAgIGF1dG8gZm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwg
UHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gcmVsZWFzaW5n
UHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9u
OjpEZWNyZWFzaW5nKTsKICAgICBOU0V2ZW50ICptb3VzZVVwID0gW05TRXZlbnQgbW91c2VFdmVu
dFdpdGhUeXBlOk5TRXZlbnRUeXBlTGVmdE1vdXNlVXAKICAgICAgICAgbG9jYXRpb246TlNNYWtl
UG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIG1vZGlmaWVyRmxhZ3M6
MApAQCAtNDY4LDkgKzQ1OCw5IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c3RhcnRBbmRDYW5j
ZWxNb3VzZUZvcmNlQ2xpY2soKQogewogICAgIHNlbmRNb3VzZURvd25Ub1N0YXJ0UHJlc3N1cmVF
dmVudHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5Q
cmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBpbmNyZWFzaW5nUHJlc3N1
cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNy
ZWFzaW5nKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVz
c3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsK
KyAgICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMSk7CisgICAgYXV0
byBpbmNyZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hh
bmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIHJlbGVhc2luZ1ByZXNzdXJlID0g
cHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2lu
Zyk7CiAgICAgTlNFdmVudCAqbW91c2VVcCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpO
U0V2ZW50VHlwZUxlZnRNb3VzZVVwCiAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9z
aXRpb24ueCwgbV9wb3NpdGlvbi55KQogICAgICAgICBtb2RpZmllckZsYWdzOjAKQEAgLTUwMyw5
ICs0OTMsOSBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VEb3duKCkKIHsKICAg
ICBzZW5kTW91c2VEb3duVG9TdGFydFByZXNzdXJlRXZlbnRzKCk7CiAKLSAgICBSZXRhaW5QdHI8
TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKLSAgICBSZXRh
aW5QdHI8TlNFdmVudD4gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJl
c3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50
PiBmb3JjZU1vdXNlRG93biA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VE
aXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJl
c3N1cmVFdmVudCgxKTsKKyAgICBhdXRvIHByZUZvcmNlQ2xpY2sgPSBwcmVzc3VyZUNoYW5nZUV2
ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIGZv
cmNlTW91c2VEb3duID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVj
dGlvbjo6SW5jcmVhc2luZyk7CiAKICAgICBOU1ZpZXcgKnRhcmdldFZpZXcgPSBbbV90ZXN0Q29u
dHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkgaGl0VGVzdDpbYmVnaW5QcmVz
c3VyZSBsb2NhdGlvbkluV2luZG93XV07CiAgICAgdGFyZ2V0VmlldyA9IHRhcmdldFZpZXcgPyB0
YXJnZXRWaWV3IDogbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCk7CkBAIC01MjYsOSArNTE2LDkgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNl
RG93bigpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZVVwKCkKIHsKLSAgICBS
ZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgyKTsK
LSAgICBSZXRhaW5QdHI8TlNFdmVudD4gc3RhZ2VUd29FdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZl
bnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwotICAgIFJldGFpblB0
cjxOU0V2ZW50PiBzdGFnZU9uZUV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3Vy
ZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0g
YmVnaW5QcmVzc3VyZUV2ZW50KDIpOworICAgIGF1dG8gc3RhZ2VUd29FdmVudCA9IHByZXNzdXJl
Q2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOworICAg
IGF1dG8gc3RhZ2VPbmVFdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFu
Z2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwogCiAgICAgLy8gU2luY2UgQXBwS2l0IGRvZXMgbm90
IGltcGxlbWVudCBmb3JjZXVwL2Rvd24gYXMgbW91c2UgZXZlbnRzLCB3ZSBuZWVkIHRvIHNlbmQg
dHdvIHByZXNzdXJlIGV2ZW50cyB0byBkZXRlY3QKICAgICAvLyB0aGUgY2hhbmdlIGluIHN0YWdl
IHRoYXQgbWFya3MgdGhvc2UgbW9tZW50cy4KQEAgLTU1MSw4ICs1NDEsOCBAQCB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0IGZvcmNlKQogewogICAgIGludCBz
dGFnZSA9IGZvcmNlIDwgMSA/IDEgOiAyOwogICAgIGZsb2F0IHByZXNzdXJlID0gZm9yY2UgPCAx
ID8gZm9yY2UgOiBmb3JjZSAtIDE7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGJlZ2luUHJlc3N1
cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoc3RhZ2UpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBw
cmVzc3VyZUNoYW5nZWRFdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoc3RhZ2UsIHByZXNzdXJl
LCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBiZWdpblBy
ZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KHN0YWdlKTsKKyAgICBhdXRvIHByZXNzdXJlQ2hh
bmdlZEV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudChzdGFnZSwgcHJlc3N1cmUsIFByZXNzdXJl
Q2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKIAogICAgIE5TVmlldyAqdGFyZ2V0VmlldyA9
IFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSBoaXRUZXN0
OltiZWdpblByZXNzdXJlIGxvY2F0aW9uSW5XaW5kb3ddXTsKICAgICB0YXJnZXRWaWV3ID0gdGFy
Z2V0VmlldyA/IHRhcmdldFZpZXcgOiBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5w
bGF0Zm9ybVZpZXcoKTsKQEAgLTYxMSw4ICs2MDEsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6
OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNp
Z25lZCBrZXlMb2NhdGlvbikKIHsKLSAgICBOU1N0cmluZyogY2hhcmFjdGVyID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhDU3RyaW5nOnRvU1REKGtleSkuY19zdHIoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbmNvZGluZzpbTlNTdHJpbmcgZGVmYXVsdENTdHJpbmdFbmNvZGlu
Z11dOworICAgIE5TU3RyaW5nKiBjaGFyYWN0ZXIgPSB0b1dURlN0cmluZyhrZXkpOwogCiAgICAg
TlNTdHJpbmcgKmV2ZW50Q2hhcmFjdGVyID0gY2hhcmFjdGVyOwogICAgIHVuc2lnbmVkIHNob3J0
IGtleUNvZGUgPSAwOwpAQCAtODMyLDcgKzgyMSw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNp
CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHkpCiB7
Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENHRXZl
bnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAyLCB5
LCB4LCAwKSk7CisgICAgYXV0byBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRl
U2Nyb2xsV2hlZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkp
OwogCiAgICAgLy8gU2V0IHRoZSBDR0V2ZW50IGxvY2F0aW9uIGluIGZsaXBwZWQgY29vcmRzIHJl
bGF0aXZlIHRvIHRoZSBmaXJzdCBzY3JlZW4sIHdoaWNoCiAgICAgLy8gY29tcGVuc2F0ZXMgZm9y
IHRoZSBiZWhhdmlvciBvZiArW05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpdIHdoZW4gdGhlIGV2
ZW50IGhhcwpAQCAtODU5LDcgKzg0OCw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y29udGlu
dW91c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBib29sIHBhZ2VkKQogCiB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQg
eCwgaW50IHksIGludCBwaGFzZSwgaW50IG1vbWVudHVtKQogewotICAgIFJldGFpblB0cjxDR0V2
ZW50UmVmPiBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxF
dmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkpOworICAgIGF1dG8g
Y2dTY3JvbGxFdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZVNjcm9sbFdoZWVsRXZlbnQyKDAs
IGtDR1Njcm9sbEV2ZW50VW5pdExpbmUsIDIsIHksIHgsIDApKTsKIAogICAgIC8vIFNldCB0aGUg
Q0dFdmVudCBsb2NhdGlvbiBpbiBmbGlwcGVkIGNvb3JkcyByZWxhdGl2ZSB0byB0aGUgZmlyc3Qg
c2NyZWVuLCB3aGljaAogICAgIC8vIGNvbXBlbnNhdGVzIGZvciB0aGUgYmVoYXZpb3Igb2YgK1tO
U0V2ZW50IGV2ZW50V2l0aENHRXZlbnQ6XSB3aGVuIHRoZSBldmVudCBoYXMKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbSBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQppbmRleCA2NDE3ODJj
YTk3ZTFkYWZiOTAwOTE5ZGIxOWIzNDc0YTU1NDM4OGU1Li41YTRlOTZiODFlYThjZGEwNmIzN2I0
NjhlNTg4NTllZjcxZWI0NmI4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMv
UGxhdGZvcm1XZWJWaWV3TWFjLm1tCkBAIC02NCw3ICs2NCw3IEBAIFBsYXRmb3JtV2ViVmlldzo6
UGxhdGZvcm1XZWJWaWV3KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24sIGNv
bnN0IFRlCiAgICAgaWYgKG1fb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUpCiAgICAgICAgIFtb
TlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldFZhbHVlOkBZRVMgZm9yS2V5
OkAiV2ViS2l0MlVzZVJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhIl07CiAKLSAgICBSZXRhaW5Q
dHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMo
W2NvbmZpZ3VyYXRpb24gY29weV0pOworICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOwogICAgIFdLUHJlZmVyZW5jZXNTZXRUaHJlYWRl
ZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdlIFdLUHJlZmVyZW5jZXNSZWYpW2NvcGllZENvbmZp
Z3VyYXRpb24gcHJlZmVyZW5jZXNdLCBtX29wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcpOwog
CiAgICAgTlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIFRlc3RDb250cm9sbGVyOjp2aWV3
V2lkdGgsIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KaW5kZXggMTRiN2RjOWQwZjI0ZWMxMGU3
OGFjMmIwZTAzNjVhOWVhNjQ5YWIyNi4uYjIyMjg3MWNkMGEzOTE5ZTMzZWQ2MDZkMGY0NDE2ODg1
NjkzYTIwNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRy
b2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xs
ZXJNYWMubW0KQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1
cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdAogICAg
IGlmICghdGVzdC51cmxDb250YWlucygiY29udGVudGV4dGVuc2lvbnMvIikpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxD
b3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGVzdC51cmwoKSkpOworICAgIGF1dG8gdGVz
dFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGVzdC51
cmwoKSkpOwogICAgIE5TVVJMICpmaWx0ZXJVUkwgPSBbKF9fYnJpZGdlIE5TVVJMICopdGVzdFVS
TC5nZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhFeHRlbnNpb246QCJqc29uIl07CiAKICAgICBfX2Js
b2NrIE5TU3RyaW5nICpjb250ZW50RXh0ZW5zaW9uU3RyaW5nOwpAQCAtMzcxLDE0ICszNzEsMTQg
QEAgc3RhdGljIE5TU2V0ICpzeXN0ZW1IaWRkZW5Gb250RmFtaWx5U2V0KCkKIAogc3RhdGljIFdL
UmV0YWluUHRyPFdLQXJyYXlSZWY+IGdlbmVyYXRlRm9udEFsbG93TGlzdCgpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tNdXRhYmxlQXJy
YXlDcmVhdGUoKSk7CisgICAgYXV0byByZXN1bHQgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3Jl
YXRlKCkpOwogICAgIGZvciAoTlNTdHJpbmcgKmZvbnRGYW1pbHkgaW4gYWxsb3dlZEZvbnRGYW1p
bHlTZXQoKSkgewogICAgICAgICBOU0FycmF5ICpmb250c0ZvckZhbWlseSA9IFtbTlNGb250TWFu
YWdlciBzaGFyZWRGb250TWFuYWdlcl0gYXZhaWxhYmxlTWVtYmVyc09mRm9udEZhbWlseTpmb250
RmFtaWx5XTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZhbWlseUluRm9udCA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW2ZvbnRGYW1pbHkgVVRGOFN0
cmluZ10pKTsKKyAgICAgICAgYXV0byBmYW1pbHlJbkZvbnQgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKFtmb250RmFtaWx5IFVURjhTdHJpbmddKSk7CiAgICAgICAgIFdL
QXJyYXlBcHBlbmRJdGVtKHJlc3VsdC5nZXQoKSwgZmFtaWx5SW5Gb250LmdldCgpKTsKICAgICAg
ICAgZm9yIChOU0FycmF5ICpmb250SW5mbyBpbiBmb250c0ZvckZhbWlseSkgewogICAgICAgICAg
ICAgLy8gRm9udCBuYW1lIGlzIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgYXJyYXkuCi0gICAgICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZm9udE5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKFtbZm9udEluZm8gb2JqZWN0QXRJbmRleDowXSBVVEY4U3Ry
aW5nXSkpOworICAgICAgICAgICAgYXV0byBmb250TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoW1tmb250SW5mbyBvYmplY3RBdEluZGV4OjBdIFVURjhTdHJpbmdd
KSk7CiAgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShyZXN1bHQuZ2V0KCksIGZvbnROYW1l
LmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKICAgICAvLyBUZXN0aW5nIHVz
ZXMgYSBwcml2YXRlIHNlc3Npb24sIHdoaWNoIGlzIG1lbW9yeSBvbmx5LiBIb3dldmVyIGNyZWF0
aW5nIG9uZSBpbnN0YW50aWF0ZXMgYSBzaGFyZWQgTlNVUkxDYWNoZSwKICAgICAvLyBhbmQgaWYg
d2UgaGF2ZW4ndCBjcmVhdGVkIG9uZSB5ZXQsIHRoZSBkZWZhdWx0IG9uZSB3aWxsIGJlIGNyZWF0
ZWQgb24gZGlzay4KICAgICAvLyBNYWtpbmcgdGhlIHNoYXJlZCBjYWNoZSBtZW1vcnktb25seSBh
dm9pZHMgdG91Y2hpbmcgdGhlIGZpbGUgc3lzdGVtLgotICAgIFJldGFpblB0cjxOU1VSTENhY2hl
PiBzaGFyZWRDYWNoZSA9CisgICAgYXV0byBzaGFyZWRDYWNoZSA9CiAgICAgICAgIGFkb3B0TlMo
W1tOU1VSTENhY2hlIGFsbG9jXSBpbml0V2l0aE1lbW9yeUNhcGFjaXR5OjEwMjQgKiAxMDI0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tDYXBhY2l0eTowCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrUGF0aDpuaWxdKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1h
Yy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgK
aW5kZXggMGVhYjg5NDllNmJlYmZlZTY1OTQ3NTg5YWZiOWU4ZDliOGJlMWVjNy4uMmQyZDFkNmI4
NDZlNjg3OGIwYjFlYmRjMTY2N2MxNzVlOTE1NjY1ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKQEAgLTMxLDEzICszMSwxNCBA
QCBPQkpDX0NMQVNTIFdLV2ViVmlldzsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIFVJU2Ny
aXB0Q29udHJvbGxlck1hYyA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSB7CitjbGFz
cyBVSVNjcmlwdENvbnRyb2xsZXJNYWMgZmluYWwgOiBwdWJsaWMgVUlTY3JpcHRDb250cm9sbGVy
Q29jb2EgewogcHVibGljOgogICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29udHJvbGxlck1hYyhVSVNj
cmlwdENvbnRleHQmIGNvbnRleHQpCiAgICAgICAgIDogVUlTY3JpcHRDb250cm9sbGVyQ29jb2Eo
Y29udGV4dCkKICAgICB7CiAgICAgfQogCitwcml2YXRlOgogICAgIHZvaWQgcmVwbGFjZVRleHRB
dFJhbmdlKEpTU3RyaW5nUmVmLCBpbnQsIGludCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB6b29tVG9T
Y2FsZShkb3VibGUsIEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIGRvdWJsZSB6b29tU2NhbGUo
KSBjb25zdCBvdmVycmlkZTsKQEAgLTYyLDcgKzYzLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBh
Y3RpdmF0ZUF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpTVmFsdWVSZWYgY2FsbGJhY2spIG92ZXJy
aWRlOwogCi1wcml2YXRlOgogICAgIE5TVGFibGVWaWV3ICpkYXRhTGlzdFN1Z2dlc3Rpb25zVGFi
bGVWaWV3KCkgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KaW5kZXggY2QxMTMyOWE2NTQxZDdiNGViNzdkN2Vj
MTQ2ODhlOTkyMWYyN2M1My4uYjVjYjUxODE1MDU5ZTdhMDkzYTE0MjM5OTFlODkxN2UzZWQzMDkw
OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9s
bGVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJv
bGxlck1hYy5tbQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyTWFj
Ojpjb21wbGV0ZUJhY2tTd2lwZShKU1ZhbHVlUmVmIGNhbGxiYWNrKQogCiB2b2lkIFVJU2NyaXB0
Q29udHJvbGxlck1hYzo6cGxheUJhY2tFdmVudFN0cmVhbShKU1N0cmluZ1JlZiBldmVudFN0cmVh
bSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0
cmVhbSA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
ZXZlbnRTdHJlYW0pKTsKKyAgICBhdXRvIHN0cmVhbSA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZT
dHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXZlbnRTdHJlYW0pKTsKICAgICBwbGF5QmFja0V2
ZW50cyh3ZWJWaWV3KCksIG1fY29udGV4dCwgKF9fYnJpZGdlIE5TU3RyaW5nICopc3RyZWFtLmdl
dCgpLCBjYWxsYmFjayk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409865</attachid>
            <date>2020-09-27 18:55:49 -0700</date>
            <delta_ts>2020-09-27 21:47:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200927185548.patch</filename>
            <type>text/plain</type>
            <size>704720</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3Njg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJmZWY0NTFlYS4u
ZjMwMjBmNzM4YzdlNmQ0ZTY0OTQwNDBiZTVlMzUyNGZkMTdkNGMyMiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2MCBAQAorMjAy
MC0wOS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlm
eWluZywgYnV0IGV2ZW4gbW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVz
dAorICAgICAgICBjb2RlIGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkg
YW5kIHBhc3RlIHJhdGhlciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0
ZXIgdGhlIHJlZmFjdG9yaW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlz
IGNvZGUgaXMgd3JpdHRlbiB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGlu
ZyBmb3IgZWFjaCBmdW5jdGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpt
YWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAo
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0Ns
YXNzIHdpdGggdGhpcy4gUmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBj
bGVhciB0aGlzIHBhc3NlcyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJv
dmUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNw
cDoKKyAgICAgICAgKHVpRWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBS
ZW1vdmVkIHVubmVlZGVkIGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3
aGljaCBzdGFydHMgb3V0IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5n
cy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBl
Q29uc3RydWN0b3IpOiBVc2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAg
ICAgICAoX3JldHVybkV4cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0ND
b250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxl
cik6IERlbGV0ZWQuCisgICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2Ug
YW5kIGF1dG8uCisgICAgICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERp
dHRvLgorICAgICAgICAoZ2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAg
IChHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6
IFJlcGxhY2VkIGdldEpTQ2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFp
blB0ciB0byBtYWtlIGl0IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVy
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0
aGUgYWJvdmUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAg
ICAgICAgKGVuY29kZUhvc3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAg
ICAgIChleGVjQ29tbWFuZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2Fs
bGJhY2spOiBEaXR0by4KKyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRv
LgorICAgICAgICAob3ZlcnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAg
KHF1ZXVlTG9hZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5n
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3Qp
OiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVh
dGVKU0NsYXNzKTogUmVwbGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAg
ICAgIEpTUmV0YWluUHRyIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRv
IHRoZSBjYWxsZXIuCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJl
dHVybiB2YWx1ZSBjb25zdCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMp
OiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmly
ZWQpOiBTaW1wbGlmaWVkIHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2spOiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAor
ICAgICAgICB0YWJsZSB2YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBu
ZWVkIHRvIGJlIG9iamVjdHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNh
bGxiYWNrKTogRGl0dG8uCisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxs
YmFja3MpOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTog
VXNlIGFycmF5TGVuZ3RoLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDog
VXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnBsYXRmb3JtTmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAg
ICAgICAoY3JlYXRlRW1wdHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmlu
Zy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJ
RWxlbWVudHMpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkRvY3VtZW50TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8u
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
SGVhZGVycyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ29sdW1ucyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mUm93cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8u
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5o
OiBSZW1vdmVkIHVubmVlZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGgu
CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIg
SlNWYWx1ZUlzT2JqZWN0LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnBsYXRmb3JtTmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAo
Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1l
dGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBS
ZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09i
amVjdC4KKyAgICAgICAgKHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVy
aWEpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxp
dHlWYWx1ZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERl
bGVnYXRlIGRpZENsZWFyV2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6Cisg
ICAgICAgIFVzZSBhdXRvLiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0
LiBTaW1wbGlmaWVkIG9iamVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0
TlMgaW5zdGVhZCBvZiByZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRD
bGVhcldpbmRvd09iamVjdEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNl
IGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW06CisgICAgICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVu
Z3RoLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNw
cDoKKyAgICAgICAgKEZyYW1lTG9hZERlbGVnYXRlOjpkaWRDbGVhcldpbmRvd09iamVjdEZvckZy
YW1lSW5TdGFuZGFyZFdvcmxkKToKKyAgICAgICAgUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFr
ZVdpbmRvd09iamVjdC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dP
YmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXh0SW5wdXRD
b250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKTogUmVwbGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMu
IFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRyIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNz
ZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisgICAgICAgIChUZXh0SW5wdXRDb250cm9sbGVy
OjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25zdCouCisgICAgICAgIChUZXh0
SW5wdXRDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS93aW4vVGV4dElucHV0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciBhYm92ZS4K
KworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwOgorICAg
ICAgICAoV1RSOjp0b09wdGlvbmFsQm9vbCk6IFJlbmFtZWQgZnJvbSBKU1ZhbHVlTWFrZUJvb2xl
YW5Pck51bGwuCisgICAgICAgIChXVFI6OnRvT3B0aW9uYWxEb3VibGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6bWFrZVZhbHVlKTogQWRkZWQgd2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlw
ZXMuCisgICAgICAgIFJlcGxhY2VkIEpTVmFsdWVUb051bGxhYmxlQm9vbGVhbiBhbmQgSlNWYWx1
ZU1ha2VTdHJpbmdPck51bGwuCisgICAgICAgIChXVFI6OmNyZWF0ZUpTU3RyaW5nKTogQWRkZWQg
d2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlwZXMuCisgICAgICAgIChXVFI6OnByb3BlcnR5
KTogQWRkZWQuCisgICAgICAgIChXVFI6OnN0cmluZ1Byb3BlcnR5KTogQWRkZWQuCisgICAgICAg
IChXVFI6OmJvb2xlYW5Qcm9wZXJ0eSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpudW1lcmljUHJv
cGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6b2JqZWN0UHJvcGVydHkpOiBSZWZhY3RvcmVk
IHRvIGNhbGwgcHJvcGVydHkuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogQWRkZWQuCisg
ICAgICAgIChXVFI6OnNldEdsb2JhbE9iamVjdFByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChX
VFI6OmNhbGwpOiBSZWZhY3RvcmVkIHRvIGxldCBvYmplY3RQcm9wZXJ0eSBkbyBtb3JlIG9mIHRo
ZSBudWxsIGNoZWNraW5nLgorICAgICAgICAoV1RSOjpjYWxsQ29uc3RydWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmg6IFVwZGF0ZWQg
Zm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNX
cmFwcGFibGUuaDogUmVkdWNlZCBpbmNsdWRlcyBhIGJpdC4KKworICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmg6IEFkZGVkIHNldEdsb2JhbE9iamVjdFByb3Bl
cnR5LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250ZXh0LmNwcDoKKyAgICAgICAgKFVJU2NyaXB0Q29udGV4dDo6VUlTY3JpcHRDb250ZXh0
KTogUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFVJ
U2NyaXB0Q29udGV4dDo6cnVuVUlTY3JpcHQpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAg
IChVSVNjcmlwdENvbnRleHQ6Om9iamVjdEZyb21SZWN0IGNvbnN0KTogVXNlIHNldFByb3BlcnR5
LgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBUZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwOgorICAg
ICAgICAoV1RSOjp0b0RldmljZU9yaWVudGF0aW9uKTogVXNlIGNyZWF0ZUpTU3RyaW5nIGFuZCBK
U1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nLgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIu
bW06CisgICAgICAgICgtW0xheW91dFRlc3RTcGVsbENoZWNrZXIgc2V0UmVzdWx0c0Zyb21KU1Zh
bHVlOmluQ29udGV4dDpdKTogVXNlIGNyZWF0ZUpTU3RyaW5nCisgICAgICAgIGFuZCByZW1vdmVk
IHVubmVlZGVkIHVzZSBvZiBscm91bmRsLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9E
aWN0aW9uYXJ5RnVuY3Rpb25zLmg6IEFkZGVkLiBDb250YWlucyBjb252ZW5pZW5jZSBmdW5jdGlv
bnMKKyAgICAgICAgZm9yIGRlYWxpbmcgd2l0aCBXS0RpY3Rpb25hcnlSZWYuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaDogSW5pdGlhbGl6ZSBkYXRhIG1l
bWJlcnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmNwcDoKKyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbik6
IFVzZSBPcHRpb25hbCBpbnN0ZWFkIG9mIHNlcGFyYXRlIGJvb2wuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oOiBVcGRhdGVkIGZvciB0aGUgYWJv
dmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtOgor
ICAgICAgICAoX2dlbmVyYXRlSW1wbGVtZW50YXRpb25GaWxlKTogVXNlIHN0YXRpYyBpbml0aWFs
aXphdGlvbiBhbmQgYSBsYW1iZGEgaW5zdGVhZCBvZgorICAgICAgICBhbiBpZiBzdGF0ZW1lbnQg
dG8gaW5pdGlhbGl6ZS4KKyAgICAgICAgKF9wbGF0Zm9ybVR5cGVDb25zdHJ1Y3Rvcik6IFVzZSB0
b09wdGlvbmFsQm9vbCBhbmQgY3JlYXRlSlNTdHJpbmcuIEFsc28gYWRkZWQKKyAgICAgICAgc3Vw
cG9ydCBmb3IgbnVsbGFibGUgZG91YmxlcyBhbmQgdXNlZCBhdXRvIGEgYml0IG1vcmUuCisgICAg
ICAgIChfcmV0dXJuRXhwcmVzc2lvbik6IFVzZSBtYWtlVmFsdWUuCisKKyAgICAgICAgKiBJbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDogTWFkZSB0aGUgb3B0aW9uYWwgYXJn
dW1lbnRzIHRvIHRoZQorICAgICAgICBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiBmdW5jdGlv
biAiZG91YmxlPyIgaW5zdGVhZCBvZiAib2JqZWN0Ii4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXVFI6OmdldE1lbnVJdGVtQ2hpbGRyZW5DYWxsYmFjayk6IFVzZSBhdXRvIGFuZCBub3QgSlNW
YWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IE1vdmVkIHRvIEpTQmFz
aWNzLmgvY3BwLgorICAgICAgICAoV1RSOjpwYXJzZVRvdWNoTW9kaWZpZXIpOiBBZGRlZC4gRmFj
dG9yZWQgb3V0IG9mIHRoZQorICAgICAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3Vj
aE1vZGlmaWVyIGZ1bmN0aW9uLgorICAgICAgICAoV1RSOjpwYXJzZU1vZGlmaWVyQXJyYXkpOiBV
c2UgY3JlYXRlSlNTdHJpbmcgYW5kIHJlbW92ZSB1bm5lZWRlZCBpZ25vcmVkCisgICAgICAgIGV4
Y2VwdGlvbiBvdXQgYXJndW1lbnQsIHNpbmNlIHRoYXQgaXMgb3B0aW9uYWwuIEFsc28gYWRkZWQg
b3ZlcmxvYWQgdGhhdAorICAgICAgICBnZXRzIHRoZSBjb250ZXh0LgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNlbmRpbmdDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KTog
VXNlIGFkb3B0V0sgYW5kIHNldFZhbHVlLiBSZXR1cm4gYSBXS1JldGFpblB0ci4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKTogVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
b3VzZVVwKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1v
dXNlTW92ZVRvKTogVXNlIHNldFZhbHVlIGFuZAorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZXMuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9y
Y2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpz
dGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlRG93bik6IERpdHRvLgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlVXApOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNoYW5nZWQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bGVhcEZvcndhcmQpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hy
b25vdXNDbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OmNyZWF0ZUtl
eURvd25NZXNzYWdlQm9keSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6a2V5RG93bik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25v
dXNLZXlEb3duKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9s
bEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMpOiBVc2UKKyAgICAgICAgc2V0VmFsdWUgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
Y29udGludW91c01vdXNlU2Nyb2xsQnkpOiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpjb250ZXh0Q2xpY2spOiBVc2UgYXV0byBhbmQgbm90IEpTVmFsdWVUb09iamVjdC4KKyAg
ICAgICAgKFdUUjo6dG9Nb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKTogVXNlIGJvb2xlYW5Qcm9w
ZXJ0eS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6YWRkVG91Y2hQb2lu
dCk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAg
IChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcik6
IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaFBv
aW50UmFkaXVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnRvdWNoU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6dG91Y2hNb3ZlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoRW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoQ2FuY2VsKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmNsZWFyVG91Y2hQb2ludHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6cmVsZWFzZVRvdWNoUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FuY2VsVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNl
dEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUu
CisgICAgICAgIERlbGV0ZWQgdmFyaW91cyB1bm5lZWRlZCBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXVFI6OkdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdUUjo6R0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6R0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFBy
b3BlcnR5LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0Nv
bnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICBBbHNvIG1hcmtlZCB0
aGUgY2xhc3MgZmluYWwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRp
ZENyZWF0ZVBhZ2UpOiBVc2UgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6cmVwb3J0TGl2ZURvY3VtZW50cyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSk6IFVzZSBk
aWN0aW9uYXJ5VmFsdWUsCisgICAgICAgIGJvb2xlYW5WYWx1ZSwgcG9zdFBhZ2VNZXNzYWdlLCB2
YWx1ZSwgYW5kIG1vcmUgdG8gc3RyZWFtbGluZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGU6OmJvb2xlYW5Gb3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZTo6c3RyaW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OmJlZ2luVGVzdGluZyk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlOjpkb25lKTogVXNlIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6Y2xvc2VPdGhlclBhZ2VzKTogVXNlIHNldFZhbHVlIGFuZCB0b1dLLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6ZHVtcFRvU3RkRXJyKTogVXNlIHBvc3RQYWdlTWVzc2FnZQor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dCk6IFVzZSB0b1dLLgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVl
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBv
c3RBZGRDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdEZvY3VzV2ViVmlldyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdFNldEJhY2tpbmdTY2FsZUZhY3Rvcik6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdFNldFdpbmRvd0lzS2V5KTogVXNlIHRvV0suCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0Vmlld1NpemUpOiBVc2Ugc2V0VmFs
dWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2ltdWxhdGVX
ZWJOb3RpZmljYXRpb25DbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0QWRkc1Zpc2l0ZWRMaW5rcyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bik6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLAorICAgICAgICBhbmQgdXNlIE9w
dGlvbmFsIGluc3RlYWQgb2YgYm9vbC9kb3VibGUgcGFpcnMuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IpOiBV
c2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aXNHZW9s
b2NhdGlvblByb3ZpZGVyQWN0aXZlIGNvbnN0KTogVXNlIHRvV0sgYW5kIGJvb2xlYW5WYWx1ZS4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJv
YXJkIGNvbnN0KTogVXNlIHRvV0sgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVybWlzc2lvbik6IFVzZSBwb3N0UGFnZU1lc3NhZ2Uu
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcnNp
c3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKTogVXNlIHNldFZhbHVlCisgICAgICAgIGFuZCBwb3N0
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjp1c2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JP
cmlnaW4pOiBVc2V0IHNldFZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKTogVXNlIHNldFZh
bHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpz
ZXRIaWRkZW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldENhY2hl
TW9kZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nl
c3NXb3JrUXVldWUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6cHJvY2Vzc1dvcmtRdWV1ZSk6IFVzZSBwb3N0UGFnZU1lc3Nh
Z2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUZvcndhcmROYXZpZ2F0
aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWQpOiBV
c2Ugc2V0VmFsdWUgYW5kIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnF1ZXVlUmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpxdWV1ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
TWVzc2FnZSk6IEFkZGVkLiBPdmVybG9hZHMgZm9yIG1hbnkgdHlwZXMgdG8ga2VlcCBjYWxsZXIg
Y29kZSBzdHJlYW1saW5lZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0UGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6IFVwZGF0ZWQgZm9y
IHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6cHJvcGVydHlWYWx1ZSk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6OnByb3BlcnR5VmFsdWVEb3VibGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6cHJvcGVydHlW
YWx1ZUludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpudW1lcmljV2luZG93UHJvcGVydHkpOiBS
ZW5hbWVkIGZyb20gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUgZm9yIGJyZXZpdHkKKyAgICAg
ICAgYW5kIGZvciBjb25zaXN0ZW5jeSB3aXRoIEpTQmFzaWNzLmggZnVuY3Rpb25zLgorICAgICAg
ICAoV1RSOjpkdW1wUGF0aCk6IFVzZSBzdHJpbmdQcm9wZXJ0eSwgb2JqZWN0UHJvcGVydHksIGFu
ZCBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpyYW5nZVRvU3RyKTogVXNlIGF1dG8sIG51bWVy
aWNQcm9wZXJ0eSwgYW5kIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Ok5hdmlnYXRpb25UeXBl
VG9TdHJpbmcpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVuYW1lZCBmcm9t
IHNlY3VyaXR5T3JpZ2luVG9TdHIuIFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpmcmFt
ZVRvU3RyKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6cmVz
ZXRBZnRlclRlc3QpOiBSZW1vdmVkIHVubmVlZGVkIGxvY2FsLgorICAgICAgICAoV1RSOjpkdW1w
RnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCk6IFVzZSBhdXRvLgorICAgICAg
ICAoV1RSOjpkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogRGl0
dG8uCisgICAgICAgIChXVFI6OmR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OmR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKTogVXBkYXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdUUjo6dG9KUyk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6Omhhc0RvY3VtZW50RWxlbWVudCk6IFVzZSBvYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKTogVXNlIHNldEds
b2JhbE9iamVjdFByb3BlcnR5LAorICAgICAgICBhbmQgcGFzcyBmZXdlciBhcmd1bWVudHMgdG8g
bWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKTogU3RyZWFtbGluZSBjb2RlIGEgYml0LgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKTog
VXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Omxhc3RGaWxlVVJMUGF0aENvbXBvbmVudCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNi
YXJUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVh
Y2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGluZyk6IERpdHRv
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcik6IFVzZSB0b1dLLgor
ICAgICAgICAoV1RSOjpwYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6Om1haW5GcmFtZSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjptYWluSlNDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmRpc3BsYXkpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheUFuZFRyYWNrUmVwYWludHMpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6dG9X
Syk6IEFkZGVkIG92ZXJsb2FkIGZvciBkb3VibGUuCisgICAgICAgIChXVFI6OmNyZWF0ZVdLRGlj
dGlvbmFyeSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0
aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbik6IEFkZGVkLgorICAgICAgICAo
V1RSOjpwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NCk6IEFkZGVkLgor
ICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRk
ZWQuCisgICAgICAgIChXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IEFkZGVkLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wUGl4ZWxzIGNvbnN0KTogVXNlIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXREdW1wUGl4ZWxzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OndoYXRUb0R1bXAgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2hhdFRvRHVt
cCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRXYWl0VW50aWxEb25lKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNob3VsZFdhaXRVbnRpbERvbmUgY29uc3QpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlwdCk6IFVzZSBwYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpleGVjQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpmaW5k
T3B0aW9uc0Zyb21BcnJheSk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgYW5kIGNy
ZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNl
IHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmdNYXRjaGVzSW5QYWdl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0
SW5kaWNlcyk6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBhcnJheUxlbmd0aCBhbmQKKyAgICAgICAg
cmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIHN0ZDo6cm91bmQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk6IFVzZSBwYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVt
U2l6ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hl
RGlza1VzYWdlRm9yT3JpZ2luKTogRGl0dG8uCisgICAgICAgIChXVFI6OnN0cmluZ0FycmF5VG9K
Uyk6IFR3ZWFrZWQgY29kaW5nIHN0eWxlIGEgYml0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1lZGlhRGV2aWNl
c0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViUlRDTURO
U0lDRUNhbmRpZGF0ZXNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldEN1c3RvbVVzZXJBZ2VudCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdl
YkdMMkVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V3JpdGFi
bGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGUpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9u
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1
bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRQbHVnaW5zRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUpOiBVc2UgbWFpbkZyYW1lLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIpOiBSZW1vdmVkIGxvY2FsLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBdWRpb1Jlc3VsdCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6IFVzZSBwYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9i
amVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9y
KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9y
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKTog
VXNlIHJhbmdlLWJhc2VkIGZvciBsb29wLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24pOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5h
dmlnYXRpb24gY29uc3QpOgorICAgICAgICBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbik6CisgICAgICAgIFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y2FjaGVUZXN0UnVubmVy
Q2FsbGJhY2spOiBDaGFuZ2VkIG1hcCB0byBzdG9yZSBvYmplY3RzIGluc3RlYWQgb2YgdmFsdWVz
LgorICAgICAgICAoV1RSOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogU2ltcGxpZnkgc2luY2Ug
bWFwIGhhcyBvYmplY3RzLiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYXJUZXN0UnVubmVyQ2FsbGJhY2tzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T25seUFjY2VwdEZpcnN0UGFydHlD
b29raWVzKTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFVzZXJTdHlsZVNoZWV0RW5hYmxlZCk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24pOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsV2ViTm90
aWZpY2F0aW9uUGVybWlzc2lvbnMpOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6c2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBPcHRp
b25hbDxkb3VibGU+IGluc3RlYWQgb2YgYm9vbC9kb3VibGUKKyAgICAgICAgcGFpcnMsIGxldHRp
bmcgdGhlIElETCBiaW5kaW5ncyBkbyB0aGUgd29yayBmb3IgdXMuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFJl
bW92ZWQgbG9jYWwuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzRG9pbmdNZWRpYUNhcHR1
cmUgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlz
c2lvbkZvck9yaWdpbik6IFJlbW92ZWQgbG9jYWxzLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojp1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RDb3VudEZvck9yaWdpbik6IERJdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjYWxs
U2hvdWxkQ2xvc2VPbldlYlZpZXcpOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpxdWV1ZUxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IFJlbW92ZWQgYSBsb2NhbC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXMpOgorICAgICAgICBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQgY29uc3QpOiBVc2Ug
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKTogVXNlIG1h
aW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGls
ZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlv
bik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVOYXZp
Z2F0aW9uUG9saWN5QWZ0ZXJEZWxheSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNF
bmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldElnbm9yZXNWaWV3
cG9ydFNjYWxlTGltaXRzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNo
b3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0KTogVXNlIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHRJbW1lZGlhdGVseSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdENhbGxiYWNrKTog
VXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldEFsbG93ZWRN
ZW51QWN0aW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwKKyAgICAgICAgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbEN1c3Rv
bU1lbnVBY3Rpb24pOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvZXNTdGF0aXN0aWNzRG9tYWluSURF
eGlzdEluRGF0YWJhc2UpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
RW5hYmxlZCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppc1N0YXRpc3RpY3NFcGhlbWVyYWwpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzRGVidWdNb2RlKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRXhwaXJlZFN0
YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NWZXJ5UHJldmFs
ZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKTogVXNlIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZUlUUERh
dGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0dy
YW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Rp
ZFJ1blRlbGVtZXRyeUNhbGxiYWNrKTogVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSk6IFVzZSBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJpbmdUaW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NNYXhTdGF0aXN0aWNzRW50cmllcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKTog
VXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURh
dGFSZW1vdmFsKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NE
ZWxldGVDb29raWVzRm9ySG9zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UpOiBVc2UgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXApOiBVc2UgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aGFzU3RhdGlzdGljc0lzb2xh
dGVkU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlcik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NT
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmdldEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6Om1ha2VEb21haW5zVmFs
dWUpOiBGYWN0b3JlZCBvdXQuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2spOiBV
c2UgbWFrZURvbWFpbnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bG9hZGVkU3Vi
cmVzb3VyY2VEb21haW5zKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKTogVXNl
IG1ha2VEb21haW5zVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFkZE1vY2tNZWRp
YURldmljZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjbGVhck1vY2tNZWRpYURldmljZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6cmVtb3ZlTW9ja01lZGlhRGV2aWNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnJlc2V0TW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQpOiBV
c2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCk6IFVzZSBwb3N0U3luY2hy
b25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dh
bWVwYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRE
ZXRhaWxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFk
QXhpc1ZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1l
cGFkQnV0dG9uVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T3Bl
blBhbmVsRmlsZXMpOiBVc2UgbWFpbkpTQ29udGV4dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3Ry
aW5nLAorICAgICAgICBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRPcGVuUGFuZWxGaWxlc01lZGlhSWNvbik6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBw
b3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlbW92ZUFsbFNlc3Np
b25DcmVkZW50aWFscyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6Y2xlYXJET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpjbGVhckRPTUNhY2hlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpoYXNET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZSk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZSk6IFVzZSBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QXBw
bGljYXRpb25NYW5pZmVzdFRoZW4pOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmluamVjdFVzZXJTY3JpcHQpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdl
ZE1lc3NhZ2VGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6YWRkVGVzdEtleVRvS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYW5VcEtleWNoYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmtleUV4aXN0c0luS2V5Y2hhaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXJ2ZXJUcnVzdEV2YWx1
YXRpb25DYWxsYmFja0NhbGxzQ291bnQpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxk
RGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseSk6IFVzZQorICAgICAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphYm9ydE1vZGFs
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmR1bXBBZENsaWNrQXR0cmlidXRp
b24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92
YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9m
ZnNjcmVlbkNhbnZhc0VuYWJsZWQpOiBVc2Ugb3ZlcnJpZGVQcmVmZXJlbmNlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpj
bGVhckFwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBCb3VuZERvbWFpbnMpOiBVc2UgbWFpbkpTQ29udGV4
dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3RyaW5nLAorICAgICAgICBhbmQgdG9XSy4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6cG9zdE1lc3NhZ2UpOiBBZGRlZC4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOiBVcGRhdGVkIGZvciB0
aGUgYWJvdmUuIEFsc28gY2hhbmdlZAorICAgICAgICBvdmVycmlkZVByZWZlcmVuY2Ugb3QgYSBz
dGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OlRleHRJbnB1dENvbnRyb2xsZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6VGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdCk6IFVz
ZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBE
ZWxldGVkLiBVc2UgdGhlIG9uZSBmcm9tIEpTQmFzaWNzLmggbm93LgorICAgICAgICAoV1RSOjpj
cmVhdGVDb21wb3NpdGlvbkhpZ2hsaWdodERhdGEpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3Ry
aW5nLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVKU1N0cmluZyBmcm9tIEpTQmFzaWNzLmggbm93Lgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRV
SUVsZW1lbnRzKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRGVz
Y3JpcHRpb25PZkF0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0
aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omxhbmd1YWdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnZhbHVlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNGb2N1c2VkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRlIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9w
RWZmZWN0cyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29s
dW1ucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZSb3dzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2li
aWxpdHlWYWx1ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZT
Y3JlZW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDb2xsYXBzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tOgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRlclByb3h5OjpFdmVudFNlbmRlclByb3h5KTogSW5pdGlhbGl6ZSBpbiB0aGUgY2xh
c3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2Vu
ZGVyUHJveHkpOiBEZWxldGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbToKKyAgICAgICAgKFdUUjo6bWFr
ZUpTQXJyYXkpOiBSZXR1cm4gYSBKU09iamVjdFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VBcnJheVJl
ZkZvckFycmF5LgorICAgICAgICAoV1RSOjptYWtlSlNPYmplY3QpOiBSZXR1cm4gYSBKU09iamVj
dFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5LgorICAgICAgICAo
V1RSOjptYWtlVmFsdWVSZWZGb3JWYWx1ZSk6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAg
ICAgKFdUUjo6c2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENy
aXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nCisgICAgICAgIGFuZCBhcnJheUxlbmd0aC4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToK
KyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVK
U1N0cmluZyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6Y29udmVydFZl
Y3RvclRvT2JqZWN0QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJlbmFtZWQgZnJvbSBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheS4KKyAgICAgICAgKFdUUjo6
c2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYSk6IFVzZSB0b1dURlN0
cmluZyBhbmQgYXJyYXlMZW5ndGguCisgICAgICAgIChXVFI6OnNlYXJjaFRleHRQYXJhbWV0ZXJp
emVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm93SGVhZGVycyBjb25zdCk6IFVzZSBtYWtlSlNBcnJheS4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJh
eUF0dHJpYnV0ZVZhbHVlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlYXJjaFRleHRXaXRoQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlIGNvbnN0KTogVXNl
IGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
b2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppbnNwZWN0b3JUZXN0U3R1YlVSTCk6IFJlbW92ZSBsb2NhbHMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oOiBBZGRlZCB0b1dLU3RyaW5nIG92
ZXJsb2FkIHRoYXQgY29udmVydHMgZnJvbQorICAgICAgICBhIEpTVmFsdWVSZWYsIEpTU3RyaW5n
UmVmLCBvciBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYW5kIHRvV0sgb3ZlcmxvYWQgdGhhdCBj
b252ZXJ0cworICAgICAgICBmcm9tIGEgY29uc3QgY2hhciouCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemUpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpjaGVja0ZvcldvcmxkTGVha3MpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6
Y29udGVudEV4dGVuc2lvbkpTT05QYXRoKTogVXNlIHRvU1RELgorICAgICAgICAoV1RSOjpUZXN0
Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QpOiBVc2UgdG9XSy4K
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSk6IFVzZSBzdHJpbmdWYWx1ZQorICAgICAgICBhbmQgdWludDY0VmFs
dWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50
c0xpc3QpOiBVc2UgZGljdGlvbmFyeVZhbHVlIGFuZAorICAgICAgICB1aW50NjRWYWx1ZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIGRpY3Rpb25hcnlWYWx1ZSwKKyAgICAgICAgc3RyaW5nVmFsdWUsIHVpbnQ2
NFZhbHVlLCBkb3VibGVWYWx1ZSwgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0QmxvY2tBbGxQbHVnaW5z
KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5TdXBw
b3J0ZWRNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKTogUmVtb3ZlZCBsb2NhbC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSk6IFVzZSBhdXRvIGFuZCB0b1dURlN0cmluZworICAgICAgICBpbnN0ZWFkIG9mIHRvU1RE
LgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24pOiBVc2UgT3B0aW9uYWwgaW5zdGVhZCBvZiBwYWlycworICAgICAgICBvZiBib29sIGFuZCBk
b3VibGUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpoYW5kbGVDaGVja09mVXNlck1l
ZGlhUGVybWlzc2lvbkZvck9yaWdpbik6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3Np
YmxlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJ
ZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6IFVzZSB0b1dLLgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6
OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
VGVzdEluY292YXRpb24pOiBVc2UgdG9XVEZTdHJpbmcuCisgICAgICAgIChXVFI6OlRlc3RJbnZv
Y2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KTogVXNlIGF1dG8gYW5kIHNldFZh
bHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKTogVXNlIHBvc3RQYWdl
TWVzc2FnZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UKKyAg
ICAgICAgYW5kIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
UmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZQorICAgICAg
ICBkaWN0aW9uYXJ5VmFsdWUsIGJvb2xlYW5WYWx1ZSwgdmFsdWUsIHN0cmluZ1ZhbHVlLCBkb3Vi
bGVWYWx1ZSwgYW5kCisgICAgICAgIG9wdGlvbmFsRG91YmxlVmFsdWUuCisgICAgICAgIChXVFI6
OlRlc3RJbnZvY2F0aW9uOjp1aVNjcmlwdERpZENvbXBsZXRlKTogVXNlIHBvc3RQYWdlTWVzc2Fn
ZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRCZWdpblN3
aXBlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OndpbGxFbmRTd2lwZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
RW5kU3dpcGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92
ZVN3aXBlU25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246Om5v
dGlmeURvd25sb2FkRG9uZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
ZGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJz
aXRlRGF0YVJlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJ
bnZvY2F0aW9uOjpkaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OmRpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVzZXRTdGF0aXN0aWNzVG9Db25z
aXN0ZW50U3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNl
dEJsb2NrQ29va2llc0Zvckhvc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRp
b246OmRpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRMYXN0U2Vlbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkTWVyZ2VTdGF0aXN0aWMpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291
cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21h
aW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVBbGxT
ZXNzaW9uQ3JlZGVudGlhbHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldEFwcEJvdW5kRG9tYWlucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2Nh
dGlvbjo6cGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24pOiBEaXR0by4KKworICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICBBZGRlZCBKU0Jhc2ljcy5oIHRvIERpY3Rpb25hcnlGdW5jdGlvbnMuaCB0byBhcHBy
b3ByaWF0ZSB0YXJnZXRzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdUUjo6U2NyaXB0SXRlbTo6U2NyaXB0SXRlbSk6IFVzZSB0
b1dLLgorICAgICAgICAoV1RSOjpXb3JrUXVldWVNYW5hZ2VyOjpxdWV1ZUxvYWRIVE1MU3RyaW5n
KTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29u
dHJvbGxlckNvY29hLmg6IE1ha2UgbW9zdCBmdW5jdGlvbnMgcHJpdmF0ZS4KKworICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW06CisgICAg
ICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpvdmVycmlkZVByZWZlcmVuY2UpOiBV
c2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MuaDogTWFya2VkIHRoZSBjbGFzcyBmaW5hbCBhbmQgbWFkZQorICAgICAg
ICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6
IERlbGV0ZWQuIFVzZSB0aGUgb25lIGluIEpTQmFzaWNzLmguCisgICAgICAgIChXVFI6OnBhcnNl
TW9kaWZpZXJBcnJheSk6IFVzZSB0aGUgbmV3IHRvV1RGU3RyaW5nIG92ZXJsb2FkLgorICAgICAg
ICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJl
S2V5Ym9hcmQpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50
U2VuZGVyUHJveHkubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2Vu
ZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3duKTogVXNlIHRvV1RGU3RyaW5nLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmg6IE1hcmtl
ZCB0aGUgY2xhc3MgZmluYWwgYW5kIG1hZGUKKyAgICAgICAgbW9zdCBmdW5jdGlvbnMgcHJpdmF0
ZS4KKwogMjAyMC0wOS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHJ1bi13ZWJraXQtdGVzdHMgY29kZSB0aGF0IHN0cmlwcyB0cmFpbGluZyBzcGFj
ZXMgd2hlbiBjb21wYXJpbmcgZXhwZWN0ZWQudHh0IGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKaW5kZXggMWEwYzE2NzA2YjJhZTQy
NjBlMzJkMjkwNDQ5YmYyZDY1Y2ZhM2RmYS4uOWUyNDBlNTU5Y2E0NTIzMzc0Nzk4NGE2YmE5MzUx
NTRhYWNjZDdkZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogCiAvLyBTdGF0aWMgVmFsdWUgR2V0dGVycwogCkBA
IC00NywxNSArNDgsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRSb290RWxlbWVudENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzTwogCiAvLyBPYmplY3QgQ3Jl
YXRpb24KIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIiKSk7Ci0gICAgCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpT
Q2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyT2JqZWN0ID0g
SlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVsZWFz
ZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJTdHIuZ2V0KCksIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgSlNPYmplY3RNYWtl
KGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQoKSwgdGhpcykpOwogfQogCiBzdGF0aWMgSlNW
YWx1ZVJlZiBsb2dGb2N1c0V2ZW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwg
SlNWYWx1ZVJlZiopCkBAIC0xNTIsOSArMTQ3LDkgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0UGxh
dGZvcm1OYW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXMK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcGxhdGZvcm1OYW1lLmdldCgp
KTsKIH0KIAotSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFzcygp
CitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRl
SlNDbGFzcygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25z
W10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRpY0Z1bmN0aW9uIGZ1bmN0aW9uc1td
ID0gewogICAgICAgICB7ICJsb2dGb2N1c0V2ZW50cyIsIGxvZ0ZvY3VzRXZlbnRzQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAibG9nVmFsdWVDaGFuZ2VFdmVudHMiLCBsb2dWYWx1ZUNoYW5n
ZUV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImxvZ1Njcm9sbGluZ1N0YXJ0RXZl
bnRzIiwgbG9nU2Nyb2xsaW5nU3RhcnRFdmVudHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMTY2LDIx
ICsxNjEsMTggQEAgSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFz
cygpCiAgICAgICAgIHsgImVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSIsIGVuYWJsZUVuaGFu
Y2VkQWNjZXNzaWJpbGl0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAg
ICAgfTsKLQotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAg
IHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAi
Zm9jdXNlZEVsZW1lbnQiLCBnZXRGb2N1c2VkRWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgInJvb3RFbGVtZW50IiwgZ2V0Um9vdEVsZW1lbnRDYWxsYmFjaywgMCwga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7ICJlbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkIiwgZ2V0RW5oYW5jZWRB
Y2Nlc3NpYmlsaXR5RW5hYmxlZENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInBsYXRm
b3JtTmFtZSIsIGdldFBsYXRmb3JtTmFtZUNhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
MCwgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFz
c0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyIiwgMCwgc3RhdGljVmFsdWVzLCBzdGF0aWNGdW5jdGlvbnMsCisg
ICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAg
IDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgMCwg
dmFsdWVzLCBmdW5jdGlvbnMsCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7
CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pKTsKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAppbmRleCAxZGM3
ZDNiNTYzYTE1NGY0Y2U5YmY3YTMwMzBjOGM1YTc2OTdmMzlhLi44YTI4N2M0OGIxZGY1MzZiNDc1
YjYxODQxN2MyNjEzNWZiMzg2MTI2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAg
ICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKICAgICB+QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZv
aWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgLy8gQ29udHJvbGxlciBN
ZXRob2RzIC0gcGxhdGZvcm0taW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zCiAgICAgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCByb290RWxlbWVudCgpOwpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNzKCk7
CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsKIAog
I2lmIFBMQVRGT1JNKFdJTikKICAgICBIV0lORVZFTlRIT09LIG1fZm9jdXNFdmVudEhvb2sgeyBu
dWxscHRyIH07CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuY3BwCmluZGV4IDBlNWE1MGY2YjlkM2NlNWNhNzdiYTQ0ODY4N2MwMDljYmIxNzVkMjAuLjhl
Zjg1ZWVkZjA4NGQ2NzYyMjcxY2FmMmM4ZjQ0YWI4NTQ3OTI2NzEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCkBAIC0yMDYsNyArMjA2LDcg
QEAgc3RhdGljIEpTVmFsdWVSZWYgdWlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVkaWNhdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBz
dGFydEVsZW1lbnQgPSBudWxscHRyOwogICAgIGJvb2wgaXNEaXJlY3Rpb25OZXh0ID0gdHJ1ZTsK
ICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleSA9IG51bGxwdHI7Ci0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHNlYXJjaFRleHQgPSBudWxscHRyOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBzZWFyY2hUZXh0OwogICAgIGJvb2wgdmlzaWJsZU9ubHkgPSBmYWxzZTsKICAgICBib29s
IGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSA9IGZhbHNlOwogICAgIGlmIChhcmd1bWVudENvdW50
ID49IDUgJiYgYXJndW1lbnRDb3VudCA8PSA2KSB7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0gYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KaW5k
ZXggZWNlNTFlYTM5YTUxNjgzNTRiZDU2OTQ2MzU5MDg2ZDkwMjJlYTE5ZC4uMTRjNjI3MGY4MjMx
ZGMwZjI2YTA1ZTY5NWRhODQ3YmRmOGU0OGM4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQpA
QCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsMTAgKzQz
MSwxMCBAQCBzdWIgX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yCiB7CiAgICAgbXkgKCRzZWxmLCAk
dHlwZSwgJGFyZ3VtZW50TmFtZSkgPSBAXzsKIAotICAgIHJldHVybiAiSlNWYWx1ZVRvTnVsbGFi
bGVCb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9v
bGVhbiIgJiYgJHR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsQm9vbChj
b250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0
eXBlLT5pc051bGxhYmxlOwogICAgIHJldHVybiAiSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCAk
YXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAi
JGFyZ3VtZW50TmFtZSIgaWYgJHR5cGUtPm5hbWUgZXEgIm9iamVjdCI7Ci0gICAgcmV0dXJuICJh
ZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIp
KSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJl
dHVybiAiY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICQkc2VsZntj
b2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gIkpTVmFsdWVU
b051bWJlcihjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSIgaWYgJCRzZWxme2NvZGVH
ZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAidG8iIC4gX2lt
cGxlbWVudGF0aW9uQ2xhc3NOYW1lKCR0eXBlKSAuICIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSki
OwogfQpAQCAtNDcyLDExICs0NzIsMTEgQEAgc3ViIF9yZXR1cm5FeHByZXNzaW9uCiAgICAgbXkg
KCRzZWxmLCAkcmV0dXJuVHlwZSwgJGV4cHJlc3Npb24pID0gQF87CiAKICAgICByZXR1cm4gIkpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAidW5k
ZWZpbmVkIjsKLSAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICRyZXR1
cm5UeXBlLT5pc051bGxhYmxlOworICAgIHJldHVybiAibWFrZVZhbHVlKGNvbnRleHQsICR7ZXhw
cmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5
cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwg
JHtleHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICBy
ZXR1cm4gIiR7ZXhwcmVzc2lvbn0iIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJvYmplY3QiOwog
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCRyZXR1cm5UeXBlKTsKLSAg
ICByZXR1cm4gIkpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0u
Z2V0KCkpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkcmV0dXJuVHlw
ZSk7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSki
IGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKICAg
ICByZXR1cm4gInRvSlMoY29udGV4dCwgV1RGOjpnZXRQdHIoJHtleHByZXNzaW9ufSkpIjsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKaW5kZXggNGEzN2JmM2ExM2RhNGNh
ZWVhNDBhMGNmOGE3MDlmZTU4ZDM0ZWE0Yy4uYWVmN2VjOGE1MDViZmM1MWE4N2UzZDJmOWUxNjc1
MzlkZWUyOWRjNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVy
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcyICsy
OSw0OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgog
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotCi1HQ0NvbnRyb2xsZXI6OkdDQ29udHJvbGxlcigp
Ci17Ci19Ci0KLUdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcigpCi17Ci19CisjaW5jbHVkZSAi
SlNCYXNpY3MuaCIKIAogLy8gU3RhdGljIEZ1bmN0aW9ucwogCiBzdGF0aWMgSlNWYWx1ZVJlZiBj
b2xsZWN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+Y29sbGVjdCgpOworICAg
IGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLmNvbGxlY3QoKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
UmVmIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKLSAgICBib29sIHdhaXRVbnRpbERvbmUgPSBmYWxzZTsKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA+IDApCi0gICAgICAgIHdhaXRVbnRpbERvbmUgPSBKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1swXSk7Ci0KLSAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCh3YWl0VW50aWxE
b25lKTsKLQorICAgIGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBib29sIHdhaXRVbnRpbERv
bmUgPSBhcmd1bWVudENvdW50ID4gMCAmJiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVu
dGlsRG9uZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQog
CiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRKU09iamVjdENvdW50Q2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0g
ICAgc2l6ZV90IGpzT2JqZWN0Q291bnQgPSBjb250cm9sbGVyLT5nZXRKU09iamVjdENvdW50KCk7
Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwganNPYmplY3RDb3VudCk7
CisgICAgYXV0byYgY29udHJvbGxlciA9ICpzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJl
cihjb250ZXh0LCBjb250cm9sbGVyLmdldEpTT2JqZWN0Q291bnQoKSk7CiB9CiAKIC8vIE9iamVj
dCBDcmVhdGlvbgogCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCkKIHsKLSAgICBhdXRvIGdjQ29udHJvbGxlclN0ciA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJHQ0NvbnRyb2xsZXIiKSk7Ci0KLSAgICBKU0NsYXNzUmVmIGNs
YXNzUmVmID0gZ2V0SlNDbGFzcygpOwotICAgIEpTVmFsdWVSZWYgZ2NDb250cm9sbGVyT2JqZWN0
ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVs
ZWFzZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRv
d09iamVjdCwgZ2NDb250cm9sbGVyU3RyLmdldCgpLCBnY0NvbnRyb2xsZXJPYmplY3QsIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUs
IGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAi
R0NDb250cm9sbGVyIiwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQo
KSwgdGhpcykpOwogfQogCi1KU0NsYXNzUmVmIEdDQ29udHJvbGxlcjo6Z2V0SlNDbGFzcygpCitK
U1JldGFpblB0cjxKU0NsYXNzUmVmPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewot
ICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0geworICAgIHN0
YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKICAgICAgICAg
eyAiY29sbGVjdCIsIGNvbGxlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJjb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWQiLCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJnZXRKU09iamVjdENvdW50IiwgZ2V0SlNPYmplY3RDb3VudENhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBK
U0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNz
QXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIHN0YXRpY0Z1bmN0aW9ucywKKyAg
ICBzdGF0aWMgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAg
MCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiR0NDb250cm9sbGVyIiwgMCwgMCwgZnVuY3Rpb25z
LAogICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiAgICAgfTsKLQotICAg
IHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJldHVybiBhZG9w
dChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJv
bGxlci5oCmluZGV4IDY0MjQzODRkZjUzMGU4YzFmZGFlOGZiNjEzMTFiZjBhZGM0YTZhOGYuLjM3
YWE0NmE3NzRjZTNlNzBiODc4OWQ0NDNmMWU0MTgxNGFjNThmNWMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0dDQ29udHJvbGxlci5oCkBAIC0yNiwxOSArMjYsMTUgQEAKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBHQ0NvbnRyb2xsZXJfaAotI2RlZmluZSBHQ0NvbnRyb2xsZXJfaAorI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KIAogY2xhc3MgR0NDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBHQ0NvbnRyb2xsZXIoKTsKLSAgICB+R0NDb250cm9sbGVyKCk7Ci0KLSAg
ICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5k
b3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIC8vIENvbnRyb2xsZXIgTWV0aG9kcyAtIHBs
YXRmcm9tIGluZGVwZW5kYW50IGltcGxlbWVudGF0aW9ucwogICAgIHZvaWQgY29sbGVjdCgpIGNv
bnN0OwpAQCAtNDYsNyArNDIsNSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGdldEpTT2JqZWN0Q291
bnQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNz
KCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsK
IH07Ci0KLSNlbmRpZiAvLyBHQ0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVy
LmNwcAppbmRleCA1ZTUzNWFmMWRlYWQ4NDJkMmVmNGY1Zjc2NjAyYzgzYTk1MGI3NjUyLi4zN2Y2
OTFjYjc5NmI1NjM5MjYyODA0ZWUzZjQwMWNhYmRhZThmMGUxIDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0UnVubmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSAi
V29ya1F1ZXVlSXRlbS5oIgpAQCAtMzgsMTAgKzM5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDVGVzdFJ1bm5lclV0aWxzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVk1JbmxpbmVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Mb2dJ
bml0aWFsaXphdGlvbi5oPgpAQCAtNDg5LDcgKzQ4Nyw2IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRp
c3BsYXlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dz
IGltcGxlbWVudGF0aW9uCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRy
b2xsZXItPmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCk7CiAKQEAgLTQ5OCwxMiArNDk1LDEwIEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGVuY29kZUhvc3RO
YW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBt
YWMgaW1wbGVtZW50YXRpb24KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
KTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBhdXRvIGVuY29kZWRIb3N0TmFtZSA9IGNvbnRyb2xsZXItPmNvcHlFbmNv
ZGVkSG9zdE5hbWUobmFtZS5nZXQoKSk7CkBAIC01MTIsMjIgKzUwNywxMiBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBleGVjQ29tbWFuZENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgTWFjICYgV2luZG93cyBp
bXBsZW1lbnRhdGlvbnMuCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9w
dChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQorICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICAvLyBJZ25vcmluZyB0aGUgc2Vj
b25kIHBhcmFtZXRlciAodXNlckludGVyZmFjZSksIGFzIHRoaXMgY29tbWFuZCBlbXVsYXRlcyBh
IG1hbnVhbCBhY3Rpb24uCi0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdmFsdWU7Ci0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMykgewotICAgICAgICB2YWx1ZSA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKLSAgICAg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmFsdWUgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotCisgICAgYXV0byB2YWx1ZSA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDIgPyBhcmd1bWVu
dHNbMl0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5leGVjQ29tbWFuZChuYW1lLmdldCgpLCB2YWx1ZS5nZXQoKSk7CkBAIC01NDEs
MTEgKzUyNiw4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGZpbmRTdHJpbmdDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sCiAgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAK
LSAgICBhdXRvIHRhcmdldCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAg
SlNPYmplY3RSZWYgb3B0aW9ucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIHRhcmdl
dCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKKyAgICBhdXRv
IG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBudWxscHRy
KTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmZpbmRTdHJpbmcoY29udGV4dCwgdGFyZ2V0
LmdldCgpLCBvcHRpb25zKSk7CkBAIC01NjYsOCArNTQ4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
aXNDb21tYW5kRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW4KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29u
dGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIApA
QCAtNTc5LDEwICs1NjAsOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBvdmVycmlkZVByZWZlcmVuY2VD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZgogICAgIGlmIChhcmd1
bWVudENvdW50IDwgMikKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogCi0gICAgYXV0byBrZXkgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAg
ICBhdXRvIHZhbHVlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byBr
ZXkgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgYXV0
byB2YWx1ZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzFdKTsKIAog
ICAgIC8vIFNob3VsZCB1c2UgYDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zv
cndhcmRDYWNoZT10cnVlIF0gLS0+YCBpbnN0ZWFkLgogICAgIFJFTEVBU0VfQVNTRVJUKCFKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleS5nZXQoKSwgIldlYktpdFVzZXNCYWNrRm9yd2Fy
ZENhY2hlUHJlZmVyZW5jZUtleSIpKTsKQEAgLTY2MiwxNSArNjQxLDEwIEBAIHN0YXRpYyBKU1Zh
bHVlUmVmIHF1ZXVlTG9hZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gdXJsID0gYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAg
IGF1dG8gdXJsID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOwog
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
dGFyZ2V0OwotICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAgdGFyZ2V0ID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bikpOwotICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIH0gZWxzZQotICAgICAgICB0
YXJnZXQgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgIGF1
dG8gdGFyZ2V0ID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudENvdW50ID4g
MSA/IGFyZ3VtZW50c1sxXSA6IG51bGxwdHIpOwogCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnF1ZXVlTG9hZCh1cmwuZ2V0KCksIHRhcmdldC5nZXQoKSk7
CkBAIC02OTIsNyArNjY2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2FkSFRNTFN0cmlu
Z0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZgogICAgICAgICBiYXNl
VVJMID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOwogICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogICAgIH0gZWxzZQotICAg
ICAgICBiYXNlVVJMID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsK
KyAgICAgICAgYmFzZVVSTCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIAogICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKIApAQCAtMjA0NSwzNCArMjAxOSwyNCBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBydW5VSVNjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiwgSlNPYmplYwogCiBzdGF0aWMgdm9pZCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUoSlNPYmpl
Y3RSZWYgb2JqZWN0KQogewotICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIGNvbnRyb2xs
ZXItPmRlcmVmKCk7CisgICAgc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKS0+ZGVyZWYoKTsKIH0KIAogLy8gT2JqZWN0IENyZWF0aW9uCiAKLXZvaWQg
VGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFRlc3RSdW5u
ZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byB0
ZXN0UnVubmVyU3RyID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRlc3RS
dW5uZXIiKSk7CiAgICAgcmVmKCk7Ci0KLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlND
bGFzcygpOwotICAgIEpTVmFsdWVSZWYgbGF5b3V0VGVzdENvbnRvbGxlck9iamVjdCA9IEpTT2Jq
ZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xh
c3NSZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3Qs
IHRlc3RSdW5uZXJTdHIuZ2V0KCksIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4
Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGVz
dFJ1bm5lciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCksIHRo
aXMpKTsKIH0KIAotSlNDbGFzc1JlZiBUZXN0UnVubmVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWlu
UHRyPEpTQ2xhc3NSZWY+IFRlc3RSdW5uZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewotICAgIHN0YXRp
YyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMgPSBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMo
KTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zID0gVGVzdFJ1
bm5lcjo6c3RhdGljRnVuY3Rpb25zKCk7Ci0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNs
YXNzRGVmaW5pdGlvbiA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiVGVz
dFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAorICAgIHN0YXRpYyBj
b25zdCBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0geworICAgICAgICAwLCBrSlNDbGFz
c0F0dHJpYnV0ZU5vbmUsICJUZXN0UnVubmVyIiwgMCwgc3RhdGljVmFsdWVzKCksIHN0YXRpY0Z1
bmN0aW9ucygpLAogICAgICAgICAwLCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNs
YXNzRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRp
b24pKTsKIH0KIAogLy8gQ29uc3RhbnRzCkBAIC0yMTA3LDkgKzIwNzEsOSBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBnZXRSRU5ERVJfVFJFRV9TSE9XX0xBWUVSX0ZSQUdNRU5UUyhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYgogICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAzMik7
CiB9CiAKLUpTU3RhdGljVmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCitjb25zdCBK
U1N0YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogewotICAgIHN0YXRpYyBK
U1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNT
dGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAiZGlkQ2FuY2VsQ2xpZW50UmVkaXJl
Y3QiLCBnZXREaWRDYW5jZWxDbGllbnRSZWRpcmVjdCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJ0
aW1lb3V0IiwgZ2V0VGltZW91dENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImdsb2Jh
bEZsYWciLCBnZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIHNldEdsb2JhbEZsYWdDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCkBAIC0yMTI3LDEyICsyMDkxLDEyIEBAIEpTU3RhdGlj
VmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCiAgICAgICAgIHsgIlJFTkRFUl9UUkVF
X1NIT1dfTEFZRVJfRlJBR01FTlRTIiwgZ2V0UkVOREVSX1RSRUVfU0hPV19MQVlFUl9GUkFHTUVO
VFMsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAwLCAwLCAwLCAwIH0KICAgICB9OwotICAgIHJldHVy
biBzdGF0aWNWYWx1ZXM7CisgICAgcmV0dXJuIHZhbHVlczsKIH0KIAotSlNTdGF0aWNGdW5jdGlv
biogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKK2NvbnN0IEpTU3RhdGljRnVuY3Rpb24q
IFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRp
Y0Z1bmN0aW9uIGZ1bmN0aW9uc1tdID0gewogICAgICAgICB7ICJhYm9ydE1vZGFsIiwgYWJvcnRN
b2RhbENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZERpc2FsbG93ZWRVUkwiLCBhZGRE
aXNhbGxvd2VkVVJMQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkVVJMVG9SZWRpcmVj
dCIsIGFkZFVSTFRvUmVkaXJlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMjI5Nyw3ICsyMjYxLDcg
QEAgSlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKICAgICAg
ICAgeyAwLCAwLCAwIH0KICAgICB9OwogCi0gICAgcmV0dXJuIHN0YXRpY0Z1bmN0aW9uczsKKyAg
ICByZXR1cm4gZnVuY3Rpb25zOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxT
dHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKQEAgLTIzNDIs
MTQgKzIzMDYsMTEgQEAgdm9pZCBUZXN0UnVubmVyOjppZ25vcmVMZWdhY3lXZWJOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMoKQogCiB2b2lkIFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyRmlyZWQoKQogewotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAiRkFJTDogVGlt
ZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iOwotICAgIGZwcmlu
dGYodGVzdFJlc3VsdCwgIiVzIiwgbWVzc2FnZSk7CisgICAgZnB1dHMoIkZBSUw6IFRpbWVkIG91
dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIiwgdGVzdFJlc3VsdCk7CiAK
LSAgICBhdXRvIGFjY3VtdWxhdGVkTG9ncyA9IGdldEFuZFJlc2V0QWNjdW11bGF0ZWRMb2dzKCk7
Ci0gICAgaWYgKCFhY2N1bXVsYXRlZExvZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIG1lc3NhZ2UgPSAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4iOwotICAg
ICAgICBmcHJpbnRmKHRlc3RSZXN1bHQsICIlcyVzXG4iLCBtZXNzYWdlLCBhY2N1bXVsYXRlZExv
Z3MudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQorICAgIGF1dG8gbG9ncyA9IGdldEFuZFJlc2V0QWNj
dW11bGF0ZWRMb2dzKCk7CisgICAgaWYgKCFsb2dzLmlzRW1wdHkoKSkKKyAgICAgICAgZnByaW50
Zih0ZXN0UmVzdWx0LCAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4lc1xuIiwg
bG9ncy51dGY4KCkuZGF0YSgpKTsKIAogICAgIG5vdGlmeURvbmUoKTsKIH0KQEAgLTI0MDMsMjQg
KzIzNjQsMjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRBY2N1bW11bGF0ZUxvZ3NGb3JDaGFubmVs
KEpTU3RyaW5nUmVmIGNoYW5uZWwpCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRMb2dDaGFu
bmVsVG9BY2N1bXVsYXRlKHsgYnVmZmVyLmdldCgpIH0pOwogfQogCi10eXBlZGVmIFdURjo6SGFz
aE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVJlZj4gQ2FsbGJhY2tNYXA7Cit1c2luZyBDYWxsYmFja01h
cCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNPYmplY3RSZWY+Owogc3RhdGljIENhbGxiYWNr
TWFwJiBjYWxsYmFja01hcCgpCiB7CiAgICAgc3RhdGljIENhbGxiYWNrTWFwJiBtYXAgPSAqbmV3
IENhbGxiYWNrTWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2Fj
aGVUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIEpTVmFsdWVSZWYgY2FsbGJhY2sp
Cit2b2lkIFRlc3RSdW5uZXI6OmNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4
LCBKU1ZhbHVlUmVmIGNhbGxiYWNrVmFsdWUpCiB7Ci0gICAgaWYgKCFjYWxsYmFjaykKKyAgICBh
dXRvIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKKyAgICBpZiAoIWNhbGxiYWNrVmFs
dWUgfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYWxsYmFja1ZhbHVlKSkKICAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gY2FsbGJhY2sgPSAoSlNPYmplY3RSZWYpY2FsbGJhY2tWYWx1ZTsK
IAogICAgIGlmIChjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkgewotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBj
YWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICVkKVxuIiwgaW5kZXgpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5l
ciBjYWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICV1KVxuIiwgaW5kZXgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluRnJhbWVK
U0NvbnRleHQoKTsKICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAg
Y2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNrKTsKIH0KQEAgLTI0MzAsMjIgKzIzOTIs
MTggQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGlu
ZGV4LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY28KICAgICBpZiAoIWNhbGxiYWNrTWFwKCkuY29u
dGFpbnMoaW5kZXgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOwotICAgIGlmIChKU09iamVjdFJlZiBjYWxsYmFjayA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpLCAwKSkg
ewotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywg
MCk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgaWYgKGF1
dG8gY2FsbGJhY2sgPSBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpKSB7CisgICAgICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdldEdsb2JhbE9i
amVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBudWxscHRyKTsKICAgICAg
ICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAgfQogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OmNsZWFyVGVzdFJ1bm5lckNhbGxiYWNrcygpCiB7Ci0gICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKLQotICAgIGZvciAoYXV0byYgaXRl
ciA6IGNhbGxiYWNrTWFwKCkpIHsKLSAgICAgICAgaWYgKEpTT2JqZWN0UmVmIGNhbGxiYWNrID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGl0ZXIudmFsdWUsIDApKQotICAgICAgICAgICAgSlNW
YWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgfQotCisgICAgYXV0byBjb250
ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNh
bGxiYWNrTWFwKCkudmFsdWVzKCkpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwg
Y2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFwKCkuY2xlYXIoKTsKIH0KIApAQCAtMjUwOCwxNiAr
MjQ2NiwxMSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGZpbGVzVmFsdWUpCiB7CiAgICAgaWYgKCFKU1ZhbHVlSXNB
cnJheShjb250ZXh0LCBmaWxlc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgSlNPYmpl
Y3RSZWYgZmlsZXMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZmlsZXNWYWx1ZSwgbnVsbHB0
cik7Ci0gICAgc3RhdGljIGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgZmlsZXNMZW5ndGhW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZmlsZXMsIGxlbmd0aFByb3BlcnR5
LmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBmaWxl
c0xlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZmlsZXMgPSAoSlNPYmpl
Y3RSZWYpZmlsZXNWYWx1ZTsKKyAgICBhdXRvIGZpbGVzTGVuZ3RoID0gV1RSOjphcnJheUxlbmd0
aChjb250ZXh0LCBmaWxlcyk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVzLmNsZWFyKCk7Ci0gICAg
YXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbGVzTGVuZ3RoOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIGZpbGVWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZpbGVzLCBpLCBudWxscHRyKTsKICAgICAg
ICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgZmlsZVZhbHVlKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCmluZGV4IDE2NzEyMDU4YTEwY2U5
ODlhM2M4ZDQzZDY0NGY5YTllMzAwZDQwZGUuLmU4NTdhYTRkY2RhMjk3YzRmZTNlNzZhYzdlOWVh
ZjA1YTA5YzgwYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKQEAgLTU0LDcgKzU0LDcg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xlYW51cCgpOwogCi0gICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYp
OwogCiAgICAgdm9pZCBhZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCk7CiAgICAgY29u
c3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBhbGxvd2VkSG9zdHMoKSBjb25zdCB7IHJldHVybiBt
X2FsbG93ZWRIb3N0czsgfQpAQCAtNDk3LDcgKzQ5Nyw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp2
ZWN0b3I8Y2hhcj4gbV9vcGVuUGFuZWxGaWxlc01lZGlhSWNvbjsKICNlbmRpZgogCi0gICAgc3Rh
dGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOwotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBz
dGF0aWNWYWx1ZXMoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rp
b25zKCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3Mo
KTsKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzKCk7CisgICAg
c3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOwogfTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbQppbmRleCA2MWUwMWY1ZWQ3Njc1YTgzMGJhNmYzOGY4ZWNmNTg0MGZiYzgzOWNiLi5l
ODUyZGZkYWJjZDQzOTkzYjMxMzkzZDM1ZGYwMDU0Y2Y2Nzk0Zjc5IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBA
IC0yNCwxMiArMjQsMTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkR1
bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
IgorI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1ByaXZhdGUuaD4KQEAgLTE1NSw1
ICsxNTYsNSBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2li
aWxpdHlFbmFibGVkKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0
ZUpTU3RyaW5nKCJpb3MiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5kZXggZTNjOTA5ZDZkZDI3MDM5MjgzZWFj
Y2QzMmFlNDA5MjZjZThhOWU2NC4uNjQ1ZmM4NjNjZWYxMGEwMGY1YmI0YjdkMTM5YzZlMGRjZTQw
OGRlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW0KQEAgLTI0LDExICsyNCwxMiBAQAogICovCiAKICNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCIKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogI2lt
cG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCIKKyNpbXBvcnQgIkR1bXBS
ZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5oPgpAQCAtNDEsMTEgKzQyLDYgQEAKIAog
dHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwg
TlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKLSAgICA6IG1fZWxl
bWVudChlbGVtZW50KQotewotfQotCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChVSUFjY2Vzc2liaWxp
dHlIaWRkZW4pCiAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooQ0dQb2ludClwb2ludDsKIC0g
KGlkKWFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50OwpAQCAtMTEyLDkgKzEwOCw5IEBAIEBpbnRl
cmZhY2UgTlNPYmplY3QgKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyUHJpdmF0ZSkKIC0g
KENHUGF0aFJlZilfYWNjZXNzaWJpbGl0eVBhdGg7CiBAZW5kCiAKLXN0YXRpYyBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGlkIGVsZW1lbnQpCisgICAgOiBtX2VsZW1lbnQo
ZWxlbWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cyhudWxscHRyLCAwKSk7CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY29u
Y2F0ZW5hdGVBdHRyaWJ1dGVBbmRWYWx1ZShOU1N0cmluZyAqYXR0cmlidXRlLCBOU1N0cmluZyAq
dmFsdWUpCkBAIC0xODAsNyArMTc2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpmaWVsZHNldEFuY2VzdG9yRWxlbWVudCgpCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLQogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnVybCgpCiB7CiAgICAgTlNVUkwgKnVybCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0
eVVSTF07CkBAIC0yOTEsNyArMjg2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpsaW5rZWRFbGVtZW50KCkKIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KHVuc2lnbmVk
IGluZGV4KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtNTU4LDcgKzU1Miw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAgICAgaWQgdGV4
dE1hcmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKICAgICBp
ZiAoIXRleHRNYXJrZXJzIHx8ICFbdGV4dE1hcmtlcnMgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBj
bGFzc11dKQotICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgICAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJp
bmdGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCkBA
IC02ODEsMjIgKzY3NSwyMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3Vt
ZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbAogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2Vk
VUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJp
YnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJu
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0
dHJpYnV0ZSkKQEAgLTcxNiw3ICs3MTAsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZQogICAg
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGF0dHJpYnV0ZSwgIkFYVGV4dHVhbENv
bnRleHQiKSkKICAgICAgICAgcmV0dXJuIFtbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlUZXh0dWFs
Q29udGV4dF0gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkKCkKQEAgLTc1
NSwxNyArNzQ5LDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVT
dXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFnZVVwKCkKQEAg
LTc4OSwxNyArNzgzLDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFn
ZVJpZ2h0KCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvbGVEZXNjcmlwdGlvbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQpAQCAtODA5
LDcgKzgwMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpkZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFs
dWUoKQpAQCAtODE5LDcgKzgxMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRl
eHQoKSBjb25zdApAQCAtODQ5LDcgKzg0Myw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2V0VmFsdWUoSlNTdHJpbmdSZWYgdmFsdWVUZXh0KQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbigpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRM
aW5lTnVtYmVyKCkKQEAgLTg2OSw3ICs4NjMsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
Rm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtODkyLDcgKzg4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDaGVja2VkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lu
ZGV0ZXJtaW5hdGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTkwOCw3ICs5MDAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFyaWFJc0dyYWJiZWQoKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3Ry
aW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50
IGluZGV4KQpAQCAtOTE4LDM3ICs5MTAsMzcgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmxpbmVGb3JJbmRleChpbnQgaW5kZXgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQogewotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dDb3VudCgpCkBAIC05ODcsMjIgKzk3OSwxOSBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQg
Y29sLAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUo
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQg
eSkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2ZVRlY2hu
b2xvZ3lTaW11bGF0ZWRGb2N1cygpCkBAIC0xMDM1LDIzICsxMDI0LDIxIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3Rp
ZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQpAQCAtMTA4Myw0
MyArMTA3MCwzNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyKCkKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJs
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBz
ZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTExMzAsMTMgKzExMTAsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2lu
Z2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtMTE1MiwyNyArMTEzMCwyMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cG9wdXBWYWx1ZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGFrZUZvY3VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVj
dGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAogfQogCiB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRDb3VudEZv
clNlYXJjaFByZWRpY2F0ZShKU0NvbnRleHRSZWYgY29udGV4dCwgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgSlNWYWx1ZVJlZiBzZWFy
Y2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1t
ZWRpYXRlRGVzY2VuZGFudHNPbmx5KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gMDsKIH0KIApAQCAtMTIxNCwyMyArMTE4NywxOSBAQCBkb3VibGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xhc3NM
aXN0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXJyYXlBdHRy
aWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Jikg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4m
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB1bnNpZ25lZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZENoaWxkcmVuQ291bnQoKSBjb25zdApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgKaW5kZXggMzg1
MGI0MTQ0NjNlMDE1YzY3ZDU2ZWYwNGE1OTM4Yzk5MWM0N2VkOC4uMTViZjUxZjg0ZDNlODE4MWMw
MmNmNjYzYzc1NTM5ZGMyOGFkOWRkNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oCkBAIC00MSw0ICs0MSw0IEBAIEBpbnRlcmZhY2Ug
TlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQogLSAoSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+KWNyZWF0ZUpTU3RyaW5nUmVmOwogQGVuZAogCi1leHRlcm4gTlNEaWN0aW9uYXJ5ICpzZWFy
Y2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250
ZXh0UmVmLCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50ICpzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJl
Y3Rpb25OZXh0LCB1bnNpZ25lZCByZXN1bHRzTGltaXQsIEpTVmFsdWVSZWYgc2VhcmNoS2V5LCBK
U1N0cmluZ1JlZiBzZWFyY2hUZXh0LCBib29sIHZpc2libGVPbmx5LCBib29sIGltbWVkaWF0ZURl
c2NlbmRhbnRzT25seSk7CitOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZWYsIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5leHQsIHVuc2lnbmVkIHJl
c3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFyY2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQs
IGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1t
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KaW5k
ZXggNzk0MDczOGEzMzkwZWIyNzBhNjA4YmZkMDU5ZTE3MmFmNGI3OTA5Mi4uMDMwNjdlMmQwODky
MTRmYmU4NDY2N2IyODI0ZjhjZTMxNDgwZjk4NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogCisj
aW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZD
Ri5oPgogCiBAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQpA
QCAtNTYsNyArNTcsNiBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICBbcGFyYW1l
dGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c3RhcnRFbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVu
dCgpIGZvcktleTpAIkFYU3RhcnRFbGVtZW50Il07CiAKICAgICBbcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZSBzZXRPYmplY3Q6KGlzRGlyZWN0aW9uTmV4dCkgPyBAIkFYRGlyZWN0aW9uTmV4dCIgOiBA
IkFYRGlyZWN0aW9uUHJldmlvdXMiIGZvcktleTpAIkFYRGlyZWN0aW9uIl07Ci0KICAgICBbcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QChyZXN1bHRzTGltaXQpIGZvcktleTpAIkFY
UmVzdWx0c0xpbWl0Il07CiAKICAgICBpZiAoc2VhcmNoS2V5KSB7CkBAIC02NiwxNCArNjYsOCBA
QCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JT
ZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0cmlu
ZykKICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZy5nZXQoKV07CiAgICAgICAgIH0gZWxzZSBp
ZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsKLSAgICAgICAgICAgIEpT
T2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJj
aEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0
aCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJp
bmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAg
ICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcu
Z2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleUFycmF5TGVuZ3RoVmFs
dWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUp
KQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVl
LCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJj
aEtleUFycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaEtleTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHNlYXJjaEtleUFycmF5TGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hL
ZXlBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoS2V5
QXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoS2V5
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlBcnJh
eSwgaSwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2VhcmNoS2V5U3Ry
aW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hLZXlWYWx1ZSwgbnVsbHB0
cik7CkBAIC04OCwxMiArODIsMTEgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJh
bWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICAgICAg
aWYgKHNlYXJjaEtleVBhcmFtZXRlcikKICAgICAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmli
dXRlIHNldE9iamVjdDpzZWFyY2hLZXlQYXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWFyY2hLZXkiXTsK
ICAgICB9Ci0gICAgCisKICAgICBpZiAoc2VhcmNoVGV4dCAmJiBKU1N0cmluZ0dldExlbmd0aChz
ZWFyY2hUZXh0KSkKICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OltO
U1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoVGV4dF0gZm9yS2V5OkAiQVhTZWFy
Y2hUZXh0Il07Ci0gICAgCisKICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6
QCh2aXNpYmxlT25seSkgZm9yS2V5OkAiQVhWaXNpYmxlT25seSJdOwotICAgIAogICAgIFtwYXJh
bWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSkg
Zm9yS2V5OkAiQVhJbW1lZGlhdGVEZXNjZW5kYW50c09ubHkiXTsKICAgICAKICAgICByZXR1cm4g
cGFyYW1ldGVyaXplZEF0dHJpYnV0ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRleCA1MWYwMzFkZGJiY2Q4NTNh
ZGI0ZmU3MTQ3ZDg1YTUyNTc2YTAwNzhiLi45NWEwNmYzYTQwYTA0ODllM2UwYjBiMzE2NTc0YzNm
Y2JmMmVjZjExIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJBY2Nl
c3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2ltcG9ydCAi
SlNCYXNpY3MuaCIKICNpbXBvcnQgPEFwcEtpdC9OU0NvbG9yLmg+CiAjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+
CkBAIC0xNTgsNSArMTU5LDUgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5j
ZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZCgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm1hYyIpKTsKKyAgICByZXR1cm4g
V1RSOjpjcmVhdGVKU1N0cmluZygibWFjIik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IGUxZWZkN2Y0ZTE2
MWFmZmRlZTIyNGNjNDUzODQ4YjM5Y2I0OTcwNjMuLjY0OTFhMmQwYTVmYTRjNzRlNzIxNzkyNzhm
N2UxY2E5OWQ3NjhkNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFz
aWNzLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgpA
QCAtODAsMTEgKzgxLDYgQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9p
bnQ6KE5TUG9pbnQpcG9pbnQ7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZh
bHVlIGZvckF0dHJpYnV0ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWU7CiBAZW5kCiAKLXN0YXRp
YyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0gICAg
cmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkpOwot
fQotCiBzdGF0aWMgT3B0aW9uYWw8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gbWFrZVZlY3RvckVs
ZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCosIGlkIGVsZW1lbnQpCiB7CiAgICAg
cmV0dXJuIHsgeyBlbGVtZW50IH0gfTsKQEAgLTIyMSwxNCArMjE3LDggQEAgc3RhdGljIE5TRGlj
dGlvbmFyeSAqc2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0Nv
bnRleHRSZWYgY28KICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRP
YmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5n
LmdldCgpXV07CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hT
dHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVs
bHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAw
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJp
bmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJp
bmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgCisgICAgICAgICAg
ICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheSA9IChKU09iamVjdFJlZilzZWFyY2hTdHJpbmdzOwor
ICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVu
Z3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0
cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKICAgICAgICAgICAgICAgICBpZiAo
c2VhcmNoU3RyaW5nc1N0cmluZykKQEAgLTI2MiwxNCArMjUyLDggQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRl
eHRSZWYgY28KICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQogICAgICAgICAg
ICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKICAgICAgICAgfSBl
bHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAg
ICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNl
YXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJv
cGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5n
dGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNo
U3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJj
aFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAg
ICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaFN0cmluZ3M7
CisgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IFdUUjo6YXJyYXlM
ZW5ndGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNo
U3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgICAgIGlm
IChzZWFyY2hTdHJpbmdzU3RyaW5nKQpAQCAtMTQ0NiwxMyArMTQzMCwxMyBAQCB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxk
cmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIGZ1bmN0aW9uLgogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQpAQCAtMTQ2Myw3ICsxNDQ3LDcgQEAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcoKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBF
TkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQpAQCAt
MTQ3NCw3ICsxNDU4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0
cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogICAgIAotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVy
bCgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdh
dGUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KaW5k
ZXggMzY3MTQ5MzlmZGEwYTU2NzQ5Yzc5OTg4NmExZWE0Mzg5MjE4OWE0YS4uMzQyYjNhMDFkYzdl
YTg3OWFmMWI1NGIwZWUyNzNkNjgxMmY4ZjdhNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQpAQCAtMzExLDU0ICszMTEsMjYgQEAgSUdOT1JFX1dB
Uk5JTkdTX0VORAogCiAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxk
Rm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKIHsKLSAgICAvLyBNYWtlIE5ldy1TdHlsZSBUZXN0
UnVubmVyCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07
Ci0gICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0
KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBhdXRvIGNvbnRl
eHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07CisgICAgYXV0byB3ZWJWaWV3ID0gW2ZyYW1lIHdl
YlZpZXddOworICAgIGF1dG8gd2luZG93T2JqZWN0ID0gW2ZyYW1lIHdpbmRvd09iamVjdF07CiAK
LSAgICBBU1NFUlQoZ1Rlc3RSdW5uZXIpOwotICAgIGdUZXN0UnVubmVyLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNl
cHRpb24pOwotCi0gICAgZ2NDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIGds
b2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFs
T2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgZ1Rlc3RS
dW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgZ2NDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOwogCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJ
bnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiAKLSAgICAvLyBNYWtlIE9sZC1TdHlsZSBjb250cm9s
bGVycwotCi0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtmcmFtZSB3ZWJWaWV3XTsKLSAgICBXZWJT
Y3JpcHRPYmplY3QgKm9iaiA9IFtmcmFtZSB3aW5kb3dPYmplY3RdOwotI2lmICFQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIEFwcGxlU2NyaXB0Q29udHJvbGxlciAqYXNjID0gW1tBcHBsZVNjcmlw
dENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XTsKLSAgICBbb2JqIHNl
dFZhbHVlOmFzYyBmb3JLZXk6QCJhcHBsZVNjcmlwdENvbnRyb2xsZXIiXTsKLSAgICBbYXNjIHJl
bGVhc2VdOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFk
b3B0TlMoW1tBcHBsZVNjcmlwdENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3XSkuZ2V0KCkgZm9yS2V5OkAiYXBwbGVTY3JpcHRDb250cm9sbGVyIl07CiAjZW5kaWYKIAot
ICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgKmVzYyA9IFtbRXZlbnRTZW5kaW5nQ29udHJvbGxl
ciBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTplc2MgZm9yS2V5OkAiZXZlbnRTZW5k
ZXIiXTsKLSAgICBbZXNjIHJlbGVhc2VdOwotICAgIAotICAgIFtvYmogc2V0VmFsdWU6Z05hdmln
YXRpb25Db250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07Ci0gICAgCi0g
ICAgT2JqQ0NvbnRyb2xsZXIgKm9jYyA9IFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwot
ICAgIFtvYmogc2V0VmFsdWU6b2NjIGZvcktleTpAIm9iakNDb250cm9sbGVyIl07Ci0gICAgW29j
YyByZWxlYXNlXTsKLQotICAgIE9iakNQbHVnaW4gKnBsdWdpbiA9IFtbT2JqQ1BsdWdpbiBhbGxv
Y10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTpwbHVnaW4gZm9yS2V5OkAib2JqQ1BsdWdpbiJd
OwotICAgIFtwbHVnaW4gcmVsZWFzZV07Ci0gICAgCi0gICAgT2JqQ1BsdWdpbkZ1bmN0aW9uICpw
bHVnaW5GdW5jdGlvbiA9IFtbT2JqQ1BsdWdpbkZ1bmN0aW9uIGFsbG9jXSBpbml0XTsKLSAgICBb
b2JqIHNldFZhbHVlOnBsdWdpbkZ1bmN0aW9uIGZvcktleTpAIm9iakNQbHVnaW5GdW5jdGlvbiJd
OwotICAgIFtwbHVnaW5GdW5jdGlvbiByZWxlYXNlXTsKLQotICAgIFRleHRJbnB1dENvbnRyb2xs
ZXIgKnRpYyA9IFtbVGV4dElucHV0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXddOwotICAgIFtvYmogc2V0VmFsdWU6dGljIGZvcktleTpAInRleHRJbnB1dENvbnRyb2xs
ZXIiXTsKLSAgICBbdGljIHJlbGVhc2VdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRv
cHROUyhbW0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6
QCJldmVudFNlbmRlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6Z05hdmlnYXRpb25D
b250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07CisgICAgW3dpbmRvd09i
amVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQo
KSBmb3JLZXk6QCJvYmpDQ29udHJvbGxlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6
YWRvcHROUyhbW09iakNQbHVnaW4gYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDUGx1
Z2luIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ1BsdWdpbkZ1
bmN0aW9uIGFsbG9jXSBpbml0XSkuZ2V0KCkgZm9yS2V5OkAib2JqQ1BsdWdpbkZ1bmN0aW9uIl07
CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbVGV4dElucHV0Q29udHJvbGxl
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKS5nZXQoKSBmb3JLZXk6QCJ0ZXh0SW5w
dXRDb250cm9sbGVyIl07CiB9CiAKIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFt
ZTooV2ViRnJhbWUgKilmcmFtZSBpbklzb2xhdGVkV29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29y
bGQKQEAgLTM3MSw3ICszNDMsNyBAQCAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJh
bWU6KFdlYkZyYW1lICopZnJhbWUgaW5Jc29sYXRlZFdvcmxkOihXZWJTY3JpcAogICAgIGlmICgh
Z2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09iamVjdFNldFByb3BlcnR5
KGN0eCwgZ2xvYmFsT2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
X193b3JsZElEIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHdvcmxkSURGb3JXb3Js
ZCh3b3JsZCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICBKU09iamVj
dFNldFByb3BlcnR5KGN0eCwgZ2xvYmFsT2JqZWN0LCBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJfX3dv
cmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCB3b3JsZElERm9yV29ybGQod29y
bGQpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7CiB9CiAKIC0gKHZvaWQpd2Vi
VmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lOihXZWJG
cmFtZSAqKWZyYW1lIGluU2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggZWJhMDkzZWUxODdjZDMx
MGQwNTFiMjMwYWVkMmEzMDBmZTc5NDljMC4uZTIxMDcwYWMzMWIzNGNmY2JiNTc5ZDc3NzViNzYx
OTkxMTRhYmRmZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0K
QEAgLTMyLDYgKzMyLDcgQEAKIAogI2ltcG9ydCAiRGVmYXVsdFBvbGljeURlbGVnYXRlLmgiCiAj
aW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0
ICJMYXlvdXRUZXN0U3BlbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92
aWRlci5oIgogI2ltcG9ydCAiTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmgiCkBAIC02NzAs
MTUgKzY3MSwxMCBAQCBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZQogewogICAgIFdlYkZpbmRPcHRp
b25zIG9wdGlvbnMgPSAwOwogCi0gICAgYXV0byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYg
bGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwg
bGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihj
b250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdGFyZ2V0Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhcmdldCkpOworICAgIGF1dG8gbGVuZ3RoID0g
V1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBvcHRpb25zQXJyYXkpOworICAgIGF1dG8gdGFyZ2V0
Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHRhcmdldCkpOwogCi0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKICAgICAgICAgaWYg
KCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcAppbmRl
eCBmZDc3YWQxYzM5MjYzOGRhOTQxNDNlZTdkNWE4MjFlNjk0MTAyMzEzLi41ZjNiNzQwNDA1MDBm
MDMwZGEyYmVkMWFhZjk2NzNmOGI2MmJiMTY2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKQEAgLTM3MSwxOSArMzcxLDEwIEBAIHZvaWQgRnJh
bWVMb2FkRGVsZWdhdGU6OmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVJblN0YW5kYXJkV29y
bGQoSVdlYkZyYW1lKiBmCiAgICAgSVdlYkZyYW1lKiBwYXJlbnRGcmFtZSA9IDA7CiAgICAgZnJh
bWUtPnBhcmVudEZyYW1lKCZwYXJlbnRGcmFtZSk7CiAKLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlv
biA9IDA7Ci0KLSAgICA6OmdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdp
bmRvd09iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
bV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAm
ZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBtX2FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4
Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAgbV90ZXh0SW5wdXRDb250
cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlv
bik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOworICAgIDo6Z1Rlc3RSdW5uZXItPm1ha2VXaW5k
b3dPYmplY3QoY29udGV4dCk7CisgICAgbV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CisgICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0KTsKKyAgICBtX3RleHRJbnB1dENvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CiAKICAgICBKU1N0cmluZ1JlZiBldmVudFNlbmRlclN0ciA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJldmVudFNlbmRlciIpOwogICAgIEpTVmFsdWVSZWYgZXZlbnRT
ZW5kZXIgPSBtYWtlRXZlbnRTZW5kZXIoY29udGV4dCwgIXBhcmVudEZyYW1lKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAppbmRleCAzYjlh
MmI3OGQ5ZDU4ODM1NTAzNDA1NWYyNGQyMDI1OGQzMmI3YjE1Li44NzE0ZDRhMGM1NGVkYjMyZjBm
MzIzZTk3YzU1ZmYzMWViZGJmOWQzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93
aW4vVGV4dElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgogCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogLy8gU3RhdGljIEZ1bmN0aW9ucwpAQCAtMTY0LDQwICsxNjQs
MzAgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2VsZWN0ZWRSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGkKIAogdm9pZCBUZXh0SW5wdXRDb250cm9sbGVy
OjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5k
b3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gIHRleHRJbnB1dENvbnRvbGxlclN0cihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoInRleHRJbnB1dENvbnRyb2xsZXIiKSk7Ci0KLSAgICBKU0NsYXNzUmVmIGNs
YXNzUmVmID0gZ2V0SlNDbGFzcygpOwotICAgIEpTVmFsdWVSZWYgdGV4dElucHV0Q29udG9sbGVy
T2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0Ns
YXNzUmVsZWFzZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQs
IHdpbmRvd09iamVjdCwgdGV4dElucHV0Q29udG9sbGVyU3RyLmdldCgpLCB0ZXh0SW5wdXRDb250
b2xsZXJPYmplY3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQ
cm9wZXJ0eShjb250ZXh0LCAidGV4dElucHV0Q29udHJvbGxlciIsIEpTT2JqZWN0TWFrZShjb250
ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCksIHRoaXMpKTsKIH0KIAotSlNDbGFzc1JlZiBUZXh0
SW5wdXRDb250cm9sbGVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IFRl
eHRJbnB1dENvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewotICAgIHN0YXRpYyBKU1N0YXRp
Y1ZhbHVlKiBzdGF0aWNWYWx1ZXMgPSBUZXh0SW5wdXRDb250cm9sbGVyOjpzdGF0aWNWYWx1ZXMo
KTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zID0gVGV4dElu
cHV0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKCk7Ci0gICAgc3RhdGljIEpTQ2xhc3NEZWZp
bml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IAotICAgIHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRy
aWJ1dGVOb25lLCAiVGV4dElucHV0Q29udHJvbGxlciIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGlj
RnVuY3Rpb25zLAorICAgIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9
IHsKKyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiVGV4dElucHV0Q29udHJvbGxl
ciIsIDAsIHN0YXRpY1ZhbHVlcygpLCBzdGF0aWNGdW5jdGlvbnMoKSwKICAgICAgICAgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICAgIH07Ci0KLSAgICByZXR1cm4gSlNDbGFzc0Ny
ZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gYWRvcHQoSlNDbGFzc0NyZWF0ZSgm
Y2xhc3NEZWZpbml0aW9uKSk7CiB9CiAKLUpTU3RhdGljVmFsdWUqIFRleHRJbnB1dENvbnRyb2xs
ZXI6OnN0YXRpY1ZhbHVlcygpCitjb25zdCBKU1N0YXRpY1ZhbHVlKiBUZXh0SW5wdXRDb250cm9s
bGVyOjpzdGF0aWNWYWx1ZXMoKQogewotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1Zh
bHVlc1tdID0gCisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10g
PQogICAgIHsKICAgICAgICAgeyAwLCAwLCAwLCAwIH0KICAgICB9OwogICAgIHJldHVybiBzdGF0
aWNWYWx1ZXM7CiB9CiAKLUpTU3RhdGljRnVuY3Rpb24qIFRleHRJbnB1dENvbnRyb2xsZXI6OnN0
YXRpY0Z1bmN0aW9ucygpCitjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBUZXh0SW5wdXRDb250cm9s
bGVyOjpzdGF0aWNGdW5jdGlvbnMoKQogewotICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0
YXRpY0Z1bmN0aW9uc1tdID0geworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uIHN0
YXRpY0Z1bmN0aW9uc1tdID0gewogICAgICAgICB7ICJzZXRNYXJrZWRUZXh0Iiwgc2V0TWFya2Vk
VGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImhhc01hcmtlZFRleHQiLCBoYXNNYXJr
ZWRUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAidW5tYXJrVGV4dCIsIHVubWFya1Rl
eHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1RleHRJbnB1dENvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5w
dXRDb250cm9sbGVyLmgKaW5kZXggMjlmMDM4YmUyZGRiNTBlOWZhZTUzMGUxYzZkMTNjMWQ0NmY5
OTc5Mi4uZTVhZjVlYmVjYTQyYmJlZDVmMzFkOTlkNGM4YTgwYTk0NmMwNDMyZSAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1RleHRJbnB1dENvbnRyb2xsZXIuaAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGV4dElucHV0Q29udHJvbGxlci5oCkBAIC0yNiwyMCAr
MjYsMTYgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KICAKLSNpZm5kZWYgVGV4dElucHV0Q29udHJvbGxl
cl9oCi0jZGVmaW5lIFRleHRJbnB1dENvbnRyb2xsZXJfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU09iamVjdFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVm
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CiAKIGNsYXNzIFRleHRJbnB1dENvbnRyb2xsZXIgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHZvaWQgbWFrZVdpbmRvd09iamVj
dChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAg
IHZvaWQgc2V0TWFya2VkVGV4dChKU1N0cmluZ1JlZiB0ZXh0LCB1bnNpZ25lZCBpbnQgZnJvbSwg
dW5zaWduZWQgaW50IGxlbmd0aCk7CiAgICAgYm9vbCBoYXNNYXJrZWRUZXh0KCk7CkBAIC01MCw5
ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnZlY3RvcjxpbnQ+IHNlbGVjdGVkUmFuZ2UoKTsK
IAogcHJpdmF0ZTogICAgCi0gICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOwotICAg
IHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMoKTsKLSAgICBzdGF0aWMgSlNTdGF0
aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1
ZSogc3RhdGljVmFsdWVzKCk7CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0
YXRpY0Z1bmN0aW9ucygpOwogfTsKLQotI2VuZGlmIC8vIFRleHRJbnB1dENvbnRyb2xsZXJfaApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAg
Yi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmNwcAppbmRleCBmZmYw
Yjc0OTkwYWZiOWUxMmFjOWQwMWE3MTBhNGM1MjgwZTFlOTA4Li41OTMwZTRmMjdjOTBhNzY4M2Ux
Nzc0NDY3OTQwODI0OGY1NDBlODhkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L0JpbmRpbmdzL0pTQmFzaWNzLmNwcAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRp
bmdzL0pTQmFzaWNzLmNwcApAQCAtMjgsMTkgKzI4LDI0IEBACiAKIG5hbWVzcGFjZSBXVFIgewog
Ci1KU1ZhbHVlUmVmIEpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChKU0NvbnRleHRSZWYgY29udGV4
dCwgT3B0aW9uYWw8Ym9vbD4gdmFsdWUpCitPcHRpb25hbDxib29sPiB0b09wdGlvbmFsQm9vbChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdmFs
dWUgPyBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgdmFsdWUudmFsdWUoKSkgOiBKU1ZhbHVl
TWFrZU51bGwoY29udGV4dCk7CisgICAgcmV0dXJuIEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0
LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgPyBXVEY6Om51bGxvcHQg
OiBtYWtlT3B0aW9uYWwoSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpOworfQorCitP
cHRpb25hbDxkb3VibGU+IHRvT3B0aW9uYWxEb3VibGUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
VmFsdWVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0
LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgPyBXVEY6Om51bGxvcHQg
OiBtYWtlT3B0aW9uYWwoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCBudWxscHRyKSk7
CiB9CiAKLU9wdGlvbmFsPGJvb2w+IEpTVmFsdWVUb051bGxhYmxlQm9vbGVhbihKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK0pTVmFsdWVSZWYgbWFrZVZhbHVlKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBPcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gSlNW
YWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHZhbHVlKSB8fCBKU1ZhbHVlSXNOdWxsKGNvbnRleHQs
IHZhbHVlKSA/IFdURjo6bnVsbG9wdCA6IE9wdGlvbmFsPGJvb2w+KEpTVmFsdWVUb0Jvb2xlYW4o
Y29udGV4dCwgdmFsdWUpKTsKKyAgICByZXR1cm4gdmFsdWUgPyBKU1ZhbHVlTWFrZUJvb2xlYW4o
Y29udGV4dCwgdmFsdWUudmFsdWUoKSkgOiBKU1ZhbHVlTWFrZU51bGwoY29udGV4dCk7CiB9CiAK
LUpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTU3RyaW5nUmVmIHN0cmluZ09yTnVsbCkKK0pTVmFsdWVSZWYgbWFrZVZhbHVlKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIHN0cmluZ09y
TnVsbCA/IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIHN0cmluZ09yTnVsbCkgOiBKU1ZhbHVl
TWFrZU51bGwoY29udGV4dCk7CisgICAgcmV0dXJuIHN0cmluZyA/IEpTVmFsdWVNYWtlU3RyaW5n
KGNvbnRleHQsIHN0cmluZykgOiBKU1ZhbHVlTWFrZU51bGwoY29udGV4dCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpCkBA
IC00OCwxOSArNTMsNDMgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUpTU3RyaW5n
KGNvbnN0IGNoYXIqIHN0cmluZykKICAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoc3RyaW5nKSk7CiB9CiAKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVh
dGVKU1N0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAg
ICBhdXRvIHN0cmluZyA9IGFkb3B0KHZhbHVlID8gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCB2YWx1ZSwgbnVsbHB0cikgOiBudWxscHRyKTsKKyAgICByZXR1cm4gc3RyaW5nID8gc3RyaW5n
IDogY3JlYXRlSlNTdHJpbmcoIiIpOworfQorCiBKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRl
eHRSZWYgY29udGV4dCwgY29uc3QgY2hhciogc3RyaW5nKQogewogICAgIHJldHVybiBKU1ZhbHVl
TWFrZVN0cmluZyhjb250ZXh0LCBjcmVhdGVKU1N0cmluZyhzdHJpbmcpLmdldCgpKTsKIH0KIAor
SlNWYWx1ZVJlZiBwcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2Jq
ZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVybiBvYmplY3QgPyBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIG51
bGxwdHIpIDogbnVsbHB0cjsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZ1By
b3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNo
YXIqIG5hbWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHByb3BlcnR5
KGNvbnRleHQsIG9iamVjdCwgbmFtZSkpOworfQorCitib29sIGJvb2xlYW5Qcm9wZXJ0eShKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBi
b29sIGRlZmF1bHRWYWx1ZSkKK3sKKyAgICBhdXRvIHZhbHVlID0gcHJvcGVydHkoY29udGV4dCwg
b2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4gdmFsdWUgPyBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRl
eHQsIHZhbHVlKSA6IGRlZmF1bHRWYWx1ZTsKK30KKworZG91YmxlIG51bWVyaWNQcm9wZXJ0eShK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1l
KQoreworICAgIGF1dG8gdmFsdWUgPSBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOwor
ICAgIHJldHVybiB2YWx1ZSA/IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0
cikgOiAwOworfQorCiBKU09iamVjdFJlZiBvYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIGlmICgh
b2JqZWN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgp
LCBudWxscHRyKTsKLSAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCB2YWx1ZSkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0UmVm
Pih2YWx1ZSk7CisgICAgYXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFt
ZSk7CisgICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHByb3BlcnR5
KGNvbnRleHQsIG9iamVjdCwgbmFtZSksIG51bGxwdHIpIDogbnVsbHB0cjsKIH0KIAogSlNPYmpl
Y3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9i
amVjdCwgc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIqPiBuYW1lcykKQEAgLTcwLDI3
ICs5OSwzNiBAQCBKU09iamVjdFJlZiBvYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBzdGQ6OmluaXRpYQogICAgIHJldHVybiBvYmplY3Q7CiB9
CiAKK3Vuc2lnbmVkIGFycmF5TGVuZ3RoKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBvYmplY3QpCit7CisgICAgcmV0dXJuIG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBvYmplY3Qs
ICJsZW5ndGgiKTsKK30KKwogdm9pZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQogewogICAg
IEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1l
KS5nZXQoKSwgSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlKSwga0pTUHJvcGVydHlB
dHRyaWJ1dGVOb25lLCBudWxscHRyKTsKIH0KIAordm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0
eShKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgY2hhciogbmFtZSwgSlNWYWx1ZVJlZiB2YWx1
ZSkKK3sKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2Jh
bE9iamVjdChjb250ZXh0KSwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIHZhbHVlLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
LCBudWxscHRyKTsKK30KKwordm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRS
ZWYgY29udGV4dCwgY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVlKQoreworICAgIHNldEds
b2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsIG5hbWUsIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRl
eHQsIHZhbHVlKSk7Cit9CisKIEpTVmFsdWVSZWYgY2FsbChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8SlNWYWx1ZVJlZj4gYXJndW1lbnRzKQogewotICAgIGlmICghb2JqZWN0KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvIGZ1bmN0aW9uID0gb2JqZWN0UHJvcGVydHkoY29udGV4
dCwgb2JqZWN0LCBuYW1lKTsKLSAgICBpZiAoIWZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBmdW5jdGlv
biwgb2JqZWN0LCBhcmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuYmVnaW4oKSwgbnVsbHB0cik7
CisgICAgcmV0dXJuIGZ1bmN0aW9uID8gSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBm
dW5jdGlvbiwgb2JqZWN0LCBhcmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuYmVnaW4oKSwgbnVs
bHB0cikgOiBudWxscHRyOwogfQogCiBKU09iamVjdFJlZiBjYWxsQ29uc3RydWN0b3IoSlNHbG9i
YWxDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxKU1ZhbHVlUmVmPiBhcmd1bWVudHMpCiB7CiAgICAgYXV0byBjb25zdHJ1Y3RvciA9IG9i
amVjdFByb3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwg
eyBuYW1lIH0pOwotICAgIGlmICghY29uc3RydWN0b3IpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnN0cnVj
dG9yLCBhcmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuYmVnaW4oKSwgbnVsbHB0cik7CisgICAg
cmV0dXJuIGNvbnN0cnVjdG9yID8gSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rvcihjb250ZXh0LCBj
b25zdHJ1Y3RvciwgYXJndW1lbnRzLnNpemUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIp
IDogbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmggYi9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL0JpbmRpbmdzL0pTQmFzaWNzLmgKaW5kZXggMTFkZGE1MjQ3YTVhYjZjMDQwOTYzZGYxOWFi
MGY1ZTAyOTZjZWI4Mi4uNjVmMThkN2VjZDgwMTY4MzMzMzRkZjVlYjg4OGNjYzRhMGIyMWQ1MyAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oCisr
KyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaApAQCAtMzIsMTYg
KzMyLDI4IEBACiAKIG5hbWVzcGFjZSBXVFIgewogCi1KU1ZhbHVlUmVmIEpTVmFsdWVNYWtlQm9v
bGVhbk9yTnVsbChKU0NvbnRleHRSZWYsIE9wdGlvbmFsPGJvb2w+KTsKLU9wdGlvbmFsPGJvb2w+
IEpTVmFsdWVUb051bGxhYmxlQm9vbGVhbihKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOworT3B0
aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2woSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKK09w
dGlvbmFsPGRvdWJsZT4gdG9PcHRpb25hbERvdWJsZShKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYp
OwogCi1KU1ZhbHVlUmVmIEpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKEpTQ29udGV4dFJlZiwgSlNT
dHJpbmdSZWYpOworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUpTU3RyaW5nKGNvbnN0
IGNoYXIqID0gIiIpOworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUpTU3RyaW5nKEpT
Q29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAKLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVh
dGVKU1N0cmluZyhjb25zdCBjaGFyKik7CiBKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRS
ZWYsIGNvbnN0IGNoYXIqKTsKK0pTVmFsdWVSZWYgbWFrZVZhbHVlKEpTQ29udGV4dFJlZiwgT3B0
aW9uYWw8Ym9vbD4pOworSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmLCBKU1N0cmlu
Z1JlZik7CisKK0pTVmFsdWVSZWYgcHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwg
Y29uc3QgY2hhciogbmFtZSk7Citib29sIGJvb2xlYW5Qcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpT
T2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBib29sIGRlZmF1bHRWYWx1ZSA9IGZhbHNlKTsK
K2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3Qg
Y2hhciogbmFtZSk7CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nUHJvcGVydHkoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFtZSk7Cit1bnNpZ25lZCBhcnJh
eUxlbmd0aChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmKTsKIEpTT2JqZWN0UmVmIG9iamVjdFBy
b3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOwogSlNP
YmplY3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgc3RkOjpp
bml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIqPiBuYW1lcyk7CisKIHZvaWQgc2V0UHJvcGVydHko
SlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7
Cit2b2lkIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KEpTQ29udGV4dFJlZiwgY29uc3QgY2hhciog
bmFtZSwgSlNWYWx1ZVJlZik7Cit2b2lkIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KEpTQ29udGV4
dFJlZiwgY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVlKTsKKwogSlNWYWx1ZVJlZiBjYWxs
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxKU1ZhbHVlUmVmPiBhcmd1bWVudHMpOwogSlNPYmplY3RSZWYgY2FsbENvbnN0
cnVjdG9yKEpTR2xvYmFsQ29udGV4dFJlZiwgY29uc3QgY2hhciogbmFtZSwgc3RkOjppbml0aWFs
aXplcl9saXN0PEpTVmFsdWVSZWY+IGFyZ3VtZW50cyk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGFibGUuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvQmluZGluZ3MvSlNXcmFwcGFibGUuaAppbmRleCA5ZTBmMDdkZjU5MzJhYjMwMzMxZDdi
NjFkMTczNTNhZTZlMDFjNDczLi41OWJlMWRhZWEyNzc1NGVlNDc3NWI0ZjNlN2E1ZDY4MmZiMWQ1
ZjFlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBh
YmxlLmgKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5o
CkBAIC0yNSw5ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCit0eXBl
ZGVmIHN0cnVjdCBPcGFxdWVKU0NsYXNzKiBKU0NsYXNzUmVmOworCiBuYW1lc3BhY2UgV1RSIHsK
IAogY2xhc3MgSlNXcmFwcGFibGUgOiBwdWJsaWMgUmVmQ291bnRlZDxKU1dyYXBwYWJsZT4gewpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaCBi
L1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmgKaW5kZXggZjY3OThm
OTlhNGZlYzY3NTYzZDA5MTU2M2I1MDUwOWRmYzg1NzJkYS4uOWI2YmFkOGFmMDQ0YjIwMmZmODcy
N2FjZWQ3Y2I5ZmZiMmNlYzUyZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU1dyYXBwZXIuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdz
L0pTV3JhcHBlci5oCkBAIC01MCw0ICs1MCw5IEBAIGlubGluZSB2b2lkIHNldFByb3BlcnR5KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByCiAg
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIGNyZWF0ZUpTU3RyaW5nKHBy
b3BlcnR5TmFtZSkuZ2V0KCksIEpTV3JhcHBlcjo6d3JhcChjb250ZXh0LCB2YWx1ZSksIGF0dHJp
YnV0ZXMsIGV4Y2VwdGlvbik7CiB9CiAKK2lubGluZSB2b2lkIHNldEdsb2JhbE9iamVjdFByb3Bl
cnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEpTV3Jh
cHBhYmxlKiB2YWx1ZSkKK3sKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCBw
cm9wZXJ0eU5hbWUsIEpTV3JhcHBlcjo6d3JhcChjb250ZXh0LCB2YWx1ZSkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvRXZlbnRT
ZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMubW0gYi9Ub29scy9UZXN0UnVubmVy
U2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9tYWMvRXZlbnRTZXJpYWxpemVyTWFjLm1tCmluZGV4
IDBmMTdiMmNkNjM5YTYzMDYzYTQ4OGRmM2EzM2EzNWUzMmEyZWNjYzEuLmJkZDIwN2JkNDA5ZjA0
ZWU1ZjM4MjMxOTRmYTI0ZTYzMjg4NTg5MTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvRXZlbnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMubW0KKysrIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9FdmVudFNlcmlhbGl6YXRpb24vbWFjL0V2ZW50U2VyaWFs
aXplck1hYy5tbQpAQCAtMTk1LDcgKzE5NSw3IEBAIEBpbXBsZW1lbnRhdGlvbiBFdmVudFNlcmlh
bGl6ZXIKIAogKyAoTlNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeUZvckV2ZW50OihDR0V2ZW50UmVm
KXJhd0V2ZW50IHJlbGF0aXZlVG9UaW1lOihDR0V2ZW50VGltZXN0YW1wKXJlZmVyZW5jZVRpbWVz
dGFtcAogewotICAgIFJldGFpblB0cjxDR0V2ZW50UmVmPiBwbGFpbkV2ZW50ID0gYWRvcHRDRihD
R0V2ZW50Q3JlYXRlKE5VTEwpKTsKKyAgICBhdXRvIHBsYWluRXZlbnQgPSBhZG9wdENGKENHRXZl
bnRDcmVhdGUoTlVMTCkpOwogICAgIENHRXZlbnRSZWYgcmF3UGxhaW5FdmVudCA9IHBsYWluRXZl
bnQuZ2V0KCk7CiAKICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0ID0gW1tbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwpAQCAtMjI2LDcgKzIyNiw3IEBA
ICsgKE5TRGljdGlvbmFyeSAqKWRpY3Rpb25hcnlGb3JFdmVudDooQ0dFdmVudFJlZilyYXdFdmVu
dCByZWxhdGl2ZVRvVGltZTooQ0dFdmVuCiAKICsgKFJldGFpblB0cjxDR0V2ZW50UmVmPiljcmVh
dGVFdmVudEZvckRpY3Rpb25hcnk6KE5TRGljdGlvbmFyeSAqKWRpY3QgaW5XaW5kb3c6KE5TV2lu
ZG93ICopd2luZG93IHJlbGF0aXZlVG9UaW1lOihDR0V2ZW50VGltZXN0YW1wKXJlZmVyZW5jZVRp
bWVzdGFtcAogewotICAgIFJldGFpblB0cjxDR0V2ZW50UmVmPiBldmVudCA9IGFkb3B0Q0YoQ0dF
dmVudENyZWF0ZShOVUxMKSk7CisgICAgYXV0byBldmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0
ZShOVUxMKSk7CiAgICAgQ0dFdmVudFJlZiByYXdFdmVudCA9IGV2ZW50LmdldCgpOwogCiAgICAg
Rk9SX0VBQ0hfQ0dFVkVOVF9JTlRFR0VSX0ZJRUxEKFNUT1JFX0lOVEVHRVJfRklFTERfVE9fRVZF
TlQpOwpAQCAtMjY0LDcgKzI2NCw3IEBAIGNvbnN0IGZsb2F0IGV2ZW50RGlzcGF0Y2hUaW1lclJh
dGUgPSAxLiAvIDEyMC47CiAKICsgKHZvaWQpcGxheVN0cmVhbTooTlNBcnJheTxOU0RpY3Rpb25h
cnkgKj4gKilldmVudERpY3RzIHdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQoXikoKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIFJldGFpblB0cjxFdmVu
dFN0cmVhbVBsYXllcj4gcGxheWVyID0gYWRvcHROUyhbW0V2ZW50U3RyZWFtUGxheWVyIGFsbG9j
XSBpbml0XSk7CisgICAgYXV0byBwbGF5ZXIgPSBhZG9wdE5TKFtbRXZlbnRTdHJlYW1QbGF5ZXIg
YWxsb2NdIGluaXRdKTsKIAogICAgIHBsYXllci0+X3JlbWFpbmluZ0V2ZW50RGljdGlvbmFyaWVz
ID0gYWRvcHROUyhbZXZlbnREaWN0cyBtdXRhYmxlQ29weV0pOwogICAgIHBsYXllci0+X3dpbmRv
dyA9IHdpbmRvdzsKQEAgLTI4Miw3ICsyODIsNyBAQCAtICh2b2lkKXBsYXliYWNrVGltZXJGaXJl
ZDooTlNUaW1lciAqKXRpbWVyCiAgICAgYXV0byByZW1vdmVMaXN0ID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgTlNFdmVudCAqbnNFdmVudCA9IG5pbDsKICAg
ICBmb3IgKGlkIGV2ZW50RGljdCBpbiBfcmVtYWluaW5nRXZlbnREaWN0aW9uYXJpZXMuZ2V0KCkp
IHsKLSAgICAgICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IGV2ZW50ID0gW0V2ZW50U2VyaWFsaXpl
ciBjcmVhdGVFdmVudEZvckRpY3Rpb25hcnk6ZXZlbnREaWN0IGluV2luZG93Ol93aW5kb3cuZ2V0
KCkgcmVsYXRpdmVUb1RpbWU6X3N0YXJ0VGltZV07CisgICAgICAgIGF1dG8gZXZlbnQgPSBbRXZl
bnRTZXJpYWxpemVyIGNyZWF0ZUV2ZW50Rm9yRGljdGlvbmFyeTpldmVudERpY3QgaW5XaW5kb3c6
X3dpbmRvdy5nZXQoKSByZWxhdGl2ZVRvVGltZTpfc3RhcnRUaW1lXTsKICAgICAgICAgaWYgKENH
RXZlbnRHZXRUaW1lc3RhbXAoZXZlbnQuZ2V0KCkpIDwgbWFjaF9hYnNvbHV0ZV90aW1lKCkpIHsK
ICAgICAgICAgICAgIG5zRXZlbnQgPSBbTlNFdmVudCBldmVudFdpdGhDR0V2ZW50OmV2ZW50Lmdl
dCgpXTsKICAgICAgICAgICAgIFtOU0FwcCBwb3N0RXZlbnQ6bnNFdmVudCBhdFN0YXJ0Ok5PXTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2Ny
aXB0Q29udGV4dC5jcHAgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRleHQuY3BwCmluZGV4IDI3MDViMzlhMjQ3ZGQyNTdkNWM2ZDU4YzQ3MGU5NjMz
YTkxOWRmZDQuLjVkY2ZiN2M5ODcyZjM5OWYxNTY3NGQ5NzEwZGViMjg5YjJkMTIxOGQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dGV4dC5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlT
Y3JpcHRDb250ZXh0LmNwcApAQCAtMjYsOSArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlVJU2NyaXB0Q29udGV4dC5oIgogCisjaW5jbHVkZSAiSlNCYXNpY3MuaCIKICNp
bmNsdWRlICJVSVNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NvbnRleHRSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdUUjsKQEAg
LTQzLDExICs0Miw3IEBAIFVJU2NyaXB0Q29udGV4dDo6VUlTY3JpcHRDb250ZXh0KFVJU2NyaXB0
Q29udGV4dERlbGVnYXRlJiBkZWxlZ2F0ZSwgVUlTY3JpcHRDb250CiAgICAgLCBtX2RlbGVnYXRl
KGRlbGVnYXRlKQogewogICAgIG1fY29udHJvbGxlciA9IGZhY3RvcnkoKnRoaXMpOwotCi0gICAg
SlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KG1fY29u
dGV4dC5nZXQoKSk7Ci0KLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAg
bV9jb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KG1fY29udGV4dC5nZXQoKSwgZ2xvYmFsT2Jq
ZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBtX2NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QobV9j
b250ZXh0LmdldCgpKTsKIH0KIAogVUlTY3JpcHRDb250ZXh0Ojp+VUlTY3JpcHRDb250ZXh0KCkK
QEAgLTY2LDkgKzYxLDcgQEAgdm9pZCBVSVNjcmlwdENvbnRleHQ6OnJ1blVJU2NyaXB0KGNvbnN0
IFN0cmluZyYgc2NyaXB0LCB1bnNpZ25lZCBzY3JpcHRDYWxsYmFja0kKICAgICBKU1ZhbHVlUmVm
IHJlc3VsdCA9IEpTRXZhbHVhdGVTY3JpcHQobV9jb250ZXh0LmdldCgpLCBzdHJpbmdSZWYuZ2V0
KCksIDAsIDAsIDEsICZleGNlcHRpb24pOwogICAgIAogICAgIGlmICghaGFzT3V0c3RhbmRpbmdB
c3luY1Rhc2tzKCkpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBzdHJpbmdpZnlFeGNlcHRpb24gPSBu
dWxscHRyOwotICAgICAgICBhdXRvIHN0cmluZ2lmaWVkID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5n
Q29weShtX2NvbnRleHQuZ2V0KCksIHJlc3VsdCwgJnN0cmluZ2lmeUV4Y2VwdGlvbikpOwotICAg
ICAgICByZXF1ZXN0VUlTY3JpcHRDb21wbGV0aW9uKHN0cmluZ2lmaWVkLmdldCgpKTsKKyAgICAg
ICAgcmVxdWVzdFVJU2NyaXB0Q29tcGxldGlvbihjcmVhdGVKU1N0cmluZyhtX2NvbnRleHQuZ2V0
KCksIHJlc3VsdCkuZ2V0KCkpOwogICAgICAgICB0cnlUb0NvbXBsZXRlVUlTY3JpcHRGb3JDdXJy
ZW50UGFyZW50Q2FsbGJhY2soKTsKICAgICB9CiB9CkBAIC0xODksMTAgKzE4MiwxMCBAQCBKU09i
amVjdFJlZiBVSVNjcmlwdENvbnRleHQ6Om9iamVjdEZyb21SZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgcmVjdCkgY29ucwogewogICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTT2JqZWN0
TWFrZShtX2NvbnRleHQuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwogCi0gICAgSlNPYmplY3RT
ZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImxlZnQiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKG1fY29udGV4
dC5nZXQoKSwgcmVjdC54KCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOwot
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsIGFkb3B0KEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0b3AiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVt
YmVyKG1fY29udGV4dC5nZXQoKSwgcmVjdC55KCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUs
IG51bGxwdHIpOwotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmpl
Y3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ3aWR0aCIpKS5nZXQoKSwg
SlNWYWx1ZU1ha2VOdW1iZXIobV9jb250ZXh0LmdldCgpLCByZWN0LndpZHRoKCkpLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOwotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9j
b250ZXh0LmdldCgpLCBvYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJoZWlnaHQiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKG1fY29udGV4dC5nZXQoKSwgcmVj
dC5oZWlnaHQoKSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7CisgICAgc2V0
UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsICJsZWZ0IiwgcmVjdC54KCkpOworICAg
IHNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCAidG9wIiwgcmVjdC55KCkpOwor
ICAgIHNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCAid2lkdGgiLCByZWN0Lndp
ZHRoKCkpOworICAgIHNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCAiaGVpZ2h0
IiwgcmVjdC5oZWlnaHQoKSk7CiAgICAgCiAgICAgcmV0dXJuIG9iamVjdDsKIH0KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJv
bGxlci5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRD
b250cm9sbGVyLmgKaW5kZXggYTVhOGQ3Y2MyZmNjOWZlZDZmZjU1MjJjYzllZDY3Y2U0Mjk4Y2E4
MS4uMzUyNGI2MGJkODFjZDljYWIzMTBhYTFiNTY4ZjIzZmQ1MTY4ZGNlZiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVy
LmgKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRD
b250cm9sbGVyLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHZvaWQgY29udGV4dERl
c3Ryb3llZCgpOwogICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9yT3V0c3RhbmRpbmdDYWxsYmFja3Mo
KSB7IC8qIG5vdEltcGxlbWVudGVkKCk7ICovIH0KIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVj
dChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAg
IC8vIFRyYW5zYWN0aW9uIGhlbHBlcnMKICAgICAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHAgYi9U
b29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJT
aGFyZWQuY3BwCmluZGV4IGM2ZWIxNDBhYTM1NmM2NmQ4YzQ1MDIxNGU3ZGIyYzg1YWQzYTcxYTMu
LmJmZjRmMzQzM2RiZDI5NTc1ZDYyNWI3Mzk0ZTZkOWQzODFjYWVjMjYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNo
YXJlZC5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlT
Y3JpcHRDb250cm9sbGVyU2hhcmVkLmNwcApAQCAtNDEsMjAgKzQxLDE1IEBAIERldmljZU9yaWVu
dGF0aW9uKiB0b0RldmljZU9yaWVudGF0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIHZhbHVlKQogICAgICAgICBEZXZpY2VPcmllbnRhdGlvbjo6TGFuZHNjYXBlTGVmdCwKICAg
ICAgICAgRGV2aWNlT3JpZW50YXRpb246OkxhbmRzY2FwZVJpZ2h0CiAgICAgfTsKLQotICAgIGF1
dG8gb3B0aW9uID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgbnVs
bHB0cikpOwotICAgIGlmIChvcHRpb24tPnN0cmluZygpID09ICJwb3J0cmFpdCIpCisgICAgYXV0
byBvcHRpb24gPSBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSk7CisgICAgaWYgKEpTU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uLmdldCgpLCAicG9ydHJhaXQiKSkKICAgICAg
ICAgcmV0dXJuICZ2YWx1ZXNbMF07Ci0KLSAgICBpZiAob3B0aW9uLT5zdHJpbmcoKSA9PSAicG9y
dHJhaXQtdXBzaWRlZG93biIpCisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
b3B0aW9uLmdldCgpLCAicG9ydHJhaXQtdXBzaWRlZG93biIpKQogICAgICAgICByZXR1cm4gJnZh
bHVlc1sxXTsKLQotICAgIGlmIChvcHRpb24tPnN0cmluZygpID09ICJsYW5kc2NhcGUtbGVmdCIp
CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uLmdldCgpLCAibGFu
ZHNjYXBlLWxlZnQiKSkKICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbMl07Ci0KLSAgICBpZiAob3B0
aW9uLT5zdHJpbmcoKSA9PSAibGFuZHNjYXBlLXJpZ2h0IikKKyAgICBpZiAoSlNTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhvcHRpb24uZ2V0KCksICJsYW5kc2NhcGUtcmlnaHQiKSkKICAgICAg
ICAgcmV0dXJuICZ2YWx1ZXNbM107Ci0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNjgs
OSArNjMsOSBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6Y29udGV4dERlc3Ryb3llZCgpCiAg
ICAgbV9jb250ZXh0ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6Om1h
a2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09i
amVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6Om1h
a2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgc2V0UHJvcGVydHko
Y29udGV4dCwgd2luZG93T2JqZWN0LCAidWlDb250cm9sbGVyIiwgdGhpcywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0
aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidWlDb250cm9sbGVy
IiwgdGhpcyk7CiB9CiAKIEpTQ2xhc3NSZWYgVUlTY3JpcHRDb250cm9sbGVyOjp3cmFwcGVyQ2xh
c3MoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9jb2NvYS9MYXlvdXRUZXN0
U3BlbGxDaGVja2VyLm1tIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9jb2NvYS9MYXlvdXRUZXN0
U3BlbGxDaGVja2VyLm1tCmluZGV4IDhmYzAyMTE2N2FhYzIyMTUzNmExNzY2ZTUzOTAxOWZlNjQ0
MDU4ZTEuLmQ4NmVmOTU2ZjgwZGZhMTkyMjk1NGUxMTc5YWYyYjM1MmI5ODM5MjQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5t
bQorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNr
ZXIubW0KQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTGF5
b3V0VGVzdFNwZWxsQ2hlY2tlci5oIgogCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFp
blB0ci5oPgorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgog
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgpAQCAt
MjEyLDExICsyMTIsMTEgQEAgLSAodm9pZClzZXRSZXN1bHRzOihUZXh0Q2hlY2tpbmdSZXN1bHRz
RGljdGlvbmFyeSAqKXJlc3VsdHMKIC0gKHZvaWQpc2V0UmVzdWx0c0Zyb21KU1ZhbHVlOihKU1Zh
bHVlUmVmKXJlc3VsdHNWYWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dFJlZiljb250ZXh0CiB7CiAg
ICAgYXV0byByZXN1bHRzT2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHJlc3VsdHNW
YWx1ZSwgbnVsbHB0cik7Ci0gICAgYXV0byBmcm9tUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZyb20iKSk7Ci0gICAgYXV0byB0b1Byb3BlcnR5TmFt
ZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0byIpKTsKLSAgICBhdXRv
IHR5cGVQcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
dHlwZSIpKTsKLSAgICBhdXRvIHJlcGxhY2VtZW50UHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInJlcGxhY2VtZW50IikpOwotICAgIGF1dG8gZGV0YWls
c1Byb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJkZXRh
aWxzIikpOworICAgIGF1dG8gZnJvbVByb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmco
ImZyb20iKTsKKyAgICBhdXRvIHRvUHJvcGVydHlOYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZygi
dG8iKTsKKyAgICBhdXRvIHR5cGVQcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJ0
eXBlIik7CisgICAgYXV0byByZXBsYWNlbWVudFByb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNT
dHJpbmcoInJlcGxhY2VtZW50Iik7CisgICAgYXV0byBkZXRhaWxzUHJvcGVydHlOYW1lID0gV1RS
OjpjcmVhdGVKU1N0cmluZygiZGV0YWlscyIpOwogICAgIGF1dG8gcmVzdWx0cyA9IGFkb3B0TlMo
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CiAKICAgICAvLyBGSVhNRTogVXNp
bmcgdGhlIE9iamVjdGl2ZS1DIEFQSSB3b3VsZCBtYWtlIHRoaXMgbG9naWMgZWFzaWVyIHRvIGZv
bGxvdy4KQEAgLTIyOCwxNSArMjI4LDEzIEBAIC0gKHZvaWQpc2V0UmVzdWx0c0Zyb21KU1ZhbHVl
OihKU1ZhbHVlUmVmKXJlc3VsdHNWYWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dFJlZiljCiAgICAg
ICAgIGF1dG8gcmVzdWx0c0ZvcldvcmQgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdKTsKICAgICAgICAgZm9yIChzaXplX3QgcmVzdWx0SW5kZXggPSAwOyByZXN1bHRJbmRl
eCA8IEpTUHJvcGVydHlOYW1lQXJyYXlHZXRDb3VudChyZXN1bHRzQXJyYXlQcm9wZXJ0eU5hbWVz
KTsgKytyZXN1bHRJbmRleCkgewogICAgICAgICAgICAgYXV0byByZXN1bHRzT2JqZWN0ID0gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQs
IHJlc3VsdHNBcnJheSwgcmVzdWx0SW5kZXgsIG51bGxwdHIpLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIGxvbmcgZnJvbVZhbHVlID0gbHJvdW5kbChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCBmcm9tUHJvcGVydHlOYW1l
LmdldCgpLCBudWxscHRyKSwgbnVsbHB0cikpOwotICAgICAgICAgICAgbG9uZyB0b1ZhbHVlID0g
bHJvdW5kbChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250
ZXh0LCByZXN1bHRzT2JqZWN0LCB0b1Byb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxw
dHIpKTsKLSAgICAgICAgICAgIGF1dG8gdHlwZVZhbHVlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3Qs
IHR5cGVQcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKSk7CisgICAgICAgICAg
ICBsb25nIGZyb21WYWx1ZSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBKU09iamVjdEdldFBy
b3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIGZyb21Qcm9wZXJ0eU5hbWUuZ2V0KCksIG51
bGxwdHIpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGxvbmcgdG9WYWx1ZSA9IEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3Qs
IHRvUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwgbnVsbHB0cik7CisgICAgICAgICAgICBh
dXRvIHR5cGVWYWx1ZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0eXBlUHJvcGVydHlOYW1lLmdldCgpLCBu
dWxscHRyKSk7CiAgICAgICAgICAgICBhdXRvIHJlcGxhY2VtZW50VmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIHJlcGxhY2VtZW50UHJvcGVydHlOYW1l
LmdldCgpLCBudWxscHRyKTsKICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcmVw
bGFjZW1lbnRUZXh0OwotICAgICAgICAgICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4
dCwgcmVwbGFjZW1lbnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlcGxhY2VtZW50
SlNTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHJlcGxhY2VtZW50
VmFsdWUsIG51bGxwdHIpKTsKLSAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRleHQgPSBhZG9w
dENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlcGxhY2VtZW50
SlNTdHJpbmcuZ2V0KCkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghSlNWYWx1
ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHJlcGxhY2VtZW50VmFsdWUpKQorICAgICAgICAgICAgICAg
IHJlcGxhY2VtZW50VGV4dCA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCByZXBsYWNlbWVudFZhbHVl
KS5nZXQoKSkpOwogICAgICAgICAgICAgYXV0byBkZXRhaWxzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgICAgICAgICBhdXRvIGRldGFpbHNWYWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgZGV0YWlsc1Byb3BlcnR5
TmFtZS5nZXQoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5l
ZChjb250ZXh0LCBkZXRhaWxzVmFsdWUpKSB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0RpY3Rpb25hcnlGdW5jdGlvbnMuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRGlj
dGlvbmFyeUZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1NTE4YWIzODEzOGQ2YjdiZmFhMDM1OWY3
ODJjZWNkODczNmY5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0RpY3Rpb25hcnlGdW5jdGlvbnMuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCisKK25hbWVzcGFjZSBX
VFIgeworCitXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeVZhbHVlKFdLVHlwZVJlZik7CisKK2Jv
b2wgYm9vbGVhblZhbHVlKFdLVHlwZVJlZik7Citib29sIGJvb2xlYW5WYWx1ZShjb25zdCBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+Jik7CisKK2RvdWJsZSBkb3VibGVWYWx1ZShXS1R5cGVSZWYpOwor
T3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdLVHlwZVJlZik7CisKK1dLU3Ry
aW5nUmVmIHN0cmluZ1ZhbHVlKFdLVHlwZVJlZik7CitXVEY6OlN0cmluZyB0b1dURlN0cmluZyhX
S1R5cGVSZWYpOworCit1aW50NjRfdCB1aW50NjRWYWx1ZShXS1R5cGVSZWYpOwordWludDY0X3Qg
dWludDY0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYpOworCitXS1R5cGVSZWYg
dmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25zdCBjaGFyKiBrZXkpOworCitib29sIGJvb2xlYW5W
YWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7Citkb3VibGUgZG91YmxlVmFs
dWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25zdCBjaGFyKiBrZXkpOworV0tTdHJpbmdSZWYgc3RyaW5n
VmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25zdCBjaGFyKiBrZXkpOwordWludDY0X3QgdWludDY0
VmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25zdCBjaGFyKiBrZXkpOworCitPcHRpb25hbDxkb3Vi
bGU+IG9wdGlvbmFsRG91YmxlVmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25zdCBjaGFyKiBrZXkp
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBjb25zdCBPcHRpb25h
bDxUPiYgdmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgV0tUeXBlUmVmIHZhbHVlKTsKK3ZvaWQg
c2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25z
dCBjaGFyKiBrZXksIGJvb2wgdmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hhciog
dmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgdWludDY0X3QgdmFsdWUpOwordm9pZCBzZXRWYWx1
ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIq
IGtleSwgZG91YmxlIHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IFdURjo6U3RyaW5n
JiB2YWx1ZSk7CisKK2lubGluZSBib29sIGJvb2xlYW5WYWx1ZShXS1R5cGVSZWYgdmFsdWUpCit7
CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSAmJiBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHZh
bHVlKSk7Cit9CisKK2lubGluZSBib29sIGJvb2xlYW5WYWx1ZShjb25zdCBXS1JldGFpblB0cjxX
S1R5cGVSZWY+JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gYm9vbGVhblZhbHVlKHZhbHVlLmdldCgp
KTsKK30KKworaW5saW5lIFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5VmFsdWUoV0tUeXBlUmVm
IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkgPyBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KHZhbHVl
KSA6IG51bGxwdHI7Cit9CisKK2lubGluZSBkb3VibGUgZG91YmxlVmFsdWUoV0tUeXBlUmVmIHZh
bHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tEb3Vi
bGVHZXRUeXBlSUQoKSA/IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+
KHZhbHVlKSkgOiAwOworfQorCitpbmxpbmUgT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJs
ZVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBl
SUQodmFsdWUpID09IFdLRG91YmxlR2V0VHlwZUlEKCkgPyBtYWtlT3B0aW9uYWwoV0tEb3VibGVH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4odmFsdWUpKSkgOiBXVEY6Om51bGxvcHQ7
Cit9CisKK2lubGluZSBXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShXS1R5cGVSZWYgdmFsdWUpCit7
CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS1N0cmluZ0dldFR5
cGVJRCgpID8gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KHZhbHVlKSA6IG51bGxwdHI7Cit9CisK
K2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhXS1R5cGVSZWYgdmFsdWUpCit7CisgICAg
cmV0dXJuIHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKHZhbHVlKSk7Cit9CisKK2lubGluZSB1aW50
NjRfdCB1aW50NjRWYWx1ZShXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYm
IFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpID8gV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4odmFsdWUpKSA6IDA7Cit9CisKK2lubGluZSB1
aW50NjRfdCB1aW50NjRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS1R5cGVSZWY+JiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdWludDY0VmFsdWUodmFsdWUuZ2V0KCkpOworfQorCitpbmxpbmUgV0tU
eXBlUmVmIHZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkp
Cit7CisgICAgcmV0dXJuIFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoZGljdGlvbmFyeSwgdG9X
SyhrZXkpLmdldCgpKTsKK30KKworaW5saW5lIGJvb2wgYm9vbGVhblZhbHVlKFdLRGljdGlvbmFy
eVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIGJvb2xlYW5W
YWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5lIGRvdWJsZSBkb3VibGVW
YWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAg
IHJldHVybiBkb3VibGVWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5l
IFdLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25z
dCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKHZhbHVlKGRpY3Rpb25hcnks
IGtleSkpOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUoV0tEaWN0aW9uYXJ5UmVm
IGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gdWludDY0VmFsdWUo
dmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBPcHRpb25hbDxkb3VibGU+IG9w
dGlvbmFsRG91YmxlVmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIq
IGtleSkKK3sKKyAgICByZXR1cm4gb3B0aW9uYWxEb3VibGVWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5
LCBrZXkpKTsKK30KKworaW5saW5lIHZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSwgV0tUeXBl
UmVmIHZhbHVlKQoreworICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwg
dG9XSyhrZXkpLmdldCgpLCB2YWx1ZSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBj
aGFyKiBrZXksIGJvb2wgdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwga2V5LCBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKworaW5saW5lIHZvaWQg
c2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rp
b25hcnksIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hhciogdmFsdWUpCit7CisgICAgc2V0VmFs
dWUoZGljdGlvbmFyeSwga2V5LCB0b1dLKHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lk
IHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0
aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IFdURjo6U3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXksIHRvV0sodmFsdWUpLmdldCgpKTsKK30KKworaW5s
aW5lIHZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4mIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSwgdWludDY0X3QgdmFsdWUpCit7CisgICAg
c2V0VmFsdWUoZGljdGlvbmFyeSwga2V5LCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHZhbHVlKSku
Z2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011
dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBkb3VibGUg
dmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwga2V5LCBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNl
dFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9u
YXJ5LCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IE9wdGlvbmFsPFQ+JiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUpCisgICAgICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgKnZhbHVlKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0V2ZW50U2VuZGVyUHJveHkuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQ
cm94eS5oCmluZGV4IDY0NDc2MDM5NjhkMjA2NDIwYmViOTQyNzczYjI0Yjc4OTY0MWI1YzkuLmZh
M2E4OGQzYWYzOTM0ZDRjODgyMGJmNTBmZTlmODk3YjM4ZmQwNGEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oCkBAIC0xMTIsMTggKzExMiwxOSBAQCBwcml2YXRl
OgogICAgIFBPSU5UIHBvc2l0aW9uSW5Qb2ludCgpIGNvbnN0IHsgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8TE9ORz4obV9wb3NpdGlvbi54KSwgc3RhdGljX2Nhc3Q8TE9ORz4obV9wb3NpdGlvbi55KSB9
OyB9CiAjZW5kaWYKIAotICAgIGRvdWJsZSBtX3RpbWU7Ci0gICAgV0tQb2ludCBtX3Bvc2l0aW9u
OwotICAgIGJvb2wgbV9sZWZ0TW91c2VCdXR0b25Eb3duOwotICAgIGludCBtX2NsaWNrQ291bnQ7
Ci0gICAgZG91YmxlIG1fY2xpY2tUaW1lOwotICAgIFdLUG9pbnQgbV9jbGlja1Bvc2l0aW9uOwot
ICAgIFdLRXZlbnRNb3VzZUJ1dHRvbiBtX2NsaWNrQnV0dG9uOworICAgIGRvdWJsZSBtX3RpbWUg
eyAwIH07CisgICAgV0tQb2ludCBtX3Bvc2l0aW9uIHsgfTsKKyAgICBib29sIG1fbGVmdE1vdXNl
QnV0dG9uRG93biB7IGZhbHNlIH07CisgICAgaW50IG1fY2xpY2tDb3VudCB7IDAgfTsKKyAgICBk
b3VibGUgbV9jbGlja1RpbWUgeyAwIH07CisgICAgV0tQb2ludCBtX2NsaWNrUG9zaXRpb24geyB9
OworICAgIFdLRXZlbnRNb3VzZUJ1dHRvbiBtX2NsaWNrQnV0dG9uIHsga1dLRXZlbnRNb3VzZUJ1
dHRvbk5vQnV0dG9uIH07CiAgICAgdW5zaWduZWQgbV9tb3VzZUJ1dHRvbnNDdXJyZW50bHlEb3du
IHsgMCB9OwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGludCBldmVudE51bWJlcjsKLSNlbGlm
IFBMQVRGT1JNKFdQRSkKLSAgICB1aW50MzJfdCBtX2J1dHRvblN0YXRlOworICAgIGludCBldmVu
dE51bWJlciB7IDAgfTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFdQRSkKKyAgICB1aW50MzJfdCBt
X2J1dHRvblN0YXRlIHsgMCB9OwogICAgIFZlY3RvcjxzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2
ZW50X3Jhdz4gbV90b3VjaEV2ZW50czsKICAgICBIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFz
aDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+
PiBtX3VwZGF0ZWRUb3VjaEV2ZW50czsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmNwcAppbmRleCA2ZjkzY2EyNzMwMzBmNTc3
NmUzMThmOWU0NTY5MDIyY2VlMTRiOTBkLi5jNDI1MWIzMDFmYjU1NGM3ZWFlNjAzMTYyNzU5NmY1
MGI3OGEyNTlkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9u
UHJvdmlkZXJNb2NrLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9u
UHJvdmlkZXJNb2NrLmNwcApAQCAtNjMsOSArNjMsOSBAQCBHZW9sb2NhdGlvblByb3ZpZGVyTW9j
azo6fkdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrKCkKICAgICBXS0dlb2xvY2F0aW9uTWFuYWdlclNl
dFByb3ZpZGVyKG1fZ2VvbG9jYXRpb25NYW5hZ2VyLCAwKTsKIH0KIAotdm9pZCBHZW9sb2NhdGlv
blByb3ZpZGVyTW9jazo6c2V0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0
dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJh
Y3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1Nw
ZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JM
ZXZlbCkKK3ZvaWQgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9uKGRvdWJsZSBs
YXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3Vi
bGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFs
PGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91Ymxl
PiBmbG9vckxldmVsKQogewotICAgIG1fcG9zaXRpb24uYWRvcHQoV0tHZW9sb2NhdGlvblBvc2l0
aW9uQ3JlYXRlX2MoV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygp
LCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1
ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNI
ZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJvdmlkZXNGbG9vckxldmVs
LCBmbG9vckxldmVsKSk7CisgICAgbV9wb3NpdGlvbi5hZG9wdChXS0dlb2xvY2F0aW9uUG9zaXRp
b25DcmVhdGVfYyhXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCks
IGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZS5oYXNWYWx1ZSgpLCBhbHRp
dHVkZS52YWx1ZU9yKDApLCBhbHRpdHVkZUFjY3VyYWN5Lmhhc1ZhbHVlKCksIGFsdGl0dWRlQWNj
dXJhY3kudmFsdWVPcigwKSwgaGVhZGluZy5oYXNWYWx1ZSgpLCBoZWFkaW5nLnZhbHVlT3IoMCks
IHNwZWVkLmhhc1ZhbHVlKCksIHNwZWVkLnZhbHVlT3IoMCksIGZsb29yTGV2ZWwuaGFzVmFsdWUo
KSwgZmxvb3JMZXZlbC52YWx1ZU9yKDApKSk7CiAKICAgICBtX2hhc0Vycm9yID0gZmFsc2U7CiAg
ICAgbV9lcnJvck1lc3NhZ2UuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
R2VvbG9jYXRpb25Qcm92aWRlck1vY2suaAppbmRleCAxZWQ0YWRmOWIzOTM5M2EzMzNhYTMyNTEw
OTdiOWUzYWE0MmNjMzZiLi45YmY2MzM4NGFlMjdkYjI4YzVmNTQwNTY4NWI4OGY3NWJlZDdiNTE2
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9j
ay5oCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBHZW9sb2NhdGlvblByb3ZpZGVyTW9j
ayhXS0NvbnRleHRSZWYpOwogICAgIH5HZW9sb2NhdGlvblByb3ZpZGVyTW9jaygpOwogCi0gICAg
dm9pZCBzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJs
ZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wg
cHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBw
cm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJs
ZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJsZSBmbG9vckxldmVsKTsKKyAg
ICB2b2lkIHNldFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91
YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+
IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91
YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKTsKICAgICB2b2lkIHNldFBv
c2l0aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UpOwogCiAgICAg
dm9pZCBzdGFydFVwZGF0aW5nKFdLR2VvbG9jYXRpb25NYW5hZ2VyUmVmKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5jcHAKaW5kZXggNmEwOGFhYTZiNjM5ZjNmNTVjOGM0NmE5NGMyZmU5
NWRiNTQ3Zjc4Mi4uYWQ0YTI1YWU1YjA3Yjc1OGUyZTBhOTFmYWYxYjUyODMwM2ViODQ4ZCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKQEAgLTc1LDkgKzc1LDkgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6dXBkYXRlSXNvbGF0ZWRUcmVlTW9kZSgpCiB9CiAjZW5k
aWYKIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0
KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRv
d09iamVjdCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgdGhpcywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0aW9u
KTsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAiYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIiLCB0aGlzKTsKIH0KIAogSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6d3JhcHBlckNsYXNzKCkKQEAgLTk2LDE3ICs5NiwxNyBAQCBib29sIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkKCkKIH0KIAogI2lmIFBMQVRG
T1JNKENPQ09BKQorCiBSZWY8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OnJvb3RFbGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2Ug
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgUGxhdGZv
cm1VSUVsZW1lbnQgcm9vdCA9IHN0YXRpY19jYXN0PFBsYXRmb3JtVUlFbGVtZW50PihXS0FjY2Vz
c2liaWxpdHlSb290T2JqZWN0KHBhZ2UpKTsKLQogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjcmVhdGUocm9vdCk7CiB9CiAKIFJlZjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1lbnQoKQogewotICAgIFdLQnVuZGxl
UGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
OworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKTsKICAgICBQbGF0Zm9ybVVJRWxlbWVudCBmb2N1c2VkRWxlbWVudCA9IHN0YXRpY19jYXN0
PFBsYXRmb3JtVUlFbGVtZW50PihXS0FjY2Vzc2liaWxpdHlGb2N1c2VkT2JqZWN0KHBhZ2UpKTsK
ICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKGZvY3VzZWRFbGVtZW50
KTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAppbmRleCA2NmMzNDM4MjJiYmJjNjk1
OTliYWY2YTQ3NjYwYTEzODdlZTI1MWIwLi5kOWMyZjEyNmY4NzFjZTJlZWYwN2IwMDM1ODBmNmRh
Y2U2YzU0MjM1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCkBAIC00NSw3ICs0NSw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEFjY2Vzc2liaWxpdHlDb250cm9sbGVyPiBjcmVh
dGUoKTsKICAgICB+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKIAotICAgIHZvaWQgbWFrZVdp
bmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVm
KTsKICAgICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CiAgICAgCiAgICAgLy8g
RW5oYW5jZWQgYWNjZXNzaWJpbGl0eS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG0gYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0
b3JUZXN0UnVubmVyLnBtCmluZGV4IGI5ZjVlZWZmYTQ2NDlmNDE3ZjgyYjE2MTcwOWY0YWJhZTA5
OTkxZjIuLjUyZTNlZmE5OTFiOWRkNmMxNzVkYmI4ZTQxMGU2ZmVjZmFjMzAxMDggMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdl
bmVyYXRvclRlc3RSdW5uZXIucG0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQpAQCAtMjYxLDggKzI2
MSw3IEBAICR7aW1wbGVtZW50YXRpb25DbGFzc05hbWV9KiB0byR7aW1wbGVtZW50YXRpb25DbGFz
c05hbWV9KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKCiAKIEpTQ2xhc3NSZWYgJHtjbGFzc05hbWV9
Ojoke2NsYXNzUmVmR2V0dGVyfSgpCiB7Ci0gICAgc3RhdGljIEpTQ2xhc3NSZWYganNDbGFzczsK
LSAgICBpZiAoIWpzQ2xhc3MpIHsKKyAgICBzdGF0aWMgY29uc3QgSlNDbGFzc1JlZiBqc0NsYXNz
ID0gW10gewogICAgICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NE
ZWZpbml0aW9uRW1wdHk7CiAgICAgICAgIGRlZmluaXRpb24uY2xhc3NOYW1lID0gIkB7WyR0eXBl
LT5uYW1lXX0iOwogICAgICAgICBkZWZpbml0aW9uLnBhcmVudENsYXNzID0gQHtbJHNlbGYtPl9w
YXJlbnRDbGFzc1JlZkdldHRlckV4cHJlc3Npb24oJGludGVyZmFjZSldfTsKQEAgLTI3NCw4ICsy
NzMsOCBAQCBFT0YKICAgICBwdXNoKEBjb250ZW50cywgIiAgICAgICAgZGVmaW5pdGlvbi5maW5h
bGl6ZSA9IGZpbmFsaXplO1xuIikgdW5sZXNzIF9wYXJlbnRJbnRlcmZhY2UoJGludGVyZmFjZSk7
CiAKICAgICBwdXNoKEBjb250ZW50cywgPDxFT0YpOwotICAgICAgICBqc0NsYXNzID0gSlNDbGFz
c0NyZWF0ZSgmZGVmaW5pdGlvbik7Ci0gICAgfQorICAgICAgICByZXR1cm4gSlNDbGFzc0NyZWF0
ZSgmZGVmaW5pdGlvbik7CisgICAgfSgpOwogICAgIHJldHVybiBqc0NsYXNzOwogfQogCkBAIC00
NzcsMTAgKzQ3NiwxMSBAQCBzdWIgX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yCiB7CiAgICAgbXkg
KCRzZWxmLCAkdHlwZSwgJGFyZ3VtZW50TmFtZSkgPSBAXzsKIAotICAgIHJldHVybiAiSlNWYWx1
ZVRvTnVsbGFibGVCb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFt
ZSBlcSAiYm9vbGVhbiIgJiYgJHR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJ0b09wdGlv
bmFsQm9vbChjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xl
YW4iICYmICR0eXBlLT5pc051bGxhYmxlOwogICAgIHJldHVybiAiSlNWYWx1ZVRvQm9vbGVhbihj
b250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAg
IHJldHVybiAiJGFyZ3VtZW50TmFtZSIgaWYgJHR5cGUtPm5hbWUgZXEgIm9iamVjdCI7Ci0gICAg
cmV0dXJuICJhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsICRhcmd1bWVudE5hbWUs
IG51bGxwdHIpKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUp
OworICAgIHJldHVybiAiY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4g
InRvT3B0aW9uYWxEb3VibGUoY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICQkc2VsZntjb2Rl
R2VuZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSAmJiAkdHlwZS0+aXNOdWxsYWJsZTsK
ICAgICByZXR1cm4gIkpTVmFsdWVUb051bWJlcihjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxs
cHRyKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpOwog
ICAgIHJldHVybiAidG8iIC4gX2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lKCR0eXBlKSAuICIoY29u
dGV4dCwgJGFyZ3VtZW50TmFtZSkiOwogfQpAQCAtNDk5LDE4ICs0OTksMTYgQEAgc3ViIF9wbGF0
Zm9ybVR5cGVWYXJpYWJsZURlY2xhcmF0aW9uCiAgICAgICAgICJKU1ZhbHVlUmVmIiA9PiAxLAog
ICAgICk7CiAKLSAgICBteSAkbnVsbFZhbHVlID0gIjAiOworICAgIG15ICRudWxsVmFsdWUgPSAi
bnVsbHB0ciI7CiAgICAgaWYgKCRwbGF0Zm9ybVR5cGUgZXEgIkpTVmFsdWVSZWYiKSB7CiAgICAg
ICAgICRudWxsVmFsdWUgPSAiSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkiOwotICAgIH0g
ZWxzaWYgKGRlZmluZWQgJG5vblBvaW50ZXJUeXBlc3skcGxhdGZvcm1UeXBlfSAmJiAkcGxhdGZv
cm1UeXBlIG5lICJkb3VibGUiKSB7Ci0gICAgICAgICRudWxsVmFsdWUgPSAiJHBsYXRmb3JtVHlw
ZSgpIjsKKyAgICB9IGVsc2lmIChkZWZpbmVkICRub25Qb2ludGVyVHlwZXN7JHBsYXRmb3JtVHlw
ZX0pIHsKKyAgICAgICAgJG51bGxWYWx1ZSA9ICR0eXBlLT5pc051bGxhYmxlID8gIldURjo6bnVs
bG9wdCIgOiAiJHBsYXRmb3JtVHlwZSgpIjsKICAgICB9CiAKLSAgICAkcGxhdGZvcm1UeXBlIC49
ICIqIiB1bmxlc3MgZGVmaW5lZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9OwotCi0g
ICAgcmV0dXJuICIkcGxhdGZvcm1UeXBlICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uICYmICRj
b25zdHJ1Y3RvcjsiIGlmICRjb25kaXRpb24gJiYgJHBsYXRmb3JtVHlwZSBlcSAiYm9vbCI7Ci0g
ICAgcmV0dXJuICIkcGxhdGZvcm1UeXBlICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uID8gJGNv
bnN0cnVjdG9yIDogJG51bGxWYWx1ZTsiIGlmICRjb25kaXRpb247Ci0gICAgcmV0dXJuICIkcGxh
dGZvcm1UeXBlICR2YXJpYWJsZU5hbWUgPSAkY29uc3RydWN0b3I7IjsKKyAgICByZXR1cm4gImJv
b2wgJHZhcmlhYmxlTmFtZSA9ICRjb25kaXRpb24gJiYgJGNvbnN0cnVjdG9yOyIgaWYgJGNvbmRp
dGlvbiAmJiAkcGxhdGZvcm1UeXBlIGVxICJib29sIjsKKyAgICByZXR1cm4gImF1dG8gJHZhcmlh
YmxlTmFtZSA9ICRjb25kaXRpb24gPyAkY29uc3RydWN0b3IgOiAkbnVsbFZhbHVlOyIgaWYgJGNv
bmRpdGlvbjsKKyAgICByZXR1cm4gImF1dG8gJHZhcmlhYmxlTmFtZSA9ICRjb25zdHJ1Y3Rvcjsi
OwogfQogCiBzdWIgX3JldHVybkV4cHJlc3Npb24KQEAgLTUxOCwxMSArNTE2LDExIEBAIHN1YiBf
cmV0dXJuRXhwcmVzc2lvbgogICAgIG15ICgkc2VsZiwgJHJldHVyblR5cGUsICRleHByZXNzaW9u
KSA9IEBfOwogCiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSIgaWYg
JHJldHVyblR5cGUtPm5hbWUgZXEgInVuZGVmaW5lZCI7Ci0gICAgcmV0dXJuICJKU1ZhbHVlTWFr
ZUJvb2xlYW5Pck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5u
YW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlwZS0+aXNOdWxsYWJsZTsKKyAgICByZXR1cm4g
Im1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUg
ZXEgImJvb2xlYW4iICYmICRyZXR1cm5UeXBlLT5pc051bGxhYmxlOwogICAgIHJldHVybiAiSlNW
YWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+
bmFtZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuICIke2V4cHJlc3Npb259IiBpZiAkcmV0dXJu
VHlwZS0+bmFtZSBlcSAib2JqZWN0IjsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlTnVtYmVyKGNv
bnRleHQsICR7ZXhwcmVzc2lvbn0pIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJpbWl0
aXZlVHlwZSgkcmV0dXJuVHlwZSk7Ci0gICAgcmV0dXJuICJKU1ZhbHVlTWFrZVN0cmluZ09yTnVs
bChjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9
LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOworICAgIHJldHVybiAibWFrZVZhbHVlKGNvbnRl
eHQsICR7ZXhwcmVzc2lvbn0uZ2V0KCkpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3Ry
aW5nVHlwZSgkcmV0dXJuVHlwZSk7CiAgICAgcmV0dXJuICJ0b0pTKGNvbnRleHQsIFdURjo6Z2V0
UHRyKCR7ZXhwcmVzc2lvbn0pKSI7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCmluZGV4
IGZiZWYzOTZmNWY2ZjNiZmY0Zjk5YzhhNTZhNmU2MmFjMDE0MGZmYTQuLmYzN2UwMDY3NzViOGUz
MDYxYzdjZWM4ZjliNWVmNzg4NjE4MDkxMGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbApA
QCAtMjE1LDcgKzIxNSw3IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKIAogICAgIC8vIEdlb2xv
Y2F0aW9uCiAgICAgdW5kZWZpbmVkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sZWFuIHZh
bHVlKTsKLSAgICB1bmRlZmluZWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxh
dGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIG9wdGlvbmFsIG9iamVj
dCBhbHRpdHVkZSwgb3B0aW9uYWwgb2JqZWN0IGFsdGl0dWRlQWNjdXJhY3ksIG9wdGlvbmFsIG9i
amVjdCBoZWFkaW5nLCBvcHRpb25hbCBvYmplY3Qgc3BlZWQsIG9wdGlvbmFsIG9iamVjdCBmbG9v
ckxldmVsKTsKKyAgICB1bmRlZmluZWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91Ymxl
IGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIG9wdGlvbmFsIGRv
dWJsZT8gYWx0aXR1ZGUsIG9wdGlvbmFsIGRvdWJsZT8gYWx0aXR1ZGVBY2N1cmFjeSwgb3B0aW9u
YWwgZG91YmxlPyBoZWFkaW5nLCBvcHRpb25hbCBkb3VibGU/IHNwZWVkLCBvcHRpb25hbCBkb3Vi
bGU/IGZsb29yTGV2ZWwpOwogICAgIHVuZGVmaW5lZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
blVuYXZhaWxhYmxlRXJyb3IoRE9NU3RyaW5nIGVycm9yTWVzc2FnZSk7CiAgICAgYm9vbGVhbiBp
c0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5jcHAKaW5kZXggNTUzZmQwNWVmMTY5ZjM1MjNhMDQzMWYxMzE3NDJmYmMyMjE3MDQwOS4uNDQy
N2YwODkyNjAxNmFhMzQ4Mzk3MjJjNzFiYzNhMDYxMmRkMjdlOSAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGlu
Z0NvbnRyb2xsZXIuY3BwCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJFdmVudFNlbmRpbmdDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9u
YXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJ
bmplY3RlZEJ1bmRsZVBhZ2UuaCIKICNpbmNsdWRlICJKU0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5k
bGUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVGcmFtZS5oPgogI2luY2x1ZGUgPFdlYktp
dC9XS0J1bmRsZVBhZ2VQcml2YXRlLmg+CkBAIC01Miw2ICs1Miw3IEBAIHN0cnVjdCBNZW51SXRl
bVByaXZhdGVEYXRhIHsKIH07CiAKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKKwogc3RhdGlj
IEpTVmFsdWVSZWYgbWVudUl0ZW1DbGlja0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVl
UmVmW10sIEpTVmFsdWVSZWYqKQogewogICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVE
YXRhID0gc3RhdGljX2Nhc3Q8TWVudUl0ZW1Qcml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CkBAIC02Miw3ICs2Myw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG1lbnVJ
dGVtQ2xpY2tDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2Jq
CiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRNZW51SXRlbVRpdGxlQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgTWVudUl0ZW1Qcml2YXRlRGF0YSogcHJpdmF0
ZURhdGEgPSBzdGF0aWNfY2FzdDxNZW51SXRlbVByaXZhdGVEYXRhKj4oSlNPYmplY3RHZXRQcml2
YXRlKG9iamVjdCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1RpdGxlID0gYWRv
cHRXSyhXS0NvbnRleHRNZW51SXRlbUNvcHlUaXRsZShwcml2YXRlRGF0YS0+bV9pdGVtLmdldCgp
KSk7CisgICAgYXV0byB3a1RpdGxlID0gYWRvcHRXSyhXS0NvbnRleHRNZW51SXRlbUNvcHlUaXRs
ZShwcml2YXRlRGF0YS0+bV9pdGVtLmdldCgpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3Ry
aW5nKGNvbnRleHQsIHRvSlMod2tUaXRsZSkuZ2V0KCkpOwogfQogCkBAIC03MywxOCArNzQsMTcg
QEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0TWVudUl0ZW1DaGlsZHJlbkNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZgogICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZh
dGVEYXRhID0gc3RhdGljX2Nhc3Q8TWVudUl0ZW1Qcml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKTsKICAgICBhdXRvIGNoaWxkcmVuID0gYWRvcHRXSyhXS0NvbnRleHRNZW51
Q29weVN1Ym1lbnVJdGVtcyhwcml2YXRlRGF0YS0+bV9pdGVtLmdldCgpKSk7CiAKLSAgICBKU1Zh
bHVlUmVmIGFycmF5UmVzdWx0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7
CisgICAgYXV0byBhcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwog
ICAgIGlmICghV0tBcnJheUdldFNpemUoY2hpbGRyZW4uZ2V0KCkpKQotICAgICAgICByZXR1cm4g
YXJyYXlSZXN1bHQ7CisgICAgICAgIHJldHVybiBhcnJheTsKIAotICAgIEpTT2JqZWN0UmVmIGFy
cmF5T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKGNoaWxkcmVuLmdldCgpKTsg
KytpKSB7CiAgICAgICAgIGF1dG8gaXRlbSA9IHN0YXRpY19jYXN0PFdLQ29udGV4dE1lbnVJdGVt
UmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoY2hpbGRyZW4uZ2V0KCksIGkpKTsKICAgICAgICAg
YXV0byogcHJpdmF0ZURhdGEgPSBuZXcgTWVudUl0ZW1Qcml2YXRlRGF0YShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIGl0ZW0pOwotICAgICAgICBKU09iamVjdFNl
dFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iamVjdCwgaSwgSlNPYmplY3RNYWtlKGNv
bnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAwKTsKKyAgICAgICAgSlNP
YmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFrZShj
b250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCksIHByaXZhdGVEYXRhKSwgMCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgIHJldHVybiBhcnJheTsKIH0KIAogc3RhdGljIEpT
U3RhdGljRnVuY3Rpb24gc3RhdGljTWVudUl0ZW1GdW5jdGlvbnNbXSA9IHsKQEAgLTEyNiw2ICsx
MjYsNyBAQCBzdGF0aWMgSlNDbGFzc1JlZiBnZXRNZW51SXRlbUNsYXNzKCkKIAogICAgIHJldHVy
biBtZW51SXRlbUNsYXNzOwogfQorCiAjZW5kaWYKIAogc3RhdGljIFdLRXZlbnRNb2RpZmllcnMg
cGFyc2VNb2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllcikKQEAgLTE1MCwyNSArMTUxLDMxIEBA
IHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZp
ZXIpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBhcnJheUxlbmd0aChKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgYXJyYXkpCisjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKKworc3RhdGljIHVpbnQ2NF90IHBhcnNlVG91Y2hNb2RpZmllcihKU1N0cmluZ1JlZiBt
b2RpZmllcikKIHsKLSAgICBhdXRvIGxlbmd0aFN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9
IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwg
MCk7Ci0gICAgaWYgKCFsZW5ndGhWYWx1ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFs
dWUsIDApKTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwg
ImN0cmwiKSkKKyAgICAgICAgcmV0dXJuIGtXS0V2ZW50TW9kaWZpZXJzQ29udHJvbEtleTsKKyAg
ICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgInNoaWZ0IikpCisg
ICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5OworICAgIGlmIChKU1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVyLCAiYWx0IikpCisgICAgICAgIHJldHVybiBr
V0tFdmVudE1vZGlmaWVyc0FsdEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtb2RpZmllciwgIm1ldGFLZXkiKSkKKyAgICAgICAgcmV0dXJuIGtXS0V2ZW50TW9kaWZp
ZXJzTWV0YUtleTsKKyAgICByZXR1cm4gMDsKIH0KIAorI2VuZGlmCisKIHN0YXRpYyBXS0V2ZW50
TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXJBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1
ZVJlZiBhcnJheVZhbHVlKQogewogICAgIGlmICghYXJyYXlWYWx1ZSkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICAvLyBUaGUgdmFsdWUgbWF5IGVpdGhlciBiZSBhIHN0cmluZyB3aXRoIGEgc2lu
Z2xlIG1vZGlmaWVyIG9yIGFuIGFycmF5IG9mIG1vZGlmaWVycy4KLSAgICBpZiAoSlNWYWx1ZUlz
U3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpKSB7Ci0gICAgICAgIGF1dG8gc3RyaW5nID0gYWRv
cHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcnJheVZhbHVlLCAwKSk7Ci0gICAgICAg
IHJldHVybiBwYXJzZU1vZGlmaWVyKHN0cmluZy5nZXQoKSk7Ci0gICAgfQorICAgIGlmIChKU1Zh
bHVlSXNTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1ZSkpCisgICAgICAgIHJldHVybiBwYXJzZU1v
ZGlmaWVyKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpLmdldCgpKTsKIAogICAg
IGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGFycmF5VmFsdWUpKQogICAgICAgICByZXR1
cm4gMDsKQEAgLTE3NiwyOSArMTgzLDIwIEBAIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNl
TW9kaWZpZXJBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhcnJhCiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOwogICAgIFdLRXZl
bnRNb2RpZmllcnMgbW9kaWZpZXJzID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgICAg
ICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
YXJyYXksIGksICZleGNlcHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gc3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCB2YWx1ZSwgJmV4Y2VwdGlvbikpOwotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1vZGlmaWVycyB8PSBwYXJzZU1vZGlm
aWVyKHN0cmluZy5nZXQoKSk7CisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIG51bGxwdHIpKQorICAgICAgICAgICAg
bW9kaWZpZXJzIHw9IHBhcnNlTW9kaWZpZXIoY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUp
LmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIG1vZGlmaWVyczsKIH0KIAotUmVmPEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI+IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRXZlbnRTZW5kaW5nQ29udHJvbGxlcik7Ci19Ci0KLUV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKQorc3RhdGljIFdLRXZl
bnRNb2RpZmllcnMgcGFyc2VNb2RpZmllckFycmF5KEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsK
KyAgICByZXR1cm4gcGFyc2VNb2RpZmllckFycmF5KFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0
Q29udGV4dChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpKSksIGFycmF5VmFsdWUpOwogfQogCi1FdmVudFNlbmRpbmdDb250
cm9sbGVyOjp+RXZlbnRTZW5kaW5nQ29udHJvbGxlcigpCitSZWY8RXZlbnRTZW5kaW5nQ29udHJv
bGxlcj4gRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y3JlYXRlKCkKIHsKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBFdmVudFNlbmRpbmdDb250cm9sbGVyKTsKIH0KIAogSlNDbGFzc1JlZiBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQpAQCAtMjA2LDIzNyArMjA0LDExNiBA
QCBKU0NsYXNzUmVmIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCiAgICAg
cmV0dXJuIEpTRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6ZXZlbnRTZW5kaW5nQ29udHJvbGxlckNs
YXNzKCk7CiB9CiAKLWVudW0gTW91c2VTdGF0ZSB7Ci0gICAgTW91c2VVcCwKLSAgICBNb3VzZURv
d24KLX07CitlbnVtIE1vdXNlU3RhdGUgeyBNb3VzZVVwLCBNb3VzZURvd24gfTsKIAotc3RhdGlj
IFdLTXV0YWJsZURpY3Rpb25hcnlSZWYgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVN0YXRl
IHN0YXRlLCBpbnQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycykKK3N0YXRpYyBX
S1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VT
dGF0ZSBzdGF0ZSwgaW50IGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMpCiB7Ci0g
ICAgV0tNdXRhYmxlRGljdGlvbmFyeVJlZiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1
Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJN
ZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RhdGUgPT0gTW91c2VVcCA/
ICJNb3VzZVVwIiA6ICJNb3VzZURvd24iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLVUludDY0UmVmPiBidXR0b25SZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRv
bikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgYnV0
dG9uS2V5LmdldCgpLCBidXR0b25SZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJz
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHksIG1vZGlmaWVyc0tleS5nZXQoKSwgbW9k
aWZpZXJzUmVmLmdldCgpKTsKLQotICAgIHJldHVybiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5Owor
ICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsIHN0YXRlID09IE1vdXNlVXAgPyAiTW91c2VV
cCIgOiAiTW91c2VEb3duIik7CisgICAgc2V0VmFsdWUoYm9keSwgIkJ1dHRvbiIsIGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoYnV0dG9uKSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJNb2Rp
ZmllcnMiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpLmdldCgpKTsKKyAgICBy
ZXR1cm4gYm9keTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZURvd24o
aW50IGJ1dHRvbiwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5KSAKIHsKLSAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVBh
Z2VSZWYgcGFnZSA9IGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlND
b250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJh
bWUpOwotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5
KGNvbnRleHQsIG1vZGlmaWVyQXJyYXkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3VzZU1lc3Nh
Z2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLQotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UsIEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJv
ZHkoTW91c2VEb3duLCBidXR0b24sIHBhcnNlTW9kaWZpZXJBcnJheShtb2RpZmllckFycmF5KSku
Z2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlVXAoaW50IGJ1
dHRvbiwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0g
ICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQoZnJhbWUpOwotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmll
ckFycmF5KGNvbnRleHQsIG1vZGlmaWVyQXJyYXkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3Vz
ZU1lc3NhZ2VCb2R5KE1vdXNlVXAsIGJ1dHRvbiwgbW9kaWZpZXJzKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VN
ZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0
dG9uLCBwYXJzZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJheSkpLmdldCgpKTsKIH0KIAogdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHkpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik1vdXNlTW92ZVRvIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVm
PiB4UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJl
Zj4geVJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQo
KSk7Ci0KKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VNb3ZlVG8iKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiWCIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAiWSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgp
KTsKICAgICBtX3Bvc2l0aW9uID0gV0tQb2ludE1ha2UoeCwgeSk7Ci0gICAgCi0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRp
bmdDb250cm9sbGVyOjptb3VzZUZvcmNlQ2xpY2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxl
RGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVz
c2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlQ2xpY2siKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBz
dWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVz
c2FnZSIsICJNb3VzZUZvcmNlQ2xpY2siKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250
cm9sbGVyOjpzdGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljaygpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXJ0QW5kQ2Fu
Y2VsTW91c2VGb3JjZUNsaWNrIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiU3RhcnRBbmRDYW5jZWxNb3VzZUZvcmNlQ2xp
Y2siKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5
LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlRG93
bigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIp
KTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIk1vdXNlRm9yY2VEb3duIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2Fn
ZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAw
KTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZURvd24iKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsK
IH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlVXAoKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJN
b3VzZUZvcmNlVXAiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7
Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8g
Ym9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZUZvcmNlVXAiKTsKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlQ2hhbmdlZChkb3VibGUgZm9yY2UpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik1vdXNlRm9yY2VDaGFuZ2VkIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUu
Z2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZvcmNlS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRm9yY2UiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tEb3VibGVSZWY+IGZvcmNlUmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShmb3JjZSkp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
Zm9yY2VLZXkuZ2V0KCksIGZvcmNlUmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIk1v
dXNlRm9yY2VDaGFuZ2VkIik7CisgICAgc2V0VmFsdWUoYm9keSwgIkZvcmNlIiwgZm9yY2UpOwor
ICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkp
OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmxlYXBGb3J3YXJkKGludCBtaWxs
aXNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNl
bmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkxlYXBGb3J3YXJkIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVz
c2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lSW5NaWxsaXNlY29u
ZHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHRpbWVSZWYgPSBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKG1pbGxpc2Vjb25kcykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgdGltZUtleS5nZXQoKSwgdGltZVJlZi5nZXQoKSk7
Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8g
Ym9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiU3ViTWVzc2FnZSIsICJMZWFwRm9yd2FyZCIpOworICAgIHNldFZhbHVlKGJvZHks
ICJUaW1lSW5NaWxsaXNlY29uZHMiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1pbGxpc2Vjb25k
cykpLmdldCgpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIi
LCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVs
ZUFzeW5jaHJvbm91c0NsaWNrKCkKIHsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9
IDA7Ci0gICAgaW50IGJ1dHRvbiA9IDA7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkV2ZW50U2VuZGVyIikpOwotCi0gICAgLy8gQXN5bmNocm9ub3VzIG1vdXNlIGRvd24u
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbW91c2VEb3duTWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VEb3duLCBidXR0b24s
IG1vZGlmaWVycykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQo
KSwgbW91c2VEb3duTWVzc2FnZUJvZHkuZ2V0KCkpOwotCi0gICAgLy8gQXN5bmNocm9ub3VzIG1v
dXNlIHVwLgotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1vdXNlVXBN
ZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBidXR0
b24sIG1vZGlmaWVycykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgbW91c2VVcE1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkV2
ZW50U2VuZGVyIiwgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZURvd24sIDAsIDApLmdldCgp
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlTW91c2VNZXNzYWdl
Qm9keShNb3VzZVVwLCAwLCAwKS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBXS1JldGFpblB0cjxXS011
dGFibGVEaWN0aW9uYXJ5UmVmPiBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoSlNTdHJpbmdSZWYg
a2V5LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgaW50IGxvY2F0aW9uKQogewotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
S2V5RG93biIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJLZXkiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBrZXlLZXkuZ2V0KCksIHRvV0soa2V5KS5nZXQoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXJzIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLVUludDY0UmVmPiBtb2RpZmllcnNSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1v
ZGlmaWVycykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgbW9kaWZpZXJzS2V5LmdldCgpLCBtb2RpZmllcnNSZWYuZ2V0KCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvY2F0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiTG9jYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IGxvY2F0aW9uUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShsb2NhdGlvbikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgbG9j
YXRpb25LZXkuZ2V0KCksIGxvY2F0aW9uUmVmLmdldCgpKTsKLQotICAgIHJldHVybiBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJLZXlEb3du
Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIktleSIsIHRvV0soa2V5KS5nZXQoKSk7CisgICAgc2V0
VmFsdWUoYm9keSwgIk1vZGlmaWVycyIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kaWZpZXJz
KSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJMb2NhdGlvbiIsIGFkb3B0V0soV0tVSW50
NjRDcmVhdGUobG9jYXRpb24pKS5nZXQoKSk7CisgICAgcmV0dXJuIGJvZHk7CiB9CiAKIHZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6a2V5RG93bihKU1N0cmluZ1JlZiBrZXksIEpTVmFsdWVS
ZWYgbW9kaWZpZXJBcnJheSwgaW50IGxvY2F0aW9uKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0g
ICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQoZnJhbWUpOwotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmll
ckFycmF5KGNvbnRleHQsIG1vZGlmaWVyQXJyYXkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBrZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJv
ZHkoa2V5LCBtb2RpZmllcnMsIGxvY2F0aW9uKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwga2V5RG93bk1lc3NhZ2VC
b2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5k
ZXIiLCBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoa2V5LCBwYXJzZU1vZGlmaWVyQXJyYXkobW9k
aWZpZXJBcnJheSksIGxvY2F0aW9uKS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNLZXlEb3duKEpTU3RyaW5nUmVmIGtleSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGtleURvd25NZXNzYWdlQm9keSA9
IGNyZWF0ZUtleURvd25NZXNzYWdlQm9keShrZXksIDAgLyogbW9kaWZpZXJzICovLCAwIC8qIGxv
Y2F0aW9uICovKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQo
KSwga2V5RG93bk1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkV2ZW50
U2VuZGVyIiwgY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgMCwgMCkuZ2V0KCkpOwogfQog
CiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJNb3VzZVNjcm9sbEJ5IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5h
bWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RG91YmxlUmVmPiB4UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4
UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwg
eVJlZi5nZXQoKSk7Ci0KICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsgLy8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcg
dHJlZSBjb21taXQuCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpKTsKKworICAgIGF1dG8gYm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3Vi
TWVzc2FnZSIsICJNb3VzZVNjcm9sbEJ5Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJF
dmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiBzdGF0aWMgdWludDY0X3QgY2dFdmVudFBo
YXNlRnJvbVN0cmluZyhKU1N0cmluZ1JlZiBwaGFzZVN0cikKQEAgLTQ3NSw5MCArMzUyLDU4IEBA
IHN0YXRpYyB1aW50NjRfdCBjZ0V2ZW50TW9tZW50dW1QaGFzZUZyb21TdHJpbmcoSlNTdHJpbmdS
ZWYgcGhhc2VTdHIpCiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxC
eVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKGludCB4LCBpbnQgeSwgSlNTdHJpbmdSZWYgcGhh
c2VTdHIsIEpTU3RyaW5nUmVmIG1vbWVudHVtU3RyKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxl
RGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1
Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VTY3JvbGxCeVdp
dGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2Fn
ZU5hbWUuZ2V0KCkpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5n
ZXQoKSwgeFJlZi5nZXQoKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgIFdL
UmV0YWluUHRyPFdLRG91YmxlUmVmPiB5UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5
S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQogICAgIHVpbnQ2NF90IHBoYXNlID0gY2dFdmVudFBo
YXNlRnJvbVN0cmluZyhwaGFzZVN0cik7CiAgICAgdWludDY0X3QgbW9tZW50dW0gPSBjZ0V2ZW50
TW9tZW50dW1QaGFzZUZyb21TdHJpbmcobW9tZW50dW1TdHIpOwotICAgIAorCiAgICAgaWYgKHBo
YXNlID09IDQgLyoga0NHU2Nyb2xsUGhhc2VFbmRlZCAqLyB8fCBwaGFzZSA9PSA4IC8qIGtDR1Nj
cm9sbFBoYXNlQ2FuY2VsbGVkICovKQogICAgICAgICBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5j
ZWwgPSB0cnVlOwotICAgIAogICAgIGlmIChtb21lbnR1bSA9PSAzIC8qIGtDR01vbWVudHVtU2Ny
b2xsUGhhc2VFbmQgKi8pCiAgICAgICAgIG1fc2VudFdoZWVsTW9tZW50dW1QaGFzZUVuZCA9IHRy
dWU7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGhhc2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaGFzZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1VJbnQ2NFJlZj4gcGhhc2VSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHBoYXNlKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwaGFz
ZUtleS5nZXQoKSwgcGhhc2VSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1vbWVudHVtS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
TW9tZW50dW0iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vbWVudHVtUmVmID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb21lbnR1bSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgbW9tZW50dW1LZXkuZ2V0KCksIG1vbWVu
dHVtUmVmLmdldCgpKTsKLQogICAgIFdLQnVuZGxlUGFnZUZvcmNlUmVwYWludChJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOyAvLyBUcmlnZ2VycyBhIHNjcm9sbGlu
ZyB0cmVlIGNvbW1pdC4KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0
KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCkpOworCisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJT
dWJNZXNzYWdlIiwgIk1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIpOwor
ICAgIHNldFZhbHVlKGJvZHksICJYIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSkuZ2V0KCkp
OworICAgIHNldFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSkuZ2V0
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJQaGFzZSIsIHBoYXNlKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiTW9tZW50dW0iLCBtb21lbnR1bSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNl
bmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNv
bnRpbnVvdXNNb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSwgYm9vbCBwYWdlZCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1
Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ29u
dGludW91c01vdXNlU2Nyb2xsQnkiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFt
ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
b3VibGVSZWY+IHhSZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhS
ZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RG91YmxlUmVmPiB5UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5
UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYWdlZEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBhZ2VkIikpOwotICAgIFdLUmV0
YWluUHRyPFdLVUludDY0UmVmPiBwYWdlZFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUocGFn
ZWQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHBhZ2VkS2V5LmdldCgpLCBwYWdlZFJlZi5nZXQoKSk7Ci0KKyAgICBhdXRvIGJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
IlN1Yk1lc3NhZ2UiLCAiQ29udGludW91c01vdXNlU2Nyb2xsQnkiKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiWCIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiWSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiUGFnZWQiLCBwYWdlZCk7CiAgICAgLy8gRklYTUU6IFRoaXMgbWVzc2FnZSBz
aG91bGQgYmUgYXN5bmNocm9ub3VzLCBhcyBzY3JvbGxpbmcgaXMgaW50cmluc2ljYWxseSBhc3lu
Y2hyb25vdXMuCiAgICAgLy8gU2VlIGFsc286IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ4MjU2Pi4KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCks
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIDApOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJv
ZHkuZ2V0KCkpOwogfQogCiBKU1ZhbHVlUmVmIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRl
eHRDbGljaygpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7
CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4g
bWVudUVudHJpZXMgPSBhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUF0UG9pbnRJ
bldpbmRvdyhwYWdlLCBtX3Bvc2l0aW9uKSk7Ci0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9
IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOworICAgIGF1dG8gbWVudUVudHJp
ZXMgPSBhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUF0UG9pbnRJbldpbmRvdyhw
YWdlLCBtX3Bvc2l0aW9uKSk7CisgICAgYXV0byBhcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGNv
bnRleHQsIDAsIDAsIDApOwogICAgIGlmICghbWVudUVudHJpZXMpCi0gICAgICAgIHJldHVybiBh
cnJheVJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogCi0gICAgSlNPYmplY3RSZWYgYXJy
YXlPYmogPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJyYXlSZXN1bHQsIDApOwogICAgIHNp
emVfdCBlbnRyaWVzU2l6ZSA9IFdLQXJyYXlHZXRTaXplKG1lbnVFbnRyaWVzLmdldCgpKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJpZXNTaXplOyArK2kpIHsKICAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZW51RW50cmllcy5nZXQoKSwg
aSkpID09IFdLQ29udGV4dE1lbnVJdGVtR2V0VHlwZUlEKCkpOwogCiAgICAgICAgIFdLQ29udGV4
dE1lbnVJdGVtUmVmIGl0ZW0gPSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KG1lbnVFbnRyaWVzLmdldCgpLCBpKSk7CiAgICAgICAgIE1lbnVJ
dGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRhID0gbmV3IE1lbnVJdGVtUHJpdmF0ZURhdGEocGFn
ZSwgaXRlbSk7Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFy
cmF5T2JqLCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFzcygpLCBwcml2
YXRlRGF0YSksIDApOworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBhcnJheSwgaSwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJp
dmF0ZURhdGEpLCAwKTsKICAgICB9CiAKLSAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgcmV0
dXJuIGFycmF5OwogI2Vsc2UKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CiAjZW5kaWYKQEAgLTYxNSwyMSArNDYwLDE0IEBAIE1vbml0b3JXaGVlbEV2ZW50c09wdGlv
bnMqIHRvTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNW
CiAgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgYXJndW1lbnQpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gcmVzZXRMYXRjaGluZ1N0cmluZyA9IGFkb3B0KEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJyZXNldExhdGNoaW5nIikpOwotICAgIGF1dG8g
cmVzZXRMYXRjaGluZ1ZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBKU1ZhbHVl
VG9PYmplY3QoY29udGV4dCwgYXJndW1lbnQsIG51bGxwdHIpLCByZXNldExhdGNoaW5nU3RyaW5n
LmdldCgpLCBudWxscHRyKTsKLQotICAgIGJvb2wgcmVzZXRMYXRjaGluZyA9IHRydWU7Ci0gICAg
aWYgKHJlc2V0TGF0Y2hpbmdWYWx1ZSAmJiBKU1ZhbHVlSXNCb29sZWFuKGNvbnRleHQsIHJlc2V0
TGF0Y2hpbmdWYWx1ZSkpCi0gICAgICAgIHJlc2V0TGF0Y2hpbmcgPSBKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIHJlc2V0TGF0Y2hpbmdWYWx1ZSk7Ci0KICAgICBzdGF0aWMgTW9uaXRvcldoZWVs
RXZlbnRzT3B0aW9ucyBvcHRpb25zOwotICAgIG9wdGlvbnMucmVzZXRMYXRjaGluZyA9IHJlc2V0
TGF0Y2hpbmc7CisgICAgb3B0aW9ucy5yZXNldExhdGNoaW5nID0gYm9vbGVhblByb3BlcnR5KGNv
bnRleHQsIChKU09iamVjdFJlZilhcmd1bWVudCwgInJlc2V0TGF0Y2hpbmciLCB0cnVlKTsKICAg
ICByZXR1cm4gJm9wdGlvbnM7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW9u
aXRvcldoZWVsRXZlbnRzKE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMqIG9wdGlvbnMpCiB7Ci0g
ICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpOwogICAgIAogICAgIG1fc2VudFdoZWVsUGhhc2VFbmRPckNhbmNlbCA9
IGZhbHNlOwogICAgIG1fc2VudFdoZWVsTW9tZW50dW1QaGFzZUVuZCA9IGZhbHNlOwpAQCAtNjYz
LDcgKzUwMSw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FsbEFmdGVyU2Nyb2xs
aW5nQ29tcGxldGVzKEpTVmFsdWVSZWYgZnVuY3Rpb25DYWxsCiAgICAgaWYgKCFmdW5jdGlvbkNh
bGxiYWNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2Ug
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgV0tCdW5k
bGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAg
ICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQobWFpbkZyYW1lKTsKICAgICAKQEAgLTY4MywxOTkgKzUyMSwxMDIgQEAgdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpjYWxsQWZ0ZXJTY3JvbGxpbmdDb21wbGV0ZXMoSlNWYWx1ZVJlZiBm
dW5jdGlvbkNhbGwKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6YWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFkZFRv
dWNoUG9pbnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHhS
ZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsK
LQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBi
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVl
KGJvZHksICJTdWJNZXNzYWdlIiwgIkFkZFRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiWCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih4KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlki
LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oeSkpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlVwZGF0ZVRvdWNoUG9pbnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1VJbnQ2NFJlZj4gaW5kZXhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBp
bmRleEtleS5nZXQoKSwgaW5kZXhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikp
OwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geVJlZiA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJV
cGRhdGVUb3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIkluZGV4Iiwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGluZGV4KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oeCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHkpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIi
LCBib2R5LmdldCgpKTsKIH0KIAotdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3Vj
aE1vZGlmaWVyKGNvbnN0IEpTU3RyaW5nUmVmICZtb2RpZmllciwgYm9vbCBlbmFibGUpCit2b2lk
IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9k
aWZpZXIsIGJvb2wgZW5hYmxlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRUb3VjaE1vZGlmaWVyIikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtl
eS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tFdmVudE1vZGlmaWVycyBt
b2QgPSAwOwotICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVyLCAi
Y3RybCIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlmaWVyc0NvbnRyb2xLZXk7Ci0gICAg
aWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJzaGlmdCIpKQotICAg
ICAgICBtb2QgPSBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5OwotICAgIGlmIChKU1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVyLCAiYWx0IikpCi0gICAgICAgIG1vZCA9IGtXS0V2
ZW50TW9kaWZpZXJzQWx0S2V5OwotICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1vZGlmaWVyLCAibWV0YSIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlmaWVyc01ldGFL
ZXk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllciIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1v
ZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgbW9kaWZpZXJLZXkuZ2V0KCksIG1vZGlmaWVyUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBlbmFibGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFbmFibGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGVuYWJs
ZVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZW5hYmxlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBlbmFibGVLZXkuZ2V0KCksIGVu
YWJsZVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJTZXRUb3VjaE1vZGlmaWVyIik7
CisgICAgc2V0VmFsdWUoYm9keSwgIk1vZGlmaWVyIiwgcGFyc2VUb3VjaE1vZGlmaWVyKG1vZGlm
aWVyKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIkVuYWJsZSIsIGVuYWJsZSk7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKLQog
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaFBvaW50UmFkaXVzKGludCByYWRp
dXNYLCBpbnQgcmFkaXVzWSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+
IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0VG91Y2hQb2ludFJhZGl1cyIpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VL
ZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmFk
aXVzWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geFJlZiA9IGFkb3B0V0soV0tV
SW50NjRDcmVhdGUocmFkaXVzWCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlJhZGl1c1kiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHlSZWYg
PSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHJhZGl1c1kpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkp
OwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRv
IGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiU2V0VG91Y2hQb2ludFJhZGl1cyIpOworICAgIHNldFZh
bHVlKGJvZHksICJSYWRpdXNYIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJhZGl1c1gpKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiUmFkaXVzWSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYWRpdXNZ
KSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5n
ZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hTdGFydCgpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlRvdWNoU3RhcnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQo
KSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1
dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJUb3VjaFN0YXJ0Iik7CisgICAgcG9zdFN5bmNocm9u
b3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hNb3ZlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1l
c3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hNb3ZlIikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0
YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2Ui
LCAiVG91Y2hNb3ZlIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2Vu
ZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91
Y2hFbmQoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5k
ZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJUb3VjaEVuZCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VO
YW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7
CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwor
ICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlRvdWNoRW5kIik7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZv
aWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hDYW5jZWwoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaENhbmNl
bCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJT
dWJNZXNzYWdlIiwgIlRvdWNoQ2FuY2VsIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6Y2xlYXJUb3VjaFBvaW50cygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyVG91Y2hQb2ludHMiKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJN
ZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2Fn
ZSIsICJDbGVhclRvdWNoUG9pbnRzIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2Uo
IkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6cmVsZWFzZVRvdWNoUG9pbnQoaW50IGluZGV4KQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Vi
TWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZWxlYXNlVG91Y2hQb2lu
dCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBp
bmRleFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGluZGV4S2V5LmdldCgpLCBp
bmRleFJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJSZWxlYXNlVG91Y2hQb2ludCIp
OworICAgIHNldFZhbHVlKGJvZHksICJJbmRleCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbmRl
eCkpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHku
Z2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNhbmNlbFRvdWNoUG9p
bnQoaW50IGluZGV4KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZl
bnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZl
bnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDYW5jZWxUb3VjaFBvaW50IikpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQo
KSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5kZXgi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGluZGV4UmVmID0gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShpbmRleCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXkuZ2V0KCksIGluZGV4UmVmLmdldCgpKTsKLQotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHks
ICJTdWJNZXNzYWdlIiwgIkNhbmNlbFRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
SW5kZXgiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXgpKTsKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KKwogI2VuZGlmCiAK
IC8vIE9iamVjdCBDcmVhdGlvbgogCi12b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1ha2VX
aW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVj
dCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
YWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5
KGNvbnRleHQsIHdpbmRvd09iamVjdCwgImV2ZW50U2VuZGVyIiwgdGhpcywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0
aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAiZXZlbnRTZW5kZXIi
LCB0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5oCmluZGV4IDlhMmFmZDk1OGNjZDcwZWNkMjFlYzRlM2IzZmVjNGNmN2NjODViYTguLmVhNDM3
ZmJkYmUwYzM0ODkwNTdlMzE2MDc1YWRlYTY1M2FkYjUxMGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29u
dHJvbGxlci5oCkBAIC0zMCwyNyArMzAsMjMgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tHZW9tZXRy
eS5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVl
SlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1N0cmluZyog
SlNTdHJpbmdSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVl
UmVmOworCiBuYW1lc3BhY2UgV1RSIHsKIAogc3RydWN0IE1vbml0b3JXaGVlbEV2ZW50c09wdGlv
bnMgewotICAgIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMoYm9vbCByZXNldExhdGNoaW5nID0g
dHJ1ZSkKLSAgICAgICAgOiByZXNldExhdGNoaW5nKHJlc2V0TGF0Y2hpbmcpCi0gICAgeyB9Ci0K
ICAgICBib29sIHJlc2V0TGF0Y2hpbmcgeyB0cnVlIH07CiB9OwogCiBNb25pdG9yV2hlZWxFdmVu
dHNPcHRpb25zKiB0b01vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMoSlNDb250ZXh0UmVmLCBKU1Zh
bHVlUmVmKTsKIAotY2xhc3MgRXZlbnRTZW5kaW5nQ29udHJvbGxlciA6IHB1YmxpYyBKU1dyYXBw
YWJsZSB7CitjbGFzcyBFdmVudFNlbmRpbmdDb250cm9sbGVyIGZpbmFsIDogcHVibGljIEpTV3Jh
cHBhYmxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+
IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKTsKLQotICAg
IHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09i
amVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIAotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAg
dmlydHVhbCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOworICAgIHZvaWQgbWFrZVdpbmRvd09i
amVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgdm9pZCBtb3VzZURvd24oaW50IGJ1dHRvbiwgSlNW
YWx1ZVJlZiBtb2RpZmllckFycmF5KTsKICAgICB2b2lkIG1vdXNlVXAoaW50IGJ1dHRvbiwgSlNW
YWx1ZVJlZiBtb2RpZmllckFycmF5KTsKQEAgLTczLDcgKzY5LDYgQEAgcHVibGljOgogICAgIHZv
aWQga2V5RG93bihKU1N0cmluZ1JlZiBrZXksIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSwgaW50
IGxvY2F0aW9uKTsKICAgICB2b2lkIHNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93bihKU1N0cmlu
Z1JlZiBrZXkpOwogCi0gICAgLy8gWm9vbSBmdW5jdGlvbnMuCiAgICAgdm9pZCB0ZXh0Wm9vbUlu
KCk7CiAgICAgdm9pZCB0ZXh0Wm9vbU91dCgpOwogICAgIHZvaWQgem9vbVBhZ2VJbigpOwpAQCAt
ODEsMTAgKzc2LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2NhbGVQYWdlQnkoZG91YmxlIHNjYWxl
LCBkb3VibGUgeCwgZG91YmxlIHkpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAv
LyBUb3VjaCBldmVudHMuCiAgICAgdm9pZCBhZGRUb3VjaFBvaW50KGludCB4LCBpbnQgeSk7CiAg
ICAgdm9pZCB1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KTsKLSAgICB2
b2lkIHNldFRvdWNoTW9kaWZpZXIoY29uc3QgSlNTdHJpbmdSZWYgJm1vZGlmaWVyLCBib29sIGVu
YWJsZSk7CisgICAgdm9pZCBzZXRUb3VjaE1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyLCBi
b29sIGVuYWJsZSk7CiAgICAgdm9pZCBzZXRUb3VjaFBvaW50UmFkaXVzKGludCByYWRpdXNYLCBp
bnQgcmFkaXVzWSk7CiAgICAgdm9pZCB0b3VjaFN0YXJ0KCk7CiAgICAgdm9pZCB0b3VjaE1vdmUo
KTsKQEAgLTk2LDcgKzkwLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXIoKTsKKyAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyKCkgPSBk
ZWZhdWx0OworCisgICAgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKSBmaW5hbDsKKwogICAgIFdL
UG9pbnQgbV9wb3NpdGlvbjsKICAgICBib29sIG1fc2VudFdoZWVsUGhhc2VFbmRPckNhbmNlbCB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX3NlbnRXaGVlbE1vbWVudHVtUGhhc2VFbmQgeyBmYWxzZSB9
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0Nv
bnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0Nv
bnRyb2xsZXIuY3BwCmluZGV4IDkzNThmNGEwZGU1YjNkOWJjMzE2YjVlMGFkZmQwNDEyNjY0MjU4
ZmYuLmRiNDI1ZTc1ZTgwYjA1NDA4YmRmM2UzZTM2NDc2NTEwOTYzMGQzZmQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5j
cHAKQEAgLTM3LDE0ICszNyw2IEBAIFJlZjxHQ0NvbnRyb2xsZXI+IEdDQ29udHJvbGxlcjo6Y3Jl
YXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHQ0NvbnRyb2xsZXIpOwogfQogCi1HQ0Nv
bnRyb2xsZXI6OkdDQ29udHJvbGxlcigpCi17Ci19Ci0KLUdDQ29udHJvbGxlcjo6fkdDQ29udHJv
bGxlcigpCi17Ci19Ci0KIEpTQ2xhc3NSZWYgR0NDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQog
ewogICAgIHJldHVybiBKU0dDQ29udHJvbGxlcjo6Z0NDb250cm9sbGVyQ2xhc3MoKTsKQEAgLTY1
LDExICs1Nyw5IEBAIHNpemVfdCBHQ0NvbnRyb2xsZXI6OmdldEpTT2JqZWN0Q291bnQoKQogICAg
IHJldHVybiBXS0J1bmRsZUdldEphdmFTY3JpcHRPYmplY3RzQ291bnQoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpKTsKIH0KIAotLy8gT2JqZWN0IENyZWF0aW9uCi0KLXZvaWQg
R0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgR0NDb250
cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNl
dFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgIkdDQ29udHJvbGxlciIsIHRoaXMsIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgIkdD
Q29udHJvbGxlciIsIHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmggYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oCmluZGV4
IGQzNDljMWNlOTkwZTg3ZDdkZjJmY2I4YzgyODg1YmNhMzA1NzJhMGIuLjM0YWIyNDI1MTM4YzFk
NzVmYjI0YTI1MTA3NDM2NzhkODE5ZWRjMjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaApAQCAtMjYsMjYgKzI2LDI2IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTV3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8d3Rm
L1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0
IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xh
c3MgR0NDb250cm9sbGVyIDogcHVibGljIEpTV3JhcHBhYmxlIHsKK2NsYXNzIEdDQ29udHJvbGxl
ciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxH
Q0NvbnRyb2xsZXI+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfkdDQ29udHJvbGxlcigpOwotCi0g
ICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93
T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCi0gICAgLy8gSlNXcmFwcGFibGUKLSAg
ICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CisgICAgdm9pZCBtYWtlV2luZG93
T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICB2b2lkIGNvbGxlY3QoKTsKICAgICB2b2lkIGNv
bGxlY3RPbkFsdGVybmF0ZVRocmVhZChib29sIHdhaXRVbnRpbERvbmUpOwogICAgIHNpemVfdCBn
ZXRKU09iamVjdENvdW50KCk7CiAKIHByaXZhdGU6Ci0gICAgR0NDb250cm9sbGVyKCk7CisgICAg
R0NDb250cm9sbGVyKCkgPSBkZWZhdWx0OworCisgICAgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3Mo
KSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCA3
YWU4MWJiNGI1OTA5NmM1OGM4YjVhMTRjODhjNGMzM2Y4YzE0NTcxLi5iYmU5M2RjNWNmZjAwMDAz
YjIxMzlkMDVkZGI1OGQxMzAwZjEyNTA0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtMjcsOCArMjcs
OCBAQAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAKICNpbmNsdWRlICJBY3RpdmF0ZUZv
bnRzLmgiCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkluamVj
dGVkQnVuZGxlUGFnZS5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IldlYkNvcmVUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wdGlvbnMu
aD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGUuaD4KQEAgLTExOCwxOCArMTE4LDEzIEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OmRpZENyZWF0ZVBhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiAg
ICAgaWYgKCFpc01haW5QYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSW5pdGlhbGl6YXRpb24iKSk7CiAgICAgV0tUeXBlUmVmIHJlc3VsdCA9IG51bGxw
dHI7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UobV9idW5kbGUsIG1lc3NzYWdlTmFtZS5nZXQoKSwgbnVs
bHB0ciwgJnJlc3VsdCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKG1fYnVu
ZGxlLCB0b1dLKCJJbml0aWFsaXphdGlvbiIpLmdldCgpLCBudWxscHRyLCAmcmVzdWx0KTsKICAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICBBU1NFUlQoV0tHZXRUeXBl
SUQocmVzdWx0KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEaWN0aW9uYXJ5UmVmPiBpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkgPSBhZG9wdFdLKHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4ocmVzdWx0KSk7CisgICAgYXV0byBpbml0aWFsaXphdGlv
bkRpY3Rpb25hcnkgPSBhZG9wdFdLKGRpY3Rpb25hcnlWYWx1ZShyZXN1bHQpKTsKIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXN1bWVUZXN0aW5nS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzdW1lVGVzdGluZyIpKTsKLSAgICBXS1R5cGVSZWYg
cmVzdW1lVGVzdGluZ1ZhbHVlID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShpbml0aWFsaXph
dGlvbkRpY3Rpb25hcnkuZ2V0KCksIHJlc3VtZVRlc3RpbmdLZXkuZ2V0KCkpOwotICAgIEFTU0VS
VChXS0dldFR5cGVJRChyZXN1bWVUZXN0aW5nVmFsdWUpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICBpZiAoV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihy
ZXN1bWVUZXN0aW5nVmFsdWUpKSkKKyAgICBpZiAoYm9vbGVhblZhbHVlKGluaXRpYWxpemF0aW9u
RGljdGlvbmFyeS5nZXQoKSwgIlJlc3VtZVRlc3RpbmciKSkKICAgICAgICAgYmVnaW5UZXN0aW5n
KGluaXRpYWxpemF0aW9uRGljdGlvbmFyeS5nZXQoKSwgQmVnaW5nVGVzdGluZ01vZGU6OlJlc3Vt
ZSk7CiB9CiAKQEAgLTE3OSwxNiArMTc0LDI0IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlc2V0
TG9jYWxTZXR0aW5ncygpCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogfQogCi12b2lkIElu
amVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQordm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UoV0tTdHJpbmdSZWYsIFdLVHlwZVJlZikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gZXJyb3JNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkVycm9yIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5rbm93biIp
KTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKG1fYnVuZGxlLCBlcnJvck1lc3NhZ2VOYW1lLmdl
dCgpLCBlcnJvck1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKG1f
YnVuZGxlLCB0b1dLKCJFcnJvciIpLmdldCgpLCB0b1dLKCJVbmtub3duIikuZ2V0KCkpOworfQor
Cit2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiBib2R5KQoreworICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKHBhZ2UsIHRvV0sobmFtZSkuZ2V0KCksIGJvZHkpOworfQorCit2b2lkIElu
amVjdGVkQnVuZGxlOjpwb3N0UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGJvZHkpCit7CisgICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyhib2R5KS5nZXQoKSk7CiB9CiAKIHN0
YXRpYyB2b2lkIHBvc3RHQ1Rhc2sodm9pZCogY29udGV4dCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tCdW5kbGVQYWdlUmVmPihjb250ZXh0KTsKKyAg
ICBhdXRvIHBhZ2UgPSByZWludGVycHJldF9jYXN0PFdLQnVuZGxlUGFnZVJlZj4oY29udGV4dCk7
CiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnJlcG9ydExpdmVEb2N1bWVudHMocGFn
ZSk7CiAgICAgV0tSZWxlYXNlKHBhZ2UpOwogfQpAQCAtMTk5LDY3ICsyMDIsNDQgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6cmVwb3J0TGl2ZURvY3VtZW50cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSkK
ICAgICBXS0J1bmRsZVJlbGVhc2VNZW1vcnkobV9idW5kbGUpOwogCiAgICAgY29uc3QgYm9vbCBl
eGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXAgPSB0cnVlOwotICAgIGF1dG8gZG9jdW1lbnRVUkxz
ID0gYWRvcHRXSyhXS0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUsIG1fcGFnZUdy
b3VwLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXApKTsKLSAgICBhdXRvIGFja01lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGl2ZURvY3VtZW50
cyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBhY2tNZXNzYWdlTmFtZS5n
ZXQoKSwgZG9jdW1lbnRVUkxzLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UocGFnZSwgIkxp
dmVEb2N1bWVudHMiLCBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJMcyhtX2J1bmRs
ZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCkpKTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkpCiB7
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJCZWdp
blRlc3QiKSkgewogICAgICAgICBBU1NFUlQobWVzc2FnZUJvZHkpOwotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0
PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBkdW1wUGl4ZWxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRHVtcFBpeGVscyIpKTsKLSAgICAgICAgbV9kdW1wUGl4ZWxzID0gV0tCb29sZWFu
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZHVtcFBpeGVsc0tleS5nZXQoKSkpKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGltZW91dEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVvdXQiKSk7Ci0gICAgICAgIG1fdGltZW91dCA9
IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHRpbWVvdXRLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiKSk7Ci0gICAgICAgIG1f
ZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5LmdldCgpKSkpOwotCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhY2tNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkFjayIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGFja01lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQmVnaW5UZXN0IikpOwotICAgICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdl
LCBhY2tNZXNzYWdlTmFtZS5nZXQoKSwgYWNrTWVzc2FnZUJvZHkuZ2V0KCkpOwotCisgICAgICAg
IGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgbV9kdW1wUGl4ZWxzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIkR1bXBQaXhlbHMiKTsKKyAgICAgICAgbV90aW1lb3V0ID0gU2Vjb25kczo6ZnJvbU1p
bGxpc2Vjb25kcyhXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPih2YWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUaW1lb3V0IikpKSk7CisgICAgICAgIG1fZHVtcEpT
Q29uc29sZUxvZ0luU3RkRXJyID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IkR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpOworICAgICAgICBwb3N0UGFnZU1lc3NhZ2UocGFn
ZSwgIkFjayIsICJCZWdpblRlc3QiKTsKICAgICAgICAgYmVnaW5UZXN0aW5nKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgQmVnaW5nVGVzdGluZ01vZGU6Ok5ldyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlJlc2V0IikpIHsKICAgICAgICAgQVNTRVJUKG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2Fz
dDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGpzY09wdGlvbnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJKU0NPcHRpb25zIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
anNjT3B0aW9uc1N0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwganNjT3B0aW9uc0tleS5nZXQoKSkp
OworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8ganNjT3B0aW9uc1N0cmluZyA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPih2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJKU0NPcHRpb25zIikp
OwogICAgICAgICBpZiAoanNjT3B0aW9uc1N0cmluZykgewogICAgICAgICAgICAgU3RyaW5nIG9w
dGlvbnMgPSB0b1dURlN0cmluZyhqc2NPcHRpb25zU3RyaW5nKTsKICAgICAgICAgICAgIEpTQzo6
T3B0aW9uczo6c2V0T3B0aW9ucyhvcHRpb25zLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9Ci0K
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZEdDS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2hvdWxkR0MiKSk7Ci0gICAgICAgIGJvb2wg
c2hvdWxkR0MgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzaG91bGRHQ0tl
eS5nZXQoKSkpKTsKKyAgICAgICAgYm9vbCBzaG91bGRHQyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJTaG91bGRHQyIpOwogICAgICAgICBpZiAoc2hvdWxkR0MpCiAgICAg
ICAgICAgICBXS0J1bmRsZUdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMobV9idW5kbGUp
OwogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4SXNvbGF0ZWRNb2RlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIpKTsKLSAg
ICAgICAgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSA9IFdLQm9vbGVhbkdldFZhbHVl
KHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGF4SXNvbGF0ZWRNb2RlS2V5LmdldCgpKSkpOworICAgICAgICBt
X2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWUiKTsKICNlbmRpZgogICAgICAg
ICAKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsbG93ZWRIb3N0c0tleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFsbG93ZWRIb3N0cyIpKTsKLSAg
ICAgICAgV0tUeXBlUmVmIGFsbG93ZWRIb3N0c1ZhbHVlID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGFsbG93ZWRIb3N0c0tleS5nZXQoKSk7CisgICAg
ICAgIGF1dG8gYWxsb3dlZEhvc3RzVmFsdWUgPSB2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJBbGxvd2VkSG9zdHMiKTsKICAgICAgICAgaWYgKGFsbG93ZWRIb3N0c1ZhbHVlICYmIFdLR2V0
VHlwZUlEKGFsbG93ZWRIb3N0c1ZhbHVlKSA9PSBXS0FycmF5R2V0VHlwZUlEKCkpIHsKICAgICAg
ICAgICAgIG1fYWxsb3dlZEhvc3RzLmNsZWFyKCk7Ci0KLSAgICAgICAgICAgIFdLQXJyYXlSZWYg
YWxsb3dlZEhvc3RzQXJyYXkgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihhbGxvd2VkSG9zdHNW
YWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IFdLQXJyYXlHZXRT
aXplKGFsbG93ZWRIb3N0c0FycmF5KTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAg
IFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGFsbG93ZWRIb3N0c0FycmF5
LCBpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBX
S1N0cmluZ0dldFR5cGVJRCgpKQotICAgICAgICAgICAgICAgICAgICBtX2FsbG93ZWRIb3N0cy5h
cHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBhdXRvIGFycmF5ID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJl
Zj4oYWxsb3dlZEhvc3RzVmFsdWUpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNp
emUgPSBXS0FycmF5R2V0U2l6ZShhcnJheSk7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAg
ICAgbV9hbGxvd2VkSG9zdHMuYXBwZW5kKHRvV1RGU3RyaW5nKFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChhcnJheSwgaSkpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fc3RhdGUgPSBJZGxlOwpAQCAt
Mjc1LDkgKzI1NSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9Q
YWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldExpdmVEb2N1bWVudHMiKSkg
ewogICAgICAgICBjb25zdCBib29sIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCA9IGZhbHNl
OwotICAgICAgICBhdXRvIGRvY3VtZW50VVJMcyA9IGFkb3B0V0soV0tCdW5kbGVHZXRMaXZlRG9j
dW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFnZUdy
b3VwKSk7Ci0gICAgICAgIGF1dG8gYWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJMaXZlRG9jdW1lbnRzIikpOwotICAgICAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlLCBhY2tNZXNzYWdlTmFtZS5nZXQoKSwgZG9jdW1lbnRVUkxzLmdl
dCgpKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJMaXZlRG9jdW1lbnRzIiwgYWRvcHRXSyhX
S0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBleGNsdWRl
RG9jdW1lbnRzSW5QYWdlR3JvdXApKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQy
OCw3ICs0MDYsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFn
ZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBkb21haW5zOwogICAgICAgICBkb21haW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6
ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5zQXJyYXks
IGkpOworICAgICAgICAgICAgYXV0byBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFp
bnNBcnJheSwgaSk7CiAgICAgICAgICAgICBpZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9
PSBXS1N0cmluZ0dldFR5cGVJRCgpKQogICAgICAgICAgICAgICAgIGRvbWFpbnMuYXBwZW5kKHRv
V1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwogICAgICAgICB9CkBA
IC00NDYsNyArNDI0LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VU
b1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICAgICAgVmVjdG9y
PFN0cmluZz4gZG9tYWluczsKICAgICAgICAgZG9tYWlucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHNpemUpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0Fy
cmF5LCBpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChk
b21haW5zQXJyYXksIGkpOwogICAgICAgICAgICAgaWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRl
bSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSkKICAgICAgICAgICAgICAgICBkb21haW5zLnVuY2hl
Y2tlZEFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsK
ICAgICAgICAgfQpAQCAtNDY3LDE3ICs0NDUsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlk
UmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0K
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkNhbGxVSVNpZGVTY3JpcHRDYWxsYmFjayIpKSB7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJl
ZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1l
c3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVzdWx0S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzdWx0IikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0KLSAgICAgICAgdW5z
aWduZWQgY2FsbGJhY2tJRCA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgY2FsbGJhY2tJREtleS5nZXQoKSkpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiByZXN1
bHRTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHJlc3VsdEtleS5nZXQoKSkpOwotICAgICAgICBh
dXRvIHJlc3VsdEpTU3RyaW5nID0gdG9KUyhyZXN1bHRTdHJpbmcpOwotCi0gICAgICAgIG1fdGVz
dFJ1bm5lci0+cnVuVUlTY3JpcHRDYWxsYmFjayhjYWxsYmFja0lELCByZXN1bHRKU1N0cmluZy5n
ZXQoKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZh
bHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBjYWxsYmFja0lEID0gdWludDY0VmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQ2FsbGJhY2tJRCIpOworICAgICAgICBhdXRvIHJlc3Vs
dFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlJlc3VsdCIpOwor
ICAgICAgICBtX3Rlc3RSdW5uZXItPnJ1blVJU2NyaXB0Q2FsbGJhY2soY2FsbGJhY2tJRCwgdG9K
UyhyZXN1bHRTdHJpbmcpLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDk4
LDI5ICs0NjksMTcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1Bh
Z2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZCIpKSB7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3Nh
Z2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlcyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbktl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk51bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFj
dGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFj
dGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRh
eXNTaW5jZVVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVz
ZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJ
bnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcDNOdW1i
ZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSIpKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcDNNZWRpYW5TdWJGcmFtZVdpdGhv
dXRVSUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcDNNZWRp
YW5TdWJGcmFtZVdpdGhvdXRVSSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNX
aXRob3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3Az
TWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcDNNZWRpYW5EYXRhUmVjb3Jk
c1JlbW92ZWRXaXRob3V0VUkiKSk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZlByZXZhbGVudFJlc291cmNlcyA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNLZXkuZ2V0KCkpKSk7Ci0gICAgICAg
IHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9
ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uS2V5LmdldCgpKSkpOwotICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24g
PSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG51bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpKTsKLSAgICAg
ICAgdW5zaWduZWQgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VV
c2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIG1lZGlhbkRheXNT
aW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiA9
ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbWVkaWFuRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uS2V5
LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRoVUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRv
cDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSUtleS5nZXQoKSkpKTsKLSAgICAgICAg
dW5zaWduZWQgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJID0gKHVuc2lnbmVkKVdLVUludDY0
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUlLZXku
Z2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRV
SSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlh
blN1YlJlc291cmNlV2l0aG91dFVJS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3Az
TWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJS2V5
LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVk
V2l0aG91dFVJID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0
b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJS2V5LmdldCgpKSkpOworICAgICAg
ICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMgPSB1aW50NjRWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlcyIpOwor
ICAgICAgICBhdXRvIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlv
biA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIG51bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiA9IHVpbnQ2NFZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIk51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIHRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJ
bnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIlRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRh
eXNTaW5jZVVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIG1lZGlhbkRheXNTaW5jZVVz
ZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiA9IHVpbnQ2
NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFj
dGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRv
IHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSA9IHVpbnQ2NFZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIlRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSIp
OworICAgICAgICBhdXRvIHRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSSA9IHVpbnQ2NFZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSSIpOwor
ICAgICAgICBhdXRvIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSA9IHVpbnQ2NFZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSIp
OworICAgICAgICBhdXRvIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUkgPSB1aW50
NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTWVkaWFuVW5pcXVlUmVkaXJlY3Rz
V2l0aG91dFVJIik7CisgICAgICAgIGF1dG8gdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdp
dGhvdXRVSSA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcDNNZWRpYW5E
YXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkiKTsKIAogICAgICAgICBtX3Rlc3RSdW5uZXItPnN0
YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhudW1iZXJPZlByZXZhbGVudFJlc291cmNl
cywgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCBudW1iZXJP
ZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHRvcFByZXZhbGVudFJl
c291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiwgbWVkaWFu
RGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0
aW9uLCB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUksIHRvcDNNZWRpYW5TdWJG
cmFtZVdpdGhvdXRVSSwgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJLCB0b3AzTWVkaWFu
VW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJLCB0b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0
aG91dFVJKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTQxLDMxICs1MDAsNyBAQCB2b2lkIEluamVj
dGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwg
V0tTdHJpbmdSZWYgbQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJFcnJvciIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJy
b3JNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVu
a25vd24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgZXJyb3JNZXNzYWdl
TmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlQm9keS5nZXQoKSk7Ci19Ci0KLWJvb2wgSW5qZWN0ZWRC
dW5kbGU6OmJvb2xlYW5Gb3JLZXkoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNo
YXIqIGtleSkKLXsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGtleSkpOwotICAgIFdLVHlwZVJlZiB2YWx1
ZSA9IFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoZGljdGlvbmFyeSwgd2tLZXkuZ2V0KCkpOwot
ICAgIGlmIChXS0dldFR5cGVJRCh2YWx1ZSkgIT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpIHsKLSAg
ICAgICAgb3V0cHV0VGV4dChtYWtlU3RyaW5nKCJCb29sZWFuIHZhbHVlIGZvciBrZXkiLCBrZXks
ICIgbm90IGZvdW5kIGluIGRpY3Rpb25hcnlcbiIpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPih2YWx1ZSkpOwotfQotCi1TdHJpbmcgSW5qZWN0ZWRCdW5kbGU6OnN0cmluZ0ZvcktleShX
S0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQotewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB3a0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoa2V5KSk7Ci0gICAgV0tTdHJpbmdSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShkaWN0aW9uYXJ5LCB3a0tleS5nZXQo
KSkpOwotICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgb3V0cHV0VGV4dChtYWtlU3RyaW5nKCJT
dHJpbmcgdmFsdWUgZm9yIGtleSIsIGtleSwgIiBub3QgZm91bmQgaW4gZGljdGlvbmFyeVxuIikp
OwotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvV1RG
U3RyaW5nKHZhbHVlKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkVycm9yIiwgIlVua25vd24iKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0aW5nKFdLRGljdGlvbmFyeVJlZiBz
ZXR0aW5ncywgQmVnaW5nVGVzdGluZ01vZGUgdGVzdGluZ01vZGUpCkBAIC01OTgsMTEgKzUzMywx
MSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpiZWdpblRlc3RpbmcoV0tEaWN0aW9uYXJ5UmVmIHNl
dHRpbmdzLCBCZWdpbmdUZXN0aW5nTW9kZSB0ZQogICAgIFdLQnVuZGxlU2V0QWxsb3dTdG9yYWdl
QWNjZXNzRnJvbUZpbGVVUkxTKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZmFsc2UpOwogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBXS0J1bmRsZVBhZ2VTZXRVc2VUZXN0aW5nVmlld3Bv
cnRDb25maWd1cmF0aW9uKHBhZ2UoKS0+cGFnZSgpLCAhYm9vbGVhbkZvcktleShzZXR0aW5ncywg
IlVzZUZsZXhpYmxlVmlld3BvcnQiKSk7CisgICAgV0tCdW5kbGVQYWdlU2V0VXNlVGVzdGluZ1Zp
ZXdwb3J0Q29uZmlndXJhdGlvbihwYWdlKCktPnBhZ2UoKSwgIWJvb2xlYW5WYWx1ZShzZXR0aW5n
cywgIlVzZUZsZXhpYmxlVmlld3BvcnQiKSk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlw
ZXNGb3JUZXN0aW5nKHN0cmluZ0ZvcktleShzZXR0aW5ncywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzIikpOworICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0QWRkaXRpb25hbFN1cHBv
cnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKHNldHRpbmdz
LCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKSkpOwogI2VuZGlmCiAKICAgICBtX3Rl
c3RSdW5uZXItPnNldFBsdWdpbnNFbmFibGVkKHRydWUpOwpAQCAtNjYwLDI1ICs1OTUsMTUgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZTo6ZG9uZSgpCiAgICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci0+cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwogI2VuZGlmCiAKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gZG9uZU1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRG9uZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBkb25lTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGl4ZWxSZXN1bHRJc1BlbmRpbmdL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaXhlbFJlc3VsdElz
UGVuZGluZyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBpeGVsUmVzdWx0SXNQ
ZW5kaW5nID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9waXhlbFJlc3VsdElzUGVuZGluZykp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCBwaXhlbFJl
c3VsdElzUGVuZGluZ0tleS5nZXQoKSwgcGl4ZWxSZXN1bHRJc1BlbmRpbmcuZ2V0KCkpOwotCi0g
ICAgaWYgKCFtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBwaXhlbFJlc3VsdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlBpeGVsUmVzdWx0IikpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRv
bmVNZXNzYWdlQm9keS5nZXQoKSwgcGl4ZWxSZXN1bHRLZXkuZ2V0KCksIG1fcGl4ZWxSZXN1bHQu
Z2V0KCkpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXBhaW50UmVj
dHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXBhaW50UmVj
dHMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIHJl
cGFpbnRSZWN0c0tleS5nZXQoKSwgbV9yZXBhaW50UmVjdHMuZ2V0KCkpOworICAgIGF1dG8gYm9k
eSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKIAotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBhdWRpb1Jlc3VsdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkF1ZGlvUmVzdWx0IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
ZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCBhdWRpb1Jlc3VsdEtleS5nZXQoKSwgbV9hdWRpb1Jlc3Vs
dC5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlBpeGVsUmVzdWx0SXNQZW5kaW5nIiwgbV9w
aXhlbFJlc3VsdElzUGVuZGluZyk7CisgICAgaWYgKCFtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKQor
ICAgICAgICBzZXRWYWx1ZShib2R5LCAiUGl4ZWxSZXN1bHQiLCBtX3BpeGVsUmVzdWx0LmdldCgp
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUmVwYWludFJlY3RzIiwgbV9yZXBhaW50UmVjdHMuZ2V0
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJBdWRpb1Jlc3VsdCIsIG1fYXVkaW9SZXN1bHQuZ2V0
KCkpOwogCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25v
dXNNb2RlKHBhZ2UoKS0+cGFnZSgpLCBkb25lTWVzc2FnZU5hbWUuZ2V0KCksIGRvbmVNZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3lu
Y2hyb25vdXNNb2RlKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJEb25lIikuZ2V0KCksIGJvZHkuZ2V0
KCkpOwogCiAgICAgY2xvc2VPdGhlclBhZ2VzKCk7CiAKQEAgLTY5MSw5ICs2MTYsOCBAQCB2b2lk
IEluamVjdGVkQnVuZGxlOjpjbG9zZU90aGVyUGFnZXMoKQogICAgIHNpemVfdCBzaXplID0gbV9w
YWdlcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpCiAgICAg
ICAgIHBhZ2VzVG9DbG9zZS5hcHBlbmQobV9wYWdlc1tpXS0+cGFnZSgpKTsKLSAgICBzaXplID0g
cGFnZXNUb0Nsb3NlLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKLSAgICAgICAgV0tCdW5kbGVQYWdlQ2xvc2UocGFnZXNUb0Nsb3NlW2ldKTsKKyAgICBmb3Ig
KGF1dG8mIHBhZ2UgOiBwYWdlc1RvQ2xvc2UpCisgICAgICAgIFdLQnVuZGxlUGFnZUNsb3NlKHBh
Z2UpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpkdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFs
bFBhZ2VzKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCkBAIC03MDksMTMgKzYzMyw5IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmR1bXBUb1N0ZEVycihjb25zdCBTdHJpbmcmIG91dHB1dCkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmIChvdXRwdXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcFRvU3RkRXJyIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keTsKLSAgICBpZiAoYXV0byB1dGY4ID0gb3V0
cHV0LnRyeUdldFV0ZjgoKSkKLSAgICAgICAgbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHV0ZjgtPmRhdGEoKSkpOwotICAgIGVsc2UKLSAgICAgICAg
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJPdXQg
b2YgbWVtb3J5XG4iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgLy8gRklYTUU6
IERvIHdlIHJlYWxseSBoYXZlIHRvIGNvbnZlcnQgdG8gVVRGLTggaW5zdGVhZCBvZiB1c2luZyB0
b1dLPworICAgIGF1dG8gc3RyaW5nID0gb3V0cHV0LnRyeUdldFV0ZjgoKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkR1bXBUb1N0ZEVyciIsIHN0cmluZyA/IHN0cmluZy0+ZGF0YSgpIDogIk91dCBv
ZiBtZW1vcnlcbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpvdXRwdXRUZXh0KGNvbnN0
IFN0cmluZyYgb3V0cHV0KQpAQCAtNzI0LDI4MCArNjQ0LDE1NSBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlOjpvdXRwdXRUZXh0KGNvbnN0IFN0cmluZyYgb3V0cHV0KQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKG91dHB1dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUZXh0T3V0cHV0IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlQm9keTsKLSAgICBpZiAoYXV0byB1dGY4ID0gb3V0cHV0LnRyeUdldFV0ZjgoKSkKLSAg
ICAgICAgbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHV0ZjgtPmRhdGEoKSkpOwotICAgIGVsc2UKLSAgICAgICAgbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJPdXQgb2YgbWVtb3J5XG4iKSk7CisgICAg
Ly8gRklYTUU6IERvIHdlIHJlYWxseSBoYXZlIHRvIGNvbnZlcnQgdG8gVVRGLTggaW5zdGVhZCBv
ZiB1c2luZyB0b1dLPworICAgIGF1dG8gc3RyaW5nID0gb3V0cHV0LnRyeUdldFV0ZjgoKTsKICAg
ICAvLyBXZSB1c2UgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25v
dXNNb2RlKCkgaW5zdGVhZCBvZiBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZSgpIHRvIG1ha2Ugc3Vy
ZSB0aGF0IGFsbCB0ZXh0IG91dHB1dAogICAgIC8vIGlzIGRvbmUgdmlhIGFzeW5jaHJvbm91cyBJ
UEMsIGV2ZW4gaWYgdGhlIGNvbm5lY3Rpb24gaXMgaW4gZnVsbHkgc3luY2hyb25vdXMgbW9kZSBk
dWUgdG8gYSBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZygpCiAg
ICAgLy8gY2FsbC4gT3RoZXJ3aXNlLCBtZXNzYWdlcyBsb2dnZWQgdmlhIHN5bmMgYW5kIGFzeW5j
IElQQyBtYXkgZW5kIHVwIG91dCBvZiBvcmRlciBhbmQgY2F1c2UgZmxha2luZXNzLgotICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShwYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5w
YWdlKCksIHRvV0soIlRleHRPdXRwdXQiKS5nZXQoKSwgdG9XSyhzdHJpbmcgPyBzdHJpbmctPmRh
dGEoKSA6ICJPdXQgb2YgbWVtb3J5XG4iKS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnBvc3ROZXdCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShib29sIHZhbHVlKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkJlZm9yZVVubG9hZFJldHVyblZhbHVlIikpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiQmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkpLmdldCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdEFkZENocm9tZUlucHV0
RmllbGQoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFkZENocm9tZUlucHV0RmllbGQi
KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkFkZENocm9tZUlucHV0RmllbGQi
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFJlbW92ZUNocm9tZUlucHV0RmllbGQo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlbW92ZUNocm9tZUlucHV0RmllbGQiKSk7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJlbW92ZUNocm9tZUlucHV0RmllbGQi
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdEZvY3VzV2ViVmlldygpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRm9jdXNXZWJWaWV3IikpOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJGb2N1c1dlYlZpZXciKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6
cG9zdFNldEJhY2tpbmdTY2FsZUZhY3Rvcihkb3VibGUgYmFja2luZ1NjYWxlRmFjdG9yKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEJhY2tpbmdTY2FsZUZhY3RvciIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3Jl
YXRlKGJhY2tpbmdTY2FsZUZhY3RvcikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiU2V0QmFja2luZ1NjYWxlRmFjdG9yIiwgYWRvcHRXSyhXS0RvdWJs
ZUNyZWF0ZShiYWNraW5nU2NhbGVGYWN0b3IpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnBvc3RTZXRXaW5kb3dJc0tleShib29sIGlzS2V5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldFdpbmRvd0lzS2V5IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0tleSkpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJTZXRX
aW5kb3dJc0tleSIpLmdldCgpLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0tleSkpLmdldCgp
LCAwKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFNldFZpZXdTaXplKGRvdWJsZSB3
aWR0aCwgZG91YmxlIGhlaWdodCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRWaWV3
U2l6ZSIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3aWR0aEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBoZWlnaHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJoZWlnaHQiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB3aWR0aFdLID0gYWRvcHRXSyhXS0Rv
dWJsZUNyZWF0ZSh3aWR0aCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHku
Z2V0KCksIHdpZHRoS2V5LmdldCgpLCB3aWR0aFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLRG91YmxlUmVmPiBoZWlnaHRXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoaGVpZ2h0KSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgaGVpZ2h0S2V5Lmdl
dCgpLCBoZWlnaHRXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIndpZHRoIiwgd2lkdGgpOworICAg
IHNldFZhbHVlKGJvZHksICJoZWlnaHQiLCBoZWlnaHQpOworICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJTZXRWaWV3
U2l6ZSIpLmdldCgpLCBib2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6
cG9zdFNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2sodWludDY0X3Qgbm90aWZpY2F0aW9uSUQp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGlj
ayIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKG5vdGlmaWNhdGlvbklEKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrIiwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShub3RpZmljYXRpb25JRCkpKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6cG9zdFNldEFkZHNWaXNpdGVkTGlua3MoYm9vbCBhZGRzVmlzaXRlZExpbmtz
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFkZHNWaXNpdGVkTGlua3MiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGFkZHNWaXNpdGVkTGlua3MpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEFkZHNWaXNpdGVkTGlua3MiLCBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShhZGRzVmlzaXRlZExpbmtzKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
OjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5h
YmxlZCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
U2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxl
ZCkpKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJv
b2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1
ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5n
LCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wg
cHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCkKK3ZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxv
bmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRp
b25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywg
T3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIikpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbGF0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImxhdGl0dWRlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBsYXRp
dHVkZVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShsYXRpdHVkZSkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGxhdGl0dWRlS2V5V0suZ2V0KCksIGxhdGl0
dWRlV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvbmdpdHVkZUtl
eVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibG9uZ2l0dWRlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBsb25naXR1ZGVXSyA9IGFkb3B0V0soV0tE
b3VibGVDcmVhdGUobG9uZ2l0dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdl
Qm9keS5nZXQoKSwgbG9uZ2l0dWRlS2V5V0suZ2V0KCksIGxvbmdpdHVkZVdLLmdldCgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjdXJhY3kiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEb3VibGVSZWY+IGFjY3VyYWN5V0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGFjY3VyYWN5
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWNjdXJhY3lL
ZXlXSy5nZXQoKSwgYWNjdXJhY3lXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gcHJvdmlkZXNBbHRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygicHJvdmlkZXNBbHRpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IHByb3ZpZGVzQWx0aXR1ZGVXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3Zp
ZGVzQWx0aXR1ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgp
LCBwcm92aWRlc0FsdGl0dWRlS2V5V0suZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVXSy5nZXQoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0aXR1ZGVLZXlXSyA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFsdGl0dWRlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLRG91YmxlUmVmPiBhbHRpdHVkZVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShhbHRp
dHVkZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFsdGl0
dWRlS2V5V0suZ2V0KCksIGFsdGl0dWRlV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5IikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5V0sgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwcm92aWRlc0FsdGl0dWRlQWNj
dXJhY3lLZXlXSy5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5V0suZ2V0KCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRlQWNjdXJhY3lLZXlXSyA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFsdGl0dWRlQWNjdXJhY3kiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGFsdGl0dWRlQWNjdXJhY3lXSyA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoYWx0aXR1ZGVBY2N1cmFjeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFsdGl0dWRlQWNjdXJhY3lLZXlXSy5nZXQoKSwgYWx0aXR1
ZGVBY2N1cmFjeVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92
aWRlc0hlYWRpbmdLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
InByb3ZpZGVzSGVhZGluZyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3Zp
ZGVzSGVhZGluZ1dLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNIZWFkaW5nKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNIZWFk
aW5nS2V5V0suZ2V0KCksIHByb3ZpZGVzSGVhZGluZ1dLLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBoZWFkaW5nS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJoZWFkaW5nIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBo
ZWFkaW5nV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGhlYWRpbmcpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBoZWFkaW5nS2V5V0suZ2V0KCksIGhlYWRp
bmdXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNTcGVl
ZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNT
cGVlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzU3BlZWRXSyA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzU3BlZWQpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwcm92aWRlc1NwZWVkS2V5V0suZ2V0KCksIHBy
b3ZpZGVzU3BlZWRXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Bl
ZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInNwZWVkIikp
OwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBzcGVlZFdLID0gYWRvcHRXSyhXS0RvdWJs
ZUNyZWF0ZShzcGVlZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0
KCksIHNwZWVkS2V5V0suZ2V0KCksIHNwZWVkV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHByb3ZpZGVzRmxvb3JMZXZlbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNGbG9vckxldmVsIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gcHJvdmlkZXNGbG9vckxldmVsV0sgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShwcm92aWRlc0Zsb29yTGV2ZWwpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1l
c3NhZ2VCb2R5LmdldCgpLCBwcm92aWRlc0Zsb29yTGV2ZWxLZXlXSy5nZXQoKSwgcHJvdmlkZXNG
bG9vckxldmVsV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZsb29y
TGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZsb29y
TGV2ZWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGZsb29yTGV2ZWxXSyA9IGFk
b3B0V0soV0tEb3VibGVDcmVhdGUoZmxvb3JMZXZlbCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGZsb29yTGV2ZWxLZXlXSy5nZXQoKSwgZmxvb3JMZXZlbFdL
LmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
bGF0aXR1ZGUiLCBsYXRpdHVkZSk7CisgICAgc2V0VmFsdWUoYm9keSwgImxvbmdpdHVkZSIsIGxv
bmdpdHVkZSk7CisgICAgc2V0VmFsdWUoYm9keSwgImFjY3VyYWN5IiwgYWNjdXJhY3kpOworICAg
IHNldFZhbHVlKGJvZHksICJhbHRpdHVkZSIsIGFsdGl0dWRlKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiYWx0aXR1ZGVBY2N1cmFjeSIsIGFsdGl0dWRlQWNjdXJhY3kpOworICAgIHNldFZhbHVlKGJv
ZHksICJoZWFkaW5nIiwgaGVhZGluZyk7CisgICAgc2V0VmFsdWUoYm9keSwgInNwZWVkIiwgc3Bl
ZWQpOworICAgIHNldFZhbHVlKGJvZHksICJmbG9vckxldmVsIiwgZmxvb3JMZXZlbCk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIsIGJvZHkpOwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxh
YmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIGVycm9yTWVzc2FnZSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IiLCBlcnJvck1lc3NhZ2UpOwogfQogCiBib29sIElu
amVjdGVkQnVuZGxlOjppc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBjb25zdAogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKSk7Ci0gICAg
V0tUeXBlUmVmIHJlc3VsdFRvUGFzcyA9IDA7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAw
LCAmcmVzdWx0VG9QYXNzKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlzQWN0aXZl
ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJlc3VsdFRvUGFzcykpOwotCi0g
ICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGlzQWN0aXZlLmdldCgpKTsKKyAgICBXS1R5cGVS
ZWYgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiSXNHZW9sb2NhdGlvbkNsaWVudEFj
dGl2ZSIpLmdldCgpLCAwLCAmcmVzdWx0KTsKKyAgICByZXR1cm4gYm9vbGVhblZhbHVlKGFkb3B0
V0socmVzdWx0KS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIEluamVjdGVkQnVuZGxlOjppbWFnZUNv
dW50SW5HZW5lcmFsUGFzdGVib2FyZCgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQiKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3Vs
dFRvUGFzcyA9IDA7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCAmcmVzdWx0VG9QYXNz
KTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW1hZ2VDb3VudCA9IGFkb3B0V0soc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJlc3VsdFRvUGFzcykpOwotICAgIAotICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShpbWFnZUNvdW50LmdldCgpKSk7
CisgICAgV0tUeXBlUmVmIHJlc3VsdCA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIkltYWdlQ291
bnRJbkdlbmVyYWxQYXN0ZWJvYXJkIikuZ2V0KCksIDAsICZyZXN1bHQpOworICAgIHJldHVybiB1
aW50NjRWYWx1ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjpzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBhdXRvIG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0VXNl
ck1lZGlhUGVybWlzc2lvbiIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoZW5hYmxlZCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiU2V0VXNlck1lZGlhUGVybWlzc2lvbiIsIGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKGVuYWJsZWQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlc2V0VXNlck1l
ZGlhUGVybWlzc2lvbigpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc2V0VXNlck1lZGlhUGVybWlzc2lvbiIpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uIik7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNz
aW9uRm9yT3JpZ2luKGJvb2wgcGVybWlzc2lvbiwgV0tTdHJpbmdSZWYgb3JpZ2luLCBXS1N0cmlu
Z1JlZiBwYXJlbnRPcmlnaW4pCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNz
aW9uRm9yT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBlcm1pc3Npb25LZXlXSyA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBlcm1pc3Npb24iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBwZXJtaXNzaW9uV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShw
ZXJtaXNzaW9uKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwg
cGVybWlzc2lvbktleVdLLmdldCgpLCBwZXJtaXNzaW9uV0suZ2V0KCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2Fn
ZUJvZHkuZ2V0KCksIG9yaWdpbktleVdLLmdldCgpLCBvcmlnaW4pOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBhcmVudE9yaWdpbktleVdLLmdldCgpLCBwYXJlbnRPcmln
aW4pOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJwZXJt
aXNzaW9uIiwgcGVybWlzc2lvbik7CisgICAgc2V0VmFsdWUoYm9keSwgIm9yaWdpbiIsIG9yaWdp
bik7CisgICAgc2V0VmFsdWUoYm9keSwgInBhcmVudE9yaWdpbiIsIHBhcmVudE9yaWdpbik7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9y
aWdpbiIsIGJvZHkpOwogfQogCiB1bnNpZ25lZCBJbmplY3RlZEJ1bmRsZTo6dXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihXS1N0cmluZ1JlZiBvcmlnaW4sIFdLU3RyaW5n
UmVmIHBhcmVudE9yaWdpbikgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdp
bktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIG9yaWdpbktleVdL
LmdldCgpLCBvcmlnaW4pOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9y
aWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50
T3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBh
cmVudE9yaWdpbktleVdLLmdldCgpLCBwYXJlbnRPcmlnaW4pOwotCi0gICAgV0tUeXBlUmVmIHJl
c3VsdFRvUGFzcyA9IDA7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGNvdW50
ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4ocmVzdWx0VG9QYXNzKSk7Ci0KLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoY291bnQuZ2V0
KCkpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIm9yaWdpbiIsIG9yaWdpbik7CisgICAgc2V0VmFsdWUo
Ym9keSwgInBhcmVudE9yaWdpbiIsIHBhcmVudE9yaWdpbik7CisgICAgV0tUeXBlUmVmIHJlc3Vs
dCA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291
bnRGb3JPcmlnaW4iKS5nZXQoKSwgYm9keS5nZXQoKSwgJnJlc3VsdCk7CisgICAgcmV0dXJuIHVp
bnQ2NFZhbHVlKGFkb3B0V0socmVzdWx0KS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihXS1N0cmlu
Z1JlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4i
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9k
eS5nZXQoKSwgb3JpZ2luS2V5V0suZ2V0KCksIG9yaWdpbik7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSht
ZXNzYWdlQm9keS5nZXQoKSwgcGFyZW50T3JpZ2luS2V5V0suZ2V0KCksIHBhcmVudE9yaWdpbik7
Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIm9yaWdpbiIs
IG9yaWdpbik7CisgICAgc2V0VmFsdWUoYm9keSwgInBhcmVudE9yaWdpbiIsIHBhcmVudE9yaWdp
bik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
Q291bnRGb3JPcmlnaW4iLCBib2R5KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0Q3Vz
dG9tUG9saWN5RGVsZWdhdGUoYm9vbCBlbmFibGVkLCBib29sIHBlcm1pc3NpdmUpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBlbmFibGVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJlbmFibGVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZW5hYmxlZFdLID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGVuYWJsZWRLZXlXSy5nZXQoKSwgZW5hYmxlZFdLLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJtaXNzaXZlS2V5V0sgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwZXJtaXNzaXZlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcGVybWlzc2l2ZVdLID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUocGVybWlzc2l2ZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHku
Z2V0KCksIHBlcm1pc3NpdmVLZXlXSy5nZXQoKSwgcGVybWlzc2l2ZVdLLmdldCgpKTsKLQotICAg
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiZW5hYmxlZCIsIGVuYWJs
ZWQpOworICAgIHNldFZhbHVlKGJvZHksICJwZXJtaXNzaXZlIiwgcGVybWlzc2l2ZSk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJTZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSIsIGJvZHkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpzZXRIaWRkZW4oYm9vbCBoaWRkZW4pCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0SGlkZGVuIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURp
Y3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzSW5pdGlhbEtleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGlkZGVuIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gaXNJbml0aWFsV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShoaWRkZW4pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgp
LCBpc0luaXRpYWxLZXlXSy5nZXQoKSwgaXNJbml0aWFsV0suZ2V0KCkpOwotCi0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJoaWRkZW4iLCBoaWRkZW4pOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiU2V0SGlkZGVuIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OnNldENhY2hlTW9kZWwoaW50IG1vZGVsKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldENhY2hlTW9kZWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RlbCkpOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0
b1dLKCJTZXRDYWNoZU1vZGVsIikuZ2V0KCksIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kZWwp
KS5nZXQoKSwgbnVsbHB0cik7CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nl
c3NXb3JrUXVldWUoKSBjb25zdApAQCAtMTAwNSwxMTAgKzgwMCw3MyBAQCBib29sIEluamVjdGVk
QnVuZGxlOjpzaG91bGRQcm9jZXNzV29ya1F1ZXVlKCkgY29uc3QKICAgICBpZiAoIW1fdXNlV29y
a1F1ZXVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJJc1dvcmtRdWV1ZUVtcHR5IikpOwotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBpc0VtcHR5ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KHJlc3VsdFRvUGFzcykpOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOwor
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+
cGFnZSgpLCB0b1dLKCJJc1dvcmtRdWV1ZUVtcHR5IikuZ2V0KCksIDAsICZyZXN1bHQpOwogCiAg
ICAgLy8gVGhlIElQQyBmYWlsZWQuIFRoaXMgaGFwcGVucyB3aGVuIHN3YXBwaW5nIHByb2Nlc3Nl
cyBvbiBuYXZpZ2F0aW9uIGJlY2F1c2UgdGhlIFdlYlBhZ2VQcm94eSB1bnJlZ2lzdGVycyBpdHNl
bGYKICAgICAvLyBhcyBhIE1lc3NhZ2VSZWNlaXZlciBmcm9tIHRoZSBvbGQgV2ViUHJvY2Vzc1By
b3h5IGFuZCByZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUgbmV3IFdlYlByb2Nlc3NQcm94eSBpbnN0
ZWFkLgotICAgIGlmICghaXNFbXB0eSkKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuICFXS0Jvb2xlYW5HZXRWYWx1ZShpc0VtcHR5LmdldCgpKTsK
KyAgICBhdXRvIGlzRW1wdHkgPSBib29sZWFuVmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdldCgpKTsK
KyAgICByZXR1cm4gIWlzRW1wdHk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnByb2Nlc3NX
b3JrUXVldWUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlByb2Nlc3NXb3JrUXVldWUi
KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlByb2Nlc3NXb3JrUXVldWUiKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVCYWNrTmF2aWdhdGlvbih1bnNpZ25lZCBo
b3dGYXJCYWNrd2FyZCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJRdWV1ZUJhY2tOYXZpZ2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRy
PFdLVUludDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaG93RmFy
QmFja3dhcmQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIlF1ZXVlQmFja05hdmlnYXRpb24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvd0ZhckJh
Y2t3YXJkKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUZvcndhcmROYXZpZ2F0
aW9uKHVuc2lnbmVkIGhvd0ZhckZvcndhcmQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVl
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVGb3J3YXJkTmF2aWdhdGlvbiIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGhvd0ZhckZvcndhcmQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShw
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iLCBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGhvd0ZhckZvcndhcmQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1
ZXVlTG9hZChXS1N0cmluZ1JlZiB1cmwsIFdLU3RyaW5nUmVmIHRhcmdldCwgYm9vbCBzaG91bGRP
cGVuRXh0ZXJuYWxVUkxzKQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlTG9hZCIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0
YWJsZURpY3Rpb25hcnlSZWY+IGxvYWREYXRhID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVybCIpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCB1cmxLZXkuZ2V0KCksIHVybCk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdGFyZ2V0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygidGFyZ2V0IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERh
dGEuZ2V0KCksIHRhcmdldEtleS5nZXQoKSwgdGFyZ2V0KTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygic2hvdWxkT3BlbkV4dGVybmFsVVJMcyIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0Jvb2xlYW5SZWY+IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNWYWx1ZSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzS2V5Lmdl
dCgpLCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBsb2FkRGF0
YS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJ1cmwiLCB1cmwpOworICAgIHNldFZhbHVlKGJv
ZHksICJ0YXJnZXQiLCB0YXJnZXQpOworICAgIHNldFZhbHVlKGJvZHksICJzaG91bGRPcGVuRXh0
ZXJuYWxVUkxzIiwgc2hvdWxkT3BlbkV4dGVybmFsVVJMcyk7CisgICAgcG9zdFBhZ2VNZXNzYWdl
KCJRdWV1ZUxvYWQiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVl
dWVMb2FkSFRNTFN0cmluZyhXS1N0cmluZ1JlZiBjb250ZW50LCBXS1N0cmluZ1JlZiBiYXNlVVJM
LCBXS1N0cmluZ1JlZiB1bnJlYWNoYWJsZVVSTCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRy
dWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZUxvYWRIVE1MU3RyaW5nIikpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbG9hZERhdGEgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gY29udGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImNvbnRlbnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwg
Y29udGVudEtleS5nZXQoKSwgY29udGVudCk7Ci0KLSAgICBpZiAoYmFzZVVSTCkgewotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYmFzZVVSTEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImJhc2VVUkwiKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0obG9hZERhdGEuZ2V0KCksIGJhc2VVUkxLZXkuZ2V0KCksIGJhc2VVUkwpOwotICAgIH0K
LQotICAgIGlmICh1bnJlYWNoYWJsZVVSTCkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdW5yZWFjaGFibGVVUkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJ1bnJlYWNoYWJsZVVSTCIpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShs
b2FkRGF0YS5nZXQoKSwgdW5yZWFjaGFibGVVUkxLZXkuZ2V0KCksIHVucmVhY2hhYmxlVVJMKTsK
LSAgICB9Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIGxvYWREYXRhLmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgImNvbnRl
bnQiLCBjb250ZW50KTsKKyAgICBpZiAoYmFzZVVSTCkKKyAgICAgICAgc2V0VmFsdWUoYm9keSwg
ImJhc2VVUkwiLCBiYXNlVVJMKTsKKyAgICBpZiAodW5yZWFjaGFibGVVUkwpCisgICAgICAgIHNl
dFZhbHVlKGJvZHksICJ1bnJlYWNoYWJsZVVSTCIsIHVucmVhY2hhYmxlVVJMKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlF1ZXVlTG9hZEhUTUxTdHJpbmciLCBib2R5KTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6cXVldWVSZWxvYWQoKQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlUmVsb2FkIikpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZVJlbG9hZCIpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjpxdWV1ZUxvYWRpbmdTY3JpcHQoV0tTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIG1fdXNl
V29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlTG9hZGlu
Z1NjcmlwdCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIHNjcmlwdCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUxv
YWRpbmdTY3JpcHQiLCBzY3JpcHQpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZU5v
bkxvYWRpbmdTY3JpcHQoV0tTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIG1fdXNlV29ya1F1ZXVl
ID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlTm9uTG9hZGluZ1Njcmlw
dCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIHNjcmlwdCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZU5vbkxvYWRp
bmdTY3JpcHQiLCBzY3JpcHQpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlOjppc0FsbG93ZWRI
b3N0KFdLU3RyaW5nUmVmIGhvc3QpCkBAIC0xMTQzLDQgKzkwMSw3MiBAQCB2b2lkIEluamVjdGVk
QnVuZGxlOjp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKCkKICAgICBtX3Rlc3RSdW5uZXItPnRleHRG
aWVsZERpZEVuZEVkaXRpbmdDYWxsYmFjaygpOwogfQogCit2b2lkIEluamVjdGVkQnVuZGxlOjpw
b3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIGJvZHkpCit7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBuYW1lLCBib2R5KTsKK30KKwordm9pZCBJ
bmplY3RlZEJ1bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNo
YXIqIGJvZHkpCit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKG5hbWUsIHRvV0soYm9keSkpOworfQor
Cit2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSkKK3sK
KyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUpOworfQorCit2b2lkIHBvc3RNZXNzYWdlKGNv
bnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKQoreworICAgIHBvc3RNZXNzYWdlKG5hbWUs
IGFkb3B0V0soV0tVSW50NjRDcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUpCit7Cisg
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUsIG51bGxwdHIpOworfQorCit2
b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkK
K3sKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29u
c3QgY2hhciogbmFtZSwgdWludDY0X3QgdmFsdWUpCit7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZShuYW1lLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCit2
b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgdmFs
dWUpCit7CisgICAgdWludDY0X3QgcHJvbW90ZWRWYWx1ZSA9IHZhbHVlOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UobmFtZSwgcHJvbW90ZWRWYWx1ZSk7Cit9CisKK3ZvaWQgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpCit7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSku
Z2V0KCkpOworfQorCit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5
cGVSZWYgdmFsdWUpCit7CisgICAgaWYgKGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCkpCisgICAgICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UtPnBh
Z2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUpOworfQorCit2b2lkIHBvc3RQYWdlTWVzc2Fn
ZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIHBvc3RQYWdlTWVzc2FnZShu
YW1lLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFs
dWUpCit7CisgICAgaWYgKGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCkpCisgICAgICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0
aW5nKHBhZ2UtPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUsIG51bGxwdHIpOworfQor
Cit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wg
dmFsdWUpCit7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UobmFtZSwgYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5oCmluZGV4IGI3NjAxNDM2ZjBjNjcyODU2MzNhMDhlMjVmOTQyYThhYTk4ZDk3MGIu
LjhhZTZhYTI4MGEwZDkxYWJiYTIxM2Y1NGJlYWJlNzAyYjE0ZTI1MjYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgK
QEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogCiAgICAgLy8gR2VvbG9jYXRpb24uCiAgICAgdm9p
ZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBh
Y2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJv
dmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92
aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBz
cGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJsZSBmbG9vckxldmVsKTsKKyAgICB2
b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxv
bmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRp
b25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywg
T3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKTsKICAg
ICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0cmlu
Z1JlZiBlcnJvck1lc3NhZ2UpOwogICAgIGJvb2wgaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZl
KCkgY29uc3Q7CiAKQEAgLTE2OSw4ICsxNjksMTMgQEAgcHJpdmF0ZToKICAgICBlbnVtIGNsYXNz
IEJlZ2luZ1Rlc3RpbmdNb2RlIHsgTmV3LCBSZXN1bWUgfTsKICAgICB2b2lkIGJlZ2luVGVzdGlu
ZyhXS0RpY3Rpb25hcnlSZWYgaW5pdGlhbFNldHRpbmdzLCBCZWdpbmdUZXN0aW5nTW9kZSk7CiAK
LSAgICBib29sIGJvb2xlYW5Gb3JLZXkoV0tEaWN0aW9uYXJ5UmVmLCBjb25zdCBjaGFyKiBrZXkp
OwotICAgIFN0cmluZyBzdHJpbmdGb3JLZXkoV0tEaWN0aW9uYXJ5UmVmLCBjb25zdCBjaGFyKiBr
ZXkpOworICAgIHN0YXRpYyB2b2lkIHBvc3RQYWdlTWVzc2FnZShXS0J1bmRsZVBhZ2VSZWYsIGNv
bnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiBib2R5KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGF0aWMgdm9pZCBwb3N0UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmLCBjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBXS1JldGFpblB0cjxUPiYgYm9keSk7CisgICAgc3RhdGljIHZvaWQgcG9z
dFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hh
ciogYm9keSk7CisKKyAgICB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBX
S1R5cGVSZWYgYm9keSA9IG51bGxwdHIpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
cG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWluUHRyPFQ+JiBi
b2R5KTsKKyAgICB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBj
aGFyKiBib2R5KTsKIAogICAgIFdLQnVuZGxlUmVmIG1fYnVuZGxlIHsgbnVsbHB0ciB9OwogICAg
IFdLQnVuZGxlUGFnZUdyb3VwUmVmIG1fcGFnZUdyb3VwIHsgbnVsbHB0ciB9OwpAQCAtMjEwLDQg
KzIxNSwzMyBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3VzZXJTY3JpcHRJbmplY3RlZENvdW50
IHsgMCB9OwogfTsKIAordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVS
ZWYgdmFsdWUgPSBudWxscHRyKTsKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwg
dW5zaWduZWQgdmFsdWUpOwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBjaGFyKiB2YWx1ZSk7CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFy
KiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBudWxscHRyKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKTsKK3ZvaWQgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1aW50NjRfdCB2YWx1ZSk7Cit2b2lkIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgdmFsdWUpOwordm9p
ZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSk7
Cit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hh
ciogdmFsdWUpOworCit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5
cGVSZWYgdmFsdWUgPSBudWxscHRyKTsKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIq
IG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFt
ZSwgY29uc3QgY2hhciogdmFsdWUpOworCit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdl
KGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKTsKK3Zv
aWQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hh
ciogdmFsdWUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBXS1JldGFpblB0cjxUPiYgYm9keSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
cGFnZSwgbmFtZSwgYm9keS5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBX
S1JldGFpblB0cjxUPiYgYm9keSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UobmFtZSwgYm9keS5n
ZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmlu
ZGV4IGQ4OWZlYWY5YjZkYWU0Yzk2ODUzMWYwYWI2Mzg1ODkxYjE0Zjk4ZjguLjJmNTY0Mjc3MzEx
NmQ5ZjEwMjRmYTZmYmU5ZGMzNTIwYjE1ZTE4YTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAK
QEAgLTYwLDUwICs2MCwxOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV1RS
IHsKIAotc3RhdGljIEpTVmFsdWVSZWYgcHJvcGVydHlWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUpCitzdGF0aWMg
ZG91YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0eShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25z
dCBjaGFyKiBuYW1lKQogewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBhdXRvIHByb3BlcnR5TmFtZVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHByb3BlcnR5TmFtZSkpOwotICAgIHJldHVybiBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIG9iamVjdCwgcHJvcGVydHlOYW1lU3RyaW5nLmdldCgpLCAwKTsKLX0KLQotc3RhdGlj
IGRvdWJsZSBwcm9wZXJ0eVZhbHVlRG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKLXsKLSAgICBKU1ZhbHVlUmVm
IHZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCB2YWx1ZSwgMCk7ICAgIAotfQotCi1zdGF0aWMgaW50IHByb3BlcnR5VmFs
dWVJbnQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hh
ciogcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHByb3BlcnR5
VmFsdWVEb3VibGUoY29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsgICAgCi19Ci0KLXN0
YXRpYyBkb3VibGUgbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQotewotICAgIEpTR2xvYmFsQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAg
ICByZXR1cm4gcHJvcGVydHlWYWx1ZURvdWJsZShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxP
YmplY3QoY29udGV4dCksIHByb3BlcnR5TmFtZSk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5k
bGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKKyAgICByZXR1cm4gbnVtZXJpY1By
b3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgbmFtZSk7
CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBkdW1wUGF0aChKU0dsb2JhbENvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgbm9kZVZhbHVlKQogewotICAgIEpTVmFsdWVSZWYgbm9kZU5hbWVW
YWx1ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgbm9kZVZhbHVlLCAibm9kZU5hbWUiKTsKLSAg
ICBhdXRvIGpzU3RyaW5nTm9kZU5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIG5vZGVOYW1lVmFsdWUsIDApKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbm9k
ZU5hbWUgPSB0b1dLKGpzU3RyaW5nTm9kZU5hbWUpOwotCi0gICAgSlNWYWx1ZVJlZiBwYXJlbnRO
b2RlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBub2RlVmFsdWUsICJwYXJlbnROb2RlIik7Ci0K
LSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQodG9XVEZTdHJpbmcobm9kZU5hbWUpKTsKLQotICAgIGlmIChwYXJlbnROb2RlICYmIEpTVmFs
dWVJc09iamVjdChjb250ZXh0LCBwYXJlbnROb2RlKSkgewotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiA+ICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1w
UGF0aChjb250ZXh0LCAoSlNPYmplY3RSZWYpcGFyZW50Tm9kZSkpOwotICAgIH0KLQotICAgIHJl
dHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgYXV0byBuYW1lID0gdG9XVEZTdHJp
bmcoc3RyaW5nUHJvcGVydHkoY29udGV4dCwgbm9kZVZhbHVlLCAibm9kZU5hbWUiKSk7CisgICAg
aWYgKGF1dG8gcGFyZW50Tm9kZSA9IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIG5vZGVWYWx1ZSwg
InBhcmVudE5vZGUiKSkKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcobmFtZSwgIiA+ICIsIGR1
bXBQYXRoKGNvbnRleHQsIHBhcmVudE5vZGUpKTsKKyAgICByZXR1cm4gbmFtZTsKIH0KIAogc3Rh
dGljIFdURjo6U3RyaW5nIGR1bXBQYXRoKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNj
cmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZSkKQEAgLTEyNiw1
MyArOTQsNDAgQEAgc3RhdGljIFdURjo6U3RyaW5nIHJhbmdlVG9TdHIoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQKICAgICBpZiAoIXJhbmdlUmVmKQog
ICAgICAgICByZXR1cm4gIihudWxsKSI7CiAKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotCi0gICAgSlNHbG9iYWxDb250ZXh0UmVm
IGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFt
ZSwgd29ybGQpOwotICAgIEpTVmFsdWVSZWYgcmFuZ2VWYWx1ZSA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0V3JhcHBlckZvclJhbmdlRm9yV29ybGQoZnJhbWUsIHJhbmdlUmVmLCB3b3JsZCk7
CisgICAgYXV0byBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKKyAgICBh
dXRvIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChm
cmFtZSwgd29ybGQpOworICAgIGF1dG8gcmFuZ2VWYWx1ZSA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0V3JhcHBlckZvclJhbmdlRm9yV29ybGQoZnJhbWUsIHJhbmdlUmVmLCB3b3JsZCk7CiAg
ICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCByYW5nZVZhbHVlKSk7Ci0gICAgSlNP
YmplY3RSZWYgcmFuZ2VPYmplY3QgPSAoSlNPYmplY3RSZWYpcmFuZ2VWYWx1ZTsKLQotICAgIEpT
VmFsdWVSZWYgc3RhcnROb2RlVmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIHJhbmdlT2Jq
ZWN0LCAic3RhcnRDb250YWluZXIiKTsKLSAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRl
eHQsIHN0YXJ0Tm9kZVZhbHVlKSk7Ci0gICAgSlNPYmplY3RSZWYgc3RhcnROb2RlT2JqZWN0ID0g
KEpTT2JqZWN0UmVmKXN0YXJ0Tm9kZVZhbHVlOwotCi0gICAgSlNWYWx1ZVJlZiBlbmROb2RlVmFs
dWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kQ29udGFpbmVyIik7
Ci0gICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBlbmROb2RlVmFsdWUpKTsKLSAg
ICBKU09iamVjdFJlZiBlbmROb2RlT2JqZWN0ID0gKEpTT2JqZWN0UmVmKWVuZE5vZGVWYWx1ZTsK
LQotICAgIGludCBzdGFydE9mZnNldCA9IHByb3BlcnR5VmFsdWVJbnQoY29udGV4dCwgcmFuZ2VP
YmplY3QsICJzdGFydE9mZnNldCIpOwotICAgIGludCBlbmRPZmZzZXQgPSBwcm9wZXJ0eVZhbHVl
SW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zmc2V0Iik7Ci0KLSAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJyYW5n
ZSBmcm9tICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHN0YXJ0T2Zmc2V0KTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChkdW1wUGF0aChjb250ZXh0LCBzdGFydE5vZGVPYmplY3QpKTsKLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0byAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZE51bWJlcihlbmRPZmZzZXQpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG9m
ICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGR1bXBQYXRoKGNvbnRleHQsIGVuZE5vZGVP
YmplY3QpKTsKLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIGF1dG8g
cmFuZ2VPYmplY3QgPSAoSlNPYmplY3RSZWYpcmFuZ2VWYWx1ZTsKKworICAgIHJldHVybiBtYWtl
U3RyaW5nKCJyYW5nZSBmcm9tICIsCisgICAgICAgIG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBy
YW5nZU9iamVjdCwgInN0YXJ0T2Zmc2V0IiksCisgICAgICAgICIgb2YgIiwKKyAgICAgICAgZHVt
cFBhdGgoY29udGV4dCwgb2JqZWN0UHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJzdGFy
dENvbnRhaW5lciIpKSwKKyAgICAgICAgIiB0byAiLAorICAgICAgICBudW1lcmljUHJvcGVydHko
Y29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRPZmZzZXQiKSwKKyAgICAgICAgIiBvZiAiLAorICAg
ICAgICBkdW1wUGF0aChjb250ZXh0LCBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCByYW5nZU9iamVj
dCwgImVuZENvbnRhaW5lciIpKQorICAgICk7CiB9CiAKIHN0YXRpYyBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0ZyYW1lTmF2aWdhdGlvblR5cGUgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5
cGVMaW5rQ2xpY2tlZDoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImxpbmsgY2xpY2tlZCIpKTsKKyAgICAgICAgcmV0dXJuIHRvV0soImxpbmsg
Y2xpY2tlZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZUZvcm1TdWJtaXR0ZWQ6
Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJm
b3JtIHN1Ym1pdHRlZCIpKTsKKyAgICAgICAgcmV0dXJuIHRvV0soImZvcm0gc3VibWl0dGVkIik7
CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlQmFja0ZvcndhcmQ6Ci0gICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJiYWNrL2ZvcndhcmQi
KSk7CisgICAgICAgIHJldHVybiB0b1dLKCJiYWNrL2ZvcndhcmQiKTsKICAgICBjYXNlIGtXS0Zy
YW1lTmF2aWdhdGlvblR5cGVSZWxvYWQ6Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJyZWxvYWQiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJy
ZWxvYWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVGb3JtUmVzdWJtaXR0ZWQ6
Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJm
b3JtIHJlc3VibWl0dGVkIikpOworICAgICAgICByZXR1cm4gdG9XSygiZm9ybSByZXN1Ym1pdHRl
ZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZU90aGVyOgotICAgICAgICByZXR1
cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3RoZXIiKSk7CisgICAg
ICAgIHJldHVybiB0b1dLKCJvdGhlciIpOwogICAgIH0KLSAgICByZXR1cm4gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaWxsZWdhbCB2YWx1ZSIpKTsKKyAgICByZXR1cm4g
dG9XSygiaWxsZWdhbCB2YWx1ZSIpOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgc3R5bGVEZWNU
b1N0cihXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUpCkBAIC0xODUsMjMgKzE0
MCwxNCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgc3R5bGVEZWNUb1N0cihXS0J1bmRsZUNTU1N0eWxl
RGVjbGFyYXRpb25SZWYgc3R5bGUpCiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsKIH0KIAotc3RhdGljIFdURjo6U3RyaW5nIHNlY3VyaXR5T3JpZ2luVG9TdHIoV0tTZWN1cml0
eU9yaWdpblJlZiBvcmlnaW4pCitzdGF0aWMgV1RGOjpTdHJpbmcgc3RyaW5nKFdLU2VjdXJpdHlP
cmlnaW5SZWYgb3JpZ2luKQogewotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgneycpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRv
V1RGU3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlQcm90b2NvbChvcmlnaW4pKSkp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9zdChv
cmlnaW4pKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihXS1NlY3VyaXR5T3JpZ2luR2V0UG9ydChvcmlnaW4p
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnfScpOwotCi0gICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygneycsIHRvV1RGU3RyaW5n
KGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlQcm90b2NvbChvcmlnaW4pKSksICIsICIsIHRv
V1RGU3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlIb3N0KG9yaWdpbikpKSwgIiwg
IiwgV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSwgJ30nKTsKIH0KIAogc3RhdGljIFdU
Rjo6U3RyaW5nIGZyYW1lVG9TdHIoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1l
KGZyYW1lKSk7CisgICAgYXV0byBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUo
ZnJhbWUpKTsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgaWYgKFdLQnVu
ZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpIHsKICAgICAgICAgaWYgKCFXS1N0cmluZ0lzRW1w
dHkobmFtZS5nZXQoKSkpIHsKQEAgLTIzNSwxMiArMTgxLDEyIEBAIHN0YXRpYyBpbmxpbmUgV1RG
OjpTdHJpbmcgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlZiBmaWxlVXJsKQogICAg
IGlmICghZmlsZVVybCkKICAgICAgICAgcmV0dXJuICIobnVsbCkiOwogCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHNjaGVtZVN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKGZp
bGVVcmwpKTsKKyAgICBhdXRvIHNjaGVtZVN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1l
KGZpbGVVcmwpKTsKICAgICBpZiAoIWlzTG9jYWxGaWxlU2NoZW1lKHNjaGVtZVN0cmluZy5nZXQo
KSkpCiAgICAgICAgIHJldHVybiB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhm
aWxlVXJsKSkpOwogCiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
KTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1
bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUpKTsKKyAgICBhdXRvIG1haW5GcmFtZVVSTCA9IGFk
b3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7CiAgICAgaWYgKCFtYWluRnJh
bWVVUkwpCiAgICAgICAgIG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQ
cm92aXNpb25hbFVSTChtYWluRnJhbWUpKTsKIApAQCAtNDM0LDggKzM4MCw3IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpyZXNldEFmdGVyVGVzdCgpCiAgICAgLy8gKHNlZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODMzND4pLCBob3dldmVyIGZvciB0ZXN0
cywgd2Ugd2FudCB0byBzdGFydCBlYWNoIG9uZSB3aXRoIGEgY2xlYW4gc3RhdGUuCiAgICAgV0tC
dW5kbGVGcmFtZUZvY3VzKGZyYW1lKTsKIAotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXZWJDb3Jl
VGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOworICAgIFdlYkNvcmVU
ZXN0U3VwcG9ydDo6cmVzZXRJbnRlcm5hbHNPYmplY3QoV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRDb250ZXh0KGZyYW1lKSk7CiAgICAgYXNzaWduZWRVcmxzQ2FjaGUoKS5jbGVhcigpOwogCiAg
ICAgLy8gVXNlciBzY3JpcHRzIG5lZWQgdG8gYmUgcmVtb3ZlZCBhZnRlciB0aGUgdGVzdCBhbmQg
YmVmb3JlIGxvYWRpbmcgYWJvdXQ6YmxhbmssIGFzIG90aGVyd2lzZSB0aGV5IHdvdWxkIHJ1biBp
biBhYm91dDpibGFuaywgYW5kIHBvdGVudGlhbGx5IGxlYWsgcmVzdWx0cyBpbnRvIGEgc3Vic2Vx
dWVzdCB0ZXN0LgpAQCAtNDUxLDcgKzM5Niw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpy
ZXNldEFmdGVyVGVzdCgpCiAvLyBTdHJpbmcgb3V0cHV0IG11c3QgYmUgaWRlbnRpY2FsIHRvIC1b
V2ViRnJhbWUgX2RydF9kZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdF0uCiBzdGF0aWMg
dm9pZCBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUo
ZnJhbWUpKTsKKyAgICBhdXRvIG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShm
cmFtZSkpOwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7CiAgICAg
ICAgIGlmIChXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKICAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSIpOwpAQCAtNDg2LDI3ICs0MzEsMjEg
QEAgc3RhdGljIHZvaWQgZHVtcExvYWRFdmVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25z
dCBjaGFyKiBldmVudE5hbWUpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVxdWVzdERlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBTdHJp
bmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1
cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwotICAgIFdLUmV0YWlu
UHRyPFdLVVJMUmVmPiBmaXJzdFBhcnR5ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5Rmlyc3RQ
YXJ0eUZvckNvb2tpZXMocmVxdWVzdCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBo
dHRwTWV0aG9kID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1ZXN0KSk7
Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxOU1VSTFJlcXVlc3QgVVJMICIp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJs
LmdldCgpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIG1haW4gZG9jdW1l
bnQgVVJMICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RS
ZXN1bHQoZmlyc3RQYXJ0eS5nZXQoKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiLCBodHRwIG1ldGhvZCAiKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0
Q29weVVSTChyZXF1ZXN0KSk7CisgICAgYXV0byBmaXJzdFBhcnR5ID0gYWRvcHRXSyhXS1VSTFJl
cXVlc3RDb3B5Rmlyc3RQYXJ0eUZvckNvb2tpZXMocmVxdWVzdCkpOworICAgIGF1dG8gaHR0cE1l
dGhvZCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwogCisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU1VSTFJlcXVlc3QgVVJMICIsIHBhdGhTdWl0YWJs
ZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSwgIiwgbWFpbiBkb2N1bWVudCBVUkwgIiwgcGF0aFN1
aXRhYmxlRm9yVGVzdFJlc3VsdChmaXJzdFBhcnR5LmdldCgpKSwgIiwgaHR0cCBtZXRob2QgIik7
CiAgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShodHRwTWV0aG9kLmdldCgpKSkKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobm9uZSkiKTsKICAgICBlbHNlCiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGh0dHBNZXRob2QpKTsKLQogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCc+Jyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzcG9u
c2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlc3BvbnNlUmVmIHJlc3Bv
bnNlLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBib29sIHNob3VsZER1bXBSZXNwb25z
ZUhlYWRlcnMgPSBmYWxzZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRv
cHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8gdXJsID0gYWRv
cHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwogICAgIGlmICghdXJsKSB7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG51bGwpIik7CiAgICAgICAgIHJl
dHVybjsKQEAgLTUzNSwzMSArNDc0LDIwIEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6
cmVzcG9uc2VIZWFkZXJDb3VudChXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQogCiBzdGF0aWMg
aW5saW5lIHZvaWQgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tF
cnJvclJlZiBlcnJvciwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JEb21haW4gPSBhZG9wdFdLKFdLRXJyb3JDb3B5RG9t
YWluKGVycm9yKSk7Ci0gICAgaW50IGVycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJy
b3IpOworICAgIGF1dG8gZXJyb3JEb21haW4gPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLRXJyb3JD
b3B5RG9tYWluKGVycm9yKSkpOworICAgIGF1dG8gZXJyb3JDb2RlID0gV0tFcnJvckdldEVycm9y
Q29kZShlcnJvcik7CiAKICAgICAvLyBXZSBuZWVkIHRvIGRvIHNvbWUgZXJyb3IgbWFwcGluZyBo
ZXJlIHRvIG1hdGNoIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyAoTWFjIGVycm9yIG5hbWVzIGFyZSBl
eHBlY3RlZCkuCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZXJyb3JEb21h
aW4uZ2V0KCksICJXZWJLaXROZXR3b3JrRXJyb3IiKSkgewotICAgICAgICBlcnJvckRvbWFpbiA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk5TVVJMRXJyb3JEb21haW4i
KSk7CisgICAgaWYgKGVycm9yRG9tYWluID09ICJXZWJLaXROZXR3b3JrRXJyb3IiKSB7CisgICAg
ICAgIGVycm9yRG9tYWluID0gIk5TVVJMRXJyb3JEb21haW4iOwogICAgICAgICBlcnJvckNvZGUg
PSAtOTk5OwogICAgIH0KKyAgICBpZiAoZXJyb3JEb21haW4gPT0gICJXZWJLaXRQb2xpY3lFcnJv
ciIpCisgICAgICAgIGVycm9yRG9tYWluID0gIldlYktpdEVycm9yRG9tYWluIjsKIAotICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGVycm9yRG9tYWluLmdldCgpLCAiV2ViS2l0
UG9saWN5RXJyb3IiKSkKLSAgICAgICAgZXJyb3JEb21haW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRFcnJvckRvbWFpbiIpKTsKLQotICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPE5TRXJyb3IgZG9tYWluICIpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGVycm9yRG9tYWluKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIsIGNvZGUgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIo
ZXJyb3JDb2RlKTsKLQotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdL
RXJyb3JDb3B5RmFpbGluZ1VSTChlcnJvcikpOwotICAgIGlmICh1cmwuZ2V0KCkpIHsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5
U3RyaW5nKHVybC5nZXQoKSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IiwgZmFpbGluZyBVUkwgXCIiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZT
dHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7Ci0g
ICAgfQotCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjxOU0Vycm9yIGRvbWFpbiAiLCBlcnJv
ckRvbWFpbiwgIiwgY29kZSAiLCBlcnJvckNvZGUpOworICAgIGlmIChhdXRvIHVybCA9IGFkb3B0
V0soV0tFcnJvckNvcHlGYWlsaW5nVVJMKGVycm9yKSkpCisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCIsIGZhaWxpbmcgVVJMIFwiIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlT
dHJpbmcodXJsLmdldCgpKSkpLCAnIicpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc+Jyk7
CiB9CiAKQEAgLTY5NSw3ICs2MjMsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU3Rh
cnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+dGVzdFVS
TCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB0ZXN0VVJMID0gYWRvcHRXSyhX
S0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKGZyYW1lKSk7CisgICAgICAgIGF1dG8gdGVz
dFVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVSTChmcmFtZSkpOwog
ICAgICAgICBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNldFRlc3RVUkwodGVzdFVSTC5n
ZXQoKSk7CiAgICAgfQogCkBAIC03NzQsMTMgKzcwMiwxMyBAQCBlbnVtIEZyYW1lTmFtZVBvbGlj
eSB7IFNob3VsZE5vdEluY2x1ZGVGcmFtZU5hbWUsIFNob3VsZEluY2x1ZGVGcmFtZU5hbWUgfTsK
IAogc3RhdGljIHZvaWQgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgRnJhbWVOYW1lUG9saWN5IHNob3Vs
ZEluY2x1ZGVGcmFtZU5hbWUgPSBTaG91bGROb3RJbmNsdWRlRnJhbWVOYW1lKQogewotICAgIGRv
dWJsZSB4ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUoZnJhbWUsICJwYWdlWE9mZnNldCIp
OwotICAgIGRvdWJsZSB5ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUoZnJhbWUsICJwYWdl
WU9mZnNldCIpOworICAgIGRvdWJsZSB4ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5KGZyYW1lLCAi
cGFnZVhPZmZzZXQiKTsKKyAgICBkb3VibGUgeSA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0eShmcmFt
ZSwgInBhZ2VZT2Zmc2V0Iik7CiAgICAgaWYgKGZhYnMoeCkgPD0gMC4wMDAwMDAwMSAmJiBmYWJz
KHkpIDw9IDAuMDAwMDAwMDEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91bGRJbmNs
dWRlRnJhbWVOYW1lKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKKyAgICAgICAgYXV0byBuYW1l
ID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSAnIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCInICIpOwpAQCAtNzk0LDcgKzcyMiw3IEBAIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNj
cm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmlu
CiAKIHN0YXRpYyB2b2lkIGR1bXBEZXNjZW5kYW50RnJhbWVTY3JvbGxQb3NpdGlvbnMoV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBX
S1JldGFpblB0cjxXS0FycmF5UmVmPiBjaGlsZEZyYW1lcyA9IGFkb3B0V0soV0tCdW5kbGVGcmFt
ZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOworICAgIGF1dG8gY2hpbGRGcmFtZXMgPSBhZG9wdFdL
KFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsKICAgICBzaXplX3Qgc2l6ZSA9
IFdLQXJyYXlHZXRTaXplKGNoaWxkRnJhbWVzLmdldCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIHN1YmZyYW1lID0g
c3RhdGljX2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGNoaWxk
RnJhbWVzLmdldCgpLCBpKSk7CkBAIC04MTAsMjggKzczOCwxMCBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRpb25zKFN0cmluZ0J1aWxkZXImIHN0cmlu
Z0J1aWxkZQogICAgIGR1bXBEZXNjZW5kYW50RnJhbWVTY3JvbGxQb3NpdGlvbnMoZnJhbWUsIHN0
cmluZ0J1aWxkZXIpOwogfQogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMo
Y29uc3QgY2hhciogc3RyaW5nKQotewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKLX0KLQogc3RhdGljIGJvb2wgaGFzRG9jdW1lbnRFbGVt
ZW50KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwotICAgIEpT
T2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0
KTsKLQotICAgIEpTVmFsdWVSZWYgZG9jdW1lbnRWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgZ2xvYmFsT2JqZWN0LCB0b0pTKCJkb2N1bWVudCIpLmdldCgpLCAwKTsKLSAgICBp
ZiAoIWRvY3VtZW50VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChK
U1ZhbHVlSXNPYmplY3QoY29udGV4dCwgZG9jdW1lbnRWYWx1ZSkpOwotICAgIEpTT2JqZWN0UmVm
IGRvY3VtZW50ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGRvY3VtZW50VmFsdWUsIDApOwot
Ci0gICAgSlNWYWx1ZVJlZiBkb2N1bWVudEVsZW1lbnRWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkoY29udGV4dCwgZG9jdW1lbnQsIHRvSlMoImRvY3VtZW50RWxlbWVudCIpLmdldCgpLCAwKTsK
LSAgICBpZiAoIWRvY3VtZW50RWxlbWVudFZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBkb2N1bWVudEVsZW1lbnRWYWx1
ZSk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0
KGZyYW1lKTsKKyAgICByZXR1cm4gb2JqZWN0UHJvcGVydHkoY29udGV4dCwgSlNDb250ZXh0R2V0
R2xvYmFsT2JqZWN0KGNvbnRleHQpLCB7ICJkb2N1bWVudCIsICJkb2N1bWVudEVsZW1lbnQiIH0p
OwogfQogCiBzdGF0aWMgdm9pZCBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUs
IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCkBAIC04NTQsMTEgKzc2NCwxMSBAQCBzdGF0aWMgdm9p
ZCBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIGJ1
aWxkZXIpCiAKIHN0YXRpYyB2b2lkIGR1bXBEZXNjZW5kYW50RnJhbWVzVGV4dChXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIFdLUmV0
YWluUHRyPFdLQXJyYXlSZWY+IGNoaWxkRnJhbWVzID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29w
eUNoaWxkRnJhbWVzKGZyYW1lKSk7CisgICAgYXV0byBjaGlsZEZyYW1lcyA9IGFkb3B0V0soV0tC
dW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOwogICAgIHNpemVfdCBzaXplID0gV0tB
cnJheUdldFNpemUoY2hpbGRGcmFtZXMuZ2V0KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgc3ViZnJhbWUgPSBzdGF0
aWNfY2FzdDxXS0J1bmRsZUZyYW1lUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoY2hpbGRGcmFt
ZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1YmZyYW1l
TmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKHN1YmZyYW1lKSk7CisgICAgICAg
IGF1dG8gc3ViZnJhbWVOYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoc3ViZnJh
bWUpKTsKIAogICAgICAgICAvLyBEdW1wUmVuZGVyVHJlZSBpZ25vcmVzIGVtcHR5IGZyYW1lcywg
c28gZG8gdGhlIHNhbWUgdGhpbmcgaGVyZS4KICAgICAgICAgaWYgKCFoYXNEb2N1bWVudEVsZW1l
bnQoc3ViZnJhbWUpKQpAQCAtODg0LDkgKzc5NCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkdW1wQWxsRnJhbWVzVGV4dChTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBET01Bc1dlYkFyY2hpdmUoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKICNpZiBVU0UoQ0YpICYmICFQ
TEFURk9STShXSU5fQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCi0gICAgV0tSZXRhaW5QdHI8V0tE
YXRhUmVmPiB3a0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5V2ViQXJjaGl2ZShmcmFt
ZSkpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNpemUod2tEYXRh
LmdldCgpKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZTdHJpbmcgPSBhZG9wdENG
KFdlYkNvcmVUZXN0U3VwcG9ydDo6Y3JlYXRlWE1MU3RyaW5nRnJvbVdlYkFyY2hpdmVEYXRhKGNm
RGF0YS5nZXQoKSkpOworICAgIGF1dG8gd2tEYXRhID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29w
eVdlYkFyY2hpdmUoZnJhbWUpKTsKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlKDAsIFdLRGF0YUdldEJ5dGVzKHdrRGF0YS5nZXQoKSksIFdLRGF0YUdldFNpemUod2tEYXRh
LmdldCgpKSkpOworICAgIGF1dG8gY2ZTdHJpbmcgPSBhZG9wdENGKFdlYkNvcmVUZXN0U3VwcG9y
dDo6Y3JlYXRlWE1MU3RyaW5nRnJvbVdlYkFyY2hpdmVEYXRhKGNmRGF0YS5nZXQoKSkpOwogICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNmU3RyaW5nLmdldCgpKTsKICNlbmRpZgogfQpAQCAtOTAy
LDkgKzgxMiw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKCkKICAgICBXS0J1bmRs
ZVBhZ2VGbHVzaFBlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0ZShtX3BhZ2UpOwogCiAgICAgV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOwotICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmxSZWYgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5
VVJMKGZyYW1lKSk7CisgICAgYXV0byB1cmxSZWYgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5
VVJMKGZyYW1lKSk7CiAgICAgU3RyaW5nIHVybCA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxD
b3B5U3RyaW5nKHVybFJlZi5nZXQoKSkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWltZVR5cGUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JSZXNvdXJjZVdp
dGhVUkwoZnJhbWUsIHVybFJlZi5nZXQoKSkpOworICAgIGF1dG8gbWltZVR5cGUgPSBhZG9wdFdL
KFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JSZXNvdXJjZVdpdGhVUkwoZnJhbWUsIHVybFJl
Zi5nZXQoKSkpOwogICAgIGlmICh1cmwuZmluZCgiZHVtcEFzVGV4dC8iKSAhPSBub3RGb3VuZCB8
fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1pbWVUeXBlLmdldCgpLCAidGV4dC9wbGFp
biIpKQogICAgICAgICBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmR1bXBBc1RleHQoZmFs
c2UpOwogCkBAIC0xMDE4LDIxICs5MjgsMTkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRp
ZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tCdW5kbGUKICAg
ICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNj
cmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQpOwotICAgIEpTT2JqZWN0UmVmIHdpbmRv
dyA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KTsKKyAgICBhdXRvIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQp
OwogCiAgICAgaWYgKFdLQnVuZGxlU2NyaXB0V29ybGROb3JtYWxXb3JsZCgpICE9IHdvcmxkKSB7
Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93LCB0b0pTKCJfX3dv
cmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgVGVzdFJ1bm5lcjo6d29y
bGRJREZvcldvcmxkKHdvcmxkKSksIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOwor
ICAgICAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAiX193b3JsZElEIiwgVGVz
dFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKHdvcmxkKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2Vw
dGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuZ2NDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmpl
Y3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5ldmVu
dFNlbmRpbmdDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAm
ZXhjZXB0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS50ZXh0SW5wdXRDb250cm9sbGVyKCktPm1h
a2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKKyAgICBpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgaW5q
ZWN0ZWRCdW5kbGUuZ2NDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7Cisg
ICAgaW5qZWN0ZWRCdW5kbGUuZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLnRleHRJbnB1dENvbnRyb2xsZXIoKS0+
bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCi0gICAg
aW5qZWN0ZWRCdW5kbGUuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOworICAgIGluamVjdGVkQnVuZGxlLmFjY2Vz
c2liaWxpdHlDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CiAjZW5kaWYK
IAogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQp
OwpAQCAtMTEzNiw3ICsxMDQ0LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEluaXRp
YXRlTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmQKICAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVx
dWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVl
c3RDb3B5VVJMKHJlcXVlc3QpKTsKICAgICBhc3NpZ25lZFVybHNDYWNoZSgpLmFkZChpZGVudGlm
aWVyLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSkpOwogfQogCkBAIC0xMTc1
LDE2ICsxMDgzLDE2IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxT
ZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgaWYgKGluamVjdGVk
QnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndp
bGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VSTFJlc3Bv
bnNlQ29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8gcmVkaXJlY3RVUkwgPSBhZG9wdFdLKFdL
VVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLmlz
VGVzdFJ1bm5pbmcoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVx
dWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCgpICYmIHJlZGlyZWN0VVJMKSB7CiAgICAgICAgIGlu
amVjdGVkQnVuZGxlLm91dHB1dFRleHQoIlJldHVybmluZyBudWxsIGZvciB0aGlzIHJlZGlyZWN0
XG4iKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgV0tSZXRhaW5QdHI8
V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3RO
YW1lKHVybC5nZXQoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY2hlbWUgPSBh
ZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSk7
CisgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwor
ICAgIGF1dG8gaG9zdCA9IGFkb3B0V0soV0tVUkxDb3B5SG9zdE5hbWUodXJsLmdldCgpKSk7Cisg
ICAgYXV0byBzY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkpKTsKKyAg
ICBhdXRvIHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOwog
ICAgIGlmIChob3N0ICYmICFXS1N0cmluZ0lzRW1wdHkoaG9zdC5nZXQoKSkKICAgICAgICAgJiYg
aXNIVFRQT3JIVFRQU1NjaGVtZShzY2hlbWUuZ2V0KCkpCiAgICAgICAgICYmICFXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKGhvc3QuZ2V0KCksICIyNTUuMjU1LjI1NS4yNTUiKSAvLyBVc2Vk
IGluIHNvbWUgdGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJhY2sgYW4gZXJyb3IuCkBAIC0xMTky
LDEyICsxMTAwLDEyIEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxT
ZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgICAgIGJvb2wgbWFp
bkZyYW1lSXNFeHRlcm5hbCA9IGZhbHNlOwogICAgICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUuaXNU
ZXN0UnVubmluZygpKSB7CiAgICAgICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOwotICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tVUkxSZWY+IG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwo
bWFpbkZyYW1lKSk7CisgICAgICAgICAgICBhdXRvIG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tC
dW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7CiAgICAgICAgICAgICBpZiAoIW1haW5GcmFt
ZVVSTCB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3Ry
aW5nKG1haW5GcmFtZVVSTC5nZXQoKSkpLmdldCgpLCAiYWJvdXQ6YmxhbmsiKSkKICAgICAgICAg
ICAgICAgICBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9u
YWxVUkwobWFpbkZyYW1lKSk7CiAKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtYWluRnJhbWVIb3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFtZShtYWluRnJhbWVVUkwu
Z2V0KCkpKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtYWluRnJhbWVT
Y2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShtYWluRnJhbWVVUkwuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGF1dG8gbWFpbkZyYW1lSG9zdCA9IGFkb3B0V0soV0tVUkxDb3B5SG9zdE5hbWUo
bWFpbkZyYW1lVVJMLmdldCgpKSk7CisgICAgICAgICAgICBhdXRvIG1haW5GcmFtZVNjaGVtZSA9
IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKG1haW5GcmFtZVVSTC5nZXQoKSkpOwogICAgICAgICAg
ICAgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGlzSFRUUE9ySFRUUFNTY2hlbWUobWFpbkZyYW1lU2No
ZW1lLmdldCgpKSAmJiAhaXNMb2NhbEhvc3QobWFpbkZyYW1lSG9zdC5nZXQoKSk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKCFtYWluRnJhbWVJc0V4dGVybmFsICYmICFpc0FsbG93ZWRIb3N0KGhv
c3QuZ2V0KCkpKSB7CkBAIC0xMjE0LDcgKzExMjIsNyBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0
ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFn
ZQogICAgICAgICBTdHJpbmcgYm9keSA9IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+d2ls
bFNlbmRSZXF1ZXN0SFRUUEJvZHkoKTsKICAgICAgICAgaWYgKCFib2R5LmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgQ1N0cmluZyBjQm9keSA9IGJvZHkudXRmOCgpOwotICAgICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tEYXRhUmVmPiBib2R5ID0gYWRvcHRXSyhXS0RhdGFDcmVhdGUocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY0JvZHkuZGF0YSgpKSwgY0JvZHkubGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tEYXRhQ3JlYXRlKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGNCb2R5LmRhdGEoKSksIGNCb2R5Lmxl
bmd0aCgpKSk7CiAgICAgICAgICAgICByZXR1cm4gV0tVUkxSZXF1ZXN0Q29weVNldHRpbmdIVFRQ
Qm9keShyZXF1ZXN0LCBib2R5LmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNDIsOSAr
MTE1MCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JS
ZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRs
ZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdL
KFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQodXJs
LmdldCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlU3RyaW5nID0g
YWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHJlc3BvbnNlKSk7CisgICAgYXV0byB1
cmwgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CisgICAgYXV0byB1
cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkp
OworICAgIGF1dG8gbWltZVR5cGVTdHJpbmcgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlN
RVR5cGUocmVzcG9uc2UpKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKQEAgLTEzNTAs
MTAgKzEyNTgsOCBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
IC0gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblxuIik7CiAgICAgICAgIGR1bXBSZXF1
ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCwgc3RyaW5nQnVpbGRl
cik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIG1haW4gZnJhbWUg
LSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV0tCdW5kbGVGcmFtZUlzTWFpbkZy
YW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXRTaG91bGRPcGVuRXh0
ZXJuYWxVUkxzKG5hdmlnYXRpb25BY3Rpb24pID8gInllcyIgOiAibm8iKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIiBpcyBtYWluIGZyYW1lIC0gIiwgV0tCdW5kbGVGcmFtZUlzTWFp
bkZyYW1lKGZyYW1lKSA/ICJ5ZXMiIDogIm5vIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5IC0gIiwgV0tCdW5kbGVOYXZpZ2F0aW9u
QWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9uKSA/ICJ5ZXMi
IDogIm5vIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgICAgICBp
bmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAg
fQpAQCAtMTM2MSwyNCArMTI2NywyMSBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgIGlm
ICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5pc1BvbGljeURlbGVnYXRlRW5hYmxlZCgp
KQogICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uUGFzc1Rocm91Z2g7CiAK
LSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5
VVJMKHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU2NoZW1lID0g
YWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CisgICAgYXV0byB1cmwgPSBhZG9w
dFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1dG8gdXJsU2NoZW1lID0g
YWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CiAKICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJQb2xpY3kg
ZGVsZWdhdGU6IGF0dGVtcHQgdG8gbG9hZCAiKTsKLSAgICBpZiAoaXNMb2NhbEZpbGVTY2hlbWUo
dXJsU2NoZW1lLmdldCgpKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmls
ZW5hbWUgPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhmaWxlbmFtZSkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBh
ZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgfQorICAgIGlmIChpc0xvY2Fs
RmlsZVNjaGVtZSh1cmxTY2hlbWUuZ2V0KCkpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQo
KSkpKSk7CisgICAgZWxzZQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
ZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKSkpOwogICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwnIik7CiAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0J1bmRs
ZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9uKSkpKTsK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwnIik7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmPiBoaXRUZXN0UmVzdWx0UmVmID0gYWRvcHRXSyhXS0J1
bmRsZU5hdmlnYXRpb25BY3Rpb25Db3B5SGl0VGVzdFJlc3VsdChuYXZpZ2F0aW9uQWN0aW9uKSk7
CisgICAgYXV0byBoaXRUZXN0UmVzdWx0UmVmID0gYWRvcHRXSyhXS0J1bmRsZU5hdmlnYXRpb25B
Y3Rpb25Db3B5SGl0VGVzdFJlc3VsdChuYXZpZ2F0aW9uQWN0aW9uKSk7CiAgICAgaWYgKGhpdFRl
c3RSZXN1bHRSZWYpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVOb2RlSGFuZGxlUmVm
PiBub2RlSGFuZGxlUmVmID0gYWRvcHRXSyhXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5Tm9kZUhh
bmRsZShoaXRUZXN0UmVzdWx0UmVmLmdldCgpKSk7CisgICAgICAgIGF1dG8gbm9kZUhhbmRsZVJl
ZiA9IGFkb3B0V0soV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJl
c3VsdFJlZi5nZXQoKSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBv
cmlnaW5hdGluZyBmcm9tICIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0
aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGVIYW5kbGVSZWYuZ2V0KCkpKTsKICAgICB9CkBA
IC0xNDAwLDEyICsxMzAzLDcgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoV0tCdW5kbGVQYWcKIHsKICAgICBhdXRv
JiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBpZiAo
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpICYmIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSAmJiBXS1VSTFJlc3BvbnNlSXNBdHRhY2htZW50
KHJlc3BvbnNlKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmaWxlbmFtZSA9IGFkb3B0V0soV0tVUkxSZXNw
b25zZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShyZXNwb25zZSkpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIlBvbGljeSBkZWxlZ2F0ZTogcmVzb3VyY2UgaXMgYW4gYXR0YWNo
bWVudCwgc3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyhmaWxlbmFtZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIlwnXG4iKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWFrZVN0cmluZygiUG9saWN5IGRlbGVnYXRlOiBy
ZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIiwgdG9XVEZT
dHJpbmcoYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3BvbnNl
KSkpLCAiXCdcbiIpKTsKICAgICB9CiAKICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0
aW9uUGFzc1Rocm91Z2g7CkBAIC0xNDcxLDEwICsxMzY5LDEwIEBAIHN0YXRpYyBXVEY6OlN0cmlu
ZyBhZGRMZWFkaW5nU3BhY2VTdHJpcFRyYWlsaW5nU3BhY2VzQWRkTmV3bGluZShjb25zdCBXVEY6
OlN0cmluCiAKIHN0YXRpYyBXVEY6OlN0cmluZyBsYXN0RmlsZVVSTFBhdGhDb21wb25lbnQoY29u
c3QgV1RGOjpTdHJpbmcmIHBhdGgpCiB7Ci0gICAgc2l6ZV90IHBvcyA9IHBhdGguZmluZCgiZmls
ZTovLyIpOworICAgIGF1dG8gcG9zID0gcGF0aC5maW5kKCJmaWxlOi8vIik7CiAgICAgQVNTRVJU
KFdURjo6bm90Rm91bmQgIT0gcG9zKTsKIAotICAgIFdURjo6U3RyaW5nIHRtcFBhdGggPSBwYXRo
LnN1YnN0cmluZyhwb3MgKyA3KTsKKyAgICBhdXRvIHRtcFBhdGggPSBwYXRoLnN1YnN0cmluZyhw
b3MgKyA3KTsKICAgICBpZiAodG1wUGF0aC5sZW5ndGgoKSA8IDIpIC8vIEtlZXAgdGhlIGxvbmUg
c2xhc2ggdG8gYXZvaWQgZW1wdHkgb3V0cHV0LgogICAgICAgICByZXR1cm4gdG1wUGF0aDsKIApA
QCAtMTUyMSwxMSArMTQxOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3Rh
dHVzYmFyVGV4dChXS1N0cmluZ1JlZiBzdGF0dXNiYXJUZXh0KQogICAgIGlmICghaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3Rh
dHVzVGV4dDoiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0dXNi
YXJUZXh0KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgaW5qZWN0ZWRC
dW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGluamVjdGVk
QnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNL
OiBzZXRTdGF0dXNUZXh0OiIsIHRvV1RGU3RyaW5nKHN0YXR1c2JhclRleHQpLCAnXG4nKSk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdEFsZXJ0KFdLU3Ry
aW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYpCkBAIC0xNTU5LDE1ICsxNDUzLDggQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlYWNoQXBwbGljYXRpb25DYWNoZU9yaWdpblF1
b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYKICAgICAgICAgLy8gUm91bmRpbmcgdXAgb3IgZG93biBk
b2VzIG5vdCByZWFsbHkgbWF0dGVyIGZvciB0aGVzZSB0ZXN0cy4gSXQncwogICAgICAgICAvLyBz
dWZmaWNpZW50IHRvIGp1c3QgZ2V0IGEgcmFuZ2Ugb2YgMTAwMDAgdG8gZGV0ZXJtaW5lIGlmIHdl
IHdlcmUKICAgICAgICAgLy8gYWJvdmUgb3IgYmVsb3cgYSB0aHJlc2hvbGQuCi0gICAgICAgIGlu
dDY0X3QgdHJ1bmNhdGVkU3BhY2VOZWVkZWQgPSAodG90YWxCeXRlc05lZWRlZCAvIDEwMDAwKSAq
IDEwMDAwOwotCi0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBBUFBMSUNBVElPTiBDQUNI
RSBDQUxMQkFDSzogZXhjZWVkZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFGb3JTZWN1cml0
eU9yaWdpbjoiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5U
b1N0cihvcmlnaW4pKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG90
YWxTcGFjZU5lZWRlZDp+Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHRy
dW5jYXRlZFNwYWNlTmVlZGVkKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpKTsKKyAgICAgICAgYXV0byB0cnVuY2F0ZWRTcGFjZU5lZWRlZCA9ICh0b3RhbEJ5dGVzTmVl
ZGVkIC8gMTAwMDApICogMTAwMDA7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQo
bWFrZVN0cmluZygiVUkgREVMRUdBVEUgQVBQTElDQVRJT04gQ0FDSEUgQ0FMTEJBQ0s6IGV4Y2Vl
ZGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iiwgc3RyaW5n
KG9yaWdpbiksICIgdG90YWxTcGFjZU5lZWRlZDp+IiwgdHJ1bmNhdGVkU3BhY2VOZWVkZWQsICdc
bicpKTsKICAgICB9CiAKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGREaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkpCkBAIC0xNTgwLDE1
ICsxNDY3LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlYWNoQXBwbGljYXRpb25D
YWNoZU9yaWdpblF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYKIHVpbnQ2NF90IEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdp
biwgV0tTdHJpbmdSZWYgZGF0YWJhc2VOYW1lLCBXS1N0cmluZ1JlZiBkYXRhYmFzZURpc3BsYXlO
YW1lLCB1aW50NjRfdCBjdXJyZW50UXVvdGFCeXRlcywgdWludDY0X3QgY3VycmVudE9yaWdpblVz
YWdlQnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnREYXRhYmFzZVVzYWdlQnl0ZXMsIHVpbnQ2NF90IGV4
cGVjdGVkVXNhZ2VCeXRlcykKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkg
REVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VRdW90YUZvclNlY3Vy
aXR5T3JpZ2luOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZWN1cml0eU9yaWdp
blRvU3RyKG9yaWdpbikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBk
YXRhYmFzZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZGF0
YWJhc2VOYW1lKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAg
ICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Ci0g
ICAgfQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBEYXRh
YmFzZUNhbGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VT
dHJpbmcoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVv
dGFGb3JTZWN1cml0eU9yaWdpbjoiLCBzdHJpbmcob3JpZ2luKSwgIiBkYXRhYmFzZToiLCB0b1dU
RlN0cmluZyhkYXRhYmFzZU5hbWUpLCAnXG4nKSk7CiAKICAgICB1aW50NjRfdCBkZWZhdWx0UXVv
dGEgPSA1ICogMTAyNCAqIDEwMjQ7CiAgICAgZG91YmxlIHRlc3REZWZhdWx0UXVvdGEgPSBpbmpl
Y3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmRhdGFiYXNlRGVmYXVsdFF1b3RhKCk7CkBAIC0xNjAx
LDEyICsxNDgxLDcgQEAgdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRh
YmFzZVF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luLAogICAgIGlmIChtYXhRdW90YSA+
PSAwKSB7CiAgICAgICAgIGlmIChkZWZhdWx0UXVvdGEgPCBleHBlY3RlZFVzYWdlQnl0ZXMgJiYg
ZXhwZWN0ZWRVc2FnZUJ5dGVzIDw9IG1heFF1b3RhKSB7CiAgICAgICAgICAgICBuZXdRdW90YSA9
IGV4cGVjdGVkVXNhZ2VCeXRlczsKLQotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxF
R0FURSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVhc2VkIHF1b3RhIHRvICIpOwotICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIobmV3UXVvdGEpOwotICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBpbmplY3RlZEJ1
bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNL
OiBpbmNyZWFzZWQgcXVvdGEgdG8gIiwgbmV3UXVvdGEsICdcbicpKTsKICAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gbmV3UXVvdGE7CkBAIC0xNjc1LDEzICsxNTUwLDggQEAgYm9vbCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdGluZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVm
IHJhbmdlKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcg
REVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRC
dW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBp
ZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJ
TkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6IiwgcmFuZ2VUb1N0ciht
X3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOwogICAgIHJldHVybiBpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCkBAIC0xNjkx
LDEzICsxNTYxLDggQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEVuZEVkaXRpbmco
V0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlz
VGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAg
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5n
ZToiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1f
d29ybGQuZ2V0KCksIHJhbmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7Ci0gICAgfQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRl
eHQobWFrZVN0cmluZygiRURJVElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFu
Z2U6IiwgcmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSwgJ1xuJykpOwog
ICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGlu
ZygpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcAppbmRleCBhNjI1NTg5NzI3YmM3MWI3NDFlY2YyNTY1MTUyMWVmYjRm
NDk5N2YzLi43MWNjMDE4ZjQxMjYwMjM1ZTllNDdhYjk0YTA0NzNiNGYzNjFjMTEwIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJU
ZXN0UnVubmVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVk
ZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKICNp
bmNsdWRlICJKU1Rlc3RSdW5uZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNp
bmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ1Rlc3RSdW5uZXJVdGlscy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CkBAIC02OSw3ICs2OSw3IEBAIFJlZjxU
ZXN0UnVubmVyPiBUZXN0UnVubmVyOjpjcmVhdGUoKQogfQogCiBUZXN0UnVubmVyOjpUZXN0UnVu
bmVyKCkKLSAgICA6IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbihhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCIiKSkpCisgICAgOiBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24o
dG9XSygiIikpCiB7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiB9CkBAIC04MywzNCArODMs
MTAyIEBAIEpTQ2xhc3NSZWYgVGVzdFJ1bm5lcjo6d3JhcHBlckNsYXNzKCkKICAgICByZXR1cm4g
SlNUZXN0UnVubmVyOjp0ZXN0UnVubmVyQ2xhc3MoKTsKIH0KIAorc3RhdGljIFdLQnVuZGxlUGFn
ZVJlZiBwYWdlKCkKK3sKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpOworfQorCitzdGF0aWMgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUoKQor
eworICAgIHJldHVybiBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSgpKTsKK30KKworc3Rh
dGljIEpTQ29udGV4dFJlZiBtYWluSlNDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSgpKTsKK30KKwogdm9pZCBUZXN0UnVu
bmVyOjpkaXNwbGF5KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZVBhZ2VGb3JjZVJl
cGFpbnQocGFnZSk7CisgICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KHBhZ2UoKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheUFuZFRyYWNrUmVwYWludHMoKQogewotICAgIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpOworICAgIGF1dG8gcGFnZSA9IFdUUjo6cGFnZSgpOwogICAgIFdLQnVuZGxlUGFnZUZvcmNl
UmVwYWludChwYWdlKTsKICAgICBXS0J1bmRsZVBhZ2VTZXRUcmFja3NSZXBhaW50cyhwYWdlLCB0
cnVlKTsKICAgICBXS0J1bmRsZVBhZ2VSZXNldFRyYWNrZWRSZXBhaW50cyhwYWdlKTsKIH0KIAor
c3RhdGljIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB0b1dLKGRvdWJsZSB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpOworfQorCitzdGF0aWMgV0tS
ZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBjcmVhdGVXS0RpY3Rpb25hcnkoc3RkOjppbml0aWFs
aXplcl9saXN0PHN0ZDo6cGFpcjxjb25zdCBjaGFyKiwgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4+
IHBhaXJzKQoreworICAgIGF1dG8gc2l6ZSA9IHBhaXJzLnNpemUoKTsKKyAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IGtleXMoc2l6ZSk7CisgICAgVmVjdG9yPFdLVHlwZVJlZj4gdmFsdWVzKHNpemUp
OworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IHN0cmluZ3Moc2l6ZSk7Cisg
ICAgZm9yIChhdXRvJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgYXV0byBrZXkgPSB0b1dLKHBh
aXIuZmlyc3QpOworICAgICAgICBrZXlzLmFwcGVuZChrZXkuZ2V0KCkpOworICAgICAgICB2YWx1
ZXMuYXBwZW5kKHBhaXIuc2Vjb25kLmdldCgpKTsKKyAgICAgICAgc3RyaW5ncy5hcHBlbmQoV1RG
TW92ZShrZXkpKTsKKyAgICB9CisgICAgcmV0dXJuIGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRl
KGtleXMuZGF0YSgpLCB2YWx1ZXMuZGF0YSgpLCBzaXplKSk7Cit9CisKK3N0YXRpYyBXS1JldGFp
blB0cjxXS1R5cGVSZWY+IHBvc3RTeW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0dXJuVmFsdWUoY29u
c3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICBXS1R5cGVS
ZWYgcmF3UmV0dXJuVmFsdWUgPSBudWxscHRyOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSku
Z2V0KCksIHZhbHVlLCAmcmF3UmV0dXJuVmFsdWUpOworICAgIHJldHVybiBhZG9wdFdLKHJhd1Jl
dHVyblZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVy
bmluZ0Jvb2xlYW4oY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikK
K3sKKyAgICByZXR1cm4gYm9vbGVhblZhbHVlKHBvc3RTeW5jaHJvbm91c01lc3NhZ2VXaXRoUmV0
dXJuVmFsdWUobmFtZSwgdmFsdWUpKTsKK30KKworc3RhdGljIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRoUmV0dXJuVmFsdWUoY29uc3QgY2hhciog
bmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICBXS1R5cGVSZWYgcmF3UmV0
dXJuVmFsdWUgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKHBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUsICZyYXdSZXR1cm5W
YWx1ZSk7CisgICAgcmV0dXJuIGFkb3B0V0socmF3UmV0dXJuVmFsdWUpOworfQorCitzdGF0aWMg
Ym9vbCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oY29uc3QgY2hh
ciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICByZXR1cm4gYm9vbGVh
blZhbHVlKHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5hbWUsIHZh
bHVlKSk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ1VJbnQ2NChjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBudWxscHRy
KQoreworICAgIHJldHVybiB1aW50NjRWYWx1ZShwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVdp
dGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQorCitzdGF0aWMgdWludDY0X3QgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2NChjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IHJldHVybiB1aW50NjRWYWx1ZShwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVl
KG5hbWUpKTsKK30KKworc3RhdGljIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0IGNoYXIq
IG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgYXV0byYgYnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RS
dW5uZXIoYnVuZGxlLmJ1bmRsZSgpLCBidW5kbGUucGFnZUdyb3VwKCksIHRvV0sobmFtZSkuZ2V0
KCksIHZhbHVlKTsKK30KKwogYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wUGl4ZWxzKCkgY29u
c3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXREdW1wUGl4ZWxzIikpOwotICAgIFdL
VHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChy
ZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVh
bkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSku
Z2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVh
bigiR2V0RHVtcFBpeGVscyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldER1bXBQaXhlbHMo
Ym9vbCBkdW1wUGl4ZWxzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldER1bXBQaXhl
bHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGR1bXBQaXhlbHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlNldER1bXBQaXhlbHMiLCBkdW1wUGl4ZWxzKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpkdW1wQXNUZXh0KGJvb2wgZHVtcFBpeGVscykKQEAgLTEyMiwxOCArMTkwLDEyIEBA
IHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dChib29sIGR1bXBQaXhlbHMpCiAgICAgCiBXaGF0
VG9EdW1wIFRlc3RSdW5uZXI6OndoYXRUb0R1bXAoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkdldFdoYXRUb0R1bXAiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBu
dWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0
dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLVUludDY0
R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXaGF0VG9EdW1wPihXS1VJbnQ2
NEdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVybkRhdGEpKS5n
ZXQoKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXaGF0VG9EdW1wPihwb3N0U3luY2hyb25v
dXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KCJHZXRXaGF0VG9EdW1wIikpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFdoYXRUb0R1bXAoV2hhdFRvRHVtcCB3aGF0VG9EdW1wKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFdoYXRUb0R1bXAiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzdGF0aWNfY2Fz
dDx1aW50NjRfdD4od2hhdFRvRHVtcCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlNldFdoYXRUb0R1bXAiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4od2hhdFRvRHVtcCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5h
YmxlZCwgYm9vbCBwZXJtaXNzaXZlKQpAQCAtMTU4LDI2ICsyMjAsMTkgQEAgdm9pZCBUZXN0UnVu
bmVyOjp3YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCkKIAogdm9pZCBUZXN0UnVubmVyOjp3YWl0
VW50aWxEb25lKCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RS
dW5uaW5nKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5pc1Rlc3RSdW5uaW5nKCkpOwogCiAgICAgc2V0V2FpdFVudGlsRG9uZSh0cnVlKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VW50aWxEb25lKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0V2FpdFVudGlsRG9uZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUp
KTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFdhaXRVbnRpbERvbmUi
LCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkV2FpdFVudGlsRG9uZSgpIGNv
bnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldFdhaXRVbnRpbERvbmUiKSk7Ci0g
ICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nz
YWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5
cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdL
Qm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5E
YXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5n
Qm9vbGVhbigiR2V0V2FpdFVudGlsRG9uZSIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Om5vdGlm
eURvbmUoKQpAQCAtMjEwLDE4ICsyNjUsMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpmb3JjZUltbWVk
aWF0ZUNvbXBsZXRpb24oKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZER1bXBGcmFtZUxv
YWRDYWxsYmFja3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIiwg
dmFsdWUpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFj
a3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXREdW1wRnJhbWVMb2FkQ2FsbGJh
Y2tzIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
IHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4oIkdldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKTsKIH0KIAogdW5z
aWduZWQgVGVzdFJ1bm5lcjo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSBjb25zdApA
QCAtMjMxLDE4ICsyODAsMTQgQEAgdW5zaWduZWQgVGVzdFJ1bm5lcjo6aW1hZ2VDb3VudEluR2Vu
ZXJhbFBhc3RlYm9hcmQoKSBjb25zdAogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQo
SlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3VyY2VXSyA9IHRvV0soc291cmNlKTsKLQot
ICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTY3JpcHQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBzb3VyY2VXSy5nZXQoKSwKKyAgICBXS0J1bmRsZVBhZ2VBZGRVc2Vy
U2NyaXB0KHBhZ2UoKSwgdG9XSyhzb3VyY2UpLmdldCgpLAogICAgICAgICAocnVuQXRTdGFydCA/
IGtXS0luamVjdEF0RG9jdW1lbnRTdGFydCA6IGtXS0luamVjdEF0RG9jdW1lbnRFbmQpLAogICAg
ICAgICAoYWxsRnJhbWVzID8ga1dLSW5qZWN0SW5BbGxGcmFtZXMgOiBrV0tJbmplY3RJblRvcEZy
YW1lT25seSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3Ry
aW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHNvdXJjZVdLID0gdG9XSyhzb3VyY2UpOwotCi0gICAgV0tCdW5kbGVQYWdlQWRkVXNl
clN0eWxlU2hlZXQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBz
b3VyY2VXSy5nZXQoKSwKKyAgICBXS0J1bmRsZVBhZ2VBZGRVc2VyU3R5bGVTaGVldChwYWdlKCks
IHRvV0soc291cmNlKS5nZXQoKSwKICAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVjdEluQWxs
RnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsKIH0KIApAQCAtMjUzLDI5ICsyOTgs
MTcgQEAgdm9pZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgpCiAKIHZvaWQgVGVzdFJ1bm5l
cjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgc2hvd1VJLCBKU1N0
cmluZ1JlZiB2YWx1ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdl
dCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlRXhlY3V0ZUVkaXRpbmdD
b21tYW5kKHBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyh2YWx1ZSkuZ2V0KCkpOwogfQog
CiBzdGF0aWMgT3B0aW9uYWw8V0tGaW5kT3B0aW9ucz4gZmluZE9wdGlvbnNGcm9tQXJyYXkoSlNW
YWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+
cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU09i
amVjdFJlZiBvcHRpb25zQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3B0aW9uc0Fy
cmF5QXNWYWx1ZSwgMCk7Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCks
IDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQorICAgIGF1dG8gY29udGV4dCA9IG1haW5KU0Nv
bnRleHQoKTsKKyAgICBhdXRvIG9wdGlvbnNBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0
LCBvcHRpb25zQXJyYXlBc1ZhbHVlLCBudWxscHRyKTsKKyAgICBhdXRvIGxlbmd0aCA9IGFycmF5
TGVuZ3RoKGNvbnRleHQsIG9wdGlvbnNBcnJheSk7CiAgICAgV0tGaW5kT3B0aW9ucyBvcHRpb25z
ID0gMDsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApOwotICAgICAgICBp
ZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBhdXRvIG9wdGlvbk5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIHZhbHVlLCAwKSk7Ci0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgYXV0byBvcHRpb25OYW1lID0gY3JlYXRlSlNTdHJpbmcoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBp
LCAwKSk7CiAgICAgICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5h
bWUuZ2V0KCksICJDYXNlSW5zZW5zaXRpdmUiKSkKICAgICAgICAgICAgIG9wdGlvbnMgfD0ga1dL
RmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7CiAgICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkF0V29yZFN0YXJ0cyIpKQpAQCAt
Mjk2LDcgKzMyOSw3IEBAIHN0YXRpYyBPcHRpb25hbDxXS0ZpbmRPcHRpb25zPiBmaW5kT3B0aW9u
c0Zyb21BcnJheShKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFzVmFsCiBib29sIFRlc3RSdW5uZXI6
OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFz
VmFsdWUpCiB7CiAgICAgaWYgKGF1dG8gb3B0aW9ucyA9IGZpbmRPcHRpb25zRnJvbUFycmF5KG9w
dGlvbnNBcnJheUFzVmFsdWUpKQotICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmluZFN0cmlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sodGFyZ2V0
KS5nZXQoKSwgKm9wdGlvbnMpOworICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmluZFN0cmlu
ZyhwYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMpOwogCiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMzA0LDI4ICszMzcsMjMgQEAgYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5n
KEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogdm9p
ZCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nTWF0Y2hlc0luUGFnZShKU1N0cmluZ1JlZiB0YXJnZXQs
IEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHsKICAgICBpZiAoYXV0byBvcHRpb25z
ID0gZmluZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9uc0FycmF5QXNWYWx1ZSkpCi0gICAgICAgIHJl
dHVybiBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nTWF0Y2hlcyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMpOworICAg
ICAgICBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nTWF0Y2hlcyhwYWdlKCksIHRvV0sodGFyZ2V0KS5n
ZXQoKSwgKm9wdGlvbnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hl
c0F0SW5kaWNlcyhKU1ZhbHVlUmVmIG1hdGNoSW5kaWNlc0FzVmFsdWUsIEpTU3RyaW5nUmVmIHJl
cGxhY2VtZW50VGV4dCwgYm9vbCBzZWxlY3Rpb25Pbmx5KQogewogICAgIGF1dG8mIGJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBhdXRvIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShidW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIGF1dG8gY29u
dGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAg
IGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAg
ICAgYXV0byBtYXRjaEluZGljZXNPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgbWF0
Y2hJbmRpY2VzQXNWYWx1ZSwgMCk7Ci0gICAgYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0
UHJvcGVydHkoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0LCBsZW5ndGhQcm9wZXJ0eU5hbWUu
Z2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVl
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4
dCwgbWF0Y2hJbmRpY2VzT2JqZWN0KTsKIAogICAgIGF1dG8gaW5kaWNlcyA9IGFkb3B0V0soV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG1hdGNoSW5kaWNlc09iamVjdCwgaSwg
MCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
IGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBtYXRjaElu
ZGljZXNPYmplY3QsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFsdWVJc051bWJlcihj
b250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIGlu
ZGV4ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzdGQ6OnJvdW5kKEpTVmFsdWVUb051bWJlcihj
b250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpKSk7CisgICAgICAgIGF1dG8gaW5kZXggPSBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikp
KTsKICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oaW5kaWNlcy5nZXQoKSwgaW5kZXguZ2V0KCkp
OwogICAgIH0KICAgICBXS0J1bmRsZVBhZ2VSZXBsYWNlU3RyaW5nTWF0Y2hlcyhidW5kbGUucGFn
ZSgpLT5wYWdlKCksIGluZGljZXMuZ2V0KCksIHRvV0socmVwbGFjZW1lbnRUZXh0KS5nZXQoKSwg
c2VsZWN0aW9uT25seSk7CkBAIC0zMzQsMTEgKzM2Miw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cmVw
bGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKEpTVmFsdWVSZWYgbWF0Y2hJbmRpY2VzQXNWYWx1ZSwg
SlNTCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKICAgICBXS0J1bmRs
ZUNsZWFyQWxsRGF0YWJhc2VzKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoIkRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMiLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1b3RhKQpAQCAtMzQ4LDI5ICszNzIsMjcg
QEAgdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1b3RhKQogCiB2
b2lkIFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN5bmNMb2NhbFN0b3JhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUpKTsKLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN5bmNMb2NhbFN0b3JhZ2UiLCB0cnVlKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKIHsKLSAgICBX
S0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2Fj
aGUocGFnZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVG
b3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLQnVuZGxlUGFnZUNsZWFyQXBw
bGljYXRpb25DYWNoZUZvck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlQ2xlYXJBcHBs
aWNhdGlvbkNhY2hlRm9yT3JpZ2luKHBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVpbnQ2NF90IHNpemUpCiB7
Ci0gICAgV0tCdW5kbGVQYWdlU2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHNpemUpOworICAgIFdLQnVuZGxlUGFnZVNldEFw
cENhY2hlTWF4aW11bVNpemUocGFnZSgpLCBzaXplKTsKIH0KIAogbG9uZyBsb25nIFRlc3RSdW5u
ZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2lu
KQogewotICAgIHJldHVybiBXS0J1bmRsZVBhZ2VHZXRBcHBDYWNoZVVzYWdlRm9yT3JpZ2luKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdl
dCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlR2V0QXBwQ2FjaGVVc2FnZUZvck9yaWdpbihw
YWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxs
b3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpCkBAIC0zODEsMTU4ICs0MDMsMTA4
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVR
dW90YSgpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWVSZWYgc3RyaW5nQXJyYXlUb0pTKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBXS0FycmF5UmVmIHN0cmluZ3MpCiB7CiAgICAgY29uc3Qgc2l6ZV90IGNv
dW50ID0gV0tBcnJheUdldFNpemUoc3RyaW5ncyk7Ci0KLSAgICBKU1ZhbHVlUmVmIGFycmF5UmVz
dWx0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7Ci0gICAgSlNPYmplY3RS
ZWYgYXJyYXlPYmogPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJyYXlSZXN1bHQsIDApOwor
ICAgIGF1dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCBudWxscHRy
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgV0tT
dHJpbmdSZWYgc3RyaW5nUmVmID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJ
dGVtQXRJbmRleChzdHJpbmdzLCBpKSk7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBzdHJpbmdKUyA9IHRvSlMoc3RyaW5nUmVmKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eUF0SW5kZXgoY29udGV4dCwgYXJyYXlPYmosIGksIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQs
IHN0cmluZ0pTLmdldCgpKSwgMCk7CisgICAgICAgIGF1dG8gc3RyaW5nUmVmID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChzdHJpbmdzLCBpKSk7CisgICAg
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBKU1ZhbHVl
TWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHN0cmluZ1JlZikuZ2V0KCkpLCBudWxscHRyKTsKICAg
ICB9Ci0KLSAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgcmV0dXJuIGFycmF5OwogfQogCiBK
U1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZSgpCiB7Ci0g
ICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBvcmlnaW5zID0gYWRv
cHRXSyhXS0J1bmRsZVBhZ2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKHBhZ2UpKTsK
LQotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nQXJyYXlUb0pT
KGNvbnRleHQsIG9yaWdpbnMuZ2V0KCkpOworICAgIHJldHVybiBzdHJpbmdBcnJheVRvSlMobWFp
bkpTQ29udGV4dCgpLCBhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlPcmlnaW5zV2l0aEFwcGxpY2F0
aW9uQ2FjaGUocGFnZSgpKSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFu
ZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVQYWdlSXNF
ZGl0aW5nQ29tbWFuZEVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlSXNFZGl0
aW5nQ29tbWFuZEVuYWJsZWQocGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldENhbk9wZW5XaW5kb3dzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0Q2FuT3BlbldpbmRvd3MiLCB0cnVlKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVuYWJsZWQpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFhTU0F1ZGl0b3JFbmFibGVkIikpOwotICAgIGF1dG8m
IGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVu
ZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVu
ZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOwor
ICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZCIsIGVu
YWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1lZGlhRGV2aWNlc0VuYWJsZWQoYm9v
bCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRNZWRpYURldmljZXNFbmFibGVk
IikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5q
ZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0
KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRNZWRpYURl
dmljZXNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2ViUlRD
TUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiV2ViS2l0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkIikpOwotICAgIGF1dG8mIGlu
amVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxl
T3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxl
KCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAg
IFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0Vu
YWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRDdXN0b21Vc2VyQWdl
bnQoSlNTdHJpbmdSZWYgdXNlckFnZW50KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dEN1c3RvbVVzZXJBZ2VudCIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
dG9XSyh1c2VyQWdlbnQpLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNz
YWdlKCJTZXRDdXN0b21Vc2VyQWdlbnQiLCB0b1dLKHVzZXJBZ2VudCkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V2ViQVBJU3RhdGlzdGljc0VuYWJsZWQiKSk7Ci0g
ICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0g
ICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1
bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5h
YmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9kZXJuTWVk
aWFDb250cm9sc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJL
aXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3Rl
ZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCBlbmFibGVk
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXZWJHTDJFbmFibGVkKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V2ViR0wyRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBp
bmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRs
ZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRs
ZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAg
ICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViR0wyRW5hYmxlZCIsIGVuYWJsZWQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxlZChib29s
IGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdyaXRhYmxlU3RyZWFtQVBJRW5h
YmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVy
KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5
LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V3Jp
dGFibGVTdHJlYW1BUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0VHJhbnNmb3JtU3RyZWFtQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIldlYktpdFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5q
ZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVP
dmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUo
KSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAg
V1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQi
LCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRSZWFkYWJsZUJ5dGVTdHJlYW1B
UElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
a2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0UmVhZGFi
bGVCeXRlU3RyZWFtQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZl
cmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRs
ZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJl
ZmVyZW5jZSgiV2ViS2l0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZChib29sIGVu
YWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxl
ZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGlu
amVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5Lmdl
dCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0RW5jcnlw
dGVkTWVkaWFBUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJXZWJLaXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92
ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgp
LCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBX
VFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQi
LCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW5lcmljQ3VlQVBJRW5hYmxl
ZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdEdlbmVyaWNDdWVBUElF
bmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5u
ZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBr
ZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRH
ZW5lcmljQ3VlQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBpbmplY3RlZEJ1
bmRsZS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShlbmFibGVkKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShl
bmFibGVkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGVuYWJsZWQpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSIsIGVuYWJsZWQpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHRO
YXZpZ2F0aW9uKGJvb2wgc2hvdWxkU3dhcCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShzaG91bGRTd2FwKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIlNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0
aW9uIiwgc2hvdWxkU3dhcCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRv
RGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJvb2wgc2hvdWxkU3dhcCkKIHsKLSAgICBh
dXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0
TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkU3dhcCkpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vz
c2lvbk9uTmV4dE5hdmlnYXRpb24iLCBzaG91bGRTd2FwKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCkBAIC01
NTUsOSArNTI3LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXROZWVkc1N0b3JhZ2VBY2Nlc3NGcm9t
RmlsZVVSTHNRdWlyayhib29sIG5lZWRzUXVpcmspCiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFBsdWdpbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0
UGx1Z2luc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9y
VGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdy
b3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2Uo
IldlYktpdFBsdWdpbnNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZWQpCkBAIC01OTEsOCAr
NTYxLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NBbGxvd0xpc3RFbnRy
eShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3QKIGJvb2wgVGVzdFJ1bm5lcjo6aXNQYWdl
Qm94VmlzaWJsZShpbnQgcGFnZUluZGV4KQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFn
ZSgpKTsKLSAgICByZXR1cm4gV0tCdW5kbGVJc1BhZ2VCb3hWaXNpYmxlKGluamVjdGVkQnVuZGxl
LmJ1bmRsZSgpLCBtYWluRnJhbWUsIHBhZ2VJbmRleCk7CisgICAgcmV0dXJuIFdLQnVuZGxlSXNQ
YWdlQm94VmlzaWJsZShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkZyYW1lKCksIHBhZ2VJ
bmRleCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyaW5nUmVmIHZhbHVlKQpAQCAtNjAw
LDE2ICs1NjksMTQgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHIKICAgICBpZiAoIWVsZW1lbnQg
fHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVOb2RlSGFuZGxlUmVmPiBub2RlSGFuZGxlID0gYWRv
cHRXSyhXS0J1bmRsZU5vZGVIYW5kbGVDcmVhdGUoY29udGV4dCwgY29uc3RfY2FzdDxKU09iamVj
dFJlZj4oZWxlbWVudCkpKTsKLSAgICBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVt
ZW50VmFsdWVGb3JVc2VyKG5vZGVIYW5kbGUuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKKyAg
ICBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JVc2VyKGFkb3B0
V0soV0tCdW5kbGVOb2RlSGFuZGxlQ3JlYXRlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RS
ZWY+KGVsZW1lbnQpKSkuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRBdWRpb1Jlc3VsdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBk
YXRhKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpOwogICAgIC8vIEZJWE1FICgxMjMwNTgpOiBVc2UgYSBKU0MgQVBJIHRvIGdldCBidWZm
ZXIgY29udGVudHMgb25jZSBzdWNoIGlzIGV4cG9zZWQuCi0gICAgV0tSZXRhaW5QdHI8V0tEYXRh
UmVmPiBhdWRpb0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJy
YXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKTsKLSAgICBpbmplY3Rl
ZEJ1bmRsZS5zZXRBdWRpb1Jlc3VsdChhdWRpb0RhdGEuZ2V0KCkpOworICAgIGluamVjdGVkQnVu
ZGxlLnNldEF1ZGlvUmVzdWx0KGFkb3B0V0soV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhB
cnJheShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgY29udGV4dCwgZGF0YSkpLmdldCgpKTsKICAg
ICBzZXRXaGF0VG9EdW1wKFdoYXRUb0R1bXA6OkF1ZGlvKTsKICAgICBzZXREdW1wUGl4ZWxzKGZh
bHNlKTsKIH0KQEAgLTYyMSwzMyArNTg4LDMwIEBAIHVuc2lnbmVkIFRlc3RSdW5uZXI6OndpbmRv
d0NvdW50KCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCiB7Ci0g
ICAgV0tCdW5kbGVDbGVhckhpc3RvcnlGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVDbGVhckhpc3RvcnlGb3JUZXN0aW5n
KHBhZ2UoKSk7CiB9CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIFRlc3RSdW5uZXI6Om1h
a2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09i
amVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXN0UnVubmVyOjptYWtlV2luZG93
T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQs
IHdpbmRvd09iamVjdCwgInRlc3RSdW5uZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAg
IHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJ0ZXN0UnVubmVyIiwgdGhpcyk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3RvcigpCiB7Ci0gICAgV0tCdW5kbGVJ
bnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvclNob3coV0tC
dW5kbGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNs
b3NlV2ViSW5zcGVjdG9yKCkKIHsKLSAgICBXS0J1bmRsZUluc3BlY3RvckNsb3NlKFdLQnVuZGxl
UGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvckNsb3NlKFdLQnVuZGxlUGFnZUdldEluc3BlY3Rv
cihwYWdlKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9y
KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2Ny
aXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgV0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlw
dEZvclRlc3QoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSksIHNjcmlwdFdLLmdldCgpKTsKKyAgICBXS0J1bmRsZUluc3Bl
Y3RvckV2YWx1YXRlU2NyaXB0Rm9yVGVzdChXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgp
KSwgdG9XSyhzY3JpcHQpLmdldCgpKTsKIH0KIAotdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWdu
ZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+ID4gV29ybGRNYXA7Cit1c2lu
ZyBXb3JsZE1hcCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgV0tSZXRhaW5QdHI8V0tCdW5kbGVT
Y3JpcHRXb3JsZFJlZj4+Owogc3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCiB7CiAgICAgc3Rh
dGljIFdvcmxkTWFwJiBtYXAgPSAqbmV3IFdvcmxkTWFwOwpAQCAtNjU2LDEyICs2MjAsMTEgQEAg
c3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6Ondvcmxk
SURGb3JXb3JsZChXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQogewotICAgIFdvcmxkTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwotICAgIGZvciAoV29ybGRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKLSAgICAgICAgICAgIHJldHVy
biBpdC0+a2V5OworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRoZSBhbnRpLXBhdHRlcm4gb2YgaXRl
cmF0aW5nIGFuIGVudGlyZSBtYXAuIFR5cGljYWxseSB3ZSB1c2UgYSBwYWlyIG9mIG1hcHMgb3Ig
anVzdCBhIHZlY3RvciBpbiBhIGNhc2UgbGlrZSB0aGlzLgorICAgIGZvciAoYXV0byYgbWFwRW50
cnkgOiB3b3JsZE1hcCgpKSB7CisgICAgICAgIGlmIChtYXBFbnRyeS52YWx1ZSA9PSB3b3JsZCkK
KyAgICAgICAgICAgIHJldHVybiBtYXBFbnRyeS5rZXk7CiAgICAgfQotCiAgICAgcmV0dXJuIDA7
CiB9CiAKQEAgLTY4MSw3ICs2NDQsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKEpTQ29udGV4dFJlZiBjb250ZXh0LCB1bnNpZ25lZCB3bwogCiAgICAg
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlRnJhbWVGb3JKYXZhU2NyaXB0Q29udGV4
dChjb250ZXh0KTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICBmcmFtZSA9IFdLQnVuZGxlUGFn
ZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkp
OworICAgICAgICBmcmFtZSA9IG1haW5GcmFtZSgpOwogCiAgICAgSlNHbG9iYWxDb250ZXh0UmVm
IGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZy
YW1lLCB3b3JsZC5nZXQoKSk7CiAgICAgSlNFdmFsdWF0ZVNjcmlwdChqc0NvbnRleHQsIHNjcmlw
dCwgMCwgMCwgMCwgMCk7IApAQCAtNjk2LDggKzY1OSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
UE9TSVhMb2NhbGUoSlNTdHJpbmdSZWYgbG9jYWxlKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRl
eHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVTZXRU
ZXh0RGlyZWN0aW9uKG1haW5GcmFtZSwgdG9XSyhkaXJlY3Rpb24pLmdldCgpKTsKKyAgICByZXR1
cm4gV0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24obWFpbkZyYW1lKCksIHRvV0soZGlyZWN0
aW9uKS5nZXQoKSk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBh
Z2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGJvb2wgc2hvdWxkU3RheU9uUGFnZSkKQEAgLTcw
NywxNyArNjY5LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVy
SGFuZGxpbmdCZWZvcmVVbmxvYWQoYm9vbCBzaG91bGRTdGF5T25QCiAKIGJvb2wgVGVzdFJ1bm5l
cjo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkgY29u
c3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBu
dWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0
dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5H
ZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdl
dCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuKCJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTmF2aWdhdGlvbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJE
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkNsZWFyRGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoSlNTdHJpbmdSZWYgc3RhdGUpCkBAIC03MzAs
NyArNjg3LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGZhbHNlKTsKIH0KIAotdHlwZWRl
ZiBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFwOwordXNpbmcg
Q2FsbGJhY2tNYXAgPSBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTT2JqZWN0UmVmPjsKIHN0YXRp
YyBDYWxsYmFja01hcCYgY2FsbGJhY2tNYXAoKQogewogICAgIHN0YXRpYyBDYWxsYmFja01hcCYg
bWFwID0gKm5ldyBDYWxsYmFja01hcDsKQEAgLTc4MywzOCArNzQwLDMyIEBAIHN0YXRpYyB2b2lk
IGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxi
YWNrKQogewogICAgIGlmICghY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKLQorICAgIGF1dG8g
Y29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250
ZXh0LCBjYWxsYmFjaykpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoY2FsbGJhY2tNYXAoKS5j
b250YWlucyhpbmRleCkpIHsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91
dHB1dFRleHQobWFrZVN0cmluZygiRkFJTDogVHJpZWQgdG8gaW5zdGFsbCBhIHNlY29uZCBUZXN0
UnVubmVyIGNhbGxiYWNrIGZvciB0aGUgc2FtZSBldmVudCAoaWQgIiwgaW5kZXgsICIpXG5cbiIp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICAgICBKU1ZhbHVlUHJvdGVjdChj
b250ZXh0LCBjYWxsYmFjayk7Ci0gICAgY2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNr
KTsKKyAgICBjYWxsYmFja01hcCgpLmFkZChpbmRleCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4o
Y2FsbGJhY2spKTsKIH0KIAogc3RhdGljIHZvaWQgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayh1bnNp
Z25lZCBpbmRleCwgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSAwLCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdID0gbnVsbHB0cikKIHsKLSAgICBpZiAoIWNhbGxiYWNrTWFwKCkuY29udGFpbnMo
aW5kZXgpKQorICAgIGF1dG8gY2FsbGJhY2sgPSBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpOwor
ICAgIGlmICghY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKLSAgICBXS0J1bmRsZUZyYW1lUmVm
IG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgSlNPYmplY3RS
ZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgY2FsbGJhY2tNYXAoKS50YWtl
KGluZGV4KSwgMCk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogICAgIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdldEdsb2Jh
bE9iamVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCAwKTsKICAgICBKU1Zh
bHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpj
bGVhclRlc3RSdW5uZXJDYWxsYmFja3MoKQogewotICAgIGZvciAoYXV0byYgaXRlciA6IGNhbGxi
YWNrTWFwKCkpIHsKLSAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpKTsKLSAgICAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAgICAgSlNPYmplY3RSZWYgY2FsbGJhY2sg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgaXRlci52YWx1ZSwgMCk7Ci0gICAgICAgIEpTVmFs
dWVVbnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIH0KLQorICAgIGF1dG8gY29udGV4
dCA9IG1haW5KU0NvbnRleHQoKTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogY2FsbGJhY2tNYXAo
KS52YWx1ZXMoKSkKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKICAgICBjYWxsYmFja01hcCgpLmNsZWFy
KCk7CiB9CiAKQEAgLTg5NCwyMCArODQ1LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQ
cmVmZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVmIHZhbHVlKQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhY2NlcHQpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWx3YXlzQWNjZXB0Q29va2llcyIpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShhY2NlcHQpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U2V0QWx3YXlzQWNjZXB0Q29va2llcyIsIGFjY2VwdCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0T25seUFjY2VwdEZpcnN0UGFydHlDb29raWVzKGJvb2wgYWNjZXB0KQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29va2llcyIpKTsKLSAgICAK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoYWNjZXB0KSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMiLCBhY2NlcHQpOwogfQogCiBk
b3VibGUgVGVzdFJ1bm5lcjo6cHJlY2lzZVRpbWUoKQpAQCAtOTI0LDE1ICs4NjcsMTUgQEAgdm9p
ZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewog
ICAgIG1fdXNlclN0eWxlU2hlZXRFbmFibGVkID0gZW5hYmxlZDsKIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBlbXB0eVVybCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIiIpKTsKLSAgICBXS1N0cmluZ1JlZiBsb2NhdGlvbiA9IGVuYWJsZWQgPyBtX3VzZXJT
dHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVVybC5nZXQoKTsKKyAgICBhdXRvIGVtcHR5
U3RyaW5nID0gdG9XSygiIik7CisgICAgYXV0byBsb2NhdGlvbiA9IGVuYWJsZWQgPyBtX3VzZXJT
dHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVN0cmluZy5nZXQoKTsKICAgICBhdXRvJiBp
bmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBXS0J1bmRs
ZVNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVj
dGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBsb2NhdGlvbik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBsb2NhdGlvbikKIHsKLSAgICBt
X3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKGxvY2F0aW9uKSk7CisgICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gdG9XSyhsb2Nh
dGlvbik7CiAKICAgICBpZiAobV91c2VyU3R5bGVTaGVldEVuYWJsZWQpCiAgICAgICAgIHNldFVz
ZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVlKTsKQEAgLTk0Niw4ICs4ODksNyBAQCB2b2lkIFRlc3RS
dW5uZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KTsKLSAgICBXS0J1bmRsZVNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhpbmplY3RlZEJ1
bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIGVuYWJsZWQpOwor
ICAgIFdLQnVuZGxlU2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgcGFnZSgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoKQpAQCAtOTczLDM2ICs5MTUsMjggQEAgdm9p
ZCBUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVu
YWJsZWQpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6Z3JhbnRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9u
KEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3Jp
Z2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJt
aXNzaW9uKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBh
Z2UoKSwgb3JpZ2luV0suZ2V0KCksIHRydWUpOworICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0
aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHBhZ2Uo
KSwgdG9XSyhvcmlnaW4pLmdldCgpLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkZW55
V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIGF1dG8m
IGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVu
ZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwg
aW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG9yaWdpbldLLmdldCgpLCBmYWxzZSk7Cisg
ICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgcGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCksIGZhbHNlKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9u
cygpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCk7Ci0gICAgV0tCdW5kbGVSZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhp
bmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpOwor
ICAgIFdLQnVuZGxlUmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soSlNWYWx1ZVJlZiBub3RpZmljYXRpb24p
CiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCk7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0g
ICAgdWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSBXS0J1bmRsZUdldFdlYk5vdGlmaWNhdGlvbklE
KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBjb250ZXh0LCBub3RpZmljYXRpb24pOwotICAgIGlu
amVjdGVkQnVuZGxlLnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlv
bklEKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5wb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGlj
ayhXS0J1bmRsZUdldFdlYk5vdGlmaWNhdGlvbklEKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBt
YWluSlNDb250ZXh0KCksIG5vdGlmaWNhdGlvbikpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAgLy8gRklYTUU6IHRo
aXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbihlbmFibGVkKTsKIH0KIApAQCAtMTAxMSwxMDIgKzk0NSw1MSBAQCBi
b29sIFRlc3RSdW5uZXI6OmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpCiAgICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUo
KTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNWYWx1ZVJl
ZiBqc0FsdGl0dWRlLCBKU1ZhbHVlUmVmIGpzQWx0aXR1ZGVBY2N1cmFjeSwgSlNWYWx1ZVJlZiBq
c0hlYWRpbmcsIEpTVmFsdWVSZWYganNTcGVlZCwgSlNWYWx1ZVJlZiBqc0Zsb29yTGV2ZWwpCit2
b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFs
dGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJs
ZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9v
ckxldmVsKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRl
eHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJh
bWUpOwotCi0gICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlID0gZmFsc2U7Ci0gICAgZG91YmxlIGFs
dGl0dWRlID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNBbHRp
dHVkZSkpIHsKLSAgICAgICAgcHJvdmlkZXNBbHRpdHVkZSA9IHRydWU7Ci0gICAgICAgIGFsdGl0
dWRlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzQWx0aXR1ZGUsIDApOwotICAgIH0KLQot
ICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5ID0gZmFsc2U7Ci0gICAgZG91YmxlIGFs
dGl0dWRlQWNjdXJhY3kgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0
LCBqc0FsdGl0dWRlQWNjdXJhY3kpKSB7Ci0gICAgICAgIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eSA9IHRydWU7Ci0gICAgICAgIGFsdGl0dWRlQWNjdXJhY3kgPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwganNBbHRpdHVkZUFjY3VyYWN5LCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3ZpZGVz
SGVhZGluZyA9IGZhbHNlOwotICAgIGRvdWJsZSBoZWFkaW5nID0gMC47Ci0gICAgaWYgKCFKU1Zh
bHVlSXNVbmRlZmluZWQoY29udGV4dCwganNIZWFkaW5nKSkgewotICAgICAgICBwcm92aWRlc0hl
YWRpbmcgPSB0cnVlOwotICAgICAgICBoZWFkaW5nID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IGpzSGVhZGluZywgMCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc1NwZWVkID0gZmFsc2U7
Ci0gICAgZG91YmxlIHNwZWVkID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29u
dGV4dCwganNTcGVlZCkpIHsKLSAgICAgICAgcHJvdmlkZXNTcGVlZCA9IHRydWU7Ci0gICAgICAg
IHNwZWVkID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzU3BlZWQsIDApOwotICAgIH0KLQot
ICAgIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsID0gZmFsc2U7Ci0gICAgZG91YmxlIGZsb29yTGV2
ZWwgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCBqc0Zsb29yTGV2
ZWwpKSB7Ci0gICAgICAgIHByb3ZpZGVzRmxvb3JMZXZlbCA9IHRydWU7Ci0gICAgICAgIGZsb29y
TGV2ZWwgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNGbG9vckxldmVsLCAwKTsKLSAgICB9
Ci0KLSAgICBpbmplY3RlZEJ1bmRsZS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVk
ZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBo
ZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJvdmlkZXNGbG9vckxldmVsLCBmbG9vckxl
dmVsKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLCBhbHRpdHVk
ZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCwgZmxvb3JMZXZlbCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKEpTU3RyaW5n
UmVmIG1lc3NhZ2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VXSyA9
IHRvV0sobWVzc2FnZSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihtZXNzYWdlV0suZ2V0KCkpOworICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVu
YXZhaWxhYmxlRXJyb3IodG9XSyhtZXNzYWdlKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0VXNlck1lZGlhUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAgLy8gRklYTUU6
IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldFVz
ZXJNZWRpYVBlcm1pc3Npb24oZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRV
c2VyTWVkaWFQZXJtaXNzaW9uKCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgZG9u
ZSBieSBmcmFtZS4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4K
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9u
KCk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNEb2luZ01lZGlhQ2FwdHVyZSgpIGNvbnN0CiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNEb2luZ01lZGlhQ2FwdHVyZSIpKTsKLSAgICBX
S1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAg
IEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzRG9pbmdNZWRpYUNhcHR1cmUiKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdp
bihib29sIHBlcm1pc3Npb24sIEpTU3RyaW5nUmVmIG9yaWdpbiwgSlNTdHJpbmdSZWYgcGFyZW50
T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0so
b3JpZ2luKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luV0sgPSB0
b1dLKHBhcmVudE9yaWdpbik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldFVz
ZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Npb24sIG9yaWdpbldL
LmdldCgpLCBwYXJlbnRPcmlnaW5XSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Np
b24sIHRvV0sob3JpZ2luKS5nZXQoKSwgdG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsKIH0KIAog
dW5zaWduZWQgVGVzdFJ1bm5lcjo6dXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9y
aWdpbihKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdpbikgY29uc3QK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9XSyhwYXJl
bnRPcmlnaW4pOwotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihvcmlnaW5XSy5nZXQoKSwgcGFyZW50
T3JpZ2luV0suZ2V0KCkpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
dXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbih0b1dLKG9yaWdpbikuZ2V0
KCksIHRvV0socGFyZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVz
ZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9y
aWdpbiwgSlNTdHJpbmdSZWYgcGFyZW50T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gcGFyZW50T3JpZ2luV0sgPSB0b1dLKHBhcmVudE9yaWdpbik7Ci0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZv
ck9yaWdpbihvcmlnaW5XSy5nZXQoKSwgcGFyZW50T3JpZ2luV0suZ2V0KCkpOworICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291
bnRGb3JPcmlnaW4odG9XSyhvcmlnaW4pLmdldCgpLCB0b1dLKHBhcmVudE9yaWdpbikuZ2V0KCkp
OwogfQogCiBib29sIFRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCiB7Ci0g
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICByZXR1cm4g
V0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhtYWluRnJhbWUpOworICAgIHJl
dHVybiBXS0J1bmRsZUZyYW1lQ2FsbFNob3VsZENsb3NlT25XZWJWaWV3KG1haW5GcmFtZSgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKHVuc2lnbmVkIGhvd0Zh
ckJhY2t3YXJkKQpAQCAtMTEyMiwyMCArMTAwNSwxNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVl
Rm9yd2FyZE5hdmlnYXRpb24odW5zaWduZWQgaG93RmFyRm9yd2FyZCkKIHZvaWQgVGVzdFJ1bm5l
cjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBib29sIHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHMpCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IGJhc2VV
UkxXSyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwoV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKSkpOwotICAgIFdLUmV0YWluUHRyPFdL
VVJMUmVmPiB1cmxXSyA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMV0su
Z2V0KCksIHRvV1RGU3RyaW5nKHRvV0sodXJsKSkudXRmOCgpLmRhdGEoKSkpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmdXSyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5n
KHVybFdLLmdldCgpKSk7Ci0KKyAgICBhdXRvIGJhc2VVUkxXSyA9IGFkb3B0V0soV0tCdW5kbGVG
cmFtZUNvcHlVUkwobWFpbkZyYW1lKCkpKTsKKyAgICBhdXRvIHVybFdLID0gYWRvcHRXSyhXS1VS
TENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkxXSy5nZXQoKSwgdG9XVEZTdHJpbmcodXJsKS51dGY4
KCkuZGF0YSgpKSk7CisgICAgYXV0byB1cmxTdHJpbmdXSyA9IGFkb3B0V0soV0tVUkxDb3B5U3Ry
aW5nKHVybFdLLmdldCgpKSk7CiAgICAgaW5qZWN0ZWRCdW5kbGUucXVldWVMb2FkKHVybFN0cmlu
Z1dLLmdldCgpLCB0b1dLKHRhcmdldCkuZ2V0KCksIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoSlNTdHJpbmdSZWYgY29u
dGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCwgSlNTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkwpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNvbnRlbnRXSyA9IHRvV0soY29udGVudCk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxXSyA9IGJhc2VVUkwgPyB0b1dL
KGJhc2VVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMV0sgPSB1bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5y
ZWFjaGFibGVVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7Ci0KLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkSFRNTFN0cmluZyhjb250ZW50V0suZ2V0KCks
IGJhc2VVUkxXSy5nZXQoKSwgdW5yZWFjaGFibGVVUkxXSy5nZXQoKSk7CisgICAgYXV0byBiYXNl
VVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJMKSA6IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PigpOworICAgIGF1dG8gdW5yZWFjaGFibGVVUkxXSyA9IHVucmVhY2hhYmxlVVJMID8gdG9XSyh1
bnJlYWNoYWJsZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKKyAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkSFRNTFN0cmluZyh0b1dLKGNvbnRlbnQpLmdl
dCgpLCBiYXNlVVJMV0suZ2V0KCksIHVucmVhY2hhYmxlVVJMV0suZ2V0KCkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKQEAgLTExNDUsMTYzICsxMDI1LDExOSBAQCB2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRp
bmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucXVldWVMb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkaW5nU2NyaXB0KHRvV0soc2NyaXB0KS5nZXQoKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVm
IHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dL
KHNjcmlwdCk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTm9uTG9hZGlu
Z1NjcmlwdChzY3JpcHRXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCh0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRS
ZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZXMiLCB2YWx1ZSk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldEhhbmRsZXNBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZXMoYm9vbCBoYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwg
aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sIHZh
bHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZExvZ0NhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRMb2dEb3du
bG9hZENhbGxiYWNrcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIiwgdmFsdWUpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUoSlNTdHJpbmdS
ZWYgdXNlcm5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QXV0aGVudGljYXRp
b25Vc2VybmFtZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHVzZXJuYW1lKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiU2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIsIHRvV0sodXNlcm5hbWUpLmdl
dCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKEpT
U3RyaW5nUmVmIHBhc3N3b3JkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEF1dGhl
bnRpY2F0aW9uUGFzc3dvcmQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhwYXNzd29yZCkpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIlNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiLCB0b1dLKHBhc3N3
b3JkKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1dElzRW5h
YmxlZCgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2VjdXJlRXZlbnRJbnB1
dElzRW5hYmxlZCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0
V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJl
dHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIlNlY3VyZUV2
ZW50SW5wdXRJc0VuYWJsZWQiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRCbG9ja0FsbFBs
dWdpbnMoYm9vbCBzaG91bGRCbG9jaykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRC
bG9ja0FsbFBsdWdpbnMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHNob3VsZEJsb2NrKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0QmxvY2tBbGxQbHVnaW5zIiwgc2hvdWxkQmxvY2spOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUoSlNTdHJpbmdSZWYgbW9kZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcobW9kZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFBsdWdpblN1cHBv
cnRlZE1vZGUiLCB0b1dLKG1vZGUpLmdldCgpKTsKIH0KIAogSlNWYWx1ZVJlZiBUZXN0UnVubmVy
OjpmYWlsTmV4dE5ld0NvZGVCbG9jaygpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHJldHVybiBKU0M6OmZhaWxO
ZXh0TmV3Q29kZUJsb2NrKGNvbnRleHQpOworICAgIHJldHVybiBKU0M6OmZhaWxOZXh0TmV3Q29k
ZUJsb2NrKG1haW5KU0NvbnRleHQoKSk7CiB9CiAKLUpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bnVt
YmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKQorSlNWYWx1ZVJlZiBUZXN0
UnVubmVyOjpudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWVSZWYgZnVuY3Rpb24pCiB7Ci0gICAg
V0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRS
ZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUp
OwotICAgIHJldHVybiBKU0M6Om51bWJlck9mREZHQ29tcGlsZXMoY29udGV4dCwgdGhlRnVuY3Rp
b24pOworICAgIHJldHVybiBKU0M6Om51bWJlck9mREZHQ29tcGlsZXMobWFpbkpTQ29udGV4dCgp
LCBmdW5jdGlvbik7CiB9CiAKLUpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5j
dGlvbihKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpuZXZl
cklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgZnVuY3Rpb24pCiB7Ci0gICAgV0tCdW5kbGVGcmFt
ZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9
IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHJldHVy
biBKU0M6OnNldE5ldmVySW5saW5lKGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4g
SlNDOjpzZXROZXZlcklubGluZShtYWluSlNDb250ZXh0KCksIGZ1bmN0aW9uKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheShi
b29sIHZhbHVlKQogewogICAgIG1fc2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVs
YXkgPSB2YWx1ZTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGREZWNpZGVOYXZp
Z2F0aW9uUG9saWN5QWZ0ZXJEZWxheSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJTZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheSIsIHZh
bHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGlj
eUFmdGVyRGVsYXkoYm9vbCB2YWx1ZSkKIHsKICAgICBtX3Nob3VsZERlY2lkZVJlc3BvbnNlUG9s
aWN5QWZ0ZXJEZWxheSA9IHZhbHVlOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3Vs
ZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVs
YXkiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TmF2aWdhdGlvbkdlc3R1cmVz
RW5hYmxlZChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE5hdmln
YXRpb25HZXN0dXJlc0VuYWJsZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZCIsIHZhbHVlKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhib29sIHZhbHVlKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRz
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldElnbm9yZXNW
aWV3cG9ydFNjYWxlTGltaXRzIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNo
b3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29sIHZhbHVlKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBl
cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGRE
b3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzcyhib29s
IHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZEFsbG93RGV2aWNl
T3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFj
Y2VzcyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjp0ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGVybWluYXRlTmV0d29ya1Byb2Nl
c3MiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2Uo
IlRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6dGVybWlu
YXRlU2VydmljZVdvcmtlcnMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRlcm1pbmF0
ZVNlcnZpY2VXb3JrZXJzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJUZXJtaW5hdGVTZXJ2aWNlV29ya2VycyIpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB2YWx1ZSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcyIsIHZhbHVlKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIG5leHRVSVNjcmlwdENh
bGxiYWNrSUQoKQpAQCAtMTMxNCw5NyArMTE1MCw0OCBAQCB2b2lkIFRlc3RSdW5uZXI6OnJ1blVJ
U2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICB1
bnNpZ25lZCBjYWxsYmFja0lEID0gbmV4dFVJU2NyaXB0Q2FsbGJhY2tJRCgpOwogICAgIGNhY2hl
VGVzdFJ1bm5lckNhbGxiYWNrKGNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlJ1blVJUHJvY2Vzc1NjcmlwdCIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IHRlc3REaWN0aW9uYXJ5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlw
dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNjcmlwdCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0VmFsdWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHNjcmlwdCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDYWxsYmFja0lEIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBjYWxsYmFj
a0lEVmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQpKTsKLQotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0odGVzdERpY3Rpb25hcnkuZ2V0KCksIHNjcmlwdEtleS5nZXQoKSwg
c2NyaXB0VmFsdWUuZ2V0KCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0odGVzdERpY3Rpb25h
cnkuZ2V0KCksIGNhbGxiYWNrSURLZXkuZ2V0KCksIGNhbGxiYWNrSURWYWx1ZS5nZXQoKSk7Ci0K
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCB0ZXN0RGljdGlvbmFyeS5nZXQoKSk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJSdW5VSVByb2Nlc3NTY3JpcHQiLCBjcmVhdGVXS0RpY3Rp
b25hcnkoeworICAgICAgICB7ICJTY3JpcHQiLCB0b1dLKHNjcmlwdCkgfSwKKyAgICAgICAgeyAi
Q2FsbGJhY2tJRCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpLmdldCgpIH0s
CisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0SW1tZWRp
YXRlbHkoSlNTdHJpbmdSZWYgc2NyaXB0LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIHVu
c2lnbmVkIGNhbGxiYWNrSUQgPSBuZXh0VUlTY3JpcHRDYWxsYmFja0lEKCk7CiAgICAgY2FjaGVU
ZXN0UnVubmVyQ2FsbGJhY2soY2FsbGJhY2tJRCwgY2FsbGJhY2spOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiUnVuVUlQcm9jZXNzU2NyaXB0SW1tZWRpYXRlbHkiKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiB0ZXN0RGljdGlvbmFyeSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
Y3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFZhbHVlID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4gY2FsbGJhY2tJRFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjYWxsYmFja0lEKSk7
Ci0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBzY3JpcHRL
ZXkuZ2V0KCksIHNjcmlwdFZhbHVlLmdldCgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRl
c3REaWN0aW9uYXJ5LmdldCgpLCBjYWxsYmFja0lES2V5LmdldCgpLCBjYWxsYmFja0lEVmFsdWUu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgdGVzdERpY3Rpb25h
cnkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUnVuVUlQcm9jZXNzU2NyaXB0SW1tZWRp
YXRlbHkiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJTY3JpcHQiLCB0b1dLKHNj
cmlwdCkgfSwKKyAgICAgICAgeyAiQ2FsbGJhY2tJRCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
Y2FsbGJhY2tJRCkpLmdldCgpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnJ1blVJU2NyaXB0Q2FsbGJhY2sodW5zaWduZWQgY2FsbGJhY2tJRCwgSlNTdHJpbmdSZWYg
cmVzdWx0KQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7
Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENv
bnRleHQobWFpbkZyYW1lKTsKLQotICAgIEpTVmFsdWVSZWYgcmVzdWx0VmFsdWUgPSBKU1ZhbHVl
TWFrZVN0cmluZyhjb250ZXh0LCByZXN1bHQpOworICAgIEpTVmFsdWVSZWYgcmVzdWx0VmFsdWUg
PSBKU1ZhbHVlTWFrZVN0cmluZyhtYWluSlNDb250ZXh0KCksIHJlc3VsdCk7CiAgICAgY2FsbFRl
c3RSdW5uZXJDYWxsYmFjayhjYWxsYmFja0lELCAxLCAmcmVzdWx0VmFsdWUpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNldEFsbG93ZWRNZW51QWN0aW9ucyhKU1ZhbHVlUmVmIGFjdGlvbnMpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWxsb3dlZE1lbnVBY3Rpb25zIikpOwotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0KLSAgICBhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgYXV0byBtYWluRnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgYXV0byBsZW5ndGhQcm9wZXJ0
eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwor
ICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwor
ICAgIGF1dG8gY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKICAgICBhdXRvIGFjdGlvbnNBcnJh
eSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhY3Rpb25zLCBudWxscHRyKTsKLSAgICBhdXRv
IGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBhY3Rpb25zQXJyYXks
IGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNO
dW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxl
bmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4
dCwgYWN0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29u
dGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBhY3Rp
b25OYW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWN0aW9uID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhhY3Rpb25OYW1lLmdldCgpKSk7Ci0gICAgICAgIFdLQXJyYXlB
cHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhY3Rpb24uZ2V0KCkpOworICAgIGF1dG8gbGVu
Z3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYWN0aW9uc0FycmF5KTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFjdGlvbnNBcnJheSwgaSwgbnVsbHB0cik7
CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB0b1dLU3RyaW5n
KGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CiAgICAgfQotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIlNldEFsbG93ZWRNZW51QWN0aW9ucyIsIG1lc3NhZ2VCb2R5LmdldCgp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0YWxsQ3VzdG9tTWVudUFjdGlvbihKU1N0cmlu
Z1JlZiBuYW1lLCBib29sIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHksIEpTVmFsdWVSZWYgY2FsbGJh
Y2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soQ3VzdG9tTWVudUFjdGlvbkNhbGxi
YWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluc3RhbGxDdXN0
b21NZW51QWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJuYW1lIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBuYW1lVmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKG5hbWUpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBuYW1lS2V5LmdldCgp
LCBuYW1lVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRpc21p
c3Nlc0F1dG9tYXRpY2FsbHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gZGlzbWlzc2VzQXV0b21hdGljYWxseVZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoZGlzbWlzc2VzQXV0b21hdGljYWxseSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVz
c2FnZUJvZHkuZ2V0KCksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlLZXkuZ2V0KCksIGRpc21pc3Nl
c0F1dG9tYXRpY2FsbHlWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJJbnN0YWxs
Q3VzdG9tTWVudUFjdGlvbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIm5hbWUi
LCB0b1dLKG5hbWUpIH0sCisgICAgICAgIHsgImRpc21pc3Nlc0F1dG9tYXRpY2FsbHkiLCBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShkaXNtaXNzZXNBdXRvbWF0aWNhbGx5KSkuZ2V0KCkgfSwKKyAg
ICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFsbERpZEJlZ2luU3dpcGVD
YWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQpAQCAtMTQ0OSw1OCArMTIzNiwzMCBAQCB2b2lk
IFRlc3RSdW5uZXI6OmNhbGxEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2soKQogCiB2b2lk
IFRlc3RSdW5uZXI6OmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4oSlNTdHJpbmdSZWYgZG9t
YWluKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyU3RhdGlzdGljc0RhdGFGb3JE
b21haW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhkb21haW4pKTsKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4iLCB0b1dL
KGRvbWFpbikuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmRvZXNTdGF0aXN0aWNzRG9t
YWluSURFeGlzdEluRGF0YWJhc2UodW5zaWduZWQgZG9tYWluSUQpCiB7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tU
eXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRG9tYWluSUQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShkb21haW5JRCkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4g
cmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZh
bHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdW
YWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25h
cnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgp
KSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRX
SyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0
dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiRG9lc1N0YXRp
c3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAg
ICAgIHsgIkRvbWFpbklEIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkb21haW5JRCkpIH0KKyAg
ICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0VuYWJsZWQo
Ym9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzRW5h
YmxlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NFbmFibGVkIiwgdmFsdWUpOwogfQogCiBib29sIFRlc3RS
dW5uZXI6OmlzU3RhdGlzdGljc0VwaGVtZXJhbCgpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc0VwaGVt
ZXJhbCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJl
dHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc0Vw
aGVtZXJhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUo
Ym9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRl
c3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzRGVidWdNb2RlQ2FsbGJhY2tJRCwgY29tcGxl
dGlvbkhhbmRsZXIpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0Rl
YnVnTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0RlYnVn
TW9kZSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNl
dERlYnVnTW9kZUNhbGxiYWNrKCkKQEAgLTE1MTEsMTAgKzEyNzAsNyBAQCB2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0RGVidWdNb2RlQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoSlNTdHJpbmdS
ZWYgaG9zdE5hbWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVU
ZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlRm9y
RGVidWdNb2RlQ2FsbGJhY2soKQpAQCAtMTUyNiwyNyArMTI4MiwxMCBAQCB2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NMYXN0U2VlbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNl
Y29uZHMsIEpTVgogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NM
YXN0U2VlbkNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpKTsK
LSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAg
IFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5
c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGlj
c0xhc3RTZWVuIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVz
LmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0xhc3RT
ZWVuIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhv
c3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIHRvV0soc2Vjb25kcykgfSwKKyAgICB9KS5n
ZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRMYXN0U2Vl
bkNhbGxiYWNrKCkKQEAgLTE1NTgsNDkgKzEyOTcsMTggQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVm
IHQKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzTWVyZ2VTdGF0
aXN0aWNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVS
ZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lRG9tYWlu
MSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKHRvcEZyYW1lRG9tYWluMSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjIiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZURv
bWFpbjIpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJMYXN0U2VlbiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKGxhc3RTZWVuKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhZFVzZXJJbnRlcmFjdGlvbikpKTsK
LQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZShtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSkpOwotCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNHcmFuZGZh
dGhlcmVkIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlz
R3JhbmRmYXRoZXJlZCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkpOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNWZXJ5UHJldmFsZW50Iikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzVmVyeVByZXZh
bGVudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkRhdGFSZWNvcmRzUmVtb3ZlZCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpKTsKLQotICAgIFZlY3RvcjxX
S1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4g
cmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwot
ICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25h
cnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgp
KSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyIsIGNyZWF0ZVdLRGljdGlvbmFy
eSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAi
VG9wRnJhbWVEb21haW4xIiwgdG9XSyh0b3BGcmFtZURvbWFpbjEpIH0sCisgICAgICAgIHsgIlRv
cEZyYW1lRG9tYWluMiIsIHRvV0sodG9wRnJhbWVEb21haW4yKSB9LAorICAgICAgICB7ICJMYXN0
U2VlbiIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUobGFzdFNlZW4pKSB9LAorICAgICAgICB7ICJI
YWRVc2VySW50ZXJhY3Rpb24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYWRVc2VySW50ZXJh
Y3Rpb24pKSB9LAorICAgICAgICB7ICJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIiwgYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZShtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSkgfSwKKyAgICAgICAg
eyAiSXNHcmFuZGZhdGhlcmVkIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhl
cmVkKSkgfSwKKyAgICAgICAgeyAiSXNQcmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShpc1ByZXZhbGVudCkpIH0sCisgICAgICAgIHsgIklzVmVyeVByZXZhbGVudCIsIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGlzVmVyeVByZXZhbGVudCkpIH0sCisgICAgICAgIHsgIkRhdGFSZWNv
cmRzUmVtb3ZlZCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZGF0YVJlY29yZHNSZW1vdmVkKSkg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxE
aWRTZXRNZXJnZVN0YXRpc3RpY0NhbGxiYWNrKCkKQEAgLTE2MTIsMzEgKzEzMjAsMTIgQEAgdm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyhKU1N0cmluZ1JlZiBo
b3N0TmFtZSwgYm9vbCBoYWRVc2UKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRT
dGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpY0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsK
IAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7
Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIYWRVc2VySW50ZXJhY3Rpb24iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTY2hlZHVsZWRGb3JBbGxCdXRD
b29raWVEYXRhUmVtb3ZhbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKSkpOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNQcmV2
YWxlbnQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQ
cmV2YWxlbnQpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMu
c2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZh
bHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlz
dGljc0V4cGlyZWRTdGF0aXN0aWMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNz
RXhwaXJlZFN0YXRpc3RpYyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3RO
YW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSGFkVXNlckludGVyYWN0aW9uIiwg
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkgfSwKKyAgICAgICAg
eyAiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCIsIGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpKSB9LAorICAg
ICAgICB7ICJJc1ByZXZhbGVudCIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50
KSkgfQorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2Fs
bERpZFNldEV4cGlyZWRTdGF0aXN0aWNDYWxsYmFjaygpCkBAIC0xNjQ4LDI5ICsxMzM3LDEwIEBA
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5n
UmVmIGhvc3ROYW1lLCBib29sIHZhbHVlCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2so
U2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRs
ZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFt
ZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7
Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtl
eXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotICAgIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICBy
YXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVz
W2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0
YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsg
Ikhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2VDYWxsYmFjaygp
CkBAIC0xNjgyLDI5ICsxMzUyLDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Zl
cnlQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2CiB7CiAgICAg
Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+
IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOwotICAgIAot
ICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiBy
YXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVl
cy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgp
OwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVu
dFJlc291cmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0
b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NhbGxEaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFjaygpCkBAIC0xNzE0
LDEzOCArMTM2NSw1MSBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VmVy
eVByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoImR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIik7CiB9CiAK
IGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdS
ZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAg
IFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVy
bkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1ByZXZh
bGVudFJlc291cmNlIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5u
ZXI6OmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFt
ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50
UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlw
ZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEp
OwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBl
SUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZSIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVy
Ojppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKEpTU3RyaW5nUmVmIHN1
YnJlc291cmNlSG9zdCwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0KQogewotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJyZXNvdXJjZUhvc3QiKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJyZXNvdXJjZUhvc3Qp
KSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0KSkpOwotICAgIAotICAgIFZlY3Rv
cjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJl
Zj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5n
ZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAg
ICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJy
ZXNvdXJjZVVuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFs
dWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9
IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVy
biBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0
dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU3VicmVzb3VyY2VIb3N0IiwgdG9X
SyhzdWJyZXNvdXJjZUhvc3QpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lSG9zdCIsIHRvV0sodG9w
RnJhbWVIb3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0
YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKEpTU3RyaW5nUmVmIHN1YkZyYW1lSG9z
dCwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZh
bHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN1YkZyYW1lSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHN1YkZyYW1lSG9zdCkpKTsKLSAgICAKLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3Qi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
Zyh0b3BGcmFtZUhvc3QpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlz
KGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNp
emUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tp
XSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJ
c1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyIikpOwotICAgIFdLUmV0YWluUHRy
PFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0
ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAg
ICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1
cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdp
c3RlcmVkQXNTdWJGcmFtZVVuZGVyIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAi
U3ViRnJhbWVIb3N0IiwgdG9XSyhzdWJGcmFtZUhvc3QpIH0sCisgICAgICAgIHsgIlRvcEZyYW1l
SG9zdCIsIHRvV0sodG9wRnJhbWVIb3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogYm9vbCBU
ZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKEpTU3RyaW5n
UmVmIGhvc3RSZWRpcmVjdGVkRnJvbSwgSlNTdHJpbmdSZWYgaG9zdFJlZGlyZWN0ZWRUbykKIHsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdFJlZGlyZWN0ZWRGcm9tIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
aG9zdFJlZGlyZWN0ZWRGcm9tKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkVG8iKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0UmVkaXJl
Y3RlZFRvKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNp
emUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1
ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3Rh
dGlzdGljc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJh
d0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdL
VHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRh
dGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0
UmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3RSZWRpcmVjdGVkRnJvbSkgfSwKKyAgICAgICAgeyAi
SG9zdFJlZGlyZWN0ZWRUbyIsIHRvV0soaG9zdFJlZGlyZWN0ZWRUbykgfSwKKyAgICB9KS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFj
dGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7
Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUodmFsdWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAg
IFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNp
emUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5
c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5n
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRh
KCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgCi0gICAgV0tCdW5k
bGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0
YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAg
ICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVlIiwg
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlv
bkNhbGxiYWNrKCkKQEAgLTE4NTUsMjYxICsxNDE5LDk1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NhbGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb25DYWxsYmFjaygpCiAKIGJvb2wg
VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVm
IGhvc3ROYW1lKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc0hhc0hh
ZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0g
ICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0
dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzSGFz
SGFkVXNlckludGVyYWN0aW9uIik7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNz
T25seUluRGF0YWJhc2VPbmNlKEpTU3RyaW5nUmVmIHN1Ykhvc3QsIEpTU3RyaW5nUmVmIHRvcEhv
c3QpCiB7Ci0gICAgCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViSG9zdCIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHN1
Ykhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG9wSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEhvc3QpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdL
U3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiBy
YXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBhdXRv
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNT
dGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
cmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkp
LmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuKCJJc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UiLCBjcmVhdGVXS0RpY3Rpb25h
cnkoeworICAgICAgICB7ICJTdWJIb3N0IiwgdG9XSyhzdWJIb3N0KSB9LAorICAgICAgICB7ICJU
b3BIb3N0IiwgdG9XSyh0b3BIb3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChKU1N0cmluZ1JlZiBob3N0TmFtZSwg
Ym9vbCB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlz
OwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdS
ZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tl
eXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXpl
KCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkg
ewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVz
W2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rp
Y3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3
S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgCi0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJlZCIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyho
b3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2
YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZUlU
UERhdGFiYXNlKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0VXNl
SVRQRGF0YWJhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRVc2VJVFBEYXRhYmFzZSIsIHZhbHVlKTsKIH0KIAog
Ym9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKEpTU3RyaW5nUmVmIGhv
c3ROYW1lKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc0dyYW5kZmF0
aGVyZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJl
ZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwot
ICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQi
LCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNT
dHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3ROYW1lIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
dG9wRnJhbWVIb3N0TmFtZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tl
eXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMu
c2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1Zh
bHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbiIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rp
Y3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMu
c2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAg
ICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJUb3BGcmFt
ZUhvc3ROYW1lIiwgdG9XSyh0b3BGcmFtZUhvc3ROYW1lKSB9LAorICAgIH0pLmdldCgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2luKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiB0b3BGcmFtZUhvc3ROYW1l
KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0g
ICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RO
YW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZUhvc3ROYW1lKSkpOwotICAg
IAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVj
dG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ld
ID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgp
OwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlz
LmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW4iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIs
IHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lSG9zdE5hbWUiLCB0b1dLKHRv
cEZyYW1lSG9zdE5hbWUpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oSlNTdHJpbmdSZWYgaG9z
dE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKQogewotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RO
YW1lUmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkVG8pKSk7Ci0gICAgCi0gICAgVmVj
dG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBl
UmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ld
LmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQot
ICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdW
YWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkg
fSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVkVG8iLCB0b1dLKGhvc3ROYW1lUmVkaXJl
Y3RlZFRvKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShKU1N0cmluZ1JlZiBob3N0TmFt
ZSwgSlNTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkKIHsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5
cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFt
ZVJlZGlyZWN0ZWRGcm9tIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkpKTsKLSAgICAKLSAgICBW
ZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5
cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNb
aV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9
Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RGcm9tIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwg
cmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJv
bSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0
TmFtZSkgfSwKKyAgICAgICAgeyAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIsIHRvV0soaG9zdE5h
bWVSZWRpcmVjdGVkRnJvbSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhKU1N0cmluZ1JlZiBob3N0
TmFtZSwgSlNTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8pCiB7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tU
eXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWVSZWRpcmVjdGVkVG8iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZVJlZGlyZWN0ZWRUbykpKTsKLSAgICAKLSAgICBWZWN0
b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVS
ZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0u
Z2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVl
UmVkaXJlY3RUbyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVl
cy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvIiwgY3JlYXRlV0tE
aWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAg
ICAgICB7ICJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIsIHRvV0soaG9zdE5hbWVSZWRpcmVjdGVkVG8p
IH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNTdHJpbmdS
ZWYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRG
cm9tIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJp
bmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1Zh
bHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RG
cm9tIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAg
eyAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIsIHRvV0soaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0Ny
b3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oSlNTdHJpbmdSZWYgZnJvbUhvc3QsIEpTU3Ry
aW5nUmVmIHRvSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBr
ZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRnJv
bUhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhK
U1N0cmluZyhmcm9tSG9zdCkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb0hvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b0hvc3QpKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tU
eXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlz
W2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEo
KSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNv
cmF0aW9uIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiRnJvbUhvc3QiLCB0b1dL
KGZyb21Ib3N0KSB9LAorICAgICAgICB7ICJUb0hvc3QiLCB0b1dLKHRvSG9zdCkgfSwKKyAgICB9
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShz
ZWNvbmRzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiIsIHNlY29uZHMpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhKU1Zh
bHVlUmVmIGNhbGxiYWNrKQpAQCAtMjE0NywxMiArMTU0NSw5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
aW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxi
YWNrKQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2Fs
bGJhY2sodW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMsIHVuc2lnbmVkIG51bWJl
ck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgbnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3BQ
cmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rp
b24sIHVuc2lnbmVkIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291
cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wM051bWJlck9mUHJldmFsZW50UmVz
b3VyY2VzV2l0aFVJLCB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUksIHVuc2ln
bmVkIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSwgdW5zaWduZWQgdG9wM01lZGlhblVu
aXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwgdW5zaWduZWQgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVt
b3ZlZFdpdGhvdXRVSSkKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgCiAgICAgU3RyaW5nIHN0cmluZyA9IG1ha2VT
dHJpbmcoInsgXCJudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1wiIDogIiwgbnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXMsICIsIFwibnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uXCIgOiAiLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb24sICIsIFwibnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uXCIgOiAiLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sICIsIFwidG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNl
VXNlckludGVyYWN0aW9uXCIgOiAiLCB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJh
Y3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24sICIsIFwibWVkaWFuRGF5c1NpbmNlVXNlcklu
dGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uXCIgOiAiLCBtZWRp
YW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJh
Y3Rpb24sICIsIFwidG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJXCIgOiAiLCB0
b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUksICIsIFwidG9wM01lZGlhblN1YkZy
YW1lV2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUksICIsIFwidG9w
M01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VX
aXRob3V0VUksICIsIFwidG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSVwiIDogIiwg
dG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwgIiwgXCJ0b3AzTWVkaWFuRGF0YVJl
Y29yZHNSZW1vdmVkV2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVk
V2l0aG91dFVJLCAiIH0iKTsKICAgICAKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVN
YWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7CisgICAgSlNWYWx1ZVJlZiByZXN1
bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKG1haW5KU0NvbnRleHQoKSwgY3JlYXRlSlNT
dHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpLmdldCgpKTsKIAogICAgIGNhbGxUZXN0UnVubmVy
Q2FsbGJhY2soU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrSUQsIDEsICZyZXN1bHQp
OwogfQpAQCAtMjE2NCwxNiArMTU1OSwxNCBAQCBib29sIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NO
b3RpZnlPYnNlcnZlcigpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Byb2Nlc3NTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRp
c3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzIikpOwotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcyIpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyhKU1Zh
bHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNr
KFN0YXRpc3RpY3NEaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0Q2FsbGJhY2tJRCwgY29tcGxldGlv
bkhhbmRsZXIpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1VwZGF0ZUNv
b2tpZUJsb2NraW5nIikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAg
V1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1VwZGF0ZUNvb2tpZUJsb2NraW5nIik7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0
Q2FsbGJhY2soKQpAQCAtMjE4MywxMzUgKzE1NzYsODMgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2FsbERpZFNldEJsb2NrQ29va2llc0Zvckhvc3RDYWxsYmFjaygpCiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSIpKTsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZSgiU3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSIpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJv
b2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc05vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0IikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2
YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc1Nl
dElzUnVubmluZ1Rlc3QiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wg
dmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1Nob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc1Nob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIiwgdmFsdWUpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNl
dFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiLCBzZWNvbmRz
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1l
KGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3Rp
Y3NHcmFuZGZhdGhlcmluZ1RpbWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1l
Iiwgc2Vjb25kcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRp
c3RpY3NFbnRyaWVzKHVuc2lnbmVkIGVudHJpZXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZW50cmllcykpOwotICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiLCBl
bnRyaWVzKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1BydW5lRW50
cmllc0Rvd25Ubyh1bnNpZ25lZCBlbnRyaWVzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFBydW5lRW50cmllc0Rvd25UbyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShlbnRyaWVzKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRQcnVuZUVudHJpZXNEb3duVG8iLCBlbnRyaWVz
KTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmUoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZUNh
bGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3Rp
Y3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpOwotICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc0NsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0
aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNp
Z25lZCBob3VycywgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJD
YWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZUNhbGxi
YWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3ND
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGhvdXJzKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnMiLCBob3Vycyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbChKU1ZhbHVlUmVmIGNh
bGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRDbGVh
clRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWxDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0NsZWFyVGhyb3VnaFdlYnNpdGVEYXRh
UmVtb3ZhbCIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6
cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QoSlNT
dHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcykKIHsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5jbHVk
ZUh0dHBPbmx5Q29va2llcyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5n
UmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdL
ZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6
ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewot
ICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ld
ID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0
YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rp
b25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5
cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3Qi
LCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5h
bWUpIH0sCisgICAgICAgIHsgIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiLCBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9
CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlKEpTU3RyaW5n
UmVmIGhvc3ROYW1lKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiKSk7Ci0g
ICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
aG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0
YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1
ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsK
KyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJ
c1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiLCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwKGRvdWJsZSBzZWNv
bmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NDYWNoZU1heEFn
ZUNhcCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCIsIHNlY29uZHMpOwogfQogCiBi
b29sIFRlc3RSdW5uZXI6Omhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24oSlNTdHJpbmdSZWYg
aG9zdE5hbWUpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24iKSk7Ci0gICAg
YXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9z
dE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShh
ZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAg
ICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJIYXNT
dGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlcihib29s
IHZhbHVlLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjMyMCw5ICsxNjYxLDcg
QEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIo
Ym9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb20KICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGNh
Y2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRTaG91bGREb3duZ3JhZGVSZWZl
cnJlckNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlciIsIHZh
bHVlKTsKICAgICBtX2hhc1NldERvd25ncmFkZVJlZmVycmVyQ2FsbGJhY2sgPSB0cnVlOwogfQog
CkBAIC0yMzM4LDExICsxNjc3LDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1No
b3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlCiAgICAgICAg
IHJldHVybjsKIAogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRT
aG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJk
UGFydHlDb29raWVzIikpOworICAgIGF1dG8gbWVzc2FnZU5hbWUgPSAiU2V0U3RhdGlzdGljc1No
b3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiOwogICAgIGlmIChvbmx5T25TaXRlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24pCi0gICAgICAgIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNv
b2tpZXNPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUp
KTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAgICAg
bWVzc2FnZU5hbWUgPSAiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNP
blNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiI7CisgICAgcG9zdE1lc3NhZ2UobWVzc2FnZU5h
bWUsIHZhbHVlKTsKICAgICBtX2hhc1NldEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNDYWxsYmFjayA9
IHRydWU7CiB9CiAKQEAgLTIzNTgsOSArMTY5Niw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKGJvb2wgdmFsdWUsIEpTVmFs
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3Rp
Y3NEaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUNhbGxiYWNrSUQsIGNvbXBs
ZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzRmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3Nh
Z2UoIlNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSIsIHZhbHVl
KTsKICAgICBtX2hhc1NldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlQ2FsbGJhY2sg
PSB0cnVlOwogfQogCkBAIC0yMzgzLDEwICsxNzE5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2FsbENsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbENhbGxiYWNrKCkKIHZvaWQg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzKEpTU3RyaW5n
UmVmIGhvc3ROYW1lLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hl
VGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2ll
c0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIGF1dG8gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU2V0VG9T
YW1lU2l0ZVN0cmljdENvb2tpZXMiKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS0J1bmRsZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1Nl
dFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tp
ZXNDYWxsYmFjaygpCkBAIC0yMzk4LDI3ICsxNzMxLDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3Rh
dGlzdGljc0NhbGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0NhbGxiYWNrKCkKIHZvaWQg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4oSlNTdHJp
bmdSZWYgZmlyc3RQYXJ0eVVSTFN0cmluZywgSlNTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcsIEpT
VmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJh
Y2soU3RhdGlzdGljc0RpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFja0lELCBj
b21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAg
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Rmlyc3RQYXJ0eVVSTCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aEpTU3RyaW5nKGZpcnN0UGFydHlVUkxTdHJpbmcpKSk7Ci0gICAgCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ05BTUUiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhjbmFt
ZVVSTFN0cmluZykpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5
cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgp
KTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tp
XSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldEZpcnN0UGFy
dHlIb3N0Q05BTUVEb21haW4iKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tE
aWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlz
LnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwor
ICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9t
YWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiRmlyc3RQYXJ0eVVSTCIsIHRv
V0soZmlyc3RQYXJ0eVVSTFN0cmluZykgfSwKKyAgICAgICAgeyAiQ05BTUUiLCB0b1dLKGNuYW1l
VVJMU3RyaW5nKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFjaygpCkBAIC0y
NDI5LDEwICsxNzQ1LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEZp
cnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4oSlNTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcs
IEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2Fs
bGJhY2soU3RhdGlzdGljc0RpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbkNhbGxiYWNrSUQsIGNv
bXBsZXRpb25IYW5kbGVyKTsKLQotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9t
YWluIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKGNuYW1lVVJMU3RyaW5nKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5
Q05BTUVEb21haW4iLCB0b1dLKGNuYW1lVVJMU3RyaW5nKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW5DYWxsYmFj
aygpCkBAIC0yNDQzLDkgKzE3NTYsOCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxs
RGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpz
dGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRSZXNldFRv
Q29uc2lzdGVudFN0YXRlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlIikp
OwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBXVFI6OnBvc3RNZXNz
YWdlKCJTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSIpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUNhbGxiYWNrKCkK
QEAgLTI0ODYsOTUgKzE3OTgsNDYgQEAgdm9pZCBUZXN0UnVubmVyOjp0ZXh0RmllbGREaWRFbmRF
ZGl0aW5nQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNr
KEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzIikpOwotICAg
IFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiR2V0
QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlk
UmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2soVmVjdG9yPFN0cmluZz4mIGRv
bWFpbnMpCitzdGF0aWMgSlNWYWx1ZVJlZiBtYWtlRG9tYWluc1ZhbHVlKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBkb21haW5zKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJbIik7CisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCdbJyk7CiAgICAgYm9vbCBm
aXJzdERvbWFpbiA9IHRydWU7CiAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0g
ICAgICAgIGlmIChmaXJzdERvbWFpbikKLSAgICAgICAgICAgIGZpcnN0RG9tYWluID0gZmFsc2U7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
LCAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkb21haW4pOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlwiIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZpcnN0RG9tYWluID8g
IlwiIiA6ICIsIFwiIiwgZG9tYWluLCAnIicpOworICAgICAgICBmaXJzdERvbWFpbiA9IGZhbHNl
OwogICAgIH0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIl0iKTsKLSAgICAKLSAg
ICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwg
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0KKyAgICBidWlsZGVyLmFwcGVuZCgnXScpOwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKG1haW5KU0NvbnRleHQoKSwgY3Jl
YXRlSlNTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpLmdldCgpKTsKK30K
K3ZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllc0Nh
bGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQoreworICAgIGF1dG8gcmVzdWx0ID0gbWFr
ZURvbWFpbnNWYWx1ZShkb21haW5zKTsKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6bG9hZGVkU3VicmVzb3VyY2VEb21haW5zKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7
CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2Fs
bGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxvYWRl
ZFN1YnJlc291cmNlRG9tYWlucyIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIp
OworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkxvYWRlZFN1YnJlc291cmNlRG9tYWlucyIpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5z
Q2FsbGJhY2soVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKQogewotICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAKLSAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1sn
KTsKLSAgICBib29sIGlzRmlyc3REb21haW4gPSB0cnVlOwotICAgIGZvciAoYXV0byYgZG9tYWlu
IDogZG9tYWlucykgewotICAgICAgICBpZiAoaXNGaXJzdERvbWFpbikKLSAgICAgICAgICAgIGlz
Rmlyc3REb21haW4gPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIlwiIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGRvbWFpbik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKLSAgICB9Ci0gICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJ10nKTsKLSAgICAKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFs
dWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7
Ci0KKyAgICBhdXRvIHJlc3VsdCA9IG1ha2VEb21haW5zVmFsdWUoZG9tYWlucyk7CiAgICAgY2Fs
bFRlc3RSdW5uZXJDYWxsYmFjayhMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnNDYWxsYmFja0lELCAx
LCAmcmVzdWx0KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrTWVkaWFEZXZpY2UoSlNT
dHJpbmdSZWYgcGVyc2lzdGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbCwgY29uc3QgY2hhciogdHlw
ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQZXJzaXN0ZW50SUQiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQodG9XSyhwZXJzaXN0ZW50SWQpKTsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxhYmVsIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKHRvV0sobGFiZWwpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlR5cGUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0eXBlKSkpOwotCi0gICAgVmVj
dG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVl
czsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6
ZSh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAg
cmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkFkZE1vY2tNZWRpYURldmljZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rp
b25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5
cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkFkZE1vY2tNZWRpYURldmljZSIsIGNyZWF0ZVdL
RGljdGlvbmFyeSh7CisgICAgICAgIHsgIlBlcnNpc3RlbnRJRCIsIHRvV0socGVyc2lzdGVudElk
KSB9LAorICAgICAgICB7ICJMYWJlbCIsIHRvV0sobGFiZWwpIH0sCisgICAgICAgIHsgIlR5cGUi
LCB0b1dLKHR5cGUpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFk
ZE1vY2tDYW1lcmFEZXZpY2UoSlNTdHJpbmdSZWYgcGVyc2lzdGVudElkLCBKU1N0cmluZ1JlZiBs
YWJlbCkKQEAgLTI1OTQsMTUzICsxODU3LDcyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1Nj
cmVlbkRldmljZShKU1N0cmluZ1JlZiBwZXJzaXN0ZW50SWQsIEpTU3RyaW5nUmVmIGxhYmVsCiAK
IHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJNb2NrTWVkaWFEZXZpY2VzKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJDbGVhck1vY2tNZWRpYURldmljZXMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIkNsZWFyTW9ja01lZGlhRGV2aWNlcyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnJlbW92ZU1vY2tNZWRpYURldmljZShKU1N0cmluZ1JlZiBwZXJzaXN0ZW50SWQpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVtb3ZlTW9ja01lZGlhRGV2aWNlIikpOwotICAgIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkodG9XSyhwZXJzaXN0ZW50SWQpKTsKLQotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiUmVtb3ZlTW9ja01lZGlhRGV2aWNlIiwg
dG9XSyhwZXJzaXN0ZW50SWQpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZXNldE1vY2tNZWRp
YURldmljZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc2V0TW9ja01lZGlhRGV2
aWNlcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiUmVzZXRNb2NrTWVkaWFEZXZpY2Vz
Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uKHVuc2ln
bmVkIG9yaWVudGF0aW9uKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iKSk7Ci0g
ICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUob3JpZW50YXRpb24p
KTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldE1vY2tDYW1lcmFPcmll
bnRhdGlvbiIsIG9yaWVudGF0aW9uKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc01vY2tSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJFbmFibGVkIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVs
bHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVy
bkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0
VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQo
KSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJ
c01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCIpOwogfQogCiAjaWYgUExBVEZP
Uk0oTUFDKQorCiB2b2lkIFRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBp
bmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDb25uZWN0TW9ja0dhbWVwYWQiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoaW5kZXgpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
Q29ubmVjdE1vY2tHYW1lcGFkIiwgaW5kZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc2Nv
bm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJEaXNjb25uZWN0TW9ja0dhbWVwYWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLQotICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiRGlzY29ubmVjdE1vY2tHYW1lcGFkIiwgaW5k
ZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkRGV0YWlscyh1bnNpZ25l
ZCBpbmRleCwgSlNTdHJpbmdSZWYgZ2FtZXBhZElELCBKU1N0cmluZ1JlZiBtYXBwaW5nLCB1bnNp
Z25lZCBheGlzQ291bnQsIHVuc2lnbmVkIGJ1dHRvbkNvdW50KQogewotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJRCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGdh
bWVwYWRJRCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTWFwcGluZyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKG1hcHBpbmcp
KTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkdhbWVwYWRJbmRleCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGluZGV4KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQXhpc0NvdW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoYXhpc0NvdW50KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uQ291bnQiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25Db3VudCkpKTsKLQotICAg
IFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdW
YWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5y
ZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAg
ICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZERldGFpbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRl
KHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZERldGFpbHMi
LCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJHYW1lcGFkSUQiLCB0b1dLKGdhbWVw
YWRJRCkgfSwKKyAgICAgICAgeyAiTWFwcGluZyIsIHRvV0sobWFwcGluZykgfSwKKyAgICAgICAg
eyAiR2FtZXBhZEluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpIH0sCisgICAg
ICAgIHsgIkF4aXNDb3VudCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhpc0NvdW50KSkgfSwK
KyAgICAgICAgeyAiQnV0dG9uQ291bnQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbkNv
dW50KSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dh
bWVwYWRBeGlzVmFsdWUodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGF4aXNJbmRleCwgZG91Ymxl
IHZhbHVlKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSkpOwot
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QXhpc0luZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
YXhpc0luZGV4KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Rv
dWJsZUNyZWF0ZSh2YWx1ZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsK
LSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5
cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5
c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5n
ZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZEF4
aXNWYWx1ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5k
YXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAg
ICAgICAgeyAiR2FtZXBhZEluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpIH0s
CisgICAgICAgIHsgIkF4aXNJbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhpc0luZGV4
KSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSkg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRC
dXR0b25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgYnV0dG9uSW5kZXgsIGRvdWJsZSB2
YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1
dHRvbkluZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
YnV0dG9uSW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKHZhbHVlKSkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlz
OwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShr
ZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdL
ZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ld
LmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1vY2tHYW1lcGFk
QnV0dG9uVmFsdWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1
ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5
KHsKKyAgICAgICAgeyAiR2FtZXBhZEluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRl
eCkpIH0sCisgICAgICAgIHsgIkJ1dHRvbkluZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShi
dXR0b25JbmRleCkpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0
ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQorCiAjZWxzZQorCiB2b2lkIFRlc3RSdW5u
ZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCkKIHsKIH0KQEAgLTI3NjAsMzAgKzE5NDIs
MjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSh1bnNpZ25lZCwg
dW5zaWduZWQsIGRvdWJsZSkKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRCdXR0b25W
YWx1ZSh1bnNpZ25lZCwgdW5zaWduZWQsIGRvdWJsZSkKIHsKIH0KKwogI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxlcyhKU1ZhbHVlUmVm
IGZpbGVzVmFsdWUpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKHBhZ2UpKTsKKyAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsK
IAogICAgIGlmICghSlNWYWx1ZUlzQXJyYXkoY29udGV4dCwgZmlsZXNWYWx1ZSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEpTT2JqZWN0UmVmIGZpbGVzID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIGZpbGVzVmFsdWUsIG51bGxwdHIpOwotICAgIHN0YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5
ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBK
U1ZhbHVlUmVmIGZpbGVzTGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQs
IGZpbGVzLCBsZW5ndGhQcm9wZXJ0eS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVl
SXNOdW1iZXIoY29udGV4dCwgZmlsZXNMZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybjsKLQor
ICAgIGF1dG8gZmlsZXMgPSAoSlNPYmplY3RSZWYpZmlsZXNWYWx1ZTsKICAgICBhdXRvIGZpbGVV
UkxzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBhdXRvIGZpbGVzTGVu
Z3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgZmlsZXNM
ZW5ndGhWYWx1ZSwgbnVsbHB0cikpOworICAgIGF1dG8gZmlsZXNMZW5ndGggPSBhcnJheUxlbmd0
aChjb250ZXh0LCBmaWxlcyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlc0xlbmd0
aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWVSZWYgZmlsZVZhbHVlID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eUF0SW5kZXgoY29udGV4dCwgZmlsZXMsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpT
VmFsdWVJc1N0cmluZyhjb250ZXh0LCBmaWxlVmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgYXV0byBmaWxlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCBmaWxlVmFsdWUsIG51bGxwdHIpKTsKKyAgICAgICAgYXV0byBmaWxlID0gY3JlYXRlSlNTdHJp
bmcoY29udGV4dCwgZmlsZVZhbHVlKTsKICAgICAgICAgc2l6ZV90IGZpbGVCdWZmZXJTaXplID0g
SlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGZpbGUuZ2V0KCkpICsgMTsKICAgICAg
ICAgYXV0byBmaWxlQnVmZmVyID0gbWFrZVVuaXF1ZUFycmF5PGNoYXI+KGZpbGVCdWZmZXJTaXpl
KTsKICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhmaWxlLmdldCgpLCBmaWxlQnVmZmVy
LmdldCgpLCBmaWxlQnVmZmVyU2l6ZSk7CkBAIC0yNzk3LDIyICsxOTc0LDE1IEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXMoSlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogCiAgICAg
fQogCi0gICAgc3RhdGljIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRPcGVuUGFuZWxGaWxlVVJMcyIpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlLCBtZXNzYWdlTmFtZS5nZXQoKSwgZmlsZVVSTHMuZ2V0KCkpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0T3BlblBhbmVsRmlsZVVSTHMiLCBmaWxlVVJMcy5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXNNZWRpYUljb24oSlNW
YWx1ZVJlZiBkYXRhKQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7
Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENv
bnRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpKTsKLQotICAgIGF1dG8mIGluamVj
dGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwogICAgIC8vIEZJWE1FICgx
MjMwNTgpOiBVc2UgYSBKU0MgQVBJIHRvIGdldCBidWZmZXIgY29udGVudHMgb25jZSBzdWNoIGlz
IGV4cG9zZWQuCi0gICAgV0tSZXRhaW5QdHI8V0tEYXRhUmVmPiBpY29uRGF0YSA9IGFkb3B0V0so
V0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhBcnJheShpbmplY3RlZEJ1bmRsZS5idW5kbGUo
KSwgY29udGV4dCwgZGF0YSkpOwotCi0gICAgc3RhdGljIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRPcGVuUGFuZWxGaWxlVVJMc01l
ZGlhSWNvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgaWNvbkRhdGEuZ2V0KCkpOworICAgIGF1dG8gaWNvbkRhdGEgPSBhZG9wdFdLKFdL
QnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtYWluSlNDb250ZXh0KCksIGRhdGEpKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIlNldE9wZW5QYW5lbEZpbGVVUkxzTWVkaWFJY29uIiwgaWNvbkRhdGEuZ2V0KCkpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oZGF0YSk7CiAjZW5kaWYKQEAgLTI4MjEsMTEgKzE5OTEsNyBA
QCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKEpTVmFsdWVSZWYg
ZGF0YSkKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzKEpTVmFs
dWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soRGlkUmVtb3Zl
QWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFscyIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUodHJ1ZSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMiLCB0
cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRl
bnRpYWxzQ2FsbGJhY2soKQpAQCAtMjgzNSw0OSArMjAwMSwzMyBAQCB2b2lkIFRlc3RSdW5uZXI6
OmNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFjaygpCiAKIHZvaWQgVGVz
dFJ1bm5lcjo6Y2xlYXJET01DYWNoZShKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2xlYXJET01DYWNoZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKG9y
aWdpbikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJET01DYWNo
ZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJET01D
YWNoZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRE9NQ2FjaGVzIikpOwot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhckRPTUNhY2hlcyIpOwogfQogCiBib29sIFRl
c3RSdW5uZXI6Omhhc0RPTUNhY2hlKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIYXNET01DYWNoZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKG9yaWdp
bikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0
V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJl
dHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkhhc0RPTUNh
Y2hlIiwgdG9XSyhvcmlnaW4pLmdldCgpKTsKIH0KIAogdWludDY0X3QgVGVzdFJ1bm5lcjo6ZG9t
Q2FjaGVTaXplKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJET01DYWNoZVNpemUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBX
S1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5E
YXRhKTsKLSAgICByZXR1cm4gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4ocmV0dXJuRGF0YSkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ1VJbnQ2NCgiRE9NQ2FjaGVTaXplIiwgdG9XSyhvcmlnaW4pLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGJvb2wgd2lsbElu
Y3JlYXNlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFsbG93U3RvcmFnZVF1b3Rh
SW5jcmVhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHdpbGxJbmNyZWFzZSkpOwotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UiLCB3
aWxsSW5jcmVhc2UpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmdldEFwcGxpY2F0aW9uTWFuaWZl
c3RUaGVuKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJh
Y2soR2V0QXBwbGljYXRpb25NYW5pZmVzdENhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRBcHBsaWNhdGlvbk1hbmlmZXN0IikpOwotICAgIFdL
QnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiR2V0QXBw
bGljYXRpb25NYW5pZmVzdCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpZEdldEFwcGxpY2F0
aW9uTWFuaWZlc3QoKQpAQCAtMjg5NywyMjEgKzIwNDcsMTMwIEBAIHNpemVfdCBUZXN0UnVubmVy
Ojp1c2VyU2NyaXB0SW5qZWN0ZWRDb3VudCgpIGNvbnN0CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW5q
ZWN0VXNlclNjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSW5qZWN0VXNlclNjcmlwdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHNjcmlwdCkp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJJbmplY3RVc2VyU2NyaXB0IiwgdG9XSyhzY3JpcHQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZvclRlc3Rpbmco
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNlbmREaXNwbGF5Q29uZmlndXJhdGlvbkNo
YW5nZWRNZXNzYWdlRm9yVGVzdGluZyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2Vu
ZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nIik7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dChkb3VibGUgc2Vjb25k
cykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZSgiU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dCIsIHNlY29uZHMpOwogfQogCiAv
LyBXZWJBdXRobgogdm9pZCBUZXN0UnVubmVyOjphZGRUZXN0S2V5VG9LZXljaGFpbihKU1N0cmlu
Z1JlZiBwcml2YXRlS2V5QmFzZTY0LCBKU1N0cmluZ1JlZiBhdHRyTGFiZWwsIEpTU3RyaW5nUmVm
IGFwcGxpY2F0aW9uVGFnQmFzZTY0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsK
LQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlByaXZhdGVLZXkiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhwcml2YXRlS2V5QmFzZTY0
KSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJBdHRyTGFiZWwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhhdHRyTGFiZWwpKTsK
LQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkFwcGxpY2F0aW9uVGFnIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXBwbGljYXRpb25U
YWdCYXNlNjQpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0
b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkp
OwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtl
eXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAg
ICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRUZXN0S2V5VG9LZXljaGFpbiIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tl
eXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkFkZFRl
c3RLZXlUb0tleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiUHJpdmF0
ZUtleSIsIHRvV0socHJpdmF0ZUtleUJhc2U2NCkgfSwKKyAgICAgICAgeyAiQXR0ckxhYmVsIiwg
dG9XSyhhdHRyTGFiZWwpIH0sCisgICAgICAgIHsgIkFwcGxpY2F0aW9uVGFnIiwgdG9XSyhhcHBs
aWNhdGlvblRhZ0Jhc2U2NCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2xlYW5VcEtleWNoYWluKEpTU3RyaW5nUmVmIGF0dHJMYWJlbCwgSlNTdHJpbmdSZWYgYXBw
bGljYXRpb25MYWJlbEJhc2U2NCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0K
LSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
dHRyTGFiZWwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhhdHRyTGFiZWwpKTsKLQotICAg
IGlmIChhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB7Ci0gICAgICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFiZWwiKSkpOwot
ICAgICAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkpOwotICAg
IH0KLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBl
UmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJh
d1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0
KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKKyAgICBpZiAoIWFw
cGxpY2F0aW9uTGFiZWxCYXNlNjQpIHsKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
Q2xlYW5VcEtleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgICAgIHsgIkF0
dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAgICB9KS5nZXQoKSk7CisgICAgICAg
IHJldHVybjsKICAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhblVwS2V5Y2hh
aW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJDbGVhblVwS2V5Y2hhaW4iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJBdHRy
TGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAgICAgeyAiQXBwbGljYXRpb25MYWJlbCIs
IHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIGJv
b2wgVGVzdFJ1bm5lcjo6a2V5RXhpc3RzSW5LZXljaGFpbihKU1N0cmluZ1JlZiBhdHRyTGFiZWws
IEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpCiB7Ci0gICAgVmVjdG9yPFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBl
UmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXR0
ckxhYmVsKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0so
YXBwbGljYXRpb25MYWJlbEJhc2U2NCkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdL
ZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6
ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICBy
YXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVz
W2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleUV4aXN0c0lu
S2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMu
ZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBu
dWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9
PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFk
b3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAg
IHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiS2V5RXhpc3Rz
SW5LZXljaGFpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkF0dHJMYWJlbCIs
IHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAgICB7ICJBcHBsaWNhdGlvbkxhYmVsIiwgdG9XSyhh
cHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdW5zaWduZWQg
bG9uZyBUZXN0UnVubmVyOjpzZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxi
YWNrQ2FsbHNDb3VudCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVs
bHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9
PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tVSW50NjRHZXRWYWx1ZShhZG9w
dFdLKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJl
dHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KCJTZXJ2ZXJUcnVzdEV2
YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRT
aG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KGJvb2wgc2hvdWxkRGlz
bWlzc0FzeW5jaHJvbm91c2x5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNob3VsZERp
c21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHNob3Vs
ZERpc21pc3NBc3luY2hyb25vdXNseSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiU2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseSIsIHNob3Vs
ZERpc21pc3NBc3luY2hyb25vdXNseSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6YWJvcnRNb2Rh
bCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWJvcnRNb2RhbCIpKTsKLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiQWJvcnRNb2RhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmR1
bXBBZENsaWNrQXR0cmlidXRpb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wQWRDbGlja0F0dHJpYnV0aW9uIikp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJEdW1w
QWRDbGlja0F0dHJpYnV0aW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBZENsaWNr
QXR0cmlidXRpb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbiIpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiQ2xlYXJBZENsaWNr
QXR0cmlidXRpb24iKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbnNUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJBZENsaWNrQXR0
cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpKTsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZSgiQ2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3Zh
bCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRl
VGltZXJGb3JUZXN0aW5nKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlKCJTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVz
dGluZyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRp
b25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhKU1N0cmluZ1JlZiB1cmxTdHJpbmcpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZv
clRlc3RpbmciKSk7Ci0gICAgYXV0byB3dGZVUkxTdHJpbmcgPSB0b1dURlN0cmluZyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyh1cmxTdHJpbmcpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHd0ZlVS
TFN0cmluZy51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJz
aW9uVVJMRm9yVGVzdGluZyIsCisgICAgICAgIGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoVVRGOENT
dHJpbmcodG9XVEZTdHJpbmcodXJsU3RyaW5nKS51dGY4KCkuZGF0YSgpKSkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZygp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3Rpbmci
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRPZmZzY3JlZW5DYW52YXNFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiT2Zmc2NyZWVuQ2FudmFzRW5hYmxlZCIpKTsK
LSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsK
LSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVk
QnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBl
bmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiT2Zmc2NyZWVuQ2FudmFzRW5h
YmxlZCIsIGVuYWJsZWQpOwogfQogCiBib29sIFRlc3RSdW5uZXI6Omhhc0FwcEJvdW5kU2Vzc2lv
bigpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkhhc0FwcEJvdW5kU2Vzc2lvbiIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJu
RGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5
cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0KLSAgICByZXR1cm4g
V0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVy
bkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0
dXJuaW5nQm9vbGVhbigiSGFzQXBwQm91bmRTZXNzaW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2xlYXJBcHBCb3VuZFNlc3Npb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhckFwcEJvdW5kU2Vzc2lvbiIp
KTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJBcHBCb3VuZFNlc3Npb24iKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRBcHBCb3VuZERvbWFpbnMoSlNWYWx1ZVJlZiBvcmlnaW5B
cnJheSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhEaWRTZXRBcHBCb3VuZERvbWFpbnNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFu
ZGxlcik7CiAKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBt
YWluSlNDb250ZXh0KCk7CiAKICAgICBpZiAoIUpTVmFsdWVJc0FycmF5KGNvbnRleHQsIG9yaWdp
bkFycmF5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNPYmplY3RSZWYgb3JpZ2lucyA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCBvcmlnaW5BcnJheSwgbnVsbHB0cik7Ci0gICAgc3RhdGlj
IGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgb3JpZ2luc0xlbmd0aFZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcmlnaW5zLCBsZW5ndGhQcm9wZXJ0eS5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgb3JpZ2luc0xlbmd0aFZh
bHVlKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgYXV0byBvcmlnaW5zID0gSlNWYWx1ZVRvT2Jq
ZWN0KGNvbnRleHQsIG9yaWdpbkFycmF5LCBudWxscHRyKTsKICAgICBhdXRvIG9yaWdpblVSTHMg
PSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIGF1dG8gb3JpZ2luc0xlbmd0
aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIG9yaWdpbnNM
ZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3JpZ2lu
c0xlbmd0aDsgKytpKSB7CisgICAgYXV0byBvcmlnaW5zTGVuZ3RoID0gYXJyYXlMZW5ndGgoY29u
dGV4dCwgb3JpZ2lucyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9yaWdpbnNMZW5n
dGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIG9yaWdpblZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3JpZ2lucywgaSwgbnVsbHB0cik7CiAgICAgICAgIGlm
ICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIG9yaWdpblZhbHVlKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIGF1dG8gb3JpZ2luID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCBvcmlnaW5WYWx1ZSwgbnVsbHB0cikpOworICAgICAgICBhdXRvIG9yaWdpbiA9
IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIG9yaWdpblZhbHVlKTsKICAgICAgICAgc2l6ZV90IG9y
aWdpbkJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUob3JpZ2lu
LmdldCgpKSArIDE7CiAgICAgICAgIGF1dG8gb3JpZ2luQnVmZmVyID0gbWFrZVVuaXF1ZUFycmF5
PGNoYXI+KG9yaWdpbkJ1ZmZlclNpemUpOwogICAgICAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5n
KG9yaWdpbi5nZXQoKSwgb3JpZ2luQnVmZmVyLmdldCgpLCBvcmlnaW5CdWZmZXJTaXplKTsKQEAg
LTMxMTksNyArMjE3OCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQm91bmREb21haW5zKEpT
VmFsdWVSZWYgb3JpZ2luQXJyYXksIEpTVmFsdWVSZWYgY29tcGxldGlvCiAgICAgICAgIFdLQXJy
YXlBcHBlbmRJdGVtKG9yaWdpblVSTHMuZ2V0KCksIGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoVVRG
OENTdHJpbmcob3JpZ2luQnVmZmVyLmdldCgpKSkuZ2V0KCkpOwogICAgIH0KIAotICAgIGF1dG8g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRB
cHBCb3VuZERvbWFpbnMiKSk7CisgICAgYXV0byBtZXNzYWdlTmFtZSA9IHRvV0soIlNldEFwcEJv
dW5kRG9tYWlucyIpOwogICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgb3JpZ2luVVJMcy5nZXQoKSk7
CiB9CiAKQEAgLTMxMjgsNiArMjE4NywxMSBAQCB2b2lkIFRlc3RSdW5uZXI6OmRpZFNldEFwcEJv
dW5kRG9tYWluc0NhbGxiYWNrKCkKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKERpZFNldEFw
cEJvdW5kRG9tYWluc0NhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnBvc3RNZXNz
YWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSkuZ2V0
KCksIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCiBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCmluZGV4
IGMwYTE0MDkwNWVkZjNkZGE0YTc2MWFiNjIwN2Q5N2I0MzYyMDg2YmIuLmFhZWI0MTBlM2VkMDdm
YjZjYTRmOWYwM2JmZjdkZTM3MjI1MjdmNzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCkBAIC00Niw3ICs0Niw3IEBAIHB1Ymxp
YzoKICAgICAvLyBKU1dyYXBwYWJsZQogICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xh
c3MoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0
UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VX
aW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIGJvb2wgaXNJT1NGYW1pbHkoKSBjb25z
dAogICAgIHsKQEAgLTI1Myw3ICsyNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaWxsU2Vu
ZFJlcXVlc3RSZXR1cm5zTnVsbChib29sIGYpIHsgbV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVs
bCA9IGY7IH0KICAgICBib29sIHdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0OyB9
CiAgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoYm9vbCBm
KSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0ID0gZjsgfQotICAgIHZv
aWQgc2V0V2lsbFNlbmRSZXF1ZXN0QWRkc0hUVFBCb2R5KEpTU3RyaW5nUmVmIGJvZHkpIHsgbV93
aWxsU2VuZFJlcXVlc3RIVFRQQm9keSA9IHRvV1RGU3RyaW5nKHRvV0soYm9keSkpOyB9CisgICAg
dm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RBZGRzSFRUUEJvZHkoSlNTdHJpbmdSZWYgYm9keSkgeyBt
X3dpbGxTZW5kUmVxdWVzdEhUVFBCb2R5ID0gdG9XVEZTdHJpbmcoYm9keSk7IH0KICAgICBTdHJp
bmcgd2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHkoKSBjb25zdCB7IHJldHVybiBtX3dpbGxTZW5kUmVx
dWVzdEhUVFBCb2R5OyB9CiAKICAgICB2b2lkIHNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYp
OwpAQCAtMjg2LDcgKzI4Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbGxGb2N1c1dlYlZpZXdD
YWxsYmFjaygpOwogICAgIHZvaWQgY2FsbFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrKCk7
CiAKLSAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJlbmNlLCBK
U1N0cmluZ1JlZiB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKEpT
U3RyaW5nUmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVmIHZhbHVlKTsKIAogICAgIC8vIENvb2tp
ZXMgdGVzdGluZwogICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sKTsKQEAgLTMw
NCw3ICszMDQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBHZW9sb2NhdGlvbi4KICAgICB2b2lkIHNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sKTsKLSAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5LCBKU1ZhbHVlUmVmIGFsdGl0dWRlLCBKU1ZhbHVlUmVmIGFsdGl0dWRlQWNjdXJhY3ksIEpT
VmFsdWVSZWYgaGVhZGluZywgSlNWYWx1ZVJlZiBzcGVlZCwgSlNWYWx1ZVJlZiBmbG9vckxldmVs
KTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwg
ZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0
dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4g
aGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxl
dmVsKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJv
cihKU1N0cmluZ1JlZiBtZXNzYWdlKTsKICAgICBib29sIGlzR2VvbG9jYXRpb25Qcm92aWRlckFj
dGl2ZSgpOwogCkBAIC0zMzUsOCArMzM1LDggQEAgcHVibGljOgogICAgIGJvb2wgc2VjdXJlRXZl
bnRJbnB1dElzRW5hYmxlZCgpIGNvbnN0OwogCiAgICAgSlNWYWx1ZVJlZiBmYWlsTmV4dE5ld0Nv
ZGVCbG9jaygpOwotICAgIEpTVmFsdWVSZWYgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVm
IHRoZUZ1bmN0aW9uKTsKLSAgICBKU1ZhbHVlUmVmIG5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1
ZVJlZiB0aGVGdW5jdGlvbik7CisgICAgSlNWYWx1ZVJlZiBudW1iZXJPZkRGR0NvbXBpbGVzKEpT
VmFsdWVSZWYgZnVuY3Rpb24pOworICAgIEpTVmFsdWVSZWYgbmV2ZXJJbmxpbmVGdW5jdGlvbihK
U1ZhbHVlUmVmIGZ1bmN0aW9uKTsKIAogICAgIGJvb2wgc2hvdWxkRGVjaWRlTmF2aWdhdGlvblBv
bGljeUFmdGVyRGVsYXkoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZERlY2lkZU5hdmlnYXRpb25Q
b2xpY3lBZnRlckRlbGF5OyB9CiAgICAgdm9pZCBzZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9s
aWN5QWZ0ZXJEZWxheShib29sKTsKQEAgLTU0OSw2ICs1NDksOCBAQCBwcml2YXRlOgogCiAgICAg
V0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1fdGVzdFVSTDsgLy8gU2V0IGJ5IEluamVjdGVkQnVuZGxl
UGFnZSBvbmNlIHByb3Zpc2lvbmFsIGxvYWQgc3RhcnRzLgogCisgICAgdm9pZCBwb3N0TWVzc2Fn
ZShjb25zdCBjaGFyKiBuYW1lLCBib29sKTsKKwogICAgIFN0cmluZyBtX3dpbGxTZW5kUmVxdWVz
dEhUVFBCb2R5OwogICAgIFdURjo6U2Vjb25kcyBtX3RpbWVvdXQgeyAzMF9zIH07CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29u
dHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJ
bnB1dENvbnRyb2xsZXIuY3BwCmluZGV4IDY0YWM4MTk3MTUzYWFlMGEwYWI3MWViYmMyOTQyNDg0
YTM1ZTY1YWQuLjZlMDBkOTkyMjVkMWYxYWFiMjYxNTZjODkyNWIwNTY2YTM2NmQ3MjkgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29u
dHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9U
ZXh0SW5wdXRDb250cm9sbGVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkRpY3Rp
b25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUg
IkluamVjdGVkQnVuZGxlUGFnZS5oIgogI2luY2x1ZGUgIkpTVGV4dElucHV0Q29udHJvbGxlci5o
IgpAQCAtNDAsMzAgKzQxLDE0IEBAIFJlZjxUZXh0SW5wdXRDb250cm9sbGVyPiBUZXh0SW5wdXRD
b250cm9sbGVyOjpjcmVhdGUoKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHRJbnB1dENv
bnRyb2xsZXIpOwogfQogCi1UZXh0SW5wdXRDb250cm9sbGVyOjpUZXh0SW5wdXRDb250cm9sbGVy
KCkKLXsKLX0KLQotVGV4dElucHV0Q29udHJvbGxlcjo6flRleHRJbnB1dENvbnRyb2xsZXIoKQot
ewotfQotCiBKU0NsYXNzUmVmIFRleHRJbnB1dENvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCiB7
CiAgICAgcmV0dXJuIEpTVGV4dElucHV0Q29udHJvbGxlcjo6dGV4dElucHV0Q29udHJvbGxlckNs
YXNzKCk7CiB9CiAKLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3Qo
SlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgc2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93
T2JqZWN0LCAidGV4dElucHV0Q29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7Ci19
Ci0KLXN0YXRpYyB1bnNpZ25lZCBhcnJheUxlbmd0aChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgYXJyYXkpCi17Ci0gICAgYXV0byBsZW5ndGhTdHJpbmcgPSBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGlmIChhdXRvIGxlbmd0aFZh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBhcnJheSwgbGVuZ3RoU3RyaW5nLmdl
dCgpLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICByZXR1cm4g
MDsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGV4dElucHV0Q29udHJv
bGxlciIsIHRoaXMpOwogfQogCiBzdGF0aWMgV0tBcnJheVJlZiBjcmVhdGVDb21wb3NpdGlvbkhp
Z2hsaWdodERhdGEoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYganNIaWdobGlnaHRz
VmFsdWUpCkBAIC03Miw1MCArNTcsMTkgQEAgc3RhdGljIFdLQXJyYXlSZWYgY3JlYXRlQ29tcG9z
aXRpb25IaWdobGlnaHREYXRhKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmUKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIHJlc3VsdCA9IFdLTXV0YWJsZUFycmF5Q3Jl
YXRlKCk7Ci0gICAgYXV0byBqc0hpZ2hsaWdodHNBcnJheSA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RS
ZWY+KGpzSGlnaGxpZ2h0c1ZhbHVlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheUxlbmd0
aChjb250ZXh0LCBqc0hpZ2hsaWdodHNBcnJheSk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0KLSAgICBhdXRvIGpzRnJvbUtleSA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJmcm9tIikpOwotICAgIGF1dG8ganNMZW5ndGhLZXkgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGF1dG8ganND
b2xvcktleSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb2xvciIpKTsK
LQotICAgIGF1dG8gd2tGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiZnJvbSIpKTsKLSAgICBhdXRvIHdrTGVuZ3RoS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGF1dG8gd2tDb2xvcktleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbG9yIikpOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlUmVmIGV4
Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8ganNPYmplY3RWYWx1ZSA9IEpTT2JqZWN0
R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGpzSGlnaGxpZ2h0c0FycmF5LCBpLCAmZXhjZXB0
aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbiB8fCAhSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQs
IGpzT2JqZWN0VmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBq
c09iamVjdCA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGpzT2JqZWN0VmFsdWUpOwotICAgICAg
ICBhdXRvIGpzRnJvbVZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBqc09iamVj
dCwganNGcm9tS2V5LmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFqc0Zyb21WYWx1ZSB8
fCAhSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGpzRnJvbVZhbHVlKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGF1dG8ganNMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkoY29udGV4dCwganNPYmplY3QsIGpzTGVuZ3RoS2V5LmdldCgpLCBudWxscHRyKTsKLSAgICAg
ICAgaWYgKCFqc0xlbmd0aFZhbHVlIHx8ICFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwganNMZW5n
dGhWYWx1ZSkpCisgICAgYXV0byBhcnJheSA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGpzSGln
aGxpZ2h0c1ZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0
LCBhcnJheSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBh
cnJheSwgaSwgbnVsbHB0cik7CisgICAgICAgIGlmICghdmFsdWUgfHwgIUpTVmFsdWVJc09iamVj
dChjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRv
IGpzQ29sb3JWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwganNPYmplY3QsIGpz
Q29sb3JLZXkuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICBpZiAoIWpzQ29sb3JWYWx1ZSB8fCAh
SlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGpzQ29sb3JWYWx1ZSkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBhdXRvIGNvbG9yID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBqc0NvbG9yVmFsdWUsIG51bGxwdHIpKTsKLSAgICAgICAgYXV0byB3a0NvbG9yID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhjb2xvci5nZXQoKSkpOwotICAgICAg
ICBhdXRvIHdrRnJvbSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobHJvdW5kKEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBqc0Zyb21WYWx1ZSwgbnVsbHB0cikpKSk7Ci0gICAgICAgIGF1dG8gd2tM
ZW5ndGggPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwganNMZW5ndGhWYWx1ZSwgbnVsbHB0cikpKSk7Ci0KKyAgICAgICAgYXV0byBvYmplY3Qg
PSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPih2YWx1ZSk7CiAgICAgICAgIGF1dG8gZGljdGlvbmFy
eSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShkaWN0aW9uYXJ5LmdldCgpLCB3a0Zyb21LZXkuZ2V0KCksIHdrRnJvbS5n
ZXQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwgd2tM
ZW5ndGhLZXkuZ2V0KCksIHdrTGVuZ3RoLmdldCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShkaWN0aW9uYXJ5LmdldCgpLCB3a0NvbG9yS2V5LmdldCgpLCB3a0NvbG9yLmdldCgpKTsK
KyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImZyb20iLCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4obnVtZXJpY1Byb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgImZyb20iKSkpOworICAgICAgICBz
ZXRWYWx1ZShkaWN0aW9uYXJ5LCAibGVuZ3RoIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bWVy
aWNQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJsZW5ndGgiKSkpOworICAgICAgICBzZXRWYWx1
ZShkaWN0aW9uYXJ5LCAiY29sb3IiLCB0b1dLKHN0cmluZ1Byb3BlcnR5KGNvbnRleHQsIG9iamVj
dCwgImNvbG9yIikpLmdldCgpKTsKICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0ocmVzdWx0LCBk
aWN0aW9uYXJ5LmdldCgpKTsKICAgICB9Ci0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENv
bnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElu
cHV0Q29udHJvbGxlci5oCmluZGV4IDU1OGMyZTYxMTQwODE3ODVlM2I3Y2FlMTlmZWZkMzk2YWVi
MzdhOTQuLmE0NGMyOGU4NDQzOTE3MjkyYTliMzdiY2I3ZTI1NTJkMTIxNDRjYTQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJv
bGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElu
cHV0Q29udHJvbGxlci5oCkBAIC0yOCwxNyArMjgsMTcgQEAKICNpbmNsdWRlICJKU1dyYXBwYWJs
ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVl
SlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1N0cmluZyog
SlNTdHJpbmdSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVl
UmVmOworCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVGV4dElucHV0Q29udHJvbGxlciA6IHB1
YmxpYyBKU1dyYXBwYWJsZSB7CitjbGFzcyBUZXh0SW5wdXRDb250cm9sbGVyIGZpbmFsIDogcHVi
bGljIEpTV3JhcHBhYmxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFRleHRJbnB1dENvbnRy
b2xsZXI+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgflRleHRJbnB1dENvbnRyb2xsZXIoKTsKLQot
ICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygp
OwogCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYg
d2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRv
d09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgdm9pZCBzZXRNYXJrZWRUZXh0KEpTU3RyaW5n
UmVmIHRleHQsIGludCBmcm9tLCBpbnQgbGVuZ3RoLCBib29sIHN1cHByZXNzVW5kZXJsaW5lLCBK
U1ZhbHVlUmVmIGhpZ2hsaWdodHMpOwogICAgIGJvb2wgaGFzTWFya2VkVGV4dCgpOwpAQCAtNDYs
NyArNDYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRUZXh0KEpTU3RyaW5nUmVmIHRleHQp
OwogCiBwcml2YXRlOgotICAgIFRleHRJbnB1dENvbnRyb2xsZXIoKTsKKyAgICBUZXh0SW5wdXRD
b250cm9sbGVyKCkgPSBkZWZhdWx0OworCisgICAgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKSBm
aW5hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0gYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0FjdGl2YXRlRm9udHND
b2NvYS5tbQppbmRleCAwMjRmZTYwNTczYjhmMmM1OTJlYmZkYjM1ZjNhNDQ0ODVjZGI5NzU2Li41
YTViNzdlYzE5NGRhNWZlM2ZmZjk5MTM3Y2U5YWNkMjZkZmU0YzFlIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0FjdGl2YXRlRm9udHNDb2Nv
YS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0Fj
dGl2YXRlRm9udHNDb2NvYS5tbQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgYWN0aXZhdGVGb250
cygpCiAKIHZvaWQgaW5zdGFsbEZha2VIZWx2ZXRpY2EoV0tTdHJpbmdSZWYgY29uZmlndXJhdGlv
bikKIHsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvbmZpZ3VyYXRpb25TdHJpbmcgPSBh
ZG9wdENGKFdLU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbmZpZ3Vy
YXRpb24pKTsKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb25TdHJpbmcgPSBhZG9wdENGKFdLU3RyaW5n
Q29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRpb24pKTsKICAgICBO
U1VSTCAqcmVzb3VyY2VVUkwgPSBbcmVzb3VyY2VzRGlyZWN0b3J5VVJMKCkgVVJMQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmFrZUhlbHZldGlj
YS0lQC50dGYiLCBjb25maWd1cmF0aW9uU3RyaW5nLmdldCgpXSBpc0RpcmVjdG9yeTpOT107CiAg
ICAgQ0ZFcnJvclJlZiBlcnJvciA9IG51bGxwdHI7CiAgICAgaWYgKCFDVEZvbnRNYW5hZ2VyUmVn
aXN0ZXJGb250c0ZvclVSTCgoX19icmlkZ2UgQ0ZVUkxSZWYpcmVzb3VyY2VVUkwsIGtDVEZvbnRN
YW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJyb3IpKSB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFnZUNvY29hLm1t
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1
bmRsZVBhZ2VDb2NvYS5tbQppbmRleCA4MTc2MTgyN2E4ODFkMDZkZmU3MGE5YmQzMjI0NzMyYWUx
OWJjZjI4Li45MWQyNDljNzI3ZjY4NzVlZDRhNGNjZjE1OWMwZjc3ZDcyZjg1YmQ1IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVk
QnVuZGxlUGFnZUNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0KQEAgLTQ3LDEzICs0NywxMyBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cGxhdGZvcm1EaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZQogCiBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlOjpw
bGF0Zm9ybVJlc3BvbnNlTWltZVR5cGUoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKIHsKLSAg
ICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxS
ZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CisgICAgYXV0byBuc1VSTFJlc3Bv
bnNlID0gYWRvcHROUyhXS1VSTFJlc3BvbnNlQ29weU5TVVJMUmVzcG9uc2UocmVzcG9uc2UpKTsK
ICAgICByZXR1cm4gW25zVVJMUmVzcG9uc2UuZ2V0KCkgTUlNRVR5cGVdOwogfQogCiB1aW50NjRf
dCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVyQ291bnQoV0tVUkxSZXNwb25zZVJl
ZiByZXNwb25zZSkKIHsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gbnNVUkxSZXNwb25z
ZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7Cisg
ICAgYXV0byBuc1VSTFJlc3BvbnNlID0gYWRvcHROUyhXS1VSTFJlc3BvbnNlQ29weU5TVVJMUmVz
cG9uc2UocmVzcG9uc2UpKTsKICAgICBpZiAoIVtuc1VSTFJlc3BvbnNlIGlzS2luZE9mQ2xhc3M6
W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiB7IH07CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KaW5kZXggODdjY2QyMWNhOWE3
N2FhMmQwYTIxYTRjYWI1MjFjYWVlZmE5YzRhMi4uYzQxODIzMGYzYjRmZGU3MTlhYzZjY2M4NGI3
NDJkYmVjYTE0ZDI0YSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJ
T1MubW0KQEAgLTYyLDcgKzYyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVt
b3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJpb3MiKSk7CisgICAgcmV0dXJuIFdUUjo6
Y3JlYXRlSlNTdHJpbmcoImlvcyIpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIGlkIGZp
bmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChpZCBvYmosIE5TU3RyaW5nICppZEF0dHJpYnV0ZSkKIAog
UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjph
Y2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWRBdHRyaWJ1dGUpCiB7Ci0gICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpOwogICAgIGlkIHJvb3QgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4o
V0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7CiAKICAgICBpZCByZXN1bHQgPSBmaW5k
QWNjZXNzaWJsZU9iamVjdEJ5SWQocm9vdCwgW05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1Jl
ZjppZEF0dHJpYnV0ZV0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1Mu
bW0KaW5kZXggNTIyMzRhYTRkNzQ3MmNkZTA3MWQ5ZTg2OTY5MGQ5MzU1MjlhMjBkMi4uYmJjOGJi
MTZjODY0YmMyNjEwY2ZhYTY5YTA2ZmQ4MTNjNzY5NWQwNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElP
Uy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCkBAIC0xMzYsMTEgKzEzNiw2IEBAIEBlbmQKIAogbmFt
ZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1w
dHlKU1N0cmluZygpCi17Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJh
Y3RlcnMobnVsbHB0ciwgMCkpOwotfQotCiBzdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IGNvbmNhdGVuYXRlQXR0cmlidXRlQW5kVmFsdWUoTlNTdHJpbmcgKmF0dHJpYnV0ZSwgTlNTdHJp
bmcgKnZhbHVlKQogewogICAgIFZlY3RvcjxVbmlDaGFyPiBidWZmZXIoW2F0dHJpYnV0ZSBsZW5n
dGhdKTsKQEAgLTMzMCwyNyArMzI1LDI3IEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNjbG9zZWRCeVJvdygpCiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRV
SUVsZW1lbnRzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmco
KTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmco
KTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnN0cmluZ0Rlc2NyaXB0aW9uT2ZBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRl
SlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKQEAg
LTM4Miw3ICszNzcsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZQogICAgIGlmIChKU1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKGF0dHJpYnV0ZSwgIkFYVGV4dHVhbENvbnRleHQiKSkKICAg
ICAgICAgcmV0dXJuIFtbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlUZXh0dWFsQ29udGV4dF0gY3Jl
YXRlSlNTdHJpbmdSZWZdOwogICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7
CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBA
IC00NDMsMTcgKzQzOCwxNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmli
dXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1l
cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJvbGUoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7
CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURlc2Ny
aXB0aW9uKCkKQEAgLTQ2MywxMyArNDU4LDEyIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24oKQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKCkK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3Jp
cHRpb24oKQpAQCAtNDc5LDcgKzQ3Myw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmco
KTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnN0cmluZ1ZhbHVlKCkKQEAgLTQ4OSw3ICs0ODMsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUoKQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpo
ZWxwVGV4dCgpIGNvbnN0CkBAIC01NDksNyArNTQzLDcgQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Om1heFZhbHVlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24oKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQpAQCAtNTg0
LDcgKzU3OCw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZCgpIGNv
bnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC01OTYs
MTMgKzU4OSwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWQoKSBj
b25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3Rp
dmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRlKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBA
IC02MzgsNyArNjI5LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNHcmFi
YmVkKCkgY29uc3QKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogLy8gcGFyYW1l
dGVyaXplZCBhdHRyaWJ1dGVzCkBAIC02NTksNyArNjUwLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yUG9zaXRpb24oaW50IHgsIGlu
dCB5KQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c3RyaW5nRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKQEAg
LTcxMywzMiArNzA0LDMyIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzZWxlY3RUZXh0V2l0aENyaXRlcmlhKEpTQ29udGV4CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5I
ZWFkZXJzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycygpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwog
fQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKCkKIHsK
LSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0
cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dHJhaXRzKCkKQEAgLTkwMywyMyArODk0LDIxIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIAog
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4oKSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0CiB7
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZG9jdW1lbnRVUkkoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXNzaXN0aXZlVGVjaG5vbG9neVNpbXVsYXRlZEZvY3VzKCkKQEAgLTEwMTYsMzEgKzEw
MDUsMjYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0
CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxlKCkgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc09mZlNjcmVlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNl
ZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsK
IH0KIApAQCAtMTA1MiwxMyArMTAzNiwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzSWdub3JlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTaW5n
bGVMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBA
IC0xMDc0LDIyICsxMDU2LDE4IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpwb3B1cFZhbHVlKCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0YWtlRm9jdXMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0
aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiB9CiAKIC8vIFRleHQgbWFya2VycwpAQCAtMTEzNiw3ICsxMTE0LDcgQEAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclRleHRNYXJrZXJS
YW5nZShBY2Nlc3MKIHsKICAgICBpZCB0ZXh0TWFya2VycyA9IG1hcmtlclJhbmdlLT5wbGF0Zm9y
bVRleHRNYXJrZXJSYW5nZSgpOwogICAgIGlmICghW3RleHRNYXJrZXJzIGlzS2luZE9mQ2xhc3M6
W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiAgICAgcmV0dXJuIFtbbV9lbGVtZW50
IHN0cmluZ0ZvclRleHRNYXJrZXJzOnRleHRNYXJrZXJzXSBjcmVhdGVKU1N0cmluZ1JlZl07CiB9
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9z
L0V2ZW50U2VuZGVyUHJveHlJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tCmluZGV4IGNhYjNmMThiMzY1OWY0OTE2
YmQ1MDA4NzkyODZkNmEyN2MwYzlmOTEuLmIyZTI4ODRhMGIzZTM2YjI0MTIwZjIxZDNlOGJkYzcx
YWRkNDcxYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9pb3MvRXZlbnRTZW5kZXJQcm94eUlPUy5tbQpAQCAtMzYsMjMgKzM2
LDEzIEBAIG5hbWVzcGFjZSBXVFIgewogCiBFdmVudFNlbmRlclByb3h5OjpFdmVudFNlbmRlclBy
b3h5KFRlc3RDb250cm9sbGVyKiB0ZXN0Q29udHJvbGxlcikKICAgICA6IG1fdGVzdENvbnRyb2xs
ZXIodGVzdENvbnRyb2xsZXIpCi0gICAgLCBtX3RpbWUoMCkKLSAgICAsIG1fcG9zaXRpb24oKQot
ICAgICwgbV9sZWZ0TW91c2VCdXR0b25Eb3duKGZhbHNlKQotICAgICwgbV9jbGlja0NvdW50KDAp
Ci0gICAgLCBtX2NsaWNrVGltZSgwKQotICAgICwgbV9jbGlja1Bvc2l0aW9uKCkKLSAgICAsIG1f
Y2xpY2tCdXR0b24oa1dLRXZlbnRNb3VzZUJ1dHRvbk5vQnV0dG9uKQotICAgICwgZXZlbnROdW1i
ZXIoMCkKIHsKICAgICBVTlVTRURfUEFSQU0obV90ZXN0Q29udHJvbGxlcik7CiAgICAgVU5VU0VE
X1BBUkFNKG1fbGVmdE1vdXNlQnV0dG9uRG93bik7CiAgICAgVU5VU0VEX1BBUkFNKGV2ZW50TnVt
YmVyKTsKIH0KIAotRXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2VuZGVyUHJveHkoKQotewotfQor
RXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2VuZGVyUHJveHkoKSA9IGRlZmF1bHQ7CiAKIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQog
ewpAQCAtNzAsMTcgKzYwLDE0IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tD
b3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNl
RG93bih1bnNpZ25lZCBidXR0b25OdW1iZXIsIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQog
ewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlVXAo
dW5zaWduZWQgYnV0dG9uTnVtYmVyLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycykKIHsKLSAg
ICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZU1vdmVUbyhk
b3VibGUgeCwgZG91YmxlIHkpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKQEAgLTkwLDc5ICs3Nyw2
NiBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMp
CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZl
bnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNpZ25lZCBrZXlMb2NhdGlvbikKIHsKLSAgICAvLyBX
cml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KGludCB4
LCBpbnQgeSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5
Ojptb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoaW50IHgsIGludCB5LCBp
bnQgcGhhc2UsIGludCBtb21lbnR1bSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBF
dmVudFNlbmRlclByb3h5Ojpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHksIGJv
b2wgcGFnZWQpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQorCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5
KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0
ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgLy8gV3JpdGUgbWUu
CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcihXS0V2ZW50TW9k
aWZpZXJzLCBib29sIGVuYWJsZSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVu
dFNlbmRlclByb3h5OjpzZXRUb3VjaFBvaW50UmFkaXVzKGludCByYWRpdXNYLCBpbnQgcmFkaXVz
WSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3Vj
aFN0YXJ0KCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5
Ojp0b3VjaE1vdmUoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnRvdWNoRW5kKCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNl
bmRlclByb3h5Ojp0b3VjaENhbmNlbCgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6Y2xlYXJUb3VjaFBvaW50cygpCiB7Ci0gICAgLy8gV3JpdGUgbWUu
CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQoaW50IGluZGV4
KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNhbmNl
bFRvdWNoUG9pbnQoaW50IGluZGV4KQogewotICAgIC8vIFdyaXRlIG1lLgogfQorCiAjZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5t
bQppbmRleCAyNWUwYzNkMDBlNDliYjJiNWVkMjAzZTE5MGNmMWVjYzkwZGYzYWY0Li4zNTRhOGY2
NTU1YzZjMDAyNjVmNTY4MWE2YjM3MTUyYTg0YTU2MmMwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1t
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2li
aWxpdHlDb21tb25NYWMubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlDb21tb25NYWMuaCIKIAogI2ltcG9ydCAiSlNXcmFwcGVyLmgiCisjaW1wb3J0ICJTdHJpbmdG
dW5jdGlvbnMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNp
bXBvcnQgPG9iamMvcnVudGltZS5oPgogCkBAIC02MSwyNiArNjIsMjIgQEAgQ2xhc3Mgd2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIGNsczsKIH0KIAotc3Rh
dGljIEpTVmFsdWVSZWYgbWFrZUFycmF5UmVmRm9yQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQs
IE5TQXJyYXkgKmFycmF5KQorc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VKU0FycmF5KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBOU0FycmF5ICphcnJheSkKIHsKICAgICBOU1VJbnRlZ2VyIGNvdW50ID0g
YXJyYXkuY291bnQ7CiAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbY291bnRdOwotCiAgICAgZm9y
IChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgYXJndW1lbnRzW2ld
ID0gbWFrZVZhbHVlUmVmRm9yVmFsdWUoY29udGV4dCwgW2FycmF5IG9iamVjdEF0SW5kZXg6aV0p
OwotCiAgICAgcmV0dXJuIEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIGNvdW50LCBhcmd1bWVu
dHMsIG51bGxwdHIpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBtYWtlT2JqZWN0UmVmRm9yRGlj
dGlvbmFyeShKU0NvbnRleHRSZWYgY29udGV4dCwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQor
c3RhdGljIEpTT2JqZWN0UmVmIG1ha2VKU09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgTlNE
aWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQogewotICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTT2Jq
ZWN0TWFrZShjb250ZXh0LCBudWxscHRyLCBudWxscHRyKTsKLQorICAgIGF1dG8gb2JqZWN0ID0g
SlNPYmplY3RNYWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIpOwogICAgIFtkaWN0aW9uYXJ5
IGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9jazpeKE5TU3RyaW5nICprZXksIGlkIG9i
aiwgQk9PTCAqKSB7CiAgICAgICAgIGlmIChKU1ZhbHVlUmVmIHByb3BlcnR5VmFsdWUgPSBtYWtl
VmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBvYmopKQogICAgICAgICAgICAgSlNPYmplY3RTZXRQ
cm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIFtrZXkgY3JlYXRlSlNTdHJpbmdSZWZdLmdldCgpLCBw
cm9wZXJ0eVZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOwogICAgIH1d
OwotCiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIApAQCAtOTYsOSArOTMsOSBAQCBKU1ZhbHVlUmVm
IG1ha2VWYWx1ZVJlZkZvclZhbHVlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBpZCB2YWx1ZSkKICAg
ICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6d2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJD
bGFzcygpXSkKICAgICAgICAgcmV0dXJuIHRvSlMoY29udGV4dCwgV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KHZhbHVlKSku
cHRyKCkpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNz
XV0pCi0gICAgICAgIHJldHVybiBtYWtlT2JqZWN0UmVmRm9yRGljdGlvbmFyeShjb250ZXh0LCB2
YWx1ZSk7CisgICAgICAgIHJldHVybiBtYWtlSlNPYmplY3QoY29udGV4dCwgdmFsdWUpOwogICAg
IGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQotICAgICAgICByZXR1
cm4gbWFrZUFycmF5UmVmRm9yQXJyYXkoY29udGV4dCwgdmFsdWUpOworICAgICAgICByZXR1cm4g
bWFrZUpTQXJyYXkoY29udGV4dCwgdmFsdWUpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBA
IC0xMTUsMjggKzExMiwxNiBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogCiAgICAgaWYgKHNl
YXJjaEtleSkgewogICAgICAgICBpZCBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBuaWw7Ci0gICAgICAg
IGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoS2V5KSkgewotICAgICAgICAgICAg
YXV0byBzZWFyY2hLZXlTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IHNlYXJjaEtleSwgbnVsbHB0cikpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0cmluZykK
LSAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZy5nZXQoKV07Ci0gICAgICAgIH0gZWxzZSBpZiAo
SlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsKKyAgICAgICAgaWYgKEpTVmFs
dWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hLZXkpKQorICAgICAgICAgICAgc2VhcmNoS2V5UGFy
YW1ldGVyID0gdG9XVEZTdHJpbmcoY29udGV4dCwgc2VhcmNoS2V5KTsKKyAgICAgICAgZWxzZSBp
ZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsKICAgICAgICAgICAgIEpT
T2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJj
aEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0
aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNW
YWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShj
b250ZXh0LCBzZWFyY2hLZXlBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcuZ2V0KCksIG51bGxw
dHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1
ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAg
ICAgICAgIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7
Ci0KKyAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gYXJyYXlMZW5n
dGgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNlYXJjaEtleUFycmF5TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVmIHNlYXJjaEtleVZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29u
dGV4dCwgc2VhcmNoS2V5QXJyYXksIGksIG51bGxwdHIpOwotICAgICAgICAgICAgICAgIEpTU3Ry
aW5nUmVmIHNlYXJjaEtleVN0cmluZyA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgc2Vh
cmNoS2V5VmFsdWUsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgIGlmIChzZWFyY2hLZXlTdHJp
bmcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hLZXlQYXJhbWV0ZXIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXldOwotICAgICAgICAgICAgICAgICAgICBbc2VhcmNoS2V5UGFyYW1ldGVyIGFkZE9iamVj
dDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZ11dOwotICAg
ICAgICAgICAgICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2VhcmNoS2V5U3RyaW5nKTsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXV0byBzZWFyY2hLZXkgPSB0b1dURlN0cmlu
Zyhjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlB
cnJheSwgaSwgbnVsbHB0cikpOworICAgICAgICAgICAgICAgIGlmICghc2VhcmNoS2V5UGFyYW1l
dGVyKQorICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNNdXRhYmxl
QXJyYXkgYXJyYXldOworICAgICAgICAgICAgICAgIFtzZWFyY2hLZXlQYXJhbWV0ZXIgYWRkT2Jq
ZWN0OnNlYXJjaEtleV07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNl
YXJjaEtleVBhcmFtZXRlcikKQEAgLTE0NCwxMCArMTI5LDkgQEAgTlNEaWN0aW9uYXJ5ICpzZWFy
Y2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250
ZXh0UmUKICAgICB9CiAKICAgICBpZiAoc2VhcmNoVGV4dCAmJiBKU1N0cmluZ0dldExlbmd0aChz
ZWFyY2hUZXh0KSkKLSAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OltO
U1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoVGV4dF0gZm9yS2V5OkAiQVhTZWFy
Y2hUZXh0Il07CisgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDp0b1dU
RlN0cmluZyhzZWFyY2hUZXh0KSBmb3JLZXk6QCJBWFNlYXJjaFRleHQiXTsKIAogICAgIFtwYXJh
bWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKHZpc2libGVPbmx5KSBmb3JLZXk6QCJBWFZp
c2libGVPbmx5Il07Ci0KICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QChp
bW1lZGlhdGVEZXNjZW5kYW50c09ubHkpIGZvcktleTpAIkFYSW1tZWRpYXRlRGVzY2VuZGFudHNP
bmx5Il07CiAKICAgICByZXR1cm4gcGFyYW1ldGVyaXplZEF0dHJpYnV0ZTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KaW5kZXggOTEzYWUwZjc1Y2RiNGVkNWRl
ZGRlYjkyNWY2Yzk1MDE4ZGRkMTcwNC4uYTg4N2RlNWM4NWQ1MDI4NGZkMjQ0NzEyNTE2ZTg5Yzk5
OGMzYWE1ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0K
QEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5k
bGVyLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZS5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5k
bGVQYWdlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tCdW5kbGVQYWdlLmg+CkBAIC05Niw3ICs5Nyw3IEBAIHN0YXRpYyBpZCBmaW5kQWNj
ZXNzaWJsZU9iamVjdEJ5SWQoaWQgb2JqLCBOU1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAKIFJlZlB0
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNz
aWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxl
UGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
OworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKTsKICAgICBQbGF0Zm9ybVVJRWxlbWVudCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1V
SUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFnZSkpOwogCiAgICAgUmV0YWlu
UHRyPGlkPiByZXN1bHQ7CkBAIC0xMTEsNyArMTEyLDcgQEAgUmVmUHRyPEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQo
SlMKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpw
bGF0Zm9ybU5hbWUoKQogewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygibWFjIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJtYWMiKTsK
IH0KIAogLy8gQVhUaHJlYWQgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMu
bW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IDUwYjNlMDIyMGI4ZDEyMmFkMjJiYzk2ZDQyNGNmZDgz
MzFiNjVmNTkuLjJlZmY0NTRlNjY3OTFkNjk4Zjk1YmVjNzY5NGEwOWZiMmNjZjBhMTEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQpAQCAtMzIsNyArMzIsNyBA
QAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgogI2ltcG9ydCAiSW5qZWN0ZWRC
dW5kbGUuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlUGFnZS5oIgotCisjaW1wb3J0ICJKU0Jh
c2ljcy5oIgogI2ltcG9ydCA8QXBwS2l0L05TQWNjZXNzaWJpbGl0eS5oPgogI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1Jl
ZkNGLmg+CkBAIC04NywxMSArODcsNiBAQCBAZW5kCiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0
aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKQotewotICAg
IHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApKTsK
LX0KLQogUmVmUHRyPEFjY2Vzc2liaWxpdHlDb250cm9sbGVyPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzX2NvbnRyb2xsZXI7CiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKQEAgLTIwNiw3ICsyMDEsNyBAQCBzdGF0aWMgTlNTdHJp
bmcqIGRlc2NyaXB0aW9uT2ZWYWx1ZShpZCB2YWx1ZU9iamVjdCwgaWQgZWxlbWVudCkKIAogc3Rh
dGljIE5TU3RyaW5nICphdHRyaWJ1dGVzT2ZFbGVtZW50KGlkIGFjY2Vzc2liaWxpdHlPYmplY3Qp
CiB7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGF0dHJpYnV0ZXMgPSBzdXBwb3J0ZWRBdHRyaWJ1
dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QpOworICAgIGF1dG8gYXR0cmlidXRlcyA9IHN1cHBvcnRl
ZEF0dHJpYnV0ZXMoYWNjZXNzaWJpbGl0eU9iamVjdCk7CiAKICAgICBOU011dGFibGVTdHJpbmcq
IGF0dHJpYnV0ZXNTdHJpbmcgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CiAgICAgZm9yIChO
U1N0cmluZyogYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMuZ2V0KCkpIHsKQEAgLTIyNywxNiArMjIy
LDEzIEBAIHN0YXRpYyBOU1N0cmluZyAqYXR0cmlidXRlc09mRWxlbWVudChpZCBhY2Nlc3NpYmls
aXR5T2JqZWN0KQogICAgIHJldHVybiBhdHRyaWJ1dGVzU3RyaW5nOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotc3RhdGljIEpTVmFsdWVSZWYgY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXko
SlNDb250ZXh0UmVmIGNvbnRleHQsIFZlY3RvcjxUPiBjb25zdCYgZWxlbWVudHMpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdGF0aWMgSlNPYmplY3RSZWYgbWFrZUpTQXJyYXkoSlNDb250ZXh0UmVm
IGNvbnRleHQsIGNvbnN0IFZlY3RvcjxUPiYgZWxlbWVudHMpCiB7Ci0gICAgSlNWYWx1ZVJlZiBh
cnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwotICAgIEpT
T2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFycmF5UmVzdWx0
LCAwKTsKKyAgICBhdXRvIGFycmF5ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwg
MCk7CiAgICAgc2l6ZV90IGVsZW1lbnRDb3VudCA9IGVsZW1lbnRzLnNpemUoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGVsZW1lbnRDb3VudDsgKytpKQotICAgICAgICBKU09iamVjdFNl
dFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwgaSwgSlNPYmplY3RNYWtlKGNvbnRl
eHQsIGVsZW1lbnRzW2ldLT53cmFwcGVyQ2xhc3MoKSwgZWxlbWVudHNbaV0uZ2V0KCkpLCAwKTsK
LQotICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0
SW5kZXgoY29udGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBlbGVtZW50c1tp
XS0+d3JhcHBlckNsYXNzKCksIGVsZW1lbnRzW2ldLmdldCgpKSwgMCk7CisgICAgcmV0dXJuIGFy
cmF5OwogfQogCiBzdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNvbmNhdGVuYXRlQXR0
cmlidXRlQW5kVmFsdWUoTlNTdHJpbmcqIGF0dHJpYnV0ZSwgTlNTdHJpbmcqIHZhbHVlKQpAQCAt
MjczLDI1ICsyNjUsMTMgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqc2VsZWN0VGV4dFBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRleHRSZWYgY28KICAgICAKICAgICBpZiAo
c2VhcmNoU3RyaW5ncykgewogICAgICAgICBOU011dGFibGVBcnJheSAqc2VhcmNoU3RyaW5nc1Bh
cmFtZXRlciA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAgIGlmIChKU1ZhbHVlSXNT
dHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAgICAgICAgIGF1dG8gc2VhcmNo
U3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgc2VhcmNo
U3RyaW5ncywgbnVsbHB0cikpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcp
Ci0gICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0
cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFy
Y2hTdHJpbmdzKSkgeworICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJj
aFN0cmluZ3MpKQorICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0
OnRvV1RGU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpXTsKKyAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hTdHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5n
c0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0
cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAg
ICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJl
cihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAg
ICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0
cikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNl
YXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIEpT
T2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgaSwg
bnVsbHB0ciksIG51bGxwdHIpKTsKLSAgICAgICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0
cmluZykKLSAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2Jq
ZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5n
ZXQoKV1dOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3RyaW5n
c0FycmF5TGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRP
YmplY3Q6dG9XVEZTdHJpbmcoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29u
dGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSldOwogICAgICAgICB9CiAgICAg
ICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpzZWFyY2hTdHJpbmdzUGFyYW1l
dGVyIGZvcktleTpAIkFYU2VsZWN0VGV4dFNlYXJjaFN0cmluZ3MiXTsKICAgICB9CkBAIC0zMTQs
MjQgKzI5NCwxMyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpzZWFyY2hUZXh0UGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4dFJlZiBjbwogCiAgICAgaWYgKHNlYXJjaFN0
cmluZ3MpIHsKICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnNlYXJjaFN0cmluZ3NQYXJhbWV0ZXIg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NT
dHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3Ms
IG51bGxwdHIpKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQotICAgICAg
ICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3Ry
aW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKLSAgICAgICAg
fSBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKKyAg
ICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkKKyAgICAg
ICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDp0b1dURlN0cmluZyhjb250
ZXh0LCBzZWFyY2hTdHJpbmdzKV07CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNPYmpl
Y3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJj
aFN0cmluZ3MsIG51bGxwdHIpOwotICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3RyaW5nc0Fy
cmF5TGVuZ3RoID0gMDsKLQotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmluZyA9
IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgICAg
ICAgICBKU1ZhbHVlUmVmIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGxlbmd0aFByb3BlcnR5U3Ry
aW5nLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5
TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgc2VhcmNoU3Ry
aW5nc0FycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLQotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hT
dHJpbmdzQXJyYXksIGksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdz
UGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJj
aFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVuc2ln
bmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJj
aFN0cmluZ3NBcnJheSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2Vh
cmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmlu
Z3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJv
cGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0cikpXTsK
ICAgICAgICAgfQogICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c2Vh
cmNoU3RyaW5nc1BhcmFtZXRlciBmb3JLZXk6QCJBWFNlYXJjaFRleHRTZWFyY2hTdHJpbmdzIl07
CiAgICAgfQpAQCAtNDAxLDcgKzM3MCw3IEBAIEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cm93SGVhZGVycygpIGNvbnN0CiAgICAgaWQgdmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZSht
X2VsZW1lbnQuZ2V0KCksIE5TQWNjZXNzaWJpbGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1
dGUpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQogICAg
ICAgICBlbGVtZW50cyA9IG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
Pih2YWx1ZSk7Ci0gICAgcmV0dXJuIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5PFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4oY29udGV4dCwgZWxlbWVudHMpOworICAgIHJldHVybiBt
YWtlSlNBcnJheShjb250ZXh0LCBlbGVtZW50cyk7CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9O
UwogfQogCkBAIC00MTUsNyArMzg0LDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpjb2x1bW5IZWFkZXJzKCkgY29uc3QKICAgICBpZCB2YWx1ZSA9IGF0dHJpYnV0ZVZhbHVl
KG1fZWxlbWVudC5nZXQoKSwgTlNBY2Nlc3NpYmlsaXR5Q29sdW1uSGVhZGVyVUlFbGVtZW50c0F0
dHJpYnV0ZSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0p
CiAgICAgICAgIGVsZW1lbnRzID0gbWFrZVZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4+KHZhbHVlKTsKLSAgICByZXR1cm4gY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVm
UHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pihjb250ZXh0LCBlbGVtZW50cyk7CisgICAgcmV0
dXJuIG1ha2VKU0FycmF5KGNvbnRleHQsIGVsZW1lbnRzKTsKICAgICBFTkRfQVhfT0JKQ19FWENF
UFRJT05TCiB9CiAgICAgCkBAIC02MDcsNyArNTc2LDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0
dHIKIAogICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+IGVsZW1lbnRz
OwogICAgIGdldFVJRWxlbWVudHNXaXRoQXR0cmlidXRlKGF0dHJpYnV0ZSwgZWxlbWVudHMpOwot
ICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheTxSZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4+KGNvbnRleHQsIGVsZW1lbnRzKTsKKyAgICByZXR1cm4gbWFrZUpTQXJyYXko
Y29udGV4dCwgZWxlbWVudHMpOwogfQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXR0cmlidXRlVmFsdWUoSlNTdHJpbmdS
ZWYgYXR0cmlidXRlKSBjb25zdApAQCAtOTc2LDcgKzk0NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNTZWxlY3RlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTIyOSw3ICsxMTk3LDcgQEAgSlNW
YWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWFyY2hUZXh0V2l0aENyaXRlcmlhKEpT
Q29udGV4dFJlZiBjb250ZXh0LAogICAgIE5TRGljdGlvbmFyeSAqcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZSA9IHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEoY29udGV4
dCwgc2VhcmNoU3RyaW5ncywgc3RhcnRGcm9tLCBkaXJlY3Rpb24pOwogICAgIGlkIHJlc3VsdCA9
IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhTZWFyY2hUZXh0V2l0
aENyaXRlcmlhIiBmb3JQYXJhbWV0ZXI6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07CiAgICAgaWYg
KFtyZXN1bHQgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQotICAgICAgICByZXR1cm4g
Y29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2U+Pihjb250ZXh0LCBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
clJhbmdlPj4ocmVzdWx0KSk7CisgICAgICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0LCBt
YWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPj4ocmVzdWx0KSk7
CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0x
NTQ2LDEzICsxNTE0LDExIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2Vs
ZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKQEAgLTE1NjIsOCArMTUyOCw3IEBAIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVu
Y29kaW5nKCkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0p
CiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9BWF9P
QkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOwor
ICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQpAQCAtMTU3Myw4ICsxNTM4
LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50VVJJKCkKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNz
XV0pCiAgICAgICAgIHJldHVybiBbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9B
WF9PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkKQEAgLTE1ODMsNyArMTU0Nyw2IEBA
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQog
ICAgIE5TVVJMICp1cmwgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpO
U0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdOwogICAgIHJldHVybiBbW3VybCBhYnNvbHV0ZVN0
cmluZ10gY3JlYXRlSlNTdHJpbmdSZWZdOyAgICAKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05T
Ci0gICAgCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTE2MjIsNyArMTU4NSw2IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogICAgIEJFR0lO
X0FYX09CSkNfRVhDRVBUSU9OUwogICAgIHJlc3VsdCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0
eUlzQXR0cmlidXRlU2V0dGFibGU6TlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV07CiAg
ICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwotICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTE2NDgsMTkgKzE2MTAsMTYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011
bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNW
aXNpYmxlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzT2ZmU2NyZWVuKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2VkKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNjc1LDEzICsx
NjM0LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKCkgY29uc3QK
IAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NpbmdsZUxpbmUoKSBjb25zdAogewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aUxpbmUoKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MTQsMTcgKzE2NzEsMTQg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGRTZWxlY3Rpb24oKQog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpyZW1vdmVTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAog
Ly8gVGV4dCBtYXJrZXJzCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCA0MDNmNGZmODMyZWUwZWY3
YzNjZmFiZGYwZjg3ZTJjY2JlNjE0ZjhhLi5hZGJiNGI3YjVkNTRmYjE0YTljNGJkZThhOTIyNzVm
MTFjMTQxNmQ5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KQEAgLTQ2LDE2ICs0NiwxMSBAQCBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gVGVzdFJ1bm5lcjo6aW5zcGVjdG9yVGVzdFN0dWJVUkwoKQog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgcmV0dXJuIG51bGxwdHI7CiAjZWxzZQotICAg
IENGQnVuZGxlUmVmIGluc3BlY3RvckJ1bmRsZSA9IENGQnVuZGxlR2V0QnVuZGxlV2l0aElkZW50
aWZpZXIoQ0ZTVFIoImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSIpKTsKKyAgICBhdXRvIGluc3Bl
Y3RvckJ1bmRsZSA9IENGQnVuZGxlR2V0QnVuZGxlV2l0aElkZW50aWZpZXIoQ0ZTVFIoImNvbS5h
cHBsZS5XZWJJbnNwZWN0b3JVSSIpKTsKICAgICBpZiAoIWluc3BlY3RvckJ1bmRsZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybCA9IGFkb3B0
Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoaW5zcGVjdG9yQnVuZGxlLCBDRlNUUigiVGVzdFN0
dWIiKSwgQ0ZTVFIoImh0bWwiKSwgTlVMTCkpOwotICAgIGlmICghdXJsKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIENGU3RyaW5nUmVmIHVybFN0cmluZyA9IENGVVJMR2V0U3RyaW5n
KHVybC5nZXQoKSk7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5n
KHVybFN0cmluZykpOworICAgIGF1dG8gcmVzb3VyY2VVUkwgPSBhZG9wdENGKENGQnVuZGxlQ29w
eVJlc291cmNlVVJMKGluc3BlY3RvckJ1bmRsZSwgQ0ZTVFIoIlRlc3RTdHViIiksIENGU1RSKCJo
dG1sIiksIE5VTEwpKTsKKyAgICByZXR1cm4gcmVzb3VyY2VVUkwgPyBhZG9wdChKU1N0cmluZ0Ny
ZWF0ZVdpdGhDRlN0cmluZyhDRlVSTEdldFN0cmluZyhyZXNvdXJjZVVSTC5nZXQoKSkpKSA6IG51
bGxwdHI7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9T
dHJpbmdGdW5jdGlvbnMuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25z
LmgKaW5kZXggMWJjMDVjMGE1ZjNhODA0YzBiMTQxYjg5NjkwYjc1ZDI3NzEwZTc2MS4uNjdmMzll
NjlmMTU0MDhiOTJlYTNhZTk0N2M5ZmE5MmZlZWExMjhjZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1N0cmluZ0Z1bmN0aW9ucy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC0yNCwxNSArMjQsMTIgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFN0cmluZ0Z1bmN0aW9uc19oCi0jZGVmaW5lIFN0
cmluZ0Z1bmN0aW9uc19oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgor
I2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CiAj
aW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nUHJp
dmF0ZS5oPgotI2luY2x1ZGUgPFdlYktpdC9XS1VSTC5oPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAj
aW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgpAQCAtNDQsNyArNDEs
OCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotLy8gQ29udmVyc2lvbiBmdW5jdGlvbnMKK1dLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLU3RyaW5nKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7
CitXVEY6OlN0cmluZyB0b1dURlN0cmluZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwogCiBp
bmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soSlNTdHJpbmdSZWYgc3RyaW5nKQog
ewpAQCAtNTYsOSArNTQsMTQgQEAgaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dL
KGNvbnN0IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiYgc3RyaW5nKQogICAgIHJldHVybiB0b1dL
KHN0cmluZy5nZXQoKSk7CiB9CiAKK2lubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9X
Syhjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7Cit9CisKIGlubGluZSBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdG9XSyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKQogewotICAgIHJldHVybiBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZy51dGY4KCkuZGF0YSgp
KSk7CisgICAgcmV0dXJuIHRvV0soc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogfQogCiBpbmxpbmUg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoV0tTdHJpbmdSZWYgc3RyaW5nKQpAQCAtOTks
NiArMTAyLDI1IEBAIGlubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4mIHN0cmluZykKICAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5n
LmdldCgpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV1RSCitpbmxpbmUgV1RGOjpTdHJpbmcgdG9X
VEZTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKQoreworICAgIHJldHVybiB0b1dURlN0cmluZyh0
b1dLKHN0cmluZykpOworfQogCi0jZW5kaWYgLy8gU3RyaW5nRnVuY3Rpb25zX2gKK2lubGluZSBX
VEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4mIHN0
cmluZykKK3sKKyAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5nLmdldCgpKTsKK30KKworaW5s
aW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLU3RyaW5nKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB0b1dLKGNyZWF0ZUpTU3RyaW5n
KGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0
cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICAvLyBG
SVhNRTogQ291bGQgbWFrZSB0aGlzIGVmZmljaWVudCBieSB1c2luZyB0aGUgV1RGU3RyaW5nIGlu
c2lkZSBPcGFxdWVKU1N0cmluZyBpZiB3ZSB3YW50ZWQgdG8uCisgICAgcmV0dXJuIHRvV1RGU3Ry
aW5nKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCAxMzQ1
YzQyYzExZTYyZGMwODhjNmYyZDM4Yjk5YjA5MzU2NGUwMTM4Li43NWQ5ZmI2MDQ0NDE0NWYxZWNk
ZmFlZmQ5OTA4YWFlMjY4ODU0ZWYzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcApAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMu
aCIKICNpbmNsdWRlICJFdmVudFNlbmRlclByb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5o
IgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRlc3RTdXBw
b3J0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgpA
QCAtNDk0LDggKzQ5NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFy
Z2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6Omluc3RhbGxN
b2NrR2FtZXBhZFByb3ZpZGVyKCk7CiAjZW5kaWYKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBwYWdlR3JvdXBJZGVudGlmaWVyID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiV2ViS2l0VGVzdFJ1bm5lclBhZ2VHcm91cCIpKTsKLSAgICBtX3BhZ2VHcm91cC5h
ZG9wdChXS1BhZ2VHcm91cENyZWF0ZVdpdGhJZGVudGlmaWVyKHBhZ2VHcm91cElkZW50aWZpZXIu
Z2V0KCkpKTsKKyAgICBtX3BhZ2VHcm91cC5hZG9wdChXS1BhZ2VHcm91cENyZWF0ZVdpdGhJZGVu
dGlmaWVyKHRvV0soIldlYktpdFRlc3RSdW5uZXJQYWdlR3JvdXAiKS5nZXQoKSkpOwogCiAgICAg
bV9ldmVudFNlbmRlclByb3h5ID0gbWFrZVVuaXF1ZTxFdmVudFNlbmRlclByb3h5Pih0aGlzKTsK
IH0KQEAgLTUwNyw5ICs1MDYsOSBAQCBXS1JldGFpblB0cjxXS0NvbnRleHRDb25maWd1cmF0aW9u
UmVmPiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdAogICAgIFdLQ29u
dGV4dENvbmZpZ3VyYXRpb25TZXRGdWxseVN5bmNocm9ub3VzTW9kZUlzQWxsb3dlZEZvclRlc3Rp
bmcoY29uZmlndXJhdGlvbi5nZXQoKSwgdHJ1ZSk7CiAgICAgV0tDb250ZXh0Q29uZmlndXJhdGlv
blNldElnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHNGb3JUZXN0aW5nKGNvbmZpZ3Vy
YXRpb24uZ2V0KCksIG9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyk7
CiAKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gb3ZlcnJpZGVMYW5ndWFnZXMg
PSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gb3ZlcnJpZGVMYW5n
dWFnZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAoYXV0byYg
bGFuZ3VhZ2UgOiBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzKQotICAgICAgICBXS0FycmF5QXBw
ZW5kSXRlbShvdmVycmlkZUxhbmd1YWdlcy5nZXQoKSwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhsYW5ndWFnZS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOworICAgICAgICBX
S0FycmF5QXBwZW5kSXRlbShvdmVycmlkZUxhbmd1YWdlcy5nZXQoKSwgdG9XSyhsYW5ndWFnZSku
Z2V0KCkpOwogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRPdmVycmlkZUxhbmd1YWdlcyhj
b25maWd1cmF0aW9uLmdldCgpLCBvdmVycmlkZUxhbmd1YWdlcy5nZXQoKSk7CiAKICAgICBpZiAo
b3B0aW9ucy5zaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigpKSB7CkBAIC04NDMs
MzEgKzg0MiwyNCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9Db25z
aXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpbwogICAgIFdLUHJlZmVyZW5jZXNS
ZXNldEFsbEludGVybmFsRGVidWdGZWF0dXJlcyhwcmVmZXJlbmNlcyk7CiAKICAgICAvLyBTZXQg
aW50ZXJuYWwgZmVhdHVyZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBkZWZhdWx0IHZhbHVlcyBmb3Ig
dGVzdGluZy4KLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0Zl
YXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXN5bmNPdmVyZmxvd1Njcm9s
bGluZ0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVG
b3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBhc3luY092ZXJmbG93U2Nyb2xsaW5nRmVhdHVyZSk7
CiAKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgYXN5bmNGcmFtZVNjcm9sbGluZ0ZlYXR1cmUgPSBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJsZWQi
KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVy
ZW5jZXMsIGZhbHNlLCBhc3luY0ZyYW1lU2Nyb2xsaW5nRmVhdHVyZSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBmYWxzZSwgdG9X
SygiQXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBmYWxzZSwgdG9X
SygiQXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJsZWQiKS5nZXQoKSk7CiAKICNpZiBFTkFCTEUoSU5Q
VVRfVFlQRV9EQVRFKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1dFR5cGVEYXRlRmVhdHVy
ZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1dFR5cGVEYXRlRW5hYmxlZCIp
OwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJl
bmNlcywgdHJ1ZSwgaW5wdXRUeXBlRGF0ZUZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJ
bnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRU
eXBlRGF0ZUVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9E
QVRFVElNRUxPQ0FMKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1dFR5cGVEYXRlVGltZUxv
Y2FsRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1dFR5cGVEYXRl
VGltZUxvY2FsRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVh
dHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlRGF0ZVRpbWVMb2NhbEZlYXR1
cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVm
ZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlRGF0ZVRpbWVMb2NhbEVuYWJsZWQiKS5nZXQo
KSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9NT05USCkKLSAgICBzdGF0aWMgV0tT
dHJpbmdSZWYgaW5wdXRUeXBlTW9udGhGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIklucHV0VHlwZU1vbnRoRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRl
cm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlTW9udGhG
ZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXko
cHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZU1vbnRoRW5hYmxlZCIpLmdldCgpKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUUpCi0gICAgc3RhdGljIFdLU3RyaW5n
UmVmIGlucHV0VHlwZVRpbWVGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IklucHV0VHlwZVRpbWVFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVi
dWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVUaW1lRmVhdHVyZSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVu
Y2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVUaW1lRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgog
I2lmIEVOQUJMRShJTlBVVF9UWVBFX1dFRUspCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0
VHlwZVdlZWtGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklucHV0VHlw
ZVdlZWtFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJl
Rm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVXZWVrRmVhdHVyZSk7CisgICAgV0tQ
cmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVl
LCB0b1dLKCJJbnB1dFR5cGVXZWVrRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogCiAgICAgZm9y
IChjb25zdCBhdXRvJiBpbnRlcm5hbERlYnVnRmVhdHVyZSA6IG9wdGlvbnMuaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVzKQpAQCAtOTIwLDI1ICs5MTIsMTYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVz
ZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW8K
ICAgICBXS1ByZWZlcmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZShw
cmVmZXJlbmNlcywgb3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKTsK
ICAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZUNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVCYWNrRm9yd2FyZENhY2hlKTsKIAotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBkZWZh
dWx0VGV4dEVuY29kaW5nID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklTTy04ODU5
LTEiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUocHJlZmVy
ZW5jZXMsIGRlZmF1bHRUZXh0RW5jb2RpbmcpOwotCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHN0
YW5kYXJkRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lcyIp
OwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBjdXJzaXZlRm9udEZhbWlseSA9IFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsZSBDaGFuY2VyeSIpOwotICAgIHN0YXRpYyBXS1N0cmlu
Z1JlZiBmYW50YXN5Rm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQ
YXB5cnVzIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGZpeGVkRm9udEZhbWlseSA9IFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDb3VyaWVyIik7Ci0gICAgc3RhdGljIFdLU3RyaW5n
UmVmIHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkFwcGxlIENvbG9yIEVtb2ppIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHNhbnNTZXJpZkZv
bnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGVsdmV0aWNhIik7Ci0g
ICAgc3RhdGljIFdLU3RyaW5nUmVmIHNlcmlmRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJUaW1lcyIpOworICAgIFdLUHJlZmVyZW5jZXNTZXREZWZhdWx0VGV4dEVu
Y29kaW5nTmFtZShwcmVmZXJlbmNlcywgdG9XSygiSVNPLTg4NTktMSIpLmdldCgpKTsKIAogICAg
IFdLUHJlZmVyZW5jZXNTZXRNaW5pbXVtRm9udFNpemUocHJlZmVyZW5jZXMsIDApOwotICAgIFdL
UHJlZmVyZW5jZXNTZXRTdGFuZGFyZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHN0YW5kYXJkRm9u
dEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEN1cnNpdmVGb250RmFtaWx5KHByZWZlcmVu
Y2VzLCBjdXJzaXZlRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEZhbnRhc3lGb250
RmFtaWx5KHByZWZlcmVuY2VzLCBmYW50YXN5Rm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldEZpeGVkRm9udEZhbWlseShwcmVmZXJlbmNlcywgZml4ZWRGb250RmFtaWx5KTsKLSAgICBX
S1ByZWZlcmVuY2VzU2V0UGljdG9ncmFwaEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHBpY3RvZ3Jh
cGhGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0U2Fuc1NlcmlmRm9udEZhbWlseShw
cmVmZXJlbmNlcywgc2Fuc1NlcmlmRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFNl
cmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgc2VyaWZGb250RmFtaWx5KTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0U3RhbmRhcmRGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJUaW1lcyIpLmdl
dCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q3Vyc2l2ZUZvbnRGYW1pbHkocHJlZmVyZW5jZXMs
IHRvV0soIkFwcGxlIENoYW5jZXJ5IikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRGYW50
YXN5Rm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiUGFweXJ1cyIpLmdldCgpKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0Rml4ZWRGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJDb3VyaWVy
IikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRQaWN0b2dyYXBoRm9udEZhbWlseShwcmVm
ZXJlbmNlcywgdG9XSygiQXBwbGUgQ29sb3IgRW1vamkiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldFNhbnNTZXJpZkZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIkhlbHZldGljYSIp
LmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0U2VyaWZGb250RmFtaWx5KHByZWZlcmVuY2Vz
LCB0b1dLKCJUaW1lcyIpLmdldCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0QXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsKICNpZiBFTkFCTEUoTUVE
SUFfU09VUkNFKQogICAgIFdLUHJlZmVyZW5jZXNTZXRNZWRpYVNvdXJjZUVuYWJsZWQocHJlZmVy
ZW5jZXMsIHRydWUpOwpAQCAtMTAxMCwzOCArOTkzLDI3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6
OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMs
IFJlCiAKICAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQobV9tYWluV2ViVmlldy0+cGFnZSgp
LCBudWxscHRyKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc2V0IikpOwotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IHJlc2V0TWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgYXV0byByZXNldE1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwogCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZEdDS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2hvdWxkR0MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBzaG91bGRHQ1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9nY0JldHdlZW5UZXN0
cykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0ocmVzZXRNZXNzYWdlQm9keS5nZXQoKSwgc2hv
dWxkR0NLZXkuZ2V0KCksIHNob3VsZEdDVmFsdWUuZ2V0KCkpOworICAgIHNldFZhbHVlKHJlc2V0
TWVzc2FnZUJvZHksICJTaG91bGRHQyIsIG1fZ2NCZXR3ZWVuVGVzdHMpOwogCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGFsbG93ZWRIb3N0c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkFsbG93ZWRIb3N0cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS011
dGFibGVBcnJheVJlZj4gYWxsb3dlZEhvc3RzVmFsdWUgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5
Q3JlYXRlKCkpOwotICAgIGZvciAoYXV0byYgaG9zdCA6IG1fYWxsb3dlZEhvc3RzKSB7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0hvc3QgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGhvc3QuY19zdHIoKSkpOwotICAgICAgICBXS0FycmF5QXBwZW5k
SXRlbShhbGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSwgd2tIb3N0LmdldCgpKTsKLSAgICB9Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5LmdldCgpLCBhbGxvd2VkSG9zdHNL
ZXkuZ2V0KCksIGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpKTsKKyAgICBhdXRvIGFsbG93ZWRIb3N0
c1ZhbHVlID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBmb3IgKGF1dG8m
IGhvc3QgOiBtX2FsbG93ZWRIb3N0cykKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oYWxsb3dl
ZEhvc3RzVmFsdWUuZ2V0KCksIHRvV0soaG9zdC5jX3N0cigpKS5nZXQoKSk7CisgICAgc2V0VmFs
dWUocmVzZXRNZXNzYWdlQm9keSwgIkFsbG93ZWRIb3N0cyIsIGFsbG93ZWRIb3N0c1ZhbHVlLmdl
dCgpKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4SXNvbGF0ZWRNb2RlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGF4SXNvbGF0ZWRNb2RlVmFsdWUgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5LmdldCgpLCBheElzb2xhdGVkTW9k
ZUtleS5nZXQoKSwgYXhJc29sYXRlZE1vZGVWYWx1ZS5nZXQoKSk7CisgICAgc2V0VmFsdWUocmVz
ZXRNZXNzYWdlQm9keSwgIkFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWUiLCBtX2FjY2Vzc2liaWxp
dHlJc29sYXRlZFRyZWVNb2RlKTsKICNlbmRpZgotICAgIAotICAgIGlmIChvcHRpb25zLmpzY09w
dGlvbnMubGVuZ3RoKCkpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGpzY09w
dGlvbnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJKU0NPcHRp
b25zIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ganNjT3B0aW9uc1ZhbHVl
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhvcHRpb25zLmpzY09wdGlv
bnMuY19zdHIoKSkpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJv
ZHkuZ2V0KCksIGpzY09wdGlvbnNLZXkuZ2V0KCksIGpzY09wdGlvbnNWYWx1ZS5nZXQoKSk7Ci0g
ICAgfQorCisgICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5sZW5ndGgoKSkKKyAgICAgICAgc2V0
VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkpTQ09wdGlvbnMiLCBvcHRpb25zLmpzY09wdGlvbnMu
Y19zdHIoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6
OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOwogI2VuZGlmCiAKLSAgICBXS1BhZ2VQ
b3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHJlc2V0TWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKCJSZXNldCIpLmdl
dCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsKIAogICAgIFdLQ29udGV4dFNldFNob3VsZFVz
ZUZvbnRTbW9vdGhpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFs
c2UpOwogCkBAIC0xMjAzLDggKzExNzUsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVM
aXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KCkKIAogICAgIEFzeW5jVGFzayhbXSgpIHsKICAgICAgICAg
Ly8gQWZ0ZXIgZWFjaCB0ZXN0LCB3ZSB1cGRhdGUgdGhlIGxpc3Qgb2YgbGl2ZSBkb2N1bWVudHMg
c28gdGhhdCB3ZSBjYW4gZGV0ZWN0IHdoZW4gYW4gYWJhbmRvbmVkIGRvY3VtZW50IGZpcnN0IHNo
b3dlZCB1cC4KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0TGl2ZURvY3VtZW50cyIp
KTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBudWxscHRyKTsKKyAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHRvV0soIkdl
dExpdmVEb2N1bWVudHMiKS5nZXQoKSwgbnVsbHB0cik7CiAgICAgfSwgNV9zKS5ydW4oKTsKIH0K
IApAQCAtMTIxNSw4ICsxMTg2LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2hlY2tGb3JXb3Js
ZExlYWtzKCkKIAogICAgIEFzeW5jVGFzayhbXSgpIHsKICAgICAgICAgLy8gVGhpcyBydW5zIGF0
IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgdGVzdHMuIEl0IGNsZWFycyBjYWNoZXMsIHJ1bnMgYSBH
QyBhbmQgdGhlbiBmZXRjaGVzIHRoZSBsaXN0IG9mIGRvY3VtZW50cy4KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2hlY2tGb3JXb3JsZExlYWtzIikpOwotICAgICAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBX
S1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygiQ2hlY2tGb3JXb3JsZExlYWtzIikuZ2V0
KCksIG51bGxwdHIpOwogICAgIH0sIDIwX3MpLnJ1bigpOwogfQogCkBAIC0xMzI0LDYgKzEyOTQs
NyBAQCBjb25zdCBjaGFyKiBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NOYW1lKCkKIH0K
IAogI2lmICFQTEFURk9STShDT0NPQSkKKwogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGUoYm9vbCBhbGxvd3MpCiB7CiAgICAgbV9hbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZSA9IGFsbG93czsKQEAgLTE0MDAsOCArMTM3MSw4IEBAIHN0YXRpYyBib29sIHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCiAKIHN0YXRp
YyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNv
bnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gYmFzZVVSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVS
TChwYXRoT3JVUkwuY19zdHIoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiByZWxhdGl2
ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1
ZS5jX3N0cigpKSk7CisgICAgYXV0byBiYXNlVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBh
dGhPclVSTC5jX3N0cigpKSk7CisgICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxD
cmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7CiAgICAgcmV0
dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKIH0K
IApAQCAtMTQxNSw4ICsxMzg2LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlVGVzdE9wdGlvbnNGcm9t
VGVzdEhlYWRlcihUZXN0T3B0aW9ucyYgdGVzdE9wdGlvbnMsIGNvbnN0IHN0ZDoKICAgICBzdGQ6
OnN0cmluZyBmaWxlbmFtZSA9IGFic29sdXRlUGF0aDsKICAgICBpZiAoZmlsZW5hbWUuZW1wdHko
KSkgewogICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2UgY29udmVyc2lvbnMgYmV0d2Vl
biBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tV
UkxSZWY+IHdrVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7
Ci0gICAgICAgIGZpbGVuYW1lID0gdGVzdFBhdGgod2tVUkwuZ2V0KCkpOworICAgICAgICBmaWxl
bmFtZSA9IHRlc3RQYXRoKGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkp
LmdldCgpKTsKICAgICB9CiAKICAgICBpZiAoZmlsZW5hbWUuZW1wdHkoKSkKQEAgLTE2MTUsNiAr
MTU4NSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0
IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogfQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykgJiYgIVBMQVRGT1JNKENPQ09BKQorCiBzdHJ1Y3QgQ29udGVudEV4dGVuc2lvblN0b3JlQ2Fs
bGJhY2tDb250ZXh0IHsKICAgICBleHBsaWNpdCBDb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFj
a0NvbnRleHQoVGVzdENvbnRyb2xsZXImIGNvbnRyb2xsZXIpCiAgICAgICAgIDogdGVzdENvbnRy
b2xsZXIoY29udHJvbGxlcikKQEAgLTE2NDIsMTUgKzE2MTMsOSBAQCBzdGF0aWMgc3RkOjpzdHJp
bmcgY29udGVudEV4dGVuc2lvbkpTT05QYXRoKFdLVVJMUmVmIHVybCkKICAgICBpZiAocGF0aC5s
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHBhdGggKyAiLmpzb24iOwogCi0gICAgYXV0byBwID0g
YWRvcHRXSyhXS1VSTENvcHlQYXRoKHVybCkpOwotICAgIGF1dG8gYnVmZmVyID0gc3RkOjp2ZWN0
b3I8Y2hhcj4oV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHAuZ2V0KCkpKTsKLSAg
ICBjb25zdCBhdXRvIGxlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcocC5nZXQoKSwgYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0gICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCJMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzIikgKyBzdGQ6OnN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgg
LSAxKSArICIuanNvbiI7CisgICAgcmV0dXJuICJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzIiArIHRv
U1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aCh1cmwpKS5nZXQoKSkgKyAiLmpzb24iOwogfQotI2Vu
ZGlmCiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0
KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogewogICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRF
eHRlbnNpb25zUGF0aCA9IGxpYnJhcnlQYXRoRm9yVGVzdGluZygpOwpAQCAtMTY3MCwxMyArMTYz
NSwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9y
VGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdAogICAgIH0KIAogICAgIHN0ZDo6c3RyaW5n
IGpzb25GaWxlQ29udGVudHMge3N0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPihqc29uRmls
ZSksIHN0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPigpfTsKLSAgICBhdXRvIGpzb25Tb3Vy
Y2UgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGpzb25GaWxlQ29udGVu
dHMuY19zdHIoKSkpOworICAgIGF1dG8ganNvblNvdXJjZSA9IHRvV0soanNvbkZpbGVDb250ZW50
cy5jX3N0cigpKTsKIAotICAgIGF1dG8gc3RvcmVQYXRoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhjb250ZW50RXh0ZW5zaW9uc1BhdGgpKTsKKyAgICBhdXRvIHN0b3Jl
UGF0aCA9IHRvV0soY29udGVudEV4dGVuc2lvbnNQYXRoKTsKICAgICBhdXRvIGV4dGVuc2lvblN0
b3JlID0gYWRvcHRXSyhXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDcmVhdGUoc3RvcmVQYXRo
LmdldCgpKSk7CiAgICAgQVNTRVJUKGV4dGVuc2lvblN0b3JlKTsKIAotICAgIGF1dG8gZmlsdGVy
SWRlbnRpZmllciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRlc3RD
b250ZW50RXh0ZW5zaW9uIikpOworICAgIGF1dG8gZmlsdGVySWRlbnRpZmllciA9IHRvV0soIlRl
c3RDb250ZW50RXh0ZW5zaW9uIik7CiAKICAgICBDb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFj
a0NvbnRleHQgY29udGV4dCgqdGhpcyk7CiAgICAgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Q29tcGlsZShleHRlbnNpb25TdG9yZS5nZXQoKSwgZmlsdGVySWRlbnRpZmllci5nZXQoKSwganNv
blNvdXJjZS5nZXQoKSwgJmNvbnRleHQsIGNvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrKTsK
QEAgLTE3MDEsMTggKzE2NjYsMjIgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50
RXh0ZW5zaW9ucygpCiAKICAgICBXS1VzZXJDb250ZW50Q29udHJvbGxlclJlbW92ZUFsbFVzZXJD
b250ZW50RmlsdGVycyh1c2VyQ29udGVudENvbnRyb2xsZXIoKSk7CiAKLSAgICBhdXRvIHN0b3Jl
UGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29udGVudEV4dGVu
c2lvbnNQYXRoKSk7CisgICAgYXV0byBzdG9yZVBhdGggPSB0b1dLKGNvbnRlbnRFeHRlbnNpb25z
UGF0aCk7CiAgICAgYXV0byBleHRlbnNpb25TdG9yZSA9IGFkb3B0V0soV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlQ3JlYXRlKHN0b3JlUGF0aC5nZXQoKSkpOwogICAgIEFTU0VSVChleHRlbnNp
b25TdG9yZSk7CiAKLSAgICBhdXRvIGZpbHRlcklkZW50aWZpZXIgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXN0Q29udGVudEV4dGVuc2lvbiIpKTsKKyAgICBhdXRv
IGZpbHRlcklkZW50aWZpZXIgPSB0b1dLKCJUZXN0Q29udGVudEV4dGVuc2lvbiIpOwogCiAgICAg
Q29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwogICAg
IFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZShleHRlbnNpb25TdG9yZS5nZXQoKSwg
ZmlsdGVySWRlbnRpZmllci5nZXQoKSwgJmNvbnRleHQsIGNvbnRlbnRFeHRlbnNpb25TdG9yZUNh
bGxiYWNrKTsKICAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5vVGltZW91dCk7CiAgICAgQVNT
RVJUKCFjb250ZXh0LmZpbHRlcik7CiB9Ci0jZWxzZSAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykgJiYgIVBMQVRGT1JN
KENPQ09BKQorCisjaWYgIUVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZv
Y2F0aW9uJikKIHsKIH0KQEAgLTE3MjAsMTQgKzE2ODksMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24m
KQogdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50RXh0ZW5zaW9ucygpCiB7CiB9Ci0j
ZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSNlbmRpZiAvLyAhUExBVEZPUk0o
Q09DT0EpCisKKyNlbmRpZiAvLyAhRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogY2xhc3Mg
Q29tbWFuZFRva2VuaXplciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29tbWFuZFRva2VuaXpl
cihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCiAgICAgICAgIDogbV9pbnB1dChpbnB1dCkKLSAg
ICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKICAgICB7CiAgICAgICAgIHB1bXAoKTsKICAg
ICB9CkBAIC0xNzQwLDcgKzE3MDgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBjaGFy
IGtTZXBhcmF0b3IgPSAnXCcnOwogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtX2lucHV0OwogICAg
IHN0ZDo6c3RyaW5nIG1fbmV4dDsKLSAgICBzaXplX3QgbV9wb3NOZXh0U2VwYXJhdG9yOworICAg
IHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3IgeyAwIH07CiB9OwogCiB2b2lkIENvbW1hbmRUb2tl
bml6ZXI6OnB1bXAoKQpAQCAtMTgxNCw4ICsxNzgyLDcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6
cnVuVGVzdChjb25zdCBjaGFyKiBpbnB1dExpbmUpCiAgICAgCiAgICAgVGVzdE9wdGlvbnMgb3B0
aW9ucyA9IHRlc3RPcHRpb25zRm9yVGVzdChjb21tYW5kKTsKIAotICAgIFdLUmV0YWluUHRyPFdL
VVJMUmVmPiB3a1VSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVSTChjb21tYW5kLnBhdGhPclVSTC5j
X3N0cigpKSk7Ci0gICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IG1ha2VVbmlxdWU8VGVzdEludm9j
YXRpb24+KHdrVVJMLmdldCgpLCBvcHRpb25zKTsKKyAgICBtX2N1cnJlbnRJbnZvY2F0aW9uID0g
bWFrZVVuaXF1ZTxUZXN0SW52b2NhdGlvbj4oYWRvcHRXSyhjcmVhdGVUZXN0VVJMKGNvbW1hbmQu
cGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSwgb3B0aW9ucyk7CiAKICAgICBpZiAoY29tbWFuZC5z
aG91bGREdW1wUGl4ZWxzIHx8IG1fc2hvdWxkRHVtcFBpeGVsc0ZvckFsbFRlc3RzKQogICAgICAg
ICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRJc1BpeGVsVGVzdChjb21tYW5kLmV4cGVjdGVkUGl4
ZWxIYXNoKTsKQEAgLTE5NDQsMTggKzE5MTEsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpncHVQ
cm9jZXNzRGlkQ3Jhc2goV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUHJvY2Vzc0lEIHByb2Nlcwog
ICAgIHN0YXRpY19jYXN0PFRlc3RDb250cm9sbGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50
SW5mbykpLT5ncHVQcm9jZXNzRGlkQ3Jhc2gocHJvY2Vzc0lEKTsKIH0KIAotdm9pZCBUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnksIGJvb2wgc3luY2hyb25vdXMpCit2b2lk
IFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5k
bGUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGJvb2wgc3luY2hyb25vdXMpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIktleSIpKTsKLSAgICBXS1N0cmluZ1JlZiBrZXkgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGtleUtleS5nZXQoKSkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1v
ZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlm
aWVycyIpKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdL
RXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb2RpZmll
cnNLZXkuZ2V0KCkpKSkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvY2F0aW9u
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTG9jYXRpb24iKSk7
Ci0gICAgdW5zaWduZWQgbG9jYXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50NjRH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxvY2F0aW9uS2V5LmdldCgpKSkpKTsKLQotICAgIG1f
ZXZlbnRTZW5kZXJQcm94eS0+a2V5RG93bihrZXksIG1vZGlmaWVycywgbG9jYXRpb24pOworICAg
IG1fZXZlbnRTZW5kZXJQcm94eS0+a2V5RG93bihzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAiS2V5
IiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSwgdWludDY0VmFsdWUoZGlj
dGlvbmFyeSwgIkxvY2F0aW9uIikpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNl
aXZlTGl2ZURvY3VtZW50c0xpc3QoV0tBcnJheVJlZiBsaXZlRG9jdW1lbnRMaXN0KQpAQCAtMTk2
NCwxOCArMTkyMiw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1l
bnRzTGlzdChXS0FycmF5UmVmIGxpdmVEb2N1bWVudExpc3QpCiAKICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBTdHJpbmc+IGRvY3VtZW50SW5mbzsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bURvY3VtZW50czsgKytpKSB7Ci0gICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0
ZW1BdEluZGV4KGxpdmVEb2N1bWVudExpc3QsIGkpOwotICAgICAgICBpZiAoaXRlbSAmJiBXS0dl
dFR5cGVJRChpdGVtKSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSkgewotICAgICAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIGxpdmVEb2N1bWVudEl0ZW0gPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KGl0ZW0pOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaWRL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJpZCIpKTsKLSAgICAg
ICAgICAgIFdLVUludDY0UmVmIGRvY3VtZW50SUQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsaXZlRG9jdW1lbnRJdGVtLCBpZEtleS5nZXQoKSkp
OwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidXJsIikpOwotICAgICAgICAgICAgV0tT
dHJpbmdSZWYgZG9jdW1lbnRVUkwgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShsaXZlRG9jdW1lbnRJdGVtLCB1cmxLZXkuZ2V0KCkpKTsKLQotICAg
ICAgICAgICAgZG9jdW1lbnRJbmZvLmFkZChXS1VJbnQ2NEdldFZhbHVlKGRvY3VtZW50SUQpLCB0
b1dURlN0cmluZyhkb2N1bWVudFVSTCkpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIGRp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUoV0tBcnJheUdldEl0ZW1BdEluZGV4KGxpdmVEb2N1
bWVudExpc3QsIGkpKSkKKyAgICAgICAgICAgIGRvY3VtZW50SW5mby5hZGQodWludDY0VmFsdWUo
ZGljdGlvbmFyeSwgImlkIiksIHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKGRpY3Rpb25hcnksICJ1
cmwiKSkpOwogICAgIH0KIAogICAgIGlmICghZG9jdW1lbnRJbmZvLnNpemUoKSkgewpAQCAtMjAw
Nyw2MCArMTk1NSwzNSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBpZiAobV9z
dGF0ZSAhPSBSdW5uaW5nVGVzdCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19j
YXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViTWVzc2Fn
ZU5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCkpKTsKLQotICAgICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNl
RG93biIpIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJN
b3VzZVVwIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBidXR0b25L
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b24iKSk7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBidXR0b24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50
NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbktleS5nZXQoKSkpKSk7CisgICAgICAg
IGF1dG8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAg
IGF1dG8gc3ViTWVzc2FnZU5hbWUgPSBzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAiU3ViTWVzc2Fn
ZSIpOwogCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXJzIikpOwot
ICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2FzdDxXS0V2
ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9kaWZpZXJz
S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCi0g
ICAgICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFt
ZSwgIk1vdXNlRG93biIpKQotICAgICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91
c2VEb3duKGJ1dHRvbiwgbW9kaWZpZXJzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlVXAoYnV0dG9uLCBtb2RpZmllcnMpOworICAg
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1v
dXNlRG93biIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRG93bih1
aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnks
ICJNb2RpZmllcnMiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAorICAgICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNl
VXAiKSkgeworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVVwKHVpbnQ2NFZh
bHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlm
aWVycyIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiS2V5RG93biIpKSB7
Ci0gICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmYWxzZSk7CisgICAgICAgICAgICBkaWRSZWNlaXZlS2V5
RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoZGljdGlvbmFyeSwgZmFsc2UpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVNjcm9sbEJ5IikpIHsKLSAgICAgICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB4ID0gV0tEb3VibGVH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gV0tEb3VibGVHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZvcndh
cmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVNj
cm9sbEJ5KHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVNjcm9s
bEJ5KGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIiksIGRvdWJsZVZhbHVlKGRpY3Rpb25hcnks
ICJZIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVNjcm9sbEJ5
V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19j
YXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBoYXNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUGhhc2UiKSk7Ci0gICAgICAgICAgICBpbnQgcGhhc2UgPSBzdGF0
aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwaGFzZUtleS5n
ZXQoKSkpKSk7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9tZW50dW1L
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb21lbnR1bSIpKTsK
LSAgICAgICAgICAgIGludCBtb21lbnR1bSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIG1vbWVudHVtS2V5LmdldCgpKSkpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCisgICAgICAgICAgICBhdXRv
IHggPSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAgICAgICAgICAgYXV0byB5ID0g
ZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKKyAgICAgICAgICAgIGF1dG8gcGhhc2UgPSB1
aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiUGhhc2UiKTsKKyAgICAgICAgICAgIGF1dG8gbW9tZW50
dW0gPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9tZW50dW0iKTsKICAgICAgICAgICAgIG1f
ZXZlbnRTZW5kZXJQcm94eS0+bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2Vz
KHgsIHksIHBoYXNlLCBtb21lbnR1bSk7Ci0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkBAIC0yMDgzLDQyICsyMDA2LDI2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2Vp
dmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYKICAgICAg
ICAgaWYgKG1fc3RhdGUgIT0gUnVubmluZ1Rlc3QpCiAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIobnVsbHB0cik7CiAKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFy
eVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+
KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3Nh
Z2UiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN1Yk1lc3NhZ2VOYW1lID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBzdWJNZXNzYWdlS2V5LmdldCgpKSk7CisgICAgICAgIGF1dG8gZGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc3ViTWVzc2FnZU5hbWUg
PSBzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAiU3ViTWVzc2FnZSIpOwogCiAgICAgICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiS2V5RG93biIpKSB7
Ci0gICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0cnVlKTsKLQorICAgICAgICAgICAgZGlkUmVjZWl2ZUtl
eURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKGRpY3Rpb25hcnksIHRydWUpOwogICAgICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJN
b3VzZURvd24iKSB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1l
LCAiTW91c2VVcCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0
dG9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uIikp
OwotICAgICAgICAgICAgdW5zaWduZWQgYnV0dG9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdL
VUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25LZXkuZ2V0KCkpKSkpOwotCi0g
ICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXJzIikpOwotICAgICAgICAg
ICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2FzdDxXS0V2ZW50TW9kaWZp
ZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9kaWZpZXJzS2V5LmdldCgp
KSkpKTsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2Fn
ZU5hbWUsICJNb3VzZURvd24iKSkgeworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5t
b3VzZURvd24odWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRWYWx1ZShk
aWN0aW9uYXJ5LCAiTW9kaWZpZXJzIikpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKG51bGxwdHIpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8g
V2ViUHJvY2VzcwotICAgICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
c3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSkKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPm1vdXNlRG93bihidXR0b24sIG1vZGlmaWVycyk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVVwKGJ1dHRvbiwgbW9k
aWZpZXJzKTsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVz
c2FnZU5hbWUsICJNb3VzZVVwIikpIHsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+
bW91c2VVcCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiksIHVpbnQ2NFZhbHVlKGRp
Y3Rpb25hcnksICJNb2RpZmllcnMiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlTW92ZVRvIikpIHsKLSAgICAgICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB4ID0gV0tEb3VibGVH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gV0tEb3VibGVHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZvcndh
cmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZU1v
dmVUbyh4LCB5KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VNb3ZlVG8o
ZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKSwgZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlki
KSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAg
ICAgIH0KIApAQCAtMjE0NCw4MSArMjA1MSw0OCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRS
ZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmCiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIk1vdXNlRm9yY2VDaGFuZ2VkIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkZvcmNlIikpOwotICAgICAgICAgICAgZG91YmxlIGZvcmNlID0gV0tEb3VibGVH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZvcmNlS2V5LmdldCgpKSkpOwotCi0gICAgICAgICAg
ICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRm9yY2VDaGFuZ2VkKGZvcmNlKTsKKyAgICAgICAg
ICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VGb3JjZUNoYW5nZWQoZG91YmxlVmFsdWUoZGlj
dGlvbmFyeSwgIkZvcmNlIikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KG51bGxwdHIpOwogICAgICAgICB9CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAgICAgICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiQ29udGlu
dW91c01vdXNlU2Nyb2xsQnkiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwot
ICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91
YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
eEtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAg
ICAgICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5n
ZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhZ2VkS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGFnZWQiKSk7Ci0gICAg
ICAgICAgICBib29sIHBhZ2VkID0gc3RhdGljX2Nhc3Q8Ym9vbD4oV0tVSW50NjRHZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHBhZ2VkS2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9y
d2FyZCB0byBXZWJQcm9jZXNzCisgICAgICAgICAgICBhdXRvIHggPSBkb3VibGVWYWx1ZShkaWN0
aW9uYXJ5LCAiWCIpOworICAgICAgICAgICAgYXV0byB5ID0gZG91YmxlVmFsdWUoZGljdGlvbmFy
eSwgIlkiKTsKKyAgICAgICAgICAgIGF1dG8gcGFnZWQgPSBib29sZWFuVmFsdWUoZGljdGlvbmFy
eSwgIlBhZ2VkIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmNvbnRpbnVvdXNN
b3VzZVNjcm9sbEJ5KHgsIHksIHBhZ2VkKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTGVhcEZvcndhcmQiKSkgewotICAgICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lSW5NaWxsaXNlY29uZHMiKSk7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCB0aW1lID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB0aW1lS2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5sZWFwRm9yd2FyZCh0aW1lKTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5k
ZXJQcm94eS0+bGVhcEZvcndhcmQodWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlRpbWVJbk1pbGxp
c2Vjb25kcyIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRy
KTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJBZGRUb3VjaFBvaW50
IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGludCB4
ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtl
eS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAg
ICAgIGludCB5ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgeUtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+
YWRkVG91Y2hQb2ludCh4LCB5KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+YWRk
VG91Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpLCB1aW50NjRWYWx1ZShkaWN0
aW9uYXJ5LCAiWSIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxs
cHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKHN1Yk1lc3NhZ2VOYW1lLCAiVXBkYXRlVG91Y2hQb2ludCIpKSB7Ci0gICAgICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHN0YXRp
Y19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGluZGV4S2V5Lmdl
dCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAg
aW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCB4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAg
ICAgICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQorICAgICAgICAgICAgYXV0byBpbmRleCA9IHVp
bnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJbmRleCIpOworICAgICAgICAgICAgYXV0byB4ID0gdWlu
dDY0VmFsdWUoZGljdGlvbmFyeSwgIlgiKTsKKyAgICAgICAgICAgIGF1dG8geSA9IHVpbnQ2NFZh
bHVlKGRpY3Rpb25hcnksICJZIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnVw
ZGF0ZVRvdWNoUG9pbnQoaW5kZXgsIHgsIHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJTZXRUb3VjaE1vZGlmaWVyIikpIHsK
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcktleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVyIikpOwotICAgICAgICAg
ICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciA9IHN0YXRpY19jYXN0PFdLRXZlbnRNb2RpZmll
cnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb2RpZmllcktleS5nZXQoKSkp
KSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbmFibGVLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFbmFibGUiKSk7Ci0gICAgICAg
ICAgICBib29sIGVuYWJsZSA9IHN0YXRpY19jYXN0PGJvb2w+KFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBlbmFibGVLZXkuZ2V0KCkpKSkpOwotCisgICAgICAgICAgICBhdXRvIG1v
ZGlmaWVyID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlmaWVyIik7CisgICAgICAgICAg
ICBhdXRvIGVuYWJsZSA9IGJvb2xlYW5WYWx1ZShkaWN0aW9uYXJ5LCAiRW5hYmxlIik7CiAgICAg
ICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnNldFRvdWNoTW9kaWZpZXIobW9kaWZpZXIsIGVu
YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIlNldFRvdWNoUG9pbnRSYWRpdXMiKSkgewotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJSYWRpdXNYIikpOwotICAgICAgICAgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpKTsKLQotICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNZIikpOwotICAgICAgICAgICAgaW50IHkgPSBz
dGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5Lmdl
dCgpKSkpKTsKLQorICAgICAgICAgICAgYXV0byB4ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwg
IlJhZGl1c1giKTsKKyAgICAgICAgICAgIGF1dG8geSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnks
ICJSYWRpdXNZIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnNldFRvdWNoUG9p
bnRSYWRpdXMoeCwgeSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0cik7CiAgICAgICAgIH0KQEAgLTIyNDksMTYgKzIxMjMsMTIgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0
cmluZ1JlZgogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoc3ViTWVzc2FnZU5hbWUsICJSZWxlYXNlVG91Y2hQb2ludCIpKSB7Ci0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHN0
YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGluZGV4S2V5
LmdldCgpKSkpKTsKLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+cmVsZWFzZVRvdWNo
UG9pbnQoaW5kZXgpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5yZWxlYXNlVG91
Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiSW5kZXgiKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIkNhbmNlbFRv
dWNoUG9pbnQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGluZGV4
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5kZXgiKSk7Ci0g
ICAgICAgICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBpbmRleEtleS5nZXQoKSkpKSk7Ci0gICAgICAgICAgICBtX2V2ZW50
U2VuZGVyUHJveHktPmNhbmNlbFRvdWNoUG9pbnQoaW5kZXgpOworICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5jYW5jZWxUb3VjaFBvaW50KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJ
bmRleCIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsK
ICAgICAgICAgfQogI2VuZGlmCkBAIC0yMjc1LDE0ICsyMTQ1LDE2IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tT
dHJpbmdSZWYKICAgICB9OwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRBbHdheXNBY2NlcHRDb29raWVzIikpIHsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIGFjY2VwdCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBXS0hUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5ID0gV0tCb29sZWFuR2V0VmFs
dWUoYWNjZXB0KSA/IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMgOiBrV0tIVFRQQ29v
a2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47CisgICAgICAgIGF1dG8g
cG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNz
YWdlQm9keSkpCisgICAgICAgICAgICA/IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMK
KyAgICAgICAgICAgIDoga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3Vt
ZW50RG9tYWluOwogICAgICAgICByZXR1cm4gc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE9ubHlBY2NlcHRGaXJzdFBh
cnR5Q29va2llcyIpKSB7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBhY2NlcHQgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tIVFRQQ29va2llQWNjZXB0
UG9saWN5IHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKGFjY2VwdCkgPyBrV0tIVFRQQ29va2ll
QWNjZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIDoga1dLSFRUUENv
b2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOworICAgICAgICBhdXRv
IHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpKQorICAgICAgICAgICAgPyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5RXhjbHVz
aXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluCisgICAgICAgICAgICA6IGtXS0hUVFBDb29raWVB
Y2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKICAgICAgICAgcmV0dXJuIHNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgfQogCkBAIC0yNDAzLDEyICsyMjc1LDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wgc2hvdWxkQmxvY2spCiAKICNpZiBQTEFURk9STShNQUMp
CiAgICAgYXV0byBwb2xpY3kgPSBzaG91bGRCbG9jayA/IGtXS1BsdWdpbkxvYWRDbGllbnRQb2xp
Y3lCbG9jayA6IGtXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3lBbGxvdzsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBuYW1lTmV0c2NhcGUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1Z2luIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lRmxhc2ggPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luIikpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbXB0eVN0cmluZyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLSAgICBXS0NvbnRleHRTZXRQbHVnaW5Mb2FkQ2xp
ZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCBlbXB0eVN0cmluZy5nZXQoKSwgbmFt
ZU5ldHNjYXBlLmdldCgpLCBlbXB0eVN0cmluZy5nZXQoKSk7Ci0gICAgV0tDb250ZXh0U2V0UGx1
Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRleHQuZ2V0KCksIHBvbGljeSwgZW1wdHlTdHJpbmcu
Z2V0KCksIG5hbWVGbGFzaC5nZXQoKSwgZW1wdHlTdHJpbmcuZ2V0KCkpOworICAgIFdLQ29udGV4
dFNldFBsdWdpbkxvYWRDbGllbnRQb2xpY3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ksIHRvV0so
IiIpLmdldCgpLCB0b1dLKCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1Z2luIikuZ2V0KCksIHRv
V0soIiIpLmdldCgpKTsKKyAgICBXS0NvbnRleHRTZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KG1f
Y29udGV4dC5nZXQoKSwgcG9saWN5LCB0b1dLKCIiKS5nZXQoKSwgdG9XSygiY29tLm1hY3JvbWVk
aWEuRmxhc2ggUGxheWVyLnBsdWdpbiIpLmdldCgpLCB0b1dLKCIiKS5nZXQoKSk7CiAjZW5kaWYK
IH0KIApAQCAtMjQyMywyOSArMjI5MSwyNCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRQbHVn
aW5TdXBwb3J0ZWRNb2RlKGNvbnN0IFN0cmluZyYgbW9kZSkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBlbXB0eUFycmF5ID0gYWRv
cHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gYWxsT3JpZ2lucyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3BlY2lmaWNPcmlnaW4gPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsb2NhbGhvc3QiKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcGRmTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIk15IHBlcnNvbmFsIFBERiIpKTsKLSAgICBXS0NvbnRleHRBZGRTdXBwb3J0
ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBhbGxPcmlnaW5zLmdldCgpLCBwZGZOYW1lLmdldCgp
LCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICBhdXRvIGVtcHR5QXJy
YXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG5hbWVOZXRzY2FwZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlTmV0c2NhcGUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBtaW1lVHlwZXNOZXRzY2FwZSA9IGFk
b3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgV0tBcnJheUFwcGVuZEl0ZW0obWlt
ZVR5cGVzTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlTmV0c2NhcGUuZ2V0KCkpOworICAgIFdLQ29u
dGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0soIiIpLmdldCgpLCB0
b1dLKCJNeSBwZXJzb25hbCBQREYiKS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJh
eS5nZXQoKSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZVBkZiA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdCBidWlsdC1pbiBQREYiKSk7
CisgICAgYXV0byBuYW1lTmV0c2NhcGUgPSB0b1dLKCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1
Z2luIik7CisgICAgYXV0byBtaW1lVHlwZXNOZXRzY2FwZSA9IGFkb3B0V0soV0tNdXRhYmxlQXJy
YXlDcmVhdGUoKSk7CisgICAgV0tBcnJheUFwcGVuZEl0ZW0obWltZVR5cGVzTmV0c2NhcGUuZ2V0
KCksIHRvV0soImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKS5nZXQoKSk7Cisg
ICAgYXV0byBuYW1lUGRmID0gdG9XSygiV2ViS2l0IGJ1aWx0LWluIFBERiIpOwogCiAgICAgaWYg
KG1fdW5zdXBwb3J0ZWRQbHVnaW5Nb2RlID09ICJhbGxPcmlnaW5zIikgewotICAgICAgICBXS0Nv
bnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBhbGxPcmlnaW5zLmdldCgp
LCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5
LmdldCgpKTsKLSAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5n
ZXQoKSwgYWxsT3JpZ2lucy5nZXQoKSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwg
ZW1wdHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbiht
X2NvbnRleHQuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVU
eXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250ZXh0
QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygiIikuZ2V0KCksIG5hbWVQ
ZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG1fdW5zdXBwb3J0ZWRQbHVnaW5Nb2RlID09ICJzcGVj
aWZpY09yaWdpbiIpIHsKLSAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29u
dGV4dC5nZXQoKSwgc3BlY2lmaWNPcmlnaW4uZ2V0KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgbWlt
ZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwotICAgICAgICBXS0NvbnRl
eHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBzcGVjaWZpY09yaWdpbi5nZXQo
KSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7Cisg
ICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0so
ImxvY2FsaG9zdCIpLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBl
LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVk
UGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygibG9jYWxob3N0IikuZ2V0KCksIG5hbWVQZGYu
Z2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogfQpAQCAtMjQ5MSwxNCArMjM1NCwxMiBAQCBib29sIFRlc3RDb250cm9sbGVy
OjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFdLUGFnZVJlZiBwYWdlLCBX
S1BybwogewogICAgIGlmIChtX3Nob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UpCiAgICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPm91dHB1dFRleHQoImNhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VcbiIpOwotICAgIFdLUHJvdGVjdGlvblNw
YWNlQXV0aGVudGljYXRpb25TY2hlbWUgYXV0aGVudGljYXRpb25TY2hlbWUgPSBXS1Byb3RlY3Rp
b25TcGFjZUdldEF1dGhlbnRpY2F0aW9uU2NoZW1lKHByb3RlY3Rpb25TcGFjZSk7Ci0gICAgCi0g
ICAgaWYgKGF1dGhlbnRpY2F0aW9uU2NoZW1lID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRp
Y2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkKSB7Ci0gICAgICAgIHN0
ZDo6c3RyaW5nIGhvc3QgPSB0b1NURChhZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3Qo
cHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkpOworICAgIGF1dG8gc2NoZW1lID0gV0tQcm90ZWN0aW9u
U3BhY2VHZXRBdXRoZW50aWNhdGlvblNjaGVtZShwcm90ZWN0aW9uU3BhY2UpOworICAgIGlmIChz
Y2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVTZXJ2ZXJUcnVz
dEV2YWx1YXRpb25SZXF1ZXN0ZWQpIHsKKyAgICAgICAgYXV0byBob3N0ID0gdG9TVEQoYWRvcHRX
SyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rpb25TcGFjZSkpKTsKICAgICAgICAg
cmV0dXJuIGhvc3QgPT0gImxvY2FsaG9zdCIgfHwgaG9zdCA9PSAiMTI3LjAuMC4xIiB8fCAobV9h
bGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMgJiYgbV9hbGxvd2VkSG9zdHMu
ZmluZChob3N0KSAhPSBtX2FsbG93ZWRIb3N0cy5lbmQoKSk7CiAgICAgfQotICAgIAotICAgIHJl
dHVybiBhdXRoZW50aWNhdGlvblNjaGVtZSA8PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNh
dGlvblNjaGVtZUhUVFBEaWdlc3QgfHwgYXV0aGVudGljYXRpb25TY2hlbWUgPT0ga1dLUHJvdGVj
dGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVPQXV0aDsKKyAgICByZXR1cm4gc2NoZW1lIDw9
IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdCB8fCBzY2hl
bWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVPQXV0aDsKIH0KIAog
dm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTmF2aWdhdGlvbihXS1BhZ2VSZWYgcGFnZSwg
V0tOYXZpZ2F0aW9uUmVmIG5hdmlnYXRpb24pCkBAIC0yNTA2LDggKzIzNjcsNyBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKFdLUGFnZVJlZiBwYWdlLCBXS05hdmln
YXRpb25SZWYgbmF2aWdhdAogICAgIGlmIChtX3N0YXRlICE9IFJlc2V0dGluZykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMID0gYWRvcHRXSyhXS0Zy
YW1lQ29weVVSTChXS1BhZ2VHZXRNYWluRnJhbWUocGFnZSkpKTsKLSAgICBpZiAoIVdLVVJMSXNF
cXVhbCh3a1VSTC5nZXQoKSwgYmxhbmtVUkwoKSkpCisgICAgaWYgKCFXS1VSTElzRXF1YWwoYWRv
cHRXSyhXS0ZyYW1lQ29weVVSTChXS1BhZ2VHZXRNYWluRnJhbWUocGFnZSkpKS5nZXQoKSwgYmxh
bmtVUkwoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZG9uZVJlc2V0dGluZyA9IHRydWU7
CkBAIC0yNTI3LDcgKzIzODcsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmIHBhZ2UsIFdLQXV0aGVudAogICAgICAgICBt
X3NlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCsrOwogCiAgICAgICAgIGlm
IChtX2FsbG93c0FueVNTTENlcnRpZmljYXRlKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxX
S0NyZWRlbnRpYWxSZWY+IGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh0
b1dLKCJhY2NlcHQgc2VydmVyIHRydXN0IikuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBrV0tDcmVk
ZW50aWFsUGVyc2lzdGVuY2VOb25lKSk7CisgICAgICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBh
ZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh0b1dLKCJhY2NlcHQgc2VydmVyIHRydXN0IikuZ2V0
KCksIHRvV0soIiIpLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSk7CiAgICAg
ICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVj
aXNpb25MaXN0ZW5lciwgY3JlZGVudGlhbC5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KQEAgLTI1NDEsOSArMjQwMSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYgcGFnZSwgV0tBdXRoZW50CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBob3N0ID0gdG9TVEQoYWRv
cHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rpb25TcGFjZSkpLmdldCgpKTsK
KyAgICBhdXRvIGhvc3QgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29w
eUhvc3QocHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkpOwogICAgIGludCBwb3J0ID0gV0tQcm90ZWN0
aW9uU3BhY2VHZXRQb3J0KHByb3RlY3Rpb25TcGFjZSk7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBt
YWtlU3RyaW5nKGhvc3QuY19zdHIoKSwgJzonLCBwb3J0LCAiIC0gZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlIC0gIiwgdG9TdHJpbmcoYXV0aGVudGljYXRpb25TY2hlbWUpLCAiIC0g
Iik7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSBtYWtlU3RyaW5nKGhvc3QsICc6JywgcG9ydCwgIiAt
IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAtICIsIHRvU3RyaW5nKGF1dGhlbnRp
Y2F0aW9uU2NoZW1lKSwgIiAtICIpOwogICAgIGlmICghbV9oYW5kbGVzQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VzKQogICAgICAgICBtZXNzYWdlLmFwcGVuZCgiU2ltdWxhdGluZyBjYW5jZWxsZWQg
YXV0aGVudGljYXRpb24gc2hlZXRcbiIpOwogICAgIGVsc2UKQEAgLTI1NTQsMTMgKzI0MTQsMTEg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KFdLUGFnZVJlZiBwYWdlLCBXS0F1dGhlbnQKICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lz
aW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIDApOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1c2VybmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9hdXRoZW50aWNhdGlvblVzZXJu
YW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFzc3dv
cmQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1fYXV0aGVudGljYXRp
b25QYXNzd29yZC51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tDcmVkZW50aWFs
UmVmPiBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRpYWxDcmVhdGUodXNlcm5hbWUuZ2V0
KCksIHBhc3N3b3JkLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKSk7
CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRpYWxDcmVhdGUodG9XSyht
X2F1dGhlbnRpY2F0aW9uVXNlcm5hbWUpLmdldCgpLCB0b1dLKG1fYXV0aGVudGljYXRpb25QYXNz
d29yZCkuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24pKTsKICAgICBX
S0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0
ZW5lciwgY3JlZGVudGlhbC5nZXQoKSk7CiB9CiAKLSAgICAKKwogLy8gV0tDb250ZXh0RG93bmxv
YWRDbGllbnQKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZG93bmxvYWREaWRTdGFydChXS0NvbnRl
eHRSZWYgY29udGV4dCwgV0tEb3dubG9hZFJlZiBkb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKQEAgLTI3MDQsOSArMjU2Miw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiAgICAgZGVjaWRlUG9saWN5Rm9yR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKTsKIH0KIAotdm9pZCBUZXN0Q29udHJv
bGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUg
bG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91Ymxl
IGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRl
QWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92
aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUg
Zmxvb3JMZXZlbCkKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBP
cHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJh
Y3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0
aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKQogewotICAgIG1fZ2VvbG9jYXRpb25Qcm92aWRlci0+
c2V0UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1
ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ks
IHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVz
Rmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgbV9nZW9sb2NhdGlvblByb3ZpZGVyLT5zZXRQ
b3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGUsIGFsdGl0dWRl
QWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkLCBmbG9vckxldmVsKTsKIH0KIAogdm9pZCBUZXN0Q29u
dHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3Ry
aW5nUmVmIGVycm9yTWVzc2FnZSkKQEAgLTI4NTYsOSArMjcxNCw3IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luKFdLRnJhbWVS
ZWYgZnJhbWUsCiB7CiAgICAgYXV0byBvcmlnaW5IYXNoID0gdXNlck1lZGlhT3JpZ2luSGFzaCh1
c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbik7CiAgICAgYXV0
byBzYWx0ID0gc2FsdEZvck9yaWdpbihmcmFtZSwgb3JpZ2luSGFzaCk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHNhbHRTdHJpbmcgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKHNhbHQudXRmOCgpLmRhdGEoKSkpOwotCi0gICAgV0tVc2VyTWVkaWFQZXJtaXNz
aW9uQ2hlY2tTZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGNoZWNrUmVxdWVzdCwgc2FsdFN0cmluZy5n
ZXQoKSwgc2V0dGluZ3NGb3JPcmlnaW4ob3JpZ2luSGFzaCkucGVyc2lzdGVudFBlcm1pc3Npb24o
KSk7CisgICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tTZXRVc2VyTWVkaWFBY2Nlc3NJbmZv
KGNoZWNrUmVxdWVzdCwgdG9XSyhzYWx0KS5nZXQoKSwgc2V0dGluZ3NGb3JPcmlnaW4ob3JpZ2lu
SGFzaCkucGVyc2lzdGVudFBlcm1pc3Npb24oKSk7CiB9CiAKIGJvb2wgVGVzdENvbnRyb2xsZXI6
OmhhbmRsZURldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdChXS1NlY3VyaXR5
T3JpZ2luUmVmIG9yaWdpbikKQEAgLTI5MTQsOCArMjc3MCw4IEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFdLUmV0YWluUHRy
PFdLQXJyYXlSZWY+IGF1ZGlvRGV2aWNlVUlEcyA9IGFkb3B0V0soV0tVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdEF1ZGlvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLQXJyYXlSZWY+IHZpZGVvRGV2aWNlVUlEcyA9IGFkb3B0V0soV0tVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdFZpZGVvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7CisgICAgICAgIGF1dG8gYXVkaW9E
ZXZpY2VVSURzID0gYWRvcHRXSyhXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0QXVkaW9EZXZp
Y2VVSURzKHJlcXVlc3QpKTsKKyAgICAgICAgYXV0byB2aWRlb0RldmljZVVJRHMgPSBhZG9wdFdL
KFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RWaWRlb0RldmljZVVJRHMocmVxdWVzdCkpOwog
CiAgICAgICAgIGlmICghV0tBcnJheUdldFNpemUodmlkZW9EZXZpY2VVSURzLmdldCgpKSAmJiAh
V0tBcnJheUdldFNpemUoYXVkaW9EZXZpY2VVSURzLmdldCgpKSkgewogICAgICAgICAgICAgV0tV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdERlbnkocmVxdWVzdCwga1dLTm9Db25zdHJhaW50cyk7
CkBAIC0yOTI2LDEzICsyNzgyLDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRlY2lkZVBvbGlj
eUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgpCiAgICAgICAgIGlmIChX
S0FycmF5R2V0U2l6ZSh2aWRlb0RldmljZVVJRHMuZ2V0KCkpKQogICAgICAgICAgICAgdmlkZW9E
ZXZpY2VVSUQgPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0
SW5kZXgodmlkZW9EZXZpY2VVSURzLmdldCgpLCAwKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHZpZGVvRGV2aWNlVUlEID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiIikpOworICAgICAgICAgICAgdmlkZW9EZXZpY2VVSUQgPSB0b1dLKCIiKTsKIAogICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9EZXZpY2VVSUQ7CiAgICAgICAgIGlmIChX
S0FycmF5R2V0U2l6ZShhdWRpb0RldmljZVVJRHMuZ2V0KCkpKQogICAgICAgICAgICAgYXVkaW9E
ZXZpY2VVSUQgPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0
SW5kZXgoYXVkaW9EZXZpY2VVSURzLmdldCgpLCAwKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGF1ZGlvRGV2aWNlVUlEID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiIikpOworICAgICAgICAgICAgYXVkaW9EZXZpY2VVSUQgPSB0b1dLKCIiKTsKIAogICAgICAg
ICBXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0QWxsb3cocmVxdWVzdCwgYXVkaW9EZXZpY2VV
SUQuZ2V0KCksIHZpZGVvRGV2aWNlVUlELmdldCgpKTsKICAgICB9CkBAIC0zMDU2LDEyICsyOTEy
LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEo
V0tOYXZpZ2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW8KICAgICBpZiAoIW1fc2hvdWxkTG9nSGlzdG9y
eUNsaWVudENhbGxiYWNrcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVVJMCiAgICAgYXV0
byB1cmwgPSBhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5VVJMKG5hdmlnYXRpb25EYXRhKSk7
CiAgICAgYXV0byB1cmxTdHJpbmcgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmlu
Zyh1cmwuZ2V0KCkpKSk7Ci0gICAgLy8gVGl0bGUKICAgICBhdXRvIHRpdGxlID0gdG9XVEZTdHJp
bmcoYWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weVRpdGxlKG5hdmlnYXRpb25EYXRhKSkpOwot
ICAgIC8vIEhUVFAgbWV0aG9kCiAgICAgYXV0byByZXF1ZXN0ID0gYWRvcHRXSyhXS05hdmlnYXRp
b25EYXRhQ29weU9yaWdpbmFsUmVxdWVzdChuYXZpZ2F0aW9uRGF0YSkpOwogICAgIGF1dG8gbWV0
aG9kID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1
ZXN0LmdldCgpKSkpOwogCkBAIC0zMjA2LDcgKzMwNTksNyBAQCB2b2lkIGdldEFsbFN0b3JhZ2VB
Y2Nlc3NFbnRyaWVzQ2FsbGJhY2sodm9pZCogdXNlckRhdGEsIFdLQXJyYXlSZWYgZG9tYWluTGlz
dCkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdERvbWFpbnM7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKGRvbWFpbkxpc3QpOyBpKyspIHsKLSAgICAgICAg
YXV0byBkb21haW4gPSAgcmVpbnRlcnByZXRfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0
ZW1BdEluZGV4KGRvbWFpbkxpc3QsIGkpKTsKKyAgICAgICAgYXV0byBkb21haW4gPSByZWludGVy
cHJldF9jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluTGlzdCwg
aSkpOwogICAgICAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6dmVjdG9yPGNoYXI+KFdLU3RyaW5nR2V0
TWF4aW11bVVURjhDU3RyaW5nU2l6ZShkb21haW4pKTsKICAgICAgICAgYXV0byBzdHJpbmdMZW5n
dGggPSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGRvbWFpbiwgYnVmZmVyLmRhdGEoKSwgYnVmZmVy
LnNpemUoKSk7CiAKQEAgLTM5NzgsNyArMzgzMSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJl
aW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpCiB2b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50
aWZpZXIpCiB7CiAgICAgSW5BcHBCcm93c2VyUHJpdmFjeUNhbGxiYWNrQ29udGV4dCBjb250ZXh0
KCp0aGlzKTsKLSAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRhdGVCdW5kbGVJZGVudGlmaWVySW5O
ZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpLCBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIudXRmOCgpLmRh
dGEoKSkpLmdldCgpLCAmY29udGV4dCwgaW5BcHBCcm93c2VyUHJpdmFjeVZvaWRSZXN1bHRDYWxs
YmFjayk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlVXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3RvcmUoKSwgdG9XSyhidW5k
bGVJZGVudGlmaWVyKS5nZXQoKSwgJmNvbnRleHQsIGluQXBwQnJvd3NlclByaXZhY3lWb2lkUmVz
dWx0Q2FsbGJhY2spOwogICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IGY5NGQ1N2MxNDdi
MzE2ZjA3OGZhODVmMjIwZjQwNzYwOTQxMTNjOGMuLmZmODM5NGVjMDM4NzdhNmRiYzBkYzRiM2U0
OGMwZWY0ZjNmM2IzMzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgK
QEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gR2VvbG9jYXRpb24uCiAg
ICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRv
dWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJv
b2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9v
bCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRv
dWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJsZSBmbG9vckxldmVsKTsK
KyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91
YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRl
LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVh
ZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVs
KTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihX
S1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UpOwogICAgIHZvaWQgaGFuZGxlR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdChXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RSZWYpOwogICAgIGJv
b2wgaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IGE1YjZkZDA1NTgwYWUwYzJkOTU3MDc3ZGZl
NDUwYTQ4NmU2ZDAxZWMuLjUwMTI3ZjY3ODQxZTAzYzU1NjhlMTllOTkxMTc5N2M4ZmMyZDZiODIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCkBAIC0yNyw4ICsy
Nyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIK
IAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdl
YlZpZXcuaCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0Q29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlVJU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldl
YkNvcmVUZXN0U3VwcG9ydC5oIgpAQCAtNjYsMjEgKzY2LDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKIG5hbWVzcGFjZSBXVFIgewogCitzdGF0aWMgdm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29u
c3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIGJvZHkgPSBudWxscHRyKQoreworICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCBib2R5KTsKK30KKwogVGVzdElu
dm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKFdLVVJMUmVmIHVybCwgY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMpCiAgICAgOiBtX29wdGlvbnMob3B0aW9ucykKICAgICAsIG1fdXJsKHVybCkKICAg
ICAsIG1fd2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVGVz
dEludm9jYXRpb246OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKG1f
dXJsLmdldCgpKSk7Ci0KLSAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoID0gV0tTdHJpbmdHZXRMZW5n
dGgodXJsU3RyaW5nLmdldCgpKTsKLQotICAgIFZlY3RvcjxjaGFyPiB1cmxWZWN0b3I7Ci0gICAg
dXJsVmVjdG9yLnJlc2l6ZShzdHJpbmdMZW5ndGggKyAxKTsKLQotICAgIFdLU3RyaW5nR2V0VVRG
OENTdHJpbmcodXJsU3RyaW5nLmdldCgpLCB1cmxWZWN0b3IuZGF0YSgpLCBzdHJpbmdMZW5ndGgg
KyAxKTsKLQotICAgIG1fdXJsU3RyaW5nID0gU3RyaW5nKHVybFZlY3Rvci5kYXRhKCksIHN0cmlu
Z0xlbmd0aCk7CisgICAgbV91cmxTdHJpbmcgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29w
eVN0cmluZyhtX3VybC5nZXQoKSkpLmdldCgpKTsKIAogICAgIC8vIEZJWE1FOiBBdm9pZCBtdXRh
dGluZyB0aGUgc2V0dGluZyB2aWEgYSB0ZXN0IGRpcmVjdG9yeSBsaWtlIHRoaXMuCiAgICAgbV9k
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0gdXJsQ29udGFpbnMoImxvYWRpbmcvIikgJiYgIXVybENv
bnRhaW5zKCI6Ly9sb2NhbGhvc3QiKTsKQEAgLTEyOSwyOCArMTI1LDEyIEBAIGJvb2wgVGVzdElu
dm9jYXRpb246OnNob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFja3MoKSBjb25zdAogCiBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBUZXN0SW52b2NhdGlvbjo6Y3JlYXRlVGVz
dFNldHRpbmdzRGljdGlvbmFyeSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gYmVnaW5UZXN0TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXNlRmxleGlibGVW
aWV3cG9ydEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVzZUZs
ZXhpYmxlVmlld3BvcnQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiB1c2VGbGV4
aWJsZVZpZXdwb3J0VmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShvcHRpb25zKCkudXNl
RmxleGlibGVWaWV3cG9ydCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVz
c2FnZUJvZHkuZ2V0KCksIHVzZUZsZXhpYmxlVmlld3BvcnRLZXkuZ2V0KCksIHVzZUZsZXhpYmxl
Vmlld3BvcnRWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZHVt
cFBpeGVsc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBQ
aXhlbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBkdW1wUGl4ZWxzVmFsdWUg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBQaXhlbHMpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCBkdW1wUGl4ZWxzS2V5LmdldCgp
LCBkdW1wUGl4ZWxzVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHRpbWVvdXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1l
b3V0IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB0aW1lb3V0VmFsdWUgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKG1fdGltZW91dC5taWxsaXNlY29uZHMoKSkpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIHRpbWVvdXRLZXkuZ2V0
KCksIHRpbWVvdXRWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
ZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyVmFsdWUgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVycikpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIGR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVycktleS5nZXQoKSwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyVmFsdWUuZ2V0KCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWRkaXRpb25h
bFN1cHBvcnRlZEltYWdlVHlwZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFk
ZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzVmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKG9wdGlvbnMoKS5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5j
X3N0cigpKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5n
ZXQoKSwgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNLZXkuZ2V0KCksIGFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzVmFsdWUuZ2V0KCkpOwotCisgICAgYXV0byBiZWdpblRlc3RNZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRW
YWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlVzZUZsZXhpYmxlVmlld3BvcnQiLCBvcHRpb25z
KCkudXNlRmxleGlibGVWaWV3cG9ydCk7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJv
ZHksICJEdW1wUGl4ZWxzIiwgbV9kdW1wUGl4ZWxzKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RN
ZXNzYWdlQm9keSwgIlRpbWVvdXQiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV90aW1lb3V0Lm1p
bGxpc2Vjb25kcygpKSk7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJEdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIiLCBtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7CisgICAg
c2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VU
eXBlcyIsIG9wdGlvbnMoKS5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKTsK
ICAgICByZXR1cm4gYmVnaW5UZXN0TWVzc2FnZUJvZHk7CiB9CiAKQEAgLTE2OCw5ICsxNDgsNyBA
QCB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbnZva2UoKQogCiAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBjbGVhciBvdXQgdmlzaXRlZCBsaW5rcyBoZXJlLgogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQmVnaW5UZXN0IikpOwotICAgIGF1dG8gYmVnaW5UZXN0TWVzc2FnZUJvZHkgPSBjcmVhdGVU
ZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJCZWdpblRlc3QiLCBjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCku
Z2V0KCkpOwogCiAgICAgbV9zdGFydGVkVGVzdGluZyA9IHRydWU7CiAKQEAgLTMyNywxODUgKzMw
NSwxMDQgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFjayIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIG1lc3NhZ2VCb2R5U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZUJvZHlTdHJpbmcsICJCZWdpblRlc3QiKSkgeworICAgICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSksICJCZWdp
blRlc3QiKSkgewogICAgICAgICAgICAgbV9nb3RJbml0aWFsUmVzcG9uc2UgPSB0cnVlOwogICAg
ICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm5vdGlmeURvbmUoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiRG9uZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVzdWx0SXNQ
ZW5kaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxS
ZXN1bHRJc1BlbmRpbmciKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwaXhlbFJlc3VsdElzUGVu
ZGluZyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5LmdldCgpKSk7
Ci0gICAgICAgIG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwaXhl
bFJlc3VsdElzUGVuZGluZyk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBtX3BpeGVsUmVzdWx0SXNQ
ZW5kaW5nID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlBpeGVsUmVzdWx0
SXNQZW5kaW5nIik7CiAgICAgICAgIGlmICghbV9waXhlbFJlc3VsdElzUGVuZGluZykgewotICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVzdWx0S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHQiKSk7Ci0gICAgICAg
ICAgICBtX3BpeGVsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0tJbWFnZVJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBpeGVsUmVzdWx0S2V5LmdldCgp
KSk7CisgICAgICAgICAgICBtX3BpeGVsUmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0tJbWFnZVJlZj4o
dmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUGl4ZWxSZXN1bHQiKSk7CiAgICAgICAgICAg
ICBBU1NFUlQoIW1fcGl4ZWxSZXN1bHQgfHwgbV9kdW1wUGl4ZWxzKTsKICAgICAgICAgfQotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXBhaW50UmVjdHNLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXBhaW50UmVjdHMiKSk7Ci0gICAgICAg
IG1fcmVwYWludFJlY3RzID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHJlcGFpbnRSZWN0c0tleS5nZXQoKSkp
OwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdWRpb1Jlc3VsdEtleSA9ICBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdWRpb1Jlc3VsdCIpKTsKLSAg
ICAgICAgbV9hdWRpb1Jlc3VsdCA9IHN0YXRpY19jYXN0PFdLRGF0YVJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGF1ZGlvUmVzdWx0S2V5LmdldCgp
KSk7Ci0KKyAgICAgICAgbV9yZXBhaW50UmVjdHMgPSBzdGF0aWNfY2FzdDxXS0FycmF5UmVmPih2
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJSZXBhaW50UmVjdHMiKSk7CisgICAgICAgIG1f
YXVkaW9SZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0RhdGFSZWY+KHZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkF1ZGlvUmVzdWx0IikpOwogICAgICAgICBkb25lKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlRleHRPdXRwdXQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0ZXh0
T3V0cHV0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
bV90ZXh0T3V0cHV0LmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0T3V0cHV0KSk7CisgICAgICAgIG1f
dGV4dE91dHB1dC5hcHBlbmQodG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkR1bXBUb1N0ZEVyciIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLU3RyaW5nUmVmIHRleHRPdXRwdXQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgdG9XVEZTdHJpbmcodGV4dE91
dHB1dCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCB0b1dU
RlN0cmluZyhzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS0Jvb2xlYW5SZWYgYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUgPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKFdLQm9vbGVhbkdldFZhbHVlKGJlZm9y
ZVVubG9hZFJldHVyblZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFkZENocm9tZUlucHV0RmllbGQiKSkgewogICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+YWRkQ2hyb21lSW5w
dXRGaWVsZCgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsQWRkQ2hyb21lSW5w
dXRGaWVsZENhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxBZGRD
aHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVtb3ZlQ2hy
b21lSW5wdXRGaWVsZCIpKSB7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5yZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNhbGxSZW1vdmVDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKSk7Ci0gICAg
ICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7Cisg
ICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbFJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFj
ayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRm9jdXNXZWJWaWV3IikpIHsKICAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPm1ha2VXZWJWaWV3Rmly
c3RSZXNwb25kZXIoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbEZvY3VzV2Vi
Vmlld0NhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxGb2N1c1dl
YlZpZXdDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRCYWNraW5nU2NhbGVGYWN0
b3IiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91
YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBkb3VibGUgYmFja2luZ1NjYWxlRmFjdG9yID0gV0tE
b3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpKTsKLSAg
ICAgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9yKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGJhY2tpbmdTY2FsZUZhY3Rvcik7Ci0K
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbFNldEJhY2tpbmdTY2FsZUZhY3RvckNh
bGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDApOworICAgICAgICBXS1BhZ2VTZXRDdXN0b21CYWNraW5nU2NhbGVGYWN0b3Io
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgZG91Ymxl
VmFsdWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsU2V0QmFj
a2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2ltdWxhdGVX
ZWJOb3RpZmljYXRpb25DbGljayIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIHVpbnQ2NF90IG5vdGlm
aWNhdGlvbklEID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVz
c2FnZUJvZHkpKTsKKyAgICAgICAgdWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSB1aW50NjRWYWx1
ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zaW11
bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbklEKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0QWRkc1Zpc2l0ZWRMaW5rcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlua3MoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdL
KSk7CisgICAgICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlua3MoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdL
KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBl
cm1pc3Npb24oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbGF0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImxhdGl0dWRlIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBsYXRpdHVkZVdLID0gc3RhdGljX2Nh
c3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBsYXRpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBsYXRpdHVkZSA9
IFdLRG91YmxlR2V0VmFsdWUobGF0aXR1ZGVXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGxvbmdpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygibG9uZ2l0dWRlIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBsb25naXR1ZGVXSyA9
IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgbG9uZ2l0dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91Ymxl
IGxvbmdpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUobG9uZ2l0dWRlV0spOwotCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjdXJhY3kiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGFj
Y3VyYWN5V0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGFjY3VyYWN5S2V5V0suZ2V0KCkpKTsKLSAgICAg
ICAgZG91YmxlIGFjY3VyYWN5ID0gV0tEb3VibGVHZXRWYWx1ZShhY2N1cmFjeVdLKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNBbHRpdHVkZUtleVdLID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNBbHRpdHVkZSIpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzQWx0aXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHByb3ZpZGVzQWx0aXR1ZGVLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVz
QWx0aXR1ZGUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc0FsdGl0dWRlV0spOwotCi0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWx0aXR1ZGUiKSk7Ci0gICAgICAgIFdLRG91Ymxl
UmVmIGFsdGl0dWRlV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGFsdGl0dWRlS2V5V0suZ2V0KCkpKTsK
LSAgICAgICAgZG91YmxlIGFsdGl0dWRlID0gV0tEb3VibGVHZXRWYWx1ZShhbHRpdHVkZVdLKTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNBbHRpdHVkZUFjY3Vy
YWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRl
c0FsdGl0dWRlQWNjdXJhY3kiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwcm92aWRlc0FsdGl0
dWRlQWNjdXJhY3lXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5ID0g
V0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5V0spOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVkZUFjY3VyYWN5IikpOwotICAg
ICAgICBXS0RvdWJsZVJlZiBhbHRpdHVkZUFjY3VyYWN5V0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJs
ZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGFs
dGl0dWRlQWNjdXJhY3lLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgYWx0aXR1ZGVBY2N1
cmFjeSA9IFdLRG91YmxlR2V0VmFsdWUoYWx0aXR1ZGVBY2N1cmFjeVdLKTsKLQotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNIZWFkaW5nS2V5V0sgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0hlYWRpbmciKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiBwcm92aWRlc0hlYWRpbmdXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3Zp
ZGVzSGVhZGluZ0tleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNIZWFkaW5nID0g
V0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNIZWFkaW5nV0spOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBoZWFkaW5nS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJoZWFkaW5nIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBoZWFkaW5nV0sg
PSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGhlYWRpbmdLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUg
aGVhZGluZyA9IFdLRG91YmxlR2V0VmFsdWUoaGVhZGluZ1dLKTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNTcGVlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNTcGVlZCIpKTsKLSAgICAgICAgV0tCb29sZWFu
UmVmIHByb3ZpZGVzU3BlZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVzU3BlZWRLZXlX
Sy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzU3BlZWQgPSBXS0Jvb2xlYW5HZXRWYWx1
ZShwcm92aWRlc1NwZWVkV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
cGVlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygic3BlZWQi
KSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNwZWVkV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNwZWVk
S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIHNwZWVkID0gV0tEb3VibGVHZXRWYWx1ZShz
cGVlZFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNGbG9v
ckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92
aWRlc0Zsb29yTGV2ZWwiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwcm92aWRlc0Zsb29yTGV2
ZWxXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHByb3ZpZGVzRmxvb3JMZXZlbEtleVdLLmdldCgpKSk7
Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsID0gV0tCb29sZWFuR2V0VmFsdWUocHJv
dmlkZXNGbG9vckxldmVsV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBm
bG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJm
bG9vckxldmVsIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBmbG9vckxldmVsV0sgPSBzdGF0aWNf
Y2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGZsb29yTGV2ZWxLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgZmxvb3JM
ZXZlbCA9IFdLRG91YmxlR2V0VmFsdWUoZmxvb3JMZXZlbFdLKTsKLQotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUs
IGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRl
c0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVh
ZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZl
bCk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVl
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBsYXRpdHVkZSA9IGRvdWJsZVZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgImxhdGl0dWRlIik7CisgICAgICAgIGF1dG8gbG9uZ2l0dWRlID0g
ZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAibG9uZ2l0dWRlIik7CisgICAgICAg
IGF1dG8gYWNjdXJhY3kgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJhY2N1
cmFjeSIpOworICAgICAgICBhdXRvIGFsdGl0dWRlID0gb3B0aW9uYWxEb3VibGVWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJhbHRpdHVkZSIpOworICAgICAgICBhdXRvIGFsdGl0dWRlQWNj
dXJhY3kgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImFsdGl0
dWRlQWNjdXJhY3kiKTsKKyAgICAgICAgYXV0byBoZWFkaW5nID0gb3B0aW9uYWxEb3VibGVWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJoZWFkaW5nIik7CisgICAgICAgIGF1dG8gc3BlZWQg
PSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgInNwZWVkIik7Cisg
ICAgICAgIGF1dG8gZmxvb3JMZXZlbCA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiZmxvb3JMZXZlbCIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNj
dXJhY3ksIGFsdGl0dWRlLCBhbHRpdHVkZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCwgZmxvb3JM
ZXZlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5h
dmFpbGFibGVFcnJvciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGVycm9yTWVz
c2FnZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdL
U3RyaW5nUmVmIGVycm9yTWVzc2FnZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
VW5hdmFpbGFibGVFcnJvcihlcnJvck1lc3NhZ2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRV
c2VyTWVkaWFQZXJtaXNzaW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBl
bmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVzZXJNZWRpYVBlcm1pc3Npb24oV0tC
b29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MTUsMTE3ICs0MTIsNjYgQEAgdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJp
bmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9y
T3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGVybWlzc2lvbktleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGVybWlzc2lvbiIpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIHBlcm1pc3Npb25XSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBlcm1p
c3Npb25LZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHBlcm1pc3Npb24gPSBXS0Jvb2xlYW5H
ZXRWYWx1ZShwZXJtaXNzaW9uV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBvcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmln
aW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBv
cmlnaW5LZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFy
ZW50T3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFy
ZW50T3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW5XSyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgcGFyZW50T3JpZ2luS2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAg
ICBhdXRvIHBlcm1pc3Npb24gPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
cGVybWlzc2lvbiIpOworICAgICAgICBhdXRvIG9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAib3JpZ2luIik7CisgICAgICAgIGF1dG8gcGFyZW50T3JpZ2luV0sg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJwYXJlbnRPcmlnaW4iKTsKICAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQ
ZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Npb24sIG9yaWdpbldLLCBwYXJlbnRPcmlnaW5XSyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3Vu
dEZvck9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICAgICAg
V0tTdHJpbmdSZWYgb3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG9yaWdpbktleS5nZXQoKSkp
OwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwYXJl
bnRPcmlnaW5LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBv
cmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIm9yaWdpbiIpOwor
ICAgICAgICBhdXRvIHBhcmVudE9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAicGFyZW50T3JpZ2luIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5yZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4ob3JpZ2lu
V0ssIHBhcmVudE9yaWdpbldLKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0Q3VzdG9tUG9saWN5
RGVsZWdhdGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbmFibGVkS2V5V0sgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJlbmFibGVkIikpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZW5hYmxlZEtleVdL
LmdldCgpKSk7Ci0gICAgICAgIGJvb2wgZW5hYmxlZCA9IFdLQm9vbGVhbkdldFZhbHVlKGVuYWJs
ZWRXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBlcm1pc3NpdmVLZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBlcm1pc3NpdmUiKSk7
Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwZXJtaXNzaXZlV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBw
ZXJtaXNzaXZlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwZXJtaXNzaXZlID0gV0tCb29s
ZWFuR2V0VmFsdWUocGVybWlzc2l2ZVdLKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZW5h
YmxlZCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJlbmFibGVkIik7Cisg
ICAgICAgIGF1dG8gcGVybWlzc2l2ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJwZXJtaXNzaXZlIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShlbmFibGVkLCBwZXJtaXNzaXZlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0SGlkZGVuIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFy
eVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+
KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNJbml0
aWFsS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoaWRkZW4i
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBoaWRkZW5XSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlz
SW5pdGlhbEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgaGlkZGVuID0gV0tCb29sZWFuR2V0
VmFsdWUoaGlkZGVuV0spOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRIaWRkZW4oaGlkZGVuKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0SGlkZGVuKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJo
aWRkZW4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlByb2Nlc3NXb3JrUXVldWUiKSkgewotICAg
ICAgICBpZiAoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5w
cm9jZXNzV29ya1F1ZXVlKCkpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldv
cmtRdWV1ZVByb2Nlc3NlZENhbGxiYWNrIikpOwotICAgICAgICAgICAgV0tQYWdlUG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmll
dygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5wcm9jZXNz
V29ya1F1ZXVlKCkpCisgICAgICAgICAgICBwb3N0UGFnZU1lc3NhZ2UoIldvcmtRdWV1ZVByb2Nl
c3NlZENhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlQmFja05hdmlnYXRpb24i
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0
R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBzdGVwQ291bnQgPSBXS1VJbnQ2NEdldFZh
bHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlQmFja05hdmln
YXRpb24oc3RlcENvdW50KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndv
cmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUJhY2tOYXZpZ2F0aW9uKHVpbnQ2NFZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlw
ZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBzdGVwQ291bnQgPSBXS1VJbnQ2NEdldFZhbHVlKHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlRm9yd2FyZE5hdmlnYXRp
b24oc3RlcENvdW50KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtR
dWV1ZU1hbmFnZXIoKS5xdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHVpbnQ2NFZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9hZCIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbG9hZERhdGFEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHVybEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
InVybCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdXJsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIHVybEtl
eS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0YXJnZXRLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0YXJnZXQiKSk7Ci0gICAg
ICAgIFdLU3RyaW5nUmVmIHRhcmdldFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCB0YXJnZXRLZXkuZ2V0KCkp
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2hvdWxkT3BlbkV4dGVybmFs
VVJMc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInNob3VsZE9w
ZW5FeHRlcm5hbFVSTHMiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBzaG91bGRPcGVuRXh0ZXJu
YWxVUkxzVmFsdWVXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIHNob3VsZE9wZW5FeHRlcm5hbFVSTHNLZXku
Z2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVl
TWFuYWdlcigpLnF1ZXVlTG9hZCh0b1dURlN0cmluZyh1cmxXSyksIHRvV1RGU3RyaW5nKHRhcmdl
dFdLKSwgV0tCb29sZWFuR2V0VmFsdWUoc2hvdWxkT3BlbkV4dGVybmFsVVJMc1ZhbHVlV0spKTsK
KyAgICAgICAgYXV0byBsb2FkRGF0YURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2Fn
ZUJvZHkpOworICAgICAgICBhdXRvIHVybCA9IHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKGxvYWRE
YXRhRGljdGlvbmFyeSwgInVybCIpKTsKKyAgICAgICAgYXV0byB0YXJnZXQgPSB0b1dURlN0cmlu
ZyhzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJ0YXJnZXQiKSk7CisgICAgICAgIGF1
dG8gc2hvdWxkT3BlbkV4dGVybmFsVVJMcyA9IGJvb2xlYW5WYWx1ZShsb2FkRGF0YURpY3Rpb25h
cnksICJzaG91bGRPcGVuRXh0ZXJuYWxVUkxzIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkKHVybCwgdGFyZ2V0LCBzaG91
bGRPcGVuRXh0ZXJuYWxVUkxzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVMb2FkSFRNTFN0
cmluZyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbG9hZERhdGFE
aWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0K
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNvbnRlbnRLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb250ZW50IikpOwotICAgICAgICBXS1N0cmlu
Z1JlZiBjb250ZW50V0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIGNvbnRlbnRLZXkuZ2V0KCkpKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYmFzZVVSTEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImJhc2VVUkwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IGJhc2VVUkxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgYmFzZVVSTEtleS5nZXQoKSkpOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJsZVVSTEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVucmVhY2hhYmxlVVJMIikpOwotICAgICAgICBX
S1N0cmluZ1JlZiB1bnJlYWNoYWJsZVVSTFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCB1bnJlYWNoYWJsZVVS
TEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbG9hZERhdGFEaWN0aW9uYXJ5ID0gZGljdGlv
bmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBjb250ZW50V0sgPSBzdHJpbmdW
YWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJjb250ZW50Iik7CisgICAgICAgIGF1dG8gYmFzZVVS
TFdLID0gc3RyaW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAiYmFzZVVSTCIpOworICAgICAg
ICBhdXRvIHVucmVhY2hhYmxlVVJMV0sgPSBzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnks
ICJ1bnJlYWNoYWJsZVVSTCIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
d29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZEhUTUxTdHJpbmcodG9XVEZTdHJpbmcoY29udGVu
dFdLKSwgYmFzZVVSTFdLID8gdG9XVEZTdHJpbmcoYmFzZVVSTFdLKSA6IFN0cmluZygpLCB1bnJl
YWNoYWJsZVVSTFdLID8gdG9XVEZTdHJpbmcodW5yZWFjaGFibGVVUkxXSykgOiBTdHJpbmcoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MzYsMTU0ICs0ODIsMTE3IEBAIHZvaWQgVGVz
dEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5n
UmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUxvYWRpbmdTY3JpcHQiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2Fn
ZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5h
Z2VyKCkucXVldWVMb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5nKHNjcmlwdCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJRdWV1ZU5vbkxvYWRpbmdTY3JpcHQiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkp
OworICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7
CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCku
cXVldWVOb25Mb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5nKHNjcmlwdCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGlu
dWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFJlamVjdHNQcm90ZWN0aW9u
U3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0SGFuZGxlc0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMo
V0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZExvZ0NhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRMb2dDYW5BdXRoZW50
aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRMb2dDYW5BdXRoZW50
aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRMb2dEb3dubG9h
ZENhbGxiYWNrcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIHVzZXJuYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgV0tTdHJpbmdSZWYgdXNlcm5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7
CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBdXRoZW50aWNhdGlvblVz
ZXJuYW1lKHRvV1RGU3RyaW5nKHVzZXJuYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEF1
dGhlbnRpY2F0aW9uUGFzc3dvcmQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBw
YXNzd29yZCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAg
IFdLU3RyaW5nUmVmIHBhc3N3b3JkID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXV0aGVudGljYXRpb25QYXNzd29yZCh0
b1dURlN0cmluZyhwYXNzd29yZCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRCbG9ja0FsbFBs
dWdpbnMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHNob3VsZEJsb2NrID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRCbG9ja0FsbFBsdWdpbnMoV0tCb29sZWFuR2V0VmFsdWUo
c2hvdWxkQmxvY2spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJs
b2NrQWxsUGx1Z2lucyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0UGx1Z2luU3VwcG9ydGVkTW9kZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3Ry
aW5nUmVmIG1vZGUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAg
ICAgICBXS1N0cmluZ1JlZiBtb2RlID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0UGx1Z2luU3VwcG9ydGVkTW9kZSh0b1dU
RlN0cmluZyhtb2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZERlY2lkZU5hdmln
YXRpb25Qb2xpY3lBZnRlckRlbGF5IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBv
bGljeUFmdGVyRGVsYXkoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRl
ckRlbGF5KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRE
ZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lkZVJlc3Bv
bnNlUG9saWN5QWZ0ZXJEZWxheShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZCIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE5hdmln
YXRpb25HZXN0dXJlc0VuYWJsZWQoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQo
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRJ
Z25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldElnbm9yZXNWaWV3cG9ydFNjYWxl
TGltaXRzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkRG93bmxvYWRVbmRp
c3BsYXlhYmxlTUlNRVR5cGVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2
YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxl
TUlNRVR5cGVzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMo
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3Vs
ZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRB
bGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKFdLQm9vbGVhbkdldFZhbHVlKHZh
bHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRBbGxv
d0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBh
cnR5Q29va2llc09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUp
LCB0cnVlKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSks
IHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGly
ZFBhcnR5Q29va2llcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlD
b29raWVzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSwgZmFsc2UpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNv
b2tpZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSwgZmFsc2UpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJSdW5VSVByb2Nlc3NTY3JpcHQiKSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLQotICAgICAgICBVSVNjcmlwdElu
dm9jYXRpb25EYXRhKiBpbnZvY2F0aW9uRGF0YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRh
KCk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVl
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBpbnZvY2F0aW9uRGF0YSA9IG5ldyBVSVNjcmlw
dEludm9jYXRpb25EYXRhOwogICAgICAgICBpbnZvY2F0aW9uRGF0YS0+dGVzdEludm9jYXRpb24g
PSB0aGlzOwotICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJhY2tJRCA9ICh1bnNpZ25lZClX
S1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgY2FsbGJhY2tJREtleS5nZXQoKSkpKTsK
LSAgICAgICAgaW52b2NhdGlvbkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
c2NyaXB0S2V5LmdldCgpKSk7CisgICAgICAgIGludm9jYXRpb25EYXRhLT5jYWxsYmFja0lEID0g
dWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQ2FsbGJhY2tJRCIpOworICAgICAg
ICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0U3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiU2NyaXB0Iik7CiAgICAgICAgIG1fcGVuZGluZ1VJU2NyaXB0SW52b2NhdGlv
bkRhdGEgPSBpbnZvY2F0aW9uRGF0YTsKICAgICAgICAgV0tQYWdlQ2FsbEFmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+
cGFnZSgpLCBpbnZvY2F0aW9uRGF0YSwgcnVuVUlTaWRlU2NyaXB0QWZ0ZXJVcGRhdGVDYWxsYmFj
ayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJ1blVJUHJvY2Vzc1NjcmlwdEltbWVkaWF0ZWx5Iikp
IHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2NyaXB0IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2Fs
bGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxi
YWNrSUQiKSk7Ci0KLSAgICAgICAgVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSogaW52b2NhdGlvbkRh
dGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSgpOworICAgICAgICBhdXRvIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1
dG8gaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0aW9uRGF0YTsKICAgICAgICAg
aW52b2NhdGlvbkRhdGEtPnRlc3RJbnZvY2F0aW9uID0gdGhpczsKLSAgICAgICAgaW52b2NhdGlv
bkRhdGEtPmNhbGxiYWNrSUQgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGNhbGxiYWNrSURLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIGludm9jYXRpb25EYXRhLT5z
Y3JpcHRTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNjcmlwdEtleS5nZXQoKSkpOworICAgICAg
ICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJhY2tJRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkNhbGxiYWNrSUQiKTsKKyAgICAgICAgaW52b2NhdGlvbkRhdGEtPnNjcmlwdFN0
cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlNjcmlwdCIpOwogICAg
ICAgICBtX3BlbmRpbmdVSVNjcmlwdEludm9jYXRpb25EYXRhID0gaW52b2NhdGlvbkRhdGE7CiAg
ICAgICAgIHJ1blVJU2lkZVNjcmlwdEltbWVkaWF0ZWx5KG51bGxwdHIsIGludm9jYXRpb25EYXRh
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzkxLDExICs2MDAsOSBAQCB2b2lkIFRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNz
YWdlTmFtZQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJJbnN0YWxsQ3VzdG9tTWVudUFjdGlvbiIpKSB7CiAgICAgICAgIGF1dG8gbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG5hbWVLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJkaXNtaXNzZXNBdXRvbWF0
aWNhbGx5IikpOwotICAgICAgICBhdXRvIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkgPSBzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5LmdldCgpKSk7Ci0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbnN0YWxsQ3VzdG9tTWVudUFjdGlvbih0b1dURlN0
cmluZyhuYW1lLmdldCgpKSwgV0tCb29sZWFuR2V0VmFsdWUoZGlzbWlzc2VzQXV0b21hdGljYWxs
eSkpOworICAgICAgICBhdXRvIG5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJuYW1lIik7CisgICAgICAgIGF1dG8gZGlzbWlzc2VzQXV0b21hdGljYWxseSA9IGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5Iik7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbnN0YWxsQ3VzdG9tTWVudUFj
dGlvbih0b1dURlN0cmluZyhuYW1lKSwgZGlzbWlzc2VzQXV0b21hdGljYWxseSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTgwNSw3ICs2MTIsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9u
OjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZQogICAgICAgICBWZWN0b3I8U3RyaW5nPiBhY3Rpb25zOwogICAgICAgICBhY3Rpb25zLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBzaXplOyArK2luZGV4KQotICAgICAgICAgICAgYWN0aW9ucy5hcHBlbmQodG9X
VEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCht
ZXNzYWdlQm9keUFycmF5LCBpbmRleCkpKSk7CisgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZCh0
b1dURlN0cmluZyhzdHJpbmdWYWx1ZShXS0FycmF5R2V0SXRlbUF0SW5kZXgobWVzc2FnZUJvZHlB
cnJheSwgaW5kZXgpKSkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
QWxsb3dlZE1lbnVBY3Rpb25zKGFjdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
ODI4LDEwOCArNjM1LDYzIEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0
aWNzRGVidWdNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9
IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0RlYnVnTW9kZShXS0Jvb2xlYW5HZXRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc0RlYnVnTW9kZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShob3N0TmFtZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBz
dGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZh
bHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRp
Y19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0xhc3RTZWVuKGhvc3ROYW1lLCBXS0RvdWJsZUdldFZh
bHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlv
bmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFs
dWUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1ZSIpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0xhc3RTZWVuKGhvc3RO
YW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NNZXJnZVN0YXRp
c3RpYyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZURvbWFpbjFLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjEiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZURvbWFpbjJLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjIiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsYXN0U2VlbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkxhc3RTZWVuIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaGFkVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iKSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc0dyYW5kZmF0aGVyZWRLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc0dyYW5kZmF0aGVyZWQiKSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc1ByZXZhbGVudEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNWZXJ5UHJldmFsZW50S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNWZXJ5UHJldmFsZW50IikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZGF0YVJlY29yZHNSZW1vdmVkS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGF0YVJlY29yZHNSZW1vdmVkIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGltZXNBY2Nlc3NlZEZpcnN0UGFydHlJ
bnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRp
bWVzQWNjZXNzZWRGaXJzdFBhcnR5SW50ZXJhY3Rpb24iKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdS
ZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAg
ICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lRG9tYWluMSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJh
bWVEb21haW4xS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lRG9tYWlu
MiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVEb21haW4yS2V5LmdldCgpKSk7Ci0gICAgICAg
IFdLRG91YmxlUmVmIGxhc3RTZWVuID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBsYXN0U2VlbktleS5nZXQo
KSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaGFkVXNlckludGVyYWN0aW9uID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaGFkVXNlckludGVyYWN0aW9uS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91Ymxl
UmVmIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzR3Jh
bmRmYXRoZXJlZCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzR3JhbmRmYXRoZXJlZEtleS5nZXQoKSkp
OwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNQcmV2YWxlbnQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBp
c1ByZXZhbGVudEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNWZXJ5UHJldmFs
ZW50ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNWZXJ5UHJldmFsZW50S2V5LmdldCgpKSk7Ci0gICAg
ICAgIFdLVUludDY0UmVmIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IHN0YXRpY19jYXN0PFdLVUludDY0
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZGF0
YVJlY29yZHNSZW1vdmVkS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyhob3N0TmFtZSwgdG9wRnJhbWVE
b21haW4xLCB0b3BGcmFtZURvbWFpbjIsIFdLRG91YmxlR2V0VmFsdWUobGFzdFNlZW4pLCBXS0Jv
b2xlYW5HZXRWYWx1ZShoYWRVc2VySW50ZXJhY3Rpb24pLCBXS0RvdWJsZUdldFZhbHVlKG1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb24pLCBXS0Jvb2xlYW5HZXRWYWx1ZShpc0dyYW5kZmF0aGVyZWQp
LCBXS0Jvb2xlYW5HZXRWYWx1ZShpc1ByZXZhbGVudCksIFdLQm9vbGVhbkdldFZhbHVlKGlzVmVy
eVByZXZhbGVudCksIFdLVUludDY0R2V0VmFsdWUoZGF0YVJlY29yZHNSZW1vdmVkKSk7CisgICAg
ICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVEb21haW4xID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVEb21haW4xIik7CisgICAg
ICAgIGF1dG8gdG9wRnJhbWVEb21haW4yID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiVG9wRnJhbWVEb21haW4yIik7CisgICAgICAgIGF1dG8gbGFzdFNlZW4gPSBkb3VibGVW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJMYXN0U2VlbiIpOworICAgICAgICBhdXRvIGhh
ZFVzZXJJbnRlcmFjdGlvbiA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJI
YWRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIGlzR3JhbmRmYXRoZXJlZCA9IGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc0dyYW5kZmF0aGVyZWQiKTsKKyAgICAgICAgYXV0
byBpc1ByZXZhbGVudCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc1By
ZXZhbGVudCIpOworICAgICAgICBhdXRvIGlzVmVyeVByZXZhbGVudCA9IGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJJc1ZlcnlQcmV2YWxlbnQiKTsKKyAgICAgICAgYXV0byBk
YXRhUmVjb3Jkc1JlbW92ZWQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJE
YXRhUmVjb3Jkc1JlbW92ZWQiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyhob3N0TmFtZSwgdG9wRnJhbWVEb21haW4xLCB0
b3BGcmFtZURvbWFpbjIsIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZh
bGVudCwgZGF0YVJlY29yZHNSZW1vdmVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0
YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tE
aWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
aG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0
TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhhZFVzZXJJbnRlcmFj
dGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhZFVzZXJJ
bnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU2NoZWR1bGVkRm9yQWxsQnV0
Q29va2llRGF0YVJlbW92YWwiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBp
c1ByZXZhbGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklz
UHJldmFsZW50IikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaGFkVXNl
ckludGVyYWN0aW9uID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGFkVXNlckludGVyYWN0aW9uS2V5Lmdl
dCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURh
dGFSZW1vdmFsID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVE
YXRhUmVtb3ZhbEtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNQcmV2YWxlbnQg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1ByZXZhbGVudEtleS5nZXQoKSkpOwotCi0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyho
b3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUoaGFkVXNlckludGVyYWN0aW9uKSwgV0tCb29sZWFu
R2V0VmFsdWUoaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCksIFdLQm9vbGVh
bkdldFZhbHVlKGlzUHJldmFsZW50KSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFt
ZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAg
ICAgIGF1dG8gaGFkVXNlckludGVyYWN0aW9uID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkhhZFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCIpOworICAgICAg
ICBhdXRvIGlzUHJldmFsZW50ID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IklzUHJldmFsZW50Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyhob3N0TmFtZSwgaGFkVXNlckludGVyYWN0aW9uLCBp
c1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlw
ZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUs
IFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0
TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
VmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0K
LSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19j
YXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZh
bHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7
Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3RO
YW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUsIFdLQm9v
bGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9
IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAg
IGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUi
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NWZXJ5
UHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtOTQ0LDUxICs3MDYsMzUgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0
YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJz
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2
NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgaG91cnMgPSBzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNp
bmNlSG91cnMoV0tVSW50NjRHZXRWYWx1ZShob3VycykpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVN
b2RpZmllZFNpbmNlSG91cnModWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVl
KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hv
dWxkRG93bmdyYWRlUmVmZXJyZXIoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZShX
S0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0
VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1Jl
ZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0
cmljdENvb2tpZXMoaG9zdE5hbWUpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVzKHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9z
dENOQU1FRG9tYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rp
b25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmaXJz
dFBhcnR5VVJMU3RyaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRmlyc3RQYXJ0eVVSTCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNu
YW1lVVJMU3RyaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Q05BTUUiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBmaXJzdFBhcnR5VVJMU3Ry
aW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmaXJzdFBhcnR5VVJMU3RyaW5nS2V5LmdldCgpKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBjbmFt
ZVVSTFN0cmluZ0tleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IGZpcnN0UGFydHlVUkxTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJGaXJzdFBhcnR5VVJMIik7CisgICAgICAgIGF1dG8gY25hbWVVUkxTdHJpbmcgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJDTkFNRSIpOwogICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4o
Zmlyc3RQYXJ0eVVSTFN0cmluZywgY25hbWVVUkxTdHJpbmcpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbihjbmFtZVVSTFN0cmluZyk7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9t
YWluKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTEwMTIsOCArNzU4LDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldEFwcGxpY2F0aW9uTWFu
aWZlc3QiKSkgewogI2lmZGVmIF9fQkxPQ0tTX18KICAgICAgICAgV0tQYWdlR2V0QXBwbGljYXRp
b25NYW5pZmVzdF9iKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIF57Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEaWRHZXRBcHBsaWNh
dGlvbk1hbmlmZXN0IikpOwotICAgICAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiRGlk
R2V0QXBwbGljYXRpb25NYW5pZmVzdCIpOwogICAgICAgICB9KTsKICNlbHNlCiAgICAgICAgIC8v
IEZJWE1FOiBBZGQgQVBJIGZvciBsb2FkaW5nIHRoZSBtYW5pZmVzdCBvbiBub24tX19CTE9DS1Nf
XyBwb3J0cy4KQEAgLTEwMjMsMTYgKzc2OCwxMCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwot
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2
YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikp
OwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0
TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGhvc3ROYW1lLCBXS0Jv
b2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAg
ICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVl
Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSGFz
SGFkVXNlckludGVyYWN0aW9uKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTEwNDMsOCArNzgyLDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QXBwQm91
bmREb21haW5zIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0FycmF5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0FycmF5UmVmIG9yaWdpblVSTHMgPSBz
dGF0aWNfY2FzdDxXS0FycmF5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRBcHBCb3VuZERvbWFpbnMob3JpZ2luVVJMcyk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBcHBCb3VuZERvbWFpbnMoc3RhdGljX2Nh
c3Q8V0tBcnJheVJlZj4obWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMTA1NSw5NCArNzkzLDcwIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiB7CiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbml0aWFsaXphdGlv
biIpKSB7CiAgICAgICAgIGF1dG8gc2V0dGluZ3MgPSBjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9u
YXJ5KCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXN1bWVUZXN0aW5nS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzdW1lVGVzdGluZyIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiByZXN1bWVUZXN0aW5nVmFsdWUg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX3N0YXJ0ZWRUZXN0aW5nKSk7Ci0gICAgICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oc2V0dGluZ3MuZ2V0KCksIHJlc3VtZVRlc3RpbmdLZXkuZ2V0KCks
IHJlc3VtZVRlc3RpbmdWYWx1ZS5nZXQoKSk7CisgICAgICAgIHNldFZhbHVlKHNldHRpbmdzLCAi
UmVzdW1lVGVzdGluZyIsIG1fc3RhcnRlZFRlc3RpbmcpOwogICAgICAgICByZXR1cm4gc2V0dGlu
Z3M7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXREdW1wUGl4ZWxzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1fZHVtcFBpeGVs
cyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJv
ZHkpKTsKKyAgICAgICAgbV9kdW1wUGl4ZWxzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0RHVtcFBpeGVscyIpKQogICAgICAgICByZXR1
cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wUGl4ZWxzKSk7CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFdoYXRUb0R1bXAiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0
VHlwZUlEKCkpOwotICAgICAgICBtX3doYXRUb0R1bXAgPSBzdGF0aWNfY2FzdDxXaGF0VG9EdW1w
PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkp
KTsKKyAgICAgICAgbV93aGF0VG9EdW1wID0gc3RhdGljX2Nhc3Q8V2hhdFRvRHVtcD4odWludDY0
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0V2hhdFRv
RHVtcCIpKQogICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzdGF0aWNfY2Fz
dDx1aW50NjRfdD4obV93aGF0VG9EdW1wKSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRXYWl0VW50aWxEb25lIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
Ci0gICAgICAgIHNldFdhaXRVbnRpbERvbmUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oV0tC
b29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKSk7
CisgICAgICAgIHNldFdhaXRVbnRpbERvbmUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldFdhaXRVbnRpbERvbmUiKSkKICAgICAgICAgcmV0
dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fd2FpdFVudGlsRG9uZSkpOwogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXREdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1fZHVtcEZyYW1lTG9hZENhbGxi
YWNrcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KFdLQm9vbGVhbkdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIG1fZHVtcEZyYW1l
TG9hZENhbGxiYWNrcyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIkdldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKSkKICAgICAgICAgcmV0dXJu
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcykpOwogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRDYW5P
cGVuV2luZG93cyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBtX2Nhbk9wZW5XaW5kb3dzID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgbV9jYW5PcGVuV2luZG93cyA9IGJv
b2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
V2luZG93SXNLZXkiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzS2V5VmFs
dWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnNldFdpbmRvd0lzS2V5KFdL
Qm9vbGVhbkdldFZhbHVlKGlzS2V5VmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnNldFdpbmRvd0lzS2V5KGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFZpZXdTaXplIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJ3aWR0aCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhlaWdodEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImhlaWdodCIpKTsKLQotICAgICAgICBXS0RvdWJsZVJlZiB3aWR0aFdLID0gc3RhdGljX2Nhc3Q8
V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCB3aWR0aEtleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJsZVJlZiBoZWlnaHRXSyA9IHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgaGVpZ2h0S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnJlc2l6ZVRvKFdLRG91YmxlR2V0VmFsdWUo
d2lkdGhXSyksIFdLRG91YmxlR2V0VmFsdWUoaGVpZ2h0V0spKTsKKyAgICAgICAgYXV0byBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAg
ICBhdXRvIHdpZHRoID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAid2lkdGgi
KTsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJoZWlnaHQiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnJlc2l6ZVRvKHdpZHRoLCBoZWlnaHQpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKSkgewotICAgICAgICBib29sIGlzQWN0
aXZlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzR2VvbG9jYXRpb25Qcm92aWRlckFj
dGl2ZSgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGlzQWN0aXZlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNH
ZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzR2VvbG9jYXRpb25Qcm92aWRl
ckFjdGl2ZSgpKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldENhY2hlTW9kZWwiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBt
b2RlbCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VC
b2R5KSk7CisgICAgICAgIHVpbnQ2NF90IG1vZGVsID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHkp
OwogICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmVTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZv
clRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndlYnNpdGVEYXRhU3RvcmUoKSwg
bW9kZWwpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzV29ya1F1ZXVlRW1wdHkiKSkg
ewotICAgICAgICBib29sIGlzRW1wdHkgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29y
a1F1ZXVlTWFuYWdlcigpLmlzV29ya1F1ZXVlRW1wdHkoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0VtcHR5KSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNXb3JrUXVldWVFbXB0eSIpKQorICAgICAgICByZXR1
cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndv
cmtRdWV1ZU1hbmFnZXIoKS5pc1dvcmtRdWV1ZUVtcHR5KCkpKTsKIAotICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tC
b29sZWFuUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZp
Z2F0aW9uKCkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEaWRSZWNlaXZlU2VydmVyUmVk
aXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5kaWRSZWNlaXZlU2Vy
dmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oKSkpOwogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDbGVhckRpZFJlY2VpdmVTZXJ2
ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpKSB7CiAgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTmF2aWdhdGlvbigpOwpAQCAtMTE1MCw0MCArODY0LDM1IEBAIFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9t
SW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZWN1cmVFdmVudElucHV0SXNFbmFibGVkIikpIHsKLSNpZiBQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKElzU2VjdXJlRXZlbnRJ
bnB1dEVuYWJsZWQoKSkpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgcmV0dXJuIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKElzU2VjdXJlRXZlbnRJbnB1dEVuYWJsZWQoKSkpOwogI2Vsc2UK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShmYWxzZSkpOworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoZmFsc2UpKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0Q3VzdG9t
VXNlckFnZW50IikpIHsKLSAgICAgICAgV0tTdHJpbmdSZWYgdXNlckFnZW50ID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tQYWdlU2V0Q3VzdG9tVXNl
ckFnZW50KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IHVzZXJBZ2VudCk7CisgICAgICAgIFdLUGFnZVNldEN1c3RvbVVzZXJBZ2VudChUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFsbG93c0FueVNTTENl
cnRpZmljYXRlIikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlKFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkU3dhcFRvRXBoZW1l
cmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRp
b24oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9k
eSkpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZFN3YXBU
b0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRTd2FwVG9EZWZh
dWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9u
KFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkp
KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRTd2FwVG9E
ZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9h
cmQiKSkgewotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5pbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCgpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1VJbnQ2NFJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjb3VudCkpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkIikp
CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5pbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCgpKSk7CiAgICAgCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEZWxldGVBbGxJ
bmRleGVkRGF0YWJhc2VzIikpIHsKICAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlUmVtb3ZlQWxs
SW5kZXhlZERhdGFiYXNlcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud2Vic2l0ZURhdGFT
dG9yZSgpLCBudWxscHRyLCB7IH0pOwpAQCAtMTE5MSwxNyArOTAwLDEwIEBAIFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VG
cm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJBZGRNb2NrTWVkaWFEZXZpY2UiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBwZXJzaXN0ZW50SURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJQZXJzaXN0ZW50SUQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBsYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxh
YmVsIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdHlwZUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlR5cGUiKSk7Ci0KLSAgICAgICAgYXV0
byBwZXJzaXN0ZW50SUQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBlcnNpc3RlbnRJREtleS5nZXQoKSkp
OwotICAgICAgICBhdXRvIGxhYmVsID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBsYWJlbEtleS5nZXQoKSkp
OwotICAgICAgICBhdXRvIHR5cGUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHR5cGVLZXkuZ2V0KCkpKTsK
LQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gcGVyc2lzdGVudElEID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiUGVyc2lzdGVudElEIik7CisgICAgICAgIGF1dG8gbGFiZWwg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJMYWJlbCIpOworICAgICAgICBh
dXRvIHR5cGUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUeXBlIik7CiAg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5hZGRNb2NrTWVkaWFEZXZpY2UocGVy
c2lzdGVudElELCBsYWJlbCwgdHlwZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
QEAgLTEyMTIsOSArOTE0LDcgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlv
bjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlbW92ZU1v
Y2tNZWRpYURldmljZSIpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBlcnNpc3RlbnRJZCA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnJlbW92ZU1vY2tNZWRpYURldmljZShwZXJzaXN0ZW50SWQpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVtb3ZlTW9ja01lZGlhRGV2aWNl
KHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIApAQCAtMTIyNCwxNDIgKzkyNCw4NyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJ
bnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uIikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbihXS1VJbnQ2NEdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbih1aW50NjRWYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJFbmFibGVkIikpIHsKLSAgICAgICAgYm9vbCBpc01vY2tSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyRW5hYmxlZCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc01v
Y2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgpOwotICAgICAgICByZXR1cm4gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJs
ZWQpKTsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCIpKQorICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkKCkpKTsKICAgICAKLSAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkhhc0FwcEJv
dW5kU2Vzc2lvbiIpKSB7Ci0gICAgICAgIGJvb2wgaGFzQXBwQm91bmRTZXNzaW9uID0gVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc0FwcEJvdW5kU2Vzc2lvbigpOwotICAgICAgICByZXR1
cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzQXBwQm91bmRTZXNzaW9uKSk7Ci0gICAgfQor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSGFzQXBw
Qm91bmRTZXNzaW9uIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzQXBwQm91bmRTZXNzaW9uKCkpKTsKIAogI2lm
IFBMQVRGT1JNKE1BQykKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIkNvbm5lY3RNb2NrR2FtZXBhZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgdWlu
dDY0X3QgaW5kZXggPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPiht
ZXNzYWdlQm9keSkpOwotICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmNvbm5lY3RNb2NrR2Ft
ZXBhZChpbmRleCk7Ci0gICAgICAgIAorICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmNvbm5l
Y3RNb2NrR2FtZXBhZCh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIkRpc2Nvbm5lY3RNb2NrR2FtZXBhZCIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0KLSAgICAg
ICAgdWludDY0X3QgaW5kZXggPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0
UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmRpc2Nvbm5l
Y3RNb2NrR2FtZXBhZChpbmRleCk7Ci0KKyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpkaXNj
b25uZWN0TW9ja0dhbWVwYWQodWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2FtZXBhZERldGFpbHMiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsK
LQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBnYW1lcGFkSW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBnYW1lcGFkSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJHYW1lcGFkSUQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtYXBw
aW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWFwcGluZyIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4aXNDb3VudEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNDb3VudCIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1dHRvbkNvdW50S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uQ291bnQiKSk7Ci0KLSAgICAgICAgV0tVSW50
NjRSZWYgZ2FtZXBhZEluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSW5kZXhLZXkuZ2V0
KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgZ2FtZXBhZElEID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBn
YW1lcGFkSURLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgbWFwcGluZyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgbWFwcGluZ0tleS5nZXQoKSkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBheGlz
Q291bnQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGF4aXNDb3VudEtleS5nZXQoKSkpOwotICAgICAgICBX
S1VJbnQ2NFJlZiBidXR0b25Db3VudCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYnV0dG9uQ291bnRLZXku
Z2V0KCkpKTsKLQotICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkRGV0
YWlscyhXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRleCksIHRvV1RGU3RyaW5nKGdhbWVwYWRJ
RCksIHRvV1RGU3RyaW5nKG1hcHBpbmcpLCBXS1VJbnQ2NEdldFZhbHVlKGF4aXNDb3VudCksIFdL
VUludDY0R2V0VmFsdWUoYnV0dG9uQ291bnQpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGdh
bWVwYWRJbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkdhbWVwYWRJ
bmRleCIpOworICAgICAgICBhdXRvIGdhbWVwYWRJRCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkdhbWVwYWRJRCIpOworICAgICAgICBhdXRvIG1hcHBpbmcgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJNYXBwaW5nIik7CisgICAgICAgIGF1dG8gYXhp
c0NvdW50ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQXhpc0NvdW50Iik7
CisgICAgICAgIGF1dG8gYnV0dG9uQ291bnQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJCdXR0b25Db3VudCIpOworICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1v
Y2tHYW1lcGFkRGV0YWlscyhnYW1lcGFkSW5kZXgsIHRvV1RGU3RyaW5nKGdhbWVwYWRJRCksIHRv
V1RGU3RyaW5nKG1hcHBpbmcpLCBheGlzQ291bnQsIGJ1dHRvbkNvdW50KTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkp
OwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGF4aXNJbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkF4aXNJbmRleCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZh
bHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7
Ci0KLSAgICAgICAgV0tVSW50NjRSZWYgZ2FtZXBhZEluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBn
YW1lcGFkSW5kZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgYXhpc0luZGV4ID0g
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBheGlzSW5kZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVS
ZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAg
V2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZShXS1VJbnQ2NEdldFZh
bHVlKGdhbWVwYWRJbmRleCksIFdLVUludDY0R2V0VmFsdWUoYXhpc0luZGV4KSwgV0tEb3VibGVH
ZXRWYWx1ZSh2YWx1ZSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBnYW1lcGFkSW5kZXgg
PSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJHYW1lcGFkSW5kZXgiKTsKKyAg
ICAgICAgYXV0byBheGlzSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJBeGlzSW5kZXgiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0
TW9ja0dhbWVwYWRBeGlzVmFsdWUoZ2FtZXBhZEluZGV4LCBheGlzSW5kZXgsIHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZ2FtZXBhZEluZGV4S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uSW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25JbmRleCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tVSW50NjRSZWYgZ2FtZXBhZEluZGV4ID0gc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBnYW1lcGFkSW5kZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tVSW50NjRS
ZWYgYnV0dG9uSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbkluZGV4S2V5LmdldCgpKSk7
Ci0gICAgICAgIFdLRG91YmxlUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5n
ZXQoKSkpOwotCi0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRCdXR0
b25WYWx1ZShXS1VJbnQ2NEdldFZhbHVlKGdhbWVwYWRJbmRleCksIFdLVUludDY0R2V0VmFsdWUo
YnV0dG9uSW5kZXgpLCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7Ci0KKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIGdhbWVwYWRJbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkdhbWVwYWRJbmRleCIpOworICAgICAgICBhdXRvIGJ1dHRvbkluZGV4ID0gdWludDY0VmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQnV0dG9uSW5kZXgiKTsKKyAgICAgICAgYXV0byB2
YWx1ZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAg
ICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZShnYW1lcGFk
SW5kZXgsIGJ1dHRvbkluZGV4LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRG
b3JPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgICAgIFdL
U3RyaW5nUmVmIG9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBvcmlnaW5LZXkuZ2V0KCkpKTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAg
ICAgICBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGFyZW50
T3JpZ2luS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gb3Jp
Z2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJvcmlnaW4iKTsKKyAg
ICAgICAgYXV0byBwYXJlbnRPcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgInBhcmVudE9yaWdpbiIpOwogICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS51c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3Jp
Z2luKG9yaWdpbldLLCBwYXJlbnRPcmlnaW5XSyk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNvdW50KSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiSXNEb2luZ01lZGlhQ2FwdHVyZSIpKSB7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzRG9pbmdNZWRpYUNhcHR1cmUoKSkpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjb3Vu
dCkpOwogICAgIH0KKworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiSXNEb2luZ01lZGlhQ2FwdHVyZSIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzRG9pbmdNZWRpYUNh
cHR1cmUoKSkpOwogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiQ2xlYXJTdGF0aXN0aWNzRGF0YUZvckRvbWFpbiIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIGRvbWFpbiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFyU3Rh
dGlzdGljc0RhdGFGb3JEb21haW4oZG9tYWluKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4oc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEb2VzU3RhdGlzdGljc0RvbWFp
bklERXhpc3RJbkRhdGFiYXNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFy
eVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRvbWFpbklE
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRG9tYWluSUQiKSk7
Ci0gICAgICAgIFdLVUludDY0UmVmIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkb21haW5J
REtleS5nZXQoKSkpOwotICAgICAgICBib29sIGRvbWFpbklERXhpc3RzID0gVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmRvZXNTdGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UoV0tV
SW50NjRHZXRWYWx1ZShkb21haW5JRCkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRvbWFpbklERXhpc3RzKSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBkb21haW5JRCA9IHVp
bnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkRvbWFpbklEIik7CisgICAgICAgIGJv
b2wgZG9tYWluSURFeGlzdHMgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZG9lc1N0YXRp
c3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZShkb21haW5JRCk7CisgICAgICAgIHJldHVybiBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkb21haW5JREV4aXN0cykpOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGlj
c0VuYWJsZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRW5hYmxlZChXS0Jvb2xlYW5HZXRWYWx1ZSh2
YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c0VuYWJsZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiSXNTdGF0aXN0aWNzRXBoZW1lcmFsIikpIHsKLSAgICAgICAgYm9vbCBpc0VwaGVt
ZXJhbCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NFcGhlbWVyYWwo
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShpc0VwaGVtZXJhbCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmlzU3RhdGlzdGljc0VwaGVtZXJhbCgpKSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiZHVtcFJlc291cmNlTG9hZFN0
YXRpc3RpY3MiKSkgewpAQCAtMTM2OCwyMjQgKzEwMTMsMTI4IEBAIFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5q
ZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0K
LSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBib29sIGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShpc1ByZXZhbGVudCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBib29s
IGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHJldHVy
biBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNz
VmVyeVByZXZhbGVudFJlc291cmNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdL
U3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5pc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlz
UHJldmFsZW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGJvb2wgaXNQcmV2
YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzVmVyeVByZXZh
bGVudFJlc291cmNlKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpOwogICAgIH0KICAgICAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGlj
c1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAg
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1YnJlc291cmNlSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN1YnJlc291cmNlSG9zdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRvcEZyYW1lSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdCIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5n
UmVmIHN1YnJlc291cmNlSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3VicmVzb3VyY2VIb3N0S2V5
LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lSG9zdCA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgdG9wRnJhbWVIb3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAg
ICAgIGF1dG8gc3VicmVzb3VyY2VIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiU3VicmVzb3VyY2VIb3N0Iik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVIb3N0ID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVIb3N0Iik7CiAgICAgICAg
IGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyID0gVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoc3VicmVz
b3VyY2VIb3N0LCB0b3BGcmFtZUhvc3QpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3VicmVzb3Vy
Y2VVbmRlcikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKSk7CiAgICAg
fQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkp
OwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViRnJhbWVIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViRnJhbWVIb3N0IikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpOwotICAgICAgICAKLSAgICAgICAgV0tT
dHJpbmdSZWYgc3ViRnJhbWVIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJGcmFtZUhvc3RLZXku
Z2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVIb3N0ID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCB0b3BGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8g
c3ViRnJhbWVIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU3ViRnJh
bWVIb3N0Iik7CisgICAgICAgIGF1dG8gdG9wRnJhbWVIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVIb3N0Iik7CiAgICAgICAgIGJvb2wgaXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlz
dGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoc3ViRnJhbWVIb3N0LCB0b3BGcmFtZUhvc3Qp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcikpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVk
aXJlY3RpbmdUbyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdFJl
ZGlyZWN0ZWRGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdFJlZGlyZWN0ZWRGcm9tIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
aG9zdFJlZGlyZWN0ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhvc3RSZWRpcmVjdGVkVG8iKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBo
b3N0UmVkaXJlY3RlZEZyb20gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3RSZWRpcmVjdGVkRnJvbUtl
eS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0UmVkaXJlY3RlZFRvID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBob3N0UmVkaXJlY3RlZFRvS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAg
ICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gaG9zdFJlZGlyZWN0ZWRGcm9tID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdFJlZGlyZWN0ZWRGcm9tIik7CisgICAgICAgIGF1dG8gaG9z
dFJlZGlyZWN0ZWRUbyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3RS
ZWRpcmVjdGVkVG8iKTsKICAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8g
PSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVk
aXJlY3RpbmdUbyhob3N0UmVkaXJlY3RlZEZyb20sIGhvc3RSZWRpcmVjdGVkVG8pOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbykpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNSZWRp
cmVjdGluZ1RvKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlw
ZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBib29sIGhhc0hhZFVzZXJJ
bnRlcmFjdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NIYXNI
YWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0hhZFVzZXJJbnRlcmFjdGlv
bikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBib29sIGhhc0hhZFVzZXJJbnRl
cmFjdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NIYXNIYWRV
c2VySW50ZXJhY3Rpb24oc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0hhZFVzZXJJbnRlcmFjdGlvbikpOwogICAgIH0K
ICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IklzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBhdXRvIHN1Ykhv
c3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJIb3N0Iikp
OwotICAgICAgICBhdXRvIHRvcEhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUb3BIb3N0IikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgc3Vi
SG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViSG9zdEtleS5nZXQoKSkpOwotICAgICAgICBXS1N0
cmluZ1JlZiB0b3BIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BIb3N0S2V5LmdldCgpKSk7Ci0K
KyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVz
c2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1Ykhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJTdWJIb3N0Iik7CisgICAgICAgIGF1dG8gdG9wSG9zdCA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEhvc3QiKTsKICAgICAgICAgYm9vbCBzdGF0
aXN0aWNJbkRhdGFiYXNlT25jZSA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRp
c3RpY3NPbmx5SW5EYXRhYmFzZU9uY2Uoc3ViSG9zdCwgdG9wSG9zdCk7CiAgICAgICAgIHJldHVy
biBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzdGF0aXN0aWNJbkRhdGFiYXNlT25jZSkpOwogICAg
IH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIp
KTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKGhvc3RO
YW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8g
aG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIp
OworICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzR3JhbmRmYXRoZXJlZChob3N0TmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAg
ICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQgPSBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChob3N0TmFt
ZSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhlcmVkKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVkID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmlzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkpOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0VXNlSVRQRGF0YWJhc2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0Jvb2xlYW5S
ZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVzZUlUUERhdGFiYXNlKFdLQm9vbGVh
bkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRVc2VJVFBEYXRhYmFzZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lSG9zdE5hbWVLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3ROYW1lIikpOwot
ICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lSG9zdE5h
bWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lSG9zdE5hbWVLZXkuZ2V0KCkpKTsKLQorICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHRvcEZyYW1lSG9zdE5hbWUgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZUhvc3ROYW1lIik7CiAg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luKGhvc3ROYW1lLCB0b3BGcmFtZUhvc3ROYW1lKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5h
bWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lSG9zdE5hbWVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3ROYW1l
IikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1l
SG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lSG9zdE5hbWVLZXkuZ2V0KCkpKTsK
LSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFy
eVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdG9wRnJh
bWVIb3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1l
SG9zdE5hbWUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oaG9zdE5hbWUsIHRvcEZyYW1lSG9z
dE5hbWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAg
ICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5h
bWVSZWRpcmVjdGVkVG9LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVm
IGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAg
ICBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9z
dE5hbWVSZWRpcmVjdGVkVG9LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhv
c3ROYW1lIik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVSZWRpcmVjdGVkVG8gPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpOwogICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RUbyhob3N0TmFtZSwgaG9zdE5hbWVSZWRpcmVjdGVkVG8pOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
RnJvbSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0
ZWRGcm9tIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhv
c3ROYW1lUmVkaXJlY3RlZEZyb20gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lUmVkaXJlY3Rl
ZEZyb21LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0
TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7Cisg
ICAgICAgIGF1dG8gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKTsKICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbShob3N0TmFtZSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8i
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlv
bmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZVJlZGlyZWN0ZWRUb0tleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZFRvIikp
OwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVk
aXJlY3RlZFRvID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZVJlZGlyZWN0ZWRUb0tleS5nZXQo
KSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBo
b3N0TmFtZVJlZGlyZWN0ZWRUbyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
Ikhvc3ROYW1lUmVkaXJlY3RlZFRvIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGhvc3ROYW1lLCBob3N0
TmFtZVJlZGlyZWN0ZWRUbyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0
YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAg
ICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0
YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIikpOwotICAgICAgICAKLSAgICAg
ICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5Lmdl
dCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20gPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGhvc3ROYW1lUmVkaXJlY3RlZEZyb21LZXkuZ2V0KCkpKTsKLSAgICAgICAg
CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1l
c3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVSZWRpcmVj
dGVkRnJvbSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lUmVk
aXJlY3RlZEZyb20iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0
YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShob3N0TmFtZSwgaG9zdE5hbWVSZWRp
cmVjdGVkRnJvbSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3Rp
Y3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGF1dG8gZnJv
bUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJGcm9tSG9z
dCIpKTsKLSAgICAgICAgYXV0byB0b0hvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJUb0hvc3QiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgZnJvbUhvc3Qg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGZyb21Ib3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIHRvSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9Ib3N0S2V5LmdldCgpKSk7Ci0gICAgICAg
IAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZnJvbUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJGcm9tSG9zdCIpOworICAgICAgICBhdXRvIHRvSG9zdCA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvSG9zdCIpOwogICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb24oZnJvbUhvc3QsIHRvSG9zdCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24iKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3Rp
Y3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24oZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIApAQCAtMTYwMCw5NyArMTE0OSw2OSBAQCBXS1JldGFp
blB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNz
YWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1NldElzUnVubmluZ1Rlc3QiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzSXNSdW5uaW5nVGVzdChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0lzUnVubmluZ1Rlc3QoYm9v
bGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
ICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbChXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNv
bmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoV0tEb3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tE
b3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoV0tEb3VibGVHZXRWYWx1ZShzZWNv
bmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
R3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1heFN0YXRpc3RpY3NFbnRyaWVzIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tVSW50NjRSZWYgZW50cmllcyA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMoV0tVSW50NjRHZXRWYWx1ZShlbnRyaWVzKSk7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWF4U3Rh
dGlzdGljc0VudHJpZXModWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0UHJ1bmVFbnRyaWVzRG93blRvIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tVSW50NjRSZWYgZW50cmllcyA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzUHJ1bmVFbnRyaWVzRG93blRvKFdLVUludDY0R2V0VmFsdWUoZW50cmllcykpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rv
d25Ubyh1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdCIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAg
ICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0
YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5j
bHVkZUh0dHBPbmx5Q29va2llcyIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhv
c3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBX
S0Jvb2xlYW5SZWYgaW5jbHVkZUh0dHBPbmx5Q29va2llcyA9IHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZh
bHVlS2V5LmdldCgpKSk7Ci0gICAgICAgIAotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0KGhvc3ROYW1lLCBXS0Jvb2xlYW5H
ZXRWYWx1ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1l
Iik7CisgICAgICAgIGF1dG8gaW5jbHVkZUh0dHBPbmx5Q29va2llcyA9IGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJJbmNsdWRlSHR0cE9ubHlDb29raWVzIik7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhv
c3QoaG9zdE5hbWUsIGluY2x1ZGVIdHRwT25seUNvb2tpZXMpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIklzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keSk7CiAgICAgICAgIGJvb2wgaGFzTG9jYWxTdG9yYWdlID0gVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZShob3N0TmFtZSk7CiAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzTG9jYWxTdG9y
YWdlKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzQ2FjaGVNYXhB
Z2VDYXAiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
RG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGlj
X2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcChXS0RvdWJsZUdldFZhbHVl
KHNlY29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NDYWNoZU1heEFnZUNhcChkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24iKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlE
KCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBib29sIGhhc0lzb2xhdGVkU2Vzc2lvbiA9
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9u
KGhvc3ROYW1lKTsKICAgICAgICAgYXV0byByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShoYXNJc29sYXRlZFNlc3Npb24pKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFy
RE9NQ2FjaGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW4gPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCisgICAgICAgIGF1dG8gb3JpZ2lu
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuY2xlYXJET01DYWNoZShvcmlnaW4pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CkBAIC0xNzAxLDM1ICsxMjIyLDI0IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVz
dEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJIYXNET01DYWNoZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbiA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KKyAgICAgICAgYXV0byBv
cmlnaW4gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGJvb2wgaGFzRE9NQ2Fj
aGUgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzRE9NQ2FjaGUob3JpZ2luKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShoYXNET01DYWNoZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzRE9NQ2FjaGUpKTsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRPTUNhY2hlU2l6
ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJp
bmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbiA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KKyAgICAgICAgYXV0byBvcmlnaW4gPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGF1dG8gZG9tQ2FjaGVTaXplID0gVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmRvbUNhY2hlU2l6ZShvcmlnaW4pOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZG9tQ2Fj
aGVTaXplKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKGRvbUNhY2hlU2l6ZSkpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWxsb3dTdG9yYWdlUXVvdGFJ
bmNyZWFzZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBhdXRvIGNhbkluY3JlYXNlID0gV0tCb29s
ZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNy
ZWFzZShjYW5JbmNyZWFzZSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkluamVjdFVzZXJTY3JpcHQiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkp
OwotICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
bWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbmpl
Y3RVc2VyU2NyaXB0KHNjcmlwdCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5pbmplY3RVc2VyU2NyaXB0KHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTczOSwxNSArMTI0OSwxMiBAQCBXS1JldGFpblB0
cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdl
RnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dCIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoV0tEb3VibGVHZXRWYWx1ZShzZWNv
bmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTZXJ2aWNlV29y
a2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgYXV0byB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNz
YWdlQm9keSkpOworICAgICAgICBhdXRvIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mg
PSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBXS0NvbnRleHRTZXRVc2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250
ZXh0KCksIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CkBAIC0xNzY1LDYwICsxMjcyLDM1IEBAIFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5q
ZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJBZGRUZXN0S2V5VG9LZXljaGFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgdGVzdEtleURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gcHJpdmF0ZUtleUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlByaXZhdGVLZXkiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHByaXZhdGVLZXlXSyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3RLZXlEaWN0
aW9uYXJ5LCBwcml2YXRlS2V5S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGF0dHJMYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkF0dHJMYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXR0ckxhYmVsV0sgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0S2V5
RGljdGlvbmFyeSwgYXR0ckxhYmVsS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGFwcGxpY2F0aW9uVGFnS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25UYWciKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGFw
cGxpY2F0aW9uVGFnV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleSh0ZXN0S2V5RGljdGlvbmFyeSwgYXBwbGljYXRpb25UYWdLZXkuZ2V0KCkpKTsK
LQorICAgICAgICBhdXRvIHRlc3RLZXlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBwcml2YXRlS2V5V0sgPSBzdHJpbmdWYWx1ZSh0ZXN0S2V5
RGljdGlvbmFyeSwgIlByaXZhdGVLZXkiKTsKKyAgICAgICAgYXV0byBhdHRyTGFiZWxXSyA9IHN0
cmluZ1ZhbHVlKHRlc3RLZXlEaWN0aW9uYXJ5LCAiQXR0ckxhYmVsIik7CisgICAgICAgIGF1dG8g
YXBwbGljYXRpb25UYWdXSyA9IHN0cmluZ1ZhbHVlKHRlc3RLZXlEaWN0aW9uYXJ5LCAiQXBwbGlj
YXRpb25UYWciKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmFkZFRlc3RL
ZXlUb0tleWNoYWluKHRvV1RGU3RyaW5nKHByaXZhdGVLZXlXSyksIHRvV1RGU3RyaW5nKGF0dHJM
YWJlbFdLKSwgdG9XVEZTdHJpbmcoYXBwbGljYXRpb25UYWdXSykpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIkNsZWFuVXBLZXljaGFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBX
S0RpY3Rpb25hcnlSZWYgdGVzdERpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlS
ZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXR0
ckxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxh
YmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhdHRyTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5LCBhdHRy
TGFiZWxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXBw
bGljYXRpb25MYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkFwcGxpY2F0aW9uTGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFi
ZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KHRlc3REaWN0aW9uYXJ5LCBhcHBsaWNhdGlvbkxhYmVsS2V5LmdldCgpKSk7Ci0KKyAgICAgICAg
YXV0byB0ZXN0RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAg
ICAgIGF1dG8gYXR0ckxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0RGljdGlvbmFyeSwgIkF0dHJM
YWJlbCIpOworICAgICAgICBhdXRvIGFwcGxpY2F0aW9uTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRl
c3REaWN0aW9uYXJ5LCAiQXBwbGljYXRpb25MYWJlbCIpOwogICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuY2xlYW5VcEtleWNoYWluKHRvV1RGU3RyaW5nKGF0dHJMYWJlbFdLKSwg
YXBwbGljYXRpb25MYWJlbFdLID8gdG9XVEZTdHJpbmcoYXBwbGljYXRpb25MYWJlbFdLKSA6IFN0
cmluZygpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJLZXlFeGlzdHNJbktleWNoYWlu
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiB0ZXN0RGljdGlvbmFy
eSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdHRyTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IGF0dHJMYWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkodGVzdERpY3Rpb25hcnksIGF0dHJMYWJlbEtleS5nZXQoKSkpOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhcHBsaWNhdGlvbkxhYmVsS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25MYWJlbCIpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgYXBwbGljYXRpb25MYWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERpY3Rpb25hcnksIGFwcGxpY2F0aW9u
TGFiZWxLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIHRlc3REaWN0aW9uYXJ5ID0gZGljdGlv
bmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBhdHRyTGFiZWxXSyA9IHN0cmlu
Z1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXR0ckxhYmVsIik7CisgICAgICAgIGF1dG8gYXBwbGlj
YXRpb25MYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERpY3Rpb25hcnksICJBcHBsaWNhdGlvbkxh
YmVsIik7CiAgICAgICAgIGJvb2wga2V5RXhpc3RzSW5LZXljaGFpbiA9IFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5rZXlFeGlzdHNJbktleWNoYWluKHRvV1RGU3RyaW5nKGF0dHJMYWJlbFdL
KSwgdG9XVEZTdHJpbmcoYXBwbGljYXRpb25MYWJlbFdLKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoa2V5RXhpc3RzSW5L
ZXljaGFpbikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoa2V5RXhpc3RzSW5LZXljaGFpbikpOwogICAgIH0KIAotICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2VydmVyVHJ1c3RF
dmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50IikpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQoKSkpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2Fs
bHNDb3VudCIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0Nv
dW50KCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseSIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkoV0tCb29sZWFu
R2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkoYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTg0
OCwxNiArMTMzMCwxMyBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpk
aWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRDbGlja0F0
dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9u
T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNp
b25VUkxGb3JUZXN0aW5nIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1VSTEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVUkxSZWYgdXJsID0gc3RhdGlj
X2Nhc3Q8V0tVUkxSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKHVy
bCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmli
dXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhzdGF0aWNfY2FzdDxXS1VSTFJlZj4obWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0xOTAyLDE3ICsx
MzgxLDEwIEBAIHZvaWQgVGVzdEludm9jYXRpb246OnJ1blVJU2lkZVNjcmlwdChXS1N0cmluZ1Jl
ZiBzY3JpcHQsIHVuc2lnbmVkIHNjcmlwdENhbGxiYWNrCiAKIHZvaWQgVGVzdEludm9jYXRpb246
OnVpU2NyaXB0RGlkQ29tcGxldGUoY29uc3QgU3RyaW5nJiByZXN1bHQsIHVuc2lnbmVkIHNjcmlw
dENhbGxiYWNrSUQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbFVJU2lkZVNjcmlw
dENhbGxiYWNrIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc3VsdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlJlc3VsdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkNhbGxiYWNrSUQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGNhbGxiYWNrSURW
YWx1ZSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoc2NyaXB0Q2FsbGJhY2tJRCkpOwotCi0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcmVzdWx0S2V5LmdldCgpLCB0
b1dLKHJlc3VsdCkuZ2V0KCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHku
Z2V0KCksIGNhbGxiYWNrSURLZXkuZ2V0KCksIGNhbGxiYWNrSURWYWx1ZS5nZXQoKSk7Ci0KLSAg
ICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKG1lc3NhZ2VCb2R5LCAiUmVzdWx0IiwgcmVz
dWx0KTsKKyAgICBzZXRWYWx1ZShtZXNzYWdlQm9keSwgIkNhbGxiYWNrSUQiLCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oc2NyaXB0Q2FsbGJhY2tJRCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2Fs
bFVJU2lkZVNjcmlwdENhbGxiYWNrIiwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpvdXRwdXRUZXh0KGNvbnN0IFdURjo6U3RyaW5nJiB0ZXh0KQpAQCAtMTky
MiwxNzQgKzEzOTQsMTQzIEBAIHZvaWQgVGVzdEludm9jYXRpb246Om91dHB1dFRleHQoY29uc3Qg
V1RGOjpTdHJpbmcmIHRleHQpCiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZEJlZ2luU3dpcGUo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRCZWdpblN3aXBlQ2FsbGJhY2si
KSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAw
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRCZWdpblN3aXBlQ2FsbGJhY2siKTsKIH0K
IAogdm9pZCBUZXN0SW52b2NhdGlvbjo6d2lsbEVuZFN3aXBlKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsV2lsbEVuZFN3aXBlQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIkNhbGxXaWxsRW5kU3dpcGVDYWxsYmFjayIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9u
OjpkaWRFbmRTd2lwZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZEVuZFN3
aXBlQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRFbmRTd2lwZUNhbGxi
YWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlbW92ZVN3aXBlU25hcHNob3Qo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRSZW1vdmVTd2lwZVNuYXBzaG90
Q2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZW1vdmVTd2lwZVNuYXBz
aG90Q2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6bm90aWZ5RG93bmxvYWRE
b25lKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOb3RpZnlEb3dubG9hZERvbmUiKSk7
Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIk5vdGlmeURvd25sb2FkRG9uZSIpOwogfQogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9y
ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZENsZWFyU3RhdGlzdGljc0lu
TWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlk
Q2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKTsKIH0KIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3Zh
bCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZENsZWFyU3RhdGlzdGljc1Ro
cm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVj
dGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRD
bGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIik7CiB9CiAKIHZvaWQgVGVz
dEludm9jYXRpb246OmRpZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiKSk7Ci0g
ICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlciIpOwog
fQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29r
aWVzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0U2hvdWxkQmxvY2tU
aGlyZFBhcnR5Q29va2llcyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNl
dFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUoKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFRv
U2FtZVNpdGVTdHJpY3RDb29raWVzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxs
RGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIkNhbGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIpOwogfQogCiB2b2lkIFRlc3RJ
bnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIpKTsK
LSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVE
b21haW4iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0VGhpcmRQYXJ0eUNOQU1F
RG9tYWluKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0VGhpcmRQYXJ0
eUNOQU1FRG9tYWluIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0VGhp
cmRQYXJ0eUNOQU1FRG9tYWluIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlc2V0
U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDYWxsRGlkUmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUiKSk7Ci0gICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxEaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0ZSIpOwogfQog
CiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0KCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdCIpKTsK
LSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEJsb2NrQ29va2llc0Zvckhvc3QiKTsKIH0K
IAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSgpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKSk7
Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlIik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0UHJldmFsZW50UmVz
b3VyY2VGb3JEZWJ1Z01vZGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpk
aWRTZXRMYXN0U2VlbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldExh
c3RTZWVuIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0TGFzdFNlZW4iKTsKIH0K
IAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkTWVyZ2VTdGF0aXN0aWMoKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNhbGxEaWRNZXJnZVN0YXRpc3RpYyIpKTsKLSAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiQ2FsbERpZE1lcmdlU3RhdGlzdGljIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246
OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNh
bGxEaWRTZXRFeHBpcmVkU3RhdGlzdGljIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlk
U2V0RXhwaXJlZFN0YXRpc3RpYyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRQ
cmV2YWxlbnRSZXNvdXJjZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNl
dFByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1
bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0UHJl
dmFsZW50UmVzb3VyY2UiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0VmVyeVBy
ZXZhbGVudFJlc291cmNlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0
VmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3Rl
ZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0
VmVyeVByZXZhbGVudFJlc291cmNlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNl
dEhhc0hhZFVzZXJJbnRlcmFjdGlvbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRv
SW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2Fs
bERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9u
OjpkaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoVmVjdG9yPFN0cmluZz4mJiBkb21h
aW5zKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRSZWNlaXZlQWxsU3RvcmFn
ZUFjY2Vzc0VudHJpZXMiKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBh
dXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICBm
b3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpCi0gICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1l
c3NhZ2VCb2R5LmdldCgpLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGRv
bWFpbi51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotICAgIAotICAgIFdLUGFnZVBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgICAg
ICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgdG9XSyhkb21haW4pLmdldCgp
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMoVmVjdG9yPFN0cmluZz4mJiBkb21haW5z
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRSZWNlaXZlTG9hZGVkU3VicmVz
b3VyY2VEb21haW5zIikpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0
byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgZm9y
IChhdXRvJiBkb21haW4gOiBkb21haW5zKQotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNz
YWdlQm9keS5nZXQoKSwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkb21h
aW4udXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKLQotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgICAgICBXS0Fy
cmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgdG9XSyhkb21haW4pLmdldCgpKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5z
IiwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZW1v
dmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNh
bGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQ
b3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiQ2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrIik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEFwcEJvdW5kRG9tYWlucygpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEFwcEJvdW5kRG9tYWlucyIpKTsKLSAgICBX
S1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEFwcEJvdW5kRG9tYWlucyIpOwogfQogCiB2
b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpCkBAIC0yMTA0
LDggKzE1NDUsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wQWRDbGlja0F0dHJpYnV0aW9u
KCkKIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6cGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24oKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBlcmZvcm1DdXN0b21NZW51QWN0aW9uIikpOwotICAg
IFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJQZXJmb3JtQ3VzdG9tTWVudUFjdGlvbiIpOwogfQogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5lZWRlZCgp
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVz
dFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGExNWZjMGEwZTlhZmFlMzQx
Y2NjZDA2MDM4M2VkMzAxYTcyNDFiNmIuLjYxNzE4YWM2NTU4ODE3NzhlODNjOTdmYmUxNzgyNzhj
ODcwZTZiOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1
bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNTUsNiAr
MzU1LDggQEAKIAkJODQxQ0MwMEQxODExODVCRjAwNDJFOUI2IC8qIE9wdGlvbnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg0MUNDMDBFMTgxMTg1QkYwMDQyRTlCNiAvKiBPcHRpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOERENzZGQTEwNDg2QUE3NjAwRDk2QjVFIC8qIFdlYktpdFRlc3RS
dW5uZXIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJj
b21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdl
YktpdFRlc3RSdW5uZXI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTkz
MzhEMUJBMjUwQTc5RUIwMEU4MjdGNiAvKiBKU0Jhc2ljcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0Jh
c2ljcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzM4RDFCRTI1MEJEOUREMDBFODI3RjYgLyog
RGljdGlvbmFyeUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0aW9uYXJ5RnVuY3Rpb25z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNzY0MTc2MjEwRDczNjAwMEEzREFB
RSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzcyMTBENzM2MTAwQTNEQUFFIC8qIFdlYktpdFRlc3RSdW5u
ZXJXaW5kb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0VGVzdFJ1
bm5lcldpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0M3ODgxRjI1MEM2
OUU0MDBDMEFBMjQgLyogUmVmdGVzdEZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBSZWZ0ZXN0RnVuY3Rpb25zLmNwcDsgcGF0aCA9IC4uL1Rlc3RSdW5u
ZXJTaGFyZWQvUmVmdGVzdEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04OTIsNiArODk0LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJMzc4RDQ0MjIxMzM0NkQwMDAwNkE3NzdCIC8qIGNvbmZpZy5oICovLAorCQkJCTkzMzhE
MUJFMjUwQkQ5REQwMEU4MjdGNiAvKiBEaWN0aW9uYXJ5RnVuY3Rpb25zLmggKi8sCiAJCQkJQkM5
OUE0ODQxMjA4OTAxQTAwN0U5RjA4IC8qIFN0cmluZ0Z1bmN0aW9ucy5oICovLAogCQkJCTlCMzZB
MjcwMjA5NDUzQTAwMDNFMDY1MSAvKiBXaGF0VG9EdW1wLmggKi8sCiAJCQkpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcAppbmRleCA0
NTg2NzdmNTA5YjExNzQzOTNhZTRjMzhjYTA5NDU3YzhlODBmODRjLi5jZDVmYzY2MjE1YTRiMDM3
OTY4MmM3MmIyZWMxZDFmMGI5ODA3M2IyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcApAQCAtMTI2LDggKzEyNiw4IEBAIHZvaWQg
V2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6OmNsb3NlV2ViTm90aWZpY2F0aW9uKFdLTm90aWZpY2F0
aW9uUmVmIG5vdGlmaWNhdGlvCiAKICAgICByZW1vdmVHbG9iYWxJREZyb21JRE1hcChtX2xvY2Fs
VG9HbG9iYWxOb3RpZmljYXRpb25JRE1hcCwgaWQpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IHdrSUQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGlkKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0
ZSgpKTsKKyAgICBhdXRvIHdrSUQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGlkKSk7CisgICAg
YXV0byBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgV0tBcnJh
eUFwcGVuZEl0ZW0oYXJyYXkuZ2V0KCksIHdrSUQuZ2V0KCkpOwogICAgIFdLTm90aWZpY2F0aW9u
TWFuYWdlclByb3ZpZGVyRGlkQ2xvc2VOb3RpZmljYXRpb25zKG5vdGlmaWNhdGlvbk1hbmFnZXIs
IGFycmF5LmdldCgpKTsKIH0KQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlv
blByb3ZpZGVyOjpyZW1vdmVOb3RpZmljYXRpb25NYW5hZ2VyKFdLTm90aWZpY2F0aW9uTWFuYWdl
clJlZgogICAgIGF1dG8gdG9SZW1vdmUgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgV0tSZXRhaW5Q
dHI8V0tOb3RpZmljYXRpb25NYW5hZ2VyUmVmPiBndWFyZChtYW5hZ2VyKTsKICAgICBtX293bmVk
Tm90aWZpY2F0aW9ucy5yZW1vdmUoaXRlcmF0b3IpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAg
YXV0byBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgZm9yICh1
aW50NjRfdCBub3RpZmljYXRpb25JRCA6IHRvUmVtb3ZlKSB7CiAgICAgICAgIGJvb2wgc3VjY2Vz
cyA9IG1fb3duaW5nTWFuYWdlci5yZW1vdmUobm90aWZpY2F0aW9uSUQpOwogICAgICAgICBBU1NF
UlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgV2Vi
Tm90aWZpY2F0aW9uUHJvdmlkZXI6OnJlc2V0KCkKICAgICBmb3IgKGF1dG8mIG5vdGlmaWNhdGlv
blBhaXIgOiBtX293bmVkTm90aWZpY2F0aW9ucykgewogICAgICAgICBpZiAobm90aWZpY2F0aW9u
UGFpci52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJh
eUNyZWF0ZSgpKTsKKyAgICAgICAgYXV0byBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlD
cmVhdGUoKSk7CiAgICAgICAgIGZvciAodWludDY0X3Qgbm90aWZpY2F0aW9uSUQgOiBub3RpZmlj
YXRpb25QYWlyLnZhbHVlKQogICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oYXJyYXkuZ2V0
KCksIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90aWZpY2F0aW9uSUQpKS5nZXQoKSk7CiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3BwCmluZGV4IDIwZDVhMWFh
ZGIyOWUzMzJiZTI5YjJiMWY0YzIzNjA5MTliYTBmZjEuLmM5ZDQ3ZmQ2M2I4NGU0NmU0NjJhNTBm
ZjRiZTA3YmYzNDY4YWNhNjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29y
a1F1ZXVlTWFuYWdlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVN
YW5hZ2VyLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIldvcmtRdWV1ZU1hbmFnZXIu
aCIKIAogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgorI2luY2x1ZGUgIlN0cmluZ0Z1bmN0
aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dL
UGFnZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2VQcml2YXRlLmg+CkBAIC03NSw3ICs3Niw3
IEBAIHRlbXBsYXRlIDxXb3JrUXVldWVJdGVtOjpUeXBlIHR5cGU+CiBjbGFzcyBTY3JpcHRJdGVt
IDogcHVibGljIFdvcmtRdWV1ZUl0ZW0gewogcHVibGljOgogICAgIGV4cGxpY2l0IFNjcmlwdEl0
ZW0oY29uc3QgU3RyaW5nJiBzY3JpcHQpCi0gICAgICAgIDogbV9zY3JpcHQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHQudXRmOCgpLmRhdGEoKSkpKQorICAgICAg
ICA6IG1fc2NyaXB0KHRvV0soc2NyaXB0KSkKICAgICB7CiAgICAgfQogCkBAIC0xNjEsNyArMTYy
LDcgQEAgdm9pZCBXb3JrUXVldWVNYW5hZ2VyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnN0IFN0
cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJgogICAgIGNsYXNzIExvYWRIVE1MU3RyaW5nSXRl
bSA6IHB1YmxpYyBXb3JrUXVldWVJdGVtIHsKICAgICBwdWJsaWM6CiAgICAgICAgIExvYWRIVE1M
U3RyaW5nSXRlbShjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwg
Y29uc3QgU3RyaW5nJiB1bnJlYWNoYWJsZVVSTCkKLSAgICAgICAgICAgIDogbV9jb250ZW50KGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29udGVudC51dGY4KCkuZGF0YSgp
KSkpCisgICAgICAgICAgICA6IG1fY29udGVudCh0b1dLKGNvbnRlbnQpKQogICAgICAgICAgICAg
LCBtX2Jhc2VVUkwoYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhiYXNlVVJMLnV0
ZjgoKS5kYXRhKCkpKSkKICAgICAgICAgICAgICwgbV91bnJlYWNoYWJsZVVSTChhZG9wdFdLKFdL
VVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHVucmVhY2hhYmxlVVJMLnV0ZjgoKS5kYXRhKCkpKSkK
ICAgICAgICAgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52
b2NhdGlvbkNHLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25D
Ry5jcHAKaW5kZXggNjczMzhmNGFhODI3M2NmYjY4NzIyOWJmYmFkM2ZhNGRkYjM3YjRkZi4uMDFj
NTMxYTliNmFjZThlODE2OTQ4ZjY3NmNlNjMxZjUyNzk0YjZjNCAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0
YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0RnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBp
bWFnZSkKICAgICBzaXplX3Qgcm93Qnl0ZXMgPSAoNCAqIHBpeGVsc1dpZGUgKyA2MykgJiB+NjM7
CiAKICAgICAvLyBDcmVhdGluZyB0aGlzIGJpdG1hcCBpbiB0aGUgZGV2aWNlIGNvbG9yIHNwYWNl
IHNob3VsZCBwcmV2ZW50IGFueSBjb2xvciBjb252ZXJzaW9uIHdoZW4gdGhlIGltYWdlIG9mIHRo
ZSB3ZWIgdmlldyBpcyBkcmF3biBpbnRvIGl0LgotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VS
ZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsK
KyAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJH
QigpKTsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZSgw
LCBwaXhlbHNXaWRlLCBwaXhlbHNIaWdoLCA4LCByb3dCeXRlcywgY29sb3JTcGFjZS5nZXQoKSwg
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9z
dCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTYzLDcg
KzYzLDcgQEAgc3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVDR0NvbnRleHRGcm9tQ0dJbWFnZShD
R0ltYWdlUmVmIGltYWdlKQogCiBzdGF0aWMgQ0dDb250ZXh0UmVmIGNyZWF0ZUNHQ29udGV4dEZy
b21JbWFnZShXS0ltYWdlUmVmIHdrSW1hZ2UpCiB7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlID0gYWRvcHRDRihXS0ltYWdlQ3JlYXRlQ0dJbWFnZSh3a0ltYWdlKSk7CisgICAgYXV0
byBpbWFnZSA9IGFkb3B0Q0YoV0tJbWFnZUNyZWF0ZUNHSW1hZ2Uod2tJbWFnZSkpOwogICAgIHJl
dHVybiBjcmVhdGVDR0NvbnRleHRGcm9tQ0dJbWFnZShpbWFnZS5nZXQoKSk7CiB9CiAKQEAgLTEw
OSw5ICsxMDksOSBAQCB2b2lkIGNvbXB1dGVTSEExSGFzaFN0cmluZ0ZvckNvbnRleHQoQ0dDb250
ZXh0UmVmIGJpdG1hcENvbnRleHQsIGNoYXIgaGFzaFN0cmluZwogCiBzdGF0aWMgdm9pZCBkdW1w
Qml0bWFwKENHQ29udGV4dFJlZiBiaXRtYXBDb250ZXh0LCBjb25zdCBjaGFyKiBjaGVja3N1bSkK
IHsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpKTsKLSAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxl
RGF0YVJlZj4gaW1hZ2VEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsK
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBpbWFnZURlc3QgPSBhZG9wdENG
KENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGltYWdlRGF0YS5nZXQoKSwga1VUVHlw
ZVBORywgMSwgMCkpOworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZUltYWdlKGJpdG1hcENvbnRleHQpKTsKKyAgICBhdXRvIGltYWdlRGF0YSA9IGFkb3B0Q0Yo
Q0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisgICAgYXV0byBpbWFnZURlc3QgPSBhZG9wdENG
KENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGltYWdlRGF0YS5nZXQoKSwga1VUVHlw
ZVBORywgMSwgMCkpOwogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGltYWdlRGVzdC5n
ZXQoKSwgaW1hZ2UuZ2V0KCksIDApOwogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGlt
YWdlRGVzdC5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29j
b2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0Ny
YXNoUmVwb3J0ZXJJbmZvLm1tCmluZGV4IDRjNzlhYjViODVkNjQxODlhN2UwYTI5NmVlYTkwYzFk
ODExOGRjM2QuLjQxMGQ5ZmRjYjMxZTJjNmU2Y2E3NjQ5NTYxNDYwNjM4YzA5MTA1ZWIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0K
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9DcmFzaFJlcG9ydGVySW5mby5tbQpA
QCAtMzUsMTIgKzM1LDEyIEBAIG5hbWVzcGFjZSBXVFIgewogCiBzdGF0aWMgU3RyaW5nIHRlc3RQ
YXRoRnJvbVVSTChXS1VSTFJlZiB1cmwpCiB7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVS
TCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsKSk7Cisg
ICAgYXV0byBjZlVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgdXJsKSk7CiAgICAgaWYgKCFjZlVSTCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0g
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY2hlbWVDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxD
b3B5U2NoZW1lKGNmVVJMLmdldCgpKSk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwYXRo
Q0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVBhdGgoY2ZVUkwuZ2V0KCkpKTsKKyAgICBhdXRv
IHNjaGVtZUNGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlTY2hlbWUoY2ZVUkwuZ2V0KCkpKTsK
KyAgICBhdXRvIHBhdGhDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5UGF0aChjZlVSTC5nZXQo
KSkpOwogCiAgICAgU3RyaW5nIHNjaGVtZVN0cmluZyhzY2hlbWVDRlN0cmluZy5nZXQoKSk7CiAg
ICAgU3RyaW5nIHBhdGhTdHJpbmcocGF0aENGU3RyaW5nLmdldCgpKTsKQEAgLTU3LDcgKzU3LDcg
QEAgc3RhdGljIFN0cmluZyB0ZXN0UGF0aEZyb21VUkwoV0tVUkxSZWYgdXJsKQogICAgIGlmICgh
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3RyaW5nLCAiaHR0cCIpICYmICFl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWVTdHJpbmcsICJodHRwcyIpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGhvc3RD
RlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5SG9zdE5hbWUoY2ZVUkwuZ2V0KCkpKTsKKyAgICBh
dXRvIGhvc3RDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5SG9zdE5hbWUoY2ZVUkwuZ2V0KCkp
KTsKICAgICBTdHJpbmcgaG9zdFN0cmluZyhob3N0Q0ZTdHJpbmcuZ2V0KCkpOwogICAgIGlmICho
b3N0U3RyaW5nID09ICIxMjcuMC4wLjEiKQogICAgICAgICByZXR1cm4gcGF0aFN0cmluZzsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2Nv
YS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5t
bQppbmRleCAzNjUzMzdhZGY5OWYwYjljZGQ2YWYwOTdmYzAyYmU4N2E2NzE2NjU3Li43MTMwMzI2
YTNlNjFjZTJiZDBhNzZkZjcyODk4ZDllNGIwMDYzYjA0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCkBAIC0xNDIsNyArMTQy
LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplRGF0YVN0b3JlKFdL
UGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFQKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1DcmVhdGVXZWJWaWV3KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFRlc3RPcHRp
b25zJiBvcHRpb25zKQogewotICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBj
b3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24g
Y29weV0pOworICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2dsb2JhbFdl
YlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgaWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlvbikKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbSBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQppbmRleCA1Yzg2MmU5YjBlYzc3
ZDA1ZTA3NzI5ZGNlNjQ3NmY1ODkyMTIzYjM4Li45MTVmNDc2YzYxNWFlNjEwOTBkOTBjYTc5NzZi
ZjhmMmM5OWI1NjZiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rl
c3RSdW5uZXJXS1dlYlZpZXcubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9U
ZXN0UnVubmVyV0tXZWJWaWV3Lm1tCkBAIC05MCw3ICs5MCw3IEBAIElHTk9SRV9XQVJOSU5HU19C
RUdJTigiZGVwcmVjYXRlZC1pbXBsZW1lbnRhdGlvbnMiKQogLSAodm9pZClkcmFnSW1hZ2U6KE5T
SW1hZ2UgKilhbkltYWdlIGF0OihOU1BvaW50KXZpZXdMb2NhdGlvbiBvZmZzZXQ6KE5TU2l6ZSlp
bml0aWFsT2Zmc2V0IGV2ZW50OihOU0V2ZW50ICopZXZlbnQgcGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGJvYXJkIHNvdXJjZTooaWQpc291cmNlT2JqIHNsaWRlQmFjazooQk9PTClzbGlkZUZs
YWcKIElHTk9SRV9XQVJOSU5HU19FTkQKIHsKLSAgICBSZXRhaW5QdHI8V2ViS2l0VGVzdFJ1bm5l
ckRyYWdnaW5nSW5mbz4gZHJhZ2dpbmdJbmZvID0gYWRvcHROUyhbW1dlYktpdFRlc3RSdW5uZXJE
cmFnZ2luZ0luZm8gYWxsb2NdIGluaXRXaXRoSW1hZ2U6YW5JbWFnZSBvZmZzZXQ6aW5pdGlhbE9m
ZnNldCBwYXN0ZWJvYXJkOnBib2FyZCBzb3VyY2U6c291cmNlT2JqXSk7CisgICAgYXV0byBkcmFn
Z2luZ0luZm8gPSBhZG9wdE5TKFtbV2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mbyBhbGxvY10g
aW5pdFdpdGhJbWFnZTphbkltYWdlIG9mZnNldDppbml0aWFsT2Zmc2V0IHBhc3RlYm9hcmQ6cGJv
YXJkIHNvdXJjZTpzb3VyY2VPYmpdKTsKICAgICBbc2VsZiBkcmFnZ2luZ1VwZGF0ZWQ6ZHJhZ2dp
bmdJbmZvLmdldCgpXTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5oCmluZGV4IGFiYzBhNTBjOTcwYzFi
YjMzZjFmYjEwOTM5MzUyYWY4Y2E3ZTA0MDMuLmNjOTgxMzk0MjRmMjg4MDY0NDM5ODk4MzQ1YzNl
N2Q0ZWE1NTMzNzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlT
Y3JpcHRDb250cm9sbGVyQ29jb2EuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29h
L1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmgKQEAgLTMyLDEyICszMiwxNyBAQCBPQkpDX0NMQVNT
IFRlc3RSdW5uZXJXS1dlYlZpZXc7CiBuYW1lc3BhY2UgV1RSIHsKIAogY2xhc3MgVUlTY3JpcHRD
b250cm9sbGVyQ29jb2EgOiBwdWJsaWMgVUlTY3JpcHRDb250cm9sbGVyQ29tbW9uIHsKLXB1Ymxp
YzoKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShVSVNj
cmlwdENvbnRleHQmKTsKKyAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3KCkgY29uc3Q7
CisKKyAgICB2b2lkIGRvQXN5bmNUYXNrKEpTVmFsdWVSZWYpIG92ZXJyaWRlOworCitwcml2YXRl
OgogICAgIHZvaWQgc2V0Vmlld1NjYWxlKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRN
aW5pbXVtRWZmZWN0aXZlV2lkdGgoZG91YmxlKSBvdmVycmlkZTsKICAgICB2b2lkIGJlY29tZUZp
cnN0UmVzcG9uZGVyKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXNpZ25GaXJzdFJlc3BvbmRlcigp
IG92ZXJyaWRlOwotICAgIHZvaWQgZG9Bc3luY1Rhc2soSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCByZW1vdmVWaWV3RnJvbVdpbmRvdyhKU1ZhbHVlUmVmKSBvdmVycmlkZTsKICAgICB2
b2lkIGFkZFZpZXdUb1dpbmRvdyhKU1ZhbHVlUmVmKSBvdmVycmlkZTsKICAgICB2b2lkIG92ZXJy
aWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpIG92ZXJyaWRlOwpAQCAtNTks
MTEgKzY0LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbnNlcnRBdHRhY2htZW50Rm9yRmlsZVBh
dGgoSlNTdHJpbmdSZWYgZmlsZVBhdGgsIEpTU3RyaW5nUmVmIGNvbnRlbnRUeXBlLCBKU1ZhbHVl
UmVmIGNhbGxiYWNrKSBvdmVycmlkZTsKIAotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFVJU2Ny
aXB0Q29udHJvbGxlckNvY29hKFVJU2NyaXB0Q29udGV4dCYpOwotICAgIFRlc3RSdW5uZXJXS1dl
YlZpZXcgKndlYlZpZXcoKSBjb25zdDsKLQotcHJpdmF0ZToKICAgICB2b2lkIGNvbXBsZXRlVGFz
a0FzeW5jaHJvbm91c2x5QWZ0ZXJBY3Rpdml0eVN0YXRlVXBkYXRlKHVuc2lnbmVkIGNhbGxiYWNr
SUQpOwogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNj
cmlwdENvbnRyb2xsZXJDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlT
Y3JpcHRDb250cm9sbGVyQ29jb2EubW0KaW5kZXggOThiYjc0YjQxM2I5NTAzZTY5ODgwN2VkYjg2
Mjk4ZTM3MGRjZDBmMi4uNTg0Nzk3NmYyMTg1N2Y1M2Y0ODVlY2IxZmIxZWI5MTE3MjFhNTZkYSAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xs
ZXJDb2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29u
dHJvbGxlckNvY29hLm1tCkBAIC0xMzUsMjIgKzEzNSwxOCBAQCB2b2lkIFVJU2NyaXB0Q29udHJv
bGxlckNvY29hOjphZGRWaWV3VG9XaW5kb3coSlNWYWx1ZVJlZiBjYWxsYmFjaykKIAogdm9pZCBV
SVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIHBy
ZWZlcmVuY2VSZWYsIEpTU3RyaW5nUmVmIHZhbHVlUmVmKQogewotICAgIFdLUHJlZmVyZW5jZXMg
KnByZWZlcmVuY2VzID0gd2ViVmlldygpLmNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXM7Ci0KLSAg
ICBTdHJpbmcgcHJlZmVyZW5jZSA9IHRvV1RGU3RyaW5nKHRvV0socHJlZmVyZW5jZVJlZikpOwot
ICAgIFN0cmluZyB2YWx1ZSA9IHRvV1RGU3RyaW5nKHRvV0sodmFsdWVSZWYpKTsKLSAgICBpZiAo
cHJlZmVyZW5jZSA9PSAiV2ViS2l0TWluaW11bUZvbnRTaXplIikKLSAgICAgICAgcHJlZmVyZW5j
ZXMubWluaW11bUZvbnRTaXplID0gdmFsdWUudG9Eb3VibGUoKTsKKyAgICBpZiAodG9XVEZTdHJp
bmcocHJlZmVyZW5jZVJlZikgPT0gIldlYktpdE1pbmltdW1Gb250U2l6ZSIpCisgICAgICAgIHdl
YlZpZXcoKS5jb25maWd1cmF0aW9uLnByZWZlcmVuY2VzLm1pbmltdW1Gb250U2l6ZSA9IHRvV1RG
U3RyaW5nKHZhbHVlUmVmKS50b0RvdWJsZSgpOwogfQogCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxl
ckNvY29hOjpmaW5kU3RyaW5nKEpTU3RyaW5nUmVmIHN0cmluZywgdW5zaWduZWQgbG9uZyBvcHRp
b25zLCB1bnNpZ25lZCBsb25nIG1heENvdW50KQogewotICAgIFt3ZWJWaWV3KCkgX2ZpbmRTdHJp
bmc6dG9XVEZTdHJpbmcodG9XSyhzdHJpbmcpKSBvcHRpb25zOm9wdGlvbnMgbWF4Q291bnQ6bWF4
Q291bnRdOworICAgIFt3ZWJWaWV3KCkgX2ZpbmRTdHJpbmc6dG9XVEZTdHJpbmcoc3RyaW5nKSBv
cHRpb25zOm9wdGlvbnMgbWF4Q291bnQ6bWF4Q291bnRdOwogfQogCiBKU09iamVjdFJlZiBVSVNj
cmlwdENvbnRyb2xsZXJDb2NvYTo6Y29udGVudHNPZlVzZXJJbnRlcmZhY2VJdGVtKEpTU3RyaW5n
UmVmIGludGVyZmFjZUl0ZW0pIGNvbnN0CiB7Ci0gICAgTlNEaWN0aW9uYXJ5ICpjb250ZW50RGlj
dGlvbmFyeSA9IFt3ZWJWaWV3KCkgX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTp0b1dURlN0
cmluZyh0b1dLKGludGVyZmFjZUl0ZW0pKV07CisgICAgTlNEaWN0aW9uYXJ5ICpjb250ZW50RGlj
dGlvbmFyeSA9IFt3ZWJWaWV3KCkgX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTp0b1dURlN0
cmluZyhpbnRlcmZhY2VJdGVtKV07CiAgICAgcmV0dXJuIEpTVmFsdWVUb09iamVjdChtX2NvbnRl
eHQtPmpzQ29udGV4dCgpLCBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6Y29udGVudERpY3Rpb25h
cnkgaW5Db250ZXh0OltKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6bV9j
b250ZXh0LT5qc0NvbnRleHQoKV1dLkpTVmFsdWVSZWYsIG51bGxwdHIpOwogfQogCkBAIC0yMTks
MTIgKzIxNSwxMCBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpwYXN0ZSgpCiB2b2lk
IFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjppbnNlcnRBdHRhY2htZW50Rm9yRmlsZVBhdGgoSlNT
dHJpbmdSZWYgZmlsZVBhdGgsIEpTU3RyaW5nUmVmIGNvbnRlbnRUeXBlLCBKU1ZhbHVlUmVmIGNh
bGxiYWNrKQogewogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBtX2NvbnRleHQtPnByZXBhcmVG
b3JBc3luY1Rhc2soY2FsbGJhY2ssIENhbGxiYWNrVHlwZU5vblBlcnNpc3RlbnQpOwotCi0gICAg
UmV0YWluUHRyPENGVVJMUmVmPiB0ZXN0VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY3VycmVudFRlc3RV
UkwoKSkpOwotICAgIFJldGFpblB0cjxOU1VSTD4gYXR0YWNobWVudFVSTCA9IFtOU1VSTCBmaWxl
VVJMV2l0aFBhdGg6dG9XVEZTdHJpbmcodG9XSyhmaWxlUGF0aCkpIHJlbGF0aXZlVG9VUkw6KF9f
YnJpZGdlIE5TVVJMICopdGVzdFVSTC5nZXQoKV07Ci0KLSAgICBhdXRvIGZpbGVXcmFwcGVyID0g
YWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRoVVJMOmF0dGFjaG1lbnRVUkwu
Z2V0KCkgb3B0aW9uczowIGVycm9yOm5pbF0pOwotICAgIFt3ZWJWaWV3KCkgX2luc2VydEF0dGFj
aG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIuZ2V0KCkgY29udGVudFR5cGU6dG9XVEZT
dHJpbmcodG9XSyhjb250ZW50VHlwZSkpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAg
ICBhdXRvIHRlc3RVUkwgPSBhZG9wdENGKFdLVVJMQ29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1
bHQsIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jdXJyZW50VGVzdFVSTCgpKSk7CisgICAg
YXV0byBhdHRhY2htZW50VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0b1dURlN0cmluZyhm
aWxlUGF0aCkgcmVsYXRpdmVUb1VSTDooX19icmlkZ2UgTlNVUkwgKil0ZXN0VVJMLmdldCgpXTsK
KyAgICBhdXRvIGZpbGVXcmFwcGVyID0gYWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGlu
aXRXaXRoVVJMOmF0dGFjaG1lbnRVUkwgb3B0aW9uczowIGVycm9yOm5pbF0pOworICAgIFt3ZWJW
aWV3KCkgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIuZ2V0KCkg
Y29udGVudFR5cGU6dG9XVEZTdHJpbmcoY29udGVudFR5cGUpIGNvbXBsZXRpb246XihCT09MIHN1
Y2Nlc3MpIHsKICAgICAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIG1fY29udGV4dC0+YXN5bmNUYXNrQ29tcGxldGUoY2FsbGJhY2tJRCk7CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbSBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tCmluZGV4IGUyOTgz
OGJhODI4ZmI0YmQ5MDg1N2FiNmJlZjJmZDQ2NTlmYjQyMTguLjBjNDQ2MzM1YjI0MGQ2YTdlMDY3
NDE0Y2E5YzMwNDBhYTZlMzU0NjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
aW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L0hJREV2ZW50R2VuZXJhdG9yLm1tCkBAIC0xODksNyArMTg5LDcgQEAgLSAoaW5zdGFuY2V0eXBl
KWluaXQKIAogLSAodm9pZClfc2VuZElPSElES2V5Ym9hcmRFdmVudDoodWludDY0X3QpdGltZXN0
YW1wIHVzYWdlOih1aW50MzJfdCl1c2FnZSBpc0tleURvd246KGJvb2wpaXNLZXlEb3duCiB7Ci0g
ICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50
Q3JlYXRlS2V5Ym9hcmRFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LAorICAgIGF1dG8gZXZlbnRS
ZWYgPSBhZG9wdENGKElPSElERXZlbnRDcmVhdGVLZXlib2FyZEV2ZW50KGtDRkFsbG9jYXRvckRl
ZmF1bHQsCiAgICAgICAgIHRpbWVzdGFtcCwKICAgICAgICAga0hJRFBhZ2VfS2V5Ym9hcmRPcktl
eXBhZCwKICAgICAgICAgdXNhZ2UsCkBAIC0zNjEsNyArMzYxLDcgQEAgLSAoSU9ISURFdmVudFJl
ZilfY3JlYXRlSU9ISURFdmVudFR5cGU6KEhhbmRFdmVudFR5cGUpZXZlbnRUeXBlCiAgICAgICAg
IGV2ZW50TWFzayB8PSBrSU9ISUREaWdpdGl6ZXJFdmVudElkZW50aXR5OwogCiAgICAgdWludDY0
X3QgbWFjaFRpbWUgPSBtYWNoX2Fic29sdXRlX3RpbWUoKTsKLSAgICBSZXRhaW5QdHI8SU9ISURF
dmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZlbnRDcmVhdGVEaWdpdGl6ZXJFdmVu
dChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtYWNoVGltZSwKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRv
cHRDRihJT0hJREV2ZW50Q3JlYXRlRGlnaXRpemVyRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
bWFjaFRpbWUsCiAgICAgICAgIGtJT0hJRERpZ2l0aXplclRyYW5zZHVjZXJUeXBlSGFuZCwKICAg
ICAgICAgMCwKICAgICAgICAgMCwKQEAgLTQ1Myw3ICs0NTMsNyBAQCAtIChCT09MKV9zZW5kSElE
RXZlbnQ6KElPSElERXZlbnRSZWYpZXZlbnRSZWYKICAgICAgICAgX2lvU3lzdGVtQ2xpZW50ID0g
SU9ISURFdmVudFN5c3RlbUNsaWVudENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKIAogICAg
IGlmIChldmVudFJlZikgewotICAgICAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gc3Ryb25n
RXZlbnQgPSBldmVudFJlZjsKKyAgICAgICAgYXV0byBzdHJvbmdFdmVudCA9IHJldGFpblB0cihl
dmVudFJlZik7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CiAgICAgICAgICAgICB1aW50MzJfdCBjb250ZXh0SUQgPSBbVUlBcHBsaWNhdGlvbiBz
aGFyZWRBcHBsaWNhdGlvbl0ua2V5V2luZG93Ll9jb250ZXh0SWQ7CiAgICAgICAgICAgICBBU1NF
UlQoY29udGV4dElEKTsKQEAgLTUxMiw3ICs1MTIsNyBAQCAtICh2b2lkKV91cGRhdGVUb3VjaFBv
aW50czooQ0dQb2ludCopcG9pbnRzIGNvdW50OihOU1VJbnRlZ2VyKWNvdW50CiAgICAgICAgIFtb
R2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dp
bmRvd10gdXBkYXRlRGVidWdJbmRpY2F0b3JGb3JUb3VjaDppIHdpdGhQb2ludEluV2luZG93Q29v
cmRpbmF0ZXM6cG9pbnRzW2ldIGlzVG91Y2hpbmc6WUVTXTsKICAgICB9CiAgICAgCi0gICAgUmV0
YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9I
SURFdmVudFR5cGU6aGFuZEV2ZW50VHlwZV0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENG
KFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpoYW5kRXZlbnRUeXBlXSk7CiAgICAgW3NlbGYg
X3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTUyOSw3ICs1MjksNyBAQCAt
ICh2b2lkKXRvdWNoRG93bkF0UG9pbnRzOihDR1BvaW50Kilsb2NhdGlvbnMgdG91Y2hDb3VudDoo
TlNVSW50ZWdlcil0b3VjaENvdW50CiAgICAgICAgIFtbR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2lu
ZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvd10gdXBkYXRlRGVidWdJbmRpY2F0
b3JGb3JUb3VjaDppbmRleCB3aXRoUG9pbnRJbldpbmRvd0Nvb3JkaW5hdGVzOmxvY2F0aW9uc1tp
bmRleF0gaXNUb3VjaGluZzpZRVNdOwogICAgIH0KIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50
UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRF
dmVudFRvdWNoZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRl
SU9ISURFdmVudFR5cGU6SGFuZEV2ZW50VG91Y2hlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZl
bnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC01NjMsNyArNTYzLDcgQEAgLSAodm9pZClsaWZ0
VXBBdFBvaW50czooQ0dQb2ludCopbG9jYXRpb25zIHRvdWNoQ291bnQ6KE5TVUludGVnZXIpdG91
Y2hDb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5l
cmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aW5k
ZXggd2l0aFBvaW50SW5XaW5kb3dDb29yZGluYXRlczpDR1BvaW50WmVybyBpc1RvdWNoaW5nOk5P
XTsKICAgICB9CiAgICAgCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0g
YWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6SGFuZEV2ZW50TGlmdGVkXSk7Cisg
ICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhh
bmRFdmVudExpZnRlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCld
OwogICAgIAogICAgIF9hY3RpdmVQb2ludENvdW50ID0gbmV3UG9pbnRDb3VudDsKQEAgLTY0MSw3
ICs2NDEsNyBAQCAtICh2b2lkKXN0eWx1c0Rvd25BdFBvaW50OihDR1BvaW50KWxvY2F0aW9uIGF6
aW11dGhBbmdsZTooQ0dGbG9hdClhemltdXRoQW5nbGUgYQogICAgIF9hY3RpdmVQb2ludHNbMF0u
YXppbXV0aEFuZ2xlID0gTV9QSSAqIDIgLSBhemltdXRoQW5nbGU7CiAgICAgX2FjdGl2ZVBvaW50
c1swXS5hbHRpdHVkZUFuZ2xlID0gTV9QSV8yIC0gYWx0aXR1ZGVBbmdsZTsKIAotICAgIFJldGFp
blB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElE
RXZlbnRUeXBlOlN0eWx1c0V2ZW50VG91Y2hlZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9w
dENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudFRvdWNoZWRdKTsKICAg
ICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApAQCAtNjU1LDcgKzY1
NSw3IEBAIC0gKHZvaWQpc3R5bHVzTW92ZVRvUG9pbnQ6KENHUG9pbnQpbG9jYXRpb24gYXppbXV0
aEFuZ2xlOihDR0Zsb2F0KWF6aW11dGhBbmdsZSBhCiAgICAgX2FjdGl2ZVBvaW50c1swXS5hemlt
dXRoQW5nbGUgPSBNX1BJICogMiAtIGF6aW11dGhBbmdsZTsKICAgICBfYWN0aXZlUG9pbnRzWzBd
LmFsdGl0dWRlQW5nbGUgPSBNX1BJXzIgLSBhbHRpdHVkZUFuZ2xlOwogCi0gICAgUmV0YWluUHRy
PElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVu
dFR5cGU6U3R5bHVzRXZlbnRNb3ZlZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtz
ZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudE1vdmVkXSk7CiAgICAgW3NlbGYg
X3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTY2OCw3ICs2NjgsNyBAQCAt
ICh2b2lkKXN0eWx1c1VwQXRQb2ludDooQ0dQb2ludClsb2NhdGlvbgogICAgIF9hY3RpdmVQb2lu
dHNbMF0uYXppbXV0aEFuZ2xlID0gMDsKICAgICBfYWN0aXZlUG9pbnRzWzBdLmFsdGl0dWRlQW5n
bGUgPSAwOwogCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRD
Rihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRMaWZ0ZWRdKTsKKyAgICBh
dXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVz
RXZlbnRMaWZ0ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsK
IH0KIApAQCAtMTAyMSw3ICsxMDIxLDcgQEAgLSAodm9pZClkaXNwYXRjaEV2ZW50V2l0aEluZm86
KE5TRGljdGlvbmFyeSAqKWV2ZW50SW5mbwogewogICAgIEFTU0VSVChbTlNUaHJlYWQgaXNNYWlu
VGhyZWFkXSk7CiAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9w
dENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50V2l0aEluZm86ZXZlbnRJbmZvXSk7CisgICAgYXV0
byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRXaXRoSW5mbzpldmVu
dEluZm9dKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVy
SU9TLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1Mu
aAppbmRleCAyOGQwNjBjNmRmYzQ3MWE5MDU0OTA2ODM5NWMzZDQwZjZhOWMwOTZiLi44NTQ2NDQ3
NjZkOGJjNWE4MTVkMjY3ZTlhN2JhNGEyMDVkNmU2MTIyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MuaAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MuaApAQCAtMjUsMTEgKzI1LDEx
IEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwogI2ltcG9y
dCAiVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgog
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UmVjdDsKQEAgLTM3LDEzICszNywxNCBAQCBjbGFzcyBG
bG9hdFJlY3Q7CiAKIG5hbWVzcGFjZSBXVFIgewogCi1jbGFzcyBVSVNjcmlwdENvbnRyb2xsZXJJ
T1MgOiBwdWJsaWMgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EgeworY2xhc3MgVUlTY3JpcHRDb250
cm9sbGVySU9TIGZpbmFsIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBVSVNjcmlwdENvbnRyb2xsZXJJT1MoVUlTY3JpcHRDb250ZXh0JiBj
b250ZXh0KQogICAgICAgICA6IFVJU2NyaXB0Q29udHJvbGxlckNvY29hKGNvbnRleHQpCiAgICAg
ewogICAgIH0KIAorcHJpdmF0ZToKICAgICB2b2lkIHdhaXRGb3JPdXRzdGFuZGluZ0NhbGxiYWNr
cygpIG92ZXJyaWRlOwogICAgIHZvaWQgZG9BZnRlclByZXNlbnRhdGlvblVwZGF0ZShKU1ZhbHVl
UmVmKSBvdmVycmlkZTsKICAgICB2b2lkIGRvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBk
YXRlKEpTVmFsdWVSZWYpIG92ZXJyaWRlOwpAQCAtMTU2LDcgKzE1Nyw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldERpZEVuZFNjcm9sbGluZ0NhbGxiYWNrKEpTVmFsdWVSZWYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgY2xlYXJBbGxDYWxsYmFja3MoKSBvdmVycmlkZTsKIAotcHJpdmF0ZToKICAgICB2
b2lkIHdhaXRGb3JNb2RhbFRyYW5zaXRpb25Ub0ZpbmlzaCgpIGNvbnN0OwogICAgIHZvaWQgd2Fp
dEZvclNpbmdsZVRhcFRvUmVzZXQoKSBjb25zdDsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVj
dEZvck1lbnVBY3Rpb24oQ0ZTdHJpbmdSZWYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IDEzMGM0OTdjMjQw
ZDgzOGJiNGFmZmZkMjA3MzE0MTc1YTgzZGJiMjYuLjdhZjZlY2Y1MDk4NWYxNWVmNDdjMTkxOGI2
NWEyZWJkYTZkMjZhMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJ
U2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9V
SVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTY4LDI0ICs2OCwxNCBAQCBzdGF0aWMgTlNEaWN0
aW9uYXJ5ICp0b05TRGljdGlvbmFyeShDR1JlY3QgcmVjdCkKICAgICB9OwogfQogCi1zdGF0aWMg
dW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGFy
cmF5KQotewotICAgIGF1dG8gbGVuZ3RoU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBpZiAoYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgbnVsbHB0
cikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVy
KGNvbnRleHQsIGxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0
YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKICAgICBpZiAoIWFycmF5VmFsdWUpCiAgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICAvLyBUaGUgdmFsdWUgbWF5IGVpdGhlciBiZSBhIHN0cmlu
ZyB3aXRoIGEgc2luZ2xlIG1vZGlmaWVyIG9yIGFuIGFycmF5IG9mIG1vZGlmaWVycy4KLSAgICBp
ZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpKSB7Ci0gICAgICAgIGF1dG8g
c3RyaW5nID0gdG9XVEZTdHJpbmcodG9XSyhhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIGFycmF5VmFsdWUsIG51bGxwdHIpKSkpOwotICAgICAgICByZXR1cm4geyBzdHJpbmcgfTsK
LSAgICB9CisgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIHsgdG9XVEZTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1ZSkgfTsKIAogICAg
IGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGFycmF5VmFsdWUpKQogICAgICAgICByZXR1
cm4geyB9OwpAQCAtOTMsMTYgKzgzLDggQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBhcnNlTW9k
aWZpZXJBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhcnJheVYKICAgICB1
bnNpZ25lZCBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBhcnJheSk7CiAgICAgVmVjdG9y
PFN0cmluZz4gbW9kaWZpZXJzOwogICAgIG1vZGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgSlNWYWx1ZVJl
ZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCAm
ZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgdmFsdWUsICZleGNlcHRpb24pKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBtb2RpZmllcnMuYXBwZW5kKHRvV1RGU3RyaW5nKHRvV0so
c3RyaW5nLmdldCgpKSkpOwotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCisgICAgICAgIG1vZGlmaWVycy5hcHBlbmQodG9XVEZTdHJpbmcoY29udGV4dCwg
SlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIG51bGxwdHIpKSk7
CiAgICAgcmV0dXJuIG1vZGlmaWVyczsKIH0KIApAQCAtNTE0LDEwICs0OTYsOSBAQCB2b2lkIFVJ
U2NyaXB0Q29udHJvbGxlcklPUzo6dHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZChK
U1N0cmluZ1JlZiBjaGFyYQogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBtX2NvbnRleHQtPnBy
ZXBhcmVGb3JBc3luY1Rhc2soY2FsbGJhY2ssIENhbGxiYWNrVHlwZU5vblBlcnNpc3RlbnQpOwog
CiAgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSBrZXlib2FyZCBpcyBhbHJlYWR5IHNob3duLgotICAg
IFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVByZXNzOnRv
V1RGU3RyaW5nKHRvV0soY2hhcmFjdGVyKSkgY29tcGxldGlvbkJsb2NrOm1ha2VCbG9ja1B0cihb
dGhpcywgc3Ryb25nVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFja0lEXSB7Ci0gICAgICAg
IGlmICghbV9jb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2NvbnRleHQt
PmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNrSUQpOworICAgIFtbSElERXZlbnRHZW5lcmF0b3Ig
c2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVByZXNzOnRvV1RGU3RyaW5nKGNoYXJhY3Rlcikg
Y29tcGxldGlvbkJsb2NrOm1ha2VCbG9ja1B0cihbc3Ryb25nVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjYWxsYmFja0lEXSB7CisgICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2NvbnRleHQpCisgICAg
ICAgICAgICBzdHJvbmdUaGlzLT5tX2NvbnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNr
SUQpOwogICAgIH0pLmdldCgpXTsKIH0KIApAQCAtNTM0LDcgKzUxNSw3IEBAIHZvaWQgVUlTY3Jp
cHRDb250cm9sbGVySU9TOjpyYXdLZXlEb3duKEpTU3RyaW5nUmVmIGtleSkKIHsKICAgICAvLyBL
ZXkgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSBVbmljb2RlIGNvZGUgcG9pbnQgb3IgdGhlIG5hbWUg
b2YgYSBzcGVjaWFsIGtleSAoZS5nLiAiZG93bkFycm93IikuCiAgICAgLy8gSElERXZlbnRHZW5l
cmF0b3Iga25vd3MgaG93IHRvIG1hcCB0aGVzZSBzcGVjaWFsIGtleXMgdG8gdGhlIGFwcHJvcHJp
YXRlIGtleWNvZGUuCi0gICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVy
YXRvcl0ga2V5RG93bjp0b1dURlN0cmluZyh0b1dLKGtleSkpXTsKKyAgICBbW0hJREV2ZW50R2Vu
ZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlEb3duOnRvV1RGU3RyaW5nKGtleSld
OwogICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIHNlbmRN
YXJrZXJISURFdmVudFdpdGhDb21wbGV0aW9uQmxvY2s6XnsgLyogRG8gbm90aGluZyAqLyB9XTsK
IH0KIApAQCAtNTQyLDcgKzUyMyw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjpyYXdL
ZXlVcChKU1N0cmluZ1JlZiBrZXkpCiB7CiAgICAgLy8gS2V5IGNhbiBiZSBlaXRoZXIgYSBzaW5n
bGUgVW5pY29kZSBjb2RlIHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lhbCBrZXkgKGUuZy4g
ImRvd25BcnJvdyIpLgogICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtub3dzIGhvdyB0byBtYXAg
dGhlc2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXljb2RlLgotICAgIFtbSElE
RXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleVVwOnRvV1RGU3RyaW5n
KHRvV0soa2V5KSldOworICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5l
cmF0b3JdIGtleVVwOnRvV1RGU3RyaW5nKGtleSldOwogICAgIFtbSElERXZlbnRHZW5lcmF0b3Ig
c2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIHNlbmRNYXJrZXJISURFdmVudFdpdGhDb21wbGV0aW9u
QmxvY2s6XnsgLyogRG8gbm90aGluZyAqLyB9XTsKIH0KIApAQCAtNTUwLDcgKzUzMSw3IEBAIHZv
aWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjprZXlEb3duKEpTU3RyaW5nUmVmIGNoYXJhY3Rlciwg
SlNWYWx1ZVJlZiBtb2RpZmllckFyCiB7CiAgICAgLy8gQ2hhcmFjdGVyIGNhbiBiZSBlaXRoZXIg
YSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lhbCBrZXkg
KGUuZy4gImRvd25BcnJvdyIpLgogICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtub3dzIGhvdyB0
byBtYXAgdGhlc2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXljb2RlLgotICAg
IFN0cmluZyBpbnB1dFN0cmluZyA9IHRvV1RGU3RyaW5nKHRvV0soY2hhcmFjdGVyKSk7CisgICAg
YXV0byBpbnB1dFN0cmluZyA9IHRvV1RGU3RyaW5nKGNoYXJhY3Rlcik7CiAgICAgYXV0byBtb2Rp
ZmllckZsYWdzID0gcGFyc2VNb2RpZmllckFycmF5KG1fY29udGV4dC0+anNDb250ZXh0KCksIG1v
ZGlmaWVyQXJyYXkpOwogCiAgICAgZm9yIChhdXRvJiBtb2RpZmllckZsYWcgOiBtb2RpZmllckZs
YWdzKQpAQCAtNzI3LDcgKzcwOCw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjphcHBs
eUF1dG9jb3JyZWN0aW9uKEpTU3RyaW5nUmVmIG5ld1N0cmluZywgSlNTdHJpbmdSCiAgICAgdW5z
aWduZWQgY2FsbGJhY2tJRCA9IG1fY29udGV4dC0+cHJlcGFyZUZvckFzeW5jVGFzayhjYWxsYmFj
aywgQ2FsbGJhY2tUeXBlTm9uUGVyc2lzdGVudCk7CiAKICAgICBUZXN0UnVubmVyV0tXZWJWaWV3
ICp3ZWJWaWV3ID0gdGhpcy0+d2ViVmlldygpOwotICAgIFt3ZWJWaWV3IGFwcGx5QXV0b2NvcnJl
Y3Rpb246dG9XVEZTdHJpbmcodG9XSyhuZXdTdHJpbmcpKSB0b1N0cmluZzp0b1dURlN0cmluZyh0
b1dLKG9sZFN0cmluZykpIHdpdGhDb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW3RoaXMs
IHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0geworICAgIFt3ZWJWaWV3
IGFwcGx5QXV0b2NvcnJlY3Rpb246dG9XVEZTdHJpbmcobmV3U3RyaW5nKSB0b1N0cmluZzp0b1dU
RlN0cmluZyhvbGRTdHJpbmcpIHdpdGhDb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW3Ro
aXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewogICAgICAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBtYWtlQmxvY2tQdHIoW3Ro
aXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewogICAgICAgICAg
ICAgLy8gYXBwbHlBdXRvY29ycmVjdGlvbiBjYW4gY2FsbCBpdHMgY29tcGxldGlvbiBoYW5kbGVy
IHN5bmNocm9ub3VzbHksCiAgICAgICAgICAgICAvLyB3aGljaCBtYWtlcyBVSVNjcmlwdENvbnRy
b2xsZXIgdW5oYXBweSAoc2VlIGJ1ZyAxNzI4ODQpLgpAQCAtMTE1Nyw3ICsxMTM4LDcgQEAgYm9v
bCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OmlzU2hvd2luZ0RhdGFMaXN0U3VnZ2VzdGlvbnMoKSBj
b25zdAogCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6c2V0S2V5Ym9hcmRJbnB1dE1vZGVJ
ZGVudGlmaWVyKEpTU3RyaW5nUmVmIGlkZW50aWZpZXIpCiB7Ci0gICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldEtleWJvYXJkSW5wdXRNb2RlSWRlbnRpZmllcih0b1dURlN0cmluZyh0
b1dLKGlkZW50aWZpZXIpKSk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEtl
eWJvYXJkSW5wdXRNb2RlSWRlbnRpZmllcih0b1dURlN0cmluZyhpZGVudGlmaWVyKSk7CiB9CiAK
IC8vIEZJWE1FOiBXcml0ZSB0aGlzIGluIHRlcm1zIG9mIEhJREV2ZW50R2VuZXJhdG9yIG9uY2Ug
d2Uga25vdyBob3cgdG8gcmVzZXQgY2FwcyBsb2NrIHN0YXRlCkBAIC0xMTc4LDcgKzExNTksNyBA
QCBib29sIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6a2V5Ym9hcmRJc0F1dG9tYXRpY2FsbHlTaGlm
dGVkKCkgY29uc3QKIAogSlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9sbGVySU9TOjphdHRhY2ht
ZW50SW5mbyhKU1N0cmluZ1JlZiBqc0F0dGFjaG1lbnRJZGVudGlmaWVyKQogewotICAgIGF1dG8g
YXR0YWNobWVudElkZW50aWZpZXIgPSB0b1dURlN0cmluZyh0b1dLKGpzQXR0YWNobWVudElkZW50
aWZpZXIpKTsKKyAgICBhdXRvIGF0dGFjaG1lbnRJZGVudGlmaWVyID0gdG9XVEZTdHJpbmcoanNB
dHRhY2htZW50SWRlbnRpZmllcik7CiAgICAgX1dLQXR0YWNobWVudCAqYXR0YWNobWVudCA9IFt3
ZWJWaWV3KCkgX2F0dGFjaG1lbnRGb3JJZGVudGlmaWVyOmF0dGFjaG1lbnRJZGVudGlmaWVyXTsK
ICAgICBfV0tBdHRhY2htZW50SW5mbyAqYXR0YWNobWVudEluZm8gPSBhdHRhY2htZW50LmluZm87
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJv
eHkubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tCmlu
ZGV4IDA2NzJiNTgxYmY2NWI1YWQ5YTJiODVmZWE4NjE2NDhmMjIzZWI0YzUuLjEwMjcyODg0MDg0
ZDJjMTAyMDhjZmEwNzE0ZjFiMTBjNWVmYzBhMGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5tbQpAQCAtMjcyLDIwICsyNzIsMTAgQEAgc3RhdGlj
IE5TVGltZUludGVydmFsIGFic29sdXRlVGltZUZvckV2ZW50VGltZShkb3VibGUgY3VycmVudEV2
ZW50VGltZSkKIAogRXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0Q29udHJv
bGxlciogdGVzdENvbnRyb2xsZXIpCiAgICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RDb250cm9s
bGVyKQotICAgICwgbV90aW1lKDApCi0gICAgLCBtX3Bvc2l0aW9uKCkKLSAgICAsIG1fbGVmdE1v
dXNlQnV0dG9uRG93bihmYWxzZSkKLSAgICAsIG1fY2xpY2tDb3VudCgwKQotICAgICwgbV9jbGlj
a1RpbWUoMCkKLSAgICAsIG1fY2xpY2tQb3NpdGlvbigpCi0gICAgLCBtX2NsaWNrQnV0dG9uKGtX
S0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbikKLSAgICAsIGV2ZW50TnVtYmVyKDApCiB7CiB9CiAK
LUV2ZW50U2VuZGVyUHJveHk6On5FdmVudFNlbmRlclByb3h5KCkKLXsKLX0KK0V2ZW50U2VuZGVy
UHJveHk6On5FdmVudFNlbmRlclByb3h5KCkgPSBkZWZhdWx0OwogCiB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKIHsKQEAgLTM5NCw3
ICszODQsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVGb3JjZUV2ZW50U3luY2hyb25vdXNseShOU0V2
ZW50ICpldmVudCkKIAogUmV0YWluUHRyPE5TRXZlbnQ+IEV2ZW50U2VuZGVyUHJveHk6OmJlZ2lu
UHJlc3N1cmVFdmVudChpbnQgc3RhZ2UpCiB7Ci0gICAgUmV0YWluUHRyPEV2ZW50U2VuZGVyU3lu
dGhldGljRXZlbnQ+IGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQg
YWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9u
LngsIG1fcG9zaXRpb24ueSkKKyAgICBhdXRvIGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVy
U3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQ
b2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAgICAgICAgZ2xvYmFsTG9jYXRpb246
KFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpIGNvbnZl
cnRSZWN0VG9TY3JlZW46TlNNYWtlUmVjdChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgMSwg
MSldLm9yaWdpbikKICAgICAgICAgc3RhZ2U6c3RhZ2UKICAgICAgICAgcHJlc3N1cmU6MC41CkBA
IC00MDksNyArMzk5LDcgQEAgUmV0YWluUHRyPE5TRXZlbnQ+IEV2ZW50U2VuZGVyUHJveHk6OmJl
Z2luUHJlc3N1cmVFdmVudChpbnQgc3RhZ2UpCiAKIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNl
bmRlclByb3h5OjpwcmVzc3VyZUNoYW5nZUV2ZW50KGludCBzdGFnZSwgZmxvYXQgcHJlc3N1cmUs
IEV2ZW50U2VuZGVyUHJveHk6OlByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsK
LSAgICBSZXRhaW5QdHI8RXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudD4gZXZlbnQgPSBhZG9wdE5T
KFtbRXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudCBhbGxvY10gaW5pdFByZXNzdXJlRXZlbnRBdExv
Y2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQorICAgIGF1dG8g
ZXZlbnQgPSBhZG9wdE5TKFtbRXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudCBhbGxvY10gaW5pdFBy
ZXNzdXJlRXZlbnRBdExvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlv
bi55KQogICAgICAgICBnbG9iYWxMb2NhdGlvbjooW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJW
aWV3KCktPnBsYXRmb3JtV2luZG93KCkgY29udmVydFJlY3RUb1NjcmVlbjpOU01ha2VSZWN0KG1f
cG9zaXRpb24ueCwgbV9wb3NpdGlvbi55LCAxLCAxKV0ub3JpZ2luKQogICAgICAgICBzdGFnZTpz
dGFnZQogICAgICAgICBwcmVzc3VyZTpwcmVzc3VyZQpAQCAtNDMxLDEwICs0MjEsMTAgQEAgdm9p
ZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlQ2xpY2soKQogewogICAgIHNlbmRNb3VzZURv
d25Ub1N0YXJ0UHJlc3N1cmVFdmVudHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdp
blByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxOU0V2ZW50
PiBwcmVGb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURp
cmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGZvcmNlQ2xpY2sg
PSBwcmVzc3VyZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFz
aW5nKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3Vy
ZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAg
ICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMSk7CisgICAgYXV0byBw
cmVGb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVj
dGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBmb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VF
dmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBy
ZWxlYXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VE
aXJlY3Rpb246OkRlY3JlYXNpbmcpOwogICAgIE5TRXZlbnQgKm1vdXNlVXAgPSBbTlNFdmVudCBt
b3VzZUV2ZW50V2l0aFR5cGU6TlNFdmVudFR5cGVMZWZ0TW91c2VVcAogICAgICAgICBsb2NhdGlv
bjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAgICAgICAgbW9kaWZp
ZXJGbGFnczowCkBAIC00NjgsOSArNDU4LDkgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzdGFy
dEFuZENhbmNlbE1vdXNlRm9yY2VDbGljaygpCiB7CiAgICAgc2VuZE1vdXNlRG93blRvU3RhcnRQ
cmVzc3VyZUV2ZW50cygpOwogCi0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGJlZ2luUHJlc3N1cmUg
PSBiZWdpblByZXNzdXJlRXZlbnQoMSk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGluY3JlYXNp
bmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rp
b246OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiByZWxlYXNpbmdQcmVzc3Vy
ZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3Jl
YXNpbmcpOworICAgIGF1dG8gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsK
KyAgICBhdXRvIGluY3JlYXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJl
c3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gcmVsZWFzaW5nUHJl
c3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpE
ZWNyZWFzaW5nKTsKICAgICBOU0V2ZW50ICptb3VzZVVwID0gW05TRXZlbnQgbW91c2VFdmVudFdp
dGhUeXBlOk5TRXZlbnRUeXBlTGVmdE1vdXNlVXAKICAgICAgICAgbG9jYXRpb246TlNNYWtlUG9p
bnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIG1vZGlmaWVyRmxhZ3M6MApA
QCAtNTAzLDkgKzQ5Myw5IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZURvd24o
KQogewogICAgIHNlbmRNb3VzZURvd25Ub1N0YXJ0UHJlc3N1cmVFdmVudHMoKTsKIAotICAgIFJl
dGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOwot
ICAgIFJldGFpblB0cjxOU0V2ZW50PiBwcmVGb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVu
dCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0gICAgUmV0YWluUHRy
PE5TRXZlbnQ+IGZvcmNlTW91c2VEb3duID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3Vy
ZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0g
YmVnaW5QcmVzc3VyZUV2ZW50KDEpOworICAgIGF1dG8gcHJlRm9yY2VDbGljayA9IHByZXNzdXJl
Q2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAg
IGF1dG8gZm9yY2VNb3VzZURvd24gPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJlQ2hh
bmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKIAogICAgIE5TVmlldyAqdGFyZ2V0VmlldyA9IFtt
X3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSBoaXRUZXN0Olti
ZWdpblByZXNzdXJlIGxvY2F0aW9uSW5XaW5kb3ddXTsKICAgICB0YXJnZXRWaWV3ID0gdGFyZ2V0
VmlldyA/IHRhcmdldFZpZXcgOiBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVZpZXcoKTsKQEAgLTUyNiw5ICs1MTYsOSBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1v
dXNlRm9yY2VEb3duKCkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlVXAoKQog
ewotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2
ZW50KDIpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBzdGFnZVR3b0V2ZW50ID0gcHJlc3N1cmVD
aGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7Ci0gICAg
UmV0YWluUHRyPE5TRXZlbnQ+IHN0YWdlT25lRXZlbnQgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEs
IFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJl
c3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMik7CisgICAgYXV0byBzdGFnZVR3b0V2ZW50ID0g
cHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2lu
Zyk7CisgICAgYXV0byBzdGFnZU9uZUV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVz
c3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CiAKICAgICAvLyBTaW5jZSBBcHBLaXQg
ZG9lcyBub3QgaW1wbGVtZW50IGZvcmNldXAvZG93biBhcyBtb3VzZSBldmVudHMsIHdlIG5lZWQg
dG8gc2VuZCB0d28gcHJlc3N1cmUgZXZlbnRzIHRvIGRldGVjdAogICAgIC8vIHRoZSBjaGFuZ2Ug
aW4gc3RhZ2UgdGhhdCBtYXJrcyB0aG9zZSBtb21lbnRzLgpAQCAtNTUxLDggKzU0MSw4IEBAIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZUNoYW5nZWQoZmxvYXQgZm9yY2UpCiB7CiAg
ICAgaW50IHN0YWdlID0gZm9yY2UgPCAxID8gMSA6IDI7CiAgICAgZmxvYXQgcHJlc3N1cmUgPSBm
b3JjZSA8IDEgPyBmb3JjZSA6IGZvcmNlIC0gMTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVn
aW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudChzdGFnZSk7Ci0gICAgUmV0YWluUHRyPE5T
RXZlbnQ+IHByZXNzdXJlQ2hhbmdlZEV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudChzdGFnZSwg
cHJlc3N1cmUsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRv
IGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoc3RhZ2UpOworICAgIGF1dG8gcHJl
c3N1cmVDaGFuZ2VkRXZlbnQgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KHN0YWdlLCBwcmVzc3VyZSwg
UHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwogCiAgICAgTlNWaWV3ICp0YXJn
ZXRWaWV3ID0gW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygp
IGhpdFRlc3Q6W2JlZ2luUHJlc3N1cmUgbG9jYXRpb25JbldpbmRvd11dOwogICAgIHRhcmdldFZp
ZXcgPSB0YXJnZXRWaWV3ID8gdGFyZ2V0VmlldyA6IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJW
aWV3KCktPnBsYXRmb3JtVmlldygpOwpAQCAtNjExLDggKzYwMSw3IEBAIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKIAogdm9pZCBFdmVudFNlbmRl
clByb3h5OjprZXlEb3duKFdLU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmll
cnMsIHVuc2lnbmVkIGtleUxvY2F0aW9uKQogewotICAgIE5TU3RyaW5nKiBjaGFyYWN0ZXIgPSBb
TlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6dG9TVEQoa2V5KS5jX3N0cigpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOltOU1N0cmluZyBkZWZhdWx0Q1N0cmlu
Z0VuY29kaW5nXV07CisgICAgTlNTdHJpbmcqIGNoYXJhY3RlciA9IHRvV1RGU3RyaW5nKGtleSk7
CiAKICAgICBOU1N0cmluZyAqZXZlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CiAgICAgdW5zaWdu
ZWQgc2hvcnQga2V5Q29kZSA9IDA7CkBAIC04MzIsNyArODIxLDcgQEAgdm9pZCBFdmVudFNlbmRl
clByb3h5OjprZXlEb3duKFdLU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmll
cnMsIHVuc2kKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KGludCB4LCBp
bnQgeSkKIHsKLSAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4gY2dTY3JvbGxFdmVudCA9IGFkb3B0
Q0YoQ0dFdmVudENyZWF0ZVNjcm9sbFdoZWVsRXZlbnQyKDAsIGtDR1Njcm9sbEV2ZW50VW5pdExp
bmUsIDIsIHksIHgsIDApKTsKKyAgICBhdXRvIGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENHRXZl
bnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAyLCB5
LCB4LCAwKSk7CiAKICAgICAvLyBTZXQgdGhlIENHRXZlbnQgbG9jYXRpb24gaW4gZmxpcHBlZCBj
b29yZHMgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IHNjcmVlbiwgd2hpY2gKICAgICAvLyBjb21wZW5z
YXRlcyBmb3IgdGhlIGJlaGF2aW9yIG9mICtbTlNFdmVudCBldmVudFdpdGhDR0V2ZW50Ol0gd2hl
biB0aGUgZXZlbnQgaGFzCkBAIC04NTksNyArODQ4LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5
Ojpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiAKIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhh
c2VzKGludCB4LCBpbnQgeSwgaW50IHBoYXNlLCBpbnQgbW9tZW50dW0pCiB7Ci0gICAgUmV0YWlu
UHRyPENHRXZlbnRSZWY+IGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGVTY3Jv
bGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAyLCB5LCB4LCAwKSk7Cisg
ICAgYXV0byBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxF
dmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkpOwogCiAgICAgLy8g
U2V0IHRoZSBDR0V2ZW50IGxvY2F0aW9uIGluIGZsaXBwZWQgY29vcmRzIHJlbGF0aXZlIHRvIHRo
ZSBmaXJzdCBzY3JlZW4sIHdoaWNoCiAgICAgLy8gY29tcGVuc2F0ZXMgZm9yIHRoZSBiZWhhdmlv
ciBvZiArW05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpdIHdoZW4gdGhlIGV2ZW50IGhhcwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1t
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCmluZGV4
IDY0MTc4MmNhOTdlMWRhZmI5MDA5MTlkYjE5YjM0NzRhNTU0Mzg4ZTUuLjVhNGU5NmI4MWVhOGNk
YTA2YjM3YjQ2OGU1ODg1OWVmNzFlYjQ2YjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KQEAgLTY0LDcgKzY0LDcgQEAgUGxhdGZvcm1X
ZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tXZWJWaWV3Q29uZmlndXJhdGlvbiogY29uZmlndXJh
dGlvbiwgY29uc3QgVGUKICAgICBpZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSkKICAg
ICAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0VmFsdWU6QFlF
UyBmb3JLZXk6QCJXZWJLaXQyVXNlUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEiXTsKIAotICAg
IFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb3BpZWRDb25maWd1cmF0aW9uID0g
YWRvcHROUyhbY29uZmlndXJhdGlvbiBjb3B5XSk7CisgICAgYXV0byBjb3BpZWRDb25maWd1cmF0
aW9uID0gYWRvcHROUyhbY29uZmlndXJhdGlvbiBjb3B5XSk7CiAgICAgV0tQcmVmZXJlbmNlc1Nl
dFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29w
aWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9s
bGluZyk7CiAKICAgICBOU1JlY3QgcmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgVGVzdENvbnRyb2xs
ZXI6OnZpZXdXaWR0aCwgVGVzdENvbnRyb2xsZXI6OnZpZXdIZWlnaHQpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQppbmRleCAxNGI3ZGM5ZDBm
MjRlYzEwZTc4YWMyYjBlMDM2NWE5ZWE2NDlhYjI2Li5iMjIyODcxY2QwYTM5MTllMzNlZDYwNmQw
ZjQ0MTY4ODU2OTNhMjA1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9U
ZXN0Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0
Q29udHJvbGxlck1hYy5tbQpAQCAtMTg0LDcgKzE4NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0
ZXN0CiAgICAgaWYgKCF0ZXN0LnVybENvbnRhaW5zKCJjb250ZW50ZXh0ZW5zaW9ucy8iKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB0ZXN0VVJMID0gYWRvcHRD
RihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0ZXN0LnVybCgpKSk7CisgICAg
YXV0byB0ZXN0VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCB0ZXN0LnVybCgpKSk7CiAgICAgTlNVUkwgKmZpbHRlclVSTCA9IFsoX19icmlkZ2UgTlNVUkwg
Kil0ZXN0VVJMLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aEV4dGVuc2lvbjpAImpzb24iXTsKIAog
ICAgIF9fYmxvY2sgTlNTdHJpbmcgKmNvbnRlbnRFeHRlbnNpb25TdHJpbmc7CkBAIC0zNzEsMTQg
KzM3MSwxNCBAQCBzdGF0aWMgTlNTZXQgKnN5c3RlbUhpZGRlbkZvbnRGYW1pbHlTZXQoKQogCiBz
dGF0aWMgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gZ2VuZXJhdGVGb250QWxsb3dMaXN0KCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS011
dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0V0soV0tNdXRhYmxl
QXJyYXlDcmVhdGUoKSk7CiAgICAgZm9yIChOU1N0cmluZyAqZm9udEZhbWlseSBpbiBhbGxvd2Vk
Rm9udEZhbWlseVNldCgpKSB7CiAgICAgICAgIE5TQXJyYXkgKmZvbnRzRm9yRmFtaWx5ID0gW1tO
U0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBhdmFpbGFibGVNZW1iZXJzT2ZGb250RmFt
aWx5OmZvbnRGYW1pbHldOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmFtaWx5
SW5Gb250ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhbZm9udEZhbWls
eSBVVEY4U3RyaW5nXSkpOworICAgICAgICBhdXRvIGZhbWlseUluRm9udCA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW2ZvbnRGYW1pbHkgVVRGOFN0cmluZ10pKTsKICAg
ICAgICAgV0tBcnJheUFwcGVuZEl0ZW0ocmVzdWx0LmdldCgpLCBmYW1pbHlJbkZvbnQuZ2V0KCkp
OwogICAgICAgICBmb3IgKE5TQXJyYXkgKmZvbnRJbmZvIGluIGZvbnRzRm9yRmFtaWx5KSB7CiAg
ICAgICAgICAgICAvLyBGb250IG5hbWUgaXMgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBhcnJheS4K
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb250TmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW1tmb250SW5mbyBvYmplY3RBdEluZGV4OjBd
IFVURjhTdHJpbmddKSk7CisgICAgICAgICAgICBhdXRvIGZvbnROYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhbW2ZvbnRJbmZvIG9iamVjdEF0SW5kZXg6MF0gVVRG
OFN0cmluZ10pKTsKICAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdC5nZXQoKSwg
Zm9udE5hbWUuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzk0LDcgKzM5NCw3IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQogICAgIC8vIFRl
c3RpbmcgdXNlcyBhIHByaXZhdGUgc2Vzc2lvbiwgd2hpY2ggaXMgbWVtb3J5IG9ubHkuIEhvd2V2
ZXIgY3JlYXRpbmcgb25lIGluc3RhbnRpYXRlcyBhIHNoYXJlZCBOU1VSTENhY2hlLAogICAgIC8v
IGFuZCBpZiB3ZSBoYXZlbid0IGNyZWF0ZWQgb25lIHlldCwgdGhlIGRlZmF1bHQgb25lIHdpbGwg
YmUgY3JlYXRlZCBvbiBkaXNrLgogICAgIC8vIE1ha2luZyB0aGUgc2hhcmVkIGNhY2hlIG1lbW9y
eS1vbmx5IGF2b2lkcyB0b3VjaGluZyB0aGUgZmlsZSBzeXN0ZW0uCi0gICAgUmV0YWluUHRyPE5T
VVJMQ2FjaGU+IHNoYXJlZENhY2hlID0KKyAgICBhdXRvIHNoYXJlZENhY2hlID0KICAgICAgICAg
YWRvcHROUyhbW05TVVJMQ2FjaGUgYWxsb2NdIGluaXRXaXRoTWVtb3J5Q2FwYWNpdHk6MTAyNCAq
IDEwMjQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlza0NhcGFjaXR5
OjAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tQYXRoOm5p
bF0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250
cm9sbGVyTWFjLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xs
ZXJNYWMuaAppbmRleCAwZWFiODk0OWU2YmViZmVlNjU5NDc1ODlhZmI5ZThkOWI4YmUxZWM3Li4y
ZDJkMWQ2Yjg0NmU2ODc4YjBiMWViZGMxNjY3YzE3NWU5MTU2NjVmIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaApAQCAtMzEsMTMg
KzMxLDE0IEBAIE9CSkNfQ0xBU1MgV0tXZWJWaWV3OwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xh
c3MgVUlTY3JpcHRDb250cm9sbGVyTWFjIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29h
IHsKK2NsYXNzIFVJU2NyaXB0Q29udHJvbGxlck1hYyBmaW5hbCA6IHB1YmxpYyBVSVNjcmlwdENv
bnRyb2xsZXJDb2NvYSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVy
TWFjKFVJU2NyaXB0Q29udGV4dCYgY29udGV4dCkKICAgICAgICAgOiBVSVNjcmlwdENvbnRyb2xs
ZXJDb2NvYShjb250ZXh0KQogICAgIHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCByZXBs
YWNlVGV4dEF0UmFuZ2UoSlNTdHJpbmdSZWYsIGludCwgaW50KSBvdmVycmlkZTsKICAgICB2b2lk
IHpvb21Ub1NjYWxlKGRvdWJsZSwgSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgZG91YmxlIHpv
b21TY2FsZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjIsNyArNjMsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFjdGl2YXRlQXRQb2ludChsb25nIHgsIGxvbmcgeSwgSlNWYWx1ZVJlZiBjYWxsYmFj
aykgb3ZlcnJpZGU7CiAKLXByaXZhdGU6CiAgICAgTlNUYWJsZVZpZXcgKmRhdGFMaXN0U3VnZ2Vz
dGlvbnNUYWJsZVZpZXcoKSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQppbmRleCBjZDExMzI5YTY1NDFkN2I0
ZWI3N2Q3ZWMxNDY4OGU5OTIxZjI3YzUzLi5iNWNiNTE4MTUwNTllN2EwOTNhMTQyMzk5MWU4OTE3
ZTNlZDMwOTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlw
dENvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3Jp
cHRDb250cm9sbGVyTWFjLm1tCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBVSVNjcmlwdENvbnRy
b2xsZXJNYWM6OmNvbXBsZXRlQmFja1N3aXBlKEpTVmFsdWVSZWYgY2FsbGJhY2spCiAKIHZvaWQg
VUlTY3JpcHRDb250cm9sbGVyTWFjOjpwbGF5QmFja0V2ZW50U3RyZWFtKEpTU3RyaW5nUmVmIGV2
ZW50U3RyZWFtLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gc3RyZWFtID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBldmVudFN0cmVhbSkpOworICAgIGF1dG8gc3RyZWFtID0gYWRvcHRDRihKU1N0cmlu
Z0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBldmVudFN0cmVhbSkpOwogICAgIHBs
YXlCYWNrRXZlbnRzKHdlYlZpZXcoKSwgbV9jb250ZXh0LCAoX19icmlkZ2UgTlNTdHJpbmcgKilz
dHJlYW0uZ2V0KCksIGNhbGxiYWNrKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409868</attachid>
            <date>2020-09-27 21:47:45 -0700</date>
            <delta_ts>2020-09-27 23:26:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200927214743.patch</filename>
            <type>text/plain</type>
            <size>704766</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJmZWY0NTFlYS4u
ZjMwMjBmNzM4YzdlNmQ0ZTY0OTQwNDBiZTVlMzUyNGZkMTdkNGMyMiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2MCBAQAorMjAy
MC0wOS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlm
eWluZywgYnV0IGV2ZW4gbW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVz
dAorICAgICAgICBjb2RlIGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkg
YW5kIHBhc3RlIHJhdGhlciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0
ZXIgdGhlIHJlZmFjdG9yaW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlz
IGNvZGUgaXMgd3JpdHRlbiB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGlu
ZyBmb3IgZWFjaCBmdW5jdGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpt
YWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAo
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0Ns
YXNzIHdpdGggdGhpcy4gUmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBj
bGVhciB0aGlzIHBhc3NlcyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJv
dmUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNw
cDoKKyAgICAgICAgKHVpRWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBS
ZW1vdmVkIHVubmVlZGVkIGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3
aGljaCBzdGFydHMgb3V0IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5n
cy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBl
Q29uc3RydWN0b3IpOiBVc2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAg
ICAgICAoX3JldHVybkV4cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0ND
b250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxl
cik6IERlbGV0ZWQuCisgICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2Ug
YW5kIGF1dG8uCisgICAgICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERp
dHRvLgorICAgICAgICAoZ2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAg
IChHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6
IFJlcGxhY2VkIGdldEpTQ2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFp
blB0ciB0byBtYWtlIGl0IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVy
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0
aGUgYWJvdmUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAg
ICAgICAgKGVuY29kZUhvc3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAg
ICAgIChleGVjQ29tbWFuZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2Fs
bGJhY2spOiBEaXR0by4KKyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRv
LgorICAgICAgICAob3ZlcnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAg
KHF1ZXVlTG9hZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5n
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3Qp
OiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVh
dGVKU0NsYXNzKTogUmVwbGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAg
ICAgIEpTUmV0YWluUHRyIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRv
IHRoZSBjYWxsZXIuCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJl
dHVybiB2YWx1ZSBjb25zdCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMp
OiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmly
ZWQpOiBTaW1wbGlmaWVkIHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2spOiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAor
ICAgICAgICB0YWJsZSB2YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBu
ZWVkIHRvIGJlIG9iamVjdHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNh
bGxiYWNrKTogRGl0dG8uCisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxs
YmFja3MpOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTog
VXNlIGFycmF5TGVuZ3RoLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDog
VXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnBsYXRmb3JtTmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAg
ICAgICAoY3JlYXRlRW1wdHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmlu
Zy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJ
RWxlbWVudHMpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkRvY3VtZW50TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8u
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
SGVhZGVycyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ29sdW1ucyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mUm93cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8u
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5o
OiBSZW1vdmVkIHVubmVlZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGgu
CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIg
SlNWYWx1ZUlzT2JqZWN0LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnBsYXRmb3JtTmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAo
Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1l
dGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBS
ZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09i
amVjdC4KKyAgICAgICAgKHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVy
aWEpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxp
dHlWYWx1ZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERl
bGVnYXRlIGRpZENsZWFyV2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6Cisg
ICAgICAgIFVzZSBhdXRvLiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0
LiBTaW1wbGlmaWVkIG9iamVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0
TlMgaW5zdGVhZCBvZiByZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRD
bGVhcldpbmRvd09iamVjdEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNl
IGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW06CisgICAgICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVu
Z3RoLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNw
cDoKKyAgICAgICAgKEZyYW1lTG9hZERlbGVnYXRlOjpkaWRDbGVhcldpbmRvd09iamVjdEZvckZy
YW1lSW5TdGFuZGFyZFdvcmxkKToKKyAgICAgICAgUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFr
ZVdpbmRvd09iamVjdC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dP
YmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXh0SW5wdXRD
b250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKTogUmVwbGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMu
IFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRyIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNz
ZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisgICAgICAgIChUZXh0SW5wdXRDb250cm9sbGVy
OjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25zdCouCisgICAgICAgIChUZXh0
SW5wdXRDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS93aW4vVGV4dElucHV0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciBhYm92ZS4K
KworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwOgorICAg
ICAgICAoV1RSOjp0b09wdGlvbmFsQm9vbCk6IFJlbmFtZWQgZnJvbSBKU1ZhbHVlTWFrZUJvb2xl
YW5Pck51bGwuCisgICAgICAgIChXVFI6OnRvT3B0aW9uYWxEb3VibGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6bWFrZVZhbHVlKTogQWRkZWQgd2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlw
ZXMuCisgICAgICAgIFJlcGxhY2VkIEpTVmFsdWVUb051bGxhYmxlQm9vbGVhbiBhbmQgSlNWYWx1
ZU1ha2VTdHJpbmdPck51bGwuCisgICAgICAgIChXVFI6OmNyZWF0ZUpTU3RyaW5nKTogQWRkZWQg
d2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlwZXMuCisgICAgICAgIChXVFI6OnByb3BlcnR5
KTogQWRkZWQuCisgICAgICAgIChXVFI6OnN0cmluZ1Byb3BlcnR5KTogQWRkZWQuCisgICAgICAg
IChXVFI6OmJvb2xlYW5Qcm9wZXJ0eSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpudW1lcmljUHJv
cGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6b2JqZWN0UHJvcGVydHkpOiBSZWZhY3RvcmVk
IHRvIGNhbGwgcHJvcGVydHkuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogQWRkZWQuCisg
ICAgICAgIChXVFI6OnNldEdsb2JhbE9iamVjdFByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChX
VFI6OmNhbGwpOiBSZWZhY3RvcmVkIHRvIGxldCBvYmplY3RQcm9wZXJ0eSBkbyBtb3JlIG9mIHRo
ZSBudWxsIGNoZWNraW5nLgorICAgICAgICAoV1RSOjpjYWxsQ29uc3RydWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmg6IFVwZGF0ZWQg
Zm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNX
cmFwcGFibGUuaDogUmVkdWNlZCBpbmNsdWRlcyBhIGJpdC4KKworICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmg6IEFkZGVkIHNldEdsb2JhbE9iamVjdFByb3Bl
cnR5LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250ZXh0LmNwcDoKKyAgICAgICAgKFVJU2NyaXB0Q29udGV4dDo6VUlTY3JpcHRDb250ZXh0
KTogUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFVJ
U2NyaXB0Q29udGV4dDo6cnVuVUlTY3JpcHQpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAg
IChVSVNjcmlwdENvbnRleHQ6Om9iamVjdEZyb21SZWN0IGNvbnN0KTogVXNlIHNldFByb3BlcnR5
LgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBUZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwOgorICAg
ICAgICAoV1RSOjp0b0RldmljZU9yaWVudGF0aW9uKTogVXNlIGNyZWF0ZUpTU3RyaW5nIGFuZCBK
U1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nLgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIu
bW06CisgICAgICAgICgtW0xheW91dFRlc3RTcGVsbENoZWNrZXIgc2V0UmVzdWx0c0Zyb21KU1Zh
bHVlOmluQ29udGV4dDpdKTogVXNlIGNyZWF0ZUpTU3RyaW5nCisgICAgICAgIGFuZCByZW1vdmVk
IHVubmVlZGVkIHVzZSBvZiBscm91bmRsLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9E
aWN0aW9uYXJ5RnVuY3Rpb25zLmg6IEFkZGVkLiBDb250YWlucyBjb252ZW5pZW5jZSBmdW5jdGlv
bnMKKyAgICAgICAgZm9yIGRlYWxpbmcgd2l0aCBXS0RpY3Rpb25hcnlSZWYuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaDogSW5pdGlhbGl6ZSBkYXRhIG1l
bWJlcnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmNwcDoKKyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbik6
IFVzZSBPcHRpb25hbCBpbnN0ZWFkIG9mIHNlcGFyYXRlIGJvb2wuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oOiBVcGRhdGVkIGZvciB0aGUgYWJv
dmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtOgor
ICAgICAgICAoX2dlbmVyYXRlSW1wbGVtZW50YXRpb25GaWxlKTogVXNlIHN0YXRpYyBpbml0aWFs
aXphdGlvbiBhbmQgYSBsYW1iZGEgaW5zdGVhZCBvZgorICAgICAgICBhbiBpZiBzdGF0ZW1lbnQg
dG8gaW5pdGlhbGl6ZS4KKyAgICAgICAgKF9wbGF0Zm9ybVR5cGVDb25zdHJ1Y3Rvcik6IFVzZSB0
b09wdGlvbmFsQm9vbCBhbmQgY3JlYXRlSlNTdHJpbmcuIEFsc28gYWRkZWQKKyAgICAgICAgc3Vw
cG9ydCBmb3IgbnVsbGFibGUgZG91YmxlcyBhbmQgdXNlZCBhdXRvIGEgYml0IG1vcmUuCisgICAg
ICAgIChfcmV0dXJuRXhwcmVzc2lvbik6IFVzZSBtYWtlVmFsdWUuCisKKyAgICAgICAgKiBJbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDogTWFkZSB0aGUgb3B0aW9uYWwgYXJn
dW1lbnRzIHRvIHRoZQorICAgICAgICBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiBmdW5jdGlv
biAiZG91YmxlPyIgaW5zdGVhZCBvZiAib2JqZWN0Ii4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXVFI6OmdldE1lbnVJdGVtQ2hpbGRyZW5DYWxsYmFjayk6IFVzZSBhdXRvIGFuZCBub3QgSlNW
YWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IE1vdmVkIHRvIEpTQmFz
aWNzLmgvY3BwLgorICAgICAgICAoV1RSOjpwYXJzZVRvdWNoTW9kaWZpZXIpOiBBZGRlZC4gRmFj
dG9yZWQgb3V0IG9mIHRoZQorICAgICAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3Vj
aE1vZGlmaWVyIGZ1bmN0aW9uLgorICAgICAgICAoV1RSOjpwYXJzZU1vZGlmaWVyQXJyYXkpOiBV
c2UgY3JlYXRlSlNTdHJpbmcgYW5kIHJlbW92ZSB1bm5lZWRlZCBpZ25vcmVkCisgICAgICAgIGV4
Y2VwdGlvbiBvdXQgYXJndW1lbnQsIHNpbmNlIHRoYXQgaXMgb3B0aW9uYWwuIEFsc28gYWRkZWQg
b3ZlcmxvYWQgdGhhdAorICAgICAgICBnZXRzIHRoZSBjb250ZXh0LgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNlbmRpbmdDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KTog
VXNlIGFkb3B0V0sgYW5kIHNldFZhbHVlLiBSZXR1cm4gYSBXS1JldGFpblB0ci4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKTogVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
b3VzZVVwKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1v
dXNlTW92ZVRvKTogVXNlIHNldFZhbHVlIGFuZAorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZXMuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9y
Y2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpz
dGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlRG93bik6IERpdHRvLgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlVXApOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNoYW5nZWQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bGVhcEZvcndhcmQpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hy
b25vdXNDbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OmNyZWF0ZUtl
eURvd25NZXNzYWdlQm9keSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6a2V5RG93bik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25v
dXNLZXlEb3duKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9s
bEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMpOiBVc2UKKyAgICAgICAgc2V0VmFsdWUgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
Y29udGludW91c01vdXNlU2Nyb2xsQnkpOiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpjb250ZXh0Q2xpY2spOiBVc2UgYXV0byBhbmQgbm90IEpTVmFsdWVUb09iamVjdC4KKyAg
ICAgICAgKFdUUjo6dG9Nb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKTogVXNlIGJvb2xlYW5Qcm9w
ZXJ0eS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6YWRkVG91Y2hQb2lu
dCk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAg
IChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcik6
IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaFBv
aW50UmFkaXVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnRvdWNoU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6dG91Y2hNb3ZlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoRW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoQ2FuY2VsKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmNsZWFyVG91Y2hQb2ludHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6cmVsZWFzZVRvdWNoUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FuY2VsVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNl
dEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUu
CisgICAgICAgIERlbGV0ZWQgdmFyaW91cyB1bm5lZWRlZCBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXVFI6OkdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdUUjo6R0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6R0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFBy
b3BlcnR5LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0Nv
bnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICBBbHNvIG1hcmtlZCB0
aGUgY2xhc3MgZmluYWwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRp
ZENyZWF0ZVBhZ2UpOiBVc2UgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6cmVwb3J0TGl2ZURvY3VtZW50cyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSk6IFVzZSBk
aWN0aW9uYXJ5VmFsdWUsCisgICAgICAgIGJvb2xlYW5WYWx1ZSwgcG9zdFBhZ2VNZXNzYWdlLCB2
YWx1ZSwgYW5kIG1vcmUgdG8gc3RyZWFtbGluZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGU6OmJvb2xlYW5Gb3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZTo6c3RyaW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OmJlZ2luVGVzdGluZyk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlOjpkb25lKTogVXNlIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6Y2xvc2VPdGhlclBhZ2VzKTogVXNlIHNldFZhbHVlIGFuZCB0b1dLLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6ZHVtcFRvU3RkRXJyKTogVXNlIHBvc3RQYWdlTWVzc2FnZQor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dCk6IFVzZSB0b1dLLgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVl
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBv
c3RBZGRDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdEZvY3VzV2ViVmlldyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdFNldEJhY2tpbmdTY2FsZUZhY3Rvcik6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdFNldFdpbmRvd0lzS2V5KTogVXNlIHRvV0suCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0Vmlld1NpemUpOiBVc2Ugc2V0VmFs
dWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2ltdWxhdGVX
ZWJOb3RpZmljYXRpb25DbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0QWRkc1Zpc2l0ZWRMaW5rcyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bik6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLAorICAgICAgICBhbmQgdXNlIE9w
dGlvbmFsIGluc3RlYWQgb2YgYm9vbC9kb3VibGUgcGFpcnMuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IpOiBV
c2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aXNHZW9s
b2NhdGlvblByb3ZpZGVyQWN0aXZlIGNvbnN0KTogVXNlIHRvV0sgYW5kIGJvb2xlYW5WYWx1ZS4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJv
YXJkIGNvbnN0KTogVXNlIHRvV0sgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVybWlzc2lvbik6IFVzZSBwb3N0UGFnZU1lc3NhZ2Uu
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcnNp
c3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKTogVXNlIHNldFZhbHVlCisgICAgICAgIGFuZCBwb3N0
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjp1c2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JP
cmlnaW4pOiBVc2V0IHNldFZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKTogVXNlIHNldFZh
bHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpz
ZXRIaWRkZW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldENhY2hl
TW9kZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nl
c3NXb3JrUXVldWUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6cHJvY2Vzc1dvcmtRdWV1ZSk6IFVzZSBwb3N0UGFnZU1lc3Nh
Z2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUZvcndhcmROYXZpZ2F0
aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWQpOiBV
c2Ugc2V0VmFsdWUgYW5kIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnF1ZXVlUmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpxdWV1ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
TWVzc2FnZSk6IEFkZGVkLiBPdmVybG9hZHMgZm9yIG1hbnkgdHlwZXMgdG8ga2VlcCBjYWxsZXIg
Y29kZSBzdHJlYW1saW5lZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0UGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6IFVwZGF0ZWQgZm9y
IHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6cHJvcGVydHlWYWx1ZSk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6OnByb3BlcnR5VmFsdWVEb3VibGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6cHJvcGVydHlW
YWx1ZUludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpudW1lcmljV2luZG93UHJvcGVydHkpOiBS
ZW5hbWVkIGZyb20gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUgZm9yIGJyZXZpdHkKKyAgICAg
ICAgYW5kIGZvciBjb25zaXN0ZW5jeSB3aXRoIEpTQmFzaWNzLmggZnVuY3Rpb25zLgorICAgICAg
ICAoV1RSOjpkdW1wUGF0aCk6IFVzZSBzdHJpbmdQcm9wZXJ0eSwgb2JqZWN0UHJvcGVydHksIGFu
ZCBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpyYW5nZVRvU3RyKTogVXNlIGF1dG8sIG51bWVy
aWNQcm9wZXJ0eSwgYW5kIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Ok5hdmlnYXRpb25UeXBl
VG9TdHJpbmcpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVuYW1lZCBmcm9t
IHNlY3VyaXR5T3JpZ2luVG9TdHIuIFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpmcmFt
ZVRvU3RyKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6cmVz
ZXRBZnRlclRlc3QpOiBSZW1vdmVkIHVubmVlZGVkIGxvY2FsLgorICAgICAgICAoV1RSOjpkdW1w
RnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCk6IFVzZSBhdXRvLgorICAgICAg
ICAoV1RSOjpkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogRGl0
dG8uCisgICAgICAgIChXVFI6OmR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OmR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKTogVXBkYXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdUUjo6dG9KUyk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6Omhhc0RvY3VtZW50RWxlbWVudCk6IFVzZSBvYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKTogVXNlIHNldEds
b2JhbE9iamVjdFByb3BlcnR5LAorICAgICAgICBhbmQgcGFzcyBmZXdlciBhcmd1bWVudHMgdG8g
bWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKTogU3RyZWFtbGluZSBjb2RlIGEgYml0LgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKTog
VXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Omxhc3RGaWxlVVJMUGF0aENvbXBvbmVudCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNi
YXJUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVh
Y2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGluZyk6IERpdHRv
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcik6IFVzZSB0b1dLLgor
ICAgICAgICAoV1RSOjpwYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6Om1haW5GcmFtZSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjptYWluSlNDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmRpc3BsYXkpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheUFuZFRyYWNrUmVwYWludHMpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6dG9X
Syk6IEFkZGVkIG92ZXJsb2FkIGZvciBkb3VibGUuCisgICAgICAgIChXVFI6OmNyZWF0ZVdLRGlj
dGlvbmFyeSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0
aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbik6IEFkZGVkLgorICAgICAgICAo
V1RSOjpwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NCk6IEFkZGVkLgor
ICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRk
ZWQuCisgICAgICAgIChXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IEFkZGVkLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wUGl4ZWxzIGNvbnN0KTogVXNlIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXREdW1wUGl4ZWxzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OndoYXRUb0R1bXAgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2hhdFRvRHVt
cCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRXYWl0VW50aWxEb25lKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNob3VsZFdhaXRVbnRpbERvbmUgY29uc3QpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlwdCk6IFVzZSBwYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpleGVjQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpmaW5k
T3B0aW9uc0Zyb21BcnJheSk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgYW5kIGNy
ZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNl
IHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmdNYXRjaGVzSW5QYWdl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0
SW5kaWNlcyk6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBhcnJheUxlbmd0aCBhbmQKKyAgICAgICAg
cmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIHN0ZDo6cm91bmQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk6IFVzZSBwYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVt
U2l6ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hl
RGlza1VzYWdlRm9yT3JpZ2luKTogRGl0dG8uCisgICAgICAgIChXVFI6OnN0cmluZ0FycmF5VG9K
Uyk6IFR3ZWFrZWQgY29kaW5nIHN0eWxlIGEgYml0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1lZGlhRGV2aWNl
c0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViUlRDTURO
U0lDRUNhbmRpZGF0ZXNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldEN1c3RvbVVzZXJBZ2VudCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdl
YkdMMkVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V3JpdGFi
bGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGUpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9u
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1
bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRQbHVnaW5zRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUpOiBVc2UgbWFpbkZyYW1lLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIpOiBSZW1vdmVkIGxvY2FsLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBdWRpb1Jlc3VsdCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6IFVzZSBwYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9i
amVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9y
KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9y
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKTog
VXNlIHJhbmdlLWJhc2VkIGZvciBsb29wLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24pOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5h
dmlnYXRpb24gY29uc3QpOgorICAgICAgICBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbik6CisgICAgICAgIFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y2FjaGVUZXN0UnVubmVy
Q2FsbGJhY2spOiBDaGFuZ2VkIG1hcCB0byBzdG9yZSBvYmplY3RzIGluc3RlYWQgb2YgdmFsdWVz
LgorICAgICAgICAoV1RSOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogU2ltcGxpZnkgc2luY2Ug
bWFwIGhhcyBvYmplY3RzLiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYXJUZXN0UnVubmVyQ2FsbGJhY2tzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T25seUFjY2VwdEZpcnN0UGFydHlD
b29raWVzKTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFVzZXJTdHlsZVNoZWV0RW5hYmxlZCk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24pOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsV2ViTm90
aWZpY2F0aW9uUGVybWlzc2lvbnMpOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6c2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBPcHRp
b25hbDxkb3VibGU+IGluc3RlYWQgb2YgYm9vbC9kb3VibGUKKyAgICAgICAgcGFpcnMsIGxldHRp
bmcgdGhlIElETCBiaW5kaW5ncyBkbyB0aGUgd29yayBmb3IgdXMuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFJl
bW92ZWQgbG9jYWwuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzRG9pbmdNZWRpYUNhcHR1
cmUgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlz
c2lvbkZvck9yaWdpbik6IFJlbW92ZWQgbG9jYWxzLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojp1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RDb3VudEZvck9yaWdpbik6IERJdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjYWxs
U2hvdWxkQ2xvc2VPbldlYlZpZXcpOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpxdWV1ZUxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IFJlbW92ZWQgYSBsb2NhbC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXMpOgorICAgICAgICBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQgY29uc3QpOiBVc2Ug
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKTogVXNlIG1h
aW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGls
ZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlv
bik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVOYXZp
Z2F0aW9uUG9saWN5QWZ0ZXJEZWxheSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNF
bmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldElnbm9yZXNWaWV3
cG9ydFNjYWxlTGltaXRzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNo
b3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0KTogVXNlIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHRJbW1lZGlhdGVseSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdENhbGxiYWNrKTog
VXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldEFsbG93ZWRN
ZW51QWN0aW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwKKyAgICAgICAgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbEN1c3Rv
bU1lbnVBY3Rpb24pOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvZXNTdGF0aXN0aWNzRG9tYWluSURF
eGlzdEluRGF0YWJhc2UpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
RW5hYmxlZCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppc1N0YXRpc3RpY3NFcGhlbWVyYWwpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzRGVidWdNb2RlKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRXhwaXJlZFN0
YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NWZXJ5UHJldmFs
ZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKTogVXNlIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZUlUUERh
dGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0dy
YW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Rp
ZFJ1blRlbGVtZXRyeUNhbGxiYWNrKTogVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSk6IFVzZSBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJpbmdUaW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NNYXhTdGF0aXN0aWNzRW50cmllcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKTog
VXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURh
dGFSZW1vdmFsKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NE
ZWxldGVDb29raWVzRm9ySG9zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UpOiBVc2UgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXApOiBVc2UgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aGFzU3RhdGlzdGljc0lzb2xh
dGVkU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlcik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NT
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmdldEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6Om1ha2VEb21haW5zVmFs
dWUpOiBGYWN0b3JlZCBvdXQuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2spOiBV
c2UgbWFrZURvbWFpbnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bG9hZGVkU3Vi
cmVzb3VyY2VEb21haW5zKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKTogVXNl
IG1ha2VEb21haW5zVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFkZE1vY2tNZWRp
YURldmljZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjbGVhck1vY2tNZWRpYURldmljZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6cmVtb3ZlTW9ja01lZGlhRGV2aWNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnJlc2V0TW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQpOiBV
c2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCk6IFVzZSBwb3N0U3luY2hy
b25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dh
bWVwYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRE
ZXRhaWxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFk
QXhpc1ZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1l
cGFkQnV0dG9uVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T3Bl
blBhbmVsRmlsZXMpOiBVc2UgbWFpbkpTQ29udGV4dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3Ry
aW5nLAorICAgICAgICBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRPcGVuUGFuZWxGaWxlc01lZGlhSWNvbik6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBw
b3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlbW92ZUFsbFNlc3Np
b25DcmVkZW50aWFscyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6Y2xlYXJET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpjbGVhckRPTUNhY2hlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpoYXNET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZSk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZSk6IFVzZSBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QXBw
bGljYXRpb25NYW5pZmVzdFRoZW4pOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmluamVjdFVzZXJTY3JpcHQpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdl
ZE1lc3NhZ2VGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6YWRkVGVzdEtleVRvS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYW5VcEtleWNoYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmtleUV4aXN0c0luS2V5Y2hhaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXJ2ZXJUcnVzdEV2YWx1
YXRpb25DYWxsYmFja0NhbGxzQ291bnQpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxk
RGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseSk6IFVzZQorICAgICAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphYm9ydE1vZGFs
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmR1bXBBZENsaWNrQXR0cmlidXRp
b24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92
YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9m
ZnNjcmVlbkNhbnZhc0VuYWJsZWQpOiBVc2Ugb3ZlcnJpZGVQcmVmZXJlbmNlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpj
bGVhckFwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBCb3VuZERvbWFpbnMpOiBVc2UgbWFpbkpTQ29udGV4
dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3RyaW5nLAorICAgICAgICBhbmQgdG9XSy4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6cG9zdE1lc3NhZ2UpOiBBZGRlZC4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOiBVcGRhdGVkIGZvciB0
aGUgYWJvdmUuIEFsc28gY2hhbmdlZAorICAgICAgICBvdmVycmlkZVByZWZlcmVuY2Ugb3QgYSBz
dGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OlRleHRJbnB1dENvbnRyb2xsZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6VGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdCk6IFVz
ZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBE
ZWxldGVkLiBVc2UgdGhlIG9uZSBmcm9tIEpTQmFzaWNzLmggbm93LgorICAgICAgICAoV1RSOjpj
cmVhdGVDb21wb3NpdGlvbkhpZ2hsaWdodERhdGEpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3Ry
aW5nLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVKU1N0cmluZyBmcm9tIEpTQmFzaWNzLmggbm93Lgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRV
SUVsZW1lbnRzKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRGVz
Y3JpcHRpb25PZkF0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0
aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omxhbmd1YWdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnZhbHVlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNGb2N1c2VkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRlIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9w
RWZmZWN0cyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29s
dW1ucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZSb3dzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2li
aWxpdHlWYWx1ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZT
Y3JlZW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDb2xsYXBzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tOgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRlclByb3h5OjpFdmVudFNlbmRlclByb3h5KTogSW5pdGlhbGl6ZSBpbiB0aGUgY2xh
c3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2Vu
ZGVyUHJveHkpOiBEZWxldGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbToKKyAgICAgICAgKFdUUjo6bWFr
ZUpTQXJyYXkpOiBSZXR1cm4gYSBKU09iamVjdFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VBcnJheVJl
ZkZvckFycmF5LgorICAgICAgICAoV1RSOjptYWtlSlNPYmplY3QpOiBSZXR1cm4gYSBKU09iamVj
dFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5LgorICAgICAgICAo
V1RSOjptYWtlVmFsdWVSZWZGb3JWYWx1ZSk6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAg
ICAgKFdUUjo6c2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENy
aXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nCisgICAgICAgIGFuZCBhcnJheUxlbmd0aC4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToK
KyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVK
U1N0cmluZyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6Y29udmVydFZl
Y3RvclRvT2JqZWN0QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJlbmFtZWQgZnJvbSBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheS4KKyAgICAgICAgKFdUUjo6
c2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYSk6IFVzZSB0b1dURlN0
cmluZyBhbmQgYXJyYXlMZW5ndGguCisgICAgICAgIChXVFI6OnNlYXJjaFRleHRQYXJhbWV0ZXJp
emVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm93SGVhZGVycyBjb25zdCk6IFVzZSBtYWtlSlNBcnJheS4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJh
eUF0dHJpYnV0ZVZhbHVlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlYXJjaFRleHRXaXRoQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlIGNvbnN0KTogVXNl
IGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
b2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppbnNwZWN0b3JUZXN0U3R1YlVSTCk6IFJlbW92ZSBsb2NhbHMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oOiBBZGRlZCB0b1dLU3RyaW5nIG92
ZXJsb2FkIHRoYXQgY29udmVydHMgZnJvbQorICAgICAgICBhIEpTVmFsdWVSZWYsIEpTU3RyaW5n
UmVmLCBvciBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYW5kIHRvV0sgb3ZlcmxvYWQgdGhhdCBj
b252ZXJ0cworICAgICAgICBmcm9tIGEgY29uc3QgY2hhciouCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemUpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpjaGVja0ZvcldvcmxkTGVha3MpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6
Y29udGVudEV4dGVuc2lvbkpTT05QYXRoKTogVXNlIHRvU1RELgorICAgICAgICAoV1RSOjpUZXN0
Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QpOiBVc2UgdG9XSy4K
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSk6IFVzZSBzdHJpbmdWYWx1ZQorICAgICAgICBhbmQgdWludDY0VmFs
dWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50
c0xpc3QpOiBVc2UgZGljdGlvbmFyeVZhbHVlIGFuZAorICAgICAgICB1aW50NjRWYWx1ZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIGRpY3Rpb25hcnlWYWx1ZSwKKyAgICAgICAgc3RyaW5nVmFsdWUsIHVpbnQ2
NFZhbHVlLCBkb3VibGVWYWx1ZSwgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0QmxvY2tBbGxQbHVnaW5z
KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5TdXBw
b3J0ZWRNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKTogUmVtb3ZlZCBsb2NhbC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSk6IFVzZSBhdXRvIGFuZCB0b1dURlN0cmluZworICAgICAgICBpbnN0ZWFkIG9mIHRvU1RE
LgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24pOiBVc2UgT3B0aW9uYWwgaW5zdGVhZCBvZiBwYWlycworICAgICAgICBvZiBib29sIGFuZCBk
b3VibGUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpoYW5kbGVDaGVja09mVXNlck1l
ZGlhUGVybWlzc2lvbkZvck9yaWdpbik6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3Np
YmxlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJ
ZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6IFVzZSB0b1dLLgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6
OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
VGVzdEluY292YXRpb24pOiBVc2UgdG9XVEZTdHJpbmcuCisgICAgICAgIChXVFI6OlRlc3RJbnZv
Y2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KTogVXNlIGF1dG8gYW5kIHNldFZh
bHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKTogVXNlIHBvc3RQYWdl
TWVzc2FnZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UKKyAg
ICAgICAgYW5kIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
UmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZQorICAgICAg
ICBkaWN0aW9uYXJ5VmFsdWUsIGJvb2xlYW5WYWx1ZSwgdmFsdWUsIHN0cmluZ1ZhbHVlLCBkb3Vi
bGVWYWx1ZSwgYW5kCisgICAgICAgIG9wdGlvbmFsRG91YmxlVmFsdWUuCisgICAgICAgIChXVFI6
OlRlc3RJbnZvY2F0aW9uOjp1aVNjcmlwdERpZENvbXBsZXRlKTogVXNlIHBvc3RQYWdlTWVzc2Fn
ZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRCZWdpblN3
aXBlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OndpbGxFbmRTd2lwZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
RW5kU3dpcGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92
ZVN3aXBlU25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246Om5v
dGlmeURvd25sb2FkRG9uZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
ZGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJz
aXRlRGF0YVJlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJ
bnZvY2F0aW9uOjpkaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OmRpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVzZXRTdGF0aXN0aWNzVG9Db25z
aXN0ZW50U3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNl
dEJsb2NrQ29va2llc0Zvckhvc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRp
b246OmRpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRMYXN0U2Vlbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkTWVyZ2VTdGF0aXN0aWMpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291
cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21h
aW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVBbGxT
ZXNzaW9uQ3JlZGVudGlhbHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldEFwcEJvdW5kRG9tYWlucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2Nh
dGlvbjo6cGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24pOiBEaXR0by4KKworICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICBBZGRlZCBKU0Jhc2ljcy5oIHRvIERpY3Rpb25hcnlGdW5jdGlvbnMuaCB0byBhcHBy
b3ByaWF0ZSB0YXJnZXRzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdUUjo6U2NyaXB0SXRlbTo6U2NyaXB0SXRlbSk6IFVzZSB0
b1dLLgorICAgICAgICAoV1RSOjpXb3JrUXVldWVNYW5hZ2VyOjpxdWV1ZUxvYWRIVE1MU3RyaW5n
KTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29u
dHJvbGxlckNvY29hLmg6IE1ha2UgbW9zdCBmdW5jdGlvbnMgcHJpdmF0ZS4KKworICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW06CisgICAg
ICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpvdmVycmlkZVByZWZlcmVuY2UpOiBV
c2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MuaDogTWFya2VkIHRoZSBjbGFzcyBmaW5hbCBhbmQgbWFkZQorICAgICAg
ICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6
IERlbGV0ZWQuIFVzZSB0aGUgb25lIGluIEpTQmFzaWNzLmguCisgICAgICAgIChXVFI6OnBhcnNl
TW9kaWZpZXJBcnJheSk6IFVzZSB0aGUgbmV3IHRvV1RGU3RyaW5nIG92ZXJsb2FkLgorICAgICAg
ICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJl
S2V5Ym9hcmQpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50
U2VuZGVyUHJveHkubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2Vu
ZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3duKTogVXNlIHRvV1RGU3RyaW5nLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmg6IE1hcmtl
ZCB0aGUgY2xhc3MgZmluYWwgYW5kIG1hZGUKKyAgICAgICAgbW9zdCBmdW5jdGlvbnMgcHJpdmF0
ZS4KKwogMjAyMC0wOS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHJ1bi13ZWJraXQtdGVzdHMgY29kZSB0aGF0IHN0cmlwcyB0cmFpbGluZyBzcGFj
ZXMgd2hlbiBjb21wYXJpbmcgZXhwZWN0ZWQudHh0IGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKaW5kZXggMWEwYzE2NzA2YjJhZTQy
NjBlMzJkMjkwNDQ5YmYyZDY1Y2ZhM2RmYS4uOWUyNDBlNTU5Y2E0NTIzMzc0Nzk4NGE2YmE5MzUx
NTRhYWNjZDdkZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogCiAvLyBTdGF0aWMgVmFsdWUgR2V0dGVycwogCkBA
IC00NywxNSArNDgsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRSb290RWxlbWVudENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzTwogCiAvLyBPYmplY3QgQ3Jl
YXRpb24KIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIiKSk7Ci0gICAgCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpT
Q2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyT2JqZWN0ID0g
SlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVsZWFz
ZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJTdHIuZ2V0KCksIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgSlNPYmplY3RNYWtl
KGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQoKSwgdGhpcykpOwogfQogCiBzdGF0aWMgSlNW
YWx1ZVJlZiBsb2dGb2N1c0V2ZW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwg
SlNWYWx1ZVJlZiopCkBAIC0xNTIsOSArMTQ3LDkgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0UGxh
dGZvcm1OYW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXMK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcGxhdGZvcm1OYW1lLmdldCgp
KTsKIH0KIAotSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFzcygp
CitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRl
SlNDbGFzcygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25z
W10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRpY0Z1bmN0aW9uIGZ1bmN0aW9uc1td
ID0gewogICAgICAgICB7ICJsb2dGb2N1c0V2ZW50cyIsIGxvZ0ZvY3VzRXZlbnRzQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAibG9nVmFsdWVDaGFuZ2VFdmVudHMiLCBsb2dWYWx1ZUNoYW5n
ZUV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImxvZ1Njcm9sbGluZ1N0YXJ0RXZl
bnRzIiwgbG9nU2Nyb2xsaW5nU3RhcnRFdmVudHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMTY2LDIx
ICsxNjEsMTggQEAgSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFz
cygpCiAgICAgICAgIHsgImVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSIsIGVuYWJsZUVuaGFu
Y2VkQWNjZXNzaWJpbGl0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAg
ICAgfTsKLQotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAg
IHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAi
Zm9jdXNlZEVsZW1lbnQiLCBnZXRGb2N1c2VkRWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgInJvb3RFbGVtZW50IiwgZ2V0Um9vdEVsZW1lbnRDYWxsYmFjaywgMCwga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7ICJlbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkIiwgZ2V0RW5oYW5jZWRB
Y2Nlc3NpYmlsaXR5RW5hYmxlZENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInBsYXRm
b3JtTmFtZSIsIGdldFBsYXRmb3JtTmFtZUNhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
MCwgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFz
c0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyIiwgMCwgc3RhdGljVmFsdWVzLCBzdGF0aWNGdW5jdGlvbnMsCisg
ICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAg
IDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgMCwg
dmFsdWVzLCBmdW5jdGlvbnMsCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7
CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pKTsKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAppbmRleCAxZGM3
ZDNiNTYzYTE1NGY0Y2U5YmY3YTMwMzBjOGM1YTc2OTdmMzlhLi44YTI4N2M0OGIxZGY1MzZiNDc1
YjYxODQxN2MyNjEzNWZiMzg2MTI2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAg
ICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKICAgICB+QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZv
aWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgLy8gQ29udHJvbGxlciBN
ZXRob2RzIC0gcGxhdGZvcm0taW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zCiAgICAgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCByb290RWxlbWVudCgpOwpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNzKCk7
CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsKIAog
I2lmIFBMQVRGT1JNKFdJTikKICAgICBIV0lORVZFTlRIT09LIG1fZm9jdXNFdmVudEhvb2sgeyBu
dWxscHRyIH07CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuY3BwCmluZGV4IDBlNWE1MGY2YjlkM2NlNWNhNzdiYTQ0ODY4N2MwMDljYmIxNzVkMjAuLjhl
Zjg1ZWVkZjA4NGQ2NzYyMjcxY2FmMmM4ZjQ0YWI4NTQ3OTI2NzEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCkBAIC0yMDYsNyArMjA2LDcg
QEAgc3RhdGljIEpTVmFsdWVSZWYgdWlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVkaWNhdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBz
dGFydEVsZW1lbnQgPSBudWxscHRyOwogICAgIGJvb2wgaXNEaXJlY3Rpb25OZXh0ID0gdHJ1ZTsK
ICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleSA9IG51bGxwdHI7Ci0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHNlYXJjaFRleHQgPSBudWxscHRyOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBzZWFyY2hUZXh0OwogICAgIGJvb2wgdmlzaWJsZU9ubHkgPSBmYWxzZTsKICAgICBib29s
IGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSA9IGZhbHNlOwogICAgIGlmIChhcmd1bWVudENvdW50
ID49IDUgJiYgYXJndW1lbnRDb3VudCA8PSA2KSB7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0gYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KaW5k
ZXggZWNlNTFlYTM5YTUxNjgzNTRiZDU2OTQ2MzU5MDg2ZDkwMjJlYTE5ZC4uMTRjNjI3MGY4MjMx
ZGMwZjI2YTA1ZTY5NWRhODQ3YmRmOGU0OGM4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQpA
QCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsMTAgKzQz
MSwxMCBAQCBzdWIgX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yCiB7CiAgICAgbXkgKCRzZWxmLCAk
dHlwZSwgJGFyZ3VtZW50TmFtZSkgPSBAXzsKIAotICAgIHJldHVybiAiSlNWYWx1ZVRvTnVsbGFi
bGVCb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9v
bGVhbiIgJiYgJHR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsQm9vbChj
b250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0
eXBlLT5pc051bGxhYmxlOwogICAgIHJldHVybiAiSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCAk
YXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAi
JGFyZ3VtZW50TmFtZSIgaWYgJHR5cGUtPm5hbWUgZXEgIm9iamVjdCI7Ci0gICAgcmV0dXJuICJh
ZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIp
KSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJl
dHVybiAiY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICQkc2VsZntj
b2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gIkpTVmFsdWVU
b051bWJlcihjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSIgaWYgJCRzZWxme2NvZGVH
ZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAidG8iIC4gX2lt
cGxlbWVudGF0aW9uQ2xhc3NOYW1lKCR0eXBlKSAuICIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSki
OwogfQpAQCAtNDcyLDExICs0NzIsMTEgQEAgc3ViIF9yZXR1cm5FeHByZXNzaW9uCiAgICAgbXkg
KCRzZWxmLCAkcmV0dXJuVHlwZSwgJGV4cHJlc3Npb24pID0gQF87CiAKICAgICByZXR1cm4gIkpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAidW5k
ZWZpbmVkIjsKLSAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICRyZXR1
cm5UeXBlLT5pc051bGxhYmxlOworICAgIHJldHVybiAibWFrZVZhbHVlKGNvbnRleHQsICR7ZXhw
cmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5
cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwg
JHtleHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICBy
ZXR1cm4gIiR7ZXhwcmVzc2lvbn0iIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJvYmplY3QiOwog
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCRyZXR1cm5UeXBlKTsKLSAg
ICByZXR1cm4gIkpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0u
Z2V0KCkpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkcmV0dXJuVHlw
ZSk7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSki
IGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKICAg
ICByZXR1cm4gInRvSlMoY29udGV4dCwgV1RGOjpnZXRQdHIoJHtleHByZXNzaW9ufSkpIjsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKaW5kZXggNGEzN2JmM2ExM2RhNGNh
ZWVhNDBhMGNmOGE3MDlmZTU4ZDM0ZWE0Yy4uYWVmN2VjOGE1MDViZmM1MWE4N2UzZDJmOWUxNjc1
MzlkZWUyOWRjNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVy
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcyICsy
OSw0OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgog
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotCi1HQ0NvbnRyb2xsZXI6OkdDQ29udHJvbGxlcigp
Ci17Ci19Ci0KLUdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcigpCi17Ci19CisjaW5jbHVkZSAi
SlNCYXNpY3MuaCIKIAogLy8gU3RhdGljIEZ1bmN0aW9ucwogCiBzdGF0aWMgSlNWYWx1ZVJlZiBj
b2xsZWN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+Y29sbGVjdCgpOworICAg
IGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLmNvbGxlY3QoKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
UmVmIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKLSAgICBib29sIHdhaXRVbnRpbERvbmUgPSBmYWxzZTsKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA+IDApCi0gICAgICAgIHdhaXRVbnRpbERvbmUgPSBKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1swXSk7Ci0KLSAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCh3YWl0VW50aWxE
b25lKTsKLQorICAgIGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBib29sIHdhaXRVbnRpbERv
bmUgPSBhcmd1bWVudENvdW50ID4gMCAmJiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVu
dGlsRG9uZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQog
CiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRKU09iamVjdENvdW50Q2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0g
ICAgc2l6ZV90IGpzT2JqZWN0Q291bnQgPSBjb250cm9sbGVyLT5nZXRKU09iamVjdENvdW50KCk7
Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwganNPYmplY3RDb3VudCk7
CisgICAgYXV0byYgY29udHJvbGxlciA9ICpzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJl
cihjb250ZXh0LCBjb250cm9sbGVyLmdldEpTT2JqZWN0Q291bnQoKSk7CiB9CiAKIC8vIE9iamVj
dCBDcmVhdGlvbgogCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCkKIHsKLSAgICBhdXRvIGdjQ29udHJvbGxlclN0ciA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJHQ0NvbnRyb2xsZXIiKSk7Ci0KLSAgICBKU0NsYXNzUmVmIGNs
YXNzUmVmID0gZ2V0SlNDbGFzcygpOwotICAgIEpTVmFsdWVSZWYgZ2NDb250cm9sbGVyT2JqZWN0
ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVs
ZWFzZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRv
d09iamVjdCwgZ2NDb250cm9sbGVyU3RyLmdldCgpLCBnY0NvbnRyb2xsZXJPYmplY3QsIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUs
IGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAi
R0NDb250cm9sbGVyIiwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQo
KSwgdGhpcykpOwogfQogCi1KU0NsYXNzUmVmIEdDQ29udHJvbGxlcjo6Z2V0SlNDbGFzcygpCitK
U1JldGFpblB0cjxKU0NsYXNzUmVmPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewot
ICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0geworICAgIHN0
YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKICAgICAgICAg
eyAiY29sbGVjdCIsIGNvbGxlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJjb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWQiLCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJnZXRKU09iamVjdENvdW50IiwgZ2V0SlNPYmplY3RDb3VudENhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBK
U0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNz
QXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIHN0YXRpY0Z1bmN0aW9ucywKKyAg
ICBzdGF0aWMgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAg
MCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiR0NDb250cm9sbGVyIiwgMCwgMCwgZnVuY3Rpb25z
LAogICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiAgICAgfTsKLQotICAg
IHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJldHVybiBhZG9w
dChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJv
bGxlci5oCmluZGV4IDY0MjQzODRkZjUzMGU4YzFmZGFlOGZiNjEzMTFiZjBhZGM0YTZhOGYuLjM3
YWE0NmE3NzRjZTNlNzBiODc4OWQ0NDNmMWU0MTgxNGFjNThmNWMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0dDQ29udHJvbGxlci5oCkBAIC0yNiwxOSArMjYsMTUgQEAKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBHQ0NvbnRyb2xsZXJfaAotI2RlZmluZSBHQ0NvbnRyb2xsZXJfaAorI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KIAogY2xhc3MgR0NDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBHQ0NvbnRyb2xsZXIoKTsKLSAgICB+R0NDb250cm9sbGVyKCk7Ci0KLSAg
ICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5k
b3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIC8vIENvbnRyb2xsZXIgTWV0aG9kcyAtIHBs
YXRmcm9tIGluZGVwZW5kYW50IGltcGxlbWVudGF0aW9ucwogICAgIHZvaWQgY29sbGVjdCgpIGNv
bnN0OwpAQCAtNDYsNyArNDIsNSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGdldEpTT2JqZWN0Q291
bnQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNz
KCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsK
IH07Ci0KLSNlbmRpZiAvLyBHQ0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVy
LmNwcAppbmRleCA1ZTUzNWFmMWRlYWQ4NDJkMmVmNGY1Zjc2NjAyYzgzYTk1MGI3NjUyLi4zN2Y2
OTFjYjc5NmI1NjM5MjYyODA0ZWUzZjQwMWNhYmRhZThmMGUxIDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0UnVubmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSAi
V29ya1F1ZXVlSXRlbS5oIgpAQCAtMzgsMTAgKzM5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDVGVzdFJ1bm5lclV0aWxzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVk1JbmxpbmVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Mb2dJ
bml0aWFsaXphdGlvbi5oPgpAQCAtNDg5LDcgKzQ4Nyw2IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRp
c3BsYXlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dz
IGltcGxlbWVudGF0aW9uCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRy
b2xsZXItPmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCk7CiAKQEAgLTQ5OCwxMiArNDk1LDEwIEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGVuY29kZUhvc3RO
YW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBt
YWMgaW1wbGVtZW50YXRpb24KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
KTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBhdXRvIGVuY29kZWRIb3N0TmFtZSA9IGNvbnRyb2xsZXItPmNvcHlFbmNv
ZGVkSG9zdE5hbWUobmFtZS5nZXQoKSk7CkBAIC01MTIsMjIgKzUwNywxMiBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBleGVjQ29tbWFuZENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgTWFjICYgV2luZG93cyBp
bXBsZW1lbnRhdGlvbnMuCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9w
dChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQorICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICAvLyBJZ25vcmluZyB0aGUgc2Vj
b25kIHBhcmFtZXRlciAodXNlckludGVyZmFjZSksIGFzIHRoaXMgY29tbWFuZCBlbXVsYXRlcyBh
IG1hbnVhbCBhY3Rpb24uCi0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdmFsdWU7Ci0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMykgewotICAgICAgICB2YWx1ZSA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKLSAgICAg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmFsdWUgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotCisgICAgYXV0byB2YWx1ZSA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDIgPyBhcmd1bWVu
dHNbMl0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5leGVjQ29tbWFuZChuYW1lLmdldCgpLCB2YWx1ZS5nZXQoKSk7CkBAIC01NDEs
MTEgKzUyNiw4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGZpbmRTdHJpbmdDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sCiAgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAK
LSAgICBhdXRvIHRhcmdldCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAg
SlNPYmplY3RSZWYgb3B0aW9ucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIHRhcmdl
dCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKKyAgICBhdXRv
IG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBudWxscHRy
KTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmZpbmRTdHJpbmcoY29udGV4dCwgdGFyZ2V0
LmdldCgpLCBvcHRpb25zKSk7CkBAIC01NjYsOCArNTQ4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
aXNDb21tYW5kRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW4KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29u
dGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIApA
QCAtNTc5LDEwICs1NjAsOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBvdmVycmlkZVByZWZlcmVuY2VD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZgogICAgIGlmIChhcmd1
bWVudENvdW50IDwgMikKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogCi0gICAgYXV0byBrZXkgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAg
ICBhdXRvIHZhbHVlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byBr
ZXkgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgYXV0
byB2YWx1ZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzFdKTsKIAog
ICAgIC8vIFNob3VsZCB1c2UgYDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zv
cndhcmRDYWNoZT10cnVlIF0gLS0+YCBpbnN0ZWFkLgogICAgIFJFTEVBU0VfQVNTRVJUKCFKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleS5nZXQoKSwgIldlYktpdFVzZXNCYWNrRm9yd2Fy
ZENhY2hlUHJlZmVyZW5jZUtleSIpKTsKQEAgLTY2MiwxNSArNjQxLDEwIEBAIHN0YXRpYyBKU1Zh
bHVlUmVmIHF1ZXVlTG9hZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gdXJsID0gYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAg
IGF1dG8gdXJsID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOwog
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
dGFyZ2V0OwotICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAgdGFyZ2V0ID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bikpOwotICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIH0gZWxzZQotICAgICAgICB0
YXJnZXQgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgIGF1
dG8gdGFyZ2V0ID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudENvdW50ID4g
MSA/IGFyZ3VtZW50c1sxXSA6IG51bGxwdHIpOwogCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnF1ZXVlTG9hZCh1cmwuZ2V0KCksIHRhcmdldC5nZXQoKSk7
CkBAIC02OTIsNyArNjY2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2FkSFRNTFN0cmlu
Z0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZgogICAgICAgICBiYXNl
VVJMID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOwogICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogICAgIH0gZWxzZQotICAg
ICAgICBiYXNlVVJMID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsK
KyAgICAgICAgYmFzZVVSTCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIAogICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKIApAQCAtMjA0NSwzNCArMjAxOSwyNCBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBydW5VSVNjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiwgSlNPYmplYwogCiBzdGF0aWMgdm9pZCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUoSlNPYmpl
Y3RSZWYgb2JqZWN0KQogewotICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIGNvbnRyb2xs
ZXItPmRlcmVmKCk7CisgICAgc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKS0+ZGVyZWYoKTsKIH0KIAogLy8gT2JqZWN0IENyZWF0aW9uCiAKLXZvaWQg
VGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFRlc3RSdW5u
ZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byB0
ZXN0UnVubmVyU3RyID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRlc3RS
dW5uZXIiKSk7CiAgICAgcmVmKCk7Ci0KLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlND
bGFzcygpOwotICAgIEpTVmFsdWVSZWYgbGF5b3V0VGVzdENvbnRvbGxlck9iamVjdCA9IEpTT2Jq
ZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xh
c3NSZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3Qs
IHRlc3RSdW5uZXJTdHIuZ2V0KCksIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4
Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGVz
dFJ1bm5lciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCksIHRo
aXMpKTsKIH0KIAotSlNDbGFzc1JlZiBUZXN0UnVubmVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWlu
UHRyPEpTQ2xhc3NSZWY+IFRlc3RSdW5uZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewotICAgIHN0YXRp
YyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMgPSBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMo
KTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zID0gVGVzdFJ1
bm5lcjo6c3RhdGljRnVuY3Rpb25zKCk7Ci0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNs
YXNzRGVmaW5pdGlvbiA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiVGVz
dFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAorICAgIHN0YXRpYyBj
b25zdCBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0geworICAgICAgICAwLCBrSlNDbGFz
c0F0dHJpYnV0ZU5vbmUsICJUZXN0UnVubmVyIiwgMCwgc3RhdGljVmFsdWVzKCksIHN0YXRpY0Z1
bmN0aW9ucygpLAogICAgICAgICAwLCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNs
YXNzRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRp
b24pKTsKIH0KIAogLy8gQ29uc3RhbnRzCkBAIC0yMTA3LDkgKzIwNzEsOSBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBnZXRSRU5ERVJfVFJFRV9TSE9XX0xBWUVSX0ZSQUdNRU5UUyhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYgogICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAzMik7
CiB9CiAKLUpTU3RhdGljVmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCitjb25zdCBK
U1N0YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogewotICAgIHN0YXRpYyBK
U1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNT
dGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAiZGlkQ2FuY2VsQ2xpZW50UmVkaXJl
Y3QiLCBnZXREaWRDYW5jZWxDbGllbnRSZWRpcmVjdCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJ0
aW1lb3V0IiwgZ2V0VGltZW91dENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImdsb2Jh
bEZsYWciLCBnZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIHNldEdsb2JhbEZsYWdDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCkBAIC0yMTI3LDEyICsyMDkxLDEyIEBAIEpTU3RhdGlj
VmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCiAgICAgICAgIHsgIlJFTkRFUl9UUkVF
X1NIT1dfTEFZRVJfRlJBR01FTlRTIiwgZ2V0UkVOREVSX1RSRUVfU0hPV19MQVlFUl9GUkFHTUVO
VFMsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAwLCAwLCAwLCAwIH0KICAgICB9OwotICAgIHJldHVy
biBzdGF0aWNWYWx1ZXM7CisgICAgcmV0dXJuIHZhbHVlczsKIH0KIAotSlNTdGF0aWNGdW5jdGlv
biogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKK2NvbnN0IEpTU3RhdGljRnVuY3Rpb24q
IFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRp
Y0Z1bmN0aW9uIGZ1bmN0aW9uc1tdID0gewogICAgICAgICB7ICJhYm9ydE1vZGFsIiwgYWJvcnRN
b2RhbENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZERpc2FsbG93ZWRVUkwiLCBhZGRE
aXNhbGxvd2VkVVJMQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkVVJMVG9SZWRpcmVj
dCIsIGFkZFVSTFRvUmVkaXJlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMjI5Nyw3ICsyMjYxLDcg
QEAgSlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKICAgICAg
ICAgeyAwLCAwLCAwIH0KICAgICB9OwogCi0gICAgcmV0dXJuIHN0YXRpY0Z1bmN0aW9uczsKKyAg
ICByZXR1cm4gZnVuY3Rpb25zOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxT
dHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKQEAgLTIzNDIs
MTQgKzIzMDYsMTEgQEAgdm9pZCBUZXN0UnVubmVyOjppZ25vcmVMZWdhY3lXZWJOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMoKQogCiB2b2lkIFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyRmlyZWQoKQogewotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAiRkFJTDogVGlt
ZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iOwotICAgIGZwcmlu
dGYodGVzdFJlc3VsdCwgIiVzIiwgbWVzc2FnZSk7CisgICAgZnB1dHMoIkZBSUw6IFRpbWVkIG91
dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIiwgdGVzdFJlc3VsdCk7CiAK
LSAgICBhdXRvIGFjY3VtdWxhdGVkTG9ncyA9IGdldEFuZFJlc2V0QWNjdW11bGF0ZWRMb2dzKCk7
Ci0gICAgaWYgKCFhY2N1bXVsYXRlZExvZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIG1lc3NhZ2UgPSAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4iOwotICAg
ICAgICBmcHJpbnRmKHRlc3RSZXN1bHQsICIlcyVzXG4iLCBtZXNzYWdlLCBhY2N1bXVsYXRlZExv
Z3MudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQorICAgIGF1dG8gbG9ncyA9IGdldEFuZFJlc2V0QWNj
dW11bGF0ZWRMb2dzKCk7CisgICAgaWYgKCFsb2dzLmlzRW1wdHkoKSkKKyAgICAgICAgZnByaW50
Zih0ZXN0UmVzdWx0LCAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4lc1xuIiwg
bG9ncy51dGY4KCkuZGF0YSgpKTsKIAogICAgIG5vdGlmeURvbmUoKTsKIH0KQEAgLTI0MDMsMjQg
KzIzNjQsMjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRBY2N1bW11bGF0ZUxvZ3NGb3JDaGFubmVs
KEpTU3RyaW5nUmVmIGNoYW5uZWwpCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRMb2dDaGFu
bmVsVG9BY2N1bXVsYXRlKHsgYnVmZmVyLmdldCgpIH0pOwogfQogCi10eXBlZGVmIFdURjo6SGFz
aE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVJlZj4gQ2FsbGJhY2tNYXA7Cit1c2luZyBDYWxsYmFja01h
cCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNPYmplY3RSZWY+Owogc3RhdGljIENhbGxiYWNr
TWFwJiBjYWxsYmFja01hcCgpCiB7CiAgICAgc3RhdGljIENhbGxiYWNrTWFwJiBtYXAgPSAqbmV3
IENhbGxiYWNrTWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2Fj
aGVUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIEpTVmFsdWVSZWYgY2FsbGJhY2sp
Cit2b2lkIFRlc3RSdW5uZXI6OmNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4
LCBKU1ZhbHVlUmVmIGNhbGxiYWNrVmFsdWUpCiB7Ci0gICAgaWYgKCFjYWxsYmFjaykKKyAgICBh
dXRvIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKKyAgICBpZiAoIWNhbGxiYWNrVmFs
dWUgfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYWxsYmFja1ZhbHVlKSkKICAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gY2FsbGJhY2sgPSAoSlNPYmplY3RSZWYpY2FsbGJhY2tWYWx1ZTsK
IAogICAgIGlmIChjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkgewotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBj
YWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICVkKVxuIiwgaW5kZXgpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5l
ciBjYWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICV1KVxuIiwgaW5kZXgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluRnJhbWVK
U0NvbnRleHQoKTsKICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAg
Y2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNrKTsKIH0KQEAgLTI0MzAsMjIgKzIzOTIs
MTggQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGlu
ZGV4LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY28KICAgICBpZiAoIWNhbGxiYWNrTWFwKCkuY29u
dGFpbnMoaW5kZXgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOwotICAgIGlmIChKU09iamVjdFJlZiBjYWxsYmFjayA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpLCAwKSkg
ewotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywg
MCk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgaWYgKGF1
dG8gY2FsbGJhY2sgPSBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpKSB7CisgICAgICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdldEdsb2JhbE9i
amVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBudWxscHRyKTsKICAgICAg
ICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAgfQogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OmNsZWFyVGVzdFJ1bm5lckNhbGxiYWNrcygpCiB7Ci0gICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKLQotICAgIGZvciAoYXV0byYgaXRl
ciA6IGNhbGxiYWNrTWFwKCkpIHsKLSAgICAgICAgaWYgKEpTT2JqZWN0UmVmIGNhbGxiYWNrID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGl0ZXIudmFsdWUsIDApKQotICAgICAgICAgICAgSlNW
YWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgfQotCisgICAgYXV0byBjb250
ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNh
bGxiYWNrTWFwKCkudmFsdWVzKCkpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwg
Y2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFwKCkuY2xlYXIoKTsKIH0KIApAQCAtMjUwOCwxNiAr
MjQ2NiwxMSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGZpbGVzVmFsdWUpCiB7CiAgICAgaWYgKCFKU1ZhbHVlSXNB
cnJheShjb250ZXh0LCBmaWxlc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgSlNPYmpl
Y3RSZWYgZmlsZXMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZmlsZXNWYWx1ZSwgbnVsbHB0
cik7Ci0gICAgc3RhdGljIGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgZmlsZXNMZW5ndGhW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZmlsZXMsIGxlbmd0aFByb3BlcnR5
LmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBmaWxl
c0xlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZmlsZXMgPSAoSlNPYmpl
Y3RSZWYpZmlsZXNWYWx1ZTsKKyAgICBhdXRvIGZpbGVzTGVuZ3RoID0gV1RSOjphcnJheUxlbmd0
aChjb250ZXh0LCBmaWxlcyk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVzLmNsZWFyKCk7Ci0gICAg
YXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbGVzTGVuZ3RoOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIGZpbGVWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZpbGVzLCBpLCBudWxscHRyKTsKICAgICAg
ICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgZmlsZVZhbHVlKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCmluZGV4IDE2NzEyMDU4YTEwY2U5
ODlhM2M4ZDQzZDY0NGY5YTllMzAwZDQwZGUuLmU4NTdhYTRkY2RhMjk3YzRmZTNlNzZhYzdlOWVh
ZjA1YTA5YzgwYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKQEAgLTU0LDcgKzU0LDcg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xlYW51cCgpOwogCi0gICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYp
OwogCiAgICAgdm9pZCBhZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCk7CiAgICAgY29u
c3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBhbGxvd2VkSG9zdHMoKSBjb25zdCB7IHJldHVybiBt
X2FsbG93ZWRIb3N0czsgfQpAQCAtNDk3LDcgKzQ5Nyw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp2
ZWN0b3I8Y2hhcj4gbV9vcGVuUGFuZWxGaWxlc01lZGlhSWNvbjsKICNlbmRpZgogCi0gICAgc3Rh
dGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOwotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBz
dGF0aWNWYWx1ZXMoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rp
b25zKCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3Mo
KTsKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzKCk7CisgICAg
c3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOwogfTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbQppbmRleCA2MWUwMWY1ZWQ3Njc1YTgzMGJhNmYzOGY4ZWNmNTg0MGZiYzgzOWNiLi5l
ODUyZGZkYWJjZDQzOTkzYjMxMzkzZDM1ZGYwMDU0Y2Y2Nzk0Zjc5IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBA
IC0yNCwxMiArMjQsMTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkR1
bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
IgorI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1ByaXZhdGUuaD4KQEAgLTE1NSw1
ICsxNTYsNSBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2li
aWxpdHlFbmFibGVkKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0
ZUpTU3RyaW5nKCJpb3MiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5kZXggZTNjOTA5ZDZkZDI3MDM5MjgzZWFj
Y2QzMmFlNDA5MjZjZThhOWU2NC4uNjQ1ZmM4NjNjZWYxMGEwMGY1YmI0YjdkMTM5YzZlMGRjZTQw
OGRlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW0KQEAgLTI0LDExICsyNCwxMiBAQAogICovCiAKICNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCIKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogI2lt
cG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCIKKyNpbXBvcnQgIkR1bXBS
ZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5oPgpAQCAtNDEsMTEgKzQyLDYgQEAKIAog
dHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwg
TlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKLSAgICA6IG1fZWxl
bWVudChlbGVtZW50KQotewotfQotCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChVSUFjY2Vzc2liaWxp
dHlIaWRkZW4pCiAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooQ0dQb2ludClwb2ludDsKIC0g
KGlkKWFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50OwpAQCAtMTEyLDkgKzEwOCw5IEBAIEBpbnRl
cmZhY2UgTlNPYmplY3QgKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyUHJpdmF0ZSkKIC0g
KENHUGF0aFJlZilfYWNjZXNzaWJpbGl0eVBhdGg7CiBAZW5kCiAKLXN0YXRpYyBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGlkIGVsZW1lbnQpCisgICAgOiBtX2VsZW1lbnQo
ZWxlbWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cyhudWxscHRyLCAwKSk7CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY29u
Y2F0ZW5hdGVBdHRyaWJ1dGVBbmRWYWx1ZShOU1N0cmluZyAqYXR0cmlidXRlLCBOU1N0cmluZyAq
dmFsdWUpCkBAIC0xODAsNyArMTc2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpmaWVsZHNldEFuY2VzdG9yRWxlbWVudCgpCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLQogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnVybCgpCiB7CiAgICAgTlNVUkwgKnVybCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0
eVVSTF07CkBAIC0yOTEsNyArMjg2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpsaW5rZWRFbGVtZW50KCkKIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KHVuc2lnbmVk
IGluZGV4KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtNTU4LDcgKzU1Miw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAgICAgaWQgdGV4
dE1hcmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKICAgICBp
ZiAoIXRleHRNYXJrZXJzIHx8ICFbdGV4dE1hcmtlcnMgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBj
bGFzc11dKQotICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgICAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJp
bmdGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCkBA
IC02ODEsMjIgKzY3NSwyMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3Vt
ZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbAogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2Vk
VUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJp
YnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJu
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0
dHJpYnV0ZSkKQEAgLTcxNiw3ICs3MTAsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZQogICAg
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGF0dHJpYnV0ZSwgIkFYVGV4dHVhbENv
bnRleHQiKSkKICAgICAgICAgcmV0dXJuIFtbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlUZXh0dWFs
Q29udGV4dF0gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkKCkKQEAgLTc1
NSwxNyArNzQ5LDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVT
dXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFnZVVwKCkKQEAg
LTc4OSwxNyArNzgzLDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFn
ZVJpZ2h0KCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvbGVEZXNjcmlwdGlvbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQpAQCAtODA5
LDcgKzgwMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpkZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFs
dWUoKQpAQCAtODE5LDcgKzgxMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRl
eHQoKSBjb25zdApAQCAtODQ5LDcgKzg0Myw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2V0VmFsdWUoSlNTdHJpbmdSZWYgdmFsdWVUZXh0KQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbigpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRM
aW5lTnVtYmVyKCkKQEAgLTg2OSw3ICs4NjMsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
Rm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtODkyLDcgKzg4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDaGVja2VkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lu
ZGV0ZXJtaW5hdGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTkwOCw3ICs5MDAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFyaWFJc0dyYWJiZWQoKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3Ry
aW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50
IGluZGV4KQpAQCAtOTE4LDM3ICs5MTAsMzcgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmxpbmVGb3JJbmRleChpbnQgaW5kZXgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQogewotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dDb3VudCgpCkBAIC05ODcsMjIgKzk3OSwxOSBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQg
Y29sLAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUo
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQg
eSkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2ZVRlY2hu
b2xvZ3lTaW11bGF0ZWRGb2N1cygpCkBAIC0xMDM1LDIzICsxMDI0LDIxIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3Rp
ZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQpAQCAtMTA4Myw0
MyArMTA3MCwzNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyKCkKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJs
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBz
ZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTExMzAsMTMgKzExMTAsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2lu
Z2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtMTE1MiwyNyArMTEzMCwyMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cG9wdXBWYWx1ZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGFrZUZvY3VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVj
dGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAogfQogCiB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRDb3VudEZv
clNlYXJjaFByZWRpY2F0ZShKU0NvbnRleHRSZWYgY29udGV4dCwgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgSlNWYWx1ZVJlZiBzZWFy
Y2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1t
ZWRpYXRlRGVzY2VuZGFudHNPbmx5KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gMDsKIH0KIApAQCAtMTIxNCwyMyArMTE4NywxOSBAQCBkb3VibGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xhc3NM
aXN0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXJyYXlBdHRy
aWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Jikg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4m
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB1bnNpZ25lZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZENoaWxkcmVuQ291bnQoKSBjb25zdApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgKaW5kZXggMzg1
MGI0MTQ0NjNlMDE1YzY3ZDU2ZWYwNGE1OTM4Yzk5MWM0N2VkOC4uMTViZjUxZjg0ZDNlODE4MWMw
MmNmNjYzYzc1NTM5ZGMyOGFkOWRkNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oCkBAIC00MSw0ICs0MSw0IEBAIEBpbnRlcmZhY2Ug
TlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQogLSAoSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+KWNyZWF0ZUpTU3RyaW5nUmVmOwogQGVuZAogCi1leHRlcm4gTlNEaWN0aW9uYXJ5ICpzZWFy
Y2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250
ZXh0UmVmLCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50ICpzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJl
Y3Rpb25OZXh0LCB1bnNpZ25lZCByZXN1bHRzTGltaXQsIEpTVmFsdWVSZWYgc2VhcmNoS2V5LCBK
U1N0cmluZ1JlZiBzZWFyY2hUZXh0LCBib29sIHZpc2libGVPbmx5LCBib29sIGltbWVkaWF0ZURl
c2NlbmRhbnRzT25seSk7CitOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZWYsIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5leHQsIHVuc2lnbmVkIHJl
c3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFyY2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQs
IGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1t
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KaW5k
ZXggNzk0MDczOGEzMzkwZWIyNzBhNjA4YmZkMDU5ZTE3MmFmNGI3OTA5Mi4uMDMwNjdlMmQwODky
MTRmYmU4NDY2N2IyODI0ZjhjZTMxNDgwZjk4NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogCisj
aW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZD
Ri5oPgogCiBAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQpA
QCAtNTYsNyArNTcsNiBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICBbcGFyYW1l
dGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c3RhcnRFbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVu
dCgpIGZvcktleTpAIkFYU3RhcnRFbGVtZW50Il07CiAKICAgICBbcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZSBzZXRPYmplY3Q6KGlzRGlyZWN0aW9uTmV4dCkgPyBAIkFYRGlyZWN0aW9uTmV4dCIgOiBA
IkFYRGlyZWN0aW9uUHJldmlvdXMiIGZvcktleTpAIkFYRGlyZWN0aW9uIl07Ci0KICAgICBbcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QChyZXN1bHRzTGltaXQpIGZvcktleTpAIkFY
UmVzdWx0c0xpbWl0Il07CiAKICAgICBpZiAoc2VhcmNoS2V5KSB7CkBAIC02NiwxNCArNjYsOCBA
QCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JT
ZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0cmlu
ZykKICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZy5nZXQoKV07CiAgICAgICAgIH0gZWxzZSBp
ZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsKLSAgICAgICAgICAgIEpT
T2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJj
aEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0
aCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJp
bmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAg
ICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcu
Z2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleUFycmF5TGVuZ3RoVmFs
dWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUp
KQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVl
LCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJj
aEtleUFycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaEtleTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHNlYXJjaEtleUFycmF5TGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hL
ZXlBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoS2V5
QXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoS2V5
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlBcnJh
eSwgaSwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2VhcmNoS2V5U3Ry
aW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hLZXlWYWx1ZSwgbnVsbHB0
cik7CkBAIC04OCwxMiArODIsMTEgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJh
bWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICAgICAg
aWYgKHNlYXJjaEtleVBhcmFtZXRlcikKICAgICAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmli
dXRlIHNldE9iamVjdDpzZWFyY2hLZXlQYXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWFyY2hLZXkiXTsK
ICAgICB9Ci0gICAgCisKICAgICBpZiAoc2VhcmNoVGV4dCAmJiBKU1N0cmluZ0dldExlbmd0aChz
ZWFyY2hUZXh0KSkKICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OltO
U1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoVGV4dF0gZm9yS2V5OkAiQVhTZWFy
Y2hUZXh0Il07Ci0gICAgCisKICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6
QCh2aXNpYmxlT25seSkgZm9yS2V5OkAiQVhWaXNpYmxlT25seSJdOwotICAgIAogICAgIFtwYXJh
bWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSkg
Zm9yS2V5OkAiQVhJbW1lZGlhdGVEZXNjZW5kYW50c09ubHkiXTsKICAgICAKICAgICByZXR1cm4g
cGFyYW1ldGVyaXplZEF0dHJpYnV0ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRleCA1MWYwMzFkZGJiY2Q4NTNh
ZGI0ZmU3MTQ3ZDg1YTUyNTc2YTAwNzhiLi45NWEwNmYzYTQwYTA0ODllM2UwYjBiMzE2NTc0YzNm
Y2JmMmVjZjExIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJBY2Nl
c3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2ltcG9ydCAi
SlNCYXNpY3MuaCIKICNpbXBvcnQgPEFwcEtpdC9OU0NvbG9yLmg+CiAjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+
CkBAIC0xNTgsNSArMTU5LDUgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5j
ZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZCgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm1hYyIpKTsKKyAgICByZXR1cm4g
V1RSOjpjcmVhdGVKU1N0cmluZygibWFjIik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IGUxZWZkN2Y0ZTE2
MWFmZmRlZTIyNGNjNDUzODQ4YjM5Y2I0OTcwNjMuLjY0OTFhMmQwYTVmYTRjNzRlNzIxNzkyNzhm
N2UxY2E5OWQ3NjhkNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFz
aWNzLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgpA
QCAtODAsMTEgKzgxLDYgQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9p
bnQ6KE5TUG9pbnQpcG9pbnQ7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZh
bHVlIGZvckF0dHJpYnV0ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWU7CiBAZW5kCiAKLXN0YXRp
YyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0gICAg
cmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkpOwot
fQotCiBzdGF0aWMgT3B0aW9uYWw8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gbWFrZVZlY3RvckVs
ZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCosIGlkIGVsZW1lbnQpCiB7CiAgICAg
cmV0dXJuIHsgeyBlbGVtZW50IH0gfTsKQEAgLTIyMSwxNCArMjE3LDggQEAgc3RhdGljIE5TRGlj
dGlvbmFyeSAqc2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0Nv
bnRleHRSZWYgY28KICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRP
YmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5n
LmdldCgpXV07CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hT
dHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVs
bHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAw
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJp
bmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJp
bmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgCisgICAgICAgICAg
ICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheSA9IChKU09iamVjdFJlZilzZWFyY2hTdHJpbmdzOwor
ICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVu
Z3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0
cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKICAgICAgICAgICAgICAgICBpZiAo
c2VhcmNoU3RyaW5nc1N0cmluZykKQEAgLTI2MiwxNCArMjUyLDggQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRl
eHRSZWYgY28KICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQogICAgICAgICAg
ICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKICAgICAgICAgfSBl
bHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAg
ICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNl
YXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJv
cGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5n
dGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNo
U3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJj
aFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAg
ICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaFN0cmluZ3M7
CisgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IFdUUjo6YXJyYXlM
ZW5ndGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNo
U3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgICAgIGlm
IChzZWFyY2hTdHJpbmdzU3RyaW5nKQpAQCAtMTQ0NiwxMyArMTQzMCwxMyBAQCB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxk
cmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIGZ1bmN0aW9uLgogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQpAQCAtMTQ2Myw3ICsxNDQ3LDcgQEAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcoKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBF
TkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQpAQCAt
MTQ3NCw3ICsxNDU4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0
cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogICAgIAotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVy
bCgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdh
dGUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KaW5k
ZXggMzY3MTQ5MzlmZGEwYTU2NzQ5Yzc5OTg4NmExZWE0Mzg5MjE4OWE0YS4uMzQyYjNhMDFkYzdl
YTg3OWFmMWI1NGIwZWUyNzNkNjgxMmY4ZjdhNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQpAQCAtMzExLDU0ICszMTEsMjYgQEAgSUdOT1JFX1dB
Uk5JTkdTX0VORAogCiAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxk
Rm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKIHsKLSAgICAvLyBNYWtlIE5ldy1TdHlsZSBUZXN0
UnVubmVyCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07
Ci0gICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0
KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBhdXRvIGNvbnRl
eHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07CisgICAgYXV0byB3ZWJWaWV3ID0gW2ZyYW1lIHdl
YlZpZXddOworICAgIGF1dG8gd2luZG93T2JqZWN0ID0gW2ZyYW1lIHdpbmRvd09iamVjdF07CiAK
LSAgICBBU1NFUlQoZ1Rlc3RSdW5uZXIpOwotICAgIGdUZXN0UnVubmVyLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNl
cHRpb24pOwotCi0gICAgZ2NDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIGds
b2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFs
T2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgZ1Rlc3RS
dW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgZ2NDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOwogCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJ
bnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiAKLSAgICAvLyBNYWtlIE9sZC1TdHlsZSBjb250cm9s
bGVycwotCi0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtmcmFtZSB3ZWJWaWV3XTsKLSAgICBXZWJT
Y3JpcHRPYmplY3QgKm9iaiA9IFtmcmFtZSB3aW5kb3dPYmplY3RdOwotI2lmICFQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIEFwcGxlU2NyaXB0Q29udHJvbGxlciAqYXNjID0gW1tBcHBsZVNjcmlw
dENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XTsKLSAgICBbb2JqIHNl
dFZhbHVlOmFzYyBmb3JLZXk6QCJhcHBsZVNjcmlwdENvbnRyb2xsZXIiXTsKLSAgICBbYXNjIHJl
bGVhc2VdOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFk
b3B0TlMoW1tBcHBsZVNjcmlwdENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3XSkuZ2V0KCkgZm9yS2V5OkAiYXBwbGVTY3JpcHRDb250cm9sbGVyIl07CiAjZW5kaWYKIAot
ICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgKmVzYyA9IFtbRXZlbnRTZW5kaW5nQ29udHJvbGxl
ciBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTplc2MgZm9yS2V5OkAiZXZlbnRTZW5k
ZXIiXTsKLSAgICBbZXNjIHJlbGVhc2VdOwotICAgIAotICAgIFtvYmogc2V0VmFsdWU6Z05hdmln
YXRpb25Db250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07Ci0gICAgCi0g
ICAgT2JqQ0NvbnRyb2xsZXIgKm9jYyA9IFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwot
ICAgIFtvYmogc2V0VmFsdWU6b2NjIGZvcktleTpAIm9iakNDb250cm9sbGVyIl07Ci0gICAgW29j
YyByZWxlYXNlXTsKLQotICAgIE9iakNQbHVnaW4gKnBsdWdpbiA9IFtbT2JqQ1BsdWdpbiBhbGxv
Y10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTpwbHVnaW4gZm9yS2V5OkAib2JqQ1BsdWdpbiJd
OwotICAgIFtwbHVnaW4gcmVsZWFzZV07Ci0gICAgCi0gICAgT2JqQ1BsdWdpbkZ1bmN0aW9uICpw
bHVnaW5GdW5jdGlvbiA9IFtbT2JqQ1BsdWdpbkZ1bmN0aW9uIGFsbG9jXSBpbml0XTsKLSAgICBb
b2JqIHNldFZhbHVlOnBsdWdpbkZ1bmN0aW9uIGZvcktleTpAIm9iakNQbHVnaW5GdW5jdGlvbiJd
OwotICAgIFtwbHVnaW5GdW5jdGlvbiByZWxlYXNlXTsKLQotICAgIFRleHRJbnB1dENvbnRyb2xs
ZXIgKnRpYyA9IFtbVGV4dElucHV0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXddOwotICAgIFtvYmogc2V0VmFsdWU6dGljIGZvcktleTpAInRleHRJbnB1dENvbnRyb2xs
ZXIiXTsKLSAgICBbdGljIHJlbGVhc2VdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRv
cHROUyhbW0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6
QCJldmVudFNlbmRlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6Z05hdmlnYXRpb25D
b250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07CisgICAgW3dpbmRvd09i
amVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQo
KSBmb3JLZXk6QCJvYmpDQ29udHJvbGxlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6
YWRvcHROUyhbW09iakNQbHVnaW4gYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDUGx1
Z2luIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ1BsdWdpbkZ1
bmN0aW9uIGFsbG9jXSBpbml0XSkuZ2V0KCkgZm9yS2V5OkAib2JqQ1BsdWdpbkZ1bmN0aW9uIl07
CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbVGV4dElucHV0Q29udHJvbGxl
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKS5nZXQoKSBmb3JLZXk6QCJ0ZXh0SW5w
dXRDb250cm9sbGVyIl07CiB9CiAKIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFt
ZTooV2ViRnJhbWUgKilmcmFtZSBpbklzb2xhdGVkV29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29y
bGQKQEAgLTM3MSw3ICszNDMsNyBAQCAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJh
bWU6KFdlYkZyYW1lICopZnJhbWUgaW5Jc29sYXRlZFdvcmxkOihXZWJTY3JpcAogICAgIGlmICgh
Z2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09iamVjdFNldFByb3BlcnR5
KGN0eCwgZ2xvYmFsT2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
X193b3JsZElEIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHdvcmxkSURGb3JXb3Js
ZCh3b3JsZCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICBKU09iamVj
dFNldFByb3BlcnR5KGN0eCwgZ2xvYmFsT2JqZWN0LCBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJfX3dv
cmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCB3b3JsZElERm9yV29ybGQod29y
bGQpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7CiB9CiAKIC0gKHZvaWQpd2Vi
VmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lOihXZWJG
cmFtZSAqKWZyYW1lIGluU2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggZWJhMDkzZWUxODdjZDMx
MGQwNTFiMjMwYWVkMmEzMDBmZTc5NDljMC4uZTIxMDcwYWMzMWIzNGNmY2JiNTc5ZDc3NzViNzYx
OTkxMTRhYmRmZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0K
QEAgLTMyLDYgKzMyLDcgQEAKIAogI2ltcG9ydCAiRGVmYXVsdFBvbGljeURlbGVnYXRlLmgiCiAj
aW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0
ICJMYXlvdXRUZXN0U3BlbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92
aWRlci5oIgogI2ltcG9ydCAiTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmgiCkBAIC02NzAs
MTUgKzY3MSwxMCBAQCBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZQogewogICAgIFdlYkZpbmRPcHRp
b25zIG9wdGlvbnMgPSAwOwogCi0gICAgYXV0byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYg
bGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwg
bGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihj
b250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdGFyZ2V0Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhcmdldCkpOworICAgIGF1dG8gbGVuZ3RoID0g
V1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBvcHRpb25zQXJyYXkpOworICAgIGF1dG8gdGFyZ2V0
Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHRhcmdldCkpOwogCi0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKICAgICAgICAgaWYg
KCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcAppbmRl
eCBmZDc3YWQxYzM5MjYzOGRhOTQxNDNlZTdkNWE4MjFlNjk0MTAyMzEzLi41ZjNiNzQwNDA1MDBm
MDMwZGEyYmVkMWFhZjk2NzNmOGI2MmJiMTY2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKQEAgLTM3MSwxOSArMzcxLDEwIEBAIHZvaWQgRnJh
bWVMb2FkRGVsZWdhdGU6OmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVJblN0YW5kYXJkV29y
bGQoSVdlYkZyYW1lKiBmCiAgICAgSVdlYkZyYW1lKiBwYXJlbnRGcmFtZSA9IDA7CiAgICAgZnJh
bWUtPnBhcmVudEZyYW1lKCZwYXJlbnRGcmFtZSk7CiAKLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlv
biA9IDA7Ci0KLSAgICA6OmdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdp
bmRvd09iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
bV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAm
ZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBtX2FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4
Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAgbV90ZXh0SW5wdXRDb250
cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlv
bik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOworICAgIDo6Z1Rlc3RSdW5uZXItPm1ha2VXaW5k
b3dPYmplY3QoY29udGV4dCk7CisgICAgbV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CisgICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0KTsKKyAgICBtX3RleHRJbnB1dENvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CiAKICAgICBKU1N0cmluZ1JlZiBldmVudFNlbmRlclN0ciA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJldmVudFNlbmRlciIpOwogICAgIEpTVmFsdWVSZWYgZXZlbnRT
ZW5kZXIgPSBtYWtlRXZlbnRTZW5kZXIoY29udGV4dCwgIXBhcmVudEZyYW1lKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAppbmRleCAzYjlh
MmI3OGQ5ZDU4ODM1NTAzNDA1NWYyNGQyMDI1OGQzMmI3YjE1Li5kMmU1MzUyNGY1ZjVlMTM1MmQw
NDUyMTc5ZDgyYmNkODIwM2I1YWY3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93
aW4vVGV4dElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgogCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogLy8gU3RhdGljIEZ1bmN0aW9ucwpAQCAtMTYyLDQyICsxNjIs
MzIgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2VsZWN0ZWRSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGkKIAogLy8gT2JqZWN0IENyZWF0aW9uCiAKLXZv
aWQgVGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2
b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNv
bnRleHQpCiB7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+ICB0ZXh0SW5wdXRDb250b2xs
ZXJTdHIoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXh0SW5wdXRDb250
cm9sbGVyIikpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpTQ2xhc3MoKTsKLSAg
ICBKU1ZhbHVlUmVmIHRleHRJbnB1dENvbnRvbGxlck9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250
ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NSZWYpOwotCi0g
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIHRleHRJbnB1dENv
bnRvbGxlclN0ci5nZXQoKSwgdGV4dElucHV0Q29udG9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRp
b24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRleHRJbnB1
dENvbnRyb2xsZXIiLCBKU09iamVjdE1ha2UoY29udGV4dCwgY3JlYXRlSlNDbGFzcygpLmdldCgp
LCB0aGlzKSk7CiB9CiAKLUpTQ2xhc3NSZWYgVGV4dElucHV0Q29udHJvbGxlcjo6Z2V0SlNDbGFz
cygpCitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBUZXh0SW5wdXRDb250cm9sbGVyOjpjcmVhdGVK
U0NsYXNzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzID0gVGV4
dElucHV0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9IFRleHRJbnB1dENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0
aW9ucygpOwotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSAK
LSAgICB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIlRleHRJbnB1dENvbnRy
b2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBjb25zdCBKU0Ns
YXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtKU0NsYXNzQXR0
cmlidXRlTm9uZSwgIlRleHRJbnB1dENvbnRyb2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMoKSwgc3Rh
dGljRnVuY3Rpb25zKCksCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAK
ICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7Cisg
ICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbikpOwogfQogCi1K
U1N0YXRpY1ZhbHVlKiBUZXh0SW5wdXRDb250cm9sbGVyOjpzdGF0aWNWYWx1ZXMoKQorY29uc3Qg
SlNTdGF0aWNWYWx1ZSogVGV4dElucHV0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVzKCkKIHsKLSAg
ICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBzdGF0aWNWYWx1ZXNbXSA9IAorICAgIHN0YXRpYyBjb25z
dCBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0KICAgICB7CiAgICAgICAgIHsgMCwgMCwg
MCwgMCB9CiAgICAgfTsKICAgICByZXR1cm4gc3RhdGljVmFsdWVzOwogfQogCi1KU1N0YXRpY0Z1
bmN0aW9uKiBUZXh0SW5wdXRDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKQorY29uc3QgSlNT
dGF0aWNGdW5jdGlvbiogVGV4dElucHV0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKCkKIHsK
LSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICBz
dGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKICAgICAg
ICAgeyAic2V0TWFya2VkVGV4dCIsIHNldE1hcmtlZFRleHRDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJoYXNNYXJrZWRUZXh0IiwgaGFzTWFya2VkVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgInVubWFya1RleHQiLCB1bm1hcmtUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGV4dElucHV0Q29udHJvbGxlci5oCmluZGV4IDI5ZjAz
OGJlMmRkYjUwZTlmYWU1MzBlMWM2ZDEzYzFkNDZmOTk3OTIuLmU1YWY1ZWJlY2E0MmJiZWQ1ZjMx
ZDk5ZDRjOGE4MGE5NDZjMDQzMmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9UZXh0SW5wdXRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rl
eHRJbnB1dENvbnRyb2xsZXIuaApAQCAtMjYsMjAgKzI2LDE2IEBACiAgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAgCi0jaWZuZGVmIFRleHRJbnB1dENvbnRyb2xsZXJfaAotI2RlZmluZSBUZXh0SW5wdXRDb250
cm9sbGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250
ZXh0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTVmFsdWVSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5o
PgogI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBjbGFz
cyBUZXh0SW5wdXRDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICB2b2lkIHNldE1hcmtlZFRleHQoSlNTdHJp
bmdSZWYgdGV4dCwgdW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW5ndGgpOwogICAg
IGJvb2wgaGFzTWFya2VkVGV4dCgpOwpAQCAtNTAsOSArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3Rk
Ojp2ZWN0b3I8aW50PiBzZWxlY3RlZFJhbmdlKCk7CiAKIHByaXZhdGU6ICAgIAotICAgIHN0YXRp
YyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3Rh
dGljVmFsdWVzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9u
cygpOworICAgIHN0YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7
CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlcygpOworICAgIHN0
YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKIH07Ci0KLSNl
bmRpZiAvLyBUZXh0SW5wdXRDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU0Jhc2ljcy5jcHAKaW5kZXggZmZmMGI3NDk5MGFmYjllMTJhYzlkMDFhNzEwYTRj
NTI4MGUxZTkwOC4uNTkzMGU0ZjI3YzkwYTc2ODNlMTc3NDQ2Nzk0MDgyNDhmNTQwZTg4ZCAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKKysr
IGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKQEAgLTI4LDE5
ICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJv
b2xlYW5Pck51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIE9wdGlvbmFsPGJvb2w+IHZhbHVlKQor
T3B0aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2woSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNv
bnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOworICAgIHJl
dHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFsdWVJc051bGwo
Y29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9wdGlvbmFsKEpTVmFsdWVUb0Jv
b2xlYW4oY29udGV4dCwgdmFsdWUpKTsKK30KKworT3B0aW9uYWw8ZG91YmxlPiB0b09wdGlvbmFs
RG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIHJl
dHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFsdWVJc051bGwo
Y29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9wdGlvbmFsKEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogfQogCi1PcHRpb25hbDxib29sPiBKU1Zh
bHVlVG9OdWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFs
dWUpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgT3B0aW9uYWw8
Ym9vbD4gdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2
YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgPyBXVEY6Om51bGxvcHQgOiBP
cHRpb25hbDxib29sPihKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHZhbHVlKSk7CisgICAgcmV0
dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDog
SlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCi1KU1ZhbHVlUmVmIEpTVmFsdWVNYWtlU3Ry
aW5nT3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiBzdHJpbmdPck51bGwp
CitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYg
c3RyaW5nKQogewotICAgIHJldHVybiBzdHJpbmdPck51bGwgPyBKU1ZhbHVlTWFrZVN0cmluZyhj
b250ZXh0LCBzdHJpbmdPck51bGwpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOworICAgIHJl
dHVybiBzdHJpbmcgPyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmcpIDogSlNWYWx1
ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRl
SlNTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQpAQCAtNDgsMTkgKzUzLDQzIEBAIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpCiAgICAg
cmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZykpOwogfQog
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgYXV0byBzdHJpbmcgPSBhZG9wdCh2YWx1
ZSA/IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogbnVsbHB0
cik7CisgICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZyA6IGNyZWF0ZUpTU3RyaW5nKCIiKTsKK30K
KwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHN0cmluZykKIHsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY3JlYXRl
SlNTdHJpbmcoc3RyaW5nKS5nZXQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgcHJvcGVydHkoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sK
KyAgICByZXR1cm4gb2JqZWN0ID8gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3Qs
IGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBudWxscHRyKSA6IG51bGxwdHI7Cit9CisKK0pT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpKTsK
K30KKworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUpCit7CisgICAg
YXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7CisgICAgcmV0dXJu
IHZhbHVlID8gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgOiBkZWZhdWx0VmFsdWU7
Cit9CisKK2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBhdXRvIHZhbHVlID0gcHJv
cGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4gdmFsdWUgPyBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogMDsKK30KKwogSlNPYmplY3RSZWYg
b2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwg
Y29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb2Jq
ZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUpOworICAgIGF1dG8gdmFsdWUg
PSBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAgIHJldHVybiB2YWx1ZSA/IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpLCBu
dWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxjb25zdCBjaGFyKj4gbmFtZXMpCkBAIC03MCwyNyArOTksMzYgQEAgSlNPYmplY3RSZWYgb2Jq
ZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgc3Rk
Ojppbml0aWEKICAgICByZXR1cm4gb2JqZWN0OwogfQogCit1bnNpZ25lZCBhcnJheUxlbmd0aChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBu
dW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIik7Cit9CisKIHZvaWQgc2V0
UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3Qg
Y2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRl
eHQsIG9iamVjdCwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIEpTVmFsdWVNYWtlQm9vbGVh
bihjb250ZXh0LCB2YWx1ZSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7CiB9
CiAKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNv
bnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSlNPYmplY3RTZXRQcm9w
ZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGNyZWF0ZUpT
U3RyaW5nKG5hbWUpLmdldCgpLCB2YWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgc2V0
R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIqIG5h
bWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0
LCBuYW1lLCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCB2YWx1ZSkpOworfQorCiBKU1ZhbHVl
UmVmIGNhbGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3Qg
Y2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFsdWVSZWY+IGFyZ3VtZW50cykK
IHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYXV0byBm
dW5jdGlvbiA9IG9iamVjdFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7Ci0gICAgaWYg
KCFmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwgYXJndW1lbnRzLnNpemUo
KSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBmdW5jdGlvbiA/IEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb24sIG9iamVjdCwgYXJndW1lbnRz
LnNpemUoKSwgYXJndW1lbnRzLmJlZ2luKCksIG51bGxwdHIpIDogbnVsbHB0cjsKIH0KIAogSlNP
YmplY3RSZWYgY2FsbENvbnN0cnVjdG9yKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBjb25z
dCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJndW1lbnRz
KQogewogICAgIGF1dG8gY29uc3RydWN0b3IgPSBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHsgbmFtZSB9KTsKLSAgICBpZiAoIWNvbnN0
cnVjdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gSlNPYmplY3RDYWxs
QXNDb25zdHJ1Y3Rvcihjb250ZXh0LCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzLnNpemUoKSwgYXJn
dW1lbnRzLmJlZ2luKCksIG51bGxwdHIpOworICAgIHJldHVybiBjb25zdHJ1Y3RvciA/IEpTT2Jq
ZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dCwgY29uc3RydWN0b3IsIGFyZ3VtZW50cy5zaXpl
KCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9K
U0Jhc2ljcy5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oCmlu
ZGV4IDExZGRhNTI0N2E1YWI2YzA0MDk2M2RmMTlhYjBmNWUwMjk2Y2ViODIuLjY1ZjE4ZDdlY2Q4
MDE2ODMzMzM0ZGY1ZWI4ODhjY2M0YTBiMjFkNTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L0JpbmRpbmdzL0pTQmFzaWNzLmgKQEAgLTMyLDE2ICszMiwyOCBAQAogCiBuYW1lc3BhY2UgV1RS
IHsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVmLCBP
cHRpb25hbDxib29sPik7Ci1PcHRpb25hbDxib29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4o
SlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKK09wdGlvbmFsPGJvb2w+IHRvT3B0aW9uYWxCb29s
KEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitPcHRpb25hbDxkb3VibGU+IHRvT3B0aW9uYWxE
b3VibGUoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFr
ZVN0cmluZ09yTnVsbChKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmKTsKK0pTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiA9ICIiKTsKK0pTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwog
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciopOwog
SlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmLCBjb25zdCBjaGFyKik7CitKU1ZhbHVl
UmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYsIE9wdGlvbmFsPGJvb2w+KTsKK0pTVmFsdWVSZWYg
bWFrZVZhbHVlKEpTQ29udGV4dFJlZiwgSlNTdHJpbmdSZWYpOworCitKU1ZhbHVlUmVmIHByb3Bl
cnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOworYm9vbCBi
b29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFt
ZSwgYm9vbCBkZWZhdWx0VmFsdWUgPSBmYWxzZSk7Citkb3VibGUgbnVtZXJpY1Byb3BlcnR5KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUpOworSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHN0cmluZ1Byb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNv
bnN0IGNoYXIqIG5hbWUpOwordW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZik7CiBKU09iamVjdFJlZiBvYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFy
Kj4gbmFtZXMpOworCiB2b2lkIHNldFByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYs
IGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBzZXRHbG9iYWxPYmplY3RQcm9w
ZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYpOwordm9pZCBz
ZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGRv
dWJsZSB2YWx1ZSk7CisKIEpTVmFsdWVSZWYgY2FsbChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVm
LCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJn
dW1lbnRzKTsKIEpTT2JqZWN0UmVmIGNhbGxDb25zdHJ1Y3RvcihKU0dsb2JhbENvbnRleHRSZWYs
IGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlUmVmPiBhcmd1
bWVudHMpOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pT
V3JhcHBhYmxlLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBhYmxl
LmgKaW5kZXggOWUwZjA3ZGY1OTMyYWIzMDMzMWQ3YjYxZDE3MzUzYWU2ZTAxYzQ3My4uNTliZTFk
YWVhMjc3NTRlZTQ3NzViNGYzZTdhNWQ2ODJmYjFkNWYxZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGFibGUuaApAQCAtMjUsOSArMjUsMTAgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNDbGFzcyog
SlNDbGFzc1JlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNzIEpTV3JhcHBhYmxlIDogcHVi
bGljIFJlZkNvdW50ZWQ8SlNXcmFwcGFibGU+IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0Jp
bmRpbmdzL0pTV3JhcHBlci5oCmluZGV4IGY2Nzk4Zjk5YTRmZWM2NzU2M2QwOTE1NjNiNTA1MDlk
ZmM4NTcyZGEuLjliNmJhZDhhZjA0NGIyMDJmZjg3MjdhY2VkN2NiOWZmYjJjZWM1MmUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmgKKysrIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaApAQCAtNTAsNCArNTAs
OSBAQCBpbmxpbmUgdm9pZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcgogICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29u
dGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhwcm9wZXJ0eU5hbWUpLmdldCgpLCBKU1dyYXBw
ZXI6OndyYXAoY29udGV4dCwgdmFsdWUpLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOwogfQogCitp
bmxpbmUgdm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU1dyYXBwYWJsZSogdmFsdWUpCit7CisgICAgc2V0
R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgcHJvcGVydHlOYW1lLCBKU1dyYXBwZXI6Ondy
YXAoY29udGV4dCwgdmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9tYWMvRXZlbnRTZXJp
YWxpemVyTWFjLm1tIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9FdmVudFNlcmlhbGl6YXRpb24v
bWFjL0V2ZW50U2VyaWFsaXplck1hYy5tbQppbmRleCAwZjE3YjJjZDYzOWE2MzA2M2E0ODhkZjNh
MzNhMzVlMzJhMmVjY2MxLi5iZGQyMDdiZDQwOWYwNGVlNWYzODIzMTk0ZmEyNGU2MzI4ODU4OTE3
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9t
YWMvRXZlbnRTZXJpYWxpemVyTWFjLm1tCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvRXZl
bnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMubW0KQEAgLTE5NSw3ICsxOTUs
NyBAQCBAaW1wbGVtZW50YXRpb24gRXZlbnRTZXJpYWxpemVyCiAKICsgKE5TRGljdGlvbmFyeSAq
KWRpY3Rpb25hcnlGb3JFdmVudDooQ0dFdmVudFJlZilyYXdFdmVudCByZWxhdGl2ZVRvVGltZToo
Q0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5QdHI8Q0dF
dmVudFJlZj4gcGxhaW5FdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZShOVUxMKSk7CisgICAg
YXV0byBwbGFpbkV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsKICAgICBDR0V2
ZW50UmVmIHJhd1BsYWluRXZlbnQgPSBwbGFpbkV2ZW50LmdldCgpOwogCiAgICAgTlNNdXRhYmxl
RGljdGlvbmFyeSAqZGljdCA9IFtbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKQEAgLTIyNiw3ICsyMjYsNyBAQCArIChOU0RpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5Rm9yRXZlbnQ6KENHRXZlbnRSZWYpcmF3RXZlbnQgcmVsYXRpdmVUb1RpbWU6KENHRXZlbgog
CiArIChSZXRhaW5QdHI8Q0dFdmVudFJlZj4pY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5OihOU0Rp
Y3Rpb25hcnkgKilkaWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyByZWxhdGl2ZVRvVGlt
ZTooQ0dFdmVudFRpbWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5QdHI8
Q0dFdmVudFJlZj4gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOworICAgIGF1
dG8gZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOwogICAgIENHRXZlbnRSZWYg
cmF3RXZlbnQgPSBldmVudC5nZXQoKTsKIAogICAgIEZPUl9FQUNIX0NHRVZFTlRfSU5URUdFUl9G
SUVMRChTVE9SRV9JTlRFR0VSX0ZJRUxEX1RPX0VWRU5UKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBj
b25zdCBmbG9hdCBldmVudERpc3BhdGNoVGltZXJSYXRlID0gMS4gLyAxMjAuOwogCiArICh2b2lk
KXBsYXlTdHJlYW06KE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICopZXZlbnREaWN0cyB3aW5kb3c6
KE5TV2luZG93ICopd2luZG93IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKCkpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBSZXRhaW5QdHI8RXZlbnRTdHJlYW1QbGF5ZXI+IHBsYXllciA9IGFk
b3B0TlMoW1tFdmVudFN0cmVhbVBsYXllciBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gcGxheWVy
ID0gYWRvcHROUyhbW0V2ZW50U3RyZWFtUGxheWVyIGFsbG9jXSBpbml0XSk7CiAKICAgICBwbGF5
ZXItPl9yZW1haW5pbmdFdmVudERpY3Rpb25hcmllcyA9IGFkb3B0TlMoW2V2ZW50RGljdHMgbXV0
YWJsZUNvcHldKTsKICAgICBwbGF5ZXItPl93aW5kb3cgPSB3aW5kb3c7CkBAIC0yODIsNyArMjgy
LDcgQEAgLSAodm9pZClwbGF5YmFja1RpbWVyRmlyZWQ6KE5TVGltZXIgKil0aW1lcgogICAgIGF1
dG8gcmVtb3ZlTGlzdCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwog
ICAgIE5TRXZlbnQgKm5zRXZlbnQgPSBuaWw7CiAgICAgZm9yIChpZCBldmVudERpY3QgaW4gX3Jl
bWFpbmluZ0V2ZW50RGljdGlvbmFyaWVzLmdldCgpKSB7Ci0gICAgICAgIFJldGFpblB0cjxDR0V2
ZW50UmVmPiBldmVudCA9IFtFdmVudFNlcmlhbGl6ZXIgY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5
OmV2ZW50RGljdCBpbldpbmRvdzpfd2luZG93LmdldCgpIHJlbGF0aXZlVG9UaW1lOl9zdGFydFRp
bWVdOworICAgICAgICBhdXRvIGV2ZW50ID0gW0V2ZW50U2VyaWFsaXplciBjcmVhdGVFdmVudEZv
ckRpY3Rpb25hcnk6ZXZlbnREaWN0IGluV2luZG93Ol93aW5kb3cuZ2V0KCkgcmVsYXRpdmVUb1Rp
bWU6X3N0YXJ0VGltZV07CiAgICAgICAgIGlmIChDR0V2ZW50R2V0VGltZXN0YW1wKGV2ZW50Lmdl
dCgpKSA8IG1hY2hfYWJzb2x1dGVfdGltZSgpKSB7CiAgICAgICAgICAgICBuc0V2ZW50ID0gW05T
RXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpldmVudC5nZXQoKV07CiAgICAgICAgICAgICBbTlNBcHAg
cG9zdEV2ZW50Om5zRXZlbnQgYXRTdGFydDpOT107CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVu
bmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250ZXh0LmNwcAppbmRleCAy
NzA1YjM5YTI0N2RkMjU3ZDVjNmQ1OGM0NzBlOTYzM2E5MTlkZmQ0Li41ZGNmYjdjOTg3MmYzOTlm
MTU2NzRkOTcxMGRlYjI4OWIyZDEyMThkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAKQEAgLTI2LDkg
KzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJVSVNjcmlwdENvbnRleHQu
aCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVFI7CkBAIC00MywxMSArNDIsNyBAQCBVSVNjcmlwdENv
bnRleHQ6OlVJU2NyaXB0Q29udGV4dChVSVNjcmlwdENvbnRleHREZWxlZ2F0ZSYgZGVsZWdhdGUs
IFVJU2NyaXB0Q29udAogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKIHsKICAgICBtX2NvbnRy
b2xsZXIgPSBmYWN0b3J5KCp0aGlzKTsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9
IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChtX2NvbnRleHQuZ2V0KCkpOwotCi0gICAgSlNWYWx1
ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgIG1fY29udHJvbGxlci0+bWFrZVdpbmRvd09i
amVjdChtX2NvbnRleHQuZ2V0KCksIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7CisgICAgbV9j
b250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIFVJU2Ny
aXB0Q29udGV4dDo6flVJU2NyaXB0Q29udGV4dCgpCkBAIC02Niw5ICs2MSw3IEBAIHZvaWQgVUlT
Y3JpcHRDb250ZXh0OjpydW5VSVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgdW5zaWduZWQg
c2NyaXB0Q2FsbGJhY2tJCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRlU2NyaXB0
KG1fY29udGV4dC5nZXQoKSwgc3RyaW5nUmVmLmdldCgpLCAwLCAwLCAxLCAmZXhjZXB0aW9uKTsK
ICAgICAKICAgICBpZiAoIWhhc091dHN0YW5kaW5nQXN5bmNUYXNrcygpKSB7Ci0gICAgICAgIEpT
VmFsdWVSZWYgc3RyaW5naWZ5RXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBzdHJp
bmdpZmllZCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkobV9jb250ZXh0LmdldCgpLCByZXN1
bHQsICZzdHJpbmdpZnlFeGNlcHRpb24pKTsKLSAgICAgICAgcmVxdWVzdFVJU2NyaXB0Q29tcGxl
dGlvbihzdHJpbmdpZmllZC5nZXQoKSk7CisgICAgICAgIHJlcXVlc3RVSVNjcmlwdENvbXBsZXRp
b24oY3JlYXRlSlNTdHJpbmcobV9jb250ZXh0LmdldCgpLCByZXN1bHQpLmdldCgpKTsKICAgICAg
ICAgdHJ5VG9Db21wbGV0ZVVJU2NyaXB0Rm9yQ3VycmVudFBhcmVudENhbGxiYWNrKCk7CiAgICAg
fQogfQpAQCAtMTg5LDEwICsxODIsMTAgQEAgSlNPYmplY3RSZWYgVUlTY3JpcHRDb250ZXh0Ojpv
YmplY3RGcm9tUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpIGNvbnMKIHsKICAg
ICBKU09iamVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2UobV9jb250ZXh0LmdldCgpLCBudWxs
cHRyLCBudWxscHRyKTsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgp
LCBvYmplY3QsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZWZ0IikpLmdl
dCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QueCgpKSwga0pTUHJv
cGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1f
Y29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygidG9wIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3Qu
eSgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNl
dFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygid2lkdGgiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKG1fY29udGV4
dC5nZXQoKSwgcmVjdC53aWR0aCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRy
KTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpLmdldCgpLCBKU1ZhbHVl
TWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QuaGVpZ2h0KCkpLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZU5vbmUsIG51bGxwdHIpOworICAgIHNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwg
b2JqZWN0LCAibGVmdCIsIHJlY3QueCgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0
KCksIG9iamVjdCwgInRvcCIsIHJlY3QueSgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQu
Z2V0KCksIG9iamVjdCwgIndpZHRoIiwgcmVjdC53aWR0aCgpKTsKKyAgICBzZXRQcm9wZXJ0eSht
X2NvbnRleHQuZ2V0KCksIG9iamVjdCwgImhlaWdodCIsIHJlY3QuaGVpZ2h0KCkpOwogICAgIAog
ICAgIHJldHVybiBvYmplY3Q7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGE1YThkN2Nj
MmZjYzlmZWQ2ZmY1NTIyY2M5ZWQ2N2NlNDI5OGNhODEuLjM1MjRiNjBiZDgxY2Q5Y2FiMzEwYWEx
YjU2OGYyM2ZkNTE2OGRjZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCkBAIC02Myw3ICs2Myw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgd2FpdEZvck91dHN0YW5kaW5nQ2FsbGJhY2tzKCkgeyAvKiBub3RJbXBsZW1lbnRlZCgpOyAq
LyB9CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICAvLyBUcmFuc2FjdGlvbiBoZWxwZXJzCiAg
ICAgCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNj
cmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyU2hhcmVkLmNwcAppbmRleCBjNmViMTQwYWEz
NTZjNjZkOGM0NTAyMTRlN2RiMmM4NWFkM2E3MWEzLi5iZmY0ZjM0MzNkYmQyOTU3NWQ2MjViNzM5
NGU2ZDlkMzgxY2FlYzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHAK
QEAgLTQxLDIwICs0MSwxNSBAQCBEZXZpY2VPcmllbnRhdGlvbiogdG9EZXZpY2VPcmllbnRhdGlv
bihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKICAgICAgICAgRGV2aWNl
T3JpZW50YXRpb246OkxhbmRzY2FwZUxlZnQsCiAgICAgICAgIERldmljZU9yaWVudGF0aW9uOjpM
YW5kc2NhcGVSaWdodAogICAgIH07Ci0KLSAgICBhdXRvIG9wdGlvbiA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKLSAgICBpZiAob3B0aW9uLT5z
dHJpbmcoKSA9PSAicG9ydHJhaXQiKQorICAgIGF1dG8gb3B0aW9uID0gY3JlYXRlSlNTdHJpbmco
Y29udGV4dCwgdmFsdWUpOworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9w
dGlvbi5nZXQoKSwgInBvcnRyYWl0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzBdOwotCi0g
ICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gInBvcnRyYWl0LXVwc2lkZWRvd24iKQorICAgIGlm
IChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgInBvcnRyYWl0LXVw
c2lkZWRvd24iKSkKICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbMV07Ci0KLSAgICBpZiAob3B0aW9u
LT5zdHJpbmcoKSA9PSAibGFuZHNjYXBlLWxlZnQiKQorICAgIGlmIChKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgImxhbmRzY2FwZS1sZWZ0IikpCiAgICAgICAgIHJl
dHVybiAmdmFsdWVzWzJdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gImxhbmRzY2Fw
ZS1yaWdodCIpCisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uLmdl
dCgpLCAibGFuZHNjYXBlLXJpZ2h0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzNdOwotCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTY4LDkgKzYzLDkgQEAgdm9pZCBVSVNjcmlwdENv
bnRyb2xsZXI6OmNvbnRleHREZXN0cm95ZWQoKQogICAgIG1fY29udGV4dCA9IG51bGxwdHI7CiB9
CiAKLXZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgInVp
Q29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgInVpQ29udHJvbGxlciIsIHRoaXMpOwogfQogCiBKU0NsYXNzUmVm
IFVJU2NyaXB0Q29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbSBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbQppbmRleCA4ZmMw
MjExNjdhYWMyMjE1MzZhMTc2NmU1MzkwMTlmZTY0NDA1OGUxLi5kODZlZjk1NmY4MGRmYTE5MjI5
NTRlMTE3OWFmMmIzNTJiOTgzOTI0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIubW0KKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNo
YXJlZC9jb2NvYS9MYXlvdXRUZXN0U3BlbGxDaGVja2VyLm1tCkBAIC0yNiw3ICsyNiw3IEBACiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkxheW91dFRlc3RTcGVsbENoZWNrZXIuaCIKIAot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbXBvcnQgIkpTQmFzaWNz
LmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KQEAgLTIxMiwxMSArMjEyLDExIEBAIC0gKHZvaWQp
c2V0UmVzdWx0czooVGV4dENoZWNraW5nUmVzdWx0c0RpY3Rpb25hcnkgKilyZXN1bHRzCiAtICh2
b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFsdWUgaW5Db250
ZXh0OihKU0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1dG8gcmVzdWx0c09iamVjdCA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCByZXN1bHRzVmFsdWUsIG51bGxwdHIpOwotICAgIGF1dG8g
ZnJvbVByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJm
cm9tIikpOwotICAgIGF1dG8gdG9Qcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygidG8iKSk7Ci0gICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gYWRvcHQo
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInR5cGUiKSk7Ci0gICAgYXV0byByZXBsYWNl
bWVudFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJy
ZXBsYWNlbWVudCIpKTsKLSAgICBhdXRvIGRldGFpbHNQcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGV0YWlscyIpKTsKKyAgICBhdXRvIGZyb21Qcm9w
ZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJmcm9tIik7CisgICAgYXV0byB0b1Byb3Bl
cnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoInRvIik7CisgICAgYXV0byB0eXBlUHJvcGVy
dHlOYW1lID0gV1RSOjpjcmVhdGVKU1N0cmluZygidHlwZSIpOworICAgIGF1dG8gcmVwbGFjZW1l
bnRQcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJyZXBsYWNlbWVudCIpOworICAg
IGF1dG8gZGV0YWlsc1Byb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoImRldGFpbHMi
KTsKICAgICBhdXRvIHJlc3VsdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxv
Y10gaW5pdF0pOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIHRoZSBPYmplY3RpdmUtQyBBUEkgd291
bGQgbWFrZSB0aGlzIGxvZ2ljIGVhc2llciB0byBmb2xsb3cuCkBAIC0yMjgsMTUgKzIyOCwxMyBA
QCAtICh2b2lkKXNldFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHRSZWYpYwogICAgICAgICBhdXRvIHJlc3VsdHNGb3JXb3JkID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgICAgIGZvciAoc2l6
ZV90IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBKU1Byb3BlcnR5TmFtZUFycmF5R2V0
Q291bnQocmVzdWx0c0FycmF5UHJvcGVydHlOYW1lcyk7ICsrcmVzdWx0SW5kZXgpIHsKICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0c09iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBKU09i
amVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCByZXN1bHRzQXJyYXksIHJlc3VsdEluZGV4
LCBudWxscHRyKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBsb25nIGZyb21WYWx1ZSA9IGxyb3Vu
ZGwoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
cmVzdWx0c09iamVjdCwgZnJvbVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxwdHIp
KTsKLSAgICAgICAgICAgIGxvbmcgdG9WYWx1ZSA9IGxyb3VuZGwoSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgdG9Qcm9w
ZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBhdXRvIHR5
cGVWYWx1ZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0eXBlUHJvcGVydHlOYW1lLmdldCgpLCBu
dWxscHRyKSwgbnVsbHB0cikpOworICAgICAgICAgICAgbG9uZyBmcm9tVmFsdWUgPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2Jq
ZWN0LCBmcm9tUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBsb25nIHRvVmFsdWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCB0b1Byb3BlcnR5TmFtZS5nZXQoKSwgbnVs
bHB0ciksIG51bGxwdHIpOworICAgICAgICAgICAgYXV0byB0eXBlVmFsdWUgPSBXVFI6OmNyZWF0
ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09i
amVjdCwgdHlwZVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgYXV0
byByZXBsYWNlbWVudFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRz
T2JqZWN0LCByZXBsYWNlbWVudFByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cik7CiAgICAgICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHJlcGxhY2VtZW50VGV4dDsKLSAgICAgICAgICAg
IGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHJlcGxhY2VtZW50VmFsdWUpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byByZXBsYWNlbWVudEpTU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAg
ICAgICAgICAgcmVwbGFjZW1lbnRUZXh0ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCByZXBsYWNlbWVudEpTU3RyaW5nLmdldCgpKSk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCByZXBs
YWNlbWVudFZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRleHQgPSBhZG9wdENG
KEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoY29udGV4dCwgcmVwbGFjZW1lbnRWYWx1ZSkuZ2V0KCkpKTsKICAgICAgICAgICAgIGF1
dG8gZGV0YWlscyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogICAg
ICAgICAgICAgYXV0byBkZXRhaWxzVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQs
IHJlc3VsdHNPYmplY3QsIGRldGFpbHNQcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpOwogICAg
ICAgICAgICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgZGV0YWlsc1ZhbHVlKSkg
ewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25z
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlGdW5jdGlvbnMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lNTUxOGFiMzgxMzhkNmI3YmZhYTAzNTlmNzgyY2VjZDg3MzZmOTA5Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25zLmgKQEAg
LTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0
cmluZ0Z1bmN0aW9ucy5oIgorCituYW1lc3BhY2UgV1RSIHsKKworV0tEaWN0aW9uYXJ5UmVmIGRp
Y3Rpb25hcnlWYWx1ZShXS1R5cGVSZWYpOworCitib29sIGJvb2xlYW5WYWx1ZShXS1R5cGVSZWYp
OworYm9vbCBib29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYpOworCitk
b3VibGUgZG91YmxlVmFsdWUoV0tUeXBlUmVmKTsKK09wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxE
b3VibGVWYWx1ZShXS1R5cGVSZWYpOworCitXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShXS1R5cGVS
ZWYpOworV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoV0tUeXBlUmVmKTsKKwordWludDY0X3QgdWlu
dDY0VmFsdWUoV0tUeXBlUmVmKTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKGNvbnN0IFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4mKTsKKworV0tUeXBlUmVmIHZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29u
c3QgY2hhcioga2V5KTsKKworYm9vbCBib29sZWFuVmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25z
dCBjaGFyKiBrZXkpOworZG91YmxlIGRvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3Qg
Y2hhcioga2V5KTsKK1dLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29u
c3QgY2hhcioga2V5KTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29u
c3QgY2hhcioga2V5KTsKKworT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdL
RGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYs
IGNvbnN0IGNoYXIqIGtleSwgY29uc3QgT3B0aW9uYWw8VD4mIHZhbHVlKTsKK3ZvaWQgc2V0VmFs
dWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFy
KiBrZXksIFdLVHlwZVJlZiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBib29sIHZhbHVlKTsK
K3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4m
LCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29u
c3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXks
IHVpbnQ2NF90IHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGRvdWJsZSB2YWx1ZSk7Cit2b2lk
IHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29u
c3QgY2hhcioga2V5LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgYm9vbCBi
b29sZWFuVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dl
dFR5cGVJRCh2YWx1ZSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkgJiYgV0tCb29sZWFuR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPih2YWx1ZSkpOworfQorCitpbmxpbmUgYm9vbCBi
b29sZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7CisgICAg
cmV0dXJuIGJvb2xlYW5WYWx1ZSh2YWx1ZS5nZXQoKSk7Cit9CisKK2lubGluZSBXS0RpY3Rpb25h
cnlSZWYgZGljdGlvbmFyeVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFs
dWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpID8gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxpbmUg
ZG91YmxlIGRvdWJsZVZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUg
JiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLRG91YmxlR2V0VHlwZUlEKCkgPyBXS0RvdWJsZUdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPih2YWx1ZSkpIDogMDsKK30KKworaW5saW5l
IE9wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS1R5cGVSZWYgdmFsdWUpCit7
CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS0RvdWJsZUdldFR5
cGVJRCgpID8gbWFrZU9wdGlvbmFsKFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3Vi
bGVSZWY+KHZhbHVlKSkpIDogV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgV0tTdHJpbmdSZWYg
c3RyaW5nVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dl
dFR5cGVJRCh2YWx1ZSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSA/IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPih2YWx1ZSkgOiBudWxscHRyOworfQorCitpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZT
dHJpbmcoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB0b1dURlN0cmluZyhzdHJpbmdW
YWx1ZSh2YWx1ZSkpOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUoV0tUeXBlUmVm
IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tV
SW50NjRHZXRUeXBlSUQoKSA/IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KHZhbHVlKSkgOiAwOworfQorCitpbmxpbmUgdWludDY0X3QgdWludDY0VmFsdWUoY29uc3Qg
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgdmFsdWUpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVl
KHZhbHVlLmdldCgpKTsKK30KKworaW5saW5lIFdLVHlwZVJlZiB2YWx1ZShXS0RpY3Rpb25hcnlS
ZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHRvV0soa2V5KS5nZXQoKSk7Cit9CisKK2lubGlu
ZSBib29sIGJvb2xlYW5WYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hh
cioga2V5KQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5
KSk7Cit9CisKK2lubGluZSBkb3VibGUgZG91YmxlVmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rp
b25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gZG91YmxlVmFsdWUodmFsdWUo
ZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShX
S0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVy
biBzdHJpbmdWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5lIHVpbnQ2
NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBr
ZXkpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHZhbHVlKGRpY3Rpb25hcnksIGtleSkpOwor
fQorCitpbmxpbmUgT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdLRGljdGlv
bmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIG9wdGlv
bmFsRG91YmxlVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSB2b2lk
IHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0
aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHRvV0soa2V5KS5nZXQoKSwgdmFsdWUpOwor
fQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBib29sIHZhbHVlKQorewor
ICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIGNv
bnN0IGNoYXIqIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgdG9XSyh2
YWx1ZSkuZ2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBj
b25zdCBXVEY6OlN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwga2V5
LCB0b1dLKHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXksIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKworaW5saW5lIHZvaWQg
c2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rp
b25hcnksIGNvbnN0IGNoYXIqIGtleSwgZG91YmxlIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRp
Y3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBjb25z
dCBPcHRpb25hbDxUPiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBzZXRWYWx1
ZShkaWN0aW9uYXJ5LCBrZXksICp2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmggYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaAppbmRleCA2NDQ3NjAzOTY4ZDIw
NjQyMGJlYjk0Mjc3M2IyNGI3ODk2NDFiNWM5Li5mYTNhODhkM2FmMzkzNGQ0Yzg4MjBiZjUwZmU5
Zjg5N2IzOGZkMDRhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHku
aApAQCAtMTEyLDE4ICsxMTIsMTkgQEAgcHJpdmF0ZToKICAgICBQT0lOVCBwb3NpdGlvbkluUG9p
bnQoKSBjb25zdCB7IHJldHVybiB7IHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueCksIHN0
YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueSkgfTsgfQogI2VuZGlmCiAKLSAgICBkb3VibGUg
bV90aW1lOwotICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKLSAgICBib29sIG1fbGVmdE1vdXNlQnV0
dG9uRG93bjsKLSAgICBpbnQgbV9jbGlja0NvdW50OwotICAgIGRvdWJsZSBtX2NsaWNrVGltZTsK
LSAgICBXS1BvaW50IG1fY2xpY2tQb3NpdGlvbjsKLSAgICBXS0V2ZW50TW91c2VCdXR0b24gbV9j
bGlja0J1dHRvbjsKKyAgICBkb3VibGUgbV90aW1lIHsgMCB9OworICAgIFdLUG9pbnQgbV9wb3Np
dGlvbiB7IH07CisgICAgYm9vbCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24geyBmYWxzZSB9OworICAg
IGludCBtX2NsaWNrQ291bnQgeyAwIH07CisgICAgZG91YmxlIG1fY2xpY2tUaW1lIHsgMCB9Owor
ICAgIFdLUG9pbnQgbV9jbGlja1Bvc2l0aW9uIHsgfTsKKyAgICBXS0V2ZW50TW91c2VCdXR0b24g
bV9jbGlja0J1dHRvbiB7IGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbiB9OwogICAgIHVuc2ln
bmVkIG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB7IDAgfTsKICNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBpbnQgZXZlbnROdW1iZXI7Ci0jZWxpZiBQTEFURk9STShXUEUpCi0gICAgdWludDMy
X3QgbV9idXR0b25TdGF0ZTsKKyAgICBpbnQgZXZlbnROdW1iZXIgeyAwIH07CisjZW5kaWYKKyNp
ZiBQTEFURk9STShXUEUpCisgICAgdWludDMyX3QgbV9idXR0b25TdGF0ZSB7IDAgfTsKICAgICBW
ZWN0b3I8c3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+IG1fdG91Y2hFdmVudHM7CiAg
ICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV91cGRhdGVkVG91Y2hFdmVudHM7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92
aWRlck1vY2suY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVy
TW9jay5jcHAKaW5kZXggNmY5M2NhMjczMDMwZjU3NzZlMzE4ZjllNDU2OTAyMmNlZTE0YjkwZC4u
YzQyNTFiMzAxZmI1NTRjN2VhZTYwMzE2Mjc1OTZmNTBiNzhhMjU5ZCAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKQEAgLTYzLDkg
KzYzLDkgQEAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6On5HZW9sb2NhdGlvblByb3ZpZGVyTW9j
aygpCiAgICAgV0tHZW9sb2NhdGlvbk1hbmFnZXJTZXRQcm92aWRlcihtX2dlb2xvY2F0aW9uTWFu
YWdlciwgMCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9u
KGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29s
IHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywg
ZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHBy
b3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIEdlb2xvY2F0aW9uUHJv
dmlkZXJNb2NrOjpzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFs
PGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBtX3Bv
c2l0aW9uLmFkb3B0KFdLR2VvbG9jYXRpb25Qb3NpdGlvbkNyZWF0ZV9jKFdhbGxUaW1lOjpub3co
KS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNj
dXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNT
cGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCkpOworICAgIG1fcG9z
aXRpb24uYWRvcHQoV0tHZW9sb2NhdGlvblBvc2l0aW9uQ3JlYXRlX2MoV2FsbFRpbWU6Om5vdygp
LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1
cmFjeSwgYWx0aXR1ZGUuaGFzVmFsdWUoKSwgYWx0aXR1ZGUudmFsdWVPcigwKSwgYWx0aXR1ZGVB
Y2N1cmFjeS5oYXNWYWx1ZSgpLCBhbHRpdHVkZUFjY3VyYWN5LnZhbHVlT3IoMCksIGhlYWRpbmcu
aGFzVmFsdWUoKSwgaGVhZGluZy52YWx1ZU9yKDApLCBzcGVlZC5oYXNWYWx1ZSgpLCBzcGVlZC52
YWx1ZU9yKDApLCBmbG9vckxldmVsLmhhc1ZhbHVlKCksIGZsb29yTGV2ZWwudmFsdWVPcigwKSkp
OwogCiAgICAgbV9oYXNFcnJvciA9IGZhbHNlOwogICAgIG1fZXJyb3JNZXNzYWdlLmNsZWFyKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmgK
aW5kZXggMWVkNGFkZjliMzkzOTNhMzMzYWEzMjUxMDk3YjllM2FhNDJjYzM2Yi4uOWJmNjMzODRh
ZTI3ZGIyOGM1ZjU0MDU2ODViODhmNzViZWQ3YjUxNiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaApAQCAtMzcsNyArMzcsNyBAQCBwdWJs
aWM6CiAgICAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2soV0tDb250ZXh0UmVmKTsKICAgICB+R2Vv
bG9jYXRpb25Qcm92aWRlck1vY2soKTsKIAotICAgIHZvaWQgc2V0UG9zaXRpb24oZG91YmxlIGxh
dGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwg
ZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVh
ZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9v
ckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25h
bDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJs
ZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRQb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tT
dHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKIAogICAgIHZvaWQgc3RhcnRVcGRhdGluZyhXS0dlb2xv
Y2F0aW9uTWFuYWdlclJlZik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmluZGV4
IDZhMDhhYWE2YjYzOWYzZjU1YzhjNDZhOTRjMmZlOTVkYjU0N2Y3ODIuLmFkNGEyNWFlNWIwN2I3
NThlMmUwYTkxZmFmMWI1MjgzMDNlYjg0OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuY3BwCkBAIC03NSw5ICs3NSw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnVw
ZGF0ZUlzb2xhdGVkVHJlZU1vZGUoKQogfQogI2VuZGlmCiAKLXZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsK
LSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgdGhpcyk7CiB9CiAKIEpT
Q2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCkBAIC05Niwx
NyArOTYsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5jZWRBY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpCiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKKwogUmVmPEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7
Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3QgPSBzdGF0aWNf
Y2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7
Ci0KICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHJvb3QpOwogfQog
CiBSZWY8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZv
Y3VzZWRFbGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgUGxhdGZvcm1VSUVsZW1l
bnQgZm9jdXNlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nl
c3NpYmlsaXR5Rm9jdXNlZE9iamVjdChwYWdlKSk7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNyZWF0ZShmb2N1c2VkRWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmgKaW5kZXggNjZjMzQzODIyYmJiYzY5NTk5YmFmNmE0NzY2MGExMzg3ZWUyNTFiMC4u
ZDljMmYxMjZmODcxY2UyZWVmMDdiMDAzNTgwZjZkYWNlNmM1NDIzNSAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgfkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9p
ZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAgICAgdmlydHVhbCBKU0NsYXNzUmVm
IHdyYXBwZXJDbGFzcygpOwogICAgIAogICAgIC8vIEVuaGFuY2VkIGFjY2Vzc2liaWxpdHkuCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdz
L0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQppbmRleCBiOWY1
ZWVmZmE0NjQ5ZjQxN2Y4MmIxNjE3MDlmNGFiYWUwOTk5MWYyLi41MmUzZWZhOTkxYjlkZDZjMTc1
ZGJiOGU0MTBlNmZlY2ZhYzMwMTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVy
YXRvclRlc3RSdW5uZXIucG0KQEAgLTI2MSw4ICsyNjEsNyBAQCAke2ltcGxlbWVudGF0aW9uQ2xh
c3NOYW1lfSogdG8ke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfShKU0NvbnRleHRSZWYgY29udGV4
dCwgSgogCiBKU0NsYXNzUmVmICR7Y2xhc3NOYW1lfTo6JHtjbGFzc1JlZkdldHRlcn0oKQogewot
ICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7Ci0gICAgaWYgKCFqc0NsYXNzKSB7CisgICAg
c3RhdGljIGNvbnN0IEpTQ2xhc3NSZWYganNDbGFzcyA9IFtdIHsKICAgICAgICAgSlNDbGFzc0Rl
ZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OwogICAgICAgICBk
ZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJAe1skdHlwZS0+bmFtZV19IjsKICAgICAgICAgZGVmaW5p
dGlvbi5wYXJlbnRDbGFzcyA9IEB7WyRzZWxmLT5fcGFyZW50Q2xhc3NSZWZHZXR0ZXJFeHByZXNz
aW9uKCRpbnRlcmZhY2UpXX07CkBAIC0yNzQsOCArMjczLDggQEAgRU9GCiAgICAgcHVzaChAY29u
dGVudHMsICIgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBmaW5hbGl6ZTtcbiIpIHVubGVz
cyBfcGFyZW50SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCiAgICAgcHVzaChAY29udGVudHMsIDw8
RU9GKTsKLSAgICAgICAganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0oKTsK
ICAgICByZXR1cm4ganNDbGFzczsKIH0KIApAQCAtNDc3LDEwICs0NzYsMTEgQEAgc3ViIF9wbGF0
Zm9ybVR5cGVDb25zdHJ1Y3RvcgogewogICAgIG15ICgkc2VsZiwgJHR5cGUsICRhcmd1bWVudE5h
bWUpID0gQF87CiAKLSAgICByZXR1cm4gIkpTVmFsdWVUb051bGxhYmxlQm9vbGVhbihjb250ZXh0
LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0eXBlLT5p
c051bGxhYmxlOworICAgIHJldHVybiAidG9PcHRpb25hbEJvb2woY29udGV4dCwgJGFyZ3VtZW50
TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkdHlwZS0+aXNOdWxsYWJsZTsK
ICAgICByZXR1cm4gIkpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlm
ICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gIiRhcmd1bWVudE5hbWUiIGlm
ICR0eXBlLT5uYW1lIGVxICJvYmplY3QiOwotICAgIHJldHVybiAiYWRvcHQoSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSkiIGlmICQkc2VsZntjb2Rl
R2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gImNyZWF0ZUpTU3Ry
aW5nKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklz
U3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsRG91YmxlKGNvbnRleHQs
ICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJpbWl0aXZlVHlw
ZSgkdHlwZSkgJiYgJHR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikiIGlmICQkc2VsZntjb2RlR2VuZXJh
dG9yfS0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gInRvIiAuIF9pbXBsZW1l
bnRhdGlvbkNsYXNzTmFtZSgkdHlwZSkgLiAiKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIjsKIH0K
QEAgLTQ5OSwxOCArNDk5LDE2IEBAIHN1YiBfcGxhdGZvcm1UeXBlVmFyaWFibGVEZWNsYXJhdGlv
bgogICAgICAgICAiSlNWYWx1ZVJlZiIgPT4gMSwKICAgICApOwogCi0gICAgbXkgJG51bGxWYWx1
ZSA9ICIwIjsKKyAgICBteSAkbnVsbFZhbHVlID0gIm51bGxwdHIiOwogICAgIGlmICgkcGxhdGZv
cm1UeXBlIGVxICJKU1ZhbHVlUmVmIikgewogICAgICAgICAkbnVsbFZhbHVlID0gIkpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpIjsKLSAgICB9IGVsc2lmIChkZWZpbmVkICRub25Qb2ludGVy
VHlwZXN7JHBsYXRmb3JtVHlwZX0gJiYgJHBsYXRmb3JtVHlwZSBuZSAiZG91YmxlIikgewotICAg
ICAgICAkbnVsbFZhbHVlID0gIiRwbGF0Zm9ybVR5cGUoKSI7CisgICAgfSBlbHNpZiAoZGVmaW5l
ZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9KSB7CisgICAgICAgICRudWxsVmFsdWUg
PSAkdHlwZS0+aXNOdWxsYWJsZSA/ICJXVEY6Om51bGxvcHQiIDogIiRwbGF0Zm9ybVR5cGUoKSI7
CiAgICAgfQogCi0gICAgJHBsYXRmb3JtVHlwZSAuPSAiKiIgdW5sZXNzIGRlZmluZWQgJG5vblBv
aW50ZXJUeXBlc3skcGxhdGZvcm1UeXBlfTsKLQotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAk
dmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiAmJiAkY29uc3RydWN0b3I7IiBpZiAkY29uZGl0aW9u
ICYmICRwbGF0Zm9ybVR5cGUgZXEgImJvb2wiOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAk
dmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiA/ICRjb25zdHJ1Y3RvciA6ICRudWxsVmFsdWU7IiBp
ZiAkY29uZGl0aW9uOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAkdmFyaWFibGVOYW1lID0g
JGNvbnN0cnVjdG9yOyI7CisgICAgcmV0dXJuICJib29sICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0
aW9uICYmICRjb25zdHJ1Y3RvcjsiIGlmICRjb25kaXRpb24gJiYgJHBsYXRmb3JtVHlwZSBlcSAi
Ym9vbCI7CisgICAgcmV0dXJuICJhdXRvICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uID8gJGNv
bnN0cnVjdG9yIDogJG51bGxWYWx1ZTsiIGlmICRjb25kaXRpb247CisgICAgcmV0dXJuICJhdXRv
ICR2YXJpYWJsZU5hbWUgPSAkY29uc3RydWN0b3I7IjsKIH0KIAogc3ViIF9yZXR1cm5FeHByZXNz
aW9uCkBAIC01MTgsMTEgKzUxNiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBteSAo
JHNlbGYsICRyZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAiSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1bmRl
ZmluZWQiOwotICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQsICR7
ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVy
blR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHBy
ZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlw
ZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJl
dHVybiAiJHtleHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7CiAg
ICAgcmV0dXJuICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYg
JCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwotICAg
IHJldHVybiAiSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufS5n
ZXQoKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBl
KTsKKyAgICByZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIg
aWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwogICAg
IHJldHVybiAidG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwogfQog
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL1Rlc3RSdW5uZXIuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAppbmRleCBmYmVmMzk2ZjVmNmYzYmZmNGY5OWM4YTU2
YTZlNjJhYzAxNDBmZmE0Li5mMzdlMDA2Nzc1YjhlMzA2MWM3Y2VjOGY5YjVlZjc4ODYxODA5MTBh
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL1Rlc3RSdW5uZXIuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKQEAgLTIxNSw3ICsyMTUsNyBAQCBpbnRlcmZh
Y2UgVGVzdFJ1bm5lciB7CiAKICAgICAvLyBHZW9sb2NhdGlvbgogICAgIHVuZGVmaW5lZCBzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhbiB2YWx1ZSk7Ci0gICAgdW5kZWZpbmVkIHNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgYWx0aXR1ZGUsIG9wdGlvbmFsIG9iamVj
dCBhbHRpdHVkZUFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgaGVhZGluZywgb3B0aW9uYWwgb2Jq
ZWN0IHNwZWVkLCBvcHRpb25hbCBvYmplY3QgZmxvb3JMZXZlbCk7CisgICAgdW5kZWZpbmVkIHNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBkb3VibGU/IGFsdGl0dWRlLCBvcHRpb25hbCBk
b3VibGU/IGFsdGl0dWRlQWNjdXJhY3ksIG9wdGlvbmFsIGRvdWJsZT8gaGVhZGluZywgb3B0aW9u
YWwgZG91YmxlPyBzcGVlZCwgb3B0aW9uYWwgZG91YmxlPyBmbG9vckxldmVsKTsKICAgICB1bmRl
ZmluZWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKERPTVN0cmlu
ZyBlcnJvck1lc3NhZ2UpOwogICAgIGJvb2xlYW4gaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZl
KCk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
RXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDU1M2ZkMDVlZjE2OWYz
NTIzYTA0MzFmMTMxNzQyZmJjMjIxNzA0MDkuLjQ0MjdmMDg5MjYwMTZhYTM0ODM5NzIyYzcxYmMz
YTA2MTJkZDI3ZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcApAQCAtMjYsMTAg
KzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kaW5nQ29u
dHJvbGxlci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5j
bHVkZSAiSlNFdmVudFNlbmRpbmdDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rp
b25zLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dL
QnVuZGxlRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oPgpA
QCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgTWVudUl0ZW1Qcml2YXRlRGF0YSB7CiB9OwogCiAjaWYg
RU5BQkxFKENPTlRFWFRfTUVOVVMpCisKIHN0YXRpYyBKU1ZhbHVlUmVmIG1lbnVJdGVtQ2xpY2tD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKIHsKICAg
ICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJdGVt
UHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtNjIsNyAr
NjMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNrQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iagogc3RhdGljIEpTVmFsdWVSZWYgZ2V0TWVu
dUl0ZW1UaXRsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmpl
Y3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewog
ICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRhID0gc3RhdGljX2Nhc3Q8TWVudUl0
ZW1Qcml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZSA9IGFkb3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5
VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQoKSkpOworICAgIGF1dG8gd2tUaXRsZSA9IGFk
b3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQo
KSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHdrVGl0bGUp
LmdldCgpKTsKIH0KIApAQCAtNzMsMTggKzc0LDE3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldE1l
bnVJdGVtQ2hpbGRyZW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYK
ICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJ
dGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CiAgICAgYXV0byBj
aGlsZHJlbiA9IGFkb3B0V0soV0tDb250ZXh0TWVudUNvcHlTdWJtZW51SXRlbXMocHJpdmF0ZURh
dGEtPm1faXRlbS5nZXQoKSkpOwogCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2Jq
ZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVj
dE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAoIVdLQXJyYXlHZXRTaXplKGNo
aWxkcmVuLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgICAgICByZXR1
cm4gYXJyYXk7CiAKLSAgICBKU09iamVjdFJlZiBhcnJheU9iamVjdCA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBX
S0FycmF5R2V0U2l6ZShjaGlsZHJlbi5nZXQoKSk7ICsraSkgewogICAgICAgICBhdXRvIGl0ZW0g
PSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4
KGNoaWxkcmVuLmdldCgpLCBpKSk7CiAgICAgICAgIGF1dG8qIHByaXZhdGVEYXRhID0gbmV3IE1l
bnVJdGVtUHJpdmF0ZURhdGEoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBpdGVtKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
YXJyYXlPYmplY3QsIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCks
IHByaXZhdGVEYXRhKSwgMCk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNv
bnRleHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFzcygp
LCBwcml2YXRlRGF0YSksIDApOwogICAgIH0KIAotICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAg
ICByZXR1cm4gYXJyYXk7CiB9CiAKIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY01lbnVJ
dGVtRnVuY3Rpb25zW10gPSB7CkBAIC0xMjYsNiArMTI2LDcgQEAgc3RhdGljIEpTQ2xhc3NSZWYg
Z2V0TWVudUl0ZW1DbGFzcygpCiAKICAgICByZXR1cm4gbWVudUl0ZW1DbGFzczsKIH0KKwogI2Vu
ZGlmCiAKIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXIoSlNTdHJpbmdSZWYg
bW9kaWZpZXIpCkBAIC0xNTAsMjUgKzE1MSwzMSBAQCBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBw
YXJzZU1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyKQogICAgIHJldHVybiAwOwogfQogCi1z
dGF0aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGFycmF5KQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK3N0YXRpYyB1aW50NjRfdCBw
YXJzZVRvdWNoTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIpCiB7Ci0gICAgYXV0byBsZW5n
dGhTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikp
OwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQsIGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIDApOwotICAgIGlmICghbGVuZ3RoVmFsdWUp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CisgICAgaWYgKEpTU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJjdHJsIikpCisgICAgICAgIHJldHVybiBr
V0tFdmVudE1vZGlmaWVyc0NvbnRyb2xLZXk7CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobW9kaWZpZXIsICJzaGlmdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2Rp
ZmllcnNTaGlmdEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2Rp
ZmllciwgImFsdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2RpZmllcnNBbHRLZXk7Cisg
ICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJtZXRhS2V5Iikp
CisgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVyc01ldGFLZXk7CisgICAgcmV0dXJuIDA7
CiB9CiAKKyNlbmRpZgorCiBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJy
YXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKICAgICBp
ZiAoIWFycmF5VmFsdWUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gVGhlIHZhbHVlIG1h
eSBlaXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBv
ZiBtb2RpZmllcnMuCi0gICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVl
KSkgewotICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgYXJyYXlWYWx1ZSwgMCkpOwotICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihzdHJp
bmcuZ2V0KCkpOwotICAgIH0KKyAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFycmF5
VmFsdWUpKQorICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihjcmVhdGVKU1N0cmluZyhjb250
ZXh0LCBhcnJheVZhbHVlKS5nZXQoKSk7CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250
ZXh0LCBhcnJheVZhbHVlKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzYsMjkgKzE4MywyMCBA
QCBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYQogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5TGVu
Z3RoKGNvbnRleHQsIGFycmF5KTsKICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IDA7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCAmZXhjZXB0aW9uKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRv
IHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsICZleGNl
cHRpb24pKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBtb2RpZmllcnMgfD0gcGFyc2VNb2RpZmllcihzdHJpbmcuZ2V0KCkpOworICAgICAg
ICBpZiAoYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFy
cmF5LCBpLCBudWxscHRyKSkKKyAgICAgICAgICAgIG1vZGlmaWVycyB8PSBwYXJzZU1vZGlmaWVy
KGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CiAgICAgfQogICAgIHJldHVy
biBtb2RpZmllcnM7CiB9CiAKLVJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXIpOwotfQotCi1FdmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNl
bmRpbmdDb250cm9sbGVyKCkKK3N0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXJB
cnJheShKU1ZhbHVlUmVmIGFycmF5VmFsdWUpCiB7CisgICAgcmV0dXJuIHBhcnNlTW9kaWZpZXJB
cnJheShXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpLCBhcnJh
eVZhbHVlKTsKIH0KIAotRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXIoKQorUmVmPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+IEV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OmNyZWF0ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcik7CiB9CiAKIEpTQ2xhc3NSZWYgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6d3JhcHBl
ckNsYXNzKCkKQEAgLTIwNiwyMzcgKzIwNCwxMTYgQEAgSlNDbGFzc1JlZiBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogICAgIHJldHVybiBKU0V2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmV2ZW50U2VuZGluZ0NvbnRyb2xsZXJDbGFzcygpOwogfQogCi1lbnVtIE1vdXNlU3Rh
dGUgewotICAgIE1vdXNlVXAsCi0gICAgTW91c2VEb3duCi19OworZW51bSBNb3VzZVN0YXRlIHsg
TW91c2VVcCwgTW91c2VEb3duIH07CiAKLXN0YXRpYyBXS011dGFibGVEaWN0aW9uYXJ5UmVmIGNy
ZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VTdGF0ZSBzdGF0ZSwgaW50IGJ1dHRvbiwgV0tFdmVu
dE1vZGlmaWVycyBtb2RpZmllcnMpCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlU3RhdGUgc3RhdGUsIGludCBidXR0b24sIFdL
RXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQogewotICAgIFdLTXV0YWJsZURpY3Rpb25hcnlSZWYg
RXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHN0YXRlID09IE1vdXNlVXAgPyAiTW91c2VVcCIgOiAiTW91c2VEb3duIikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGJ1dHRvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkJ1dHRvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gYnV0dG9uUmVm
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHksIGJ1dHRvbktleS5nZXQoKSwgYnV0dG9uUmVmLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlmaWVyc1JlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUobW9kaWZpZXJzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LCBtb2RpZmllcnNLZXkuZ2V0KCksIG1vZGlmaWVyc1JlZi5nZXQoKSk7Ci0KLSAgICBy
ZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3Nh
Z2UiLCBzdGF0ZSA9PSBNb3VzZVVwID8gIk1vdXNlVXAiIDogIk1vdXNlRG93biIpOworICAgIHNl
dFZhbHVlKGJvZHksICJCdXR0b24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbikpLmdl
dCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTW9kaWZpZXJzIiwgYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShtb2RpZmllcnMpKS5nZXQoKSk7CisgICAgcmV0dXJuIGJvZHk7CiB9CiAKIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9k
aWZpZXJBcnJheSkgCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBpbmplY3RlZEJ1bmRs
ZS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQ
YWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5k
bGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJz
IG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFycmF5KTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZURvd24sIGJ1dHRvbiwg
bW9kaWZpZXJzKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhwYWdlLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZl
bnRTZW5kZXIiLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBwYXJz
ZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJheSkpLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjptb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJB
cnJheSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFy
cmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBidXR0
b24sIG1vZGlmaWVycykpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVh
dGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlVXAsIGJ1dHRvbiwgcGFyc2VNb2RpZmllckFycmF5KG1v
ZGlmaWVyQXJyYXkpKS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
bW91c2VNb3ZlVG8oaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZU1vdmVUbyIpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VL
ZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlki
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJT
dWJNZXNzYWdlIiwgIk1vdXNlTW92ZVRvIik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CiAgICAgbV9wb3NpdGlvbiA9IFdLUG9p
bnRNYWtlKHgsIHkpOwotICAgIAotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgMCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9k
eS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNs
aWNrKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTW91c2VGb3JjZUNsaWNrIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVz
c2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZUNsaWNrIik7
CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQo
KSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c3RhcnRBbmRDYW5jZWxNb3Vz
ZUZvcmNlQ2xpY2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZl
bnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZl
bnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdl
IiwgIlN0YXJ0QW5kQ2FuY2VsTW91c2VGb3JjZUNsaWNrIik7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZURvd24oKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Vi
TWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlRG93biIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJN
ZXNzYWdlIiwgIk1vdXNlRm9yY2VEb3duIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6bW91c2VGb3JjZVVwKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VGb3JjZVVwIikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtl
eS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91
c2VGb3JjZVVwIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VG
b3JjZUNoYW5nZWQoZG91YmxlIGZvcmNlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlQ2hhbmdlZCIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkZvcmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBmb3JjZVJlZiA9
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoZm9yY2UpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGZvcmNlS2V5LmdldCgpLCBmb3JjZVJlZi5n
ZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAg
IGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZUZvcmNlQ2hhbmdlZCIpOworICAgIHNl
dFZhbHVlKGJvZHksICJGb3JjZSIsIGZvcmNlKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMZWFwRm9yd2Fy
ZCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVGltZUluTWlsbGlzZWNvbmRzIikpOwotICAgIFdLUmV0YWluUHRyPFdL
VUludDY0UmVmPiB0aW1lUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHRpbWVLZXkuZ2V0KCksIHRpbWVSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTGVh
cEZvcndhcmQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiVGltZUluTWlsbGlzZWNvbmRzIiwgYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMpKS5nZXQoKSk7CisgICAgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljaygpCiB7Ci0g
ICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOwotICAgIGludCBidXR0b24gPSAwOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLQot
ICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSBkb3duLgotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IG1vdXNlRG93bk1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3Vz
ZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlRG93bk1lc3NhZ2VCb2R5Lmdl
dCgpKTsKLQotICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSB1cC4KLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBtb3VzZVVwTWVzc2FnZUJvZHkgPSBhZG9wdFdLKGNyZWF0
ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlVXBNZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVz
c2FnZUJvZHkoTW91c2VEb3duLCAwLCAwKS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJF
dmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgMCwgMCkuZ2V0KCkp
OwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRl
S2V5RG93bk1lc3NhZ2VCb2R5KEpTU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2Rp
ZmllcnMsIGludCBsb2NhdGlvbikKIHsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleURvd24iKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5Lmdl
dCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4ga2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5Iikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
a2V5S2V5LmdldCgpLCB0b1dLKGtleSkuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJz
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyc0tleS5nZXQo
KSwgbW9kaWZpZXJzUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBs
b2NhdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxvY2F0
aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBsb2NhdGlvblJlZiA9IGFkb3B0
V0soV0tVSW50NjRDcmVhdGUobG9jYXRpb24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGxvY2F0aW9uS2V5LmdldCgpLCBsb2NhdGlvblJl
Zi5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRv
IGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiS2V5RG93biIpOworICAgIHNldFZhbHVlKGJvZHksICJL
ZXkiLCB0b1dLKGtleSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJNb2RpZmllcnMiLCBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiTG9jYXRpb24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxvY2F0aW9uKSkuZ2V0KCkp
OworICAgIHJldHVybiBib2R5OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Omtl
eURvd24oSlNTdHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2Nh
dGlvbikKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFy
cmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4ga2V5RG93bk1lc3Nh
Z2VCb2R5ID0gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgbW9kaWZpZXJzLCBsb2NhdGlv
bik7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlS2V5RG93bk1lc3NhZ2VC
b2R5KGtleSwgcGFyc2VNb2RpZmllckFycmF5KG1vZGlmaWVyQXJyYXkpLCBsb2NhdGlvbikuZ2V0
KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNjaGVkdWxlQXN5bmNocm9u
b3VzS2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBrZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHko
a2V5LCAwIC8qIG1vZGlmaWVycyAqLywgMCAvKiBsb2NhdGlvbiAqLyk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZUtleURvd25NZXNz
YWdlQm9keShrZXksIDAsIDApLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1l
c3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VTY3JvbGxCeSIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1
Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCiAgICAgV0tCdW5k
bGVQYWdlRm9yY2VSZXBhaW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSk7IC8vIFRyaWdnZXJzIGEgc2Nyb2xsaW5nIHRyZWUgY29tbWl0LgotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSk7CisKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VTY3JvbGxCeSIp
OworICAgIHNldFZhbHVlKGJvZHksICJYIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSkuZ2V0
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSku
Z2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsK
IH0KIAogc3RhdGljIHVpbnQ2NF90IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcoSlNTdHJpbmdSZWYg
cGhhc2VTdHIpCkBAIC00NzUsOTAgKzM1Miw1OCBAQCBzdGF0aWMgdWludDY0X3QgY2dFdmVudE1v
bWVudHVtUGhhc2VGcm9tU3RyaW5nKEpTU3RyaW5nUmVmIHBoYXNlU3RyKQogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNl
cyhpbnQgeCwgaW50IHksIEpTU3RyaW5nUmVmIHBoYXNlU3RyLCBKU1N0cmluZ1JlZiBtb21lbnR1
bVN0cikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAg
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIk1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLSAgICAKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHhSZWYgPSBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJl
ZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0K
ICAgICB1aW50NjRfdCBwaGFzZSA9IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcocGhhc2VTdHIpOwog
ICAgIHVpbnQ2NF90IG1vbWVudHVtID0gY2dFdmVudE1vbWVudHVtUGhhc2VGcm9tU3RyaW5nKG1v
bWVudHVtU3RyKTsKLSAgICAKKwogICAgIGlmIChwaGFzZSA9PSA0IC8qIGtDR1Njcm9sbFBoYXNl
RW5kZWQgKi8gfHwgcGhhc2UgPT0gOCAvKiBrQ0dTY3JvbGxQaGFzZUNhbmNlbGxlZCAqLykKICAg
ICAgICAgbV9zZW50V2hlZWxQaGFzZUVuZE9yQ2FuY2VsID0gdHJ1ZTsKLSAgICAKICAgICBpZiAo
bW9tZW50dW0gPT0gMyAvKiBrQ0dNb21lbnR1bVNjcm9sbFBoYXNlRW5kICovKQogICAgICAgICBt
X3NlbnRXaGVlbE1vbWVudHVtUGhhc2VFbmQgPSB0cnVlOwogCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBoYXNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiUGhhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHBoYXNlUmVmID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShwaGFzZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgcGhhc2VLZXkuZ2V0KCksIHBoYXNlUmVmLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb21lbnR1bUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vbWVudHVtIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLVUludDY0UmVmPiBtb21lbnR1bVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9t
ZW50dW0pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIG1vbWVudHVtS2V5LmdldCgpLCBtb21lbnR1bVJlZi5nZXQoKSk7Ci0KICAgICBXS0J1
bmRsZVBhZ2VGb3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpKTsgLy8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcgdHJlZSBjb21taXQuCi0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpKTsKKworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZVNjcm9sbEJ5
V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIGFk
b3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIs
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
UGhhc2UiLCBwaGFzZSk7CisgICAgc2V0VmFsdWUoYm9keSwgIk1vbWVudHVtIiwgbW9tZW50dW0p
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAog
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQg
eCwgaW50IHksIGJvb2wgcGFnZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5IikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3Vi
TWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0gYWRvcHRXSyhX
S0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gcGFnZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJQYWdlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcGFnZWRS
ZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHBhZ2VkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwYWdlZEtleS5nZXQoKSwgcGFnZWRS
ZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkNvbnRpbnVvdXNN
b3VzZVNjcm9sbEJ5Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlBhZ2VkIiwgcGFnZWQp
OwogICAgIC8vIEZJWE1FOiBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIGFzeW5jaHJvbm91cywgYXMg
c2Nyb2xsaW5nIGlzIGludHJpbnNpY2FsbHkgYXN5bmNocm9ub3VzLgogICAgIC8vIFNlZSBhbHNv
OiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODI1Nj4uCi0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogSlNWYWx1ZVJl
ZiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250ZXh0Q2xpY2soKQogewotICAgIFdLQnVuZGxl
UGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
OworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogI2lmIEVOQUJMRShDT05URVhUX01FTlVT
KQotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1
bmRsZVBhZ2VDb3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikp
OwotICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0
LCAwLCAwLCAwKTsKKyAgICBhdXRvIG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VD
b3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikpOworICAgIGF1
dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAo
IW1lbnVFbnRyaWVzKQotICAgICAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgICAgIHJldHVy
biBhcnJheTsKIAotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIGFycmF5UmVzdWx0LCAwKTsKICAgICBzaXplX3QgZW50cmllc1NpemUgPSBXS0FycmF5
R2V0U2l6ZShtZW51RW50cmllcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
bnRyaWVzU2l6ZTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0
SXRlbUF0SW5kZXgobWVudUVudHJpZXMuZ2V0KCksIGkpKSA9PSBXS0NvbnRleHRNZW51SXRlbUdl
dFR5cGVJRCgpKTsKIAogICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJlZiBpdGVtID0gc3RhdGlj
X2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZW51RW50
cmllcy5nZXQoKSwgaSkpOwogICAgICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0
YSA9IG5ldyBNZW51SXRlbVByaXZhdGVEYXRhKHBhZ2UsIGl0ZW0pOwotICAgICAgICBKU09iamVj
dFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwgaSwgSlNPYmplY3RNYWtlKGNv
bnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAwKTsKKyAgICAgICAgSlNP
YmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFrZShj
b250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCksIHByaXZhdGVEYXRhKSwgMCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgIHJldHVybiBhcnJheTsKICNlbHNlCiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogI2VuZGlmCkBAIC02MTUsMjEgKzQ2
MCwxNCBAQCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKiB0b01vbml0b3JXaGVlbEV2ZW50c09w
dGlvbnMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVgogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0
KGNvbnRleHQsIGFyZ3VtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRv
IHJlc2V0TGF0Y2hpbmdTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygicmVzZXRMYXRjaGluZyIpKTsKLSAgICBhdXRvIHJlc2V0TGF0Y2hpbmdWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50
LCBudWxscHRyKSwgcmVzZXRMYXRjaGluZ1N0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAgICBi
b29sIHJlc2V0TGF0Y2hpbmcgPSB0cnVlOwotICAgIGlmIChyZXNldExhdGNoaW5nVmFsdWUgJiYg
SlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5nVmFsdWUpKQotICAgICAgICBy
ZXNldExhdGNoaW5nID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5nVmFs
dWUpOwotCiAgICAgc3RhdGljIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMgb3B0aW9uczsKLSAg
ICBvcHRpb25zLnJlc2V0TGF0Y2hpbmcgPSByZXNldExhdGNoaW5nOworICAgIG9wdGlvbnMucmVz
ZXRMYXRjaGluZyA9IGJvb2xlYW5Qcm9wZXJ0eShjb250ZXh0LCAoSlNPYmplY3RSZWYpYXJndW1l
bnQsICJyZXNldExhdGNoaW5nIiwgdHJ1ZSk7CiAgICAgcmV0dXJuICZvcHRpb25zOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vbml0b3JXaGVlbEV2ZW50cyhNb25pdG9yV2hl
ZWxFdmVudHNPcHRpb25zKiBvcHRpb25zKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFn
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICAKICAg
ICBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgPSBmYWxzZTsKICAgICBtX3NlbnRXaGVlbE1v
bWVudHVtUGhhc2VFbmQgPSBmYWxzZTsKQEAgLTY2Myw3ICs1MDEsNyBAQCB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OmNhbGxBZnRlclNjcm9sbGluZ0NvbXBsZXRlcyhKU1ZhbHVlUmVmIGZ1
bmN0aW9uQ2FsbAogICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgCkBAIC02
ODMsMTk5ICs1MjEsMTAyIEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FsbEFmdGVy
U2Nyb2xsaW5nQ29tcGxldGVzKEpTVmFsdWVSZWYgZnVuY3Rpb25DYWxsCiB9CiAKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmFkZFRvdWNo
UG9pbnQoaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRUb3VjaFBvaW50IikpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5n
ZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJBZGRU
b3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oeCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHkp
KTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5Lmdl
dCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp1cGRhdGVUb3VjaFBvaW50
KGludCBpbmRleCwgaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVcGRhdGVUb3VjaFBvaW50IikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSW5kZXgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGluZGV4UmVmID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXkuZ2V0KCksIGluZGV4UmVmLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2
NFJlZj4geFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IHlSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiVXBkYXRlVG91Y2hQb2ludCIpOworICAgIHNl
dFZhbHVlKGJvZHksICJJbmRleCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbmRleCkpOworICAg
IHNldFZhbHVlKGJvZHksICJYIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHgpKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiWSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih5KSk7CisgICAgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKLXZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihjb25zdCBKU1N0cmluZ1Jl
ZiAmbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQordm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpz
ZXRUb3VjaE1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0VG91Y2hNb2RpZmllciIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdl
dCgpKTsKLQotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kID0gMDsKLSAgICBpZiAoSlNTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImN0cmwiKSkKLSAgICAgICAgbW9kID0ga1dL
RXZlbnRNb2RpZmllcnNDb250cm9sS2V5OwotICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1vZGlmaWVyLCAic2hpZnQiKSkKLSAgICAgICAgbW9kID0ga1dLRXZlbnRNb2RpZmll
cnNTaGlmdEtleTsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmll
ciwgImFsdCIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlmaWVyc0FsdEtleTsKLSAgICBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgIm1ldGEiKSkKLSAgICAg
ICAgbW9kID0ga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5OwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1vZGlmaWVyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiTW9kaWZpZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlmaWVy
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2QpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyS2V5LmdldCgpLCBtb2Rp
ZmllclJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRW5hYmxlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBlbmFibGVSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGVuYWJsZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgZW5hYmxlS2V5LmdldCgpLCBlbmFibGVSZWYuZ2V0KCkpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1
Yk1lc3NhZ2UiLCAiU2V0VG91Y2hNb2RpZmllciIpOworICAgIHNldFZhbHVlKGJvZHksICJNb2Rp
ZmllciIsIHBhcnNlVG91Y2hNb2RpZmllcihtb2RpZmllcikpOworICAgIHNldFZhbHVlKGJvZHks
ICJFbmFibGUiLCBlbmFibGUpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCi0KIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFRvdWNoUG9pbnRSYWRpdXMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1giKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHJhZGl1c1gpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXku
Z2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNZIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShy
YWRpdXNZKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlNl
dFRvdWNoUG9pbnRSYWRpdXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUmFkaXVzWCIsIHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihyYWRpdXNYKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlJhZGl1c1ki
LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmFkaXVzWSkpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OnRvdWNoU3RhcnQoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2Fn
ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaFN0YXJ0IikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2Fn
ZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAi
VG91Y2hTdGFydCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRl
ciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNo
TW92ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRl
ciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlRvdWNoTW92ZSIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VO
YW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7
CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwor
ICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlRvdWNoTW92ZSIpOworICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoRW5kKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hFbmQiKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBz
dWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVz
c2FnZSIsICJUb3VjaEVuZCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2
ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hDYW5jZWwiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBz
dWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJUb3VjaENhbmNlbCIp
OworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0
KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNsZWFyVG91Y2hQb2ludHMo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDbGVhclRvdWNoUG9pbnRzIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2Fn
ZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAw
KTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiQ2xlYXJUb3VjaFBvaW50cyIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkp
OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnJlbGVhc2VUb3VjaFBvaW50KGlu
dCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2Vu
ZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUmVsZWFzZVRvdWNoUG9pbnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBz
dWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5k
ZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5kZXhSZWYgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwgaW5kZXhSZWYuZ2V0KCkpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1
Yk1lc3NhZ2UiLCAiUmVsZWFzZVRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiSW5k
ZXgiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXgpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FuY2Vs
VG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiBpbmRleFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGluZGV4S2V5
LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJDYW5jZWxUb3Vj
aFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIkluZGV4Iiwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGluZGV4KSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgYm9keS5nZXQoKSk7CiB9CisKICNlbmRpZgogCiAvLyBPYmplY3QgQ3JlYXRpb24KIAotdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3ZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRS
ZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJl
dmVudFNlbmRlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImV2ZW50U2VuZGVyIiwgdGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRleCA5YTJhZmQ5NThjY2Q3MGVj
ZDIxZWM0ZTNiM2ZlYzRjZjdjYzg1YmE4Li5lYTQzN2ZiZGJlMGMzNDg5MDU3ZTMxNjA3NWFkZWE2
NTNhZGI1MTBkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaApAQCAtMzAsMjcgKzMwLDIz
IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLR2VvbWV0cnkuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+
CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwor
dHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVmOwordHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAK
IHN0cnVjdCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zIHsKLSAgICBNb25pdG9yV2hlZWxFdmVu
dHNPcHRpb25zKGJvb2wgcmVzZXRMYXRjaGluZyA9IHRydWUpCi0gICAgICAgIDogcmVzZXRMYXRj
aGluZyhyZXNldExhdGNoaW5nKQotICAgIHsgfQotCiAgICAgYm9vbCByZXNldExhdGNoaW5nIHsg
dHJ1ZSB9OwogfTsKIAogTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyogdG9Nb25pdG9yV2hlZWxF
dmVudHNPcHRpb25zKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAKLWNsYXNzIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgeworY2xhc3MgRXZlbnRTZW5kaW5n
Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5F
dmVudFNlbmRpbmdDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CiAKLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVy
Q2xhc3MoKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAg
IHZvaWQgbW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSk7CiAg
ICAgdm9pZCBtb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSk7CkBA
IC03Myw3ICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGtleURvd24oSlNTdHJpbmdSZWYga2V5
LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2NhdGlvbik7CiAgICAgdm9pZCBzY2hl
ZHVsZUFzeW5jaHJvbm91c0tleURvd24oSlNTdHJpbmdSZWYga2V5KTsKIAotICAgIC8vIFpvb20g
ZnVuY3Rpb25zLgogICAgIHZvaWQgdGV4dFpvb21JbigpOwogICAgIHZvaWQgdGV4dFpvb21PdXQo
KTsKICAgICB2b2lkIHpvb21QYWdlSW4oKTsKQEAgLTgxLDEwICs3Niw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNjYWxlUGFnZUJ5KGRvdWJsZSBzY2FsZSwgZG91YmxlIHgsIGRvdWJsZSB5KTsKIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgLy8gVG91Y2ggZXZlbnRzLgogICAgIHZvaWQg
YWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpOwogICAgIHZvaWQgdXBkYXRlVG91Y2hQb2ludChp
bnQgaW5kZXgsIGludCB4LCBpbnQgeSk7Ci0gICAgdm9pZCBzZXRUb3VjaE1vZGlmaWVyKGNvbnN0
IEpTU3RyaW5nUmVmICZtb2RpZmllciwgYm9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0VG91Y2hN
b2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllciwgYm9vbCBlbmFibGUpOwogICAgIHZvaWQgc2V0
VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOwogICAgIHZvaWQgdG91
Y2hTdGFydCgpOwogICAgIHZvaWQgdG91Y2hNb3ZlKCk7CkBAIC05Niw3ICs5MCwxMCBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyKCk7Cisg
ICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlcigpID0gZGVmYXVsdDsKKworICAgIEpTQ2xhc3NSZWYg
d3JhcHBlckNsYXNzKCkgZmluYWw7CisKICAgICBXS1BvaW50IG1fcG9zaXRpb247CiAgICAgYm9v
bCBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zZW50
V2hlZWxNb21lbnR1bVBoYXNlRW5kIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcAppbmRleCA5MzU4ZjRh
MGRlNWIzZDliYzMxNmI1ZTBhZGZkMDQxMjY2NDI1OGZmLi5kYjQyNWU3NWU4MGIwNTQwOGJkZjNl
M2UzNjQ3NjUxMDk2MzBkM2ZkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0zNywxNCArMzcsNiBAQCBSZWY8
R0NDb250cm9sbGVyPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgR0NDb250cm9sbGVyKTsKIH0KIAotR0NDb250cm9sbGVyOjpHQ0NvbnRyb2xsZXIoKQot
ewotfQotCi1HQ0NvbnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIoKQotewotfQotCiBKU0NsYXNzUmVm
IEdDQ29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKIHsKICAgICByZXR1cm4gSlNHQ0NvbnRyb2xs
ZXI6OmdDQ29udHJvbGxlckNsYXNzKCk7CkBAIC02NSwxMSArNTcsOSBAQCBzaXplX3QgR0NDb250
cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkKICAgICByZXR1cm4gV0tCdW5kbGVHZXRKYXZhU2Ny
aXB0T2JqZWN0c0NvdW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSk7CiB9
CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09i
amVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dP
YmplY3QsICJHQ0NvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIHNldEds
b2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJHQ0NvbnRyb2xsZXIiLCB0aGlzKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaAppbmRleCBkMzQ5YzFjZTk5MGU4N2Q3ZGYyZmNiOGM4
Mjg4NWJjYTMwNTcyYTBiLi4zNGFiMjQyNTEzOGMxZDc1ZmIyNGEyNTEwNzQzNjc4ZDgxOWVkYzIy
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29u
dHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0ND
b250cm9sbGVyLmgKQEAgLTI2LDI2ICsyNiwyNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJKU1dyYXBwYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4
dFJlZjsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIEdDQ29udHJvbGxlciA6IHB1YmxpYyBK
U1dyYXBwYWJsZSB7CitjbGFzcyBHQ0NvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgSlNXcmFwcGFi
bGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R0NDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAg
ICB2aXJ0dWFsIH5HQ0NvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKIAotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBw
ZXJDbGFzcygpOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAg
ICAgdm9pZCBjb2xsZWN0KCk7CiAgICAgdm9pZCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9v
bCB3YWl0VW50aWxEb25lKTsKICAgICBzaXplX3QgZ2V0SlNPYmplY3RDb3VudCgpOwogCiBwcml2
YXRlOgotICAgIEdDQ29udHJvbGxlcigpOworICAgIEdDQ29udHJvbGxlcigpID0gZGVmYXVsdDsK
KworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggN2FlODFiYjRiNTkwOTZjNThjOGI1YTE0Yzg4
YzRjMzNmOGMxNDU3MS4uYmJlOTNkYzVjZmYwMDAwM2IyMTM5ZDA1ZGRiNThkMTMwMGYxMjUwNCAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHAKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJJbmplY3RlZEJ1
bmRsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgorI2luY2x1ZGUgIkRpY3Rpb25h
cnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKLSNpbmNsdWRl
ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVu
ZGxlLmg+CkBAIC0xMTgsMTggKzExOCwxMyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRDcmVh
dGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIGlmICghaXNNYWluUGFnZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluaXRpYWxpemF0aW9uIikp
OwogICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOwogICAgIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKG1f
YnVuZGxlLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXN1bHQpOworICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShtX2J1bmRsZSwgdG9XSygiSW5pdGlhbGl6YXRpb24i
KS5nZXQoKSwgbnVsbHB0ciwgJnJlc3VsdCk7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECi0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJlc3VsdCkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gaW5pdGlhbGl6
YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KHJl
c3VsdCkpOworICAgIGF1dG8gaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhkaWN0
aW9uYXJ5VmFsdWUocmVzdWx0KSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVz
dW1lVGVzdGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJl
c3VtZVRlc3RpbmciKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VtZVRlc3RpbmdWYWx1ZSA9IFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkoaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5LmdldCgpLCByZXN1
bWVUZXN0aW5nS2V5LmdldCgpKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmVzdW1lVGVzdGlu
Z1ZhbHVlKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgaWYgKFdLQm9vbGVhbkdldFZh
bHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdW1lVGVzdGluZ1ZhbHVlKSkpCisgICAg
aWYgKGJvb2xlYW5WYWx1ZShpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkuZ2V0KCksICJSZXN1bWVU
ZXN0aW5nIikpCiAgICAgICAgIGJlZ2luVGVzdGluZyhpbml0aWFsaXphdGlvbkRpY3Rpb25hcnku
Z2V0KCksIEJlZ2luZ1Rlc3RpbmdNb2RlOjpSZXN1bWUpOwogfQogCkBAIC0xNzksMTYgKzE3NCwy
NCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldExvY2FsU2V0dGluZ3MoKQogICAgIHNldGxv
Y2FsZShMQ19BTEwsICIiKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKK3Zv
aWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKFdLU3RyaW5nUmVmLCBXS1R5cGVS
ZWYpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFcnJvciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShtX2J1bmRsZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgdG9XSygiRXJyb3IiKS5nZXQo
KSwgdG9XSygiVW5rbm93biIpLmdldCgpKTsKK30KKwordm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9z
dFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBuYW1lLCBXS1R5
cGVSZWYgYm9keSkKK3sKKyAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCB0b1dLKG5h
bWUpLmdldCgpLCBib2R5KTsKK30KKwordm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFBhZ2VNZXNz
YWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBi
b2R5KQoreworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIHRvV0sobmFtZSkuZ2V0
KCksIHRvV0soYm9keSkuZ2V0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBwb3N0R0NUYXNrKHZvaWQq
IGNvbnRleHQpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSByZWludGVycHJldF9jYXN0
PFdLQnVuZGxlUGFnZVJlZj4oY29udGV4dCk7CisgICAgYXV0byBwYWdlID0gcmVpbnRlcnByZXRf
Y2FzdDxXS0J1bmRsZVBhZ2VSZWY+KGNvbnRleHQpOwogICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5yZXBvcnRMaXZlRG9jdW1lbnRzKHBhZ2UpOwogICAgIFdLUmVsZWFzZShwYWdlKTsK
IH0KQEAgLTE5OSw2NyArMjAyLDQ0IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlcG9ydExpdmVE
b2N1bWVudHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiAgICAgV0tCdW5kbGVSZWxlYXNlTWVtb3J5
KG1fYnVuZGxlKTsKIAogICAgIGNvbnN0IGJvb2wgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3Vw
ID0gdHJ1ZTsKLSAgICBhdXRvIGRvY3VtZW50VVJMcyA9IGFkb3B0V0soV0tCdW5kbGVHZXRMaXZl
RG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFn
ZUdyb3VwKSk7Ci0gICAgYXV0byBhY2tNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkxpdmVEb2N1bWVudHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGRvY3VtZW50VVJMcy5nZXQoKSk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsICJMaXZlRG9jdW1lbnRzIiwgYWRvcHRXSyhXS0J1
bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBleGNsdWRlRG9j
dW1lbnRzSW5QYWdlR3JvdXApKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2Vp
dmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQogewogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQmVnaW5UZXN0IikpIHsKICAgICAgICAgQVNTRVJU
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VC
b2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZHVtcFBpeGVsc0tleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBQaXhlbHMiKSk7Ci0g
ICAgICAgIG1fZHVtcFBpeGVscyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGR1bXBQaXhlbHNLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHRpbWVvdXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJU
aW1lb3V0IikpOwotICAgICAgICBtX3RpbWVvdXQgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRz
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0aW1lb3V0S2V5LmdldCgpKSkpKTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyIikpOwotICAgICAgICBtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9
IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGR1bXBKU0NvbnNvbGVMb2dJblN0
ZEVycktleS5nZXQoKSkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNr
TWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2si
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhY2tNZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJlZ2luVGVzdCIpKTsKLSAgICAg
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGFj
a01lc3NhZ2VCb2R5LmdldCgpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIG1fZHVtcFBpeGVscyA9
IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJEdW1wUGl4ZWxzIik7CisgICAg
ICAgIG1fdGltZW91dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
VGltZW91dCIpKSkpOworICAgICAgICBtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIi
KTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsICJBY2siLCAiQmVnaW5UZXN0Iik7CiAg
ICAgICAgIGJlZ2luVGVzdGluZyhtZXNzYWdlQm9keURpY3Rpb25hcnksIEJlZ2luZ1Rlc3RpbmdN
b2RlOjpOZXcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZXNldCIpKSB7CiAgICAgICAgIEFTU0VS
VChtZXNzYWdlQm9keSk7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSlNDT3B0aW9ucyIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGpzY09wdGlvbnNTdHJpbmcgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGpzY09wdGlvbnNLZXkuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IGpzY09wdGlvbnNTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4odmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiSlNDT3B0aW9ucyIpKTsKICAgICAgICAgaWYgKGpzY09wdGlvbnNT
dHJpbmcpIHsKICAgICAgICAgICAgIFN0cmluZyBvcHRpb25zID0gdG9XVEZTdHJpbmcoanNjT3B0
aW9uc1N0cmluZyk7CiAgICAgICAgICAgICBKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9u
cy51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgfQotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzaG91bGRHQ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNob3VsZEdDIikpOwotICAgICAgICBib29sIHNob3VsZEdDID0gV0tCb29sZWFuR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgc2hvdWxkR0NLZXkuZ2V0KCkpKSk7CisgICAgICAgIGJvb2wg
c2hvdWxkR0MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU2hvdWxkR0Mi
KTsKICAgICAgICAgaWYgKHNob3VsZEdDKQogICAgICAgICAgICAgV0tCdW5kbGVHYXJiYWdlQ29s
bGVjdEphdmFTY3JpcHRPYmplY3RzKG1fYnVuZGxlKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklM
SVRZX0lTT0xBVEVEX1RSRUUpCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheElz
b2xhdGVkTW9kZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFj
Y2Vzc2liaWxpdHlJc29sYXRlZFRyZWUiKSk7Ci0gICAgICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xh
dGVkVHJlZU1vZGUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBheElzb2xh
dGVkTW9kZUtleS5nZXQoKSkpKTsKKyAgICAgICAgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVl
TW9kZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJBY2Nlc3NpYmlsaXR5
SXNvbGF0ZWRUcmVlIik7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBhbGxvd2VkSG9zdHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJBbGxvd2VkSG9zdHMiKSk7Ci0gICAgICAgIFdLVHlwZVJlZiBhbGxvd2VkSG9z
dHNWYWx1ZSA9IFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBhbGxvd2VkSG9zdHNLZXkuZ2V0KCkpOworICAgICAgICBhdXRvIGFsbG93ZWRIb3N0c1ZhbHVl
ID0gdmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQWxsb3dlZEhvc3RzIik7CiAgICAgICAg
IGlmIChhbGxvd2VkSG9zdHNWYWx1ZSAmJiBXS0dldFR5cGVJRChhbGxvd2VkSG9zdHNWYWx1ZSkg
PT0gV0tBcnJheUdldFR5cGVJRCgpKSB7CiAgICAgICAgICAgICBtX2FsbG93ZWRIb3N0cy5jbGVh
cigpOwotCi0gICAgICAgICAgICBXS0FycmF5UmVmIGFsbG93ZWRIb3N0c0FycmF5ID0gc3RhdGlj
X2Nhc3Q8V0tBcnJheVJlZj4oYWxsb3dlZEhvc3RzVmFsdWUpOwotICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDAsIHNpemUgPSBXS0FycmF5R2V0U2l6ZShhbGxvd2VkSG9zdHNBcnJheSk7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlH
ZXRJdGVtQXRJbmRleChhbGxvd2VkSG9zdHNBcnJheSwgaSk7Ci0gICAgICAgICAgICAgICAgaWYg
KGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRlbSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbV9hbGxvd2VkSG9zdHMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0
byBhcnJheSA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KGFsbG93ZWRIb3N0c1ZhbHVlKTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gV0tBcnJheUdldFNpemUoYXJyYXkp
OyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG1fYWxsb3dlZEhvc3RzLmFwcGVuZCh0
b1dURlN0cmluZyhXS0FycmF5R2V0SXRlbUF0SW5kZXgoYXJyYXksIGkpKSk7CiAgICAgICAgIH0K
IAogICAgICAgICBtX3N0YXRlID0gSWRsZTsKQEAgLTI3NSw5ICsyNTUsNyBAQCB2b2lkIEluamVj
dGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwg
V0tTdHJpbmdSZWYgbQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJHZXRMaXZlRG9jdW1lbnRzIikpIHsKICAgICAgICAgY29uc3QgYm9vbCBleGNs
dWRlRG9jdW1lbnRzSW5QYWdlR3JvdXAgPSBmYWxzZTsKLSAgICAgICAgYXV0byBkb2N1bWVudFVS
THMgPSBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdl
R3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCkpOwotICAgICAgICBhdXRvIGFja01l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGl2ZURv
Y3VtZW50cyIpKTsKLSAgICAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVz
c2FnZU5hbWUuZ2V0KCksIGRvY3VtZW50VVJMcy5nZXQoKSk7CisgICAgICAgIHBvc3RQYWdlTWVz
c2FnZSgiTGl2ZURvY3VtZW50cyIsIGFkb3B0V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxz
KG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MjgsNyArNDA2LDcgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
U3RyaW5nUmVmIG0KICAgICAgICAgVmVjdG9yPFN0cmluZz4gZG9tYWluczsKICAgICAgICAgZG9t
YWlucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0Fy
cmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKKyAgICAgICAgICAgIGF1dG8gaXRl
bSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5zQXJyYXksIGkpOwogICAgICAgICAgICAg
aWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRlbSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSkKICAg
ICAgICAgICAgICAgICBkb21haW5zLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oaXRlbSkpKTsKICAgICAgICAgfQpAQCAtNDQ2LDcgKzQyNCw3IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCBXS1N0cmluZ1JlZiBtCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnM7CiAgICAgICAg
IGRvbWFpbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0g
V0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CisgICAgICAgICAgICBhdXRv
IGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKICAgICAgICAg
ICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkp
CiAgICAgICAgICAgICAgICAgZG9tYWlucy51bmNoZWNrZWRBcHBlbmQodG9XVEZTdHJpbmcoc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAgICAgIH0KQEAgLTQ2NywxNyArNDQ1
LDEwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDYWxsVUlTaWRlU2NyaXB0Q2FsbGJh
Y2siKSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
c3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc3VsdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlJlc3VsdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDYWxsYmFja0lEIikpOwotCi0gICAgICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSAodW5zaWdu
ZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNhbGxiYWNrSURLZXkuZ2V0KCkp
KSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgcmVzdWx0U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCByZXN1bHRLZXkuZ2V0KCkpKTsKLSAgICAgICAgYXV0byByZXN1bHRKU1N0cmluZyA9IHRvSlMo
cmVzdWx0U3RyaW5nKTsKLQotICAgICAgICBtX3Rlc3RSdW5uZXItPnJ1blVJU2NyaXB0Q2FsbGJh
Y2soY2FsbGJhY2tJRCwgcmVzdWx0SlNTdHJpbmcuZ2V0KCkpOworICAgICAgICBhdXRvIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAg
IGF1dG8gY2FsbGJhY2tJRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNh
bGxiYWNrSUQiKTsKKyAgICAgICAgYXV0byByZXN1bHRTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJSZXN1bHQiKTsKKyAgICAgICAgbV90ZXN0UnVubmVyLT5ydW5V
SVNjcmlwdENhbGxiYWNrKGNhbGxiYWNrSUQsIHRvSlMocmVzdWx0U3RyaW5nKS5nZXQoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ5OCwyOSArNDY5LDE3IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBX
S1N0cmluZ1JlZiBtCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5RmluaXNoZWQi
KSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXMiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BQ
cmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rp
b25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BQcmV2YWxl
bnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24iKSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZWRpYW5EYXlzU2luY2VVc2VySW50
ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNZWRpYW5EYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkiKSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRo
b3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVk
aWFuU3ViUmVzb3VyY2VXaXRob3V0VUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhv
dXRVSSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcDNNZWRpYW5EYXRh
UmVjb3Jkc1JlbW92ZWRXaXRob3V0VUlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUb3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJIikpOwotICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMgPSAodW5z
aWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRl
cmFjdGlvbktleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcFByZXZhbGVudFJl
c291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiA9ICh1bnNp
Z25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wUHJldmFsZW50UmVzb3Vy
Y2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uS2V5LmdldCgpKSkp
OwotICAgICAgICB1bnNpZ25lZCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxl
bnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVu
dFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWdu
ZWQgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJID0gKHVuc2lnbmVkKVdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRoVUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcDNNZWRpYW5TdWJGcmFt
ZVdpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
dG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25l
ZCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSUtleS5n
ZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhv
dXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01l
ZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSUtleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWdu
ZWQgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3Zl
ZFdpdGhvdXRVSUtleS5nZXQoKSkpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIG51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
TnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMiKTsKKyAgICAgICAgYXV0byBudW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24iKTsKKyAgICAgICAgYXV0byBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJOdW1iZXJP
ZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0
byB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50
ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BQcmV2YWxl
bnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24iKTsK
KyAgICAgICAgYXV0byBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNv
dXJjZVdpdGhVc2VySW50ZXJhY3Rpb24gPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJNZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhV
c2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNv
dXJjZXNXaXRoVUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3AzTnVt
YmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFu
U3ViRnJhbWVXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJU
b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFuU3Vi
UmVzb3VyY2VXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJU
b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFu
VW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiVG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSIpOworICAgICAgICBhdXRv
IHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJUb3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJ
Iik7CiAKICAgICAgICAgbV90ZXN0UnVubmVyLT5zdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2Fs
bGJhY2sobnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMsIG51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0
VXNlckludGVyYWN0aW9uLCB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25E
YXlzU2luY2VVc2VySW50ZXJhY3Rpb24sIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblBy
ZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiwgdG9wM051bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVJLCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUksIHRvcDNNZWRpYW5T
dWJSZXNvdXJjZVdpdGhvdXRVSSwgdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSwg
dG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSk7CiAgICAgICAgIHJldHVybjsK
QEAgLTU0MSwzMSArNTAwLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3Nh
Z2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXJyb3IiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVbmtub3duIikpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKHBhZ2UsIGVycm9yTWVzc2FnZU5hbWUuZ2V0KCksIGVycm9yTWVzc2FnZUJv
ZHkuZ2V0KCkpOwotfQotCi1ib29sIEluamVjdGVkQnVuZGxlOjpib29sZWFuRm9yS2V5KFdLRGlj
dGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCi17Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHdrS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhrZXkpKTsKLSAgICBXS1R5cGVSZWYgdmFsdWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KGRpY3Rpb25hcnksIHdrS2V5LmdldCgpKTsKLSAgICBpZiAoV0tHZXRUeXBlSUQodmFsdWUp
ICE9IFdLQm9vbGVhbkdldFR5cGVJRCgpKSB7Ci0gICAgICAgIG91dHB1dFRleHQobWFrZVN0cmlu
ZygiQm9vbGVhbiB2YWx1ZSBmb3Iga2V5Iiwga2V5LCAiIG5vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5
XG4iKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIFdLQm9vbGVh
bkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4odmFsdWUpKTsKLX0KLQotU3RyaW5n
IEluamVjdGVkQnVuZGxlOjpzdHJpbmdGb3JLZXkoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnks
IGNvbnN0IGNoYXIqIGtleSkKLXsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGtleSkpOwotICAgIFdLU3Ry
aW5nUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkoZGljdGlvbmFyeSwgd2tLZXkuZ2V0KCkpKTsKLSAgICBpZiAoIXZhbHVlKSB7Ci0g
ICAgICAgIG91dHB1dFRleHQobWFrZVN0cmluZygiU3RyaW5nIHZhbHVlIGZvciBrZXkiLCBrZXks
ICIgbm90IGZvdW5kIGluIGRpY3Rpb25hcnlcbiIpKTsKLSAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0gICAgfQotICAgIHJldHVybiB0b1dURlN0cmluZyh2YWx1ZSk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJFcnJvciIsICJVbmtub3duIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OmJlZ2luVGVzdGluZyhXS0RpY3Rpb25hcnlSZWYgc2V0dGluZ3MsIEJlZ2luZ1Rlc3RpbmdNb2Rl
IHRlc3RpbmdNb2RlKQpAQCAtNTk4LDExICs1MzMsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6
YmVnaW5UZXN0aW5nKFdLRGljdGlvbmFyeVJlZiBzZXR0aW5ncywgQmVnaW5nVGVzdGluZ01vZGUg
dGUKICAgICBXS0J1bmRsZVNldEFsbG93U3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMUyhtX2J1bmRs
ZSwgbV9wYWdlR3JvdXAsIGZhbHNlKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
V0tCdW5kbGVQYWdlU2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmlndXJhdGlvbihwYWdlKCktPnBh
Z2UoKSwgIWJvb2xlYW5Gb3JLZXkoc2V0dGluZ3MsICJVc2VGbGV4aWJsZVZpZXdwb3J0IikpOwor
ICAgIFdLQnVuZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24ocGFnZSgp
LT5wYWdlKCksICFib29sZWFuVmFsdWUoc2V0dGluZ3MsICJVc2VGbGV4aWJsZVZpZXdwb3J0Iikp
OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6
OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhzdHJpbmdGb3JLZXko
c2V0dGluZ3MsICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpKTsKKyAgICBXZWJDb3Jl
VGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyh0
b1dURlN0cmluZyhzdHJpbmdWYWx1ZShzZXR0aW5ncywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzIikpKTsKICNlbmRpZgogCiAgICAgbV90ZXN0UnVubmVyLT5zZXRQbHVnaW5zRW5hYmxl
ZCh0cnVlKTsKQEAgLTY2MCwyNSArNTk1LDE1IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRvbmUo
KQogICAgIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPnJlc2V0VG9Db25zaXN0ZW50U3RhdGUo
KTsKICNlbmRpZgogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRvbmVNZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvbmUiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gZG9uZU1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHRJc1BlbmRpbmciKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBwaXhlbFJlc3VsdElzUGVuZGluZyA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgcGl4ZWxSZXN1bHRJc1BlbmRpbmdLZXkuZ2V0KCksIHBp
eGVsUmVzdWx0SXNQZW5kaW5nLmdldCgpKTsKLQotICAgIGlmICghbV9waXhlbFJlc3VsdElzUGVu
ZGluZykgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGl4ZWxSZXN1bHRLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaXhlbFJlc3VsdCIpKTsK
LSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIHBpeGVs
UmVzdWx0S2V5LmdldCgpLCBtX3BpeGVsUmVzdWx0LmdldCgpKTsKLSAgICB9Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcmVwYWludFJlY3RzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVwYWludFJlY3RzIikpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCByZXBhaW50UmVjdHNLZXkuZ2V0KCksIG1fcmVw
YWludFJlY3RzLmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9SZXN1
bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdWRpb1Jlc3Vs
dCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgYXVk
aW9SZXN1bHRLZXkuZ2V0KCksIG1fYXVkaW9SZXN1bHQuZ2V0KCkpOworICAgIHNldFZhbHVlKGJv
ZHksICJQaXhlbFJlc3VsdElzUGVuZGluZyIsIG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpOworICAg
IGlmICghbV9waXhlbFJlc3VsdElzUGVuZGluZykKKyAgICAgICAgc2V0VmFsdWUoYm9keSwgIlBp
eGVsUmVzdWx0IiwgbV9waXhlbFJlc3VsdC5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlJl
cGFpbnRSZWN0cyIsIG1fcmVwYWludFJlY3RzLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
QXVkaW9SZXN1bHQiLCBtX2F1ZGlvUmVzdWx0LmdldCgpKTsKIAotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgZG9u
ZU1lc3NhZ2VOYW1lLmdldCgpLCBkb25lTWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2Uo
KSwgdG9XSygiRG9uZSIpLmdldCgpLCBib2R5LmdldCgpKTsKIAogICAgIGNsb3NlT3RoZXJQYWdl
cygpOwogCkBAIC02OTEsOSArNjE2LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6Y2xvc2VPdGhl
clBhZ2VzKCkKICAgICBzaXplX3Qgc2l6ZSA9IG1fcGFnZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBwYWdlc1RvQ2xvc2UuYXBwZW5kKG1f
cGFnZXNbaV0tPnBhZ2UoKSk7Ci0gICAgc2l6ZSA9IHBhZ2VzVG9DbG9zZS5zaXplKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFdLQnVuZGxlUGFnZUNs
b3NlKHBhZ2VzVG9DbG9zZVtpXSk7CisgICAgZm9yIChhdXRvJiBwYWdlIDogcGFnZXNUb0Nsb3Nl
KQorICAgICAgICBXS0J1bmRsZVBhZ2VDbG9zZShwYWdlKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6ZHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcyhTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWlsZGVyKQpAQCAtNzA5LDEzICs2MzMsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkdW1w
VG9TdGRFcnIoY29uc3QgU3RyaW5nJiBvdXRwdXQpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
b3V0cHV0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkR1bXBUb1N0ZEVyciIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZUJvZHk7Ci0gICAgaWYgKGF1dG8gdXRmOCA9IG91dHB1dC50cnlHZXRVdGY4KCkpCi0gICAgICAg
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1dGY4
LT5kYXRhKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiT3V0IG9mIG1lbW9yeVxuIikpOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBjb252
ZXJ0IHRvIFVURi04IGluc3RlYWQgb2YgdXNpbmcgdG9XSz8KKyAgICBhdXRvIHN0cmluZyA9IG91
dHB1dC50cnlHZXRVdGY4KCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJEdW1wVG9TdGRFcnIiLCBz
dHJpbmcgPyBzdHJpbmctPmRhdGEoKSA6ICJPdXQgb2YgbWVtb3J5XG4iKTsKIH0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dChjb25zdCBTdHJpbmcmIG91dHB1dCkKQEAgLTcyNCwy
ODAgKzY0NCwxNTUgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dChjb25zdCBTdHJp
bmcmIG91dHB1dCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChvdXRwdXQuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGV4dE91dHB1dCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHk7Ci0gICAgaWYgKGF1dG8g
dXRmOCA9IG91dHB1dC50cnlHZXRVdGY4KCkpCi0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1dGY4LT5kYXRhKCkpKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiT3V0IG9mIG1lbW9yeVxuIikpOworICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgaGF2
ZSB0byBjb252ZXJ0IHRvIFVURi04IGluc3RlYWQgb2YgdXNpbmcgdG9XSz8KKyAgICBhdXRvIHN0
cmluZyA9IG91dHB1dC50cnlHZXRVdGY4KCk7CiAgICAgLy8gV2UgdXNlIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZSgpIGluc3RlYWQgb2YgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoKSB0byBtYWtlIHN1cmUgdGhhdCBhbGwgdGV4dCBvdXRwdXQKICAg
ICAvLyBpcyBkb25lIHZpYSBhc3luY2hyb25vdXMgSVBDLCBldmVuIGlmIHRoZSBjb25uZWN0aW9u
IGlzIGluIGZ1bGx5IHN5bmNocm9ub3VzIG1vZGUgZHVlIHRvIGEgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoKQogICAgIC8vIGNhbGwuIE90aGVyd2lzZSwgbWVz
c2FnZXMgbG9nZ2VkIHZpYSBzeW5jIGFuZCBhc3luYyBJUEMgbWF5IGVuZCB1cCBvdXQgb2Ygb3Jk
ZXIgYW5kIGNhdXNlIGZsYWtpbmVzcy4KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZUlnbm9y
aW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmlu
Z0Z1bGx5U3luY2hyb25vdXNNb2RlKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJUZXh0T3V0cHV0Iiku
Z2V0KCksIHRvV0soc3RyaW5nID8gc3RyaW5nLT5kYXRhKCkgOiAiT3V0IG9mIG1lbW9yeVxuIiku
Z2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0
dXJuVmFsdWUoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWZvcmVV
bmxvYWRSZXR1cm5WYWx1ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkJlZm9yZVVubG9hZFJldHVyblZhbHVl
IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OnBvc3RBZGRDaHJvbWVJbnB1dEZpZWxkKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJBZGRDaHJvbWVJbnB1dEZpZWxkIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJBZGRDaHJvbWVJbnB1dEZpZWxkIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnBvc3RSZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJSZW1vdmVDaHJvbWVJbnB1dEZpZWxkIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJSZW1vdmVDaHJvbWVJbnB1dEZpZWxkIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnBvc3RGb2N1c1dlYlZpZXcoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvY3Vz
V2ViVmlldyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRm9jdXNXZWJWaWV3
Iik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRCYWNraW5nU2NhbGVGYWN0b3Io
ZG91YmxlIGJhY2tpbmdTY2FsZUZhY3RvcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRCYWNraW5nU2NhbGVGYWN0b3IiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShiYWNraW5nU2NhbGVGYWN0b3IpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEJhY2tp
bmdTY2FsZUZhY3RvciIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYmFja2luZ1NjYWxlRmFjdG9y
KSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0V2luZG93SXNLZXkoYm9vbCBp
c0tleSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRXaW5kb3dJc0tleSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoaXNLZXkpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0V2luZG93SXNLZXkiKS5nZXQoKSwgYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoaXNLZXkpKS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnBvc3RTZXRWaWV3U2l6ZShkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Vmlld1NpemUiKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gd2lkdGhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJ3aWR0aCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVpZ2h0S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0Rv
dWJsZVJlZj4gd2lkdGhXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUod2lkdGgpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB3aWR0aEtleS5nZXQoKSwgd2lk
dGhXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gaGVpZ2h0V0sgPSBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGhlaWdodCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
bWVzc2FnZUJvZHkuZ2V0KCksIGhlaWdodEtleS5nZXQoKSwgaGVpZ2h0V0suZ2V0KCkpOwotCi0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0
byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZh
bHVlKGJvZHksICJ3aWR0aCIsIHdpZHRoKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiaGVpZ2h0Iiwg
aGVpZ2h0KTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0Vmlld1NpemUiKS5nZXQoKSwgYm9keS5nZXQoKSwg
MCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNhdGlv
bkNsaWNrKHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2siKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShub3RpZmljYXRp
b25JRCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90
aWZpY2F0aW9uSUQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRBZGRzVmlz
aXRlZExpbmtzKGJvb2wgYWRkc1Zpc2l0ZWRMaW5rcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRBZGRzVmlzaXRlZExpbmtzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShhZGRzVmlzaXRlZExpbmtz
KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRB
ZGRzVmlzaXRlZExpbmtzIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWRkc1Zpc2l0ZWRMaW5r
cykpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRHZW9sb2NhdGlv
blBlcm1pc3Npb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIs
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91Ymxl
IGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJs
ZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVk
ZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJv
dmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91Ymxl
IGZsb29yTGV2ZWwpCit2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwg
T3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3Vy
YWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9w
dGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxhdGl0dWRlS2V5V0sg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsYXRpdHVkZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbGF0aXR1ZGVXSyA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUobGF0aXR1ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5Lmdl
dCgpLCBsYXRpdHVkZUtleVdLLmdldCgpLCBsYXRpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBsb25naXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImxvbmdpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJs
ZVJlZj4gbG9uZ2l0dWRlV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGxvbmdpdHVkZSkpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGxvbmdpdHVkZUtleVdL
LmdldCgpLCBsb25naXR1ZGVXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gYWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImFjY3VyYWN5IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBhY2N1cmFjeVdLID0g
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShhY2N1cmFjeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFjY3VyYWN5S2V5V0suZ2V0KCksIGFjY3VyYWN5V0suZ2V0
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1ZGVLZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1
ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc0FsdGl0dWRlV0sg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92aWRlc0FsdGl0dWRlKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZUtleVdLLmdl
dCgpLCBwcm92aWRlc0FsdGl0dWRlV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGFsdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJhbHRpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gYWx0aXR1ZGVX
SyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYWx0aXR1ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhbHRpdHVkZUtleVdLLmdldCgpLCBhbHRpdHVkZVdL
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBy
b3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJv
dmlkZXNBbHRpdHVkZUFjY3VyYWN5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdl
Qm9keS5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5S2V5V0suZ2V0KCksIHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBhbHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJhbHRpdHVkZUFjY3VyYWN5IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVm
PiBhbHRpdHVkZUFjY3VyYWN5V0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGFsdGl0dWRlQWNj
dXJhY3kpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhbHRp
dHVkZUFjY3VyYWN5S2V5V0suZ2V0KCksIGFsdGl0dWRlQWNjdXJhY3lXSy5nZXQoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNIZWFkaW5nS2V5V0sgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0hlYWRpbmciKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc0hlYWRpbmdXSyA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKHByb3ZpZGVzSGVhZGluZykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
bWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzSGVhZGluZ0tleVdLLmdldCgpLCBwcm92aWRlc0hl
YWRpbmdXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVhZGluZ0tl
eVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVhZGluZyIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gaGVhZGluZ1dLID0gYWRvcHRXSyhXS0RvdWJs
ZUNyZWF0ZShoZWFkaW5nKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5n
ZXQoKSwgaGVhZGluZ0tleVdLLmdldCgpLCBoZWFkaW5nV0suZ2V0KCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzU3BlZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzU3BlZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBwcm92aWRlc1NwZWVkV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShw
cm92aWRlc1NwZWVkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgcHJvdmlkZXNTcGVlZEtleVdLLmdldCgpLCBwcm92aWRlc1NwZWVkV0suZ2V0KCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzcGVlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJs
ZVJlZj4gc3BlZWRXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc3BlZWQpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBzcGVlZEtleVdLLmdldCgpLCBzcGVl
ZFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0Zsb29y
TGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3Zp
ZGVzRmxvb3JMZXZlbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVz
Rmxvb3JMZXZlbFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNGbG9vckxldmVs
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNG
bG9vckxldmVsS2V5V0suZ2V0KCksIHByb3ZpZGVzRmxvb3JMZXZlbFdLLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmbG9vckxldmVsIikpOwotICAgIFdLUmV0YWluUHRy
PFdLRG91YmxlUmVmPiBmbG9vckxldmVsV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGZsb29y
TGV2ZWwpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBmbG9v
ckxldmVsS2V5V0suZ2V0KCksIGZsb29yTGV2ZWxXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgImxhdGl0dWRlIiwgbGF0aXR1ZGUpOworICAg
IHNldFZhbHVlKGJvZHksICJsb25naXR1ZGUiLCBsb25naXR1ZGUpOworICAgIHNldFZhbHVlKGJv
ZHksICJhY2N1cmFjeSIsIGFjY3VyYWN5KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiYWx0aXR1ZGUi
LCBhbHRpdHVkZSk7CisgICAgc2V0VmFsdWUoYm9keSwgImFsdGl0dWRlQWNjdXJhY3kiLCBhbHRp
dHVkZUFjY3VyYWN5KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiaGVhZGluZyIsIGhlYWRpbmcpOwor
ICAgIHNldFZhbHVlKGJvZHksICJzcGVlZCIsIHNwZWVkKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
Zmxvb3JMZXZlbCIsIGZsb29yTGV2ZWwpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb24iLCBib2R5KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9y
TWVzc2FnZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvblVuYXZhaWxhYmxlRXJyb3IiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2UpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9y
IiwgZXJyb3JNZXNzYWdlKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZTo6aXNHZW9sb2NhdGlv
blByb3ZpZGVyQWN0aXZlKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc0dl
b2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpOwotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAw
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBpc0FjdGl2ZSA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihyZXN1bHRUb1Bhc3MpKTsKLQotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1
ZShpc0FjdGl2ZS5nZXQoKSk7CisgICAgV0tUeXBlUmVmIHJlc3VsdCA9IG51bGxwdHI7CisgICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdl
KCksIHRvV0soIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKS5nZXQoKSwgMCwgJnJlc3VsdCk7
CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOwogfQogCiB1
bnNpZ25lZCBJbmplY3RlZEJ1bmRsZTo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSBj
b25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkltYWdlQ291bnRJbkdlbmVyYWxQYXN0
ZWJvYXJkIikpOwotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgMCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IGltYWdlQ291bnQgPSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXN1
bHRUb1Bhc3MpKTsKLSAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUlu
dDY0R2V0VmFsdWUoaW1hZ2VDb3VudC5nZXQoKSkpOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBu
dWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCIpLmdl
dCgpLCAwLCAmcmVzdWx0KTsKKyAgICByZXR1cm4gdWludDY0VmFsdWUoYWRvcHRXSyhyZXN1bHQp
LmdldCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVybWlzc2lv
bihib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZXJNZWRpYVBlcm1pc3Npb24iKSk7Ci0gICAg
YXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFVzZXJNZWRp
YVBlcm1pc3Npb24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24oKQogewotICAgIGF1
dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJS
ZXNldFVzZXJNZWRpYVBlcm1pc3Npb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIlJlc2V0VXNlck1lZGlhUGVybWlzc2lvbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
OjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbihib29sIHBlcm1pc3Np
b24sIFdLU3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luKQogewotICAg
IGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbiIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBwZXJtaXNzaW9uS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJwZXJtaXNzaW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcGVybWlzc2lv
bldLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocGVybWlzc2lvbikpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBlcm1pc3Npb25LZXlXSy5nZXQoKSwgcGVy
bWlzc2lvbldLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5L
ZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5n
ZXQoKSwgb3JpZ2luKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmln
aW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9y
aWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJl
bnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFyZW50T3JpZ2luKTsKLQotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGVybWlzc2lvbiIsIHBlcm1pc3Npb24pOworICAg
IHNldFZhbHVlKGJvZHksICJvcmlnaW4iLCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJvZHksICJw
YXJlbnRPcmlnaW4iLCBwYXJlbnRPcmlnaW4pOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0VXNl
ck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4iLCBib2R5KTsKIH0KIAogdW5zaWdu
ZWQgSW5qZWN0ZWRCdW5kbGU6OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmln
aW4oV0tTdHJpbmdSZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pIGNvbnN0CiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3Vu
dEZvck9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KG1lc3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5nZXQoKSwgb3JpZ2luKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJlbnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFy
ZW50T3JpZ2luKTsKLQotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXN1bHRUb1Bhc3MpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBjb3VudCA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KHJlc3VsdFRvUGFzcykpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihXS1VJbnQ2NEdldFZhbHVlKGNvdW50LmdldCgpKSk7CisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJv
cmlnaW4iLCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJvZHksICJwYXJlbnRPcmlnaW4iLCBwYXJl
bnRPcmlnaW4pOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOworICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dL
KCJVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikuZ2V0KCksIGJvZHku
Z2V0KCksICZyZXN1bHQpOworICAgIHJldHVybiB1aW50NjRWYWx1ZShhZG9wdFdLKHJlc3VsdCku
Z2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oV0tTdHJpbmdSZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBw
YXJlbnRPcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzZXRVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0
YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIG9yaWdpbktleVdLLmdldCgp
LCBvcmlnaW4pOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktl
eVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2lu
IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBhcmVudE9y
aWdpbktleVdLLmdldCgpLCBwYXJlbnRPcmlnaW4pOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OworICAgIHNldFZhbHVlKGJvZHksICJvcmlnaW4iLCBvcmlnaW4pOworICAgIHNldFZhbHVlKGJv
ZHksICJwYXJlbnRPcmlnaW4iLCBwYXJlbnRPcmlnaW4pOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
UmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIiwgYm9keSk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5h
YmxlZCwgYm9vbCBwZXJtaXNzaXZlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEN1
c3RvbVBvbGljeURlbGVnYXRlIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlZEtleVdLID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZW5hYmxlZCIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IGVuYWJsZWRXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVu
YWJsZWQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBlbmFi
bGVkS2V5V0suZ2V0KCksIGVuYWJsZWRXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gcGVybWlzc2l2ZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygicGVybWlzc2l2ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBl
cm1pc3NpdmVXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHBlcm1pc3NpdmUpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwZXJtaXNzaXZlS2V5V0suZ2V0
KCksIHBlcm1pc3NpdmVXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShw
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgImVuYWJsZWQiLCBlbmFibGVkKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
cGVybWlzc2l2ZSIsIHBlcm1pc3NpdmUpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0Q3VzdG9t
UG9saWN5RGVsZWdhdGUiLCBib2R5KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0SGlk
ZGVuKGJvb2wgaGlkZGVuKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEhpZGRlbiIp
KTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBpc0luaXRpYWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImhpZGRlbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlz
SW5pdGlhbFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGlkZGVuKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgaXNJbml0aWFsS2V5V0suZ2V0KCksIGlz
SW5pdGlhbFdLLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8g
Ym9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiaGlkZGVuIiwgaGlkZGVuKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEhpZGRl
biIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRDYWNoZU1vZGVs
KGludCBtb2RlbCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDYWNoZU1vZGVsIikp
OwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tV
SW50NjRDcmVhdGUobW9kZWwpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiU2V0Q2FjaGVNb2RlbCIpLmdldCgp
LCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGVsKSkuZ2V0KCksIG51bGxwdHIpOwogfQogCiBi
b29sIEluamVjdGVkQnVuZGxlOjpzaG91bGRQcm9jZXNzV29ya1F1ZXVlKCkgY29uc3QKQEAgLTEw
MDUsMTEwICs4MDAsNzMgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZTo6c2hvdWxkUHJvY2Vzc1dvcmtR
dWV1ZSgpIGNvbnN0CiAgICAgaWYgKCFtX3VzZVdvcmtRdWV1ZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNXb3JrUXVldWVFbXB0eSIpKTsKLSAg
ICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IDAsICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gaXNFbXB0
eSA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXN1bHRUb1Bhc3MpKTsKKyAg
ICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiSXNXb3JrUXVldWVF
bXB0eSIpLmdldCgpLCAwLCAmcmVzdWx0KTsKIAogICAgIC8vIFRoZSBJUEMgZmFpbGVkLiBUaGlz
IGhhcHBlbnMgd2hlbiBzd2FwcGluZyBwcm9jZXNzZXMgb24gbmF2aWdhdGlvbiBiZWNhdXNlIHRo
ZSBXZWJQYWdlUHJveHkgdW5yZWdpc3RlcnMgaXRzZWxmCiAgICAgLy8gYXMgYSBNZXNzYWdlUmVj
ZWl2ZXIgZnJvbSB0aGUgb2xkIFdlYlByb2Nlc3NQcm94eSBhbmQgcmVnaXN0ZXIgaXRzZWxmIHdp
dGggdGhlIG5ldyBXZWJQcm9jZXNzUHJveHkgaW5zdGVhZC4KLSAgICBpZiAoIWlzRW1wdHkpCisg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiAhV0tC
b29sZWFuR2V0VmFsdWUoaXNFbXB0eS5nZXQoKSk7CisgICAgYXV0byBpc0VtcHR5ID0gYm9vbGVh
blZhbHVlKGFkb3B0V0socmVzdWx0KS5nZXQoKSk7CisgICAgcmV0dXJuICFpc0VtcHR5OwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlOjpwcm9jZXNzV29ya1F1ZXVlKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJQcm9jZXNzV29ya1F1ZXVlIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJQcm9jZXNzV29ya1F1ZXVlIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnF1ZXVlQmFja05hdmlnYXRpb24odW5zaWduZWQgaG93RmFyQmFja3dhcmQpCiB7CiAgICAgbV91
c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVCYWNr
TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvd0ZhckJhY2t3YXJkKSk7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUJhY2tOYXZpZ2F0aW9uIiwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJCYWNrd2FyZCkpKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJGb3J3YXJk
KQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJGb3J3YXJkKSk7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUZv
cndhcmROYXZpZ2F0aW9uIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3dGYXJGb3J3YXJkKSkp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWQoV0tTdHJpbmdSZWYgdXJsLCBX
S1N0cmluZ1JlZiB0YXJnZXQsIGJvb2wgc2hvdWxkT3BlbkV4dGVybmFsVVJMcykKIHsKICAgICBt
X3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZUxv
YWQiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBsb2FkRGF0
YSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB1cmxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJ1cmwiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwg
dXJsS2V5LmdldCgpLCB1cmwpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRhcmdl
dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRhcmdldCIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCB0YXJnZXRLZXkuZ2V0KCks
IHRhcmdldCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBzaG91
bGRPcGVuRXh0ZXJuYWxVUkxzVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGRP
cGVuRXh0ZXJuYWxVUkxzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQo
KSwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc0tleS5nZXQoKSwgc2hvdWxkT3BlbkV4dGVybmFsVVJM
c1ZhbHVlLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbG9hZERhdGEuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAidXJsIiwgdXJsKTsKKyAgICBzZXRWYWx1ZShib2R5LCAidGFyZ2V0IiwgdGFyZ2V0KTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAic2hvdWxkT3BlbkV4dGVybmFsVVJMcyIsIHNob3VsZE9wZW5FeHRl
cm5hbFVSTHMpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVMb2FkIiwgYm9keS5nZXQoKSk7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoV0tTdHJpbmdS
ZWYgY29udGVudCwgV0tTdHJpbmdSZWYgYmFzZVVSTCwgV0tTdHJpbmdSZWYgdW5yZWFjaGFibGVV
UkwpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUXVldWVMb2FkSFRNTFN0cmluZyIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IGxvYWREYXRhID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNvbnRlbnRLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb250ZW50IikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIGNvbnRlbnRLZXkuZ2V0KCksIGNvbnRlbnQp
OwotCi0gICAgaWYgKGJhc2VVUkwpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGJhc2VVUkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJiYXNl
VVJMIikpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdldCgpLCBiYXNl
VVJMS2V5LmdldCgpLCBiYXNlVVJMKTsKLSAgICB9Ci0KLSAgICBpZiAodW5yZWFjaGFibGVVUkwp
IHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidW5yZWFjaGFibGVVUkwiKSk7
Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIHVucmVhY2hhYmxl
VVJMS2V5LmdldCgpLCB1bnJlYWNoYWJsZVVSTCk7Ci0gICAgfQotCi0gICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBsb2FkRGF0YS5n
ZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJjb250ZW50IiwgY29udGVudCk7CisgICAgaWYgKGJh
c2VVUkwpCisgICAgICAgIHNldFZhbHVlKGJvZHksICJiYXNlVVJMIiwgYmFzZVVSTCk7CisgICAg
aWYgKHVucmVhY2hhYmxlVVJMKQorICAgICAgICBzZXRWYWx1ZShib2R5LCAidW5yZWFjaGFibGVV
UkwiLCB1bnJlYWNoYWJsZVVSTCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUxvYWRIVE1M
U3RyaW5nIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlUmVsb2FkKCkK
IHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJRdWV1ZVJlbG9hZCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVS
ZWxvYWQiKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVMb2FkaW5nU2NyaXB0KFdL
U3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZUxvYWRpbmdTY3JpcHQiKSk7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBzY3JpcHQp
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVMb2FkaW5nU2NyaXB0Iiwgc2NyaXB0KTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KFdLU3RyaW5nUmVm
IHNjcmlwdCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJRdWV1ZU5vbkxvYWRpbmdTY3JpcHQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBzY3JpcHQpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiUXVldWVOb25Mb2FkaW5nU2NyaXB0Iiwgc2NyaXB0KTsKIH0KIAog
Ym9vbCBJbmplY3RlZEJ1bmRsZTo6aXNBbGxvd2VkSG9zdChXS1N0cmluZ1JlZiBob3N0KQpAQCAt
MTE0Myw0ICs5MDEsNzIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6dGV4dEZpZWxkRGlkRW5kRWRp
dGluZygpCiAgICAgbV90ZXN0UnVubmVyLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nQ2FsbGJhY2so
KTsKIH0KIAordm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIq
IG5hbWUsIFdLVHlwZVJlZiBib2R5KQoreworICAgIHBvc3RQYWdlTWVzc2FnZShwYWdlKCktPnBh
Z2UoKSwgbmFtZSwgYm9keSk7Cit9CisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVz
c2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBib2R5KQoreworICAgIHBvc3RQYWdl
TWVzc2FnZShuYW1lLCB0b1dLKGJvZHkpKTsKK30KKwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBj
aGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZh
bHVlKTsKK30KKwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2
YWx1ZSkKK3sKKyAgICBwb3N0TWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHZh
bHVlKSkuZ2V0KCkpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hh
ciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSku
Z2V0KCksIHZhbHVlLCBudWxscHRyKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZShuYW1lLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwor
dm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVpbnQ2NF90IHZh
bHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKQoreworICAgIHVpbnQ2NF90IHByb21v
dGVkVmFsdWUgPSB2YWx1ZTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIHByb21v
dGVkVmFsdWUpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciog
bmFtZSwgZG91YmxlIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UobmFtZSwg
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9pZCBwb3N0UGFn
ZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIGlmIChh
dXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpKQorICAgICAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZh
bHVlKTsKK30KKwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2
YWx1ZSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2Uo
Y29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlKQoreworICAgIGlmIChhdXRvIHBhZ2Ug
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpKQorICAgICAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlLT5wYWdlKCksIHRvV0sobmFt
ZSkuZ2V0KCksIHZhbHVlLCBudWxscHRyKTsKK30KKwordm9pZCBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0
KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAppbmRleCBiNzYwMTQzNmYw
YzY3Mjg1NjMzYTA4ZTI1Zjk0MmE4YWE5OGQ5NzBiLi44YWU2YWEyODBhMGQ5MWFiYmEyMTNmNTRi
ZWFiZTcwMmIxNGUyNTI2IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoK
IAogICAgIC8vIEdlb2xvY2F0aW9uLgogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KGJvb2wpOwotICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0
dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRp
dHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91
YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGlu
ZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxl
dmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwg
T3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3Vy
YWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9w
dGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKICAgICBi
b29sIGlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0OwogCkBAIC0xNjksOCArMTY5
LDEzIEBAIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBCZWdpbmdUZXN0aW5nTW9kZSB7IE5ldywg
UmVzdW1lIH07CiAgICAgdm9pZCBiZWdpblRlc3RpbmcoV0tEaWN0aW9uYXJ5UmVmIGluaXRpYWxT
ZXR0aW5ncywgQmVnaW5nVGVzdGluZ01vZGUpOwogCi0gICAgYm9vbCBib29sZWFuRm9yS2V5KFdL
RGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKLSAgICBTdHJpbmcgc3RyaW5nRm9yS2V5
KFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKKyAgICBzdGF0aWMgdm9pZCBwb3N0
UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmLCBjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYg
Ym9keSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgcG9zdFBhZ2VNZXNz
YWdlKFdLQnVuZGxlUGFnZVJlZiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8
VD4mIGJvZHkpOworICAgIHN0YXRpYyB2b2lkIHBvc3RQYWdlTWVzc2FnZShXS0J1bmRsZVBhZ2VS
ZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGJvZHkpOworCisgICAgdm9pZCBwb3N0
UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIGJvZHkgPSBudWxscHRyKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBXS1JldGFpblB0cjxUPiYgYm9keSk7CisgICAgdm9pZCBwb3N0UGFnZU1l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogYm9keSk7CiAKICAgICBXS0J1bmRs
ZVJlZiBtX2J1bmRsZSB7IG51bGxwdHIgfTsKICAgICBXS0J1bmRsZVBhZ2VHcm91cFJlZiBtX3Bh
Z2VHcm91cCB7IG51bGxwdHIgfTsKQEAgLTIxMCw0ICsyMTUsMzMgQEAgcHJpdmF0ZToKICAgICBz
aXplX3QgbV91c2VyU2NyaXB0SW5qZWN0ZWRDb3VudCB7IDAgfTsKIH07CiAKK3ZvaWQgcG9zdE1l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cik7Cit2b2lk
IHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKTsKK3ZvaWQgcG9z
dE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpOworCit2b2lkIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0g
bnVsbHB0cik7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwg
Ym9vbCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFt
ZSwgdWludDY0X3QgdmFsdWUpOwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNo
YXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShj
b25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpOwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNz
YWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKKwordm9pZCBwb3N0UGFn
ZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cik7Cit2
b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKTsKK3ZvaWQg
cG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKKwor
dm9pZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVS
ZWYgdmFsdWUgPSBudWxscHRyKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoY29u
c3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShXS0J1
bmRsZVBhZ2VSZWYgcGFnZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4m
IGJvZHkpCit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKHBhZ2UsIG5hbWUsIGJvZHkuZ2V0KCkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0UGFnZU1l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIGJvZHkpCit7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKG5hbWUsIGJvZHkuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAppbmRleCBkODlmZWFmOWI2ZGFlNGM5Njg1MzFm
MGFiNjM4NTg5MWIxNGY5OGY4Li4yZjU2NDI3NzMxMTZkOWYxMDI0ZmE2ZmJlOWRjMzUyMGIxNWUx
OGE5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCkBAIC02MCw1MCArNjAsMTggQEAgdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIHBy
b3BlcnR5VmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29u
c3QgY2hhciogcHJvcGVydHlOYW1lKQorc3RhdGljIGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVy
dHkoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAo
IW9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWVTdHJpbmcg
PSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKLSAg
ICByZXR1cm4gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFt
ZVN0cmluZy5nZXQoKSwgMCk7Ci19Ci0KLXN0YXRpYyBkb3VibGUgcHJvcGVydHlWYWx1ZURvdWJs
ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBw
cm9wZXJ0eU5hbWUpCi17Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IHByb3BlcnR5VmFsdWUoY29u
dGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIDApOyAg
ICAKLX0KLQotc3RhdGljIGludCBwcm9wZXJ0eVZhbHVlSW50KEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKLXsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihwcm9wZXJ0eVZhbHVlRG91YmxlKGNvbnRleHQsIG9iamVj
dCwgcHJvcGVydHlOYW1lKSk7ICAgIAotfQotCi1zdGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQ
cm9wZXJ0eVZhbHVlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNvbnN0IGNoYXIqIHByb3BlcnR5
TmFtZSkKLXsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5VmFsdWVEb3Vi
bGUoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBwcm9wZXJ0eU5h
bWUpOworICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChmcmFtZSk7CisgICAgcmV0dXJuIG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRH
ZXRHbG9iYWxPYmplY3QoY29udGV4dCksIG5hbWUpOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcg
ZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5vZGVWYWx1
ZSkKIHsKLSAgICBKU1ZhbHVlUmVmIG5vZGVOYW1lVmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRl
eHQsIG5vZGVWYWx1ZSwgIm5vZGVOYW1lIik7Ci0gICAgYXV0byBqc1N0cmluZ05vZGVOYW1lID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBub2RlTmFtZVZhbHVlLCAwKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5vZGVOYW1lID0gdG9XSyhqc1N0cmluZ05vZGVO
YW1lKTsKLQotICAgIEpTVmFsdWVSZWYgcGFyZW50Tm9kZSA9IHByb3BlcnR5VmFsdWUoY29udGV4
dCwgbm9kZVZhbHVlLCAicGFyZW50Tm9kZSIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vZGVOYW1lKSk7
Ci0KLSAgICBpZiAocGFyZW50Tm9kZSAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgcGFyZW50
Tm9kZSkpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgPiAiKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4dCwgKEpTT2JqZWN0UmVm
KXBhcmVudE5vZGUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOworICAgIGF1dG8gbmFtZSA9IHRvV1RGU3RyaW5nKHN0cmluZ1Byb3BlcnR5KGNvbnRleHQs
IG5vZGVWYWx1ZSwgIm5vZGVOYW1lIikpOworICAgIGlmIChhdXRvIHBhcmVudE5vZGUgPSBvYmpl
Y3RQcm9wZXJ0eShjb250ZXh0LCBub2RlVmFsdWUsICJwYXJlbnROb2RlIikpCisgICAgICAgIHJl
dHVybiBtYWtlU3RyaW5nKG5hbWUsICIgPiAiLCBkdW1wUGF0aChjb250ZXh0LCBwYXJlbnROb2Rl
KSk7CisgICAgcmV0dXJuIG5hbWU7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBkdW1wUGF0aChX
S0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5k
bGVOb2RlSGFuZGxlUmVmIG5vZGUpCkBAIC0xMjYsNTMgKzk0LDQwIEBAIHN0YXRpYyBXVEY6OlN0
cmluZyByYW5nZVRvU3RyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxk
UmVmIHdvcmxkCiAgICAgaWYgKCFyYW5nZVJlZikKICAgICAgICAgcmV0dXJuICIobnVsbCkiOwog
Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShw
YWdlKTsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdl
dEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKLSAgICBKU1ZhbHVlUmVm
IHJhbmdlVmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdyYXBwZXJGb3JSYW5nZUZv
cldvcmxkKGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOworICAgIGF1dG8gZnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKKyAgICBhdXRvIHJh
bmdlVmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdyYXBwZXJGb3JSYW5nZUZvcldv
cmxkKGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOwogICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3Qo
Y29udGV4dCwgcmFuZ2VWYWx1ZSkpOwotICAgIEpTT2JqZWN0UmVmIHJhbmdlT2JqZWN0ID0gKEpT
T2JqZWN0UmVmKXJhbmdlVmFsdWU7Ci0KLSAgICBKU1ZhbHVlUmVmIHN0YXJ0Tm9kZVZhbHVlID0g
cHJvcGVydHlWYWx1ZShjb250ZXh0LCByYW5nZU9iamVjdCwgInN0YXJ0Q29udGFpbmVyIik7Ci0g
ICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzdGFydE5vZGVWYWx1ZSkpOwotICAg
IEpTT2JqZWN0UmVmIHN0YXJ0Tm9kZU9iamVjdCA9IChKU09iamVjdFJlZilzdGFydE5vZGVWYWx1
ZTsKLQotICAgIEpTVmFsdWVSZWYgZW5kTm9kZVZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0
LCByYW5nZU9iamVjdCwgImVuZENvbnRhaW5lciIpOwotICAgIEFTU0VSVChKU1ZhbHVlSXNPYmpl
Y3QoY29udGV4dCwgZW5kTm9kZVZhbHVlKSk7Ci0gICAgSlNPYmplY3RSZWYgZW5kTm9kZU9iamVj
dCA9IChKU09iamVjdFJlZillbmROb2RlVmFsdWU7Ci0KLSAgICBpbnQgc3RhcnRPZmZzZXQgPSBw
cm9wZXJ0eVZhbHVlSW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRPZmZzZXQiKTsKLSAg
ICBpbnQgZW5kT2Zmc2V0ID0gcHJvcGVydHlWYWx1ZUludChjb250ZXh0LCByYW5nZU9iamVjdCwg
ImVuZE9mZnNldCIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgicmFuZ2UgZnJvbSAiKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZE51bWJlcihzdGFydE9mZnNldCk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgb2YgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4
dCwgc3RhcnROb2RlT2JqZWN0KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIg
dG8gIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoZW5kT2Zmc2V0KTsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChkdW1wUGF0aChjb250ZXh0LCBlbmROb2RlT2JqZWN0KSk7Ci0gICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBhdXRvIHJhbmdlT2JqZWN0ID0gKEpTT2JqZWN0UmVm
KXJhbmdlVmFsdWU7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygicmFuZ2UgZnJvbSAiLAorICAg
ICAgICBudW1lcmljUHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJzdGFydE9mZnNldCIp
LAorICAgICAgICAiIG9mICIsCisgICAgICAgIGR1bXBQYXRoKGNvbnRleHQsIG9iamVjdFByb3Bl
cnR5KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRDb250YWluZXIiKSksCisgICAgICAgICIg
dG8gIiwKKyAgICAgICAgbnVtZXJpY1Byb3BlcnR5KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5k
T2Zmc2V0IiksCisgICAgICAgICIgb2YgIiwKKyAgICAgICAgZHVtcFBhdGgoY29udGV4dCwgb2Jq
ZWN0UHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRDb250YWluZXIiKSkKKyAgICAp
OwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IE5hdmlnYXRpb25UeXBlVG9T
dHJpbmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7
CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQ6Ci0gICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsaW5rIGNsaWNrZWQi
KSk7CisgICAgICAgIHJldHVybiB0b1dLKCJsaW5rIGNsaWNrZWQiKTsKICAgICBjYXNlIGtXS0Zy
YW1lTmF2aWdhdGlvblR5cGVGb3JtU3VibWl0dGVkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSBzdWJtaXR0ZWQiKSk7CisgICAgICAg
IHJldHVybiB0b1dLKCJmb3JtIHN1Ym1pdHRlZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0
aW9uVHlwZUJhY2tGb3J3YXJkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiYmFjay9mb3J3YXJkIikpOworICAgICAgICByZXR1cm4gdG9XSygi
YmFjay9mb3J3YXJkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlUmVsb2FkOgot
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicmVs
b2FkIikpOworICAgICAgICByZXR1cm4gdG9XSygicmVsb2FkIik7CiAgICAgY2FzZSBrV0tGcmFt
ZU5hdmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZm9ybSByZXN1Ym1pdHRlZCIpKTsKKyAgICAg
ICAgcmV0dXJuIHRvV0soImZvcm0gcmVzdWJtaXR0ZWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2
aWdhdGlvblR5cGVPdGhlcjoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIm90aGVyIikpOworICAgICAgICByZXR1cm4gdG9XSygib3RoZXIiKTsK
ICAgICB9Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImlsbGVnYWwgdmFsdWUiKSk7CisgICAgcmV0dXJuIHRvV0soImlsbGVnYWwgdmFsdWUiKTsKIH0K
IAogc3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xh
cmF0aW9uUmVmIHN0eWxlKQpAQCAtMTg1LDIzICsxNDAsMTQgQEAgc3RhdGljIFdURjo6U3RyaW5n
IHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlKQogICAg
IHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBXVEY6OlN0cmlu
ZyBzZWN1cml0eU9yaWdpblRvU3RyKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luKQorc3RhdGlj
IFdURjo6U3RyaW5nIHN0cmluZyhXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKIHsKLSAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ3sn
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJp
dHlPcmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRv
cHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIo
V0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2luKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ30nKTsKLQotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoJ3snLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5D
b3B5UHJvdG9jb2wob3JpZ2luKSkpLCAiLCAiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJp
dHlPcmlnaW5Db3B5SG9zdChvcmlnaW4pKSksICIsICIsIFdLU2VjdXJpdHlPcmlnaW5HZXRQb3J0
KG9yaWdpbiksICd9Jyk7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBmcmFtZVRvU3RyKFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUg
PSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOworICAgIGF1dG8gbmFtZSA9
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CiAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUp
KSB7CiAgICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7CkBAIC0yMzUs
MTIgKzE4MSwxMiBAQCBzdGF0aWMgaW5saW5lIFdURjo6U3RyaW5nIHBhdGhTdWl0YWJsZUZvclRl
c3RSZXN1bHQoV0tVUkxSZWYgZmlsZVVybCkKICAgICBpZiAoIWZpbGVVcmwpCiAgICAgICAgIHJl
dHVybiAiKG51bGwpIjsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY2hlbWVTdHJp
bmcgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJsKSk7CisgICAgYXV0byBzY2hlbWVT
dHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShmaWxlVXJsKSk7CiAgICAgaWYgKCFpc0xv
Y2FsRmlsZVNjaGVtZShzY2hlbWVTdHJpbmcuZ2V0KCkpKQogICAgICAgICByZXR1cm4gdG9XVEZT
dHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoZmlsZVVybCkpKTsKIAogICAgIFdLQnVuZGxl
RnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxS
ZWY+IG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1l
KSk7CisgICAgYXV0byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJM
KG1haW5GcmFtZSkpOwogICAgIGlmICghbWFpbkZyYW1lVVJMKQogICAgICAgICBtYWluRnJhbWVV
UkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwobWFpbkZyYW1lKSk7
CiAKQEAgLTQzNCw4ICszODAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRl
clRlc3QoKQogICAgIC8vIChzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzgzMzQ+KSwgaG93ZXZlciBmb3IgdGVzdHMsIHdlIHdhbnQgdG8gc3RhcnQgZWFjaCBv
bmUgd2l0aCBhIGNsZWFuIHN0YXRlLgogICAgIFdLQnVuZGxlRnJhbWVGb2N1cyhmcmFtZSk7CiAK
LSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChmcmFtZSk7Ci0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFs
c09iamVjdChjb250ZXh0KTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxz
T2JqZWN0KFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSkpOwogICAgIGFz
c2lnbmVkVXJsc0NhY2hlKCkuY2xlYXIoKTsKIAogICAgIC8vIFVzZXIgc2NyaXB0cyBuZWVkIHRv
IGJlIHJlbW92ZWQgYWZ0ZXIgdGhlIHRlc3QgYW5kIGJlZm9yZSBsb2FkaW5nIGFib3V0OmJsYW5r
LCBhcyBvdGhlcndpc2UgdGhleSB3b3VsZCBydW4gaW4gYWJvdXQ6YmxhbmssIGFuZCBwb3RlbnRp
YWxseSBsZWFrIHJlc3VsdHMgaW50byBhIHN1YnNlcXVlc3QgdGVzdC4KQEAgLTQ1MSw3ICszOTYs
NyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRlclRlc3QoKQogLy8gU3RyaW5n
IG91dHB1dCBtdXN0IGJlIGlkZW50aWNhbCB0byAtW1dlYkZyYW1lIF9kcnRfZGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHRdLgogc3RhdGljIHZvaWQgZHVtcEZyYW1lRGVzY3JpcHRpb25T
dWl0YWJsZUZvclRlc3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CisgICAgYXV0byBuYW1lID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKICAgICBpZiAoV0tCdW5kbGVG
cmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkgewogICAgICAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5h
bWUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIm1h
aW4gZnJhbWUiKTsKQEAgLTQ4NiwyNyArNDMxLDIxIEBAIHN0YXRpYyB2b2lkIGR1bXBMb2FkRXZl
bnQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciogZXZlbnROYW1lKQogCiBzdGF0
aWMgaW5saW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikK
IHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RD
b3B5VVJMKHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gZmlyc3RQYXJ0eSA9
IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29raWVzKHJlcXVlc3QpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaHR0cE1ldGhvZCA9IGFkb3B0V0soV0tVUkxS
ZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwotCi0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCI8TlNVUkxSZXF1ZXN0IFVSTCAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSkpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiLCBtYWluIGRvY3VtZW50IFVSTCAiKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpKTsK
LSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgaHR0cCBtZXRob2QgIik7CisgICAg
YXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1
dG8gZmlyc3RQYXJ0eSA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29r
aWVzKHJlcXVlc3QpKTsKKyAgICBhdXRvIGh0dHBNZXRob2QgPSBhZG9wdFdLKFdLVVJMUmVxdWVz
dENvcHlIVFRQTWV0aG9kKHJlcXVlc3QpKTsKIAorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCI8
TlNVUkxSZXF1ZXN0IFVSTCAiLCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSks
ICIsIG1haW4gZG9jdW1lbnQgVVJMICIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQoZmlyc3RQ
YXJ0eS5nZXQoKSksICIsIGh0dHAgbWV0aG9kICIpOwogICAgIGlmIChXS1N0cmluZ0lzRW1wdHko
aHR0cE1ldGhvZC5nZXQoKSkpCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
KG5vbmUpIik7CiAgICAgZWxzZQogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0
cmluZyhodHRwTWV0aG9kKSk7Ci0KICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQog
CiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5n
QnVpbGRlciwgYm9vbCBzaG91bGREdW1wUmVzcG9uc2VIZWFkZXJzID0gZmFsc2UpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwo
cmVzcG9uc2UpKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwo
cmVzcG9uc2UpKTsKICAgICBpZiAoIXVybCkgewogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIihudWxsKSIpOwogICAgICAgICByZXR1cm47CkBAIC01MzUsMzEgKzQ3NCwyMCBA
QCB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc3BvbnNlSGVhZGVyQ291bnQoV0tVUkxS
ZXNwb25zZVJlZiByZXNwb25zZSkKIAogc3RhdGljIGlubGluZSB2b2lkIGR1bXBFcnJvckRlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLRXJyb3JSZWYgZXJyb3IsIFN0cmluZ0J1aWxk
ZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9y
RG9tYWluID0gYWRvcHRXSyhXS0Vycm9yQ29weURvbWFpbihlcnJvcikpOwotICAgIGludCBlcnJv
ckNvZGUgPSBXS0Vycm9yR2V0RXJyb3JDb2RlKGVycm9yKTsKKyAgICBhdXRvIGVycm9yRG9tYWlu
ID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS0Vycm9yQ29weURvbWFpbihlcnJvcikpKTsKKyAgICBh
dXRvIGVycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNvZGUoZXJyb3IpOwogCiAgICAgLy8gV2Ug
bmVlZCB0byBkbyBzb21lIGVycm9yIG1hcHBpbmcgaGVyZSB0byBtYXRjaCB0aGUgdGVzdCBleHBl
Y3RhdGlvbnMgKE1hYyBlcnJvciBuYW1lcyBhcmUgZXhwZWN0ZWQpLgotICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKGVycm9yRG9tYWluLmdldCgpLCAiV2ViS2l0TmV0d29ya0Vy
cm9yIikpIHsKLSAgICAgICAgZXJyb3JEb21haW4gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJOU1VSTEVycm9yRG9tYWluIikpOworICAgIGlmIChlcnJvckRvbWFpbiA9
PSAiV2ViS2l0TmV0d29ya0Vycm9yIikgeworICAgICAgICBlcnJvckRvbWFpbiA9ICJOU1VSTEVy
cm9yRG9tYWluIjsKICAgICAgICAgZXJyb3JDb2RlID0gLTk5OTsKICAgICB9CisgICAgaWYgKGVy
cm9yRG9tYWluID09ICAiV2ViS2l0UG9saWN5RXJyb3IiKQorICAgICAgICBlcnJvckRvbWFpbiA9
ICJXZWJLaXRFcnJvckRvbWFpbiI7CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhlcnJvckRvbWFpbi5nZXQoKSwgIldlYktpdFBvbGljeUVycm9yIikpCi0gICAgICAgIGVy
cm9yRG9tYWluID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0
RXJyb3JEb21haW4iKSk7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxOU0Vy
cm9yIGRvbWFpbiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhlcnJv
ckRvbWFpbikpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBjb2RlICIpOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGVycm9yQ29kZSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS0Vycm9yQ29weUZhaWxpbmdVUkwoZXJyb3Ip
KTsKLSAgICBpZiAodXJsLmdldCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGZhaWxpbmcgVVJMIFwiIik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwotICAgIH0KLQorICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCI8TlNFcnJvciBkb21haW4gIiwgZXJyb3JEb21haW4sICIsIGNvZGUgIiwgZXJyb3JD
b2RlKTsKKyAgICBpZiAoYXV0byB1cmwgPSBhZG9wdFdLKFdLRXJyb3JDb3B5RmFpbGluZ1VSTChl
cnJvcikpKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCBmYWlsaW5nIFVSTCBcIiIs
IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpKSwgJyInKTsK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCkBAIC02OTUsNyArNjIzLDcgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpbmpl
Y3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnRlc3RVUkwoKSkgewotICAgICAgICBXS1JldGFpblB0
cjxXS1VSTFJlZj4gdGVzdFVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25h
bFVSTChmcmFtZSkpOworICAgICAgICBhdXRvIHRlc3RVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJh
bWVDb3B5UHJvdmlzaW9uYWxVUkwoZnJhbWUpKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUudGVz
dFJ1bm5lcigpLT5zZXRUZXN0VVJMKHRlc3RVUkwuZ2V0KCkpOwogICAgIH0KIApAQCAtNzc0LDEz
ICs3MDIsMTMgQEAgZW51bSBGcmFtZU5hbWVQb2xpY3kgeyBTaG91bGROb3RJbmNsdWRlRnJhbWVO
YW1lLCBTaG91bGRJbmNsdWRlRnJhbWVOYW1lIH07CiAKIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNj
cm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmlu
Z0J1aWxkZXIsIEZyYW1lTmFtZVBvbGljeSBzaG91bGRJbmNsdWRlRnJhbWVOYW1lID0gU2hvdWxk
Tm90SW5jbHVkZUZyYW1lTmFtZSkKIHsKLSAgICBkb3VibGUgeCA9IG51bWVyaWNXaW5kb3dQcm9w
ZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVhPZmZzZXQiKTsKLSAgICBkb3VibGUgeSA9IG51bWVyaWNX
aW5kb3dQcm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVlPZmZzZXQiKTsKKyAgICBkb3VibGUgeCA9
IG51bWVyaWNXaW5kb3dQcm9wZXJ0eShmcmFtZSwgInBhZ2VYT2Zmc2V0Iik7CisgICAgZG91Ymxl
IHkgPSBudW1lcmljV2luZG93UHJvcGVydHkoZnJhbWUsICJwYWdlWU9mZnNldCIpOwogICAgIGlm
IChmYWJzKHgpIDw9IDAuMDAwMDAwMDEgJiYgZmFicyh5KSA8PSAwLjAwMDAwMDAxKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkSW5jbHVkZUZyYW1lTmFtZSkgewotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlO
YW1lKGZyYW1lKSk7CisgICAgICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNv
cHlOYW1lKGZyYW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJh
bWUgJyIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJyAiKTsKQEAgLTc5NCw3ICs3
MjIsNyBAQCBzdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbgogCiBzdGF0aWMgdm9pZCBkdW1wRGVzY2Vu
ZGFudEZyYW1lU2Nyb2xsUG9zaXRpb25zKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1
aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gY2hp
bGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsK
KyAgICBhdXRvIGNoaWxkRnJhbWVzID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weUNoaWxkRnJh
bWVzKGZyYW1lKSk7CiAgICAgc2l6ZV90IHNpemUgPSBXS0FycmF5R2V0U2l6ZShjaGlsZEZyYW1l
cy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAg
ICAgV0tCdW5kbGVGcmFtZVJlZiBzdWJmcmFtZSA9IHN0YXRpY19jYXN0PFdLQnVuZGxlRnJhbWVS
ZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZEZyYW1lcy5nZXQoKSwgaSkpOwpAQCAtODEw
LDI4ICs3MzgsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBBbGxGcmFtZVNjcm9s
bFBvc2l0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGUKICAgICBkdW1wRGVzY2VuZGFu
dEZyYW1lU2Nyb2xsUG9zaXRpb25zKGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKIH0KIAotc3RhdGlj
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKGNvbnN0IGNoYXIqIHN0cmluZykKLXsKLSAg
ICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7Ci19
Ci0KIHN0YXRpYyBib29sIGhhc0RvY3VtZW50RWxlbWVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
KQogewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBK
U0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7Ci0KLSAgICBKU1ZhbHVlUmVmIGRvY3Vt
ZW50VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgdG9K
UygiZG9jdW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFkb2N1bWVudFZhbHVlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGRv
Y3VtZW50VmFsdWUpKTsKLSAgICBKU09iamVjdFJlZiBkb2N1bWVudCA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBkb2N1bWVudFZhbHVlLCAwKTsKLQotICAgIEpTVmFsdWVSZWYgZG9jdW1lbnRF
bGVtZW50VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGRvY3VtZW50LCB0b0pT
KCJkb2N1bWVudEVsZW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFkb2N1bWVudEVsZW1lbnRW
YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xl
YW4oY29udGV4dCwgZG9jdW1lbnRFbGVtZW50VmFsdWUpOworICAgIGF1dG8gY29udGV4dCA9IFdL
QnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7CisgICAgcmV0dXJuIG9iamVj
dFByb3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgeyAi
ZG9jdW1lbnQiLCAiZG9jdW1lbnRFbGVtZW50IiB9KTsKIH0KIAogc3RhdGljIHZvaWQgZHVtcEZy
YW1lVGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQpA
QCAtODU0LDExICs3NjQsMTEgQEAgc3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQogCiBzdGF0aWMgdm9pZCBkdW1w
RGVzY2VuZGFudEZyYW1lc1RleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBjaGlsZEZy
YW1lcyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOworICAg
IGF1dG8gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMo
ZnJhbWUpKTsKICAgICBzaXplX3Qgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGNoaWxkRnJhbWVzLmdl
dCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBX
S0J1bmRsZUZyYW1lUmVmIHN1YmZyYW1lID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4o
V0tBcnJheUdldEl0ZW1BdEluZGV4KGNoaWxkRnJhbWVzLmdldCgpLCBpKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJmcmFtZU5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJh
bWVDb3B5TmFtZShzdWJmcmFtZSkpOworICAgICAgICBhdXRvIHN1YmZyYW1lTmFtZSA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKHN1YmZyYW1lKSk7CiAKICAgICAgICAgLy8gRHVtcFJl
bmRlclRyZWUgaWdub3JlcyBlbXB0eSBmcmFtZXMsIHNvIGRvIHRoZSBzYW1lIHRoaW5nIGhlcmUu
CiAgICAgICAgIGlmICghaGFzRG9jdW1lbnRFbGVtZW50KHN1YmZyYW1lKSkKQEAgLTg4NCw5ICs3
OTQsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZyYW1lc1RleHQoU3RyaW5n
QnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9N
QXNXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmlu
Z0J1aWxkZXIpCiB7CiAjaWYgVVNFKENGKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNF
KERJUkVDVDJEKQotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gd2tEYXRhID0gYWRvcHRXSyhX
S0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0Rh
dGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKLSAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGNmU3RyaW5nID0gYWRvcHRDRihXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0
ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKKyAgICBhdXRvIHdr
RGF0YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZyYW1lKSk7CisgICAg
YXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0Rh
dGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0YS5nZXQoKSkpKTsKKyAgICBhdXRvIGNmU3Ry
aW5nID0gYWRvcHRDRihXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJB
cmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjZlN0
cmluZy5nZXQoKSk7CiAjZW5kaWYKIH0KQEAgLTkwMiw5ICs4MTIsOSBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZHVtcCgpCiAgICAgV0tCdW5kbGVQYWdlRmx1c2hQZW5kaW5nRWRpdG9yU3Rh
dGVVcGRhdGUobV9wYWdlKTsKIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJs
UmVmID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFtZSkpOworICAgIGF1dG8gdXJs
UmVmID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChmcmFtZSkpOwogICAgIFN0cmluZyB1
cmwgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxSZWYuZ2V0KCkpKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlID0gYWRvcHRXSyhXS0J1bmRs
ZUZyYW1lQ29weU1JTUVUeXBlRm9yUmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYuZ2V0KCkp
KTsKKyAgICBhdXRvIG1pbWVUeXBlID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU1JTUVUeXBl
Rm9yUmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYuZ2V0KCkpKTsKICAgICBpZiAodXJsLmZp
bmQoImR1bXBBc1RleHQvIikgIT0gbm90Rm91bmQgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtaW1lVHlwZS5nZXQoKSwgInRleHQvcGxhaW4iKSkKICAgICAgICAgaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5kdW1wQXNUZXh0KGZhbHNlKTsKIApAQCAtMTAxOCwyMSArOTI4LDE5
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rl
c3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUs
IHdvcmxkKTsKLSAgICBKU09iamVjdFJlZiB3aW5kb3cgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmpl
Y3QoY29udGV4dCk7CisgICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKIAogICAgIGlmIChXS0J1bmRsZVNjcmlw
dFdvcmxkTm9ybWFsV29ybGQoKSAhPSB3b3JsZCkgewotICAgICAgICBKU09iamVjdFNldFByb3Bl
cnR5KGNvbnRleHQsIHdpbmRvdywgdG9KUygiX193b3JsZElEIikuZ2V0KCksIEpTVmFsdWVNYWtl
TnVtYmVyKGNvbnRleHQsIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZCh3b3JsZCkpLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICAgICAgc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkoY29udGV4dCwgIl9fd29ybGRJRCIsIFRlc3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZCh3
b3JsZCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZiBleGNlcHRp
b24gPSBudWxscHRyOwotICAgIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+bWFrZVdpbmRv
d09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwotICAgIGluamVjdGVkQnVuZGxl
LmdjQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2Vw
dGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgaW5qZWN0ZWRC
dW5kbGUudGV4dElucHV0Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdp
bmRvdywgJmV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLmdjQ29udHJvbGxlcigp
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGluamVjdGVkQnVuZGxlLmV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKKyAgICBpbmplY3Rl
ZEJ1bmRsZS50ZXh0SW5wdXRDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7
CiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotICAgIGluamVjdGVkQnVuZGxlLmFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0
aW9uKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOwogI2VuZGlmCiAKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6
OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKQEAgLTExMzYsNyArMTA0NCw3IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRJbml0aWF0ZUxvYWRGb3JSZXNvdXJjZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgV0tCdW5kCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAg
ICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CiAgICAg
YXNzaWduZWRVcmxzQ2FjaGUoKS5hZGQoaWRlbnRpZmllciwgcGF0aFN1aXRhYmxlRm9yVGVzdFJl
c3VsdCh1cmwuZ2V0KCkpKTsKIH0KIApAQCAtMTE3NSwxNiArMTA4MywxNiBAQCBXS1VSTFJlcXVl
c3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZQogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkgJiYg
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBy
ZWRpcmVjdFVSTCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKKyAg
ICBhdXRvIHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25z
ZSkpOwogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkgJiYgaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3Qo
KSAmJiByZWRpcmVjdFVSTCkgewogICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KCJS
ZXR1cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdL
VVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBob3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFtZSh1cmwuZ2V0KCkpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJs
LmdldCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0
V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhX
S1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIGhvc3QgPSBhZG9wdFdLKFdL
VVJMQ29weUhvc3ROYW1lKHVybC5nZXQoKSkpOworICAgIGF1dG8gc2NoZW1lID0gYWRvcHRXSyhX
S1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CisgICAgYXV0byB1cmxTdHJpbmcgPSBhZG9wdFdL
KFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsKICAgICBpZiAoaG9zdCAmJiAhV0tTdHJpbmdJ
c0VtcHR5KGhvc3QuZ2V0KCkpCiAgICAgICAgICYmIGlzSFRUUE9ySFRUUFNTY2hlbWUoc2NoZW1l
LmdldCgpKQogICAgICAgICAmJiAhV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhob3N0Lmdl
dCgpLCAiMjU1LjI1NS4yNTUuMjU1IikgLy8gVXNlZCBpbiBzb21lIHRlc3RzIHRoYXQgZXhwZWN0
IHRvIGdldCBiYWNrIGFuIGVycm9yLgpAQCAtMTE5MiwxMiArMTEwMCwxMiBAQCBXS1VSTFJlcXVl
c3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZQogICAgICAgICBib29sIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBmYWxzZTsK
ICAgICAgICAgaWYgKGluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkgewogICAgICAgICAg
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
bV9wYWdlKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtYWluRnJhbWVVUkwg
PSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOworICAgICAgICAgICAg
YXV0byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFt
ZSkpOwogICAgICAgICAgICAgaWYgKCFtYWluRnJhbWVVUkwgfHwgV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtYWluRnJhbWVVUkwuZ2V0KCkpKS5n
ZXQoKSwgImFib3V0OmJsYW5rIikpCiAgICAgICAgICAgICAgICAgbWFpbkZyYW1lVVJMID0gYWRv
cHRXSyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKG1haW5GcmFtZSkpOwogCi0gICAg
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1lSG9zdCA9IGFkb3B0V0so
V0tVUkxDb3B5SG9zdE5hbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7Ci0gICAgICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1lU2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlT
Y2hlbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7CisgICAgICAgICAgICBhdXRvIG1haW5GcmFtZUhv
c3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1lKG1haW5GcmFtZVVSTC5nZXQoKSkpOworICAg
ICAgICAgICAgYXV0byBtYWluRnJhbWVTY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSht
YWluRnJhbWVVUkwuZ2V0KCkpKTsKICAgICAgICAgICAgIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBp
c0hUVFBPckhUVFBTU2NoZW1lKG1haW5GcmFtZVNjaGVtZS5nZXQoKSkgJiYgIWlzTG9jYWxIb3N0
KG1haW5GcmFtZUhvc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbWFpbkZyYW1l
SXNFeHRlcm5hbCAmJiAhaXNBbGxvd2VkSG9zdChob3N0LmdldCgpKSkgewpAQCAtMTIxNCw3ICsx
MTIyLDcgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1
ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAgICAgU3RyaW5nIGJvZHkgPSBp
bmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVxdWVzdEhUVFBCb2R5KCk7CiAg
ICAgICAgIGlmICghYm9keS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENTdHJpbmcgY0JvZHkg
PSBib2R5LnV0ZjgoKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYm9keSA9
IGFkb3B0V0soV0tEYXRhQ3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGNCb2R5LmRhdGEoKSksIGNCb2R5Lmxlbmd0aCgpKSk7CisgICAgICAgICAgICBhdXRvIGJv
ZHkgPSBhZG9wdFdLKFdLRGF0YUNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihjQm9keS5kYXRhKCkpLCBjQm9keS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgcmV0
dXJuIFdLVVJMUmVxdWVzdENvcHlTZXR0aW5nSFRUUEJvZHkocmVxdWVzdCwgYm9keS5nZXQoKSk7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjQyLDkgKzExNTAsOSBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLQgogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
UmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1Jl
dGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNw
b25zZSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdL
KFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtaW1lVHlwZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlN
SU1FVHlwZShyZXNwb25zZSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNl
Q29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENv
cHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKKyAgICBhdXRvIG1pbWVUeXBlU3RyaW5n
ID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHJlc3BvbnNlKSk7CiAKICAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9X
VEZTdHJpbmcodXJsU3RyaW5nKSk7CkBAIC0xMzUwLDEwICsxMjU4LDggQEAgV0tCdW5kbGVQYWdl
UG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihXS0IKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb25cbiIpOwogICAgICAgICBkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KHJlcXVlc3QsIHN0cmluZ0J1aWxkZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiBpcyBtYWluIGZyYW1lIC0gIik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBzaG91bGQgb3BlbiBVUkxz
IGV4dGVybmFsbHkgLSAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV0tCdW5kbGVO
YXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9u
KSA/ICJ5ZXMiIDogIm5vIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgaXMgbWFp
biBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJu
byIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0
ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5h
bFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KQEAgLTEzNjEsMjQgKzEyNjcsMjEgQEAg
V0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIFdLQnVuZGxl
UGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVy
bC5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJl
cXVlc3QpKTsKKyAgICBhdXRvIHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVy
bC5nZXQoKSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQg
Iik7Ci0gICAgaWYgKGlzTG9jYWxGaWxlU2NoZW1lKHVybFNjaGVtZS5nZXQoKSkpIHsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZpbGVuYW1lID0gYWRvcHRXSyhXS1VSTENvcHlM
YXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJs
LmdldCgpKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0
cmluZykpOwotICAgIH0KKyAgICBpZiAoaXNMb2NhbEZpbGVTY2hlbWUodXJsU2NoZW1lLmdldCgp
KSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VS
TENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKSkpOworICAgIGVsc2UKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmco
dXJsLmdldCgpKSkpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB3aXRoIG5h
dmlnYXRpb24gdHlwZSBcJyIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5n
KE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdh
dGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikpKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJcJyIpOwotICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZj4g
aGl0VGVzdFJlc3VsdFJlZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhp
dFRlc3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbikpOworICAgIGF1dG8gaGl0VGVzdFJlc3VsdFJl
ZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RSZXN1bHQobmF2
aWdhdGlvbkFjdGlvbikpOwogICAgIGlmIChoaXRUZXN0UmVzdWx0UmVmKSB7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLQnVuZGxlTm9kZUhhbmRsZVJlZj4gbm9kZUhhbmRsZVJlZiA9IGFkb3B0V0so
V0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJlc3VsdFJlZi5nZXQo
KSkpOworICAgICAgICBhdXRvIG5vZGVIYW5kbGVSZWYgPSBhZG9wdFdLKFdLQnVuZGxlSGl0VGVz
dFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYuZ2V0KCkpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb3JpZ2luYXRpbmcgZnJvbSAiKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBu
b2RlSGFuZGxlUmVmLmdldCgpKSk7CiAgICAgfQpAQCAtMTQwMCwxMiArMTMwMyw3IEBAIFdLQnVu
ZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJl
c3BvbnNlKFdLQnVuZGxlUGFnCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVFbmFibGVk
KCkgJiYgV0tVUkxSZXNwb25zZUlzQXR0YWNobWVudChyZXNwb25zZSkpIHsKLSAgICAgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZmlsZW5hbWUgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUo
cmVzcG9uc2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJQb2xpY3kg
ZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUg
XCciKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUp
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcJ1xuIik7Ci0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0
KG1ha2VTdHJpbmcoIlBvbGljeSBkZWxlZ2F0ZTogcmVzb3VyY2UgaXMgYW4gYXR0YWNobWVudCwg
c3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIsIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxSZXNwb25z
ZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShyZXNwb25zZSkpKSwgIlwnXG4iKSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwpAQCAtMTQ3MSwx
MCArMTM2OSwxMCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgYWRkTGVhZGluZ1NwYWNlU3RyaXBUcmFp
bGluZ1NwYWNlc0FkZE5ld2xpbmUoY29uc3QgV1RGOjpTdHJpbgogCiBzdGF0aWMgV1RGOjpTdHJp
bmcgbGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KGNvbnN0IFdURjo6U3RyaW5nJiBwYXRoKQogewot
ICAgIHNpemVfdCBwb3MgPSBwYXRoLmZpbmQoImZpbGU6Ly8iKTsKKyAgICBhdXRvIHBvcyA9IHBh
dGguZmluZCgiZmlsZTovLyIpOwogICAgIEFTU0VSVChXVEY6Om5vdEZvdW5kICE9IHBvcyk7CiAK
LSAgICBXVEY6OlN0cmluZyB0bXBQYXRoID0gcGF0aC5zdWJzdHJpbmcocG9zICsgNyk7CisgICAg
YXV0byB0bXBQYXRoID0gcGF0aC5zdWJzdHJpbmcocG9zICsgNyk7CiAgICAgaWYgKHRtcFBhdGgu
bGVuZ3RoKCkgPCAyKSAvLyBLZWVwIHRoZSBsb25lIHNsYXNoIHRvIGF2b2lkIGVtcHR5IG91dHB1
dC4KICAgICAgICAgcmV0dXJuIHRtcFBhdGg7CiAKQEAgLTE1MjEsMTEgKzE0MTksNyBAQCB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQoV0tTdHJpbmdSZWYgc3Rh
dHVzYmFyVGV4dCkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcFN0YXR1c0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBE
RUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iik7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCkpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCdcbicpOwotICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVp
bGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJp
bmcoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDoiLCB0b1dURlN0
cmluZyhzdGF0dXNiYXJUZXh0KSwgJ1xuJykpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZy
YW1lUmVmKQpAQCAtMTU1OSwxNSArMTQ1Myw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
aWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmCiAg
ICAgICAgIC8vIFJvdW5kaW5nIHVwIG9yIGRvd24gZG9lcyBub3QgcmVhbGx5IG1hdHRlciBmb3Ig
dGhlc2UgdGVzdHMuIEl0J3MKICAgICAgICAgLy8gc3VmZmljaWVudCB0byBqdXN0IGdldCBhIHJh
bmdlIG9mIDEwMDAwIHRvIGRldGVybWluZSBpZiB3ZSB3ZXJlCiAgICAgICAgIC8vIGFib3ZlIG9y
IGJlbG93IGEgdGhyZXNob2xkLgotICAgICAgICBpbnQ2NF90IHRydW5jYXRlZFNwYWNlTmVlZGVk
ID0gKHRvdGFsQnl0ZXNOZWVkZWQgLyAxMDAwMCkgKiAxMDAwMDsKLQotICAgICAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiVUkgREVMRUdBVEUgQVBQTElDQVRJT04gQ0FDSEUgQ0FMTEJBQ0s6IGV4Y2VlZGVkQXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHNlY3VyaXR5T3JpZ2luVG9TdHIob3JpZ2luKSk7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvdGFsU3BhY2VOZWVkZWQ6fiIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0cnVuY2F0ZWRTcGFjZU5lZWRlZCk7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5v
dXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGF1dG8gdHJ1bmNh
dGVkU3BhY2VOZWVkZWQgPSAodG90YWxCeXRlc05lZWRlZCAvIDEwMDAwKSAqIDEwMDAwOworICAg
ICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIEFQ
UExJQ0FUSU9OIENBQ0hFIENBTExCQUNLOiBleGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5R
dW90YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmluZyhvcmlnaW4pLCAiIHRvdGFsU3BhY2VOZWVk
ZWQ6fiIsIHRydW5jYXRlZFNwYWNlTmVlZGVkLCAnXG4nKSk7CiAgICAgfQogCiAgICAgaWYgKGlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRGlzYWxsb3dJbmNyZWFzZUZvckFwcGxp
Y2F0aW9uQ2FjaGVRdW90YSgpKQpAQCAtMTU4MCwxNSArMTQ2Nyw4IEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5
T3JpZ2luUmVmCiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNl
UXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIGRhdGFiYXNlTmFt
ZSwgV0tTdHJpbmdSZWYgZGF0YWJhc2VEaXNwbGF5TmFtZSwgdWludDY0X3QgY3VycmVudFF1b3Rh
Qnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnRPcmlnaW5Vc2FnZUJ5dGVzLCB1aW50NjRfdCBjdXJyZW50
RGF0YWJhc2VVc2FnZUJ5dGVzLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlQnl0ZXMpCiB7CiAgICAg
YXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAg
aWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcERhdGFiYXNlQ2FsbGJh
Y2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNL
OiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihvcmlnaW4pKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZGF0YWJhc2U6Iik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGRhdGFiYXNlTmFtZSkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkKKyAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBEQVRBQkFT
RSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iiwgc3Ry
aW5nKG9yaWdpbiksICIgZGF0YWJhc2U6IiwgdG9XVEZTdHJpbmcoZGF0YWJhc2VOYW1lKSwgJ1xu
JykpOwogCiAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAg
IGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5k
YXRhYmFzZURlZmF1bHRRdW90YSgpOwpAQCAtMTYwMSwxMiArMTQ4MSw3IEBAIHVpbnQ2NF90IElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2lu
UmVmIG9yaWdpbiwKICAgICBpZiAobWF4UXVvdGEgPj0gMCkgewogICAgICAgICBpZiAoZGVmYXVs
dFF1b3RhIDwgZXhwZWN0ZWRVc2FnZUJ5dGVzICYmIGV4cGVjdGVkVXNhZ2VCeXRlcyA8PSBtYXhR
dW90YSkgewogICAgICAgICAgICAgbmV3UXVvdGEgPSBleHBlY3RlZFVzYWdlQnl0ZXM7Ci0KLSAg
ICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGlu
Y3JlYXNlZCBxdW90YSB0byAiKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVt
YmVyKG5ld1F1b3RhKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwot
ICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkpOworICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5n
KCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVhc2VkIHF1b3RhIHRvICIsIG5l
d1F1b3RhLCAnXG4nKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG5ld1F1b3RhOwpA
QCAtMTY3NSwxMyArMTU1MCw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdp
bkVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICBpZiAoIWluamVjdGVk
QnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygp
KSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRp
bmdJbkRPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3Ry
KG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVp
bGRlci50b1N0cmluZygpKTsKLSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5k
bGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVk
aXRpbmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5n
ZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTY5MSwxMyArMTU2MSw4IEBAIGJvb2wgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFu
Z2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxF
R0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUu
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQor
ICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUu
dGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggYTYy
NTU4OTcyN2JjNzFiNzQxZWNmMjU2NTE1MjFlZmI0ZjQ5OTdmMy4uYTk2ZDVhNjQ0N2JkOTMyNTUx
MTg4YmQ4NDBlMWE0ZDBiZmMwMTUyMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDExIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogCisjaW5jbHVkZSAi
RGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5jbHVkZSAiSlNUZXN0UnVubmVyLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgi
CiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NUZXN0UnVubmVyVXRpbHMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oPgpAQCAtNjksNyArNjksNyBAQCBSZWY8VGVzdFJ1bm5lcj4gVGVzdFJ1bm5lcjo6Y3Jl
YXRlKCkKIH0KIAogVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcigpCi0gICAgOiBtX3VzZXJTdHlsZVNo
ZWV0TG9jYXRpb24oYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpKQor
ICAgIDogbV91c2VyU3R5bGVTaGVldExvY2F0aW9uKHRvV0soIiIpKQogewogICAgIHBsYXRmb3Jt
SW5pdGlhbGl6ZSgpOwogfQpAQCAtODMsMzQgKzgzLDEwMSBAQCBKU0NsYXNzUmVmIFRlc3RSdW5u
ZXI6OndyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIEpTVGVzdFJ1bm5lcjo6dGVzdFJ1bm5lckNs
YXNzKCk7CiB9CiAKK3N0YXRpYyBXS0J1bmRsZVBhZ2VSZWYgcGFnZSgpCit7CisgICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKK30KKworc3RhdGlj
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lKCkKK3sKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKHBhZ2UoKSk7Cit9CisKK3N0YXRpYyBKU0NvbnRleHRSZWYgbWFpbkpTQ29u
dGV4dCgpCit7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dCht
YWluRnJhbWUoKSk7Cit9CisKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheSgpCiB7Ci0gICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCk7Ci0gICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KHBhZ2UpOworICAgIFdLQnVuZGxl
UGFnZUZvcmNlUmVwYWludChwYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXlB
bmRUcmFja1JlcGFpbnRzKCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBXVFI6
OnBhZ2UoKTsKICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQocGFnZSk7CiAgICAgV0tCdW5k
bGVQYWdlU2V0VHJhY2tzUmVwYWludHMocGFnZSwgdHJ1ZSk7CiAgICAgV0tCdW5kbGVQYWdlUmVz
ZXRUcmFja2VkUmVwYWludHMocGFnZSk7CiB9CiAKK3N0YXRpYyBXS1JldGFpblB0cjxXS0RvdWJs
ZVJlZj4gdG9XSyhkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0V0soV0tEb3VibGVD
cmVhdGUodmFsdWUpKTsKK30KKworc3RhdGljIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4g
Y3JlYXRlV0tEaWN0aW9uYXJ5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8Y29uc3Qg
Y2hhciosIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+PiBwYWlycykKK3sKKyAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IGtleXM7CisgICAgVmVjdG9yPFdLVHlwZVJlZj4gdmFsdWVzOworICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IHN0cmluZ3M7CisgICAgZm9yIChhdXRvJiBwYWly
IDogcGFpcnMpIHsKKyAgICAgICAgYXV0byBrZXkgPSB0b1dLKHBhaXIuZmlyc3QpOworICAgICAg
ICBrZXlzLmFwcGVuZChrZXkuZ2V0KCkpOworICAgICAgICB2YWx1ZXMuYXBwZW5kKHBhaXIuc2Vj
b25kLmdldCgpKTsKKyAgICAgICAgc3RyaW5ncy5hcHBlbmQoV1RGTW92ZShrZXkpKTsKKyAgICB9
CisgICAgcmV0dXJuIGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKGtleXMuZGF0YSgpLCB2YWx1
ZXMuZGF0YSgpLCBrZXlzLnNpemUoKSkpOworfQorCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tUeXBl
UmVmPiBwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5h
bWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgV0tUeXBlUmVmIHJhd1JldHVy
blZhbHVlID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1
ZSwgJnJhd1JldHVyblZhbHVlKTsKKyAgICByZXR1cm4gYWRvcHRXSyhyYXdSZXR1cm5WYWx1ZSk7
Cit9CisKK3N0YXRpYyBib29sIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
KGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgcmV0
dXJuIGJvb2xlYW5WYWx1ZShwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5h
bWUsIHZhbHVlKSk7Cit9CisKK3N0YXRpYyBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlw
ZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgV0tUeXBlUmVmIHJhd1JldHVyblZhbHVlID0g
bnVsbHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhwYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlLCAmcmF3UmV0dXJuVmFsdWUpOworICAg
IHJldHVybiBhZG9wdFdLKHJhd1JldHVyblZhbHVlKTsKK30KKworc3RhdGljIGJvb2wgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKGNvbnN0IGNoYXIqIG5hbWUsIFdL
VHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZShwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQor
CitzdGF0aWMgdWludDY0X3QgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50
NjQoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cikKK3sKKyAgICBy
ZXR1cm4gdWludDY0VmFsdWUocG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRoUmV0dXJuVmFs
dWUobmFtZSwgdmFsdWUpKTsKK30KKworc3RhdGljIHVpbnQ2NF90IHBvc3RTeW5jaHJvbm91c01l
c3NhZ2VSZXR1cm5pbmdVSW50NjQoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gdWlu
dDY0VmFsdWUocG9zdFN5bmNocm9ub3VzTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lKSk7Cit9
CisKK3N0YXRpYyB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShjb25zdCBjaGFyKiBuYW1lLCBib29s
IHZhbHVlKQoreworICAgIGF1dG8mIGJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KTsKKyAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGJ1bmRs
ZS5idW5kbGUoKSwgYnVuZGxlLnBhZ2VHcm91cCgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSk7
Cit9CisKIGJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcFBpeGVscygpIGNvbnN0CiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0RHVtcFBpeGVscyIpKTsKLSAgICBXS1R5cGVSZWYgcmV0
dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51
bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShh
ZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAg
ICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldER1bXBQ
aXhlbHMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXREdW1wUGl4ZWxzKGJvb2wgZHVtcFBp
eGVscykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXREdW1wUGl4ZWxzIikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShkdW1wUGl4ZWxzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJTZXREdW1wUGl4ZWxzIiwgZHVtcFBpeGVscyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVt
cEFzVGV4dChib29sIGR1bXBQaXhlbHMpCkBAIC0xMjIsMTggKzE4OSwxMiBAQCB2b2lkIFRlc3RS
dW5uZXI6OmR1bXBBc1RleHQoYm9vbCBkdW1wUGl4ZWxzKQogICAgIAogV2hhdFRvRHVtcCBUZXN0
UnVubmVyOjp3aGF0VG9EdW1wKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJH
ZXRXaGF0VG9EdW1wIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwot
ICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgp
KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2hhdFRvRHVtcD4oV0tVSW50NjRHZXRWYWx1ZShh
ZG9wdFdLKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V2hhdFRvRHVtcD4ocG9zdFN5bmNocm9ub3VzTWVzc2FnZVJl
dHVybmluZ1VJbnQ2NCgiR2V0V2hhdFRvRHVtcCIpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRXaGF0VG9EdW1wKFdoYXRUb0R1bXAgd2hhdFRvRHVtcCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRXaGF0VG9EdW1wIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHdoYXRUb0R1bXApKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRX
aGF0VG9EdW1wIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHdoYXRUb0R1bXApKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wg
cGVybWlzc2l2ZSkKQEAgLTE1OCwyNiArMjE5LDE5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVu
dGlsRG93bmxvYWRGaW5pc2hlZCgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG9uZSgp
CiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVu
bmluZygpKTsKIAogICAgIHNldFdhaXRVbnRpbERvbmUodHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0V2FpdFVudGlsRG9uZShib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldFdhaXRVbnRpbERvbmUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRXYWl0VW50aWxEb25lIiwgdmFsdWUpOwog
fQogCiBib29sIFRlc3RSdW5uZXI6OnNob3VsZFdhaXRVbnRpbERvbmUoKSBjb25zdAogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRXYWl0VW50aWxEb25lIikpOwotICAgIFdLVHlwZVJl
ZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0
KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJu
RGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRW
YWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgp
KTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdl
dFdhaXRVbnRpbERvbmUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKQEAg
LTIxMCwxOCArMjY0LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6Zm9yY2VJbW1lZGlhdGVDb21wbGV0
aW9uKCkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldER1bXBGcmFtZUxv
YWRDYWxsYmFja3MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiU2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIsIHZhbHVlKTsKIH0K
IAogYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKTsKLSAg
ICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc3Nh
Z2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tC
b29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRh
dGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuKCJHZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIik7CiB9CiAKIHVuc2lnbmVkIFRlc3RS
dW5uZXI6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29uc3QKQEAgLTIzMSwxOCAr
Mjc5LDE0IEBAIHVuc2lnbmVkIFRlc3RSdW5uZXI6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJv
YXJkKCkgY29uc3QKIAogdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVm
IHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc291cmNlV0sgPSB0b1dLKHNvdXJjZSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VBZGRVc2VyU2NyaXB0KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgc291cmNlV0suZ2V0KCksCisgICAgV0tCdW5kbGVQYWdlQWRkVXNlclNjcmlwdChwYWdl
KCksIHRvV0soc291cmNlKS5nZXQoKSwKICAgICAgICAgKHJ1bkF0U3RhcnQgPyBrV0tJbmplY3RB
dERvY3VtZW50U3RhcnQgOiBrV0tJbmplY3RBdERvY3VtZW50RW5kKSwKICAgICAgICAgKGFsbEZy
YW1lcyA/IGtXS0luamVjdEluQWxsRnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3Vy
Y2UsIGJvb2wgYWxsRnJhbWVzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3Vy
Y2VXSyA9IHRvV0soc291cmNlKTsKLQotICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTdHlsZVNoZWV0
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc291cmNlV0suZ2V0
KCksCisgICAgV0tCdW5kbGVQYWdlQWRkVXNlclN0eWxlU2hlZXQocGFnZSgpLCB0b1dLKHNvdXJj
ZSkuZ2V0KCksCiAgICAgICAgIChhbGxGcmFtZXMgPyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6IGtX
S0luamVjdEluVG9wRnJhbWVPbmx5KSk7CiB9CiAKQEAgLTI1MywyOSArMjk3LDE3IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6a2VlcFdlYkhpc3RvcnkoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21t
YW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHNob3dVSSwgSlNTdHJpbmdSZWYgdmFs
dWUpCiB7Ci0gICAgV0tCdW5kbGVQYWdlRXhlY3V0ZUVkaXRpbmdDb21tYW5kKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyh2
YWx1ZSkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChwYWdl
KCksIHRvV0sobmFtZSkuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKIH0KIAogc3RhdGljIE9w
dGlvbmFsPFdLRmluZE9wdGlvbnM+IGZpbmRPcHRpb25zRnJvbUFycmF5KEpTVmFsdWVSZWYgb3B0
aW9uc0FycmF5QXNWYWx1ZSkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdL
QnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0g
ICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQobWFpbkZyYW1lKTsKLSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNPYmplY3RSZWYgb3B0
aW9uc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9wdGlvbnNBcnJheUFzVmFsdWUs
IDApOwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBp
ZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7Cisg
ICAgYXV0byBvcHRpb25zQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3B0aW9uc0Fy
cmF5QXNWYWx1ZSwgbnVsbHB0cik7CisgICAgYXV0byBsZW5ndGggPSBhcnJheUxlbmd0aChjb250
ZXh0LCBvcHRpb25zQXJyYXkpOwogICAgIFdLRmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7Ci0gICAg
c2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0
SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVl
SXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgYXV0byBvcHRpb25OYW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2
YWx1ZSwgMCkpOwotCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIGF1dG8gb3B0aW9uTmFtZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCkpOwogICAg
ICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAi
Q2FzZUluc2Vuc2l0aXZlIikpCiAgICAgICAgICAgICBvcHRpb25zIHw9IGtXS0ZpbmRPcHRpb25z
Q2FzZUluc2Vuc2l0aXZlOwogICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJBdFdvcmRTdGFydHMiKSkKQEAgLTI5Niw3ICszMjgs
NyBAQCBzdGF0aWMgT3B0aW9uYWw8V0tGaW5kT3B0aW9ucz4gZmluZE9wdGlvbnNGcm9tQXJyYXko
SlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbAogYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5n
KEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogewog
ICAgIGlmIChhdXRvIG9wdGlvbnMgPSBmaW5kT3B0aW9uc0Zyb21BcnJheShvcHRpb25zQXJyYXlB
c1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpv
cHRpb25zKTsKKyAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcocGFnZSgpLCB0
b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAg
LTMwNCwyOCArMzM2LDIzIEBAIGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU1N0cmluZ1Jl
ZiB0YXJnZXQsIEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHZvaWQgVGVzdFJ1bm5l
cjo6ZmluZFN0cmluZ01hdGNoZXNJblBhZ2UoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVm
IG9wdGlvbnNBcnJheUFzVmFsdWUpCiB7CiAgICAgaWYgKGF1dG8gb3B0aW9ucyA9IGZpbmRPcHRp
b25zRnJvbUFycmF5KG9wdGlvbnNBcnJheUFzVmFsdWUpKQotICAgICAgICByZXR1cm4gV0tCdW5k
bGVQYWdlRmluZFN0cmluZ01hdGNoZXMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRpb25zKTsKKyAgICAgICAgV0tCdW5k
bGVQYWdlRmluZFN0cmluZ01hdGNoZXMocGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksICpvcHRp
b25zKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZXBsYWNlRmluZE1hdGNoZXNBdEluZGljZXMo
SlNWYWx1ZVJlZiBtYXRjaEluZGljZXNBc1ZhbHVlLCBKU1N0cmluZ1JlZiByZXBsYWNlbWVudFRl
eHQsIGJvb2wgc2VsZWN0aW9uT25seSkKIHsKICAgICBhdXRvJiBidW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgYXV0byBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUoYnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBhdXRvIGNvbnRleHQgPSBXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICBhdXRvIGxlbmd0
aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5n
dGgiKSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogICAgIGF1dG8gbWF0
Y2hJbmRpY2VzT2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG1hdGNoSW5kaWNlc0Fz
VmFsdWUsIDApOwotICAgIGF1dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIG1hdGNoSW5kaWNlc09iamVjdCwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsK
LSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAg
IHJldHVybjsKKyAgICBhdXRvIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG1hdGNoSW5k
aWNlc09iamVjdCk7CiAKICAgICBhdXRvIGluZGljZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5
Q3JlYXRlKCkpOwotICAgIGF1dG8gbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFBy
b3BlcnR5QXRJbmRleChjb250ZXh0LCBtYXRjaEluZGljZXNPYmplY3QsIGksIDApOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVl
ID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0
LCBpLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgdmFs
dWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBpbmRleCA9IGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoc3RkOjpyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFs
dWUsIG51bGxwdHIpKSkpOworICAgICAgICBhdXRvIGluZGV4ID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKSk7CiAgICAgICAg
IFdLQXJyYXlBcHBlbmRJdGVtKGluZGljZXMuZ2V0KCksIGluZGV4LmdldCgpKTsKICAgICB9CiAg
ICAgV0tCdW5kbGVQYWdlUmVwbGFjZVN0cmluZ01hdGNoZXMoYnVuZGxlLnBhZ2UoKS0+cGFnZSgp
LCBpbmRpY2VzLmdldCgpLCB0b1dLKHJlcGxhY2VtZW50VGV4dCkuZ2V0KCksIHNlbGVjdGlvbk9u
bHkpOwpAQCAtMzM0LDExICszNjEsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0
Y2hlc0F0SW5kaWNlcyhKU1ZhbHVlUmVmIG1hdGNoSW5kaWNlc0FzVmFsdWUsIEpTUwogdm9pZCBU
ZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcygpCiB7CiAgICAgV0tCdW5kbGVDbGVhckFsbERh
dGFiYXNlcyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcyIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUodHJ1ZSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJEZWxldGVB
bGxJbmRleGVkRGF0YWJhc2VzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0
YWJhc2VRdW90YSh1aW50NjRfdCBxdW90YSkKQEAgLTM0OCwyOSArMzcxLDI3IEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSh1aW50NjRfdCBxdW90YSkKIAogdm9pZCBUZXN0UnVu
bmVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTeW5j
TG9jYWxTdG9yYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKCJTeW5jTG9jYWxTdG9yYWdlIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCiB7Ci0gICAgV0tCdW5kbGVQYWdl
Q2xlYXJBcHBsaWNhdGlvbkNhY2hlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSk7CisgICAgV0tCdW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlKHBhZ2UoKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpT
U3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2Fj
aGVGb3JPcmlnaW4oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0
b1dLKG9yaWdpbikuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZUNsZWFyQXBwbGljYXRpb25DYWNo
ZUZvck9yaWdpbihwYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1aW50NjRfdCBzaXplKQogewotICAgIFdLQnVu
ZGxlUGFnZVNldEFwcENhY2hlTWF4aW11bVNpemUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBzaXplKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRBcHBDYWNoZU1heGlt
dW1TaXplKHBhZ2UoKSwgc2l6ZSk7CiB9CiAKIGxvbmcgbG9uZyBUZXN0UnVubmVyOjphcHBsaWNh
dGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBy
ZXR1cm4gV0tCdW5kbGVQYWdlR2V0QXBwQ2FjaGVVc2FnZUZvck9yaWdpbihJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CisgICAg
cmV0dXJuIFdLQnVuZGxlUGFnZUdldEFwcENhY2hlVXNhZ2VGb3JPcmlnaW4ocGFnZSgpLCB0b1dL
KG9yaWdpbikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc2FsbG93SW5jcmVhc2VG
b3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKQpAQCAtMzgxLDE1OCArNDAyLDEwOCBAQCB2b2lkIFRl
c3RSdW5uZXI6OmRpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKQogc3Rh
dGljIGlubGluZSBKU1ZhbHVlUmVmIHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29udGV4
dCwgV0tBcnJheVJlZiBzdHJpbmdzKQogewogICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IFdLQXJy
YXlHZXRTaXplKHN0cmluZ3MpOwotCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2Jq
ZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2Jq
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKKyAgICBhdXRvIGFy
cmF5ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgbnVsbHB0cik7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN0
cmluZ1JlZiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgo
c3RyaW5ncywgaSkpOwotICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nSlMg
PSB0b0pTKHN0cmluZ1JlZik7Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNv
bnRleHQsIGFycmF5T2JqLCBpLCBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmdKUy5n
ZXQoKSksIDApOworICAgICAgICBhdXRvIHN0cmluZ1JlZiA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoc3RyaW5ncywgaSkpOworICAgICAgICBKU09iamVj
dFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgSlNWYWx1ZU1ha2VTdHJpbmco
Y29udGV4dCwgdG9KUyhzdHJpbmdSZWYpLmdldCgpKSwgbnVsbHB0cik7CiAgICAgfQotCi0gICAg
cmV0dXJuIGFycmF5UmVzdWx0OworICAgIHJldHVybiBhcnJheTsKIH0KIAogSlNWYWx1ZVJlZiBU
ZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoKQogewotICAgIFdLQnVuZGxl
UGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gb3JpZ2lucyA9IGFkb3B0V0soV0tCdW5k
bGVQYWdlQ29weU9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShwYWdlKSk7Ci0KLSAgICBXS0J1
bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsK
LSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29u
dGV4dChtYWluRnJhbWUpOwotCi0gICAgcmV0dXJuIHN0cmluZ0FycmF5VG9KUyhjb250ZXh0LCBv
cmlnaW5zLmdldCgpKTsKKyAgICByZXR1cm4gc3RyaW5nQXJyYXlUb0pTKG1haW5KU0NvbnRleHQo
KSwgYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKHBh
Z2UoKSkpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc0NvbW1hbmRFbmFibGVkKEpT
U3RyaW5nUmVmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1h
bmRFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9X
SyhuYW1lKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1hbmRF
bmFibGVkKHBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0Q2FuT3BlbldpbmRvd3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDYW5P
cGVuV2luZG93cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodHJ1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoIlNldENhbk9wZW5XaW5kb3dzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRl
Qm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmpl
Y3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92
ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0WFNTQXVkaXRvckVuYWJsZWQiLCBlbmFibGVkKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRNZWRpYURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0TWVkaWFEZXZpY2VzRW5hYmxlZCIpKTsKLSAgICBh
dXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBX
S0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxl
LmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVk
KTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0TWVkaWFEZXZpY2VzRW5hYmxl
ZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdlYlJUQ01ETlNJQ0VDYW5k
aWRhdGVzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdl
YlJUQ01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3Rl
ZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkIiwgZW5h
YmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tVXNlckFnZW50KEpTU3RyaW5n
UmVmIHVzZXJBZ2VudCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDdXN0b21Vc2Vy
QWdlbnQiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHRvV0sodXNlckFn
ZW50KS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0Q3Vz
dG9tVXNlckFnZW50IiwgdG9XSyh1c2VyQWdlbnQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIldlYktpdFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkIikpOwotICAgIGF1dG8mIGlu
amVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxl
T3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxl
KCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAg
IFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCIs
IGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlhQ29udHJvbHNF
bmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0TW9kZXJuTWVk
aWFDb250cm9sc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNl
Rm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFn
ZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVu
Y2UoIldlYktpdE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0V2ViR0wyRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIldlYktpdFdlYkdMMkVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJv
b2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0
ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVy
cmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkdMMkVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQiKSk7Ci0g
ICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0g
ICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1
bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5h
YmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdyaXRhYmxlU3RyZWFt
QVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRyYW5zZm9y
bVN0cmVhbUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJL
aXRUcmFuc2Zvcm1TdHJlYW1BUElFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29s
UHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVk
QnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJp
ZGVQcmVmZXJlbmNlKCJXZWJLaXRUcmFuc2Zvcm1TdHJlYW1BUElFbmFibGVkIiwgZW5hYmxlZCk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZChi
b29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFJlYWRhYmxlQnl0ZVN0cmVh
bUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVz
dFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3Vw
KCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldl
YktpdFJlYWRhYmxlQnl0ZVN0cmVhbUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJXZWJLaXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQiKSk7Ci0gICAg
YXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAg
V0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRs
ZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxl
ZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEVuY3J5cHRlZE1lZGlhQVBJ
RW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBpY3R1cmVJblBp
Y3R1cmVBUElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0
UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQ
cmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRC
dW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlk
ZVByZWZlcmVuY2UoIldlYktpdFBpY3R1cmVJblBpY3R1cmVBUElFbmFibGVkIiwgZW5hYmxlZCk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQoYm9vbCBlbmFi
bGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRHZW5lcmljQ3VlQVBJRW5hYmxlZCIpKTsK
LSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsK
LSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVk
QnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBl
bmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0R2VuZXJpY0N1ZUFQ
SUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZShib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGUoZW5hYmxlZCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVk
QnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCksIG51bGxwdHIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZShlbmFibGVkKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZSgiU2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihi
b29sIHNob3VsZFN3YXApCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRT
d2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hv
dWxkU3dhcCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0
aW5nKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdl
KCJTZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIsIHNob3Vs
ZFN3YXApOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNz
aW9uT25OZXh0TmF2aWdhdGlvbihib29sIHNob3VsZFN3YXApCiB7Ci0gICAgYXV0byYgaW5qZWN0
ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24i
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKHNob3VsZFN3YXApKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5leHRO
YXZpZ2F0aW9uIiwgc2hvdWxkU3dhcCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dV
bml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQpAQCAtNTU1LDkgKzUyNiw3
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVp
cmsoYm9vbCBuZWVkc1F1aXJrKQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5zRW5h
YmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFBsdWdpbnNFbmFi
bGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIo
aW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXku
Z2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRQbHVn
aW5zRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEphdmFTY3Jp
cHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQpAQCAtNTkxLDggKzU2MCw3IEBAIHZv
aWQgVGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzQWxsb3dMaXN0RW50cnkoSlNTdHJpbmdS
ZWYgc291cmNlT3JpZ2luLCBKU1N0CiBib29sIFRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUo
aW50IHBhZ2VJbmRleCkKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAg
cmV0dXJuIFdLQnVuZGxlSXNQYWdlQm94VmlzaWJsZShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwg
bWFpbkZyYW1lLCBwYWdlSW5kZXgpOworICAgIHJldHVybiBXS0J1bmRsZUlzUGFnZUJveFZpc2li
bGUoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIG1haW5GcmFtZSgpLCBwYWdlSW5kZXgpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiBlbGVtZW50LCBKU1N0cmluZ1JlZiB2YWx1ZSkKQEAgLTYwMCwxNiArNTY4LDE0
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyCiAgICAgaWYgKCFlbGVtZW50IHx8ICFKU1ZhbHVl
SXNPYmplY3QoY29udGV4dCwgZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0
YWluUHRyPFdLQnVuZGxlTm9kZUhhbmRsZVJlZj4gbm9kZUhhbmRsZSA9IGFkb3B0V0soV0tCdW5k
bGVOb2RlSGFuZGxlQ3JlYXRlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGVsZW1l
bnQpKSk7Ci0gICAgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9y
VXNlcihub2RlSGFuZGxlLmdldCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CisgICAgV0tCdW5kbGVO
b2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNlcihhZG9wdFdLKFdLQnVuZGxl
Tm9kZUhhbmRsZUNyZWF0ZShjb250ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihlbGVtZW50
KSkpLmdldCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
QXVkaW9SZXN1bHQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZGF0YSkKIHsKICAg
ICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAg
ICAvLyBGSVhNRSAoMTIzMDU4KTogVXNlIGEgSlNDIEFQSSB0byBnZXQgYnVmZmVyIGNvbnRlbnRz
IG9uY2Ugc3VjaCBpcyBleHBvc2VkLgotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYXVkaW9E
YXRhID0gYWRvcHRXSyhXS0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5KGluamVjdGVk
QnVuZGxlLmJ1bmRsZSgpLCBjb250ZXh0LCBkYXRhKSk7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuc2V0
QXVkaW9SZXN1bHQoYXVkaW9EYXRhLmdldCgpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5zZXRBdWRp
b1Jlc3VsdChhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoaW5qZWN0
ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKS5nZXQoKSk7CiAgICAgc2V0V2hhdFRv
RHVtcChXaGF0VG9EdW1wOjpBdWRpbyk7CiAgICAgc2V0RHVtcFBpeGVscyhmYWxzZSk7CiB9CkBA
IC02MjEsMzMgKzU4NywzMCBAQCB1bnNpZ25lZCBUZXN0UnVubmVyOjp3aW5kb3dDb3VudCgpCiAK
IHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQogewotICAgIFdLQnVuZGxl
Q2xlYXJIaXN0b3J5Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCkpOworICAgIFdLQnVuZGxlQ2xlYXJIaXN0b3J5Rm9yVGVzdGluZyhwYWdlKCkpOwog
fQogCi0vLyBPYmplY3QgQ3JlYXRpb24KLQotdm9pZCBUZXN0UnVubmVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgVGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0Nv
bnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmpl
Y3QsICJ0ZXN0UnVubmVyIiwgdGhpcywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9iYWxP
YmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGVzdFJ1bm5lciIsIHRoaXMpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IoKQogewotICAgIFdLQnVuZGxlSW5zcGVjdG9yU2hv
dyhXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdl
dEluc3BlY3RvcihwYWdlKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYkluc3Bl
Y3RvcigpCiB7Ci0gICAgV0tCdW5kbGVJbnNwZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNw
ZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAg
V0tCdW5kbGVJbnNwZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgpKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3RvcihKU1N0cmluZ1Jl
ZiBzY3JpcHQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9X
SyhzY3JpcHQpOwotICAgIFdLQnVuZGxlSW5zcGVjdG9yRXZhbHVhdGVTY3JpcHRGb3JUZXN0KFdL
QnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCkpLCBzY3JpcHRXSy5nZXQoKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0
ZVNjcmlwdEZvclRlc3QoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSksIHRvV0soc2Ny
aXB0KS5nZXQoKSk7CiB9CiAKLXR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBXS1JldGFp
blB0cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVmPiA+IFdvcmxkTWFwOwordXNpbmcgV29ybGRNYXAg
PSBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRS
ZWY+PjsKIHN0YXRpYyBXb3JsZE1hcCYgd29ybGRNYXAoKQogewogICAgIHN0YXRpYyBXb3JsZE1h
cCYgbWFwID0gKm5ldyBXb3JsZE1hcDsKQEAgLTY1NiwxMiArNjE5LDExIEBAIHN0YXRpYyBXb3Js
ZE1hcCYgd29ybGRNYXAoKQogCiB1bnNpZ25lZCBUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQo
V0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCkKIHsKLSAgICBXb3JsZE1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gd29ybGRNYXAoKS5lbmQoKTsKLSAgICBmb3IgKFdvcmxkTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IHdvcmxkTWFwKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGlmIChpdC0+dmFsdWUgPT0gd29ybGQpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmtleTsK
KyAgICAvLyBGSVhNRTogVGhpcyBpcyB0aGUgYW50aS1wYXR0ZXJuIG9mIGl0ZXJhdGluZyBhbiBl
bnRpcmUgbWFwLiBUeXBpY2FsbHkgd2UgdXNlIGEgcGFpciBvZiBtYXBzIG9yIGp1c3QgYSB2ZWN0
b3IgaW4gYSBjYXNlIGxpa2UgdGhpcy4KKyAgICBmb3IgKGF1dG8mIG1hcEVudHJ5IDogd29ybGRN
YXAoKSkgeworICAgICAgICBpZiAobWFwRW50cnkudmFsdWUgPT0gd29ybGQpCisgICAgICAgICAg
ICByZXR1cm4gbWFwRW50cnkua2V5OwogICAgIH0KLQogICAgIHJldHVybiAwOwogfQogCkBAIC02
ODEsNyArNjQzLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZChKU0NvbnRleHRSZWYgY29udGV4dCwgdW5zaWduZWQgd28KIAogICAgIFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUgPSBXS0J1bmRsZUZyYW1lRm9ySmF2YVNjcmlwdENvbnRleHQoY29udGV4dCk7
CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJh
bWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICAgICAg
ZnJhbWUgPSBtYWluRnJhbWUoKTsKIAogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQu
Z2V0KCkpOwogICAgIEpTRXZhbHVhdGVTY3JpcHQoanNDb250ZXh0LCBzY3JpcHQsIDAsIDAsIDAs
IDApOyAKQEAgLTY5Niw4ICs2NTgsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFBPU0lYTG9jYWxl
KEpTU3RyaW5nUmVmIGxvY2FsZSkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9u
KEpTU3RyaW5nUmVmIGRpcmVjdGlvbikKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCkpOwotICAgIHJldHVybiBXS0J1bmRsZUZyYW1lU2V0VGV4dERpcmVjdGlv
bihtYWluRnJhbWUsIHRvV0soZGlyZWN0aW9uKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxl
RnJhbWVTZXRUZXh0RGlyZWN0aW9uKG1haW5GcmFtZSgpLCB0b1dLKGRpcmVjdGlvbikuZ2V0KCkp
OwogfQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5k
bGluZ0JlZm9yZVVubG9hZChib29sIHNob3VsZFN0YXlPblBhZ2UpCkBAIC03MDcsMTcgKzY2OCwx
MiBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVm
b3JlVW5sb2FkKGJvb2wgc2hvdWxkU3RheU9uUAogCiBib29sIFRlc3RSdW5uZXI6OmRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpIGNvbnN0CiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxOYXZpZ2F0aW9uIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxs
cHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRv
cHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAg
cmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiRGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6Y2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5h
dmlnYXRpb24oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJDbGVhckRpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFBhZ2VWaXNpYmlsaXR5KEpTU3RyaW5nUmVmIHN0YXRlKQpAQCAtNzMwLDcgKzY4Niw3IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnNldEhpZGRlbihmYWxzZSk7CiB9CiAKLXR5cGVkZWYgV1RGOjpIYXNo
TWFwPHVuc2lnbmVkLCBKU1ZhbHVlUmVmPiBDYWxsYmFja01hcDsKK3VzaW5nIENhbGxiYWNrTWFw
ID0gV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBKU09iamVjdFJlZj47CiBzdGF0aWMgQ2FsbGJhY2tN
YXAmIGNhbGxiYWNrTWFwKCkKIHsKICAgICBzdGF0aWMgQ2FsbGJhY2tNYXAmIG1hcCA9ICpuZXcg
Q2FsbGJhY2tNYXA7CkBAIC03ODMsMzggKzczOSwzMiBAQCBzdGF0aWMgdm9pZCBjYWNoZVRlc3RS
dW5uZXJDYWxsYmFjayh1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAg
ICBpZiAoIWNhbGxiYWNrKQogICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBt
YWluSlNDb250ZXh0KCk7CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgY2FsbGJh
Y2spKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKGNhbGxiYWNrTWFwKCkuY29udGFpbnMoaW5k
ZXgpKSB7CiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1h
a2VTdHJpbmcoIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBjYWxs
YmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICIsIGluZGV4LCAiKVxuXG4iKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0KLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgY2Fs
bGJhY2spOwotICAgIGNhbGxiYWNrTWFwKCkuYWRkKGluZGV4LCBjYWxsYmFjayk7CisgICAgY2Fs
bGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGNhbGxiYWNrKSk7
CiB9CiAKIHN0YXRpYyB2b2lkIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgs
IHNpemVfdCBhcmd1bWVudENvdW50ID0gMCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSA9
IG51bGxwdHIpCiB7Ci0gICAgaWYgKCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkKKyAg
ICBhdXRvIGNhbGxiYWNrID0gY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KTsKKyAgICBpZiAoIWNh
bGxiYWNrKQogICAgICAgICByZXR1cm47Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNr
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGNhbGxiYWNrTWFwKCkudGFrZShpbmRleCksIDAp
OworICAgIGF1dG8gY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKICAgICBKU09iamVjdENhbGxB
c0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29u
dGV4dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgMCk7CiAgICAgSlNWYWx1ZVVucHJvdGVj
dChjb250ZXh0LCBjYWxsYmFjayk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJUZXN0UnVu
bmVyQ2FsbGJhY2tzKCkKIHsKLSAgICBmb3IgKGF1dG8mIGl0ZXIgOiBjYWxsYmFja01hcCgpKSB7
Ci0gICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAg
ICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250
ZXh0KG1haW5GcmFtZSk7Ci0gICAgICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHQsIGl0ZXIudmFsdWUsIDApOwotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0
KGNvbnRleHQsIGNhbGxiYWNrKTsKLSAgICB9Ci0KKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlND
b250ZXh0KCk7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNhbGxiYWNrTWFwKCkudmFsdWVzKCkp
CisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIHZhbHVlLCBudWxscHRyKSk7CiAgICAgY2FsbGJhY2tNYXAoKS5jbGVhcigpOwogfQogCkBA
IC04OTQsMjAgKzg0NCwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShK
U1N0cmluZ1JlZiBwcmVmZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSkKIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWNjZXB0KQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldEFsd2F5c0FjY2VwdENvb2tpZXMiKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoYWNj
ZXB0KSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldEFsd2F5c0Fj
Y2VwdENvb2tpZXMiLCBhY2NlcHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE9ubHlBY2Nl
cHRGaXJzdFBhcnR5Q29va2llcyhib29sIGFjY2VwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMiKSk7Ci0gICAgCi0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGFjY2VwdCkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0
T25seUFjY2VwdEZpcnN0UGFydHlDb29raWVzIiwgYWNjZXB0KTsKIH0KIAogZG91YmxlIFRlc3RS
dW5uZXI6OnByZWNpc2VUaW1lKCkKQEAgLTkyNCwxNSArODY2LDE1IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3VzZXJT
dHlsZVNoZWV0RW5hYmxlZCA9IGVuYWJsZWQ7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZW1wdHlVcmwgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7
Ci0gICAgV0tTdHJpbmdSZWYgbG9jYXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVldExv
Y2F0aW9uLmdldCgpIDogZW1wdHlVcmwuZ2V0KCk7CisgICAgYXV0byBlbXB0eVN0cmluZyA9IHRv
V0soIiIpOworICAgIGF1dG8gbG9jYXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVldExv
Y2F0aW9uLmdldCgpIDogZW1wdHlTdHJpbmcuZ2V0KCk7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgV0tCdW5kbGVTZXRVc2VyU3R5
bGVTaGVldExvY2F0aW9uKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5w
YWdlR3JvdXAoKSwgbG9jYXRpb24pOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgbG9jYXRpb24pCiB7Ci0gICAgbV91c2VyU3R5bGVT
aGVldExvY2F0aW9uID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhsb2NhdGlv
bikpOworICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IHRvV0sobG9jYXRpb24pOwogCiAg
ICAgaWYgKG1fdXNlclN0eWxlU2hlZXRFbmFibGVkKQogICAgICAgICBzZXRVc2VyU3R5bGVTaGVl
dEVuYWJsZWQodHJ1ZSk7CkBAIC05NDYsOCArODg4LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRT
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGVuYWJsZWQpCiB7Ci0gICAgYXV0
byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tC
dW5kbGVTZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoaW5qZWN0ZWRCdW5kbGUuYnVuZGxl
KCksIGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBlbmFibGVkKTsKKyAgICBXS0J1bmRs
ZVNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIHBhZ2UoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
U2VyaWFsaXplSFRUUExvYWRzKCkKQEAgLTk3MywzNiArOTE0LDI4IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2
b2lkIFRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1Jl
ZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9X
SyhvcmlnaW4pOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihpbmpl
Y3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG9yaWdp
bldLLmdldCgpLCB0cnVlKTsKKyAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Np
b24oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCksIHRvV0sob3Jp
Z2luKS5nZXQoKSwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNh
dGlvblBlcm1pc3Npb24oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVNldFdlYk5v
dGlmaWNhdGlvblBlcm1pc3Npb24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVu
ZGxlLnBhZ2UoKS0+cGFnZSgpLCBvcmlnaW5XSy5nZXQoKSwgZmFsc2UpOworICAgIFdLQnVuZGxl
U2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIHBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpLCBmYWxzZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKQogewotICAg
IGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAg
IFdLQnVuZGxlUmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoaW5qZWN0ZWRCdW5k
bGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRs
ZVJlbW92ZUFsbFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25zKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgcGFnZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzaW11bGF0
ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uKQogewogICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdL
QnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVj
dGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdL
QnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHVpbnQ2NF90
IG5vdGlmaWNhdGlvbklEID0gV0tCdW5kbGVHZXRXZWJOb3RpZmljYXRpb25JRChpbmplY3RlZEJ1
bmRsZS5idW5kbGUoKSwgY29udGV4dCwgbm90aWZpY2F0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRs
ZS5wb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7CisgICAg
aW5qZWN0ZWRCdW5kbGUucG9zdFNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soV0tCdW5kbGVH
ZXRXZWJOb3RpZmljYXRpb25JRChpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkpTQ29udGV4
dCgpLCBub3RpZmljYXRpb24pKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlv
blBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBi
ZSBkb25lIGJ5IGZyYW1lLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IGZy
YW1lLgogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24oZW5hYmxlZCk7CiB9CiAKQEAgLTEwMTEsMTAyICs5NDQsNTEgQEAgYm9vbCBUZXN0UnVu
bmVyOjppc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKQogICAgIHJldHVybiBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7CiB9CiAKLXZv
aWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRl
LCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIEpTVmFsdWVSZWYganNBbHRpdHVk
ZSwgSlNWYWx1ZVJlZiBqc0FsdGl0dWRlQWNjdXJhY3ksIEpTVmFsdWVSZWYganNIZWFkaW5nLCBK
U1ZhbHVlUmVmIGpzU3BlZWQsIEpTVmFsdWVSZWYganNGbG9vckxldmVsKQordm9pZCBUZXN0UnVu
bmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBs
b25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0
aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcs
IE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsK
LSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsK
LSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLQotICAg
IGJvb2wgcHJvdmlkZXNBbHRpdHVkZSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZSA9IDAu
OwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzQWx0aXR1ZGUpKSB7Ci0g
ICAgICAgIHByb3ZpZGVzQWx0aXR1ZGUgPSB0cnVlOwotICAgICAgICBhbHRpdHVkZSA9IEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBqc0FsdGl0dWRlLCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHBy
b3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSA9IGZhbHNlOwotICAgIGRvdWJsZSBhbHRpdHVkZUFjY3Vy
YWN5ID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNBbHRpdHVk
ZUFjY3VyYWN5KSkgewotICAgICAgICBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kgPSB0cnVlOwot
ICAgICAgICBhbHRpdHVkZUFjY3VyYWN5ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzQWx0
aXR1ZGVBY2N1cmFjeSwgMCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc0hlYWRpbmcgPSBm
YWxzZTsKLSAgICBkb3VibGUgaGVhZGluZyA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZp
bmVkKGNvbnRleHQsIGpzSGVhZGluZykpIHsKLSAgICAgICAgcHJvdmlkZXNIZWFkaW5nID0gdHJ1
ZTsKLSAgICAgICAgaGVhZGluZyA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc0hlYWRpbmcs
IDApOwotICAgIH0KLQotICAgIGJvb2wgcHJvdmlkZXNTcGVlZCA9IGZhbHNlOwotICAgIGRvdWJs
ZSBzcGVlZCA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzU3Bl
ZWQpKSB7Ci0gICAgICAgIHByb3ZpZGVzU3BlZWQgPSB0cnVlOwotICAgICAgICBzcGVlZCA9IEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBqc1NwZWVkLCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHBy
b3ZpZGVzRmxvb3JMZXZlbCA9IGZhbHNlOwotICAgIGRvdWJsZSBmbG9vckxldmVsID0gMC47Ci0g
ICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNGbG9vckxldmVsKSkgewotICAg
ICAgICBwcm92aWRlc0Zsb29yTGV2ZWwgPSB0cnVlOwotICAgICAgICBmbG9vckxldmVsID0gSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzRmxvb3JMZXZlbCwgMCk7Ci0gICAgfQotCi0gICAgaW5q
ZWN0ZWRCdW5kbGUuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVk
ZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJv
dmlkZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAg
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxh
dGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZSwgYWx0aXR1ZGVBY2N1cmFjeSwg
aGVhZGluZywgc3BlZWQsIGZsb29yTGV2ZWwpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdl
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlV0sgPSB0b1dLKG1lc3Nh
Z2UpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvblVuYXZhaWxhYmxlRXJyb3IobWVzc2FnZVdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVy
cm9yKHRvV0sobWVzc2FnZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJN
ZWRpYVBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3Vs
ZCBiZSBkb25lIGJ5IGZyYW1lLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5
IGZyYW1lLgogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJt
aXNzaW9uKGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVy
bWlzc2lvbigpCiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUu
CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbigpOwogfQogCiBi
b29sIFRlc3RSdW5uZXI6OmlzRG9pbmdNZWRpYUNhcHR1cmUoKSBjb25zdAogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIklzRG9pbmdNZWRpYUNhcHR1cmUiKSk7Ci0gICAgV0tUeXBlUmVmIHJl
dHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVy
biBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0
dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuKCJJc0RvaW5nTWVkaWFDYXB0dXJlIik7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4oYm9vbCBwZXJt
aXNzaW9uLCBKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdpbikKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9XSyhwYXJlbnRP
cmlnaW4pOwotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJz
aXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbihwZXJtaXNzaW9uLCBvcmlnaW5XSy5nZXQoKSwgcGFy
ZW50T3JpZ2luV0suZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRV
c2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbihwZXJtaXNzaW9uLCB0b1dLKG9y
aWdpbikuZ2V0KCksIHRvV0socGFyZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIFRl
c3RSdW5uZXI6OnVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4oSlNTdHJp
bmdSZWYgb3JpZ2luLCBKU1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pIGNvbnN0CiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5XSyA9IHRvV0socGFyZW50T3JpZ2luKTsK
LSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0Q291bnRGb3JPcmlnaW4ob3JpZ2luV0suZ2V0KCksIHBhcmVudE9yaWdpbldLLmdl
dCgpKTsKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4odG9XSyhvcmlnaW4pLmdldCgpLCB0b1dLKHBh
cmVudE9yaWdpbikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3Ry
aW5nUmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3Jp
Z2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVu
dE9yaWdpbldLID0gdG9XSyhwYXJlbnRPcmlnaW4pOwotICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5yZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4ob3Jp
Z2luV0suZ2V0KCksIHBhcmVudE9yaWdpbldLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2lu
KHRvV0sob3JpZ2luKS5nZXQoKSwgdG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsKIH0KIAogYm9v
bCBUZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQogewotICAgIFdLQnVuZGxl
RnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlRnJh
bWVDYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcobWFpbkZyYW1lKTsKKyAgICByZXR1cm4gV0tCdW5k
bGVGcmFtZUNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhtYWluRnJhbWUoKSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6cXVldWVCYWNrTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJCYWNrd2FyZCkK
QEAgLTExMjIsMjAgKzEwMDQsMTcgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUZvcndhcmROYXZp
Z2F0aW9uKHVuc2lnbmVkIGhvd0ZhckZvcndhcmQpCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9h
ZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCwgYm9vbCBzaG91bGRPcGVuRXh0
ZXJuYWxVUkxzKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBiYXNlVVJMV0sgPSBhZG9w
dFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3Rl
ZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSkpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJs
V0sgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTFdLLmdldCgpLCB0b1dU
RlN0cmluZyh0b1dLKHVybCkpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdXJsU3RyaW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxXSy5nZXQo
KSkpOwotCisgICAgYXV0byBiYXNlVVJMV0sgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJM
KG1haW5GcmFtZSgpKSk7CisgICAgYXV0byB1cmxXSyA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRo
QmFzZVVSTChiYXNlVVJMV0suZ2V0KCksIHRvV1RGU3RyaW5nKHVybCkudXRmOCgpLmRhdGEoKSkp
OworICAgIGF1dG8gdXJsU3RyaW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxXSy5n
ZXQoKSkpOwogICAgIGluamVjdGVkQnVuZGxlLnF1ZXVlTG9hZCh1cmxTdHJpbmdXSy5nZXQoKSwg
dG9XSyh0YXJnZXQpLmdldCgpLCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3Ry
aW5nUmVmIGJhc2VVUkwsIEpTU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBjb250ZW50V0sgPSB0b1dLKGNvbnRlbnQpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBiYXNlVVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJMKSA6
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPigpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB1bnJlYWNoYWJsZVVSTFdLID0gdW5yZWFjaGFibGVVUkwgPyB0b1dLKHVucmVhY2hhYmxlVVJM
KSA6IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPigpOwotCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29udGVudFdLLmdldCgpLCBiYXNlVVJMV0su
Z2V0KCksIHVucmVhY2hhYmxlVVJMV0suZ2V0KCkpOworICAgIGF1dG8gYmFzZVVSTFdLID0gYmFz
ZVVSTCA/IHRvV0soYmFzZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKKyAgICBh
dXRvIHVucmVhY2hhYmxlVVJMV0sgPSB1bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5yZWFjaGFibGVV
UkwpIDogV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnF1ZXVlTG9hZEhUTUxTdHJpbmcodG9XSyhjb250ZW50KS5nZXQoKSwgYmFzZVVS
TFdLLmdldCgpLCB1bnJlYWNoYWJsZVVSTFdLLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpxdWV1ZVJlbG9hZCgpCkBAIC0xMTQ1LDE2MyArMTAyNCwxMTkgQEAgdm9pZCBUZXN0UnVubmVy
OjpxdWV1ZVJlbG9hZCgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KEpT
U3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0
V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVl
TG9hZGluZ1NjcmlwdChzY3JpcHRXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnF1ZXVlTG9hZGluZ1NjcmlwdCh0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQoc2Ny
aXB0V0suZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZU5vbkxv
YWRpbmdTY3JpcHQodG9XSyhzY3JpcHQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZXMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRSZWplY3Rz
UHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0UmVqZWN0c1Byb3Rl
Y3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwgdmFsdWUp
OwogfQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VzKGJvb2wgaGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcykKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShoYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIGhhbmRsZXNBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZXMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZExv
Z0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCB2YWx1ZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIlNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiLCB2
YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFj
a3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRMb2dE
b3dubG9hZENhbGxiYWNrcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJTZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyIsIHZhbHVlKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKEpTU3RyaW5nUmVmIHVzZXJuYW1l
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh1c2VybmFtZSkpOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IlNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUiLCB0b1dLKHVzZXJuYW1lKS5nZXQoKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25QYXNzd29yZChKU1N0cmluZ1JlZiBw
YXNzd29yZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBdXRoZW50aWNhdGlvblBh
c3N3b3JkIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcocGFzc3dvcmQpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJTZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIiwgdG9XSyhwYXNzd29yZCkuZ2V0KCkp
OwogfQogCiBib29sIFRlc3RSdW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQoKSBjb25z
dAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQi
KSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5E
YXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJTZWN1cmVFdmVudElucHV0SXNF
bmFibGVkIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wg
c2hvdWxkQmxvY2spCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QmxvY2tBbGxQbHVn
aW5zIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGRCbG9jaykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNl
dEJsb2NrQWxsUGx1Z2lucyIsIHNob3VsZEJsb2NrKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKEpTU3RyaW5nUmVmIG1vZGUpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0UGx1Z2luU3VwcG9ydGVkTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKG1vZGUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIiwg
dG9XSyhtb2RlKS5nZXQoKSk7CiB9CiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6ZmFpbE5leHRO
ZXdDb2RlQmxvY2soKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNj
cmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0NvZGVC
bG9jayhjb250ZXh0KTsKKyAgICByZXR1cm4gSlNDOjpmYWlsTmV4dE5ld0NvZGVCbG9jayhtYWlu
SlNDb250ZXh0KCkpOwogfQogCi1KU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29t
cGlsZXMoSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbikKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bnVt
YmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIGZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1
cm4gSlNDOjpudW1iZXJPZkRGR0NvbXBpbGVzKGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKKyAgICBy
ZXR1cm4gSlNDOjpudW1iZXJPZkRGR0NvbXBpbGVzKG1haW5KU0NvbnRleHQoKSwgZnVuY3Rpb24p
OwogfQogCi1KU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1
ZVJlZiB0aGVGdW5jdGlvbikKK0pTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5j
dGlvbihKU1ZhbHVlUmVmIGZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICByZXR1cm4gSlNDOjpzZXRO
ZXZlcklubGluZShjb250ZXh0LCB0aGVGdW5jdGlvbik7CisgICAgcmV0dXJuIEpTQzo6c2V0TmV2
ZXJJbmxpbmUobWFpbkpTQ29udGV4dCgpLCBmdW5jdGlvbik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoYm9vbCB2YWx1ZSkK
IHsKICAgICBtX3Nob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5ID0gdmFsdWU7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGlj
eUFmdGVyRGVsYXkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
U2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkiLCB2YWx1ZSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5
KGJvb2wgdmFsdWUpCiB7CiAgICAgbV9zaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVs
YXkgPSB2YWx1ZTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGREZWNpZGVSZXNw
b25zZVBvbGljeUFmdGVyRGVsYXkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5IiwgdmFsdWUp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoYm9v
bCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXROYXZpZ2F0aW9uR2VzdHVy
ZXNFbmFibGVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNl
dE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRJZ25vcmVzVmlld3BvcnRTY2Fs
ZUxpbWl0cyIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGREb3dubG9h
ZFVuZGlzcGxheWFibGVNSU1FVHlwZXMoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkRG93bmxvYWRVbmRp
c3BsYXlhYmxlTUlNRVR5cGVzIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNo
b3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoYm9vbCB2YWx1ZSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9u
QW5kTW90aW9uQWNjZXNzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIlNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MiLCB2YWx1
ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzIikpOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJUZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnRlcm1pbmF0ZVNlcnZpY2VX
b3JrZXJzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXJtaW5hdGVTZXJ2aWNlV29y
a2VycyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZSgiVGVybWluYXRlU2VydmljZVdvcmtlcnMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRV
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mi
LCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBuZXh0VUlTY3JpcHRDYWxsYmFja0lEKCkK
QEAgLTEzMTQsOTcgKzExNDksNDggQEAgdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdChKU1N0
cmluZ1JlZiBzY3JpcHQsIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgdW5zaWduZWQgY2Fs
bGJhY2tJRCA9IG5leHRVSVNjcmlwdENhbGxiYWNrSUQoKTsKICAgICBjYWNoZVRlc3RSdW5uZXJD
YWxsYmFjayhjYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJSdW5VSVByb2Nlc3NTY3JpcHQiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiB0ZXN0RGljdGlvbmFyeSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyhzY3JpcHQpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxs
YmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJh
Y2tJRCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gY2FsbGJhY2tJRFZhbHVlID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjYWxsYmFja0lEKSk7Ci0KLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBzY3JpcHRLZXkuZ2V0KCksIHNjcmlwdFZhbHVl
LmdldCgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBj
YWxsYmFja0lES2V5LmdldCgpLCBjYWxsYmFja0lEVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgdGVzdERpY3Rpb25hcnkuZ2V0KCkpOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiUnVuVUlQcm9jZXNzU2NyaXB0IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAg
ICAgICAgeyAiU2NyaXB0IiwgdG9XSyhzY3JpcHQpIH0sCisgICAgICAgIHsgIkNhbGxiYWNrSUQi
LCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQpKS5nZXQoKSB9LAorICAgIH0pLmdl
dCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpydW5VSVNjcmlwdEltbWVkaWF0ZWx5KEpTU3Ry
aW5nUmVmIHNjcmlwdCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICB1bnNpZ25lZCBjYWxs
YmFja0lEID0gbmV4dFVJU2NyaXB0Q2FsbGJhY2tJRCgpOwogICAgIGNhY2hlVGVzdFJ1bm5lckNh
bGxiYWNrKGNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlJ1blVJUHJvY2Vzc1NjcmlwdEltbWVkaWF0ZWx5IikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gdGVzdERpY3Rpb25hcnkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRWYWx1ZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoc2NyaXB0KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkNhbGxiYWNrSUQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGNhbGxiYWNr
SURWYWx1ZSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpOwotCi0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbSh0ZXN0RGljdGlvbmFyeS5nZXQoKSwgc2NyaXB0S2V5LmdldCgpLCBz
Y3JpcHRWYWx1ZS5nZXQoKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSh0ZXN0RGljdGlvbmFy
eS5nZXQoKSwgY2FsbGJhY2tJREtleS5nZXQoKSwgY2FsbGJhY2tJRFZhbHVlLmdldCgpKTsKLQot
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHRlc3REaWN0aW9uYXJ5LmdldCgpKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJ1blVJUHJvY2Vzc1NjcmlwdEltbWVkaWF0ZWx5IiwgY3Jl
YXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU2NyaXB0IiwgdG9XSyhzY3JpcHQpIH0sCisg
ICAgICAgIHsgIkNhbGxiYWNrSUQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQp
KS5nZXQoKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpydW5VSVNj
cmlwdENhbGxiYWNrKHVuc2lnbmVkIGNhbGxiYWNrSUQsIEpTU3RyaW5nUmVmIHJlc3VsdCkKIHsK
LSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5G
cmFtZSk7Ci0KLSAgICBKU1ZhbHVlUmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmco
Y29udGV4dCwgcmVzdWx0KTsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdFZhbHVlID0gSlNWYWx1ZU1h
a2VTdHJpbmcobWFpbkpTQ29udGV4dCgpLCByZXN1bHQpOwogICAgIGNhbGxUZXN0UnVubmVyQ2Fs
bGJhY2soY2FsbGJhY2tJRCwgMSwgJnJlc3VsdFZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRBbGxvd2VkTWVudUFjdGlvbnMoSlNWYWx1ZVJlZiBhY3Rpb25zKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldEFsbG93ZWRNZW51QWN0aW9ucyIpKTsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVBcnJheVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5
Q3JlYXRlKCkpOwotCi0gICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpOwotICAgIGF1dG8gbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKHBhZ2UpOwotICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvIG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIGNv
bnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAgICAgYXV0byBhY3Rpb25zQXJyYXkgPSBKU1ZhbHVl
VG9PYmplY3QoY29udGV4dCwgYWN0aW9ucywgbnVsbHB0cik7Ci0gICAgYXV0byBsZW5ndGhWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgYWN0aW9uc0FycmF5LCBsZW5ndGhQcm9w
ZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRl
eHQsIGxlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsZW5ndGggPSBz
dGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwg
MCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
YXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFjdGlvbnNB
cnJheSwgaSwgMCk7Ci0gICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVl
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gYWN0aW9uTmFtZSA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFjdGlvbiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcoYWN0aW9uTmFtZS5nZXQoKSkpOwotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbSht
ZXNzYWdlQm9keS5nZXQoKSwgYWN0aW9uLmdldCgpKTsKKyAgICBhdXRvIGxlbmd0aCA9IGFycmF5
TGVuZ3RoKGNvbnRleHQsIGFjdGlvbnNBcnJheSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBhY3Rpb25zQXJyYXksIGksIG51bGxwdHIpOworICAgICAgICBX
S0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgdG9XS1N0cmluZyhjb250ZXh0LCB2
YWx1ZSkuZ2V0KCkpOwogICAgIH0KLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2Us
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJTZXRBbGxvd2VkTWVudUFjdGlvbnMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6aW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24oSlNTdHJpbmdSZWYgbmFtZSwg
Ym9vbCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAg
IGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKEN1c3RvbU1lbnVBY3Rpb25DYWxsYmFja0lELCBjYWxs
YmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnN0YWxsQ3VzdG9tTWVudUFjdGlv
biIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBuYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygibmFtZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZVZhbHVl
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhuYW1lKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgbmFtZUtleS5nZXQoKSwgbmFtZVZhbHVl
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkaXNtaXNzZXNBdXRvbWF0
aWNhbGx5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGlzbWlz
c2VzQXV0b21hdGljYWxseSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGRpc21p
c3Nlc0F1dG9tYXRpY2FsbHlWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRpc21pc3Nl
c0F1dG9tYXRpY2FsbHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5Lmdl
dCgpLCBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5LmdldCgpLCBkaXNtaXNzZXNBdXRvbWF0aWNh
bGx5VmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiSW5zdGFsbEN1c3RvbU1lbnVB
Y3Rpb24iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJuYW1lIiwgdG9XSyhuYW1l
KSB9LAorICAgICAgICB7ICJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IiwgYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoZGlzbWlzc2VzQXV0b21hdGljYWxseSkpLmdldCgpIH0sCisgICAgfSkuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxEaWRCZWdpblN3aXBlQ2FsbGJhY2soSlNW
YWx1ZVJlZiBjYWxsYmFjaykKQEAgLTE0NDksNTggKzEyMzUsMzAgQEAgdm9pZCBUZXN0UnVubmVy
OjpjYWxsRGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrKCkKIAogdm9pZCBUZXN0UnVubmVy
OjpjbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKEpTU3RyaW5nUmVmIGRvbWFpbikKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoZG9tYWluKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJDbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluIiwgdG9XSyhkb21haW4pLmdl
dCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpkb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJ
bkRhdGFiYXNlKHVuc2lnbmVkIGRvbWFpbklEKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZh
bHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkRvbWFpbklEIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoZG9tYWluSUQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5
cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgp
KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAg
ICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0g
dmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvZXNT
dGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJh
d0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdL
VHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRh
dGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkRvZXNTdGF0aXN0aWNzRG9tYWlu
SURFeGlzdEluRGF0YWJhc2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJEb21h
aW5JRCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZG9tYWluSUQpKSB9CisgICAgfSkuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgdmFsdWUp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0VuYWJsZWQiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJT
ZXRTdGF0aXN0aWNzRW5hYmxlZCIsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0
YXRpc3RpY3NFcGhlbWVyYWwoKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKSk7Ci0g
ICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsK
LSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlE
KCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9u
b3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUs
IEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2Fs
bGJhY2soU2V0U3RhdGlzdGljc0RlYnVnTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVy
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiLCB2YWx1
ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVD
YWxsYmFjaygpCkBAIC0xNTExLDEwICsxMjY5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0
aWNzQ2FsbERpZFNldERlYnVnTW9kZUNhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKEpTU3RyaW5nUmVmIGhvc3ROYW1l
LCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNh
bGxiYWNrKFNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNhbGxiYWNr
SUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2VGb3JEZWJ1Z01vZGUiLCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZUNh
bGxiYWNrKCkKQEAgLTE1MjYsMjcgKzEyODEsMTAgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzTGFzdFNlZW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzLCBKU1YK
IHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzTGFzdFNlZW5DYWxs
YmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tU
eXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlz
W2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJh
d0tleXMuc2l6ZSgpKSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIsIGNyZWF0
ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwK
KyAgICAgICAgeyAiVmFsdWUiLCB0b1dLKHNlY29uZHMpIH0sCisgICAgfSkuZ2V0KCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0TGFzdFNlZW5DYWxsYmFjaygp
CkBAIC0xNTU4LDQ5ICsxMjk2LDE4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01l
cmdlU3RhdGlzdGljKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiB0CiB7CiAgICAg
Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljQ2FsbGJh
Y2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVz
OwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjEiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFt
ZURvbWFpbjEpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVEb21haW4yIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVEb21haW4yKSkpOwot
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
TGFzdFNlZW4iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShs
YXN0U2VlbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYWRVc2VySW50ZXJhY3Rpb24pKSk7Ci0KLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50
VXNlckludGVyYWN0aW9uIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVD
cmVhdGUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzR3JhbmRmYXRoZXJlZCIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVy
ZWQpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJJc1ByZXZhbGVudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzVmVyeVByZXZhbGVudCIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ZlcnlQcmV2YWxlbnQpKSk7Ci0K
LSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJE
YXRhUmVjb3Jkc1JlbW92ZWQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShkYXRhUmVjb3Jkc1JlbW92ZWQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+
IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2
YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7
ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3
VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJh
d0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdL
QnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJT
ZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAg
ICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lRG9t
YWluMSIsIHRvV0sodG9wRnJhbWVEb21haW4xKSB9LAorICAgICAgICB7ICJUb3BGcmFtZURvbWFp
bjIiLCB0b1dLKHRvcEZyYW1lRG9tYWluMikgfSwKKyAgICAgICAgeyAiTGFzdFNlZW4iLCBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKGxhc3RTZWVuKSkgfSwKKyAgICAgICAgeyAiSGFkVXNlckludGVy
YWN0aW9uIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNlckludGVyYWN0aW9uKSkgfSwK
KyAgICAgICAgeyAiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tEb3VibGVD
cmVhdGUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzR3JhbmRm
YXRoZXJlZCIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkpIH0sCisg
ICAgICAgIHsgIklzUHJldmFsZW50IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxl
bnQpKSB9LAorICAgICAgICB7ICJJc1ZlcnlQcmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShpc1ZlcnlQcmV2YWxlbnQpKSB9LAorICAgICAgICB7ICJEYXRhUmVjb3Jkc1JlbW92ZWQi
LCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpIH0sCisgICAgfSku
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0TWVyZ2VT
dGF0aXN0aWNDYWxsYmFjaygpCkBAIC0xNjEyLDMxICsxMzE5LDEyIEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJv
b2wgaGFkVXNlCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0V4
cGlyZWRTdGF0aXN0aWNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFkVXNlcklu
dGVyYWN0aW9uIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGhhZFVzZXJJbnRlcmFjdGlvbikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJl
bW92YWwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNT
Y2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCkpKTsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzUHJldmFsZW50IikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkp
OwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0g
ICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNb
aV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0
KCk7Ci0gICAgfQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NFeHBpcmVk
U3RhdGlzdGljIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVz
LmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0
aXN0aWMiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0so
aG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhhZFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGhhZFVzZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIklzU2NoZWR1
bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShp
c1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKSkgfSwKKyAgICAgICAgeyAiSXNQ
cmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpIH0KKyAgICB9
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRFeHBp
cmVkU3RhdGlzdGljQ2FsbGJhY2soKQpAQCAtMTY0OCwyOSArMTMzNiwxMCBAQCB2b2lkIFRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFt
ZSwgYm9vbCB2YWx1ZQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAg
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3Rv
cjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7
Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9
IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsK
LSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1ByZXZh
bGVudFJlc291cmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFs
dWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIs
IHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
dGF0aXN0aWNzQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQpAQCAtMTY4Miwy
OSArMTM1MSwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50
UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdgogewogICAgIGNhY2hlVGVzdFJ1
bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFja0lE
LCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8
V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwot
ICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZh
bHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAg
cmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGlj
dGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5z
aXplKCkpKTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
KTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIs
IGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFt
ZSkgfSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkp
IH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxs
RGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQpAQCAtMTcxNCwxMzggKzEzNjQs
NTEgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZUNhbGxiYWNrKCkKICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImR1bXBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyIpOwogfQogCiBib29sIFRlc3RS
dW5uZXI6OmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1l
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYg
cmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZSIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRp
c3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJu
RGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NF
UlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
IHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2Ui
LCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihKU1N0cmluZ1JlZiBzdWJyZXNvdXJjZUhv
c3QsIEpTU3RyaW5nUmVmIHRvcEZyYW1lSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2
YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3VicmVzb3VyY2VIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoc3VicmVzb3VyY2VIb3N0KSkpOwotICAgIAot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRv
cEZyYW1lSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aEpTU3RyaW5nKHRvcEZyYW1lSG9zdCkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdS
ZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVl
cyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAg
ICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
ciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCks
IHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJl
dHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFu
R2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5n
ZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9v
bGVhbigiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIsIGNyZWF0ZVdL
RGljdGlvbmFyeSh7CisgICAgICAgIHsgIlN1YnJlc291cmNlSG9zdCIsIHRvV0soc3VicmVzb3Vy
Y2VIb3N0KSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3QiLCB0b1dLKHRvcEZyYW1lSG9zdCkg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVn
aXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihKU1N0cmluZ1JlZiBzdWJGcmFtZUhvc3QsIEpTU3RyaW5n
UmVmIHRvcEZyYW1lSG9zdCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAg
ICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJG
cmFtZUhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyhzdWJGcmFtZUhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVI
b3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUo
KSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJh
d0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNb
aV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNz
UmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25h
cnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5k
YXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVm
IHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0g
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlciIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlN1YkZyYW1lSG9z
dCIsIHRvV0soc3ViRnJhbWVIb3N0KSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3QiLCB0b1dL
KHRvcEZyYW1lSG9zdCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6
aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhKU1N0cmluZ1JlZiBob3N0UmVk
aXJlY3RlZEZyb20sIEpTU3RyaW5nUmVmIGhvc3RSZWRpcmVjdGVkVG8pCiB7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RSZWRpcmVj
dGVkRnJvbSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0UmVkaXJlY3RlZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdFJlZGlyZWN0ZWRUbykpKTsK
LSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAg
IFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ld
ID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgp
OwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NSZWdp
c3RlcmVkQXNSZWRpcmVjdGluZ1RvIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEo
KSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0
dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBB
U1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFn
ZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdFJlZGlyZWN0ZWRG
cm9tIiwgdG9XSyhob3N0UmVkaXJlY3RlZEZyb20pIH0sCisgICAgICAgIHsgIkhvc3RSZWRpcmVj
dGVkVG8iLCB0b1dLKGhvc3RSZWRpcmVjdGVkVG8pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oSlNTdHJp
bmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbkNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVl
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkp
OwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tU
eXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAg
IHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlz
W2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NIYXNIYWRVc2Vy
SW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1
ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzSGFz
SGFkVXNlckludGVyYWN0aW9uIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9z
dE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb25DYWxsYmFjaygp
CkBAIC0xODU1LDI2MSArMTQxOCw5NSBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxs
RGlkU2V0SGFzSGFkVXNlckludGVyYWN0aW9uQ2FsbGJhY2soKQogCiBib29sIFRlc3RSdW5uZXI6
OmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJh
Y3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJl
ZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwot
ICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbiIpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc09ubHlJbkRhdGFi
YXNlT25jZShKU1N0cmluZ1JlZiBzdWJIb3N0LCBKU1N0cmluZ1JlZiB0b3BIb3N0KQogewotICAg
IAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Ykhvc3QiKSkpOwotICAgIHZhbHVl
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJIb3N0KSkpOwot
ICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlRvcEhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyh0b3BIb3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4g
cmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZh
bHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdW
YWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgYXV0byBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc09u
bHlJbkRhdGFiYXNlT25jZSIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rp
Y3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMu
c2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEp
ID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUo
YWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNT
dGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAg
ICAgeyAiU3ViSG9zdCIsIHRvV0soc3ViSG9zdCkgfSwKKyAgICAgICAgeyAiVG9wSG9zdCIsIHRv
V0sodG9wSG9zdCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUp
CiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5h
bWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUodmFsdWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlz
OwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShr
ZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
cmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVl
c1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3Rh
dGlzdGljc0dyYW5kZmF0aGVyZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiLCBjcmVh
dGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0s
CisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAor
ICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VJVFBEYXRhYmFzZShi
b29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZUlUUERhdGFiYXNl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZSgiU2V0VXNlSVRQRGF0YWJhc2UiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1
bm5lcjo6aXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0
YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQo
V0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJl
dHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
cmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIiwgdG9XSyhob3N0
TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIHRv
cEZyYW1lSG9zdE5hbWUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4g
a2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhv
c3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1lSG9z
dE5hbWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6
ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0g
ICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2
YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3Jl
YXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhv
c3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVIb3N0TmFtZSIs
IHRvV0sodG9wRnJhbWVIb3N0TmFtZSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihKU1N0
cmluZ1JlZiBob3N0TmFtZSwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSkKIHsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAg
ICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJUb3BGcmFtZUhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0TmFtZSkpKTsKLSAgICAKLSAgICBWZWN0
b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVS
ZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0u
Z2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0g
ICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZU9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJh
d1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lu
IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3RO
YW1lKSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3ROYW1lIiwgdG9XSyh0b3BGcmFtZUhvc3RO
YW1lKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0
cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRUbykKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2
YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0
ZWRUbyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpT
U3RyaW5nKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmlu
Z1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFs
dWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAg
ICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8iLCBjcmVhdGVXS0RpY3Rp
b25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAg
IHsgIkhvc3ROYW1lUmVkaXJlY3RlZFRvIiwgdG9XSyhob3N0TmFtZVJlZGlyZWN0ZWRUbykgfSwK
KyAgICB9KS5nZXQoKSk7CiB9CiAKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5n
UmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFs
dWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVk
RnJvbSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpT
U3RyaW5nKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3Ry
aW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdW
YWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwot
ICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5k
YXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNz
YWdlKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20iLCBjcmVhdGVX
S0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisg
ICAgICAgIHsgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3Rl
ZEZyb20pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3Ry
aW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZh
bHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3Rl
ZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkVG8pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5n
UmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1
ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAg
ICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8i
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCBy
YXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0
U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7
CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSG9z
dE5hbWVSZWRpcmVjdGVkVG8iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSB9LAorICAgIH0p
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1l
UmVkaXJlY3RlZEZyb20pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4g
a2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhv
c3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKSk7Ci0g
ICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RO
YW1lUmVkaXJlY3RlZEZyb20pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdL
ZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVz
LnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdW
YWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rp
Y3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMu
c2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0
aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAg
ICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1l
UmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pIH0sCisgICAgfSku
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2Fk
V2l0aExpbmtEZWNvcmF0aW9uKEpTU3RyaW5nUmVmIGZyb21Ib3N0LCBKU1N0cmluZ1JlZiB0b0hv
c3QpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZyb21Ib3N0IikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoZnJv
bUhvc3QpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG9Ib3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9Ib3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0
cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3
VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
a2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsK
LSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5r
RGVjb3JhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVl
cy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkZyb21Ib3N0IiwgdG9XSyhmcm9tSG9zdCkg
fSwKKyAgICAgICAgeyAiVG9Ib3N0IiwgdG9XSyh0b0hvc3QpIH0sCisgICAgfSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRp
c3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91
YmxlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24iLCBzZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0
YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxs
YmFjaykKQEAgLTIxNDcsMTIgKzE1NDQsOSBAQCB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxTdGF0
aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKICAgICAK
IHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVuc2ln
bmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wUHJldmFsZW50UmVz
b3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLCB1bnNpZ25l
ZCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2Vy
SW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhV
SSwgdW5zaWduZWQgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJLCB1bnNpZ25lZCB0b3AzTWVk
aWFuU3ViUmVzb3VyY2VXaXRob3V0VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVj
dHNXaXRob3V0VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0
VUkpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAg
ICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChtYWluRnJhbWUpOwotICAgIAogICAgIFN0cmluZyBzdHJpbmcgPSBtYWtlU3RyaW5nKCJ7IFwi
bnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNcIiA6ICIsIG51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzLCAiLCBcIm51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblwi
IDogIiwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCAiLCBc
Im51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvblwiIDogIiwg
bnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAiLCBcInRv
cFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFj
dGlvblwiIDogIiwgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uLCAiLCBcIm1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblBy
ZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbWVkaWFuRGF5c1NpbmNl
VXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uLCAiLCBc
InRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSVwiIDogIiwgdG9wM051bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVJLCAiLCBcInRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRV
SVwiIDogIiwgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJLCAiLCBcInRvcDNNZWRpYW5TdWJS
ZXNvdXJjZVdpdGhvdXRVSVwiIDogIiwgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJLCAi
LCBcInRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUlcIiA6ICIsIHRvcDNNZWRpYW5V
bmlxdWVSZWRpcmVjdHNXaXRob3V0VUksICIsIFwidG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3Zl
ZFdpdGhvdXRVSVwiIDogIiwgdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSwg
IiB9Iik7CiAgICAgCi0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09O
U3RyaW5nKGNvbnRleHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmlu
Zy51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1
ZU1ha2VGcm9tSlNPTlN0cmluZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5nKHN0cmlu
Zy51dGY4KCkuZGF0YSgpKS5nZXQoKSk7CiAKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0
YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFja0lELCAxLCAmcmVzdWx0KTsKIH0KQEAgLTIx
NjQsMTYgKzE1NTgsMTQgQEAgYm9vbCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzTm90aWZ5T2JzZXJ2
ZXIoKQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERh
dGFSZWNvcmRzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzUHJvY2Vz
c1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMiKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzdGF0aXN0aWNzVXBkYXRlQ29va2llQmxvY2tpbmcoSlNWYWx1ZVJlZiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNz
RGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdENhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsK
IAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2lu
ZyIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1l
c3NhZ2UoIlN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyIpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdENhbGxiYWNrKCkK
QEAgLTIxODMsMTM1ICsxNTc1LDgzIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxE
aWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0Q2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NTdWJtaXRUZWxlbWV0cnkoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0
YXRpc3RpY3NTdWJtaXRUZWxlbWV0cnkiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0
YXRpc3RpY3NTdWJtaXRUZWxlbWV0cnkiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc0lzUnVubmluZ1Rlc3QoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdGF0aXN0aWNzU2V0SXNSdW5uaW5nVGVzdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdU
ZXN0IiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRD
bGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5S
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFs
KGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3Rp
Y3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNv
bmRzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNz
TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIiwgc2Vjb25kcyk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vj
b25kcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJpbmdUaW1lIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSIsIHNlY29uZHMp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmll
cyh1bnNpZ25lZCBlbnRyaWVzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1heFN0
YXRpc3RpY3NFbnRyaWVzIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGVudHJpZXMpKTsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIlNldE1heFN0YXRpc3RpY3NFbnRyaWVzIiwgZW50cmllcyk7CiB9
CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8o
dW5zaWduZWQgZW50cmllcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQcnVuZUVu
dHJpZXNEb3duVG8iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZW50cmllcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiU2V0UHJ1bmVFbnRyaWVzRG93blRvIiwgZW50cmllcyk7CiB9CiAgICAg
CiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0
b3JlKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2so
U3RhdGlzdGljc0RpZENsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lELCBj
YWxsYmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnRTdG9yZSIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudFN0b3JlIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQgaG91cnMs
IEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3Rh
dGlzdGljc0RpZENsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVDYWxsYmFja0lELCBjYWxs
YmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9y
eUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3VycyIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShob3Vycykp
OwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdUUjo6
cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9k
aWZpZWRTaW5jZUhvdXJzIiwgaG91cnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3Rp
Y3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsK
ICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJUaHJvdWdoV2Vi
c2l0ZURhdGFSZW1vdmFsQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7
Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdl
KCJTdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0KEpTU3RyaW5nUmVmIGhv
c3ROYW1lLCBib29sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMpCiB7Ci0gICAgVmVjdG9yPFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBl
UmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluY2x1ZGVIdHRwT25seUNv
b2tpZXMiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaW5j
bHVkZUh0dHBPbmx5Q29va2llcykpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5
czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUo
a2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3
S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tp
XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRGVs
ZXRlQ29va2llc0Zvckhvc3QiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCBy
YXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0IiwgY3JlYXRlV0tE
aWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAg
ICAgICB7ICJJbmNsdWRlSHR0cE9ubHlDb29raWVzIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
aW5jbHVkZUh0dHBPbmx5Q29va2llcykpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29sIFRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZShKU1N0cmluZ1JlZiBob3N0TmFt
ZSkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlIikpOwotICAgIGF1dG8gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7
Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAm
cmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJu
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNz
SGFzTG9jYWxTdG9yYWdlIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcChkb3VibGUgc2Vjb25kcykKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJs
ZUNyZWF0ZShzZWNvbmRzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJT
ZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiLCBzZWNvbmRzKTsKIH0KIAogYm9vbCBUZXN0UnVu
bmVyOjpoYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQog
ewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJIYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIikpOwotICAgIGF1dG8gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0g
ICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0
dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSGFzU3RhdGlzdGljc0lz
b2xhdGVkU2Vzc2lvbiIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoYm9vbCB2YWx1ZSwgSlNW
YWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzMjAsOSArMTY2MCw3IEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKGJvb2wgdmFsdWUs
IEpTVmFsdWVSZWYgY29tCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBjYWNoZVRlc3RSdW5u
ZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJDYWxsYmFj
a0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3Rh
dGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9v
bGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwot
ICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNz
YWdlKCJTZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiLCB2YWx1ZSk7CiAgICAg
bV9oYXNTZXREb3duZ3JhZGVSZWZlcnJlckNhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjMzOCwx
MSArMTY3NiwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1Ro
aXJkUGFydHlDb29raWVzKGJvb2wgdmFsdWUsIEpTVmFsdWVSZQogICAgICAgICByZXR1cm47CiAK
ICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0U2hvdWxkQmxvY2tU
aGlyZFBhcnR5Q29va2llc0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2ll
cyIpKTsKKyAgICBhdXRvIG1lc3NhZ2VOYW1lID0gIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1Ro
aXJkUGFydHlDb29raWVzIjsKICAgICBpZiAob25seU9uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0
aW9uKQotICAgICAgICBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tC
dW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgICAgIG1lc3NhZ2VOYW1l
ID0gIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dpdGhv
dXRVc2VySW50ZXJhY3Rpb24iOworICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2VOYW1lLCB2YWx1ZSk7
CiAgICAgbV9oYXNTZXRCbG9ja1RoaXJkUGFydHlDb29raWVzQ2FsbGJhY2sgPSB0cnVlOwogfQog
CkBAIC0yMzU4LDkgKzE2OTUsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NGaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZShib29sIHZhbHVlLCBKU1ZhbAogICAgICAgICBy
ZXR1cm47CiAKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0Rmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxl
cik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxl
UG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0
aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiLCB2YWx1ZSk7CiAgICAgbV9o
YXNTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUNhbGxiYWNrID0gdHJ1ZTsKIH0K
IApAQCAtMjM4MywxMCArMTcxOCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxD
bGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWxDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyhKU1N0cmluZ1JlZiBob3N0TmFt
ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJD
YWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNDYWxsYmFja0lE
LCBjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldFRvU2FtZVNpdGVTdHJp
Y3RDb29raWVzIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRUb1NhbWVTaXRl
U3RyaWN0Q29va2llcyIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzQ2FsbGJhY2so
KQpAQCAtMjM5OCwyNyArMTczMCwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxs
RGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKEpTU3RyaW5nUmVmIGZpcnN0
UGFydHlVUkxTdHJpbmcsIEpTU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVlUmVmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3Rp
Y3NEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhh
bmRsZXIpOwotCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZpcnN0UGFydHlV
UkwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhmaXJzdFBhcnR5VVJMU3RyaW5nKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNOQU1FIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoY25hbWVVUkxTdHJpbmcp
KSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsK
LSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJh
d0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNb
aV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTZXRGaXJzdFBhcnR5SG9zdENOQU1F
RG9tYWluIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNy
ZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsK
LSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXVFI6OnBv
c3RNZXNzYWdlKCJTdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIsIGNyZWF0
ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkZpcnN0UGFydHlVUkwiLCB0b1dLKGZpcnN0UGFy
dHlVUkxTdHJpbmcpIH0sCisgICAgICAgIHsgIkNOQU1FIiwgdG9XSyhjbmFtZVVSTFN0cmluZykg
fSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxE
aWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQyOSwxMCArMTc0
NCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRGaXJzdFBhcnR5SG9z
dENOQU1FRG9tYWluQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhp
cmRQYXJ0eUNOQU1FRG9tYWluKEpTU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVlUmVm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRp
c3RpY3NEaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW5DYWxsYmFja0lELCBjb21wbGV0aW9uSGFu
ZGxlcik7Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKTsKLSAg
ICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhj
bmFtZVVSTFN0cmluZykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIHBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
IiwgdG9XSyhjbmFtZVVSTFN0cmluZykuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQ0
Myw5ICsxNzU1LDggQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRoaXJk
UGFydHlDTkFNRURvbWFpbkNhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jl
c2V0VG9Db25zaXN0ZW50U3RhdGUoSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkUmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSIpKTsKLSAgICBXS0J1
bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworCisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlz
dGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2FsbERpZFJlc2V0VG9Db25zaXN0ZW50U3RhdGVDYWxsYmFjaygpCkBAIC0yNDg2LDk1
ICsxNzk3LDQ2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZ0NhbGxi
YWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoSlNWYWx1
ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9yYWdl
QWNjZXNzRW50cmllc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJHZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyIpKTsKLSAgICBXS0J1bmRsZVBv
c3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFsbFN0b3JhZ2VB
Y2Nlc3NFbnRyaWVzIik7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlY2VpdmVBbGxT
dG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQorc3Rh
dGljIEpTVmFsdWVSZWYgbWFrZURvbWFpbnNWYWx1ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9t
YWlucykKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwot
ICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250
ZXh0KG1haW5GcmFtZSk7Ci0gICAgCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiWyIpOworICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgnWycpOwogICAgIGJvb2wgZmlyc3REb21haW4g
PSB0cnVlOwogICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBpZiAo
Zmlyc3REb21haW4pCi0gICAgICAgICAgICBmaXJzdERvbWFpbiA9IGZhbHNlOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoZG9tYWluKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJcIiIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChmaXJzdERvbWFpbiA/ICJcIiIgOiAiLCBc
IiIsIGRvbWFpbiwgJyInKTsKKyAgICAgICAgZmlyc3REb21haW4gPSBmYWxzZTsKICAgICB9Ci0g
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJdIik7Ci0gICAgCi0gICAgSlNWYWx1ZVJl
ZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQsIGFkb3B0KEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCku
ZGF0YSgpKSkuZ2V0KCkpOwotCisgICAgYnVpbGRlci5hcHBlbmQoJ10nKTsKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5n
KGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKS5nZXQoKSk7Cit9Cit2b2lkIFRlc3RS
dW5uZXI6OmNhbGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayhWZWN0
b3I8U3RyaW5nPiYgZG9tYWlucykKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1ha2VEb21haW5zVmFs
dWUoZG9tYWlucyk7CiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhBbGxTdG9yYWdlQWNjZXNz
RW50cmllc0NhbGxiYWNrSUQsIDEsICZyZXN1bHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Omxv
YWRlZFN1YnJlc291cmNlRG9tYWlucyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hl
VGVzdFJ1bm5lckNhbGxiYWNrKExvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrSUQsIGNh
bGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMb2FkZWRTdWJyZXNvdXJj
ZURvbWFpbnMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6
OnBvc3RNZXNzYWdlKCJMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKFZl
Y3RvcjxTdHJpbmc+JiYgZG9tYWlucykKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgCi0gICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdbJyk7Ci0gICAgYm9v
bCBpc0ZpcnN0RG9tYWluID0gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMp
IHsKLSAgICAgICAgaWYgKGlzRmlyc3REb21haW4pCi0gICAgICAgICAgICBpc0ZpcnN0RG9tYWlu
ID0gZmFsc2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkb21haW4pOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiIik7Ci0gICAgfQotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCddJyk7Ci0gICAgCi0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21K
U09OU3RyaW5nKGNvbnRleHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCisgICAgYXV0
byByZXN1bHQgPSBtYWtlRG9tYWluc1ZhbHVlKGRvbWFpbnMpOwogICAgIGNhbGxUZXN0UnVubmVy
Q2FsbGJhY2soTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKEpTU3RyaW5nUmVmIHBl
cnNpc3RlbnRJZCwgSlNTdHJpbmdSZWYgbGFiZWwsIGNvbnN0IGNoYXIqIHR5cGUpCiB7Ci0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGVyc2lzdGVudElEIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKHRvV0socGVyc2lzdGVudElkKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZCh0b1dLKGxhYmVsKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUeXBlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodHlwZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmlu
Z1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3
S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNp
emUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tp
XSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
ZGRNb2NrTWVkaWFEZXZpY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCBy
YXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKCJBZGRNb2NrTWVkaWFEZXZpY2UiLCBjcmVhdGVXS0RpY3Rpb25hcnko
eworICAgICAgICB7ICJQZXJzaXN0ZW50SUQiLCB0b1dLKHBlcnNpc3RlbnRJZCkgfSwKKyAgICAg
ICAgeyAiTGFiZWwiLCB0b1dLKGxhYmVsKSB9LAorICAgICAgICB7ICJUeXBlIiwgdG9XSyh0eXBl
KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrQ2FtZXJh
RGV2aWNlKEpTU3RyaW5nUmVmIHBlcnNpc3RlbnRJZCwgSlNTdHJpbmdSZWYgbGFiZWwpCkBAIC0y
NTk0LDE1MyArMTg1Niw3MiBAQCB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTY3JlZW5EZXZpY2Uo
SlNTdHJpbmdSZWYgcGVyc2lzdGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbAogCiB2b2lkIFRlc3RS
dW5uZXI6OmNsZWFyTW9ja01lZGlhRGV2aWNlcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2xlYXJNb2NrTWVkaWFEZXZpY2VzIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJD
bGVhck1vY2tNZWRpYURldmljZXMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVNb2Nr
TWVkaWFEZXZpY2UoSlNTdHJpbmdSZWYgcGVyc2lzdGVudElkKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlJlbW92ZU1vY2tNZWRpYURldmljZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5
cGVSZWY+IG1lc3NhZ2VCb2R5KHRvV0socGVyc2lzdGVudElkKSk7Ci0KLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIlJlbW92ZU1vY2tNZWRpYURldmljZSIsIHRvV0socGVyc2lz
dGVudElkKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRNb2NrTWVkaWFEZXZpY2VzKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXNldE1vY2tNZWRpYURldmljZXMiKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlJlc2V0TW9ja01lZGlhRGV2aWNlcyIpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbih1bnNpZ25lZCBvcmllbnRh
dGlvbikKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uIikpOwotICAgIGF1dG8gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG9yaWVudGF0aW9uKSk7Ci0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iLCBv
cmllbnRhdGlvbik7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlckVuYWJsZWQoKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyRW5hYmxlZCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0
V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJl
dHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNNb2NrUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQiKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKKwog
dm9pZCBUZXN0UnVubmVyOjpjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgaW5kZXgpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ29ubmVjdE1vY2tHYW1lcGFkIikpOwotICAgIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGlu
ZGV4KSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNvbm5lY3RNb2Nr
R2FtZXBhZCIsIGluZGV4KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dh
bWVwYWQodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlzY29u
bmVjdE1vY2tHYW1lcGFkIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIkRpc2Nvbm5lY3RNb2NrR2FtZXBhZCIsIGluZGV4KTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZERldGFpbHModW5zaWduZWQgaW5kZXgsIEpT
U3RyaW5nUmVmIGdhbWVwYWRJRCwgSlNTdHJpbmdSZWYgbWFwcGluZywgdW5zaWduZWQgYXhpc0Nv
dW50LCB1bnNpZ25lZCBidXR0b25Db3VudCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJHYW1lcGFkSUQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhnYW1lcGFkSUQpKTsK
LQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik1hcHBpbmciKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhtYXBwaW5nKSk7Ci0KLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFk
SW5kZXgiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRl
eCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkF4aXNDb3VudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGF4aXNDb3VudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbkNvdW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uQ291bnQpKSk7Ci0KLSAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAg
IHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVl
cy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1
ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0TW9ja0dhbWVwYWREZXRhaWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFy
eVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRh
dGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TW9ja0dhbWVwYWREZXRhaWxzIiwgY3JlYXRlV0tE
aWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiR2FtZXBhZElEIiwgdG9XSyhnYW1lcGFkSUQpIH0sCisg
ICAgICAgIHsgIk1hcHBpbmciLCB0b1dLKG1hcHBpbmcpIH0sCisgICAgICAgIHsgIkdhbWVwYWRJ
bmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJBeGlz
Q291bnQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNDb3VudCkpIH0sCisgICAgICAgIHsg
IkJ1dHRvbkNvdW50IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25Db3VudCkpIH0sCisg
ICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQXhpc1Zh
bHVlKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBheGlzSW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNJbmRleCIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkp
KTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlZhbHVlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUo
dmFsdWUpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9y
PFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsK
LSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlz
W2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAg
fQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdL
ZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRN
b2NrR2FtZXBhZEF4aXNWYWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkdh
bWVwYWRJbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7
ICJBeGlzSW5kZXgiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpIH0sCisgICAg
ICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSku
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUo
dW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGJ1dHRvbkluZGV4LCBkb3VibGUgdmFsdWUpCiB7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25JbmRleCIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbkluZGV4
KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0
ZSh2YWx1ZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0
b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkp
OwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtl
eXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAg
ICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwg
cmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAg
IHsgIkdhbWVwYWRJbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAg
ICAgICB7ICJCdXR0b25JbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uSW5kZXgp
KSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSB9
LAorICAgIH0pLmdldCgpKTsKIH0KKwogI2Vsc2UKKwogdm9pZCBUZXN0UnVubmVyOjpjb25uZWN0
TW9ja0dhbWVwYWQodW5zaWduZWQpCiB7CiB9CkBAIC0yNzYwLDMwICsxOTQxLDI1IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUodW5zaWduZWQsIHVuc2lnbmVkLCBk
b3VibGUpCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWdu
ZWQsIHVuc2lnbmVkLCBkb3VibGUpCiB7CiB9CisKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXMoSlNWYWx1ZVJlZiBmaWxlc1ZhbHVl
KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKSk7
CisgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAKICAgICBpZiAo
IUpTVmFsdWVJc0FycmF5KGNvbnRleHQsIGZpbGVzVmFsdWUpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBKU09iamVjdFJlZiBmaWxlcyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBmaWxlc1Zh
bHVlLCBudWxscHRyKTsKLSAgICBzdGF0aWMgYXV0byBsZW5ndGhQcm9wZXJ0eSA9IGFkb3B0KEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBm
aWxlc0xlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBmaWxlcywgbGVu
Z3RoUHJvcGVydHkuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNv
bnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGZp
bGVzID0gKEpTT2JqZWN0UmVmKWZpbGVzVmFsdWU7CiAgICAgYXV0byBmaWxlVVJMcyA9IGFkb3B0
V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgYXV0byBmaWxlc0xlbmd0aCA9IHN0YXRp
Y19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUs
IG51bGxwdHIpKTsKKyAgICBhdXRvIGZpbGVzTGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwg
ZmlsZXMpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7ICsraSkgewog
ICAgICAgICBKU1ZhbHVlUmVmIGZpbGVWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIGZpbGVzLCBpLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJp
bmcoY29udGV4dCwgZmlsZVZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGF1dG8gZmlsZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgZmlsZVZhbHVl
LCBudWxscHRyKSk7CisgICAgICAgIGF1dG8gZmlsZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQs
IGZpbGVWYWx1ZSk7CiAgICAgICAgIHNpemVfdCBmaWxlQnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0
TWF4aW11bVVURjhDU3RyaW5nU2l6ZShmaWxlLmdldCgpKSArIDE7CiAgICAgICAgIGF1dG8gZmls
ZUJ1ZmZlciA9IG1ha2VVbmlxdWVBcnJheTxjaGFyPihmaWxlQnVmZmVyU2l6ZSk7CiAgICAgICAg
IEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoZmlsZS5nZXQoKSwgZmlsZUJ1ZmZlci5nZXQoKSwgZmls
ZUJ1ZmZlclNpemUpOwpAQCAtMjc5NywyMiArMTk3MywxNSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNl
dE9wZW5QYW5lbEZpbGVzKEpTVmFsdWVSZWYgZmlsZXNWYWx1ZSkKIAogICAgIH0KIAotICAgIHN0
YXRpYyBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0T3BlblBhbmVsRmlsZVVSTHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3Nh
Z2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIGZpbGVVUkxzLmdldCgpKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIlNldE9wZW5QYW5lbEZpbGVVUkxzIiwgZmlsZVVSTHMuZ2V0KCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKEpTVmFsdWVSZWYgZGF0
YSkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKSk7Ci0KLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICAvLyBGSVhNRSAoMTIzMDU4KTogVXNl
IGEgSlNDIEFQSSB0byBnZXQgYnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBleHBvc2VkLgot
ICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gaWNvbkRhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3Jl
YXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQs
IGRhdGEpKTsKLQotICAgIHN0YXRpYyBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0T3BlblBhbmVsRmlsZVVSTHNNZWRpYUljb24iKSk7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIGlj
b25EYXRhLmdldCgpKTsKKyAgICBhdXRvIGljb25EYXRhID0gYWRvcHRXSyhXS0J1bmRsZUNyZWF0
ZVdLRGF0YUZyb21VSW50OEFycmF5KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWFpbkpTQ29udGV4dCgpLCBkYXRhKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRPcGVu
UGFuZWxGaWxlVVJMc01lZGlhSWNvbiIsIGljb25EYXRhLmdldCgpKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKGRhdGEpOwogI2VuZGlmCkBAIC0yODIxLDExICsxOTkwLDcgQEAgdm9pZCBUZXN0
UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxlc01lZGlhSWNvbihKU1ZhbHVlUmVmIGRhdGEpCiB2b2lk
IFRlc3RSdW5uZXI6OnJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFscyhKU1ZhbHVlUmVmIGNhbGxi
YWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKERpZFJlbW92ZUFsbFNlc3Npb25D
cmVkZW50aWFsc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUp
KTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBwb3N0TWVzc2FnZSgiUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzIiwgdHJ1ZSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxi
YWNrKCkKQEAgLTI4MzUsNDkgKzIwMDAsMzMgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVt
b3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OmNs
ZWFyRE9NQ2FjaGUoSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkNsZWFyRE9NQ2FjaGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyRE9NQ2FjaGUiLCB0b1dLKG9y
aWdpbikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGVzKCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhckRPTUNhY2hlcyIpKTsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiQ2xlYXJET01DYWNoZXMiKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpo
YXNET01DYWNoZShKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSGFzRE9NQ2FjaGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBX
S1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5E
YXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJIYXNET01DYWNoZSIsIHRvV0so
b3JpZ2luKS5nZXQoKSk7CiB9CiAKIHVpbnQ2NF90IFRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZShK
U1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRE9NQ2FjaGVT
aXplIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcob3JpZ2luKSk7Ci0gICAgV0tUeXBlUmVmIHJl
dHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAg
cmV0dXJuIFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVybkRh
dGEpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50
NjQoIkRPTUNhY2hlU2l6ZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZShib29sIHdpbGxJbmNyZWFzZSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh3aWxsSW5jcmVhc2UpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIiwgd2lsbEluY3JlYXNl
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1hbmlmZXN0VGhlbihKU1Zh
bHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKEdldEFwcGxp
Y2F0aW9uTWFuaWZlc3RDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiR2V0QXBwbGljYXRpb25NYW5pZmVzdCIpKTsKLSAgICBXS0J1bmRsZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIpOworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIkdldEFwcGxpY2F0aW9uTWFu
aWZlc3QiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0
KCkKQEAgLTI4OTcsMjIxICsyMDQ2LDEzMCBAQCBzaXplX3QgVGVzdFJ1bm5lcjo6dXNlclNjcmlw
dEluamVjdGVkQ291bnQoKSBjb25zdAogCiB2b2lkIFRlc3RSdW5uZXI6OmluamVjdFVzZXJTY3Jp
cHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluamVj
dFVzZXJTY3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiSW5qZWN0VXNl
clNjcmlwdCIsIHRvV0soc2NyaXB0KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2Vu
ZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2Fn
ZUZvclRlc3RpbmciKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNlbmREaXNwbGF5Q29u
ZmlndXJhdGlvbkNoYW5nZWRNZXNzYWdlRm9yVGVzdGluZyIpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dCIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNl
dFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQiLCBzZWNvbmRzKTsKIH0KIAogLy8gV2ViQXV0aG4K
IHZvaWQgVGVzdFJ1bm5lcjo6YWRkVGVzdEtleVRvS2V5Y2hhaW4oSlNTdHJpbmdSZWYgcHJpdmF0
ZUtleUJhc2U2NCwgSlNTdHJpbmdSZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlv
blRhZ0Jhc2U2NCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlz
OwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcml2YXRlS2V5
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0socHJpdmF0ZUtleUJhc2U2NCkpOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxh
YmVsIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlv
blRhZyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uVGFnQmFzZTY0KSk7
Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJl
Zj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdW
YWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgp
OwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWRkVGVzdEtleVRvS2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5
Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkp
OwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJBZGRUZXN0S2V5VG9LZXlj
aGFpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlByaXZhdGVLZXkiLCB0b1dL
KHByaXZhdGVLZXlCYXNlNjQpIH0sCisgICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxh
YmVsKSB9LAorICAgICAgICB7ICJBcHBsaWNhdGlvblRhZyIsIHRvV0soYXBwbGljYXRpb25UYWdC
YXNlNjQpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFuVXBL
ZXljaGFpbihKU1N0cmluZ1JlZiBhdHRyTGFiZWwsIEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFi
ZWxCYXNlNjQpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBpZiAoYXBwbGlj
YXRpb25MYWJlbEJhc2U2NCkgewotICAgICAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpKTsKLSAgICAgICAgdmFs
dWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpKTsKLSAgICB9Ci0KLSAgICBW
ZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFs
dWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVz
aXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAg
ICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7CisgICAgaWYgKCFhcHBsaWNhdGlvbkxh
YmVsQmFzZTY0KSB7CisgICAgICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFuVXBLZXlj
aGFpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgICAgICB7ICJBdHRyTGFiZWwiLCB0
b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAgICAgfSkuZ2V0KCkpOworICAgICAgICByZXR1cm47CiAg
ICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYW5VcEtleWNoYWluIikpOwotICAg
IFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGlj
dGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5z
aXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYW5VcEtl
eWNoYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiQXR0ckxhYmVsIiwgdG9X
SyhhdHRyTGFiZWwpIH0sCisgICAgICAgIHsgIkFwcGxpY2F0aW9uTGFiZWwiLCB0b1dLKGFwcGxp
Y2F0aW9uTGFiZWxCYXNlNjQpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5u
ZXI6OmtleUV4aXN0c0luS2V5Y2hhaW4oSlNTdHJpbmdSZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1Jl
ZiBhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVl
czsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkF0dHJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGF0dHJMYWJlbCkpOwot
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QXBwbGljYXRpb25MYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9u
TGFiZWxCYXNlNjQpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBW
ZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXpl
KCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9
IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsK
LSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJLZXlFeGlzdHNJbktleWNoYWluIikp
OwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3
S2V5cy5zaXplKCkpKTsKLQotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1
cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9z
dFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIktleUV4aXN0c0luS2V5Y2hhaW4i
LCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJM
YWJlbCkgfSwKKyAgICAgICAgeyAiQXBwbGljYXRpb25MYWJlbCIsIHRvV0soYXBwbGljYXRpb25M
YWJlbEJhc2U2NCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgVGVzdFJ1
bm5lcjo6c2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50KCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291
bnQiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1
cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tVSW50NjRH
ZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLVUludDY0R2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2NCgiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2Fs
bGJhY2tDYWxsc0NvdW50Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGlzbWlz
c0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseShib29sIHNob3VsZERpc21pc3NBc3luY2hy
b25vdXNseSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTaG91bGREaXNtaXNzSmF2YVNj
cmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGREaXNtaXNzQXN5
bmNocm9ub3VzbHkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNob3Vs
ZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkiLCBzaG91bGREaXNtaXNzQXN5
bmNocm9ub3VzbHkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9kYWwoKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkFib3J0TW9kYWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIkFib3J0TW9kYWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkdW1wQWRDbGlja0F0
dHJpYnV0aW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRHVtcEFkQ2xpY2tBdHRy
aWJ1dGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
KCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2xlYXJBZENsaWNrQXR0cmlidXRpb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3Vn
aFdlYnNpdGVEYXRhUmVtb3ZhbCgpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Ro
cm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNs
ZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVz
dGluZyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFkQ2xpY2tB
dHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nIikpOwotICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmciLCB2YWx1
ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lv
blVSTEZvclRlc3RpbmcoSlNTdHJpbmdSZWYgdXJsU3RyaW5nKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIikp
OwotICAgIGF1dG8gd3RmVVJMU3RyaW5nID0gdG9XVEZTdHJpbmcoV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh3dGZVUkxTdHJpbmcudXRm
OCgpLmRhdGEoKSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZSgiU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRl
c3RpbmciLAorICAgICAgICBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRvV1RG
U3RyaW5nKHVybFN0cmluZykudXRmOCgpLmRhdGEoKSkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIk1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVz
dGluZyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZSgiTWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nIik7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0T2Zmc2NyZWVuQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIk9mZnNjcmVlbkNhbnZhc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYg
aW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5k
bGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5k
bGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7Cisg
ICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIk9mZnNjcmVlbkNhbnZhc0VuYWJsZWQiLCBlbmFi
bGVkKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24oKQogewotICAg
IGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIYXNBcHBCb3VuZFNlc3Npb24iKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxs
cHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJu
RGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotCi0gICAgcmV0dXJuIFdLQm9vbGVhbkdl
dFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0
KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4oIkhhc0FwcEJvdW5kU2Vzc2lvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQXBw
Qm91bmRTZXNzaW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJBcHBCb3VuZFNlc3Npb24iKSk7Ci0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyQXBwQm91bmRTZXNzaW9uIik7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0QXBwQm91bmREb21haW5zKEpTVmFsdWVSZWYgb3JpZ2luQXJyYXksIEpTVmFs
dWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2so
RGlkU2V0QXBwQm91bmREb21haW5zQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0g
ICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSkpOworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gbWFpbkpTQ29udGV4
dCgpOwogCiAgICAgaWYgKCFKU1ZhbHVlSXNBcnJheShjb250ZXh0LCBvcmlnaW5BcnJheSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0UmVmIG9yaWdpbnMgPSBKU1ZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgb3JpZ2luQXJyYXksIG51bGxwdHIpOwotICAgIHN0YXRpYyBhdXRvIGxlbmd0
aFByb3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIp
KTsKLSAgICBKU1ZhbHVlUmVmIG9yaWdpbnNMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHkoY29udGV4dCwgb3JpZ2lucywgbGVuZ3RoUHJvcGVydHkuZ2V0KCksIG51bGxwdHIpOwotICAg
IGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIG9yaWdpbnNMZW5ndGhWYWx1ZSkpCi0gICAg
ICAgIHJldHVybjsKLQorICAgIGF1dG8gb3JpZ2lucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0
LCBvcmlnaW5BcnJheSwgbnVsbHB0cik7CiAgICAgYXV0byBvcmlnaW5VUkxzID0gYWRvcHRXSyhX
S011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBhdXRvIG9yaWdpbnNMZW5ndGggPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBvcmlnaW5zTGVuZ3RoVmFsdWUs
IG51bGxwdHIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9yaWdpbnNMZW5ndGg7ICsr
aSkgeworICAgIGF1dG8gb3JpZ2luc0xlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIG9yaWdp
bnMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5zTGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgSlNWYWx1ZVJlZiBvcmlnaW5WYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdElu
ZGV4KGNvbnRleHQsIG9yaWdpbnMsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCBvcmlnaW5WYWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBhdXRvIG9yaWdpbiA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
b3JpZ2luVmFsdWUsIG51bGxwdHIpKTsKKyAgICAgICAgYXV0byBvcmlnaW4gPSBjcmVhdGVKU1N0
cmluZyhjb250ZXh0LCBvcmlnaW5WYWx1ZSk7CiAgICAgICAgIHNpemVfdCBvcmlnaW5CdWZmZXJT
aXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKG9yaWdpbi5nZXQoKSkgKyAx
OwogICAgICAgICBhdXRvIG9yaWdpbkJ1ZmZlciA9IG1ha2VVbmlxdWVBcnJheTxjaGFyPihvcmln
aW5CdWZmZXJTaXplKTsKICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhvcmlnaW4uZ2V0
KCksIG9yaWdpbkJ1ZmZlci5nZXQoKSwgb3JpZ2luQnVmZmVyU2l6ZSk7CkBAIC0zMTE5LDcgKzIx
NzcsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEFwcEJvdW5kRG9tYWlucyhKU1ZhbHVlUmVmIG9y
aWdpbkFycmF5LCBKU1ZhbHVlUmVmIGNvbXBsZXRpbwogICAgICAgICBXS0FycmF5QXBwZW5kSXRl
bShvcmlnaW5VUkxzLmdldCgpLCBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG9y
aWdpbkJ1ZmZlci5nZXQoKSkpLmdldCgpKTsKICAgICB9CiAKLSAgICBhdXRvIG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QXBwQm91bmREb21h
aW5zIikpOworICAgIGF1dG8gbWVzc2FnZU5hbWUgPSB0b1dLKCJTZXRBcHBCb3VuZERvbWFpbnMi
KTsKICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG9yaWdpblVSTHMuZ2V0KCkpOwogfQogCkBAIC0z
MTI4LDYgKzIxODYsMTEgQEAgdm9pZCBUZXN0UnVubmVyOjpkaWRTZXRBcHBCb3VuZERvbWFpbnND
YWxsYmFjaygpCiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhEaWRTZXRBcHBCb3VuZERvbWFp
bnNDYWxsYmFja0lEKTsKIH0KIAordm9pZCBUZXN0UnVubmVyOjpwb3N0TWVzc2FnZShjb25zdCBj
aGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwogQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfRU5ECiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCBjMGExNDA5MDVl
ZGYzZGRhNGE3NjFhYjYyMDdkOTdiNDM2MjA4NmJiLi5hYWViNDEwZTNlZDA3ZmI2Y2E0ZjlmMDNi
ZmY3ZGUzNzIyNTI3ZjcwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8g
SlNXcmFwcGFibGUKICAgICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CiAKLSAg
ICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dP
YmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0
KEpTQ29udGV4dFJlZik7CiAKICAgICBib29sIGlzSU9TRmFtaWx5KCkgY29uc3QKICAgICB7CkBA
IC0yNTMsNyArMjUzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0
dXJuc051bGwoYm9vbCBmKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwgPSBmOyB9CiAg
ICAgYm9vbCB3aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdDsgfQogICAgIHZvaWQg
c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZikgeyBtX3dpbGxT
ZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCA9IGY7IH0KLSAgICB2b2lkIHNldFdpbGxT
ZW5kUmVxdWVzdEFkZHNIVFRQQm9keShKU1N0cmluZ1JlZiBib2R5KSB7IG1fd2lsbFNlbmRSZXF1
ZXN0SFRUUEJvZHkgPSB0b1dURlN0cmluZyh0b1dLKGJvZHkpKTsgfQorICAgIHZvaWQgc2V0V2ls
bFNlbmRSZXF1ZXN0QWRkc0hUVFBCb2R5KEpTU3RyaW5nUmVmIGJvZHkpIHsgbV93aWxsU2VuZFJl
cXVlc3RIVFRQQm9keSA9IHRvV1RGU3RyaW5nKGJvZHkpOyB9CiAgICAgU3RyaW5nIHdpbGxTZW5k
UmVxdWVzdEhUVFBCb2R5KCkgY29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9k
eTsgfQogCiAgICAgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmKTsKQEAgLTI4Niw3
ICsyODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2soKTsK
ICAgICB2b2lkIGNhbGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaygpOwogCi0gICAgdm9p
ZCBvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVyZW5jZSwgSlNTdHJpbmdSZWYg
dmFsdWUpOworICAgIHN0YXRpYyB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBw
cmVmZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSk7CiAKICAgICAvLyBDb29raWVzIHRlc3RpbmcK
ICAgICB2b2lkIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCk7CkBAIC0zMDQsNyArMzA0LDcg
QEAgcHVibGljOgogCiAgICAgLy8gR2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRHZW9sb2NhdGlv
blBlcm1pc3Npb24oYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNWYWx1
ZVJlZiBhbHRpdHVkZSwgSlNWYWx1ZVJlZiBhbHRpdHVkZUFjY3VyYWN5LCBKU1ZhbHVlUmVmIGhl
YWRpbmcsIEpTVmFsdWVSZWYgc3BlZWQsIEpTVmFsdWVSZWYgZmxvb3JMZXZlbCk7CisgICAgdm9p
ZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9u
YWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9w
dGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAg
dm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoSlNTdHJpbmdS
ZWYgbWVzc2FnZSk7CiAgICAgYm9vbCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKIApA
QCAtMzM1LDggKzMzNSw4IEBAIHB1YmxpYzoKICAgICBib29sIHNlY3VyZUV2ZW50SW5wdXRJc0Vu
YWJsZWQoKSBjb25zdDsKIAogICAgIEpTVmFsdWVSZWYgZmFpbE5leHROZXdDb2RlQmxvY2soKTsK
LSAgICBKU1ZhbHVlUmVmIG51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiB0aGVGdW5jdGlv
bik7Ci0gICAgSlNWYWx1ZVJlZiBuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgdGhlRnVu
Y3Rpb24pOworICAgIEpTVmFsdWVSZWYgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIGZ1
bmN0aW9uKTsKKyAgICBKU1ZhbHVlUmVmIG5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiBm
dW5jdGlvbik7CiAKICAgICBib29sIHNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRl
bGF5KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJE
ZWxheTsgfQogICAgIHZvaWQgc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVs
YXkoYm9vbCk7CkBAIC01NDksNiArNTQ5LDggQEAgcHJpdmF0ZToKIAogICAgIFdLUmV0YWluUHRy
PFdLVVJMUmVmPiBtX3Rlc3RVUkw7IC8vIFNldCBieSBJbmplY3RlZEJ1bmRsZVBhZ2Ugb25jZSBw
cm92aXNpb25hbCBsb2FkIHN0YXJ0cy4KIAorICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hh
ciogbmFtZSwgYm9vbCk7CisKICAgICBTdHJpbmcgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keTsK
ICAgICBXVEY6OlNlY29uZHMgbV90aW1lb3V0IHsgMzBfcyB9OwogCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3Bw
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9s
bGVyLmNwcAppbmRleCA2NGFjODE5NzE1M2FhZTBhMGFiNzFlYmJjMjk0MjQ4NGEzNWU2NWFkLi42
ZTAwZDk5MjI1ZDFmMWFhYjI2MTU2Yzg5MjViMDU2NmEzNjZkNzI5IDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29u
dHJvbGxlci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rp
b25zLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1
bmRsZVBhZ2UuaCIKICNpbmNsdWRlICJKU1RleHRJbnB1dENvbnRyb2xsZXIuaCIKQEAgLTQwLDMw
ICs0MSwxNCBAQCBSZWY8VGV4dElucHV0Q29udHJvbGxlcj4gVGV4dElucHV0Q29udHJvbGxlcjo6
Y3JlYXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0SW5wdXRDb250cm9sbGVyKTsK
IH0KIAotVGV4dElucHV0Q29udHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcigpCi17Ci19Ci0K
LVRleHRJbnB1dENvbnRyb2xsZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKCkKLXsKLX0KLQogSlND
bGFzc1JlZiBUZXh0SW5wdXRDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogewogICAgIHJldHVy
biBKU1RleHRJbnB1dENvbnRyb2xsZXI6OnRleHRJbnB1dENvbnRyb2xsZXJDbGFzcygpOwogfQog
Ci12b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQordm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgInRl
eHRJbnB1dENvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOwotfQotCi1zdGF0aWMg
dW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGFy
cmF5KQotewotICAgIGF1dG8gbGVuZ3RoU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBpZiAoYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgYXJyYXksIGxlbmd0aFN0cmluZy5nZXQoKSwgbnVsbHB0
cikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVy
KGNvbnRleHQsIGxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIDA7CisgICAgc2V0
R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRleHRJbnB1dENvbnRyb2xsZXIiLCB0aGlz
KTsKIH0KIAogc3RhdGljIFdLQXJyYXlSZWYgY3JlYXRlQ29tcG9zaXRpb25IaWdobGlnaHREYXRh
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGpzSGlnaGxpZ2h0c1ZhbHVlKQpAQCAt
NzIsNTAgKzU3LDE5IEBAIHN0YXRpYyBXS0FycmF5UmVmIGNyZWF0ZUNvbXBvc2l0aW9uSGlnaGxp
Z2h0RGF0YShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgYXV0byByZXN1bHQgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOwotICAg
IGF1dG8ganNIaWdobGlnaHRzQXJyYXkgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hs
aWdodHNWYWx1ZSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwg
anNIaWdobGlnaHRzQXJyYXkpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotCi0gICAgYXV0byBqc0Zyb21LZXkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiZnJvbSIpKTsKLSAgICBhdXRvIGpzTGVuZ3RoS2V5ID0gYWRvcHQoSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBhdXRvIGpzQ29sb3JLZXkgPSBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29sb3IiKSk7Ci0KLSAgICBhdXRv
IHdrRnJvbUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZyb20i
KSk7Ci0gICAgYXV0byB3a0xlbmd0aEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBhdXRvIHdrQ29sb3JLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb2xvciIpKTsKLQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBu
dWxscHRyOwotICAgICAgICBhdXRvIGpzT2JqZWN0VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
QXRJbmRleChjb250ZXh0LCBqc0hpZ2hsaWdodHNBcnJheSwgaSwgJmV4Y2VwdGlvbik7Ci0gICAg
ICAgIGlmIChleGNlcHRpb24gfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBqc09iamVjdFZh
bHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8ganNPYmplY3QgPSBj
b25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc09iamVjdFZhbHVlKTsKLSAgICAgICAgYXV0byBqc0Zy
b21WYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwganNPYmplY3QsIGpzRnJvbUtl
eS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmICghanNGcm9tVmFsdWUgfHwgIUpTVmFsdWVJ
c051bWJlcihjb250ZXh0LCBqc0Zyb21WYWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBhdXRvIGpzTGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQs
IGpzT2JqZWN0LCBqc0xlbmd0aEtleS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmICghanNM
ZW5ndGhWYWx1ZSB8fCAhSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGpzTGVuZ3RoVmFsdWUpKQor
ICAgIGF1dG8gYXJyYXkgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hsaWdodHNWYWx1
ZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRv
IHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIG51
bGxwdHIpOworICAgICAgICBpZiAoIXZhbHVlIHx8ICFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwg
dmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBqc0NvbG9yVmFs
dWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGpzT2JqZWN0LCBqc0NvbG9yS2V5Lmdl
dCgpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFqc0NvbG9yVmFsdWUgfHwgIUpTVmFsdWVJc1N0
cmluZyhjb250ZXh0LCBqc0NvbG9yVmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgYXV0byBjb2xvciA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwganND
b2xvclZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgIGF1dG8gd2tDb2xvciA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoY29sb3IuZ2V0KCkpKTsKLSAgICAgICAgYXV0byB3a0Zy
b20gPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwganNGcm9tVmFsdWUsIG51bGxwdHIpKSkpOwotICAgICAgICBhdXRvIHdrTGVuZ3RoID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShscm91bmQoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzTGVu
Z3RoVmFsdWUsIG51bGxwdHIpKSkpOwotCisgICAgICAgIGF1dG8gb2JqZWN0ID0gY29uc3RfY2Fz
dDxKU09iamVjdFJlZj4odmFsdWUpOwogICAgICAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oZGljdGlvbmFyeS5nZXQoKSwgd2tGcm9tS2V5LmdldCgpLCB3a0Zyb20uZ2V0KCkpOwotICAg
ICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHdrTGVuZ3RoS2V5Lmdl
dCgpLCB3a0xlbmd0aC5nZXQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlv
bmFyeS5nZXQoKSwgd2tDb2xvcktleS5nZXQoKSwgd2tDb2xvci5nZXQoKSk7CisgICAgICAgIHNl
dFZhbHVlKGRpY3Rpb25hcnksICJmcm9tIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bWVyaWNQ
cm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJmcm9tIikpKTsKKyAgICAgICAgc2V0VmFsdWUoZGlj
dGlvbmFyeSwgImxlbmd0aCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihudW1lcmljUHJvcGVydHko
Y29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIikpKTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFy
eSwgImNvbG9yIiwgdG9XSyhzdHJpbmdQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJjb2xvciIp
KS5nZXQoKSk7CiAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdCwgZGljdGlvbmFyeS5n
ZXQoKSk7CiAgICAgfQotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmgg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xs
ZXIuaAppbmRleCA1NThjMmU2MTE0MDgxNzg1ZTNiN2NhZTE5ZmVmZDM5NmFlYjM3YTk0Li5hNDRj
MjhlODQ0MzkxNzI5MmE5YjM3YmNiN2UyNTUyZDEyMTQ0Y2E0IDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xs
ZXIuaApAQCAtMjgsMTcgKzI4LDE3IEBACiAjaW5jbHVkZSAiSlNXcmFwcGFibGUuaCIKICNpbmNs
dWRlIDx3dGYvUmVmLmg+CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCog
SlNDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVm
OwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFt
ZXNwYWNlIFdUUiB7CiAKLWNsYXNzIFRleHRJbnB1dENvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFw
cGFibGUgeworY2xhc3MgVGV4dElucHV0Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBw
YWJsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxUZXh0SW5wdXRDb250cm9sbGVyPiBjcmVh
dGUoKTsKLSAgICB2aXJ0dWFsIH5UZXh0SW5wdXRDb250cm9sbGVyKCk7Ci0KLSAgICAvLyBKU1dy
YXBwYWJsZQotICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKIAotICAgIHZv
aWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVj
dCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlND
b250ZXh0UmVmKTsKIAogICAgIHZvaWQgc2V0TWFya2VkVGV4dChKU1N0cmluZ1JlZiB0ZXh0LCBp
bnQgZnJvbSwgaW50IGxlbmd0aCwgYm9vbCBzdXBwcmVzc1VuZGVybGluZSwgSlNWYWx1ZVJlZiBo
aWdobGlnaHRzKTsKICAgICBib29sIGhhc01hcmtlZFRleHQoKTsKQEAgLTQ2LDcgKzQ2LDkgQEAg
cHVibGljOgogICAgIHZvaWQgaW5zZXJ0VGV4dChKU1N0cmluZ1JlZiB0ZXh0KTsKIAogcHJpdmF0
ZToKLSAgICBUZXh0SW5wdXRDb250cm9sbGVyKCk7CisgICAgVGV4dElucHV0Q29udHJvbGxlcigp
ID0gZGVmYXVsdDsKKworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KaW5k
ZXggMDI0ZmU2MDU3M2I4ZjJjNTkyZWJmZGIzNWYzYTQ0NDg1Y2RiOTc1Ni4uNWE1Yjc3ZWMxOTRk
YTVmZTNmZmY5OTEzN2NlOWFjZDI2ZGZlNGMxZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRz
Q29jb2EubW0KQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIGFjdGl2YXRlRm9udHMoKQogCiB2b2lk
IGluc3RhbGxGYWtlSGVsdmV0aWNhKFdLU3RyaW5nUmVmIGNvbmZpZ3VyYXRpb24pCiB7Ci0gICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb25maWd1cmF0aW9uU3RyaW5nID0gYWRvcHRDRihXS1N0
cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uKSk7Cisg
ICAgYXV0byBjb25maWd1cmF0aW9uU3RyaW5nID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmlu
ZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uKSk7CiAgICAgTlNVUkwgKnJlc291
cmNlVVJMID0gW3Jlc291cmNlc0RpcmVjdG9yeVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkZha2VIZWx2ZXRpY2EtJUAudHRmIiwg
Y29uZmlndXJhdGlvblN0cmluZy5nZXQoKV0gaXNEaXJlY3Rvcnk6Tk9dOwogICAgIENGRXJyb3JS
ZWYgZXJyb3IgPSBudWxscHRyOwogICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9udHNG
b3JVUkwoKF9fYnJpZGdlIENGVVJMUmVmKXJlc291cmNlVVJMLCBrQ1RGb250TWFuYWdlclNjb3Bl
UHJvY2VzcywgJmVycm9yKSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29j
b2EubW0KaW5kZXggODE3NjE4MjdhODgxZDA2ZGZlNzBhOWJkMzIyNDczMmFlMTliY2YyOC4uOTFk
MjQ5YzcyN2Y2ODc1ZWQ0YTRjY2YxNTljMGY3N2Q3MmY4NWJkNSAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VD
b2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29h
L0luamVjdGVkQnVuZGxlUGFnZUNvY29hLm1tCkBAIC00NywxMyArNDcsMTMgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnBsYXRmb3JtRGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShX
S0J1bmRsZUZyYW1lUmUKIAogU3RyaW5nIEluamVjdGVkQnVuZGxlUGFnZTo6cGxhdGZvcm1SZXNw
b25zZU1pbWVUeXBlKFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgUmV0YWluUHRy
PE5TVVJMUmVzcG9uc2U+IG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdLVVJMUmVzcG9uc2VDb3B5
TlNVUkxSZXNwb25zZShyZXNwb25zZSkpOworICAgIGF1dG8gbnNVUkxSZXNwb25zZSA9IGFkb3B0
TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICAgcmV0dXJu
IFtuc1VSTFJlc3BvbnNlLmdldCgpIE1JTUVUeXBlXTsKIH0KIAogdWludDY0X3QgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpyZXNwb25zZUhlYWRlckNvdW50KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2Up
CiB7Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5T
KFdLVVJMUmVzcG9uc2VDb3B5TlNVUkxSZXNwb25zZShyZXNwb25zZSkpOworICAgIGF1dG8gbnNV
UkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3Bv
bnNlKSk7CiAgICAgaWYgKCFbbnNVUkxSZXNwb25zZSBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxS
ZXNwb25zZSBjbGFzc11dKQogICAgICAgICByZXR1cm4geyB9OwogCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCmluZGV4IDg3Y2NkMjFjYTlhNzdhYTJkMGEyMWE0
Y2FiNTIxY2FlZWZhOWM0YTIuLmM0MTgyMzBmM2I0ZmRlNzE5YWM2Y2NjODRiNzQyZGJlY2ExNGQy
NGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9z
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBAIC02
Miw3ICs2Miw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQogewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3Ry
aW5nKCJpb3MiKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0Nv
bnNpc3RlbnRTdGF0ZSgpCkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJs
ZU9iamVjdEJ5SWQoaWQgb2JqLCBOU1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAKIFJlZlB0cjxBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVs
ZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxlUGFnZVJl
ZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAg
IGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsK
ICAgICBpZCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJp
bGl0eVJvb3RPYmplY3QocGFnZSkpOwogCiAgICAgaWQgcmVzdWx0ID0gZmluZEFjY2Vzc2libGVP
YmplY3RCeUlkKHJvb3QsIFtOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6aWRBdHRyaWJ1
dGVdKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
aW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCmluZGV4IDUy
MjM0YWE0ZDc0NzJjZGUwNzFkOWU4Njk2OTBkOTM1NTI5YTIwZDIuLmJiYzhiYjE2Yzg2NGJjMjYx
MGNmYWE2OWEwNmZkODEzYzc2OTVkMDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudElPUy5tbQpAQCAtMTM2LDExICsxMzYsNiBAQCBAZW5kCiAKIG5hbWVzcGFjZSBXVFIg
ewogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmco
KQotewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxw
dHIsIDApKTsKLX0KLQogc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb25jYXRlbmF0
ZUF0dHJpYnV0ZUFuZFZhbHVlKE5TU3RyaW5nICphdHRyaWJ1dGUsIE5TU3RyaW5nICp2YWx1ZSkK
IHsKICAgICBWZWN0b3I8VW5pQ2hhcj4gYnVmZmVyKFthdHRyaWJ1dGUgbGVuZ3RoXSk7CkBAIC0z
MzAsMjcgKzMyNSwyNyBAQCBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3coKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cygp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRl
SlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MoKQogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVz
T2ZDaGlsZHJlbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNj
cmlwdGlvbk9mQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBAIC0zODIsNyArMzc3
LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmUKICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhhdHRyaWJ1dGUsICJBWFRleHR1YWxDb250ZXh0IikpCiAgICAgICAgIHJldHVy
biBbW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5VGV4dHVhbENvbnRleHRdIGNyZWF0ZUpTU3RyaW5n
UmVmXTsKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQpAQCAtNDQzLDE3ICs0
MzgsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRl
ZChKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQogewotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCkBA
IC00NjMsMTMgKzQ1OCwxMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZygpCiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKQEAg
LTQ3OSw3ICs0NzMsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZGVzY3JpcHRpb24oKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1
ZSgpCkBAIC00ODksNyArNDgzLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRl
RW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHQoKSBj
b25zdApAQCAtNTQ5LDcgKzU0Myw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpt
YXhWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp2YWx1ZURlc2NyaXB0aW9uKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkKQEAgLTU4NCw3ICs1NzgsNiBA
QCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNTk2LDEzICs1ODksMTEg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjM4LDcgKzYy
OSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojphcmlh
RHJvcEVmZmVjdHMoKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7
CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIC8vIHBhcmFtZXRlcml6ZWQgYXR0
cmlidXRlcwpAQCAtNjU5LDcgKzY1MCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpyYW5nZUZvclBvc2l0aW9uKGludCB4LCBpbnQgeSkKIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJh
bmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0Zv
clJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC03MTMsMzIgKzcw
NCwzMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2VsZWN0VGV4dFdpdGhDcml0ZXJpYShKU0NvbnRleAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1
bW5zKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZp
c2libGVDZWxscygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRyYWl0
cygpCkBAIC05MDMsMjMgKzg5NCwyMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJl
bW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50
VVJJKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lz
dGl2ZVRlY2hub2xvZ3lTaW11bGF0ZWRGb2N1cygpCkBAIC0xMDE2LDMxICsxMDA1LDI2IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3Jl
ZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEw
NTIsMTMgKzEwMzYsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQo
KSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTA3NCwyMiAr
MTA1NiwxOCBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cG9wdXBWYWx1ZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFr
ZUZvY3VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigpCiB7Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiAvLyBU
ZXh0IG1hcmtlcnMKQEAgLTExMzYsNyArMTExNCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNz
CiB7CiAgICAgaWQgdGV4dE1hcmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2Vy
UmFuZ2UoKTsKICAgICBpZiAoIVt0ZXh0TWFya2VycyBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNs
YXNzXV0pCi0gICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgICAgIHJl
dHVybiBjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJpbmdGb3JU
ZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRl
clByb3h5SU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3Mv
RXZlbnRTZW5kZXJQcm94eUlPUy5tbQppbmRleCBjYWIzZjE4YjM2NTlmNDkxNmJkNTAwODc5Mjg2
ZDZhMjdjMGM5ZjkxLi5iMmUyODg0YTBiM2UzNmIyNDEyMGYyMWQzZThiZGM3MWFkZDQ3MWIwIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVu
dFNlbmRlclByb3h5SU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0KQEAgLTM2LDIzICszNiwxMyBAQCBuYW1l
c3BhY2UgV1RSIHsKIAogRXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0Q29u
dHJvbGxlciogdGVzdENvbnRyb2xsZXIpCiAgICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RDb250
cm9sbGVyKQotICAgICwgbV90aW1lKDApCi0gICAgLCBtX3Bvc2l0aW9uKCkKLSAgICAsIG1fbGVm
dE1vdXNlQnV0dG9uRG93bihmYWxzZSkKLSAgICAsIG1fY2xpY2tDb3VudCgwKQotICAgICwgbV9j
bGlja1RpbWUoMCkKLSAgICAsIG1fY2xpY2tQb3NpdGlvbigpCi0gICAgLCBtX2NsaWNrQnV0dG9u
KGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbikKLSAgICAsIGV2ZW50TnVtYmVyKDApCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKG1fdGVzdENvbnRyb2xsZXIpOwogICAgIFVOVVNFRF9QQVJBTShtX2xl
ZnRNb3VzZUJ1dHRvbkRvd24pOwogICAgIFVOVVNFRF9QQVJBTShldmVudE51bWJlcik7CiB9CiAK
LUV2ZW50U2VuZGVyUHJveHk6On5FdmVudFNlbmRlclByb3h5KCkKLXsKLX0KK0V2ZW50U2VuZGVy
UHJveHk6On5FdmVudFNlbmRlclByb3h5KCkgPSBkZWZhdWx0OwogCiB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKIHsKQEAgLTcwLDE3
ICs2MCwxNCBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0
b24oaW50IGJ1dHRvbikKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24odW5zaWdu
ZWQgYnV0dG9uTnVtYmVyLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycykKIHsKLSAgICAvLyBX
cml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKHVuc2lnbmVkIGJ1
dHRvbk51bWJlciwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMpCiB7Ci0gICAgLy8gV3JpdGUg
bWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8oZG91YmxlIHgsIGRv
dWJsZSB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6
OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCkBAIC05MCw3OSArNzcsNjYgQEAgdm9pZCBF
dmVudFNlbmRlclByb3h5OjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQogCiB2b2lkIEV2
ZW50U2VuZGVyUHJveHk6OmtleURvd24oV0tTdHJpbmdSZWYga2V5LCBXS0V2ZW50TW9kaWZpZXJz
IG1vZGlmaWVycywgdW5zaWduZWQga2V5TG9jYXRpb24pCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9
CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHkpCiB7
Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3Jv
bGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKGludCB4LCBpbnQgeSwgaW50IHBoYXNlLCBp
bnQgbW9tZW50dW0pCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBib29sIHBhZ2VkKQog
ewotICAgIC8vIFdyaXRlIG1lLgogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKwogdm9p
ZCBFdmVudFNlbmRlclByb3h5OjphZGRUb3VjaFBvaW50KGludCB4LCBpbnQgeSkKIHsKLSAgICAv
LyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVUb3VjaFBvaW50
KGludCBpbmRleCwgaW50IHgsIGludCB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIoV0tFdmVudE1vZGlmaWVycywgYm9v
bCBlbmFibGUpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94
eTo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCiB7Ci0gICAg
Ly8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCgpCiB7
Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hNb3Zl
KCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3Vj
aEVuZCgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
dG91Y2hDYW5jZWwoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OmNsZWFyVG91Y2hQb2ludHMoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OnJlbGVhc2VUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAgICAv
LyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50
KGludCBpbmRleCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KKwogI2VuZGlmCiAKIH0gLy8gbmFt
ZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KaW5kZXggMjVl
MGMzZDAwZTQ5YmIyYjVlZDIwM2UxOTBjZjFlY2M5MGRmM2FmNC4uMzU0YThmNjU1NWM2YzAwMjY1
ZjU2ODFhNmIzNzE1MmE4NGE1NjJjMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9u
TWFjLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFj
LmgiCiAKICNpbXBvcnQgIkpTV3JhcHBlci5oIgorI2ltcG9ydCAiU3RyaW5nRnVuY3Rpb25zLmgi
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAjaW1wb3J0IDxvYmpj
L3J1bnRpbWUuaD4KIApAQCAtNjEsMjYgKzYyLDIyIEBAIENsYXNzIHdlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQ2xhc3MoKQogICAgIHJldHVybiBjbHM7CiB9CiAKLXN0YXRpYyBKU1ZhbHVl
UmVmIG1ha2VBcnJheVJlZkZvckFycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0FycmF5ICph
cnJheSkKK3N0YXRpYyBKU09iamVjdFJlZiBtYWtlSlNBcnJheShKU0NvbnRleHRSZWYgY29udGV4
dCwgTlNBcnJheSAqYXJyYXkpCiB7CiAgICAgTlNVSW50ZWdlciBjb3VudCA9IGFycmF5LmNvdW50
OwogICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzW2NvdW50XTsKLQogICAgIGZvciAoTlNVSW50ZWdl
ciBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIGFyZ3VtZW50c1tpXSA9IG1ha2VWYWx1
ZVJlZkZvclZhbHVlKGNvbnRleHQsIFthcnJheSBvYmplY3RBdEluZGV4OmldKTsKLQogICAgIHJl
dHVybiBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBjb3VudCwgYXJndW1lbnRzLCBudWxscHRy
KTsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkoSlND
b250ZXh0UmVmIGNvbnRleHQsIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSkKK3N0YXRpYyBKU09i
amVjdFJlZiBtYWtlSlNPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIE5TRGljdGlvbmFyeSAq
ZGljdGlvbmFyeSkKIHsKLSAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU09iamVjdE1ha2UoY29u
dGV4dCwgbnVsbHB0ciwgbnVsbHB0cik7Ci0KKyAgICBhdXRvIG9iamVjdCA9IEpTT2JqZWN0TWFr
ZShjb250ZXh0LCBudWxscHRyLCBudWxscHRyKTsKICAgICBbZGljdGlvbmFyeSBlbnVtZXJhdGVL
ZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmluZyAqa2V5LCBpZCBvYmosIEJPT0wgKikg
ewogICAgICAgICBpZiAoSlNWYWx1ZVJlZiBwcm9wZXJ0eVZhbHVlID0gbWFrZVZhbHVlUmVmRm9y
VmFsdWUoY29udGV4dCwgb2JqKSkKICAgICAgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29u
dGV4dCwgb2JqZWN0LCBba2V5IGNyZWF0ZUpTU3RyaW5nUmVmXS5nZXQoKSwgcHJvcGVydHlWYWx1
ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKICAgICB9XTsKLQogICAgIHJl
dHVybiBvYmplY3Q7CiB9CiAKQEAgLTk2LDkgKzkzLDkgQEAgSlNWYWx1ZVJlZiBtYWtlVmFsdWVS
ZWZGb3JWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgaWQgdmFsdWUpCiAgICAgaWYgKFt2YWx1
ZSBpc0tpbmRPZkNsYXNzOndlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MoKV0pCiAg
ICAgICAgIHJldHVybiB0b0pTKGNvbnRleHQsIFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y3JlYXRlKHN0YXRpY19jYXN0PFBsYXRmb3JtVUlFbGVtZW50Pih2YWx1ZSkpLnB0cigpKTsKICAg
ICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQotICAgICAg
ICByZXR1cm4gbWFrZU9iamVjdFJlZkZvckRpY3Rpb25hcnkoY29udGV4dCwgdmFsdWUpOworICAg
ICAgICByZXR1cm4gbWFrZUpTT2JqZWN0KGNvbnRleHQsIHZhbHVlKTsKICAgICBpZiAoW3ZhbHVl
IGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIG1ha2VBcnJh
eVJlZkZvckFycmF5KGNvbnRleHQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG1ha2VKU0FycmF5
KGNvbnRleHQsIHZhbHVlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMTE1LDI4ICsx
MTIsMTYgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmli
dXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKIAogICAgIGlmIChzZWFyY2hLZXkpIHsK
ICAgICAgICAgaWQgc2VhcmNoS2V5UGFyYW1ldGVyID0gbmlsOwotICAgICAgICBpZiAoSlNWYWx1
ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaEtleSkpIHsKLSAgICAgICAgICAgIGF1dG8gc2VhcmNo
S2V5U3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hLZXks
IG51bGxwdHIpKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hLZXlTdHJpbmcpCi0gICAgICAgICAg
ICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gW05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1Jl
ZjpzZWFyY2hLZXlTdHJpbmcuZ2V0KCldOwotICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWVJc09i
amVjdChjb250ZXh0LCBzZWFyY2hLZXkpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmco
Y29udGV4dCwgc2VhcmNoS2V5KSkKKyAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRlciA9IHRv
V1RGU3RyaW5nKGNvbnRleHQsIHNlYXJjaEtleSk7CisgICAgICAgIGVsc2UgaWYgKEpTVmFsdWVJ
c09iamVjdChjb250ZXh0LCBzZWFyY2hLZXkpKSB7CiAgICAgICAgICAgICBKU09iamVjdFJlZiBz
ZWFyY2hLZXlBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hLZXksIG51bGxw
dHIpOwotICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSAwOwotCi0g
ICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWYgc2Vh
cmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgc2Vh
cmNoS2V5QXJyYXksIGxlbmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAgICAg
ICAgICAgIGlmIChzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihj
b250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBzZWFy
Y2hLZXlBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotCisgICAgICAg
ICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQs
IHNlYXJjaEtleUFycmF5KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
ZWFyY2hLZXlBcnJheUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiBz
ZWFyY2hLZXlWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJj
aEtleUFycmF5LCBpLCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBKU1N0cmluZ1JlZiBzZWFy
Y2hLZXlTdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaEtleVZhbHVl
LCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBpZiAoc2VhcmNoS2V5U3RyaW5nKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghc2VhcmNoS2V5UGFyYW1ldGVyKQotICAgICAgICAgICAgICAg
ICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAg
ICAgICAgICAgICAgICAgICAgW3NlYXJjaEtleVBhcmFtZXRlciBhZGRPYmplY3Q6W05TU3RyaW5n
IHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hLZXlTdHJpbmddXTsKLSAgICAgICAgICAgICAg
ICAgICAgSlNTdHJpbmdSZWxlYXNlKHNlYXJjaEtleVN0cmluZyk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNoS2V5ID0gdG9XVEZTdHJpbmcoY29udGV4dCwg
SlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoS2V5QXJyYXksIGksIG51
bGxwdHIpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNlYXJjaEtleVBhcmFtZXRlcikKKyAgICAg
ICAgICAgICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gW05TTXV0YWJsZUFycmF5IGFycmF5
XTsKKyAgICAgICAgICAgICAgICBbc2VhcmNoS2V5UGFyYW1ldGVyIGFkZE9iamVjdDpzZWFyY2hL
ZXldOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChzZWFyY2hLZXlQYXJh
bWV0ZXIpCkBAIC0xNDQsMTAgKzEyOSw5IEBAIE5TRGljdGlvbmFyeSAqc2VhcmNoUHJlZGljYXRl
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENyaXRlcmlhKEpTQ29udGV4dFJlCiAgICAg
fQogCiAgICAgaWYgKHNlYXJjaFRleHQgJiYgSlNTdHJpbmdHZXRMZW5ndGgoc2VhcmNoVGV4dCkp
Ci0gICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpbTlNTdHJpbmcgc3Ry
aW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFRleHRdIGZvcktleTpAIkFYU2VhcmNoVGV4dCJdOwor
ICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6dG9XVEZTdHJpbmcoc2Vh
cmNoVGV4dCkgZm9yS2V5OkAiQVhTZWFyY2hUZXh0Il07CiAKICAgICBbcGFyYW1ldGVyaXplZEF0
dHJpYnV0ZSBzZXRPYmplY3Q6QCh2aXNpYmxlT25seSkgZm9yS2V5OkAiQVhWaXNpYmxlT25seSJd
OwotCiAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OkAoaW1tZWRpYXRlRGVz
Y2VuZGFudHNPbmx5KSBmb3JLZXk6QCJBWEltbWVkaWF0ZURlc2NlbmRhbnRzT25seSJdOwogCiAg
ICAgcmV0dXJuIHBhcmFtZXRlcml6ZWRBdHRyaWJ1dGU7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1h
Yy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyTWFjLm1tCmluZGV4IDkxM2FlMGY3NWNkYjRlZDVkZWRkZWI5MjVmNmM5
NTAxOGRkZDE3MDQuLmE4ODdkZTVjODVkNTAyODRmZDI0NDcxMjUxNmU4OWM5OThjM2FhNWYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2lt
cG9ydCAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlUGFnZS5oIgor
I2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVm
Q0YuaD4KICNpbXBvcnQgPFdlYktpdC9XS0J1bmRsZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLQnVu
ZGxlUGFnZS5oPgpAQCAtOTYsNyArOTcsNyBAQCBzdGF0aWMgaWQgZmluZEFjY2Vzc2libGVPYmpl
Y3RCeUlkKGlkIG9iaiwgTlNTdHJpbmcgKmlkQXR0cmlidXRlKQogCiBSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50
QnlJZChKU1N0cmluZ1JlZiBpZEF0dHJpYnV0ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRv
IHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAg
UGxhdGZvcm1VSUVsZW1lbnQgcm9vdCA9IHN0YXRpY19jYXN0PFBsYXRmb3JtVUlFbGVtZW50PihX
S0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpKTsKIAogICAgIFJldGFpblB0cjxpZD4gcmVz
dWx0OwpAQCAtMTExLDcgKzExMiw3IEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTCiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1l
KCkKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm1h
YyIpKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygibWFjIik7CiB9CiAKIC8vIEFY
VGhyZWFkIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dE1hYy5tbQppbmRleCA1MGIzZTAyMjBiOGQxMjJhZDIyYmM5NmQ0MjRjZmQ4MzMxYjY1ZjU5Li4y
ZWZmNDU0ZTY2NzkxZDY5OGY5NWJlYzc2OTRhMDlmYjJjY2YwYTExIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50TWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFj
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KQEAgLTMyLDcgKzMyLDcgQEAKICNpbXBvcnQg
IkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlLmgiCiAj
aW1wb3J0ICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKLQorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNp
bXBvcnQgPEFwcEtpdC9OU0FjY2Vzc2liaWxpdHkuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgpAQCAt
ODcsMTEgKzg3LDYgQEAgQGVuZAogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVFbXB0eUpTU3RyaW5nKCkKLXsKLSAgICByZXR1cm4gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhudWxscHRyLCAwKSk7Ci19Ci0KIFJlZlB0
cjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c19jb250
cm9sbGVyOwogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KGlkIGVsZW1lbnQpCkBAIC0yMDYsNyArMjAxLDcgQEAgc3RhdGljIE5TU3RyaW5nKiBkZXNjcmlw
dGlvbk9mVmFsdWUoaWQgdmFsdWVPYmplY3QsIGlkIGVsZW1lbnQpCiAKIHN0YXRpYyBOU1N0cmlu
ZyAqYXR0cmlidXRlc09mRWxlbWVudChpZCBhY2Nlc3NpYmlsaXR5T2JqZWN0KQogewotICAgIFJl
dGFpblB0cjxOU0FycmF5PiBhdHRyaWJ1dGVzID0gc3VwcG9ydGVkQXR0cmlidXRlcyhhY2Nlc3Np
YmlsaXR5T2JqZWN0KTsKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBzdXBwb3J0ZWRBdHRyaWJ1dGVz
KGFjY2Vzc2liaWxpdHlPYmplY3QpOwogCiAgICAgTlNNdXRhYmxlU3RyaW5nKiBhdHRyaWJ1dGVz
U3RyaW5nID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmddOwogICAgIGZvciAoTlNTdHJpbmcqIGF0
dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzLmdldCgpKSB7CkBAIC0yMjcsMTYgKzIyMiwxMyBAQCBzdGF0
aWMgTlNTdHJpbmcgKmF0dHJpYnV0ZXNPZkVsZW1lbnQoaWQgYWNjZXNzaWJpbGl0eU9iamVjdCkK
ICAgICByZXR1cm4gYXR0cmlidXRlc1N0cmluZzsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXN0YXRpYyBKU1ZhbHVlUmVmIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBWZWN0b3I8VD4gY29uc3QmIGVsZW1lbnRzKQordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VKU0FycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBj
b25zdCBWZWN0b3I8VD4mIGVsZW1lbnRzKQogewotICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQg
PSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKLSAgICBKU09iamVjdFJlZiBh
cnJheU9iaiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7CisgICAg
YXV0byBhcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwogICAgIHNp
emVfdCBlbGVtZW50Q291bnQgPSBlbGVtZW50cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBlbGVtZW50Q291bnQ7ICsraSkKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0
SW5kZXgoY29udGV4dCwgYXJyYXlPYmosIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBlbGVtZW50
c1tpXS0+d3JhcHBlckNsYXNzKCksIGVsZW1lbnRzW2ldLmdldCgpKSwgMCk7Ci0KLSAgICByZXR1
cm4gYXJyYXlSZXN1bHQ7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRl
eHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZWxlbWVudHNbaV0tPndyYXBwZXJD
bGFzcygpLCBlbGVtZW50c1tpXS5nZXQoKSksIDApOworICAgIHJldHVybiBhcnJheTsKIH0KIAog
c3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb25jYXRlbmF0ZUF0dHJpYnV0ZUFuZFZh
bHVlKE5TU3RyaW5nKiBhdHRyaWJ1dGUsIE5TU3RyaW5nKiB2YWx1ZSkKQEAgLTI3MywyNSArMjY1
LDEzIEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnNlbGVjdFRleHRQYXJhbWV0ZXJpemVkQXR0cmli
dXRlRm9yQ3JpdGVyaWEoSlNDb250ZXh0UmVmIGNvCiAgICAgCiAgICAgaWYgKHNlYXJjaFN0cmlu
Z3MpIHsKICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnNlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJp
bmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MsIG51
bGxwdHIpKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQotICAgICAgICAg
ICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncykp
IHsKKyAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkK
KyAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDp0b1dURlN0cmlu
Zyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKV07CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
SlNPYmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQs
IHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3Ry
aW5nc0FycmF5TGVuZ3RoID0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBsZW5n
dGhQcm9wZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJs
ZW5ndGgiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0
aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXks
IGxlbmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmIChz
ZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwg
c2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaFN0
cmluZ3NBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaFN0cmlu
Z3NBcnJheUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdz
U3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBKU09iamVjdEdldFBy
b3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxwdHIpLCBu
dWxscHRyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0gICAg
ICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJp
bmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0
aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kp
CisgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RG
U3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJj
aFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0cikpXTsKICAgICAgICAgfQogICAgICAgICBbcGFyYW1l
dGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c2VhcmNoU3RyaW5nc1BhcmFtZXRlciBmb3JLZXk6
QCJBWFNlbGVjdFRleHRTZWFyY2hTdHJpbmdzIl07CiAgICAgfQpAQCAtMzE0LDI0ICsyOTQsMTMg
QEAgc3RhdGljIE5TRGljdGlvbmFyeSAqc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVG
b3JDcml0ZXJpYShKU0NvbnRleHRSZWYgY28KIAogICAgIGlmIChzZWFyY2hTdHJpbmdzKSB7CiAg
ICAgICAgIE5TTXV0YWJsZUFycmF5ICpzZWFyY2hTdHJpbmdzUGFyYW1ldGVyID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5XTsKLSAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFy
Y2hTdHJpbmdzKSkgewotICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRv
cHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKSk7
Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAgICAgICBb
c2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0
cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5nLmdldCgpXV07Ci0gICAgICAgIH0gZWxzZSBpZiAo
SlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7CisgICAgICAgIGlmIChK
U1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpCisgICAgICAgICAgICBbc2Vh
cmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmcoY29udGV4dCwgc2VhcmNo
U3RyaW5ncyldOworICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJj
aFN0cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBu
dWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9
IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNWYWx1
ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwg
bnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUg
JiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVl
KSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIGF1
dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5
LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwotICAgICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJp
bmdzU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBh
ZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3Ry
aW5nLmdldCgpXV07Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hT
dHJpbmdzQXJyYXlMZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJy
YXkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NB
cnJheUxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVy
IGFkZE9iamVjdDp0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRl
eChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxwdHIpKV07CiAgICAgICAgIH0K
ICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OnNlYXJjaFN0cmluZ3NQ
YXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWFyY2hUZXh0U2VhcmNoU3RyaW5ncyJdOwogICAgIH0KQEAg
LTQwMSw3ICszNzAsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0hl
YWRlcnMoKSBjb25zdAogICAgIGlkIHZhbHVlID0gYXR0cmlidXRlVmFsdWUobV9lbGVtZW50Lmdl
dCgpLCBOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlKTsKICAgICBp
ZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKICAgICAgICAgZWxlbWVu
dHMgPSBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4odmFsdWUpOwot
ICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheTxSZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4+KGNvbnRleHQsIGVsZW1lbnRzKTsKKyAgICByZXR1cm4gbWFrZUpTQXJyYXko
Y29udGV4dCwgZWxlbWVudHMpOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKIH0KIApAQCAt
NDE1LDcgKzM4NCw3IEBAIEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1u
SGVhZGVycygpIGNvbnN0CiAgICAgaWQgdmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZShtX2VsZW1lbnQu
Z2V0KCksIE5TQWNjZXNzaWJpbGl0eUNvbHVtbkhlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGUpOwog
ICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQogICAgICAgICBl
bGVtZW50cyA9IG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pih2YWx1
ZSk7Ci0gICAgcmV0dXJuIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5PFJlZlB0cjxBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Pj4oY29udGV4dCwgZWxlbWVudHMpOworICAgIHJldHVybiBtYWtlSlNB
cnJheShjb250ZXh0LCBlbGVtZW50cyk7CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogfQog
ICAgIApAQCAtNjA3LDcgKzU3Niw3IEBAIEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dWlFbGVtZW50QXJyYXlBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyCiAKICAgICBW
ZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+PiBlbGVtZW50czsKICAgICBnZXRV
SUVsZW1lbnRzV2l0aEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGVsZW1lbnRzKTsKLSAgICByZXR1cm4g
Y29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
Pihjb250ZXh0LCBlbGVtZW50cyk7CisgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNvbnRleHQsIGVs
ZW1lbnRzKTsKIH0KIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnVpRWxlbWVudEF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0
ZSkgY29uc3QKQEAgLTk3Niw3ICs5NDUsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzU2VsZWN0ZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2Vs
ZWN0ZWRPcHRpb25BY3RpdmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEyMjksNyArMTE5Nyw3IEBAIEpTVmFsdWVSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VhcmNoVGV4dFdpdGhDcml0ZXJpYShKU0NvbnRleHRSZWYg
Y29udGV4dCwKICAgICBOU0RpY3Rpb25hcnkgKnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgPSBzZWFy
Y2hUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKGNvbnRleHQsIHNlYXJjaFN0
cmluZ3MsIHN0YXJ0RnJvbSwgZGlyZWN0aW9uKTsKICAgICBpZCByZXN1bHQgPSBbbV9lbGVtZW50
IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFYU2VhcmNoVGV4dFdpdGhDcml0ZXJpYSIg
Zm9yUGFyYW1ldGVyOnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdOwogICAgIGlmIChbcmVzdWx0IGlz
S2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRWZWN0
b3JUb09iamVjdEFycmF5PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPj4oY29u
dGV4dCwgbWFrZVZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4+KHJl
c3VsdCkpOworICAgICAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgbWFrZVZlY3RvcjxS
ZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4+KHJlc3VsdCkpOwogICAgIEVORF9B
WF9PQkpDX0VYQ0VQVElPTlMKIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtMTU0NiwxMyArMTUx
NCwxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5k
ZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
Y2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZG9jdW1lbnRFbmNvZGluZygpCkBAIC0xNTYyLDggKzE1MjgsNyBAQCBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiAg
ICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQogICAgICAgICBy
ZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJ
T05TCi0gICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4g
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKQEAgLTE1NzMsOCArMTUzOCw3IEBAIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgp
CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQogICAgICAg
ICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBFTkRfQVhfT0JKQ19FWENF
UFRJT05TCi0gICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1
cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnVybCgpCkBAIC0xNTgzLDcgKzE1NDcsNiBAQCBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkKICAgICBOU1VSTCAq
dXJsID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmls
aXR5VVJMQXR0cmlidXRlXTsKICAgICByZXR1cm4gW1t1cmwgYWJzb2x1dGVTdHJpbmddIGNyZWF0
ZUpTU3RyaW5nUmVmXTsgICAgCiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwotICAgIAogICAg
IHJldHVybiBudWxscHRyOwogfQogCkBAIC0xNjIyLDcgKzE1ODUsNiBAQCBib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKICAgICBCRUdJTl9BWF9PQkpDX0VY
Q0VQVElPTlMKICAgICByZXN1bHQgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0
ZVNldHRhYmxlOk5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdOwogICAgIEVORF9BWF9P
QkpDX0VYQ0VQVElPTlMKLSAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNjQ4LDE5
ICsxNjEwLDE2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFi
bGUoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbigpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTY3NSwxMyArMTYzNCwxMSBAQCBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0CiAKIGJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzTXVsdGlMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzE0LDE3ICsxNjcxLDE0IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKCkKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3Zl
U2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIC8vIFRleHQgbWFy
a2VycwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvVGVzdFJ1bm5lck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggNDAzZjRmZjgzMmVlMGVmN2MzY2ZhYmRmMGY4
N2UyY2NiZTYxNGY4YS4uYWRiYjRiN2I1ZDU0ZmIxNGE5YzRiZGU4YTkyMjc1ZjExYzE0MTZkOSAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVz
dFJ1bm5lck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9UZXN0UnVubmVyTWFjLm1tCkBAIC00NiwxNiArNDYsMTEgQEAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IFRlc3RSdW5uZXI6Omluc3BlY3RvclRlc3RTdHViVVJMKCkKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIHJldHVybiBudWxscHRyOwogI2Vsc2UKLSAgICBDRkJ1bmRsZVJl
ZiBpbnNwZWN0b3JCdW5kbGUgPSBDRkJ1bmRsZUdldEJ1bmRsZVdpdGhJZGVudGlmaWVyKENGU1RS
KCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiKSk7CisgICAgYXV0byBpbnNwZWN0b3JCdW5kbGUg
PSBDRkJ1bmRsZUdldEJ1bmRsZVdpdGhJZGVudGlmaWVyKENGU1RSKCJjb20uYXBwbGUuV2ViSW5z
cGVjdG9yVUkiKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JCdW5kbGUpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmwgPSBhZG9wdENGKENGQnVuZGxl
Q29weVJlc291cmNlVVJMKGluc3BlY3RvckJ1bmRsZSwgQ0ZTVFIoIlRlc3RTdHViIiksIENGU1RS
KCJodG1sIiksIE5VTEwpKTsKLSAgICBpZiAoIXVybCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBDRlN0cmluZ1JlZiB1cmxTdHJpbmcgPSBDRlVSTEdldFN0cmluZyh1cmwuZ2V0KCkp
OwotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyh1cmxTdHJpbmcp
KTsKKyAgICBhdXRvIHJlc291cmNlVVJMID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVS
TChpbnNwZWN0b3JCdW5kbGUsIENGU1RSKCJUZXN0U3R1YiIpLCBDRlNUUigiaHRtbCIpLCBOVUxM
KSk7CisgICAgcmV0dXJuIHJlc291cmNlVVJMID8gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ0ZT
dHJpbmcoQ0ZVUkxHZXRTdHJpbmcocmVzb3VyY2VVUkwuZ2V0KCkpKSkgOiBudWxscHRyOwogI2Vu
ZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rp
b25zLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCmluZGV4IDFi
YzA1YzBhNWYzYTgwNGMwYjE0MWI4OTY5MGI3NWQyNzcxMGU3NjEuLjY3ZjM5ZTY5ZjE1NDA4Yjky
ZWEzYWU5NDdjOWZhOTJmZWVhMTI4Y2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvU3RyaW5nRnVuY3Rpb25zLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdG
dW5jdGlvbnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFVu
aXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtMjQsMTUgKzI0LDEyIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBTdHJpbmdGdW5jdGlvbnNfaAotI2RlZmluZSBTdHJpbmdGdW5jdGlv
bnNfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlICJK
U0Jhc2ljcy5oIgogI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPFdl
YktpdC9XS1N0cmluZy5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1N0cmluZ1ByaXZhdGUuaD4KLSNp
bmNsdWRlIDxXZWJLaXQvV0tVUkwuaD4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHN0
cmluZz4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KQEAgLTQ0LDcgKzQxLDggQEAKIAogbmFt
ZXNwYWNlIFdUUiB7CiAKLS8vIENvbnZlcnNpb24gZnVuY3Rpb25zCitXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdG9XS1N0cmluZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOworV1RGOjpTdHJp
bmcgdG9XVEZTdHJpbmcoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAogaW5saW5lIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKEpTU3RyaW5nUmVmIHN0cmluZykKIHsKQEAgLTU2LDkg
KzU0LDE0IEBAIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4mIHN0cmluZykKICAgICByZXR1cm4gdG9XSyhzdHJpbmcuZ2V0
KCkpOwogfQogCitpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soY29uc3QgY2hh
ciogc3RyaW5nKQoreworICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHN0cmluZykpOworfQorCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRv
V0soY29uc3QgV1RGOjpTdHJpbmcmIHN0cmluZykKIHsKLSAgICByZXR1cm4gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAgIHJl
dHVybiB0b1dLKHN0cmluZy51dGY4KCkuZGF0YSgpKTsKIH0KIAogaW5saW5lIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiB0b0pTKFdLU3RyaW5nUmVmIHN0cmluZykKQEAgLTk5LDYgKzEwMiwyNSBA
QCBpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+JiBzdHJpbmcpCiAgICAgcmV0dXJuIHRvV1RGU3RyaW5nKHN0cmluZy5nZXQoKSk7CiB9
CiAKLX0gLy8gbmFtZXNwYWNlIFdUUgoraW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKEpT
U3RyaW5nUmVmIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9XVEZTdHJpbmcodG9XSyhzdHJpbmcp
KTsKK30KIAotI2VuZGlmIC8vIFN0cmluZ0Z1bmN0aW9uc19oCitpbmxpbmUgV1RGOjpTdHJpbmcg
dG9XVEZTdHJpbmcoY29uc3QgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+JiBzdHJpbmcpCit7Cisg
ICAgcmV0dXJuIHRvV1RGU3RyaW5nKHN0cmluZy5nZXQoKSk7Cit9CisKK2lubGluZSBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdG9XS1N0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1
ZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9XSyhjcmVhdGVKU1N0cmluZyhjb250ZXh0LCB2
YWx1ZSkuZ2V0KCkpOworfQorCitpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgLy8gRklYTUU6IENvdWxk
IG1ha2UgdGhpcyBlZmZpY2llbnQgYnkgdXNpbmcgdGhlIFdURlN0cmluZyBpbnNpZGUgT3BhcXVl
SlNTdHJpbmcgaWYgd2Ugd2FudGVkIHRvLgorICAgIHJldHVybiB0b1dURlN0cmluZyhjcmVhdGVK
U1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggMTM0NWM0MmMxMWU2MmRj
MDg4YzZmMmQzOGI5OWIwOTM1NjRlMDEzOC4uNzVkOWZiNjA0NDQxNDVmMWVjZGZhZWZkOTkwOGFh
ZTI2ODg1NGVmMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAK
QEAgLTI2LDEwICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RD
b250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVk
ZSAiRXZlbnRTZW5kZXJQcm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRl
ICJUZXN0SW52b2NhdGlvbi5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KQEAgLTQ5NCw4ICs0
OTQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjLCBjb25zdCBj
aGFyKiBhcmd2W10pCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbnN0YWxsTW9ja0dhbWVwYWRQ
cm92aWRlcigpOwogI2VuZGlmCiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFnZUdy
b3VwSWRlbnRpZmllciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldl
YktpdFRlc3RSdW5uZXJQYWdlR3JvdXAiKSk7Ci0gICAgbV9wYWdlR3JvdXAuYWRvcHQoV0tQYWdl
R3JvdXBDcmVhdGVXaXRoSWRlbnRpZmllcihwYWdlR3JvdXBJZGVudGlmaWVyLmdldCgpKSk7Cisg
ICAgbV9wYWdlR3JvdXAuYWRvcHQoV0tQYWdlR3JvdXBDcmVhdGVXaXRoSWRlbnRpZmllcih0b1dL
KCJXZWJLaXRUZXN0UnVubmVyUGFnZUdyb3VwIikuZ2V0KCkpKTsKIAogICAgIG1fZXZlbnRTZW5k
ZXJQcm94eSA9IG1ha2VVbmlxdWU8RXZlbnRTZW5kZXJQcm94eT4odGhpcyk7CiB9CkBAIC01MDcs
OSArNTA2LDkgQEAgV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gVGVzdENv
bnRyb2xsZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXQKICAgICBXS0NvbnRleHRDb25maWd1
cmF0aW9uU2V0RnVsbHlTeW5jaHJvbm91c01vZGVJc0FsbG93ZWRGb3JUZXN0aW5nKGNvbmZpZ3Vy
YXRpb24uZ2V0KCksIHRydWUpOwogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRJZ25vcmVT
eW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzRm9yVGVzdGluZyhjb25maWd1cmF0aW9uLmdldCgp
LCBvcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMpOwogCi0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG92ZXJyaWRlTGFuZ3VhZ2VzID0gYWRvcHRXSyhX
S011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIG92ZXJyaWRlTGFuZ3VhZ2VzID0gYWRv
cHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICBmb3IgKGF1dG8mIGxhbmd1YWdlIDog
b3B0aW9ucy5vdmVycmlkZUxhbmd1YWdlcykKLSAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0ob3Zl
cnJpZGVMYW5ndWFnZXMuZ2V0KCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcobGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKKyAgICAgICAgV0tBcnJheUFwcGVu
ZEl0ZW0ob3ZlcnJpZGVMYW5ndWFnZXMuZ2V0KCksIHRvV0sobGFuZ3VhZ2UpLmdldCgpKTsKICAg
ICBXS0NvbnRleHRDb25maWd1cmF0aW9uU2V0T3ZlcnJpZGVMYW5ndWFnZXMoY29uZmlndXJhdGlv
bi5nZXQoKSwgb3ZlcnJpZGVMYW5ndWFnZXMuZ2V0KCkpOwogCiAgICAgaWYgKG9wdGlvbnMuc2hv
dWxkRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSkgewpAQCAtODQzLDMxICs4NDIsMjQg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVl
cyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW8KICAgICBXS1ByZWZlcmVuY2VzUmVzZXRBbGxJbnRl
cm5hbERlYnVnRmVhdHVyZXMocHJlZmVyZW5jZXMpOwogCiAgICAgLy8gU2V0IGludGVybmFsIGZl
YXR1cmVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVmYXVsdCB2YWx1ZXMgZm9yIHRlc3RpbmcuCi0g
ICAgc3RhdGljIFdLU3RyaW5nUmVmIGFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdGZWF0dXJlID0gV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVk
Iik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZl
cmVuY2VzLCBmYWxzZSwgYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0ZlYXR1cmUpOwogCi0gICAgc3Rh
dGljIFdLU3RyaW5nUmVmIGFzeW5jRnJhbWVTY3JvbGxpbmdGZWF0dXJlID0gV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkFzeW5jRnJhbWVTY3JvbGxpbmdFbmFibGVkIik7Ci0gICAgV0tQ
cmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBmYWxz
ZSwgYXN5bmNGcmFtZVNjcm9sbGluZ0ZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRl
cm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgZmFsc2UsIHRvV0soIkFzeW5jT3Zl
cmZsb3dTY3JvbGxpbmdFbmFibGVkIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRl
cm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgZmFsc2UsIHRvV0soIkFzeW5jRnJh
bWVTY3JvbGxpbmdFbmFibGVkIikuZ2V0KCkpOwogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfREFU
RSkKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlRGF0ZUZlYXR1cmUgPSBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5wdXRUeXBlRGF0ZUVuYWJsZWQiKTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUs
IGlucHV0VHlwZURhdGVGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZURhdGVFbmFi
bGVkIikuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfREFURVRJTUVMT0NB
TCkKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlRGF0ZVRpbWVMb2NhbEZlYXR1cmUg
PSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5wdXRUeXBlRGF0ZVRpbWVMb2NhbEVu
YWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXko
cHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlwZURhdGVUaW1lTG9jYWxGZWF0dXJlKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRy
dWUsIHRvV0soIklucHV0VHlwZURhdGVUaW1lTG9jYWxFbmFibGVkIikuZ2V0KCkpOwogI2VuZGlm
CiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfTU9OVEgpCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGlu
cHV0VHlwZU1vbnRoRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1
dFR5cGVNb250aEVuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlwZU1vbnRoRmVhdHVyZSk7Cisg
ICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2Vz
LCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVNb250aEVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1dFR5
cGVUaW1lRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1dFR5cGVU
aW1lRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZv
cktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlVGltZUZlYXR1cmUpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwg
dG9XSygiSW5wdXRUeXBlVGltZUVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9XRUVLKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1dFR5cGVXZWVrRmVh
dHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1dFR5cGVXZWVrRW5hYmxl
ZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVm
ZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlV2Vla0ZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5w
dXRUeXBlV2Vla0VuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKIAogICAgIGZvciAoY29uc3QgYXV0
byYgaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgOiBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcykK
QEAgLTkyMCwyNSArOTEyLDE2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5j
ZXNUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvCiAgICAgV0tQcmVm
ZXJlbmNlc1NldFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUocHJlZmVyZW5jZXMs
IG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSk7CiAgICAgV0tQcmVm
ZXJlbmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQmFj
a0ZvcndhcmRDYWNoZSk7CiAKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgZGVmYXVsdFRleHRFbmNv
ZGluZyA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJU08tODg1OS0xIik7Ci0gICAg
V0tQcmVmZXJlbmNlc1NldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKHByZWZlcmVuY2VzLCBkZWZh
dWx0VGV4dEVuY29kaW5nKTsKLQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBzdGFuZGFyZEZvbnRG
YW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZXMiKTsKLSAgICBzdGF0
aWMgV0tTdHJpbmdSZWYgY3Vyc2l2ZUZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQXBwbGUgQ2hhbmNlcnkiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgZmFudGFz
eUZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGFweXJ1cyIpOwot
ICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBmaXhlZEZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ291cmllciIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBwaWN0b2dy
YXBoRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsZSBDb2xv
ciBFbW9qaSIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBzYW5zU2VyaWZGb250RmFtaWx5ID0g
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhlbHZldGljYSIpOwotICAgIHN0YXRpYyBX
S1N0cmluZ1JlZiBzZXJpZkZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVGltZXMiKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUo
cHJlZmVyZW5jZXMsIHRvV0soIklTTy04ODU5LTEiKS5nZXQoKSk7CiAKICAgICBXS1ByZWZlcmVu
Y2VzU2V0TWluaW11bUZvbnRTaXplKHByZWZlcmVuY2VzLCAwKTsKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0U3RhbmRhcmRGb250RmFtaWx5KHByZWZlcmVuY2VzLCBzdGFuZGFyZEZvbnRGYW1pbHkpOwot
ICAgIFdLUHJlZmVyZW5jZXNTZXRDdXJzaXZlRm9udEZhbWlseShwcmVmZXJlbmNlcywgY3Vyc2l2
ZUZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRGYW50YXN5Rm9udEZhbWlseShwcmVm
ZXJlbmNlcywgZmFudGFzeUZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRGaXhlZEZv
bnRGYW1pbHkocHJlZmVyZW5jZXMsIGZpeGVkRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldFBpY3RvZ3JhcGhGb250RmFtaWx5KHByZWZlcmVuY2VzLCBwaWN0b2dyYXBoRm9udEZhbWls
eSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFNhbnNTZXJpZkZvbnRGYW1pbHkocHJlZmVyZW5jZXMs
IHNhbnNTZXJpZkZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRTZXJpZkZvbnRGYW1p
bHkocHJlZmVyZW5jZXMsIHNlcmlmRm9udEZhbWlseSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFN0
YW5kYXJkRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiVGltZXMiKS5nZXQoKSk7CisgICAg
V0tQcmVmZXJlbmNlc1NldEN1cnNpdmVGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJBcHBs
ZSBDaGFuY2VyeSIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RmFudGFzeUZvbnRGYW1p
bHkocHJlZmVyZW5jZXMsIHRvV0soIlBhcHlydXMiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJlbmNl
c1NldEZpeGVkRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiQ291cmllciIpLmdldCgpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0UGljdG9ncmFwaEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRv
V0soIkFwcGxlIENvbG9yIEVtb2ppIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRTYW5z
U2VyaWZGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJIZWx2ZXRpY2EiKS5nZXQoKSk7Cisg
ICAgV0tQcmVmZXJlbmNlc1NldFNlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiVGlt
ZXMiKS5nZXQoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkK
ICAgICBXS1ByZWZlcmVuY2VzU2V0TWVkaWFTb3VyY2VFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVl
KTsKQEAgLTEwMTAsMzggKzk5MywyNyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRl
VG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogCiAgICAg
V0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50KG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgbnVsbHB0cik7
CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXNldCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiByZXNldE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIGF1dG8gcmVzZXRNZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzaG91bGRHQ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNob3VsZEdDIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gc2hvdWxkR0NW
YWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZ2NCZXR3ZWVuVGVzdHMpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCksIHNob3VsZEdDS2V5Lmdl
dCgpLCBzaG91bGRHQ1ZhbHVlLmdldCgpKTsKKyAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5
LCAiU2hvdWxkR0MiLCBtX2djQmV0d2VlblRlc3RzKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBhbGxvd2VkSG9zdHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJBbGxvd2VkSG9zdHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlS
ZWY+IGFsbG93ZWRIb3N0c1ZhbHVlID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsK
LSAgICBmb3IgKGF1dG8mIGhvc3QgOiBtX2FsbG93ZWRIb3N0cykgewotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gd2tIb3N0ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhob3N0LmNfc3RyKCkpKTsKLSAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oYWxsb3dl
ZEhvc3RzVmFsdWUuZ2V0KCksIHdrSG9zdC5nZXQoKSk7Ci0gICAgfQotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0ocmVzZXRNZXNzYWdlQm9keS5nZXQoKSwgYWxsb3dlZEhvc3RzS2V5LmdldCgpLCBh
bGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSk7CisgICAgYXV0byBhbGxvd2VkSG9zdHNWYWx1ZSA9IGFk
b3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgZm9yIChhdXRvJiBob3N0IDogbV9h
bGxvd2VkSG9zdHMpCisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKGFsbG93ZWRIb3N0c1ZhbHVl
LmdldCgpLCB0b1dLKGhvc3QuY19zdHIoKSkuZ2V0KCkpOworICAgIHNldFZhbHVlKHJlc2V0TWVz
c2FnZUJvZHksICJBbGxvd2VkSG9zdHMiLCBhbGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSk7CiAKICNp
ZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBheElzb2xhdGVkTW9kZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWUiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBheElzb2xhdGVkTW9kZVZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUobV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSkpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0ocmVzZXRNZXNzYWdlQm9keS5nZXQoKSwgYXhJc29sYXRlZE1vZGVLZXkuZ2V0KCks
IGF4SXNvbGF0ZWRNb2RlVmFsdWUuZ2V0KCkpOworICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJv
ZHksICJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIiwgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRU
cmVlTW9kZSk7CiAjZW5kaWYKLSAgICAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0
aCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSlNDT3B0aW9ucyIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGpzY09wdGlvbnNWYWx1ZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcob3B0aW9ucy5qc2NPcHRpb25zLmNfc3RyKCkp
KTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5LmdldCgpLCBq
c2NPcHRpb25zS2V5LmdldCgpLCBqc2NPcHRpb25zVmFsdWUuZ2V0KCkpOwotICAgIH0KKworICAg
IGlmIChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3RoKCkpCisgICAgICAgIHNldFZhbHVlKHJlc2V0
TWVzc2FnZUJvZHksICJKU0NPcHRpb25zIiwgb3B0aW9ucy5qc2NPcHRpb25zLmNfc3RyKCkpOwog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9y
dGVkSW1hZ2VUeXBlcy5jX3N0cigpKTsKICNlbmRpZgogCi0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygiUmVzZXQiKS5nZXQoKSwgcmVzZXRN
ZXNzYWdlQm9keS5nZXQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRTaG91bGRVc2VGb250U21vb3Ro
aW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsKIApAQCAt
MTIwMyw4ICsxMTc1LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlTGl2ZURvY3VtZW50
c0FmdGVyVGVzdCgpCiAKICAgICBBc3luY1Rhc2soW10oKSB7CiAgICAgICAgIC8vIEFmdGVyIGVh
Y2ggdGVzdCwgd2UgdXBkYXRlIHRoZSBsaXN0IG9mIGxpdmUgZG9jdW1lbnRzIHNvIHRoYXQgd2Ug
Y2FuIGRldGVjdCB3aGVuIGFuIGFiYW5kb25lZCBkb2N1bWVudCBmaXJzdCBzaG93ZWQgdXAuCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldExpdmVEb2N1bWVudHMiKSk7Ci0gICAgICAg
IFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7
CisgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKCJHZXRMaXZlRG9jdW1l
bnRzIikuZ2V0KCksIG51bGxwdHIpOwogICAgIH0sIDVfcykucnVuKCk7CiB9CiAKQEAgLTEyMTUs
OCArMTE4Niw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNoZWNrRm9yV29ybGRMZWFrcygpCiAK
ICAgICBBc3luY1Rhc2soW10oKSB7CiAgICAgICAgIC8vIFRoaXMgcnVucyBhdCB0aGUgZW5kIG9m
IGEgc2VyaWVzIG9mIHRlc3RzLiBJdCBjbGVhcnMgY2FjaGVzLCBydW5zIGEgR0MgYW5kIHRoZW4g
ZmV0Y2hlcyB0aGUgbGlzdCBvZiBkb2N1bWVudHMuCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkNoZWNrRm9yV29ybGRMZWFrcyIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIHRvV0soIkNoZWNrRm9yV29ybGRMZWFrcyIpLmdldCgpLCBudWxscHRy
KTsKICAgICB9LCAyMF9zKS5ydW4oKTsKIH0KIApAQCAtMTMyNCw2ICsxMjk0LDcgQEAgY29uc3Qg
Y2hhciogVGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9jZXNzTmFtZSgpCiB9CiAKICNpZiAhUExB
VEZPUk0oQ09DT0EpCisKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlKGJvb2wgYWxsb3dzKQogewogICAgIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGUgPSBh
bGxvd3M7CkBAIC0xNDAwLDggKzEzNzEsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQogCiBzdGF0aWMgc3RkOjpzdHJp
bmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChjb25zdCBzdGQ6OnN0
cmluZyYgdmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tVUkxSZWY+IGJhc2VVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJM
LmNfc3RyKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gcmVsYXRpdmVVUkwgPSBhZG9w
dFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIoKSkp
OworICAgIGF1dG8gYmFzZVVSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19z
dHIoKSkpOworICAgIGF1dG8gcmVsYXRpdmVVUkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJh
c2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIoKSkpOwogICAgIHJldHVybiB0b1NURChh
ZG9wdFdLKFdLVVJMQ29weVBhdGgocmVsYXRpdmVVUkwuZ2V0KCkpKSk7CiB9CiAKQEAgLTE0MTUs
OCArMTM4Niw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVRlc3RPcHRpb25zRnJvbVRlc3RIZWFkZXIo
VGVzdE9wdGlvbnMmIHRlc3RPcHRpb25zLCBjb25zdCBzdGQ6CiAgICAgc3RkOjpzdHJpbmcgZmls
ZW5hbWUgPSBhYnNvbHV0ZVBhdGg7CiAgICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpIHsKICAgICAg
ICAgLy8gR3Jvc3MuIE5lZWQgdG8gcmVkdWNlIGNvbnZlcnNpb25zIGJldHdlZW4gYWxsIHRoZSBz
dHJpbmcgdHlwZXMgYW5kIFVSTHMuCi0gICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VS
TCA9IGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpOwotICAgICAgICBm
aWxlbmFtZSA9IHRlc3RQYXRoKHdrVVJMLmdldCgpKTsKKyAgICAgICAgZmlsZW5hbWUgPSB0ZXN0
UGF0aChhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7CiAg
ICAgfQogCiAgICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpCkBAIC0xNjE1LDYgKzE1ODUsNyBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2Nh
dGlvbiYgdGVzdCkKIH0KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpICYmICFQTEFU
Rk9STShDT0NPQSkKKwogc3RydWN0IENvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrQ29udGV4
dCB7CiAgICAgZXhwbGljaXQgQ29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0KFRl
c3RDb250cm9sbGVyJiBjb250cm9sbGVyKQogICAgICAgICA6IHRlc3RDb250cm9sbGVyKGNvbnRy
b2xsZXIpCkBAIC0xNjQyLDE1ICsxNjEzLDkgQEAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnRlbnRF
eHRlbnNpb25KU09OUGF0aChXS1VSTFJlZiB1cmwpCiAgICAgaWYgKHBhdGgubGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybiBwYXRoICsgIi5qc29uIjsKIAotICAgIGF1dG8gcCA9IGFkb3B0V0soV0tV
UkxDb3B5UGF0aCh1cmwpKTsKLSAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6dmVjdG9yPGNoYXI+KFdL
U3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShwLmdldCgpKSk7Ci0gICAgY29uc3QgYXV0
byBsZW5ndGggPSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKHAuZ2V0KCksIGJ1ZmZlci5kYXRhKCks
IGJ1ZmZlci5zaXplKCkpOwotICAgIHJldHVybiBzdGQ6OnN0cmluZygiTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cyIpICsgc3RkOjpzdHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoIC0gMSkgKyAiLmpz
b24iOworICAgIHJldHVybiAiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cyIgKyB0b1NURChhZG9wdFdL
KFdLVVJMQ29weVBhdGgodXJsKSkuZ2V0KCkpICsgIi5qc29uIjsKIH0KLSNlbmRpZgogCi0jaWYg
IVBMQVRGT1JNKENPQ09BKQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB2b2lkIFRl
c3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0
SW52b2NhdGlvbiYgdGVzdCkKIHsKICAgICBjb25zdCBjaGFyKiBjb250ZW50RXh0ZW5zaW9uc1Bh
dGggPSBsaWJyYXJ5UGF0aEZvclRlc3RpbmcoKTsKQEAgLTE2NzAsMTMgKzE2MzUsMTMgQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3Qg
VGVzdEludm9jYXRpb24mIHRlc3QKICAgICB9CiAKICAgICBzdGQ6OnN0cmluZyBqc29uRmlsZUNv
bnRlbnRzIHtzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4oanNvbkZpbGUpLCBzdGQ6Omlz
dHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4oKX07Ci0gICAgYXV0byBqc29uU291cmNlID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhqc29uRmlsZUNvbnRlbnRzLmNfc3RyKCkp
KTsKKyAgICBhdXRvIGpzb25Tb3VyY2UgPSB0b1dLKGpzb25GaWxlQ29udGVudHMuY19zdHIoKSk7
CiAKLSAgICBhdXRvIHN0b3JlUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoY29udGVudEV4dGVuc2lvbnNQYXRoKSk7CisgICAgYXV0byBzdG9yZVBhdGggPSB0b1dL
KGNvbnRlbnRFeHRlbnNpb25zUGF0aCk7CiAgICAgYXV0byBleHRlbnNpb25TdG9yZSA9IGFkb3B0
V0soV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ3JlYXRlKHN0b3JlUGF0aC5nZXQoKSkpOwog
ICAgIEFTU0VSVChleHRlbnNpb25TdG9yZSk7CiAKLSAgICBhdXRvIGZpbHRlcklkZW50aWZpZXIg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXN0Q29udGVudEV4dGVu
c2lvbiIpKTsKKyAgICBhdXRvIGZpbHRlcklkZW50aWZpZXIgPSB0b1dLKCJUZXN0Q29udGVudEV4
dGVuc2lvbiIpOwogCiAgICAgQ29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0IGNv
bnRleHQoKnRoaXMpOwogICAgIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGUoZXh0
ZW5zaW9uU3RvcmUuZ2V0KCksIGZpbHRlcklkZW50aWZpZXIuZ2V0KCksIGpzb25Tb3VyY2UuZ2V0
KCksICZjb250ZXh0LCBjb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFjayk7CkBAIC0xNzAxLDE4
ICsxNjY2LDIyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2lvbnMo
KQogCiAgICAgV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZW1vdmVBbGxVc2VyQ29udGVudEZpbHRl
cnModXNlckNvbnRlbnRDb250cm9sbGVyKCkpOwogCi0gICAgYXV0byBzdG9yZVBhdGggPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnRlbnRFeHRlbnNpb25zUGF0aCkp
OworICAgIGF1dG8gc3RvcmVQYXRoID0gdG9XSyhjb250ZW50RXh0ZW5zaW9uc1BhdGgpOwogICAg
IGF1dG8gZXh0ZW5zaW9uU3RvcmUgPSBhZG9wdFdLKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUNyZWF0ZShzdG9yZVBhdGguZ2V0KCkpKTsKICAgICBBU1NFUlQoZXh0ZW5zaW9uU3RvcmUpOwog
Ci0gICAgYXV0byBmaWx0ZXJJZGVudGlmaWVyID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVGVzdENvbnRlbnRFeHRlbnNpb24iKSk7CisgICAgYXV0byBmaWx0ZXJJZGVu
dGlmaWVyID0gdG9XSygiVGVzdENvbnRlbnRFeHRlbnNpb24iKTsKIAogICAgIENvbnRlbnRFeHRl
bnNpb25TdG9yZUNhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKICAgICBXS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmUoZXh0ZW5zaW9uU3RvcmUuZ2V0KCksIGZpbHRlcklkZW50
aWZpZXIuZ2V0KCksICZjb250ZXh0LCBjb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFjayk7CiAg
ICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBub1RpbWVvdXQpOwogICAgIEFTU0VSVCghY29udGV4
dC5maWx0ZXIpOwogfQotI2Vsc2UgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2Vu
ZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpICYmICFQTEFURk9STShDT0NPQSkKKwor
I2lmICFFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCiB2b2lkIFRlc3RDb250cm9sbGVyOjpj
b25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYpCiB7
CiB9CkBAIC0xNzIwLDE0ICsxNjg5LDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3Vy
ZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJikKIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2lvbnMoKQogewogfQotI2VuZGlmIC8vIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQorCisj
ZW5kaWYgLy8gIUVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKIGNsYXNzIENvbW1hbmRUb2tl
bml6ZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IENvbW1hbmRUb2tlbml6ZXIoY29uc3Qgc3Rk
OjpzdHJpbmcmIGlucHV0KQogICAgICAgICA6IG1faW5wdXQoaW5wdXQpCi0gICAgICAgICwgbV9w
b3NOZXh0U2VwYXJhdG9yKDApCiAgICAgewogICAgICAgICBwdW1wKCk7CiAgICAgfQpAQCAtMTc0
MCw3ICsxNzA4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgY2hhciBrU2VwYXJhdG9y
ID0gJ1wnJzsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbV9pbnB1dDsKICAgICBzdGQ6OnN0cmlu
ZyBtX25leHQ7Ci0gICAgc2l6ZV90IG1fcG9zTmV4dFNlcGFyYXRvcjsKKyAgICBzaXplX3QgbV9w
b3NOZXh0U2VwYXJhdG9yIHsgMCB9OwogfTsKIAogdm9pZCBDb21tYW5kVG9rZW5pemVyOjpwdW1w
KCkKQEAgLTE4MTQsOCArMTc4Miw3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29u
c3QgY2hhciogaW5wdXRMaW5lKQogICAgIAogICAgIFRlc3RPcHRpb25zIG9wdGlvbnMgPSB0ZXN0
T3B0aW9uc0ZvclRlc3QoY29tbWFuZCk7CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tV
UkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwoY29tbWFuZC5wYXRoT3JVUkwuY19zdHIoKSkpOwot
ICAgIG1fY3VycmVudEludm9jYXRpb24gPSBtYWtlVW5pcXVlPFRlc3RJbnZvY2F0aW9uPih3a1VS
TC5nZXQoKSwgb3B0aW9ucyk7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IG1ha2VVbmlxdWU8
VGVzdEludm9jYXRpb24+KGFkb3B0V0soY3JlYXRlVGVzdFVSTChjb21tYW5kLnBhdGhPclVSTC5j
X3N0cigpKSkuZ2V0KCksIG9wdGlvbnMpOwogCiAgICAgaWYgKGNvbW1hbmQuc2hvdWxkRHVtcFBp
eGVscyB8fCBtX3Nob3VsZER1bXBQaXhlbHNGb3JBbGxUZXN0cykKICAgICAgICAgbV9jdXJyZW50
SW52b2NhdGlvbi0+c2V0SXNQaXhlbFRlc3QoY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CkBA
IC0xOTQ0LDE4ICsxOTExLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Z3B1UHJvY2Vzc0RpZENy
YXNoKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1Byb2Nlc3NJRCBwcm9jZXMKICAgICBzdGF0aWNf
Y2FzdDxUZXN0Q29udHJvbGxlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+Z3B1
UHJvY2Vzc0RpZENyYXNoKHByb2Nlc3NJRCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OmRp
ZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS0RpY3Rpb25hcnlSZWYg
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBib29sIHN5bmNocm9ub3VzKQordm9pZCBUZXN0Q29udHJv
bGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLRGljdGlv
bmFyeVJlZiBkaWN0aW9uYXJ5LCBib29sIHN5bmNocm9ub3VzKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBrZXlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJLZXkiKSk7Ci0gICAgV0tTdHJpbmdSZWYga2V5ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBrZXlL
ZXkuZ2V0KCkpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0g
ICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2FzdDxXS0V2ZW50TW9kaWZp
ZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9kaWZpZXJzS2V5LmdldCgp
KSkpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsb2NhdGlvbktleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxvY2F0aW9uIikpOwotICAgIHVuc2ln
bmVkIGxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBsb2NhdGlvbktleS5nZXQoKSkpKSk7Ci0KLSAgICBtX2V2ZW50U2VuZGVy
UHJveHktPmtleURvd24oa2V5LCBtb2RpZmllcnMsIGxvY2F0aW9uKTsKKyAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPmtleURvd24oc3RyaW5nVmFsdWUoZGljdGlvbmFyeSwgIktleSIpLCB1aW50NjRW
YWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJzIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJM
b2NhdGlvbiIpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUxpdmVEb2N1
bWVudHNMaXN0KFdLQXJyYXlSZWYgbGl2ZURvY3VtZW50TGlzdCkKQEAgLTE5NjQsMTggKzE5MjIs
OCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50c0xpc3QoV0tB
cnJheVJlZiBsaXZlRG9jdW1lbnRMaXN0KQogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgU3RyaW5n
PiBkb2N1bWVudEluZm87CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Eb2N1bWVudHM7
ICsraSkgewotICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChs
aXZlRG9jdW1lbnRMaXN0LCBpKTsKLSAgICAgICAgaWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRl
bSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpIHsKLSAgICAgICAgICAgIFdLRGljdGlvbmFy
eVJlZiBsaXZlRG9jdW1lbnRJdGVtID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihpdGVt
KTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlkS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaWQiKSk7Ci0gICAgICAgICAgICBXS1VJ
bnQ2NFJlZiBkb2N1bWVudElEID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobGl2ZURvY3VtZW50SXRlbSwgaWRLZXkuZ2V0KCkpKTsKLQotICAgICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoInVybCIpKTsKLSAgICAgICAgICAgIFdLU3RyaW5nUmVmIGRv
Y3VtZW50VVJMID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobGl2ZURvY3VtZW50SXRlbSwgdXJsS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgICAgIGRv
Y3VtZW50SW5mby5hZGQoV0tVSW50NjRHZXRWYWx1ZShkb2N1bWVudElEKSwgdG9XVEZTdHJpbmco
ZG9jdW1lbnRVUkwpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBkaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKFdLQXJyYXlHZXRJdGVtQXRJbmRleChsaXZlRG9jdW1lbnRMaXN0LCBp
KSkpCisgICAgICAgICAgICBkb2N1bWVudEluZm8uYWRkKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnks
ICJpZCIpLCB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAidXJsIikpKTsKICAg
ICB9CiAKICAgICBpZiAoIWRvY3VtZW50SW5mby5zaXplKCkpIHsKQEAgLTIwMDcsNjAgKzE5NTUs
MzUgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICAgICAgaWYgKG1fc3RhdGUgIT0gUnVu
bmluZ1Rlc3QpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN1Yk1lc3NhZ2UiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN1Yk1lc3NhZ2VOYW1lID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBzdWJNZXNzYWdlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSB8fCBX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VVcCIpKSB7
Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uIikpOwotICAgICAgICAgICAg
dW5zaWduZWQgYnV0dG9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25LZXkuZ2V0KCkpKSkpOworICAgICAgICBhdXRvIGRpY3Rp
b25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1Yk1l
c3NhZ2VOYW1lID0gc3RyaW5nVmFsdWUoZGljdGlvbmFyeSwgIlN1Yk1lc3NhZ2UiKTsKIAotICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICAgICAgICAg
IFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8V0tFdmVudE1vZGlmaWVy
cz4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vZGlmaWVyc0tleS5nZXQoKSkp
KSk7Ci0KLSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURv
d24iKSkKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRG93bihidXR0
b24sIG1vZGlmaWVycyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5tb3VzZVVwKGJ1dHRvbiwgbW9kaWZpZXJzKTsKKyAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSkg
eworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZURvd24odWludDY0VmFsdWUo
ZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJz
IikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKKyAgICAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsKKyAg
ICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VVcCh1aW50NjRWYWx1ZShkaWN0aW9u
YXJ5LCAiQnV0dG9uIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIktleURvd24iKSkgewotICAgICAgICAg
ICAgZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgZmFsc2UpOworICAgICAgICAgICAgZGlkUmVjZWl2ZUtleURvd25NZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlKGRpY3Rpb25hcnksIGZhbHNlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VTY3JvbGxCeSIpKSB7Ci0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlBy
b2Nlc3MKLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VTY3JvbGxCeSh4LCB5
KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VTY3JvbGxCeShkb3VibGVW
YWx1ZShkaWN0aW9uYXJ5LCAiWCIpLCBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VTY3JvbGxCeVdpdGhXaGVlbEFu
ZE1vbWVudHVtUGhhc2VzIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAg
ICAgICAgICAgIGRvdWJsZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJs
ZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhL
ZXkuZ2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIp
KTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBwaGFzZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlBoYXNlIikpOwotICAgICAgICAgICAgaW50IHBoYXNlID0gc3RhdGljX2Nhc3Q8aW50
PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGhhc2VLZXkuZ2V0KCkpKSkpOwot
ICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vbWVudHVtS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9tZW50dW0iKSk7Ci0gICAgICAgICAg
ICBpbnQgbW9tZW50dW0gPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBtb21lbnR1bUtleS5nZXQoKSkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcworICAgICAgICAgICAgYXV0byB4ID0gZG91Ymxl
VmFsdWUoZGljdGlvbmFyeSwgIlgiKTsKKyAgICAgICAgICAgIGF1dG8geSA9IGRvdWJsZVZhbHVl
KGRpY3Rpb25hcnksICJZIik7CisgICAgICAgICAgICBhdXRvIHBoYXNlID0gdWludDY0VmFsdWUo
ZGljdGlvbmFyeSwgIlBoYXNlIik7CisgICAgICAgICAgICBhdXRvIG1vbWVudHVtID0gdWludDY0
VmFsdWUoZGljdGlvbmFyeSwgIk1vbWVudHVtIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVy
UHJveHktPm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyh4LCB5LCBwaGFz
ZSwgbW9tZW50dW0pOwotCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjA4
Myw0MiArMjAwNiwyNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25v
dXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmCiAgICAgICAgIGlmIChtX3N0
YXRlICE9IFJ1bm5pbmdUZXN0KQogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KG51bGxwdHIpOwogCi0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAg
ICAgICBXS1N0cmluZ1JlZiBzdWJNZXNzYWdlTmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViTWVz
c2FnZUtleS5nZXQoKSkpOworICAgICAgICBhdXRvIGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFs
dWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1Yk1lc3NhZ2VOYW1lID0gc3RyaW5nVmFs
dWUoZGljdGlvbmFyeSwgIlN1Yk1lc3NhZ2UiKTsKIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIktleURvd24iKSkgewotICAgICAgICAg
ICAgZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgdHJ1ZSk7Ci0KKyAgICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3duTWVzc2Fn
ZUZyb21JbmplY3RlZEJ1bmRsZShkaWN0aW9uYXJ5LCB0cnVlKTsKICAgICAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VEb3duIikg
fHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlVXAi
KSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1dHRvbktleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbiIpKTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGJ1dHRvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdldFZh
bHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgYnV0dG9uS2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICAgICAgICAgIFdLRXZlbnRN
b2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8V0tFdmVudE1vZGlmaWVycz4oV0tVSW50
NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vZGlmaWVyc0tleS5nZXQoKSkpKSk7CisgICAg
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91
c2VEb3duIikpIHsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VEb3duKHVp
bnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwg
Ik1vZGlmaWVycyIpKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxs
cHRyKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlByb2Nlc3MK
LSAgICAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VO
YW1lLCAiTW91c2VEb3duIikpCi0gICAgICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5t
b3VzZURvd24oYnV0dG9uLCBtb2RpZmllcnMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VVcChidXR0b24sIG1vZGlmaWVycyk7Cisg
ICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAi
TW91c2VVcCIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlVXAodWlu
dDY0VmFsdWUoZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAi
TW9kaWZpZXJzIikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxw
dHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZU1vdmVUbyIpKSB7Ci0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlBy
b2Nlc3MKLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VNb3ZlVG8oeCwgeSk7
CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlTW92ZVRvKGRvdWJsZVZhbHVl
KGRpY3Rpb25hcnksICJYIiksIGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJZIikpOwogICAgICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKQEAg
LTIxNDQsODEgKzIwNTEsNDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNo
cm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZgogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUs
ICJNb3VzZUZvcmNlQ2hhbmdlZCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gZm9yY2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJG
b3JjZSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSBmb3JjZSA9IFdLRG91YmxlR2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBmb3JjZUtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgbV9ldmVudFNl
bmRlclByb3h5LT5tb3VzZUZvcmNlQ2hhbmdlZChmb3JjZSk7CisgICAgICAgICAgICBtX2V2ZW50
U2VuZGVyUHJveHktPm1vdXNlRm9yY2VDaGFuZ2VkKGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJG
b3JjZSIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsK
ICAgICAgICAgfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogICAgICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIkNvbnRpbnVvdXNNb3VzZVNj
cm9sbEJ5IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAg
IGRvdWJsZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkp
KSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJs
ZSB5ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0K
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYWdlZEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBhZ2VkIikpOwotICAgICAgICAgICAgYm9v
bCBwYWdlZCA9IHN0YXRpY19jYXN0PGJvb2w+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBwYWdlZEtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8gV2Vi
UHJvY2VzcworICAgICAgICAgICAgYXV0byB4ID0gZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgi
KTsKKyAgICAgICAgICAgIGF1dG8geSA9IGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJZIik7Cisg
ICAgICAgICAgICBhdXRvIHBhZ2VkID0gYm9vbGVhblZhbHVlKGRpY3Rpb25hcnksICJQYWdlZCIp
OwogICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5jb250aW51b3VzTW91c2VTY3JvbGxC
eSh4LCB5LCBwYWdlZCk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhzdWJNZXNzYWdlTmFtZSwgIkxlYXBGb3J3YXJkIikpIHsKLSAgICAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVGltZUluTWlsbGlzZWNvbmRzIikpOwotICAgICAgICAgICAgdW5zaWduZWQg
dGltZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgdGltZUtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94
eS0+bGVhcEZvcndhcmQodGltZSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmxl
YXBGb3J3YXJkKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJUaW1lSW5NaWxsaXNlY29uZHMiKSk7
CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAg
IH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiQWRkVG91Y2hQb2ludCIpKSB7Ci0gICAg
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBpbnQgeCA9IHN0YXRpY19j
YXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSkp
OwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgICAgICAgICBpbnQgeSA9
IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXku
Z2V0KCkpKSkpOwotCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmFkZFRvdWNoUG9p
bnQoeCwgeSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmFkZFRvdWNoUG9pbnQo
dWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlgiKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlki
KSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNz
YWdlTmFtZSwgIlVwZGF0ZVRvdWNoUG9pbnQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSW5kZXgiKSk7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpbmRleEtleS5nZXQoKSkpKSk7Ci0K
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGludCB4ID0gc3Rh
dGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQo
KSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGlu
dCB5ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
eUtleS5nZXQoKSkpKSk7Ci0KKyAgICAgICAgICAgIGF1dG8gaW5kZXggPSB1aW50NjRWYWx1ZShk
aWN0aW9uYXJ5LCAiSW5kZXgiKTsKKyAgICAgICAgICAgIGF1dG8geCA9IHVpbnQ2NFZhbHVlKGRp
Y3Rpb25hcnksICJYIik7CisgICAgICAgICAgICBhdXRvIHkgPSB1aW50NjRWYWx1ZShkaWN0aW9u
YXJ5LCAiWSIpOwogICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT51cGRhdGVUb3VjaFBv
aW50KGluZGV4LCB4LCB5KTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihu
dWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiU2V0VG91Y2hNb2RpZmllciIpKSB7Ci0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllciIpKTsKLSAgICAgICAgICAgIFdLRXZlbnRN
b2RpZmllcnMgbW9kaWZpZXIgPSBzdGF0aWNfY2FzdDxXS0V2ZW50TW9kaWZpZXJzPihXS1VJbnQ2
NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9kaWZpZXJLZXkuZ2V0KCkpKSkpOwotCi0gICAg
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRW5hYmxlIikpOwotICAgICAgICAgICAgYm9vbCBl
bmFibGUgPSBzdGF0aWNfY2FzdDxib29sPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgZW5hYmxlS2V5LmdldCgpKSkpKTsKLQorICAgICAgICAgICAgYXV0byBtb2RpZmllciA9IHVp
bnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllciIpOworICAgICAgICAgICAgYXV0byBlbmFi
bGUgPSBib29sZWFuVmFsdWUoZGljdGlvbmFyeSwgIkVuYWJsZSIpOwogICAgICAgICAgICAgbV9l
dmVudFNlbmRlclByb3h5LT5zZXRUb3VjaE1vZGlmaWVyKG1vZGlmaWVyLCBlbmFibGUpOwogICAg
ICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUs
ICJTZXRUb3VjaFBvaW50UmFkaXVzIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmFk
aXVzWCIpKTsKLSAgICAgICAgICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiUmFkaXVzWSIpKTsKLSAgICAgICAgICAgIGludCB5ID0gc3RhdGljX2Nhc3Q8
aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKSk7Ci0K
KyAgICAgICAgICAgIGF1dG8geCA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJSYWRpdXNYIik7
CisgICAgICAgICAgICBhdXRvIHkgPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiUmFkaXVzWSIp
OwogICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5zZXRUb3VjaFBvaW50UmFkaXVzKHgs
IHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAg
ICAgICB9CkBAIC0yMjQ5LDE2ICsyMTIzLDEyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJl
Y2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1l
c3NhZ2VOYW1lLCAiUmVsZWFzZVRvdWNoUG9pbnQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxp
bnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpbmRleEtleS5nZXQoKSkpKSk7
Ci0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnJlbGVhc2VUb3VjaFBvaW50KGluZGV4
KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+cmVsZWFzZVRvdWNoUG9pbnQodWlu
dDY0VmFsdWUoZGljdGlvbmFyeSwgIkluZGV4IikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJDYW5jZWxUb3VjaFBvaW50Iikp
IHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgICAgICAgICAg
aW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgaW5kZXhLZXkuZ2V0KCkpKSkpOwotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5
LT5jYW5jZWxUb3VjaFBvaW50KGluZGV4KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94
eS0+Y2FuY2VsVG91Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiSW5kZXgiKSk7CiAg
ICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0K
ICNlbmRpZgpAQCAtMjI3NSwxNCArMjE0NSwxNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRS
ZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmCiAg
ICAgfTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0QWx3YXlzQWNjZXB0Q29va2llcyIpKSB7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBhY2Nl
cHQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tI
VFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKGFjY2VwdCkg
PyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIDoga1dLSFRUUENvb2tpZUFjY2VwdFBv
bGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOworICAgICAgICBhdXRvIHBvbGljeSA9IFdL
Qm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKQor
ICAgICAgICAgICAgPyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzCisgICAgICAgICAg
ICA6IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsK
ICAgICAgICAgcmV0dXJuIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMi
KSkgewotICAgICAgICBXS0Jvb2xlYW5SZWYgYWNjZXB0ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xp
Y3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShhY2NlcHQpID8ga1dLSFRUUENvb2tpZUFjY2VwdFBvbGlj
eUV4Y2x1c2l2ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiA6IGtXS0hUVFBDb29raWVBY2NlcHRQ
b2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKKyAgICAgICAgYXV0byBwb2xpY3kgPSBX
S0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkK
KyAgICAgICAgICAgID8ga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1h
aW5Eb2N1bWVudERvbWFpbgorICAgICAgICAgICAgOiBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5
T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAgICAgICAgIHJldHVybiBzZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0K
IApAQCAtMjQwMywxMiArMjI3NSw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEJsb2NrQWxs
UGx1Z2lucyhib29sIHNob3VsZEJsb2NrKQogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGF1dG8g
cG9saWN5ID0gc2hvdWxkQmxvY2sgPyBrV0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5QmxvY2sgOiBr
V0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5QWxsb3c7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbmFtZU5ldHNjYXBlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbmFtZUZsYXNoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gZW1wdHlTdHJpbmcgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCIiKSk7Ci0gICAgV0tDb250ZXh0U2V0UGx1Z2luTG9hZENsaWVudFBvbGljeSht
X2NvbnRleHQuZ2V0KCksIHBvbGljeSwgZW1wdHlTdHJpbmcuZ2V0KCksIG5hbWVOZXRzY2FwZS5n
ZXQoKSwgZW1wdHlTdHJpbmcuZ2V0KCkpOwotICAgIFdLQ29udGV4dFNldFBsdWdpbkxvYWRDbGll
bnRQb2xpY3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ksIGVtcHR5U3RyaW5nLmdldCgpLCBuYW1l
Rmxhc2guZ2V0KCksIGVtcHR5U3RyaW5nLmdldCgpKTsKKyAgICBXS0NvbnRleHRTZXRQbHVnaW5M
b2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCB0b1dLKCIiKS5nZXQoKSwg
dG9XSygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdpbiIpLmdldCgpLCB0b1dLKCIiKS5nZXQo
KSk7CisgICAgV0tDb250ZXh0U2V0UGx1Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRleHQuZ2V0
KCksIHBvbGljeSwgdG9XSygiIikuZ2V0KCksIHRvV0soImNvbS5tYWNyb21lZGlhLkZsYXNoIFBs
YXllci5wbHVnaW4iKS5nZXQoKSwgdG9XSygiIikuZ2V0KCkpOwogI2VuZGlmCiB9CiAKQEAgLTI0
MjMsMjkgKzIyOTEsMjQgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luU3VwcG9ydGVk
TW9kZShjb25zdCBTdHJpbmcmIG1vZGUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBX
S1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gZW1wdHlBcnJheSA9IGFkb3B0V0soV0tNdXRh
YmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsbE9yaWdp
bnMgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNwZWNpZmljT3JpZ2luID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygibG9jYWxob3N0IikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBkZk5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJNeSBwZXJzb25hbCBQREYiKSk7Ci0gICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1f
Y29udGV4dC5nZXQoKSwgYWxsT3JpZ2lucy5nZXQoKSwgcGRmTmFtZS5nZXQoKSwgZW1wdHlBcnJh
eS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAgYXV0byBlbXB0eUFycmF5ID0gYWRvcHRX
SyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBuYW1lTmV0c2NhcGUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJj
b20uYXBwbGUudGVzdG5ldHNjYXBlcGx1Z2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtaW1lVHlwZU5ldHNjYXBlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2FwZSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS011dGFibGVBcnJheVJlZj4gbWltZVR5cGVzTmV0c2NhcGUgPSBhZG9wdFdLKFdLTXV0
YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1pbWVUeXBlc05ldHNj
YXBlLmdldCgpLCBtaW1lVHlwZU5ldHNjYXBlLmdldCgpKTsKKyAgICBXS0NvbnRleHRBZGRTdXBw
b3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCIiKS5nZXQoKSwgdG9XSygiTXkgcGVy
c29uYWwgUERGIikuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwog
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVQZGYgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXQgYnVpbHQtaW4gUERGIikpOworICAgIGF1dG8g
bmFtZU5ldHNjYXBlID0gdG9XSygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdpbiIpOworICAg
IGF1dG8gbWltZVR5cGVzTmV0c2NhcGUgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkp
OworICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCB0b1dLKCJh
cHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIikuZ2V0KCkpOworICAgIGF1dG8gbmFt
ZVBkZiA9IHRvV0soIldlYktpdCBidWlsdC1pbiBQREYiKTsKIAogICAgIGlmIChtX3Vuc3VwcG9y
dGVkUGx1Z2luTW9kZSA9PSAiYWxsT3JpZ2lucyIpIHsKLSAgICAgICAgV0tDb250ZXh0QWRkU3Vw
cG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgYWxsT3JpZ2lucy5nZXQoKSwgbmFtZU5ldHNj
YXBlLmdldCgpLCBtaW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7Ci0g
ICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIGFsbE9y
aWdpbnMuZ2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXku
Z2V0KCkpOworICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0Lmdl
dCgpLCB0b1dLKCIiKS5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBtaW1lVHlwZXNOZXRzY2Fw
ZS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRl
ZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBuYW1lUGRmLmdldCgpLCBl
bXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChtX3Vuc3VwcG9ydGVkUGx1Z2luTW9kZSA9PSAic3BlY2lmaWNPcmlnaW4i
KSB7Ci0gICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCks
IHNwZWNpZmljT3JpZ2luLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNj
YXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKLSAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9y
dGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgc3BlY2lmaWNPcmlnaW4uZ2V0KCksIG5hbWVQZGYu
Z2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAgICAgICBXS0Nv
bnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCJsb2NhbGhvc3Qi
KS5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBtaW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwgZW1w
dHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2Nv
bnRleHQuZ2V0KCksIHRvV0soImxvY2FsaG9zdCIpLmdldCgpLCBuYW1lUGRmLmdldCgpLCBlbXB0
eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IH0KQEAgLTI0OTEsMTQgKzIzNTQsMTIgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6Y2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShXS1BhZ2VSZWYgcGFnZSwgV0tQcm8KIHsKICAg
ICBpZiAobV9zaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKQog
ICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5vdXRwdXRUZXh0KCJjYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlXG4iKTsKLSAgICBXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRp
Y2F0aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRB
dXRoZW50aWNhdGlvblNjaGVtZShwcm90ZWN0aW9uU3BhY2UpOwotICAgIAotICAgIGlmIChhdXRo
ZW50aWNhdGlvblNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVt
ZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZCkgewotICAgICAgICBzdGQ6OnN0cmluZyBo
b3N0ID0gdG9TVEQoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rpb25T
cGFjZSkpLmdldCgpKTsKKyAgICBhdXRvIHNjaGVtZSA9IFdLUHJvdGVjdGlvblNwYWNlR2V0QXV0
aGVudGljYXRpb25TY2hlbWUocHJvdGVjdGlvblNwYWNlKTsKKyAgICBpZiAoc2NoZW1lID09IGtX
S1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9u
UmVxdWVzdGVkKSB7CisgICAgICAgIGF1dG8gaG9zdCA9IHRvU1REKGFkb3B0V0soV0tQcm90ZWN0
aW9uU3BhY2VDb3B5SG9zdChwcm90ZWN0aW9uU3BhY2UpKSk7CiAgICAgICAgIHJldHVybiBob3N0
ID09ICJsb2NhbGhvc3QiIHx8IGhvc3QgPT0gIjEyNy4wLjAuMSIgfHwgKG1fYWxsb3dBbnlIVFRQ
U0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzICYmIG1fYWxsb3dlZEhvc3RzLmZpbmQoaG9zdCkg
IT0gbV9hbGxvd2VkSG9zdHMuZW5kKCkpOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gYXV0aGVu
dGljYXRpb25TY2hlbWUgPD0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVI
VFRQRGlnZXN0IHx8IGF1dGhlbnRpY2F0aW9uU2NoZW1lID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1
dGhlbnRpY2F0aW9uU2NoZW1lT0F1dGg7CisgICAgcmV0dXJuIHNjaGVtZSA8PSBrV0tQcm90ZWN0
aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdlc3QgfHwgc2NoZW1lID09IGtXS1By
b3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lT0F1dGg7CiB9CiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24oV0tQYWdlUmVmIHBhZ2UsIFdLTmF2aWdhdGlv
blJlZiBuYXZpZ2F0aW9uKQpAQCAtMjUwNiw4ICsyMzY3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6ZGlkRmluaXNoTmF2aWdhdGlvbihXS1BhZ2VSZWYgcGFnZSwgV0tOYXZpZ2F0aW9uUmVmIG5h
dmlnYXQKICAgICBpZiAobV9zdGF0ZSAhPSBSZXNldHRpbmcpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTCA9IGFkb3B0V0soV0tGcmFtZUNvcHlVUkwo
V0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpKSk7Ci0gICAgaWYgKCFXS1VSTElzRXF1YWwod2tVUkwu
Z2V0KCksIGJsYW5rVVJMKCkpKQorICAgIGlmICghV0tVUkxJc0VxdWFsKGFkb3B0V0soV0tGcmFt
ZUNvcHlVUkwoV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpKSkuZ2V0KCksIGJsYW5rVVJMKCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX2RvbmVSZXNldHRpbmcgPSB0cnVlOwpAQCAtMjUyNyw3
ICsyMzg3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFdLUGFnZVJlZiBwYWdlLCBXS0F1dGhlbnQKICAgICAgICAgbV9zZXJ2ZXJUcnVz
dEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQrKzsKIAogICAgICAgICBpZiAobV9hbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tDcmVkZW50aWFs
UmVmPiBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRpYWxDcmVhdGUodG9XSygiYWNjZXB0
IHNlcnZlciB0cnVzdCIpLmdldCgpLCB0b1dLKCIiKS5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNp
c3RlbmNlTm9uZSkpOworICAgICAgICAgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0Ny
ZWRlbnRpYWxDcmVhdGUodG9XSygiYWNjZXB0IHNlcnZlciB0cnVzdCIpLmdldCgpLCB0b1dLKCIi
KS5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSkpOwogICAgICAgICAgICAgV0tB
dXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlzdGVu
ZXIsIGNyZWRlbnRpYWwuZ2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBA
IC0yNTQxLDkgKzI0MDEsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmIHBhZ2UsIFdLQXV0aGVudAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgc3RkOjpzdHJpbmcgaG9zdCA9IHRvU1REKGFkb3B0V0soV0tQcm90
ZWN0aW9uU3BhY2VDb3B5SG9zdChwcm90ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CisgICAgYXV0byBo
b3N0ID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3Rl
Y3Rpb25TcGFjZSkpLmdldCgpKTsKICAgICBpbnQgcG9ydCA9IFdLUHJvdGVjdGlvblNwYWNlR2V0
UG9ydChwcm90ZWN0aW9uU3BhY2UpOwotICAgIFN0cmluZyBtZXNzYWdlID0gbWFrZVN0cmluZyho
b3N0LmNfc3RyKCksICc6JywgcG9ydCwgIiAtIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSAtICIsIHRvU3RyaW5nKGF1dGhlbnRpY2F0aW9uU2NoZW1lKSwgIiAtICIpOworICAgIFN0
cmluZyBtZXNzYWdlID0gbWFrZVN0cmluZyhob3N0LCAnOicsIHBvcnQsICIgLSBkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UgLSAiLCB0b1N0cmluZyhhdXRoZW50aWNhdGlvblNjaGVt
ZSksICIgLSAiKTsKICAgICBpZiAoIW1faGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcykK
ICAgICAgICAgbWVzc2FnZS5hcHBlbmQoIlNpbXVsYXRpbmcgY2FuY2VsbGVkIGF1dGhlbnRpY2F0
aW9uIHNoZWV0XG4iKTsKICAgICBlbHNlCkBAIC0yNTU0LDEzICsyNDE0LDExIEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYg
cGFnZSwgV0tBdXRoZW50CiAgICAgICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVy
VXNlQ3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVyLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXNlcm5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1fYXV0aGVudGljYXRpb25Vc2VybmFtZS51dGY4KCku
ZGF0YSgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhc3N3b3JkID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhtX2F1dGhlbnRpY2F0aW9uUGFzc3dvcmQu
dXRmOCgpLmRhdGEoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLQ3JlZGVudGlhbFJlZj4gY3JlZGVu
dGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHVzZXJuYW1lLmdldCgpLCBwYXNzd29y
ZC5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbikpOworICAgIGF1dG8g
Y3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHRvV0sobV9hdXRoZW50aWNh
dGlvblVzZXJuYW1lKS5nZXQoKSwgdG9XSyhtX2F1dGhlbnRpY2F0aW9uUGFzc3dvcmQpLmdldCgp
LCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKSk7CiAgICAgV0tBdXRoZW50aWNh
dGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIGNyZWRl
bnRpYWwuZ2V0KCkpOwogfQogCi0gICAgCisKIC8vIFdLQ29udGV4dERvd25sb2FkQ2xpZW50CiAK
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmRvd25sb2FkRGlkU3RhcnQoV0tDb250ZXh0UmVmIGNvbnRl
eHQsIFdLRG93bmxvYWRSZWYgZG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0y
NzA0LDkgKzI1NjIsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24oYm9vbCBlbmFibGVkKQogICAgIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RJZlBvc3NpYmxlKCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwg
Ym9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwg
ZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwp
Cit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25h
bDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJs
ZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBtX2dlb2xvY2F0aW9uUHJvdmlkZXItPnNldFBvc2l0aW9u
KGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVk
ZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hl
YWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkLCBwcm92aWRlc0Zsb29yTGV2ZWws
IGZsb29yTGV2ZWwpOworICAgIG1fZ2VvbG9jYXRpb25Qcm92aWRlci0+c2V0UG9zaXRpb24obGF0
aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLCBhbHRpdHVkZUFjY3VyYWN5LCBo
ZWFkaW5nLCBzcGVlZCwgZmxvb3JMZXZlbCk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBlcnJv
ck1lc3NhZ2UpCkBAIC0yODU2LDkgKzI3MTQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpoYW5k
bGVDaGVja09mVXNlck1lZGlhUGVybWlzc2lvbkZvck9yaWdpbihXS0ZyYW1lUmVmIGZyYW1lLAog
ewogICAgIGF1dG8gb3JpZ2luSGFzaCA9IHVzZXJNZWRpYU9yaWdpbkhhc2godXNlck1lZGlhRG9j
dW1lbnRPcmlnaW4sIHRvcExldmVsRG9jdW1lbnRPcmlnaW4pOwogICAgIGF1dG8gc2FsdCA9IHNh
bHRGb3JPcmlnaW4oZnJhbWUsIG9yaWdpbkhhc2gpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzYWx0U3RyaW5nID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhz
YWx0LnV0ZjgoKS5kYXRhKCkpKTsKLQotICAgIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrU2V0
VXNlck1lZGlhQWNjZXNzSW5mbyhjaGVja1JlcXVlc3QsIHNhbHRTdHJpbmcuZ2V0KCksIHNldHRp
bmdzRm9yT3JpZ2luKG9yaWdpbkhhc2gpLnBlcnNpc3RlbnRQZXJtaXNzaW9uKCkpOworICAgIFdL
VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrU2V0VXNlck1lZGlhQWNjZXNzSW5mbyhjaGVja1JlcXVl
c3QsIHRvV0soc2FsdCkuZ2V0KCksIHNldHRpbmdzRm9yT3JpZ2luKG9yaWdpbkhhc2gpLnBlcnNp
c3RlbnRQZXJtaXNzaW9uKCkpOwogfQogCiBib29sIFRlc3RDb250cm9sbGVyOjpoYW5kbGVEZXZp
Y2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1JlcXVlc3QoV0tTZWN1cml0eU9yaWdpblJlZiBv
cmlnaW4pCkBAIC0yOTE0LDggKzI3NzAsOCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkZWNpZGVQ
b2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBXS1JldGFpblB0cjxXS0FycmF5UmVm
PiBhdWRpb0RldmljZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RB
dWRpb0RldmljZVVJRHMocmVxdWVzdCkpOwotICAgICAgICBXS1JldGFpblB0cjxXS0FycmF5UmVm
PiB2aWRlb0RldmljZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RW
aWRlb0RldmljZVVJRHMocmVxdWVzdCkpOworICAgICAgICBhdXRvIGF1ZGlvRGV2aWNlVUlEcyA9
IGFkb3B0V0soV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdEF1ZGlvRGV2aWNlVUlEcyhyZXF1
ZXN0KSk7CisgICAgICAgIGF1dG8gdmlkZW9EZXZpY2VVSURzID0gYWRvcHRXSyhXS1VzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0VmlkZW9EZXZpY2VVSURzKHJlcXVlc3QpKTsKIAogICAgICAgICBp
ZiAoIVdLQXJyYXlHZXRTaXplKHZpZGVvRGV2aWNlVUlEcy5nZXQoKSkgJiYgIVdLQXJyYXlHZXRT
aXplKGF1ZGlvRGV2aWNlVUlEcy5nZXQoKSkpIHsKICAgICAgICAgICAgIFdLVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3REZW55KHJlcXVlc3QsIGtXS05vQ29uc3RyYWludHMpOwpAQCAtMjkyNiwx
MyArMjc4MiwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkZWNpZGVQb2xpY3lGb3JVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKQogICAgICAgICBpZiAoV0tBcnJheUdldFNp
emUodmlkZW9EZXZpY2VVSURzLmdldCgpKSkKICAgICAgICAgICAgIHZpZGVvRGV2aWNlVUlEID0g
cmVpbnRlcnByZXRfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHZpZGVv
RGV2aWNlVUlEcy5nZXQoKSwgMCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2aWRlb0Rl
dmljZVVJRCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKyAg
ICAgICAgICAgIHZpZGVvRGV2aWNlVUlEID0gdG9XSygiIik7CiAKICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGF1ZGlvRGV2aWNlVUlEOwogICAgICAgICBpZiAoV0tBcnJheUdldFNp
emUoYXVkaW9EZXZpY2VVSURzLmdldCgpKSkKICAgICAgICAgICAgIGF1ZGlvRGV2aWNlVUlEID0g
cmVpbnRlcnByZXRfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGF1ZGlv
RGV2aWNlVUlEcy5nZXQoKSwgMCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhdWRpb0Rl
dmljZVVJRCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKyAg
ICAgICAgICAgIGF1ZGlvRGV2aWNlVUlEID0gdG9XSygiIik7CiAKICAgICAgICAgV0tVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdEFsbG93KHJlcXVlc3QsIGF1ZGlvRGV2aWNlVUlELmdldCgpLCB2
aWRlb0RldmljZVVJRC5nZXQoKSk7CiAgICAgfQpAQCAtMzA1NiwxMiArMjkxMiw5IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKFdLTmF2aWdhdGlv
bkRhdGFSZWYgbmF2aWdhdGlvCiAgICAgaWYgKCFtX3Nob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxs
YmFja3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFVSTAogICAgIGF1dG8gdXJsID0gYWRv
cHRXSyhXS05hdmlnYXRpb25EYXRhQ29weVVSTChuYXZpZ2F0aW9uRGF0YSkpOwogICAgIGF1dG8g
dXJsU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgp
KSkpOwotICAgIC8vIFRpdGxlCiAgICAgYXV0byB0aXRsZSA9IHRvV1RGU3RyaW5nKGFkb3B0V0so
V0tOYXZpZ2F0aW9uRGF0YUNvcHlUaXRsZShuYXZpZ2F0aW9uRGF0YSkpKTsKLSAgICAvLyBIVFRQ
IG1ldGhvZAogICAgIGF1dG8gcmVxdWVzdCA9IGFkb3B0V0soV0tOYXZpZ2F0aW9uRGF0YUNvcHlP
cmlnaW5hbFJlcXVlc3QobmF2aWdhdGlvbkRhdGEpKTsKICAgICBhdXRvIG1ldGhvZCA9IHRvV1RG
U3RyaW5nKGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdC5nZXQoKSkp
KTsKIApAQCAtMzIwNiw3ICszMDU5LDcgQEAgdm9pZCBnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmll
c0NhbGxiYWNrKHZvaWQqIHVzZXJEYXRhLCBXS0FycmF5UmVmIGRvbWFpbkxpc3QpCiAKICAgICBW
ZWN0b3I8U3RyaW5nPiByZXN1bHREb21haW5zOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBXS0FycmF5R2V0U2l6ZShkb21haW5MaXN0KTsgaSsrKSB7Ci0gICAgICAgIGF1dG8gZG9tYWlu
ID0gIHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChk
b21haW5MaXN0LCBpKSk7CisgICAgICAgIGF1dG8gZG9tYWluID0gcmVpbnRlcnByZXRfY2FzdDxX
S1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbkxpc3QsIGkpKTsKICAgICAg
ICAgYXV0byBidWZmZXIgPSBzdGQ6OnZlY3RvcjxjaGFyPihXS1N0cmluZ0dldE1heGltdW1VVEY4
Q1N0cmluZ1NpemUoZG9tYWluKSk7CiAgICAgICAgIGF1dG8gc3RyaW5nTGVuZ3RoID0gV0tTdHJp
bmdHZXRVVEY4Q1N0cmluZyhkb21haW4sIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwog
CkBAIC0zOTc4LDcgKzM4MzEsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZWluaXRpYWxpemVB
cHBCb3VuZERvbWFpbnMoKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQogewog
ICAgIEluQXBwQnJvd3NlclByaXZhY3lDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7Ci0g
ICAgV0tXZWJzaXRlRGF0YVN0b3JlVXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nl
c3MoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3RvcmUoKSwgYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhidW5kbGVJZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpKS5nZXQo
KSwgJmNvbnRleHQsIGluQXBwQnJvd3NlclByaXZhY3lWb2lkUmVzdWx0Q2FsbGJhY2spOworICAg
IFdLV2Vic2l0ZURhdGFTdG9yZVVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNz
KFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0b3JlKCksIHRvV0soYnVuZGxlSWRlbnRpZmll
cikuZ2V0KCksICZjb250ZXh0LCBpbkFwcEJyb3dzZXJQcml2YWN5Vm9pZFJlc3VsdENhbGxiYWNr
KTsKICAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5vVGltZW91dCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRleCBmOTRkNTdjMTQ3YjMxNmYwNzhmYTg1
ZjIyMGY0MDc2MDk0MTEzYzhjLi5mZjgzOTRlYzAzODc3YTZkYmMwZGM0YjNlNDhjMGVmNGYzZjNi
MzM5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC0xNDAsNyAr
MTQwLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIEdlb2xvY2F0aW9uLgogICAgIHZvaWQgc2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wpOwotICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJh
Y3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNI
ZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQs
IGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBz
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8
ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlv
bmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9p
ZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYg
ZXJyb3JNZXNzYWdlKTsKICAgICB2b2lkIGhhbmRsZUdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3QoV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmKTsKICAgICBib29sIGlzR2VvbG9j
YXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJ
bnZvY2F0aW9uLmNwcAppbmRleCBhNWI2ZGQwNTU4MGFlMGMyZDk1NzA3N2RmZTQ1MGE0ODZlNmQw
MWVjLi41MDEyN2Y2Nzg0MWUwM2M1NTY4ZTE5ZTk5MTE3OTdjOGZjMmQ2YjgyIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcApAQCAtMjcsOCArMjcsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCiAKKyNpbmNsdWRl
ICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0j
aW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJVSVNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1
cHBvcnQuaCIKQEAgLTY2LDIxICs2NiwxNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV1RSIHsKIAorc3RhdGljIHZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5h
bWUsIFdLVHlwZVJlZiBib2R5ID0gbnVsbHB0cikKK3sKKyAgICBXS1BhZ2VQb3N0TWVzc2FnZVRv
SW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgYm9keSk7Cit9CisKIFRlc3RJbnZvY2F0aW9uOjpU
ZXN0SW52b2NhdGlvbihXS1VSTFJlZiB1cmwsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQog
ICAgIDogbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX3VybCh1cmwpCiAgICAgLCBtX3dhaXRU
b0R1bXBXYXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRlc3RJbnZvY2F0aW9u
Ojp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhtX3VybC5nZXQoKSkp
OwotCi0gICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IFdLU3RyaW5nR2V0TGVuZ3RoKHVybFN0cmlu
Zy5nZXQoKSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gdXJsVmVjdG9yOwotICAgIHVybFZlY3Rvci5y
ZXNpemUoc3RyaW5nTGVuZ3RoICsgMSk7Ci0KLSAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKHVy
bFN0cmluZy5nZXQoKSwgdXJsVmVjdG9yLmRhdGEoKSwgc3RyaW5nTGVuZ3RoICsgMSk7Ci0KLSAg
ICBtX3VybFN0cmluZyA9IFN0cmluZyh1cmxWZWN0b3IuZGF0YSgpLCBzdHJpbmdMZW5ndGgpOwor
ICAgIG1fdXJsU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcobV91
cmwuZ2V0KCkpKS5nZXQoKSk7CiAKICAgICAvLyBGSVhNRTogQXZvaWQgbXV0YXRpbmcgdGhlIHNl
dHRpbmcgdmlhIGEgdGVzdCBkaXJlY3RvcnkgbGlrZSB0aGlzLgogICAgIG1fZHVtcEZyYW1lTG9h
ZENhbGxiYWNrcyA9IHVybENvbnRhaW5zKCJsb2FkaW5nLyIpICYmICF1cmxDb250YWlucygiOi8v
bG9jYWxob3N0Iik7CkBAIC0xMjksMjggKzEyNSwxMiBAQCBib29sIFRlc3RJbnZvY2F0aW9uOjpz
aG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKCkgY29uc3QKIAogV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gVGVzdEludm9jYXRpb246OmNyZWF0ZVRlc3RTZXR0aW5nc0Rp
Y3Rpb25hcnkoKQogewotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGJl
Z2luVGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVzZUZsZXhpYmxlVmlld3BvcnRLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVc2VGbGV4aWJsZVZpZXdw
b3J0IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gdXNlRmxleGlibGVWaWV3cG9y
dFZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUob3B0aW9ucygpLnVzZUZsZXhpYmxlVmll
d3BvcnQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5Lmdl
dCgpLCB1c2VGbGV4aWJsZVZpZXdwb3J0S2V5LmdldCgpLCB1c2VGbGV4aWJsZVZpZXdwb3J0VmFs
dWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGR1bXBQaXhlbHNLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wUGl4ZWxzIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZHVtcFBpeGVsc1ZhbHVlID0gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUobV9kdW1wUGl4ZWxzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShi
ZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgZHVtcFBpeGVsc0tleS5nZXQoKSwgZHVtcFBpeGVs
c1ZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lb3V0S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZW91dCIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gdGltZW91dFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShtX3RpbWVvdXQubWlsbGlzZWNvbmRzKCkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCB0aW1lb3V0S2V5LmdldCgpLCB0aW1lb3V0
VmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGR1bXBKU0NvbnNv
bGVMb2dJblN0ZEVycktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5S
ZWY+IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyclZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUobV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJLZXku
Z2V0KCksIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyclZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0tleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlc1ZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhvcHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSkpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIGFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzS2V5LmdldCgpLCBhZGRpdGlvbmFsU3VwcG9ydGVkSW1h
Z2VUeXBlc1ZhbHVlLmdldCgpKTsKLQorICAgIGF1dG8gYmVnaW5UZXN0TWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYmVnaW5U
ZXN0TWVzc2FnZUJvZHksICJVc2VGbGV4aWJsZVZpZXdwb3J0Iiwgb3B0aW9ucygpLnVzZUZsZXhp
YmxlVmlld3BvcnQpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiRHVtcFBp
eGVscyIsIG1fZHVtcFBpeGVscyk7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHks
ICJUaW1lb3V0Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdGltZW91dC5taWxsaXNlY29uZHMo
KSkpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiRHVtcEpTQ29uc29sZUxv
Z0luU3RkRXJyIiwgbV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOworICAgIHNldFZhbHVlKGJl
Z2luVGVzdE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCBvcHRp
b25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7CiAgICAgcmV0dXJu
IGJlZ2luVGVzdE1lc3NhZ2VCb2R5OwogfQogCkBAIC0xNjgsOSArMTQ4LDcgQEAgdm9pZCBUZXN0
SW52b2NhdGlvbjo6aW52b2tlKCkKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2xlYXIgb3V0
IHZpc2l0ZWQgbGlua3MgaGVyZS4KIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJlZ2luVGVz
dCIpKTsKLSAgICBhdXRvIGJlZ2luVGVzdE1lc3NhZ2VCb2R5ID0gY3JlYXRlVGVzdFNldHRpbmdz
RGljdGlvbmFyeSgpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiQmVnaW5UZXN0IiwgY3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpLmdldCgpKTsKIAog
ICAgIG1fc3RhcnRlZFRlc3RpbmcgPSB0cnVlOwogCkBAIC0zMjcsMTg1ICszMDUsMTA0IEBAIHZv
aWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdL
U3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBY2siKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0
cmluZ1JlZiBtZXNzYWdlQm9keVN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VCb2R5U3RyaW5nLCAiQmVnaW5UZXN0IikpIHsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpLCAiQmVnaW5UZXN0IikpIHsK
ICAgICAgICAgICAgIG1fZ290SW5pdGlhbFJlc3BvbnNlID0gdHJ1ZTsKICAgICAgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ub3RpZnlEb25lKCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRvbmUi
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlv
bmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdElzUGVuZGluZ0tleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0SXNQZW5k
aW5nIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBwaXhlbFJlc3VsdElzUGVuZGluZ0tleS5nZXQoKSkpOwotICAgICAgICBt
X3BpeGVsUmVzdWx0SXNQZW5kaW5nID0gV0tCb29sZWFuR2V0VmFsdWUocGl4ZWxSZXN1bHRJc1Bl
bmRpbmcpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFy
eVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgbV9waXhlbFJlc3VsdElzUGVuZGluZyA9IGJv
b2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJQaXhlbFJlc3VsdElzUGVuZGluZyIp
OwogICAgICAgICBpZiAoIW1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpIHsKLSAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0IikpOwotICAgICAgICAgICAgbV9waXhl
bFJlc3VsdCA9IHN0YXRpY19jYXN0PFdLSW1hZ2VSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwaXhlbFJlc3VsdEtleS5nZXQoKSkpOworICAgICAg
ICAgICAgbV9waXhlbFJlc3VsdCA9IHN0YXRpY19jYXN0PFdLSW1hZ2VSZWY+KHZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIlBpeGVsUmVzdWx0IikpOwogICAgICAgICAgICAgQVNTRVJUKCFt
X3BpeGVsUmVzdWx0IHx8IG1fZHVtcFBpeGVscyk7CiAgICAgICAgIH0KLQotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcmVwYWludFJlY3RzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVwYWludFJlY3RzIikpOwotICAgICAgICBtX3JlcGFpbnRS
ZWN0cyA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCByZXBhaW50UmVjdHNLZXkuZ2V0KCkpKTsKLQotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9SZXN1bHRLZXkgPSAgYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXVkaW9SZXN1bHQiKSk7Ci0gICAgICAgIG1fYXVk
aW9SZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0RhdGFSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhdWRpb1Jlc3VsdEtleS5nZXQoKSkpOwotCisgICAg
ICAgIG1fcmVwYWludFJlY3RzID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4odmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiUmVwYWludFJlY3RzIikpOworICAgICAgICBtX2F1ZGlvUmVzdWx0
ID0gc3RhdGljX2Nhc3Q8V0tEYXRhUmVmPih2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJB
dWRpb1Jlc3VsdCIpKTsKICAgICAgICAgZG9uZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJUZXh0
T3V0cHV0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdGV4dE91dHB1dCA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIG1fdGV4dE91dHB1
dC5hcHBlbmQodG9XVEZTdHJpbmcodGV4dE91dHB1dCkpOworICAgICAgICBtX3RleHRPdXRwdXQu
YXBwZW5kKHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJEdW1wVG9TdGRFcnIiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1Jl
ZiB0ZXh0T3V0cHV0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIHRvV1RGU3RyaW5nKHRleHRPdXRwdXQpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgdG9XVEZTdHJpbmcoc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHkpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiQmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIGJlZm9yZVVubG9hZFJldHVyblZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRC
ZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShXS0Jvb2xlYW5HZXRWYWx1ZShiZWZvcmVVbmxvYWRSZXR1
cm5WYWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QmVmb3Jl
VW5sb2FkUmV0dXJuVmFsdWUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJBZGRDaHJvbWVJbnB1dEZpZWxkIikpIHsKICAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPmFkZENocm9tZUlucHV0RmllbGQoKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbEFkZENocm9tZUlucHV0RmllbGRDYWxs
YmFjayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCAwKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsQWRkQ2hyb21lSW5wdXRG
aWVsZENhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlbW92ZUNocm9tZUlucHV0Rmll
bGQiKSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDYWxsUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrIikpOwotICAgICAgICBXS1BhZ2VQ
b3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBwb3N0
UGFnZU1lc3NhZ2UoIkNhbGxSZW1vdmVDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkZvY3VzV2ViVmlldyIpKSB7CiAgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5tYWtlV2ViVmlld0ZpcnN0UmVzcG9uZGVy
KCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxGb2N1c1dlYlZpZXdDYWxsYmFj
ayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCAwKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRm9jdXNXZWJWaWV3Q2FsbGJh
Y2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QmFja2luZ1NjYWxlRmFjdG9yIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJ
RCgpKTsKLSAgICAgICAgZG91YmxlIGJhY2tpbmdTY2FsZUZhY3RvciA9IFdLRG91YmxlR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFdLUGFn
ZVNldEN1c3RvbUJhY2tpbmdTY2FsZUZhY3RvcihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBiYWNraW5nU2NhbGVGYWN0b3IpOwotCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkNhbGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjayIpKTsK
LSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAw
KTsKKyAgICAgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9yKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGRvdWJsZVZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbFNldEJhY2tpbmdTY2FsZUZh
Y3RvckNhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNpbXVsYXRlV2ViTm90aWZpY2F0
aW9uQ2xpY2siKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRfdCBub3RpZmljYXRpb25JRCA9
IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7
CisgICAgICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0gdWludDY0VmFsdWUobWVzc2FnZUJv
ZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2ltdWxhdGVXZWJOb3Rp
ZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFk
ZHNWaXNpdGVkTGlua3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGVuYWJs
ZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBX
S1BhZ2VTZXRBZGRzVmlzaXRlZExpbmtzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSykpOworICAgICAg
ICBXS1BhZ2VTZXRBZGRzVmlzaXRlZExpbmtzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRHZW9sb2NhdGlvblBlcm1pc3Npb24iKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uKFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSykpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJv
b2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxhdGl0dWRl
S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsYXRpdHVkZSIp
KTsKLSAgICAgICAgV0tEb3VibGVSZWYgbGF0aXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdLRG91Ymxl
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbGF0
aXR1ZGVLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgbGF0aXR1ZGUgPSBXS0RvdWJsZUdl
dFZhbHVlKGxhdGl0dWRlV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBs
b25naXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxv
bmdpdHVkZSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgbG9uZ2l0dWRlV0sgPSBzdGF0aWNfY2Fz
dDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGxvbmdpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBsb25naXR1ZGUg
PSBXS0RvdWJsZUdldFZhbHVlKGxvbmdpdHVkZVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gYWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImFjY3VyYWN5IikpOwotICAgICAgICBXS0RvdWJsZVJlZiBhY2N1cmFjeVdLID0g
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBhY2N1cmFjeUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBh
Y2N1cmFjeSA9IFdLRG91YmxlR2V0VmFsdWUoYWNjdXJhY3lXSyk7Ci0KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1ZGUiKSk7Ci0gICAgICAgIFdL
Qm9vbGVhblJlZiBwcm92aWRlc0FsdGl0dWRlV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRl
c0FsdGl0dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlID0g
V0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNBbHRpdHVkZVdLKTsKLQotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gYWx0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImFsdGl0dWRlIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBhbHRpdHVk
ZVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhbHRpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRv
dWJsZSBhbHRpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUoYWx0aXR1ZGVXSyk7Ci0KLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeUtleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNBbHRpdHVkZUFj
Y3VyYWN5IikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5
V0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lLZXlXSy5nZXQo
KSkpOwotICAgICAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSA9IFdLQm9vbGVhbkdl
dFZhbHVlKHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLKTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gYWx0aXR1ZGVBY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICAgICAgV0tEb3Vi
bGVSZWYgYWx0aXR1ZGVBY2N1cmFjeVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhbHRpdHVkZUFjY3Vy
YWN5S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3kgPSBXS0Rv
dWJsZUdldFZhbHVlKGFsdGl0dWRlQWNjdXJhY3lXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHByb3ZpZGVzSGVhZGluZ0tleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNIZWFkaW5nIikpOwotICAgICAgICBXS0Jvb2xlYW5S
ZWYgcHJvdmlkZXNIZWFkaW5nV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc0hlYWRpbmdL
ZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzSGVhZGluZyA9IFdLQm9vbGVhbkdl
dFZhbHVlKHByb3ZpZGVzSGVhZGluZ1dLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gaGVhZGluZ0tleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiaGVhZGluZyIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgaGVhZGluZ1dLID0gc3RhdGljX2Nh
c3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBoZWFkaW5nS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGhlYWRpbmcgPSBX
S0RvdWJsZUdldFZhbHVlKGhlYWRpbmdXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHByb3ZpZGVzU3BlZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoInByb3ZpZGVzU3BlZWQiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwcm92aWRl
c1NwZWVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc1NwZWVkS2V5V0suZ2V0KCkpKTsK
LSAgICAgICAgYm9vbCBwcm92aWRlc1NwZWVkID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNT
cGVlZFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3BlZWRLZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInNwZWVkIikpOwotICAgICAg
ICBXS0RvdWJsZVJlZiBzcGVlZFdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzcGVlZEtleVdLLmdldCgp
KSk7Ci0gICAgICAgIGRvdWJsZSBzcGVlZCA9IFdLRG91YmxlR2V0VmFsdWUoc3BlZWRXSyk7Ci0K
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzRmxvb3JMZXZlbEtleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNGbG9vckxl
dmVsIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNGbG9vckxldmVsV0sgPSBzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBwcm92aWRlc0Zsb29yTGV2ZWxLZXlXSy5nZXQoKSkpOwotICAgICAgICBi
b29sIHByb3ZpZGVzRmxvb3JMZXZlbCA9IFdLQm9vbGVhbkdldFZhbHVlKHByb3ZpZGVzRmxvb3JM
ZXZlbFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmxvb3JMZXZlbEtl
eVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZmxvb3JMZXZlbCIp
KTsKLSAgICAgICAgV0tEb3VibGVSZWYgZmxvb3JMZXZlbFdLID0gc3RhdGljX2Nhc3Q8V0tEb3Vi
bGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBm
bG9vckxldmVsS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGZsb29yTGV2ZWwgPSBXS0Rv
dWJsZUdldFZhbHVlKGZsb29yTGV2ZWxXSyk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUs
IGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZUFj
Y3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3Zp
ZGVzU3BlZWQsIHNwZWVkLCBwcm92aWRlc0Zsb29yTGV2ZWwsIGZsb29yTGV2ZWwpOworICAgICAg
ICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gbGF0aXR1ZGUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJsYXRpdHVkZSIpOworICAgICAgICBhdXRvIGxvbmdpdHVkZSA9IGRvdWJsZVZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImxvbmdpdHVkZSIpOworICAgICAgICBhdXRvIGFjY3Vy
YWN5ID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiYWNjdXJhY3kiKTsKKyAg
ICAgICAgYXV0byBhbHRpdHVkZSA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiYWx0aXR1ZGUiKTsKKyAgICAgICAgYXV0byBhbHRpdHVkZUFjY3VyYWN5ID0gb3B0
aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJhbHRpdHVkZUFjY3VyYWN5
Iik7CisgICAgICAgIGF1dG8gaGVhZGluZyA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiaGVhZGluZyIpOworICAgICAgICBhdXRvIHNwZWVkID0gb3B0aW9uYWxE
b3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJzcGVlZCIpOworICAgICAgICBhdXRv
IGZsb29yTGV2ZWwgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
ImZsb29yTGV2ZWwiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBhbHRp
dHVkZSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQsIGZsb29yTGV2ZWwpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJy
b3IiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3Ry
aW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBl
cnJvck1lc3NhZ2UgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxl
RXJyb3IoZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlck1lZGlhUGVy
bWlzc2lvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKFdLQm9vbGVhbkdldFZh
bHVlKGVuYWJsZWRXSykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
VXNlck1lZGlhUGVybWlzc2lvbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtNTE1LDExNyArNDEyLDY2IEBAIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3Nh
Z2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbiIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBlcm1pc3Npb25LZXlXSyA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBlcm1pc3Npb24iKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiBwZXJtaXNzaW9uV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwZXJtaXNzaW9uS2V5V0su
Z2V0KCkpKTsKLSAgICAgICAgYm9vbCBwZXJtaXNzaW9uID0gV0tCb29sZWFuR2V0VmFsdWUocGVy
bWlzc2lvbldLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAg
ICAgICBXS1N0cmluZ1JlZiBvcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgb3JpZ2luS2V5Lmdl
dCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHBhcmVudE9yaWdpbktleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBwZXJt
aXNzaW9uID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgInBlcm1pc3Npb24i
KTsKKyAgICAgICAgYXV0byBvcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIm9yaWdpbiIpOworICAgICAgICBhdXRvIHBhcmVudE9yaWdpbldLID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGFyZW50T3JpZ2luIik7CiAgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZv
ck9yaWdpbihwZXJtaXNzaW9uLCBvcmlnaW5XSywgcGFyZW50T3JpZ2luV0spOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4i
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlv
bmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IG9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBvcmlnaW5LZXkuZ2V0KCkpKTsKLQotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgICAgICBXS1N0
cmluZ1JlZiBwYXJlbnRPcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGFyZW50T3JpZ2luS2V5
LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gb3JpZ2luV0sgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJvcmlnaW4iKTsKKyAgICAgICAgYXV0
byBwYXJlbnRPcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgInBh
cmVudE9yaWdpbiIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVzZXRV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKG9yaWdpbldLLCBwYXJlbnRP
cmlnaW5XSyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEN1c3RvbVBvbGljeURlbGVnYXRlIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25h
cnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlZEtleVdLID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZW5hYmxlZCIpKTsKLSAgICAgICAgV0tCb29sZWFu
UmVmIGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGVuYWJsZWRLZXlXSy5nZXQoKSkpOwot
ICAgICAgICBib29sIGVuYWJsZWQgPSBXS0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVkV0spOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJtaXNzaXZlS2V5V0sgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwZXJtaXNzaXZlIikpOwotICAgICAgICBX
S0Jvb2xlYW5SZWYgcGVybWlzc2l2ZVdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGVybWlzc2l2ZUtl
eVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcGVybWlzc2l2ZSA9IFdLQm9vbGVhbkdldFZhbHVl
KHBlcm1pc3NpdmVXSyk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGVuYWJsZWQgPSBib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiZW5hYmxlZCIpOworICAgICAgICBhdXRv
IHBlcm1pc3NpdmUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGVybWlz
c2l2ZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0Q3VzdG9tUG9s
aWN5RGVsZWdhdGUoZW5hYmxlZCwgcGVybWlzc2l2ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dEhpZGRlbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzSW5pdGlhbEtleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGlkZGVuIikpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgaGlkZGVuV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc0luaXRpYWxLZXlX
Sy5nZXQoKSkpOwotICAgICAgICBib29sIGhpZGRlbiA9IFdLQm9vbGVhbkdldFZhbHVlKGhpZGRl
bldLKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGhp
ZGRlbik7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZh
bHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dEhpZGRlbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiaGlkZGVuIikpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJQcm9jZXNzV29ya1F1ZXVlIikpIHsKLSAgICAgICAgaWYgKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucHJvY2Vzc1dvcmtR
dWV1ZSgpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXb3JrUXVldWVQcm9j
ZXNzZWRDYWxsYmFjayIpKTsKLSAgICAgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3Rl
ZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucHJvY2Vzc1dvcmtRdWV1ZSgp
KQorICAgICAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJXb3JrUXVldWVQcm9jZXNzZWRDYWxsYmFj
ayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUJhY2tOYXZpZ2F0aW9uIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgp
KTsKLSAgICAgICAgdWludDY0X3Qgc3RlcENvdW50ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUJhY2tOYXZpZ2F0aW9uKHN0ZXBD
b3VudCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5h
Z2VyKCkucXVldWVCYWNrTmF2aWdhdGlvbih1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJRdWV1ZUZvcndhcmROYXZpZ2F0aW9uIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAg
ICAgICAgdWludDY0X3Qgc3RlcENvdW50ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHN0ZXBDb3Vu
dCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2Vy
KCkucXVldWVGb3J3YXJkTmF2aWdhdGlvbih1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJRdWV1ZUxvYWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tE
aWN0aW9uYXJ5UmVmIGxvYWREYXRhRGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1
cmxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1cmwiKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIHVybFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCB1cmxLZXkuZ2V0KCkpKTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGFyZ2V0S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidGFyZ2V0IikpOwotICAgICAgICBXS1N0cmlu
Z1JlZiB0YXJnZXRXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgdGFyZ2V0S2V5LmdldCgpKSk7Ci0KLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzaG91bGRPcGVuRXh0ZXJuYWxV
UkxzIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1ZhbHVl
V0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bG9hZERhdGFEaWN0aW9uYXJ5LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzS2V5LmdldCgpKSk7Ci0K
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5x
dWV1ZUxvYWQodG9XVEZTdHJpbmcodXJsV0spLCB0b1dURlN0cmluZyh0YXJnZXRXSyksIFdLQm9v
bGVhbkdldFZhbHVlKHNob3VsZE9wZW5FeHRlcm5hbFVSTHNWYWx1ZVdLKSk7CisgICAgICAgIGF1
dG8gbG9hZERhdGFEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byB1cmwgPSB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25h
cnksICJ1cmwiKSk7CisgICAgICAgIGF1dG8gdGFyZ2V0ID0gdG9XVEZTdHJpbmcoc3RyaW5nVmFs
dWUobG9hZERhdGFEaWN0aW9uYXJ5LCAidGFyZ2V0IikpOworICAgICAgICBhdXRvIHNob3VsZE9w
ZW5FeHRlcm5hbFVSTHMgPSBib29sZWFuVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAic2hvdWxk
T3BlbkV4dGVybmFsVVJMcyIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
d29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZCh1cmwsIHRhcmdldCwgc2hvdWxkT3BlbkV4dGVy
bmFsVVJMcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9hZEhUTUxTdHJpbmciKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIGxvYWREYXRhRGljdGlvbmFyeSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjb250ZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiY29udGVudCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgY29udGVu
dFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bG9hZERhdGFEaWN0aW9uYXJ5LCBjb250ZW50S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJiYXNlVVJMIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBiYXNlVVJMV0sg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2Fk
RGF0YURpY3Rpb25hcnksIGJhc2VVUkxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJ1bnJlYWNoYWJsZVVSTCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
dW5yZWFjaGFibGVVUkxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgdW5yZWFjaGFibGVVUkxLZXkuZ2V0KCkp
KTsKLQorICAgICAgICBhdXRvIGxvYWREYXRhRGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gY29udGVudFdLID0gc3RyaW5nVmFsdWUobG9hZERh
dGFEaWN0aW9uYXJ5LCAiY29udGVudCIpOworICAgICAgICBhdXRvIGJhc2VVUkxXSyA9IHN0cmlu
Z1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgImJhc2VVUkwiKTsKKyAgICAgICAgYXV0byB1bnJl
YWNoYWJsZVVSTFdLID0gc3RyaW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAidW5yZWFjaGFi
bGVVUkwiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1h
bmFnZXIoKS5xdWV1ZUxvYWRIVE1MU3RyaW5nKHRvV1RGU3RyaW5nKGNvbnRlbnRXSyksIGJhc2VV
UkxXSyA/IHRvV1RGU3RyaW5nKGJhc2VVUkxXSykgOiBTdHJpbmcoKSwgdW5yZWFjaGFibGVVUkxX
SyA/IHRvV1RGU3RyaW5nKHVucmVhY2hhYmxlVVJMV0spIDogU3RyaW5nKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtNjM2LDE1NCArNDgyLDExNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9u
OjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdl
TmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiUXVldWVMb2FkaW5nU2NyaXB0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVl
TG9hZGluZ1NjcmlwdCh0b1dURlN0cmluZyhzY3JpcHQpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
UXVldWVOb25Mb2FkaW5nU2NyaXB0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
c2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
V0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTm9uTG9h
ZGluZ1NjcmlwdCh0b1dURlN0cmluZyhzY3JpcHQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29u
dGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKFdLQm9vbGVhbkdl
dFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRI
YW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRM
b2dEb3dubG9hZENhbGxiYWNrcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3Mo
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEF1dGhl
bnRpY2F0aW9uVXNlcm5hbWUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiB1c2Vy
bmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdL
U3RyaW5nUmVmIHVzZXJuYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSh0b1dU
RlN0cmluZyh1c2VybmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBdXRoZW50aWNhdGlv
blBhc3N3b3JkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGFzc3dvcmQgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1Jl
ZiBwYXNzd29yZCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQodG9XVEZTdHJpbmco
cGFzc3dvcmQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QmxvY2tBbGxQbHVnaW5zIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBzaG91bGRCbG9jayA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0QmxvY2tBbGxQbHVnaW5zKFdLQm9vbGVhbkdldFZhbHVlKHNob3VsZEJsb2Nr
KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRCbG9ja0FsbFBsdWdp
bnMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFBs
dWdpblN1cHBvcnRlZE1vZGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBtb2Rl
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJp
bmdSZWYgbW9kZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFBsdWdpblN1cHBvcnRlZE1vZGUodG9XVEZTdHJpbmcobW9k
ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5
QWZ0ZXJEZWxheSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRl
bGF5KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheShib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkRGVj
aWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGVjaWRlUmVzcG9u
c2VQb2xpY3lBZnRlckRlbGF5KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFm
dGVyRGVsYXkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tC
b29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXROYXZpZ2F0aW9uR2VzdHVy
ZXNFbmFibGVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0SWdub3Jlc1ZpZXdw
b3J0U2NhbGVMaW1pdHMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhXS0Jv
b2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1J
TUVUeXBlcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhX
S0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRBbGxvd0Rldmlj
ZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkQWxsb3dEZXZpY2VP
cmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkQWxsb3dEZXZpY2VPcmll
bnRhdGlvbkFuZE1vdGlvbkFjY2Vzcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNP
blNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRC
bG9ja1RoaXJkUGFydHlDb29raWVzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSwgdHJ1ZSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxv
Y2tUaGlyZFBhcnR5Q29va2llcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpLCB0cnVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tp
ZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyhXS0Jv
b2xlYW5HZXRWYWx1ZSh2YWx1ZSksIGZhbHNlKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUnVuVUlQ
cm9jZXNzU2NyaXB0IikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0KLSAgICAgICAgVUlTY3JpcHRJbnZvY2F0aW9uRGF0
YSogaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSgpOworICAgICAg
ICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9k
eSk7CisgICAgICAgIGF1dG8gaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0aW9u
RGF0YTsKICAgICAgICAgaW52b2NhdGlvbkRhdGEtPnRlc3RJbnZvY2F0aW9uID0gdGhpczsKLSAg
ICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQgPSAodW5zaWduZWQpV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGNhbGxiYWNrSURLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIGlu
dm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNjcmlwdEtleS5n
ZXQoKSkpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJhY2tJRCA9IHVpbnQ2NFZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNhbGxiYWNrSUQiKTsKKyAgICAgICAgaW52b2NhdGlv
bkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IlNjcmlwdCIpOwogICAgICAgICBtX3BlbmRpbmdVSVNjcmlwdEludm9jYXRpb25EYXRhID0gaW52
b2NhdGlvbkRhdGE7CiAgICAgICAgIFdLUGFnZUNhbGxBZnRlck5leHRQcmVzZW50YXRpb25VcGRh
dGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgaW52
b2NhdGlvbkRhdGEsIHJ1blVJU2lkZVNjcmlwdEFmdGVyVXBkYXRlQ2FsbGJhY2spOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJSdW5VSVByb2Nlc3NTY3JpcHRJbW1lZGlhdGVseSIpKSB7Ci0gICAgICAg
IFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0Rp
Y3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHNjcmlwdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNj
cmlwdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwot
Ci0gICAgICAgIFVJU2NyaXB0SW52b2NhdGlvbkRhdGEqIGludm9jYXRpb25EYXRhID0gbmV3IFVJ
U2NyaXB0SW52b2NhdGlvbkRhdGEoKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGludm9jYXRp
b25EYXRhID0gbmV3IFVJU2NyaXB0SW52b2NhdGlvbkRhdGE7CiAgICAgICAgIGludm9jYXRpb25E
YXRhLT50ZXN0SW52b2NhdGlvbiA9IHRoaXM7Ci0gICAgICAgIGludm9jYXRpb25EYXRhLT5jYWxs
YmFja0lEID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBjYWxs
YmFja0lES2V5LmdldCgpKSkpOwotICAgICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0U3RyaW5n
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBzY3JpcHRLZXkuZ2V0KCkpKTsKKyAgICAgICAgaW52b2NhdGlv
bkRhdGEtPmNhbGxiYWNrSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJD
YWxsYmFja0lEIik7CisgICAgICAgIGludm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTY3JpcHQiKTsKICAgICAgICAgbV9wZW5k
aW5nVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSA9IGludm9jYXRpb25EYXRhOwogICAgICAgICBydW5V
SVNpZGVTY3JpcHRJbW1lZGlhdGVseShudWxscHRyLCBpbnZvY2F0aW9uRGF0YSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTc5MSwxMSArNjAwLDkgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW5zdGFs
bEN1c3RvbU1lbnVBY3Rpb24iKSkgewogICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIm5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBuYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBuYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGlzbWlzc2VzQXV0b21hdGljYWxseSIpKTsK
LSAgICAgICAgYXV0byBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5ID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
ZGlzbWlzc2VzQXV0b21hdGljYWxseUtleS5nZXQoKSkpOwotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuaW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24odG9XVEZTdHJpbmcobmFtZS5n
ZXQoKSksIFdLQm9vbGVhbkdldFZhbHVlKGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkpKTsKKyAgICAg
ICAgYXV0byBuYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAibmFtZSIp
OworICAgICAgICBhdXRvIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkgPSBib29sZWFuVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiZGlzbWlzc2VzQXV0b21hdGljYWxseSIpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24odG9XVEZT
dHJpbmcobmFtZSksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC04MDUsNyArNjEyLDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICAg
ICAgVmVjdG9yPFN0cmluZz4gYWN0aW9uczsKICAgICAgICAgYWN0aW9ucy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHNpemUpOwogICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
c2l6ZTsgKytpbmRleCkKLSAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgobWVzc2FnZUJvZHlB
cnJheSwgaW5kZXgpKSkpOworICAgICAgICAgICAgYWN0aW9ucy5hcHBlbmQodG9XVEZTdHJpbmco
c3RyaW5nVmFsdWUoV0tBcnJheUdldEl0ZW1BdEluZGV4KG1lc3NhZ2VCb2R5QXJyYXksIGluZGV4
KSkpKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFsbG93ZWRNZW51
QWN0aW9ucyhhY3Rpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTgyOCwxMDggKzYz
NSw2MyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0RlYnVnTW9k
ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NEZWJ1
Z01vZGUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1l
c3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoaG9zdE5hbWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTGFzdFNlZW4iKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAg
ICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLQot
ICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVL
ZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Rv
dWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NMYXN0U2Vlbihob3N0TmFtZSwgV0tEb3VibGVHZXRWYWx1ZSh2YWx1ZSkp
OworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gZG91Ymxl
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NMYXN0U2Vlbihob3N0TmFtZSwgdmFsdWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdl
dFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdG9wRnJhbWVEb21haW4xS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG9wRnJhbWVEb21haW4xIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdG9wRnJhbWVEb21haW4yS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG9wRnJhbWVEb21haW4yIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbGFzdFNlZW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJMYXN0U2VlbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhh
ZFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNHcmFuZGZhdGhlcmVkS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNHcmFuZGZhdGhlcmVkIikpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNQcmV2YWxlbnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ByZXZhbGVudCIpKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGlzVmVyeVByZXZhbGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIklzVmVyeVByZXZhbGVudCIpKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGRhdGFSZWNvcmRzUmVtb3ZlZEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkRhdGFSZWNvcmRzUmVtb3ZlZCIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVzQWNjZXNzZWRGaXJzdFBhcnR5SW50ZXJhY3Rpb25L
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lc0FjY2Vzc2Vk
Rmlyc3RQYXJ0eUludGVyYWN0aW9uIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1l
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmlu
Z1JlZiB0b3BGcmFtZURvbWFpbjEgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lRG9tYWluMUtl
eS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZURvbWFpbjIgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHRvcEZyYW1lRG9tYWluMktleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJsZVJl
ZiBsYXN0U2VlbiA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbGFzdFNlZW5LZXkuZ2V0KCkpKTsKLSAgICAg
ICAgV0tCb29sZWFuUmVmIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhh
ZFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJsZVJlZiBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc0dyYW5kZmF0aGVyZWQg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBpc0dyYW5kZmF0aGVyZWRLZXkuZ2V0KCkpKTsKLSAgICAgICAg
V0tCb29sZWFuUmVmIGlzUHJldmFsZW50ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNQcmV2YWxlbnRL
ZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzVmVyeVByZXZhbGVudCA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIGlzVmVyeVByZXZhbGVudEtleS5nZXQoKSkpOwotICAgICAgICBXS1VJbnQ2
NFJlZiBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGRhdGFSZWNvcmRzUmVt
b3ZlZEtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMoaG9zdE5hbWUsIHRvcEZyYW1lRG9tYWluMSwgdG9w
RnJhbWVEb21haW4yLCBXS0RvdWJsZUdldFZhbHVlKGxhc3RTZWVuKSwgV0tCb29sZWFuR2V0VmFs
dWUoaGFkVXNlckludGVyYWN0aW9uKSwgV0tEb3VibGVHZXRWYWx1ZShtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNHcmFuZGZhdGhlcmVkKSwgV0tCb29sZWFu
R2V0VmFsdWUoaXNQcmV2YWxlbnQpLCBXS0Jvb2xlYW5HZXRWYWx1ZShpc1ZlcnlQcmV2YWxlbnQp
LCBXS1VJbnQ2NEdldFZhbHVlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpOworICAgICAgICBhdXRvIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAg
ICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJI
b3N0TmFtZSIpOworICAgICAgICBhdXRvIHRvcEZyYW1lRG9tYWluMSA9IHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lRG9tYWluMSIpOworICAgICAgICBhdXRvIHRv
cEZyYW1lRG9tYWluMiA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZy
YW1lRG9tYWluMiIpOworICAgICAgICBhdXRvIGxhc3RTZWVuID0gZG91YmxlVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiTGFzdFNlZW4iKTsKKyAgICAgICAgYXV0byBoYWRVc2VySW50ZXJh
Y3Rpb24gPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSGFkVXNlckludGVy
YWN0aW9uIik7CisgICAgICAgIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IGRvdWJs
ZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24i
KTsKKyAgICAgICAgYXV0byBpc0dyYW5kZmF0aGVyZWQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiSXNHcmFuZGZhdGhlcmVkIik7CisgICAgICAgIGF1dG8gaXNQcmV2YWxl
bnQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNQcmV2YWxlbnQiKTsK
KyAgICAgICAgYXV0byBpc1ZlcnlQcmV2YWxlbnQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiSXNWZXJ5UHJldmFsZW50Iik7CisgICAgICAgIGF1dG8gZGF0YVJlY29yZHNS
ZW1vdmVkID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRGF0YVJlY29yZHNS
ZW1vdmVkIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzTWVyZ2VTdGF0aXN0aWMoaG9zdE5hbWUsIHRvcEZyYW1lRG9tYWluMSwgdG9wRnJhbWVEb21h
aW4yLCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFS
ZWNvcmRzUmVtb3ZlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzRXhw
aXJlZFN0YXRpc3RpYyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJl
ZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoYWRVc2VySW50ZXJhY3Rpb25LZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYWRVc2VySW50ZXJhY3Rpb24i
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNQcmV2YWxlbnRL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ByZXZhbGVudCIp
KTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9z
dE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGhhZFVzZXJJbnRlcmFjdGlv
biA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGhhZFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpOwotICAg
ICAgICBXS0Jvb2xlYW5SZWYgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCA9
IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxL
ZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzUHJldmFsZW50ID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaXNQcmV2YWxlbnRLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMoaG9zdE5hbWUsIFdL
Qm9vbGVhbkdldFZhbHVlKGhhZFVzZXJJbnRlcmFjdGlvbiksIFdLQm9vbGVhbkdldFZhbHVlKGlz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpLCBXS0Jvb2xlYW5HZXRWYWx1ZShp
c1ByZXZhbGVudCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rp
b25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIGhh
ZFVzZXJJbnRlcmFjdGlvbiA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJI
YWRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBpc1NjaGVkdWxlZEZvckFsbEJ1dENv
b2tpZURhdGFSZW1vdmFsID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIklz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiKTsKKyAgICAgICAgYXV0byBpc1By
ZXZhbGVudCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc1ByZXZhbGVu
dCIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0V4
cGlyZWRTdGF0aXN0aWMoaG9zdE5hbWUsIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRG
b3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFs
dWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsK
LQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5h
bWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lLCBXS0Jvb2xlYW5H
ZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRv
IHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UoaG9zdE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlz
dGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9z
dE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAg
IFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQo
KSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1
ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1
ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25h
cnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVl
ID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJl
c291cmNlKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk0
NCw1MSArNzA2LDM1IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJv
bUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3VycyIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGhvdXJzID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRp
c3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKFdL
VUludDY0R2V0VmFsdWUoaG91cnMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5j
ZUhvdXJzKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlciIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NT
aG91bGREb3duZ3JhZGVSZWZlcnJlcihXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFk
ZVJlZmVycmVyKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUoV0tCb29sZWFuR2V0
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0
YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZShib29sZWFuVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1NldFRvU2FtZVNpdGVT
dHJpY3RDb29raWVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVz
KGhvc3ROYW1lKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llcyhzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFp
biIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0
aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmlyc3RQYXJ0eVVSTFN0
cmluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZpcnN0UGFy
dHlVUkwiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjbmFtZVVSTFN0cmlu
Z0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNOQU1FIikpOwot
ICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgZmlyc3RQYXJ0eVVSTFN0cmluZyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgZmlyc3RQYXJ0eVVSTFN0cmluZ0tleS5nZXQoKSkpOwotICAgICAgICBXS1N0
cmluZ1JlZiBjbmFtZVVSTFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgY25hbWVVUkxTdHJpbmdL
ZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBmaXJzdFBhcnR5
VVJMU3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRmlyc3RQYXJ0
eVVSTCIpOworICAgICAgICBhdXRvIGNuYW1lVVJMU3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiQ05BTUUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluKGZpcnN0UGFydHlV
UkxTdHJpbmcsIGNuYW1lVVJMU3RyaW5nKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGlj
c1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIGNuYW1lVVJMU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUaGly
ZFBhcnR5Q05BTUVEb21haW4oY25hbWVVUkxTdHJpbmcpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RoaXJkUGFydHlDTkFNRURvbWFpbihzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDEyLDgg
Kzc1OCw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRBcHBsaWNhdGlvbk1hbmlmZXN0IikpIHsK
ICNpZmRlZiBfX0JMT0NLU19fCiAgICAgICAgIFdLUGFnZUdldEFwcGxpY2F0aW9uTWFuaWZlc3Rf
YihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBeewot
ICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlkR2V0QXBwbGljYXRpb25NYW5pZmVz
dCIpKTsKLSAgICAgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICBwb3N0UGFnZU1lc3NhZ2UoIkRpZEdldEFwcGxpY2F0
aW9uTWFuaWZlc3QiKTsKICAgICAgICAgfSk7CiAjZWxzZQogICAgICAgICAvLyBGSVhNRTogQWRk
IEFQSSBmb3IgbG9hZGluZyB0aGUgbWFuaWZlc3Qgb24gbm9uLV9fQkxPQ0tTX18gcG9ydHMuCkBA
IC0xMDIzLDE2ICs3NjgsMTAgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRp
c3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBX
S0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0
aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhv
c3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLQotICAgICAg
ICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0
KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFs
dWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFs
dWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9u
YXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB2YWx1
ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1ZSIpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbihob3N0TmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MDQzLDggKzc4Miw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJv
bUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFwcEJvdW5kRG9tYWlucyIp
KSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tBcnJheUdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tBcnJheVJlZiBvcmlnaW5VUkxzID0gc3RhdGljX2Nhc3Q8
V0tBcnJheVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0QXBwQm91bmREb21haW5zKG9yaWdpblVSTHMpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0QXBwQm91bmREb21haW5zKHN0YXRpY19jYXN0PFdLQXJyYXlS
ZWY+KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNTUsOTQg
Kzc5Myw3MCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNl
aXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogewogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW5pdGlhbGl6YXRpb24iKSkgewogICAg
ICAgICBhdXRvIHNldHRpbmdzID0gY3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVzdW1lVGVzdGluZ0tleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc3VtZVRlc3RpbmciKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcmVzdW1lVGVzdGluZ1ZhbHVlID0gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUobV9zdGFydGVkVGVzdGluZykpOwotICAgICAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKHNldHRpbmdzLmdldCgpLCByZXN1bWVUZXN0aW5nS2V5LmdldCgpLCByZXN1bWVUZXN0
aW5nVmFsdWUuZ2V0KCkpOworICAgICAgICBzZXRWYWx1ZShzZXR0aW5ncywgIlJlc3VtZVRlc3Rp
bmciLCBtX3N0YXJ0ZWRUZXN0aW5nKTsKICAgICAgICAgcmV0dXJuIHNldHRpbmdzOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
RHVtcFBpeGVscyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBtX2R1bXBQaXhlbHMgPSBXS0Jvb2xl
YW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSk7CisgICAg
ICAgIG1fZHVtcFBpeGVscyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIkdldER1bXBQaXhlbHMiKSkKICAgICAgICAgcmV0dXJuIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKG1fZHVtcFBpeGVscykpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRXaGF0VG9EdW1wIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsK
LSAgICAgICAgbV93aGF0VG9EdW1wID0gc3RhdGljX2Nhc3Q8V2hhdFRvRHVtcD4oV0tVSW50NjRH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAg
IG1fd2hhdFRvRHVtcCA9IHN0YXRpY19jYXN0PFdoYXRUb0R1bXA+KHVpbnQ2NFZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldFdoYXRUb0R1bXAiKSkKICAg
ICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1fd2hhdFRvRHVtcCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0V2FpdFVudGlsRG9uZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBz
ZXRXYWl0VW50aWxEb25lKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KFdLQm9vbGVhbkdldFZh
bHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSkpOworICAgICAgICBz
ZXRXYWl0VW50aWxEb25lKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJHZXRXYWl0VW50aWxEb25lIikpCiAgICAgICAgIHJldHVybiBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShtX3dhaXRVbnRpbERvbmUpKTsKIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0RHVtcEZyYW1lTG9hZENhbGxiYWNr
cyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFj
a3MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJHZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIikpCiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MpKTsKIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0Q2FuT3BlbldpbmRvd3Mi
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICAgICAgbV9jYW5PcGVuV2luZG93cyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
bWVzc2FnZUJvZHkpKSk7CisgICAgICAgIG1fY2FuT3BlbldpbmRvd3MgPSBib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFdpbmRvd0lzS2V5
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc0tleVZhbHVlID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5zZXRXaW5kb3dJc0tleShXS0Jvb2xlYW5HZXRW
YWx1ZShpc0tleVZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5zZXRXaW5kb3dJc0tleShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRWaWV3U2l6ZSIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkp
OwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHdpZHRoS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygid2lkdGgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoZWln
aHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoZWlnaHQiKSk7
Ci0KLSAgICAgICAgV0tEb3VibGVSZWYgd2lkdGhXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgd2lkdGhL
ZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgaGVpZ2h0V0sgPSBzdGF0aWNfY2FzdDxX
S0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGhlaWdodEtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5yZXNpemVUbyhXS0RvdWJsZUdldFZhbHVlKHdpZHRoV0spLCBX
S0RvdWJsZUdldFZhbHVlKGhlaWdodFdLKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byB3aWR0
aCA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIndpZHRoIik7CisgICAgICAg
IGF1dG8gaGVpZ2h0ID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiaGVpZ2h0
Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5y
ZXNpemVUbyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc0dl
b2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpIHsKLSAgICAgICAgYm9vbCBpc0FjdGl2ZSA9IFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShpc0FjdGl2ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzR2VvbG9jYXRpb25D
bGllbnRBY3RpdmUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSkp
OwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRDYWNoZU1vZGVsIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgdWludDY0X3QgbW9kZWwgPSBXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOworICAg
ICAgICB1aW50NjRfdCBtb2RlbCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAg
V0tXZWJzaXRlRGF0YVN0b3JlU2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53ZWJzaXRlRGF0YVN0b3JlKCksIG1vZGVsKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1dvcmtRdWV1ZUVtcHR5IikpIHsKLSAgICAgICAg
Ym9vbCBpc0VtcHR5ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFn
ZXIoKS5pc1dvcmtRdWV1ZUVtcHR5KCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4g
cmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNFbXB0eSkpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIklzV29ya1F1ZXVlRW1wdHkiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5h
Z2VyKCkuaXNXb3JrUXVldWVFbXB0eSgpKSk7CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
cmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpKSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxOYXZpZ2F0aW9uIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuY2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmln
YXRpb24oKTsKQEAgLTExNTAsNDAgKzg2NCwzNSBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRl
c3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCIpKSB7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBy
ZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShJc1NlY3VyZUV2ZW50SW5wdXRFbmFibGVk
KCkpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShJc1NlY3VyZUV2ZW50SW5wdXRFbmFibGVkKCkpKTsKICNlbHNlCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
ZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGZhbHNlKSk7
CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEN1c3RvbVVzZXJBZ2VudCIp
KSB7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVzZXJBZ2VudCA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUGFnZVNldEN1c3RvbVVzZXJBZ2VudChUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB1c2VyQWdlbnQp
OworICAgICAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSIp
KSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZShXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uIikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKFdLQm9vbGVh
bkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxT
ZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uIikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihXS0Jvb2xlYW5H
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Np
b25Pbk5leHROYXZpZ2F0aW9uKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkIikpIHsKLSAg
ICAgICAgdW5zaWduZWQgY291bnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW1hZ2VD
b3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRS
ZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY291bnQpKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCIpKQorICAgICAgICBy
ZXR1cm4gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSkpOwogICAgIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGVsZXRlQWxsSW5kZXhlZERhdGFi
YXNlcyIpKSB7CiAgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUFsbEluZGV4ZWREYXRh
YmFzZXMoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndlYnNpdGVEYXRhU3RvcmUoKSwgbnVs
bHB0ciwgeyB9KTsKQEAgLTExOTEsMTcgKzkwMCwxMCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVk
QgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiQWRkTW9ja01lZGlhRGV2aWNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tE
aWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
cGVyc2lzdGVudElES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
UGVyc2lzdGVudElEIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbGFiZWxL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMYWJlbCIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHR5cGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUeXBlIikpOwotCi0gICAgICAgIGF1dG8gcGVyc2lzdGVu
dElEID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwZXJzaXN0ZW50SURLZXkuZ2V0KCkpKTsKLSAgICAgICAg
YXV0byBsYWJlbCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbGFiZWxLZXkuZ2V0KCkpKTsKLSAgICAgICAg
YXV0byB0eXBlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0eXBlS2V5LmdldCgpKSk7Ci0KKyAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIHBlcnNpc3RlbnRJRCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIlBlcnNpc3RlbnRJRCIpOworICAgICAgICBhdXRvIGxhYmVsID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTGFiZWwiKTsKKyAgICAgICAgYXV0byB0eXBlID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVHlwZSIpOwogICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuYWRkTW9ja01lZGlhRGV2aWNlKHBlcnNpc3RlbnRJRCwg
bGFiZWwsIHR5cGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xMjEyLDkg
KzkxNCw3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2Vp
dmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZW1vdmVNb2NrTWVkaWFEZXZp
Y2UiKSkgewotICAgICAgICBXS1N0cmluZ1JlZiBwZXJzaXN0ZW50SWQgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5yZW1vdmVNb2NrTWVkaWFEZXZpY2UocGVyc2lzdGVudElkKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJlbW92ZU1vY2tNZWRpYURldmljZShzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTEy
MjQsMTQyICs5MjQsODcgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6
ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tDYW1l
cmFPcmllbnRhdGlvbiIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24odWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyRW5hYmxlZCIpKSB7Ci0gICAgICAgIGJvb2wgaXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlckVuYWJsZWQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNNb2NrUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQoKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkKSk7Ci0gICAg
fQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNN
b2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQiKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc01vY2tS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgpKSk7CiAgICAgCi0gICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJIYXNBcHBCb3VuZFNlc3Npb24i
KSkgewotICAgICAgICBib29sIGhhc0FwcEJvdW5kU2Vzc2lvbiA9IFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5oYXNBcHBCb3VuZFNlc3Npb24oKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGhhc0FwcEJvdW5kU2Vzc2lvbikpOwotICAgIH0KKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkhhc0FwcEJvdW5kU2Vzc2lv
biIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmhhc0FwcEJvdW5kU2Vzc2lvbigpKSk7CiAKICNpZiBQTEFURk9STShN
QUMpCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJD
b25uZWN0TW9ja0dhbWVwYWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIHVpbnQ2NF90IGluZGV4
ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkp
KTsKLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpjb25uZWN0TW9ja0dhbWVwYWQoaW5kZXgp
OwotICAgICAgICAKKyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpjb25uZWN0TW9ja0dhbWVw
YWQodWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJEaXNjb25uZWN0TW9ja0dhbWVwYWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIHVpbnQ2NF90
IGluZGV4ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2Fn
ZUJvZHkpKTsKLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpkaXNjb25uZWN0TW9ja0dhbWVw
YWQoaW5kZXgpOwotCisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6ZGlzY29ubmVjdE1vY2tH
YW1lcGFkKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0TW9ja0dhbWVwYWREZXRhaWxzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZ2FtZXBhZEluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiR2FtZXBhZEluZGV4IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZ2Ft
ZXBhZElES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBh
ZElEIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWFwcGluZ0tleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1hcHBpbmciKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheGlzQ291bnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBeGlzQ291bnQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBidXR0b25Db3VudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkJ1dHRvbkNvdW50IikpOwotCi0gICAgICAgIFdLVUludDY0UmVmIGdhbWVw
YWRJbmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZ2FtZXBhZEluZGV4S2V5LmdldCgpKSk7Ci0gICAg
ICAgIFdLU3RyaW5nUmVmIGdhbWVwYWRJRCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZ2FtZXBhZElES2V5
LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1hcHBpbmcgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IG1hcHBpbmdLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgYXhpc0NvdW50ID0gc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBheGlzQ291bnRLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tVSW50NjRSZWYg
YnV0dG9uQ291bnQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbkNvdW50S2V5LmdldCgpKSk7Ci0K
LSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZERldGFpbHMoV0tVSW50
NjRHZXRWYWx1ZShnYW1lcGFkSW5kZXgpLCB0b1dURlN0cmluZyhnYW1lcGFkSUQpLCB0b1dURlN0
cmluZyhtYXBwaW5nKSwgV0tVSW50NjRHZXRWYWx1ZShheGlzQ291bnQpLCBXS1VJbnQ2NEdldFZh
bHVlKGJ1dHRvbkNvdW50KSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBnYW1lcGFkSW5kZXgg
PSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJHYW1lcGFkSW5kZXgiKTsKKyAg
ICAgICAgYXV0byBnYW1lcGFkSUQgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJHYW1lcGFkSUQiKTsKKyAgICAgICAgYXV0byBtYXBwaW5nID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiTWFwcGluZyIpOworICAgICAgICBhdXRvIGF4aXNDb3VudCA9IHVp
bnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkF4aXNDb3VudCIpOworICAgICAgICBh
dXRvIGJ1dHRvbkNvdW50ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQnV0
dG9uQ291bnQiKTsKKyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZERl
dGFpbHMoZ2FtZXBhZEluZGV4LCB0b1dURlN0cmluZyhnYW1lcGFkSUQpLCB0b1dURlN0cmluZyht
YXBwaW5nKSwgYXhpc0NvdW50LCBidXR0b25Db3VudCk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tE
aWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBnYW1lcGFkSW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJHYW1lcGFkSW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBh
eGlzSW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBeGlz
SW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAg
IFdLVUludDY0UmVmIGdhbWVwYWRJbmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZ2FtZXBhZEluZGV4
S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGF4aXNJbmRleCA9IHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgYXhpc0luZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHZhbHVlID0g
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFdlYkNvcmVUZXN0
U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUoV0tVSW50NjRHZXRWYWx1ZShnYW1lcGFk
SW5kZXgpLCBXS1VJbnQ2NEdldFZhbHVlKGF4aXNJbmRleCksIFdLRG91YmxlR2V0VmFsdWUodmFs
dWUpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlW
YWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZ2FtZXBhZEluZGV4ID0gdWludDY0VmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiR2FtZXBhZEluZGV4Iik7CisgICAgICAgIGF1dG8g
YXhpc0luZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQXhpc0luZGV4
Iik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJWYWx1ZSIpOworICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFk
QXhpc1ZhbHVlKGdhbWVwYWRJbmRleCwgYXhpc0luZGV4LCB2YWx1ZSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZSIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkp
OwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGJ1dHRvbkluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQnV0dG9uSW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVl
IikpOwotCi0gICAgICAgIFdLVUludDY0UmVmIGdhbWVwYWRJbmRleCA9IHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgZ2FtZXBhZEluZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGJ1dHRvbklu
ZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25JbmRleEtleS5nZXQoKSkpOwotICAgICAgICBX
S0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQot
ICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUoV0tV
SW50NjRHZXRWYWx1ZShnYW1lcGFkSW5kZXgpLCBXS1VJbnQ2NEdldFZhbHVlKGJ1dHRvbkluZGV4
KSwgV0tEb3VibGVHZXRWYWx1ZSh2YWx1ZSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBn
YW1lcGFkSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJHYW1lcGFk
SW5kZXgiKTsKKyAgICAgICAgYXV0byBidXR0b25JbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIkJ1dHRvbkluZGV4Iik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBkb3Vi
bGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1ZSIpOworICAgICAgICBXZWJDb3Jl
VGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUoZ2FtZXBhZEluZGV4LCBidXR0
b25JbmRleCwgdmFsdWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25h
cnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBv
cmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgb3JpZ2luS2V5LmdldCgpKSk7Ci0KLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgcGFyZW50T3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBhcmVudE9yaWdpbktleS5n
ZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIG9yaWdpbldLID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAib3JpZ2luIik7CisgICAgICAgIGF1dG8g
cGFyZW50T3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJwYXJl
bnRPcmlnaW4iKTsKICAgICAgICAgdW5zaWduZWQgY291bnQgPSBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkudXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihvcmlnaW5X
SywgcGFyZW50T3JpZ2luV0spOwotICAgICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcmVz
dWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjb3VudCkpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIklzRG9pbmdNZWRpYUNhcHR1cmUiKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1R5
cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5pc0RvaW5nTWVkaWFDYXB0dXJlKCkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY291bnQpKTsKICAgICB9
CisKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklz
RG9pbmdNZWRpYUNhcHR1cmUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0RvaW5nTWVkaWFDYXB0dXJlKCkpKTsK
ICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IkNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0
cmluZ1JlZiBkb21haW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwot
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhclN0YXRpc3RpY3NEYXRh
Rm9yRG9tYWluKGRvbWFpbik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5j
bGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5E
YXRhYmFzZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkb21haW5JREtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvbWFpbklEIikpOwotICAgICAgICBX
S1VJbnQ2NFJlZiBkb21haW5JRCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZG9tYWluSURLZXkuZ2V0KCkp
KTsKLSAgICAgICAgYm9vbCBkb21haW5JREV4aXN0cyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5kb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlKFdLVUludDY0R2V0VmFs
dWUoZG9tYWluSUQpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkb21haW5JREV4aXN0cykpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlW
YWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZG9tYWluSUQgPSB1aW50NjRWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJEb21haW5JRCIpOworICAgICAgICBib29sIGRvbWFpbklE
RXhpc3RzID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRvZXNTdGF0aXN0aWNzRG9tYWlu
SURFeGlzdEluRGF0YWJhc2UoZG9tYWluSUQpOworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoZG9tYWluSURFeGlzdHMpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NFbmFibGVkIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc0VuYWJsZWQoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NFbmFibGVkKGJv
b2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklz
U3RhdGlzdGljc0VwaGVtZXJhbCIpKSB7Ci0gICAgICAgIGJvb2wgaXNFcGhlbWVyYWwgPSBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzRXBoZW1lcmFsKCk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
aXNFcGhlbWVyYWwpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRp
c3RpY3NFcGhlbWVyYWwoKSkpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgImR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIikp
IHsKQEAgLTEzNjgsMjI0ICsxMDEzLDEyOCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJ
bnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
SXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdL
U3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2
YWxlbnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYm9vbCBpc1ByZXZhbGVu
dCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZShzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBo
b3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0
aWNzVmVyeVByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBib29sIGlzUHJldmFsZW50ID0gVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NSZWdpc3RlcmVk
QXNTdWJyZXNvdXJjZVVuZGVyIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBX
S0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0
aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJyZXNvdXJjZUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdWJyZXNvdXJjZUhvc3QiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB0b3BGcmFtZUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJUb3BGcmFtZUhvc3QiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBzdWJyZXNv
dXJjZUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1YnJlc291cmNlSG9zdEtleS5nZXQoKSkpOwot
ICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZy
YW1lSG9zdEtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1
YnJlc291cmNlSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlN1YnJl
c291cmNlSG9zdCIpOworICAgICAgICBhdXRvIHRvcEZyYW1lSG9zdCA9IHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lSG9zdCIpOwogICAgICAgICBib29sIGlzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5p
c1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKHN1YnJlc291cmNlSG9zdCwg
dG9wRnJhbWVIb3N0KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIpKTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcikpOwogICAgIH0KICAgICAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlz
dGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAg
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1YkZyYW1lSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN1YkZyYW1lSG9zdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHRvcEZyYW1lSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlRvcEZyYW1lSG9zdCIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIHN1
YkZyYW1lSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViRnJhbWVIb3N0S2V5LmdldCgpKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJh
bWVIb3N0S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1YkZyYW1lSG9z
dCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlN1YkZyYW1lSG9zdCIpOwor
ICAgICAgICBhdXRvIHRvcEZyYW1lSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIlRvcEZyYW1lSG9zdCIpOwogICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJh
bWVVbmRlciA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lSG9zdCwgdG9wRnJhbWVIb3N0KTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3ViRnJh
bWVVbmRlcikpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8i
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlv
bmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3RSZWRpcmVjdGVkRnJv
bUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RSZWRpcmVj
dGVkRnJvbSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3RSZWRpcmVj
dGVkVG9LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0UmVk
aXJlY3RlZFRvIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdFJlZGlyZWN0
ZWRGcm9tID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0UmVkaXJlY3RlZEZyb21LZXkuZ2V0KCkpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdFJlZGlyZWN0ZWRUbyA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
aG9zdFJlZGlyZWN0ZWRUb0tleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAg
ICBhdXRvIGhvc3RSZWRpcmVjdGVkRnJvbSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIkhvc3RSZWRpcmVjdGVkRnJvbSIpOworICAgICAgICBhdXRvIGhvc3RSZWRpcmVjdGVk
VG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0UmVkaXJlY3RlZFRv
Iik7CiAgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvID0gVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8o
aG9zdFJlZGlyZWN0ZWRGcm9tLCBob3N0UmVkaXJlY3RlZFRvKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8pKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0
dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbykp
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiSXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAg
ICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb24g
PSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVy
YWN0aW9uKGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNIYWRVc2VySW50ZXJhY3Rpb24pKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb24gPSBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0
aW9uKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShoYXNIYWRVc2VySW50ZXJhY3Rpb24pKTsKICAgICB9CiAgICAgCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3Rp
Y3NPbmx5SW5EYXRhYmFzZU9uY2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAg
IFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0Rp
Y3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYXV0byBzdWJIb3N0S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViSG9zdCIpKTsKLSAgICAgICAg
YXV0byB0b3BIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VG9wSG9zdCIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIHN1Ykhvc3QgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHN1Ykhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9w
SG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wSG9zdEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBzdWJIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiU3ViSG9zdCIpOworICAgICAgICBhdXRvIHRvcEhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJUb3BIb3N0Iik7CiAgICAgICAgIGJvb2wgc3RhdGlzdGljSW5EYXRh
YmFzZU9uY2UgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzT25seUlu
RGF0YWJhc2VPbmNlKHN1Ykhvc3QsIHRvcEhvc3QpOwogICAgICAgICByZXR1cm4gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoc3RhdGlzdGljSW5EYXRhYmFzZU9uY2UpKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0
aXN0aWNzR3JhbmRmYXRoZXJlZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
b3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0gICAgICAg
IAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5h
bWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgCi0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChob3N0TmFtZSwgV0tCb29s
ZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAg
YXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1ZSIp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0dyYW5k
ZmF0aGVyZWQoaG9zdE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiSXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAg
ICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVkID0gVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoaG9zdE5hbWUpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGlzR3JhbmRmYXRoZXJlZCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBib29s
IGlzR3JhbmRmYXRoZXJlZCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3Rp
Y3NHcmFuZGZhdGhlcmVkKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHJldHVy
biBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVyZWQpKTsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZUlU
UERhdGFiYXNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VJVFBEYXRhYmFzZShXS0Jvb2xlYW5HZXRWYWx1ZSh2
YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlSVRQRGF0
YWJhc2UoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4iKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdl
dFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKTsKLSAgICAgICAgCi0g
ICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtl
eS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZUhvc3ROYW1lID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3ROYW1lS2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
SG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZUhvc3ROYW1lID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVIb3N0TmFtZSIpOwogICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbihob3N0TmFtZSwgdG9wRnJhbWVIb3N0TmFtZSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4i
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlv
bmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3ROYW1lS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKTsKLSAgICAg
ICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0
TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZUhvc3ROYW1lID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIAor
ICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNz
YWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHRvcEZyYW1lSG9zdE5hbWUg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZUhvc3ROYW1lIik7
CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGhvc3ROYW1lLCB0b3BGcmFtZUhvc3ROYW1lKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RUbyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9z
dE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFt
ZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lUmVkaXJlY3Rl
ZFRvS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVS
ZWRpcmVjdGVkVG8iKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lUmVkaXJl
Y3RlZFRvS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9z
dE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOwor
ICAgICAgICBhdXRvIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKTsKICAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oaG9zdE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZFRvKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20iKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdl
dFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKTsK
LSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGly
ZWN0ZWRGcm9tID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tS2V5Lmdl
dCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRv
IGhvc3ROYW1lUmVkaXJlY3RlZEZyb20gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oaG9z
dE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKTsKLSAgICAgICAg
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFt
ZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkuZ2V0KCkpKTsKLSAgICAg
ICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVl
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gaG9zdE5hbWVSZWRp
cmVjdGVkVG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZVJl
ZGlyZWN0ZWRUbyIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhob3N0TmFtZSwgaG9zdE5hbWVSZWRpcmVj
dGVkVG8pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdEZyb20iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFt
ZVJlZGlyZWN0ZWRGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5n
UmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAg
ICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBh
dXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7
CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20gPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9t
Iik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oaG9zdE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20p
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzQ3Jvc3NTaXRl
TG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAg
ICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdL
RGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBhdXRvIGZyb21Ib3N0S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRnJvbUhvc3QiKSk7Ci0gICAg
ICAgIGF1dG8gdG9Ib3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVG9Ib3N0IikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGZyb21Ib3N0ID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBmcm9tSG9zdEtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b0hvc3Qg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHRvSG9zdEtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIGZyb21Ib3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiRnJvbUhvc3QiKTsKKyAgICAgICAgYXV0byB0b0hvc3QgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJUb0hvc3QiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uKGZy
b21Ib3N0LCB0b0hvc3QpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3Rp
Y3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEb3Vi
bGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbihXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICAKQEAgLTE2MDAsOTcgKzExNDksNjkgQEAgV0tSZXRhaW5QdHI8V0tUeXBl
UmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21Jbmpl
Y3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
Qm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0lzUnVu
bmluZ1Rlc3QoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNz
U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRp
Y19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbChkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVy
aW5nVGltZShkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRNYXhTdGF0aXN0aWNzRW50cmllcyIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLVUludDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01h
eFN0YXRpc3RpY3NFbnRyaWVzKFdLVUludDY0R2V0VmFsdWUoZW50cmllcykpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRy
aWVzKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlNldFBydW5lRW50cmllc0Rvd25UbyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLVUlu
dDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1BydW5lRW50
cmllc0Rvd25UbyhXS1VJbnQ2NEdldFZhbHVlKGVudHJpZXMpKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odWludDY0
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0
aWNzRGVsZXRlQ29va2llc0Zvckhvc3QiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluY2x1ZGVIdHRwT25s
eUNvb2tpZXMiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVm
IGluY2x1ZGVIdHRwT25seUNvb2tpZXMgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQo
KSkpOwotICAgICAgICAKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRp
c3RpY3NEZWxldGVDb29raWVzRm9ySG9zdChob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUoaW5j
bHVkZUh0dHBPbmx5Q29va2llcykpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAg
ICBhdXRvIGluY2x1ZGVIdHRwT25seUNvb2tpZXMgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiSW5jbHVkZUh0dHBPbmx5Q29va2llcyIpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0KGhvc3ROYW1l
LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJ
c1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAg
ICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2Fn
ZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkp
OwogICAgICAgICBib29sIGhhc0xvY2FsU3RvcmFnZSA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5pc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UoaG9zdE5hbWUpOwogICAgICAgICBhdXRv
IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0xvY2FsU3RvcmFnZSkpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91
YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAoV0tEb3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzQ2FjaGVN
YXhBZ2VDYXAoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJIYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAg
ICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5KTsKICAgICAgICAgYm9vbCBoYXNJc29sYXRlZFNlc3Npb24gPSBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuaGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vzc2lvbihob3N0TmFtZSk7
CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzSXNvbGF0
ZWRTZXNzaW9uKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDbGVhckRPTUNhY2hlIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQorICAgICAgICBhdXRvIG9yaWdpbiA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNs
ZWFyRE9NQ2FjaGUob3JpZ2luKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAt
MTcwMSwzNSArMTIyMiwyNCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9u
OjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSGFzRE9NQ2Fj
aGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3Ry
aW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW4gPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCisgICAgICAgIGF1dG8gb3JpZ2luID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBib29sIGhhc0RPTUNhY2hlID0gVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc0RPTUNhY2hlKG9yaWdpbik7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzRE9N
Q2FjaGUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGhhc0RPTUNhY2hlKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJET01DYWNoZVNpemUiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4obWVzc2FnZUJvZHkpOwotCisgICAgICAgIGF1dG8gb3JpZ2luID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHkpOwogICAgICAgICBhdXRvIGRvbUNhY2hlU2l6ZSA9IFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5kb21DYWNoZVNpemUob3JpZ2luKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRvbUNhY2hlU2l6ZSkpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShkb21DYWNoZVNpemUpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdl
dFR5cGVJRCgpKTsKLSAgICAgICAgYXV0byBjYW5JbmNyZWFzZSA9IFdLQm9vbGVhbkdldFZhbHVl
KHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UoY2FuSW5j
cmVhc2UpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWxsb3dTdG9y
YWdlUXVvdGFJbmNyZWFzZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJJbmplY3RVc2VyU2NyaXB0IikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5
KTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW5qZWN0VXNlclNjcmlw
dChzY3JpcHQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW5qZWN0VXNl
clNjcmlwdChzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKQEAgLTE3MzksMTUgKzEyNDksMTIgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3Rl
ZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2VydmljZVdvcmtlckZldGNoVGlt
ZW91dEZvclRlc3RpbmcoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBl
SUQoKSk7Ci0gICAgICAgIGF1dG8gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IFdL
Qm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKTsK
KyAgICAgICAgYXV0byB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQpAQCAtMTc2NSw2MCArMTI3MiwzNSBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJ
bnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
QWRkVGVzdEtleVRvS2V5Y2hhaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIHRlc3RLZXlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByaXZhdGVL
ZXlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcml2YXRlS2V5
IikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwcml2YXRlS2V5V0sgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0S2V5RGljdGlvbmFyeSwgcHJp
dmF0ZUtleUtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBh
dHRyTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdHRy
TGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGF0dHJMYWJlbFdLID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdEtleURpY3Rpb25hcnks
IGF0dHJMYWJlbEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBhcHBsaWNhdGlvblRhZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkFwcGxpY2F0aW9uVGFnIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhcHBsaWNhdGlvblRh
Z1dLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
dGVzdEtleURpY3Rpb25hcnksIGFwcGxpY2F0aW9uVGFnS2V5LmdldCgpKSk7Ci0KKyAgICAgICAg
YXV0byB0ZXN0S2V5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7Cisg
ICAgICAgIGF1dG8gcHJpdmF0ZUtleVdLID0gc3RyaW5nVmFsdWUodGVzdEtleURpY3Rpb25hcnks
ICJQcml2YXRlS2V5Iik7CisgICAgICAgIGF1dG8gYXR0ckxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0
ZXN0S2V5RGljdGlvbmFyeSwgIkF0dHJMYWJlbCIpOworICAgICAgICBhdXRvIGFwcGxpY2F0aW9u
VGFnV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0S2V5RGljdGlvbmFyeSwgIkFwcGxpY2F0aW9uVGFnIik7
CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5hZGRUZXN0S2V5VG9LZXljaGFp
bih0b1dURlN0cmluZyhwcml2YXRlS2V5V0spLCB0b1dURlN0cmluZyhhdHRyTGFiZWxXSyksIHRv
V1RGU3RyaW5nKGFwcGxpY2F0aW9uVGFnV0spKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJDbGVhblVwS2V5Y2hhaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5
UmVmIHRlc3REaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJMYWJlbEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKTsKLSAg
ICAgICAgV0tTdHJpbmdSZWYgYXR0ckxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0RGljdGlvbmFyeSwgYXR0ckxhYmVsS2V5Lmdl
dCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFwcGxpY2F0aW9uTGFi
ZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlv
bkxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxhYmVsV0sgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0RGljdGlv
bmFyeSwgYXBwbGljYXRpb25MYWJlbEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gdGVzdERp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGF0
dHJMYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERpY3Rpb25hcnksICJBdHRyTGFiZWwiKTsKKyAg
ICAgICAgYXV0byBhcHBsaWNhdGlvbkxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0RGljdGlvbmFy
eSwgIkFwcGxpY2F0aW9uTGFiZWwiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmNsZWFuVXBLZXljaGFpbih0b1dURlN0cmluZyhhdHRyTGFiZWxXSyksIGFwcGxpY2F0aW9u
TGFiZWxXSyA/IHRvV1RGU3RyaW5nKGFwcGxpY2F0aW9uTGFiZWxXSykgOiBTdHJpbmcoKSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiS2V5RXhpc3RzSW5LZXljaGFpbiIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgdGVzdERpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQXR0ckxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhdHRyTGFiZWxX
SyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRl
c3REaWN0aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gYXBwbGljYXRpb25MYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIGFwcGxpY2F0aW9uTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5LCBhcHBsaWNhdGlvbkxhYmVsS2V5Lmdl
dCgpKSk7Ci0KKyAgICAgICAgYXV0byB0ZXN0RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gYXR0ckxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0
RGljdGlvbmFyeSwgIkF0dHJMYWJlbCIpOworICAgICAgICBhdXRvIGFwcGxpY2F0aW9uTGFiZWxX
SyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXBwbGljYXRpb25MYWJlbCIpOwogICAg
ICAgICBib29sIGtleUV4aXN0c0luS2V5Y2hhaW4gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkua2V5RXhpc3RzSW5LZXljaGFpbih0b1dURlN0cmluZyhhdHRyTGFiZWxXSyksIHRvV1RGU3Ry
aW5nKGFwcGxpY2F0aW9uTGFiZWxXSykpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGtleUV4aXN0c0luS2V5Y2hhaW4pKTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKGtleUV4aXN0c0luS2V5Y2hhaW4pKTsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNlcnZlclRydXN0RXZhbHVhdGlvbkNh
bGxiYWNrQ2FsbHNDb3VudCIpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVz
dWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50KCkpKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCgpKSk7CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNob3Vs
ZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRE
aXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KFdLQm9vbGVhbkdldFZhbHVlKHZh
bHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREaXNt
aXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTE4NDgsMTYgKzEzMzAs
MTMgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5
bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92
ZXJyaWRlVGltZXJGb3JUZXN0aW5nIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJp
ZGVUaW1lckZvclRlc3RpbmcoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGlt
ZXJGb3JUZXN0aW5nKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVz
dGluZyIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tV
UkxHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLVVJMUmVmIHVybCA9IHN0YXRpY19jYXN0PFdLVVJM
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyh1cmwpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVy
c2lvblVSTEZvclRlc3Rpbmcoc3RhdGljX2Nhc3Q8V0tVUkxSZWY+KG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTkwMiwxNyArMTM4MSwxMCBAQCB2
b2lkIFRlc3RJbnZvY2F0aW9uOjpydW5VSVNpZGVTY3JpcHQoV0tTdHJpbmdSZWYgc2NyaXB0LCB1
bnNpZ25lZCBzY3JpcHRDYWxsYmFjawogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjp1aVNjcmlwdERp
ZENvbXBsZXRlKGNvbnN0IFN0cmluZyYgcmVzdWx0LCB1bnNpZ25lZCBzY3JpcHRDYWxsYmFja0lE
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxVSVNpZGVTY3JpcHRDYWxsYmFjayIp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiByZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJSZXN1bHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNr
SURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lE
IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBjYWxsYmFja0lEVmFsdWUgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKHNjcmlwdENhbGxiYWNrSUQpKTsKLQotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHJlc3VsdEtleS5nZXQoKSwgdG9XSyhyZXN1bHQp
LmdldCgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBjYWxs
YmFja0lES2V5LmdldCgpLCBjYWxsYmFja0lEVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKKyAgICBzZXRWYWx1ZShtZXNzYWdlQm9keSwgIlJlc3VsdCIsIHJlc3VsdCk7CisgICAg
c2V0VmFsdWUobWVzc2FnZUJvZHksICJDYWxsYmFja0lEIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHNjcmlwdENhbGxiYWNrSUQpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxVSVNpZGVTY3Jp
cHRDYWxsYmFjayIsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6b3V0cHV0VGV4dChjb25zdCBXVEY6OlN0cmluZyYgdGV4dCkKQEAgLTE5MjIsMTc0ICsxMzk0
LDE0MyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpvdXRwdXRUZXh0KGNvbnN0IFdURjo6U3RyaW5n
JiB0ZXh0KQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRCZWdpblN3aXBlKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkQmVnaW5Td2lwZUNhbGxiYWNrIikpOwotICAgIFdL
UGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJDYWxsRGlkQmVnaW5Td2lwZUNhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVz
dEludm9jYXRpb246OndpbGxFbmRTd2lwZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Q2FsbFdpbGxFbmRTd2lwZUNhbGxiYWNrIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsV2ls
bEVuZFN3aXBlQ2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkRW5kU3dp
cGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRFbmRTd2lwZUNhbGxiYWNr
IikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
MCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkRW5kU3dpcGVDYWxsYmFjayIpOwogfQog
CiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVTd2lwZVNuYXBzaG90KCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrIikp
OwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNr
Iik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246Om5vdGlmeURvd25sb2FkRG9uZSgpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTm90aWZ5RG93bmxvYWREb25lIikpOwotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJOb3RpZnlEb3dubG9hZERvbmUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZENsZWFyU3RhdGlz
dGljc0luTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwoKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vic2l0
ZURhdGFSZW1vdmFsIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkQ2xlYXJTdGF0aXN0
aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9u
OjpkaWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlcigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2FsbERpZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyIikpOwotICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJDYWxsRGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiKTsKIH0KIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcygpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNv
b2tpZXMiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRTaG91bGRCbG9j
a1RoaXJkUGFydHlDb29raWVzIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiKSk7Ci0gICAg
V0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRUb1NhbWVTaXRlU3Ry
aWN0Q29va2llcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFRvU2Ft
ZVNpdGVTdHJpY3RDb29raWVzIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1
bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlk
U2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4iKSk7Ci0gICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluIik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbigpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFRoaXJkUGFydHlDTkFNRURvbWFp
biIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFRoaXJkUGFydHlDTkFN
RURvbWFpbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZXNldFN0YXRpc3RpY3NU
b0NvbnNpc3RlbnRTdGF0ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJl
c2V0U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJD
YWxsRGlkUmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUiKTsKIH0KIAogdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdCgpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FsbERpZFNldEJsb2NrQ29va2llc0Zvckhvc3QiKSk7Ci0gICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxEaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0Iik7CiB9CiAKIHZvaWQgVGVz
dEludm9jYXRpb246OmRpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNhbGxEaWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikpOwotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJDYWxsRGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIpOwogfQogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSgpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVi
dWdNb2RlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0UHJldmFsZW50UmVzb3Vy
Y2VGb3JEZWJ1Z01vZGUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0TGFzdFNl
ZW4oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRMYXN0U2VlbiIpKTsK
LSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldExhc3RTZWVuIik7CiB9CiAKIHZvaWQgVGVz
dEludm9jYXRpb246OmRpZE1lcmdlU3RhdGlzdGljKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDYWxsRGlkTWVyZ2VTdGF0aXN0aWMiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxE
aWRNZXJnZVN0YXRpc3RpYyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRFeHBp
cmVkU3RhdGlzdGljKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0RXhw
aXJlZFN0YXRpc3RpYyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldEV4cGlyZWRT
dGF0aXN0aWMiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJldmFsZW50UmVz
b3VyY2UoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRQcmV2YWxlbnRS
ZXNvdXJjZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFByZXZhbGVudFJlc291
cmNlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRIYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRIYXNI
YWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRIYXNI
YWRVc2VySW50ZXJhY3Rpb24iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2
ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucykKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRy
aWVzIikpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAgZm9yIChhdXRvJiBk
b21haW4gOiBkb21haW5zKQotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZXNzYWdlQm9keS5n
ZXQoKSwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkb21haW4udXRmOCgp
LmRhdGEoKSkpLmdldCgpKTsKLSAgICAKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAgICAgV0tBcnJheUFw
cGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHRvV0soZG9tYWluKS5nZXQoKSk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzIiwgbWVz
c2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTG9h
ZGVkU3VicmVzb3VyY2VEb21haW5zKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucykKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWlu
cyIpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAoYXV0byYgZG9t
YWluIDogZG9tYWlucykKLSAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0
KCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZG9tYWluLnV0ZjgoKS5k
YXRhKCkpKS5nZXQoKSk7Ci0KLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0
ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHRvV0soZG9tYWluKS5nZXQoKSk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJDYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWlucyIsIG1lc3NhZ2VC
b2R5LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3ZlQWxsU2Vzc2lv
bkNyZWRlbnRpYWxzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVtb3Zl
QWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNh
bGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFjayIpOwogfQogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRTZXRBcHBCb3VuZERvbWFpbnMoKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkNhbGxEaWRTZXRBcHBCb3VuZERvbWFpbnMiKSk7Ci0gICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxEaWRTZXRBcHBCb3VuZERvbWFpbnMiKTsKIH0KIAogdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKQpAQCAtMjEwNCw4ICsxNTQ1LDcg
QEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbigpCiAKIHZvaWQg
VGVzdEludm9jYXRpb246OnBlcmZvcm1DdXN0b21NZW51QWN0aW9uKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJQZXJmb3JtQ3VzdG9tTWVudUFjdGlvbiIpKTsKLSAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiUGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6aW5pdGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQoKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhMTVmYzBhMGU5YWZhZTM0MWNjY2QwNjAzODNl
ZDMwMWE3MjQxYjZiLi42MTcxOGFjNjU1ODgxNzc4ZTgzYzk3ZmJlMTc4Mjc4Yzg3MGU2YjhmIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRl
c3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzU1LDYgKzM1NSw4IEBACiAJ
CTg0MUNDMDBEMTgxMTg1QkYwMDQyRTlCNiAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NDFDQzAwRTE4MTE4NUJGMDA0MkU5QjYgLyogT3B0aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBXZWJLaXRUZXN0UnVubmVyICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFj
aC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJLaXRUZXN0UnVu
bmVyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQk5MzM4RDFCQTI1MEE3
OUVCMDBFODI3RjYgLyogSlNCYXNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNCYXNpY3MuaDsgcGF0
aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTMzOEQxQkUyNTBCRDlERDAwRTgyN0Y2IC8qIERpY3Rpb25hcnlG
dW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGlvbmFyeUZ1bmN0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzc2NDE3NjIxMEQ3MzYwMDBBM0RBQUUgLyogV2ViS2l0
VGVzdFJ1bm5lcldpbmRvdy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzNzY0MTc3MjEwRDczNjEwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDNzg4MUYyNTBDNjlFNDAwQzBBQTI0
IC8qIFJlZnRlc3RGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gUmVmdGVzdEZ1bmN0aW9ucy5jcHA7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL1Jl
ZnRlc3RGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODkyLDYg
Kzg5NCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTM3OEQ0
NDIyMTMzNDZEMDAwMDZBNzc3QiAvKiBjb25maWcuaCAqLywKKwkJCQk5MzM4RDFCRTI1MEJEOURE
MDBFODI3RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9ucy5oICovLAogCQkJCUJDOTlBNDg0MTIwODkw
MUEwMDdFOUYwOCAvKiBTdHJpbmdGdW5jdGlvbnMuaCAqLywKIAkJCQk5QjM2QTI3MDIwOTQ1M0Ew
MDAzRTA2NTEgLyogV2hhdFRvRHVtcC5oICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9XZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAKaW5kZXggNDU4Njc3ZjUwOWIx
MTc0MzkzYWU0YzM4Y2EwOTQ1N2M4ZTgwZjg0Yy4uY2Q1ZmM2NjIxNWE0YjAzNzk2ODJjNzJiMmVj
MWQxZjBiOTgwNzNiMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJOb3Rp
ZmljYXRpb25Qcm92aWRlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJOb3Rp
ZmljYXRpb25Qcm92aWRlci5jcHAKQEAgLTEyNiw4ICsxMjYsOCBAQCB2b2lkIFdlYk5vdGlmaWNh
dGlvblByb3ZpZGVyOjpjbG9zZVdlYk5vdGlmaWNhdGlvbihXS05vdGlmaWNhdGlvblJlZiBub3Rp
ZmljYXRpbwogCiAgICAgcmVtb3ZlR2xvYmFsSURGcm9tSURNYXAobV9sb2NhbFRvR2xvYmFsTm90
aWZpY2F0aW9uSURNYXAsIGlkKTsKIAotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB3a0lE
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpZCkpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAg
YXV0byB3a0lEID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpZCkpOworICAgIGF1dG8gYXJyYXkg
PSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIFdLQXJyYXlBcHBlbmRJdGVt
KGFycmF5LmdldCgpLCB3a0lELmdldCgpKTsKICAgICBXS05vdGlmaWNhdGlvbk1hbmFnZXJQcm92
aWRlckRpZENsb3NlTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25NYW5hZ2VyLCBhcnJheS5nZXQo
KSk7CiB9CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6
cmVtb3ZlTm90aWZpY2F0aW9uTWFuYWdlcihXS05vdGlmaWNhdGlvbk1hbmFnZXJSZWYKICAgICBh
dXRvIHRvUmVtb3ZlID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIFdLUmV0YWluUHRyPFdLTm90aWZp
Y2F0aW9uTWFuYWdlclJlZj4gZ3VhcmQobWFuYWdlcik7CiAgICAgbV9vd25lZE5vdGlmaWNhdGlv
bnMucmVtb3ZlKGl0ZXJhdG9yKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4g
YXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gYXJyYXkg
PSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAodWludDY0X3Qgbm90
aWZpY2F0aW9uSUQgOiB0b1JlbW92ZSkgewogICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX293bmlu
Z01hbmFnZXIucmVtb3ZlKG5vdGlmaWNhdGlvbklEKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChz
dWNjZXNzLCBzdWNjZXNzKTsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlv
blByb3ZpZGVyOjpyZXNldCgpCiAgICAgZm9yIChhdXRvJiBub3RpZmljYXRpb25QYWlyIDogbV9v
d25lZE5vdGlmaWNhdGlvbnMpIHsKICAgICAgICAgaWYgKG5vdGlmaWNhdGlvblBhaXIudmFsdWUu
aXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7
CisgICAgICAgIGF1dG8gYXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwog
ICAgICAgICBmb3IgKHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEIDogbm90aWZpY2F0aW9uUGFpci52
YWx1ZSkKICAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKGFycmF5LmdldCgpLCBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKG5vdGlmaWNhdGlvbklEKSkuZ2V0KCkpOwogCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcAppbmRleCAyMGQ1YTFhYWRiMjllMzMyYmUy
OWIyYjFmNGMyMzYwOTE5YmEwZmYxLi5jOWQ0N2ZkNjNiODRlNDZlNDYyYTUwZmY0YmUwN2JmMzQ2
OGFjYTYwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFn
ZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJXb3JrUXVldWVNYW5hZ2VyLmgiCiAKICNpbmNs
dWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2UuaD4KICNp
bmNsdWRlIDxXZWJLaXQvV0tQYWdlUHJpdmF0ZS5oPgpAQCAtNzUsNyArNzYsNyBAQCB0ZW1wbGF0
ZSA8V29ya1F1ZXVlSXRlbTo6VHlwZSB0eXBlPgogY2xhc3MgU2NyaXB0SXRlbSA6IHB1YmxpYyBX
b3JrUXVldWVJdGVtIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTY3JpcHRJdGVtKGNvbnN0IFN0
cmluZyYgc2NyaXB0KQotICAgICAgICA6IG1fc2NyaXB0KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc2NyaXB0LnV0ZjgoKS5kYXRhKCkpKSkKKyAgICAgICAgOiBtX3Njcmlw
dCh0b1dLKHNjcmlwdCkpCiAgICAgewogICAgIH0KIApAQCAtMTYxLDcgKzE2Miw3IEBAIHZvaWQg
V29ya1F1ZXVlTWFuYWdlcjo6cXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBTdHJpbmcmIGNvbnRl
bnQsIGNvbnN0IFN0cmluZyYKICAgICBjbGFzcyBMb2FkSFRNTFN0cmluZ0l0ZW0gOiBwdWJsaWMg
V29ya1F1ZXVlSXRlbSB7CiAgICAgcHVibGljOgogICAgICAgICBMb2FkSFRNTFN0cmluZ0l0ZW0o
Y29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIGNvbnN0IFN0cmlu
ZyYgdW5yZWFjaGFibGVVUkwpCi0gICAgICAgICAgICA6IG1fY29udGVudChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnRlbnQudXRmOCgpLmRhdGEoKSkpKQorICAgICAg
ICAgICAgOiBtX2NvbnRlbnQodG9XSyhjb250ZW50KSkKICAgICAgICAgICAgICwgbV9iYXNlVVJM
KGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcoYmFzZVVSTC51dGY4KCkuZGF0YSgp
KSkpCiAgICAgICAgICAgICAsIG1fdW5yZWFjaGFibGVVUkwoYWRvcHRXSyhXS1VSTENyZWF0ZVdp
dGhVVEY4Q1N0cmluZyh1bnJlYWNoYWJsZVVSTC51dGY4KCkuZGF0YSgpKSkpCiAgICAgICAgIHsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCmluZGV4
IDY3MzM4ZjRhYTgyNzNjZmI2ODcyMjliZmJhZDNmYTRkZGIzN2I0ZGYuLjAxYzUzMWE5YjZhY2U4
ZTgxNjk0OGY2NzZjZTYzMWY1Mjc5NGI2YzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcApAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgQ0dDb250
ZXh0UmVmIGNyZWF0ZUNHQ29udGV4dEZyb21DR0ltYWdlKENHSW1hZ2VSZWYgaW1hZ2UpCiAgICAg
c2l6ZV90IHJvd0J5dGVzID0gKDQgKiBwaXhlbHNXaWRlICsgNjMpICYgfjYzOwogCiAgICAgLy8g
Q3JlYXRpbmcgdGhpcyBiaXRtYXAgaW4gdGhlIGRldmljZSBjb2xvciBzcGFjZSBzaG91bGQgcHJl
dmVudCBhbnkgY29sb3IgY29udmVyc2lvbiB3aGVuIHRoZSBpbWFnZSBvZiB0aGUgd2ViIHZpZXcg
aXMgZHJhd24gaW50byBpdC4KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNw
YWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgYXV0byBj
b2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgcGl4ZWxzV2lk
ZSwgcGl4ZWxzSGlnaCwgOCwgcm93Qnl0ZXMsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpOwogICAgIGlm
ICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02Myw3ICs2Myw3IEBAIHN0
YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0RnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBp
bWFnZSkKIAogc3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVDR0NvbnRleHRGcm9tSW1hZ2UoV0tJ
bWFnZVJlZiB3a0ltYWdlKQogewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFk
b3B0Q0YoV0tJbWFnZUNyZWF0ZUNHSW1hZ2Uod2tJbWFnZSkpOworICAgIGF1dG8gaW1hZ2UgPSBh
ZG9wdENGKFdLSW1hZ2VDcmVhdGVDR0ltYWdlKHdrSW1hZ2UpKTsKICAgICByZXR1cm4gY3JlYXRl
Q0dDb250ZXh0RnJvbUNHSW1hZ2UoaW1hZ2UuZ2V0KCkpOwogfQogCkBAIC0xMDksOSArMTA5LDkg
QEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDb250ZXh0KENHQ29udGV4dFJlZiBiaXRt
YXBDb250ZXh0LCBjaGFyIGhhc2hTdHJpbmcKIAogc3RhdGljIHZvaWQgZHVtcEJpdG1hcChDR0Nv
bnRleHRSZWYgYml0bWFwQ29udGV4dCwgY29uc3QgY2hhciogY2hlY2tzdW0pCiB7Ci0gICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJ
bWFnZShiaXRtYXBDb250ZXh0KSk7Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGlt
YWdlRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7Ci0gICAgUmV0YWlu
UHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gaW1hZ2VEZXN0ID0gYWRvcHRDRihDR0ltYWdlRGVz
dGluYXRpb25DcmVhdGVXaXRoRGF0YShpbWFnZURhdGEuZ2V0KCksIGtVVFR5cGVQTkcsIDEsIDAp
KTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShi
aXRtYXBDb250ZXh0KSk7CisgICAgYXV0byBpbWFnZURhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0
ZU11dGFibGUoMCwgMCkpOworICAgIGF1dG8gaW1hZ2VEZXN0ID0gYWRvcHRDRihDR0ltYWdlRGVz
dGluYXRpb25DcmVhdGVXaXRoRGF0YShpbWFnZURhdGEuZ2V0KCksIGtVVFR5cGVQTkcsIDEsIDAp
KTsKICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShpbWFnZURlc3QuZ2V0KCksIGltYWdl
LmdldCgpLCAwKTsKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShpbWFnZURlc3QuZ2V0
KCkpOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0NyYXNoUmVw
b3J0ZXJJbmZvLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9DcmFzaFJlcG9ydGVy
SW5mby5tbQppbmRleCA0Yzc5YWI1Yjg1ZDY0MTg5YTdlMGEyOTZlZWE5MGMxZDgxMThkYzNkLi40
MTBkOWZkY2IzMWUyYzZlNmNhNzY0OTU2MTQ2MDYzOGMwOTEwNWViIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0NyYXNoUmVwb3J0ZXJJbmZvLm1tCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0KQEAgLTM1LDEyICsz
NSwxMiBAQCBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGljIFN0cmluZyB0ZXN0UGF0aEZyb21VUkwo
V0tVUkxSZWYgdXJsKQogewotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2ZVUkwgPSBhZG9wdENG
KFdLVVJMQ29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybCkpOworICAgIGF1dG8gY2ZV
UkwgPSBhZG9wdENGKFdLVVJMQ29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybCkpOwog
ICAgIGlmICghY2ZVUkwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gc2NoZW1lQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVNjaGVtZShj
ZlVSTC5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcGF0aENGU3RyaW5nID0g
YWRvcHRDRihDRlVSTENvcHlQYXRoKGNmVVJMLmdldCgpKSk7CisgICAgYXV0byBzY2hlbWVDRlN0
cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5U2NoZW1lKGNmVVJMLmdldCgpKSk7CisgICAgYXV0byBw
YXRoQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVBhdGgoY2ZVUkwuZ2V0KCkpKTsKIAogICAg
IFN0cmluZyBzY2hlbWVTdHJpbmcoc2NoZW1lQ0ZTdHJpbmcuZ2V0KCkpOwogICAgIFN0cmluZyBw
YXRoU3RyaW5nKHBhdGhDRlN0cmluZy5nZXQoKSk7CkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBT
dHJpbmcgdGVzdFBhdGhGcm9tVVJMKFdLVVJMUmVmIHVybCkKICAgICBpZiAoIWVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0cmluZywgImh0dHAiKSAmJiAhZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3RyaW5nLCAiaHR0cHMiKSkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBob3N0Q0ZTdHJpbmcgPSBh
ZG9wdENGKENGVVJMQ29weUhvc3ROYW1lKGNmVVJMLmdldCgpKSk7CisgICAgYXV0byBob3N0Q0ZT
dHJpbmcgPSBhZG9wdENGKENGVVJMQ29weUhvc3ROYW1lKGNmVVJMLmdldCgpKSk7CiAgICAgU3Ry
aW5nIGhvc3RTdHJpbmcoaG9zdENGU3RyaW5nLmdldCgpKTsKICAgICBpZiAoaG9zdFN0cmluZyA9
PSAiMTI3LjAuMC4xIikKICAgICAgICAgcmV0dXJuIHBhdGhTdHJpbmc7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0gYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KaW5kZXggMzY1
MzM3YWRmOTlmMGI5Y2RkNmFmMDk3ZmMwMmJlODdhNjcxNjY1Ny4uNzEzMDMyNmEzZTYxY2UyYmQw
YTc2ZGY3Mjg5OGQ5ZTRiMDA2M2IwNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZURhdGFTdG9yZShXS1BhZ2VDb25maWd1
cmF0aW9uUmVmLCBjb25zdCBUCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRl
V2ViVmlldyhXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9u
cykKIHsKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29waWVkQ29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsKKyAg
ICBhdXRvIGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtnbG9iYWxXZWJWaWV3Q29uZmln
dXJhdGlvbiBjb3B5XSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChvcHRp
b25zLnVzZURhdGFEZXRlY3Rpb24pCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Nv
Y29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KaW5kZXggNWM4NjJlOWIwZWM3N2QwNWUwNzcyOWRj
ZTY0NzZmNTg5MjEyM2IzOC4uOTE1ZjQ3NmM2MTVhZTYxMDkwZDkwY2E3OTc2YmY4ZjJjOTliNTY2
YiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tX
ZWJWaWV3Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldL
V2ViVmlldy5tbQpAQCAtOTAsNyArOTAsNyBAQCBJR05PUkVfV0FSTklOR1NfQkVHSU4oImRlcHJl
Y2F0ZWQtaW1wbGVtZW50YXRpb25zIikKIC0gKHZvaWQpZHJhZ0ltYWdlOihOU0ltYWdlICopYW5J
bWFnZSBhdDooTlNQb2ludCl2aWV3TG9jYXRpb24gb2Zmc2V0OihOU1NpemUpaW5pdGlhbE9mZnNl
dCBldmVudDooTlNFdmVudCAqKWV2ZW50IHBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBib2Fy
ZCBzb3VyY2U6KGlkKXNvdXJjZU9iaiBzbGlkZUJhY2s6KEJPT0wpc2xpZGVGbGFnCiBJR05PUkVf
V0FSTklOR1NfRU5ECiB7Ci0gICAgUmV0YWluUHRyPFdlYktpdFRlc3RSdW5uZXJEcmFnZ2luZ0lu
Zm8+IGRyYWdnaW5nSW5mbyA9IGFkb3B0TlMoW1tXZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZv
IGFsbG9jXSBpbml0V2l0aEltYWdlOmFuSW1hZ2Ugb2Zmc2V0OmluaXRpYWxPZmZzZXQgcGFzdGVi
b2FyZDpwYm9hcmQgc291cmNlOnNvdXJjZU9ial0pOworICAgIGF1dG8gZHJhZ2dpbmdJbmZvID0g
YWRvcHROUyhbW1dlYktpdFRlc3RSdW5uZXJEcmFnZ2luZ0luZm8gYWxsb2NdIGluaXRXaXRoSW1h
Z2U6YW5JbWFnZSBvZmZzZXQ6aW5pdGlhbE9mZnNldCBwYXN0ZWJvYXJkOnBib2FyZCBzb3VyY2U6
c291cmNlT2JqXSk7CiAgICAgW3NlbGYgZHJhZ2dpbmdVcGRhdGVkOmRyYWdnaW5nSW5mby5nZXQo
KV07CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaAppbmRleCBhYmMwYTUwYzk3MGMxYmIzM2YxZmIxMDkz
OTM1MmFmOGNhN2UwNDAzLi5jYzk4MTM5NDI0ZjI4ODA2NDQzOTg5ODM0NWMzZTdkNGVhNTUzMzc4
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJv
bGxlckNvY29hLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENv
bnRyb2xsZXJDb2NvYS5oCkBAIC0zMiwxMiArMzIsMTcgQEAgT0JKQ19DTEFTUyBUZXN0UnVubmVy
V0tXZWJWaWV3OwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNzIFVJU2NyaXB0Q29udHJvbGxlckNv
Y29hIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvbW1vbiB7Ci1wdWJsaWM6Citwcm90ZWN0
ZWQ6CisgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EoVUlTY3JpcHRDb250ZXh0
Jik7CisgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldygpIGNvbnN0OworCisgICAgdm9p
ZCBkb0FzeW5jVGFzayhKU1ZhbHVlUmVmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKICAgICB2b2lk
IHNldFZpZXdTY2FsZShkb3VibGUpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TWluaW11bUVmZmVj
dGl2ZVdpZHRoKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBiZWNvbWVGaXJzdFJlc3BvbmRl
cigpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzaWduRmlyc3RSZXNwb25kZXIoKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRvQXN5bmNUYXNrKEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVt
b3ZlVmlld0Zyb21XaW5kb3coSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCBhZGRWaWV3
VG9XaW5kb3coSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCBvdmVycmlkZVByZWZlcmVu
Y2UoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKSBvdmVycmlkZTsKQEAgLTU5LDExICs2NCw2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgaW5zZXJ0QXR0YWNobWVudEZvckZpbGVQYXRoKEpTU3RyaW5n
UmVmIGZpbGVQYXRoLCBKU1N0cmluZ1JlZiBjb250ZW50VHlwZSwgSlNWYWx1ZVJlZiBjYWxsYmFj
aykgb3ZlcnJpZGU7CiAKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBVSVNjcmlwdENvbnRyb2xs
ZXJDb2NvYShVSVNjcmlwdENvbnRleHQmKTsKLSAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJW
aWV3KCkgY29uc3Q7Ci0KLXByaXZhdGU6CiAgICAgdm9pZCBjb21wbGV0ZVRhc2tBc3luY2hyb25v
dXNseUFmdGVyQWN0aXZpdHlTdGF0ZVVwZGF0ZSh1bnNpZ25lZCBjYWxsYmFja0lEKTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9s
bGVyQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJv
bGxlckNvY29hLm1tCmluZGV4IDk4YmI3NGI0MTNiOTUwM2U2OTg4MDdlZGI4NjI5OGUzNzBkY2Qw
ZjIuLjU4NDc5NzZmMjE4NTdmNTNmNDg1ZWNiMWZiMWViOTExNzIxYTU2ZGEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0K
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2Nv
YS5tbQpAQCAtMTM1LDIyICsxMzUsMTggQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6
YWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYgY2FsbGJhY2spCiAKIHZvaWQgVUlTY3JpcHRDb250
cm9sbGVyQ29jb2E6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJlbmNlUmVm
LCBKU1N0cmluZ1JlZiB2YWx1ZVJlZikKIHsKLSAgICBXS1ByZWZlcmVuY2VzICpwcmVmZXJlbmNl
cyA9IHdlYlZpZXcoKS5jb25maWd1cmF0aW9uLnByZWZlcmVuY2VzOwotCi0gICAgU3RyaW5nIHBy
ZWZlcmVuY2UgPSB0b1dURlN0cmluZyh0b1dLKHByZWZlcmVuY2VSZWYpKTsKLSAgICBTdHJpbmcg
dmFsdWUgPSB0b1dURlN0cmluZyh0b1dLKHZhbHVlUmVmKSk7Ci0gICAgaWYgKHByZWZlcmVuY2Ug
PT0gIldlYktpdE1pbmltdW1Gb250U2l6ZSIpCi0gICAgICAgIHByZWZlcmVuY2VzLm1pbmltdW1G
b250U2l6ZSA9IHZhbHVlLnRvRG91YmxlKCk7CisgICAgaWYgKHRvV1RGU3RyaW5nKHByZWZlcmVu
Y2VSZWYpID09ICJXZWJLaXRNaW5pbXVtRm9udFNpemUiKQorICAgICAgICB3ZWJWaWV3KCkuY29u
ZmlndXJhdGlvbi5wcmVmZXJlbmNlcy5taW5pbXVtRm9udFNpemUgPSB0b1dURlN0cmluZyh2YWx1
ZVJlZikudG9Eb3VibGUoKTsKIH0KIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6Zmlu
ZFN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcsIHVuc2lnbmVkIGxvbmcgb3B0aW9ucywgdW5zaWdu
ZWQgbG9uZyBtYXhDb3VudCkKIHsKLSAgICBbd2ViVmlldygpIF9maW5kU3RyaW5nOnRvV1RGU3Ry
aW5nKHRvV0soc3RyaW5nKSkgb3B0aW9uczpvcHRpb25zIG1heENvdW50Om1heENvdW50XTsKKyAg
ICBbd2ViVmlldygpIF9maW5kU3RyaW5nOnRvV1RGU3RyaW5nKHN0cmluZykgb3B0aW9uczpvcHRp
b25zIG1heENvdW50Om1heENvdW50XTsKIH0KIAogSlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9s
bGVyQ29jb2E6OmNvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbShKU1N0cmluZ1JlZiBpbnRlcmZh
Y2VJdGVtKSBjb25zdAogewotICAgIE5TRGljdGlvbmFyeSAqY29udGVudERpY3Rpb25hcnkgPSBb
d2ViVmlldygpIF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06dG9XVEZTdHJpbmcodG9XSyhp
bnRlcmZhY2VJdGVtKSldOworICAgIE5TRGljdGlvbmFyeSAqY29udGVudERpY3Rpb25hcnkgPSBb
d2ViVmlldygpIF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06dG9XVEZTdHJpbmcoaW50ZXJm
YWNlSXRlbSldOwogICAgIHJldHVybiBKU1ZhbHVlVG9PYmplY3QobV9jb250ZXh0LT5qc0NvbnRl
eHQoKSwgW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OmNvbnRlbnREaWN0aW9uYXJ5IGluQ29udGV4
dDpbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOm1fY29udGV4dC0+anND
b250ZXh0KCldXS5KU1ZhbHVlUmVmLCBudWxscHRyKTsKIH0KIApAQCAtMjE5LDEyICsyMTUsMTAg
QEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6cGFzdGUoKQogdm9pZCBVSVNjcmlwdENv
bnRyb2xsZXJDb2NvYTo6aW5zZXJ0QXR0YWNobWVudEZvckZpbGVQYXRoKEpTU3RyaW5nUmVmIGZp
bGVQYXRoLCBKU1N0cmluZ1JlZiBjb250ZW50VHlwZSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsK
ICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250ZXh0LT5wcmVwYXJlRm9yQXN5bmNUYXNr
KGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25QZXJzaXN0ZW50KTsKLQotICAgIFJldGFpblB0cjxD
RlVSTFJlZj4gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmN1cnJlbnRUZXN0VVJMKCkpKTsKLSAg
ICBSZXRhaW5QdHI8TlNVUkw+IGF0dGFjaG1lbnRVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OnRvV1RGU3RyaW5nKHRvV0soZmlsZVBhdGgpKSByZWxhdGl2ZVRvVVJMOihfX2JyaWRnZSBOU1VS
TCAqKXRlc3RVUkwuZ2V0KCldOwotCi0gICAgYXV0byBmaWxlV3JhcHBlciA9IGFkb3B0TlMoW1tO
U0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFVSTDphdHRhY2htZW50VVJMLmdldCgpIG9wdGlv
bnM6MCBlcnJvcjpuaWxdKTsKLSAgICBbd2ViVmlldygpIF9pbnNlcnRBdHRhY2htZW50V2l0aEZp
bGVXcmFwcGVyOmZpbGVXcmFwcGVyLmdldCgpIGNvbnRlbnRUeXBlOnRvV1RGU3RyaW5nKHRvV0so
Y29udGVudFR5cGUpKSBjb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzKSB7CisgICAgYXV0byB0ZXN0
VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuY3VycmVudFRlc3RVUkwoKSkpOworICAgIGF1dG8gYXR0YWNo
bWVudFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6dG9XVEZTdHJpbmcoZmlsZVBhdGgpIHJl
bGF0aXZlVG9VUkw6KF9fYnJpZGdlIE5TVVJMICopdGVzdFVSTC5nZXQoKV07CisgICAgYXV0byBm
aWxlV3JhcHBlciA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFVSTDph
dHRhY2htZW50VVJMIG9wdGlvbnM6MCBlcnJvcjpuaWxdKTsKKyAgICBbd2ViVmlldygpIF9pbnNl
cnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyLmdldCgpIGNvbnRlbnRUeXBl
OnRvV1RGU3RyaW5nKGNvbnRlbnRUeXBlKSBjb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzKSB7CiAg
ICAgICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2Nv
bnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNrSUQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IubW0gYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbQppbmRleCBlMjk4MzhiYTgyOGZiNGJk
OTA4NTdhYjZiZWYyZmQ0NjU5ZmI0MjE4Li4wYzQ0NjMzNWIyNDBkNmE3ZTA2NzQxNGNhOWMzMDQw
YWE2ZTM1NDYzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVu
dEdlbmVyYXRvci5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdl
bmVyYXRvci5tbQpAQCAtMTg5LDcgKzE4OSw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0CiAKIC0g
KHZvaWQpX3NlbmRJT0hJREtleWJvYXJkRXZlbnQ6KHVpbnQ2NF90KXRpbWVzdGFtcCB1c2FnZToo
dWludDMyX3QpdXNhZ2UgaXNLZXlEb3duOihib29sKWlzS2V5RG93bgogewotICAgIFJldGFpblB0
cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0ZUtleWJv
YXJkRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRD
RihJT0hJREV2ZW50Q3JlYXRlS2V5Ym9hcmRFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LAogICAg
ICAgICB0aW1lc3RhbXAsCiAgICAgICAgIGtISURQYWdlX0tleWJvYXJkT3JLZXlwYWQsCiAgICAg
ICAgIHVzYWdlLApAQCAtMzYxLDcgKzM2MSw3IEBAIC0gKElPSElERXZlbnRSZWYpX2NyZWF0ZUlP
SElERXZlbnRUeXBlOihIYW5kRXZlbnRUeXBlKWV2ZW50VHlwZQogICAgICAgICBldmVudE1hc2sg
fD0ga0lPSElERGlnaXRpemVyRXZlbnRJZGVudGl0eTsKIAogICAgIHVpbnQ2NF90IG1hY2hUaW1l
ID0gbWFjaF9hYnNvbHV0ZV90aW1lKCk7Ci0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2
ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlRGlnaXRpemVyRXZlbnQoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgbWFjaFRpbWUsCisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURF
dmVudENyZWF0ZURpZ2l0aXplckV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1hY2hUaW1lLAog
ICAgICAgICBrSU9ISUREaWdpdGl6ZXJUcmFuc2R1Y2VyVHlwZUhhbmQsCiAgICAgICAgIDAsCiAg
ICAgICAgIDAsCkBAIC00NTMsNyArNDUzLDcgQEAgLSAoQk9PTClfc2VuZEhJREV2ZW50OihJT0hJ
REV2ZW50UmVmKWV2ZW50UmVmCiAgICAgICAgIF9pb1N5c3RlbUNsaWVudCA9IElPSElERXZlbnRT
eXN0ZW1DbGllbnRDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7CiAKICAgICBpZiAoZXZlbnRS
ZWYpIHsKLSAgICAgICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IHN0cm9uZ0V2ZW50ID0gZXZl
bnRSZWY7CisgICAgICAgIGF1dG8gc3Ryb25nRXZlbnQgPSByZXRhaW5QdHIoZXZlbnRSZWYpOwog
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewogICAg
ICAgICAgICAgdWludDMyX3QgY29udGV4dElEID0gW1VJQXBwbGljYXRpb24gc2hhcmVkQXBwbGlj
YXRpb25dLmtleVdpbmRvdy5fY29udGV4dElkOwogICAgICAgICAgICAgQVNTRVJUKGNvbnRleHRJ
RCk7CkBAIC01MTIsNyArNTEyLDcgQEAgLSAodm9pZClfdXBkYXRlVG91Y2hQb2ludHM6KENHUG9p
bnQqKXBvaW50cyBjb3VudDooTlNVSW50ZWdlciljb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRv
dWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0
ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aSB3aXRoUG9pbnRJbldpbmRvd0Nvb3JkaW5hdGVzOnBv
aW50c1tpXSBpc1RvdWNoaW5nOllFU107CiAgICAgfQogICAgIAotICAgIFJldGFpblB0cjxJT0hJ
REV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBl
OmhhbmRFdmVudFR5cGVdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3Jl
YXRlSU9ISURFdmVudFR5cGU6aGFuZEV2ZW50VHlwZV0pOwogICAgIFtzZWxmIF9zZW5kSElERXZl
bnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC01MjksNyArNTI5LDcgQEAgLSAodm9pZCl0b3Vj
aERvd25BdFBvaW50czooQ0dQb2ludCopbG9jYXRpb25zIHRvdWNoQ291bnQ6KE5TVUludGVnZXIp
dG91Y2hDb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRH
ZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6
aW5kZXggd2l0aFBvaW50SW5XaW5kb3dDb29yZGluYXRlczpsb2NhdGlvbnNbaW5kZXhdIGlzVG91
Y2hpbmc6WUVTXTsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRS
ZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpIYW5kRXZlbnRUb3VjaGVk
XSk7CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRU
eXBlOkhhbmRFdmVudFRvdWNoZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVm
LmdldCgpXTsKIH0KIApAQCAtNTYzLDcgKzU2Myw3IEBAIC0gKHZvaWQpbGlmdFVwQXRQb2ludHM6
KENHUG9pbnQqKWxvY2F0aW9ucyB0b3VjaENvdW50OihOU1VJbnRlZ2VyKXRvdWNoQ291bnQKICAg
ICAgICAgW1tHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVkR2VuZXJhdGVkVG91Y2hl
c0RlYnVnV2luZG93XSB1cGRhdGVEZWJ1Z0luZGljYXRvckZvclRvdWNoOmluZGV4IHdpdGhQb2lu
dEluV2luZG93Q29vcmRpbmF0ZXM6Q0dQb2ludFplcm8gaXNUb3VjaGluZzpOT107CiAgICAgfQog
ICAgIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3Nl
bGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudExpZnRlZF0pOworICAgIGF1dG8gZXZl
bnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpIYW5kRXZlbnRMaWZ0
ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKICAgICAKICAg
ICBfYWN0aXZlUG9pbnRDb3VudCA9IG5ld1BvaW50Q291bnQ7CkBAIC02NDEsNyArNjQxLDcgQEAg
LSAodm9pZClzdHlsdXNEb3duQXRQb2ludDooQ0dQb2ludClsb2NhdGlvbiBhemltdXRoQW5nbGU6
KENHRmxvYXQpYXppbXV0aEFuZ2xlIGEKICAgICBfYWN0aXZlUG9pbnRzWzBdLmF6aW11dGhBbmds
ZSA9IE1fUEkgKiAyIC0gYXppbXV0aEFuZ2xlOwogICAgIF9hY3RpdmVQb2ludHNbMF0uYWx0aXR1
ZGVBbmdsZSA9IE1fUElfMiAtIGFsdGl0dWRlQW5nbGU7CiAKLSAgICBSZXRhaW5QdHI8SU9ISURF
dmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpT
dHlsdXNFdmVudFRvdWNoZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBf
Y3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRUb3VjaGVkXSk7CiAgICAgW3NlbGYgX3Nl
bmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTY1NSw3ICs2NTUsNyBAQCAtICh2
b2lkKXN0eWx1c01vdmVUb1BvaW50OihDR1BvaW50KWxvY2F0aW9uIGF6aW11dGhBbmdsZTooQ0dG
bG9hdClhemltdXRoQW5nbGUgYQogICAgIF9hY3RpdmVQb2ludHNbMF0uYXppbXV0aEFuZ2xlID0g
TV9QSSAqIDIgLSBhemltdXRoQW5nbGU7CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRpdHVkZUFu
Z2xlID0gTV9QSV8yIC0gYWx0aXR1ZGVBbmdsZTsKIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50
UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1
c0V2ZW50TW92ZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRl
SU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRNb3ZlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZl
bnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC02NjgsNyArNjY4LDcgQEAgLSAodm9pZClzdHls
dXNVcEF0UG9pbnQ6KENHUG9pbnQpbG9jYXRpb24KICAgICBfYWN0aXZlUG9pbnRzWzBdLmF6aW11
dGhBbmdsZSA9IDA7CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRpdHVkZUFuZ2xlID0gMDsKIAot
ICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2Ny
ZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TGlmdGVkXSk7CisgICAgYXV0byBldmVudFJl
ZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TGlmdGVk
XSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTEw
MjEsNyArMTAyMSw3IEBAIC0gKHZvaWQpZGlzcGF0Y2hFdmVudFdpdGhJbmZvOihOU0RpY3Rpb25h
cnkgKilldmVudEluZm8KIHsKICAgICBBU1NFUlQoW05TVGhyZWFkIGlzTWFpblRocmVhZF0pOwog
Ci0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBf
Y3JlYXRlSU9ISURFdmVudFdpdGhJbmZvOmV2ZW50SW5mb10pOworICAgIGF1dG8gZXZlbnRSZWYg
PSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50V2l0aEluZm86ZXZlbnRJbmZvXSk7CiAg
ICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5oIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKaW5kZXggMjhk
MDYwYzZkZmM0NzFhOTA1NDkwNjgzOTVjM2Q0MGY2YTljMDk2Yi4uODU0NjQ0NzY2ZDhiYzVhODE1
ZDI2N2U5YTdiYTRhMjA1ZDZlNjEyMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKQEAgLTI1LDExICsyNSwxMSBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKICNpbXBvcnQgIlVJU2NyaXB0
Q29udHJvbGxlckNvY29hLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZsb2F0UG9pbnQ7
CiBjbGFzcyBGbG9hdFJlY3Q7CkBAIC0zNywxMyArMzcsMTQgQEAgY2xhc3MgRmxvYXRSZWN0Owog
CiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVUlTY3JpcHRDb250cm9sbGVySU9TIDogcHVibGlj
IFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKK2NsYXNzIFVJU2NyaXB0Q29udHJvbGxlcklPUyBm
aW5hbCA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSB7CiBwdWJsaWM6CiAgICAgZXhw
bGljaXQgVUlTY3JpcHRDb250cm9sbGVySU9TKFVJU2NyaXB0Q29udGV4dCYgY29udGV4dCkKICAg
ICAgICAgOiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShjb250ZXh0KQogICAgIHsKICAgICB9CiAK
K3ByaXZhdGU6CiAgICAgdm9pZCB3YWl0Rm9yT3V0c3RhbmRpbmdDYWxsYmFja3MoKSBvdmVycmlk
ZTsKICAgICB2b2lkIGRvQWZ0ZXJQcmVzZW50YXRpb25VcGRhdGUoSlNWYWx1ZVJlZikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZShKU1ZhbHVl
UmVmKSBvdmVycmlkZTsKQEAgLTE1Niw3ICsxNTcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRE
aWRFbmRTY3JvbGxpbmdDYWxsYmFjayhKU1ZhbHVlUmVmKSBvdmVycmlkZTsKICAgICB2b2lkIGNs
ZWFyQWxsQ2FsbGJhY2tzKCkgb3ZlcnJpZGU7CiAKLXByaXZhdGU6CiAgICAgdm9pZCB3YWl0Rm9y
TW9kYWxUcmFuc2l0aW9uVG9GaW5pc2goKSBjb25zdDsKICAgICB2b2lkIHdhaXRGb3JTaW5nbGVU
YXBUb1Jlc2V0KCkgY29uc3Q7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RGb3JNZW51QWN0
aW9uKENGU3RyaW5nUmVmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
aW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQppbmRleCAxMzBjNDk3YzI0MGQ4MzhiYjRhZmZm
ZDIwNzMxNDE3NWE4M2RiYjI2Li43YWY2ZWNmNTA5ODVmMTVlZjQ3YzE5MThiNjVhMmViZGE2ZDI2
YTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRy
b2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250
cm9sbGVySU9TLm1tCkBAIC02OCwyNCArNjgsMTQgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqdG9O
U0RpY3Rpb25hcnkoQ0dSZWN0IHJlY3QpCiAgICAgfTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGFy
cmF5TGVuZ3RoKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBhcnJheSkKLXsKLSAg
ICBhdXRvIGxlbmd0aFN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJsZW5ndGgiKSk7Ci0gICAgaWYgKGF1dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5KGNvbnRleHQsIGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIG51bGxwdHIpKQotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBs
ZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMgVmVjdG9y
PFN0cmluZz4gcGFyc2VNb2RpZmllckFycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIGFycmF5VmFsdWUpCiB7CiAgICAgaWYgKCFhcnJheVZhbHVlKQogICAgICAgICByZXR1cm4g
eyB9OwogCiAgICAgLy8gVGhlIHZhbHVlIG1heSBlaXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBhIHNp
bmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBvZiBtb2RpZmllcnMuCi0gICAgaWYgKEpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkgewotICAgICAgICBhdXRvIHN0cmluZyA9IHRv
V1RGU3RyaW5nKHRvV0soYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcnJheVZh
bHVlLCBudWxscHRyKSkpKTsKLSAgICAgICAgcmV0dXJuIHsgc3RyaW5nIH07Ci0gICAgfQorICAg
IGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1ZSkpCisgICAgICAgIHJldHVy
biB7IHRvV1RGU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpIH07CiAKICAgICBpZiAoIUpTVmFs
dWVJc09iamVjdChjb250ZXh0LCBhcnJheVZhbHVlKSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAg
LTkzLDE2ICs4Myw4IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZU1vZGlmaWVyQXJyYXko
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWCiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOwogICAgIFZlY3RvcjxTdHJpbmc+IG1v
ZGlmaWVyczsKICAgICBtb2RpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBK
U09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgJmV4Y2VwdGlvbik7
Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
YXV0byBzdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAm
ZXhjZXB0aW9uKSk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgbW9kaWZpZXJzLmFwcGVuZCh0b1dURlN0cmluZyh0b1dLKHN0cmluZy5nZXQo
KSkpKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQor
ICAgICAgICBtb2RpZmllcnMuYXBwZW5kKHRvV1RGU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0
UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBudWxscHRyKSkpOwogICAgIHJldHVy
biBtb2RpZmllcnM7CiB9CiAKQEAgLTUxNCwxMCArNDk2LDkgQEAgdm9pZCBVSVNjcmlwdENvbnRy
b2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJlS2V5Ym9hcmQoSlNTdHJpbmdSZWYg
Y2hhcmEKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250ZXh0LT5wcmVwYXJlRm9yQXN5
bmNUYXNrKGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25QZXJzaXN0ZW50KTsKIAogICAgIC8vIEFz
c3VtZXMgdGhhdCB0aGUga2V5Ym9hcmQgaXMgYWxyZWFkeSBzaG93bi4KLSAgICBbW0hJREV2ZW50
R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlQcmVzczp0b1dURlN0cmluZyh0
b1dLKGNoYXJhY3RlcikpIGNvbXBsZXRpb25CbG9jazptYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9u
Z1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewotICAgICAgICBpZiAoIW1fY29u
dGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9jb250ZXh0LT5hc3luY1Rhc2tD
b21wbGV0ZShjYWxsYmFja0lEKTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2
ZW50R2VuZXJhdG9yXSBrZXlQcmVzczp0b1dURlN0cmluZyhjaGFyYWN0ZXIpIGNvbXBsZXRpb25C
bG9jazptYWtlQmxvY2tQdHIoW3N0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJ
RF0geworICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9jb250ZXh0KQorICAgICAgICAgICAgc3Ry
b25nVGhpcy0+bV9jb250ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShjYWxsYmFja0lEKTsKICAgICB9
KS5nZXQoKV07CiB9CiAKQEAgLTUzNCw3ICs1MTUsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxl
cklPUzo6cmF3S2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiB7CiAgICAgLy8gS2V5IGNhbiBiZSBl
aXRoZXIgYSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lh
bCBrZXkgKGUuZy4gImRvd25BcnJvdyIpLgogICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtub3dz
IGhvdyB0byBtYXAgdGhlc2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXljb2Rl
LgotICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleURv
d246dG9XVEZTdHJpbmcodG9XSyhrZXkpKV07CisgICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFy
ZWRISURFdmVudEdlbmVyYXRvcl0ga2V5RG93bjp0b1dURlN0cmluZyhrZXkpXTsKICAgICBbW0hJ
REV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBzZW5kTWFya2VySElERXZl
bnRXaXRoQ29tcGxldGlvbkJsb2NrOl57IC8qIERvIG5vdGhpbmcgKi8gfV07CiB9CiAKQEAgLTU0
Miw3ICs1MjMsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6cmF3S2V5VXAoSlNTdHJp
bmdSZWYga2V5KQogewogICAgIC8vIEtleSBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIFVuaWNvZGUg
Y29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpYWwga2V5IChlLmcuICJkb3duQXJyb3ci
KS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93cyBob3cgdG8gbWFwIHRoZXNlIHNwZWNp
YWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29kZS4KLSAgICBbW0hJREV2ZW50R2VuZXJh
dG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlVcDp0b1dURlN0cmluZyh0b1dLKGtleSkp
XTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlV
cDp0b1dURlN0cmluZyhrZXkpXTsKICAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2
ZW50R2VuZXJhdG9yXSBzZW5kTWFya2VySElERXZlbnRXaXRoQ29tcGxldGlvbkJsb2NrOl57IC8q
IERvIG5vdGhpbmcgKi8gfV07CiB9CiAKQEAgLTU1MCw3ICs1MzEsNyBAQCB2b2lkIFVJU2NyaXB0
Q29udHJvbGxlcklPUzo6a2V5RG93bihKU1N0cmluZ1JlZiBjaGFyYWN0ZXIsIEpTVmFsdWVSZWYg
bW9kaWZpZXJBcgogewogICAgIC8vIENoYXJhY3RlciBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIFVu
aWNvZGUgY29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpYWwga2V5IChlLmcuICJkb3du
QXJyb3ciKS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93cyBob3cgdG8gbWFwIHRoZXNl
IHNwZWNpYWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29kZS4KLSAgICBTdHJpbmcgaW5w
dXRTdHJpbmcgPSB0b1dURlN0cmluZyh0b1dLKGNoYXJhY3RlcikpOworICAgIGF1dG8gaW5wdXRT
dHJpbmcgPSB0b1dURlN0cmluZyhjaGFyYWN0ZXIpOwogICAgIGF1dG8gbW9kaWZpZXJGbGFncyA9
IHBhcnNlTW9kaWZpZXJBcnJheShtX2NvbnRleHQtPmpzQ29udGV4dCgpLCBtb2RpZmllckFycmF5
KTsKIAogICAgIGZvciAoYXV0byYgbW9kaWZpZXJGbGFnIDogbW9kaWZpZXJGbGFncykKQEAgLTcy
Nyw3ICs3MDgsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6YXBwbHlBdXRvY29ycmVj
dGlvbihKU1N0cmluZ1JlZiBuZXdTdHJpbmcsIEpTU3RyaW5nUgogICAgIHVuc2lnbmVkIGNhbGxi
YWNrSUQgPSBtX2NvbnRleHQtPnByZXBhcmVGb3JBc3luY1Rhc2soY2FsbGJhY2ssIENhbGxiYWNr
VHlwZU5vblBlcnNpc3RlbnQpOwogCiAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldyA9
IHRoaXMtPndlYlZpZXcoKTsKLSAgICBbd2ViVmlldyBhcHBseUF1dG9jb3JyZWN0aW9uOnRvV1RG
U3RyaW5nKHRvV0sobmV3U3RyaW5nKSkgdG9TdHJpbmc6dG9XVEZTdHJpbmcodG9XSyhvbGRTdHJp
bmcpKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKKyAgICBbd2ViVmlldyBhcHBseUF1dG9j
b3JyZWN0aW9uOnRvV1RGU3RyaW5nKG5ld1N0cmluZykgdG9TdHJpbmc6dG9XVEZTdHJpbmcob2xk
U3RyaW5nKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKICAgICAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgbWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKICAgICAgICAgICAgIC8vIGFwcGx5
QXV0b2NvcnJlY3Rpb24gY2FuIGNhbGwgaXRzIGNvbXBsZXRpb24gaGFuZGxlciBzeW5jaHJvbm91
c2x5LAogICAgICAgICAgICAgLy8gd2hpY2ggbWFrZXMgVUlTY3JpcHRDb250cm9sbGVyIHVuaGFw
cHkgKHNlZSBidWcgMTcyODg0KS4KQEAgLTExNTcsNyArMTEzOCw3IEBAIGJvb2wgVUlTY3JpcHRD
b250cm9sbGVySU9TOjppc1Nob3dpbmdEYXRhTGlzdFN1Z2dlc3Rpb25zKCkgY29uc3QKIAogdm9p
ZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnNldEtleWJvYXJkSW5wdXRNb2RlSWRlbnRpZmllcihK
U1N0cmluZ1JlZiBpZGVudGlmaWVyKQogewotICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRLZXlib2FyZElucHV0TW9kZUlkZW50aWZpZXIodG9XVEZTdHJpbmcodG9XSyhpZGVudGlm
aWVyKSkpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRLZXlib2FyZElucHV0
TW9kZUlkZW50aWZpZXIodG9XVEZTdHJpbmcoaWRlbnRpZmllcikpOwogfQogCiAvLyBGSVhNRTog
V3JpdGUgdGhpcyBpbiB0ZXJtcyBvZiBISURFdmVudEdlbmVyYXRvciBvbmNlIHdlIGtub3cgaG93
IHRvIHJlc2V0IGNhcHMgbG9jayBzdGF0ZQpAQCAtMTE3OCw3ICsxMTU5LDcgQEAgYm9vbCBVSVNj
cmlwdENvbnRyb2xsZXJJT1M6OmtleWJvYXJkSXNBdXRvbWF0aWNhbGx5U2hpZnRlZCgpIGNvbnN0
CiAKIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6YXR0YWNobWVudEluZm8oSlNT
dHJpbmdSZWYganNBdHRhY2htZW50SWRlbnRpZmllcikKIHsKLSAgICBhdXRvIGF0dGFjaG1lbnRJ
ZGVudGlmaWVyID0gdG9XVEZTdHJpbmcodG9XSyhqc0F0dGFjaG1lbnRJZGVudGlmaWVyKSk7Cisg
ICAgYXV0byBhdHRhY2htZW50SWRlbnRpZmllciA9IHRvV1RGU3RyaW5nKGpzQXR0YWNobWVudElk
ZW50aWZpZXIpOwogICAgIF9XS0F0dGFjaG1lbnQgKmF0dGFjaG1lbnQgPSBbd2ViVmlldygpIF9h
dHRhY2htZW50Rm9ySWRlbnRpZmllcjphdHRhY2htZW50SWRlbnRpZmllcl07CiAgICAgX1dLQXR0
YWNobWVudEluZm8gKmF0dGFjaG1lbnRJbmZvID0gYXR0YWNobWVudC5pbmZvOwogCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5tbQppbmRleCAwNjcyYjU4
MWJmNjViNWFkOWEyYjg1ZmVhODYxNjQ4ZjIyM2ViNGM1Li4xMDI3Mjg4NDA4NGQyYzEwMjA4Y2Zh
MDcxNGYxYjEwYzVlZmMwYTBiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9FdmVudFNlbmRlclByb3h5Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL0V2
ZW50U2VuZGVyUHJveHkubW0KQEAgLTI3MiwyMCArMjcyLDEwIEBAIHN0YXRpYyBOU1RpbWVJbnRl
cnZhbCBhYnNvbHV0ZVRpbWVGb3JFdmVudFRpbWUoZG91YmxlIGN1cnJlbnRFdmVudFRpbWUpCiAK
IEV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVzdENvbnRyb2xsZXIqIHRlc3RD
b250cm9sbGVyKQogICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0Q29udHJvbGxlcikKLSAgICAs
IG1fdGltZSgwKQotICAgICwgbV9wb3NpdGlvbigpCi0gICAgLCBtX2xlZnRNb3VzZUJ1dHRvbkRv
d24oZmFsc2UpCi0gICAgLCBtX2NsaWNrQ291bnQoMCkKLSAgICAsIG1fY2xpY2tUaW1lKDApCi0g
ICAgLCBtX2NsaWNrUG9zaXRpb24oKQotICAgICwgbV9jbGlja0J1dHRvbihrV0tFdmVudE1vdXNl
QnV0dG9uTm9CdXR0b24pCi0gICAgLCBldmVudE51bWJlcigwKQogewogfQogCi1FdmVudFNlbmRl
clByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSgpCi17Ci19CitFdmVudFNlbmRlclByb3h5Ojp+RXZl
bnRTZW5kZXJQcm94eSgpID0gZGVmYXVsdDsKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRh
dGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiB7CkBAIC0zOTQsNyArMzg0LDcgQEAg
c3RhdGljIHZvaWQgaGFuZGxlRm9yY2VFdmVudFN5bmNocm9ub3VzbHkoTlNFdmVudCAqZXZlbnQp
CiAKIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5OjpiZWdpblByZXNzdXJlRXZl
bnQoaW50IHN0YWdlKQogewotICAgIFJldGFpblB0cjxFdmVudFNlbmRlclN5bnRoZXRpY0V2ZW50
PiBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5bnRoZXRpY0V2ZW50IGFsbG9jXSBpbml0
UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0
aW9uLnkpCisgICAgYXV0byBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5bnRoZXRpY0V2
ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3Np
dGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIGdsb2JhbExvY2F0aW9uOihbbV90ZXN0Q29u
dHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSBjb252ZXJ0UmVjdFRvU2Ny
ZWVuOk5TTWFrZVJlY3QobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIDEsIDEpXS5vcmlnaW4p
CiAgICAgICAgIHN0YWdlOnN0YWdlCiAgICAgICAgIHByZXNzdXJlOjAuNQpAQCAtNDA5LDcgKzM5
OSw3IEBAIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5OjpiZWdpblByZXNzdXJl
RXZlbnQoaW50IHN0YWdlKQogCiBSZXRhaW5QdHI8TlNFdmVudD4gRXZlbnRTZW5kZXJQcm94eTo6
cHJlc3N1cmVDaGFuZ2VFdmVudChpbnQgc3RhZ2UsIGZsb2F0IHByZXNzdXJlLCBFdmVudFNlbmRl
clByb3h5OjpQcmVzc3VyZUNoYW5nZURpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgUmV0YWlu
UHRyPEV2ZW50U2VuZGVyU3ludGhldGljRXZlbnQ+IGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2Vu
ZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01h
a2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKKyAgICBhdXRvIGV2ZW50ID0gYWRv
cHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50
QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAgICAg
ICAgZ2xvYmFsTG9jYXRpb246KFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVdpbmRvdygpIGNvbnZlcnRSZWN0VG9TY3JlZW46TlNNYWtlUmVjdChtX3Bvc2l0aW9uLngs
IG1fcG9zaXRpb24ueSwgMSwgMSldLm9yaWdpbikKICAgICAgICAgc3RhZ2U6c3RhZ2UKICAgICAg
ICAgcHJlc3N1cmU6cHJlc3N1cmUKQEAgLTQzMSwxMCArNDIxLDEwIEBAIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6bW91c2VGb3JjZUNsaWNrKCkKIHsKICAgICBzZW5kTW91c2VEb3duVG9TdGFydFBy
ZXNzdXJlRXZlbnRzKCk7CiAKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9
IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcHJlRm9yY2VD
bGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246Oklu
Y3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBmb3JjZUNsaWNrID0gcHJlc3N1cmVD
aGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0gICAg
UmV0YWluUHRyPE5TRXZlbnQ+IHJlbGVhc2luZ1ByZXNzdXJlID0gcHJlc3N1cmVDaGFuZ2VFdmVu
dCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBiZWdp
blByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOworICAgIGF1dG8gcHJlRm9yY2VDbGlj
ayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3Jl
YXNpbmcpOworICAgIGF1dG8gZm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJl
c3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gcmVsZWFzaW5nUHJl
c3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpE
ZWNyZWFzaW5nKTsKICAgICBOU0V2ZW50ICptb3VzZVVwID0gW05TRXZlbnQgbW91c2VFdmVudFdp
dGhUeXBlOk5TRXZlbnRUeXBlTGVmdE1vdXNlVXAKICAgICAgICAgbG9jYXRpb246TlNNYWtlUG9p
bnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIG1vZGlmaWVyRmxhZ3M6MApA
QCAtNDY4LDkgKzQ1OCw5IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c3RhcnRBbmRDYW5jZWxN
b3VzZUZvcmNlQ2xpY2soKQogewogICAgIHNlbmRNb3VzZURvd25Ub1N0YXJ0UHJlc3N1cmVFdmVu
dHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVz
c3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBpbmNyZWFzaW5nUHJlc3N1cmUg
PSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFz
aW5nKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3Vy
ZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAg
ICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMSk7CisgICAgYXV0byBp
bmNyZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdl
RGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIHJlbGVhc2luZ1ByZXNzdXJlID0gcHJl
c3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7
CiAgICAgTlNFdmVudCAqbW91c2VVcCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0V2
ZW50VHlwZUxlZnRNb3VzZVVwCiAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRp
b24ueCwgbV9wb3NpdGlvbi55KQogICAgICAgICBtb2RpZmllckZsYWdzOjAKQEAgLTUwMyw5ICs0
OTMsOSBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VEb3duKCkKIHsKICAgICBz
ZW5kTW91c2VEb3duVG9TdGFydFByZXNzdXJlRXZlbnRzKCk7CiAKLSAgICBSZXRhaW5QdHI8TlNF
dmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKLSAgICBSZXRhaW5Q
dHI8TlNFdmVudD4gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1
cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBm
b3JjZU1vdXNlRG93biA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJl
Y3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1
cmVFdmVudCgxKTsKKyAgICBhdXRvIHByZUZvcmNlQ2xpY2sgPSBwcmVzc3VyZUNoYW5nZUV2ZW50
KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIGZvcmNl
TW91c2VEb3duID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlv
bjo6SW5jcmVhc2luZyk7CiAKICAgICBOU1ZpZXcgKnRhcmdldFZpZXcgPSBbbV90ZXN0Q29udHJv
bGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkgaGl0VGVzdDpbYmVnaW5QcmVzc3Vy
ZSBsb2NhdGlvbkluV2luZG93XV07CiAgICAgdGFyZ2V0VmlldyA9IHRhcmdldFZpZXcgPyB0YXJn
ZXRWaWV3IDogbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7
CkBAIC01MjYsOSArNTE2LDkgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlRG93
bigpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZVVwKCkKIHsKLSAgICBSZXRh
aW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgyKTsKLSAg
ICBSZXRhaW5QdHI8TlNFdmVudD4gc3RhZ2VUd29FdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQo
MiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxO
U0V2ZW50PiBzdGFnZU9uZUV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNo
YW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVn
aW5QcmVzc3VyZUV2ZW50KDIpOworICAgIGF1dG8gc3RhZ2VUd29FdmVudCA9IHByZXNzdXJlQ2hh
bmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOworICAgIGF1
dG8gc3RhZ2VPbmVFdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VE
aXJlY3Rpb246OkRlY3JlYXNpbmcpOwogCiAgICAgLy8gU2luY2UgQXBwS2l0IGRvZXMgbm90IGlt
cGxlbWVudCBmb3JjZXVwL2Rvd24gYXMgbW91c2UgZXZlbnRzLCB3ZSBuZWVkIHRvIHNlbmQgdHdv
IHByZXNzdXJlIGV2ZW50cyB0byBkZXRlY3QKICAgICAvLyB0aGUgY2hhbmdlIGluIHN0YWdlIHRo
YXQgbWFya3MgdGhvc2UgbW9tZW50cy4KQEAgLTU1MSw4ICs1NDEsOCBAQCB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6Om1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0IGZvcmNlKQogewogICAgIGludCBzdGFn
ZSA9IGZvcmNlIDwgMSA/IDEgOiAyOwogICAgIGZsb2F0IHByZXNzdXJlID0gZm9yY2UgPCAxID8g
Zm9yY2UgOiBmb3JjZSAtIDE7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGJlZ2luUHJlc3N1cmUg
PSBiZWdpblByZXNzdXJlRXZlbnQoc3RhZ2UpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBwcmVz
c3VyZUNoYW5nZWRFdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoc3RhZ2UsIHByZXNzdXJlLCBQ
cmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNz
dXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KHN0YWdlKTsKKyAgICBhdXRvIHByZXNzdXJlQ2hhbmdl
ZEV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudChzdGFnZSwgcHJlc3N1cmUsIFByZXNzdXJlQ2hh
bmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKIAogICAgIE5TVmlldyAqdGFyZ2V0VmlldyA9IFtt
X3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSBoaXRUZXN0Olti
ZWdpblByZXNzdXJlIGxvY2F0aW9uSW5XaW5kb3ddXTsKICAgICB0YXJnZXRWaWV3ID0gdGFyZ2V0
VmlldyA/IHRhcmdldFZpZXcgOiBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVZpZXcoKTsKQEAgLTYxMSw4ICs2MDEsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Omxl
YXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5
RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNpZ25l
ZCBrZXlMb2NhdGlvbikKIHsKLSAgICBOU1N0cmluZyogY2hhcmFjdGVyID0gW05TU3RyaW5nIHN0
cmluZ1dpdGhDU3RyaW5nOnRvU1REKGtleSkuY19zdHIoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmNvZGluZzpbTlNTdHJpbmcgZGVmYXVsdENTdHJpbmdFbmNvZGluZ11d
OworICAgIE5TU3RyaW5nKiBjaGFyYWN0ZXIgPSB0b1dURlN0cmluZyhrZXkpOwogCiAgICAgTlNT
dHJpbmcgKmV2ZW50Q2hhcmFjdGVyID0gY2hhcmFjdGVyOwogICAgIHVuc2lnbmVkIHNob3J0IGtl
eUNvZGUgPSAwOwpAQCAtODMyLDcgKzgyMSw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5
RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNpCiAK
IHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHkpCiB7Ci0g
ICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENHRXZlbnRD
cmVhdGVTY3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAyLCB5LCB4
LCAwKSk7CisgICAgYXV0byBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Ny
b2xsV2hlZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkpOwog
CiAgICAgLy8gU2V0IHRoZSBDR0V2ZW50IGxvY2F0aW9uIGluIGZsaXBwZWQgY29vcmRzIHJlbGF0
aXZlIHRvIHRoZSBmaXJzdCBzY3JlZW4sIHdoaWNoCiAgICAgLy8gY29tcGVuc2F0ZXMgZm9yIHRo
ZSBiZWhhdmlvciBvZiArW05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpdIHdoZW4gdGhlIGV2ZW50
IGhhcwpAQCAtODU5LDcgKzg0OCw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y29udGludW91
c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBib29sIHBhZ2VkKQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQgeCwg
aW50IHksIGludCBwaGFzZSwgaW50IG1vbWVudHVtKQogewotICAgIFJldGFpblB0cjxDR0V2ZW50
UmVmPiBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVu
dDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkpOworICAgIGF1dG8gY2dT
Y3JvbGxFdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZVNjcm9sbFdoZWVsRXZlbnQyKDAsIGtD
R1Njcm9sbEV2ZW50VW5pdExpbmUsIDIsIHksIHgsIDApKTsKIAogICAgIC8vIFNldCB0aGUgQ0dF
dmVudCBsb2NhdGlvbiBpbiBmbGlwcGVkIGNvb3JkcyByZWxhdGl2ZSB0byB0aGUgZmlyc3Qgc2Ny
ZWVuLCB3aGljaAogICAgIC8vIGNvbXBlbnNhdGVzIGZvciB0aGUgYmVoYXZpb3Igb2YgK1tOU0V2
ZW50IGV2ZW50V2l0aENHRXZlbnQ6XSB3aGVuIHRoZSBldmVudCBoYXMKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQppbmRleCA2NDE3ODJjYTk3
ZTFkYWZiOTAwOTE5ZGIxOWIzNDc0YTU1NDM4OGU1Li41YTRlOTZiODFlYThjZGEwNmIzN2I0Njhl
NTg4NTllZjcxZWI0NmI4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9Q
bGF0Zm9ybVdlYlZpZXdNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxh
dGZvcm1XZWJWaWV3TWFjLm1tCkBAIC02NCw3ICs2NCw3IEBAIFBsYXRmb3JtV2ViVmlldzo6UGxh
dGZvcm1XZWJWaWV3KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24sIGNvbnN0
IFRlCiAgICAgaWYgKG1fb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUpCiAgICAgICAgIFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldFZhbHVlOkBZRVMgZm9yS2V5OkAi
V2ViS2l0MlVzZVJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhIl07CiAKLSAgICBSZXRhaW5QdHI8
V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2Nv
bmZpZ3VyYXRpb24gY29weV0pOworICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOwogICAgIFdLUHJlZmVyZW5jZXNTZXRUaHJlYWRlZFNj
cm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdlIFdLUHJlZmVyZW5jZXNSZWYpW2NvcGllZENvbmZpZ3Vy
YXRpb24gcHJlZmVyZW5jZXNdLCBtX29wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcpOwogCiAg
ICAgTlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIFRlc3RDb250cm9sbGVyOjp2aWV3V2lk
dGgsIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KaW5kZXggMTRiN2RjOWQwZjI0ZWMxMGU3OGFj
MmIwZTAzNjVhOWVhNjQ5YWIyNi4uYjIyMjg3MWNkMGEzOTE5ZTMzZWQ2MDZkMGY0NDE2ODg1Njkz
YTIwNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xs
ZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJN
YWMubW0KQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVD
b250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdAogICAgIGlm
ICghdGVzdC51cmxDb250YWlucygiY29udGVudGV4dGVuc2lvbnMvIikpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5
Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGVzdC51cmwoKSkpOworICAgIGF1dG8gdGVzdFVS
TCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGVzdC51cmwo
KSkpOwogICAgIE5TVVJMICpmaWx0ZXJVUkwgPSBbKF9fYnJpZGdlIE5TVVJMICopdGVzdFVSTC5n
ZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhFeHRlbnNpb246QCJqc29uIl07CiAKICAgICBfX2Jsb2Nr
IE5TU3RyaW5nICpjb250ZW50RXh0ZW5zaW9uU3RyaW5nOwpAQCAtMzcxLDE0ICszNzEsMTQgQEAg
c3RhdGljIE5TU2V0ICpzeXN0ZW1IaWRkZW5Gb250RmFtaWx5U2V0KCkKIAogc3RhdGljIFdLUmV0
YWluUHRyPFdLQXJyYXlSZWY+IGdlbmVyYXRlRm9udEFsbG93TGlzdCgpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlD
cmVhdGUoKSk7CisgICAgYXV0byByZXN1bHQgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRl
KCkpOwogICAgIGZvciAoTlNTdHJpbmcgKmZvbnRGYW1pbHkgaW4gYWxsb3dlZEZvbnRGYW1pbHlT
ZXQoKSkgewogICAgICAgICBOU0FycmF5ICpmb250c0ZvckZhbWlseSA9IFtbTlNGb250TWFuYWdl
ciBzaGFyZWRGb250TWFuYWdlcl0gYXZhaWxhYmxlTWVtYmVyc09mRm9udEZhbWlseTpmb250RmFt
aWx5XTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZhbWlseUluRm9udCA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW2ZvbnRGYW1pbHkgVVRGOFN0cmlu
Z10pKTsKKyAgICAgICAgYXV0byBmYW1pbHlJbkZvbnQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKFtmb250RmFtaWx5IFVURjhTdHJpbmddKSk7CiAgICAgICAgIFdLQXJy
YXlBcHBlbmRJdGVtKHJlc3VsdC5nZXQoKSwgZmFtaWx5SW5Gb250LmdldCgpKTsKICAgICAgICAg
Zm9yIChOU0FycmF5ICpmb250SW5mbyBpbiBmb250c0ZvckZhbWlseSkgewogICAgICAgICAgICAg
Ly8gRm9udCBuYW1lIGlzIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgYXJyYXkuCi0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZm9udE5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKFtbZm9udEluZm8gb2JqZWN0QXRJbmRleDowXSBVVEY4U3RyaW5n
XSkpOworICAgICAgICAgICAgYXV0byBmb250TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoW1tmb250SW5mbyBvYmplY3RBdEluZGV4OjBdIFVURjhTdHJpbmddKSk7
CiAgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShyZXN1bHQuZ2V0KCksIGZvbnROYW1lLmdl
dCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKICAgICAvLyBUZXN0aW5nIHVzZXMg
YSBwcml2YXRlIHNlc3Npb24sIHdoaWNoIGlzIG1lbW9yeSBvbmx5LiBIb3dldmVyIGNyZWF0aW5n
IG9uZSBpbnN0YW50aWF0ZXMgYSBzaGFyZWQgTlNVUkxDYWNoZSwKICAgICAvLyBhbmQgaWYgd2Ug
aGF2ZW4ndCBjcmVhdGVkIG9uZSB5ZXQsIHRoZSBkZWZhdWx0IG9uZSB3aWxsIGJlIGNyZWF0ZWQg
b24gZGlzay4KICAgICAvLyBNYWtpbmcgdGhlIHNoYXJlZCBjYWNoZSBtZW1vcnktb25seSBhdm9p
ZHMgdG91Y2hpbmcgdGhlIGZpbGUgc3lzdGVtLgotICAgIFJldGFpblB0cjxOU1VSTENhY2hlPiBz
aGFyZWRDYWNoZSA9CisgICAgYXV0byBzaGFyZWRDYWNoZSA9CiAgICAgICAgIGFkb3B0TlMoW1tO
U1VSTENhY2hlIGFsbG9jXSBpbml0V2l0aE1lbW9yeUNhcGFjaXR5OjEwMjQgKiAxMDI0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tDYXBhY2l0eTowCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrUGF0aDpuaWxdKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5o
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKaW5k
ZXggMGVhYjg5NDllNmJlYmZlZTY1OTQ3NTg5YWZiOWU4ZDliOGJlMWVjNy4uMmQyZDFkNmI4NDZl
Njg3OGIwYjFlYmRjMTY2N2MxNzVlOTE1NjY1ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKQEAgLTMxLDEzICszMSwxNCBAQCBP
QkpDX0NMQVNTIFdLV2ViVmlldzsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIFVJU2NyaXB0
Q29udHJvbGxlck1hYyA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSB7CitjbGFzcyBV
SVNjcmlwdENvbnRyb2xsZXJNYWMgZmluYWwgOiBwdWJsaWMgVUlTY3JpcHRDb250cm9sbGVyQ29j
b2EgewogcHVibGljOgogICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29udHJvbGxlck1hYyhVSVNjcmlw
dENvbnRleHQmIGNvbnRleHQpCiAgICAgICAgIDogVUlTY3JpcHRDb250cm9sbGVyQ29jb2EoY29u
dGV4dCkKICAgICB7CiAgICAgfQogCitwcml2YXRlOgogICAgIHZvaWQgcmVwbGFjZVRleHRBdFJh
bmdlKEpTU3RyaW5nUmVmLCBpbnQsIGludCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB6b29tVG9TY2Fs
ZShkb3VibGUsIEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIGRvdWJsZSB6b29tU2NhbGUoKSBj
b25zdCBvdmVycmlkZTsKQEAgLTYyLDcgKzYzLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBhY3Rp
dmF0ZUF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpTVmFsdWVSZWYgY2FsbGJhY2spIG92ZXJyaWRl
OwogCi1wcml2YXRlOgogICAgIE5TVGFibGVWaWV3ICpkYXRhTGlzdFN1Z2dlc3Rpb25zVGFibGVW
aWV3KCkgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9V
SVNjcmlwdENvbnRyb2xsZXJNYWMubW0KaW5kZXggY2QxMTMyOWE2NTQxZDdiNGViNzdkN2VjMTQ2
ODhlOTkyMWYyN2M1My4uYjVjYjUxODE1MDU5ZTdhMDkzYTE0MjM5OTFlODkxN2UzZWQzMDkwOCAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVy
TWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxl
ck1hYy5tbQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyTWFjOjpj
b21wbGV0ZUJhY2tTd2lwZShKU1ZhbHVlUmVmIGNhbGxiYWNrKQogCiB2b2lkIFVJU2NyaXB0Q29u
dHJvbGxlck1hYzo6cGxheUJhY2tFdmVudFN0cmVhbShKU1N0cmluZ1JlZiBldmVudFN0cmVhbSwg
SlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0cmVh
bSA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXZl
bnRTdHJlYW0pKTsKKyAgICBhdXRvIHN0cmVhbSA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXZlbnRTdHJlYW0pKTsKICAgICBwbGF5QmFja0V2ZW50
cyh3ZWJWaWV3KCksIG1fY29udGV4dCwgKF9fYnJpZGdlIE5TU3RyaW5nICopc3RyZWFtLmdldCgp
LCBjYWxsYmFjayk7CiB9CiAK
</data>
<flag name="commit-queue"
          id="425690"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409870</attachid>
            <date>2020-09-27 23:06:47 -0700</date>
            <delta_ts>2020-09-28 09:57:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200927230646.patch</filename>
            <type>text/plain</type>
            <size>705085</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJmZWY0NTFlYS4u
ZjMwMjBmNzM4YzdlNmQ0ZTY0OTQwNDBiZTVlMzUyNGZkMTdkNGMyMiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2MCBAQAorMjAy
MC0wOS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlm
eWluZywgYnV0IGV2ZW4gbW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVz
dAorICAgICAgICBjb2RlIGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkg
YW5kIHBhc3RlIHJhdGhlciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0
ZXIgdGhlIHJlZmFjdG9yaW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlz
IGNvZGUgaXMgd3JpdHRlbiB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGlu
ZyBmb3IgZWFjaCBmdW5jdGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpt
YWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAo
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0Ns
YXNzIHdpdGggdGhpcy4gUmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBj
bGVhciB0aGlzIHBhc3NlcyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJv
dmUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNw
cDoKKyAgICAgICAgKHVpRWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBS
ZW1vdmVkIHVubmVlZGVkIGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3
aGljaCBzdGFydHMgb3V0IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5n
cy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBl
Q29uc3RydWN0b3IpOiBVc2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAg
ICAgICAoX3JldHVybkV4cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0ND
b250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxl
cik6IERlbGV0ZWQuCisgICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2Ug
YW5kIGF1dG8uCisgICAgICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERp
dHRvLgorICAgICAgICAoZ2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAg
IChHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6
IFJlcGxhY2VkIGdldEpTQ2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFp
blB0ciB0byBtYWtlIGl0IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVy
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0
aGUgYWJvdmUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAg
ICAgICAgKGVuY29kZUhvc3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAg
ICAgIChleGVjQ29tbWFuZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2Fs
bGJhY2spOiBEaXR0by4KKyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRv
LgorICAgICAgICAob3ZlcnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAg
KHF1ZXVlTG9hZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5n
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3Qp
OiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVh
dGVKU0NsYXNzKTogUmVwbGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAg
ICAgIEpTUmV0YWluUHRyIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRv
IHRoZSBjYWxsZXIuCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJl
dHVybiB2YWx1ZSBjb25zdCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMp
OiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmly
ZWQpOiBTaW1wbGlmaWVkIHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2spOiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAor
ICAgICAgICB0YWJsZSB2YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBu
ZWVkIHRvIGJlIG9iamVjdHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNh
bGxiYWNrKTogRGl0dG8uCisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxs
YmFja3MpOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTog
VXNlIGFycmF5TGVuZ3RoLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDog
VXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnBsYXRmb3JtTmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAg
ICAgICAoY3JlYXRlRW1wdHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmlu
Zy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJ
RWxlbWVudHMpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkRvY3VtZW50TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8u
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
SGVhZGVycyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ29sdW1ucyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mUm93cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8u
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5o
OiBSZW1vdmVkIHVubmVlZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGgu
CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIg
SlNWYWx1ZUlzT2JqZWN0LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnBsYXRmb3JtTmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAo
Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1l
dGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBS
ZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09i
amVjdC4KKyAgICAgICAgKHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVy
aWEpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxp
dHlWYWx1ZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERl
bGVnYXRlIGRpZENsZWFyV2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6Cisg
ICAgICAgIFVzZSBhdXRvLiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0
LiBTaW1wbGlmaWVkIG9iamVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0
TlMgaW5zdGVhZCBvZiByZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRD
bGVhcldpbmRvd09iamVjdEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNl
IGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW06CisgICAgICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVu
Z3RoLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNw
cDoKKyAgICAgICAgKEZyYW1lTG9hZERlbGVnYXRlOjpkaWRDbGVhcldpbmRvd09iamVjdEZvckZy
YW1lSW5TdGFuZGFyZFdvcmxkKToKKyAgICAgICAgUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFr
ZVdpbmRvd09iamVjdC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dP
YmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXh0SW5wdXRD
b250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKTogUmVwbGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMu
IFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRyIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNz
ZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisgICAgICAgIChUZXh0SW5wdXRDb250cm9sbGVy
OjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25zdCouCisgICAgICAgIChUZXh0
SW5wdXRDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS93aW4vVGV4dElucHV0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciBhYm92ZS4K
KworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwOgorICAg
ICAgICAoV1RSOjp0b09wdGlvbmFsQm9vbCk6IFJlbmFtZWQgZnJvbSBKU1ZhbHVlTWFrZUJvb2xl
YW5Pck51bGwuCisgICAgICAgIChXVFI6OnRvT3B0aW9uYWxEb3VibGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6bWFrZVZhbHVlKTogQWRkZWQgd2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlw
ZXMuCisgICAgICAgIFJlcGxhY2VkIEpTVmFsdWVUb051bGxhYmxlQm9vbGVhbiBhbmQgSlNWYWx1
ZU1ha2VTdHJpbmdPck51bGwuCisgICAgICAgIChXVFI6OmNyZWF0ZUpTU3RyaW5nKTogQWRkZWQg
d2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlwZXMuCisgICAgICAgIChXVFI6OnByb3BlcnR5
KTogQWRkZWQuCisgICAgICAgIChXVFI6OnN0cmluZ1Byb3BlcnR5KTogQWRkZWQuCisgICAgICAg
IChXVFI6OmJvb2xlYW5Qcm9wZXJ0eSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpudW1lcmljUHJv
cGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6b2JqZWN0UHJvcGVydHkpOiBSZWZhY3RvcmVk
IHRvIGNhbGwgcHJvcGVydHkuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogQWRkZWQuCisg
ICAgICAgIChXVFI6OnNldEdsb2JhbE9iamVjdFByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChX
VFI6OmNhbGwpOiBSZWZhY3RvcmVkIHRvIGxldCBvYmplY3RQcm9wZXJ0eSBkbyBtb3JlIG9mIHRo
ZSBudWxsIGNoZWNraW5nLgorICAgICAgICAoV1RSOjpjYWxsQ29uc3RydWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmg6IFVwZGF0ZWQg
Zm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNX
cmFwcGFibGUuaDogUmVkdWNlZCBpbmNsdWRlcyBhIGJpdC4KKworICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmg6IEFkZGVkIHNldEdsb2JhbE9iamVjdFByb3Bl
cnR5LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250ZXh0LmNwcDoKKyAgICAgICAgKFVJU2NyaXB0Q29udGV4dDo6VUlTY3JpcHRDb250ZXh0
KTogUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFVJ
U2NyaXB0Q29udGV4dDo6cnVuVUlTY3JpcHQpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAg
IChVSVNjcmlwdENvbnRleHQ6Om9iamVjdEZyb21SZWN0IGNvbnN0KTogVXNlIHNldFByb3BlcnR5
LgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBUZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwOgorICAg
ICAgICAoV1RSOjp0b0RldmljZU9yaWVudGF0aW9uKTogVXNlIGNyZWF0ZUpTU3RyaW5nIGFuZCBK
U1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nLgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIu
bW06CisgICAgICAgICgtW0xheW91dFRlc3RTcGVsbENoZWNrZXIgc2V0UmVzdWx0c0Zyb21KU1Zh
bHVlOmluQ29udGV4dDpdKTogVXNlIGNyZWF0ZUpTU3RyaW5nCisgICAgICAgIGFuZCByZW1vdmVk
IHVubmVlZGVkIHVzZSBvZiBscm91bmRsLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9E
aWN0aW9uYXJ5RnVuY3Rpb25zLmg6IEFkZGVkLiBDb250YWlucyBjb252ZW5pZW5jZSBmdW5jdGlv
bnMKKyAgICAgICAgZm9yIGRlYWxpbmcgd2l0aCBXS0RpY3Rpb25hcnlSZWYuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaDogSW5pdGlhbGl6ZSBkYXRhIG1l
bWJlcnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmNwcDoKKyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbik6
IFVzZSBPcHRpb25hbCBpbnN0ZWFkIG9mIHNlcGFyYXRlIGJvb2wuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oOiBVcGRhdGVkIGZvciB0aGUgYWJv
dmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtOgor
ICAgICAgICAoX2dlbmVyYXRlSW1wbGVtZW50YXRpb25GaWxlKTogVXNlIHN0YXRpYyBpbml0aWFs
aXphdGlvbiBhbmQgYSBsYW1iZGEgaW5zdGVhZCBvZgorICAgICAgICBhbiBpZiBzdGF0ZW1lbnQg
dG8gaW5pdGlhbGl6ZS4KKyAgICAgICAgKF9wbGF0Zm9ybVR5cGVDb25zdHJ1Y3Rvcik6IFVzZSB0
b09wdGlvbmFsQm9vbCBhbmQgY3JlYXRlSlNTdHJpbmcuIEFsc28gYWRkZWQKKyAgICAgICAgc3Vw
cG9ydCBmb3IgbnVsbGFibGUgZG91YmxlcyBhbmQgdXNlZCBhdXRvIGEgYml0IG1vcmUuCisgICAg
ICAgIChfcmV0dXJuRXhwcmVzc2lvbik6IFVzZSBtYWtlVmFsdWUuCisKKyAgICAgICAgKiBJbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDogTWFkZSB0aGUgb3B0aW9uYWwgYXJn
dW1lbnRzIHRvIHRoZQorICAgICAgICBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiBmdW5jdGlv
biAiZG91YmxlPyIgaW5zdGVhZCBvZiAib2JqZWN0Ii4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXVFI6OmdldE1lbnVJdGVtQ2hpbGRyZW5DYWxsYmFjayk6IFVzZSBhdXRvIGFuZCBub3QgSlNW
YWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IE1vdmVkIHRvIEpTQmFz
aWNzLmgvY3BwLgorICAgICAgICAoV1RSOjpwYXJzZVRvdWNoTW9kaWZpZXIpOiBBZGRlZC4gRmFj
dG9yZWQgb3V0IG9mIHRoZQorICAgICAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3Vj
aE1vZGlmaWVyIGZ1bmN0aW9uLgorICAgICAgICAoV1RSOjpwYXJzZU1vZGlmaWVyQXJyYXkpOiBV
c2UgY3JlYXRlSlNTdHJpbmcgYW5kIHJlbW92ZSB1bm5lZWRlZCBpZ25vcmVkCisgICAgICAgIGV4
Y2VwdGlvbiBvdXQgYXJndW1lbnQsIHNpbmNlIHRoYXQgaXMgb3B0aW9uYWwuIEFsc28gYWRkZWQg
b3ZlcmxvYWQgdGhhdAorICAgICAgICBnZXRzIHRoZSBjb250ZXh0LgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNlbmRpbmdDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KTog
VXNlIGFkb3B0V0sgYW5kIHNldFZhbHVlLiBSZXR1cm4gYSBXS1JldGFpblB0ci4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKTogVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
b3VzZVVwKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1v
dXNlTW92ZVRvKTogVXNlIHNldFZhbHVlIGFuZAorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZXMuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9y
Y2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpz
dGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlRG93bik6IERpdHRvLgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlVXApOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNoYW5nZWQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bGVhcEZvcndhcmQpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hy
b25vdXNDbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OmNyZWF0ZUtl
eURvd25NZXNzYWdlQm9keSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6a2V5RG93bik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25v
dXNLZXlEb3duKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9s
bEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMpOiBVc2UKKyAgICAgICAgc2V0VmFsdWUgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
Y29udGludW91c01vdXNlU2Nyb2xsQnkpOiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpjb250ZXh0Q2xpY2spOiBVc2UgYXV0byBhbmQgbm90IEpTVmFsdWVUb09iamVjdC4KKyAg
ICAgICAgKFdUUjo6dG9Nb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKTogVXNlIGJvb2xlYW5Qcm9w
ZXJ0eS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6YWRkVG91Y2hQb2lu
dCk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAg
IChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcik6
IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaFBv
aW50UmFkaXVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnRvdWNoU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6dG91Y2hNb3ZlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoRW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoQ2FuY2VsKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmNsZWFyVG91Y2hQb2ludHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6cmVsZWFzZVRvdWNoUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FuY2VsVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNl
dEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUu
CisgICAgICAgIERlbGV0ZWQgdmFyaW91cyB1bm5lZWRlZCBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXVFI6OkdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdUUjo6R0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6R0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFBy
b3BlcnR5LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0Nv
bnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICBBbHNvIG1hcmtlZCB0
aGUgY2xhc3MgZmluYWwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRp
ZENyZWF0ZVBhZ2UpOiBVc2UgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6cmVwb3J0TGl2ZURvY3VtZW50cyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSk6IFVzZSBk
aWN0aW9uYXJ5VmFsdWUsCisgICAgICAgIGJvb2xlYW5WYWx1ZSwgcG9zdFBhZ2VNZXNzYWdlLCB2
YWx1ZSwgYW5kIG1vcmUgdG8gc3RyZWFtbGluZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGU6OmJvb2xlYW5Gb3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZTo6c3RyaW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OmJlZ2luVGVzdGluZyk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlOjpkb25lKTogVXNlIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6Y2xvc2VPdGhlclBhZ2VzKTogVXNlIHNldFZhbHVlIGFuZCB0b1dLLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6ZHVtcFRvU3RkRXJyKTogVXNlIHBvc3RQYWdlTWVzc2FnZQor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dCk6IFVzZSB0b1dLLgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVl
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBv
c3RBZGRDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdEZvY3VzV2ViVmlldyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdFNldEJhY2tpbmdTY2FsZUZhY3Rvcik6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdFNldFdpbmRvd0lzS2V5KTogVXNlIHRvV0suCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0Vmlld1NpemUpOiBVc2Ugc2V0VmFs
dWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2ltdWxhdGVX
ZWJOb3RpZmljYXRpb25DbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0QWRkc1Zpc2l0ZWRMaW5rcyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bik6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLAorICAgICAgICBhbmQgdXNlIE9w
dGlvbmFsIGluc3RlYWQgb2YgYm9vbC9kb3VibGUgcGFpcnMuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IpOiBV
c2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aXNHZW9s
b2NhdGlvblByb3ZpZGVyQWN0aXZlIGNvbnN0KTogVXNlIHRvV0sgYW5kIGJvb2xlYW5WYWx1ZS4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJv
YXJkIGNvbnN0KTogVXNlIHRvV0sgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVybWlzc2lvbik6IFVzZSBwb3N0UGFnZU1lc3NhZ2Uu
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcnNp
c3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKTogVXNlIHNldFZhbHVlCisgICAgICAgIGFuZCBwb3N0
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjp1c2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JP
cmlnaW4pOiBVc2V0IHNldFZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKTogVXNlIHNldFZh
bHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpz
ZXRIaWRkZW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldENhY2hl
TW9kZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nl
c3NXb3JrUXVldWUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6cHJvY2Vzc1dvcmtRdWV1ZSk6IFVzZSBwb3N0UGFnZU1lc3Nh
Z2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUZvcndhcmROYXZpZ2F0
aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWQpOiBV
c2Ugc2V0VmFsdWUgYW5kIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnF1ZXVlUmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpxdWV1ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
TWVzc2FnZSk6IEFkZGVkLiBPdmVybG9hZHMgZm9yIG1hbnkgdHlwZXMgdG8ga2VlcCBjYWxsZXIg
Y29kZSBzdHJlYW1saW5lZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0UGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6IFVwZGF0ZWQgZm9y
IHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6cHJvcGVydHlWYWx1ZSk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6OnByb3BlcnR5VmFsdWVEb3VibGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6cHJvcGVydHlW
YWx1ZUludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpudW1lcmljV2luZG93UHJvcGVydHkpOiBS
ZW5hbWVkIGZyb20gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUgZm9yIGJyZXZpdHkKKyAgICAg
ICAgYW5kIGZvciBjb25zaXN0ZW5jeSB3aXRoIEpTQmFzaWNzLmggZnVuY3Rpb25zLgorICAgICAg
ICAoV1RSOjpkdW1wUGF0aCk6IFVzZSBzdHJpbmdQcm9wZXJ0eSwgb2JqZWN0UHJvcGVydHksIGFu
ZCBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpyYW5nZVRvU3RyKTogVXNlIGF1dG8sIG51bWVy
aWNQcm9wZXJ0eSwgYW5kIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Ok5hdmlnYXRpb25UeXBl
VG9TdHJpbmcpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVuYW1lZCBmcm9t
IHNlY3VyaXR5T3JpZ2luVG9TdHIuIFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpmcmFt
ZVRvU3RyKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6cmVz
ZXRBZnRlclRlc3QpOiBSZW1vdmVkIHVubmVlZGVkIGxvY2FsLgorICAgICAgICAoV1RSOjpkdW1w
RnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCk6IFVzZSBhdXRvLgorICAgICAg
ICAoV1RSOjpkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogRGl0
dG8uCisgICAgICAgIChXVFI6OmR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OmR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKTogVXBkYXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdUUjo6dG9KUyk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6Omhhc0RvY3VtZW50RWxlbWVudCk6IFVzZSBvYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKTogVXNlIHNldEds
b2JhbE9iamVjdFByb3BlcnR5LAorICAgICAgICBhbmQgcGFzcyBmZXdlciBhcmd1bWVudHMgdG8g
bWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKTogU3RyZWFtbGluZSBjb2RlIGEgYml0LgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKTog
VXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Omxhc3RGaWxlVVJMUGF0aENvbXBvbmVudCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNi
YXJUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVh
Y2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGluZyk6IERpdHRv
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcik6IFVzZSB0b1dLLgor
ICAgICAgICAoV1RSOjpwYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6Om1haW5GcmFtZSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjptYWluSlNDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmRpc3BsYXkpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheUFuZFRyYWNrUmVwYWludHMpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6dG9X
Syk6IEFkZGVkIG92ZXJsb2FkIGZvciBkb3VibGUuCisgICAgICAgIChXVFI6OmNyZWF0ZVdLRGlj
dGlvbmFyeSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0
aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbik6IEFkZGVkLgorICAgICAgICAo
V1RSOjpwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NCk6IEFkZGVkLgor
ICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRk
ZWQuCisgICAgICAgIChXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IEFkZGVkLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wUGl4ZWxzIGNvbnN0KTogVXNlIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXREdW1wUGl4ZWxzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OndoYXRUb0R1bXAgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2hhdFRvRHVt
cCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRXYWl0VW50aWxEb25lKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNob3VsZFdhaXRVbnRpbERvbmUgY29uc3QpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlwdCk6IFVzZSBwYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpleGVjQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpmaW5k
T3B0aW9uc0Zyb21BcnJheSk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgYW5kIGNy
ZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNl
IHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmdNYXRjaGVzSW5QYWdl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0
SW5kaWNlcyk6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBhcnJheUxlbmd0aCBhbmQKKyAgICAgICAg
cmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIHN0ZDo6cm91bmQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk6IFVzZSBwYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVt
U2l6ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hl
RGlza1VzYWdlRm9yT3JpZ2luKTogRGl0dG8uCisgICAgICAgIChXVFI6OnN0cmluZ0FycmF5VG9K
Uyk6IFR3ZWFrZWQgY29kaW5nIHN0eWxlIGEgYml0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1lZGlhRGV2aWNl
c0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViUlRDTURO
U0lDRUNhbmRpZGF0ZXNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldEN1c3RvbVVzZXJBZ2VudCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdl
YkdMMkVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V3JpdGFi
bGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGUpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9u
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1
bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRQbHVnaW5zRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUpOiBVc2UgbWFpbkZyYW1lLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIpOiBSZW1vdmVkIGxvY2FsLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBdWRpb1Jlc3VsdCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6IFVzZSBwYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9i
amVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9y
KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9y
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKTog
VXNlIHJhbmdlLWJhc2VkIGZvciBsb29wLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24pOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5h
dmlnYXRpb24gY29uc3QpOgorICAgICAgICBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbik6CisgICAgICAgIFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y2FjaGVUZXN0UnVubmVy
Q2FsbGJhY2spOiBDaGFuZ2VkIG1hcCB0byBzdG9yZSBvYmplY3RzIGluc3RlYWQgb2YgdmFsdWVz
LgorICAgICAgICAoV1RSOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogU2ltcGxpZnkgc2luY2Ug
bWFwIGhhcyBvYmplY3RzLiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYXJUZXN0UnVubmVyQ2FsbGJhY2tzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T25seUFjY2VwdEZpcnN0UGFydHlD
b29raWVzKTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFVzZXJTdHlsZVNoZWV0RW5hYmxlZCk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24pOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsV2ViTm90
aWZpY2F0aW9uUGVybWlzc2lvbnMpOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6c2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBPcHRp
b25hbDxkb3VibGU+IGluc3RlYWQgb2YgYm9vbC9kb3VibGUKKyAgICAgICAgcGFpcnMsIGxldHRp
bmcgdGhlIElETCBiaW5kaW5ncyBkbyB0aGUgd29yayBmb3IgdXMuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFJl
bW92ZWQgbG9jYWwuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzRG9pbmdNZWRpYUNhcHR1
cmUgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlz
c2lvbkZvck9yaWdpbik6IFJlbW92ZWQgbG9jYWxzLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojp1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RDb3VudEZvck9yaWdpbik6IERJdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjYWxs
U2hvdWxkQ2xvc2VPbldlYlZpZXcpOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpxdWV1ZUxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IFJlbW92ZWQgYSBsb2NhbC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXMpOgorICAgICAgICBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQgY29uc3QpOiBVc2Ug
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKTogVXNlIG1h
aW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGls
ZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlv
bik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVOYXZp
Z2F0aW9uUG9saWN5QWZ0ZXJEZWxheSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNF
bmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldElnbm9yZXNWaWV3
cG9ydFNjYWxlTGltaXRzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNo
b3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0KTogVXNlIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHRJbW1lZGlhdGVseSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdENhbGxiYWNrKTog
VXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldEFsbG93ZWRN
ZW51QWN0aW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwKKyAgICAgICAgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbEN1c3Rv
bU1lbnVBY3Rpb24pOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvZXNTdGF0aXN0aWNzRG9tYWluSURF
eGlzdEluRGF0YWJhc2UpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
RW5hYmxlZCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppc1N0YXRpc3RpY3NFcGhlbWVyYWwpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzRGVidWdNb2RlKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRXhwaXJlZFN0
YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NWZXJ5UHJldmFs
ZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKTogVXNlIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZUlUUERh
dGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0dy
YW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Rp
ZFJ1blRlbGVtZXRyeUNhbGxiYWNrKTogVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSk6IFVzZSBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJpbmdUaW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NNYXhTdGF0aXN0aWNzRW50cmllcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKTog
VXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURh
dGFSZW1vdmFsKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NE
ZWxldGVDb29raWVzRm9ySG9zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UpOiBVc2UgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXApOiBVc2UgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aGFzU3RhdGlzdGljc0lzb2xh
dGVkU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlcik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NT
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmdldEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6Om1ha2VEb21haW5zVmFs
dWUpOiBGYWN0b3JlZCBvdXQuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2spOiBV
c2UgbWFrZURvbWFpbnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bG9hZGVkU3Vi
cmVzb3VyY2VEb21haW5zKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKTogVXNl
IG1ha2VEb21haW5zVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFkZE1vY2tNZWRp
YURldmljZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjbGVhck1vY2tNZWRpYURldmljZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6cmVtb3ZlTW9ja01lZGlhRGV2aWNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnJlc2V0TW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQpOiBV
c2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCk6IFVzZSBwb3N0U3luY2hy
b25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dh
bWVwYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRE
ZXRhaWxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFk
QXhpc1ZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1l
cGFkQnV0dG9uVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T3Bl
blBhbmVsRmlsZXMpOiBVc2UgbWFpbkpTQ29udGV4dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3Ry
aW5nLAorICAgICAgICBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRPcGVuUGFuZWxGaWxlc01lZGlhSWNvbik6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBw
b3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlbW92ZUFsbFNlc3Np
b25DcmVkZW50aWFscyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6Y2xlYXJET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpjbGVhckRPTUNhY2hlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpoYXNET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZSk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZSk6IFVzZSBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QXBw
bGljYXRpb25NYW5pZmVzdFRoZW4pOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmluamVjdFVzZXJTY3JpcHQpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdl
ZE1lc3NhZ2VGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6YWRkVGVzdEtleVRvS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYW5VcEtleWNoYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmtleUV4aXN0c0luS2V5Y2hhaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXJ2ZXJUcnVzdEV2YWx1
YXRpb25DYWxsYmFja0NhbGxzQ291bnQpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxk
RGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseSk6IFVzZQorICAgICAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphYm9ydE1vZGFs
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmR1bXBBZENsaWNrQXR0cmlidXRp
b24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92
YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9m
ZnNjcmVlbkNhbnZhc0VuYWJsZWQpOiBVc2Ugb3ZlcnJpZGVQcmVmZXJlbmNlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpj
bGVhckFwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBCb3VuZERvbWFpbnMpOiBVc2UgbWFpbkpTQ29udGV4
dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3RyaW5nLAorICAgICAgICBhbmQgdG9XSy4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6cG9zdE1lc3NhZ2UpOiBBZGRlZC4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOiBVcGRhdGVkIGZvciB0
aGUgYWJvdmUuIEFsc28gY2hhbmdlZAorICAgICAgICBvdmVycmlkZVByZWZlcmVuY2Ugb3QgYSBz
dGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OlRleHRJbnB1dENvbnRyb2xsZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6VGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdCk6IFVz
ZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBE
ZWxldGVkLiBVc2UgdGhlIG9uZSBmcm9tIEpTQmFzaWNzLmggbm93LgorICAgICAgICAoV1RSOjpj
cmVhdGVDb21wb3NpdGlvbkhpZ2hsaWdodERhdGEpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3Ry
aW5nLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVKU1N0cmluZyBmcm9tIEpTQmFzaWNzLmggbm93Lgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRV
SUVsZW1lbnRzKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRGVz
Y3JpcHRpb25PZkF0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0
aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omxhbmd1YWdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnZhbHVlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNGb2N1c2VkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRlIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9w
RWZmZWN0cyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29s
dW1ucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZSb3dzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2li
aWxpdHlWYWx1ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZT
Y3JlZW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDb2xsYXBzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tOgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRlclByb3h5OjpFdmVudFNlbmRlclByb3h5KTogSW5pdGlhbGl6ZSBpbiB0aGUgY2xh
c3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2Vu
ZGVyUHJveHkpOiBEZWxldGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbToKKyAgICAgICAgKFdUUjo6bWFr
ZUpTQXJyYXkpOiBSZXR1cm4gYSBKU09iamVjdFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VBcnJheVJl
ZkZvckFycmF5LgorICAgICAgICAoV1RSOjptYWtlSlNPYmplY3QpOiBSZXR1cm4gYSBKU09iamVj
dFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5LgorICAgICAgICAo
V1RSOjptYWtlVmFsdWVSZWZGb3JWYWx1ZSk6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAg
ICAgKFdUUjo6c2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENy
aXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nCisgICAgICAgIGFuZCBhcnJheUxlbmd0aC4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToK
KyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVK
U1N0cmluZyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6Y29udmVydFZl
Y3RvclRvT2JqZWN0QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJlbmFtZWQgZnJvbSBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheS4KKyAgICAgICAgKFdUUjo6
c2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYSk6IFVzZSB0b1dURlN0
cmluZyBhbmQgYXJyYXlMZW5ndGguCisgICAgICAgIChXVFI6OnNlYXJjaFRleHRQYXJhbWV0ZXJp
emVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm93SGVhZGVycyBjb25zdCk6IFVzZSBtYWtlSlNBcnJheS4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJh
eUF0dHJpYnV0ZVZhbHVlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlYXJjaFRleHRXaXRoQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlIGNvbnN0KTogVXNl
IGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
b2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppbnNwZWN0b3JUZXN0U3R1YlVSTCk6IFJlbW92ZSBsb2NhbHMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oOiBBZGRlZCB0b1dLU3RyaW5nIG92
ZXJsb2FkIHRoYXQgY29udmVydHMgZnJvbQorICAgICAgICBhIEpTVmFsdWVSZWYsIEpTU3RyaW5n
UmVmLCBvciBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYW5kIHRvV0sgb3ZlcmxvYWQgdGhhdCBj
b252ZXJ0cworICAgICAgICBmcm9tIGEgY29uc3QgY2hhciouCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemUpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpjaGVja0ZvcldvcmxkTGVha3MpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6
Y29udGVudEV4dGVuc2lvbkpTT05QYXRoKTogVXNlIHRvU1RELgorICAgICAgICAoV1RSOjpUZXN0
Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QpOiBVc2UgdG9XSy4K
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSk6IFVzZSBzdHJpbmdWYWx1ZQorICAgICAgICBhbmQgdWludDY0VmFs
dWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50
c0xpc3QpOiBVc2UgZGljdGlvbmFyeVZhbHVlIGFuZAorICAgICAgICB1aW50NjRWYWx1ZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIGRpY3Rpb25hcnlWYWx1ZSwKKyAgICAgICAgc3RyaW5nVmFsdWUsIHVpbnQ2
NFZhbHVlLCBkb3VibGVWYWx1ZSwgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0QmxvY2tBbGxQbHVnaW5z
KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5TdXBw
b3J0ZWRNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKTogUmVtb3ZlZCBsb2NhbC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSk6IFVzZSBhdXRvIGFuZCB0b1dURlN0cmluZworICAgICAgICBpbnN0ZWFkIG9mIHRvU1RE
LgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24pOiBVc2UgT3B0aW9uYWwgaW5zdGVhZCBvZiBwYWlycworICAgICAgICBvZiBib29sIGFuZCBk
b3VibGUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpoYW5kbGVDaGVja09mVXNlck1l
ZGlhUGVybWlzc2lvbkZvck9yaWdpbik6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3Np
YmxlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJ
ZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6IFVzZSB0b1dLLgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6
OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
VGVzdEluY292YXRpb24pOiBVc2UgdG9XVEZTdHJpbmcuCisgICAgICAgIChXVFI6OlRlc3RJbnZv
Y2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KTogVXNlIGF1dG8gYW5kIHNldFZh
bHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKTogVXNlIHBvc3RQYWdl
TWVzc2FnZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UKKyAg
ICAgICAgYW5kIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
UmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZQorICAgICAg
ICBkaWN0aW9uYXJ5VmFsdWUsIGJvb2xlYW5WYWx1ZSwgdmFsdWUsIHN0cmluZ1ZhbHVlLCBkb3Vi
bGVWYWx1ZSwgYW5kCisgICAgICAgIG9wdGlvbmFsRG91YmxlVmFsdWUuCisgICAgICAgIChXVFI6
OlRlc3RJbnZvY2F0aW9uOjp1aVNjcmlwdERpZENvbXBsZXRlKTogVXNlIHBvc3RQYWdlTWVzc2Fn
ZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRCZWdpblN3
aXBlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OndpbGxFbmRTd2lwZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
RW5kU3dpcGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92
ZVN3aXBlU25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246Om5v
dGlmeURvd25sb2FkRG9uZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
ZGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJz
aXRlRGF0YVJlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJ
bnZvY2F0aW9uOjpkaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OmRpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVzZXRTdGF0aXN0aWNzVG9Db25z
aXN0ZW50U3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNl
dEJsb2NrQ29va2llc0Zvckhvc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRp
b246OmRpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRMYXN0U2Vlbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkTWVyZ2VTdGF0aXN0aWMpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291
cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21h
aW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVBbGxT
ZXNzaW9uQ3JlZGVudGlhbHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldEFwcEJvdW5kRG9tYWlucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2Nh
dGlvbjo6cGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24pOiBEaXR0by4KKworICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICBBZGRlZCBKU0Jhc2ljcy5oIHRvIERpY3Rpb25hcnlGdW5jdGlvbnMuaCB0byBhcHBy
b3ByaWF0ZSB0YXJnZXRzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdUUjo6U2NyaXB0SXRlbTo6U2NyaXB0SXRlbSk6IFVzZSB0
b1dLLgorICAgICAgICAoV1RSOjpXb3JrUXVldWVNYW5hZ2VyOjpxdWV1ZUxvYWRIVE1MU3RyaW5n
KTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29u
dHJvbGxlckNvY29hLmg6IE1ha2UgbW9zdCBmdW5jdGlvbnMgcHJpdmF0ZS4KKworICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW06CisgICAg
ICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpvdmVycmlkZVByZWZlcmVuY2UpOiBV
c2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MuaDogTWFya2VkIHRoZSBjbGFzcyBmaW5hbCBhbmQgbWFkZQorICAgICAg
ICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6
IERlbGV0ZWQuIFVzZSB0aGUgb25lIGluIEpTQmFzaWNzLmguCisgICAgICAgIChXVFI6OnBhcnNl
TW9kaWZpZXJBcnJheSk6IFVzZSB0aGUgbmV3IHRvV1RGU3RyaW5nIG92ZXJsb2FkLgorICAgICAg
ICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJl
S2V5Ym9hcmQpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50
U2VuZGVyUHJveHkubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2Vu
ZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3duKTogVXNlIHRvV1RGU3RyaW5nLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmg6IE1hcmtl
ZCB0aGUgY2xhc3MgZmluYWwgYW5kIG1hZGUKKyAgICAgICAgbW9zdCBmdW5jdGlvbnMgcHJpdmF0
ZS4KKwogMjAyMC0wOS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHJ1bi13ZWJraXQtdGVzdHMgY29kZSB0aGF0IHN0cmlwcyB0cmFpbGluZyBzcGFj
ZXMgd2hlbiBjb21wYXJpbmcgZXhwZWN0ZWQudHh0IGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKaW5kZXggMWEwYzE2NzA2YjJhZTQy
NjBlMzJkMjkwNDQ5YmYyZDY1Y2ZhM2RmYS4uOWUyNDBlNTU5Y2E0NTIzMzc0Nzk4NGE2YmE5MzUx
NTRhYWNjZDdkZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogCiAvLyBTdGF0aWMgVmFsdWUgR2V0dGVycwogCkBA
IC00NywxNSArNDgsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRSb290RWxlbWVudENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzTwogCiAvLyBPYmplY3QgQ3Jl
YXRpb24KIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIiKSk7Ci0gICAgCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpT
Q2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyT2JqZWN0ID0g
SlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVsZWFz
ZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJTdHIuZ2V0KCksIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgSlNPYmplY3RNYWtl
KGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQoKSwgdGhpcykpOwogfQogCiBzdGF0aWMgSlNW
YWx1ZVJlZiBsb2dGb2N1c0V2ZW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwg
SlNWYWx1ZVJlZiopCkBAIC0xNTIsOSArMTQ3LDkgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0UGxh
dGZvcm1OYW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXMK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcGxhdGZvcm1OYW1lLmdldCgp
KTsKIH0KIAotSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFzcygp
CitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRl
SlNDbGFzcygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25z
W10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRpY0Z1bmN0aW9uIGZ1bmN0aW9uc1td
ID0gewogICAgICAgICB7ICJsb2dGb2N1c0V2ZW50cyIsIGxvZ0ZvY3VzRXZlbnRzQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAibG9nVmFsdWVDaGFuZ2VFdmVudHMiLCBsb2dWYWx1ZUNoYW5n
ZUV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImxvZ1Njcm9sbGluZ1N0YXJ0RXZl
bnRzIiwgbG9nU2Nyb2xsaW5nU3RhcnRFdmVudHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMTY2LDIx
ICsxNjEsMTggQEAgSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFz
cygpCiAgICAgICAgIHsgImVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSIsIGVuYWJsZUVuaGFu
Y2VkQWNjZXNzaWJpbGl0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAg
ICAgfTsKLQotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAg
IHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAi
Zm9jdXNlZEVsZW1lbnQiLCBnZXRGb2N1c2VkRWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgInJvb3RFbGVtZW50IiwgZ2V0Um9vdEVsZW1lbnRDYWxsYmFjaywgMCwga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7ICJlbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkIiwgZ2V0RW5oYW5jZWRB
Y2Nlc3NpYmlsaXR5RW5hYmxlZENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInBsYXRm
b3JtTmFtZSIsIGdldFBsYXRmb3JtTmFtZUNhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
MCwgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFz
c0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyIiwgMCwgc3RhdGljVmFsdWVzLCBzdGF0aWNGdW5jdGlvbnMsCisg
ICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAg
IDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgMCwg
dmFsdWVzLCBmdW5jdGlvbnMsCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7
CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pKTsKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAppbmRleCAxZGM3
ZDNiNTYzYTE1NGY0Y2U5YmY3YTMwMzBjOGM1YTc2OTdmMzlhLi44YTI4N2M0OGIxZGY1MzZiNDc1
YjYxODQxN2MyNjEzNWZiMzg2MTI2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAg
ICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKICAgICB+QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZv
aWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgLy8gQ29udHJvbGxlciBN
ZXRob2RzIC0gcGxhdGZvcm0taW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zCiAgICAgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCByb290RWxlbWVudCgpOwpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNzKCk7
CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsKIAog
I2lmIFBMQVRGT1JNKFdJTikKICAgICBIV0lORVZFTlRIT09LIG1fZm9jdXNFdmVudEhvb2sgeyBu
dWxscHRyIH07CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuY3BwCmluZGV4IDBlNWE1MGY2YjlkM2NlNWNhNzdiYTQ0ODY4N2MwMDljYmIxNzVkMjAuLjhl
Zjg1ZWVkZjA4NGQ2NzYyMjcxY2FmMmM4ZjQ0YWI4NTQ3OTI2NzEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCkBAIC0yMDYsNyArMjA2LDcg
QEAgc3RhdGljIEpTVmFsdWVSZWYgdWlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVkaWNhdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBz
dGFydEVsZW1lbnQgPSBudWxscHRyOwogICAgIGJvb2wgaXNEaXJlY3Rpb25OZXh0ID0gdHJ1ZTsK
ICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleSA9IG51bGxwdHI7Ci0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHNlYXJjaFRleHQgPSBudWxscHRyOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBzZWFyY2hUZXh0OwogICAgIGJvb2wgdmlzaWJsZU9ubHkgPSBmYWxzZTsKICAgICBib29s
IGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSA9IGZhbHNlOwogICAgIGlmIChhcmd1bWVudENvdW50
ID49IDUgJiYgYXJndW1lbnRDb3VudCA8PSA2KSB7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0gYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KaW5k
ZXggZWNlNTFlYTM5YTUxNjgzNTRiZDU2OTQ2MzU5MDg2ZDkwMjJlYTE5ZC4uMTRjNjI3MGY4MjMx
ZGMwZjI2YTA1ZTY5NWRhODQ3YmRmOGU0OGM4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQpA
QCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsMTAgKzQz
MSwxMCBAQCBzdWIgX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yCiB7CiAgICAgbXkgKCRzZWxmLCAk
dHlwZSwgJGFyZ3VtZW50TmFtZSkgPSBAXzsKIAotICAgIHJldHVybiAiSlNWYWx1ZVRvTnVsbGFi
bGVCb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9v
bGVhbiIgJiYgJHR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsQm9vbChj
b250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0
eXBlLT5pc051bGxhYmxlOwogICAgIHJldHVybiAiSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCAk
YXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAi
JGFyZ3VtZW50TmFtZSIgaWYgJHR5cGUtPm5hbWUgZXEgIm9iamVjdCI7Ci0gICAgcmV0dXJuICJh
ZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIp
KSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJl
dHVybiAiY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICQkc2VsZntj
b2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gIkpTVmFsdWVU
b051bWJlcihjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSIgaWYgJCRzZWxme2NvZGVH
ZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAidG8iIC4gX2lt
cGxlbWVudGF0aW9uQ2xhc3NOYW1lKCR0eXBlKSAuICIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSki
OwogfQpAQCAtNDcyLDExICs0NzIsMTEgQEAgc3ViIF9yZXR1cm5FeHByZXNzaW9uCiAgICAgbXkg
KCRzZWxmLCAkcmV0dXJuVHlwZSwgJGV4cHJlc3Npb24pID0gQF87CiAKICAgICByZXR1cm4gIkpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAidW5k
ZWZpbmVkIjsKLSAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICRyZXR1
cm5UeXBlLT5pc051bGxhYmxlOworICAgIHJldHVybiAibWFrZVZhbHVlKGNvbnRleHQsICR7ZXhw
cmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5
cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwg
JHtleHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICBy
ZXR1cm4gIiR7ZXhwcmVzc2lvbn0iIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJvYmplY3QiOwog
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCRyZXR1cm5UeXBlKTsKLSAg
ICByZXR1cm4gIkpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0u
Z2V0KCkpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkcmV0dXJuVHlw
ZSk7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSki
IGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKICAg
ICByZXR1cm4gInRvSlMoY29udGV4dCwgV1RGOjpnZXRQdHIoJHtleHByZXNzaW9ufSkpIjsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKaW5kZXggNGEzN2JmM2ExM2RhNGNh
ZWVhNDBhMGNmOGE3MDlmZTU4ZDM0ZWE0Yy4uYWVmN2VjOGE1MDViZmM1MWE4N2UzZDJmOWUxNjc1
MzlkZWUyOWRjNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVy
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcyICsy
OSw0OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgog
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotCi1HQ0NvbnRyb2xsZXI6OkdDQ29udHJvbGxlcigp
Ci17Ci19Ci0KLUdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcigpCi17Ci19CisjaW5jbHVkZSAi
SlNCYXNpY3MuaCIKIAogLy8gU3RhdGljIEZ1bmN0aW9ucwogCiBzdGF0aWMgSlNWYWx1ZVJlZiBj
b2xsZWN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+Y29sbGVjdCgpOworICAg
IGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLmNvbGxlY3QoKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
UmVmIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKLSAgICBib29sIHdhaXRVbnRpbERvbmUgPSBmYWxzZTsKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA+IDApCi0gICAgICAgIHdhaXRVbnRpbERvbmUgPSBKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1swXSk7Ci0KLSAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCh3YWl0VW50aWxE
b25lKTsKLQorICAgIGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBib29sIHdhaXRVbnRpbERv
bmUgPSBhcmd1bWVudENvdW50ID4gMCAmJiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVu
dGlsRG9uZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQog
CiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRKU09iamVjdENvdW50Q2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0g
ICAgc2l6ZV90IGpzT2JqZWN0Q291bnQgPSBjb250cm9sbGVyLT5nZXRKU09iamVjdENvdW50KCk7
Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwganNPYmplY3RDb3VudCk7
CisgICAgYXV0byYgY29udHJvbGxlciA9ICpzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJl
cihjb250ZXh0LCBjb250cm9sbGVyLmdldEpTT2JqZWN0Q291bnQoKSk7CiB9CiAKIC8vIE9iamVj
dCBDcmVhdGlvbgogCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCkKIHsKLSAgICBhdXRvIGdjQ29udHJvbGxlclN0ciA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJHQ0NvbnRyb2xsZXIiKSk7Ci0KLSAgICBKU0NsYXNzUmVmIGNs
YXNzUmVmID0gZ2V0SlNDbGFzcygpOwotICAgIEpTVmFsdWVSZWYgZ2NDb250cm9sbGVyT2JqZWN0
ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVs
ZWFzZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRv
d09iamVjdCwgZ2NDb250cm9sbGVyU3RyLmdldCgpLCBnY0NvbnRyb2xsZXJPYmplY3QsIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUs
IGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAi
R0NDb250cm9sbGVyIiwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQo
KSwgdGhpcykpOwogfQogCi1KU0NsYXNzUmVmIEdDQ29udHJvbGxlcjo6Z2V0SlNDbGFzcygpCitK
U1JldGFpblB0cjxKU0NsYXNzUmVmPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewot
ICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0geworICAgIHN0
YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKICAgICAgICAg
eyAiY29sbGVjdCIsIGNvbGxlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJjb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWQiLCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJnZXRKU09iamVjdENvdW50IiwgZ2V0SlNPYmplY3RDb3VudENhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBK
U0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNz
QXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIHN0YXRpY0Z1bmN0aW9ucywKKyAg
ICBzdGF0aWMgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAg
MCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiR0NDb250cm9sbGVyIiwgMCwgMCwgZnVuY3Rpb25z
LAogICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiAgICAgfTsKLQotICAg
IHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJldHVybiBhZG9w
dChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJv
bGxlci5oCmluZGV4IDY0MjQzODRkZjUzMGU4YzFmZGFlOGZiNjEzMTFiZjBhZGM0YTZhOGYuLjM3
YWE0NmE3NzRjZTNlNzBiODc4OWQ0NDNmMWU0MTgxNGFjNThmNWMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0dDQ29udHJvbGxlci5oCkBAIC0yNiwxOSArMjYsMTUgQEAKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBHQ0NvbnRyb2xsZXJfaAotI2RlZmluZSBHQ0NvbnRyb2xsZXJfaAorI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KIAogY2xhc3MgR0NDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBHQ0NvbnRyb2xsZXIoKTsKLSAgICB+R0NDb250cm9sbGVyKCk7Ci0KLSAg
ICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5k
b3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIC8vIENvbnRyb2xsZXIgTWV0aG9kcyAtIHBs
YXRmcm9tIGluZGVwZW5kYW50IGltcGxlbWVudGF0aW9ucwogICAgIHZvaWQgY29sbGVjdCgpIGNv
bnN0OwpAQCAtNDYsNyArNDIsNSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGdldEpTT2JqZWN0Q291
bnQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNz
KCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsK
IH07Ci0KLSNlbmRpZiAvLyBHQ0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVy
LmNwcAppbmRleCA1ZTUzNWFmMWRlYWQ4NDJkMmVmNGY1Zjc2NjAyYzgzYTk1MGI3NjUyLi4zN2Y2
OTFjYjc5NmI1NjM5MjYyODA0ZWUzZjQwMWNhYmRhZThmMGUxIDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0UnVubmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSAi
V29ya1F1ZXVlSXRlbS5oIgpAQCAtMzgsMTAgKzM5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDVGVzdFJ1bm5lclV0aWxzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVk1JbmxpbmVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Mb2dJ
bml0aWFsaXphdGlvbi5oPgpAQCAtNDg5LDcgKzQ4Nyw2IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRp
c3BsYXlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dz
IGltcGxlbWVudGF0aW9uCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRy
b2xsZXItPmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCk7CiAKQEAgLTQ5OCwxMiArNDk1LDEwIEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGVuY29kZUhvc3RO
YW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBt
YWMgaW1wbGVtZW50YXRpb24KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
KTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBhdXRvIGVuY29kZWRIb3N0TmFtZSA9IGNvbnRyb2xsZXItPmNvcHlFbmNv
ZGVkSG9zdE5hbWUobmFtZS5nZXQoKSk7CkBAIC01MTIsMjIgKzUwNywxMiBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBleGVjQ29tbWFuZENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgTWFjICYgV2luZG93cyBp
bXBsZW1lbnRhdGlvbnMuCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9w
dChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQorICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICAvLyBJZ25vcmluZyB0aGUgc2Vj
b25kIHBhcmFtZXRlciAodXNlckludGVyZmFjZSksIGFzIHRoaXMgY29tbWFuZCBlbXVsYXRlcyBh
IG1hbnVhbCBhY3Rpb24uCi0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdmFsdWU7Ci0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMykgewotICAgICAgICB2YWx1ZSA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKLSAgICAg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmFsdWUgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotCisgICAgYXV0byB2YWx1ZSA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDIgPyBhcmd1bWVu
dHNbMl0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5leGVjQ29tbWFuZChuYW1lLmdldCgpLCB2YWx1ZS5nZXQoKSk7CkBAIC01NDEs
MTEgKzUyNiw4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGZpbmRTdHJpbmdDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sCiAgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAK
LSAgICBhdXRvIHRhcmdldCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAg
SlNPYmplY3RSZWYgb3B0aW9ucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIHRhcmdl
dCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKKyAgICBhdXRv
IG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBudWxscHRy
KTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmZpbmRTdHJpbmcoY29udGV4dCwgdGFyZ2V0
LmdldCgpLCBvcHRpb25zKSk7CkBAIC01NjYsOCArNTQ4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
aXNDb21tYW5kRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW4KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29u
dGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIApA
QCAtNTc5LDEwICs1NjAsOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBvdmVycmlkZVByZWZlcmVuY2VD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZgogICAgIGlmIChhcmd1
bWVudENvdW50IDwgMikKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogCi0gICAgYXV0byBrZXkgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAg
ICBhdXRvIHZhbHVlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byBr
ZXkgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgYXV0
byB2YWx1ZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzFdKTsKIAog
ICAgIC8vIFNob3VsZCB1c2UgYDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zv
cndhcmRDYWNoZT10cnVlIF0gLS0+YCBpbnN0ZWFkLgogICAgIFJFTEVBU0VfQVNTRVJUKCFKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleS5nZXQoKSwgIldlYktpdFVzZXNCYWNrRm9yd2Fy
ZENhY2hlUHJlZmVyZW5jZUtleSIpKTsKQEAgLTY2MiwxNSArNjQxLDEwIEBAIHN0YXRpYyBKU1Zh
bHVlUmVmIHF1ZXVlTG9hZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gdXJsID0gYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAg
IGF1dG8gdXJsID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOwog
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
dGFyZ2V0OwotICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAgdGFyZ2V0ID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bikpOwotICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIH0gZWxzZQotICAgICAgICB0
YXJnZXQgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgIGF1
dG8gdGFyZ2V0ID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudENvdW50ID4g
MSA/IGFyZ3VtZW50c1sxXSA6IG51bGxwdHIpOwogCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnF1ZXVlTG9hZCh1cmwuZ2V0KCksIHRhcmdldC5nZXQoKSk7
CkBAIC02OTIsNyArNjY2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2FkSFRNTFN0cmlu
Z0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZgogICAgICAgICBiYXNl
VVJMID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOwogICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogICAgIH0gZWxzZQotICAg
ICAgICBiYXNlVVJMID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsK
KyAgICAgICAgYmFzZVVSTCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIAogICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKIApAQCAtMjA0NSwzNCArMjAxOSwyNCBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBydW5VSVNjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiwgSlNPYmplYwogCiBzdGF0aWMgdm9pZCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUoSlNPYmpl
Y3RSZWYgb2JqZWN0KQogewotICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIGNvbnRyb2xs
ZXItPmRlcmVmKCk7CisgICAgc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKS0+ZGVyZWYoKTsKIH0KIAogLy8gT2JqZWN0IENyZWF0aW9uCiAKLXZvaWQg
VGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFRlc3RSdW5u
ZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byB0
ZXN0UnVubmVyU3RyID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRlc3RS
dW5uZXIiKSk7CiAgICAgcmVmKCk7Ci0KLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlND
bGFzcygpOwotICAgIEpTVmFsdWVSZWYgbGF5b3V0VGVzdENvbnRvbGxlck9iamVjdCA9IEpTT2Jq
ZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xh
c3NSZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3Qs
IHRlc3RSdW5uZXJTdHIuZ2V0KCksIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4
Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGVz
dFJ1bm5lciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCksIHRo
aXMpKTsKIH0KIAotSlNDbGFzc1JlZiBUZXN0UnVubmVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWlu
UHRyPEpTQ2xhc3NSZWY+IFRlc3RSdW5uZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewotICAgIHN0YXRp
YyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMgPSBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMo
KTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zID0gVGVzdFJ1
bm5lcjo6c3RhdGljRnVuY3Rpb25zKCk7Ci0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNs
YXNzRGVmaW5pdGlvbiA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiVGVz
dFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAorICAgIHN0YXRpYyBj
b25zdCBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0geworICAgICAgICAwLCBrSlNDbGFz
c0F0dHJpYnV0ZU5vbmUsICJUZXN0UnVubmVyIiwgMCwgc3RhdGljVmFsdWVzKCksIHN0YXRpY0Z1
bmN0aW9ucygpLAogICAgICAgICAwLCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNs
YXNzRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRp
b24pKTsKIH0KIAogLy8gQ29uc3RhbnRzCkBAIC0yMTA3LDkgKzIwNzEsOSBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBnZXRSRU5ERVJfVFJFRV9TSE9XX0xBWUVSX0ZSQUdNRU5UUyhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYgogICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAzMik7
CiB9CiAKLUpTU3RhdGljVmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCitjb25zdCBK
U1N0YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogewotICAgIHN0YXRpYyBK
U1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNT
dGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAiZGlkQ2FuY2VsQ2xpZW50UmVkaXJl
Y3QiLCBnZXREaWRDYW5jZWxDbGllbnRSZWRpcmVjdCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJ0
aW1lb3V0IiwgZ2V0VGltZW91dENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImdsb2Jh
bEZsYWciLCBnZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIHNldEdsb2JhbEZsYWdDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCkBAIC0yMTI3LDEyICsyMDkxLDEyIEBAIEpTU3RhdGlj
VmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCiAgICAgICAgIHsgIlJFTkRFUl9UUkVF
X1NIT1dfTEFZRVJfRlJBR01FTlRTIiwgZ2V0UkVOREVSX1RSRUVfU0hPV19MQVlFUl9GUkFHTUVO
VFMsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAwLCAwLCAwLCAwIH0KICAgICB9OwotICAgIHJldHVy
biBzdGF0aWNWYWx1ZXM7CisgICAgcmV0dXJuIHZhbHVlczsKIH0KIAotSlNTdGF0aWNGdW5jdGlv
biogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKK2NvbnN0IEpTU3RhdGljRnVuY3Rpb24q
IFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRp
Y0Z1bmN0aW9uIGZ1bmN0aW9uc1tdID0gewogICAgICAgICB7ICJhYm9ydE1vZGFsIiwgYWJvcnRN
b2RhbENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZERpc2FsbG93ZWRVUkwiLCBhZGRE
aXNhbGxvd2VkVVJMQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkVVJMVG9SZWRpcmVj
dCIsIGFkZFVSTFRvUmVkaXJlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMjI5Nyw3ICsyMjYxLDcg
QEAgSlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKICAgICAg
ICAgeyAwLCAwLCAwIH0KICAgICB9OwogCi0gICAgcmV0dXJuIHN0YXRpY0Z1bmN0aW9uczsKKyAg
ICByZXR1cm4gZnVuY3Rpb25zOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxT
dHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKQEAgLTIzNDIs
MTQgKzIzMDYsMTEgQEAgdm9pZCBUZXN0UnVubmVyOjppZ25vcmVMZWdhY3lXZWJOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMoKQogCiB2b2lkIFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyRmlyZWQoKQogewotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAiRkFJTDogVGlt
ZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iOwotICAgIGZwcmlu
dGYodGVzdFJlc3VsdCwgIiVzIiwgbWVzc2FnZSk7CisgICAgZnB1dHMoIkZBSUw6IFRpbWVkIG91
dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIiwgdGVzdFJlc3VsdCk7CiAK
LSAgICBhdXRvIGFjY3VtdWxhdGVkTG9ncyA9IGdldEFuZFJlc2V0QWNjdW11bGF0ZWRMb2dzKCk7
Ci0gICAgaWYgKCFhY2N1bXVsYXRlZExvZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIG1lc3NhZ2UgPSAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4iOwotICAg
ICAgICBmcHJpbnRmKHRlc3RSZXN1bHQsICIlcyVzXG4iLCBtZXNzYWdlLCBhY2N1bXVsYXRlZExv
Z3MudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQorICAgIGF1dG8gbG9ncyA9IGdldEFuZFJlc2V0QWNj
dW11bGF0ZWRMb2dzKCk7CisgICAgaWYgKCFsb2dzLmlzRW1wdHkoKSkKKyAgICAgICAgZnByaW50
Zih0ZXN0UmVzdWx0LCAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4lc1xuIiwg
bG9ncy51dGY4KCkuZGF0YSgpKTsKIAogICAgIG5vdGlmeURvbmUoKTsKIH0KQEAgLTI0MDMsMjQg
KzIzNjQsMjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRBY2N1bW11bGF0ZUxvZ3NGb3JDaGFubmVs
KEpTU3RyaW5nUmVmIGNoYW5uZWwpCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRMb2dDaGFu
bmVsVG9BY2N1bXVsYXRlKHsgYnVmZmVyLmdldCgpIH0pOwogfQogCi10eXBlZGVmIFdURjo6SGFz
aE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVJlZj4gQ2FsbGJhY2tNYXA7Cit1c2luZyBDYWxsYmFja01h
cCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNPYmplY3RSZWY+Owogc3RhdGljIENhbGxiYWNr
TWFwJiBjYWxsYmFja01hcCgpCiB7CiAgICAgc3RhdGljIENhbGxiYWNrTWFwJiBtYXAgPSAqbmV3
IENhbGxiYWNrTWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2Fj
aGVUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIEpTVmFsdWVSZWYgY2FsbGJhY2sp
Cit2b2lkIFRlc3RSdW5uZXI6OmNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4
LCBKU1ZhbHVlUmVmIGNhbGxiYWNrVmFsdWUpCiB7Ci0gICAgaWYgKCFjYWxsYmFjaykKKyAgICBh
dXRvIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKKyAgICBpZiAoIWNhbGxiYWNrVmFs
dWUgfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYWxsYmFja1ZhbHVlKSkKICAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gY2FsbGJhY2sgPSAoSlNPYmplY3RSZWYpY2FsbGJhY2tWYWx1ZTsK
IAogICAgIGlmIChjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkgewotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBj
YWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICVkKVxuIiwgaW5kZXgpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5l
ciBjYWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICV1KVxuIiwgaW5kZXgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluRnJhbWVK
U0NvbnRleHQoKTsKICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAg
Y2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNrKTsKIH0KQEAgLTI0MzAsMjIgKzIzOTIs
MTggQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGlu
ZGV4LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY28KICAgICBpZiAoIWNhbGxiYWNrTWFwKCkuY29u
dGFpbnMoaW5kZXgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOwotICAgIGlmIChKU09iamVjdFJlZiBjYWxsYmFjayA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpLCAwKSkg
ewotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywg
MCk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgaWYgKGF1
dG8gY2FsbGJhY2sgPSBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpKSB7CisgICAgICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdldEdsb2JhbE9i
amVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBudWxscHRyKTsKICAgICAg
ICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAgfQogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OmNsZWFyVGVzdFJ1bm5lckNhbGxiYWNrcygpCiB7Ci0gICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKLQotICAgIGZvciAoYXV0byYgaXRl
ciA6IGNhbGxiYWNrTWFwKCkpIHsKLSAgICAgICAgaWYgKEpTT2JqZWN0UmVmIGNhbGxiYWNrID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGl0ZXIudmFsdWUsIDApKQotICAgICAgICAgICAgSlNW
YWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgfQotCisgICAgYXV0byBjb250
ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNh
bGxiYWNrTWFwKCkudmFsdWVzKCkpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwg
Y2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFwKCkuY2xlYXIoKTsKIH0KIApAQCAtMjUwOCwxNiAr
MjQ2NiwxMSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGZpbGVzVmFsdWUpCiB7CiAgICAgaWYgKCFKU1ZhbHVlSXNB
cnJheShjb250ZXh0LCBmaWxlc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgSlNPYmpl
Y3RSZWYgZmlsZXMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZmlsZXNWYWx1ZSwgbnVsbHB0
cik7Ci0gICAgc3RhdGljIGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgZmlsZXNMZW5ndGhW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZmlsZXMsIGxlbmd0aFByb3BlcnR5
LmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBmaWxl
c0xlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZmlsZXMgPSAoSlNPYmpl
Y3RSZWYpZmlsZXNWYWx1ZTsKKyAgICBhdXRvIGZpbGVzTGVuZ3RoID0gV1RSOjphcnJheUxlbmd0
aChjb250ZXh0LCBmaWxlcyk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVzLmNsZWFyKCk7Ci0gICAg
YXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbGVzTGVuZ3RoOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIGZpbGVWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZpbGVzLCBpLCBudWxscHRyKTsKICAgICAg
ICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgZmlsZVZhbHVlKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCmluZGV4IDE2NzEyMDU4YTEwY2U5
ODlhM2M4ZDQzZDY0NGY5YTllMzAwZDQwZGUuLmU4NTdhYTRkY2RhMjk3YzRmZTNlNzZhYzdlOWVh
ZjA1YTA5YzgwYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKQEAgLTU0LDcgKzU0LDcg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xlYW51cCgpOwogCi0gICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYp
OwogCiAgICAgdm9pZCBhZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCk7CiAgICAgY29u
c3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBhbGxvd2VkSG9zdHMoKSBjb25zdCB7IHJldHVybiBt
X2FsbG93ZWRIb3N0czsgfQpAQCAtNDk3LDcgKzQ5Nyw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp2
ZWN0b3I8Y2hhcj4gbV9vcGVuUGFuZWxGaWxlc01lZGlhSWNvbjsKICNlbmRpZgogCi0gICAgc3Rh
dGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOwotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBz
dGF0aWNWYWx1ZXMoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rp
b25zKCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3Mo
KTsKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzKCk7CisgICAg
c3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOwogfTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbQppbmRleCA2MWUwMWY1ZWQ3Njc1YTgzMGJhNmYzOGY4ZWNmNTg0MGZiYzgzOWNiLi5l
ODUyZGZkYWJjZDQzOTkzYjMxMzkzZDM1ZGYwMDU0Y2Y2Nzk0Zjc5IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBA
IC0yNCwxMiArMjQsMTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkR1
bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
IgorI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1ByaXZhdGUuaD4KQEAgLTE1NSw1
ICsxNTYsNSBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2li
aWxpdHlFbmFibGVkKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0
ZUpTU3RyaW5nKCJpb3MiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5kZXggZTNjOTA5ZDZkZDI3MDM5MjgzZWFj
Y2QzMmFlNDA5MjZjZThhOWU2NC4uNjQ1ZmM4NjNjZWYxMGEwMGY1YmI0YjdkMTM5YzZlMGRjZTQw
OGRlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW0KQEAgLTI0LDExICsyNCwxMiBAQAogICovCiAKICNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCIKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogI2lt
cG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCIKKyNpbXBvcnQgIkR1bXBS
ZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5oPgpAQCAtNDEsMTEgKzQyLDYgQEAKIAog
dHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwg
TlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKLSAgICA6IG1fZWxl
bWVudChlbGVtZW50KQotewotfQotCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChVSUFjY2Vzc2liaWxp
dHlIaWRkZW4pCiAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooQ0dQb2ludClwb2ludDsKIC0g
KGlkKWFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50OwpAQCAtMTEyLDkgKzEwOCw5IEBAIEBpbnRl
cmZhY2UgTlNPYmplY3QgKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyUHJpdmF0ZSkKIC0g
KENHUGF0aFJlZilfYWNjZXNzaWJpbGl0eVBhdGg7CiBAZW5kCiAKLXN0YXRpYyBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGlkIGVsZW1lbnQpCisgICAgOiBtX2VsZW1lbnQo
ZWxlbWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cyhudWxscHRyLCAwKSk7CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY29u
Y2F0ZW5hdGVBdHRyaWJ1dGVBbmRWYWx1ZShOU1N0cmluZyAqYXR0cmlidXRlLCBOU1N0cmluZyAq
dmFsdWUpCkBAIC0xODAsNyArMTc2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpmaWVsZHNldEFuY2VzdG9yRWxlbWVudCgpCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLQogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnVybCgpCiB7CiAgICAgTlNVUkwgKnVybCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0
eVVSTF07CkBAIC0yOTEsNyArMjg2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpsaW5rZWRFbGVtZW50KCkKIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KHVuc2lnbmVk
IGluZGV4KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtNTU4LDcgKzU1Miw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAgICAgaWQgdGV4
dE1hcmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKICAgICBp
ZiAoIXRleHRNYXJrZXJzIHx8ICFbdGV4dE1hcmtlcnMgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBj
bGFzc11dKQotICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgICAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJp
bmdGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCkBA
IC02ODEsMjIgKzY3NSwyMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3Vt
ZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbAogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2Vk
VUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJp
YnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJu
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0
dHJpYnV0ZSkKQEAgLTcxNiw3ICs3MTAsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZQogICAg
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGF0dHJpYnV0ZSwgIkFYVGV4dHVhbENv
bnRleHQiKSkKICAgICAgICAgcmV0dXJuIFtbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlUZXh0dWFs
Q29udGV4dF0gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkKCkKQEAgLTc1
NSwxNyArNzQ5LDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVT
dXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFnZVVwKCkKQEAg
LTc4OSwxNyArNzgzLDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFn
ZVJpZ2h0KCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvbGVEZXNjcmlwdGlvbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQpAQCAtODA5
LDcgKzgwMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpkZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFs
dWUoKQpAQCAtODE5LDcgKzgxMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRl
eHQoKSBjb25zdApAQCAtODQ5LDcgKzg0Myw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2V0VmFsdWUoSlNTdHJpbmdSZWYgdmFsdWVUZXh0KQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbigpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRM
aW5lTnVtYmVyKCkKQEAgLTg2OSw3ICs4NjMsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
Rm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtODkyLDcgKzg4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDaGVja2VkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lu
ZGV0ZXJtaW5hdGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTkwOCw3ICs5MDAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFyaWFJc0dyYWJiZWQoKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3Ry
aW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50
IGluZGV4KQpAQCAtOTE4LDM3ICs5MTAsMzcgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmxpbmVGb3JJbmRleChpbnQgaW5kZXgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQogewotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dDb3VudCgpCkBAIC05ODcsMjIgKzk3OSwxOSBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQg
Y29sLAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUo
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQg
eSkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2ZVRlY2hu
b2xvZ3lTaW11bGF0ZWRGb2N1cygpCkBAIC0xMDM1LDIzICsxMDI0LDIxIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3Rp
ZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQpAQCAtMTA4Myw0
MyArMTA3MCwzNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyKCkKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJs
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBz
ZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTExMzAsMTMgKzExMTAsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2lu
Z2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtMTE1MiwyNyArMTEzMCwyMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cG9wdXBWYWx1ZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGFrZUZvY3VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVj
dGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAogfQogCiB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRDb3VudEZv
clNlYXJjaFByZWRpY2F0ZShKU0NvbnRleHRSZWYgY29udGV4dCwgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgSlNWYWx1ZVJlZiBzZWFy
Y2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1t
ZWRpYXRlRGVzY2VuZGFudHNPbmx5KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gMDsKIH0KIApAQCAtMTIxNCwyMyArMTE4NywxOSBAQCBkb3VibGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xhc3NM
aXN0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXJyYXlBdHRy
aWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Jikg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4m
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB1bnNpZ25lZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZENoaWxkcmVuQ291bnQoKSBjb25zdApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgKaW5kZXggMzg1
MGI0MTQ0NjNlMDE1YzY3ZDU2ZWYwNGE1OTM4Yzk5MWM0N2VkOC4uMTViZjUxZjg0ZDNlODE4MWMw
MmNmNjYzYzc1NTM5ZGMyOGFkOWRkNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oCkBAIC00MSw0ICs0MSw0IEBAIEBpbnRlcmZhY2Ug
TlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQogLSAoSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+KWNyZWF0ZUpTU3RyaW5nUmVmOwogQGVuZAogCi1leHRlcm4gTlNEaWN0aW9uYXJ5ICpzZWFy
Y2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250
ZXh0UmVmLCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50ICpzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJl
Y3Rpb25OZXh0LCB1bnNpZ25lZCByZXN1bHRzTGltaXQsIEpTVmFsdWVSZWYgc2VhcmNoS2V5LCBK
U1N0cmluZ1JlZiBzZWFyY2hUZXh0LCBib29sIHZpc2libGVPbmx5LCBib29sIGltbWVkaWF0ZURl
c2NlbmRhbnRzT25seSk7CitOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZWYsIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5leHQsIHVuc2lnbmVkIHJl
c3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFyY2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQs
IGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1t
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KaW5k
ZXggNzk0MDczOGEzMzkwZWIyNzBhNjA4YmZkMDU5ZTE3MmFmNGI3OTA5Mi4uMDMwNjdlMmQwODky
MTRmYmU4NDY2N2IyODI0ZjhjZTMxNDgwZjk4NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogCisj
aW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZD
Ri5oPgogCiBAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQpA
QCAtNTYsNyArNTcsNiBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICBbcGFyYW1l
dGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c3RhcnRFbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVu
dCgpIGZvcktleTpAIkFYU3RhcnRFbGVtZW50Il07CiAKICAgICBbcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZSBzZXRPYmplY3Q6KGlzRGlyZWN0aW9uTmV4dCkgPyBAIkFYRGlyZWN0aW9uTmV4dCIgOiBA
IkFYRGlyZWN0aW9uUHJldmlvdXMiIGZvcktleTpAIkFYRGlyZWN0aW9uIl07Ci0KICAgICBbcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QChyZXN1bHRzTGltaXQpIGZvcktleTpAIkFY
UmVzdWx0c0xpbWl0Il07CiAKICAgICBpZiAoc2VhcmNoS2V5KSB7CkBAIC02NiwxNCArNjYsOCBA
QCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JT
ZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0cmlu
ZykKICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZy5nZXQoKV07CiAgICAgICAgIH0gZWxzZSBp
ZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsKLSAgICAgICAgICAgIEpT
T2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJj
aEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0
aCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJp
bmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAg
ICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcu
Z2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleUFycmF5TGVuZ3RoVmFs
dWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUp
KQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVl
LCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJj
aEtleUFycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaEtleTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHNlYXJjaEtleUFycmF5TGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hL
ZXlBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoS2V5
QXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoS2V5
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlBcnJh
eSwgaSwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2VhcmNoS2V5U3Ry
aW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hLZXlWYWx1ZSwgbnVsbHB0
cik7CkBAIC04OCwxMiArODIsMTEgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJh
bWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICAgICAg
aWYgKHNlYXJjaEtleVBhcmFtZXRlcikKICAgICAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmli
dXRlIHNldE9iamVjdDpzZWFyY2hLZXlQYXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWFyY2hLZXkiXTsK
ICAgICB9Ci0gICAgCisKICAgICBpZiAoc2VhcmNoVGV4dCAmJiBKU1N0cmluZ0dldExlbmd0aChz
ZWFyY2hUZXh0KSkKICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OltO
U1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoVGV4dF0gZm9yS2V5OkAiQVhTZWFy
Y2hUZXh0Il07Ci0gICAgCisKICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6
QCh2aXNpYmxlT25seSkgZm9yS2V5OkAiQVhWaXNpYmxlT25seSJdOwotICAgIAogICAgIFtwYXJh
bWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSkg
Zm9yS2V5OkAiQVhJbW1lZGlhdGVEZXNjZW5kYW50c09ubHkiXTsKICAgICAKICAgICByZXR1cm4g
cGFyYW1ldGVyaXplZEF0dHJpYnV0ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRleCA1MWYwMzFkZGJiY2Q4NTNh
ZGI0ZmU3MTQ3ZDg1YTUyNTc2YTAwNzhiLi45NWEwNmYzYTQwYTA0ODllM2UwYjBiMzE2NTc0YzNm
Y2JmMmVjZjExIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJBY2Nl
c3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2ltcG9ydCAi
SlNCYXNpY3MuaCIKICNpbXBvcnQgPEFwcEtpdC9OU0NvbG9yLmg+CiAjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+
CkBAIC0xNTgsNSArMTU5LDUgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5j
ZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZCgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm1hYyIpKTsKKyAgICByZXR1cm4g
V1RSOjpjcmVhdGVKU1N0cmluZygibWFjIik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IGUxZWZkN2Y0ZTE2
MWFmZmRlZTIyNGNjNDUzODQ4YjM5Y2I0OTcwNjMuLjY0OTFhMmQwYTVmYTRjNzRlNzIxNzkyNzhm
N2UxY2E5OWQ3NjhkNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFz
aWNzLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgpA
QCAtODAsMTEgKzgxLDYgQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9p
bnQ6KE5TUG9pbnQpcG9pbnQ7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZh
bHVlIGZvckF0dHJpYnV0ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWU7CiBAZW5kCiAKLXN0YXRp
YyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0gICAg
cmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkpOwot
fQotCiBzdGF0aWMgT3B0aW9uYWw8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gbWFrZVZlY3RvckVs
ZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCosIGlkIGVsZW1lbnQpCiB7CiAgICAg
cmV0dXJuIHsgeyBlbGVtZW50IH0gfTsKQEAgLTIyMSwxNCArMjE3LDggQEAgc3RhdGljIE5TRGlj
dGlvbmFyeSAqc2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0Nv
bnRleHRSZWYgY28KICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRP
YmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5n
LmdldCgpXV07CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hT
dHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVs
bHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAw
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJp
bmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJp
bmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgCisgICAgICAgICAg
ICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheSA9IChKU09iamVjdFJlZilzZWFyY2hTdHJpbmdzOwor
ICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVu
Z3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0
cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKICAgICAgICAgICAgICAgICBpZiAo
c2VhcmNoU3RyaW5nc1N0cmluZykKQEAgLTI2MiwxNCArMjUyLDggQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRl
eHRSZWYgY28KICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQogICAgICAgICAg
ICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKICAgICAgICAgfSBl
bHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAg
ICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNl
YXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJv
cGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5n
dGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNo
U3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJj
aFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAg
ICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaFN0cmluZ3M7
CisgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IFdUUjo6YXJyYXlM
ZW5ndGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNo
U3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgICAgIGlm
IChzZWFyY2hTdHJpbmdzU3RyaW5nKQpAQCAtMTQ0NiwxMyArMTQzMCwxMyBAQCB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxk
cmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIGZ1bmN0aW9uLgogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQpAQCAtMTQ2Myw3ICsxNDQ3LDcgQEAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcoKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBF
TkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQpAQCAt
MTQ3NCw3ICsxNDU4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0
cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogICAgIAotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVy
bCgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdh
dGUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KaW5k
ZXggMzY3MTQ5MzlmZGEwYTU2NzQ5Yzc5OTg4NmExZWE0Mzg5MjE4OWE0YS4uMzQyYjNhMDFkYzdl
YTg3OWFmMWI1NGIwZWUyNzNkNjgxMmY4ZjdhNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQpAQCAtMzExLDU0ICszMTEsMjYgQEAgSUdOT1JFX1dB
Uk5JTkdTX0VORAogCiAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxk
Rm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKIHsKLSAgICAvLyBNYWtlIE5ldy1TdHlsZSBUZXN0
UnVubmVyCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07
Ci0gICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0
KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBhdXRvIGNvbnRl
eHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07CisgICAgYXV0byB3ZWJWaWV3ID0gW2ZyYW1lIHdl
YlZpZXddOworICAgIGF1dG8gd2luZG93T2JqZWN0ID0gW2ZyYW1lIHdpbmRvd09iamVjdF07CiAK
LSAgICBBU1NFUlQoZ1Rlc3RSdW5uZXIpOwotICAgIGdUZXN0UnVubmVyLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNl
cHRpb24pOwotCi0gICAgZ2NDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIGds
b2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFs
T2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgZ1Rlc3RS
dW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgZ2NDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOwogCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJ
bnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiAKLSAgICAvLyBNYWtlIE9sZC1TdHlsZSBjb250cm9s
bGVycwotCi0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtmcmFtZSB3ZWJWaWV3XTsKLSAgICBXZWJT
Y3JpcHRPYmplY3QgKm9iaiA9IFtmcmFtZSB3aW5kb3dPYmplY3RdOwotI2lmICFQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIEFwcGxlU2NyaXB0Q29udHJvbGxlciAqYXNjID0gW1tBcHBsZVNjcmlw
dENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XTsKLSAgICBbb2JqIHNl
dFZhbHVlOmFzYyBmb3JLZXk6QCJhcHBsZVNjcmlwdENvbnRyb2xsZXIiXTsKLSAgICBbYXNjIHJl
bGVhc2VdOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFk
b3B0TlMoW1tBcHBsZVNjcmlwdENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3XSkuZ2V0KCkgZm9yS2V5OkAiYXBwbGVTY3JpcHRDb250cm9sbGVyIl07CiAjZW5kaWYKIAot
ICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgKmVzYyA9IFtbRXZlbnRTZW5kaW5nQ29udHJvbGxl
ciBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTplc2MgZm9yS2V5OkAiZXZlbnRTZW5k
ZXIiXTsKLSAgICBbZXNjIHJlbGVhc2VdOwotICAgIAotICAgIFtvYmogc2V0VmFsdWU6Z05hdmln
YXRpb25Db250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07Ci0gICAgCi0g
ICAgT2JqQ0NvbnRyb2xsZXIgKm9jYyA9IFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwot
ICAgIFtvYmogc2V0VmFsdWU6b2NjIGZvcktleTpAIm9iakNDb250cm9sbGVyIl07Ci0gICAgW29j
YyByZWxlYXNlXTsKLQotICAgIE9iakNQbHVnaW4gKnBsdWdpbiA9IFtbT2JqQ1BsdWdpbiBhbGxv
Y10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTpwbHVnaW4gZm9yS2V5OkAib2JqQ1BsdWdpbiJd
OwotICAgIFtwbHVnaW4gcmVsZWFzZV07Ci0gICAgCi0gICAgT2JqQ1BsdWdpbkZ1bmN0aW9uICpw
bHVnaW5GdW5jdGlvbiA9IFtbT2JqQ1BsdWdpbkZ1bmN0aW9uIGFsbG9jXSBpbml0XTsKLSAgICBb
b2JqIHNldFZhbHVlOnBsdWdpbkZ1bmN0aW9uIGZvcktleTpAIm9iakNQbHVnaW5GdW5jdGlvbiJd
OwotICAgIFtwbHVnaW5GdW5jdGlvbiByZWxlYXNlXTsKLQotICAgIFRleHRJbnB1dENvbnRyb2xs
ZXIgKnRpYyA9IFtbVGV4dElucHV0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXddOwotICAgIFtvYmogc2V0VmFsdWU6dGljIGZvcktleTpAInRleHRJbnB1dENvbnRyb2xs
ZXIiXTsKLSAgICBbdGljIHJlbGVhc2VdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRv
cHROUyhbW0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6
QCJldmVudFNlbmRlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6Z05hdmlnYXRpb25D
b250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07CisgICAgW3dpbmRvd09i
amVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQo
KSBmb3JLZXk6QCJvYmpDQ29udHJvbGxlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6
YWRvcHROUyhbW09iakNQbHVnaW4gYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDUGx1
Z2luIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ1BsdWdpbkZ1
bmN0aW9uIGFsbG9jXSBpbml0XSkuZ2V0KCkgZm9yS2V5OkAib2JqQ1BsdWdpbkZ1bmN0aW9uIl07
CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbVGV4dElucHV0Q29udHJvbGxl
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKS5nZXQoKSBmb3JLZXk6QCJ0ZXh0SW5w
dXRDb250cm9sbGVyIl07CiB9CiAKIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFt
ZTooV2ViRnJhbWUgKilmcmFtZSBpbklzb2xhdGVkV29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29y
bGQKQEAgLTM3MSw3ICszNDMsNyBAQCAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJh
bWU6KFdlYkZyYW1lICopZnJhbWUgaW5Jc29sYXRlZFdvcmxkOihXZWJTY3JpcAogICAgIGlmICgh
Z2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09iamVjdFNldFByb3BlcnR5
KGN0eCwgZ2xvYmFsT2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
X193b3JsZElEIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHdvcmxkSURGb3JXb3Js
ZCh3b3JsZCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICBKU09iamVj
dFNldFByb3BlcnR5KGN0eCwgZ2xvYmFsT2JqZWN0LCBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJfX3dv
cmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCB3b3JsZElERm9yV29ybGQod29y
bGQpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7CiB9CiAKIC0gKHZvaWQpd2Vi
VmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lOihXZWJG
cmFtZSAqKWZyYW1lIGluU2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggZWJhMDkzZWUxODdjZDMx
MGQwNTFiMjMwYWVkMmEzMDBmZTc5NDljMC4uZTIxMDcwYWMzMWIzNGNmY2JiNTc5ZDc3NzViNzYx
OTkxMTRhYmRmZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0K
QEAgLTMyLDYgKzMyLDcgQEAKIAogI2ltcG9ydCAiRGVmYXVsdFBvbGljeURlbGVnYXRlLmgiCiAj
aW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0
ICJMYXlvdXRUZXN0U3BlbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92
aWRlci5oIgogI2ltcG9ydCAiTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmgiCkBAIC02NzAs
MTUgKzY3MSwxMCBAQCBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZQogewogICAgIFdlYkZpbmRPcHRp
b25zIG9wdGlvbnMgPSAwOwogCi0gICAgYXV0byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYg
bGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwg
bGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihj
b250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdGFyZ2V0Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhcmdldCkpOworICAgIGF1dG8gbGVuZ3RoID0g
V1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBvcHRpb25zQXJyYXkpOworICAgIGF1dG8gdGFyZ2V0
Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHRhcmdldCkpOwogCi0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKICAgICAgICAgaWYg
KCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcAppbmRl
eCBmZDc3YWQxYzM5MjYzOGRhOTQxNDNlZTdkNWE4MjFlNjk0MTAyMzEzLi41ZjNiNzQwNDA1MDBm
MDMwZGEyYmVkMWFhZjk2NzNmOGI2MmJiMTY2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKQEAgLTM3MSwxOSArMzcxLDEwIEBAIHZvaWQgRnJh
bWVMb2FkRGVsZWdhdGU6OmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVJblN0YW5kYXJkV29y
bGQoSVdlYkZyYW1lKiBmCiAgICAgSVdlYkZyYW1lKiBwYXJlbnRGcmFtZSA9IDA7CiAgICAgZnJh
bWUtPnBhcmVudEZyYW1lKCZwYXJlbnRGcmFtZSk7CiAKLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlv
biA9IDA7Ci0KLSAgICA6OmdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdp
bmRvd09iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
bV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAm
ZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBtX2FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4
Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAgbV90ZXh0SW5wdXRDb250
cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlv
bik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOworICAgIDo6Z1Rlc3RSdW5uZXItPm1ha2VXaW5k
b3dPYmplY3QoY29udGV4dCk7CisgICAgbV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CisgICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0KTsKKyAgICBtX3RleHRJbnB1dENvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CiAKICAgICBKU1N0cmluZ1JlZiBldmVudFNlbmRlclN0ciA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJldmVudFNlbmRlciIpOwogICAgIEpTVmFsdWVSZWYgZXZlbnRT
ZW5kZXIgPSBtYWtlRXZlbnRTZW5kZXIoY29udGV4dCwgIXBhcmVudEZyYW1lKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAppbmRleCAzYjlh
MmI3OGQ5ZDU4ODM1NTAzNDA1NWYyNGQyMDI1OGQzMmI3YjE1Li5kMmU1MzUyNGY1ZjVlMTM1MmQw
NDUyMTc5ZDgyYmNkODIwM2I1YWY3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93
aW4vVGV4dElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgogCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogLy8gU3RhdGljIEZ1bmN0aW9ucwpAQCAtMTYyLDQyICsxNjIs
MzIgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2VsZWN0ZWRSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGkKIAogLy8gT2JqZWN0IENyZWF0aW9uCiAKLXZv
aWQgVGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2
b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNv
bnRleHQpCiB7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+ICB0ZXh0SW5wdXRDb250b2xs
ZXJTdHIoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXh0SW5wdXRDb250
cm9sbGVyIikpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpTQ2xhc3MoKTsKLSAg
ICBKU1ZhbHVlUmVmIHRleHRJbnB1dENvbnRvbGxlck9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250
ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NSZWYpOwotCi0g
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIHRleHRJbnB1dENv
bnRvbGxlclN0ci5nZXQoKSwgdGV4dElucHV0Q29udG9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRp
b24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRleHRJbnB1
dENvbnRyb2xsZXIiLCBKU09iamVjdE1ha2UoY29udGV4dCwgY3JlYXRlSlNDbGFzcygpLmdldCgp
LCB0aGlzKSk7CiB9CiAKLUpTQ2xhc3NSZWYgVGV4dElucHV0Q29udHJvbGxlcjo6Z2V0SlNDbGFz
cygpCitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBUZXh0SW5wdXRDb250cm9sbGVyOjpjcmVhdGVK
U0NsYXNzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzID0gVGV4
dElucHV0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9IFRleHRJbnB1dENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0
aW9ucygpOwotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSAK
LSAgICB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIlRleHRJbnB1dENvbnRy
b2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBjb25zdCBKU0Ns
YXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtKU0NsYXNzQXR0
cmlidXRlTm9uZSwgIlRleHRJbnB1dENvbnRyb2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMoKSwgc3Rh
dGljRnVuY3Rpb25zKCksCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAK
ICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7Cisg
ICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbikpOwogfQogCi1K
U1N0YXRpY1ZhbHVlKiBUZXh0SW5wdXRDb250cm9sbGVyOjpzdGF0aWNWYWx1ZXMoKQorY29uc3Qg
SlNTdGF0aWNWYWx1ZSogVGV4dElucHV0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVzKCkKIHsKLSAg
ICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBzdGF0aWNWYWx1ZXNbXSA9IAorICAgIHN0YXRpYyBjb25z
dCBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0KICAgICB7CiAgICAgICAgIHsgMCwgMCwg
MCwgMCB9CiAgICAgfTsKICAgICByZXR1cm4gc3RhdGljVmFsdWVzOwogfQogCi1KU1N0YXRpY0Z1
bmN0aW9uKiBUZXh0SW5wdXRDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKQorY29uc3QgSlNT
dGF0aWNGdW5jdGlvbiogVGV4dElucHV0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKCkKIHsK
LSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICBz
dGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKICAgICAg
ICAgeyAic2V0TWFya2VkVGV4dCIsIHNldE1hcmtlZFRleHRDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJoYXNNYXJrZWRUZXh0IiwgaGFzTWFya2VkVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgInVubWFya1RleHQiLCB1bm1hcmtUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGV4dElucHV0Q29udHJvbGxlci5oCmluZGV4IDI5ZjAz
OGJlMmRkYjUwZTlmYWU1MzBlMWM2ZDEzYzFkNDZmOTk3OTIuLmU1YWY1ZWJlY2E0MmJiZWQ1ZjMx
ZDk5ZDRjOGE4MGE5NDZjMDQzMmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9UZXh0SW5wdXRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rl
eHRJbnB1dENvbnRyb2xsZXIuaApAQCAtMjYsMjAgKzI2LDE2IEBACiAgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAgCi0jaWZuZGVmIFRleHRJbnB1dENvbnRyb2xsZXJfaAotI2RlZmluZSBUZXh0SW5wdXRDb250
cm9sbGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250
ZXh0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTVmFsdWVSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5o
PgogI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBjbGFz
cyBUZXh0SW5wdXRDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICB2b2lkIHNldE1hcmtlZFRleHQoSlNTdHJp
bmdSZWYgdGV4dCwgdW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW5ndGgpOwogICAg
IGJvb2wgaGFzTWFya2VkVGV4dCgpOwpAQCAtNTAsOSArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3Rk
Ojp2ZWN0b3I8aW50PiBzZWxlY3RlZFJhbmdlKCk7CiAKIHByaXZhdGU6ICAgIAotICAgIHN0YXRp
YyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3Rh
dGljVmFsdWVzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9u
cygpOworICAgIHN0YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7
CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlcygpOworICAgIHN0
YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKIH07Ci0KLSNl
bmRpZiAvLyBUZXh0SW5wdXRDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU0Jhc2ljcy5jcHAKaW5kZXggZmZmMGI3NDk5MGFmYjllMTJhYzlkMDFhNzEwYTRj
NTI4MGUxZTkwOC4uNmIwMzAwZGNmYjA3ZWY2ZDU1NjRhNWZiMjRkOTVkYTlmNGU4MTc2MiAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKKysr
IGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKQEAgLTI4LDE5
ICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJv
b2xlYW5Pck51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIE9wdGlvbmFsPGJvb2w+IHZhbHVlKQor
T3B0aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2woSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNv
bnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOworICAgIHJl
dHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFsdWVJc051bGwo
Y29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9wdGlvbmFsKEpTVmFsdWVUb0Jv
b2xlYW4oY29udGV4dCwgdmFsdWUpKTsKK30KKworT3B0aW9uYWw8ZG91YmxlPiB0b09wdGlvbmFs
RG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIHJl
dHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFsdWVJc051bGwo
Y29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9wdGlvbmFsKEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogfQogCi1PcHRpb25hbDxib29sPiBKU1Zh
bHVlVG9OdWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFs
dWUpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgT3B0aW9uYWw8
Ym9vbD4gdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2
YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgPyBXVEY6Om51bGxvcHQgOiBP
cHRpb25hbDxib29sPihKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHZhbHVlKSk7CisgICAgcmV0
dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDog
SlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCi1KU1ZhbHVlUmVmIEpTVmFsdWVNYWtlU3Ry
aW5nT3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiBzdHJpbmdPck51bGwp
CitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYg
c3RyaW5nKQogewotICAgIHJldHVybiBzdHJpbmdPck51bGwgPyBKU1ZhbHVlTWFrZVN0cmluZyhj
b250ZXh0LCBzdHJpbmdPck51bGwpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOworICAgIHJl
dHVybiBzdHJpbmcgPyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmcpIDogSlNWYWx1
ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRl
SlNTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQpAQCAtNDgsMTkgKzUzLDQzIEBAIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpCiAgICAg
cmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZykpOwogfQog
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgYXV0byBzdHJpbmcgPSBhZG9wdCh2YWx1
ZSA/IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogbnVsbHB0
cik7CisgICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZyA6IGNyZWF0ZUpTU3RyaW5nKCIiKTsKK30K
KwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHN0cmluZykKIHsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY3JlYXRl
SlNTdHJpbmcoc3RyaW5nKS5nZXQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgcHJvcGVydHkoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sK
KyAgICByZXR1cm4gb2JqZWN0ID8gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3Qs
IGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBudWxscHRyKSA6IG51bGxwdHI7Cit9CisKK0pT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpKTsK
K30KKworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUpCit7CisgICAg
YXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7CisgICAgcmV0dXJu
IHZhbHVlID8gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgOiBkZWZhdWx0VmFsdWU7
Cit9CisKK2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBhdXRvIHZhbHVlID0gcHJv
cGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4gdmFsdWUgPyBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogMDsKK30KKwogSlNPYmplY3RSZWYg
b2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwg
Y29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb2Jq
ZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUpOworICAgIGF1dG8gdmFsdWUg
PSBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAgIHJldHVybiB2YWx1ZSA/IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpLCBu
dWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxjb25zdCBjaGFyKj4gbmFtZXMpCkBAIC03MCwyNyArOTksNDEgQEAgSlNPYmplY3RSZWYgb2Jq
ZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgc3Rk
Ojppbml0aWEKICAgICByZXR1cm4gb2JqZWN0OwogfQogCit1bnNpZ25lZCBhcnJheUxlbmd0aChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBu
dW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIik7Cit9CisKIHZvaWQgc2V0
UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3Qg
Y2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRl
eHQsIG9iamVjdCwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIEpTVmFsdWVNYWtlQm9vbGVh
bihjb250ZXh0LCB2YWx1ZSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7CiB9
CiAKK3ZvaWQgc2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9i
amVjdCwgY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVlKQoreworICAgIEpTT2JqZWN0U2V0
UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgSlNW
YWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgdmFsdWUpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUs
IG51bGxwdHIpOworfQorCit2b2lkIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIEpT
T2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRl
eHQpLCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgdmFsdWUsIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIG51bGxwdHIpOwor
fQorCit2b2lkIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBj
b25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpCit7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkoY29udGV4dCwgbmFtZSwgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgdmFsdWUpKTsK
K30KKwogSlNWYWx1ZVJlZiBjYWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBv
YmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlUmVm
PiBhcmd1bWVudHMpCiB7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGF1dG8gZnVuY3Rpb24gPSBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5h
bWUpOwotICAgIGlmICghZnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGZ1bmN0aW9uLCBvYmplY3QsIGFy
Z3VtZW50cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKTsKKyAgICByZXR1cm4g
ZnVuY3Rpb24gPyBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGZ1bmN0aW9uLCBvYmpl
Y3QsIGFyZ3VtZW50cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKSA6IG51bGxw
dHI7CiB9CiAKIEpTT2JqZWN0UmVmIGNhbGxDb25zdHJ1Y3RvcihKU0dsb2JhbENvbnRleHRSZWYg
Y29udGV4dCwgY29uc3QgY2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFsdWVS
ZWY+IGFyZ3VtZW50cykKIHsKICAgICBhdXRvIGNvbnN0cnVjdG9yID0gb2JqZWN0UHJvcGVydHko
Y29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCB7IG5hbWUgfSk7Ci0g
ICAgaWYgKCFjb25zdHJ1Y3RvcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dCwgY29uc3RydWN0b3IsIGFyZ3VtZW50
cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gY29uc3Ry
dWN0b3IgPyBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnN0cnVjdG9yLCBh
cmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuYmVnaW4oKSwgbnVsbHB0cikgOiBudWxscHRyOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFy
ZWQvQmluZGluZ3MvSlNCYXNpY3MuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3Mv
SlNCYXNpY3MuaAppbmRleCAxMWRkYTUyNDdhNWFiNmMwNDA5NjNkZjE5YWIwZjVlMDI5NmNlYjgy
Li5kMjE5Njk4YThmNmIxMDQyYTkwNWI0YzAyYjE3Njg2NmVkN2M5NzI2IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmgKKysrIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oCkBAIC0zMiwxNiArMzIsMjkgQEAKIAog
bmFtZXNwYWNlIFdUUiB7CiAKLUpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKEpT
Q29udGV4dFJlZiwgT3B0aW9uYWw8Ym9vbD4pOwotT3B0aW9uYWw8Ym9vbD4gSlNWYWx1ZVRvTnVs
bGFibGVCb29sZWFuKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitPcHRpb25hbDxib29sPiB0
b09wdGlvbmFsQm9vbChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOworT3B0aW9uYWw8ZG91Ymxl
PiB0b09wdGlvbmFsRG91YmxlKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAKLUpTVmFsdWVS
ZWYgSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoSlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZik7CitK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciogPSAiIik7
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoSlNDb250ZXh0UmVmLCBK
U1ZhbHVlUmVmKTsKIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUpTU3RyaW5nKGNv
bnN0IGNoYXIqKTsKIEpTVmFsdWVSZWYgbWFrZVZhbHVlKEpTQ29udGV4dFJlZiwgY29uc3QgY2hh
ciopOworSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmLCBPcHRpb25hbDxib29sPik7
CitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmKTsKKworSlNW
YWx1ZVJlZiBwcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBu
YW1lKTsKK2Jvb2wgYm9vbGVhblByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNv
bnN0IGNoYXIqIG5hbWUsIGJvb2wgZGVmYXVsdFZhbHVlID0gZmFsc2UpOworZG91YmxlIG51bWVy
aWNQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsK
K0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpT
T2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKK3Vuc2lnbmVkIGFycmF5TGVuZ3RoKEpTQ29u
dGV4dFJlZiwgSlNPYmplY3RSZWYpOwogSlNPYmplY3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250
ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFtZSk7CiBKU09iamVjdFJlZiBvYmpl
Y3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8Y29uc3QgY2hhcio+IG5hbWVzKTsKKwogdm9pZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYs
IEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKTsKK3ZvaWQgc2V0UHJv
cGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFtZSwgZG91Ymxl
IHZhbHVlKTsKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmLCBjb25z
dCBjaGFyKiBuYW1lLCBKU1ZhbHVlUmVmKTsKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHko
SlNDb250ZXh0UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpOworCiBKU1ZhbHVl
UmVmIGNhbGwoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFtZSwgc3Rk
Ojppbml0aWFsaXplcl9saXN0PEpTVmFsdWVSZWY+IGFyZ3VtZW50cyk7CiBKU09iamVjdFJlZiBj
YWxsQ29uc3RydWN0b3IoSlNHbG9iYWxDb250ZXh0UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJndW1lbnRzKTsKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCmluZGV4IDllMGYwN2RmNTkzMmFi
MzAzMzFkN2I2MWQxNzM1M2FlNmUwMWM0NzMuLjU5YmUxZGFlYTI3NzU0ZWU0Nzc1YjRmM2U3YTVk
NjgyZmIxZDVmMWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3Mv
SlNXcmFwcGFibGUuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3Jh
cHBhYmxlLmgKQEAgLTI1LDkgKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTQ2xhc3MqIEpTQ2xhc3NSZWY7CisKIG5hbWVzcGFj
ZSBXVFIgewogCiBjbGFzcyBKU1dyYXBwYWJsZSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTV3JhcHBh
YmxlPiB7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3Jh
cHBlci5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaAppbmRl
eCBmNjc5OGY5OWE0ZmVjNjc1NjNkMDkxNTYzYjUwNTA5ZGZjODU3MmRhLi45YjZiYWQ4YWYwNDRi
MjAyZmY4NzI3YWNlZDdjYjlmZmIyY2VjNTJlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVy
U2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBlci5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
QmluZGluZ3MvSlNXcmFwcGVyLmgKQEAgLTUwLDQgKzUwLDkgQEAgaW5saW5lIHZvaWQgc2V0UHJv
cGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hh
ciogcHIKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgY3JlYXRlSlNT
dHJpbmcocHJvcGVydHlOYW1lKS5nZXQoKSwgSlNXcmFwcGVyOjp3cmFwKGNvbnRleHQsIHZhbHVl
KSwgYXR0cmlidXRlcywgZXhjZXB0aW9uKTsKIH0KIAoraW5saW5lIHZvaWQgc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFt
ZSwgSlNXcmFwcGFibGUqIHZhbHVlKQoreworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNv
bnRleHQsIHByb3BlcnR5TmFtZSwgSlNXcmFwcGVyOjp3cmFwKGNvbnRleHQsIHZhbHVlKSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9FdmVudFNlcmlhbGl6YXRpb24vbWFjL0V2ZW50U2VyaWFsaXplck1hYy5tbSBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvRXZlbnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMu
bW0KaW5kZXggMGYxN2IyY2Q2MzlhNjMwNjNhNDg4ZGYzYTMzYTM1ZTMyYTJlY2NjMS4uYmRkMjA3
YmQ0MDlmMDRlZTVmMzgyMzE5NGZhMjRlNjMyODg1ODkxNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9FdmVudFNlcmlhbGl6YXRpb24vbWFjL0V2ZW50U2VyaWFsaXplck1hYy5t
bQorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9tYWMvRXZl
bnRTZXJpYWxpemVyTWFjLm1tCkBAIC0xOTUsNyArMTk1LDcgQEAgQGltcGxlbWVudGF0aW9uIEV2
ZW50U2VyaWFsaXplcgogCiArIChOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5Rm9yRXZlbnQ6KENH
RXZlbnRSZWYpcmF3RXZlbnQgcmVsYXRpdmVUb1RpbWU6KENHRXZlbnRUaW1lc3RhbXApcmVmZXJl
bmNlVGltZXN0YW1wCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IHBsYWluRXZlbnQgPSBh
ZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOworICAgIGF1dG8gcGxhaW5FdmVudCA9IGFkb3B0
Q0YoQ0dFdmVudENyZWF0ZShOVUxMKSk7CiAgICAgQ0dFdmVudFJlZiByYXdQbGFpbkV2ZW50ID0g
cGxhaW5FdmVudC5nZXQoKTsKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3QgPSBbW1tO
U011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CkBAIC0yMjYsNyAr
MjI2LDcgQEAgKyAoTlNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeUZvckV2ZW50OihDR0V2ZW50UmVm
KXJhd0V2ZW50IHJlbGF0aXZlVG9UaW1lOihDR0V2ZW4KIAogKyAoUmV0YWluUHRyPENHRXZlbnRS
ZWY+KWNyZWF0ZUV2ZW50Rm9yRGljdGlvbmFyeTooTlNEaWN0aW9uYXJ5ICopZGljdCBpbldpbmRv
dzooTlNXaW5kb3cgKil3aW5kb3cgcmVsYXRpdmVUb1RpbWU6KENHRXZlbnRUaW1lc3RhbXApcmVm
ZXJlbmNlVGltZXN0YW1wCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IGV2ZW50ID0gYWRv
cHRDRihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsKKyAgICBhdXRvIGV2ZW50ID0gYWRvcHRDRihDR0V2
ZW50Q3JlYXRlKE5VTEwpKTsKICAgICBDR0V2ZW50UmVmIHJhd0V2ZW50ID0gZXZlbnQuZ2V0KCk7
CiAKICAgICBGT1JfRUFDSF9DR0VWRU5UX0lOVEVHRVJfRklFTEQoU1RPUkVfSU5URUdFUl9GSUVM
RF9UT19FVkVOVCk7CkBAIC0yNjQsNyArMjY0LDcgQEAgY29uc3QgZmxvYXQgZXZlbnREaXNwYXRj
aFRpbWVyUmF0ZSA9IDEuIC8gMTIwLjsKIAogKyAodm9pZClwbGF5U3RyZWFtOihOU0FycmF5PE5T
RGljdGlvbmFyeSAqPiAqKWV2ZW50RGljdHMgd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCheKSgpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgUmV0YWlu
UHRyPEV2ZW50U3RyZWFtUGxheWVyPiBwbGF5ZXIgPSBhZG9wdE5TKFtbRXZlbnRTdHJlYW1QbGF5
ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHBsYXllciA9IGFkb3B0TlMoW1tFdmVudFN0cmVh
bVBsYXllciBhbGxvY10gaW5pdF0pOwogCiAgICAgcGxheWVyLT5fcmVtYWluaW5nRXZlbnREaWN0
aW9uYXJpZXMgPSBhZG9wdE5TKFtldmVudERpY3RzIG11dGFibGVDb3B5XSk7CiAgICAgcGxheWVy
LT5fd2luZG93ID0gd2luZG93OwpAQCAtMjgyLDcgKzI4Miw3IEBAIC0gKHZvaWQpcGxheWJhY2tU
aW1lckZpcmVkOihOU1RpbWVyICopdGltZXIKICAgICBhdXRvIHJlbW92ZUxpc3QgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICBOU0V2ZW50ICpuc0V2ZW50ID0g
bmlsOwogICAgIGZvciAoaWQgZXZlbnREaWN0IGluIF9yZW1haW5pbmdFdmVudERpY3Rpb25hcmll
cy5nZXQoKSkgewotICAgICAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4gZXZlbnQgPSBbRXZlbnRT
ZXJpYWxpemVyIGNyZWF0ZUV2ZW50Rm9yRGljdGlvbmFyeTpldmVudERpY3QgaW5XaW5kb3c6X3dp
bmRvdy5nZXQoKSByZWxhdGl2ZVRvVGltZTpfc3RhcnRUaW1lXTsKKyAgICAgICAgYXV0byBldmVu
dCA9IFtFdmVudFNlcmlhbGl6ZXIgY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5OmV2ZW50RGljdCBp
bldpbmRvdzpfd2luZG93LmdldCgpIHJlbGF0aXZlVG9UaW1lOl9zdGFydFRpbWVdOwogICAgICAg
ICBpZiAoQ0dFdmVudEdldFRpbWVzdGFtcChldmVudC5nZXQoKSkgPCBtYWNoX2Fic29sdXRlX3Rp
bWUoKSkgewogICAgICAgICAgICAgbnNFdmVudCA9IFtOU0V2ZW50IGV2ZW50V2l0aENHRXZlbnQ6
ZXZlbnQuZ2V0KCldOwogICAgICAgICAgICAgW05TQXBwIHBvc3RFdmVudDpuc0V2ZW50IGF0U3Rh
cnQ6Tk9dOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRl
eHQvVUlTY3JpcHRDb250ZXh0LmNwcCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRD
b250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAKaW5kZXggMjcwNWIzOWEyNDdkZDI1N2Q1YzZkNThj
NDcwZTk2MzNhOTE5ZGZkNC4uNWRjZmI3Yzk4NzJmMzk5ZjE1Njc0ZDk3MTBkZWIyODliMmQxMjE4
ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlT
Y3JpcHRDb250ZXh0LmNwcAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29u
dGV4dC9VSVNjcmlwdENvbnRleHQuY3BwCkBAIC0yNiw5ICsyNiw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJKU0Jhc2lj
cy5oIgogI2luY2x1ZGUgIlVJU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTQ29udGV4dFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVS
ZWYuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V1RSOwpAQCAtNDMsMTEgKzQyLDcgQEAgVUlTY3JpcHRDb250ZXh0OjpVSVNjcmlwdENvbnRleHQo
VUlTY3JpcHRDb250ZXh0RGVsZWdhdGUmIGRlbGVnYXRlLCBVSVNjcmlwdENvbnQKICAgICAsIG1f
ZGVsZWdhdGUoZGVsZWdhdGUpCiB7CiAgICAgbV9jb250cm9sbGVyID0gZmFjdG9yeSgqdGhpcyk7
Ci0KLSAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmpl
Y3QobV9jb250ZXh0LmdldCgpKTsKLQotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0
cjsKLSAgICBtX2NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QobV9jb250ZXh0LmdldCgpLCBn
bG9iYWxPYmplY3QsICZleGNlcHRpb24pOworICAgIG1fY29udHJvbGxlci0+bWFrZVdpbmRvd09i
amVjdChtX2NvbnRleHQuZ2V0KCkpOwogfQogCiBVSVNjcmlwdENvbnRleHQ6On5VSVNjcmlwdENv
bnRleHQoKQpAQCAtNjYsOSArNjEsNyBAQCB2b2lkIFVJU2NyaXB0Q29udGV4dDo6cnVuVUlTY3Jp
cHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIHVuc2lnbmVkIHNjcmlwdENhbGxiYWNrSQogICAgIEpT
VmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdChtX2NvbnRleHQuZ2V0KCksIHN0cmlu
Z1JlZi5nZXQoKSwgMCwgMCwgMSwgJmV4Y2VwdGlvbik7CiAgICAgCiAgICAgaWYgKCFoYXNPdXRz
dGFuZGluZ0FzeW5jVGFza3MoKSkgewotICAgICAgICBKU1ZhbHVlUmVmIHN0cmluZ2lmeUV4Y2Vw
dGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gc3RyaW5naWZpZWQgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KG1fY29udGV4dC5nZXQoKSwgcmVzdWx0LCAmc3RyaW5naWZ5RXhjZXB0aW9u
KSk7Ci0gICAgICAgIHJlcXVlc3RVSVNjcmlwdENvbXBsZXRpb24oc3RyaW5naWZpZWQuZ2V0KCkp
OworICAgICAgICByZXF1ZXN0VUlTY3JpcHRDb21wbGV0aW9uKGNyZWF0ZUpTU3RyaW5nKG1fY29u
dGV4dC5nZXQoKSwgcmVzdWx0KS5nZXQoKSk7CiAgICAgICAgIHRyeVRvQ29tcGxldGVVSVNjcmlw
dEZvckN1cnJlbnRQYXJlbnRDYWxsYmFjaygpOwogICAgIH0KIH0KQEAgLTE4OSwxMCArMTgyLDEw
IEBAIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udGV4dDo6b2JqZWN0RnJvbVJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiByZWN0KSBjb25zCiB7CiAgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0g
SlNPYmplY3RNYWtlKG1fY29udGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAKLSAgICBK
U09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVmdCIpKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIo
bV9jb250ZXh0LmdldCgpLCByZWN0LngoKSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVs
bHB0cik7Ci0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwg
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRvcCIpKS5nZXQoKSwgSlNWYWx1
ZU1ha2VOdW1iZXIobV9jb250ZXh0LmdldCgpLCByZWN0LnkoKSksIGtKU1Byb3BlcnR5QXR0cmli
dXRlTm9uZSwgbnVsbHB0cik7Ci0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0
KCksIG9iamVjdCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikp
LmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3Qud2lkdGgoKSks
IGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7Ci0gICAgSlNPYmplY3RTZXRQcm9w
ZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImhlaWdodCIpKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIobV9jb250ZXh0Lmdl
dCgpLCByZWN0LmhlaWdodCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsK
KyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgImxlZnQiLCByZWN0Lngo
KSk7CisgICAgc2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsICJ0b3AiLCByZWN0
LnkoKSk7CisgICAgc2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsICJ3aWR0aCIs
IHJlY3Qud2lkdGgoKSk7CisgICAgc2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3Qs
ICJoZWlnaHQiLCByZWN0LmhlaWdodCgpKTsKICAgICAKICAgICByZXR1cm4gb2JqZWN0OwogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250cm9sbGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRyb2xsZXIuaAppbmRleCBhNWE4ZDdjYzJmY2M5ZmVkNmZmNTUyMmNjOWVkNjdj
ZTQyOThjYTgxLi4zNTI0YjYwYmQ4MWNkOWNhYjMxMGFhMWI1NjhmMjNmZDUxNjhkY2VmIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENv
bnRyb2xsZXIuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRyb2xsZXIuaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
b250ZXh0RGVzdHJveWVkKCk7CiAgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JPdXRzdGFuZGluZ0Nh
bGxiYWNrcygpIHsgLyogbm90SW1wbGVtZW50ZWQoKTsgKi8gfQogCi0gICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYp
OwogCiAgICAgLy8gVHJhbnNhY3Rpb24gaGVscGVycwogICAgIApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyU2hhcmVk
LmNwcCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlclNoYXJlZC5jcHAKaW5kZXggYzZlYjE0MGFhMzU2YzY2ZDhjNDUwMjE0ZTdkYjJjODVh
ZDNhNzFhMy4uYmZmNGYzNDMzZGJkMjk1NzVkNjI1YjczOTRlNmQ5ZDM4MWNhZWMyNiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250
cm9sbGVyU2hhcmVkLmNwcAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29u
dGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwCkBAIC00MSwyMCArNDEsMTUgQEAgRGV2
aWNlT3JpZW50YXRpb24qIHRvRGV2aWNlT3JpZW50YXRpb24oSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgdmFsdWUpCiAgICAgICAgIERldmljZU9yaWVudGF0aW9uOjpMYW5kc2NhcGVM
ZWZ0LAogICAgICAgICBEZXZpY2VPcmllbnRhdGlvbjo6TGFuZHNjYXBlUmlnaHQKICAgICB9Owot
Ci0gICAgYXV0byBvcHRpb24gPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZh
bHVlLCBudWxscHRyKSk7Ci0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gInBvcnRyYWl0IikK
KyAgICBhdXRvIG9wdGlvbiA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKTsKKyAgICBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb24uZ2V0KCksICJwb3J0cmFpdCIp
KQogICAgICAgICByZXR1cm4gJnZhbHVlc1swXTsKLQotICAgIGlmIChvcHRpb24tPnN0cmluZygp
ID09ICJwb3J0cmFpdC11cHNpZGVkb3duIikKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhvcHRpb24uZ2V0KCksICJwb3J0cmFpdC11cHNpZGVkb3duIikpCiAgICAgICAgIHJl
dHVybiAmdmFsdWVzWzFdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gImxhbmRzY2Fw
ZS1sZWZ0IikKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb24uZ2V0
KCksICJsYW5kc2NhcGUtbGVmdCIpKQogICAgICAgICByZXR1cm4gJnZhbHVlc1syXTsKLQotICAg
IGlmIChvcHRpb24tPnN0cmluZygpID09ICJsYW5kc2NhcGUtcmlnaHQiKQorICAgIGlmIChKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgImxhbmRzY2FwZS1yaWdodCIp
KQogICAgICAgICByZXR1cm4gJnZhbHVlc1szXTsKLQogICAgIHJldHVybiBudWxscHRyOwogfQog
CkBAIC02OCw5ICs2Myw5IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpjb250ZXh0RGVzdHJv
eWVkKCkKICAgICBtX2NvbnRleHQgPSBudWxscHRyOwogfQogCi12b2lkIFVJU2NyaXB0Q29udHJv
bGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
d2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFVJU2NyaXB0Q29udHJv
bGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQ
cm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJ1aUNvbnRyb2xsZXIiLCB0aGlzLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
LCBleGNlcHRpb24pOworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJ1aUNv
bnRyb2xsZXIiLCB0aGlzKTsKIH0KIAogSlNDbGFzc1JlZiBVSVNjcmlwdENvbnRyb2xsZXI6Ondy
YXBwZXJDbGFzcygpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL2NvY29hL0xh
eW91dFRlc3RTcGVsbENoZWNrZXIubW0gYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL2NvY29hL0xh
eW91dFRlc3RTcGVsbENoZWNrZXIubW0KaW5kZXggOGZjMDIxMTY3YWFjMjIxNTM2YTE3NjZlNTM5
MDE5ZmU2NDQwNThlMS4uZDg2ZWY5NTZmODBkZmExOTIyOTU0ZTExNzlhZjJiMzUyYjk4MzkyNCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9jb2NvYS9MYXlvdXRUZXN0U3BlbGxD
aGVja2VyLm1tCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNw
ZWxsQ2hlY2tlci5tbQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1w
b3J0ICJMYXlvdXRUZXN0U3BlbGxDaGVja2VyLmgiCiAKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+CisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8b2JqYy9ydW50
aW1lLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRy
Lmg+CkBAIC0yMTIsMTEgKzIxMiwxMSBAQCAtICh2b2lkKXNldFJlc3VsdHM6KFRleHRDaGVja2lu
Z1Jlc3VsdHNEaWN0aW9uYXJ5ICopcmVzdWx0cwogLSAodm9pZClzZXRSZXN1bHRzRnJvbUpTVmFs
dWU6KEpTVmFsdWVSZWYpcmVzdWx0c1ZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0UmVmKWNvbnRl
eHQKIHsKICAgICBhdXRvIHJlc3VsdHNPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwg
cmVzdWx0c1ZhbHVlLCBudWxscHRyKTsKLSAgICBhdXRvIGZyb21Qcm9wZXJ0eU5hbWUgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZnJvbSIpKTsKLSAgICBhdXRvIHRvUHJv
cGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRvIikpOwot
ICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJ0eXBlIikpOwotICAgIGF1dG8gcmVwbGFjZW1lbnRQcm9wZXJ0eU5hbWUgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicmVwbGFjZW1lbnQiKSk7Ci0gICAgYXV0
byBkZXRhaWxzUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImRldGFpbHMiKSk7CisgICAgYXV0byBmcm9tUHJvcGVydHlOYW1lID0gV1RSOjpjcmVhdGVK
U1N0cmluZygiZnJvbSIpOworICAgIGF1dG8gdG9Qcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpT
U3RyaW5nKCJ0byIpOworICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNT
dHJpbmcoInR5cGUiKTsKKyAgICBhdXRvIHJlcGxhY2VtZW50UHJvcGVydHlOYW1lID0gV1RSOjpj
cmVhdGVKU1N0cmluZygicmVwbGFjZW1lbnQiKTsKKyAgICBhdXRvIGRldGFpbHNQcm9wZXJ0eU5h
bWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJkZXRhaWxzIik7CiAgICAgYXV0byByZXN1bHRzID0g
YWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKIAogICAgIC8vIEZJ
WE1FOiBVc2luZyB0aGUgT2JqZWN0aXZlLUMgQVBJIHdvdWxkIG1ha2UgdGhpcyBsb2dpYyBlYXNp
ZXIgdG8gZm9sbG93LgpAQCAtMjI4LDE1ICsyMjgsMTMgQEAgLSAodm9pZClzZXRSZXN1bHRzRnJv
bUpTVmFsdWU6KEpTVmFsdWVSZWYpcmVzdWx0c1ZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0UmVm
KWMKICAgICAgICAgYXV0byByZXN1bHRzRm9yV29yZCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF0pOwogICAgICAgICBmb3IgKHNpemVfdCByZXN1bHRJbmRleCA9IDA7IHJl
c3VsdEluZGV4IDwgSlNQcm9wZXJ0eU5hbWVBcnJheUdldENvdW50KHJlc3VsdHNBcnJheVByb3Bl
cnR5TmFtZXMpOyArK3Jlc3VsdEluZGV4KSB7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdHNPYmpl
Y3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgo
Y29udGV4dCwgcmVzdWx0c0FycmF5LCByZXN1bHRJbmRleCwgbnVsbHB0ciksIG51bGxwdHIpOwot
ICAgICAgICAgICAgbG9uZyBmcm9tVmFsdWUgPSBscm91bmRsKEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIGZyb21Qcm9w
ZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBsb25nIHRv
VmFsdWUgPSBscm91bmRsKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBKU09iamVjdEdldFByb3Bl
cnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIHRvUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRy
KSwgbnVsbHB0cikpOwotICAgICAgICAgICAgYXV0byB0eXBlVmFsdWUgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0
c09iamVjdCwgdHlwZVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxwdHIpKTsKKyAg
ICAgICAgICAgIGxvbmcgZnJvbVZhbHVlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgZnJvbVByb3BlcnR5TmFtZS5n
ZXQoKSwgbnVsbHB0ciksIG51bGxwdHIpOworICAgICAgICAgICAgbG9uZyB0b1ZhbHVlID0gSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0
c09iamVjdCwgdG9Qcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAg
ICAgICAgIGF1dG8gdHlwZVZhbHVlID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIHR5cGVQcm9wZXJ0eU5hbWUu
Z2V0KCksIG51bGxwdHIpKTsKICAgICAgICAgICAgIGF1dG8gcmVwbGFjZW1lbnRWYWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgcmVwbGFjZW1lbnRQcm9w
ZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpOwogICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiByZXBsYWNlbWVudFRleHQ7Ci0gICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5l
ZChjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlKSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVw
bGFjZW1lbnRKU1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgcmVw
bGFjZW1lbnRWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50VGV4
dCA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVw
bGFjZW1lbnRKU1N0cmluZy5nZXQoKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgcmVwbGFjZW1lbnRWYWx1ZSkpCisgICAgICAg
ICAgICAgICAgcmVwbGFjZW1lbnRUZXh0ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHJlcGxhY2Vt
ZW50VmFsdWUpLmdldCgpKSk7CiAgICAgICAgICAgICBhdXRvIGRldGFpbHMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICAgICAgICAgIGF1dG8gZGV0YWlsc1Zh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCBkZXRhaWxz
UHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmICghSlNWYWx1ZUlz
VW5kZWZpbmVkKGNvbnRleHQsIGRldGFpbHNWYWx1ZSkpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvRGljdGlvbmFyeUZ1bmN0aW9ucy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTU1MThhYjM4MTM4ZDZiN2Jm
YWEwMzU5Zjc4MmNlY2Q4NzM2ZjkwOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvRGljdGlvbmFyeUZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKKworbmFt
ZXNwYWNlIFdUUiB7CisKK1dLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5VmFsdWUoV0tUeXBlUmVm
KTsKKworYm9vbCBib29sZWFuVmFsdWUoV0tUeXBlUmVmKTsKK2Jvb2wgYm9vbGVhblZhbHVlKGNv
bnN0IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4mKTsKKworZG91YmxlIGRvdWJsZVZhbHVlKFdLVHlw
ZVJlZik7CitPcHRpb25hbDxkb3VibGU+IG9wdGlvbmFsRG91YmxlVmFsdWUoV0tUeXBlUmVmKTsK
KworV0tTdHJpbmdSZWYgc3RyaW5nVmFsdWUoV0tUeXBlUmVmKTsKK1dURjo6U3RyaW5nIHRvV1RG
U3RyaW5nKFdLVHlwZVJlZik7CisKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLVHlwZVJlZik7Cit1
aW50NjRfdCB1aW50NjRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS1R5cGVSZWY+Jik7CisKK1dL
VHlwZVJlZiB2YWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CisKK2Jvb2wg
Ym9vbGVhblZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKK2RvdWJsZSBk
b3VibGVWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CitXS1N0cmluZ1Jl
ZiBzdHJpbmdWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7Cit1aW50NjRf
dCB1aW50NjRWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CisKK09wdGlv
bmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNo
YXIqIGtleSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2V0VmFsdWUoY29uc3QgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0
IE9wdGlvbmFsPFQ+JiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBXS1R5cGVSZWYgdmFsdWUp
Owordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVm
PiYsIGNvbnN0IGNoYXIqIGtleSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBjb25z
dCBjaGFyKiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCB1aW50NjRfdCB2YWx1ZSk7Cit2b2lk
IHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29u
c3QgY2hhcioga2V5LCBkb3VibGUgdmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgV1RG
OjpTdHJpbmcmIHZhbHVlKTsKKworaW5saW5lIGJvb2wgYm9vbGVhblZhbHVlKFdLVHlwZVJlZiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpICYmIFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4odmFsdWUpKTsKK30KKworaW5saW5lIGJvb2wgYm9vbGVhblZhbHVlKGNvbnN0IFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4mIHZhbHVlKQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUodmFs
dWUuZ2V0KCkpOworfQorCitpbmxpbmUgV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnlWYWx1ZShX
S1R5cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVl
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSA/IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4odmFsdWUpIDogbnVsbHB0cjsKK30KKworaW5saW5lIGRvdWJsZSBkb3VibGVWYWx1ZShXS1R5
cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9
PSBXS0RvdWJsZUdldFR5cGVJRCgpID8gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Rv
dWJsZVJlZj4odmFsdWUpKSA6IDA7Cit9CisKK2lubGluZSBPcHRpb25hbDxkb3VibGU+IG9wdGlv
bmFsRG91YmxlVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBX
S0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSA/IG1ha2VPcHRpb25hbChX
S0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPih2YWx1ZSkpKSA6IFdURjo6
bnVsbG9wdDsKK30KKworaW5saW5lIFdLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLVHlwZVJlZiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLU3Ry
aW5nR2V0VHlwZUlEKCkgPyBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4odmFsdWUpIDogbnVsbHB0
cjsKK30KKworaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKFdLVHlwZVJlZiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUodmFsdWUpKTsKK30KKworaW5s
aW5lIHVpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLVUludDY0R2V0VHlwZUlEKCkgPyBXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPih2YWx1ZSkpIDogMDsKK30KKwor
aW5saW5lIHVpbnQ2NF90IHVpbnQ2NFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4m
IHZhbHVlKQoreworICAgIHJldHVybiB1aW50NjRWYWx1ZSh2YWx1ZS5nZXQoKSk7Cit9CisKK2lu
bGluZSBXS1R5cGVSZWYgdmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNo
YXIqIGtleSkKK3sKKyAgICByZXR1cm4gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShkaWN0aW9u
YXJ5LCB0b1dLKGtleSkuZ2V0KCkpOworfQorCitpbmxpbmUgYm9vbCBib29sZWFuVmFsdWUoV0tE
aWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4g
Ym9vbGVhblZhbHVlKHZhbHVlKGRpY3Rpb25hcnksIGtleSkpOworfQorCitpbmxpbmUgZG91Ymxl
IGRvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkp
Cit7CisgICAgcmV0dXJuIGRvdWJsZVZhbHVlKHZhbHVlKGRpY3Rpb25hcnksIGtleSkpOworfQor
CitpbmxpbmUgV0tTdHJpbmdSZWYgc3RyaW5nVmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25h
cnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gc3RyaW5nVmFsdWUodmFsdWUoZGlj
dGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSB1aW50NjRfdCB1aW50NjRWYWx1ZShXS0RpY3Rp
b25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiB1aW50
NjRWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5lIE9wdGlvbmFsPGRv
dWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29u
c3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBvcHRpb25hbERvdWJsZVZhbHVlKHZhbHVlKGRp
Y3Rpb25hcnksIGtleSkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5
LCBXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkaWN0aW9uYXJ5
LmdldCgpLCB0b1dLKGtleSkuZ2V0KCksIHZhbHVlKTsKK30KKworaW5saW5lIHZvaWQgc2V0VmFs
dWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rpb25hcnks
IGNvbnN0IGNoYXIqIGtleSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5
LCBrZXksIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCitpbmxp
bmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVm
PiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXksIHRvV0sodmFsdWUpLmdldCgpKTsKK30KKworaW5s
aW5lIHZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4mIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgV1RGOjpTdHJpbmcmIHZhbHVl
KQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgdG9XSyh2YWx1ZSkuZ2V0KCkpOwor
fQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCB1aW50NjRfdCB2YWx1ZSkK
K3sKKyAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXksIGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
dmFsdWUpKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXks
IGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXksIGFkb3B0V0so
V0tEb3VibGVDcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4m
IGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgT3B0aW9uYWw8VD4mIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwga2V5LCAqdmFs
dWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94eS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVu
dFNlbmRlclByb3h5LmgKaW5kZXggNjQ0NzYwMzk2OGQyMDY0MjBiZWI5NDI3NzNiMjRiNzg5NjQx
YjVjOS4uZmEzYTg4ZDNhZjM5MzRkNGM4ODIwYmY1MGZlOWY4OTdiMzhmZDA0YSAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmgKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmgKQEAgLTExMiwxOCArMTEyLDE5IEBA
IHByaXZhdGU6CiAgICAgUE9JTlQgcG9zaXRpb25JblBvaW50KCkgY29uc3QgeyByZXR1cm4geyBz
dGF0aWNfY2FzdDxMT05HPihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxMT05HPihtX3Bvc2l0
aW9uLnkpIH07IH0KICNlbmRpZgogCi0gICAgZG91YmxlIG1fdGltZTsKLSAgICBXS1BvaW50IG1f
cG9zaXRpb247Ci0gICAgYm9vbCBtX2xlZnRNb3VzZUJ1dHRvbkRvd247Ci0gICAgaW50IG1fY2xp
Y2tDb3VudDsKLSAgICBkb3VibGUgbV9jbGlja1RpbWU7Ci0gICAgV0tQb2ludCBtX2NsaWNrUG9z
aXRpb247Ci0gICAgV0tFdmVudE1vdXNlQnV0dG9uIG1fY2xpY2tCdXR0b247CisgICAgZG91Ymxl
IG1fdGltZSB7IDAgfTsKKyAgICBXS1BvaW50IG1fcG9zaXRpb24geyB9OworICAgIGJvb2wgbV9s
ZWZ0TW91c2VCdXR0b25Eb3duIHsgZmFsc2UgfTsKKyAgICBpbnQgbV9jbGlja0NvdW50IHsgMCB9
OworICAgIGRvdWJsZSBtX2NsaWNrVGltZSB7IDAgfTsKKyAgICBXS1BvaW50IG1fY2xpY2tQb3Np
dGlvbiB7IH07CisgICAgV0tFdmVudE1vdXNlQnV0dG9uIG1fY2xpY2tCdXR0b24geyBrV0tFdmVu
dE1vdXNlQnV0dG9uTm9CdXR0b24gfTsKICAgICB1bnNpZ25lZCBtX21vdXNlQnV0dG9uc0N1cnJl
bnRseURvd24geyAwIH07CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaW50IGV2ZW50TnVtYmVy
OwotI2VsaWYgUExBVEZPUk0oV1BFKQotICAgIHVpbnQzMl90IG1fYnV0dG9uU3RhdGU7CisgICAg
aW50IGV2ZW50TnVtYmVyIHsgMCB9OworI2VuZGlmCisjaWYgUExBVEZPUk0oV1BFKQorICAgIHVp
bnQzMl90IG1fYnV0dG9uU3RhdGUgeyAwIH07CiAgICAgVmVjdG9yPHN0cnVjdCB3cGVfaW5wdXRf
dG91Y2hfZXZlbnRfcmF3PiBtX3RvdWNoRXZlbnRzOwogICAgIEhhc2hTZXQ8dW5zaWduZWQsIERl
ZmF1bHRIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1
bnNpZ25lZD4+IG1fdXBkYXRlZFRvdWNoRXZlbnRzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmNwcCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwCmluZGV4IDZmOTNjYTI3
MzAzMGY1Nzc2ZTMxOGY5ZTQ1NjkwMjJjZWUxNGI5MGQuLmM0MjUxYjMwMWZiNTU0YzdlYWU2MDMx
NjI3NTk2ZjUwYjc4YTI1OWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2Vv
bG9jYXRpb25Qcm92aWRlck1vY2suY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2Vv
bG9jYXRpb25Qcm92aWRlck1vY2suY3BwCkBAIC02Myw5ICs2Myw5IEBAIEdlb2xvY2F0aW9uUHJv
dmlkZXJNb2NrOjp+R2VvbG9jYXRpb25Qcm92aWRlck1vY2soKQogICAgIFdLR2VvbG9jYXRpb25N
YW5hZ2VyU2V0UHJvdmlkZXIobV9nZW9sb2NhdGlvbk1hbmFnZXIsIDApOwogfQogCi12b2lkIEdl
b2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJs
ZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3Vi
bGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1
ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHBy
b3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJs
ZSBmbG9vckxldmVsKQordm9pZCBHZW9sb2NhdGlvblByb3ZpZGVyTW9jazo6c2V0UG9zaXRpb24o
ZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlv
bmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwg
T3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25h
bDxkb3VibGU+IGZsb29yTGV2ZWwpCiB7Ci0gICAgbV9wb3NpdGlvbi5hZG9wdChXS0dlb2xvY2F0
aW9uUG9zaXRpb25DcmVhdGVfYyhXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS5z
ZWNvbmRzKCksIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRl
LCBhbHRpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBw
cm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkLCBwcm92aWRlc0Zs
b29yTGV2ZWwsIGZsb29yTGV2ZWwpKTsKKyAgICBtX3Bvc2l0aW9uLmFkb3B0KFdLR2VvbG9jYXRp
b25Qb3NpdGlvbkNyZWF0ZV9jKFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNl
Y29uZHMoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLmhhc1ZhbHVl
KCksIGFsdGl0dWRlLnZhbHVlT3IoMCksIGFsdGl0dWRlQWNjdXJhY3kuaGFzVmFsdWUoKSwgYWx0
aXR1ZGVBY2N1cmFjeS52YWx1ZU9yKDApLCBoZWFkaW5nLmhhc1ZhbHVlKCksIGhlYWRpbmcudmFs
dWVPcigwKSwgc3BlZWQuaGFzVmFsdWUoKSwgc3BlZWQudmFsdWVPcigwKSwgZmxvb3JMZXZlbC5o
YXNWYWx1ZSgpLCBmbG9vckxldmVsLnZhbHVlT3IoMCkpKTsKIAogICAgIG1faGFzRXJyb3IgPSBm
YWxzZTsKICAgICBtX2Vycm9yTWVzc2FnZS5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCmluZGV4IDFlZDRhZGY5YjM5MzkzYTMz
M2FhMzI1MTA5N2I5ZTNhYTQyY2MzNmIuLjliZjYzMzg0YWUyN2RiMjhjNWY1NDA1Njg1Yjg4Zjc1
YmVkN2I1MTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Q
cm92aWRlck1vY2suaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJv
dmlkZXJNb2NrLmgKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIEdlb2xvY2F0aW9uUHJv
dmlkZXJNb2NrKFdLQ29udGV4dFJlZik7CiAgICAgfkdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrKCk7
CiAKLSAgICB2b2lkIHNldFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVk
ZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5
LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVl
ZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2
ZWwpOworICAgIHZvaWQgc2V0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFs
PGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRp
b25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25hbDxkb3VibGU+IGZsb29yTGV2ZWwpOwogICAgIHZv
aWQgc2V0UG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSk7
CiAKICAgICB2b2lkIHN0YXJ0VXBkYXRpbmcoV0tHZW9sb2NhdGlvbk1hbmFnZXJSZWYpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCA2YTA4YWFhNmI2MzlmM2Y1NWM4YzQ2
YTk0YzJmZTk1ZGI1NDdmNzgyLi5hZDRhMjVhZTViMDdiNzU4ZTJlMGE5MWZhZjFiNTI4MzAzZWI4
NDhkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcApAQCAtNzUsOSArNzUsOSBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp1cGRhdGVJc29sYXRlZFRyZWVNb2RlKCkK
IH0KICNlbmRpZgogCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om1ha2VXaW5k
b3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgc2V0UHJvcGVydHkoY29udGV4
dCwgd2luZG93T2JqZWN0LCAiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBl
eGNlcHRpb24pOworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlciIsIHRoaXMpOwogfQogCiBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQpAQCAtOTYsMTcgKzk2LDE3IEBAIGJvb2wgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OmVuaGFuY2VkQWNjZXNzaWJpbGl0eUVuYWJsZWQoKQogfQogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCisKIFJlZjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnQoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1
dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAg
ICBQbGF0Zm9ybVVJRWxlbWVudCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+
KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFnZSkpOwotCiAgICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShyb290KTsKIH0KIAogUmVmPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudCgpCiB7Ci0gICAg
V0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IGZvY3VzZWRFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eUZvY3VzZWRPYmplY3Qo
cGFnZSkpOwogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoZm9jdXNl
ZEVsZW1lbnQpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IDY2YzM0Mzgy
MmJiYmM2OTU5OWJhZjZhNDc2NjBhMTM4N2VlMjUxYjAuLmQ5YzJmMTI2Zjg3MWNlMmVlZjA3YjAw
MzU4MGY2ZGFjZTZjNTQyMzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKQEAgLTQ1
LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI+IGNyZWF0ZSgpOwogICAgIH5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwogCi0gICAgdm9p
ZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0Nv
bnRleHRSZWYpOwogICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKICAgICAK
ICAgICAvLyBFbmhhbmNlZCBhY2Nlc3NpYmlsaXR5LgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5l
ci5wbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQ29k
ZUdlbmVyYXRvclRlc3RSdW5uZXIucG0KaW5kZXggYjlmNWVlZmZhNDY0OWY0MTdmODJiMTYxNzA5
ZjRhYmFlMDk5OTFmMi4uNTJlM2VmYTk5MWI5ZGQ2YzE3NWRiYjhlNDEwZTZmZWNmYWMzMDEwOCAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5n
cy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtCkBAIC0y
NjEsOCArMjYxLDcgQEAgJHtpbXBsZW1lbnRhdGlvbkNsYXNzTmFtZX0qIHRvJHtpbXBsZW1lbnRh
dGlvbkNsYXNzTmFtZX0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEoKIAogSlNDbGFzc1JlZiAke2Ns
YXNzTmFtZX06OiR7Y2xhc3NSZWZHZXR0ZXJ9KCkKIHsKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBq
c0NsYXNzOwotICAgIGlmICghanNDbGFzcykgeworICAgIHN0YXRpYyBjb25zdCBKU0NsYXNzUmVm
IGpzQ2xhc3MgPSBbXSB7CiAgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBr
SlNDbGFzc0RlZmluaXRpb25FbXB0eTsKICAgICAgICAgZGVmaW5pdGlvbi5jbGFzc05hbWUgPSAi
QHtbJHR5cGUtPm5hbWVdfSI7CiAgICAgICAgIGRlZmluaXRpb24ucGFyZW50Q2xhc3MgPSBAe1sk
c2VsZi0+X3BhcmVudENsYXNzUmVmR2V0dGVyRXhwcmVzc2lvbigkaW50ZXJmYWNlKV19OwpAQCAt
Mjc0LDggKzI3Myw4IEBAIEVPRgogICAgIHB1c2goQGNvbnRlbnRzLCAiICAgICAgICBkZWZpbml0
aW9uLmZpbmFsaXplID0gZmluYWxpemU7XG4iKSB1bmxlc3MgX3BhcmVudEludGVyZmFjZSgkaW50
ZXJmYWNlKTsKIAogICAgIHB1c2goQGNvbnRlbnRzLCA8PEVPRik7Ci0gICAgICAgIGpzQ2xhc3Mg
PSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKLSAgICB9CisgICAgICAgIHJldHVybiBKU0Ns
YXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKyAgICB9KCk7CiAgICAgcmV0dXJuIGpzQ2xhc3M7CiB9
CiAKQEAgLTQ3NywxMCArNDc2LDExIEBAIHN1YiBfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IKIHsK
ICAgICBteSAoJHNlbGYsICR0eXBlLCAkYXJndW1lbnROYW1lKSA9IEBfOwogCi0gICAgcmV0dXJu
ICJKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICR0
eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkdHlwZS0+aXNOdWxsYWJsZTsKKyAgICByZXR1cm4g
InRvT3B0aW9uYWxCb29sKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBl
cSAiYm9vbGVhbiIgJiYgJHR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9C
b29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9vbGVh
biI7CiAgICAgcmV0dXJuICIkYXJndW1lbnROYW1lIiBpZiAkdHlwZS0+bmFtZSBlcSAib2JqZWN0
IjsKLSAgICByZXR1cm4gImFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgJGFyZ3Vt
ZW50TmFtZSwgbnVsbHB0cikpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlw
ZSgkdHlwZSk7CisgICAgcmV0dXJuICJjcmVhdGVKU1N0cmluZyhjb250ZXh0LCAkYXJndW1lbnRO
YW1lKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAg
IHJldHVybiAidG9PcHRpb25hbERvdWJsZShjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJCRz
ZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpICYmICR0eXBlLT5pc051
bGxhYmxlOwogICAgIHJldHVybiAiSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsICRhcmd1bWVudE5h
bWUsIG51bGxwdHIpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJpbWl0aXZlVHlwZSgk
dHlwZSk7CiAgICAgcmV0dXJuICJ0byIgLiBfaW1wbGVtZW50YXRpb25DbGFzc05hbWUoJHR5cGUp
IC4gIihjb250ZXh0LCAkYXJndW1lbnROYW1lKSI7CiB9CkBAIC00OTksMTggKzQ5OSwxNiBAQCBz
dWIgX3BsYXRmb3JtVHlwZVZhcmlhYmxlRGVjbGFyYXRpb24KICAgICAgICAgIkpTVmFsdWVSZWYi
ID0+IDEsCiAgICAgKTsKIAotICAgIG15ICRudWxsVmFsdWUgPSAiMCI7CisgICAgbXkgJG51bGxW
YWx1ZSA9ICJudWxscHRyIjsKICAgICBpZiAoJHBsYXRmb3JtVHlwZSBlcSAiSlNWYWx1ZVJlZiIp
IHsKICAgICAgICAgJG51bGxWYWx1ZSA9ICJKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSI7
Ci0gICAgfSBlbHNpZiAoZGVmaW5lZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9ICYm
ICRwbGF0Zm9ybVR5cGUgbmUgImRvdWJsZSIpIHsKLSAgICAgICAgJG51bGxWYWx1ZSA9ICIkcGxh
dGZvcm1UeXBlKCkiOworICAgIH0gZWxzaWYgKGRlZmluZWQgJG5vblBvaW50ZXJUeXBlc3skcGxh
dGZvcm1UeXBlfSkgeworICAgICAgICAkbnVsbFZhbHVlID0gJHR5cGUtPmlzTnVsbGFibGUgPyAi
V1RGOjpudWxsb3B0IiA6ICIkcGxhdGZvcm1UeXBlKCkiOwogICAgIH0KIAotICAgICRwbGF0Zm9y
bVR5cGUgLj0gIioiIHVubGVzcyBkZWZpbmVkICRub25Qb2ludGVyVHlwZXN7JHBsYXRmb3JtVHlw
ZX07Ci0KLSAgICByZXR1cm4gIiRwbGF0Zm9ybVR5cGUgJHZhcmlhYmxlTmFtZSA9ICRjb25kaXRp
b24gJiYgJGNvbnN0cnVjdG9yOyIgaWYgJGNvbmRpdGlvbiAmJiAkcGxhdGZvcm1UeXBlIGVxICJi
b29sIjsKLSAgICByZXR1cm4gIiRwbGF0Zm9ybVR5cGUgJHZhcmlhYmxlTmFtZSA9ICRjb25kaXRp
b24gPyAkY29uc3RydWN0b3IgOiAkbnVsbFZhbHVlOyIgaWYgJGNvbmRpdGlvbjsKLSAgICByZXR1
cm4gIiRwbGF0Zm9ybVR5cGUgJHZhcmlhYmxlTmFtZSA9ICRjb25zdHJ1Y3RvcjsiOworICAgIHJl
dHVybiAiYm9vbCAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiAmJiAkY29uc3RydWN0b3I7IiBp
ZiAkY29uZGl0aW9uICYmICRwbGF0Zm9ybVR5cGUgZXEgImJvb2wiOworICAgIHJldHVybiAiYXV0
byAkdmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiA/ICRjb25zdHJ1Y3RvciA6ICRudWxsVmFsdWU7
IiBpZiAkY29uZGl0aW9uOworICAgIHJldHVybiAiYXV0byAkdmFyaWFibGVOYW1lID0gJGNvbnN0
cnVjdG9yOyI7CiB9CiAKIHN1YiBfcmV0dXJuRXhwcmVzc2lvbgpAQCAtNTE4LDExICs1MTYsMTEg
QEAgc3ViIF9yZXR1cm5FeHByZXNzaW9uCiAgICAgbXkgKCRzZWxmLCAkcmV0dXJuVHlwZSwgJGV4
cHJlc3Npb24pID0gQF87CiAKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAidW5kZWZpbmVkIjsKLSAgICByZXR1cm4gIkpT
VmFsdWVNYWtlQm9vbGVhbk9yTnVsbChjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJHJldHVy
blR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICRyZXR1cm5UeXBlLT5pc051bGxhYmxlOworICAg
IHJldHVybiAibWFrZVZhbHVlKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlw
ZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0
dXJuICJKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlmICRyZXR1
cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gIiR7ZXhwcmVzc2lvbn0iIGlm
ICRyZXR1cm5UeXBlLT5uYW1lIGVxICJvYmplY3QiOwogICAgIHJldHVybiAiSlNWYWx1ZU1ha2VO
dW1iZXIoY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+
SXNQcmltaXRpdmVUeXBlKCRyZXR1cm5UeXBlKTsKLSAgICByZXR1cm4gIkpTVmFsdWVNYWtlU3Ry
aW5nT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0uZ2V0KCkpIiBpZiAkJHNlbGZ7Y29kZUdl
bmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkcmV0dXJuVHlwZSk7CisgICAgcmV0dXJuICJtYWtlVmFs
dWUoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9y
fS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKICAgICByZXR1cm4gInRvSlMoY29udGV4dCwg
V1RGOjpnZXRQdHIoJHtleHByZXNzaW9ufSkpIjsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGwKaW5kZXggZmJlZjM5NmY1ZjZmM2JmZjRmOTljOGE1NmE2ZTYyYWMwMTQwZmZhNC4uZjM3ZTAw
Njc3NWI4ZTMwNjFjN2NlYzhmOWI1ZWY3ODg2MTgwOTEwYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5u
ZXIuaWRsCkBAIC0yMTUsNyArMjE1LDcgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogCiAgICAg
Ly8gR2VvbG9jYXRpb24KICAgICB1bmRlZmluZWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJv
b2xlYW4gdmFsdWUpOwotICAgIHVuZGVmaW5lZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgb3B0aW9u
YWwgb2JqZWN0IGFsdGl0dWRlLCBvcHRpb25hbCBvYmplY3QgYWx0aXR1ZGVBY2N1cmFjeSwgb3B0
aW9uYWwgb2JqZWN0IGhlYWRpbmcsIG9wdGlvbmFsIG9iamVjdCBzcGVlZCwgb3B0aW9uYWwgb2Jq
ZWN0IGZsb29yTGV2ZWwpOworICAgIHVuZGVmaW5lZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgb3B0
aW9uYWwgZG91YmxlPyBhbHRpdHVkZSwgb3B0aW9uYWwgZG91YmxlPyBhbHRpdHVkZUFjY3VyYWN5
LCBvcHRpb25hbCBkb3VibGU/IGhlYWRpbmcsIG9wdGlvbmFsIGRvdWJsZT8gc3BlZWQsIG9wdGlv
bmFsIGRvdWJsZT8gZmxvb3JMZXZlbCk7CiAgICAgdW5kZWZpbmVkIHNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihET01TdHJpbmcgZXJyb3JNZXNzYWdlKTsKICAgICBi
b29sZWFuIGlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpOwogCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIu
Y3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdD
b250cm9sbGVyLmNwcAppbmRleCA1NTNmZDA1ZWYxNjlmMzUyM2EwNDMxZjEzMTc0MmZiYzIyMTcw
NDA5Li40NDI3ZjA4OTI2MDE2YWEzNDgzOTcyMmM3MWJjM2EwNjEyZGQyN2U5IDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRy
b2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZl
bnRTZW5kaW5nQ29udHJvbGxlci5jcHAKQEAgLTI2LDEwICsyNiwxMCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUg
IkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2lu
Y2x1ZGUgIkluamVjdGVkQnVuZGxlUGFnZS5oIgogI2luY2x1ZGUgIkpTRXZlbnRTZW5kaW5nQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgPFdlYktp
dC9XS0J1bmRsZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0J1bmRsZUZyYW1lLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0L1dLQnVuZGxlUGFnZVByaXZhdGUuaD4KQEAgLTUyLDYgKzUyLDcgQEAgc3RydWN0
IE1lbnVJdGVtUHJpdmF0ZURhdGEgewogfTsKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQor
CiBzdGF0aWMgSlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNrQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QsIGNvbnN0
IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCiB7CiAgICAgTWVudUl0ZW1Qcml2YXRlRGF0YSog
cHJpdmF0ZURhdGEgPSBzdGF0aWNfY2FzdDxNZW51SXRlbVByaXZhdGVEYXRhKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKQEAgLTYyLDcgKzYzLDcgQEAgc3RhdGljIEpTVmFsdWVS
ZWYgbWVudUl0ZW1DbGlja0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiwgSlNPYmoKIHN0YXRpYyBKU1ZhbHVlUmVmIGdldE1lbnVJdGVtVGl0bGVDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBNZW51SXRlbVByaXZhdGVEYXRh
KiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJdGVtUHJpdmF0ZURhdGEqPihKU09iamVj
dEdldFByaXZhdGUob2JqZWN0KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVGl0
bGUgPSBhZG9wdFdLKFdLQ29udGV4dE1lbnVJdGVtQ29weVRpdGxlKHByaXZhdGVEYXRhLT5tX2l0
ZW0uZ2V0KCkpKTsKKyAgICBhdXRvIHdrVGl0bGUgPSBhZG9wdFdLKFdLQ29udGV4dE1lbnVJdGVt
Q29weVRpdGxlKHByaXZhdGVEYXRhLT5tX2l0ZW0uZ2V0KCkpKTsKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VTdHJpbmcoY29udGV4dCwgdG9KUyh3a1RpdGxlKS5nZXQoKSk7CiB9CiAKQEAgLTczLDE4
ICs3NCwxNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRNZW51SXRlbUNoaWxkcmVuQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmCiAgICAgTWVudUl0ZW1Qcml2YXRlRGF0
YSogcHJpdmF0ZURhdGEgPSBzdGF0aWNfY2FzdDxNZW51SXRlbVByaXZhdGVEYXRhKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKG9iamVjdCkpOwogICAgIGF1dG8gY2hpbGRyZW4gPSBhZG9wdFdLKFdLQ29u
dGV4dE1lbnVDb3B5U3VibWVudUl0ZW1zKHByaXZhdGVEYXRhLT5tX2l0ZW0uZ2V0KCkpKTsKIAot
ICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAw
LCAwLCAwKTsKKyAgICBhdXRvIGFycmF5ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwg
MCwgMCk7CiAgICAgaWYgKCFXS0FycmF5R2V0U2l6ZShjaGlsZHJlbi5nZXQoKSkpCi0gICAgICAg
IHJldHVybiBhcnJheVJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogCi0gICAgSlNPYmpl
Y3RSZWYgYXJyYXlPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJyYXlSZXN1bHQs
IDApOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV0tBcnJheUdldFNpemUoY2hpbGRyZW4u
Z2V0KCkpOyArK2kpIHsKICAgICAgICAgYXV0byBpdGVtID0gc3RhdGljX2Nhc3Q8V0tDb250ZXh0
TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZHJlbi5nZXQoKSwgaSkpOwog
ICAgICAgICBhdXRvKiBwcml2YXRlRGF0YSA9IG5ldyBNZW51SXRlbVByaXZhdGVEYXRhKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgaXRlbSk7Ci0gICAgICAgIEpT
T2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2JqZWN0LCBpLCBKU09iamVj
dE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFzcygpLCBwcml2YXRlRGF0YSksIDApOworICAg
ICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgSlNPYmpl
Y3RNYWtlKGNvbnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAwKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgcmV0dXJuIGFycmF5OwogfQogCiBz
dGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNNZW51SXRlbUZ1bmN0aW9uc1tdID0gewpAQCAt
MTI2LDYgKzEyNiw3IEBAIHN0YXRpYyBKU0NsYXNzUmVmIGdldE1lbnVJdGVtQ2xhc3MoKQogCiAg
ICAgcmV0dXJuIG1lbnVJdGVtQ2xhc3M7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgV0tFdmVudE1v
ZGlmaWVycyBwYXJzZU1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyKQpAQCAtMTUwLDI1ICsx
NTEsMzEgQEAgc3RhdGljIFdLRXZlbnRNb2RpZmllcnMgcGFyc2VNb2RpZmllcihKU1N0cmluZ1Jl
ZiBtb2RpZmllcikKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGFycmF5TGVu
Z3RoKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBhcnJheSkKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQorCitzdGF0aWMgdWludDY0X3QgcGFyc2VUb3VjaE1vZGlmaWVyKEpTU3Ry
aW5nUmVmIG1vZGlmaWVyKQogewotICAgIGF1dG8gbGVuZ3RoU3RyaW5nID0gYWRvcHQoSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGxlbmd0
aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBhcnJheSwgbGVuZ3RoU3RyaW5n
LmdldCgpLCAwKTsKLSAgICBpZiAoIWxlbmd0aFZhbHVlKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBs
ZW5ndGhWYWx1ZSwgMCkpOworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1v
ZGlmaWVyLCAiY3RybCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2RpZmllcnNDb250cm9s
S2V5OworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVyLCAic2hp
ZnQiKSkKKyAgICAgICAgcmV0dXJuIGtXS0V2ZW50TW9kaWZpZXJzU2hpZnRLZXk7CisgICAgaWYg
KEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJhbHQiKSkKKyAgICAgICAg
cmV0dXJuIGtXS0V2ZW50TW9kaWZpZXJzQWx0S2V5OworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1vZGlmaWVyLCAibWV0YUtleSIpKQorICAgICAgICByZXR1cm4ga1dLRXZl
bnRNb2RpZmllcnNNZXRhS2V5OworICAgIHJldHVybiAwOwogfQogCisjZW5kaWYKKwogc3RhdGlj
IFdLRXZlbnRNb2RpZmllcnMgcGFyc2VNb2RpZmllckFycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmIGFycmF5VmFsdWUpCiB7CiAgICAgaWYgKCFhcnJheVZhbHVlKQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIC8vIFRoZSB2YWx1ZSBtYXkgZWl0aGVyIGJlIGEgc3RyaW5nIHdp
dGggYSBzaW5nbGUgbW9kaWZpZXIgb3IgYW4gYXJyYXkgb2YgbW9kaWZpZXJzLgotICAgIGlmIChK
U1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1ZSkpIHsKLSAgICAgICAgYXV0byBzdHJp
bmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFycmF5VmFsdWUsIDApKTsK
LSAgICAgICAgcmV0dXJuIHBhcnNlTW9kaWZpZXIoc3RyaW5nLmdldCgpKTsKLSAgICB9CisgICAg
aWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IHBhcnNlTW9kaWZpZXIoY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1ZSkuZ2V0KCkp
OwogCiAgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgYXJyYXlWYWx1ZSkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMTc2LDI5ICsxODMsMjAgQEAgc3RhdGljIFdLRXZlbnRNb2RpZmll
cnMgcGFyc2VNb2RpZmllckFycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFy
cmEKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBhcnJheSk7CiAg
ICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7
Ci0gICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChj
b250ZXh0LCBhcnJheSwgaSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byBzdHJpbmcgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAmZXhjZXB0aW9uKSk7Ci0gICAgICAgIGlmIChl
eGNlcHRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbW9kaWZpZXJzIHw9IHBh
cnNlTW9kaWZpZXIoc3RyaW5nLmdldCgpKTsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgbnVsbHB0cikpCisgICAg
ICAgICAgICBtb2RpZmllcnMgfD0gcGFyc2VNb2RpZmllcihjcmVhdGVKU1N0cmluZyhjb250ZXh0
LCB2YWx1ZSkuZ2V0KCkpOwogICAgIH0KICAgICByZXR1cm4gbW9kaWZpZXJzOwogfQogCi1SZWY8
RXZlbnRTZW5kaW5nQ29udHJvbGxlcj4gRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y3JlYXRlKCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFdmVudFNlbmRpbmdDb250cm9sbGVyKTsKLX0K
LQotRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcigpCitzdGF0
aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJyYXkoSlNWYWx1ZVJlZiBhcnJheVZh
bHVlKQogeworICAgIHJldHVybiBwYXJzZU1vZGlmaWVyQXJyYXkoV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKSwgYXJyYXlWYWx1ZSk7CiB9CiAKLUV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6On5FdmVudFNlbmRpbmdDb250cm9sbGVyKCkKK1JlZjxFdmVudFNlbmRp
bmdDb250cm9sbGVyPiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjcmVhdGUoKQogeworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIpOwogfQogCiBKU0NsYXNz
UmVmIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCkBAIC0yMDYsMjM3ICsy
MDQsMTE2IEBAIEpTQ2xhc3NSZWYgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6d3JhcHBlckNsYXNz
KCkKICAgICByZXR1cm4gSlNFdmVudFNlbmRpbmdDb250cm9sbGVyOjpldmVudFNlbmRpbmdDb250
cm9sbGVyQ2xhc3MoKTsKIH0KIAotZW51bSBNb3VzZVN0YXRlIHsKLSAgICBNb3VzZVVwLAotICAg
IE1vdXNlRG93bgotfTsKK2VudW0gTW91c2VTdGF0ZSB7IE1vdXNlVXAsIE1vdXNlRG93biB9Owog
Ci1zdGF0aWMgV0tNdXRhYmxlRGljdGlvbmFyeVJlZiBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1v
dXNlU3RhdGUgc3RhdGUsIGludCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQor
c3RhdGljIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gY3JlYXRlTW91c2VNZXNzYWdlQm9k
eShNb3VzZVN0YXRlIHN0YXRlLCBpbnQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVy
cykKIHsKLSAgICBXS011dGFibGVEaWN0aW9uYXJ5UmVmIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkg
PSBXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdGF0ZSA9PSBN
b3VzZVVwID8gIk1vdXNlVXAiIDogIk1vdXNlRG93biIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3Nh
Z2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBidXR0b25LZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b24iKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGJ1dHRvblJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoYnV0dG9uKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LCBidXR0b25LZXkuZ2V0KCksIGJ1dHRvblJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTW9kaWZpZXJzIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBt
b2RpZmllcnNSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgbW9kaWZpZXJzS2V5Lmdl
dCgpLCBtb2RpZmllcnNSZWYuZ2V0KCkpOwotCi0gICAgcmV0dXJuIEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgc3RhdGUgPT0gTW91c2VVcCA/
ICJNb3VzZVVwIiA6ICJNb3VzZURvd24iKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiQnV0dG9uIiwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b24pKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9k
eSwgIk1vZGlmaWVycyIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kaWZpZXJzKSkuZ2V0KCkp
OworICAgIHJldHVybiBib2R5OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1v
dXNlRG93bihpbnQgYnV0dG9uLCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXkpIAogewotICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdL
QnVuZGxlUGFnZVJlZiBwYWdlID0gaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCk7Ci0gICAg
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsK
LSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29u
dGV4dChmcmFtZSk7Ci0gICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBwYXJzZU1vZGlm
aWVyQXJyYXkoY29udGV4dCwgbW9kaWZpZXJBcnJheSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKGNyZWF0ZU1v
dXNlTWVzc2FnZUJvZHkoTW91c2VEb3duLCBidXR0b24sIG1vZGlmaWVycykpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSwgRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7Cisg
ICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlTW91c2VN
ZXNzYWdlQm9keShNb3VzZURvd24sIGJ1dHRvbiwgcGFyc2VNb2RpZmllckFycmF5KG1vZGlmaWVy
QXJyYXkpKS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VV
cChpbnQgYnV0dG9uLCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXkpCiB7Ci0gICAgV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7
Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShw
YWdlKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChmcmFtZSk7Ci0gICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBwYXJz
ZU1vZGlmaWVyQXJyYXkoY29udGV4dCwgbW9kaWZpZXJBcnJheSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKGNy
ZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLQotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgcG9zdFN5bmNocm9u
b3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3Vz
ZVVwLCBidXR0b24sIHBhcnNlTW9kaWZpZXJBcnJheShtb2RpZmllckFycmF5KSkuZ2V0KCkpOwog
fQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlTW92ZVRvKGludCB4LCBpbnQg
eSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikp
OwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiTW91c2VNb3ZlVG8iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFt
ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
b3VibGVSZWY+IHhSZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhS
ZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RG91YmxlUmVmPiB5UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5
UmVmLmdldCgpKTsKLQorICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZU1vdmVU
byIpOworICAgIHNldFZhbHVlKGJvZHksICJYIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSku
Z2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5
KSkuZ2V0KCkpOwogICAgIG1fcG9zaXRpb24gPSBXS1BvaW50TWFrZSh4LCB5KTsKLSAgICAKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUu
Z2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VDbGljaygpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlRm9yY2VD
bGljayIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHks
ICJTdWJNZXNzYWdlIiwgIk1vdXNlRm9yY2VDbGljayIpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OnN0YXJ0QW5kQ2FuY2VsTW91c2VGb3JjZUNsaWNrKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1
Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Rh
cnRBbmRDYW5jZWxNb3VzZUZvcmNlQ2xpY2siKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNz
YWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJTdGFydEFuZENhbmNlbE1vdXNl
Rm9yY2VDbGljayIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRl
ciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNl
Rm9yY2VEb3duKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50
U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VGb3JjZURvd24iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBz
dWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZUZvcmNlRG93
biIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHku
Z2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VVcCgp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsK
LSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIk1vdXNlRm9yY2VVcCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1l
LmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0
aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7Cisg
ICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAg
IHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIk1vdXNlRm9yY2VVcCIpOworICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VDaGFuZ2VkKGRvdWJsZSBmb3Jj
ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikp
OwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiTW91c2VGb3JjZUNoYW5nZWQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNz
YWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZm9yY2VLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJGb3JjZSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RvdWJsZVJlZj4gZm9yY2VSZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRl
KGZvcmNlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCBmb3JjZUtleS5nZXQoKSwgZm9yY2VSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3Nh
Z2UiLCAiTW91c2VGb3JjZUNoYW5nZWQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiRm9yY2UiLCBm
b3JjZSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9k
eS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bGVhcEZvcndhcmQo
aW50IG1pbGxpc2Vjb25kcykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+
IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGVhcEZvcndhcmQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgp
LCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dGltZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVJbk1p
bGxpc2Vjb25kcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gdGltZVJlZiA9IGFk
b3B0V0soV0tVSW50NjRDcmVhdGUobWlsbGlzZWNvbmRzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB0aW1lS2V5LmdldCgpLCB0aW1lUmVm
LmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0
aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7Cisg
ICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAg
IHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkxlYXBGb3J3YXJkIik7CisgICAgc2V0VmFs
dWUoYm9keSwgIlRpbWVJbk1pbGxpc2Vjb25kcyIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobWls
bGlzZWNvbmRzKSkuZ2V0KCkpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnNjaGVkdWxlQXN5bmNocm9ub3VzQ2xpY2soKQogewotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9k
aWZpZXJzID0gMDsKLSAgICBpbnQgYnV0dG9uID0gMDsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0KLSAgICAvLyBBc3luY2hyb25vdXMgbW91
c2UgZG93bi4KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtb3VzZURv
d25NZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZURvd24s
IGJ1dHRvbiwgbW9kaWZpZXJzKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lLmdldCgpLCBtb3VzZURvd25NZXNzYWdlQm9keS5nZXQoKSk7Ci0KLSAgICAvLyBBc3luY2hy
b25vdXMgbW91c2UgdXAuCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
bW91c2VVcE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNl
VXAsIGJ1dHRvbiwgbW9kaWZpZXJzKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lLmdldCgpLCBtb3VzZVVwTWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgMCwg
MCkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVhdGVNb3Vz
ZU1lc3NhZ2VCb2R5KE1vdXNlVXAsIDAsIDApLmdldCgpKTsKIH0KIAogc3RhdGljIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGNyZWF0ZUtleURvd25NZXNzYWdlQm9keShKU1N0
cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCBpbnQgbG9jYXRpb24pCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJLZXlEb3duIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleSIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGtleUtleS5nZXQoKSwgdG9XSyhrZXkp
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlmaWVyc1JlZiA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUobW9kaWZpZXJzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCBtb2RpZmllcnNLZXkuZ2V0KCksIG1vZGlmaWVyc1JlZi5nZXQoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbG9jYXRpb25LZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMb2NhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1VJbnQ2NFJlZj4gbG9jYXRpb25SZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxvY2F0
aW9uKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCBsb2NhdGlvbktleS5nZXQoKSwgbG9jYXRpb25SZWYuZ2V0KCkpOwotCi0gICAgcmV0dXJu
IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwg
IktleURvd24iKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiS2V5IiwgdG9XSyhrZXkpLmdldCgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAiTW9kaWZpZXJzIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSht
b2RpZmllcnMpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIkxvY2F0aW9uIiwgYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShsb2NhdGlvbikpLmdldCgpKTsKKyAgICByZXR1cm4gYm9keTsKIH0K
IAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjprZXlEb3duKEpTU3RyaW5nUmVmIGtleSwg
SlNWYWx1ZVJlZiBtb2RpZmllckFycmF5LCBpbnQgbG9jYXRpb24pCiB7Ci0gICAgV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7
Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShw
YWdlKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChmcmFtZSk7Ci0gICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBwYXJz
ZU1vZGlmaWVyQXJyYXkoY29udGV4dCwgbW9kaWZpZXJBcnJheSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IGtleURvd25NZXNzYWdlQm9keSA9IGNyZWF0ZUtleURvd25N
ZXNzYWdlQm9keShrZXksIG1vZGlmaWVycywgbG9jYXRpb24pOwotCi0gICAgV0tCdW5kbGVQYWdl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBrZXlEb3du
TWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJF
dmVudFNlbmRlciIsIGNyZWF0ZUtleURvd25NZXNzYWdlQm9keShrZXksIHBhcnNlTW9kaWZpZXJB
cnJheShtb2RpZmllckFycmF5KSwgbG9jYXRpb24pLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24oSlNTdHJpbmdSZWYg
a2V5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4ga2V5RG93bk1lc3Nh
Z2VCb2R5ID0gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgMCAvKiBtb2RpZmllcnMgKi8s
IDAgLyogbG9jYXRpb24gKi8pOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lLmdldCgpLCBrZXlEb3duTWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiRXZlbnRTZW5kZXIiLCBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoa2V5LCAwLCAwKS5nZXQo
KSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeShpbnQg
eCwgaW50IHkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNl
bmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIk1vdXNlU2Nyb2xsQnkiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJN
ZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEb3VibGVSZWY+IHhSZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXku
Z2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgIFdLUmV0
YWluUHRyPFdLRG91YmxlUmVmPiB5UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5
LmdldCgpLCB5UmVmLmdldCgpKTsKLQogICAgIFdLQnVuZGxlUGFnZUZvcmNlUmVwYWludChJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOyAvLyBUcmlnZ2VycyBhIHNj
cm9sbGluZyB0cmVlIGNvbW1pdC4KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5h
bWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCkpOworCisgICAgYXV0byBib2R5
ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJv
ZHksICJTdWJNZXNzYWdlIiwgIk1vdXNlU2Nyb2xsQnkiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
WCIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiWSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHN0YXRpYyB1aW50NjRfdCBj
Z0V2ZW50UGhhc2VGcm9tU3RyaW5nKEpTU3RyaW5nUmVmIHBoYXNlU3RyKQpAQCAtNDc1LDkwICsz
NTIsNTggQEAgc3RhdGljIHVpbnQ2NF90IGNnRXZlbnRNb21lbnR1bVBoYXNlRnJvbVN0cmluZyhK
U1N0cmluZ1JlZiBwaGFzZVN0cikKIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3Vz
ZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoaW50IHgsIGludCB5LCBKU1N0cmlu
Z1JlZiBwaGFzZVN0ciwgSlNTdHJpbmdSZWYgbW9tZW50dW1TdHIpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZVNj
cm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBz
dWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAg
IFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3Jl
YXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCiAgICAgdWludDY0X3QgcGhhc2UgPSBj
Z0V2ZW50UGhhc2VGcm9tU3RyaW5nKHBoYXNlU3RyKTsKICAgICB1aW50NjRfdCBtb21lbnR1bSA9
IGNnRXZlbnRNb21lbnR1bVBoYXNlRnJvbVN0cmluZyhtb21lbnR1bVN0cik7Ci0gICAgCisKICAg
ICBpZiAocGhhc2UgPT0gNCAvKiBrQ0dTY3JvbGxQaGFzZUVuZGVkICovIHx8IHBoYXNlID09IDgg
Lyoga0NHU2Nyb2xsUGhhc2VDYW5jZWxsZWQgKi8pCiAgICAgICAgIG1fc2VudFdoZWVsUGhhc2VF
bmRPckNhbmNlbCA9IHRydWU7Ci0gICAgCiAgICAgaWYgKG1vbWVudHVtID09IDMgLyoga0NHTW9t
ZW50dW1TY3JvbGxQaGFzZUVuZCAqLykKICAgICAgICAgbV9zZW50V2hlZWxNb21lbnR1bVBoYXNl
RW5kID0gdHJ1ZTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaGFzZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBoYXNlIikpOwotICAgIFdLUmV0
YWluUHRyPFdLVUludDY0UmVmPiBwaGFzZVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUocGhh
c2UpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHBoYXNlS2V5LmdldCgpLCBwaGFzZVJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbW9tZW50dW1LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJNb21lbnR1bSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9tZW50
dW1SZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vbWVudHVtKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBtb21lbnR1bUtleS5nZXQo
KSwgbW9tZW50dW1SZWYuZ2V0KCkpOwotCiAgICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7IC8vIFRyaWdnZXJzIGEg
c2Nyb2xsaW5nIHRyZWUgY29tbWl0LgotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSk7CisKKyAgICBhdXRvIGJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUo
Ym9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhh
c2VzIik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgp
KS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRl
KHkpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlBoYXNlIiwgcGhhc2UpOworICAgIHNl
dFZhbHVlKGJvZHksICJNb21lbnR1bSIsIG1vbWVudHVtKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBib29sIHBhZ2VkKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJDb250aW51b3VzTW91c2VTY3JvbGxCeSIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1l
c3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5n
ZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXku
Z2V0KCksIHlSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhZ2Vk
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGFnZWQiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHBhZ2VkUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShwYWdlZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgcGFnZWRLZXkuZ2V0KCksIHBhZ2VkUmVmLmdldCgpKTsKLQorICAgIGF1dG8g
Ym9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiU3ViTWVzc2FnZSIsICJDb250aW51b3VzTW91c2VTY3JvbGxCeSIpOworICAgIHNl
dFZhbHVlKGJvZHksICJYIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSkuZ2V0KCkpOworICAg
IHNldFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSkuZ2V0KCkpOwor
ICAgIHNldFZhbHVlKGJvZHksICJQYWdlZCIsIHBhZ2VkKTsKICAgICAvLyBGSVhNRTogVGhpcyBt
ZXNzYWdlIHNob3VsZCBiZSBhc3luY2hyb25vdXMsIGFzIHNjcm9sbGluZyBpcyBpbnRyaW5zaWNh
bGx5IGFzeW5jaHJvbm91cy4KICAgICAvLyBTZWUgYWxzbzogPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgyNTY+LgotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgMCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2Vu
ZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIEpTVmFsdWVSZWYgRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6Y29udGV4dENsaWNrKCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgV0tCdW5kbGVGcmFt
ZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAgICAgSlND
b250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFp
bkZyYW1lKTsKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKLSAgICBXS1JldGFpblB0cjxXS0Fy
cmF5UmVmPiBtZW51RW50cmllcyA9IGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weUNvbnRleHRNZW51
QXRQb2ludEluV2luZG93KHBhZ2UsIG1fcG9zaXRpb24pKTsKLSAgICBKU1ZhbHVlUmVmIGFycmF5
UmVzdWx0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7CisgICAgYXV0byBt
ZW51RW50cmllcyA9IGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weUNvbnRleHRNZW51QXRQb2ludElu
V2luZG93KHBhZ2UsIG1fcG9zaXRpb24pKTsKKyAgICBhdXRvIGFycmF5ID0gSlNPYmplY3RNYWtl
QXJyYXkoY29udGV4dCwgMCwgMCwgMCk7CiAgICAgaWYgKCFtZW51RW50cmllcykKLSAgICAgICAg
cmV0dXJuIGFycmF5UmVzdWx0OworICAgICAgICByZXR1cm4gYXJyYXk7CiAKLSAgICBKU09iamVj
dFJlZiBhcnJheU9iaiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7
CiAgICAgc2l6ZV90IGVudHJpZXNTaXplID0gV0tBcnJheUdldFNpemUobWVudUVudHJpZXMuZ2V0
KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cmllc1NpemU7ICsraSkgewogICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQoV0tBcnJheUdldEl0ZW1BdEluZGV4KG1lbnVFbnRyaWVz
LmdldCgpLCBpKSkgPT0gV0tDb250ZXh0TWVudUl0ZW1HZXRUeXBlSUQoKSk7CiAKICAgICAgICAg
V0tDb250ZXh0TWVudUl0ZW1SZWYgaXRlbSA9IHN0YXRpY19jYXN0PFdLQ29udGV4dE1lbnVJdGVt
UmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgobWVudUVudHJpZXMuZ2V0KCksIGkpKTsKICAgICAg
ICAgTWVudUl0ZW1Qcml2YXRlRGF0YSogcHJpdmF0ZURhdGEgPSBuZXcgTWVudUl0ZW1Qcml2YXRl
RGF0YShwYWdlLCBpdGVtKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29u
dGV4dCwgYXJyYXlPYmosIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRNZW51SXRlbUNsYXNz
KCksIHByaXZhdGVEYXRhKSwgMCk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFz
cygpLCBwcml2YXRlRGF0YSksIDApOwogICAgIH0KIAotICAgIHJldHVybiBhcnJheVJlc3VsdDsK
KyAgICByZXR1cm4gYXJyYXk7CiAjZWxzZQogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKICNlbmRpZgpAQCAtNjE1LDIxICs0NjAsMTQgQEAgTW9uaXRvcldoZWVsRXZl
bnRzT3B0aW9ucyogdG9Nb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1YKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBhcmd1bWVudCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byByZXNldExhdGNoaW5nU3RyaW5nID0g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInJlc2V0TGF0Y2hpbmciKSk7Ci0g
ICAgYXV0byByZXNldExhdGNoaW5nVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQs
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudCwgbnVsbHB0ciksIHJlc2V0TGF0Y2hp
bmdTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotCi0gICAgYm9vbCByZXNldExhdGNoaW5nID0gdHJ1
ZTsKLSAgICBpZiAocmVzZXRMYXRjaGluZ1ZhbHVlICYmIEpTVmFsdWVJc0Jvb2xlYW4oY29udGV4
dCwgcmVzZXRMYXRjaGluZ1ZhbHVlKSkKLSAgICAgICAgcmVzZXRMYXRjaGluZyA9IEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgcmVzZXRMYXRjaGluZ1ZhbHVlKTsKLQogICAgIHN0YXRpYyBNb25p
dG9yV2hlZWxFdmVudHNPcHRpb25zIG9wdGlvbnM7Ci0gICAgb3B0aW9ucy5yZXNldExhdGNoaW5n
ID0gcmVzZXRMYXRjaGluZzsKKyAgICBvcHRpb25zLnJlc2V0TGF0Y2hpbmcgPSBib29sZWFuUHJv
cGVydHkoY29udGV4dCwgKEpTT2JqZWN0UmVmKWFyZ3VtZW50LCAicmVzZXRMYXRjaGluZyIsIHRy
dWUpOwogICAgIHJldHVybiAmb3B0aW9uczsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb25pdG9yV2hlZWxFdmVudHMoTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyogb3B0aW9u
cykKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgCiAgICAgbV9zZW50V2hlZWxQaGFzZUVuZE9y
Q2FuY2VsID0gZmFsc2U7CiAgICAgbV9zZW50V2hlZWxNb21lbnR1bVBoYXNlRW5kID0gZmFsc2U7
CkBAIC02NjMsNyArNTAxLDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjYWxsQWZ0
ZXJTY3JvbGxpbmdDb21wbGV0ZXMoSlNWYWx1ZVJlZiBmdW5jdGlvbkNhbGwKICAgICBpZiAoIWZ1
bmN0aW9uQ2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLQnVuZGxlUGFnZVJlZiBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1
dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAg
ICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShw
YWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChtYWluRnJhbWUpOwogICAgIApAQCAtNjgzLDE5OSArNTIxLDEwMiBAQCB2b2lk
IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNhbGxBZnRlclNjcm9sbGluZ0NvbXBsZXRlcyhKU1Zh
bHVlUmVmIGZ1bmN0aW9uQ2FsbAogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKwogdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjphZGRUb3VjaFBvaW50KGludCB4LCBpbnQgeSkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQWRkVG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2
NFJlZj4geFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IHlSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiQWRkVG91Y2hQb2ludCIpOworICAgIHNldFZh
bHVlKGJvZHksICJYIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHgpKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiWSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih5KSk7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQg
eSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikp
OwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVXBkYXRlVG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3Nh
Z2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgIFdL
UmV0YWluUHRyPFdLVUludDY0UmVmPiBpbmRleFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
aW5kZXgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIGluZGV4S2V5LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJZIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZSh5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNz
YWdlIiwgIlVwZGF0ZVRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiSW5kZXgiLCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih4KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oeSkpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCi12b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnNldFRvdWNoTW9kaWZpZXIoY29uc3QgSlNTdHJpbmdSZWYgJm1vZGlmaWVyLCBib29sIGVuYWJs
ZSkKK3ZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihKU1N0cmlu
Z1JlZiBtb2RpZmllciwgYm9vbCBlbmFibGUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFRvdWNoTW9kaWZpZXIiKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJN
ZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0V2ZW50TW9k
aWZpZXJzIG1vZCA9IDA7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9k
aWZpZXIsICJjdHJsIikpCi0gICAgICAgIG1vZCA9IGtXS0V2ZW50TW9kaWZpZXJzQ29udHJvbEtl
eTsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgInNoaWZ0
IikpCi0gICAgICAgIG1vZCA9IGtXS0V2ZW50TW9kaWZpZXJzU2hpZnRLZXk7Ci0gICAgaWYgKEpT
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJhbHQiKSkKLSAgICAgICAgbW9k
ID0ga1dLRXZlbnRNb2RpZmllcnNBbHRLZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobW9kaWZpZXIsICJtZXRhIikpCi0gICAgICAgIG1vZCA9IGtXS0V2ZW50TW9kaWZp
ZXJzTWV0YUtleTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcktleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVyIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtb2RpZmllclJlZiA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUobW9kKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCBtb2RpZmllcktleS5nZXQoKSwgbW9kaWZpZXJSZWYuZ2V0KCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVuYWJsZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkVuYWJsZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4gZW5hYmxlUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShlbmFibGUpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGVuYWJsZUtleS5n
ZXQoKSwgZW5hYmxlUmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlNldFRvdWNoTW9k
aWZpZXIiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTW9kaWZpZXIiLCBwYXJzZVRvdWNoTW9kaWZp
ZXIobW9kaWZpZXIpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiRW5hYmxlIiwgZW5hYmxlKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsK
IH0KIAotCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoUG9pbnRSYWRpdXMo
aW50IHJhZGl1c1gsIGludCByYWRpdXNZKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRUb3VjaFBvaW50UmFkaXVzIikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3Vi
TWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJSYWRpdXNYIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB4UmVmID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShyYWRpdXNYKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUmFkaXVzWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4geVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUocmFkaXVzWSkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJl
Zi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwor
ICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAg
ICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJTZXRUb3VjaFBvaW50UmFkaXVzIik7Cisg
ICAgc2V0VmFsdWUoYm9keSwgIlJhZGl1c1giLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmFkaXVz
WCkpOworICAgIHNldFZhbHVlKGJvZHksICJSYWRpdXNZIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHJhZGl1c1kpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIi
LCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaFN0
YXJ0KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVG91Y2hTdGFydCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VO
YW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7
CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwor
ICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlRvdWNoU3RhcnQiKTsKKyAgICBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAog
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaE1vdmUoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaE1vdmUi
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCks
IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3Vi
TWVzc2FnZSIsICJUb3VjaE1vdmUiKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgi
RXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjp0b3VjaEVuZCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJF
dmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvdWNoRW5kIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3Vi
TWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiVG91Y2hFbmQiKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsK
IH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaENhbmNlbCgpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRv
dWNoQ2FuY2VsIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwot
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJv
ZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUo
Ym9keSwgIlN1Yk1lc3NhZ2UiLCAiVG91Y2hDYW5jZWwiKTsKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpjbGVhclRvdWNoUG9pbnRzKCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0
YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0
YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1
Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJUb3VjaFBvaW50
cyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJT
dWJNZXNzYWdlIiwgIkNsZWFyVG91Y2hQb2ludHMiKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpyZWxlYXNlVG91Y2hQb2ludChpbnQgaW5kZXgpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlbGVhc2VU
b3VjaFBvaW50IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IGluZGV4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXku
Z2V0KCksIGluZGV4UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlJlbGVhc2VUb3Vj
aFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIkluZGV4Iiwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGluZGV4KSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FuY2Vs
VG91Y2hQb2ludChpbnQgaW5kZXgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbmNlbFRvdWNoUG9pbnQiKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdl
S2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJJbmRleCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5kZXhSZWYgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwgaW5kZXhSZWYuZ2V0KCkp
OwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRv
IGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiQ2FuY2VsVG91Y2hQb2ludCIpOworICAgIHNldFZhbHVl
KGJvZHksICJJbmRleCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbmRleCkpOworICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQorCiAj
ZW5kaWYKIAogLy8gT2JqZWN0IENyZWF0aW9uCiAKLXZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2lu
ZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIEV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgc2V0
UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCAiZXZlbnRTZW5kZXIiLCB0aGlzLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
LCBleGNlcHRpb24pOworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJldmVu
dFNlbmRlciIsIHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdD
b250cm9sbGVyLmgKaW5kZXggOWEyYWZkOTU4Y2NkNzBlY2QyMWVjNGUzYjNmZWM0Y2Y3Y2M4NWJh
OC4uZWE0MzdmYmRiZTBjMzQ4OTA1N2UzMTYwNzVhZGVhNjUzYWRiNTEwZCAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9s
bGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNl
bmRpbmdDb250cm9sbGVyLmgKQEAgLTMwLDI3ICszMCwyMyBAQAogI2luY2x1ZGUgPFdlYktpdC9X
S0dlb21ldHJ5Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogCit0eXBlZGVmIGNvbnN0IHN0cnVj
dCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpT
U3RyaW5nKiBKU1N0cmluZ1JlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUq
IEpTVmFsdWVSZWY7CisKIG5hbWVzcGFjZSBXVFIgewogCiBzdHJ1Y3QgTW9uaXRvcldoZWVsRXZl
bnRzT3B0aW9ucyB7Ci0gICAgTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyhib29sIHJlc2V0TGF0
Y2hpbmcgPSB0cnVlKQotICAgICAgICA6IHJlc2V0TGF0Y2hpbmcocmVzZXRMYXRjaGluZykKLSAg
ICB7IH0KLQogICAgIGJvb2wgcmVzZXRMYXRjaGluZyB7IHRydWUgfTsKIH07CiAKIE1vbml0b3JX
aGVlbEV2ZW50c09wdGlvbnMqIHRvTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyhKU0NvbnRleHRS
ZWYsIEpTVmFsdWVSZWYpOwogCi1jbGFzcyBFdmVudFNlbmRpbmdDb250cm9sbGVyIDogcHVibGlj
IEpTV3JhcHBhYmxlIHsKK2NsYXNzIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgZmluYWwgOiBwdWJs
aWMgSlNXcmFwcGFibGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RXZlbnRTZW5kaW5nQ29u
dHJvbGxlcj4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+RXZlbnRTZW5kaW5nQ29udHJvbGxlcigp
OwotCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYg
d2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCi0gICAgLy8gSlNXcmFwcGFi
bGUKLSAgICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CisgICAgdm9pZCBtYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICB2b2lkIG1vdXNlRG93bihpbnQgYnV0
dG9uLCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXkpOwogICAgIHZvaWQgbW91c2VVcChpbnQgYnV0
dG9uLCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXkpOwpAQCAtNzMsNyArNjksNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBrZXlEb3duKEpTU3RyaW5nUmVmIGtleSwgSlNWYWx1ZVJlZiBtb2RpZmllckFy
cmF5LCBpbnQgbG9jYXRpb24pOwogICAgIHZvaWQgc2NoZWR1bGVBc3luY2hyb25vdXNLZXlEb3du
KEpTU3RyaW5nUmVmIGtleSk7CiAKLSAgICAvLyBab29tIGZ1bmN0aW9ucy4KICAgICB2b2lkIHRl
eHRab29tSW4oKTsKICAgICB2b2lkIHRleHRab29tT3V0KCk7CiAgICAgdm9pZCB6b29tUGFnZUlu
KCk7CkBAIC04MSwxMCArNzYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY2FsZVBhZ2VCeShkb3Vi
bGUgc2NhbGUsIGRvdWJsZSB4LCBkb3VibGUgeSk7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQotICAgIC8vIFRvdWNoIGV2ZW50cy4KICAgICB2b2lkIGFkZFRvdWNoUG9pbnQoaW50IHgsIGlu
dCB5KTsKICAgICB2b2lkIHVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkp
OwotICAgIHZvaWQgc2V0VG91Y2hNb2RpZmllcihjb25zdCBKU1N0cmluZ1JlZiAmbW9kaWZpZXIs
IGJvb2wgZW5hYmxlKTsKKyAgICB2b2lkIHNldFRvdWNoTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9k
aWZpZXIsIGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIHNldFRvdWNoUG9pbnRSYWRpdXMoaW50IHJh
ZGl1c1gsIGludCByYWRpdXNZKTsKICAgICB2b2lkIHRvdWNoU3RhcnQoKTsKICAgICB2b2lkIHRv
dWNoTW92ZSgpOwpAQCAtOTYsNyArOTAsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6
Ci0gICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlcigpOworICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpIGZpbmFsOwor
CiAgICAgV0tQb2ludCBtX3Bvc2l0aW9uOwogICAgIGJvb2wgbV9zZW50V2hlZWxQaGFzZUVuZE9y
Q2FuY2VsIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2VudFdoZWVsTW9tZW50dW1QaGFzZUVuZCB7
IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0dDQ29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0dDQ29udHJvbGxlci5jcHAKaW5kZXggOTM1OGY0YTBkZTViM2Q5YmMzMTZiNWUwYWRmZDA0
MTI2NjQyNThmZi4uZGI0MjVlNzVlODBiMDU0MDhiZGYzZTNlMzY0NzY1MTA5NjMwZDNmZCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xs
ZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250
cm9sbGVyLmNwcApAQCAtMzcsMTQgKzM3LDYgQEAgUmVmPEdDQ29udHJvbGxlcj4gR0NDb250cm9s
bGVyOjpjcmVhdGUoKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdDQ29udHJvbGxlcik7CiB9
CiAKLUdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKCkKLXsKLX0KLQotR0NDb250cm9sbGVyOjp+
R0NDb250cm9sbGVyKCkKLXsKLX0KLQogSlNDbGFzc1JlZiBHQ0NvbnRyb2xsZXI6OndyYXBwZXJD
bGFzcygpCiB7CiAgICAgcmV0dXJuIEpTR0NDb250cm9sbGVyOjpnQ0NvbnRyb2xsZXJDbGFzcygp
OwpAQCAtNjUsMTEgKzU3LDkgQEAgc2l6ZV90IEdDQ29udHJvbGxlcjo6Z2V0SlNPYmplY3RDb3Vu
dCgpCiAgICAgcmV0dXJuIFdLQnVuZGxlR2V0SmF2YVNjcmlwdE9iamVjdHNDb3VudChJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwogfQogCi0vLyBPYmplY3QgQ3JlYXRpb24K
LQotdm9pZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9p
ZCBHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7
Ci0gICAgc2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCAiR0NDb250cm9sbGVyIiwg
dGhpcywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSwgZXhjZXB0aW9uKTsKKyAgICBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250
ZXh0LCAiR0NDb250cm9sbGVyIiwgdGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xs
ZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVy
LmgKaW5kZXggZDM0OWMxY2U5OTBlODdkN2RmMmZjYjhjODI4ODViY2EzMDU3MmEwYi4uMzRhYjI0
MjUxMzhjMWQ3NWZiMjRhMjUxMDc0MzY3OGQ4MTllZGMyMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oCkBAIC0yNiwyNiAr
MjYsMjYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNXcmFwcGFibGUuaCIKLSNpbmNs
dWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKwordHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7CiAKIG5hbWVzcGFjZSBXVFIg
ewogCi1jbGFzcyBHQ0NvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgeworY2xhc3MgR0ND
b250cm9sbGVyIGZpbmFsIDogcHVibGljIEpTV3JhcHBhYmxlIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPEdDQ29udHJvbGxlcj4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+R0NDb250cm9sbGVy
KCk7Ci0KLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKLSAgICAvLyBKU1dyYXBw
YWJsZQotICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKKyAgICB2b2lkIG1h
a2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIHZvaWQgY29sbGVjdCgpOwogICAg
IHZvaWQgY29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKGJvb2wgd2FpdFVudGlsRG9uZSk7CiAgICAg
c2l6ZV90IGdldEpTT2JqZWN0Q291bnQoKTsKIAogcHJpdmF0ZToKLSAgICBHQ0NvbnRyb2xsZXIo
KTsKKyAgICBHQ0NvbnRyb2xsZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBKU0NsYXNzUmVmIHdyYXBw
ZXJDbGFzcygpIGZpbmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
CmluZGV4IDdhZTgxYmI0YjU5MDk2YzU4YzhiNWExNGM4OGM0YzMzZjhjMTQ1NzEuLmJiZTkzZGM1
Y2ZmMDAwMDNiMjEzOWQwNWRkYjU4ZDEzMDBmMTI1MDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCkBAIC0y
Nyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKIAogI2luY2x1ZGUgIkFj
dGl2YXRlRm9udHMuaCIKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVk
ZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
T3B0aW9ucy5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0J1bmRsZS5oPgpAQCAtMTE4LDE4ICsxMTgs
MTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkQ3JlYXRlUGFnZShXS0J1bmRsZVBhZ2VSZWYg
cGFnZSkKICAgICBpZiAoIWlzTWFpblBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJJbml0aWFsaXphdGlvbiIpKTsKICAgICBXS1R5cGVSZWYgcmVzdWx0
ID0gbnVsbHB0cjsKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShtX2J1bmRsZSwgbWVzc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyLCAmcmVzdWx0KTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UobV9idW5kbGUsIHRvV0soIkluaXRpYWxpemF0aW9uIikuZ2V0KCksIG51bGxwdHIsICZyZXN1
bHQpOwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAgIEFTU0VSVChX
S0dldFR5cGVJRChyZXN1bHQpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IGluaXRpYWxpemF0aW9uRGljdGlvbmFyeSA9IGFkb3B0
V0soc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihyZXN1bHQpKTsKKyAgICBhdXRvIGluaXRp
YWxpemF0aW9uRGljdGlvbmFyeSA9IGFkb3B0V0soZGljdGlvbmFyeVZhbHVlKHJlc3VsdCkpOwog
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc3VtZVRlc3RpbmdLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXN1bWVUZXN0aW5nIikpOwotICAgIFdL
VHlwZVJlZiByZXN1bWVUZXN0aW5nVmFsdWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGlu
aXRpYWxpemF0aW9uRGljdGlvbmFyeS5nZXQoKSwgcmVzdW1lVGVzdGluZ0tleS5nZXQoKSk7Ci0g
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJlc3VtZVRlc3RpbmdWYWx1ZSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotICAgIGlmIChXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KHJlc3VtZVRlc3RpbmdWYWx1ZSkpKQorICAgIGlmIChib29sZWFuVmFsdWUoaW5pdGlh
bGl6YXRpb25EaWN0aW9uYXJ5LmdldCgpLCAiUmVzdW1lVGVzdGluZyIpKQogICAgICAgICBiZWdp
blRlc3RpbmcoaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5LmdldCgpLCBCZWdpbmdUZXN0aW5nTW9k
ZTo6UmVzdW1lKTsKIH0KIApAQCAtMTc5LDE2ICsxNzQsMjQgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6cmVzZXRMb2NhbFNldHRpbmdzKCkKICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiB9CiAK
LXZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKFdLU3RyaW5nUmVmIG1lc3Nh
Z2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkpCit2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRS
ZWNlaXZlTWVzc2FnZShXS1N0cmluZ1JlZiwgV0tUeXBlUmVmKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRXJyb3IiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVy
cm9yTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJV
bmtub3duIikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UobV9idW5kbGUsIGVycm9yTWVzc2Fn
ZU5hbWUuZ2V0KCksIGVycm9yTWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UobV9idW5kbGUsIHRvV0soIkVycm9yIikuZ2V0KCksIHRvV0soIlVua25vd24iKS5nZXQo
KSk7Cit9CisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShXS0J1bmRsZVBh
Z2VSZWYgcGFnZSwgY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIGJvZHkpCit7CisgICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgdG9XSyhuYW1lKS5nZXQoKSwgYm9keSk7Cit9CisK
K3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZShXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogYm9keSkKK3sKKyAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlLCB0b1dLKG5hbWUpLmdldCgpLCB0b1dLKGJvZHkpLmdldCgpKTsK
IH0KIAogc3RhdGljIHZvaWQgcG9zdEdDVGFzayh2b2lkKiBjb250ZXh0KQogewotICAgIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlID0gcmVpbnRlcnByZXRfY2FzdDxXS0J1bmRsZVBhZ2VSZWY+KGNvbnRl
eHQpOworICAgIGF1dG8gcGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tCdW5kbGVQYWdlUmVmPihj
b250ZXh0KTsKICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucmVwb3J0TGl2ZURvY3Vt
ZW50cyhwYWdlKTsKICAgICBXS1JlbGVhc2UocGFnZSk7CiB9CkBAIC0xOTksNjcgKzIwMiw0NCBA
QCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXBvcnRMaXZlRG9jdW1lbnRzKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlKQogICAgIFdLQnVuZGxlUmVsZWFzZU1lbW9yeShtX2J1bmRsZSk7CiAKICAgICBjb25z
dCBib29sIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCA9IHRydWU7Ci0gICAgYXV0byBkb2N1
bWVudFVSTHMgPSBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJMcyhtX2J1bmRsZSwg
bV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCkpOwotICAgIGF1dG8gYWNr
TWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMaXZl
RG9jdW1lbnRzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGFja01lc3Nh
Z2VOYW1lLmdldCgpLCBkb2N1bWVudFVSTHMuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZShw
YWdlLCAiTGl2ZURvY3VtZW50cyIsIGFkb3B0V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxz
KG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwKSkpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdl
Qm9keSkKIHsKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkJlZ2luVGVzdCIpKSB7CiAgICAgICAgIEFTU0VSVChtZXNzYWdlQm9keSk7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGR1bXBQaXhlbHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJEdW1wUGl4ZWxzIikpOwotICAgICAgICBtX2R1bXBQaXhlbHMgPSBX
S0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBkdW1wUGl4ZWxzS2V5LmdldCgpKSkp
OwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lb3V0S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZW91dCIpKTsKLSAgICAgICAgbV90
aW1lb3V0ID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhXS1VJbnQ2NEdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgdGltZW91dEtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycktleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpKTsKLSAg
ICAgICAgbV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJLZXkuZ2V0KCkpKSk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFja01lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWNrIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJCZWdpblRlc3QiKSk7Ci0gICAgICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKHBhZ2UsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBhY2tNZXNzYWdlQm9keS5nZXQoKSk7Ci0K
KyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVz
c2FnZUJvZHkpOworICAgICAgICBtX2R1bXBQaXhlbHMgPSBib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiRHVtcFBpeGVscyIpOworICAgICAgICBtX3RpbWVvdXQgPSBTZWNvbmRz
Ojpmcm9tTWlsbGlzZWNvbmRzKFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRpbWVvdXQiKSkpKTsKKyAgICAgICAg
bV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIik7CisgICAgICAgIHBvc3RQYWdlTWVz
c2FnZShwYWdlLCAiQWNrIiwgIkJlZ2luVGVzdCIpOwogICAgICAgICBiZWdpblRlc3RpbmcobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBCZWdpbmdUZXN0aW5nTW9kZTo6TmV3KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiUmVzZXQiKSkgewogICAgICAgICBBU1NFUlQobWVzc2FnZUJvZHkpOwotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0
YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4ganNjT3B0aW9uc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkpTQ09wdGlvbnMiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBqc2NPcHRpb25zU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBqc2NPcHRpb25zS2V5
LmdldCgpKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFy
eVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBqc2NPcHRpb25zU3RyaW5nID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkpTQ09w
dGlvbnMiKSk7CiAgICAgICAgIGlmIChqc2NPcHRpb25zU3RyaW5nKSB7CiAgICAgICAgICAgICBT
dHJpbmcgb3B0aW9ucyA9IHRvV1RGU3RyaW5nKGpzY09wdGlvbnNTdHJpbmcpOwogICAgICAgICAg
ICAgSlNDOjpPcHRpb25zOjpzZXRPcHRpb25zKG9wdGlvbnMudXRmOCgpLmRhdGEoKSk7CiAgICAg
ICAgIH0KLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2hvdWxkR0NLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTaG91bGRHQyIpKTsKLSAgICAg
ICAgYm9vbCBzaG91bGRHQyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNo
b3VsZEdDS2V5LmdldCgpKSkpOworICAgICAgICBib29sIHNob3VsZEdDID0gYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlNob3VsZEdDIik7CiAgICAgICAgIGlmIChzaG91bGRH
QykKICAgICAgICAgICAgIFdLQnVuZGxlR2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cyht
X2J1bmRsZSk7CiAKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXhJc29sYXRlZE1vZGVLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVl
IikpOwotICAgICAgICBtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlID0gV0tCb29sZWFu
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYXhJc29sYXRlZE1vZGVLZXkuZ2V0KCkpKSk7Cisg
ICAgICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUgPSBib29sZWFuVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIpOwogI2VuZGlm
CiAgICAgICAgIAotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWxsb3dlZEhvc3Rz
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWxsb3dlZEhvc3Rz
IikpOwotICAgICAgICBXS1R5cGVSZWYgYWxsb3dlZEhvc3RzVmFsdWUgPSBXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYWxsb3dlZEhvc3RzS2V5LmdldCgp
KTsKKyAgICAgICAgYXV0byBhbGxvd2VkSG9zdHNWYWx1ZSA9IHZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIkFsbG93ZWRIb3N0cyIpOwogICAgICAgICBpZiAoYWxsb3dlZEhvc3RzVmFsdWUg
JiYgV0tHZXRUeXBlSUQoYWxsb3dlZEhvc3RzVmFsdWUpID09IFdLQXJyYXlHZXRUeXBlSUQoKSkg
ewogICAgICAgICAgICAgbV9hbGxvd2VkSG9zdHMuY2xlYXIoKTsKLQotICAgICAgICAgICAgV0tB
cnJheVJlZiBhbGxvd2VkSG9zdHNBcnJheSA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KGFsbG93
ZWRIb3N0c1ZhbHVlKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gV0tB
cnJheUdldFNpemUoYWxsb3dlZEhvc3RzQXJyYXkpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoYWxsb3dlZEhv
c3RzQXJyYXksIGkpOwotICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0
ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fYWxsb3dl
ZEhvc3RzLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkp
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBzdGF0aWNfY2FzdDxX
S0FycmF5UmVmPihhbGxvd2VkSG9zdHNWYWx1ZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMCwgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGFycmF5KTsgaSA8IHNpemU7ICsraSkKKyAgICAg
ICAgICAgICAgICBtX2FsbG93ZWRIb3N0cy5hcHBlbmQodG9XVEZTdHJpbmcoV0tBcnJheUdldEl0
ZW1BdEluZGV4KGFycmF5LCBpKSkpOwogICAgICAgICB9CiAKICAgICAgICAgbV9zdGF0ZSA9IElk
bGU7CkBAIC0yNzUsOSArMjU1LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1l
c3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0TGl2ZURvY3Vt
ZW50cyIpKSB7CiAgICAgICAgIGNvbnN0IGJvb2wgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3Vw
ID0gZmFsc2U7Ci0gICAgICAgIGF1dG8gZG9jdW1lbnRVUkxzID0gYWRvcHRXSyhXS0J1bmRsZUdl
dExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBleGNsdWRlRG9jdW1lbnRz
SW5QYWdlR3JvdXApKTsKLSAgICAgICAgYXV0byBhY2tNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxpdmVEb2N1bWVudHMiKSk7Ci0gICAgICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBkb2N1bWVu
dFVSTHMuZ2V0KCkpOworICAgICAgICBwb3N0UGFnZU1lc3NhZ2UoIkxpdmVEb2N1bWVudHMiLCBh
ZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAs
IGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNDI4LDcgKzQwNiw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNz
YWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGRvbWFpbnM7CiAgICAgICAgIGRvbWFpbnMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShzaXplKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFp
bnNBcnJheSwgaSk7CisgICAgICAgICAgICBhdXRvIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5k
ZXgoZG9tYWluc0FycmF5LCBpKTsKICAgICAgICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlE
KGl0ZW0pID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpCiAgICAgICAgICAgICAgICAgZG9tYWlucy5h
cHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAg
ICAgIH0KQEAgLTQ0Niw3ICs0MjQsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZl
TWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBkb21haW5zOwogICAgICAgICBkb21haW5zLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc2l6ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChk
b21haW5zQXJyYXksIGkpOworICAgICAgICAgICAgYXV0byBpdGVtID0gV0tBcnJheUdldEl0ZW1B
dEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CiAgICAgICAgICAgICBpZiAoaXRlbSAmJiBXS0dldFR5
cGVJRChpdGVtKSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKQogICAgICAgICAgICAgICAgIGRvbWFp
bnMudW5jaGVja2VkQXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihp
dGVtKSkpOwogICAgICAgICB9CkBAIC00NjcsMTcgKzQ0NSwxMCBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJp
bmdSZWYgbQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiQ2FsbFVJU2lkZVNjcmlwdENhbGxiYWNrIikpIHsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBy
ZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXN1bHQi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLQotICAg
ICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBjYWxsYmFja0lES2V5LmdldCgpKSkpOwotCi0gICAgICAgIFdLU3RyaW5n
UmVmIHJlc3VsdFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcmVzdWx0S2V5LmdldCgpKSk7Ci0g
ICAgICAgIGF1dG8gcmVzdWx0SlNTdHJpbmcgPSB0b0pTKHJlc3VsdFN0cmluZyk7Ci0KLSAgICAg
ICAgbV90ZXN0UnVubmVyLT5ydW5VSVNjcmlwdENhbGxiYWNrKGNhbGxiYWNrSUQsIHJlc3VsdEpT
U3RyaW5nLmdldCgpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGNhbGxiYWNrSUQgPSB1aW50
NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJDYWxsYmFja0lEIik7CisgICAgICAgIGF1
dG8gcmVzdWx0U3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUmVz
dWx0Iik7CisgICAgICAgIG1fdGVzdFJ1bm5lci0+cnVuVUlTY3JpcHRDYWxsYmFjayhjYWxsYmFj
a0lELCB0b0pTKHJlc3VsdFN0cmluZykuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC00OTgsMjkgKzQ2OSwxNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVz
c2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUZpbmlzaGVkIikpIHsKLSAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBudW1i
ZXJPZlByZXZhbGVudFJlc291cmNlc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIk51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVy
YWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
TnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uIikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNl
ckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVy
YWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3Vy
Y2VXaXRoVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiTWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VX
aXRoVXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0
aFVJIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wM01lZGlhblN1YkZy
YW1lV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJ
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wM01lZGlhblVuaXF1ZVJl
ZGlyZWN0c1dpdGhvdXRVSUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUkiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB0b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJ
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhbkRh
dGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSIpKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVk
IG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc0tleS5nZXQoKSkpKTsK
LSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVy
YWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1i
ZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRl
cmFjdGlvbiA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbnVt
YmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uS2V5LmdldCgpKSkp
OwotICAgICAgICB1bnNpZ25lZCB0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rp
b25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRh
eXNTaW5jZVVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgbWVk
aWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVy
YWN0aW9uID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtZWRp
YW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJh
Y3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcDNOdW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVSSA9ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJS2V5LmdldCgpKSkpOwot
ICAgICAgICB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUkgPSAodW5zaWduZWQp
V0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRpYW5TdWJGcmFtZVdpdGhv
dXRVSUtleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9wM01lZGlhblN1YlJlc291cmNl
V2l0aG91dFVJID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0
b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2ln
bmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50
NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRo
b3V0VUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcDNNZWRpYW5EYXRhUmVjb3Jk
c1JlbW92ZWRXaXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUlLZXkuZ2V0KCkpKSk7
CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1l
c3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBudW1iZXJPZlByZXZhbGVudFJlc291cmNlcyA9IHVp
bnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzIik7CisgICAgICAgIGF1dG8gbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTnVtYmVyT2ZQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gbnVt
YmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uID0gdWludDY0VmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gdG9wUHJldmFsZW50UmVzb3VyY2VX
aXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVy
YWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gbWVkaWFuRGF5
c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9u
ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTWVkaWFuRGF5c1NpbmNlVXNl
ckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uIik7CisgICAg
ICAgIGF1dG8gdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJID0gdWludDY0VmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2Vz
V2l0aFVJIik7CisgICAgICAgIGF1dG8gdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJID0gdWlu
dDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM01lZGlhblN1YkZyYW1lV2l0aG91
dFVJIik7CisgICAgICAgIGF1dG8gdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJID0gdWlu
dDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM01lZGlhblN1YlJlc291cmNlV2l0
aG91dFVJIik7CisgICAgICAgIGF1dG8gdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRV
SSA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcDNNZWRpYW5VbmlxdWVS
ZWRpcmVjdHNXaXRob3V0VUkiKTsKKyAgICAgICAgYXV0byB0b3AzTWVkaWFuRGF0YVJlY29yZHNS
ZW1vdmVkV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9w
M01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSIpOwogCiAgICAgICAgIG1fdGVzdFJ1
bm5lci0+c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKG51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24s
IG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdG9wUHJl
dmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9u
LCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2Vy
SW50ZXJhY3Rpb24sIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSwgdG9wM01l
ZGlhblN1YkZyYW1lV2l0aG91dFVJLCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUksIHRv
cDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUksIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1Jl
bW92ZWRXaXRob3V0VUkpOwogICAgICAgICByZXR1cm47CkBAIC01NDEsMzEgKzUwMCw3IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkVycm9yIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBlcnJvck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVW5rbm93biIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBlcnJv
ck1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5LmdldCgpKTsKLX0KLQotYm9vbCBJ
bmplY3RlZEJ1bmRsZTo6Ym9vbGVhbkZvcktleShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwg
Y29uc3QgY2hhcioga2V5KQotewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0tleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoa2V5KSk7Ci0gICAgV0tUeXBl
UmVmIHZhbHVlID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShkaWN0aW9uYXJ5LCB3a0tleS5n
ZXQoKSk7Ci0gICAgaWYgKFdLR2V0VHlwZUlEKHZhbHVlKSAhPSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSkgewotICAgICAgICBvdXRwdXRUZXh0KG1ha2VTdHJpbmcoIkJvb2xlYW4gdmFsdWUgZm9yIGtl
eSIsIGtleSwgIiBub3QgZm91bmQgaW4gZGljdGlvbmFyeVxuIikpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KHZhbHVlKSk7Ci19Ci0KLVN0cmluZyBJbmplY3RlZEJ1bmRsZTo6c3RyaW5n
Rm9yS2V5KFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCi17Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhrZXkpKTsKLSAgICBXS1N0cmluZ1JlZiB2YWx1ZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHdr
S2V5LmdldCgpKSk7Ci0gICAgaWYgKCF2YWx1ZSkgewotICAgICAgICBvdXRwdXRUZXh0KG1ha2VT
dHJpbmcoIlN0cmluZyB2YWx1ZSBmb3Iga2V5Iiwga2V5LCAiIG5vdCBmb3VuZCBpbiBkaWN0aW9u
YXJ5XG4iKSk7Ci0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIH0KLSAgICByZXR1
cm4gdG9XVEZTdHJpbmcodmFsdWUpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXJyb3IiLCAiVW5r
bm93biIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpiZWdpblRlc3RpbmcoV0tEaWN0aW9u
YXJ5UmVmIHNldHRpbmdzLCBCZWdpbmdUZXN0aW5nTW9kZSB0ZXN0aW5nTW9kZSkKQEAgLTU5OCwx
MSArNTMzLDExIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmJlZ2luVGVzdGluZyhXS0RpY3Rpb25h
cnlSZWYgc2V0dGluZ3MsIEJlZ2luZ1Rlc3RpbmdNb2RlIHRlCiAgICAgV0tCdW5kbGVTZXRBbGxv
d1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTFMobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBmYWxzZSk7
CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFdLQnVuZGxlUGFnZVNldFVzZVRlc3Rp
bmdWaWV3cG9ydENvbmZpZ3VyYXRpb24ocGFnZSgpLT5wYWdlKCksICFib29sZWFuRm9yS2V5KHNl
dHRpbmdzLCAiVXNlRmxleGlibGVWaWV3cG9ydCIpKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRVc2VU
ZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKHBhZ2UoKS0+cGFnZSgpLCAhYm9vbGVhblZhbHVl
KHNldHRpbmdzLCAiVXNlRmxleGlibGVWaWV3cG9ydCIpKTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlc0ZvclRlc3Rpbmcoc3RyaW5nRm9yS2V5KHNldHRpbmdzLCAiYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXMiKSk7CisgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3RpbmcodG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUo
c2V0dGluZ3MsICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpKSk7CiAjZW5kaWYKIAog
ICAgIG1fdGVzdFJ1bm5lci0+c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7CkBAIC02NjAsMjUgKzU5
NSwxNSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkb25lKCkKICAgICBtX2FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLT5yZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiAjZW5kaWYKIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBkb25lTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJEb25lIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURp
Y3Rpb25hcnlSZWY+IGRvbmVNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdElz
UGVuZGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVs
UmVzdWx0SXNQZW5kaW5nIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcGl4ZWxS
ZXN1bHRJc1BlbmRpbmcgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX3BpeGVsUmVzdWx0SXNQ
ZW5kaW5nKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkb25lTWVzc2FnZUJvZHkuZ2V0KCks
IHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5LmdldCgpLCBwaXhlbFJlc3VsdElzUGVuZGluZy5nZXQo
KSk7Ci0KLSAgICBpZiAoIW1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpIHsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHQiKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCBwaXhlbFJlc3VsdEtleS5nZXQoKSwgbV9waXhl
bFJlc3VsdC5nZXQoKSk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJl
cGFpbnRSZWN0c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJl
cGFpbnRSZWN0cyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5n
ZXQoKSwgcmVwYWludFJlY3RzS2V5LmdldCgpLCBtX3JlcGFpbnRSZWN0cy5nZXQoKSk7CisgICAg
YXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwogCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF1ZGlvUmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXVkaW9SZXN1bHQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIGF1ZGlvUmVzdWx0S2V5LmdldCgpLCBtX2F1
ZGlvUmVzdWx0LmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUGl4ZWxSZXN1bHRJc1BlbmRp
bmciLCBtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKTsKKyAgICBpZiAoIW1fcGl4ZWxSZXN1bHRJc1Bl
bmRpbmcpCisgICAgICAgIHNldFZhbHVlKGJvZHksICJQaXhlbFJlc3VsdCIsIG1fcGl4ZWxSZXN1
bHQuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJSZXBhaW50UmVjdHMiLCBtX3JlcGFpbnRS
ZWN0cy5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIkF1ZGlvUmVzdWx0IiwgbV9hdWRpb1Jl
c3VsdC5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlT
eW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCksIGRvbmVNZXNzYWdlTmFtZS5nZXQoKSwgZG9u
ZU1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZUlnbm9yaW5n
RnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCksIHRvV0soIkRvbmUiKS5nZXQoKSwg
Ym9keS5nZXQoKSk7CiAKICAgICBjbG9zZU90aGVyUGFnZXMoKTsKIApAQCAtNjkxLDkgKzYxNiw4
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmNsb3NlT3RoZXJQYWdlcygpCiAgICAgc2l6ZV90IHNp
emUgPSBtX3BhZ2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsr
aSkKICAgICAgICAgcGFnZXNUb0Nsb3NlLmFwcGVuZChtX3BhZ2VzW2ldLT5wYWdlKCkpOwotICAg
IHNpemUgPSBwYWdlc1RvQ2xvc2Uuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBXS0J1bmRsZVBhZ2VDbG9zZShwYWdlc1RvQ2xvc2VbaV0pOwor
ICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2VzVG9DbG9zZSkKKyAgICAgICAgV0tCdW5kbGVQYWdl
Q2xvc2UocGFnZSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmR1bXBCYWNrRm9yd2FyZExp
c3RzRm9yQWxsUGFnZXMoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKQEAgLTcwOSwxMyAr
NjMzLDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZHVtcFRvU3RkRXJyKGNvbnN0IFN0cmluZyYg
b3V0cHV0KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG91dHB1dC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wVG9TdGRFcnIiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5OwotICAgIGlmIChhdXRvIHV0
ZjggPSBvdXRwdXQudHJ5R2V0VXRmOCgpKQotICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodXRmOC0+ZGF0YSgpKSk7Ci0gICAgZWxzZQot
ICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk91dCBvZiBtZW1vcnlcbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAv
LyBGSVhNRTogRG8gd2UgcmVhbGx5IGhhdmUgdG8gY29udmVydCB0byBVVEYtOCBpbnN0ZWFkIG9m
IHVzaW5nIHRvV0s/CisgICAgYXV0byBzdHJpbmcgPSBvdXRwdXQudHJ5R2V0VXRmOCgpOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiRHVtcFRvU3RkRXJyIiwgc3RyaW5nID8gc3RyaW5nLT5kYXRhKCkg
OiAiT3V0IG9mIG1lbW9yeVxuIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6Om91dHB1dFRl
eHQoY29uc3QgU3RyaW5nJiBvdXRwdXQpCkBAIC03MjQsMjgwICs2NDQsMTU1IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6Om91dHB1dFRleHQoY29uc3QgU3RyaW5nJiBvdXRwdXQpCiAgICAgICAgIHJl
dHVybjsKICAgICBpZiAob3V0cHV0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlRleHRPdXRwdXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VCb2R5OwotICAgIGlmIChhdXRvIHV0ZjggPSBvdXRwdXQudHJ5R2V0VXRm
OCgpKQotICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcodXRmOC0+ZGF0YSgpKSk7Ci0gICAgZWxzZQotICAgICAgICBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk91dCBvZiBtZW1vcnlcbiIp
KTsKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IGhhdmUgdG8gY29udmVydCB0byBVVEYtOCBp
bnN0ZWFkIG9mIHVzaW5nIHRvV0s/CisgICAgYXV0byBzdHJpbmcgPSBvdXRwdXQudHJ5R2V0VXRm
OCgpOwogICAgIC8vIFdlIHVzZSBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlT
eW5jaHJvbm91c01vZGUoKSBpbnN0ZWFkIG9mIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKCkgdG8g
bWFrZSBzdXJlIHRoYXQgYWxsIHRleHQgb3V0cHV0CiAgICAgLy8gaXMgZG9uZSB2aWEgYXN5bmNo
cm9ub3VzIElQQywgZXZlbiBpZiB0aGUgY29ubmVjdGlvbiBpcyBpbiBmdWxseSBzeW5jaHJvbm91
cyBtb2RlIGR1ZSB0byBhIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0
aW5nKCkKICAgICAvLyBjYWxsLiBPdGhlcndpc2UsIG1lc3NhZ2VzIGxvZ2dlZCB2aWEgc3luYyBh
bmQgYXN5bmMgSVBDIG1heSBlbmQgdXAgb3V0IG9mIG9yZGVyIGFuZCBjYXVzZSBmbGFraW5lc3Mu
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNNb2Rl
KHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwor
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShw
YWdlKCktPnBhZ2UoKSwgdG9XSygiVGV4dE91dHB1dCIpLmdldCgpLCB0b1dLKHN0cmluZyA/IHN0
cmluZy0+ZGF0YSgpIDogIk91dCBvZiBtZW1vcnlcbiIpLmdldCgpKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2wgdmFsdWUpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHZhbHVlKSkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0QWRkQ2hy
b21lSW5wdXRGaWVsZCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWRkQ2hyb21lSW5w
dXRGaWVsZCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQWRkQ2hyb21lSW5w
dXRGaWVsZCIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0UmVtb3ZlQ2hyb21lSW5w
dXRGaWVsZCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVtb3ZlQ2hyb21lSW5wdXRG
aWVsZCIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUmVtb3ZlQ2hyb21lSW5w
dXRGaWVsZCIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0Rm9jdXNXZWJWaWV3KCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJGb2N1c1dlYlZpZXciKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIkZvY3VzV2ViVmlldyIpOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlOjpwb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0
b3IpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QmFja2luZ1NjYWxlRmFjdG9yIikp
OwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tE
b3VibGVDcmVhdGUoYmFja2luZ1NjYWxlRmFjdG9yKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRCYWNraW5nU2NhbGVGYWN0b3IiLCBhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKGJhY2tpbmdTY2FsZUZhY3RvcikpKTsKIH0KIAogdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6cG9zdFNldFdpbmRvd0lzS2V5KGJvb2wgaXNLZXkpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0V2luZG93SXNLZXkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzS2V5KSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRv
V0soIlNldFdpbmRvd0lzS2V5IikuZ2V0KCksIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzS2V5
KSkuZ2V0KCksIDApOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0Vmlld1NpemUo
ZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFZpZXdTaXplIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdpZHRoS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygid2lkdGgiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlaWdodEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImhlaWdodCIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHdpZHRoV0sgPSBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHdpZHRoKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNz
YWdlQm9keS5nZXQoKSwgd2lkdGhLZXkuZ2V0KCksIHdpZHRoV0suZ2V0KCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tEb3VibGVSZWY+IGhlaWdodFdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSho
ZWlnaHQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBoZWln
aHRLZXkuZ2V0KCksIGhlaWdodFdLLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAid2lkdGgiLCB3aWR0
aCk7CisgICAgc2V0VmFsdWUoYm9keSwgImhlaWdodCIsIGhlaWdodCk7CisgICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0so
IlNldFZpZXdTaXplIikuZ2V0KCksIGJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlOjpwb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayh1aW50NjRfdCBub3RpZmlj
YXRpb25JRCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTaW11bGF0ZVdlYk5vdGlmaWNh
dGlvbkNsaWNrIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobm90aWZpY2F0aW9uSUQpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNpbXVsYXRlV2ViTm90aWZpY2F0aW9u
Q2xpY2siLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG5vdGlmaWNhdGlvbklEKSkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0U2V0QWRkc1Zpc2l0ZWRMaW5rcyhib29sIGFkZHNWaXNp
dGVkTGlua3MpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWRkc1Zpc2l0ZWRMaW5r
cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoYWRkc1Zpc2l0ZWRMaW5rcykpOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0QWRkc1Zpc2l0ZWRMaW5rcyIsIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGFkZHNWaXNpdGVkTGlua3MpKSk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShlbmFibGVkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJTZXRHZW9sb2NhdGlvblBlcm1pc3Npb24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShlbmFibGVkKSkpOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1
cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRl
c0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVl
ZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJsZSBmbG9vckxldmVsKQordm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBk
b3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1
ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBo
ZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25hbDxkb3VibGU+IGZsb29yTGV2
ZWwpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24iKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBsYXRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygibGF0aXR1ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVS
ZWY+IGxhdGl0dWRlV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGxhdGl0dWRlKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgbGF0aXR1ZGVLZXlXSy5nZXQo
KSwgbGF0aXR1ZGVXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbG9u
Z2l0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsb25n
aXR1ZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGxvbmdpdHVkZVdLID0gYWRv
cHRXSyhXS0RvdWJsZUNyZWF0ZShsb25naXR1ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KG1lc3NhZ2VCb2R5LmdldCgpLCBsb25naXR1ZGVLZXlXSy5nZXQoKSwgbG9uZ2l0dWRlV0suZ2V0
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFjY3VyYWN5S2V5V0sgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2N1cmFjeSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RvdWJsZVJlZj4gYWNjdXJhY3lXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUo
YWNjdXJhY3kpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBh
Y2N1cmFjeUtleVdLLmdldCgpLCBhY2N1cmFjeVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBwcm92aWRlc0FsdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0FsdGl0dWRlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gcHJvdmlkZXNBbHRpdHVkZVdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUocHJvdmlkZXNBbHRpdHVkZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJv
ZHkuZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVLZXlXSy5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZVdL
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbHRpdHVkZUtleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWx0aXR1ZGUiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGFsdGl0dWRlV0sgPSBhZG9wdFdLKFdLRG91YmxlQ3Jl
YXRlKGFsdGl0dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgYWx0aXR1ZGVLZXlXSy5nZXQoKSwgYWx0aXR1ZGVXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5S2V5V0sgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ki
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3lXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSkp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lXSy5nZXQo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0aXR1ZGVBY2N1cmFjeUtleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWx0aXR1ZGVBY2N1cmFj
eSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gYWx0aXR1ZGVBY2N1cmFjeVdLID0g
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShhbHRpdHVkZUFjY3VyYWN5KSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgp
LCBhbHRpdHVkZUFjY3VyYWN5V0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHByb3ZpZGVzSGVhZGluZ0tleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygicHJvdmlkZXNIZWFkaW5nIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gcHJvdmlkZXNIZWFkaW5nV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92aWRlc0hl
YWRpbmcpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwcm92
aWRlc0hlYWRpbmdLZXlXSy5nZXQoKSwgcHJvdmlkZXNIZWFkaW5nV0suZ2V0KCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlYWRpbmdLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImhlYWRpbmciKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3Vi
bGVSZWY+IGhlYWRpbmdXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoaGVhZGluZykpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGhlYWRpbmdLZXlXSy5nZXQo
KSwgaGVhZGluZ1dLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92
aWRlc1NwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJw
cm92aWRlc1NwZWVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcHJvdmlkZXNT
cGVlZFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNTcGVlZCkpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzU3BlZWRLZXlXSy5n
ZXQoKSwgcHJvdmlkZXNTcGVlZFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzcGVlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
c3BlZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHNwZWVkV0sgPSBhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKHNwZWVkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdl
Qm9keS5nZXQoKSwgc3BlZWRLZXlXSy5nZXQoKSwgc3BlZWRXSy5nZXQoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNGbG9vckxldmVsS2V5V0sgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc0Zsb29yTGV2ZWwiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwcm92aWRlc0Zsb29yTGV2ZWxXSyA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzRmxvb3JMZXZlbCkpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHByb3ZpZGVzRmxvb3JMZXZlbEtleVdLLmdldCgpLCBw
cm92aWRlc0Zsb29yTGV2ZWxXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZmxvb3JMZXZlbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiZmxvb3JMZXZlbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gZmxvb3JMZXZl
bFdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShmbG9vckxldmVsKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgZmxvb3JMZXZlbEtleVdLLmdldCgpLCBmbG9v
ckxldmVsV0suZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgYXV0byBi
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVl
KGJvZHksICJsYXRpdHVkZSIsIGxhdGl0dWRlKTsKKyAgICBzZXRWYWx1ZShib2R5LCAibG9uZ2l0
dWRlIiwgbG9uZ2l0dWRlKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiYWNjdXJhY3kiLCBhY2N1cmFj
eSk7CisgICAgc2V0VmFsdWUoYm9keSwgImFsdGl0dWRlIiwgYWx0aXR1ZGUpOworICAgIHNldFZh
bHVlKGJvZHksICJhbHRpdHVkZUFjY3VyYWN5IiwgYWx0aXR1ZGVBY2N1cmFjeSk7CisgICAgc2V0
VmFsdWUoYm9keSwgImhlYWRpbmciLCBoZWFkaW5nKTsKKyAgICBzZXRWYWx1ZShib2R5LCAic3Bl
ZWQiLCBzcGVlZCk7CisgICAgc2V0VmFsdWUoYm9keSwgImZsb29yTGV2ZWwiLCBmbG9vckxldmVs
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIiwgYm9k
eSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
VW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9y
IikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIsIGVycm9yTWVzc2FnZSk7CiB9CiAK
IGJvb2wgSW5qZWN0ZWRCdW5kbGU6OmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIp
KTsKLSAgICBXS1R5cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIDAsICZyZXN1bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
aXNBY3RpdmUgPSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdWx0VG9QYXNz
KSk7Ci0KLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoaXNBY3RpdmUuZ2V0KCkpOworICAg
IFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJJc0dlb2xvY2F0aW9u
Q2xpZW50QWN0aXZlIikuZ2V0KCksIDAsICZyZXN1bHQpOworICAgIHJldHVybiBib29sZWFuVmFs
dWUoYWRvcHRXSyhyZXN1bHQpLmdldCgpKTsKIH0KIAogdW5zaWduZWQgSW5qZWN0ZWRCdW5kbGU6
OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCIpKTsKLSAgICBXS1R5cGVS
ZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsICZyZXN1
bHRUb1Bhc3MpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBpbWFnZUNvdW50ID0gYWRv
cHRXSyhzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4ocmVzdWx0VG9QYXNzKSk7Ci0gICAgCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdldFZhbHVlKGltYWdlQ291bnQu
Z2V0KCkpKTsKKyAgICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygi
SW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQiKS5nZXQoKSwgMCwgJnJlc3VsdCk7CisgICAg
cmV0dXJuIHVpbnQ2NFZhbHVlKGFkb3B0V0socmVzdWx0KS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewotICAg
IGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3Nh
Z2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRVc2VyTWVkaWFQZXJtaXNzaW9uIiwgYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVz
ZXRVc2VyTWVkaWFQZXJtaXNzaW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9u
IikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJSZXNldFVzZXJNZWRpYVBlcm1p
c3Npb24iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVyc2lzdGVu
dFBlcm1pc3Npb25Gb3JPcmlnaW4oYm9vbCBwZXJtaXNzaW9uLCBXS1N0cmluZ1JlZiBvcmlnaW4s
IFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0VXNlck1lZGlhUGVyc2lzdGVu
dFBlcm1pc3Npb25Gb3JPcmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGVybWlzc2lvbktleVdLID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGVybWlzc2lvbiIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBlcm1pc3Npb25XSyA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHBlcm1pc3Npb24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5
LmdldCgpLCBwZXJtaXNzaW9uS2V5V0suZ2V0KCksIHBlcm1pc3Npb25XSy5nZXQoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShtZXNzYWdlQm9keS5nZXQoKSwgb3JpZ2luS2V5V0suZ2V0KCksIG9yaWdpbik7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGFyZW50T3JpZ2luS2V5V0suZ2V0KCksIHBh
cmVudE9yaWdpbik7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9k
eSwgInBlcm1pc3Npb24iLCBwZXJtaXNzaW9uKTsKKyAgICBzZXRWYWx1ZShib2R5LCAib3JpZ2lu
Iiwgb3JpZ2luKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGFyZW50T3JpZ2luIiwgcGFyZW50T3Jp
Z2luKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNz
aW9uRm9yT3JpZ2luIiwgYm9keSk7CiB9CiAKIHVuc2lnbmVkIEluamVjdGVkQnVuZGxlOjp1c2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKFdLU3RyaW5nUmVmIG9yaWdpbiwg
V0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4iKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gb3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJv
cmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgb3Jp
Z2luS2V5V0suZ2V0KCksIG9yaWdpbik7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
cGFyZW50T3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5n
ZXQoKSwgcGFyZW50T3JpZ2luS2V5V0suZ2V0KCksIHBhcmVudE9yaWdpbik7Ci0KLSAgICBXS1R5
cGVSZWYgcmVzdWx0VG9QYXNzID0gMDsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCAmcmVzdWx0VG9QYXNzKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4gY291bnQgPSBhZG9wdFdLKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXN1bHRUb1Bhc3Mp
KTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShj
b3VudC5nZXQoKSkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAib3JpZ2luIiwgb3JpZ2luKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAicGFyZW50T3JpZ2luIiwgcGFyZW50T3JpZ2luKTsKKyAgICBXS1R5cGVS
ZWYgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RDb3VudEZvck9yaWdpbiIpLmdldCgpLCBib2R5LmdldCgpLCAmcmVzdWx0KTsKKyAgICBy
ZXR1cm4gdWludDY0VmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdldCgpKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6cmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2lu
KFdLU3RyaW5nUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZv
ck9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1l
c3NhZ2VCb2R5LmdldCgpLCBvcmlnaW5LZXlXSy5nZXQoKSwgb3JpZ2luKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwYXJlbnRPcmlnaW5LZXlXSy5nZXQoKSwgcGFyZW50
T3JpZ2luKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
b3JpZ2luIiwgb3JpZ2luKTsKKyAgICBzZXRWYWx1ZShib2R5LCAicGFyZW50T3JpZ2luIiwgcGFy
ZW50T3JpZ2luKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJlc2V0VXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RDb3VudEZvck9yaWdpbiIsIGJvZHkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
OjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVybWlzc2l2ZSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSIpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGVuYWJsZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImVuYWJsZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBlbmFi
bGVkV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgZW5hYmxlZEtleVdLLmdldCgpLCBlbmFibGVk
V0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBlcm1pc3NpdmVLZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBlcm1pc3NpdmUiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwZXJtaXNzaXZlV0sgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShwZXJtaXNzaXZlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNz
YWdlQm9keS5nZXQoKSwgcGVybWlzc2l2ZUtleVdLLmdldCgpLCBwZXJtaXNzaXZlV0suZ2V0KCkp
OwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJlbmFibGVk
IiwgZW5hYmxlZCk7CisgICAgc2V0VmFsdWUoYm9keSwgInBlcm1pc3NpdmUiLCBwZXJtaXNzaXZl
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEN1c3RvbVBvbGljeURlbGVnYXRlIiwgYm9keSk7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEhpZGRlbihib29sIGhpZGRlbikKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRIaWRkZW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNJbml0aWFs
S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoaWRkZW4iKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBpc0luaXRpYWxXSyA9IGFkb3B0V0soV0tC
b29sZWFuQ3JlYXRlKGhpZGRlbikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJv
ZHkuZ2V0KCksIGlzSW5pdGlhbEtleVdLLmdldCgpLCBpc0luaXRpYWxXSy5nZXQoKSk7Ci0KLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgImhpZGRlbiIsIGhpZGRl
bik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRIaWRkZW4iLCBib2R5LmdldCgpKTsKIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0Q2FjaGVNb2RlbChpbnQgbW9kZWwpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0Q2FjaGVNb2RlbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJ
bnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGVsKSk7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5w
YWdlKCksIHRvV0soIlNldENhY2hlTW9kZWwiKS5nZXQoKSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShtb2RlbCkpLmdldCgpLCBudWxscHRyKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZTo6c2hv
dWxkUHJvY2Vzc1dvcmtRdWV1ZSgpIGNvbnN0CkBAIC0xMDA1LDExMCArODAwLDczIEBAIGJvb2wg
SW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nlc3NXb3JrUXVldWUoKSBjb25zdAogICAgIGlmICgh
bV91c2VXb3JrUXVldWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIklzV29ya1F1ZXVlRW1wdHkiKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VsdFRvUGFz
cyA9IDA7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCAmcmVzdWx0VG9QYXNzKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlzRW1wdHkgPSBhZG9wdFdLKHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4ocmVzdWx0VG9QYXNzKSk7CisgICAgV0tUeXBlUmVmIHJlc3VsdCA9IG51
bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
cGFnZSgpLT5wYWdlKCksIHRvV0soIklzV29ya1F1ZXVlRW1wdHkiKS5nZXQoKSwgMCwgJnJlc3Vs
dCk7CiAKICAgICAvLyBUaGUgSVBDIGZhaWxlZC4gVGhpcyBoYXBwZW5zIHdoZW4gc3dhcHBpbmcg
cHJvY2Vzc2VzIG9uIG5hdmlnYXRpb24gYmVjYXVzZSB0aGUgV2ViUGFnZVByb3h5IHVucmVnaXN0
ZXJzIGl0c2VsZgogICAgIC8vIGFzIGEgTWVzc2FnZVJlY2VpdmVyIGZyb20gdGhlIG9sZCBXZWJQ
cm9jZXNzUHJveHkgYW5kIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBuZXcgV2ViUHJvY2Vzc1By
b3h5IGluc3RlYWQuCi0gICAgaWYgKCFpc0VtcHR5KQorICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gIVdLQm9vbGVhbkdldFZhbHVlKGlzRW1wdHku
Z2V0KCkpOworICAgIGF1dG8gaXNFbXB0eSA9IGJvb2xlYW5WYWx1ZShhZG9wdFdLKHJlc3VsdCku
Z2V0KCkpOworICAgIHJldHVybiAhaXNFbXB0eTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6
cHJvY2Vzc1dvcmtRdWV1ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUHJvY2Vzc1dv
cmtRdWV1ZSIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUHJvY2Vzc1dvcmtR
dWV1ZSIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKHVu
c2lnbmVkIGhvd0ZhckJhY2t3YXJkKQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlQmFja05hdmlnYXRpb24iKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShob3dGYXJCYWNrd2FyZCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiUXVldWVCYWNrTmF2aWdhdGlvbiIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
aG93RmFyQmFja3dhcmQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlRm9yd2Fy
ZE5hdmlnYXRpb24odW5zaWduZWQgaG93RmFyRm9yd2FyZCkKIHsKICAgICBtX3VzZVdvcmtRdWV1
ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1ZUZvcndhcmROYXZpZ2F0
aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoaG93RmFyRm9yd2FyZCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVGb3J3YXJkTmF2aWdhdGlvbiIsIGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoaG93RmFyRm9yd2FyZCkpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6cXVldWVMb2FkKFdLU3RyaW5nUmVmIHVybCwgV0tTdHJpbmdSZWYgdGFyZ2V0LCBib29s
IHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVMb2FkIikpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbG9hZERhdGEgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidXJsIikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIHVybEtleS5nZXQoKSwgdXJsKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0YXJnZXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0YXJnZXQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShsb2FkRGF0YS5nZXQoKSwgdGFyZ2V0S2V5LmdldCgpLCB0YXJnZXQpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzaG91bGRPcGVuRXh0ZXJuYWxVUkxzIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gc2hvdWxkT3BlbkV4dGVybmFsVVJMc1ZhbHVl
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkT3BlbkV4dGVybmFsVVJMcykpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIHNob3VsZE9wZW5FeHRlcm5hbFVS
THNLZXkuZ2V0KCksIHNob3VsZE9wZW5FeHRlcm5hbFVSTHNWYWx1ZS5nZXQoKSk7Ci0KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IGxvYWREYXRhLmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgInVybCIsIHVybCk7CisgICAgc2V0
VmFsdWUoYm9keSwgInRhcmdldCIsIHRhcmdldCk7CisgICAgc2V0VmFsdWUoYm9keSwgInNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHMiLCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIlF1ZXVlTG9hZCIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKFdLU3RyaW5nUmVmIGNvbnRlbnQsIFdLU3RyaW5nUmVm
IGJhc2VVUkwsIFdLU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQogewogICAgIG1fdXNlV29ya1F1
ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlTG9hZEhUTUxTdHJp
bmciKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBsb2FkRGF0
YSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBjb250ZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiY29udGVudCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRh
LmdldCgpLCBjb250ZW50S2V5LmdldCgpLCBjb250ZW50KTsKLQotICAgIGlmIChiYXNlVVJMKSB7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBiYXNlVVJMS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYmFzZVVSTCIpKTsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgYmFzZVVSTEtleS5nZXQoKSwgYmFzZVVSTCk7
Ci0gICAgfQotCi0gICAgaWYgKHVucmVhY2hhYmxlVVJMKSB7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJsZVVSTEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoInVucmVhY2hhYmxlVVJMIikpOwotICAgICAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKGxvYWREYXRhLmdldCgpLCB1bnJlYWNoYWJsZVVSTEtleS5nZXQoKSwgdW5yZWFjaGFi
bGVVUkwpOwotICAgIH0KLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbG9hZERhdGEuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiY29udGVudCIsIGNvbnRlbnQpOworICAgIGlmIChiYXNlVVJMKQorICAgICAgICBzZXRWYWx1
ZShib2R5LCAiYmFzZVVSTCIsIGJhc2VVUkwpOworICAgIGlmICh1bnJlYWNoYWJsZVVSTCkKKyAg
ICAgICAgc2V0VmFsdWUoYm9keSwgInVucmVhY2hhYmxlVVJMIiwgdW5yZWFjaGFibGVVUkwpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiUXVldWVMb2FkSFRNTFN0cmluZyIsIGJvZHkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZVJlbG9hZCgpCiB7CiAgICAgbV91c2VXb3JrUXVldWUg
PSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVSZWxvYWQiKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlUmVsb2FkIik7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZGluZ1NjcmlwdChXS1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAg
ICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVl
dWVMb2FkaW5nU2NyaXB0IikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgc2NyaXB0KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IlF1ZXVlTG9hZGluZ1NjcmlwdCIsIHNjcmlwdCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChXS1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgbV91c2VX
b3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUXVldWVOb25Mb2Fk
aW5nU2NyaXB0IikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgc2NyaXB0KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVl
Tm9uTG9hZGluZ1NjcmlwdCIsIHNjcmlwdCk7CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGU6Omlz
QWxsb3dlZEhvc3QoV0tTdHJpbmdSZWYgaG9zdCkKQEAgLTExNDMsNCArOTAxLDcyIEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoKQogICAgIG1fdGVzdFJ1bm5l
ci0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZ0NhbGxiYWNrKCk7CiB9CiAKK3ZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgYm9keSkK
K3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG5hbWUsIGJvZHkpOworfQor
Cit2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwg
Y29uc3QgY2hhciogYm9keSkKK3sKKyAgICBwb3N0UGFnZU1lc3NhZ2UobmFtZSwgdG9XSyhib2R5
KSk7Cit9CisKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZh
bHVlKQoreworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgcG9zdE1l
c3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgdmFsdWUpCit7CisgICAgcG9zdE1lc3Nh
Z2UobmFtZSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwordm9p
ZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1
ZSkKK3sKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSwgbnVsbHB0cik7
Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29s
IHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZShjb25zdCBjaGFyKiBuYW1lLCB1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBwb3N0U3luY2hy
b25vdXNNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUodmFsdWUpKS5nZXQoKSk7
Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNp
Z25lZCB2YWx1ZSkKK3sKKyAgICB1aW50NjRfdCBwcm9tb3RlZFZhbHVlID0gdmFsdWU7CisgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZShuYW1lLCBwcm9tb3RlZFZhbHVlKTsKK30KKwordm9pZCBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSkKK3sK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUo
dmFsdWUpKS5nZXQoKSk7Cit9CisKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5h
bWUsIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKSkKKyAgICAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
cGFnZS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgcG9zdFBh
Z2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQor
Cit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlw
ZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKSkKKyAgICAgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcocGFnZS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2YWx1ZSwgbnVsbHB0
cik7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFt
ZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZShuYW1lLCBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlLmgKaW5kZXggYjc2MDE0MzZmMGM2NzI4NTYzM2EwOGUyNWY5NDJhOGFh
OThkOTcwYi4uOGFlNmFhMjgwYTBkOTFhYmJhMjEzZjU0YmVhYmU3MDJiMTRlMjUyNiAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuaApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBHZW9sb2NhdGlvbi4K
ICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sKTsKLSAgICB2b2lkIHNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwg
Ym9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwg
ZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwp
OworICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBk
b3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1
ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBo
ZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25hbDxkb3VibGU+IGZsb29yTGV2
ZWwpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9y
KFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSk7CiAgICAgYm9vbCBpc0dlb2xvY2F0aW9uUHJvdmlk
ZXJBY3RpdmUoKSBjb25zdDsKIApAQCAtMTY5LDggKzE2OSwxMyBAQCBwcml2YXRlOgogICAgIGVu
dW0gY2xhc3MgQmVnaW5nVGVzdGluZ01vZGUgeyBOZXcsIFJlc3VtZSB9OwogICAgIHZvaWQgYmVn
aW5UZXN0aW5nKFdLRGljdGlvbmFyeVJlZiBpbml0aWFsU2V0dGluZ3MsIEJlZ2luZ1Rlc3RpbmdN
b2RlKTsKIAotICAgIGJvb2wgYm9vbGVhbkZvcktleShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNo
YXIqIGtleSk7Ci0gICAgU3RyaW5nIHN0cmluZ0ZvcktleShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0
IGNoYXIqIGtleSk7CisgICAgc3RhdGljIHZvaWQgcG9zdFBhZ2VNZXNzYWdlKFdLQnVuZGxlUGFn
ZVJlZiwgY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIGJvZHkpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHBvc3RQYWdlTWVzc2FnZShXS0J1bmRsZVBhZ2VSZWYsIGNv
bnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWluUHRyPFQ+JiBib2R5KTsKKyAgICBzdGF0aWMg
dm9pZCBwb3N0UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmLCBjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBjaGFyKiBib2R5KTsKKworICAgIHZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIq
IG5hbWUsIFdLVHlwZVJlZiBib2R5ID0gbnVsbHB0cik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5Q
dHI8VD4mIGJvZHkpOworICAgIHZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUs
IGNvbnN0IGNoYXIqIGJvZHkpOwogCiAgICAgV0tCdW5kbGVSZWYgbV9idW5kbGUgeyBudWxscHRy
IH07CiAgICAgV0tCdW5kbGVQYWdlR3JvdXBSZWYgbV9wYWdlR3JvdXAgeyBudWxscHRyIH07CkBA
IC0yMTAsNCArMjE1LDMzIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fdXNlclNjcmlwdEluamVj
dGVkQ291bnQgeyAwIH07CiB9OwogCit2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUs
IFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFy
KiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSk7Cit2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5h
bWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNv
bnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVpbnQ2NF90IHZhbHVlKTsKK3Zv
aWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1
ZSk7Cit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgZG91Ymxl
IHZhbHVlKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBjaGFyKiB2YWx1ZSk7CisKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5h
bWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29u
c3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBj
aGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFn
ZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cik7Cit2
b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFs
dWUpOwordm9pZCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBjaGFyKiB2YWx1ZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIElu
amVjdGVkQnVuZGxlOjpwb3N0UGFnZU1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWluUHRyPFQ+JiBib2R5KQoreworICAgIHBvc3RQYWdl
TWVzc2FnZShwYWdlLCBuYW1lLCBib2R5LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUs
IGNvbnN0IFdLUmV0YWluUHRyPFQ+JiBib2R5KQoreworICAgIHBvc3RQYWdlTWVzc2FnZShuYW1l
LCBib2R5LmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFn
ZS5jcHAKaW5kZXggZDg5ZmVhZjliNmRhZTRjOTY4NTMxZjBhYjYzODU4OTFiMTRmOThmOC4uMmY1
NjQyNzczMTE2ZDlmMTAyNGZhNmZiZTlkYzM1MjBiMTVlMThhOSAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlLmNwcApAQCAtNjAsNTAgKzYwLDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVz
cGFjZSBXVFIgewogCi1zdGF0aWMgSlNWYWx1ZVJlZiBwcm9wZXJ0eVZhbHVlKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkK
K3N0YXRpYyBkb3VibGUgbnVtZXJpY1dpbmRvd1Byb3BlcnR5KFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVy
biAwOwotICAgIGF1dG8gcHJvcGVydHlOYW1lU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcocHJvcGVydHlOYW1lKSk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0R2V0UHJv
cGVydHkoY29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWVTdHJpbmcuZ2V0KCksIDApOwotfQot
Ci1zdGF0aWMgZG91YmxlIHByb3BlcnR5VmFsdWVEb3VibGUoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQotewotICAgIEpT
VmFsdWVSZWYgdmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIG9iamVjdCwgcHJvcGVydHlO
YW1lKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCAwKTsgICAgCi19Ci0KLXN0YXRpYyBpbnQgcHJv
cGVydHlWYWx1ZUludChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBj
b25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
cHJvcGVydHlWYWx1ZURvdWJsZShjb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZSkpOyAgICAK
LX0KLQotc3RhdGljIGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZShXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lLCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgSlNHbG9iYWxD
b250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJh
bWUpOwotICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlRG91YmxlKGNvbnRleHQsIEpTQ29udGV4dEdl
dEdsb2JhbE9iamVjdChjb250ZXh0KSwgcHJvcGVydHlOYW1lKTsKKyAgICBhdXRvIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOworICAgIHJldHVybiBu
dW1lcmljUHJvcGVydHkoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQp
LCBuYW1lKTsKIH0KIAogc3RhdGljIFdURjo6U3RyaW5nIGR1bXBQYXRoKEpTR2xvYmFsQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBub2RlVmFsdWUpCiB7Ci0gICAgSlNWYWx1ZVJlZiBu
b2RlTmFtZVZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBub2RlVmFsdWUsICJub2RlTmFt
ZSIpOwotICAgIGF1dG8ganNTdHJpbmdOb2RlTmFtZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgbm9kZU5hbWVWYWx1ZSwgMCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBub2RlTmFtZSA9IHRvV0soanNTdHJpbmdOb2RlTmFtZSk7Ci0KLSAgICBKU1ZhbHVlUmVm
IHBhcmVudE5vZGUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIG5vZGVWYWx1ZSwgInBhcmVudE5v
ZGUiKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub2RlTmFtZSkpOwotCi0gICAgaWYgKHBhcmVudE5vZGUg
JiYgSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHBhcmVudE5vZGUpKSB7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiID4gIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGR1bXBQYXRoKGNvbnRleHQsIChKU09iamVjdFJlZilwYXJlbnROb2RlKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBhdXRvIG5hbWUgPSB0
b1dURlN0cmluZyhzdHJpbmdQcm9wZXJ0eShjb250ZXh0LCBub2RlVmFsdWUsICJub2RlTmFtZSIp
KTsKKyAgICBpZiAoYXV0byBwYXJlbnROb2RlID0gb2JqZWN0UHJvcGVydHkoY29udGV4dCwgbm9k
ZVZhbHVlLCAicGFyZW50Tm9kZSIpKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhuYW1lLCAi
ID4gIiwgZHVtcFBhdGgoY29udGV4dCwgcGFyZW50Tm9kZSkpOworICAgIHJldHVybiBuYW1lOwog
fQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgZHVtcFBhdGgoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
QnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlKQpA
QCAtMTI2LDUzICs5NCw0MCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgcmFuZ2VUb1N0cihXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZAogICAgIGlmICghcmFu
Z2VSZWYpCiAgICAgICAgIHJldHVybiAiKG51bGwpIjsKIAotICAgIFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0KLSAgICBKU0dsb2JhbENv
bnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldv
cmxkKGZyYW1lLCB3b3JsZCk7Ci0gICAgSlNWYWx1ZVJlZiByYW5nZVZhbHVlID0gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRXcmFwcGVyRm9yUmFuZ2VGb3JXb3JsZChmcmFtZSwgcmFuZ2VSZWYs
IHdvcmxkKTsKKyAgICBhdXRvIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2Up
OworICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZv
cldvcmxkKGZyYW1lLCB3b3JsZCk7CisgICAgYXV0byByYW5nZVZhbHVlID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRXcmFwcGVyRm9yUmFuZ2VGb3JXb3JsZChmcmFtZSwgcmFuZ2VSZWYsIHdv
cmxkKTsKICAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHJhbmdlVmFsdWUpKTsK
LSAgICBKU09iamVjdFJlZiByYW5nZU9iamVjdCA9IChKU09iamVjdFJlZilyYW5nZVZhbHVlOwot
Ci0gICAgSlNWYWx1ZVJlZiBzdGFydE5vZGVWYWx1ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwg
cmFuZ2VPYmplY3QsICJzdGFydENvbnRhaW5lciIpOwotICAgIEFTU0VSVChKU1ZhbHVlSXNPYmpl
Y3QoY29udGV4dCwgc3RhcnROb2RlVmFsdWUpKTsKLSAgICBKU09iamVjdFJlZiBzdGFydE5vZGVP
YmplY3QgPSAoSlNPYmplY3RSZWYpc3RhcnROb2RlVmFsdWU7Ci0KLSAgICBKU1ZhbHVlUmVmIGVu
ZE5vZGVWYWx1ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRDb250
YWluZXIiKTsKLSAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGVuZE5vZGVWYWx1
ZSkpOwotICAgIEpTT2JqZWN0UmVmIGVuZE5vZGVPYmplY3QgPSAoSlNPYmplY3RSZWYpZW5kTm9k
ZVZhbHVlOwotCi0gICAgaW50IHN0YXJ0T2Zmc2V0ID0gcHJvcGVydHlWYWx1ZUludChjb250ZXh0
LCByYW5nZU9iamVjdCwgInN0YXJ0T2Zmc2V0Iik7Ci0gICAgaW50IGVuZE9mZnNldCA9IHByb3Bl
cnR5VmFsdWVJbnQoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRPZmZzZXQiKTsKLQotICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoInJhbmdlIGZyb20gIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoc3RhcnRP
ZmZzZXQpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG9mICIpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGR1bXBQYXRoKGNvbnRleHQsIHN0YXJ0Tm9kZU9iamVjdCkpOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvICIpOwotICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTnVtYmVyKGVuZE9mZnNldCk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgb2YgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4dCwg
ZW5kTm9kZU9iamVjdCkpOwotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cisg
ICAgYXV0byByYW5nZU9iamVjdCA9IChKU09iamVjdFJlZilyYW5nZVZhbHVlOworCisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoInJhbmdlIGZyb20gIiwKKyAgICAgICAgbnVtZXJpY1Byb3BlcnR5KGNv
bnRleHQsIHJhbmdlT2JqZWN0LCAic3RhcnRPZmZzZXQiKSwKKyAgICAgICAgIiBvZiAiLAorICAg
ICAgICBkdW1wUGF0aChjb250ZXh0LCBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCByYW5nZU9iamVj
dCwgInN0YXJ0Q29udGFpbmVyIikpLAorICAgICAgICAiIHRvICIsCisgICAgICAgIG51bWVyaWNQ
cm9wZXJ0eShjb250ZXh0LCByYW5nZU9iamVjdCwgImVuZE9mZnNldCIpLAorICAgICAgICAiIG9m
ICIsCisgICAgICAgIGR1bXBQYXRoKGNvbnRleHQsIG9iamVjdFByb3BlcnR5KGNvbnRleHQsIHJh
bmdlT2JqZWN0LCAiZW5kQ29udGFpbmVyIikpCisgICAgKTsKIH0KIAogc3RhdGljIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBOYXZpZ2F0aW9uVHlwZVRvU3RyaW5nKFdLRnJhbWVOYXZpZ2F0aW9u
VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2Uga1dLRnJhbWVOYXZp
Z2F0aW9uVHlwZUxpbmtDbGlja2VkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygibGluayBjbGlja2VkIikpOworICAgICAgICByZXR1cm4gdG9X
SygibGluayBjbGlja2VkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlRm9ybVN1
Ym1pdHRlZDoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImZvcm0gc3VibWl0dGVkIikpOworICAgICAgICByZXR1cm4gdG9XSygiZm9ybSBzdWJt
aXR0ZWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVCYWNrRm9yd2FyZDoKLSAg
ICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImJhY2sv
Zm9yd2FyZCIpKTsKKyAgICAgICAgcmV0dXJuIHRvV0soImJhY2svZm9yd2FyZCIpOwogICAgIGNh
c2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZVJlbG9hZDoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInJlbG9hZCIpKTsKKyAgICAgICAgcmV0dXJu
IHRvV0soInJlbG9hZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZUZvcm1SZXN1
Ym1pdHRlZDoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImZvcm0gcmVzdWJtaXR0ZWQiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJmb3JtIHJl
c3VibWl0dGVkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlT3RoZXI6Ci0gICAg
ICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvdGhlciIp
KTsKKyAgICAgICAgcmV0dXJuIHRvV0soIm90aGVyIik7CiAgICAgfQotICAgIHJldHVybiBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJpbGxlZ2FsIHZhbHVlIikpOworICAg
IHJldHVybiB0b1dLKCJpbGxlZ2FsIHZhbHVlIik7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBz
dHlsZURlY1RvU3RyKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZiBzdHlsZSkKQEAgLTE4
NSwyMyArMTQwLDE0IEBAIHN0YXRpYyBXVEY6OlN0cmluZyBzdHlsZURlY1RvU3RyKFdLQnVuZGxl
Q1NTU3R5bGVEZWNsYXJhdGlvblJlZiBzdHlsZSkKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOwogfQogCi1zdGF0aWMgV1RGOjpTdHJpbmcgc2VjdXJpdHlPcmlnaW5Ub1N0cihX
S1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKK3N0YXRpYyBXVEY6OlN0cmluZyBzdHJpbmcoV0tT
ZWN1cml0eU9yaWdpblJlZiBvcmlnaW4pCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCd7Jyk7Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9y
aWdpbikpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNv
cHlIb3N0KG9yaWdpbikpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKFdLU2VjdXJpdHlPcmlnaW5HZXRQb3J0
KG9yaWdpbikpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCd9Jyk7Ci0KLSAgICByZXR1cm4g
c3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCd7JywgdG9X
VEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikpKSwg
IiwgIiwgdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2lu
KSkpLCAiLCAiLCBXS1NlY3VyaXR5T3JpZ2luR2V0UG9ydChvcmlnaW4pLCAnfScpOwogfQogCiBz
dGF0aWMgV1RGOjpTdHJpbmcgZnJhbWVUb1N0cihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1l
Q29weU5hbWUoZnJhbWUpKTsKKyAgICBhdXRvIG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVD
b3B5TmFtZShmcmFtZSkpOwogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBp
ZiAoV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkgewogICAgICAgICBpZiAoIVdLU3Ry
aW5nSXNFbXB0eShuYW1lLmdldCgpKSkgewpAQCAtMjM1LDEyICsxODEsMTIgQEAgc3RhdGljIGlu
bGluZSBXVEY6OlN0cmluZyBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLVVJMUmVmIGZpbGVV
cmwpCiAgICAgaWYgKCFmaWxlVXJsKQogICAgICAgICByZXR1cm4gIihudWxsKSI7CiAKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NoZW1lU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlT
Y2hlbWUoZmlsZVVybCkpOworICAgIGF1dG8gc2NoZW1lU3RyaW5nID0gYWRvcHRXSyhXS1VSTENv
cHlTY2hlbWUoZmlsZVVybCkpOwogICAgIGlmICghaXNMb2NhbEZpbGVTY2hlbWUoc2NoZW1lU3Ry
aW5nLmdldCgpKSkKICAgICAgICAgcmV0dXJuIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5
U3RyaW5nKGZpbGVVcmwpKSk7CiAKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdL
QnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCkpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtYWluRnJhbWVVUkwgPSBhZG9w
dFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOworICAgIGF1dG8gbWFpbkZyYW1l
VVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUpKTsKICAgICBpZiAo
IW1haW5GcmFtZVVSTCkKICAgICAgICAgbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1bmRsZUZy
YW1lQ29weVByb3Zpc2lvbmFsVVJMKG1haW5GcmFtZSkpOwogCkBAIC00MzQsOCArMzgwLDcgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc2V0QWZ0ZXJUZXN0KCkKICAgICAvLyAoc2VlIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MzM0PiksIGhvd2V2ZXIg
Zm9yIHRlc3RzLCB3ZSB3YW50IHRvIHN0YXJ0IGVhY2ggb25lIHdpdGggYSBjbGVhbiBzdGF0ZS4K
ICAgICBXS0J1bmRsZUZyYW1lRm9jdXMoZnJhbWUpOwogCi0gICAgSlNHbG9iYWxDb250ZXh0UmVm
IGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwotICAg
IFdlYkNvcmVUZXN0U3VwcG9ydDo6cmVzZXRJbnRlcm5hbHNPYmplY3QoY29udGV4dCk7CisgICAg
V2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdChXS0J1bmRsZUZyYW1lR2V0
SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpKTsKICAgICBhc3NpZ25lZFVybHNDYWNoZSgpLmNsZWFy
KCk7CiAKICAgICAvLyBVc2VyIHNjcmlwdHMgbmVlZCB0byBiZSByZW1vdmVkIGFmdGVyIHRoZSB0
ZXN0IGFuZCBiZWZvcmUgbG9hZGluZyBhYm91dDpibGFuaywgYXMgb3RoZXJ3aXNlIHRoZXkgd291
bGQgcnVuIGluIGFib3V0OmJsYW5rLCBhbmQgcG90ZW50aWFsbHkgbGVhayByZXN1bHRzIGludG8g
YSBzdWJzZXF1ZXN0IHRlc3QuCkBAIC00NTEsNyArMzk2LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OnJlc2V0QWZ0ZXJUZXN0KCkKIC8vIFN0cmluZyBvdXRwdXQgbXVzdCBiZSBpZGVudGlj
YWwgdG8gLVtXZWJGcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0XS4K
IHN0YXRpYyB2b2lkIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVD
b3B5TmFtZShmcmFtZSkpOworICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNv
cHlOYW1lKGZyYW1lKSk7CiAgICAgaWYgKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkp
IHsKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShuYW1lLmdldCgpKSkgewogICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIik7CkBAIC00ODYsMjcg
KzQzMSwyMSBAQCBzdGF0aWMgdm9pZCBkdW1wTG9hZEV2ZW50KFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSkKIAogc3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXF1
ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXF1ZXN0UmVmIHJlcXVl
c3QsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
UkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tVUkxSZWY+IGZpcnN0UGFydHkgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENv
cHlGaXJzdFBhcnR5Rm9yQ29va2llcyhyZXF1ZXN0KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGh0dHBNZXRob2QgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlIVFRQTWV0aG9kKHJl
cXVlc3QpKTsKLQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPE5TVVJMUmVxdWVz
dCBVUkwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGF0aFN1aXRhYmxlRm9yVGVzdFJl
c3VsdCh1cmwuZ2V0KCkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgbWFp
biBkb2N1bWVudCBVUkwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGF0aFN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChmaXJzdFBhcnR5LmdldCgpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIsIGh0dHAgbWV0aG9kICIpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VS
TFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIGZpcnN0UGFydHkgPSBhZG9wdFdL
KFdLVVJMUmVxdWVzdENvcHlGaXJzdFBhcnR5Rm9yQ29va2llcyhyZXF1ZXN0KSk7CisgICAgYXV0
byBodHRwTWV0aG9kID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1ZXN0
KSk7CiAKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TVVJMUmVxdWVzdCBVUkwgIiwgcGF0
aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwuZ2V0KCkpLCAiLCBtYWluIGRvY3VtZW50IFVSTCAi
LCBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpLCAiLCBodHRwIG1l
dGhvZCAiKTsKICAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KGh0dHBNZXRob2QuZ2V0KCkpKQogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIihub25lKSIpOwogICAgIGVsc2UKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoaHR0cE1ldGhvZCkpOwotCiAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz4nKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGR1
bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLVVJMUmVzcG9uc2VS
ZWYgcmVzcG9uc2UsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIGJvb2wgc2hvdWxkRHVt
cFJlc3BvbnNlSGVhZGVycyA9IGZhbHNlKQogewotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1
cmwgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CisgICAgYXV0byB1
cmwgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CiAgICAgaWYgKCF1
cmwpIHsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobnVsbCkiKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtNTM1LDMxICs0NzQsMjAgQEAgdWludDY0X3QgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpyZXNwb25zZUhlYWRlckNvdW50KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiAK
IHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdChXS0Vycm9yUmVmIGVycm9yLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvckRvbWFpbiA9IGFkb3B0V0soV0tFcnJv
ckNvcHlEb21haW4oZXJyb3IpKTsKLSAgICBpbnQgZXJyb3JDb2RlID0gV0tFcnJvckdldEVycm9y
Q29kZShlcnJvcik7CisgICAgYXV0byBlcnJvckRvbWFpbiA9IHRvV1RGU3RyaW5nKGFkb3B0V0so
V0tFcnJvckNvcHlEb21haW4oZXJyb3IpKSk7CisgICAgYXV0byBlcnJvckNvZGUgPSBXS0Vycm9y
R2V0RXJyb3JDb2RlKGVycm9yKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gZG8gc29tZSBlcnJvciBt
YXBwaW5nIGhlcmUgdG8gbWF0Y2ggdGhlIHRlc3QgZXhwZWN0YXRpb25zIChNYWMgZXJyb3IgbmFt
ZXMgYXJlIGV4cGVjdGVkKS4KLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhl
cnJvckRvbWFpbi5nZXQoKSwgIldlYktpdE5ldHdvcmtFcnJvciIpKSB7Ci0gICAgICAgIGVycm9y
RG9tYWluID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTlNVUkxFcnJv
ckRvbWFpbiIpKTsKKyAgICBpZiAoZXJyb3JEb21haW4gPT0gIldlYktpdE5ldHdvcmtFcnJvciIp
IHsKKyAgICAgICAgZXJyb3JEb21haW4gPSAiTlNVUkxFcnJvckRvbWFpbiI7CiAgICAgICAgIGVy
cm9yQ29kZSA9IC05OTk7CiAgICAgfQorICAgIGlmIChlcnJvckRvbWFpbiA9PSAgIldlYktpdFBv
bGljeUVycm9yIikKKyAgICAgICAgZXJyb3JEb21haW4gPSAiV2ViS2l0RXJyb3JEb21haW4iOwog
Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZXJyb3JEb21haW4uZ2V0KCks
ICJXZWJLaXRQb2xpY3lFcnJvciIpKQotICAgICAgICBlcnJvckRvbWFpbiA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdEVycm9yRG9tYWluIikpOwotCi0gICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8TlNFcnJvciBkb21haW4gIik7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZXJyb3JEb21haW4pKTsKLSAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgY29kZSAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZE51bWJlcihlcnJvckNvZGUpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFk
b3B0V0soV0tFcnJvckNvcHlGYWlsaW5nVVJMKGVycm9yKSk7Ci0gICAgaWYgKHVybC5nZXQoKSkg
ewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhX
S1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiLCBmYWlsaW5nIFVSTCBcIiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
JyInKTsKLSAgICB9Ci0KKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TRXJyb3IgZG9tYWlu
ICIsIGVycm9yRG9tYWluLCAiLCBjb2RlICIsIGVycm9yQ29kZSk7CisgICAgaWYgKGF1dG8gdXJs
ID0gYWRvcHRXSyhXS0Vycm9yQ29weUZhaWxpbmdVUkwoZXJyb3IpKSkKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIiwgZmFpbGluZyBVUkwgXCIiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdL
VVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKSksICciJyk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJz4nKTsKIH0KIApAQCAtNjk1LDcgKzYyMyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT50ZXN0VVJMKCkpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHRlc3RVUkwgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwoZnJhbWUpKTsKKyAgICAgICAg
YXV0byB0ZXN0VVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKGZy
YW1lKSk7CiAgICAgICAgIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2V0VGVzdFVSTCh0
ZXN0VVJMLmdldCgpKTsKICAgICB9CiAKQEAgLTc3NCwxMyArNzAyLDEzIEBAIGVudW0gRnJhbWVO
YW1lUG9saWN5IHsgU2hvdWxkTm90SW5jbHVkZUZyYW1lTmFtZSwgU2hvdWxkSW5jbHVkZUZyYW1l
TmFtZSB9OwogCiBzdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBGcmFtZU5hbWVQb2xp
Y3kgc2hvdWxkSW5jbHVkZUZyYW1lTmFtZSA9IFNob3VsZE5vdEluY2x1ZGVGcmFtZU5hbWUpCiB7
Ci0gICAgZG91YmxlIHggPSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZShmcmFtZSwgInBhZ2VY
T2Zmc2V0Iik7Ci0gICAgZG91YmxlIHkgPSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZShmcmFt
ZSwgInBhZ2VZT2Zmc2V0Iik7CisgICAgZG91YmxlIHggPSBudW1lcmljV2luZG93UHJvcGVydHko
ZnJhbWUsICJwYWdlWE9mZnNldCIpOworICAgIGRvdWJsZSB5ID0gbnVtZXJpY1dpbmRvd1Byb3Bl
cnR5KGZyYW1lLCAicGFnZVlPZmZzZXQiKTsKICAgICBpZiAoZmFicyh4KSA8PSAwLjAwMDAwMDAx
ICYmIGZhYnMoeSkgPD0gMC4wMDAwMDAwMSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNo
b3VsZEluY2x1ZGVGcmFtZU5hbWUpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOworICAgICAgICBh
dXRvIG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZyYW1lICciKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobmFtZSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIicgIik7CkBAIC03OTQsNyArNzIyLDcgQEAgc3RhdGljIHZvaWQgZHVt
cEZyYW1lU2Nyb2xsUG9zaXRpb24oV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRl
ciYgc3RyaW4KIAogc3RhdGljIHZvaWQgZHVtcERlc2NlbmRhbnRGcmFtZVNjcm9sbFBvc2l0aW9u
cyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQog
ewotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGNoaWxkRnJhbWVzID0gYWRvcHRXSyhXS0J1
bmRsZUZyYW1lQ29weUNoaWxkRnJhbWVzKGZyYW1lKSk7CisgICAgYXV0byBjaGlsZEZyYW1lcyA9
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOwogICAgIHNpemVf
dCBzaXplID0gV0tBcnJheUdldFNpemUoY2hpbGRGcmFtZXMuZ2V0KCkpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgc3Vi
ZnJhbWUgPSBzdGF0aWNfY2FzdDxXS0J1bmRsZUZyYW1lUmVmPihXS0FycmF5R2V0SXRlbUF0SW5k
ZXgoY2hpbGRGcmFtZXMuZ2V0KCksIGkpKTsKQEAgLTgxMCwyOCArNzM4LDEwIEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlvbnMoU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlCiAgICAgZHVtcERlc2NlbmRhbnRGcmFtZVNjcm9sbFBvc2l0aW9ucyhm
cmFtZSwgc3RyaW5nQnVpbGRlcik7CiB9CiAKLXN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gdG9KUyhjb25zdCBjaGFyKiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZykpOwotfQotCiBzdGF0aWMgYm9vbCBoYXNEb2N1
bWVudEVsZW1lbnQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKLSAgICBKU0dsb2JhbENvbnRl
eHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7
Ci0gICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0
KGNvbnRleHQpOwotCi0gICAgSlNWYWx1ZVJlZiBkb2N1bWVudFZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCBnbG9iYWxPYmplY3QsIHRvSlMoImRvY3VtZW50IikuZ2V0KCksIDAp
OwotICAgIGlmICghZG9jdW1lbnRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
QVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBkb2N1bWVudFZhbHVlKSk7Ci0gICAgSlNP
YmplY3RSZWYgZG9jdW1lbnQgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZG9jdW1lbnRWYWx1
ZSwgMCk7Ci0KLSAgICBKU1ZhbHVlUmVmIGRvY3VtZW50RWxlbWVudFZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCBkb2N1bWVudCwgdG9KUygiZG9jdW1lbnRFbGVtZW50IikuZ2V0
KCksIDApOwotICAgIGlmICghZG9jdW1lbnRFbGVtZW50VmFsdWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGRvY3VtZW50RWxl
bWVudFZhbHVlKTsKKyAgICBhdXRvIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlw
dENvbnRleHQoZnJhbWUpOworICAgIHJldHVybiBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHsgImRvY3VtZW50IiwgImRvY3VtZW50RWxl
bWVudCIgfSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVRleHQoV0tCdW5kbGVGcmFtZVJl
ZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKQEAgLTg1NCwxMSArNzY0LDExIEBAIHN0
YXRpYyB2b2lkIGR1bXBGcmFtZVRleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVp
bGRlciYgYnVpbGRlcikKIAogc3RhdGljIHZvaWQgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxl
RnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsKKyAgICBhdXRvIGNoaWxkRnJhbWVzID0gYWRv
cHRXSyhXS0J1bmRsZUZyYW1lQ29weUNoaWxkRnJhbWVzKGZyYW1lKSk7CiAgICAgc2l6ZV90IHNp
emUgPSBXS0FycmF5R2V0U2l6ZShjaGlsZEZyYW1lcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBzdWJmcmFt
ZSA9IHN0YXRpY19jYXN0PFdLQnVuZGxlRnJhbWVSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChj
aGlsZEZyYW1lcy5nZXQoKSwgaSkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViZnJhbWVOYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoc3ViZnJhbWUpKTsK
KyAgICAgICAgYXV0byBzdWJmcmFtZU5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFt
ZShzdWJmcmFtZSkpOwogCiAgICAgICAgIC8vIER1bXBSZW5kZXJUcmVlIGlnbm9yZXMgZW1wdHkg
ZnJhbWVzLCBzbyBkbyB0aGUgc2FtZSB0aGluZyBoZXJlLgogICAgICAgICBpZiAoIWhhc0RvY3Vt
ZW50RWxlbWVudChzdWJmcmFtZSkpCkBAIC04ODQsOSArNzk0LDkgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmR1bXBBbGxGcmFtZXNUZXh0KFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIp
CiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcERPTUFzV2ViQXJjaGl2ZShXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewogI2lmIFVTRShD
RikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKLSAgICBXS1JldGFp
blB0cjxXS0RhdGFSZWY+IHdrRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNo
aXZlKGZyYW1lKSk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhID0gYWRvcHRDRihD
RkRhdGFDcmVhdGUoMCwgV0tEYXRhR2V0Qnl0ZXMod2tEYXRhLmdldCgpKSwgV0tEYXRhR2V0U2l6
ZSh3a0RhdGEuZ2V0KCkpKSk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZlN0cmluZyA9
IGFkb3B0Q0YoV2ViQ29yZVRlc3RTdXBwb3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2
ZURhdGEoY2ZEYXRhLmdldCgpKSk7CisgICAgYXV0byB3a0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxl
RnJhbWVDb3B5V2ViQXJjaGl2ZShmcmFtZSkpOworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihD
RkRhdGFDcmVhdGUoMCwgV0tEYXRhR2V0Qnl0ZXMod2tEYXRhLmdldCgpKSwgV0tEYXRhR2V0U2l6
ZSh3a0RhdGEuZ2V0KCkpKSk7CisgICAgYXV0byBjZlN0cmluZyA9IGFkb3B0Q0YoV2ViQ29yZVRl
c3RTdXBwb3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEoY2ZEYXRhLmdldCgp
KSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoY2ZTdHJpbmcuZ2V0KCkpOwogI2VuZGlmCiB9
CkBAIC05MDIsOSArODEyLDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXAoKQogICAg
IFdLQnVuZGxlUGFnZUZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRlKG1fcGFnZSk7CiAKICAg
ICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFn
ZSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybFJlZiA9IGFkb3B0V0soV0tCdW5kbGVG
cmFtZUNvcHlVUkwoZnJhbWUpKTsKKyAgICBhdXRvIHVybFJlZiA9IGFkb3B0V0soV0tCdW5kbGVG
cmFtZUNvcHlVUkwoZnJhbWUpKTsKICAgICBTdHJpbmcgdXJsID0gdG9XVEZTdHJpbmcoYWRvcHRX
SyhXS1VSTENvcHlTdHJpbmcodXJsUmVmLmdldCgpKSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtaW1lVHlwZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlNSU1FVHlwZUZvclJl
c291cmNlV2l0aFVSTChmcmFtZSwgdXJsUmVmLmdldCgpKSk7CisgICAgYXV0byBtaW1lVHlwZSA9
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlNSU1FVHlwZUZvclJlc291cmNlV2l0aFVSTChmcmFt
ZSwgdXJsUmVmLmdldCgpKSk7CiAgICAgaWYgKHVybC5maW5kKCJkdW1wQXNUZXh0LyIpICE9IG5v
dEZvdW5kIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWltZVR5cGUuZ2V0KCksICJ0
ZXh0L3BsYWluIikpCiAgICAgICAgIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+ZHVtcEFz
VGV4dChmYWxzZSk7CiAKQEAgLTEwMTgsMjEgKzkyOCwxOSBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1
bmRsZQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZyYW1lLCB3b3JsZCk7Ci0gICAgSlNPYmplY3RS
ZWYgd2luZG93ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpOworICAgIGF1dG8g
Y29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZyYW1l
LCB3b3JsZCk7CiAKICAgICBpZiAoV0tCdW5kbGVTY3JpcHRXb3JsZE5vcm1hbFdvcmxkKCkgIT0g
d29ybGQpIHsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3csIHRv
SlMoIl9fd29ybGRJRCIpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBUZXN0UnVu
bmVyOjp3b3JsZElERm9yV29ybGQod29ybGQpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSwgMCk7CisgICAgICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJfX3dvcmxk
SUQiLCBUZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQod29ybGQpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICBpbmpl
Y3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93
LCAmZXhjZXB0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5nY0NvbnRyb2xsZXIoKS0+bWFrZVdp
bmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwotICAgIGluamVjdGVkQnVu
ZGxlLmV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3
aW5kb3csICZleGNlcHRpb24pOwotICAgIGluamVjdGVkQnVuZGxlLnRleHRJbnB1dENvbnRyb2xs
ZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOworICAg
IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsK
KyAgICBpbmplY3RlZEJ1bmRsZS5nY0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250
ZXh0KTsKKyAgICBpbmplY3RlZEJ1bmRsZS5ldmVudFNlbmRpbmdDb250cm9sbGVyKCktPm1ha2VX
aW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgaW5qZWN0ZWRCdW5kbGUudGV4dElucHV0Q29udHJv
bGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOwogI2lmIEhBVkUoQUNDRVNTSUJJTElU
WSkKLSAgICBpbmplY3RlZEJ1bmRsZS5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpLT5tYWtlV2lu
ZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRCdW5k
bGUuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsK
ICNlbmRpZgogCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3Qo
Y29udGV4dCk7CkBAIC0xMTM2LDcgKzEwNDQsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkSW5pdGlhdGVMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZAog
ICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0so
V0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CisgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdL
VVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwogICAgIGFzc2lnbmVkVXJsc0NhY2hlKCkuYWRk
KGlkZW50aWZpZXIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSk7CiB9CiAK
QEAgLTExNzUsMTYgKzEwODMsMTYgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFn
ZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICBpZiAo
aW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpICYmIGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gcmVkaXJlY3RVUkwgPSBhZG9wdFdLKFdL
VVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CisgICAgYXV0byByZWRpcmVjdFVSTCA9IGFk
b3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKICAgICBpZiAoaW5qZWN0ZWRC
dW5kbGUuaXNUZXN0UnVubmluZygpICYmIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+d2ls
bFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KCkgJiYgcmVkaXJlY3RVUkwpIHsKICAg
ICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCgiUmV0dXJuaW5nIG51bGwgZm9yIHRoaXMg
cmVkaXJlY3RcbiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBXS1Jl
dGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVl
c3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdCA9IGFkb3B0V0soV0tVUkxD
b3B5SG9zdE5hbWUodXJsLmdldCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNj
aGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwu
Z2V0KCkpKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1
ZXN0KSk7CisgICAgYXV0byBob3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFtZSh1cmwuZ2V0
KCkpKTsKKyAgICBhdXRvIHNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQo
KSkpOworICAgIGF1dG8gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdl
dCgpKSk7CiAgICAgaWYgKGhvc3QgJiYgIVdLU3RyaW5nSXNFbXB0eShob3N0LmdldCgpKQogICAg
ICAgICAmJiBpc0hUVFBPckhUVFBTU2NoZW1lKHNjaGVtZS5nZXQoKSkKICAgICAgICAgJiYgIVdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoaG9zdC5nZXQoKSwgIjI1NS4yNTUuMjU1LjI1NSIp
IC8vIFVzZWQgaW4gc29tZSB0ZXN0cyB0aGF0IGV4cGVjdCB0byBnZXQgYmFjayBhbiBlcnJvci4K
QEAgLTExOTIsMTIgKzExMDAsMTIgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFn
ZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAgICAg
Ym9vbCBtYWluRnJhbWVJc0V4dGVybmFsID0gZmFsc2U7CiAgICAgICAgIGlmIChpbmplY3RlZEJ1
bmRsZS5pc1Rlc3RSdW5uaW5nKCkpIHsKICAgICAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSk7Ci0gICAgICAgICAgICBX
S1JldGFpblB0cjxXS1VSTFJlZj4gbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1l
Q29weVVSTChtYWluRnJhbWUpKTsKKyAgICAgICAgICAgIGF1dG8gbWFpbkZyYW1lVVJMID0gYWRv
cHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUpKTsKICAgICAgICAgICAgIGlmICgh
bWFpbkZyYW1lVVJMIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoYWRvcHRXSyhXS1VS
TENvcHlTdHJpbmcobWFpbkZyYW1lVVJMLmdldCgpKSkuZ2V0KCksICJhYm91dDpibGFuayIpKQog
ICAgICAgICAgICAgICAgIG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQ
cm92aXNpb25hbFVSTChtYWluRnJhbWUpKTsKIAotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1haW5GcmFtZUhvc3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1lKG1haW5G
cmFtZVVSTC5nZXQoKSkpOwotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1h
aW5GcmFtZVNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKG1haW5GcmFtZVVSTC5nZXQo
KSkpOworICAgICAgICAgICAgYXV0byBtYWluRnJhbWVIb3N0ID0gYWRvcHRXSyhXS1VSTENvcHlI
b3N0TmFtZShtYWluRnJhbWVVUkwuZ2V0KCkpKTsKKyAgICAgICAgICAgIGF1dG8gbWFpbkZyYW1l
U2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7CiAg
ICAgICAgICAgICBtYWluRnJhbWVJc0V4dGVybmFsID0gaXNIVFRQT3JIVFRQU1NjaGVtZShtYWlu
RnJhbWVTY2hlbWUuZ2V0KCkpICYmICFpc0xvY2FsSG9zdChtYWluRnJhbWVIb3N0LmdldCgpKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoIW1haW5GcmFtZUlzRXh0ZXJuYWwgJiYgIWlzQWxsb3dl
ZEhvc3QoaG9zdC5nZXQoKSkpIHsKQEAgLTEyMTQsNyArMTEyMiw3IEBAIFdLVVJMUmVxdWVzdFJl
ZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlCiAgICAgICAgIFN0cmluZyBib2R5ID0gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpLT53aWxsU2VuZFJlcXVlc3RIVFRQQm9keSgpOwogICAgICAgICBpZiAoIWJvZHkuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBDU3RyaW5nIGNCb2R5ID0gYm9keS51dGY4KCk7Ci0gICAgICAg
ICAgICBXS1JldGFpblB0cjxXS0RhdGFSZWY+IGJvZHkgPSBhZG9wdFdLKFdLRGF0YUNyZWF0ZShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihjQm9keS5kYXRhKCkpLCBjQm9k
eS5sZW5ndGgoKSkpOworICAgICAgICAgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS0RhdGFDcmVh
dGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY0JvZHkuZGF0YSgpKSwg
Y0JvZHkubGVuZ3RoKCkpKTsKICAgICAgICAgICAgIHJldHVybiBXS1VSTFJlcXVlc3RDb3B5U2V0
dGluZ0hUVFBCb2R5KHJlcXVlc3QsIGJvZHkuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MTI0Miw5ICsxMTUwLDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVSZXNw
b25zZUZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0IKICAgICBpZiAoIWluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlw
ZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9
IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlMYXN0UGF0aENvbXBv
bmVudCh1cmwuZ2V0KCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWltZVR5cGVT
dHJpbmcgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlNRVR5cGUocmVzcG9uc2UpKTsKKyAg
ICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKKyAg
ICBhdXRvIHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQodXJs
LmdldCgpKSk7CisgICAgYXV0byBtaW1lVHlwZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25z
ZUNvcHlNSU1FVHlwZShyZXNwb25zZSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwpA
QCAtMTM1MCwxMCArMTI1OCw4IEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tCCiAgICAgICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgLSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uXG4iKTsKICAgICAgICAg
ZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0LCBzdHJp
bmdCdWlsZGVyKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgaXMgbWFp
biBmcmFtZSAtICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChXS0J1bmRsZUZyYW1l
SXNNYWluRnJhbWUoZnJhbWUpID8gInllcyIgOiAibm8iKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5IC0gIik7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIGlzIG1haW4gZnJhbWUgLSAiLCBXS0J1bmRsZUZy
YW1lSXNNYWluRnJhbWUoZnJhbWUpID8gInllcyIgOiAibm8iKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIiBzaG91bGQgb3BlbiBVUkxzIGV4dGVybmFsbHkgLSAiLCBXS0J1bmRsZU5h
dmlnYXRpb25BY3Rpb25HZXRTaG91bGRPcGVuRXh0ZXJuYWxVUkxzKG5hdmlnYXRpb25BY3Rpb24p
ID8gInllcyIgOiAibm8iKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAg
ICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygp
KTsKICAgICB9CkBAIC0xMzYxLDI0ICsxMjY3LDIxIEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlv
biBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tC
CiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVF
bmFibGVkKCkpCiAgICAgICAgIHJldHVybiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb25QYXNzVGhy
b3VnaDsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVx
dWVzdENvcHlVUkwocmVxdWVzdCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxT
Y2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkpKTsKKyAgICBhdXRvIHVy
bCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CisgICAgYXV0byB1cmxT
Y2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkpKTsKIAogICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIpOwotICAgIGlmIChpc0xvY2FsRmls
ZVNjaGVtZSh1cmxTY2hlbWUuZ2V0KCkpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBmaWxlbmFtZSA9IGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQodXJsLmdl
dCgpKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGZpbGVuYW1l
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0
cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICB9CisgICAgaWYg
KGlzTG9jYWxGaWxlU2NoZW1lKHVybFNjaGVtZS5nZXQoKSkpCisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQo
dXJsLmdldCgpKSkpKTsKKyAgICBlbHNlCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRv
V1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpKSk7CiAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgd2l0aCBuYXZpZ2F0aW9uIHR5cGUgXCciKTsKICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhOYXZpZ2F0aW9uVHlwZVRvU3RyaW5n
KFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldE5hdmlnYXRpb25UeXBlKG5hdmlnYXRpb25BY3Rp
b24pKSkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCciKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWY+IGhpdFRlc3RSZXN1bHRSZWYgPSBhZG9w
dFdLKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkNvcHlIaXRUZXN0UmVzdWx0KG5hdmlnYXRpb25B
Y3Rpb24pKTsKKyAgICBhdXRvIGhpdFRlc3RSZXN1bHRSZWYgPSBhZG9wdFdLKFdLQnVuZGxlTmF2
aWdhdGlvbkFjdGlvbkNvcHlIaXRUZXN0UmVzdWx0KG5hdmlnYXRpb25BY3Rpb24pKTsKICAgICBp
ZiAoaGl0VGVzdFJlc3VsdFJlZikgewotICAgICAgICBXS1JldGFpblB0cjxXS0J1bmRsZU5vZGVI
YW5kbGVSZWY+IG5vZGVIYW5kbGVSZWYgPSBhZG9wdFdLKFdLQnVuZGxlSGl0VGVzdFJlc3VsdENv
cHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBub2Rl
SGFuZGxlUmVmID0gYWRvcHRXSyhXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5Tm9kZUhhbmRsZSho
aXRUZXN0UmVzdWx0UmVmLmdldCgpKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiIG9yaWdpbmF0aW5nIGZyb20gIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGR1bXBQYXRoKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgbm9kZUhhbmRsZVJlZi5nZXQoKSkpOwog
ICAgIH0KQEAgLTE0MDAsMTIgKzEzMDMsNyBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZShXS0J1bmRsZVBhZwogewog
ICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwog
ICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkgJiYgaW5qZWN0ZWRCdW5kbGUudGVz
dFJ1bm5lcigpLT5pc1BvbGljeURlbGVnYXRlRW5hYmxlZCgpICYmIFdLVVJMUmVzcG9uc2VJc0F0
dGFjaG1lbnQocmVzcG9uc2UpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZpbGVuYW1lID0gYWRvcHRXSyhX
S1VSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3BvbnNlKSk7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBpcyBh
biBhdHRhY2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIik7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGZpbGVuYW1lKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiXCdcbiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQb2xpY3kgZGVs
ZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCci
LCB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUo
cmVzcG9uc2UpKSksICJcJ1xuIikpOwogICAgIH0KIAogICAgIHJldHVybiBXS0J1bmRsZVBhZ2VQ
b2xpY3lBY3Rpb25QYXNzVGhyb3VnaDsKQEAgLTE0NzEsMTAgKzEzNjksMTAgQEAgc3RhdGljIFdU
Rjo6U3RyaW5nIGFkZExlYWRpbmdTcGFjZVN0cmlwVHJhaWxpbmdTcGFjZXNBZGROZXdsaW5lKGNv
bnN0IFdURjo6U3RyaW4KIAogc3RhdGljIFdURjo6U3RyaW5nIGxhc3RGaWxlVVJMUGF0aENvbXBv
bmVudChjb25zdCBXVEY6OlN0cmluZyYgcGF0aCkKIHsKLSAgICBzaXplX3QgcG9zID0gcGF0aC5m
aW5kKCJmaWxlOi8vIik7CisgICAgYXV0byBwb3MgPSBwYXRoLmZpbmQoImZpbGU6Ly8iKTsKICAg
ICBBU1NFUlQoV1RGOjpub3RGb3VuZCAhPSBwb3MpOwogCi0gICAgV1RGOjpTdHJpbmcgdG1wUGF0
aCA9IHBhdGguc3Vic3RyaW5nKHBvcyArIDcpOworICAgIGF1dG8gdG1wUGF0aCA9IHBhdGguc3Vi
c3RyaW5nKHBvcyArIDcpOwogICAgIGlmICh0bXBQYXRoLmxlbmd0aCgpIDwgMikgLy8gS2VlcCB0
aGUgbG9uZSBzbGFzaCB0byBhdm9pZCBlbXB0eSBvdXRwdXQuCiAgICAgICAgIHJldHVybiB0bXBQ
YXRoOwogCkBAIC0xNTIxLDExICsxNDE5LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6Ondp
bGxTZXRTdGF0dXNiYXJUZXh0KFdLU3RyaW5nUmVmIHN0YXR1c2JhclRleHQpCiAgICAgaWYgKCFp
bmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNL
OiBzZXRTdGF0dXNUZXh0OiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5n
KHN0YXR1c2JhclRleHQpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBp
bmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBTVEFUVVMg
Q0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6IiwgdG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCksICdc
bicpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0QWxl
cnQoV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tCdW5kbGVGcmFtZVJlZikKQEAgLTE1NTksMTUgKzE0
NTMsOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlvbkNhY2hl
T3JpZ2luUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZgogICAgICAgICAvLyBSb3VuZGluZyB1cCBv
ciBkb3duIGRvZXMgbm90IHJlYWxseSBtYXR0ZXIgZm9yIHRoZXNlIHRlc3RzLiBJdCdzCiAgICAg
ICAgIC8vIHN1ZmZpY2llbnQgdG8ganVzdCBnZXQgYSByYW5nZSBvZiAxMDAwMCB0byBkZXRlcm1p
bmUgaWYgd2Ugd2VyZQogICAgICAgICAvLyBhYm92ZSBvciBiZWxvdyBhIHRocmVzaG9sZC4KLSAg
ICAgICAgaW50NjRfdCB0cnVuY2F0ZWRTcGFjZU5lZWRlZCA9ICh0b3RhbEJ5dGVzTmVlZGVkIC8g
MTAwMDApICogMTAwMDA7Ci0KLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIEFQUExJQ0FU
SU9OIENBQ0hFIENBTExCQUNLOiBleGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YUZv
clNlY3VyaXR5T3JpZ2luOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZWN1cml0
eU9yaWdpblRvU3RyKG9yaWdpbikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiB0b3RhbFNwYWNlTmVlZGVkOn4iKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRO
dW1iZXIodHJ1bmNhdGVkU3BhY2VOZWVkZWQpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCkpOworICAgICAgICBhdXRvIHRydW5jYXRlZFNwYWNlTmVlZGVkID0gKHRvdGFs
Qnl0ZXNOZWVkZWQgLyAxMDAwMCkgKiAxMDAwMDsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBBUFBMSUNBVElPTiBDQUNIRSBDQUxMQkFD
SzogZXhjZWVkZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoi
LCBzdHJpbmcob3JpZ2luKSwgIiB0b3RhbFNwYWNlTmVlZGVkOn4iLCB0cnVuY2F0ZWRTcGFjZU5l
ZWRlZCwgJ1xuJykpOwogICAgIH0KIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZERpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKSkKQEAg
LTE1ODAsMTUgKzE0NjcsOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVhY2hBcHBs
aWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZgogdWludDY0X3QgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKFdLU2VjdXJpdHlPcmlnaW5S
ZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBkYXRhYmFzZU5hbWUsIFdLU3RyaW5nUmVmIGRhdGFiYXNl
RGlzcGxheU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRRdW90YUJ5dGVzLCB1aW50NjRfdCBjdXJyZW50
T3JpZ2luVXNhZ2VCeXRlcywgdWludDY0X3QgY3VycmVudERhdGFiYXNlVXNhZ2VCeXRlcywgdWlu
dDY0X3QgZXhwZWN0ZWRVc2FnZUJ5dGVzKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBEYXRhYmFzZUNhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3Rh
Rm9yU2VjdXJpdHlPcmlnaW46Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlY3Vy
aXR5T3JpZ2luVG9TdHIob3JpZ2luKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiIGRhdGFiYXNlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0
cmluZyhkYXRhYmFzZU5hbWUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpKTsKLSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkpCisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRl
eHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0
YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmluZyhvcmlnaW4pLCAiIGRhdGFiYXNl
OiIsIHRvV1RGU3RyaW5nKGRhdGFiYXNlTmFtZSksICdcbicpKTsKIAogICAgIHVpbnQ2NF90IGRl
ZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKICAgICBkb3VibGUgdGVzdERlZmF1bHRRdW90
YSA9IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+ZGF0YWJhc2VEZWZhdWx0UXVvdGEoKTsK
QEAgLTE2MDEsMTIgKzE0ODEsNyBAQCB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEV4
Y2VlZERhdGFiYXNlUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sCiAgICAgaWYgKG1h
eFF1b3RhID49IDApIHsKICAgICAgICAgaWYgKGRlZmF1bHRRdW90YSA8IGV4cGVjdGVkVXNhZ2VC
eXRlcyAmJiBleHBlY3RlZFVzYWdlQnl0ZXMgPD0gbWF4UXVvdGEpIHsKICAgICAgICAgICAgIG5l
d1F1b3RhID0gZXhwZWN0ZWRVc2FnZUJ5dGVzOwotCi0gICAgICAgICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBpbmNyZWFzZWQgcXVvdGEgdG8gIik7Ci0g
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihuZXdRdW90YSk7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgICAgIGluamVjdGVkQnVu
ZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGlu
amVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgREFUQUJBU0Ug
Q0FMTEJBQ0s6IGluY3JlYXNlZCBxdW90YSB0byAiLCBuZXdRdW90YSwgJ1xuJykpOwogICAgICAg
ICB9CiAgICAgfQogICAgIHJldHVybiBuZXdRdW90YTsKQEAgLTE2NzUsMTMgKzE1NTAsOCBAQCBi
b29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKFdLQnVuZGxlUmFuZ2VI
YW5kbGVSZWYgcmFuZ2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
RURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCks
IHJhbmdlKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBp
bmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAg
fQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpCisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmlu
ZygiRURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiLCByYW5n
ZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CiAgICAgcmV0dXJu
IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAK
QEAgLTE2OTEsMTMgKzE1NjEsOCBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5k
RWRpdGluZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogICAgIGlmICghaW5qZWN0ZWRC
dW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChp
bmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkp
IHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJ
bkRPTVJhbmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1f
cGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKLSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUu
b3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5n
SW5ET01SYW5nZToiLCByYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAn
XG4nKSk7CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxs
b3dFZGl0aW5nKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IGE2MjU1ODk3MjdiYzcxYjc0MWVjZjI1NjUx
NTIxZWZiNGY0OTk3ZjMuLmE5NmQ1YTY0NDdiZDkzMjU1MTE4OGJkODQwZTFhNGQwYmZjMDE1MjIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUGFn
ZS5oIgogI2luY2x1ZGUgIkpTVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmll
dy5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDVGVzdFJ1bm5lclV0aWxzLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KQEAgLTY5LDcgKzY5LDcg
QEAgUmVmPFRlc3RSdW5uZXI+IFRlc3RSdW5uZXI6OmNyZWF0ZSgpCiB9CiAKIFRlc3RSdW5uZXI6
OlRlc3RSdW5uZXIoKQotICAgIDogbV91c2VyU3R5bGVTaGVldExvY2F0aW9uKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKSkKKyAgICA6IG1fdXNlclN0eWxlU2hlZXRM
b2NhdGlvbih0b1dLKCIiKSkKIHsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIH0KQEAgLTgz
LDM0ICs4MywxMDEgQEAgSlNDbGFzc1JlZiBUZXN0UnVubmVyOjp3cmFwcGVyQ2xhc3MoKQogICAg
IHJldHVybiBKU1Rlc3RSdW5uZXI6OnRlc3RSdW5uZXJDbGFzcygpOwogfQogCitzdGF0aWMgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UoKQoreworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCk7Cit9CisKK3N0YXRpYyBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSgpCit7CisgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKCkpOwor
fQorCitzdGF0aWMgSlNDb250ZXh0UmVmIG1haW5KU0NvbnRleHQoKQoreworICAgIHJldHVybiBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKCkpOworfQorCiB2b2lk
IFRlc3RSdW5uZXI6OmRpc3BsYXkoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxlUGFn
ZUZvcmNlUmVwYWludChwYWdlKTsKKyAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQocGFnZSgp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5QW5kVHJhY2tSZXBhaW50cygpCiB7Ci0g
ICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gV1RSOjpwYWdlKCk7CiAgICAgV0tCdW5kbGVQ
YWdlRm9yY2VSZXBhaW50KHBhZ2UpOwogICAgIFdLQnVuZGxlUGFnZVNldFRyYWNrc1JlcGFpbnRz
KHBhZ2UsIHRydWUpOwogICAgIFdLQnVuZGxlUGFnZVJlc2V0VHJhY2tlZFJlcGFpbnRzKHBhZ2Up
OwogfQogCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHRvV0soZG91YmxlIHZhbHVl
KQoreworICAgIHJldHVybiBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSk7Cit9CisKK3N0
YXRpYyBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IGNyZWF0ZVdLRGljdGlvbmFyeShzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPGNvbnN0IGNoYXIqLCBXS1JldGFpblB0cjxXS1R5
cGVSZWY+Pj4gcGFpcnMpCit7CisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBrZXlzOworICAgIFZl
Y3RvcjxXS1R5cGVSZWY+IHZhbHVlczsKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+PiBzdHJpbmdzOworICAgIGZvciAoYXV0byYgcGFpciA6IHBhaXJzKSB7CisgICAgICAgIGF1
dG8ga2V5ID0gdG9XSyhwYWlyLmZpcnN0KTsKKyAgICAgICAga2V5cy5hcHBlbmQoa2V5LmdldCgp
KTsKKyAgICAgICAgdmFsdWVzLmFwcGVuZChwYWlyLnNlY29uZC5nZXQoKSk7CisgICAgICAgIHN0
cmluZ3MuYXBwZW5kKFdURk1vdmUoa2V5KSk7CisgICAgfQorICAgIHJldHVybiBhZG9wdFdLKFdL
RGljdGlvbmFyeUNyZWF0ZShrZXlzLmRhdGEoKSwgdmFsdWVzLmRhdGEoKSwga2V5cy5zaXplKCkp
KTsKK30KKworc3RhdGljIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcG9zdFN5bmNocm9ub3VzTWVz
c2FnZVdpdGhSZXR1cm5WYWx1ZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBu
dWxscHRyKQoreworICAgIFdLVHlwZVJlZiByYXdSZXR1cm5WYWx1ZSA9IG51bGxwdHI7CisgICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUsICZyYXdSZXR1cm5WYWx1ZSk7Cisg
ICAgcmV0dXJuIGFkb3B0V0socmF3UmV0dXJuVmFsdWUpOworfQorCitzdGF0aWMgYm9vbCBwb3N0
U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbihjb25zdCBjaGFyKiBuYW1lLCBXS1R5
cGVSZWYgdmFsdWUgPSBudWxscHRyKQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUocG9zdFN5
bmNocm9ub3VzTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQorCitzdGF0
aWMgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVdpdGhS
ZXR1cm5WYWx1ZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBudWxscHRyKQor
eworICAgIFdLVHlwZVJlZiByYXdSZXR1cm5WYWx1ZSA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLCB0b1dLKG5hbWUpLmdl
dCgpLCB2YWx1ZSwgJnJhd1JldHVyblZhbHVlKTsKKyAgICByZXR1cm4gYWRvcHRXSyhyYXdSZXR1
cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyBib29sIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0
dXJuaW5nQm9vbGVhbihjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBudWxscHRy
KQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUocG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VX
aXRoUmV0dXJuVmFsdWUobmFtZSwgdmFsdWUpKTsKK30KKworc3RhdGljIHVpbnQ2NF90IHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0KGNvbnN0IGNoYXIqIG5hbWUsIFdL
VHlwZVJlZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5hbWUsIHZhbHVlKSk7Cit9CisK
K3N0YXRpYyB1aW50NjRfdCBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KGNv
bnN0IGNoYXIqIG5hbWUpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHBvc3RTeW5jaHJvbm91
c01lc3NhZ2VXaXRoUmV0dXJuVmFsdWUobmFtZSkpOworfQorCitzdGF0aWMgdm9pZCBvdmVycmlk
ZVByZWZlcmVuY2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBhdXRvJiBi
dW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgV0tCdW5kbGVPdmVycmlk
ZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihidW5kbGUuYnVuZGxlKCksIGJ1bmRsZS5wYWdl
R3JvdXAoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUpOworfQorCiBib29sIFRlc3RSdW5uZXI6
OnNob3VsZER1bXBQaXhlbHMoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdl
dER1bXBQaXhlbHMiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0g
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJHZXREdW1wUGl4ZWxzIik7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0RHVtcFBpeGVscyhib29sIGR1bXBQaXhlbHMpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0RHVtcFBpeGVscyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5S
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZHVtcFBpeGVscykpOwot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0RHVtcFBpeGVscyIsIGR1bXBQ
aXhlbHMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmR1bXBBc1RleHQoYm9vbCBkdW1wUGl4ZWxz
KQpAQCAtMTIyLDE4ICsxODksMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpkdW1wQXNUZXh0KGJvb2wg
ZHVtcFBpeGVscykKICAgICAKIFdoYXRUb0R1bXAgVGVzdFJ1bm5lcjo6d2hhdFRvRHVtcCgpIGNv
bnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0V2hhdFRvRHVtcCIpKTsKLSAgICBX
S1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
cmV0dXJuRGF0YSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdoYXRUb0R1bXA+KFdLVUludDY0R2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdo
YXRUb0R1bXA+KHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdVSW50NjQoIkdldFdoYXRU
b0R1bXAiKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2hhdFRvRHVtcChXaGF0VG9EdW1w
IHdoYXRUb0R1bXApCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0V2hhdFRvRHVtcCIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih3aGF0VG9EdW1wKSkpOwotICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0V2hhdFRvRHVtcCIsIHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih3aGF0VG9EdW1wKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q3VzdG9t
UG9saWN5RGVsZWdhdGUoYm9vbCBlbmFibGVkLCBib29sIHBlcm1pc3NpdmUpCkBAIC0xNTgsMjYg
KzIxOSwxOSBAQCB2b2lkIFRlc3RSdW5uZXI6OndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKQog
CiB2b2lkIFRlc3RSdW5uZXI6OndhaXRVbnRpbERvbmUoKQogewotICAgIGF1dG8mIGluamVjdGVk
QnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFJFTEVBU0VfQVNTRVJU
KGluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSk7CiAKICAgICBzZXRXYWl0
VW50aWxEb25lKHRydWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdhaXRVbnRpbERvbmUo
Ym9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRXYWl0VW50aWxEb25l
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiU2V0V2FpdFVudGlsRG9uZSIsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpz
aG91bGRXYWl0VW50aWxEb25lKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
R2V0V2FpdFVudGlsRG9uZSIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0
YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5
cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJHZXRXYWl0VW50aWxEb25lIik7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSgpCkBAIC0yMTAsMTggKzI2NCwxMiBAQCB2b2lk
IFRlc3RSdW5uZXI6OmZvcmNlSW1tZWRpYXRlQ29tcGxldGlvbigpCiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyhib29sIHZhbHVlKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldER1
bXBGcmFtZUxvYWRDYWxsYmFja3MiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6c2hv
dWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkdldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEg
PSBudWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwg
JnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0so
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVy
biBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiR2V0RHVtcEZyYW1lTG9h
ZENhbGxiYWNrcyIpOwogfQogCiB1bnNpZ25lZCBUZXN0UnVubmVyOjppbWFnZUNvdW50SW5HZW5l
cmFsUGFzdGVib2FyZCgpIGNvbnN0CkBAIC0yMzEsMTggKzI3OSwxNCBAQCB1bnNpZ25lZCBUZXN0
UnVubmVyOjppbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCgpIGNvbnN0CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFy
dCwgYm9vbCBhbGxGcmFtZXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNvdXJj
ZVdLID0gdG9XSyhzb3VyY2UpOwotCi0gICAgV0tCdW5kbGVQYWdlQWRkVXNlclNjcmlwdChJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHNvdXJjZVdLLmdldCgpLAor
ICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTY3JpcHQocGFnZSgpLCB0b1dLKHNvdXJjZSkuZ2V0KCks
CiAgICAgICAgIChydW5BdFN0YXJ0ID8ga1dLSW5qZWN0QXREb2N1bWVudFN0YXJ0IDoga1dLSW5q
ZWN0QXREb2N1bWVudEVuZCksCiAgICAgICAgIChhbGxGcmFtZXMgPyBrV0tJbmplY3RJbkFsbEZy
YW1lcyA6IGtXS0luamVjdEluVG9wRnJhbWVPbmx5KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
YWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1lcykKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc291cmNlV0sgPSB0b1dLKHNvdXJjZSk7Ci0K
LSAgICBXS0J1bmRsZVBhZ2VBZGRVc2VyU3R5bGVTaGVldChJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIHNvdXJjZVdLLmdldCgpLAorICAgIFdLQnVuZGxlUGFnZUFk
ZFVzZXJTdHlsZVNoZWV0KHBhZ2UoKSwgdG9XSyhzb3VyY2UpLmdldCgpLAogICAgICAgICAoYWxs
RnJhbWVzID8ga1dLSW5qZWN0SW5BbGxGcmFtZXMgOiBrV0tJbmplY3RJblRvcEZyYW1lT25seSkp
OwogfQogCkBAIC0yNTMsMjkgKzI5NywxNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmtlZXBXZWJIaXN0
b3J5KCkKIAogdm9pZCBUZXN0UnVubmVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBK
U1N0cmluZ1JlZiBzaG93VUksIEpTU3RyaW5nUmVmIHZhbHVlKQogewotICAgIFdLQnVuZGxlUGFn
ZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKKyAgICBXS0J1
bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQocGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB0
b1dLKHZhbHVlKS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxXS0ZpbmRPcHRpb25zPiBm
aW5kT3B0aW9uc0Zyb21BcnJheShKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFzVmFsdWUpCiB7Ci0g
ICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0g
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
aW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgYXV0
byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygibGVuZ3RoIikpOwotICAgIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBvcHRpb25zQXJyYXlBc1ZhbHVlLCAwKTsKLSAgICBKU1ZhbHVlUmVmIGxl
bmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcHRpb25zQXJyYXksIGxl
bmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29u
dGV4dCwgbGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCisgICAg
YXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOworICAgIGF1dG8gb3B0aW9uc0FycmF5ID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9wdGlvbnNBcnJheUFzVmFsdWUsIG51bGxwdHIpOwor
ICAgIGF1dG8gbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgb3B0aW9uc0FycmF5KTsKICAg
ICBXS0ZpbmRPcHRpb25zIG9wdGlvbnMgPSAwOwotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1
ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNB
cnJheSwgaSwgMCk7Ci0gICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVl
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gb3B0aW9uTmFtZSA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLQorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIG9wdGlvbk5h
bWUgPSBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChj
b250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApKTsKICAgICAgICAgaWYgKEpTU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkNhc2VJbnNlbnNpdGl2ZSIpKQogICAg
ICAgICAgICAgb3B0aW9ucyB8PSBrV0tGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZTsKICAgICAg
ICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgp
LCAiQXRXb3JkU3RhcnRzIikpCkBAIC0yOTYsNyArMzI4LDcgQEAgc3RhdGljIE9wdGlvbmFsPFdL
RmluZE9wdGlvbnM+IGZpbmRPcHRpb25zRnJvbUFycmF5KEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5
QXNWYWwKIGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU1N0cmluZ1JlZiB0YXJnZXQsIEpT
VmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHsKICAgICBpZiAoYXV0byBvcHRpb25zID0g
ZmluZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9uc0FycmF5QXNWYWx1ZSkpCi0gICAgICAgIHJldHVy
biBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgdG9XSyh0YXJnZXQpLmdldCgpLCAqb3B0aW9ucyk7CisgICAgICAgIHJldHVy
biBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nKHBhZ2UoKSwgdG9XSyh0YXJnZXQpLmdldCgpLCAqb3B0
aW9ucyk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0zMDQsMjggKzMzNiwyMyBAQCBib29s
IFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVmIG9w
dGlvbnNBcnJheUFzVmFsdWUpCiB2b2lkIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmdNYXRjaGVzSW5Q
YWdlKEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQog
ewogICAgIGlmIChhdXRvIG9wdGlvbnMgPSBmaW5kT3B0aW9uc0Zyb21BcnJheShvcHRpb25zQXJy
YXlBc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmdNYXRjaGVz
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyh0YXJnZXQp
LmdldCgpLCAqb3B0aW9ucyk7CisgICAgICAgIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmdNYXRjaGVz
KHBhZ2UoKSwgdG9XSyh0YXJnZXQpLmdldCgpLCAqb3B0aW9ucyk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6cmVwbGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKEpTVmFsdWVSZWYgbWF0Y2hJbmRpY2Vz
QXNWYWx1ZSwgSlNTdHJpbmdSZWYgcmVwbGFjZW1lbnRUZXh0LCBib29sIHNlbGVjdGlvbk9ubHkp
CiB7CiAgICAgYXV0byYgYnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAg
IGF1dG8gbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGJ1bmRsZS5wYWdlKCkt
PnBhZ2UoKSk7Ci0gICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0KG1haW5GcmFtZSk7Ci0gICAgYXV0byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOworICAgIGF1dG8gY29udGV4
dCA9IG1haW5KU0NvbnRleHQoKTsKICAgICBhdXRvIG1hdGNoSW5kaWNlc09iamVjdCA9IEpTVmFs
dWVUb09iamVjdChjb250ZXh0LCBtYXRjaEluZGljZXNBc1ZhbHVlLCAwKTsKLSAgICBhdXRvIGxl
bmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBtYXRjaEluZGljZXNPYmpl
Y3QsIGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1i
ZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBsZW5n
dGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBtYXRjaEluZGljZXNPYmplY3QpOwogCiAgICAgYXV0
byBpbmRpY2VzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBhdXRvIGxl
bmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0
aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewot
ICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
bWF0Y2hJbmRpY2VzT2JqZWN0LCBpLCAwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlB
dEluZGV4KGNvbnRleHQsIG1hdGNoSW5kaWNlc09iamVjdCwgaSwgbnVsbHB0cik7CiAgICAgICAg
IGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVlKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGF1dG8gaW5kZXggPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHN0ZDo6
cm91bmQoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCBudWxscHRyKSkpKTsKKyAgICAg
ICAgYXV0byBpbmRleCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIHZhbHVlLCBudWxscHRyKSkpOwogICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShpbmRp
Y2VzLmdldCgpLCBpbmRleC5nZXQoKSk7CiAgICAgfQogICAgIFdLQnVuZGxlUGFnZVJlcGxhY2VT
dHJpbmdNYXRjaGVzKGJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgaW5kaWNlcy5nZXQoKSwgdG9XSyhy
ZXBsYWNlbWVudFRleHQpLmdldCgpLCBzZWxlY3Rpb25Pbmx5KTsKQEAgLTMzNCwxMSArMzYxLDcg
QEAgdm9pZCBUZXN0UnVubmVyOjpyZXBsYWNlRmluZE1hdGNoZXNBdEluZGljZXMoSlNWYWx1ZVJl
ZiBtYXRjaEluZGljZXNBc1ZhbHVlLCBKU1MKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxEYXRh
YmFzZXMoKQogewogICAgIFdLQnVuZGxlQ2xlYXJBbGxEYXRhYmFzZXMoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRlbGV0
ZUFsbEluZGV4ZWREYXRhYmFzZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUpKTsKLQotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiRGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcyIsIHRy
dWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEodWludDY0X3QgcXVv
dGEpCkBAIC0zNDgsMjkgKzM3MSwyNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVv
dGEodWludDY0X3QgcXVvdGEpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSgp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3luY0xvY2FsU3RvcmFnZSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUodHJ1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3luY0xv
Y2FsU3RvcmFnZSIsIHRydWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsQXBwbGlj
YXRpb25DYWNoZXMoKQogewotICAgIFdLQnVuZGxlUGFnZUNsZWFyQXBwbGljYXRpb25DYWNoZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxl
UGFnZUNsZWFyQXBwbGljYXRpb25DYWNoZShwYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0g
ICAgV0tCdW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpKTsKKyAg
ICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4ocGFnZSgpLCB0b1dL
KG9yaWdpbikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFwcENhY2hlTWF4aW11
bVNpemUodWludDY0X3Qgc2l6ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VTZXRBcHBDYWNoZU1heGlt
dW1TaXplKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc2l6ZSk7
CisgICAgV0tCdW5kbGVQYWdlU2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShwYWdlKCksIHNpemUpOwog
fQogCiBsb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9y
aWdpbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIFdLQnVuZGxlUGFnZUdldEFw
cENhY2hlVXNhZ2VGb3JPcmlnaW4oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCkpOworICAgIHJldHVybiBXS0J1bmRsZVBhZ2VHZXRB
cHBDYWNoZVVzYWdlRm9yT3JpZ2luKHBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpkaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3Rh
KCkKQEAgLTM4MSwxNTggKzQwMiwxMDggQEAgdm9pZCBUZXN0UnVubmVyOjpkaXNhbGxvd0luY3Jl
YXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZVJlZiBz
dHJpbmdBcnJheVRvSlMoSlNDb250ZXh0UmVmIGNvbnRleHQsIFdLQXJyYXlSZWYgc3RyaW5ncykK
IHsKICAgICBjb25zdCBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZShzdHJpbmdzKTsKLQot
ICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAw
LCAwLCAwKTsKLSAgICBKU09iamVjdFJlZiBhcnJheU9iaiA9IEpTVmFsdWVUb09iamVjdChjb250
ZXh0LCBhcnJheVJlc3VsdCwgMCk7CisgICAgYXV0byBhcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5
KGNvbnRleHQsIDAsIDAsIG51bGxwdHIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICBXS1N0cmluZ1JlZiBzdHJpbmdSZWYgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHN0cmluZ3MsIGkpKTsKLSAgICAgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZ0pTID0gdG9KUyhzdHJpbmdSZWYpOwotICAg
ICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwgaSwgSlNW
YWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgc3RyaW5nSlMuZ2V0KCkpLCAwKTsKKyAgICAgICAgYXV0
byBzdHJpbmdSZWYgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdElu
ZGV4KHN0cmluZ3MsIGkpKTsKKyAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29u
dGV4dCwgYXJyYXksIGksIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIHRvSlMoc3RyaW5nUmVm
KS5nZXQoKSksIG51bGxwdHIpOwogICAgIH0KLQotICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAg
ICByZXR1cm4gYXJyYXk7CiB9CiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhB
cHBsaWNhdGlvbkNhY2hlKCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
QXJyYXlSZWY+IG9yaWdpbnMgPSBhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlPcmlnaW5zV2l0aEFw
cGxpY2F0aW9uQ2FjaGUocGFnZSkpOwotCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLQotICAg
IHJldHVybiBzdHJpbmdBcnJheVRvSlMoY29udGV4dCwgb3JpZ2lucy5nZXQoKSk7CisgICAgcmV0
dXJuIHN0cmluZ0FycmF5VG9KUyhtYWluSlNDb250ZXh0KCksIGFkb3B0V0soV0tCdW5kbGVQYWdl
Q29weU9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShwYWdlKCkpKS5nZXQoKSk7CiB9CiAKIGJv
b2wgVGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZChKU1N0cmluZ1JlZiBuYW1lKQogewotICAg
IHJldHVybiBXS0J1bmRsZVBhZ2VJc0VkaXRpbmdDb21tYW5kRW5hYmxlZChJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCkpOworICAgIHJl
dHVybiBXS0J1bmRsZVBhZ2VJc0VkaXRpbmdDb21tYW5kRW5hYmxlZChwYWdlKCksIHRvV0sobmFt
ZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldENhbk9wZW5XaW5kb3dzKCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Q2FuT3BlbldpbmRvd3MiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHRydWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRDYW5P
cGVuV2luZG93cyIsIHRydWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JF
bmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0WFNTQXVkaXRv
ckVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1
bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCks
IGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktp
dFhTU0F1ZGl0b3JFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
TWVkaWFEZXZpY2VzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldl
YktpdE1lZGlhRGV2aWNlc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVm
ZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5k
bGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVBy
ZWZlcmVuY2UoIldlYktpdE1lZGlhRGV2aWNlc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRXZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRXZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0Vu
YWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5l
cihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtl
eS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdl
YlJUQ01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldEN1c3RvbVVzZXJBZ2VudChKU1N0cmluZ1JlZiB1c2VyQWdlbnQpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Q3VzdG9tVXNlckFnZW50IikpOwotICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCB0b1dLKHVzZXJBZ2VudCkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldEN1c3RvbVVzZXJBZ2VudCIsIHRvV0sodXNl
ckFnZW50KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBr
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRXZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VG
b3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdl
R3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5j
ZSgiV2ViS2l0V2ViQVBJU3RhdGlzdGljc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIldlYktpdE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIikpOwot
ICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwot
ICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRC
dW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVu
YWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRNb2Rlcm5NZWRpYUNv
bnRyb2xzRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdlYkdM
MkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBr
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRXZWJHTDJF
bmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5u
ZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBr
ZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRX
ZWJHTDJFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V3JpdGFi
bGVTdHJlYW1BUElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2Vi
S2l0V3JpdGFibGVTdHJlYW1BUElFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29s
UHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVk
QnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJp
ZGVQcmVmZXJlbmNlKCJXZWJLaXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQiLCBlbmFibGVkKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRUcmFuc2Zvcm1TdHJlYW1BUElFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0VHJhbnNmb3JtU3RyZWFtQVBJRW5h
YmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVy
KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5
LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0VHJh
bnNmb3JtU3RyZWFtQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFJlYWRhYmxlQnl0ZVN0cmVhbUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJXZWJLaXRSZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkIikpOwotICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdL
QnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUu
YnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQp
OworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRSZWFkYWJsZUJ5dGVTdHJlYW1B
UElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RW5jcnlwdGVk
TWVkaWFBUElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0
RW5jcnlwdGVkTWVkaWFBUElFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJl
ZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVu
ZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQ
cmVmZXJlbmNlKCJXZWJLaXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZChib29sIGVu
YWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFBpY3R1cmVJblBpY3R1cmVBUElFbmFi
bGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIo
aW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXku
Z2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRQaWN0
dXJlSW5QaWN0dXJlQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldEdlbmVyaWNDdWVBUElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiV2ViS2l0R2VuZXJpY0N1ZUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJv
b2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0
ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVy
cmlkZVByZWZlcmVuY2UoIldlYktpdEdlbmVyaWNDdWVBUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCBlbmFi
bGVkKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpOwotICAgIGluamVjdGVkQnVuZGxlLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGVu
YWJsZWQpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoZW5hYmxl
ZCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRv
RXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oYm9vbCBzaG91bGRTd2FwKQogewotICAg
IGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9u
TmV4dE5hdmlnYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHNob3VsZFN3YXApKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhpbmplY3RlZEJ1bmRsZS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0U2hvdWxkU3dhcFRvRXBoZW1l
cmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24iLCBzaG91bGRTd2FwKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oYm9v
bCBzaG91bGRTd2FwKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkU3dh
cFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdL
Qm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGRT
d2FwKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
aW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNl
dFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIsIHNob3VsZFN3YXAp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVV
UkxzKGJvb2wgZW5hYmxlZCkKQEAgLTU1NSw5ICs1MjYsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNl
dE5lZWRzU3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrKGJvb2wgbmVlZHNRdWlyaykKICAg
ICAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJXZWJLaXRQbHVnaW5zRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92
ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgp
LCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBX
VFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0UGx1Z2luc0VuYWJsZWQiLCBlbmFibGVkKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJv
b2wgZW5hYmxlZCkKQEAgLTU5MSw4ICs1NjAsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9y
aWdpbkFjY2Vzc0FsbG93TGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdAog
Ym9vbCBUZXN0UnVubmVyOjppc1BhZ2VCb3hWaXNpYmxlKGludCBwYWdlSW5kZXgpCiB7CiAgICAg
YXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAg
V0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoaW5q
ZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIHJldHVybiBXS0J1bmRsZUlzUGFnZUJv
eFZpc2libGUoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIG1haW5GcmFtZSwgcGFnZUluZGV4KTsK
KyAgICByZXR1cm4gV0tCdW5kbGVJc1BhZ2VCb3hWaXNpYmxlKGluamVjdGVkQnVuZGxlLmJ1bmRs
ZSgpLCBtYWluRnJhbWUoKSwgcGFnZUluZGV4KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRW
YWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNT
dHJpbmdSZWYgdmFsdWUpCkBAIC02MDAsMTYgKzU2OCwxNCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNl
dFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVtZW50LCBK
U1N0cgogICAgIGlmICghZWxlbWVudCB8fCAhSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGVsZW1l
bnQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS0J1bmRsZU5vZGVIYW5k
bGVSZWY+IG5vZGVIYW5kbGUgPSBhZG9wdFdLKFdLQnVuZGxlTm9kZUhhbmRsZUNyZWF0ZShjb250
ZXh0LCBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihlbGVtZW50KSkpOwotICAgIFdLQnVuZGxlTm9k
ZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIobm9kZUhhbmRsZS5nZXQoKSwg
dG9XSyh2YWx1ZSkuZ2V0KCkpOworICAgIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVs
ZW1lbnRWYWx1ZUZvclVzZXIoYWRvcHRXSyhXS0J1bmRsZU5vZGVIYW5kbGVDcmVhdGUoY29udGV4
dCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4oZWxlbWVudCkpKS5nZXQoKSwgdG9XSyh2YWx1ZSku
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1ZGlvUmVzdWx0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGRhdGEpCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgLy8gRklYTUUgKDEyMzA1OCk6IFVz
ZSBhIEpTQyBBUEkgdG8gZ2V0IGJ1ZmZlciBjb250ZW50cyBvbmNlIHN1Y2ggaXMgZXhwb3NlZC4K
LSAgICBXS1JldGFpblB0cjxXS0RhdGFSZWY+IGF1ZGlvRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVD
cmVhdGVXS0RhdGFGcm9tVUludDhBcnJheShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgY29udGV4
dCwgZGF0YSkpOwotICAgIGluamVjdGVkQnVuZGxlLnNldEF1ZGlvUmVzdWx0KGF1ZGlvRGF0YS5n
ZXQoKSk7CisgICAgaW5qZWN0ZWRCdW5kbGUuc2V0QXVkaW9SZXN1bHQoYWRvcHRXSyhXS0J1bmRs
ZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBjb250
ZXh0LCBkYXRhKSkuZ2V0KCkpOwogICAgIHNldFdoYXRUb0R1bXAoV2hhdFRvRHVtcDo6QXVkaW8p
OwogICAgIHNldER1bXBQaXhlbHMoZmFsc2UpOwogfQpAQCAtNjIxLDMzICs1ODcsMzAgQEAgdW5z
aWduZWQgVGVzdFJ1bm5lcjo6d2luZG93Q291bnQoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFy
QmFja0ZvcndhcmRMaXN0KCkKIHsKLSAgICBXS0J1bmRsZUNsZWFySGlzdG9yeUZvclRlc3Rpbmco
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRs
ZUNsZWFySGlzdG9yeUZvclRlc3RpbmcocGFnZSgpKTsKIH0KIAotLy8gT2JqZWN0IENyZWF0aW9u
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lk
IFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0g
ICAgc2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCAidGVzdFJ1bm5lciIsIHRoaXMs
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwg
InRlc3RSdW5uZXIiLCB0aGlzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVj
dG9yKCkKIHsKLSAgICBXS0J1bmRsZUluc3BlY3RvclNob3coV0tCdW5kbGVQYWdlR2V0SW5zcGVj
dG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpOworICAgIFdL
QnVuZGxlSW5zcGVjdG9yU2hvdyhXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgpKSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQogewotICAgIFdLQnVuZGxl
SW5zcGVjdG9yQ2xvc2UoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpOworICAgIFdLQnVuZGxlSW5zcGVjdG9yQ2xvc2Uo
V0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAgICBXS0J1bmRs
ZUluc3BlY3RvckV2YWx1YXRlU2NyaXB0Rm9yVGVzdChXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3Io
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSwgc2NyaXB0V0suZ2V0
KCkpOworICAgIFdLQnVuZGxlSW5zcGVjdG9yRXZhbHVhdGVTY3JpcHRGb3JUZXN0KFdLQnVuZGxl
UGFnZUdldEluc3BlY3RvcihwYWdlKCkpLCB0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCi10eXBl
ZGVmIFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3Js
ZFJlZj4gPiBXb3JsZE1hcDsKK3VzaW5nIFdvcmxkTWFwID0gV1RGOjpIYXNoTWFwPHVuc2lnbmVk
LCBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVmPj47CiBzdGF0aWMgV29ybGRNYXAm
IHdvcmxkTWFwKCkKIHsKICAgICBzdGF0aWMgV29ybGRNYXAmIG1hcCA9ICpuZXcgV29ybGRNYXA7
CkBAIC02NTYsMTIgKzYxOSwxMSBAQCBzdGF0aWMgV29ybGRNYXAmIHdvcmxkTWFwKCkKIAogdW5z
aWduZWQgVGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKFdLQnVuZGxlU2NyaXB0V29ybGRSZWYg
d29ybGQpCiB7Ci0gICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCku
ZW5kKCk7Ci0gICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgp
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlID09IHdv
cmxkKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CisgICAgLy8gRklYTUU6IFRoaXMgaXMg
dGhlIGFudGktcGF0dGVybiBvZiBpdGVyYXRpbmcgYW4gZW50aXJlIG1hcC4gVHlwaWNhbGx5IHdl
IHVzZSBhIHBhaXIgb2YgbWFwcyBvciBqdXN0IGEgdmVjdG9yIGluIGEgY2FzZSBsaWtlIHRoaXMu
CisgICAgZm9yIChhdXRvJiBtYXBFbnRyeSA6IHdvcmxkTWFwKCkpIHsKKyAgICAgICAgaWYgKG1h
cEVudHJ5LnZhbHVlID09IHdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIG1hcEVudHJ5LmtleTsK
ICAgICB9Ci0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjgxLDcgKzY0Myw3IEBAIHZvaWQgVGVz
dFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIHVuc2lnbmVkIHdvCiAKICAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVG
cmFtZUZvckphdmFTY3JpcHRDb250ZXh0KGNvbnRleHQpOwogICAgIGlmICghZnJhbWUpCi0gICAg
ICAgIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgICAgIGZyYW1lID0gbWFpbkZyYW1lKCk7CiAK
ICAgICBKU0dsb2JhbENvbnRleHRSZWYganNDb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkLmdldCgpKTsKICAgICBKU0V2YWx1YXRl
U2NyaXB0KGpzQ29udGV4dCwgc2NyaXB0LCAwLCAwLCAwLCAwKTsgCkBAIC02OTYsOCArNjU4LDcg
QEAgdm9pZCBUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZShKU1N0cmluZ1JlZiBsb2NhbGUpCiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZiBkaXJlY3Rpb24p
CiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBy
ZXR1cm4gV0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24obWFpbkZyYW1lLCB0b1dLKGRpcmVj
dGlvbikuZ2V0KCkpOworICAgIHJldHVybiBXS0J1bmRsZUZyYW1lU2V0VGV4dERpcmVjdGlvbiht
YWluRnJhbWUoKSwgdG9XSyhkaXJlY3Rpb24pLmdldCgpKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoYm9vbCBz
aG91bGRTdGF5T25QYWdlKQpAQCAtNzA3LDE3ICs2NjgsMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpz
ZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChib29sIHNob3VsZFN0
YXlPblAKIAogYm9vbCBUZXN0UnVubmVyOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92
aXNpb25hbE5hdmlnYXRpb24oKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRp
ZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpKTsKLSAgICBX
S1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAg
IEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTmF2aWdhdGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJDbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lv
bmFsTmF2aWdhdGlvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZSgiQ2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5h
dmlnYXRpb24iKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShKU1N0
cmluZ1JlZiBzdGF0ZSkKQEAgLTczMCw3ICs2ODYsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0
UGFnZVZpc2liaWxpdHkoKQogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRIaWRk
ZW4oZmFsc2UpOwogfQogCi10eXBlZGVmIFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVJl
Zj4gQ2FsbGJhY2tNYXA7Cit1c2luZyBDYWxsYmFja01hcCA9IFdURjo6SGFzaE1hcDx1bnNpZ25l
ZCwgSlNPYmplY3RSZWY+Owogc3RhdGljIENhbGxiYWNrTWFwJiBjYWxsYmFja01hcCgpCiB7CiAg
ICAgc3RhdGljIENhbGxiYWNrTWFwJiBtYXAgPSAqbmV3IENhbGxiYWNrTWFwOwpAQCAtNzgzLDM4
ICs3MzksMzIgQEAgc3RhdGljIHZvaWQgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQg
aW5kZXgsIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgaWYgKCFjYWxsYmFjaykKICAgICAg
ICAgcmV0dXJuOwotCisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOworICAgIGlm
ICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGNhbGxiYWNrKSkKKyAgICAgICAgcmV0dXJuOwog
ICAgIGlmIChjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkgewogICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJGQUlMOiBUcmllZCB0
byBpbnN0YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIgY2FsbGJhY2sgZm9yIHRoZSBzYW1lIGV2ZW50
IChpZCAiLCBpbmRleCwgIilcblxuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAg
V0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRS
ZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUp
OwogICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKLSAgICBjYWxsYmFja01h
cCgpLmFkZChpbmRleCwgY2FsbGJhY2spOworICAgIGNhbGxiYWNrTWFwKCkuYWRkKGluZGV4LCBj
b25zdF9jYXN0PEpTT2JqZWN0UmVmPihjYWxsYmFjaykpOwogfQogCiBzdGF0aWMgdm9pZCBjYWxs
VGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBzaXplX3QgYXJndW1lbnRDb3VudCA9
IDAsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10gPSBudWxscHRyKQogewotICAgIGlmICgh
Y2FsbGJhY2tNYXAoKS5jb250YWlucyhpbmRleCkpCisgICAgYXV0byBjYWxsYmFjayA9IGNhbGxi
YWNrTWFwKCkudGFrZShpbmRleCk7CisgICAgaWYgKCFjYWxsYmFjaykKICAgICAgICAgcmV0dXJu
OwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlND
b250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFp
bkZyYW1lKTsKLSAgICBKU09iamVjdFJlZiBjYWxsYmFjayA9IEpTVmFsdWVUb09iamVjdChjb250
ZXh0LCBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpLCAwKTsKKyAgICBhdXRvIGNvbnRleHQgPSBt
YWluSlNDb250ZXh0KCk7CiAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjYWxs
YmFjaywgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBhcmd1bWVudENvdW50LCBh
cmd1bWVudHMsIDApOwogICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyVGVzdFJ1bm5lckNhbGxiYWNrcygpCiB7Ci0gICAg
Zm9yIChhdXRvJiBpdGVyIDogY2FsbGJhY2tNYXAoKSkgewotICAgICAgICBXS0J1bmRsZUZyYW1l
UmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgICAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgICAg
ICBKU09iamVjdFJlZiBjYWxsYmFjayA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBpdGVyLnZh
bHVlLCAwKTsKLSAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7Ci0g
ICAgfQotCisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOworICAgIGZvciAoYXV0
byYgdmFsdWUgOiBjYWxsYmFja01hcCgpLnZhbHVlcygpKQorICAgICAgICBKU1ZhbHVlVW5wcm90
ZWN0KGNvbnRleHQsIEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwog
ICAgIGNhbGxiYWNrTWFwKCkuY2xlYXIoKTsKIH0KIApAQCAtODk0LDIwICs4NDQsMTIgQEAgdm9p
ZCBUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVyZW5jZSwg
SlNTdHJpbmdSZWYgdmFsdWUpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29v
a2llcyhib29sIGFjY2VwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBbHdheXNB
Y2NlcHRDb29raWVzIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGFjY2VwdCkpOwotCi0gICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRBbHdheXNBY2NlcHRDb29raWVzIiwgYWNjZXB0KTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMoYm9v
bCBhY2NlcHQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0T25seUFjY2VwdEZpcnN0
UGFydHlDb29raWVzIikpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShhY2NlcHQpKTsKLSAgICAKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29v
a2llcyIsIGFjY2VwdCk7CiB9CiAKIGRvdWJsZSBUZXN0UnVubmVyOjpwcmVjaXNlVGltZSgpCkBA
IC05MjQsMTUgKzg2NiwxNSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5h
YmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV91c2VyU3R5bGVTaGVldEVuYWJsZWQgPSBlbmFi
bGVkOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVtcHR5VXJsID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotICAgIFdLU3RyaW5nUmVmIGxvY2F0
aW9uID0gZW5hYmxlZCA/IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbi5nZXQoKSA6IGVtcHR5VXJs
LmdldCgpOworICAgIGF1dG8gZW1wdHlTdHJpbmcgPSB0b1dLKCIiKTsKKyAgICBhdXRvIGxvY2F0
aW9uID0gZW5hYmxlZCA/IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbi5nZXQoKSA6IGVtcHR5U3Ry
aW5nLmdldCgpOwogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwogICAgIFdLQnVuZGxlU2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihpbmplY3Rl
ZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGxvY2F0aW9uKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5n
UmVmIGxvY2F0aW9uKQogewotICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcobG9jYXRpb24pKTsKKyAgICBtX3VzZXJTdHlsZVNo
ZWV0TG9jYXRpb24gPSB0b1dLKGxvY2F0aW9uKTsKIAogICAgIGlmIChtX3VzZXJTdHlsZVNoZWV0
RW5hYmxlZCkKICAgICAgICAgc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKHRydWUpOwpAQCAtOTQ2
LDggKzg4OCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVk
KGJvb2wgZW5hYmxlZCkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdo
RWxlbWVudHMoYm9vbCBlbmFibGVkKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlU2V0VGFiS2V5Q3ljbGVzVGhy
b3VnaEVsZW1lbnRzKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdl
KCktPnBhZ2UoKSwgZW5hYmxlZCk7CisgICAgV0tCdW5kbGVTZXRUYWJLZXlDeWNsZXNUaHJvdWdo
RWxlbWVudHMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCksIGVu
YWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2FkcygpCkBA
IC05NzMsMzYgKzkxNCwyOCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIAogdm9pZCBUZXN0UnVubmVyOjpncmFudFdl
Yk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBhdXRvJiBp
bmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRs
ZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGlu
amVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBvcmlnaW5XSy5nZXQoKSwgdHJ1ZSk7CisgICAg
V0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgcGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCksIHRydWUpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OmRlbnlXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5n
UmVmIG9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0
b1dLKG9yaWdpbik7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKGlu
amVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgb3Jp
Z2luV0suZ2V0KCksIGZhbHNlKTsKKyAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCksIHRvV0so
b3JpZ2luKS5nZXQoKSwgZmFsc2UpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFsbFdl
Yk5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVJlbW92ZUFsbFdlYk5v
dGlmaWNhdGlvblBlcm1pc3Npb25zKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1
bmRsZS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVSZW1vdmVBbGxXZWJOb3RpZmljYXRp
b25QZXJtaXNzaW9ucyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHBhZ2Uo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhK
U1ZhbHVlUmVmIG5vdGlmaWNhdGlvbikKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2Uo
KSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlw
dENvbnRleHQobWFpbkZyYW1lKTsKLSAgICB1aW50NjRfdCBub3RpZmljYXRpb25JRCA9IFdLQnVu
ZGxlR2V0V2ViTm90aWZpY2F0aW9uSUQoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQs
IG5vdGlmaWNhdGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUucG9zdFNpbXVsYXRlV2ViTm90aWZp
Y2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uSUQpOworICAgIGluamVjdGVkQnVuZGxlLnBvc3RTaW11
bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKFdLQnVuZGxlR2V0V2ViTm90aWZpY2F0aW9uSUQoaW5q
ZWN0ZWRCdW5kbGUuYnVuZGxlKCksIG1haW5KU0NvbnRleHQoKSwgbm90aWZpY2F0aW9uKSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4KKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4KICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGVuYWJsZWQpOwogfQogCkBA
IC0xMDExLDEwMiArOTQ0LDUxIEBAIGJvb2wgVGVzdFJ1bm5lcjo6aXNHZW9sb2NhdGlvblByb3Zp
ZGVyQWN0aXZlKCkKICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzR2Vv
bG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91
YmxlIGFjY3VyYWN5LCBKU1ZhbHVlUmVmIGpzQWx0aXR1ZGUsIEpTVmFsdWVSZWYganNBbHRpdHVk
ZUFjY3VyYWN5LCBKU1ZhbHVlUmVmIGpzSGVhZGluZywgSlNWYWx1ZVJlZiBqc1NwZWVkLCBKU1Zh
bHVlUmVmIGpzRmxvb3JMZXZlbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJh
Y3ksIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVB
Y2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVk
LCBPcHRpb25hbDxkb3VibGU+IGZsb29yTGV2ZWwpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBt
YWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoaW5qZWN0ZWRCdW5kbGUucGFnZSgp
LT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0KLSAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGUg
PSBmYWxzZTsKLSAgICBkb3VibGUgYWx0aXR1ZGUgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1Vu
ZGVmaW5lZChjb250ZXh0LCBqc0FsdGl0dWRlKSkgewotICAgICAgICBwcm92aWRlc0FsdGl0dWRl
ID0gdHJ1ZTsKLSAgICAgICAgYWx0aXR1ZGUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNB
bHRpdHVkZSwgMCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kg
PSBmYWxzZTsKLSAgICBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSA9IDAuOwotICAgIGlmICghSlNW
YWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIGpzQWx0aXR1ZGVBY2N1cmFjeSkpIHsKLSAgICAgICAg
cHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5ID0gdHJ1ZTsKLSAgICAgICAgYWx0aXR1ZGVBY2N1cmFj
eSA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc0FsdGl0dWRlQWNjdXJhY3ksIDApOwotICAg
IH0KLQotICAgIGJvb2wgcHJvdmlkZXNIZWFkaW5nID0gZmFsc2U7Ci0gICAgZG91YmxlIGhlYWRp
bmcgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCBqc0hlYWRpbmcp
KSB7Ci0gICAgICAgIHByb3ZpZGVzSGVhZGluZyA9IHRydWU7Ci0gICAgICAgIGhlYWRpbmcgPSBK
U1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNIZWFkaW5nLCAwKTsKLSAgICB9Ci0KLSAgICBib29s
IHByb3ZpZGVzU3BlZWQgPSBmYWxzZTsKLSAgICBkb3VibGUgc3BlZWQgPSAwLjsKLSAgICBpZiAo
IUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCBqc1NwZWVkKSkgewotICAgICAgICBwcm92aWRl
c1NwZWVkID0gdHJ1ZTsKLSAgICAgICAgc3BlZWQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
anNTcGVlZCwgMCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwgPSBmYWxz
ZTsKLSAgICBkb3VibGUgZmxvb3JMZXZlbCA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZp
bmVkKGNvbnRleHQsIGpzRmxvb3JMZXZlbCkpIHsKLSAgICAgICAgcHJvdmlkZXNGbG9vckxldmVs
ID0gdHJ1ZTsKLSAgICAgICAgZmxvb3JMZXZlbCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBq
c0Zsb29yTGV2ZWwsIDApOwotICAgIH0KLQotICAgIGluamVjdGVkQnVuZGxlLnNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0Fs
dGl0dWRlLCBhbHRpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3Vy
YWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkLCBwcm92
aWRlc0Zsb29yTGV2ZWwsIGZsb29yTGV2ZWwpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1
cmFjeSwgYWx0aXR1ZGUsIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkLCBmbG9vckxl
dmVsKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVu
YXZhaWxhYmxlRXJyb3IoSlNTdHJpbmdSZWYgbWVzc2FnZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZVdLID0gdG9XSyhtZXNzYWdlKTsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9y
KG1lc3NhZ2VXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcih0b1dLKG1lc3NhZ2UpLmdldCgp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGJvb2wgZW5h
YmxlZCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4KKyAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4KICAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVybWlzc2lvbihlbmFibGVkKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24oKQogewotICAgIC8vIEZJ
WE1FOiB0aGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgorICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBkb25lIGJ5IGZyYW1lLgogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5y
ZXNldFVzZXJNZWRpYVBlcm1pc3Npb24oKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc0RvaW5n
TWVkaWFDYXB0dXJlKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc0RvaW5n
TWVkaWFDYXB0dXJlIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxs
cHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRv
cHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAg
cmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNEb2lu
Z01lZGlhQ2FwdHVyZSIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcnNp
c3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKGJvb2wgcGVybWlzc2lvbiwgSlNTdHJpbmdSZWYgb3Jp
Z2luLCBKU1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBwYXJlbnRPcmlnaW5XSyA9IHRvV0socGFyZW50T3JpZ2luKTsKLSAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmln
aW4ocGVybWlzc2lvbiwgb3JpZ2luV0suZ2V0KCksIHBhcmVudE9yaWdpbldLLmdldCgpKTsKKyAg
ICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1p
c3Npb25Gb3JPcmlnaW4ocGVybWlzc2lvbiwgdG9XSyhvcmlnaW4pLmdldCgpLCB0b1dLKHBhcmVu
dE9yaWdpbikuZ2V0KCkpOwogfQogCiB1bnNpZ25lZCBUZXN0UnVubmVyOjp1c2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbiwgSlNTdHJpbmdS
ZWYgcGFyZW50T3JpZ2luKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBv
cmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFy
ZW50T3JpZ2luV0sgPSB0b1dLKHBhcmVudE9yaWdpbik7Ci0gICAgcmV0dXJuIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS51c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2lu
KG9yaWdpbldLLmdldCgpLCBwYXJlbnRPcmlnaW5XSy5nZXQoKSk7CisgICAgcmV0dXJuIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS51c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9y
T3JpZ2luKHRvV0sob3JpZ2luKS5nZXQoKSwgdG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRG
b3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luLCBKU1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5XSyA9IHRvV0socGFyZW50
T3JpZ2luKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucmVzZXRVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKG9yaWdpbldLLmdldCgpLCBwYXJlbnRPcmln
aW5XSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnJlc2V0VXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbih0b1dLKG9yaWdpbikuZ2V0KCksIHRv
V0socGFyZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6Y2FsbFNob3Vs
ZENsb3NlT25XZWJWaWV3KCkKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdL
QnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCkpOwotICAgIHJldHVybiBXS0J1bmRsZUZyYW1lQ2FsbFNob3VsZENsb3NlT25XZWJW
aWV3KG1haW5GcmFtZSk7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVDYWxsU2hvdWxkQ2xvc2VP
bldlYlZpZXcobWFpbkZyYW1lKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlQmFja05h
dmlnYXRpb24odW5zaWduZWQgaG93RmFyQmFja3dhcmQpCkBAIC0xMTIyLDIwICsxMDA0LDE3IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJG
b3J3YXJkKQogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0
cmluZ1JlZiB0YXJnZXQsIGJvb2wgc2hvdWxkT3BlbkV4dGVybmFsVVJMcykKIHsKICAgICBhdXRv
JiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1VSTFJlZj4gYmFzZVVSTFdLID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVS
TChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkp
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybFdLID0gYWRvcHRXSyhXS1VSTENyZWF0
ZVdpdGhCYXNlVVJMKGJhc2VVUkxXSy5nZXQoKSwgdG9XVEZTdHJpbmcodG9XSyh1cmwpKS51dGY4
KCkuZGF0YSgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZ1dLID0g
YWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsV0suZ2V0KCkpKTsKLQorICAgIGF1dG8gYmFzZVVS
TFdLID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUoKSkpOworICAgIGF1
dG8gdXJsV0sgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTFdLLmdldCgp
LCB0b1dURlN0cmluZyh1cmwpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBhdXRvIHVybFN0cmluZ1dL
ID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsV0suZ2V0KCkpKTsKICAgICBpbmplY3RlZEJ1
bmRsZS5xdWV1ZUxvYWQodXJsU3RyaW5nV0suZ2V0KCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgc2hv
dWxkT3BlbkV4dGVybmFsVVJMcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkSFRN
TFN0cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMLCBKU1N0cmlu
Z1JlZiB1bnJlYWNoYWJsZVVSTCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY29u
dGVudFdLID0gdG9XSyhjb250ZW50KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYmFz
ZVVSTFdLID0gYmFzZVVSTCA/IHRvV0soYmFzZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4oKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkxXSyA9IHVu
cmVhY2hhYmxlVVJMID8gdG9XSyh1bnJlYWNoYWJsZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4oKTsKLQotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZUxvYWRIVE1M
U3RyaW5nKGNvbnRlbnRXSy5nZXQoKSwgYmFzZVVSTFdLLmdldCgpLCB1bnJlYWNoYWJsZVVSTFdL
LmdldCgpKTsKKyAgICBhdXRvIGJhc2VVUkxXSyA9IGJhc2VVUkwgPyB0b1dLKGJhc2VVUkwpIDog
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7CisgICAgYXV0byB1bnJlYWNoYWJsZVVSTFdLID0g
dW5yZWFjaGFibGVVUkwgPyB0b1dLKHVucmVhY2hhYmxlVVJMKSA6IFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPigpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZUxvYWRIVE1M
U3RyaW5nKHRvV0soY29udGVudCkuZ2V0KCksIGJhc2VVUkxXSy5nZXQoKSwgdW5yZWFjaGFibGVV
UkxXSy5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQoKQpAQCAtMTE0
NSwxNjMgKzEwMjQsMTE5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQoKQogCiB2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwotICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZUxvYWRpbmdTY3JpcHQoc2NyaXB0V0su
Z2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZUxvYWRpbmdTY3Jp
cHQodG9XSyhzY3JpcHQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZU5vbkxv
YWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucXVldWVOb25Mb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgpKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVOb25Mb2FkaW5nU2NyaXB0KHRvV0soc2NyaXB0
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFj
ZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2wgdmFsdWUpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRp
bnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9v
bGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIlNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZv
ckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIHZhbHVlKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhib29sIGhhbmRsZXNBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0SGFu
ZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFuZGxlc0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlcykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEhhbmRsZXNBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZXMiLCBoYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGRMb2dDYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzKGJvb2wgdmFsdWUpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkTG9nRG93bmxv
YWRDYWxsYmFja3MiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0aGVudGlj
YXRpb25Vc2VybmFtZShKU1N0cmluZ1JlZiB1c2VybmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lIikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcodXNlcm5hbWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRBdXRoZW50aWNhdGlvblVzZXJu
YW1lIiwgdG9XSyh1c2VybmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1
dGhlbnRpY2F0aW9uUGFzc3dvcmQoSlNTdHJpbmdSZWYgcGFzc3dvcmQpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0QXV0aGVudGljYXRpb25QYXNzd29yZCIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKHBhc3N3b3JkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0QXV0aGVudGljYXRp
b25QYXNzd29yZCIsIHRvV0socGFzc3dvcmQpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVy
OjpzZWN1cmVFdmVudElucHV0SXNFbmFibGVkKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZWN1cmVFdmVudElucHV0SXNFbmFibGVkIikpOwotICAgIFdLVHlwZVJlZiByZXR1
cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0
VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4g
V0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVy
bkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0
dXJuaW5nQm9vbGVhbigiU2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCIpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldEJsb2NrQWxsUGx1Z2lucyhib29sIHNob3VsZEJsb2NrKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldEJsb2NrQWxsUGx1Z2lucyIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hv
dWxkQmxvY2spKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRCbG9ja0FsbFBsdWdpbnMiLCBzaG91
bGRCbG9jayk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2luU3VwcG9ydGVkTW9kZShK
U1N0cmluZ1JlZiBtb2RlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFBsdWdpblN1
cHBvcnRlZE1vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhtb2RlKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0UGx1Z2luU3VwcG9ydGVkTW9kZSIsIHRvV0sobW9kZSkuZ2V0KCkpOwogfQog
CiBKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKCkKIHsKLSAgICBX
S0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7
Ci0gICAgcmV0dXJuIEpTQzo6ZmFpbE5leHROZXdDb2RlQmxvY2soY29udGV4dCk7CisgICAgcmV0
dXJuIEpTQzo6ZmFpbE5leHROZXdDb2RlQmxvY2sobWFpbkpTQ29udGV4dCgpKTsKIH0KIAotSlNW
YWx1ZVJlZiBUZXN0UnVubmVyOjpudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWVSZWYgdGhlRnVu
Y3Rpb24pCitKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1
ZVJlZiBmdW5jdGlvbikKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgcmV0dXJuIEpTQzo6bnVtYmVyT2ZERkdDb21w
aWxlcyhjb250ZXh0LCB0aGVGdW5jdGlvbik7CisgICAgcmV0dXJuIEpTQzo6bnVtYmVyT2ZERkdD
b21waWxlcyhtYWluSlNDb250ZXh0KCksIGZ1bmN0aW9uKTsKIH0KIAotSlNWYWx1ZVJlZiBUZXN0
UnVubmVyOjpuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgdGhlRnVuY3Rpb24pCitKU1Zh
bHVlUmVmIFRlc3RSdW5uZXI6Om5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiBmdW5jdGlv
bikKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAg
IEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0
KG1haW5GcmFtZSk7Ci0gICAgcmV0dXJuIEpTQzo6c2V0TmV2ZXJJbmxpbmUoY29udGV4dCwgdGhl
RnVuY3Rpb24pOworICAgIHJldHVybiBKU0M6OnNldE5ldmVySW5saW5lKG1haW5KU0NvbnRleHQo
KSwgZnVuY3Rpb24pOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZU5hdmln
YXRpb25Qb2xpY3lBZnRlckRlbGF5KGJvb2wgdmFsdWUpCiB7CiAgICAgbV9zaG91bGREZWNpZGVO
YXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheSA9IHZhbHVlOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5IikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZERlY2lkZU5hdmlnYXRp
b25Qb2xpY3lBZnRlckRlbGF5IiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNo
b3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheShib29sIHZhbHVlKQogewogICAgIG1f
c2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5ID0gdmFsdWU7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5Iikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZERlY2lk
ZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZCIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFi
bGVkIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldElnbm9yZXNWaWV3cG9ydFNj
YWxlTGltaXRzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0SWdu
b3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiU2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiLCB2YWx1ZSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVz
KGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkRG93bmxv
YWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyIsIHZh
bHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0
aW9uQW5kTW90aW9uQWNjZXNzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGRBbGxvd0Rldmlj
ZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiVGVybWluYXRlTmV0d29ya1Byb2Nlc3MiKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVGVybWluYXRlU2VydmljZVdvcmtlcnMiKSk7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlRlcm1pbmF0ZVNlcnZpY2VXb3Jr
ZXJzIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJT
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzIiwgdmFsdWUpOwogfQogCiBzdGF0aWMg
dW5zaWduZWQgbmV4dFVJU2NyaXB0Q2FsbGJhY2tJRCgpCkBAIC0xMzE0LDk3ICsxMTQ5LDQ4IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0LCBKU1ZhbHVl
UmVmIGNhbGxiYWNrKQogewogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBuZXh0VUlTY3JpcHRD
YWxsYmFja0lEKCk7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soY2FsbGJhY2tJRCwgY2Fs
bGJhY2spOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUnVuVUlQcm9jZXNzU2NyaXB0Iikp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gdGVzdERpY3Rpb25h
cnkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3Jp
cHRWYWx1ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoc2NyaXB0KSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tVSW50NjRSZWY+IGNhbGxiYWNrSURWYWx1ZSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
Y2FsbGJhY2tJRCkpOwotCi0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSh0ZXN0RGljdGlvbmFyeS5n
ZXQoKSwgc2NyaXB0S2V5LmdldCgpLCBzY3JpcHRWYWx1ZS5nZXQoKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbSh0ZXN0RGljdGlvbmFyeS5nZXQoKSwgY2FsbGJhY2tJREtleS5nZXQoKSwgY2Fs
bGJhY2tJRFZhbHVlLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IHRlc3REaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJ1blVJUHJvY2Vz
c1NjcmlwdCIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlNjcmlwdCIsIHRvV0so
c2NyaXB0KSB9LAorICAgICAgICB7ICJDYWxsYmFja0lEIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShjYWxsYmFja0lEKSkuZ2V0KCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6cnVuVUlTY3JpcHRJbW1lZGlhdGVseShKU1N0cmluZ1JlZiBzY3JpcHQsIEpTVmFsdWVS
ZWYgY2FsbGJhY2spCiB7CiAgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG5leHRVSVNjcmlwdENh
bGxiYWNrSUQoKTsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhjYWxsYmFja0lELCBjYWxs
YmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSdW5VSVByb2Nlc3NTY3JpcHRJbW1l
ZGlhdGVseSIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IHRl
c3REaWN0aW9uYXJ5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNjcmlwdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc2NyaXB0VmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHNj
cmlwdCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBjYWxsYmFja0lEVmFsdWUgPSBhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGNhbGxiYWNrSUQpKTsKLQotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0odGVzdERp
Y3Rpb25hcnkuZ2V0KCksIHNjcmlwdEtleS5nZXQoKSwgc2NyaXB0VmFsdWUuZ2V0KCkpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0odGVzdERpY3Rpb25hcnkuZ2V0KCksIGNhbGxiYWNrSURLZXku
Z2V0KCksIGNhbGxiYWNrSURWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCB0ZXN0RGljdGlvbmFyeS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJS
dW5VSVByb2Nlc3NTY3JpcHRJbW1lZGlhdGVseSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAg
ICAgIHsgIlNjcmlwdCIsIHRvV0soc2NyaXB0KSB9LAorICAgICAgICB7ICJDYWxsYmFja0lEIiwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjYWxsYmFja0lEKSkuZ2V0KCkgfSwKKyAgICB9KS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHRDYWxsYmFjayh1bnNpZ25lZCBj
YWxsYmFja0lELCBKU1N0cmluZ1JlZiByZXN1bHQpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBt
YWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVu
ZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotCi0gICAgSlNWYWx1ZVJl
ZiByZXN1bHRWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIHJlc3VsdCk7CisgICAg
SlNWYWx1ZVJlZiByZXN1bHRWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKG1haW5KU0NvbnRleHQo
KSwgcmVzdWx0KTsKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKGNhbGxiYWNrSUQsIDEsICZy
ZXN1bHRWYWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dlZE1lbnVBY3Rpb25z
KEpTVmFsdWVSZWYgYWN0aW9ucykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBbGxv
d2VkTWVudUFjdGlvbnMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLQotICAgIGF1dG8g
cGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBh
dXRvIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKLSAgICBhdXRv
IGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsK
LSAgICBhdXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJsZW5ndGgiKSk7CisgICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgp
OwogICAgIGF1dG8gYWN0aW9uc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFjdGlv
bnMsIG51bGxwdHIpOwotICAgIGF1dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
KGNvbnRleHQsIGFjdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRy
KTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8gbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhY3Rpb25zQXJyYXksIGksIDApOwotICAgICAgICBp
ZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBhdXRvIGFjdGlvbk5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIHZhbHVlLCAwKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBh
Y3Rpb24gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGFjdGlvbk5hbWUuZ2V0
KCkpKTsKLSAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFjdGlv
bi5nZXQoKSk7CisgICAgYXV0byBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBhY3Rpb25z
QXJyYXkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAg
ICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYWN0
aW9uc0FycmF5LCBpLCBudWxscHRyKTsKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2Fn
ZUJvZHkuZ2V0KCksIHRvV0tTdHJpbmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsKICAgICB9Ci0K
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0QWxsb3dlZE1lbnVBY3Rp
b25zIiwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxD
dXN0b21NZW51QWN0aW9uKEpTU3RyaW5nUmVmIG5hbWUsIGJvb2wgZGlzbWlzc2VzQXV0b21hdGlj
YWxseSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFj
ayhDdXN0b21NZW51QWN0aW9uQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm5hbWUiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVWYWx1ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcobmFtZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJv
ZHkuZ2V0KCksIG5hbWVLZXkuZ2V0KCksIG5hbWVWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gZGlzbWlzc2VzQXV0b21hdGljYWxseUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImRpc21pc3Nlc0F1dG9tYXRpY2FsbHkiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5VmFsdWUg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkaXNtaXNzZXNBdXRvbWF0aWNhbGx5KSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgZGlzbWlzc2VzQXV0b21hdGlj
YWxseUtleS5nZXQoKSwgZGlzbWlzc2VzQXV0b21hdGljYWxseVZhbHVlLmdldCgpKTsKLQotICAg
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIkluc3RhbGxDdXN0b21NZW51QWN0aW9uIiwgY3JlYXRlV0tEaWN0aW9u
YXJ5KHsKKyAgICAgICAgeyAibmFtZSIsIHRvV0sobmFtZSkgfSwKKyAgICAgICAgeyAiZGlzbWlz
c2VzQXV0b21hdGljYWxseSIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRpc21pc3Nlc0F1dG9t
YXRpY2FsbHkpKS5nZXQoKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjppbnN0YWxsRGlkQmVnaW5Td2lwZUNhbGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spCkBAIC0x
NDQ5LDU4ICsxMjM1LDMwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZVN3aXBlU25h
cHNob3RDYWxsYmFjaygpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJTdGF0aXN0aWNzRGF0YUZv
ckRvbWFpbihKU1N0cmluZ1JlZiBkb21haW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Q2xlYXJTdGF0aXN0aWNzRGF0YUZvckRvbWFpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGRv
bWFpbikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJTdGF0aXN0
aWNzRGF0YUZvckRvbWFpbiIsIHRvV0soZG9tYWluKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1
bm5lcjo6ZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSh1bnNpZ25lZCBkb21h
aW5JRCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb21haW5JRCIpKSk7Ci0g
ICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRvbWFpbklEKSkpOwotCi0g
ICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8
V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNb
aV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJ
bkRhdGFiYXNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVz
LmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51
bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRU
eXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBX
S0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJu
RGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuKCJEb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlIiwgY3Jl
YXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiRG9tYWluSUQiLCBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGRvbWFpbklEKSkgfQorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzRW5hYmxlZChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldFN0YXRpc3RpY3NFbmFibGVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc0VuYWJsZWQiLCB2
YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzRXBoZW1lcmFsKCkKIHsK
LSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSXNTdGF0aXN0aWNzRXBoZW1lcmFsIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRh
ID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlE
KHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29s
ZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEp
KS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5n
Qm9vbGVhbigiSXNTdGF0aXN0aWNzRXBoZW1lcmFsIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc0RlYnVnTW9kZShib29sIHZhbHVlLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NEZWJ1
Z01vZGVDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9v
bGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwot
ICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNz
YWdlKCJTZXRTdGF0aXN0aWNzRGVidWdNb2RlIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0RGVidWdNb2RlQ2FsbGJhY2soKQpAQCAtMTUxMSwxMCAr
MTI2OSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVD
YWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGVDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7
Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsK
LSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVz
c2FnZSgiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlIiwgdG9XSyho
b3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlk
U2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGVDYWxsYmFjaygpCkBAIC0xNTI2LDI3ICsx
MjgxLDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKEpTU3RyaW5n
UmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcywgSlNWCiB7CiAgICAgY2FjaGVUZXN0UnVubmVy
Q2FsbGJhY2soU2V0U3RhdGlzdGljc0xhc3RTZWVuQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRs
ZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9z
dE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Rv
dWJsZUNyZWF0ZShzZWNvbmRzKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3
S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVl
cy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7
ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3
VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzTGFzdFNlZW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJh
d0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAot
ICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNz
YWdlKCJTZXRTdGF0aXN0aWNzTGFzdFNlZW4iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAg
ICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgdG9X
SyhzZWNvbmRzKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2FsbERpZFNldExhc3RTZWVuQ2FsbGJhY2soKQpAQCAtMTU1OCw0OSArMTI5NiwxOCBA
QCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyhKU1N0cmluZ1Jl
ZiBob3N0TmFtZSwgSlNTdHJpbmdSZWYgdAogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNr
KFNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpY0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVy
KTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUp
KSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVG9wRnJhbWVEb21haW4xIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVEb21haW4xKSkpOwotICAgIAotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZy
YW1lRG9tYWluMiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aEpTU3RyaW5nKHRvcEZyYW1lRG9tYWluMikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxhc3RTZWVuIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUobGFzdFNlZW4pKSk7Ci0KLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYWRVc2VySW50
ZXJhY3Rpb24iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
aGFkVXNlckludGVyYWN0aW9uKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIpKSk7Ci0g
ICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb24pKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJJc0dyYW5kZmF0aGVyZWQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhlcmVkKSkpOwotCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNQcmV2YWxlbnQiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQp
KSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJJc1ZlcnlQcmV2YWxlbnQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaXNWZXJ5UHJldmFsZW50KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGF0YVJlY29yZHNSZW1vdmVkIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZGF0YVJlY29yZHNSZW1v
dmVkKSkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsK
LSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5
c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5n
ZXQoKTsKLSAgICB9Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc01lcmdl
U3RhdGlzdGljIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVz
LmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc01lcmdlU3RhdGlz
dGljIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhv
c3ROYW1lKSB9LAorICAgICAgICB7ICJUb3BGcmFtZURvbWFpbjEiLCB0b1dLKHRvcEZyYW1lRG9t
YWluMSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVEb21haW4yIiwgdG9XSyh0b3BGcmFtZURvbWFp
bjIpIH0sCisgICAgICAgIHsgIkxhc3RTZWVuIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShsYXN0
U2VlbikpIH0sCisgICAgICAgIHsgIkhhZFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGhhZFVzZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIk1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb24iLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb24pKSB9LAorICAgICAgICB7ICJJc0dyYW5kZmF0aGVyZWQiLCBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVyZWQpKSB9LAorICAgICAgICB7ICJJc1ByZXZhbGVudCIs
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkgfSwKKyAgICAgICAgeyAiSXNW
ZXJ5UHJldmFsZW50IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNWZXJ5UHJldmFsZW50KSkg
fSwKKyAgICAgICAgeyAiRGF0YVJlY29yZHNSZW1vdmVkIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShkYXRhUmVjb3Jkc1JlbW92ZWQpKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldE1lcmdlU3RhdGlzdGljQ2FsbGJhY2soKQpAQCAt
MTYxMiwzMSArMTMxOSwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFeHBpcmVk
U3RhdGlzdGljKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIGhhZFVzZQogewogICAgIGNhY2hl
VGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljQ2FsbGJhY2tJ
RCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwot
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYWRVc2VySW50ZXJhY3Rpb24pKSk7
Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJJc1ByZXZhbGVudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJh
d1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAg
ICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25h
cnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgp
KSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljIiwgY3JlYXRlV0tEaWN0aW9u
YXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7
ICJIYWRVc2VySW50ZXJhY3Rpb24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYWRVc2VySW50
ZXJhY3Rpb24pKSB9LAorICAgICAgICB7ICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29r
aWVEYXRhUmVtb3ZhbCkpIH0sCisgICAgICAgIHsgIklzUHJldmFsZW50IiwgYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKSB9CisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0RXhwaXJlZFN0YXRpc3RpY0NhbGxiYWNrKCkK
QEAgLTE2NDgsMjkgKzEzMzYsMTAgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUKIHsKICAgICBj
YWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VDYWxs
YmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOwotICAgIAotICAgIFZlY3Rv
cjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7
Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUo
dmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAg
ICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rp
b25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6
ZSgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAg
ICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIiwgY3JlYXRlV0tE
aWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAg
ICAgICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRQcmV2
YWxlbnRSZXNvdXJjZUNhbGxiYWNrKCkKQEAgLTE2ODIsMjkgKzEzNTEsMTAgQEAgdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhv
c3ROYW1lLCBib29sIHYKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0
aWNzVmVyeVByZXZhbGVudFJlc291cmNlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwog
Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUp
KSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUodmFsdWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwot
ICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlz
LnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3
S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tp
XS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlz
dGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25h
cnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5k
YXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgCi0gICAgV0tC
dW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNl
dFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoewor
ICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVl
IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZUNhbGxiYWNrKCkKQEAgLTE3MTQsMTM4ICsxMzY0LDUxIEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c3RhdGlzdGljc0NhbGxEaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFjaygpCiAgICAg
CiB2b2lkIFRlc3RSdW5uZXI6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyIpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MiKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpT
U3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJl
dHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFu
R2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5n
ZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9v
bGVhbigiSXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiLCB0b1dLKGhvc3ROYW1lKS5nZXQo
KSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291
cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklz
U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRh
dGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFs
dWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7
CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigi
SXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkp
OwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIoSlNTdHJpbmdSZWYgc3VicmVzb3VyY2VIb3N0LCBKU1N0cmluZ1JlZiB0b3BGcmFt
ZUhvc3QpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1YnJlc291cmNl
SG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpT
U3RyaW5nKHN1YnJlc291cmNlSG9zdCkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3QiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZUhv
c3QpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgp
KTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAg
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1
ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3Rh
dGlzdGljc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRl
KHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAg
IFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVy
bkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXIiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7
ICJTdWJyZXNvdXJjZUhvc3QiLCB0b1dLKHN1YnJlc291cmNlSG9zdCkgfSwKKyAgICAgICAgeyAi
VG9wRnJhbWVIb3N0IiwgdG9XSyh0b3BGcmFtZUhvc3QpIH0sCisgICAgfSkuZ2V0KCkpOwogfQog
CiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIo
SlNTdHJpbmdSZWYgc3ViRnJhbWVIb3N0LCBKU1N0cmluZ1JlZiB0b3BGcmFtZUhvc3QpCiB7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViRnJhbWVIb3N0IikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoc3ViRnJhbWVIb3N0
KSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRvcEZyYW1lSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1lSG9zdCkpKTsKLSAgICAKLSAgICBWZWN0
b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVS
ZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQo
KTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5k
ZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChy
ZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVh
bkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSku
Z2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jv
b2xlYW4oIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiLCBjcmVhdGVXS0Rp
Y3Rpb25hcnkoeworICAgICAgICB7ICJTdWJGcmFtZUhvc3QiLCB0b1dLKHN1YkZyYW1lSG9zdCkg
fSwKKyAgICAgICAgeyAiVG9wRnJhbWVIb3N0IiwgdG9XSyh0b3BGcmFtZUhvc3QpIH0sCisgICAg
fSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8oSlNTdHJpbmdSZWYgaG9zdFJlZGlyZWN0ZWRGcm9tLCBKU1N0cmluZ1Jl
ZiBob3N0UmVkaXJlY3RlZFRvKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAg
ICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0UmVkaXJlY3RlZEZyb20iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0UmVkaXJlY3RlZEZyb20pKSk7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdFJl
ZGlyZWN0ZWRUbyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aEpTU3RyaW5nKGhvc3RSZWRpcmVjdGVkVG8pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3Ry
aW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdW
YWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAg
ICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJh
d0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVy
bkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0
VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQo
KSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVh
bigiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgIHsgIkhvc3RSZWRpcmVjdGVkRnJvbSIsIHRvV0soaG9zdFJlZGlyZWN0
ZWRGcm9tKSB9LAorICAgICAgICB7ICJIb3N0UmVkaXJlY3RlZFRvIiwgdG9XSyhob3N0UmVkaXJl
Y3RlZFRvKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZh
bHVlLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5l
ckNhbGxiYWNrKFNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb25DYWxsYmFja0lELCBj
b21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAg
Ci0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAg
IHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVl
cy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7
ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3
VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpOwotICAgIFdL
UmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlv
bmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXpl
KCkpKTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsK
KyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkg
fSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0s
CisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlk
U2V0SGFzSGFkVXNlckludGVyYWN0aW9uQ2FsbGJhY2soKQpAQCAtMTg1NSwyNjEgKzE0MTgsOTUg
QEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFj
dGlvbkNhbGxiYWNrKCkKIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NIYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
cmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkp
LmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuKCJJc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKTsKIH0KIAogYm9vbCBU
ZXN0UnVubmVyOjppc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UoSlNTdHJpbmdSZWYgc3Vi
SG9zdCwgSlNTdHJpbmdSZWYgdG9wSG9zdCkKIHsKLSAgICAKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+
PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdWJIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoc3ViSG9zdCkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BIb3N0IikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wSG9zdCkp
KTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwot
ICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlz
W2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdl
dCgpOwotICAgIH0KLQotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UiKSk7Ci0g
ICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMu
ZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLVHlwZVJl
ZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwot
ICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNl
T25jZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlN1Ykhvc3QiLCB0b1dLKHN1
Ykhvc3QpIH0sCisgICAgICAgIHsgIlRvcEhvc3QiLCB0b1dLKHRvcEhvc3QpIH0sCisgICAgfSku
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVk
KEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKQogewotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsK
LSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOwotICAg
IAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVm
PiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1Zh
bHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdl
dCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAg
IAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikp
OwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3
S2V5cy5zaXplKCkpKTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAg
ICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTZXRVc2VJVFBEYXRhYmFzZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUp
KTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFVzZUlUUERh
dGFiYXNlIiwgdmFsdWUpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0dyYW5k
ZmF0aGVyZWQoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhv
c3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEp
ID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUo
YWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNT
dGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKEpT
U3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiB0b3BGcmFtZUhvc3ROYW1lKQogewotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwot
ICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlRvcEZyYW1lSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZUhvc3ROYW1lKSkpOwotICAgIAotICAgIFZl
Y3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlw
ZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tp
XS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0K
LSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3
VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4iLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUp
IH0sCisgICAgICAgIHsgIlRvcEZyYW1lSG9zdE5hbWUiLCB0b1dLKHRvcEZyYW1lSG9zdE5hbWUp
IH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NT
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3Ry
aW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVz
OwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRv
cEZyYW1lSG9zdE5hbWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlz
KGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNp
emUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1
ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4iKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tE
aWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlz
LnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlz
dGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7
CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVG9w
RnJhbWVIb3N0TmFtZSIsIHRvV0sodG9wRnJhbWVIb3N0TmFtZSkgfSwKKyAgICB9KS5nZXQoKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RUbyhKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVj
dGVkVG8pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
aG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZVJlZGlyZWN0
ZWRUbykpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXpl
KCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAg
ICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZh
bHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVh
dGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdFRvIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9z
dE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJIb3N0TmFtZVJlZGlyZWN0ZWRU
byIsIHRvV0soaG9zdE5hbWVSZWRpcmVjdGVkVG8pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RG
cm9tKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRG
cm9tKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhv
c3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZVJlZGlyZWN0
ZWRGcm9tKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNp
emUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwot
ICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAg
ICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0g
dmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20iKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5
Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkp
OwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RGcm9tIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAg
eyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJIb3N0TmFtZVJlZGly
ZWN0ZWRGcm9tIiwgdG9XSyhob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKSB9LAorICAgIH0pLmdldCgp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0
ZWRUbykKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyho
b3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJlY3Rl
ZFRvKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUo
KSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAg
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAg
ICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFs
dWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRT
dGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShy
YXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIs
IHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJlY3RlZFRvIiwgdG9X
Syhob3N0TmFtZVJlZGlyZWN0ZWRUbykgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKEpTU3RyaW5n
UmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKQogewotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwot
ICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKSkpOwot
ICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAg
VmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlz
W2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdl
dCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNz
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9u
YXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMu
ZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RGcm9tIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dL
KGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIiwgdG9XSyho
b3N0TmFtZVJlZGlyZWN0ZWRGcm9tKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbihKU1N0
cmluZ1JlZiBmcm9tSG9zdCwgSlNTdHJpbmdSZWYgdG9Ib3N0KQogewotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJGcm9tSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGZyb21Ib3N0KSkpOwotICAgIAotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvSG9zdCIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KHRvSG9zdCkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5z
aXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsK
LSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9
IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24iKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9u
YXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUo
KSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc0Ny
b3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAg
ICAgICB7ICJGcm9tSG9zdCIsIHRvV0soZnJvbUhvc3QpIH0sCisgICAgICAgIHsgIlRvSG9zdCIs
IHRvV0sodG9Ib3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcykKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIiwgc2Vj
b25kcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlE
YXRhUmVjb3Jkc0NhbGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spCkBAIC0yMTQ3LDEyICsxNTQ0
LDkgQEAgdm9pZCBUZXN0UnVubmVyOjppbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNh
bGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spCiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayh1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJl
c291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVy
YWN0aW9uLCB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlv
bkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgbWVkaWFuRGF5c1NpbmNlVXNlcklu
dGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0
b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUksIHVuc2lnbmVkIHRvcDNNZWRpYW5T
dWJGcmFtZVdpdGhvdXRVSSwgdW5zaWduZWQgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJ
LCB1bnNpZ25lZCB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJLCB1bnNpZ25lZCB0
b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJKQogewotICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAKICAg
ICBTdHJpbmcgc3RyaW5nID0gbWFrZVN0cmluZygieyBcIm51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzXCIgOiAiLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlcywgIiwgXCJudW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25cIiA6ICIsIG51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgIiwgXCJudW1iZXJPZlByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25cIiA6ICIsIG51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgIiwgXCJ0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhV
c2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25cIiA6ICIsIHRvcFByZXZhbGVu
dFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiwgIiwg
XCJtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2Vy
SW50ZXJhY3Rpb25cIiA6ICIsIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVu
dFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiwgIiwgXCJ0b3AzTnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVUlcIiA6ICIsIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhV
SSwgIiwgXCJ0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUlcIiA6ICIsIHRvcDNNZWRpYW5TdWJG
cmFtZVdpdGhvdXRVSSwgIiwgXCJ0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUlcIiA6ICIs
IHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSwgIiwgXCJ0b3AzTWVkaWFuVW5pcXVlUmVk
aXJlY3RzV2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJ
LCAiLCBcInRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUlcIiA6ICIsIHRvcDNN
ZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUksICIgfSIpOwogICAgIAotICAgIEpTVmFs
dWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhjb250ZXh0LCBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmcudXRmOCgpLmRhdGEoKSkpLmdldCgp
KTsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcobWFp
bkpTQ29udGV4dCgpLCBjcmVhdGVKU1N0cmluZyhzdHJpbmcudXRmOCgpLmRhdGEoKSkuZ2V0KCkp
OwogCiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5
Q2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7CiB9CkBAIC0yMTY0LDE2ICsxNTU4LDE0IEBAIGJvb2wg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc05vdGlmeU9ic2VydmVyKCkKIAogdm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NQcm9jZXNzU3RhdGlz
dGljc0FuZERhdGFSZWNvcmRzIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Vw
ZGF0ZUNvb2tpZUJsb2NraW5nKEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNldEJsb2NrQ29va2llc0Zvckhv
c3RDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdGF0aXN0aWNzVXBkYXRlQ29va2llQmxvY2tpbmciKSk7Ci0gICAgV0tCdW5kbGVQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzVXBkYXRl
Q29va2llQmxvY2tpbmciKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERp
ZFNldEJsb2NrQ29va2llc0Zvckhvc3RDYWxsYmFjaygpCkBAIC0yMTgzLDEzNSArMTU3NSw4MyBA
QCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0QmxvY2tDb29raWVzRm9ySG9z
dENhbGxiYWNrKCkKIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5
IikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5
Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIiwgdmFsdWUp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KGJvb2wg
dmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldElzUnVubmlu
Z1Rlc3QiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTdGF0aXN0aWNzU2V0SXNSdW5uaW5nVGVzdCIsIHZhbHVlKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0
YVJlY29yZHNSZW1vdmFsIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCIsIHNlY29uZHMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRl
KHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRp
c3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiLCBzZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQgZW50cmllcykKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNYXhTdGF0aXN0aWNzRW50cmllcyIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShlbnRyaWVzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRN
YXhTdGF0aXN0aWNzRW50cmllcyIsIGVudHJpZXMpOwogfQogICAgIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkIGVudHJpZXMpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0UHJ1bmVFbnRyaWVzRG93blRvIikpOwotICAgIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KGVudHJpZXMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFBydW5l
RW50cmllc0Rvd25UbyIsIGVudHJpZXMpOwogfQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZShKU1ZhbHVlUmVmIGNhbGxiYWNr
KQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudFN0b3JlQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUi
KSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBXVFI6OnBvc3RNZXNz
YWdlKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSIpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3Jl
TW9kaWZpZWRTaW5jZUhvdXJzKHVuc2lnbmVkIGhvdXJzLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQog
ewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2Rp
ZmllZFNpbmNlSG91cnMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaG91cnMpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXVFI6OnBvc3RNZXNzYWdlKCJTdGF0aXN0aWNz
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3VycyIsIGhvdXJz
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURh
dGFSZW1vdmFsKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2Fs
bGJhY2soU3RhdGlzdGljc0RpZENsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbENhbGxiYWNr
SUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNz
Q2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc0NsZWFyVGhyb3Vn
aFdlYnNpdGVEYXRhUmVtb3ZhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NE
ZWxldGVDb29raWVzRm9ySG9zdChKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCBpbmNsdWRlSHR0
cE9ubHlDb29raWVzKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtl
eXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1l
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcoaG9zdE5hbWUpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJJbmNsdWRlSHR0cE9ubHlDb29raWVzIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGluY2x1ZGVIdHRwT25seUNvb2tpZXMpKSk7
Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJl
Zj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdW
YWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgp
OwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0IikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
RGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5
cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3Rp
Y3NEZWxldGVDb29raWVzRm9ySG9zdCIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsg
Ikhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSW5jbHVkZUh0dHBPbmx5
Q29va2llcyIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGluY2x1ZGVIdHRwT25seUNvb2tpZXMp
KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NI
YXNMb2NhbFN0b3JhZ2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgYXV0byBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGlj
c0hhc0xvY2FsU3RvcmFnZSIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5E
YXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VS
VChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
cmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSIsIHRvV0so
aG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzQ2Fj
aGVNYXhBZ2VDYXAoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91Ymxl
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc0NhY2hlTWF4QWdl
Q2FwIiwgc2Vjb25kcyk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aGFzU3RhdGlzdGljc0lzb2xh
dGVkU2Vzc2lvbihKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFzU3RhdGlzdGljc0lz
b2xhdGVkU2Vzc2lvbiIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRh
ID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChX
S0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0
dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihy
ZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4oIkhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24iLCB0b1dLKGhv
c3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3Vs
ZERvd25ncmFkZVJlZmVycmVyKGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0yMzIwLDkgKzE2NjAsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NT
aG91bGREb3duZ3JhZGVSZWZlcnJlcihib29sIHZhbHVlLCBKU1ZhbHVlUmVmIGNvbQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0Rp
ZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVS
ZWZlcnJlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc1Nob3Vs
ZERvd25ncmFkZVJlZmVycmVyIiwgdmFsdWUpOwogICAgIG1faGFzU2V0RG93bmdyYWRlUmVmZXJy
ZXJDYWxsYmFjayA9IHRydWU7CiB9CiAKQEAgLTIzMzgsMTEgKzE2NzYsMTAgQEAgdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyhib29sIHZh
bHVlLCBKU1ZhbHVlUmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FjaGVUZXN0UnVubmVyQ2Fs
bGJhY2soU3RhdGlzdGljc0RpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNDYWxsYmFj
a0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3Rh
dGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiKSk7CisgICAgYXV0byBtZXNzYWdl
TmFtZSA9ICJTZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyI7CiAgICAg
aWYgKG9ubHlPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNz
U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9u
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgICAgICBtZXNzYWdlTmFtZSA9ICJTZXRTdGF0aXN0aWNzU2hvdWxk
QmxvY2tUaGlyZFBhcnR5Q29va2llc09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uIjsKKyAg
ICBwb3N0TWVzc2FnZShtZXNzYWdlTmFtZSwgdmFsdWUpOwogICAgIG1faGFzU2V0QmxvY2tUaGly
ZFBhcnR5Q29va2llc0NhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjM1OCw5ICsxNjk1LDcgQEAg
dm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGUoYm9vbCB2YWx1ZSwgSlNWYWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92
YWxNb2RlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlIiwgdmFsdWUpOwogICAgIG1faGFzU2V0Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGVDYWxsYmFjayA9IHRydWU7CiB9CiAKQEAgLTIzODMsMTAgKzE3MTgsNyBA
QCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsQ2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFS
ZW1vdmFsQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VG9TYW1lU2l0
ZVN0cmljdENvb2tpZXMoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTVmFsdWVSZWYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNl
dFRvU2FtZVNpdGVTdHJpY3RDb29raWVzQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwot
Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN0YXRpc3RpY3NTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIpKTsKLSAgICBhdXRv
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFt
ZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RNZXNzYWdlKCJTdGF0aXN0aWNzU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiLCB0b1dLKGhv
c3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRT
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0NhbGxiYWNrKCkKQEAgLTIzOTgsMjcgKzE3MzAsMTAg
QEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRvU2FtZVNpdGVTdHJpY3RD
b29raWVzQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0
eUhvc3RDTkFNRURvbWFpbihKU1N0cmluZ1JlZiBmaXJzdFBhcnR5VVJMU3RyaW5nLCBKU1N0cmlu
Z1JlZiBjbmFtZVVSTFN0cmluZywgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0Rmlyc3RQYXJ0eUhvc3RD
TkFNRURvbWFpbkNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJGaXJzdFBhcnR5VVJMIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoZmlyc3RQYXJ0eVVSTFN0cmlu
ZykpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDTkFNRSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aEpTU3RyaW5nKGNuYW1lVVJMU3RyaW5nKSkpOwotICAgIAotICAgIFZlY3RvcjxX
S1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4g
cmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQo
KTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAg
IGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIpKTsKLSAgICBhdXRvIG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJh
d1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1Nl
dEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAg
ICB7ICJGaXJzdFBhcnR5VVJMIiwgdG9XSyhmaXJzdFBhcnR5VVJMU3RyaW5nKSB9LAorICAgICAg
ICB7ICJDTkFNRSIsIHRvV0soY25hbWVVUkxTdHJpbmcpIH0sCisgICAgfSkuZ2V0KCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0Rmlyc3RQYXJ0eUhvc3RDTkFN
RURvbWFpbkNhbGxiYWNrKCkKQEAgLTI0MjksMTAgKzE3NDQsNyBAQCB2b2lkIFRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NDYWxsRGlkU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkNhbGxiYWNrKCkK
IHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbihKU1N0
cmluZ1JlZiBjbmFtZVVSTFN0cmluZywgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0VGhpcmRQYXJ0eUNO
QU1FRG9tYWluQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotCi0gICAgYXV0byBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3Rp
Y3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4iKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoY25hbWVVUkxTdHJpbmcpKTsKLSAgICBX
S0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgi
U3RhdGlzdGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIsIHRvV0soY25hbWVVUkxTdHJpbmcp
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRoaXJk
UGFydHlDTkFNRURvbWFpbkNhbGxiYWNrKCkKQEAgLTI0NDMsOSArMTc1NSw4IEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW5DYWxsYmFj
aygpCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKEpT
VmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJh
Y2soU3RhdGlzdGljc0RpZFJlc2V0VG9Db25zaXN0ZW50U3RhdGVDYWxsYmFja0lELCBjb21wbGV0
aW9uSGFuZGxlcik7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1Jl
c2V0VG9Db25zaXN0ZW50U3RhdGUiKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
KTsKKworICAgIFdUUjo6cG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0
YXRlIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRSZXNldFRvQ29u
c2lzdGVudFN0YXRlQ2FsbGJhY2soKQpAQCAtMjQ4Niw5NSArMTc5Nyw0NiBAQCB2b2lkIFRlc3RS
dW5uZXI6OnRleHRGaWVsZERpZEVuZEVkaXRpbmdDYWxsYmFjaygpCiB2b2lkIFRlc3RSdW5uZXI6
OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAg
Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFja0lE
LCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0QWxsU3RvcmFn
ZUFjY2Vzc0VudHJpZXMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAg
ICBXVFI6OnBvc3RNZXNzYWdlKCJHZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyIpOwogfQogCi12
b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZWNlaXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxs
YmFjayhWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKK3N0YXRpYyBKU1ZhbHVlUmVmIG1ha2VEb21h
aW5zVmFsdWUoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCiB7Ci0gICAgV0tCdW5kbGVG
cmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIAot
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIlsiKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5h
cHBlbmQoJ1snKTsKICAgICBib29sIGZpcnN0RG9tYWluID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8m
IGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAgICAgaWYgKGZpcnN0RG9tYWluKQotICAgICAgICAg
ICAgZmlyc3REb21haW4gPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIlwiIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGRvbWFpbik7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoZmlyc3REb21haW4gPyAiXCIiIDogIiwgXCIiLCBkb21haW4sICciJyk7CisgICAg
ICAgIGZpcnN0RG9tYWluID0gZmFsc2U7CiAgICAgfQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiXSIpOwotICAgIAotICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VG
cm9tSlNPTlN0cmluZyhjb250ZXh0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKLQorICAg
IGJ1aWxkZXIuYXBwZW5kKCddJyk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlRnJvbUpTT05TdHJp
bmcobWFpbkpTQ29udGV4dCgpLCBjcmVhdGVKU1N0cmluZyhidWlsZGVyLnRvU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSkuZ2V0KCkpOworfQordm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUFs
bFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2soVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCit7
CisgICAgYXV0byByZXN1bHQgPSBtYWtlRG9tYWluc1ZhbHVlKGRvbWFpbnMpOwogICAgIGNhbGxU
ZXN0UnVubmVyQ2FsbGJhY2soQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFja0lELCAxLCAm
cmVzdWx0KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpsb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMo
SlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhMb2Fk
ZWRTdWJyZXNvdXJjZURvbWFpbnNDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiTG9hZGVkU3VicmVzb3VyY2VEb21haW5zIikpOwotICAgIFdLQnVu
ZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgV1RSOjpwb3N0TWVzc2FnZSgiTG9hZGVkU3Vi
cmVzb3VyY2VEb21haW5zIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlY2VpdmVM
b2FkZWRTdWJyZXNvdXJjZURvbWFpbnNDYWxsYmFjayhWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMp
CiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBK
U0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dCht
YWluRnJhbWUpOwotICAgIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnWycpOwotICAgIGJvb2wgaXNGaXJzdERvbWFpbiA9IHRydWU7
Ci0gICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0gICAgICAgIGlmIChpc0ZpcnN0
RG9tYWluKQotICAgICAgICAgICAgaXNGaXJzdERvbWFpbiA9IGZhbHNlOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoZG9tYWluKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJc
IiIpOwotICAgIH0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXScpOwotICAgIAotICAgIEpT
VmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhjb250ZXh0LCBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKLQorICAgIGF1dG8gcmVzdWx0ID0gbWFrZURvbWFpbnNW
YWx1ZShkb21haW5zKTsKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKExvYWRlZFN1YnJlc291
cmNlRG9tYWluc0NhbGxiYWNrSUQsIDEsICZyZXN1bHQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OmFkZE1vY2tNZWRpYURldmljZShKU1N0cmluZ1JlZiBwZXJzaXN0ZW50SWQsIEpTU3RyaW5nUmVm
IGxhYmVsLCBjb25zdCBjaGFyKiB0eXBlKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVl
czsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlBlcnNpc3RlbnRJRCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKHBlcnNpc3RlbnRJ
ZCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiTGFiZWwiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhsYWJlbCkpOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVHlwZSIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHR5cGUpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVj
dG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgp
KTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBr
ZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0g
ICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWRkTW9ja01lZGlhRGV2aWNlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
RGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5
cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQWRkTW9j
a01lZGlhRGV2aWNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiUGVyc2lzdGVu
dElEIiwgdG9XSyhwZXJzaXN0ZW50SWQpIH0sCisgICAgICAgIHsgIkxhYmVsIiwgdG9XSyhsYWJl
bCkgfSwKKyAgICAgICAgeyAiVHlwZSIsIHRvV0sodHlwZSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja0NhbWVyYURldmljZShKU1N0cmluZ1JlZiBwZXJz
aXN0ZW50SWQsIEpTU3RyaW5nUmVmIGxhYmVsKQpAQCAtMjU5NCwxNTMgKzE4NTYsNzIgQEAgdm9p
ZCBUZXN0UnVubmVyOjphZGRNb2NrU2NyZWVuRGV2aWNlKEpTU3RyaW5nUmVmIHBlcnNpc3RlbnRJ
ZCwgSlNTdHJpbmdSZWYgbGFiZWwKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhck1vY2tNZWRpYURl
dmljZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyTW9ja01lZGlhRGV2aWNl
cyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJNb2NrTWVkaWFEZXZpY2VzIik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlTW9ja01lZGlhRGV2aWNlKEpTU3RyaW5nUmVm
IHBlcnNpc3RlbnRJZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZW1vdmVNb2NrTWVk
aWFEZXZpY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSh0b1dL
KHBlcnNpc3RlbnRJZCkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJS
ZW1vdmVNb2NrTWVkaWFEZXZpY2UiLCB0b1dLKHBlcnNpc3RlbnRJZCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnJlc2V0TW9ja01lZGlhRGV2aWNlcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUmVzZXRNb2NrTWVkaWFEZXZpY2VzIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJSZXNldE1vY2tNZWRpYURldmljZXMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRNb2Nr
Q2FtZXJhT3JpZW50YXRpb24odW5zaWduZWQgb3JpZW50YXRpb24pCiB7Ci0gICAgYXV0byBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1vY2tD
YW1lcmFPcmllbnRhdGlvbiIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShvcmllbnRhdGlvbikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZSgiU2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uIiwgb3JpZW50YXRpb24pOwogfQogCiBib29s
IFRlc3RSdW5uZXI6OmlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkKCkKIHsK
LSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQiKSk7Ci0gICAgV0tU
eXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBB
U1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVz
c2FnZVJldHVybmluZ0Jvb2xlYW4oIklzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFi
bGVkIik7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCisKIHZvaWQgVGVzdFJ1bm5lcjo6Y29ubmVj
dE1vY2tHYW1lcGFkKHVuc2lnbmVkIGluZGV4KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkNvbm5lY3RNb2NrR2FtZXBhZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwotCi0gICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKCJDb25uZWN0TW9ja0dhbWVwYWQiLCBpbmRleCk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6ZGlzY29ubmVjdE1vY2tHYW1lcGFkKHVuc2lnbmVkIGluZGV4KQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRpc2Nvbm5lY3RNb2NrR2FtZXBhZCIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShpbmRleCkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJEaXNj
b25uZWN0TW9ja0dhbWVwYWQiLCBpbmRleCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9j
a0dhbWVwYWREZXRhaWxzKHVuc2lnbmVkIGluZGV4LCBKU1N0cmluZ1JlZiBnYW1lcGFkSUQsIEpT
U3RyaW5nUmVmIG1hcHBpbmcsIHVuc2lnbmVkIGF4aXNDb3VudCwgdW5zaWduZWQgYnV0dG9uQ291
bnQpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZElEIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKHRvV0soZ2FtZXBhZElEKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNYXBwaW5nIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKHRvV0sobWFwcGluZykpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBeGlzQ291bnQiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShheGlzQ291bnQpKSk7Ci0K
LSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJC
dXR0b25Db3VudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KGJ1dHRvbkNvdW50KSkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAg
IFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNp
emUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ld
ID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgp
OwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1vY2tHYW1lcGFkRGV0YWls
cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCks
IHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlNldE1vY2tHYW1lcGFkRGV0YWlscyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsg
IkdhbWVwYWRJRCIsIHRvV0soZ2FtZXBhZElEKSB9LAorICAgICAgICB7ICJNYXBwaW5nIiwgdG9X
SyhtYXBwaW5nKSB9LAorICAgICAgICB7ICJHYW1lcGFkSW5kZXgiLCBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGluZGV4KSkgfSwKKyAgICAgICAgeyAiQXhpc0NvdW50IiwgYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShheGlzQ291bnQpKSB9LAorICAgICAgICB7ICJCdXR0b25Db3VudCIsIGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoYnV0dG9uQ291bnQpKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSh1bnNpZ25lZCBpbmRleCwgdW5z
aWduZWQgYXhpc0luZGV4LCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4g
dmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiR2FtZXBhZEluZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tV
SW50NjRDcmVhdGUoaW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBeGlzSW5kZXgiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShheGlzSW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSkpOwotCi0gICAgVmVjdG9y
PFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsK
LSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2
YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7
ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3
VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGlj
dGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdL
ZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUiLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJHYW1lcGFkSW5kZXgiLCBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKGluZGV4KSkgfSwKKyAgICAgICAgeyAiQXhpc0luZGV4IiwgYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShheGlzSW5kZXgpKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0so
V0tEb3VibGVDcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25l
ZCBidXR0b25JbmRleCwgZG91YmxlIHZhbHVlKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZh
bHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkdhbWVwYWRJbmRleCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUlu
dDY0Q3JlYXRlKGluZGV4KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uSW5kZXgiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25JbmRleCkpKTsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSk7Ci0KLSAgICBWZWN0
b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVz
OwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXpl
KHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICBy
YXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZSIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUo
cmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldE1vY2tHYW1lcGFkQnV0dG9uVmFs
dWUiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJHYW1lcGFkSW5kZXgiLCBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSkgfSwKKyAgICAgICAgeyAiQnV0dG9uSW5kZXgiLCBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbkluZGV4KSkgfSwKKyAgICAgICAgeyAiVmFsdWUi
LCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CisK
ICNlbHNlCisKIHZvaWQgVGVzdFJ1bm5lcjo6Y29ubmVjdE1vY2tHYW1lcGFkKHVuc2lnbmVkKQog
ewogfQpAQCAtMjc2MCwzMCArMTk0MSwyNSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1l
cGFkQXhpc1ZhbHVlKHVuc2lnbmVkLCB1bnNpZ25lZCwgZG91YmxlKQogdm9pZCBUZXN0UnVubmVy
OjpzZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlKHVuc2lnbmVkLCB1bnNpZ25lZCwgZG91YmxlKQog
ewogfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE9w
ZW5QYW5lbEZpbGVzKEpTVmFsdWVSZWYgZmlsZXNWYWx1ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAg
ICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSkpOworICAgIEpTQ29udGV4dFJlZiBjb250
ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogCiAgICAgaWYgKCFKU1ZhbHVlSXNBcnJheShjb250ZXh0
LCBmaWxlc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNPYmplY3RSZWYgZmlsZXMg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZmlsZXNWYWx1ZSwgbnVsbHB0cik7Ci0gICAgc3Rh
dGljIGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgZmlsZXNMZW5ndGhWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZmlsZXMsIGxlbmd0aFByb3BlcnR5LmdldCgpLCBudWxs
cHRyKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBmaWxlc0xlbmd0aFZhbHVl
KSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgYXV0byBmaWxlcyA9IChKU09iamVjdFJlZilmaWxl
c1ZhbHVlOwogICAgIGF1dG8gZmlsZVVSTHMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRl
KCkpOwotICAgIGF1dG8gZmlsZXNMZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVU
b051bWJlcihjb250ZXh0LCBmaWxlc0xlbmd0aFZhbHVlLCBudWxscHRyKSk7CisgICAgYXV0byBm
aWxlc0xlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIGZpbGVzKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGZpbGVzTGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZVJlZiBmaWxl
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBmaWxlcywgaSwgbnVs
bHB0cik7CiAgICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1ZSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIGZpbGUgPSBhZG9wdChKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGZpbGVWYWx1ZSwgbnVsbHB0cikpOworICAgICAgICBh
dXRvIGZpbGUgPSBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBmaWxlVmFsdWUpOwogICAgICAgICBz
aXplX3QgZmlsZUJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUo
ZmlsZS5nZXQoKSkgKyAxOwogICAgICAgICBhdXRvIGZpbGVCdWZmZXIgPSBtYWtlVW5pcXVlQXJy
YXk8Y2hhcj4oZmlsZUJ1ZmZlclNpemUpOwogICAgICAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5n
KGZpbGUuZ2V0KCksIGZpbGVCdWZmZXIuZ2V0KCksIGZpbGVCdWZmZXJTaXplKTsKQEAgLTI3OTcs
MjIgKzE5NzMsMTUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRPcGVuUGFuZWxGaWxlcyhKU1ZhbHVl
UmVmIGZpbGVzVmFsdWUpCiAKICAgICB9CiAKLSAgICBzdGF0aWMgYXV0byBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE9wZW5QYW5lbEZpbGVV
UkxzIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIG1lc3NhZ2VOYW1lLmdl
dCgpLCBmaWxlVVJMcy5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRPcGVuUGFuZWxG
aWxlVVJMcyIsIGZpbGVVUkxzLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRPcGVu
UGFuZWxGaWxlc01lZGlhSWNvbihKU1ZhbHVlUmVmIGRhdGEpCiB7CiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVu
ZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFn
ZSkpOwotCi0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCk7CiAgICAgLy8gRklYTUUgKDEyMzA1OCk6IFVzZSBhIEpTQyBBUEkgdG8gZ2V0IGJ1ZmZl
ciBjb250ZW50cyBvbmNlIHN1Y2ggaXMgZXhwb3NlZC4KLSAgICBXS1JldGFpblB0cjxXS0RhdGFS
ZWY+IGljb25EYXRhID0gYWRvcHRXSyhXS0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5
KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBjb250ZXh0LCBkYXRhKSk7Ci0KLSAgICBzdGF0aWMg
YXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldE9wZW5QYW5lbEZpbGVVUkxzTWVkaWFJY29uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RN
ZXNzYWdlKHBhZ2UsIG1lc3NhZ2VOYW1lLmdldCgpLCBpY29uRGF0YS5nZXQoKSk7CisgICAgYXV0
byBpY29uRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhBcnJheShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1haW5KU0NvbnRleHQoKSwgZGF0
YSkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0T3BlblBhbmVsRmlsZVVSTHNNZWRpYUljb24i
LCBpY29uRGF0YS5nZXQoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKICNlbmRp
ZgpAQCAtMjgyMSwxMSArMTk5MCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVsRmls
ZXNNZWRpYUljb24oSlNWYWx1ZVJlZiBkYXRhKQogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxT
ZXNzaW9uQ3JlZGVudGlhbHMoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RS
dW5uZXJDYWxsYmFjayhEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFja0lELCBj
YWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVtb3ZlQWxsU2Vzc2lv
bkNyZWRlbnRpYWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlJlbW92ZUFs
bFNlc3Npb25DcmVkZW50aWFscyIsIHRydWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNhbGxE
aWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFjaygpCkBAIC0yODM1LDQ5ICsyMDAw
LDMzIEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFs
c0NhbGxiYWNrKCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckRPTUNhY2hlKEpTU3RyaW5nUmVm
IG9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhckRPTUNhY2hlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcob3JpZ2luKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJDbGVhckRPTUNhY2hlIiwgdG9XSyhvcmlnaW4pLmdldCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpjbGVhckRPTUNhY2hlcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2xlYXJET01DYWNoZXMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyRE9N
Q2FjaGVzIik7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aGFzRE9NQ2FjaGUoSlNTdHJpbmdSZWYg
b3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhc0RPTUNhY2hlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcob3JpZ2luKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBu
dWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0
VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4g
V0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVy
bkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0
dXJuaW5nQm9vbGVhbigiSGFzRE9NQ2FjaGUiLCB0b1dLKG9yaWdpbikuZ2V0KCkpOwogfQogCiB1
aW50NjRfdCBUZXN0UnVubmVyOjpkb21DYWNoZVNpemUoSlNTdHJpbmdSZWYgb3JpZ2luKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRPTUNhY2hlU2l6ZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpT
U3RyaW5nKG9yaWdpbikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIHJldHVybiBXS1VJbnQ2NEdldFZhbHVl
KHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihyZXR1cm5EYXRhKSk7CisgICAgcmV0dXJuIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0KCJET01DYWNoZVNpemUiLCB0b1dL
KG9yaWdpbikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93U3RvcmFnZVF1
b3RhSW5jcmVhc2UoYm9vbCB3aWxsSW5jcmVhc2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUod2lsbEluY3Jl
YXNlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0QWxsb3dT
dG9yYWdlUXVvdGFJbmNyZWFzZSIsIHdpbGxJbmNyZWFzZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Z2V0QXBwbGljYXRpb25NYW5pZmVzdFRoZW4oSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAg
ICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhHZXRBcHBsaWNhdGlvbk1hbmlmZXN0Q2FsbGJhY2tJ
RCwgY2FsbGJhY2spOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldEFwcGxpY2F0
aW9uTWFuaWZlc3QiKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBX
VFI6OnBvc3RNZXNzYWdlKCJHZXRBcHBsaWNhdGlvbk1hbmlmZXN0Iik7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6ZGlkR2V0QXBwbGljYXRpb25NYW5pZmVzdCgpCkBAIC0yODk3LDIyMSArMjA0Niwx
MzAgQEAgc2l6ZV90IFRlc3RSdW5uZXI6OnVzZXJTY3JpcHRJbmplY3RlZENvdW50KCkgY29uc3QK
IAogdm9pZCBUZXN0UnVubmVyOjppbmplY3RVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmplY3RVc2VyU2NyaXB0IikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcoc2NyaXB0KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkluamVjdFVzZXJTY3JpcHQiLCB0b1dLKHNjcmlwdCku
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNlbmREaXNwbGF5Q29uZmlndXJhdGlvbkNo
YW5nZWRNZXNzYWdlRm9yVGVzdGluZygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2Vu
ZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nIikpOwotICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKCJTZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2Fn
ZUZvclRlc3RpbmciKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTZXJ2aWNlV29ya2VyRmV0
Y2hUaW1lb3V0KGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1l
b3V0Iiwgc2Vjb25kcyk7CiB9CiAKIC8vIFdlYkF1dGhuCiB2b2lkIFRlc3RSdW5uZXI6OmFkZFRl
c3RLZXlUb0tleWNoYWluKEpTU3RyaW5nUmVmIHByaXZhdGVLZXlCYXNlNjQsIEpTU3RyaW5nUmVm
IGF0dHJMYWJlbCwgSlNTdHJpbmdSZWYgYXBwbGljYXRpb25UYWdCYXNlNjQpCiB7Ci0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUHJpdmF0ZUtleSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZCh0b1dLKHByaXZhdGVLZXlCYXNlNjQpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZCh0b1dLKGF0dHJMYWJlbCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25UYWciKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQodG9XSyhhcHBsaWNhdGlvblRhZ0Jhc2U2NCkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5n
UmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdL
ZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6
ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewot
ICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ld
ID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFk
ZFRlc3RLZXlUb0tleWNoYWluIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwg
cmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiQWRkVGVzdEtleVRvS2V5Y2hhaW4iLCBjcmVhdGVXS0RpY3Rpb25h
cnkoeworICAgICAgICB7ICJQcml2YXRlS2V5IiwgdG9XSyhwcml2YXRlS2V5QmFzZTY0KSB9LAor
ICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAgICAgeyAiQXBw
bGljYXRpb25UYWciLCB0b1dLKGFwcGxpY2F0aW9uVGFnQmFzZTY0KSB9LAorICAgIH0pLmdldCgp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhblVwS2V5Y2hhaW4oSlNTdHJpbmdSZWYgYXR0
ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KQogewotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0
b1dLKGF0dHJMYWJlbCkpOwotCi0gICAgaWYgKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpIHsKLSAg
ICAgICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QXBwbGljYXRpb25MYWJlbCIpKSk7Ci0gICAgICAgIHZhbHVlcy5hcHBlbmQodG9XSyhhcHBsaWNh
dGlvbkxhYmVsQmFzZTY0KSk7Ci0gICAgfQotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdL
ZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6
ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICBy
YXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVz
W2ldLmdldCgpOworICAgIGlmICghYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgeworICAgICAgICBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhblVwS2V5Y2hhaW4iLCBjcmVhdGVXS0RpY3Rpb25h
cnkoeworICAgICAgICAgICAgeyAiQXR0ckxhYmVsIiwgdG9XSyhhdHRyTGFiZWwpIH0sCisgICAg
ICAgIH0pLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkNsZWFuVXBLZXljaGFpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25h
cnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5k
YXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFuVXBLZXljaGFpbiIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAg
ICB7ICJBcHBsaWNhdGlvbkxhYmVsIiwgdG9XSyhhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB9LAor
ICAgIH0pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjprZXlFeGlzdHNJbktleWNoYWlu
KEpTU3RyaW5nUmVmIGF0dHJMYWJlbCwgSlNTdHJpbmdSZWYgYXBwbGljYXRpb25MYWJlbEJhc2U2
NCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQodG9XSyhhdHRyTGFiZWwpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFiZWwiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQodG9XSyhhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSk7Ci0KLSAgICBW
ZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFs
dWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVz
aXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAg
ICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiS2V5RXhpc3RzSW5LZXljaGFpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rp
Y3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3
S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBX
S1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdL
R2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1
cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJl
dHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuKCJLZXlFeGlzdHNJbktleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsK
KyAgICAgICAgeyAiQXR0ckxhYmVsIiwgdG9XSyhhdHRyTGFiZWwpIH0sCisgICAgICAgIHsgIkFw
cGxpY2F0aW9uTGFiZWwiLCB0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpIH0sCisgICAgfSku
Z2V0KCkpOwogfQogCiB1bnNpZ25lZCBsb25nIFRlc3RSdW5uZXI6OnNlcnZlclRydXN0RXZhbHVh
dGlvbkNhbGxiYWNrQ2FsbHNDb3VudCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50IikpOwotICAgIFdLVHlwZVJlZiBy
ZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNz
YWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdL
R2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgIHJldHVy
biBXS1VJbnQ2NEdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVy
bkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5p
bmdVSW50NjQoIlNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCIpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNo
cm9ub3VzbHkoYm9vbCBzaG91bGREaXNtaXNzQXN5bmNocm9ub3VzbHkpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNs
eSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkRGlzbWlzc0FzeW5jaHJvbm91c2x5KSk7Ci0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0
c0FzeW5jaHJvbm91c2x5Iiwgc2hvdWxkRGlzbWlzc0FzeW5jaHJvbm91c2x5KTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjphYm9ydE1vZGFsKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
Ym9ydE1vZGFsIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJBYm9ydE1vZGFsIik7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbigpCiB7Ci0gICAgYXV0
byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1
bXBBZENsaWNrQXR0cmlidXRpb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoIkR1bXBBZENsaWNrQXR0cmlidXRpb24iKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpCiB7Ci0gICAgYXV0byBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyQWRDbGlj
a0F0dHJpYnV0aW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwoKQog
ewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbnNUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFs
IikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbnNU
aHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWRD
bGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVy
Rm9yVGVzdGluZyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldEFkQ2xpY2tBdHRyaWJ1
dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKEpTU3RyaW5n
UmVmIHVybFN0cmluZykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBZENsaWNrQXR0
cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyIpKTsKLSAgICBhdXRvIHd0ZlVSTFN0cmlu
ZyA9IHRvV1RGU3RyaW5nKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHVybFN0cmluZykpOwot
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVUkxDcmVh
dGVXaXRoVVRGOENTdHJpbmcod3RmVVJMU3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIiwKKyAgICAgICAgYWRvcHRX
SyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0b1dURlN0cmluZyh1cmxTdHJpbmcpLnV0Zjgo
KS5kYXRhKCkpKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlv
bnNBc0V4cGlyZWRGb3JUZXN0aW5nKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNYXJr
QWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmciKSk7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIk1hcmtBZENsaWNrQXR0cmlidXRp
b25zQXNFeHBpcmVkRm9yVGVzdGluZyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE9mZnNj
cmVlbkNhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJPZmZz
Y3JlZW5DYW52YXNFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5j
ZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBh
Z2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJl
bmNlKCJPZmZzY3JlZW5DYW52YXNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIGJvb2wgVGVzdFJ1
bm5lcjo6aGFzQXBwQm91bmRTZXNzaW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFzQXBwQm91bmRTZXNzaW9uIikp
OwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0
YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5
cGVJRCgpKTsKLQotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJIYXNBcHBCb3VuZFNlc3Npb24i
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcEJvdW5kU2Vzc2lvbigpCiB7Ci0gICAg
YXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkNsZWFyQXBwQm91bmRTZXNzaW9uIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVh
ckFwcEJvdW5kU2Vzc2lvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFwcEJvdW5kRG9t
YWlucyhKU1ZhbHVlUmVmIG9yaWdpbkFycmF5LCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKERpZFNldEFwcEJvdW5kRG9tYWluc0Nh
bGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBK
U0NvbnRleHRSZWYgY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKIAogICAgIGlmICghSlNWYWx1
ZUlzQXJyYXkoY29udGV4dCwgb3JpZ2luQXJyYXkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBK
U09iamVjdFJlZiBvcmlnaW5zID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9yaWdpbkFycmF5
LCBudWxscHRyKTsKLSAgICBzdGF0aWMgYXV0byBsZW5ndGhQcm9wZXJ0eSA9IGFkb3B0KEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBvcmln
aW5zTGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9yaWdpbnMsIGxl
bmd0aFByb3BlcnR5LmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihj
b250ZXh0LCBvcmlnaW5zTGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRv
IG9yaWdpbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3JpZ2luQXJyYXksIG51bGxwdHIp
OwogICAgIGF1dG8gb3JpZ2luVVJMcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7
Ci0gICAgYXV0byBvcmlnaW5zTGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgb3JpZ2luc0xlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvcmlnaW5zTGVuZ3RoOyArK2kpIHsKKyAgICBhdXRvIG9yaWdpbnNM
ZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBvcmlnaW5zKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgb3JpZ2luc0xlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWVSZWYgb3Jp
Z2luVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvcmlnaW5zLCBp
LCBudWxscHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgb3JpZ2lu
VmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBvcmlnaW4gPSBh
ZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIG9yaWdpblZhbHVlLCBudWxscHRyKSk7
CisgICAgICAgIGF1dG8gb3JpZ2luID0gY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgb3JpZ2luVmFs
dWUpOwogICAgICAgICBzaXplX3Qgb3JpZ2luQnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11
bVVURjhDU3RyaW5nU2l6ZShvcmlnaW4uZ2V0KCkpICsgMTsKICAgICAgICAgYXV0byBvcmlnaW5C
dWZmZXIgPSBtYWtlVW5pcXVlQXJyYXk8Y2hhcj4ob3JpZ2luQnVmZmVyU2l6ZSk7CiAgICAgICAg
IEpTU3RyaW5nR2V0VVRGOENTdHJpbmcob3JpZ2luLmdldCgpLCBvcmlnaW5CdWZmZXIuZ2V0KCks
IG9yaWdpbkJ1ZmZlclNpemUpOwpAQCAtMzExOSw3ICsyMTc3LDcgQEAgdm9pZCBUZXN0UnVubmVy
OjpzZXRBcHBCb3VuZERvbWFpbnMoSlNWYWx1ZVJlZiBvcmlnaW5BcnJheSwgSlNWYWx1ZVJlZiBj
b21wbGV0aW8KICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0ob3JpZ2luVVJMcy5nZXQoKSwgYWRv
cHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhvcmlnaW5CdWZmZXIuZ2V0KCkpKS5nZXQo
KSk7CiAgICAgfQogCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldEFwcEJvdW5kRG9tYWlucyIpKTsKKyAgICBhdXRvIG1lc3Nh
Z2VOYW1lID0gdG9XSygiU2V0QXBwQm91bmREb21haW5zIik7CiAgICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBvcmlnaW5VUkxzLmdldCgpKTsKIH0KIApAQCAtMzEyOCw2ICsyMTg2LDExIEBAIHZvaWQg
VGVzdFJ1bm5lcjo6ZGlkU2V0QXBwQm91bmREb21haW5zQ2FsbGJhY2soKQogICAgIGNhbGxUZXN0
UnVubmVyQ2FsbGJhY2soRGlkU2V0QXBwQm91bmREb21haW5zQ2FsbGJhY2tJRCk7CiB9CiAKK3Zv
aWQgVGVzdFJ1bm5lcjo6cG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkK
K3sKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgdG9XSyhuYW1lKS5nZXQoKSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUp
KS5nZXQoKSk7Cit9CisKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiB9IC8v
IG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmgKaW5kZXggYzBhMTQwOTA1ZWRmM2RkYTRhNzYxYWI2MjA3ZDk3YjQz
NjIwODZiYi4uYWFlYjQxMGUzZWQwN2ZiNmNhNGY5ZjAzYmZmN2RlMzcyMjUyN2Y3MCAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIC8vIEpTV3JhcHBhYmxlCiAgICAgdmlydHVh
bCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOwogCi0gICAgdm9pZCBtYWtlV2luZG93T2JqZWN0
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAg
Ym9vbCBpc0lPU0ZhbWlseSgpIGNvbnN0CiAgICAgewpAQCAtMjUzLDcgKzI1Myw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKGJvb2wgZikgeyBtX3dp
bGxTZW5kUmVxdWVzdFJldHVybnNOdWxsID0gZjsgfQogICAgIGJvb2wgd2lsbFNlbmRSZXF1ZXN0
UmV0dXJuc051bGxPblJlZGlyZWN0KCkgY29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RS
ZXR1cm5zTnVsbE9uUmVkaXJlY3Q7IH0KICAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdFJldHVy
bnNOdWxsT25SZWRpcmVjdChib29sIGYpIHsgbV93aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9u
UmVkaXJlY3QgPSBmOyB9Ci0gICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RBZGRzSFRUUEJvZHko
SlNTdHJpbmdSZWYgYm9keSkgeyBtX3dpbGxTZW5kUmVxdWVzdEhUVFBCb2R5ID0gdG9XVEZTdHJp
bmcodG9XSyhib2R5KSk7IH0KKyAgICB2b2lkIHNldFdpbGxTZW5kUmVxdWVzdEFkZHNIVFRQQm9k
eShKU1N0cmluZ1JlZiBib2R5KSB7IG1fd2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHkgPSB0b1dURlN0
cmluZyhib2R5KTsgfQogICAgIFN0cmluZyB3aWxsU2VuZFJlcXVlc3RIVFRQQm9keSgpIGNvbnN0
IHsgcmV0dXJuIG1fd2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHk7IH0KIAogICAgIHZvaWQgc2V0VGV4
dERpcmVjdGlvbihKU1N0cmluZ1JlZik7CkBAIC0yODYsNyArMjg2LDcgQEAgcHVibGljOgogICAg
IHZvaWQgY2FsbEZvY3VzV2ViVmlld0NhbGxiYWNrKCk7CiAgICAgdm9pZCBjYWxsU2V0QmFja2lu
Z1NjYWxlRmFjdG9yQ2FsbGJhY2soKTsKIAotICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKEpT
U3RyaW5nUmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVmIHZhbHVlKTsKKyAgICBzdGF0aWMgdm9p
ZCBvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVyZW5jZSwgSlNTdHJpbmdSZWYg
dmFsdWUpOwogCiAgICAgLy8gQ29va2llcyB0ZXN0aW5nCiAgICAgdm9pZCBzZXRBbHdheXNBY2Nl
cHRDb29raWVzKGJvb2wpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEdl
b2xvY2F0aW9uLgogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wpOwotICAg
IHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUg
bG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIEpTVmFsdWVSZWYgYWx0aXR1ZGUsIEpTVmFsdWVS
ZWYgYWx0aXR1ZGVBY2N1cmFjeSwgSlNWYWx1ZVJlZiBoZWFkaW5nLCBKU1ZhbHVlUmVmIHNwZWVk
LCBKU1ZhbHVlUmVmIGZsb29yTGV2ZWwpOworICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ks
IE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1
cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBP
cHRpb25hbDxkb3VibGU+IGZsb29yTGV2ZWwpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKEpTU3RyaW5nUmVmIG1lc3NhZ2UpOwogICAgIGJvb2wg
aXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7CiAKQEAgLTMzNSw4ICszMzUsOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCBzZWN1cmVFdmVudElucHV0SXNFbmFibGVkKCkgY29uc3Q7CiAKICAgICBK
U1ZhbHVlUmVmIGZhaWxOZXh0TmV3Q29kZUJsb2NrKCk7Ci0gICAgSlNWYWx1ZVJlZiBudW1iZXJP
ZkRGR0NvbXBpbGVzKEpTVmFsdWVSZWYgdGhlRnVuY3Rpb24pOwotICAgIEpTVmFsdWVSZWYgbmV2
ZXJJbmxpbmVGdW5jdGlvbihKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKTsKKyAgICBKU1ZhbHVlUmVm
IG51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiBmdW5jdGlvbik7CisgICAgSlNWYWx1ZVJl
ZiBuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgZnVuY3Rpb24pOwogCiAgICAgYm9vbCBz
aG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXk7IH0KICAgICB2b2lkIHNldFNo
b3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5KGJvb2wpOwpAQCAtNTQ5LDYgKzU0
OSw4IEBAIHByaXZhdGU6CiAKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gbV90ZXN0VVJMOyAv
LyBTZXQgYnkgSW5qZWN0ZWRCdW5kbGVQYWdlIG9uY2UgcHJvdmlzaW9uYWwgbG9hZCBzdGFydHMu
CiAKKyAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wpOworCiAgICAg
U3RyaW5nIG1fd2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHk7CiAgICAgV1RGOjpTZWNvbmRzIG1fdGlt
ZW91dCB7IDMwX3MgfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAKaW5kZXggNjRhYzgxOTcx
NTNhYWUwYTBhYjcxZWJiYzI5NDI0ODRhMzVlNjVhZC4uNmUwMGQ5OTIyNWQxZjFhYWIyNjE1NmM4
OTI1YjA1NjZhMzY2ZDcyOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxl
ci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkluamVj
dGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5jbHVkZSAi
SlNUZXh0SW5wdXRDb250cm9sbGVyLmgiCkBAIC00MCwzMCArNDEsMTQgQEAgUmVmPFRleHRJbnB1
dENvbnRyb2xsZXI+IFRleHRJbnB1dENvbnRyb2xsZXI6OmNyZWF0ZSgpCiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVGV4dElucHV0Q29udHJvbGxlcik7CiB9CiAKLVRleHRJbnB1dENvbnRyb2xs
ZXI6OlRleHRJbnB1dENvbnRyb2xsZXIoKQotewotfQotCi1UZXh0SW5wdXRDb250cm9sbGVyOjp+
VGV4dElucHV0Q29udHJvbGxlcigpCi17Ci19Ci0KIEpTQ2xhc3NSZWYgVGV4dElucHV0Q29udHJv
bGxlcjo6d3JhcHBlckNsYXNzKCkKIHsKICAgICByZXR1cm4gSlNUZXh0SW5wdXRDb250cm9sbGVy
Ojp0ZXh0SW5wdXRDb250cm9sbGVyQ2xhc3MoKTsKIH0KIAotdm9pZCBUZXh0SW5wdXRDb250cm9s
bGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3
aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgVGV4dElucHV0Q29udHJv
bGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQ
cm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJ0ZXh0SW5wdXRDb250cm9sbGVyIiwgdGhp
cywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSwgZXhjZXB0aW9uKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGFycmF5TGVuZ3RoKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBhcnJheSkKLXsKLSAgICBhdXRvIGxlbmd0
aFN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7
Ci0gICAgaWYgKGF1dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQs
IGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIG51bGxwdHIpKQotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwg
bnVsbHB0cikpOwotICAgIHJldHVybiAwOworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNv
bnRleHQsICJ0ZXh0SW5wdXRDb250cm9sbGVyIiwgdGhpcyk7CiB9CiAKIHN0YXRpYyBXS0FycmF5
UmVmIGNyZWF0ZUNvbXBvc2l0aW9uSGlnaGxpZ2h0RGF0YShKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiBqc0hpZ2hsaWdodHNWYWx1ZSkKQEAgLTcyLDUwICs1NywxOSBAQCBzdGF0aWMg
V0tBcnJheVJlZiBjcmVhdGVDb21wb3NpdGlvbkhpZ2hsaWdodERhdGEoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gcmVz
dWx0ID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKLSAgICBhdXRvIGpzSGlnaGxpZ2h0c0FycmF5
ID0gY29uc3RfY2FzdDxKU09iamVjdFJlZj4oanNIaWdobGlnaHRzVmFsdWUpOwotICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIGpzSGlnaGxpZ2h0c0FycmF5KTsKLSAg
ICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGF1dG8ganNGcm9t
S2V5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZyb20iKSk7Ci0gICAg
YXV0byBqc0xlbmd0aEtleSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJs
ZW5ndGgiKSk7Ci0gICAgYXV0byBqc0NvbG9yS2V5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImNvbG9yIikpOwotCi0gICAgYXV0byB3a0Zyb21LZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmcm9tIikpOwotICAgIGF1dG8gd2tMZW5ndGhL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0g
ICAgYXV0byB3a0NvbG9yS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiY29sb3IiKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBq
c09iamVjdFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwganNIaWdo
bGlnaHRzQXJyYXksIGksICZleGNlcHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0aW9uIHx8ICFK
U1ZhbHVlSXNPYmplY3QoY29udGV4dCwganNPYmplY3RWYWx1ZSkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBhdXRvIGpzT2JqZWN0ID0gY29uc3RfY2FzdDxKU09iamVjdFJlZj4o
anNPYmplY3RWYWx1ZSk7Ci0gICAgICAgIGF1dG8ganNGcm9tVmFsdWUgPSBKU09iamVjdEdldFBy
b3BlcnR5KGNvbnRleHQsIGpzT2JqZWN0LCBqc0Zyb21LZXkuZ2V0KCksIG51bGxwdHIpOwotICAg
ICAgICBpZiAoIWpzRnJvbVZhbHVlIHx8ICFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwganNGcm9t
VmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBqc0xlbmd0aFZh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBqc09iamVjdCwganNMZW5ndGhLZXku
Z2V0KCksIG51bGxwdHIpOwotICAgICAgICBpZiAoIWpzTGVuZ3RoVmFsdWUgfHwgIUpTVmFsdWVJ
c051bWJlcihjb250ZXh0LCBqc0xlbmd0aFZhbHVlKSkKKyAgICBhdXRvIGFycmF5ID0gY29uc3Rf
Y2FzdDxKU09iamVjdFJlZj4oanNIaWdobGlnaHRzVmFsdWUpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIGFycmF5KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBudWxscHRyKTsKKyAgICAgICAgaWYgKCF2
YWx1ZSB8fCAhSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHZhbHVlKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGF1dG8ganNDb2xvclZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0
eShjb250ZXh0LCBqc09iamVjdCwganNDb2xvcktleS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAg
IGlmICghanNDb2xvclZhbHVlIHx8ICFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwganNDb2xvclZh
bHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gY29sb3IgPSBhZG9w
dChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGpzQ29sb3JWYWx1ZSwgbnVsbHB0cikpOwot
ICAgICAgICBhdXRvIHdrQ29sb3IgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KGNvbG9yLmdldCgpKSk7Ci0gICAgICAgIGF1dG8gd2tGcm9tID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShscm91bmQoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzRnJvbVZhbHVlLCBudWxscHRy
KSkpKTsKLSAgICAgICAgYXV0byB3a0xlbmd0aCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobHJv
dW5kKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc0xlbmd0aFZhbHVlLCBudWxscHRyKSkpKTsK
LQorICAgICAgICBhdXRvIG9iamVjdCA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KHZhbHVlKTsK
ICAgICAgICAgYXV0byBkaWN0aW9uYXJ5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHdr
RnJvbUtleS5nZXQoKSwgd2tGcm9tLmdldCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShkaWN0aW9uYXJ5LmdldCgpLCB3a0xlbmd0aEtleS5nZXQoKSwgd2tMZW5ndGguZ2V0KCkpOwot
ICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHdrQ29sb3JLZXku
Z2V0KCksIHdrQ29sb3IuZ2V0KCkpOworICAgICAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCAiZnJv
bSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihudW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0
LCAiZnJvbSIpKSk7CisgICAgICAgIHNldFZhbHVlKGRpY3Rpb25hcnksICJsZW5ndGgiLCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4obnVtZXJpY1Byb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgImxlbmd0
aCIpKSk7CisgICAgICAgIHNldFZhbHVlKGRpY3Rpb25hcnksICJjb2xvciIsIHRvV0soc3RyaW5n
UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAiY29sb3IiKSkuZ2V0KCkpOwogICAgICAgICBXS0Fy
cmF5QXBwZW5kSXRlbShyZXN1bHQsIGRpY3Rpb25hcnkuZ2V0KCkpOwogICAgIH0KLQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmgKaW5kZXggNTU4YzJlNjExNDA4
MTc4NWUzYjdjYWUxOWZlZmQzOTZhZWIzN2E5NC4uYTQ0YzI4ZTg0NDM5MTcyOTJhOWIzN2JjYjdl
MjU1MmQxMjE0NGNhNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmgKQEAgLTI4LDE3ICsyOCwxNyBA
QAogI2luY2x1ZGUgIkpTV3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogCit0eXBl
ZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKK3R5cGVkZWYg
c3RydWN0IE9wYXF1ZUpTU3RyaW5nKiBKU1N0cmluZ1JlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0
IE9wYXF1ZUpTVmFsdWUqIEpTVmFsdWVSZWY7CisKIG5hbWVzcGFjZSBXVFIgewogCi1jbGFzcyBU
ZXh0SW5wdXRDb250cm9sbGVyIDogcHVibGljIEpTV3JhcHBhYmxlIHsKK2NsYXNzIFRleHRJbnB1
dENvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgSlNXcmFwcGFibGUgewogcHVibGljOgogICAgIHN0
YXRpYyBSZWY8VGV4dElucHV0Q29udHJvbGxlcj4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+VGV4
dElucHV0Q29udHJvbGxlcigpOwotCi0gICAgLy8gSlNXcmFwcGFibGUKLSAgICB2aXJ0dWFsIEpT
Q2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICB2b2lk
IHNldE1hcmtlZFRleHQoSlNTdHJpbmdSZWYgdGV4dCwgaW50IGZyb20sIGludCBsZW5ndGgsIGJv
b2wgc3VwcHJlc3NVbmRlcmxpbmUsIEpTVmFsdWVSZWYgaGlnaGxpZ2h0cyk7CiAgICAgYm9vbCBo
YXNNYXJrZWRUZXh0KCk7CkBAIC00Niw3ICs0Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc2Vy
dFRleHQoSlNTdHJpbmdSZWYgdGV4dCk7CiAKIHByaXZhdGU6Ci0gICAgVGV4dElucHV0Q29udHJv
bGxlcigpOworICAgIFRleHRJbnB1dENvbnRyb2xsZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBKU0Ns
YXNzUmVmIHdyYXBwZXJDbGFzcygpIGZpbmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0Fj
dGl2YXRlRm9udHNDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tCmluZGV4IDAyNGZlNjA1NzNiOGYyYzU5MmVi
ZmRiMzVmM2E0NDQ4NWNkYjk3NTYuLjVhNWI3N2VjMTk0ZGE1ZmUzZmZmOTkxMzdjZTlhY2QyNmRm
ZTRjMWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
Y29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tCkBAIC0xMzYsNyArMTM2
LDcgQEAgdm9pZCBhY3RpdmF0ZUZvbnRzKCkKIAogdm9pZCBpbnN0YWxsRmFrZUhlbHZldGljYShX
S1N0cmluZ1JlZiBjb25maWd1cmF0aW9uKQogewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
Y29uZmlndXJhdGlvblN0cmluZyA9IGFkb3B0Q0YoV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgY29uZmlndXJhdGlvbikpOworICAgIGF1dG8gY29uZmlndXJhdGlvblN0
cmluZyA9IGFkb3B0Q0YoV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
Y29uZmlndXJhdGlvbikpOwogICAgIE5TVVJMICpyZXNvdXJjZVVSTCA9IFtyZXNvdXJjZXNEaXJl
Y3RvcnlVUkwoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJGYWtlSGVsdmV0aWNhLSVALnR0ZiIsIGNvbmZpZ3VyYXRpb25TdHJpbmcuZ2V0
KCldIGlzRGlyZWN0b3J5Ok5PXTsKICAgICBDRkVycm9yUmVmIGVycm9yID0gbnVsbHB0cjsKICAg
ICBpZiAoIUNURm9udE1hbmFnZXJSZWdpc3RlckZvbnRzRm9yVVJMKChfX2JyaWRnZSBDRlVSTFJl
ZilyZXNvdXJjZVVSTCwga0NURm9udE1hbmFnZXJTY29wZVByb2Nlc3MsICZlcnJvcikpIHsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvSW5q
ZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFnZUNvY29hLm1tCmluZGV4IDgxNzYxODI3YTg4
MWQwNmRmZTcwYTliZDMyMjQ3MzJhZTE5YmNmMjguLjkxZDI0OWM3MjdmNjg3NWVkNGE0Y2NmMTU5
YzBmNzdkNzJmODViZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0KKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2Nv
YS5tbQpAQCAtNDcsMTMgKzQ3LDEzIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpwbGF0Zm9y
bURpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlCiAKIFN0cmlu
ZyBJbmplY3RlZEJ1bmRsZVBhZ2U6OnBsYXRmb3JtUmVzcG9uc2VNaW1lVHlwZShXS1VSTFJlc3Bv
bnNlUmVmIHJlc3BvbnNlKQogewotICAgIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBuc1VSTFJl
c3BvbnNlID0gYWRvcHROUyhXS1VSTFJlc3BvbnNlQ29weU5TVVJMUmVzcG9uc2UocmVzcG9uc2Up
KTsKKyAgICBhdXRvIG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdLVVJMUmVzcG9uc2VDb3B5TlNV
UkxSZXNwb25zZShyZXNwb25zZSkpOwogICAgIHJldHVybiBbbnNVUkxSZXNwb25zZS5nZXQoKSBN
SU1FVHlwZV07CiB9CiAKIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6cmVzcG9uc2VIZWFk
ZXJDb3VudChXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQogewotICAgIFJldGFpblB0cjxOU1VS
TFJlc3BvbnNlPiBuc1VSTFJlc3BvbnNlID0gYWRvcHROUyhXS1VSTFJlc3BvbnNlQ29weU5TVVJM
UmVzcG9uc2UocmVzcG9uc2UpKTsKKyAgICBhdXRvIG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdL
VVJMUmVzcG9uc2VDb3B5TlNVUkxSZXNwb25zZShyZXNwb25zZSkpOwogICAgIGlmICghW25zVVJM
UmVzcG9uc2UgaXNLaW5kT2ZDbGFzczpbTlNIVFRQVVJMUmVzcG9uc2UgY2xhc3NdXSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklP
Uy5tbQppbmRleCA4N2NjZDIxY2E5YTc3YWEyZDBhMjFhNGNhYjUyMWNhZWVmYTljNGEyLi5jNDE4
MjMwZjNiNGZkZTcxOWFjNmNjYzg0Yjc0MmRiZWNhMTRkMjRhIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbQpAQCAtNjIsNyArNjIsNyBAQCBib29sIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1l
KCkKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImlv
cyIpKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygiaW9zIik7CiB9CiAKIHZvaWQg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKQpAQCAtODks
NyArODksNyBAQCBzdGF0aWMgaWQgZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKGlkIG9iaiwgTlNT
dHJpbmcgKmlkQXR0cmlidXRlKQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBp
ZEF0dHJpYnV0ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgaWQgcm9vdCA9IHN0YXRpY19j
YXN0PFBsYXRmb3JtVUlFbGVtZW50PihXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpKTsK
IAogICAgIGlkIHJlc3VsdCA9IGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChyb290LCBbTlNTdHJp
bmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOmlkQXR0cmlidXRlXSk7CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50SU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQppbmRleCA1MjIzNGFhNGQ3NDcyY2RlMDcxZDllODY5
NjkwZDkzNTUyOWEyMGQyLi5iYmM4YmIxNmM4NjRiYzI2MTBjZmFhNjlhMDZmZDgxM2M3Njk1ZDA0
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KQEAgLTEzNiwx
MSArMTM2LDYgQEAgQGVuZAogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBjcmVhdGVFbXB0eUpTU3RyaW5nKCkKLXsKLSAgICByZXR1cm4gYWRvcHQo
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhudWxscHRyLCAwKSk7Ci19Ci0KIHN0YXRpYyBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY29uY2F0ZW5hdGVBdHRyaWJ1dGVBbmRWYWx1ZShOU1N0
cmluZyAqYXR0cmlidXRlLCBOU1N0cmluZyAqdmFsdWUpCiB7CiAgICAgVmVjdG9yPFVuaUNoYXI+
IGJ1ZmZlcihbYXR0cmlidXRlIGxlbmd0aF0pOwpAQCAtMzMwLDI3ICszMjUsMjcgQEAgUmVmUHRy
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3Nl
ZEJ5Um93KCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMoKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZE
b2N1bWVudExpbmtzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAg
IHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
bGxBdHRyaWJ1dGVzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAg
IHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRGVzY3JpcHRpb25PZkF0dHJpYnV0ZVZhbHVl
KEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNT
dHJpbmdSZWYgYXR0cmlidXRlKQpAQCAtMzgyLDcgKzM3Nyw3IEBAIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0
cmluZ1JlCiAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoYXR0cmlidXRlLCAi
QVhUZXh0dWFsQ29udGV4dCIpKQogICAgICAgICByZXR1cm4gW1ttX2VsZW1lbnQgYWNjZXNzaWJp
bGl0eVRleHR1YWxDb250ZXh0XSBjcmVhdGVKU1N0cmluZ1JlZl07CiAgICAgCi0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om51bWJlckF0dHJpYnV0ZVZhbHVlKEpT
U3RyaW5nUmVmIGF0dHJpYnV0ZSkKQEAgLTQ0MywxNyArNDM4LDE3IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRl
KQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFy
YW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0
cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSgpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJv
bGUoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24oKQpAQCAtNDYzLDEzICs0NTgsMTIgQEAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlw
dGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpjb21wdXRlZFJvbGVTdHJpbmcoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dGl0bGUoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJu
IGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCkBAIC00NzksNyArNDczLDcgQEAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkK
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVu
dGF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAg
IHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUoKQpAQCAtNDg5LDcgKzQ4Myw3IEBA
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdW
YWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpsYW5ndWFnZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0KCkgY29uc3QKQEAgLTU0OSw3ICs1NDMsNyBA
QCBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWUoKQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbigp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRl
SlNTdHJpbmcoKTsKIH0KIAogaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBv
aW50TGluZU51bWJlcigpCkBAIC01ODQsNyArNTc4LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc1JlcXVpcmVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0ZvY3VzZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTU5NiwxMyArNTg5LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNTZWxlY3RlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0luZGV0ZXJtaW5hdGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTYzOCw3ICs2MjksNyBAQCBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmFyaWFJc0dyYWJiZWQoKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0
cmluZygpOwogfQogCiAvLyBwYXJhbWV0ZXJpemVkIGF0dHJpYnV0ZXMKQEAgLTY1OSw3ICs2NTAs
NyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmFu
Z2VGb3JQb3NpdGlvbihpbnQgeCwgaW50IHkpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwg
dW5zaWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlv
biwgdW5zaWduZWQgbGVuZ3RoKQpAQCAtNzEzLDMyICs3MDQsMzIgQEAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdFRleHRXaXRoQ3JpdGVyaWEo
SlNDb250ZXgKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dI
ZWFkZXJzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucygpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZlJvd3MoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0
dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMoKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXIoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7
CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0cmFpdHMoKQpAQCAtOTAzLDIzICs4OTQsMjEg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb25BdEluZGV4KHVu
c2lnbmVkIGluZGV4KSBjb25zdAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsZWFy
U2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNz
aWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojphc3Npc3RpdmVUZWNobm9sb2d5U2ltdWxhdGVk
Rm9jdXMoKQpAQCAtMTAxNiwzMSArMTAwNSwyNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1NlbGVjdGFibGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVj
dGFibGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzT2ZmU2NyZWVuKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2VkKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMDUyLDEzICsxMDM2LDExIEBAIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1NpbmdsZUxpbmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNNdWx0aUxpbmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEwNzQsMjIgKzEwNTYsMTggQEAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBvcHVwVmFsdWUoKSBjb25zdAog
CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxl
Y3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphZGRTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
IH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24oKQogewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogLy8gVGV4dCBtYXJrZXJzCkBAIC0xMTM2LDcg
KzExMTQsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKEFjY2VzcwogewogICAgIGlkIHRleHRNYXJrZXJz
ID0gbWFya2VyUmFuZ2UtPnBsYXRmb3JtVGV4dE1hcmtlclJhbmdlKCk7CiAgICAgaWYgKCFbdGV4
dE1hcmtlcnMgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQotICAgICAgICByZXR1cm4g
Y3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgICAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsK
ICAgICByZXR1cm4gW1ttX2VsZW1lbnQgc3RyaW5nRm9yVGV4dE1hcmtlcnM6dGV4dE1hcmtlcnNd
IGNyZWF0ZUpTU3RyaW5nUmVmXTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvRXZlbnRTZW5kZXJQcm94eUlPUy5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0K
aW5kZXggY2FiM2YxOGIzNjU5ZjQ5MTZiZDUwMDg3OTI4NmQ2YTI3YzBjOWY5MS4uYjJlMjg4NGEw
YjNlMzZiMjQxMjBmMjFkM2U4YmRjNzFhZGQ0NzFiMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvRXZlbnRTZW5kZXJQcm94eUlPUy5tbQorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclBy
b3h5SU9TLm1tCkBAIC0zNiwyMyArMzYsMTMgQEAgbmFtZXNwYWNlIFdUUiB7CiAKIEV2ZW50U2Vu
ZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVzdENvbnRyb2xsZXIqIHRlc3RDb250cm9sbGVy
KQogICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0Q29udHJvbGxlcikKLSAgICAsIG1fdGltZSgw
KQotICAgICwgbV9wb3NpdGlvbigpCi0gICAgLCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24oZmFsc2Up
Ci0gICAgLCBtX2NsaWNrQ291bnQoMCkKLSAgICAsIG1fY2xpY2tUaW1lKDApCi0gICAgLCBtX2Ns
aWNrUG9zaXRpb24oKQotICAgICwgbV9jbGlja0J1dHRvbihrV0tFdmVudE1vdXNlQnV0dG9uTm9C
dXR0b24pCi0gICAgLCBldmVudE51bWJlcigwKQogewogICAgIFVOVVNFRF9QQVJBTShtX3Rlc3RD
b250cm9sbGVyKTsKICAgICBVTlVTRURfUEFSQU0obV9sZWZ0TW91c2VCdXR0b25Eb3duKTsKICAg
ICBVTlVTRURfUEFSQU0oZXZlbnROdW1iZXIpOwogfQogCi1FdmVudFNlbmRlclByb3h5Ojp+RXZl
bnRTZW5kZXJQcm94eSgpCi17Ci19CitFdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94
eSgpID0gZGVmYXVsdDsKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50
Rm9yQnV0dG9uKGludCBidXR0b24pCiB7CkBAIC03MCwxNyArNjAsMTQgQEAgdm9pZCBFdmVudFNl
bmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiAKIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6bW91c2VEb3duKHVuc2lnbmVkIGJ1dHRvbk51bWJlciwgV0tFdmVu
dE1vZGlmaWVycyBtb2RpZmllcnMpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6bW91c2VVcCh1bnNpZ25lZCBidXR0b25OdW1iZXIsIFdLRXZlbnRNb2Rp
ZmllcnMgbW9kaWZpZXJzKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6Om1vdXNlTW92ZVRvKGRvdWJsZSB4LCBkb3VibGUgeSkKIHsKLSAgICAvLyBXcml0
ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpsZWFwRm9yd2FyZChpbnQgbWlsbGlz
ZWNvbmRzKQpAQCAtOTAsNzkgKzc3LDY2IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZv
cndhcmQoaW50IG1pbGxpc2Vjb25kcykKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjprZXlEb3du
KFdLU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIHVuc2lnbmVkIGtl
eUxvY2F0aW9uKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6Om1vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQog
CiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1
bVBoYXNlcyhpbnQgeCwgaW50IHksIGludCBwaGFzZSwgaW50IG1vbWVudHVtKQogewotICAgIC8v
IFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNvbnRpbnVvdXNNb3VzZVNj
cm9sbEJ5KGludCB4LCBpbnQgeSwgYm9vbCBwYWdlZCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0K
IAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6YWRk
VG91Y2hQb2ludChpbnQgeCwgaW50IHkpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQg
eSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRU
b3VjaE1vZGlmaWVyKFdLRXZlbnRNb2RpZmllcnMsIGJvb2wgZW5hYmxlKQogewotICAgIC8vIFdy
aXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoUG9pbnRSYWRpdXMo
aW50IHJhZGl1c1gsIGludCByYWRpdXNZKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoU3RhcnQoKQogewotICAgIC8vIFdyaXRlIG1lLgogfQog
CiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoTW92ZSgpCiB7Ci0gICAgLy8gV3JpdGUgbWUu
CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hFbmQoKQogewotICAgIC8vIFdyaXRl
IG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICAv
LyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRz
KCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpyZWxl
YXNlVG91Y2hQb2ludChpbnQgaW5kZXgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCiB7Ci0gICAgLy8g
V3JpdGUgbWUuCiB9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlD
b21tb25NYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9B
Y2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tCmluZGV4IDI1ZTBjM2QwMGU0OWJiMmI1ZWQyMDNlMTkw
Y2YxZWNjOTBkZjNhZjQuLjM1NGE4ZjY1NTVjNmMwMDI2NWY1NjgxYTZiMzcxNTJhODRhNTYyYzAg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0Fj
Y2Vzc2liaWxpdHlDb21tb25NYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQpAQCAtMzIsNiArMzIsNyBA
QAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogCiAjaW1wb3J0ICJKU1dyYXBw
ZXIuaCIKKyNpbXBvcnQgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAKQEAgLTYxLDI2
ICs2MiwyMiBAQCBDbGFzcyB3ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKCkKICAg
ICByZXR1cm4gY2xzOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBtYWtlQXJyYXlSZWZGb3JBcnJh
eShKU0NvbnRleHRSZWYgY29udGV4dCwgTlNBcnJheSAqYXJyYXkpCitzdGF0aWMgSlNPYmplY3RS
ZWYgbWFrZUpTQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQogewog
ICAgIE5TVUludGVnZXIgY291bnQgPSBhcnJheS5jb3VudDsKICAgICBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tjb3VudF07Ci0KICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQogICAgICAgICBhcmd1bWVudHNbaV0gPSBtYWtlVmFsdWVSZWZGb3JWYWx1ZShjb250ZXh0LCBb
YXJyYXkgb2JqZWN0QXRJbmRleDppXSk7Ci0KICAgICByZXR1cm4gSlNPYmplY3RNYWtlQXJyYXko
Y29udGV4dCwgY291bnQsIGFyZ3VtZW50cywgbnVsbHB0cik7CiB9CiAKLXN0YXRpYyBKU1ZhbHVl
UmVmIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0Rp
Y3Rpb25hcnkgKmRpY3Rpb25hcnkpCitzdGF0aWMgSlNPYmplY3RSZWYgbWFrZUpTT2JqZWN0KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkpCiB7Ci0gICAgSlNP
YmplY3RSZWYgb2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIp
OwotCisgICAgYXV0byBvYmplY3QgPSBKU09iamVjdE1ha2UoY29udGV4dCwgbnVsbHB0ciwgbnVs
bHB0cik7CiAgICAgW2RpY3Rpb25hcnkgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2Nr
Ol4oTlNTdHJpbmcgKmtleSwgaWQgb2JqLCBCT09MICopIHsKICAgICAgICAgaWYgKEpTVmFsdWVS
ZWYgcHJvcGVydHlWYWx1ZSA9IG1ha2VWYWx1ZVJlZkZvclZhbHVlKGNvbnRleHQsIG9iaikpCiAg
ICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgW2tleSBjcmVh
dGVKU1N0cmluZ1JlZl0uZ2V0KCksIHByb3BlcnR5VmFsdWUsIGtKU1Byb3BlcnR5QXR0cmlidXRl
Tm9uZSwgbnVsbHB0cik7CiAgICAgfV07Ci0KICAgICByZXR1cm4gb2JqZWN0OwogfQogCkBAIC05
Niw5ICs5Myw5IEBAIEpTVmFsdWVSZWYgbWFrZVZhbHVlUmVmRm9yVmFsdWUoSlNDb250ZXh0UmVm
IGNvbnRleHQsIGlkIHZhbHVlKQogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczp3ZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckNsYXNzKCldKQogICAgICAgICByZXR1cm4gdG9KUyhjb250
ZXh0LCBXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxQbGF0
Zm9ybVVJRWxlbWVudD4odmFsdWUpKS5wdHIoKSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNs
YXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIG1ha2VPYmplY3RSZWZG
b3JEaWN0aW9uYXJ5KGNvbnRleHQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG1ha2VKU09iamVj
dChjb250ZXh0LCB2YWx1ZSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5
IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBtYWtlQXJyYXlSZWZGb3JBcnJheShjb250ZXh0LCB2
YWx1ZSk7CisgICAgICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0LCB2YWx1ZSk7CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTExNSwyOCArMTEyLDE2IEBAIE5TRGljdGlvbmFyeSAq
c2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENyaXRlcmlhKEpT
Q29udGV4dFJlCiAKICAgICBpZiAoc2VhcmNoS2V5KSB7CiAgICAgICAgIGlkIHNlYXJjaEtleVBh
cmFtZXRlciA9IG5pbDsKLSAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFy
Y2hLZXkpKSB7Ci0gICAgICAgICAgICBhdXRvIHNlYXJjaEtleVN0cmluZyA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgc2VhcmNoS2V5LCBudWxscHRyKSk7Ci0gICAgICAgICAg
ICBpZiAoc2VhcmNoS2V5U3RyaW5nKQotICAgICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFtZXRl
ciA9IFtOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoS2V5U3RyaW5nLmdldCgp
XTsKLSAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoS2V5
KSkgeworICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaEtleSkpCisg
ICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSB0b1dURlN0cmluZyhjb250ZXh0LCBzZWFy
Y2hLZXkpOworICAgICAgICBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNo
S2V5KSkgewogICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoS2V5QXJyYXkgPSBKU1ZhbHVl
VG9PYmplY3QoY29udGV4dCwgc2VhcmNoS2V5LCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gMDsKLQotICAgICAgICAgICAgYXV0byBsZW5ndGhQ
cm9wZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5n
dGgiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUg
PSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBsZW5ndGhQcm9w
ZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoS2V5QXJy
YXlMZW5ndGhWYWx1ZSAmJiBKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoS2V5QXJyYXlM
ZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoS2V5QXJyYXlMZW5ndGggPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5
TGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLQorICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoS2V5
QXJyYXlMZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hLZXlBcnJheSk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoS2V5QXJyYXlMZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoS2V5VmFsdWUgPSBKU09iamVj
dEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgaSwgbnVsbHB0cik7
Ci0gICAgICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2VhcmNoS2V5U3RyaW5nID0gSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hLZXlWYWx1ZSwgbnVsbHB0cik7Ci0gICAgICAgICAg
ICAgICAgaWYgKHNlYXJjaEtleVN0cmluZykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXNl
YXJjaEtleVBhcmFtZXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleVBhcmFt
ZXRlciA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAgICAgICAgICAgICAgIFtzZWFy
Y2hLZXlQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6
c2VhcmNoS2V5U3RyaW5nXV07Ci0gICAgICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVsZWFzZShz
ZWFyY2hLZXlTdHJpbmcpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhdXRv
IHNlYXJjaEtleSA9IHRvV1RGU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdElu
ZGV4KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBpLCBudWxscHRyKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFzZWFyY2hLZXlQYXJhbWV0ZXIpCisgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtl
eVBhcmFtZXRlciA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgICAgICAgICAgICAgW3Nl
YXJjaEtleVBhcmFtZXRlciBhZGRPYmplY3Q6c2VhcmNoS2V5XTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBpZiAoc2VhcmNoS2V5UGFyYW1ldGVyKQpAQCAtMTQ0LDEwICsxMjks
OSBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVG
b3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgIH0KIAogICAgIGlmIChzZWFyY2hUZXh0
ICYmIEpTU3RyaW5nR2V0TGVuZ3RoKHNlYXJjaFRleHQpKQotICAgICAgICBbcGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZSBzZXRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFy
Y2hUZXh0XSBmb3JLZXk6QCJBWFNlYXJjaFRleHQiXTsKKyAgICAgICAgW3BhcmFtZXRlcml6ZWRB
dHRyaWJ1dGUgc2V0T2JqZWN0OnRvV1RGU3RyaW5nKHNlYXJjaFRleHQpIGZvcktleTpAIkFYU2Vh
cmNoVGV4dCJdOwogCiAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OkAodmlz
aWJsZU9ubHkpIGZvcktleTpAIkFYVmlzaWJsZU9ubHkiXTsKLQogICAgIFtwYXJhbWV0ZXJpemVk
QXR0cmlidXRlIHNldE9iamVjdDpAKGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSkgZm9yS2V5OkAi
QVhJbW1lZGlhdGVEZXNjZW5kYW50c09ubHkiXTsKIAogICAgIHJldHVybiBwYXJhbWV0ZXJpemVk
QXR0cmlidXRlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQpp
bmRleCA5MTNhZTBmNzVjZGI0ZWQ1ZGVkZGViOTI1ZjZjOTUwMThkZGQxNzA0Li5hODg3ZGU1Yzg1
ZDUwMjg0ZmQyNDQ3MTI1MTZlODljOTk4YzNhYTVmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5t
bQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlck1hYy5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCIKICNpbXBvcnQgIkluamVjdGVkQnVuZGxlLmgi
CiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tCdW5kbGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS0J1bmRsZVBhZ2UuaD4KQEAgLTk2LDcgKzk3
LDcgQEAgc3RhdGljIGlkIGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChpZCBvYmosIE5TU3RyaW5n
ICppZEF0dHJpYnV0ZSkKIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWRBdHRy
aWJ1dGUpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3Qg
PSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVj
dChwYWdlKSk7CiAKICAgICBSZXRhaW5QdHI8aWQ+IHJlc3VsdDsKQEAgLTExMSw3ICsxMTIsNyBA
QCBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OmFjY2Vzc2libGVFbGVtZW50QnlJZChKUwogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJtYWMiKSk7CisgICAgcmV0dXJuIFdUUjo6
Y3JlYXRlSlNTdHJpbmcoIm1hYyIpOwogfQogCiAvLyBBWFRocmVhZCBpbXBsZW1lbnRhdGlvbgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KaW5kZXggNTBiM2UwMjIw
YjhkMTIyYWQyMmJjOTZkNDI0Y2ZkODMzMWI2NWY1OS4uMmVmZjQ1NGU2Njc5MWQ2OThmOTViZWM3
Njk0YTA5ZmIyY2NmMGExMSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
TWFjLm1tCkBAIC0zMiw3ICszMiw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZS5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVQ
YWdlLmgiCi0KKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxBcHBLaXQvTlNBY2Nlc3Np
YmlsaXR5Lmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KQEAgLTg3LDExICs4Nyw2IEBAIEBlbmQKIAog
bmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRl
RW1wdHlKU1N0cmluZygpCi17Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMobnVsbHB0ciwgMCkpOwotfQotCiBSZWZQdHI8QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNfY29udHJvbGxlcjsKIAogQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChpZCBlbGVtZW50KQpAQCAtMjA2LDcg
KzIwMSw3IEBAIHN0YXRpYyBOU1N0cmluZyogZGVzY3JpcHRpb25PZlZhbHVlKGlkIHZhbHVlT2Jq
ZWN0LCBpZCBlbGVtZW50KQogCiBzdGF0aWMgTlNTdHJpbmcgKmF0dHJpYnV0ZXNPZkVsZW1lbnQo
aWQgYWNjZXNzaWJpbGl0eU9iamVjdCkKIHsKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gYXR0cmli
dXRlcyA9IHN1cHBvcnRlZEF0dHJpYnV0ZXMoYWNjZXNzaWJpbGl0eU9iamVjdCk7CisgICAgYXV0
byBhdHRyaWJ1dGVzID0gc3VwcG9ydGVkQXR0cmlidXRlcyhhY2Nlc3NpYmlsaXR5T2JqZWN0KTsK
IAogICAgIE5TTXV0YWJsZVN0cmluZyogYXR0cmlidXRlc1N0cmluZyA9IFtOU011dGFibGVTdHJp
bmcgc3RyaW5nXTsKICAgICBmb3IgKE5TU3RyaW5nKiBhdHRyaWJ1dGUgaW4gYXR0cmlidXRlcy5n
ZXQoKSkgewpAQCAtMjI3LDE2ICsyMjIsMTMgQEAgc3RhdGljIE5TU3RyaW5nICphdHRyaWJ1dGVz
T2ZFbGVtZW50KGlkIGFjY2Vzc2liaWxpdHlPYmplY3QpCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXNT
dHJpbmc7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgSlNWYWx1ZVJlZiBjb252
ZXJ0VmVjdG9yVG9PYmplY3RBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgVmVjdG9yPFQ+IGNv
bnN0JiBlbGVtZW50cykKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBKU09iamVjdFJlZiBt
YWtlSlNBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgVmVjdG9yPFQ+JiBlbGVtZW50
cykKIHsKLSAgICBKU1ZhbHVlUmVmIGFycmF5UmVzdWx0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29u
dGV4dCwgMCwgMCwgMCk7Ci0gICAgSlNPYmplY3RSZWYgYXJyYXlPYmogPSBKU1ZhbHVlVG9PYmpl
Y3QoY29udGV4dCwgYXJyYXlSZXN1bHQsIDApOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVjdE1h
a2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBzaXplX3QgZWxlbWVudENvdW50ID0gZWxl
bWVudHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZWxlbWVudENvdW50OyAr
K2kpCi0gICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2Jq
LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZWxlbWVudHNbaV0tPndyYXBwZXJDbGFzcygpLCBl
bGVtZW50c1tpXS5nZXQoKSksIDApOwotCi0gICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgICAg
ICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgSlNPYmplY3RN
YWtlKGNvbnRleHQsIGVsZW1lbnRzW2ldLT53cmFwcGVyQ2xhc3MoKSwgZWxlbWVudHNbaV0uZ2V0
KCkpLCAwKTsKKyAgICByZXR1cm4gYXJyYXk7CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gY29uY2F0ZW5hdGVBdHRyaWJ1dGVBbmRWYWx1ZShOU1N0cmluZyogYXR0cmlidXRl
LCBOU1N0cmluZyogdmFsdWUpCkBAIC0yNzMsMjUgKzI2NSwxMyBAQCBzdGF0aWMgTlNEaWN0aW9u
YXJ5ICpzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKEpTQ29udGV4
dFJlZiBjbwogICAgIAogICAgIGlmIChzZWFyY2hTdHJpbmdzKSB7CiAgICAgICAgIE5TTXV0YWJs
ZUFycmF5ICpzZWFyY2hTdHJpbmdzUGFyYW1ldGVyID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsK
LSAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgewot
ICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBp
ZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1Bh
cmFtZXRlciBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hT
dHJpbmdzU3RyaW5nLmdldCgpXV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSlNWYWx1
ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7CisgICAgICAgIGlmIChKU1ZhbHVl
SXNTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpCisgICAgICAgICAgICBbc2VhcmNoU3Ry
aW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5n
cyldOworICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmlu
Z3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRy
KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAg
SlNWYWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5n
ZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3Ro
VmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0
aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NB
cnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
c2VhcmNoU3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwotICAgICAgICAgICAg
ICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICBbc2VhcmNo
U3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1Jl
ZjpzZWFyY2hTdHJpbmdzU3RyaW5nLmdldCgpXV07Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0
LCBzZWFyY2hTdHJpbmdzQXJyYXkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIFtzZWFy
Y2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDp0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVj
dEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51bGxw
dHIpKV07CiAgICAgICAgIH0KICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2Jq
ZWN0OnNlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWxlY3RUZXh0U2VhcmNoU3Ry
aW5ncyJdOwogICAgIH0KQEAgLTMxNCwyNCArMjk0LDEzIEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkg
KnNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEoSlNDb250ZXh0UmVm
IGNvCiAKICAgICBpZiAoc2VhcmNoU3RyaW5ncykgewogICAgICAgICBOU011dGFibGVBcnJheSAq
c2VhcmNoU3RyaW5nc1BhcmFtZXRlciA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAg
IGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAgICAg
ICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cikpOwotICAgICAgICAgICAgaWYgKHNlYXJj
aFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIg
YWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0
cmluZy5nZXQoKV1dOwotICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0
LCBzZWFyY2hTdHJpbmdzKSkgeworICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQs
IHNlYXJjaFN0cmluZ3MpKQorICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRk
T2JqZWN0OnRvV1RGU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpXTsKKyAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hTdHJpbmdzQXJyYXkgPSBKU1ZhbHVl
VG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cik7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAwOwotCi0gICAgICAgICAgICBhdXRv
IGxlbmd0aFByb3BlcnR5U3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImxlbmd0aCIpKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5
TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NB
cnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAg
aWYgKHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250
ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2Vh
cmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwot
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5
TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcg
PSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlB
dEluZGV4KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIp
KTsKLSAgICAgICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAg
ICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJp
bmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gYXJy
YXlMZW5ndGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmco
Y29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5n
c0FycmF5LCBpLCBudWxscHRyKSldOwogICAgICAgICB9CiAgICAgICAgIFtwYXJhbWV0ZXJpemVk
QXR0cmlidXRlIHNldE9iamVjdDpzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGZvcktleTpAIkFYU2Vh
cmNoVGV4dFNlYXJjaFN0cmluZ3MiXTsKICAgICB9CkBAIC00MDEsNyArMzcwLDcgQEAgSlNWYWx1
ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKCkgY29uc3QKICAgICBpZCB2
YWx1ZSA9IGF0dHJpYnV0ZVZhbHVlKG1fZWxlbWVudC5nZXQoKSwgTlNBY2Nlc3NpYmlsaXR5Um93
SGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZSk7CiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNz
OltOU0FycmF5IGNsYXNzXV0pCiAgICAgICAgIGVsZW1lbnRzID0gbWFrZVZlY3RvcjxSZWZQdHI8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KHZhbHVlKTsKLSAgICByZXR1cm4gY29udmVydFZlY3Rv
clRvT2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pihjb250ZXh0LCBl
bGVtZW50cyk7CisgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNvbnRleHQsIGVsZW1lbnRzKTsKICAg
ICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiB9CiAKQEAgLTQxNSw3ICszODQsNyBAQCBKU1ZhbHVl
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkhlYWRlcnMoKSBjb25zdAogICAgIGlk
IHZhbHVlID0gYXR0cmlidXRlVmFsdWUobV9lbGVtZW50LmdldCgpLCBOU0FjY2Vzc2liaWxpdHlD
b2x1bW5IZWFkZXJVSUVsZW1lbnRzQXR0cmlidXRlKTsKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9m
Q2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKICAgICAgICAgZWxlbWVudHMgPSBtYWtlVmVjdG9yPFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4odmFsdWUpOwotICAgIHJldHVybiBjb252ZXJ0
VmVjdG9yVG9PYmplY3RBcnJheTxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KGNvbnRl
eHQsIGVsZW1lbnRzKTsKKyAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgZWxlbWVudHMp
OwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKIH0KICAgICAKQEAgLTYwNyw3ICs1NzYsNyBA
QCBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEFycmF5QXR0cmli
dXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cgogCiAgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Pj4gZWxlbWVudHM7CiAgICAgZ2V0VUlFbGVtZW50c1dpdGhBdHRyaWJ1dGUo
YXR0cmlidXRlLCBlbGVtZW50cyk7Ci0gICAgcmV0dXJuIGNvbnZlcnRWZWN0b3JUb09iamVjdEFy
cmF5PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4oY29udGV4dCwgZWxlbWVudHMpOwor
ICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0LCBlbGVtZW50cyk7CiB9CiAKIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRB
dHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpIGNvbnN0CkBAIC05NzYsNyArOTQ1
LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBA
IC0xMjI5LDcgKzExOTcsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNl
YXJjaFRleHRXaXRoQ3JpdGVyaWEoSlNDb250ZXh0UmVmIGNvbnRleHQsCiAgICAgTlNEaWN0aW9u
YXJ5ICpwYXJhbWV0ZXJpemVkQXR0cmlidXRlID0gc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRy
aWJ1dGVGb3JDcml0ZXJpYShjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBzdGFydEZyb20sIGRpcmVj
dGlvbik7CiAgICAgaWQgcmVzdWx0ID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6QCJBWFNlYXJjaFRleHRXaXRoQ3JpdGVyaWEiIGZvclBhcmFtZXRlcjpwYXJhbWV0ZXJp
emVkQXR0cmlidXRlXTsKICAgICBpZiAoW3Jlc3VsdCBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNs
YXNzXV0pCi0gICAgICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheTxSZWZQdHI8
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4+KGNvbnRleHQsIG1ha2VWZWN0b3I8UmVmUHRy
PEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+PihyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJu
IG1ha2VKU0FycmF5KGNvbnRleHQsIG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2U+PihyZXN1bHQpKTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAKICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTE1NDYsMTMgKzE1MTQsMTEgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb25BdEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25z
dAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQpA
QCAtMTU2Miw4ICsxNTI4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZD
bGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0
cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwotICAgIAotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVu
dFVSSSgpCkBAIC0xNTczLDggKzE1MzgsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQogICAgIGlmIChbdmFsdWUgaXNLaW5k
T2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVK
U1N0cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwotICAgIAotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwo
KQpAQCAtMTU4Myw3ICsxNTQ3LDYgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnVybCgpCiAgICAgTlNVUkwgKnVybCA9IFttX2VsZW1lbnQgYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV07CiAgICAg
cmV0dXJuIFtbdXJsIGFic29sdXRlU3RyaW5nXSBjcmVhdGVKU1N0cmluZ1JlZl07ICAgIAogICAg
IEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAgICAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApA
QCAtMTYyMiw3ICsxNTg1LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3Vz
YWJsZSgpIGNvbnN0CiAgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCiAgICAgcmVzdWx0ID0g
W21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTpOU0FjY2Vzc2liaWxp
dHlGb2N1c2VkQXR0cmlidXRlXTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCi0gICAgCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTY0OCwxOSArMTYxMCwxNiBAQCBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKIAogYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xs
YXBzZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKQEAgLTE2NzUsMTMgKzE2MzQsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
U2luZ2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0K
IApAQCAtMTcxNCwxNyArMTY3MSwxNCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRh
a2VGb2N1cygpCiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigp
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFkZFNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAogfQogCiAvLyBUZXh0IG1hcmtlcnMKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1t
CmluZGV4IDQwM2Y0ZmY4MzJlZTBlZjdjM2NmYWJkZjBmODdlMmNjYmU2MTRmOGEuLmFkYmI0Yjdi
NWQ1NGZiMTRhOWM0YmRlOGE5MjI3NWYxMWMxNDE2ZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpA
QCAtNDYsMTYgKzQ2LDExIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBUZXN0UnVubmVyOjpp
bnNwZWN0b3JUZXN0U3R1YlVSTCgpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICByZXR1
cm4gbnVsbHB0cjsKICNlbHNlCi0gICAgQ0ZCdW5kbGVSZWYgaW5zcGVjdG9yQnVuZGxlID0gQ0ZC
dW5kbGVHZXRCdW5kbGVXaXRoSWRlbnRpZmllcihDRlNUUigiY29tLmFwcGxlLldlYkluc3BlY3Rv
clVJIikpOworICAgIGF1dG8gaW5zcGVjdG9yQnVuZGxlID0gQ0ZCdW5kbGVHZXRCdW5kbGVXaXRo
SWRlbnRpZmllcihDRlNUUigiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIikpOwogICAgIGlmICgh
aW5zcGVjdG9yQnVuZGxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0
cjxDRlVSTFJlZj4gdXJsID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChpbnNwZWN0
b3JCdW5kbGUsIENGU1RSKCJUZXN0U3R1YiIpLCBDRlNUUigiaHRtbCIpLCBOVUxMKSk7Ci0gICAg
aWYgKCF1cmwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ0ZTdHJpbmdSZWYgdXJs
U3RyaW5nID0gQ0ZVUkxHZXRTdHJpbmcodXJsLmdldCgpKTsKLSAgICByZXR1cm4gYWRvcHQoSlNT
dHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcodXJsU3RyaW5nKSk7CisgICAgYXV0byByZXNvdXJjZVVS
TCA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoaW5zcGVjdG9yQnVuZGxlLCBDRlNU
UigiVGVzdFN0dWIiKSwgQ0ZTVFIoImh0bWwiKSwgTlVMTCkpOworICAgIHJldHVybiByZXNvdXJj
ZVVSTCA/IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKENGVVJMR2V0U3RyaW5nKHJl
c291cmNlVVJMLmdldCgpKSkpIDogbnVsbHB0cjsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAppbmRleCAxYmMwNWMwYTVmM2E4MDRjMGIxNDFiODk2
OTBiNzVkMjc3MTBlNzYxLi42N2YzOWU2OWYxNTQwOGI5MmVhM2FlOTQ3YzlmYTkyZmVlYTEyOGNk
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDE1ICsyNCwxMiBAQAog
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU3RyaW5n
RnVuY3Rpb25zX2gKLSNkZWZpbmUgU3RyaW5nRnVuY3Rpb25zX2gKKyNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5jbHVkZSAiSlNCYXNpY3MuaCIKICNpbmNsdWRlIDxX
ZWJLaXQvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmcuaD4KICNpbmNs
dWRlIDxXZWJLaXQvV0tTdHJpbmdQcml2YXRlLmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1dLVVJMLmg+
CiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CkBAIC00NCw3ICs0MSw4IEBACiAKIG5hbWVzcGFjZSBXVFIgewogCi0vLyBDb252
ZXJzaW9uIGZ1bmN0aW9ucworV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0tTdHJpbmcoSlND
b250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKK1dURjo6U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29udGV4
dFJlZiwgSlNWYWx1ZVJlZik7CiAKIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9X
SyhKU1N0cmluZ1JlZiBzdHJpbmcpCiB7CkBAIC01Niw5ICs1NCwxNCBAQCBpbmxpbmUgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soY29uc3QgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+JiBz
dHJpbmcpCiAgICAgcmV0dXJuIHRvV0soc3RyaW5nLmdldCgpKTsKIH0KIAoraW5saW5lIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICByZXR1
cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKK30KKwog
aW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKGNvbnN0IFdURjo6U3RyaW5nJiBz
dHJpbmcpCiB7Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICByZXR1cm4gdG9XSyhzdHJpbmcudXRmOCgp
LmRhdGEoKSk7CiB9CiAKIGlubGluZSBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdG9KUyhXS1N0
cmluZ1JlZiBzdHJpbmcpCkBAIC05OSw2ICsxMDIsMjUgQEAgaW5saW5lIFdURjo6U3RyaW5nIHRv
V1RGU3RyaW5nKGNvbnN0IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiYgc3RyaW5nKQogICAgIHJl
dHVybiB0b1dURlN0cmluZyhzdHJpbmcuZ2V0KCkpOwogfQogCi19IC8vIG5hbWVzcGFjZSBXVFIK
K2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcpCit7Cisg
ICAgcmV0dXJuIHRvV1RGU3RyaW5nKHRvV0soc3RyaW5nKSk7Cit9CiAKLSNlbmRpZiAvLyBTdHJp
bmdGdW5jdGlvbnNfaAoraW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiYgc3RyaW5nKQoreworICAgIHJldHVybiB0b1dURlN0cmluZyhz
dHJpbmcuZ2V0KCkpOworfQorCitpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0tT
dHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgcmV0
dXJuIHRvV0soY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsKK30KKworaW5s
aW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIHZhbHVlKQoreworICAgIC8vIEZJWE1FOiBDb3VsZCBtYWtlIHRoaXMgZWZmaWNpZW50IGJ5
IHVzaW5nIHRoZSBXVEZTdHJpbmcgaW5zaWRlIE9wYXF1ZUpTU3RyaW5nIGlmIHdlIHdhbnRlZCB0
by4KKyAgICByZXR1cm4gdG9XVEZTdHJpbmcoY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCmluZGV4IDEzNDVjNDJjMTFlNjJkYzA4OGM2ZjJkMzhiOTliMDkzNTY0ZTAx
MzguLjc1ZDlmYjYwNDQ0MTQ1ZjFlY2RmYWVmZDk5MDhhYWUyNjg4NTRlZjMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0yNiwxMCArMjYsMTAgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogCisjaW5jbHVk
ZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGVyUHJveHkuaCIK
ICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5j
bHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKICNp
bmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bml0aWFsaXplVGhyZWFkaW5nLmg+CkBAIC00OTQsOCArNDk0LDcgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgIFdlYkNv
cmVUZXN0U3VwcG9ydDo6aW5zdGFsbE1vY2tHYW1lcGFkUHJvdmlkZXIoKTsKICNlbmRpZgogCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhZ2VHcm91cElkZW50aWZpZXIgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRUZXN0UnVubmVyUGFnZUdyb3Vw
IikpOwotICAgIG1fcGFnZUdyb3VwLmFkb3B0KFdLUGFnZUdyb3VwQ3JlYXRlV2l0aElkZW50aWZp
ZXIocGFnZUdyb3VwSWRlbnRpZmllci5nZXQoKSkpOworICAgIG1fcGFnZUdyb3VwLmFkb3B0KFdL
UGFnZUdyb3VwQ3JlYXRlV2l0aElkZW50aWZpZXIodG9XSygiV2ViS2l0VGVzdFJ1bm5lclBhZ2VH
cm91cCIpLmdldCgpKSk7CiAKICAgICBtX2V2ZW50U2VuZGVyUHJveHkgPSBtYWtlVW5pcXVlPEV2
ZW50U2VuZGVyUHJveHk+KHRoaXMpOwogfQpAQCAtNTA3LDkgKzUwNiw5IEBAIFdLUmV0YWluUHRy
PFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZUNvbnRl
eHRDb25maWd1cmF0CiAgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldEZ1bGx5U3luY2hyb25v
dXNNb2RlSXNBbGxvd2VkRm9yVGVzdGluZyhjb25maWd1cmF0aW9uLmdldCgpLCB0cnVlKTsKICAg
ICBXS0NvbnRleHRDb25maWd1cmF0aW9uU2V0SWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1l
b3V0c0ZvclRlc3RpbmcoY29uZmlndXJhdGlvbi5nZXQoKSwgb3B0aW9ucy5pZ25vcmVTeW5jaHJv
bm91c01lc3NhZ2luZ1RpbWVvdXRzKTsKIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5
UmVmPiBvdmVycmlkZUxhbmd1YWdlcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7
CisgICAgYXV0byBvdmVycmlkZUxhbmd1YWdlcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7CiAgICAgZm9yIChhdXRvJiBsYW5ndWFnZSA6IG9wdGlvbnMub3ZlcnJpZGVMYW5ndWFn
ZXMpCi0gICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG92ZXJyaWRlTGFuZ3VhZ2VzLmdldCgpLCBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGxhbmd1YWdlLnV0ZjgoKS5kYXRh
KCkpKS5nZXQoKSk7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG92ZXJyaWRlTGFuZ3VhZ2Vz
LmdldCgpLCB0b1dLKGxhbmd1YWdlKS5nZXQoKSk7CiAgICAgV0tDb250ZXh0Q29uZmlndXJhdGlv
blNldE92ZXJyaWRlTGFuZ3VhZ2VzKGNvbmZpZ3VyYXRpb24uZ2V0KCksIG92ZXJyaWRlTGFuZ3Vh
Z2VzLmdldCgpKTsKIAogICAgIGlmIChvcHRpb25zLnNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uKCkpIHsKQEAgLTg0MywzMSArODQyLDI0IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9w
dGlvCiAgICAgV0tQcmVmZXJlbmNlc1Jlc2V0QWxsSW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKHByZWZl
cmVuY2VzKTsKIAogICAgIC8vIFNldCBpbnRlcm5hbCBmZWF0dXJlcyB0aGF0IGhhdmUgZGlmZmVy
ZW50IGRlZmF1bHQgdmFsdWVzIGZvciB0ZXN0aW5nLgotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBh
c3luY092ZXJmbG93U2Nyb2xsaW5nRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJBc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNT
ZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgZmFsc2UsIGFzeW5jT3Zl
cmZsb3dTY3JvbGxpbmdGZWF0dXJlKTsKIAotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBhc3luY0Zy
YW1lU2Nyb2xsaW5nRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBc3lu
Y0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERl
YnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgZmFsc2UsIGFzeW5jRnJhbWVTY3JvbGxpbmdG
ZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXko
cHJlZmVyZW5jZXMsIGZhbHNlLCB0b1dLKCJBc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCIp
LmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXko
cHJlZmVyZW5jZXMsIGZhbHNlLCB0b1dLKCJBc3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZCIpLmdl
dCgpKTsKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0RBVEUpCi0gICAgc3RhdGljIFdLU3RyaW5n
UmVmIGlucHV0VHlwZURhdGVGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IklucHV0VHlwZURhdGVFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVi
dWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVEYXRlRmVhdHVyZSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVu
Y2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVEYXRlRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgog
I2lmIEVOQUJMRShJTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpCi0gICAgc3RhdGljIFdLU3RyaW5n
UmVmIGlucHV0VHlwZURhdGVUaW1lTG9jYWxGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIklucHV0VHlwZURhdGVUaW1lTG9jYWxFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1
dFR5cGVEYXRlVGltZUxvY2FsRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFs
RGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVEYXRl
VGltZUxvY2FsRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBF
X01PTlRIKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1dFR5cGVNb250aEZlYXR1cmUgPSBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5wdXRUeXBlTW9udGhFbmFibGVkIik7Ci0g
ICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2Vz
LCB0cnVlLCBpbnB1dFR5cGVNb250aEZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRl
cm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBl
TW9udGhFbmFibGVkIikuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfVElN
RSkKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlVGltZUZlYXR1cmUgPSBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5wdXRUeXBlVGltZUVuYWJsZWQiKTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUs
IGlucHV0VHlwZVRpbWVGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZVRpbWVFbmFi
bGVkIikuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfV0VFSykKLSAgICBz
dGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlV2Vla0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSW5wdXRUeXBlV2Vla0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlw
ZVdlZWtGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVG
b3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZVdlZWtFbmFibGVkIikuZ2V0
KCkpOwogI2VuZGlmCiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVybmFsRGVidWdGZWF0dXJl
IDogb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCkBAIC05MjAsMjUgKzkxMiwxNiBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKGNv
bnN0IFRlc3RPcHRpb25zJiBvcHRpbwogICAgIFdLUHJlZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRl
QmFja2dyb3VuZHNJbkRhcmtNb2RlKHByZWZlcmVuY2VzLCBvcHRpb25zLnB1bmNoT3V0V2hpdGVC
YWNrZ3JvdW5kc0luRGFya01vZGUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFi
bGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUpOwogCi0gICAg
c3RhdGljIFdLU3RyaW5nUmVmIGRlZmF1bHRUZXh0RW5jb2RpbmcgPSBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSVNPLTg4NTktMSIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXREZWZhdWx0
VGV4dEVuY29kaW5nTmFtZShwcmVmZXJlbmNlcywgZGVmYXVsdFRleHRFbmNvZGluZyk7Ci0KLSAg
ICBzdGF0aWMgV0tTdHJpbmdSZWYgc3RhbmRhcmRGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRpbWVzIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGN1cnNpdmVG
b250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxlIENoYW5jZXJ5
Iik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGZhbnRhc3lGb250RmFtaWx5ID0gV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlBhcHlydXMiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYg
Zml4ZWRGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNvdXJpZXIi
KTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgcGljdG9ncmFwaEZvbnRGYW1pbHkgPSBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGUgQ29sb3IgRW1vamkiKTsKLSAgICBzdGF0aWMg
V0tTdHJpbmdSZWYgc2Fuc1NlcmlmRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJIZWx2ZXRpY2EiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgc2VyaWZGb250RmFt
aWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVzIik7CisgICAgV0tQcmVm
ZXJlbmNlc1NldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKHByZWZlcmVuY2VzLCB0b1dLKCJJU08t
ODg1OS0xIikuZ2V0KCkpOwogCiAgICAgV0tQcmVmZXJlbmNlc1NldE1pbmltdW1Gb250U2l6ZShw
cmVmZXJlbmNlcywgMCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFN0YW5kYXJkRm9udEZhbWlseShw
cmVmZXJlbmNlcywgc3RhbmRhcmRGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0Q3Vy
c2l2ZUZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIGN1cnNpdmVGb250RmFtaWx5KTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0RmFudGFzeUZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIGZhbnRhc3lGb250RmFt
aWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0Rml4ZWRGb250RmFtaWx5KHByZWZlcmVuY2VzLCBm
aXhlZEZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRQaWN0b2dyYXBoRm9udEZhbWls
eShwcmVmZXJlbmNlcywgcGljdG9ncmFwaEZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNT
ZXRTYW5zU2VyaWZGb250RmFtaWx5KHByZWZlcmVuY2VzLCBzYW5zU2VyaWZGb250RmFtaWx5KTsK
LSAgICBXS1ByZWZlcmVuY2VzU2V0U2VyaWZGb250RmFtaWx5KHByZWZlcmVuY2VzLCBzZXJpZkZv
bnRGYW1pbHkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRTdGFuZGFyZEZvbnRGYW1pbHkocHJlZmVy
ZW5jZXMsIHRvV0soIlRpbWVzIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDdXJzaXZl
Rm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiQXBwbGUgQ2hhbmNlcnkiKS5nZXQoKSk7Cisg
ICAgV0tQcmVmZXJlbmNlc1NldEZhbnRhc3lGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJQ
YXB5cnVzIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRGaXhlZEZvbnRGYW1pbHkocHJl
ZmVyZW5jZXMsIHRvV0soIkNvdXJpZXIiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFBp
Y3RvZ3JhcGhGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJBcHBsZSBDb2xvciBFbW9qaSIp
LmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0U2Fuc1NlcmlmRm9udEZhbWlseShwcmVmZXJl
bmNlcywgdG9XSygiSGVsdmV0aWNhIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRTZXJp
ZkZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIlRpbWVzIikuZ2V0KCkpOwogICAgIFdLUHJl
ZmVyZW5jZXNTZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChwcmVmZXJlbmNlcywg
ZmFsc2UpOwogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAgICAgV0tQcmVmZXJlbmNlc1NldE1l
ZGlhU291cmNlRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CkBAIC0xMDEwLDM4ICs5OTMsMjcg
QEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25z
dCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAgIFdLUGFnZVNldEN1c3RvbVVzZXJBZ2Vu
dChtX21haW5XZWJWaWV3LT5wYWdlKCksIG51bGxwdHIpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUmVzZXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4g
cmVzZXRNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
KyAgICBhdXRvIHJlc2V0TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2hvdWxkR0NLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTaG91bGRHQyIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHNob3VsZEdDVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShtX2djQmV0d2VlblRlc3RzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNl
dE1lc3NhZ2VCb2R5LmdldCgpLCBzaG91bGRHQ0tleS5nZXQoKSwgc2hvdWxkR0NWYWx1ZS5nZXQo
KSk7CisgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIlNob3VsZEdDIiwgbV9nY0JldHdl
ZW5UZXN0cyk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWxsb3dlZEhvc3RzS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWxsb3dlZEhvc3RzIikp
OwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBhbGxvd2VkSG9zdHNWYWx1ZSA9
IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgZm9yIChhdXRvJiBob3N0IDog
bV9hbGxvd2VkSG9zdHMpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrSG9z
dCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoaG9zdC5jX3N0cigpKSk7
Ci0gICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpLCB3a0hv
c3QuZ2V0KCkpOwotICAgIH0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJv
ZHkuZ2V0KCksIGFsbG93ZWRIb3N0c0tleS5nZXQoKSwgYWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCkp
OworICAgIGF1dG8gYWxsb3dlZEhvc3RzVmFsdWUgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3Jl
YXRlKCkpOworICAgIGZvciAoYXV0byYgaG9zdCA6IG1fYWxsb3dlZEhvc3RzKQorICAgICAgICBX
S0FycmF5QXBwZW5kSXRlbShhbGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSwgdG9XSyhob3N0LmNfc3Ry
KCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiQWxsb3dlZEhvc3Rz
IiwgYWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCkpOwogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlf
SVNPTEFURURfVFJFRSkKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXhJc29sYXRlZE1v
ZGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2Nlc3NpYmls
aXR5SXNvbGF0ZWRUcmVlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gYXhJc29s
YXRlZE1vZGVWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fYWNjZXNzaWJpbGl0eUlz
b2xhdGVkVHJlZU1vZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJv
ZHkuZ2V0KCksIGF4SXNvbGF0ZWRNb2RlS2V5LmdldCgpLCBheElzb2xhdGVkTW9kZVZhbHVlLmdl
dCgpKTsKKyAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiQWNjZXNzaWJpbGl0eUlzb2xh
dGVkVHJlZSIsIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUpOwogI2VuZGlmCi0gICAg
Ci0gICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5sZW5ndGgoKSkgewotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4ganNjT3B0aW9uc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkpTQ09wdGlvbnMiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBqc2NPcHRpb25zVmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKG9wdGlvbnMuanNjT3B0aW9ucy5jX3N0cigpKSk7Ci0gICAgICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0ocmVzZXRNZXNzYWdlQm9keS5nZXQoKSwganNjT3B0aW9uc0tleS5nZXQoKSwganNj
T3B0aW9uc1ZhbHVlLmdldCgpKTsKLSAgICB9CisKKyAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25z
Lmxlbmd0aCgpKQorICAgICAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9u
cyIsIG9wdGlvbnMuanNjT3B0aW9ucy5jX3N0cigpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNG
b3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7
CiAjZW5kaWYKIAotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgcmVzZXRNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIHRvV0soIlJlc2V0IikuZ2V0KCksIHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCkpOwogCiAg
ICAgV0tDb250ZXh0U2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuY29udGV4dCgpLCBmYWxzZSk7CiAKQEAgLTEyMDMsOCArMTE3NSw3IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUxpdmVEb2N1bWVudHNBZnRlclRlc3QoKQogCiAgICAgQXN5
bmNUYXNrKFtdKCkgewogICAgICAgICAvLyBBZnRlciBlYWNoIHRlc3QsIHdlIHVwZGF0ZSB0aGUg
bGlzdCBvZiBsaXZlIGRvY3VtZW50cyBzbyB0aGF0IHdlIGNhbiBkZXRlY3Qgd2hlbiBhbiBhYmFu
ZG9uZWQgZG9jdW1lbnQgZmlyc3Qgc2hvd2VkIHVwLgotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJHZXRMaXZlRG9jdW1lbnRzIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBXS1BhZ2VQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgdG9XSygiR2V0TGl2ZURvY3VtZW50cyIpLmdldCgpLCBudWxscHRyKTsK
ICAgICB9LCA1X3MpLnJ1bigpOwogfQogCkBAIC0xMjE1LDggKzExODYsNyBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpjaGVja0ZvcldvcmxkTGVha3MoKQogCiAgICAgQXN5bmNUYXNrKFtdKCkgewog
ICAgICAgICAvLyBUaGlzIHJ1bnMgYXQgdGhlIGVuZCBvZiBhIHNlcmllcyBvZiB0ZXN0cy4gSXQg
Y2xlYXJzIGNhY2hlcywgcnVucyBhIEdDIGFuZCB0aGVuIGZldGNoZXMgdGhlIGxpc3Qgb2YgZG9j
dW1lbnRzLgotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDaGVja0ZvcldvcmxkTGVha3Mi
KSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbnVsbHB0cik7CisgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKCJD
aGVja0ZvcldvcmxkTGVha3MiKS5nZXQoKSwgbnVsbHB0cik7CiAgICAgfSwgMjBfcykucnVuKCk7
CiB9CiAKQEAgLTEzMjQsNiArMTI5NCw3IEBAIGNvbnN0IGNoYXIqIFRlc3RDb250cm9sbGVyOjpu
ZXR3b3JrUHJvY2Vzc05hbWUoKQogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQorCiB2b2lkIFRl
c3RDb250cm9sbGVyOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sIGFsbG93cykKIHsK
ICAgICBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlID0gYWxsb3dzOwpAQCAtMTQwMCw4ICsxMzcx
LDggQEAgc3RhdGljIGJvb2wgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKGNvbnN0IHN0ZDo6
c3RyaW5nJiB2YWx1ZSkKIAogc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRl
clZhbHVlQXNSZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBjb25zdCBzdGQ6
OnN0cmluZyYgcGF0aE9yVVJMKQogewotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBiYXNlVVJM
ID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tVUkxSZWY+IHJlbGF0aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNl
VVJMKGJhc2VVUkwuZ2V0KCksIHZhbHVlLmNfc3RyKCkpKTsKKyAgICBhdXRvIGJhc2VVUkwgPSBh
ZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKTsKKyAgICBhdXRvIHJlbGF0
aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkwuZ2V0KCksIHZh
bHVlLmNfc3RyKCkpKTsKICAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlQYXRoKHJl
bGF0aXZlVVJMLmdldCgpKSkpOwogfQogCkBAIC0xNDE1LDggKzEzODYsNyBAQCBzdGF0aWMgdm9p
ZCB1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKFRlc3RPcHRpb25zJiB0ZXN0T3B0aW9u
cywgY29uc3Qgc3RkOgogICAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gYWJzb2x1dGVQYXRoOwog
ICAgIGlmIChmaWxlbmFtZS5lbXB0eSgpKSB7CiAgICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJl
ZHVjZSBjb252ZXJzaW9ucyBiZXR3ZWVuIGFsbCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgot
ICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RV
UkwocGF0aE9yVVJMLmNfc3RyKCkpKTsKLSAgICAgICAgZmlsZW5hbWUgPSB0ZXN0UGF0aCh3a1VS
TC5nZXQoKSk7CisgICAgICAgIGZpbGVuYW1lID0gdGVzdFBhdGgoYWRvcHRXSyhjcmVhdGVUZXN0
VVJMKHBhdGhPclVSTC5jX3N0cigpKSkuZ2V0KCkpOwogICAgIH0KIAogICAgIGlmIChmaWxlbmFt
ZS5lbXB0eSgpKQpAQCAtMTYxNSw2ICsxNTg1LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29u
ZmlndXJlVmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB9CiAKICNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKSAmJiAhUExBVEZPUk0oQ09DT0EpCisKIHN0cnVjdCBD
b250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRleHQgewogICAgIGV4cGxpY2l0IENvbnRl
bnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrQ29udGV4dChUZXN0Q29udHJvbGxlciYgY29udHJvbGxl
cikKICAgICAgICAgOiB0ZXN0Q29udHJvbGxlcihjb250cm9sbGVyKQpAQCAtMTY0MiwxNSArMTYx
Myw5IEBAIHN0YXRpYyBzdGQ6OnN0cmluZyBjb250ZW50RXh0ZW5zaW9uSlNPTlBhdGgoV0tVUkxS
ZWYgdXJsKQogICAgIGlmIChwYXRoLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gcGF0aCArICIu
anNvbiI7CiAKLSAgICBhdXRvIHAgPSBhZG9wdFdLKFdLVVJMQ29weVBhdGgodXJsKSk7Ci0gICAg
YXV0byBidWZmZXIgPSBzdGQ6OnZlY3RvcjxjaGFyPihXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0
cmluZ1NpemUocC5nZXQoKSkpOwotICAgIGNvbnN0IGF1dG8gbGVuZ3RoID0gV0tTdHJpbmdHZXRV
VEY4Q1N0cmluZyhwLmdldCgpLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKLSAgICBy
ZXR1cm4gc3RkOjpzdHJpbmcoIkxheW91dFRlc3RzL2h0dHAvdGVzdHMiKSArIHN0ZDo6c3RyaW5n
KGJ1ZmZlci5kYXRhKCksIGxlbmd0aCAtIDEpICsgIi5qc29uIjsKKyAgICByZXR1cm4gIkxheW91
dFRlc3RzL2h0dHAvdGVzdHMiICsgdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlQYXRoKHVybCkpLmdl
dCgpKSArICIuanNvbiI7CiB9Ci0jZW5kaWYKIAotI2lmICFQTEFURk9STShDT0NPQSkKLSNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJl
Q29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7CiAg
ICAgY29uc3QgY2hhciogY29udGVudEV4dGVuc2lvbnNQYXRoID0gbGlicmFyeVBhdGhGb3JUZXN0
aW5nKCk7CkBAIC0xNjcwLDEzICsxNjM1LDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZp
Z3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0CiAg
ICAgfQogCiAgICAgc3RkOjpzdHJpbmcganNvbkZpbGVDb250ZW50cyB7c3RkOjppc3RyZWFtYnVm
X2l0ZXJhdG9yPGNoYXI+KGpzb25GaWxlKSwgc3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+
KCl9OwotICAgIGF1dG8ganNvblNvdXJjZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoanNvbkZpbGVDb250ZW50cy5jX3N0cigpKSk7CisgICAgYXV0byBqc29uU291cmNl
ID0gdG9XSyhqc29uRmlsZUNvbnRlbnRzLmNfc3RyKCkpOwogCi0gICAgYXV0byBzdG9yZVBhdGgg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnRlbnRFeHRlbnNpb25z
UGF0aCkpOworICAgIGF1dG8gc3RvcmVQYXRoID0gdG9XSyhjb250ZW50RXh0ZW5zaW9uc1BhdGgp
OwogICAgIGF1dG8gZXh0ZW5zaW9uU3RvcmUgPSBhZG9wdFdLKFdLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZUNyZWF0ZShzdG9yZVBhdGguZ2V0KCkpKTsKICAgICBBU1NFUlQoZXh0ZW5zaW9uU3Rv
cmUpOwogCi0gICAgYXV0byBmaWx0ZXJJZGVudGlmaWVyID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVGVzdENvbnRlbnRFeHRlbnNpb24iKSk7CisgICAgYXV0byBmaWx0
ZXJJZGVudGlmaWVyID0gdG9XSygiVGVzdENvbnRlbnRFeHRlbnNpb24iKTsKIAogICAgIENvbnRl
bnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKICAgICBXS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlKGV4dGVuc2lvblN0b3JlLmdldCgpLCBmaWx0
ZXJJZGVudGlmaWVyLmdldCgpLCBqc29uU291cmNlLmdldCgpLCAmY29udGV4dCwgY29udGVudEV4
dGVuc2lvblN0b3JlQ2FsbGJhY2spOwpAQCAtMTcwMSwxOCArMTY2NiwyMiBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpyZXNldENvbnRlbnRFeHRlbnNpb25zKCkKIAogICAgIFdLVXNlckNvbnRlbnRD
b250cm9sbGVyUmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKHVzZXJDb250ZW50Q29udHJvbGxl
cigpKTsKIAotICAgIGF1dG8gc3RvcmVQYXRoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhjb250ZW50RXh0ZW5zaW9uc1BhdGgpKTsKKyAgICBhdXRvIHN0b3JlUGF0aCA9
IHRvV0soY29udGVudEV4dGVuc2lvbnNQYXRoKTsKICAgICBhdXRvIGV4dGVuc2lvblN0b3JlID0g
YWRvcHRXSyhXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDcmVhdGUoc3RvcmVQYXRoLmdldCgp
KSk7CiAgICAgQVNTRVJUKGV4dGVuc2lvblN0b3JlKTsKIAotICAgIGF1dG8gZmlsdGVySWRlbnRp
ZmllciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRlc3RDb250ZW50
RXh0ZW5zaW9uIikpOworICAgIGF1dG8gZmlsdGVySWRlbnRpZmllciA9IHRvV0soIlRlc3RDb250
ZW50RXh0ZW5zaW9uIik7CiAKICAgICBDb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFja0NvbnRl
eHQgY29udGV4dCgqdGhpcyk7CiAgICAgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVtb3Zl
KGV4dGVuc2lvblN0b3JlLmdldCgpLCBmaWx0ZXJJZGVudGlmaWVyLmdldCgpLCAmY29udGV4dCwg
Y29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2spOwogICAgIHJ1blVudGlsKGNvbnRleHQuZG9u
ZSwgbm9UaW1lb3V0KTsKICAgICBBU1NFUlQoIWNvbnRleHQuZmlsdGVyKTsKIH0KLSNlbHNlIC8v
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKSAmJiAhUExBVEZPUk0oQ09DT0EpCisKKyNpZiAhRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKKwogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lv
bkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKQogewogfQpAQCAtMTcyMCwxNCArMTY4OSwx
MyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVz
dChjb25zdCBUZXN0SW52b2NhdGlvbiYpCiB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldENvbnRl
bnRFeHRlbnNpb25zKCkKIHsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQotI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKKworI2VuZGlmIC8vICFFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQogCiBjbGFzcyBDb21tYW5kVG9rZW5pemVyIHsKIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBDb21tYW5kVG9rZW5pemVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCkKICAgICAg
ICAgOiBtX2lucHV0KGlucHV0KQotICAgICAgICAsIG1fcG9zTmV4dFNlcGFyYXRvcigwKQogICAg
IHsKICAgICAgICAgcHVtcCgpOwogICAgIH0KQEAgLTE3NDAsNyArMTcwOCw3IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICdcJyc7CiAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIG1faW5wdXQ7CiAgICAgc3RkOjpzdHJpbmcgbV9uZXh0OwotICAgIHNpemVfdCBt
X3Bvc05leHRTZXBhcmF0b3I7CisgICAgc2l6ZV90IG1fcG9zTmV4dFNlcGFyYXRvciB7IDAgfTsK
IH07CiAKIHZvaWQgQ29tbWFuZFRva2VuaXplcjo6cHVtcCgpCkBAIC0xODE0LDggKzE3ODIsNyBA
QCBib29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIGlucHV0TGluZSkKICAg
ICAKICAgICBUZXN0T3B0aW9ucyBvcHRpb25zID0gdGVzdE9wdGlvbnNGb3JUZXN0KGNvbW1hbmQp
OwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0
VVJMKGNvbW1hbmQucGF0aE9yVVJMLmNfc3RyKCkpKTsKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9u
ID0gbWFrZVVuaXF1ZTxUZXN0SW52b2NhdGlvbj4od2tVUkwuZ2V0KCksIG9wdGlvbnMpOworICAg
IG1fY3VycmVudEludm9jYXRpb24gPSBtYWtlVW5pcXVlPFRlc3RJbnZvY2F0aW9uPihhZG9wdFdL
KGNyZWF0ZVRlc3RVUkwoY29tbWFuZC5wYXRoT3JVUkwuY19zdHIoKSkpLmdldCgpLCBvcHRpb25z
KTsKIAogICAgIGlmIChjb21tYW5kLnNob3VsZER1bXBQaXhlbHMgfHwgbV9zaG91bGREdW1wUGl4
ZWxzRm9yQWxsVGVzdHMpCiAgICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldElzUGl4ZWxU
ZXN0KGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwpAQCAtMTk0NCwxOCArMTkxMSw5IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmdwdVByb2Nlc3NEaWRDcmFzaChXS0NvbnRleHRSZWYgY29udGV4
dCwgV0tQcm9jZXNzSUQgcHJvY2VzCiAgICAgc3RhdGljX2Nhc3Q8VGVzdENvbnRyb2xsZXIqPihj
b25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSktPmdwdVByb2Nlc3NEaWRDcmFzaChwcm9jZXNz
SUQpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUoV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
Ym9vbCBzeW5jaHJvbm91cykKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3du
TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgYm9v
bCBzeW5jaHJvbm91cykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5IikpOwotICAgIFdLU3Ry
aW5nUmVmIGtleSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwga2V5S2V5LmdldCgpKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXJzIikpOwotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9k
aWZpZXJzID0gc3RhdGljX2Nhc3Q8V0tFdmVudE1vZGlmaWVycz4oV0tVSW50NjRHZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIG1vZGlmaWVyc0tleS5nZXQoKSkpKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbG9jYXRpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJMb2NhdGlvbiIpKTsKLSAgICB1bnNpZ25lZCBsb2NhdGlvbiA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbG9jYXRpb25L
ZXkuZ2V0KCkpKSkpOwotCi0gICAgbV9ldmVudFNlbmRlclByb3h5LT5rZXlEb3duKGtleSwgbW9k
aWZpZXJzLCBsb2NhdGlvbik7CisgICAgbV9ldmVudFNlbmRlclByb3h5LT5rZXlEb3duKHN0cmlu
Z1ZhbHVlKGRpY3Rpb25hcnksICJLZXkiKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlm
aWVycyIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTG9jYXRpb24iKSk7CiB9CiAKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1lbnRzTGlzdChXS0FycmF5UmVmIGxp
dmVEb2N1bWVudExpc3QpCkBAIC0xOTY0LDE4ICsxOTIyLDggQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6ZGlkUmVjZWl2ZUxpdmVEb2N1bWVudHNMaXN0KFdLQXJyYXlSZWYgbGl2ZURvY3VtZW50TGlz
dCkKIAogICAgIEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz4gZG9jdW1lbnRJbmZvOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRG9jdW1lbnRzOyArK2kpIHsKLSAgICAgICAgV0tUeXBl
UmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgobGl2ZURvY3VtZW50TGlzdCwgaSk7Ci0g
ICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKSB7Ci0gICAgICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbGl2ZURvY3VtZW50SXRlbSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4oaXRlbSk7Ci0KLSAgICAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBpZEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImlkIikpOwotICAgICAgICAgICAgV0tVSW50NjRSZWYgZG9jdW1lbnRJRCA9IHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxpdmVEb2N1
bWVudEl0ZW0sIGlkS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB1cmxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1
cmwiKSk7Ci0gICAgICAgICAgICBXS1N0cmluZ1JlZiBkb2N1bWVudFVSTCA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxpdmVEb2N1bWVudEl0ZW0s
IHVybEtleS5nZXQoKSkpOwotCi0gICAgICAgICAgICBkb2N1bWVudEluZm8uYWRkKFdLVUludDY0
R2V0VmFsdWUoZG9jdW1lbnRJRCksIHRvV1RGU3RyaW5nKGRvY3VtZW50VVJMKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKGF1dG8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShXS0FycmF5
R2V0SXRlbUF0SW5kZXgobGl2ZURvY3VtZW50TGlzdCwgaSkpKQorICAgICAgICAgICAgZG9jdW1l
bnRJbmZvLmFkZCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiaWQiKSwgdG9XVEZTdHJpbmcoc3Ry
aW5nVmFsdWUoZGljdGlvbmFyeSwgInVybCIpKSk7CiAgICAgfQogCiAgICAgaWYgKCFkb2N1bWVu
dEluZm8uc2l6ZSgpKSB7CkBAIC0yMDA3LDYwICsxOTU1LDM1IEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3Nh
Z2VOYW1lCiAgICAgICAgIGlmIChtX3N0YXRlICE9IFJ1bm5pbmdUZXN0KQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgICAg
ICBXS1N0cmluZ1JlZiBzdWJNZXNzYWdlTmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViTWVzc2Fn
ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VEb3duIikgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlVXAiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGJ1dHRvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkJ1dHRvbiIpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ1dHRvbiA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYnV0dG9u
S2V5LmdldCgpKSkpKTsKKyAgICAgICAgYXV0byBkaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVl
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBzdWJNZXNzYWdlTmFtZSA9IHN0cmluZ1ZhbHVl
KGRpY3Rpb25hcnksICJTdWJNZXNzYWdlIik7CiAKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAgICAgICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlm
aWVycyA9IHN0YXRpY19jYXN0PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBtb2RpZmllcnNLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICAvLyBG
b3J3YXJkIHRvIFdlYlByb2Nlc3MKLSAgICAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VEb3duIikpCi0gICAgICAgICAgICAgICAg
bV9ldmVudFNlbmRlclByb3h5LT5tb3VzZURvd24oYnV0dG9uLCBtb2RpZmllcnMpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VVcChi
dXR0b24sIG1vZGlmaWVycyk7CisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VEb3duIikpIHsKKyAgICAgICAgICAgIG1fZXZlbnRT
ZW5kZXJQcm94eS0+bW91c2VEb3duKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwg
dWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogCisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VVcCIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVy
UHJveHktPm1vdXNlVXAodWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRW
YWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJzIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVz
c2FnZU5hbWUsICJLZXlEb3duIikpIHsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3duTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZhbHNlKTsKKyAg
ICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShkaWN0
aW9uYXJ5LCBmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNl
U2Nyb2xsQnkiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAg
ICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQo
KSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91
YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsK
LQotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBtX2V2
ZW50U2VuZGVyUHJveHktPm1vdXNlU2Nyb2xsQnkoeCwgeSk7CisgICAgICAgICAgICBtX2V2ZW50
U2VuZGVyUHJveHktPm1vdXNlU2Nyb2xsQnkoZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKSwg
ZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlkiKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNz
YWdlTmFtZSwgIk1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIpKSB7Ci0g
ICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeCA9IFdL
RG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUg
eSA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGhhc2VLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaGFzZSIpKTsKLSAgICAg
ICAgICAgIGludCBwaGFzZSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHBoYXNlS2V5LmdldCgpKSkpKTsKLSAgICAgICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtb21lbnR1bUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIk1vbWVudHVtIikpOwotICAgICAgICAgICAgaW50IG1vbWVudHVtID0gc3RhdGlj
X2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9tZW50dW1LZXku
Z2V0KCkpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlBy
b2Nlc3MKKyAgICAgICAgICAgIGF1dG8geCA9IGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIik7
CisgICAgICAgICAgICBhdXRvIHkgPSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpOworICAg
ICAgICAgICAgYXV0byBwaGFzZSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJQaGFzZSIpOwor
ICAgICAgICAgICAgYXV0byBtb21lbnR1bSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb21l
bnR1bSIpOwogICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVNjcm9sbEJ5V2l0
aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoeCwgeSwgcGhhc2UsIG1vbWVudHVtKTsKLQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwODMsNDIgKzIwMDYsMjYgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsZShXS1N0cmluZ1JlZgogICAgICAgICBpZiAobV9zdGF0ZSAhPSBSdW5uaW5nVGVzdCkKICAg
ICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKIAotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViTWVz
c2FnZU5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCkpKTsKKyAgICAg
ICAgYXV0byBkaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgYXV0byBzdWJNZXNzYWdlTmFtZSA9IHN0cmluZ1ZhbHVlKGRpY3Rpb25hcnksICJTdWJNZXNz
YWdlIik7CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVz
c2FnZU5hbWUsICJLZXlEb3duIikpIHsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVLZXlEb3duTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRydWUpOwotCisg
ICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoZGlj
dGlvbmFyeSwgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0cik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVVwIikpIHsKLSAgICAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBidXR0b25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJCdXR0b24iKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBidXR0b24gPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1
dHRvbktleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtb2RpZmllcnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJN
b2RpZmllcnMiKSk7Ci0gICAgICAgICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0
YXRpY19jYXN0PFdLRXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBtb2RpZmllcnNLZXkuZ2V0KCkpKSkpOworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKSB7CisgICAgICAgICAg
ICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRG93bih1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAi
QnV0dG9uIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSk7CisgICAgICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgICAgIH0KIAotICAg
ICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlRG93biIpKQotICAg
ICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VEb3duKGJ1dHRvbiwgbW9kaWZp
ZXJzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJv
eHktPm1vdXNlVXAoYnV0dG9uLCBtb2RpZmllcnMpOworICAgICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlVXAiKSkgeworICAgICAgICAg
ICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVVwKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJC
dXR0b24iKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpKTsKICAgICAgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91
c2VNb3ZlVG8iKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAg
ICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQo
KSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91
YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsK
LQotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCi0gICAgICAgICAgICBtX2V2
ZW50U2VuZGVyUHJveHktPm1vdXNlTW92ZVRvKHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNl
bmRlclByb3h5LT5tb3VzZU1vdmVUbyhkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpLCBkb3Vi
bGVWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCkBAIC0yMTQ0LDgxICsyMDUxLDQ4IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGUoV0tTdHJpbmdSZWYKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VGb3JjZUNoYW5nZWQiKSkg
ewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZvcmNlS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRm9yY2UiKSk7Ci0gICAgICAgICAgICBk
b3VibGUgZm9yY2UgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZm9yY2VLZXku
Z2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VGb3JjZUNo
YW5nZWQoZm9yY2UpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZUZvcmNl
Q2hhbmdlZChkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiRm9yY2UiKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KICNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
c3ViTWVzc2FnZU5hbWUsICJDb250aW51b3VzTW91c2VTY3JvbGxCeSIpKSB7Ci0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeCA9IFdLRG91YmxlR2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IFdLRG91YmxlR2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gcGFnZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJQYWdlZCIpKTsKLSAgICAgICAgICAgIGJvb2wgcGFnZWQgPSBzdGF0aWNfY2FzdDxi
b29sPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGFnZWRLZXkuZ2V0KCkpKSkp
OwotCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHRvIFdlYlByb2Nlc3MKKyAgICAgICAgICAgIGF1
dG8geCA9IGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIik7CisgICAgICAgICAgICBhdXRvIHkg
PSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpOworICAgICAgICAgICAgYXV0byBwYWdlZCA9
IGJvb2xlYW5WYWx1ZShkaWN0aW9uYXJ5LCAiUGFnZWQiKTsKICAgICAgICAgICAgIG1fZXZlbnRT
ZW5kZXJQcm94eS0+Y29udGludW91c01vdXNlU2Nyb2xsQnkoeCwgeSwgcGFnZWQpOwogICAgICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJM
ZWFwRm9yd2FyZCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGlt
ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVJbk1pbGxp
c2Vjb25kcyIpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRpbWUgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRpbWVLZXkuZ2V0KCkpKSkp
OwotCi0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmxlYXBGb3J3YXJkKHRpbWUpOwor
ICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5sZWFwRm9yd2FyZCh1aW50NjRWYWx1ZShk
aWN0aW9uYXJ5LCAiVGltZUluTWlsbGlzZWNvbmRzIikpOwogICAgICAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNz
YWdlTmFtZSwgIkFkZFRvdWNoUG9pbnQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJY
IikpOwotICAgICAgICAgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJZIikpOwotICAgICAgICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAg
ICAgbV9ldmVudFNlbmRlclByb3h5LT5hZGRUb3VjaFBvaW50KHgsIHkpOworICAgICAgICAgICAg
bV9ldmVudFNlbmRlclByb3h5LT5hZGRUb3VjaFBvaW50KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnks
ICJYIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJZIikpOwogICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJVcGRhdGVUb3VjaFBv
aW50IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgICAg
ICAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgaW5kZXhLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlgiKSk7Ci0gICAgICAgICAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgICAgICAgICBpbnQgeSA9IHN0YXRpY19jYXN0PGludD4o
V0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSkpOwotCisgICAg
ICAgICAgICBhdXRvIGluZGV4ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkluZGV4Iik7Cisg
ICAgICAgICAgICBhdXRvIHggPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAgICAg
ICAgICAgYXV0byB5ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKICAgICAgICAgICAg
IG1fZXZlbnRTZW5kZXJQcm94eS0+dXBkYXRlVG91Y2hQb2ludChpbmRleCwgeCwgeSk7CiAgICAg
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwg
IlNldFRvdWNoTW9kaWZpZXIiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1vZGlmaWVyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
TW9kaWZpZXIiKSk7Ci0gICAgICAgICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyID0gc3Rh
dGljX2Nhc3Q8V0tFdmVudE1vZGlmaWVycz4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIG1vZGlmaWVyS2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGVuYWJsZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkVuYWJsZSIpKTsKLSAgICAgICAgICAgIGJvb2wgZW5hYmxlID0gc3RhdGljX2Nhc3Q8Ym9v
bD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGVuYWJsZUtleS5nZXQoKSkpKSk7
Ci0KKyAgICAgICAgICAgIGF1dG8gbW9kaWZpZXIgPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAi
TW9kaWZpZXIiKTsKKyAgICAgICAgICAgIGF1dG8gZW5hYmxlID0gYm9vbGVhblZhbHVlKGRpY3Rp
b25hcnksICJFbmFibGUiKTsKICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+c2V0VG91
Y2hNb2RpZmllcihtb2RpZmllciwgZW5hYmxlKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiU2V0VG91Y2hQb2ludFJhZGl1cyIp
KSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1giKSk7Ci0gICAgICAgICAgICBp
bnQgeCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHhLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
eUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1kiKSk7
Ci0gICAgICAgICAgICBpbnQgeSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSkpOwotCisgICAgICAgICAgICBhdXRvIHggPSB1
aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiUmFkaXVzWCIpOworICAgICAgICAgICAgYXV0byB5ID0g
dWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlJhZGl1c1kiKTsKICAgICAgICAgICAgIG1fZXZlbnRT
ZW5kZXJQcm94eS0+c2V0VG91Y2hQb2ludFJhZGl1cyh4LCB5KTsKICAgICAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQpAQCAtMjI0OSwxNiArMjEy
MywxMiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmCiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIlJlbGVhc2VUb3Vj
aFBvaW50IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAg
ICAgICAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgaW5kZXhLZXkuZ2V0KCkpKSkpOwotICAgICAgICAgICAgbV9ldmVudFNl
bmRlclByb3h5LT5yZWxlYXNlVG91Y2hQb2ludChpbmRleCk7CisgICAgICAgICAgICBtX2V2ZW50
U2VuZGVyUHJveHktPnJlbGVhc2VUb3VjaFBvaW50KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJ
bmRleCIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1
Yk1lc3NhZ2VOYW1lLCAiQ2FuY2VsVG91Y2hQb2ludCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0
PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGluZGV4S2V5LmdldCgpKSkp
KTsKLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+Y2FuY2VsVG91Y2hQb2ludChpbmRl
eCk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmNhbmNlbFRvdWNoUG9pbnQodWlu
dDY0VmFsdWUoZGljdGlvbmFyeSwgIkluZGV4IikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTIyNzUsMTQgKzIx
NDUsMTYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2Fn
ZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZgogICAgIH07CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFsd2F5c0FjY2VwdENvb2tp
ZXMiKSkgewotICAgICAgICBXS0Jvb2xlYW5SZWYgYWNjZXB0ID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShhY2NlcHQpID8ga1dLSFRUUENvb2tpZUFjY2VwdFBv
bGljeUFsd2F5cyA6IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVu
dERvbWFpbjsKKyAgICAgICAgYXV0byBwb2xpY3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkKKyAgICAgICAgICAgID8ga1dLSFRUUENv
b2tpZUFjY2VwdFBvbGljeUFsd2F5cworICAgICAgICAgICAgOiBrV0tIVFRQQ29va2llQWNjZXB0
UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAgICAgICAgIHJldHVybiBzZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0T25seUFjY2VwdEZpcnN0UGFydHlDb29raWVzIikpIHsKLSAgICAgICAgV0tCb29sZWFu
UmVmIGFjY2VwdCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBXS0hUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUo
YWNjZXB0KSA/IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9j
dW1lbnREb21haW4gOiBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1l
bnREb21haW47CisgICAgICAgIGF1dG8gcG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpCisgICAgICAgICAgICA/IGtXS0hUVFBD
b29raWVBY2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4KKyAgICAg
ICAgICAgIDoga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9t
YWluOwogICAgICAgICByZXR1cm4gc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3ksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9CiAKQEAgLTI0MDMsMTIgKzIyNzUsOCBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRCbG9ja0FsbFBsdWdpbnMoYm9vbCBzaG91bGRCbG9j
aykKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBhdXRvIHBvbGljeSA9IHNob3VsZEJsb2NrID8g
a1dLUGx1Z2luTG9hZENsaWVudFBvbGljeUJsb2NrIDoga1dLUGx1Z2luTG9hZENsaWVudFBvbGlj
eUFsbG93OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVOZXRzY2FwZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbS5hcHBsZS50ZXN0bmV0c2Nh
cGVwbHVnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVGbGFzaCA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbS5tYWNyb21lZGlhLkZsYXNo
IFBsYXllci5wbHVnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVtcHR5U3Ry
aW5nID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotICAgIFdL
Q29udGV4dFNldFBsdWdpbkxvYWRDbGllbnRQb2xpY3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ks
IGVtcHR5U3RyaW5nLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIGVtcHR5U3RyaW5nLmdldCgp
KTsKLSAgICBXS0NvbnRleHRTZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQo
KSwgcG9saWN5LCBlbXB0eVN0cmluZy5nZXQoKSwgbmFtZUZsYXNoLmdldCgpLCBlbXB0eVN0cmlu
Zy5nZXQoKSk7CisgICAgV0tDb250ZXh0U2V0UGx1Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRl
eHQuZ2V0KCksIHBvbGljeSwgdG9XSygiIikuZ2V0KCksIHRvV0soImNvbS5hcHBsZS50ZXN0bmV0
c2NhcGVwbHVnaW4iKS5nZXQoKSwgdG9XSygiIikuZ2V0KCkpOworICAgIFdLQ29udGV4dFNldFBs
dWdpbkxvYWRDbGllbnRQb2xpY3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ksIHRvV0soIiIpLmdl
dCgpLCB0b1dLKCJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luIikuZ2V0KCksIHRv
V0soIiIpLmdldCgpKTsKICNlbmRpZgogfQogCkBAIC0yNDIzLDI5ICsyMjkxLDI0IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnNldFBsdWdpblN1cHBvcnRlZE1vZGUoY29uc3QgU3RyaW5nJiBtb2Rl
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJy
YXlSZWY+IGVtcHR5QXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbGxPcmlnaW5zID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
cGVjaWZpY09yaWdpbiA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxv
Y2FsaG9zdCIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZGZOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTXkgcGVyc29uYWwgUERGIikpOwot
ICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIGFsbE9yaWdp
bnMuZ2V0KCksIHBkZk5hbWUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0
KCkpOworICAgIGF1dG8gZW1wdHlBcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUo
KSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZU5ldHNjYXBlID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBs
dWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWltZVR5cGVOZXRzY2FwZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFwcGxpY2F0aW9uL3gtd2Vi
a2l0LXRlc3QtbmV0c2NhcGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+
IG1pbWVUeXBlc05ldHNjYXBlID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAg
ICBXS0FycmF5QXBwZW5kSXRlbShtaW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVOZXRz
Y2FwZS5nZXQoKSk7CisgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5n
ZXQoKSwgdG9XSygiIikuZ2V0KCksIHRvV0soIk15IHBlcnNvbmFsIFBERiIpLmdldCgpLCBlbXB0
eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBuYW1lUGRmID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
V2ViS2l0IGJ1aWx0LWluIFBERiIpKTsKKyAgICBhdXRvIG5hbWVOZXRzY2FwZSA9IHRvV0soImNv
bS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4iKTsKKyAgICBhdXRvIG1pbWVUeXBlc05ldHNjYXBl
ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBXS0FycmF5QXBwZW5kSXRl
bShtaW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwgdG9XSygiYXBwbGljYXRpb24veC13ZWJraXQtdGVz
dC1uZXRzY2FwZSIpLmdldCgpKTsKKyAgICBhdXRvIG5hbWVQZGYgPSB0b1dLKCJXZWJLaXQgYnVp
bHQtaW4gUERGIik7CiAKICAgICBpZiAobV91bnN1cHBvcnRlZFBsdWdpbk1vZGUgPT0gImFsbE9y
aWdpbnMiKSB7Ci0gICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQu
Z2V0KCksIGFsbE9yaWdpbnMuZ2V0KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVzTmV0
c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwotICAgICAgICBXS0NvbnRleHRBZGRTdXBw
b3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBhbGxPcmlnaW5zLmdldCgpLCBuYW1lUGRmLmdl
dCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250
ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygiIikuZ2V0KCksIG5h
bWVOZXRzY2FwZS5nZXQoKSwgbWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0
KCkpOworICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgp
LCB0b1dLKCIiKS5nZXQoKSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlB
cnJheS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobV91bnN1cHBv
cnRlZFBsdWdpbk1vZGUgPT0gInNwZWNpZmljT3JpZ2luIikgewotICAgICAgICBXS0NvbnRleHRB
ZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBzcGVjaWZpY09yaWdpbi5nZXQoKSwg
bmFtZU5ldHNjYXBlLmdldCgpLCBtaW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwgZW1wdHlBcnJheS5n
ZXQoKSk7Ci0gICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0
KCksIHNwZWNpZmljT3JpZ2luLmdldCgpLCBuYW1lUGRmLmdldCgpLCBlbXB0eUFycmF5LmdldCgp
LCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2lu
KG1fY29udGV4dC5nZXQoKSwgdG9XSygibG9jYWxob3N0IikuZ2V0KCksIG5hbWVOZXRzY2FwZS5n
ZXQoKSwgbWltZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAgICAg
ICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCJsb2Nh
bGhvc3QiKS5nZXQoKSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJh
eS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC0yNDkxLDE0ICsyMzU0LDEy
IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9u
U3BhY2UoV0tQYWdlUmVmIHBhZ2UsIFdLUHJvCiB7CiAgICAgaWYgKG1fc2hvdWxkTG9nQ2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSkKICAgICAgICAgbV9jdXJyZW50SW52b2Nh
dGlvbi0+b3V0cHV0VGV4dCgiY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZVxu
Iik7Ci0gICAgV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNh
dGlvblNjaGVtZSA9IFdLUHJvdGVjdGlvblNwYWNlR2V0QXV0aGVudGljYXRpb25TY2hlbWUocHJv
dGVjdGlvblNwYWNlKTsKLSAgICAKLSAgICBpZiAoYXV0aGVudGljYXRpb25TY2hlbWUgPT0ga1dL
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25S
ZXF1ZXN0ZWQpIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgaG9zdCA9IHRvU1REKGFkb3B0V0soV0tQ
cm90ZWN0aW9uU3BhY2VDb3B5SG9zdChwcm90ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CisgICAgYXV0
byBzY2hlbWUgPSBXS1Byb3RlY3Rpb25TcGFjZUdldEF1dGhlbnRpY2F0aW9uU2NoZW1lKHByb3Rl
Y3Rpb25TcGFjZSk7CisgICAgaWYgKHNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50
aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZCkgeworICAgICAgICBh
dXRvIGhvc3QgPSB0b1NURChhZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJvdGVj
dGlvblNwYWNlKSkpOwogICAgICAgICByZXR1cm4gaG9zdCA9PSAibG9jYWxob3N0IiB8fCBob3N0
ID09ICIxMjcuMC4wLjEiIHx8IChtX2FsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRI
b3N0cyAmJiBtX2FsbG93ZWRIb3N0cy5maW5kKGhvc3QpICE9IG1fYWxsb3dlZEhvc3RzLmVuZCgp
KTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGF1dGhlbnRpY2F0aW9uU2NoZW1lIDw9IGtXS1By
b3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdCB8fCBhdXRoZW50aWNh
dGlvblNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU9BdXRo
OworICAgIHJldHVybiBzY2hlbWUgPD0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVIVFRQRGlnZXN0IHx8IHNjaGVtZSA9PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNh
dGlvblNjaGVtZU9BdXRoOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZp
Z2F0aW9uKFdLUGFnZVJlZiBwYWdlLCBXS05hdmlnYXRpb25SZWYgbmF2aWdhdGlvbikKQEAgLTI1
MDYsOCArMjM2Nyw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24o
V0tQYWdlUmVmIHBhZ2UsIFdLTmF2aWdhdGlvblJlZiBuYXZpZ2F0CiAgICAgaWYgKG1fc3RhdGUg
IT0gUmVzZXR0aW5nKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJl
Zj4gd2tVUkwgPSBhZG9wdFdLKFdLRnJhbWVDb3B5VVJMKFdLUGFnZUdldE1haW5GcmFtZShwYWdl
KSkpOwotICAgIGlmICghV0tVUkxJc0VxdWFsKHdrVVJMLmdldCgpLCBibGFua1VSTCgpKSkKKyAg
ICBpZiAoIVdLVVJMSXNFcXVhbChhZG9wdFdLKFdLRnJhbWVDb3B5VVJMKFdLUGFnZUdldE1haW5G
cmFtZShwYWdlKSkpLmdldCgpLCBibGFua1VSTCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9kb25lUmVzZXR0aW5nID0gdHJ1ZTsKQEAgLTI1MjcsNyArMjM4Nyw3IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYgcGFn
ZSwgV0tBdXRoZW50CiAgICAgICAgIG1fc2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxs
c0NvdW50Kys7CiAKICAgICAgICAgaWYgKG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGUpIHsKLSAg
ICAgICAgICAgIFdLUmV0YWluUHRyPFdLQ3JlZGVudGlhbFJlZj4gY3JlZGVudGlhbCA9IGFkb3B0
V0soV0tDcmVkZW50aWFsQ3JlYXRlKHRvV0soImFjY2VwdCBzZXJ2ZXIgdHJ1c3QiKS5nZXQoKSwg
dG9XSygiIikuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpKTsKKyAgICAgICAg
ICAgIGF1dG8gY3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRlKHRvV0soImFj
Y2VwdCBzZXJ2ZXIgdHJ1c3QiKS5nZXQoKSwgdG9XSygiIikuZ2V0KCksIGtXS0NyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZU5vbmUpKTsKICAgICAgICAgICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxp
c3RlbmVyVXNlQ3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVyLCBjcmVkZW50aWFsLmdldCgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjU0MSw5ICsyNDAxLDkgQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdLUGFn
ZVJlZiBwYWdlLCBXS0F1dGhlbnQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6
c3RyaW5nIGhvc3QgPSB0b1NURChhZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3QocHJv
dGVjdGlvblNwYWNlKSkuZ2V0KCkpOworICAgIGF1dG8gaG9zdCA9IHRvV1RGU3RyaW5nKGFkb3B0
V0soV0tQcm90ZWN0aW9uU3BhY2VDb3B5SG9zdChwcm90ZWN0aW9uU3BhY2UpKS5nZXQoKSk7CiAg
ICAgaW50IHBvcnQgPSBXS1Byb3RlY3Rpb25TcGFjZUdldFBvcnQocHJvdGVjdGlvblNwYWNlKTsK
LSAgICBTdHJpbmcgbWVzc2FnZSA9IG1ha2VTdHJpbmcoaG9zdC5jX3N0cigpLCAnOicsIHBvcnQs
ICIgLSBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgLSAiLCB0b1N0cmluZyhhdXRo
ZW50aWNhdGlvblNjaGVtZSksICIgLSAiKTsKKyAgICBTdHJpbmcgbWVzc2FnZSA9IG1ha2VTdHJp
bmcoaG9zdCwgJzonLCBwb3J0LCAiIC0gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
IC0gIiwgdG9TdHJpbmcoYXV0aGVudGljYXRpb25TY2hlbWUpLCAiIC0gIik7CiAgICAgaWYgKCFt
X2hhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpCiAgICAgICAgIG1lc3NhZ2UuYXBwZW5k
KCJTaW11bGF0aW5nIGNhbmNlbGxlZCBhdXRoZW50aWNhdGlvbiBzaGVldFxuIik7CiAgICAgZWxz
ZQpAQCAtMjU1NCwxMyArMjQxNCwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmIHBhZ2UsIFdLQXV0aGVudAogICAgICAg
ICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25M
aXN0ZW5lciwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHVzZXJuYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhtX2F1dGhlbnRpY2F0aW9uVXNlcm5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBwYXNzd29yZCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcobV9hdXRoZW50aWNhdGlvblBhc3N3b3JkLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBX
S1JldGFpblB0cjxXS0NyZWRlbnRpYWxSZWY+IGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVu
dGlhbENyZWF0ZSh1c2VybmFtZS5nZXQoKSwgcGFzc3dvcmQuZ2V0KCksIGtXS0NyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZUZvclNlc3Npb24pKTsKKyAgICBhdXRvIGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdL
Q3JlZGVudGlhbENyZWF0ZSh0b1dLKG1fYXV0aGVudGljYXRpb25Vc2VybmFtZSkuZ2V0KCksIHRv
V0sobV9hdXRoZW50aWNhdGlvblBhc3N3b3JkKS5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3Rl
bmNlRm9yU2Vzc2lvbikpOwogICAgIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNl
Q3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVyLCBjcmVkZW50aWFsLmdldCgpKTsKIH0KIAotICAg
IAorCiAvLyBXS0NvbnRleHREb3dubG9hZENsaWVudAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpk
b3dubG9hZERpZFN0YXJ0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0Rvd25sb2FkUmVmIGRvd25s
b2FkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtMjcwNCw5ICsyNTYyLDkgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKICAg
ICBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgp
OwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBw
cm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFj
Y3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRv
dWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgYm9vbCBwcm92
aWRlc0Zsb29yTGV2ZWwsIGRvdWJsZSBmbG9vckxldmVsKQordm9pZCBUZXN0Q29udHJvbGxlcjo6
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFs
PGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRp
b25hbDxkb3VibGU+IHNwZWVkLCBPcHRpb25hbDxkb3VibGU+IGZsb29yTGV2ZWwpCiB7Ci0gICAg
bV9nZW9sb2NhdGlvblByb3ZpZGVyLT5zZXRQb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBh
Y2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1
cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRl
c1NwZWVkLCBzcGVlZCwgcHJvdmlkZXNGbG9vckxldmVsLCBmbG9vckxldmVsKTsKKyAgICBtX2dl
b2xvY2F0aW9uUHJvdmlkZXItPnNldFBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3Vy
YWN5LCBhbHRpdHVkZSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQsIGZsb29yTGV2
ZWwpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
blVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKQpAQCAtMjg1Niw5ICsy
NzE0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aGFuZGxlQ2hlY2tPZlVzZXJNZWRpYVBlcm1p
c3Npb25Gb3JPcmlnaW4oV0tGcmFtZVJlZiBmcmFtZSwKIHsKICAgICBhdXRvIG9yaWdpbkhhc2gg
PSB1c2VyTWVkaWFPcmlnaW5IYXNoKHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCB0b3BMZXZlbERv
Y3VtZW50T3JpZ2luKTsKICAgICBhdXRvIHNhbHQgPSBzYWx0Rm9yT3JpZ2luKGZyYW1lLCBvcmln
aW5IYXNoKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2FsdFN0cmluZyA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2FsdC51dGY4KCkuZGF0YSgpKSk7Ci0K
LSAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1NldFVzZXJNZWRpYUFjY2Vzc0luZm8oY2hl
Y2tSZXF1ZXN0LCBzYWx0U3RyaW5nLmdldCgpLCBzZXR0aW5nc0Zvck9yaWdpbihvcmlnaW5IYXNo
KS5wZXJzaXN0ZW50UGVybWlzc2lvbigpKTsKKyAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVj
a1NldFVzZXJNZWRpYUFjY2Vzc0luZm8oY2hlY2tSZXF1ZXN0LCB0b1dLKHNhbHQpLmdldCgpLCBz
ZXR0aW5nc0Zvck9yaWdpbihvcmlnaW5IYXNoKS5wZXJzaXN0ZW50UGVybWlzc2lvbigpKTsKIH0K
IAogYm9vbCBUZXN0Q29udHJvbGxlcjo6aGFuZGxlRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25B
Y2Nlc3NSZXF1ZXN0KFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luKQpAQCAtMjkxNCw4ICsyNzcw
LDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RJZlBvc3NpYmxlKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gYXVkaW9EZXZpY2VVSURzID0gYWRv
cHRXSyhXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0QXVkaW9EZXZpY2VVSURzKHJlcXVlc3Qp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gdmlkZW9EZXZpY2VVSURzID0gYWRv
cHRXSyhXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0VmlkZW9EZXZpY2VVSURzKHJlcXVlc3Qp
KTsKKyAgICAgICAgYXV0byBhdWRpb0RldmljZVVJRHMgPSBhZG9wdFdLKFdLVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RBdWRpb0RldmljZVVJRHMocmVxdWVzdCkpOworICAgICAgICBhdXRvIHZp
ZGVvRGV2aWNlVUlEcyA9IGFkb3B0V0soV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFZpZGVv
RGV2aWNlVUlEcyhyZXF1ZXN0KSk7CiAKICAgICAgICAgaWYgKCFXS0FycmF5R2V0U2l6ZSh2aWRl
b0RldmljZVVJRHMuZ2V0KCkpICYmICFXS0FycmF5R2V0U2l6ZShhdWRpb0RldmljZVVJRHMuZ2V0
KCkpKSB7CiAgICAgICAgICAgICBXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0RGVueShyZXF1
ZXN0LCBrV0tOb0NvbnN0cmFpbnRzKTsKQEAgLTI5MjYsMTMgKzI3ODIsMTMgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBv
c3NpYmxlKCkKICAgICAgICAgaWYgKFdLQXJyYXlHZXRTaXplKHZpZGVvRGV2aWNlVUlEcy5nZXQo
KSkpCiAgICAgICAgICAgICB2aWRlb0RldmljZVVJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh2aWRlb0RldmljZVVJRHMuZ2V0KCksIDApKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmlkZW9EZXZpY2VVSUQgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisgICAgICAgICAgICB2aWRlb0RldmljZVVJ
RCA9IHRvV0soIiIpOwogCiAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdWRpb0Rl
dmljZVVJRDsKICAgICAgICAgaWYgKFdLQXJyYXlHZXRTaXplKGF1ZGlvRGV2aWNlVUlEcy5nZXQo
KSkpCiAgICAgICAgICAgICBhdWRpb0RldmljZVVJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChhdWRpb0RldmljZVVJRHMuZ2V0KCksIDApKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXVkaW9EZXZpY2VVSUQgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisgICAgICAgICAgICBhdWRpb0RldmljZVVJ
RCA9IHRvV0soIiIpOwogCiAgICAgICAgIFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RBbGxv
dyhyZXF1ZXN0LCBhdWRpb0RldmljZVVJRC5nZXQoKSwgdmlkZW9EZXZpY2VVSUQuZ2V0KCkpOwog
ICAgIH0KQEAgLTMwNTYsMTIgKzI5MTIsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWROYXZp
Z2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShXS05hdmlnYXRpb25EYXRhUmVmIG5hdmlnYXRpbwogICAg
IGlmICghbV9zaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBVUkwKICAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tOYXZpZ2F0aW9uRGF0YUNv
cHlVUkwobmF2aWdhdGlvbkRhdGEpKTsKICAgICBhdXRvIHVybFN0cmluZyA9IHRvV1RGU3RyaW5n
KGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpKTsKLSAgICAvLyBUaXRsZQogICAg
IGF1dG8gdGl0bGUgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5VGl0
bGUobmF2aWdhdGlvbkRhdGEpKSk7Ci0gICAgLy8gSFRUUCBtZXRob2QKICAgICBhdXRvIHJlcXVl
c3QgPSBhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5T3JpZ2luYWxSZXF1ZXN0KG5hdmlnYXRp
b25EYXRhKSk7CiAgICAgYXV0byBtZXRob2QgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMUmVx
dWVzdENvcHlIVFRQTWV0aG9kKHJlcXVlc3QuZ2V0KCkpKSk7CiAKQEAgLTMyMDYsNyArMzA1OSw3
IEBAIHZvaWQgZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayh2b2lkKiB1c2VyRGF0
YSwgV0tBcnJheVJlZiBkb21haW5MaXN0KQogCiAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0RG9t
YWluczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV0tBcnJheUdldFNpemUoZG9tYWlu
TGlzdCk7IGkrKykgewotICAgICAgICBhdXRvIGRvbWFpbiA9ICByZWludGVycHJldF9jYXN0PFdL
U3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluTGlzdCwgaSkpOworICAgICAg
ICBhdXRvIGRvbWFpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJ
dGVtQXRJbmRleChkb21haW5MaXN0LCBpKSk7CiAgICAgICAgIGF1dG8gYnVmZmVyID0gc3RkOjp2
ZWN0b3I8Y2hhcj4oV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGRvbWFpbikpOwog
ICAgICAgICBhdXRvIHN0cmluZ0xlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcoZG9tYWlu
LCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKIApAQCAtMzk3OCw3ICszODMxLDcgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6cmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKCkKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNv
bnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKIHsKICAgICBJbkFwcEJyb3dzZXJQcml2YWN5
Q2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwotICAgIFdLV2Vic2l0ZURhdGFTdG9yZVVw
ZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKFRlc3RDb250cm9sbGVyOjp3ZWJz
aXRlRGF0YVN0b3JlKCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVu
ZGxlSWRlbnRpZmllci51dGY4KCkuZGF0YSgpKSkuZ2V0KCksICZjb250ZXh0LCBpbkFwcEJyb3dz
ZXJQcml2YWN5Vm9pZFJlc3VsdENhbGxiYWNrKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRh
dGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0
ZURhdGFTdG9yZSgpLCB0b1dLKGJ1bmRsZUlkZW50aWZpZXIpLmdldCgpLCAmY29udGV4dCwgaW5B
cHBCcm93c2VyUHJpdmFjeVZvaWRSZXN1bHRDYWxsYmFjayk7CiAgICAgcnVuVW50aWwoY29udGV4
dC5kb25lLCBub1RpbWVvdXQpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgKaW5kZXggZjk0ZDU3YzE0N2IzMTZmMDc4ZmE4NWYyMjBmNDA3NjA5NDExM2M4Yy4uZmY4
Mzk0ZWMwMzg3N2E2ZGJjMGRjNGIzZTQ4YzBlZjRmM2YzYjMzOSAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaApAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICAvLyBHZW9sb2NhdGlvbi4KICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihi
b29sKTsKLSAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1
ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJs
ZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcs
IGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZl
bCwgZG91YmxlIGZsb29yTGV2ZWwpOworICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9w
dGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFj
eSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRp
b25hbDxkb3VibGU+IGZsb29yTGV2ZWwpOwogICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSk7CiAgICAgdm9p
ZCBoYW5kbGVHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdLR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdFJlZik7CiAgICAgYm9vbCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXggYTVi
NmRkMDU1ODBhZTBjMmQ5NTcwNzdkZmU0NTBhNDg2ZTZkMDFlYy4uNTAxMjdmNjc4NDFlMDNjNTU2
OGUxOWU5OTExNzk3YzhmYzJkNmI4MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0SW52b2NhdGlvbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52
b2NhdGlvbi5jcHAKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXN0SW52b2NhdGlvbi5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9u
cy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCkBAIC02NiwyMSArNjYs
MTcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdUUiB7CiAKK3N0YXRpYyB2
b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgYm9keSA9IG51
bGxwdHIpCit7CisgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0
KCksIGJvZHkpOworfQorCiBUZXN0SW52b2NhdGlvbjo6VGVzdEludm9jYXRpb24oV0tVUkxSZWYg
dXJsLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKICAgICA6IG1fb3B0aW9ucyhvcHRpb25z
KQogICAgICwgbV91cmwodXJsKQogICAgICwgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lcihSdW5M
b29wOjptYWluKCksIHRoaXMsICZUZXN0SW52b2NhdGlvbjo6d2FpdFRvRHVtcFdhdGNoZG9nVGlt
ZXJGaXJlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRv
cHRXSyhXS1VSTENvcHlTdHJpbmcobV91cmwuZ2V0KCkpKTsKLQotICAgIHNpemVfdCBzdHJpbmdM
ZW5ndGggPSBXS1N0cmluZ0dldExlbmd0aCh1cmxTdHJpbmcuZ2V0KCkpOwotCi0gICAgVmVjdG9y
PGNoYXI+IHVybFZlY3RvcjsKLSAgICB1cmxWZWN0b3IucmVzaXplKHN0cmluZ0xlbmd0aCArIDEp
OwotCi0gICAgV0tTdHJpbmdHZXRVVEY4Q1N0cmluZyh1cmxTdHJpbmcuZ2V0KCksIHVybFZlY3Rv
ci5kYXRhKCksIHN0cmluZ0xlbmd0aCArIDEpOwotCi0gICAgbV91cmxTdHJpbmcgPSBTdHJpbmco
dXJsVmVjdG9yLmRhdGEoKSwgc3RyaW5nTGVuZ3RoKTsKKyAgICBtX3VybFN0cmluZyA9IHRvV1RG
U3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKG1fdXJsLmdldCgpKSkuZ2V0KCkpOwogCiAg
ICAgLy8gRklYTUU6IEF2b2lkIG11dGF0aW5nIHRoZSBzZXR0aW5nIHZpYSBhIHRlc3QgZGlyZWN0
b3J5IGxpa2UgdGhpcy4KICAgICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSB1cmxDb250YWlu
cygibG9hZGluZy8iKSAmJiAhdXJsQ29udGFpbnMoIjovL2xvY2FsaG9zdCIpOwpAQCAtMTI5LDI4
ICsxMjUsMTIgQEAgYm9vbCBUZXN0SW52b2NhdGlvbjo6c2hvdWxkTG9nSGlzdG9yeUNsaWVudENh
bGxiYWNrcygpIGNvbnN0CiAKIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IFRl
c3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB1c2VGbGV4aWJsZVZpZXdwb3J0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVXNlRmxleGlibGVWaWV3cG9ydCIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IHVzZUZsZXhpYmxlVmlld3BvcnRWYWx1ZSA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKG9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgdXNlRmxleGlibGVWaWV3cG9y
dEtleS5nZXQoKSwgdXNlRmxleGlibGVWaWV3cG9ydFZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBkdW1wUGl4ZWxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRHVtcFBpeGVscyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IGR1bXBQaXhlbHNWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcFBp
eGVscykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0
KCksIGR1bXBQaXhlbHNLZXkuZ2V0KCksIGR1bXBQaXhlbHNWYWx1ZS5nZXQoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGltZW91dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlRpbWVvdXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRS
ZWY+IHRpbWVvdXRWYWx1ZSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobV90aW1lb3V0Lm1pbGxp
c2Vjb25kcygpKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9k
eS5nZXQoKSwgdGltZW91dEtleS5nZXQoKSwgdGltZW91dFZhbHVlLmdldCgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBkdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnJWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcEpTQ29uc29sZUxvZ0lu
U3RkRXJyKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5n
ZXQoKSwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5LmdldCgpLCBkdW1wSlNDb25zb2xlTG9n
SW5TdGRFcnJWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWRk
aXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNWYWx1ZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcob3B0aW9ucygpLmFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBl
c0tleS5nZXQoKSwgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNWYWx1ZS5nZXQoKSk7Ci0K
KyAgICBhdXRvIGJlZ2luVGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVXNlRmxl
eGlibGVWaWV3cG9ydCIsIG9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KTsKKyAgICBzZXRW
YWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1bXBQaXhlbHMiLCBtX2R1bXBQaXhlbHMpOwor
ICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVGltZW91dCIsIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihtX3RpbWVvdXQubWlsbGlzZWNvbmRzKCkpKTsKKyAgICBzZXRWYWx1ZShiZWdp
blRlc3RNZXNzYWdlQm9keSwgIkR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIG1fZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgImFk
ZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgb3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOwogICAgIHJldHVybiBiZWdpblRlc3RNZXNzYWdlQm9keTsK
IH0KIApAQCAtMTY4LDkgKzE0OCw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246Omludm9rZSgpCiAK
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNsZWFyIG91dCB2aXNpdGVkIGxpbmtzIGhlcmUuCiAK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWdpblRlc3QiKSk7Ci0gICAgYXV0byBiZWdpblRl
c3RNZXNzYWdlQm9keSA9IGNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkoKTsKLSAgICBXS1Bh
Z2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIGJlZ2luVGVzdE1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkJlZ2luVGVzdCIsIGNyZWF0ZVRl
c3RTZXR0aW5nc0RpY3Rpb25hcnkoKS5nZXQoKSk7CiAKICAgICBtX3N0YXJ0ZWRUZXN0aW5nID0g
dHJ1ZTsKIApAQCAtMzI3LDE4NSArMzA1LDEwNCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiQWNrIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgbWVzc2FnZUJvZHlTdHJp
bmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlQm9keVN0cmluZywgIkJlZ2luVGVz
dCIpKSB7CisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5KSwgIkJlZ2luVGVzdCIpKSB7CiAgICAgICAgICAgICBtX2dvdEluaXRp
YWxSZXNwb25zZSA9IHRydWU7CiAgICAgICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubm90aWZ5RG9uZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEb25lIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gcGl4ZWxSZXN1bHRJc1BlbmRpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJQaXhlbFJlc3VsdElzUGVuZGluZyIpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIHBpeGVsUmVzdWx0SXNQZW5kaW5nID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGl4ZWxSZXN1
bHRJc1BlbmRpbmdLZXkuZ2V0KCkpKTsKLSAgICAgICAgbV9waXhlbFJlc3VsdElzUGVuZGluZyA9
IFdLQm9vbGVhbkdldFZhbHVlKHBpeGVsUmVzdWx0SXNQZW5kaW5nKTsKLQorICAgICAgICBhdXRv
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7Cisg
ICAgICAgIG1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiUGl4ZWxSZXN1bHRJc1BlbmRpbmciKTsKICAgICAgICAgaWYgKCFtX3BpeGVs
UmVzdWx0SXNQZW5kaW5nKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
cGl4ZWxSZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQ
aXhlbFJlc3VsdCIpKTsKLSAgICAgICAgICAgIG1fcGl4ZWxSZXN1bHQgPSBzdGF0aWNfY2FzdDxX
S0ltYWdlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgcGl4ZWxSZXN1bHRLZXkuZ2V0KCkpKTsKKyAgICAgICAgICAgIG1fcGl4ZWxSZXN1bHQgPSBz
dGF0aWNfY2FzdDxXS0ltYWdlUmVmPih2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJQaXhl
bFJlc3VsdCIpKTsKICAgICAgICAgICAgIEFTU0VSVCghbV9waXhlbFJlc3VsdCB8fCBtX2R1bXBQ
aXhlbHMpOwogICAgICAgICB9Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJl
cGFpbnRSZWN0c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJl
cGFpbnRSZWN0cyIpKTsKLSAgICAgICAgbV9yZXBhaW50UmVjdHMgPSBzdGF0aWNfY2FzdDxXS0Fy
cmF5UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
cmVwYWludFJlY3RzS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGF1ZGlvUmVzdWx0S2V5ID0gIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkF1ZGlvUmVzdWx0IikpOwotICAgICAgICBtX2F1ZGlvUmVzdWx0ID0gc3RhdGljX2Nhc3Q8
V0tEYXRhUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgYXVkaW9SZXN1bHRLZXkuZ2V0KCkpKTsKLQorICAgICAgICBtX3JlcGFpbnRSZWN0cyA9IHN0
YXRpY19jYXN0PFdLQXJyYXlSZWY+KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlJlcGFp
bnRSZWN0cyIpKTsKKyAgICAgICAgbV9hdWRpb1Jlc3VsdCA9IHN0YXRpY19jYXN0PFdLRGF0YVJl
Zj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQXVkaW9SZXN1bHQiKSk7CiAgICAgICAg
IGRvbmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiVGV4dE91dHB1dCIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIHRleHRPdXRwdXQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBtX3RleHRPdXRwdXQuYXBwZW5kKHRvV1RGU3RyaW5nKHRl
eHRPdXRwdXQpKTsKKyAgICAgICAgbV90ZXh0T3V0cHV0LmFwcGVuZCh0b1dURlN0cmluZyhzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRHVtcFRvU3RkRXJy
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmlu
Z0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdGV4dE91dHB1dCA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi
JXMiLCB0b1dURlN0cmluZyh0ZXh0T3V0cHV0KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIlcyIsIHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSku
dXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkJlZm9yZVVubG9hZFJldHVyblZh
bHVlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBiZWZvcmVVbmxvYWRSZXR1
cm5WYWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUo
V0tCb29sZWFuR2V0VmFsdWUoYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUpKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWRkQ2hyb21l
SW5wdXRGaWVsZCIpKSB7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5hZGRDaHJvbWVJbnB1dEZpZWxkKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNhbGxBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIHBv
c3RQYWdlTWVzc2FnZSgiQ2FsbEFkZENocm9tZUlucHV0RmllbGRDYWxsYmFjayIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJSZW1vdmVDaHJvbWVJbnB1dEZpZWxkIikpIHsKICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnJlbW92ZUNocm9tZUlucHV0Rmll
bGQoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbFJlbW92ZUNocm9tZUlucHV0
RmllbGRDYWxsYmFjayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsUmVtb3Zl
Q2hyb21lSW5wdXRGaWVsZENhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJGb2N1
c1dlYlZpZXciKSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+bWFrZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIHBvc3RQ
YWdlTWVzc2FnZSgiQ2FsbEZvY3VzV2ViVmlld0NhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldEJhY2tpbmdTY2FsZUZhY3RvciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIGRvdWJsZSBi
YWNraW5nU2NhbGVGYWN0b3IgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91Ymxl
UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBXS1BhZ2VTZXRDdXN0b21CYWNraW5nU2NhbGVG
YWN0b3IoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
YmFja2luZ1NjYWxlRmFjdG9yKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxs
U2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2siKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIFdLUGFnZVNldEN1
c3RvbUJhY2tpbmdTY2FsZUZhY3RvcihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+cGFnZSgpLCBkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAgICBwb3N0
UGFnZU1lc3NhZ2UoIkNhbGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjayIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsK
LSAgICAgICAgdWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOworICAgICAgICB1aW50NjRfdCBub3Rp
ZmljYXRpb25JRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0
aW9uSUQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBZGRzVmlzaXRlZExpbmtzIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBl
SUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRMaW5r
cyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBXS0Jv
b2xlYW5HZXRWYWx1ZShlbmFibGVkV0spKTsKKyAgICAgICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRM
aW5rcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBi
b29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBlbmFi
bGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihXS0Jv
b2xlYW5HZXRWYWx1ZShlbmFibGVkV0spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24iKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsYXRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGF0aXR1ZGUiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVm
IGxhdGl0dWRlV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxhdGl0dWRlS2V5V0suZ2V0KCkpKTsKLSAg
ICAgICAgZG91YmxlIGxhdGl0dWRlID0gV0tEb3VibGVHZXRWYWx1ZShsYXRpdHVkZVdLKTsKLQot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbG9uZ2l0dWRlS2V5V0sgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsb25naXR1ZGUiKSk7Ci0gICAgICAgIFdL
RG91YmxlUmVmIGxvbmdpdHVkZVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBsb25naXR1ZGVLZXlXSy5n
ZXQoKSkpOwotICAgICAgICBkb3VibGUgbG9uZ2l0dWRlID0gV0tEb3VibGVHZXRWYWx1ZShsb25n
aXR1ZGVXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFjY3VyYWN5S2V5
V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhY2N1cmFjeSIpKTsK
LSAgICAgICAgV0tEb3VibGVSZWYgYWNjdXJhY3lXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYWNjdXJh
Y3lLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgYWNjdXJhY3kgPSBXS0RvdWJsZUdldFZh
bHVlKGFjY3VyYWN5V0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92
aWRlc0FsdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJwcm92aWRlc0FsdGl0dWRlIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNBbHRp
dHVkZVdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNBbHRpdHVkZUtleVdLLmdldCgpKSk7
Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSA9IFdLQm9vbGVhbkdldFZhbHVlKHByb3Zp
ZGVzQWx0aXR1ZGVXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0
dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHRpdHVk
ZSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgYWx0aXR1ZGVXSyA9IHN0YXRpY19jYXN0PFdLRG91
YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
YWx0aXR1ZGVLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgYWx0aXR1ZGUgPSBXS0RvdWJs
ZUdldFZhbHVlKGFsdGl0dWRlV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSIpKTsKLSAgICAgICAgV0tC
b29sZWFuUmVmIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
cHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92
aWRlc0FsdGl0dWRlQWNjdXJhY3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3lXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRl
QWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFs
dGl0dWRlQWNjdXJhY3kiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIGFsdGl0dWRlQWNjdXJhY3lX
SyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgYWx0aXR1ZGVBY2N1cmFjeUtleVdLLmdldCgpKSk7Ci0gICAg
ICAgIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5ID0gV0tEb3VibGVHZXRWYWx1ZShhbHRpdHVkZUFj
Y3VyYWN5V0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0hl
YWRpbmdLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3Zp
ZGVzSGVhZGluZyIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHByb3ZpZGVzSGVhZGluZ1dLID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNIZWFkaW5nS2V5V0suZ2V0KCkpKTsKLSAgICAgICAg
Ym9vbCBwcm92aWRlc0hlYWRpbmcgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc0hlYWRpbmdX
Syk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhlYWRpbmdLZXlXSyA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImhlYWRpbmciKSk7Ci0gICAgICAg
IFdLRG91YmxlUmVmIGhlYWRpbmdXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaGVhZGluZ0tleVdLLmdl
dCgpKSk7Ci0gICAgICAgIGRvdWJsZSBoZWFkaW5nID0gV0tEb3VibGVHZXRWYWx1ZShoZWFkaW5n
V0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc1NwZWVkS2V5
V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwcm92aWRlc1NwZWVk
IikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNTcGVlZFdLID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgcHJvdmlkZXNTcGVlZEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcHJvdmlkZXNT
cGVlZCA9IFdLQm9vbGVhbkdldFZhbHVlKHByb3ZpZGVzU3BlZWRXSyk7Ci0KLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNwZWVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJzcGVlZCIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc3BlZWRXSyA9
IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgc3BlZWRLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgc3Bl
ZWQgPSBXS0RvdWJsZUdldFZhbHVlKHNwZWVkV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBwcm92aWRlc0Zsb29yTGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzRmxvb3JMZXZlbCIpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIHByb3ZpZGVzRmxvb3JMZXZlbFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcHJvdmlkZXNG
bG9vckxldmVsS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwg
PSBXS0Jvb2xlYW5HZXRWYWx1ZShwcm92aWRlc0Zsb29yTGV2ZWxXSyk7Ci0KLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZsb29yTGV2ZWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImZsb29yTGV2ZWwiKSk7Ci0gICAgICAgIFdLRG91YmxlUmVm
IGZsb29yTGV2ZWxXSyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZmxvb3JMZXZlbEtleVdLLmdldCgpKSk7
Ci0gICAgICAgIGRvdWJsZSBmbG9vckxldmVsID0gV0tEb3VibGVHZXRWYWx1ZShmbG9vckxldmVs
V0spOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRp
dHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFj
eSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJvdmlk
ZXNGbG9vckxldmVsLCBmbG9vckxldmVsKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGxhdGl0
dWRlID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAibGF0aXR1ZGUiKTsKKyAg
ICAgICAgYXV0byBsb25naXR1ZGUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJsb25naXR1ZGUiKTsKKyAgICAgICAgYXV0byBhY2N1cmFjeSA9IGRvdWJsZVZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgImFjY3VyYWN5Iik7CisgICAgICAgIGF1dG8gYWx0aXR1ZGUgPSBv
cHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImFsdGl0dWRlIik7Cisg
ICAgICAgIGF1dG8gYWx0aXR1ZGVBY2N1cmFjeSA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiYWx0aXR1ZGVBY2N1cmFjeSIpOworICAgICAgICBhdXRvIGhlYWRp
bmcgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImhlYWRpbmci
KTsKKyAgICAgICAgYXV0byBzcGVlZCA9IG9wdGlvbmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAic3BlZWQiKTsKKyAgICAgICAgYXV0byBmbG9vckxldmVsID0gb3B0aW9uYWxE
b3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJmbG9vckxldmVsIik7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihs
YXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGUsIGFsdGl0dWRlQWNjdXJhY3ks
IGhlYWRpbmcsIHNwZWVkLCBmbG9vckxldmVsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9j
a0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1l
c3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKGVycm9yTWVzc2FnZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZXJNZWRpYVBlcm1pc3Npb24iKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
VXNlck1lZGlhUGVybWlzc2lvbihXS0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVkV0spKTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVzZXJNZWRpYVBlcm1pc3Npb24oYm9v
bGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUx
NSwxMTcgKzQxMiw2NiBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlck1lZGlh
UGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBwZXJtaXNzaW9uS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJwZXJtaXNzaW9uIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcGVybWlzc2lvbldLID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgcGVybWlzc2lvbktleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wg
cGVybWlzc2lvbiA9IFdLQm9vbGVhbkdldFZhbHVlKHBlcm1pc3Npb25XSyk7Ci0KLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIm9yaWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2lu
V0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIG9yaWdpbktleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVm
IHBhcmVudE9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwYXJlbnRPcmlnaW5LZXkuZ2V0KCkp
KTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1
ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gcGVybWlzc2lvbiA9IGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJwZXJtaXNzaW9uIik7CisgICAgICAgIGF1dG8gb3JpZ2lu
V0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJvcmlnaW4iKTsKKyAgICAg
ICAgYXV0byBwYXJlbnRPcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgInBhcmVudE9yaWdpbiIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4ocGVybWlzc2lvbiwgb3Jp
Z2luV0ssIHBhcmVudE9yaWdpbldLKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzZXRVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gb3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
Zygib3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW5XSyA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgb3JpZ2luS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHBhcmVudE9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luV0sg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHBhcmVudE9yaWdpbktleS5nZXQoKSkpOwotICAgICAgICAKKyAg
ICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2Fn
ZUJvZHkpOworICAgICAgICBhdXRvIG9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAib3JpZ2luIik7CisgICAgICAgIGF1dG8gcGFyZW50T3JpZ2luV0sgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJwYXJlbnRPcmlnaW4iKTsKICAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RDb3VudEZvck9yaWdpbihvcmlnaW5XSywgcGFyZW50T3JpZ2luV0spOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tE
aWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGVuYWJsZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImVuYWJsZWQiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBlbmFibGVkS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBlbmFibGVkID0g
V0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gcGVybWlzc2l2ZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygicGVybWlzc2l2ZSIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHBlcm1pc3NpdmVX
SyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIHBlcm1pc3NpdmVLZXlXSy5nZXQoKSkpOwotICAgICAgICBi
b29sIHBlcm1pc3NpdmUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwZXJtaXNzaXZlV0spOwotCisgICAg
ICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgYXV0byBlbmFibGVkID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgImVuYWJsZWQiKTsKKyAgICAgICAgYXV0byBwZXJtaXNzaXZlID0gYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgInBlcm1pc3NpdmUiKTsKICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGVuYWJsZWQsIHBl
cm1pc3NpdmUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRIaWRkZW4iKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBpc0luaXRpYWxLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImhpZGRlbiIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGhpZGRlbldL
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNJbml0aWFsS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9v
bCBoaWRkZW4gPSBXS0Jvb2xlYW5HZXRWYWx1ZShoaWRkZW5XSyk7Ci0KLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhpZGRlbihoaWRkZW4pOworICAgICAgICBhdXRvIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRIaWRkZW4oYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgImhpZGRlbiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUHJv
Y2Vzc1dvcmtRdWV1ZSIpKSB7Ci0gICAgICAgIGlmIChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkud29ya1F1ZXVlTWFuYWdlcigpLnByb2Nlc3NXb3JrUXVldWUoKSkgewotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiV29ya1F1ZXVlUHJvY2Vzc2VkQ2FsbGJhY2siKSk7Ci0gICAg
ICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAp
OwotICAgICAgICB9CisgICAgICAgIGlmIChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29y
a1F1ZXVlTWFuYWdlcigpLnByb2Nlc3NXb3JrUXVldWUoKSkKKyAgICAgICAgICAgIHBvc3RQYWdl
TWVzc2FnZSgiV29ya1F1ZXVlUHJvY2Vzc2VkQ2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiUXVldWVCYWNrTmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIHVpbnQ2NF90IHN0
ZXBDb3VudCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3Nh
Z2VCb2R5KSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVN
YW5hZ2VyKCkucXVldWVCYWNrTmF2aWdhdGlvbihzdGVwQ291bnQpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlQmFja05hdmlnYXRp
b24odWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVG
b3J3YXJkTmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIHVpbnQ2NF90IHN0ZXBDb3Vu
dCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5
KSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2Vy
KCkucXVldWVGb3J3YXJkTmF2aWdhdGlvbihzdGVwQ291bnQpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlRm9yd2FyZE5hdmlnYXRp
b24odWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVM
b2FkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Rp
Y3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBsb2FkRGF0YURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidXJsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiB1cmxX
SyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxv
YWREYXRhRGljdGlvbmFyeSwgdXJsS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRhcmdldEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoInRhcmdldCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdGFyZ2V0V0sgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rp
b25hcnksIHRhcmdldEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygic2hvdWxkT3BlbkV4dGVybmFsVVJMcyIpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIHNob3VsZE9wZW5FeHRlcm5hbFVSTHNWYWx1ZVdLID0gc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgc2hv
dWxkT3BlbkV4dGVybmFsVVJMc0tleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkKHRvV1RGU3RyaW5nKHVy
bFdLKSwgdG9XVEZTdHJpbmcodGFyZ2V0V0spLCBXS0Jvb2xlYW5HZXRWYWx1ZShzaG91bGRPcGVu
RXh0ZXJuYWxVUkxzVmFsdWVXSykpOworICAgICAgICBhdXRvIGxvYWREYXRhRGljdGlvbmFyeSA9
IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gdXJsID0gdG9XVEZT
dHJpbmcoc3RyaW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAidXJsIikpOworICAgICAgICBh
dXRvIHRhcmdldCA9IHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwg
InRhcmdldCIpKTsKKyAgICAgICAgYXV0byBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzID0gYm9vbGVh
blZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgInNob3VsZE9wZW5FeHRlcm5hbFVSTHMiKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1
ZUxvYWQodXJsLCB0YXJnZXQsIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJRdWV1ZUxvYWRIVE1MU3RyaW5nIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBsb2FkRGF0YURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
Y29udGVudEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbnRl
bnQiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGNvbnRlbnRXSyA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgY29u
dGVudEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBiYXNl
VVJMS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYmFzZVVSTCIp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYmFzZVVSTFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCBiYXNlVVJM
S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVucmVhY2hh
YmxlVVJMS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidW5yZWFj
aGFibGVVUkwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMV0sgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURp
Y3Rpb25hcnksIHVucmVhY2hhYmxlVVJMS2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBsb2Fk
RGF0YURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIGNvbnRlbnRXSyA9IHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgImNvbnRlbnQi
KTsKKyAgICAgICAgYXV0byBiYXNlVVJMV0sgPSBzdHJpbmdWYWx1ZShsb2FkRGF0YURpY3Rpb25h
cnksICJiYXNlVVJMIik7CisgICAgICAgIGF1dG8gdW5yZWFjaGFibGVVUkxXSyA9IHN0cmluZ1Zh
bHVlKGxvYWREYXRhRGljdGlvbmFyeSwgInVucmVhY2hhYmxlVVJMIik7CiAgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkSFRNTFN0
cmluZyh0b1dURlN0cmluZyhjb250ZW50V0spLCBiYXNlVVJMV0sgPyB0b1dURlN0cmluZyhiYXNl
VVJMV0spIDogU3RyaW5nKCksIHVucmVhY2hhYmxlVVJMV0sgPyB0b1dURlN0cmluZyh1bnJlYWNo
YWJsZVVSTFdLKSA6IFN0cmluZygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYzNiwx
NTQgKzQ4MiwxMTcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9hZGluZ1Nj
cmlwdCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tT
dHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHNjcmlw
dCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWRpbmdTY3JpcHQodG9XVEZTdHJp
bmcoc2NyaXB0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQodG9XVEZTdHJpbmco
c2NyaXB0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VB
bmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFJlamVjdHNQ
cm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhXS0Jv
b2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGFuZGxlc0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlw
ZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoV0tCb29s
ZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbGVh
blZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZExvZ0Rv
d25sb2FkQ2FsbGJhY2tzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MoV0tC
b29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdXNlcm5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1N0cmluZ1JlZiB1c2VybmFtZSA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUodG9XVEZTdHJpbmcodXNlcm5hbWUpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0QXV0aGVudGljYXRpb25QYXNzd29yZCIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBhc3N3b3JkID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgcGFzc3dvcmQgPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRB
dXRoZW50aWNhdGlvblBhc3N3b3JkKHRvV1RGU3RyaW5nKHBhc3N3b3JkKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldEJsb2NrQWxsUGx1Z2lucyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgc2hvdWxkQmxvY2sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJsb2NrQWxsUGx1
Z2lucyhXS0Jvb2xlYW5HZXRWYWx1ZShzaG91bGRCbG9jaykpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0QmxvY2tBbGxQbHVnaW5zKGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgbW9kZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIG1vZGUgPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRQ
bHVnaW5TdXBwb3J0ZWRNb2RlKHRvV1RGU3RyaW5nKG1vZGUpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
aG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheShXS0Jvb2xlYW5HZXRWYWx1ZSh2
YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGVj
aWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJE
ZWxheSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tC
b29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheShXS0Jv
b2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXROYXZpZ2F0aW9uR2VzdHVyZXNF
bmFibGVkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZChXS0Jvb2xlYW5HZXRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TmF2
aWdhdGlvbkdlc3R1cmVzRW5hYmxlZChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBl
SUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldElnbm9yZXNWaWV3cG9ydFNj
YWxlTGltaXRzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91
bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERvd25sb2Fk
VW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFj
Y2VzcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tC
b29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nl
c3MoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3Mo
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRp
c3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzT25TaXRlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyhX
S0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSksIHRydWUpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9v
bGVhblZhbHVlKG1lc3NhZ2VCb2R5KSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0
YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpLCBm
YWxzZSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyhib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpLCBm
YWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJ1blVJUHJvY2Vzc1NjcmlwdCIpKSB7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHNjcmlwdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNjcmlwdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikp
OwotCi0gICAgICAgIFVJU2NyaXB0SW52b2NhdGlvbkRhdGEqIGludm9jYXRpb25EYXRhID0gbmV3
IFVJU2NyaXB0SW52b2NhdGlvbkRhdGEoKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGludm9j
YXRpb25EYXRhID0gbmV3IFVJU2NyaXB0SW52b2NhdGlvbkRhdGE7CiAgICAgICAgIGludm9jYXRp
b25EYXRhLT50ZXN0SW52b2NhdGlvbiA9IHRoaXM7Ci0gICAgICAgIGludm9jYXRpb25EYXRhLT5j
YWxsYmFja0lEID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBj
YWxsYmFja0lES2V5LmdldCgpKSkpOwotICAgICAgICBpbnZvY2F0aW9uRGF0YS0+c2NyaXB0U3Ry
aW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzY3JpcHRLZXkuZ2V0KCkpKTsKKyAgICAgICAgaW52b2Nh
dGlvbkRhdGEtPmNhbGxiYWNrSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJDYWxsYmFja0lEIik7CisgICAgICAgIGludm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTY3JpcHQiKTsKICAgICAgICAgbV9w
ZW5kaW5nVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSA9IGludm9jYXRpb25EYXRhOwogICAgICAgICBX
S1BhZ2VDYWxsQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGludm9jYXRpb25EYXRhLCBydW5VSVNpZGVT
Y3JpcHRBZnRlclVwZGF0ZUNhbGxiYWNrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUnVuVUlQcm9j
ZXNzU2NyaXB0SW1tZWRpYXRlbHkiKSkgewotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLQotICAgICAgICBVSVNjcmlwdEludm9j
YXRpb25EYXRhKiBpbnZvY2F0aW9uRGF0YSA9IG5ldyBVSVNjcmlwdEludm9jYXRpb25EYXRhKCk7
CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1l
c3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBpbnZvY2F0aW9uRGF0YSA9IG5ldyBVSVNjcmlwdElu
dm9jYXRpb25EYXRhOwogICAgICAgICBpbnZvY2F0aW9uRGF0YS0+dGVzdEludm9jYXRpb24gPSB0
aGlzOwotICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJhY2tJRCA9ICh1bnNpZ25lZClXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgY2FsbGJhY2tJREtleS5nZXQoKSkpKTsKLSAg
ICAgICAgaW52b2NhdGlvbkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc2Ny
aXB0S2V5LmdldCgpKSk7CisgICAgICAgIGludm9jYXRpb25EYXRhLT5jYWxsYmFja0lEID0gdWlu
dDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQ2FsbGJhY2tJRCIpOworICAgICAgICBp
bnZvY2F0aW9uRGF0YS0+c2NyaXB0U3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiU2NyaXB0Iik7CiAgICAgICAgIG1fcGVuZGluZ1VJU2NyaXB0SW52b2NhdGlvbkRh
dGEgPSBpbnZvY2F0aW9uRGF0YTsKICAgICAgICAgcnVuVUlTaWRlU2NyaXB0SW1tZWRpYXRlbHko
bnVsbHB0ciwgaW52b2NhdGlvbkRhdGEpOwogICAgICAgICByZXR1cm47CkBAIC03OTEsMTEgKzYw
MCw5IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkluc3RhbGxDdXN0b21NZW51QWN0aW9uIikpIHsK
ICAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJuYW1lIikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgbmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZGlz
bWlzc2VzQXV0b21hdGljYWxseUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImRpc21pc3Nlc0F1dG9tYXRpY2FsbHkiKSk7Ci0gICAgICAgIGF1dG8gZGlzbWlzc2Vz
QXV0b21hdGljYWxseSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlL
ZXkuZ2V0KCkpKTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmluc3RhbGxD
dXN0b21NZW51QWN0aW9uKHRvV1RGU3RyaW5nKG5hbWUuZ2V0KCkpLCBXS0Jvb2xlYW5HZXRWYWx1
ZShkaXNtaXNzZXNBdXRvbWF0aWNhbGx5KSk7CisgICAgICAgIGF1dG8gbmFtZSA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIm5hbWUiKTsKKyAgICAgICAgYXV0byBkaXNtaXNz
ZXNBdXRvbWF0aWNhbGx5ID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImRp
c21pc3Nlc0F1dG9tYXRpY2FsbHkiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmluc3RhbGxDdXN0b21NZW51QWN0aW9uKHRvV1RGU3RyaW5nKG5hbWUpLCBkaXNtaXNzZXNB
dXRvbWF0aWNhbGx5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODA1LDcgKzYxMiw3
IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGFjdGlv
bnM7CiAgICAgICAgIGFjdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHNpemU7ICsraW5kZXgpCi0gICAgICAg
ICAgICBhY3Rpb25zLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tBcnJheUdldEl0ZW1BdEluZGV4KG1lc3NhZ2VCb2R5QXJyYXksIGluZGV4KSkpKTsKKyAgICAg
ICAgICAgIGFjdGlvbnMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKFdLQXJyYXlHZXRJ
dGVtQXRJbmRleChtZXNzYWdlQm9keUFycmF5LCBpbmRleCkpKSk7CiAgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBbGxvd2VkTWVudUFjdGlvbnMoYWN0aW9ucyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC04MjgsMTA4ICs2MzUsNjMgQEAgdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVz
c2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NEZWJ1Z01vZGUiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
RGVidWdNb2RlKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVz
b3VyY2VGb3JEZWJ1Z01vZGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0
TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdL
U3RyaW5nUmVmIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
Rm9yRGVidWdNb2RlKGhvc3ROYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGlj
c0xhc3RTZWVuIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9z
dE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
RG91YmxlUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTGFzdFNlZW4o
aG9zdE5hbWUsIFdLRG91YmxlR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5h
bWUiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzTGFzdFNlZW4oaG9zdE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
b3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lRG9t
YWluMUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1l
RG9tYWluMSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lRG9t
YWluMktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1l
RG9tYWluMiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxhc3RTZWVuS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGFzdFNlZW4iKSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoYWRVc2VySW50ZXJhY3Rpb25LZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYWRVc2VySW50ZXJhY3Rpb24i
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGlzR3JhbmRmYXRoZXJlZEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIklzR3JhbmRmYXRoZXJlZCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGlzUHJldmFsZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SXNQcmV2YWxlbnQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc1ZlcnlQ
cmV2YWxlbnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1Zl
cnlQcmV2YWxlbnQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkYXRhUmVj
b3Jkc1JlbW92ZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJE
YXRhUmVjb3Jkc1JlbW92ZWQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0
aW1lc0FjY2Vzc2VkRmlyc3RQYXJ0eUludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZXNBY2Nlc3NlZEZpcnN0UGFydHlJbnRlcmFjdGlvbiIp
KTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9z
dE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVEb21haW4xID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZURvbWFpbjFLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tT
dHJpbmdSZWYgdG9wRnJhbWVEb21haW4yID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZURvbWFp
bjJLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgbGFzdFNlZW4gPSBzdGF0aWNfY2Fz
dDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGxhc3RTZWVuS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBoYWRVc2Vy
SW50ZXJhY3Rpb24gPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBoYWRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0
KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpOwotICAg
ICAgICBXS0Jvb2xlYW5SZWYgaXNHcmFuZGZhdGhlcmVkID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNH
cmFuZGZhdGhlcmVkS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpc1ByZXZhbGVu
dCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGlzUHJldmFsZW50S2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
Qm9vbGVhblJlZiBpc1ZlcnlQcmV2YWxlbnQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1ZlcnlQcmV2
YWxlbnRLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgZGF0YVJlY29yZHNSZW1vdmVk
ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBkYXRhUmVjb3Jkc1JlbW92ZWRLZXkuZ2V0KCkpKTsKLQotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01lcmdlU3RhdGlz
dGljKGhvc3ROYW1lLCB0b3BGcmFtZURvbWFpbjEsIHRvcEZyYW1lRG9tYWluMiwgV0tEb3VibGVH
ZXRWYWx1ZShsYXN0U2VlbiksIFdLQm9vbGVhbkdldFZhbHVlKGhhZFVzZXJJbnRlcmFjdGlvbiks
IFdLRG91YmxlR2V0VmFsdWUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiksIFdLQm9vbGVhbkdl
dFZhbHVlKGlzR3JhbmRmYXRoZXJlZCksIFdLQm9vbGVhbkdldFZhbHVlKGlzUHJldmFsZW50KSwg
V0tCb29sZWFuR2V0VmFsdWUoaXNWZXJ5UHJldmFsZW50KSwgV0tVSW50NjRHZXRWYWx1ZShkYXRh
UmVjb3Jkc1JlbW92ZWQpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBk
aWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0
byB0b3BGcmFtZURvbWFpbjEgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJU
b3BGcmFtZURvbWFpbjEiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZURvbWFpbjIgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZURvbWFpbjIiKTsKKyAgICAgICAg
YXV0byBsYXN0U2VlbiA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkxhc3RT
ZWVuIik7CisgICAgICAgIGF1dG8gaGFkVXNlckludGVyYWN0aW9uID0gYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhhZFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRv
IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gaXNHcmFu
ZGZhdGhlcmVkID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIklzR3JhbmRm
YXRoZXJlZCIpOworICAgICAgICBhdXRvIGlzUHJldmFsZW50ID0gYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIklzUHJldmFsZW50Iik7CisgICAgICAgIGF1dG8gaXNWZXJ5UHJl
dmFsZW50ID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIklzVmVyeVByZXZh
bGVudCIpOworICAgICAgICBhdXRvIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IHVpbnQ2NFZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIkRhdGFSZWNvcmRzUmVtb3ZlZCIpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKGhvc3RO
YW1lLCB0b3BGcmFtZURvbWFpbjEsIHRvcEZyYW1lRG9tYWluMiwgbGFzdFNlZW4sIGhhZFVzZXJJ
bnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBp
c1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gaGFkVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iKSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpc1NjaGVkdWxlZEZvckFsbEJ1dENv
b2tpZURhdGFSZW1vdmFsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzUHJldmFsZW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNQcmV2YWxlbnQiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdS
ZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiBoYWRVc2VySW50ZXJhY3Rpb24gPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBo
YWRVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc1Nj
aGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsS2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
Qm9vbGVhblJlZiBpc1ByZXZhbGVudCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzUHJldmFsZW50S2V5
LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NFeHBpcmVkU3RhdGlzdGljKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZShoYWRVc2Vy
SW50ZXJhY3Rpb24pLCBXS0Jvb2xlYW5HZXRWYWx1ZShpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNQcmV2YWxlbnQpKTsKKyAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBoYWRVc2VySW50ZXJhY3Rpb24gPSBib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSGFkVXNlckludGVyYWN0aW9uIik7Cisg
ICAgICAgIGF1dG8gaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCA9IGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsIik7CisgICAgICAgIGF1dG8gaXNQcmV2YWxlbnQgPSBib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNQcmV2YWxlbnQiKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljKGhvc3ROYW1l
LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwsIGlzUHJldmFsZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZh
bGVudFJlc291cmNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVm
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYg
aG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7
Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAg
ICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJv
ZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lLCB2YWx1
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFu
UmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0
byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOwor
ICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05NDQsNTEgKzcwNiwzNSBAQCB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmlu
Z1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
U3RvcmVNb2RpZmllZFNpbmNlSG91cnMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBXS1VJbnQ2NFJl
ZiBob3VycyA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3VycyhXS1VJbnQ2NEdldFZhbHVlKGhvdXJzKSk7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1aW50NjRWYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdy
YWRlUmVmZXJyZXIiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIo
V0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlcihib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0ZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0ZpcnN0UGFydHlX
ZWJzaXRlRGF0YVJlbW92YWxNb2RlKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlN0YXRpc3RpY3NTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llcyhob3N0TmFtZSk7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENv
b2tpZXMoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3Rh
dGlzdGljc1NldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4iKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAg
ICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBz
dGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGZpcnN0UGFydHlVUkxTdHJpbmdLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJGaXJzdFBhcnR5VVJMIikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gY25hbWVVUkxTdHJpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDTkFNRSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3Ry
aW5nUmVmIGZpcnN0UGFydHlVUkxTdHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZpcnN0UGFydHlV
UkxTdHJpbmdLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGNuYW1lVVJMU3RyaW5nS2V5LmdldCgpKSk7Ci0gICAgICAgIAor
ICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNz
YWdlQm9keSk7CisgICAgICAgIGF1dG8gZmlyc3RQYXJ0eVVSTFN0cmluZyA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkZpcnN0UGFydHlVUkwiKTsKKyAgICAgICAgYXV0byBj
bmFtZVVSTFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNOQU1F
Iik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRmly
c3RQYXJ0eUhvc3RDTkFNRURvbWFpbihmaXJzdFBhcnR5VVJMU3RyaW5nLCBjbmFtZVVSTFN0cmlu
Zyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21h
aW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3Ry
aW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBjbmFtZVVSTFN0cmluZyA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVGhpcmRQYXJ0eUNOQU1FRG9tYWluKGNuYW1l
VVJMU3RyaW5nKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW4oc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAxMiw4ICs3NTgsNyBAQCB2b2lkIFRlc3RJbnZv
Y2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBt
ZXNzYWdlTmFtZQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiR2V0QXBwbGljYXRpb25NYW5pZmVzdCIpKSB7CiAjaWZkZWYgX19CTE9DS1NfXwogICAg
ICAgICBXS1BhZ2VHZXRBcHBsaWNhdGlvbk1hbmlmZXN0X2IoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgXnsKLSAgICAgICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkRpZEdldEFwcGxpY2F0aW9uTWFuaWZlc3QiKSk7Ci0gICAgICAgICAgICBXS1Bh
Z2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICAg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJEaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0Iik7CiAgICAgICAg
IH0pOwogI2Vsc2UKICAgICAgICAgLy8gRklYTUU6IEFkZCBBUEkgZm9yIGxvYWRpbmcgdGhlIG1h
bmlmZXN0IG9uIG5vbi1fX0JMT0NLU19fIHBvcnRzLgpAQCAtMTAyMywxNiArNzY4LDEwIEBAIHZv
aWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdL
U3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0
aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Rp
Y3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Ci0KLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50
ZXJhY3Rpb24oaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUsIHZhbHVl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA0Myw4ICs3ODIsNyBAQCB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmlu
Z1JlZiBtZXNzYWdlTmFtZQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRBcHBCb3VuZERvbWFpbnMiKSkgewogICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQXJyYXlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
QXJyYXlSZWYgb3JpZ2luVVJMcyA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFwcEJvdW5kRG9tYWlu
cyhvcmlnaW5VUkxzKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFw
cEJvdW5kRG9tYWlucyhzdGF0aWNfY2FzdDxXS0FycmF5UmVmPihtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDU1LDk0ICs3OTMsNzAgQEAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZy
b21JbmplY3RlZEIKIHsKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIkluaXRpYWxpemF0aW9uIikpIHsKICAgICAgICAgYXV0byBzZXR0aW5ncyA9IGNy
ZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHJlc3VtZVRlc3RpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJSZXN1bWVUZXN0aW5nIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5S
ZWY+IHJlc3VtZVRlc3RpbmdWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fc3RhcnRl
ZFRlc3RpbmcpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShzZXR0aW5ncy5nZXQoKSwg
cmVzdW1lVGVzdGluZ0tleS5nZXQoKSwgcmVzdW1lVGVzdGluZ1ZhbHVlLmdldCgpKTsKKyAgICAg
ICAgc2V0VmFsdWUoc2V0dGluZ3MsICJSZXN1bWVUZXN0aW5nIiwgbV9zdGFydGVkVGVzdGluZyk7
CiAgICAgICAgIHJldHVybiBzZXR0aW5nczsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldER1bXBQaXhlbHMiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICAgICAgbV9kdW1wUGl4ZWxzID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpOworICAgICAgICBtX2R1bXBQaXhlbHMgPSBib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXREdW1w
UGl4ZWxzIikpCiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBQ
aXhlbHMpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0V2hhdFRvRHVtcCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1fd2hhdFRvRHVtcCA9
IHN0YXRpY19jYXN0PFdoYXRUb0R1bXA+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBtX3doYXRUb0R1bXAgPSBzdGF0aWNf
Y2FzdDxXaGF0VG9EdW1wPih1aW50NjRWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJHZXRXaGF0VG9EdW1wIikpCiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3doYXRUb0R1bXApKSk7CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFdhaXRV
bnRpbERvbmUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgc2V0V2FpdFVudGlsRG9uZShzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KG1lc3NhZ2VCb2R5KSkpKTsKKyAgICAgICAgc2V0V2FpdFVudGlsRG9uZShib29sZWFu
VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0V2FpdFVu
dGlsRG9uZSIpKQogICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV93YWl0
VW50aWxEb25lKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAg
ICAgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
V0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkp
KTsKKyAgICAgICAgbV9kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzID0gYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0RHVtcEZyYW1lTG9hZENhbGxi
YWNrcyIpKQogICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldENhbk9wZW5XaW5kb3dzIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAg
IG1fY2FuT3BlbldpbmRvd3MgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihXS0Jvb2xlYW5H
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAg
ICBtX2Nhbk9wZW5XaW5kb3dzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRXaW5kb3dJc0tleSIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgaXNLZXlWYWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+c2V0V2luZG93SXNLZXkoV0tCb29sZWFuR2V0VmFsdWUoaXNLZXlWYWx1ZSkpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+c2V0V2luZG93
SXNLZXkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0Vmlld1NpemUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25h
cnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3aWR0aEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVpZ2h0S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpOwotCi0gICAgICAgIFdLRG91YmxlUmVm
IHdpZHRoV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHdpZHRoS2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
RG91YmxlUmVmIGhlaWdodFdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBoZWlnaHRLZXkuZ2V0KCkpKTsK
LQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cmVz
aXplVG8oV0tEb3VibGVHZXRWYWx1ZSh3aWR0aFdLKSwgV0tEb3VibGVHZXRWYWx1ZShoZWlnaHRX
SykpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1
ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gd2lkdGggPSBkb3VibGVWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJ3aWR0aCIpOworICAgICAgICBhdXRvIGhlaWdodCA9IGRvdWJsZVZh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImhlaWdodCIpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cmVzaXplVG8od2lkdGgsIGhlaWdodCk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIp
KSB7Ci0gICAgICAgIGJvb2wgaXNBY3RpdmUgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
aXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNBY3RpdmUpKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJJc0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpCisgICAgICAg
IHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0Q2FjaGVNb2RlbCIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIHVpbnQ2NF90IG1vZGVsID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgdWludDY0X3QgbW9kZWwgPSB1
aW50NjRWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZVNldENh
Y2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkud2Vic2l0ZURhdGFTdG9yZSgpLCBtb2RlbCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiSXNXb3JrUXVldWVFbXB0eSIpKSB7Ci0gICAgICAgIGJvb2wgaXNFbXB0eSA9IFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkuaXNXb3JrUXVldWVFbXB0eSgp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGlzRW1wdHkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1dvcmtRdWV1
ZUVtcHR5IikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLmlzV29ya1F1ZXVlRW1wdHko
KSkpOwogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkgewot
ICAgICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5kaWRSZWNlaXZlU2VydmVyUmVk
aXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpKQor
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlv
bigpKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkNsZWFyRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9u
IikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFyRGlkUmVjZWl2
ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCk7CkBAIC0xMTUwLDQwICs4
NjQsMzUgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2
ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNlY3VyZUV2ZW50SW5wdXRJc0Vu
YWJsZWQiKSkgewotI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoSXNTZWN1cmVFdmVudElucHV0RW5hYmxlZCgpKSk7CisjaWYgUExBVEZPUk0oTUFD
KQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoSXNTZWN1cmVFdmVudElu
cHV0RW5hYmxlZCgpKSk7CiAjZWxzZQotICAgICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGZhbHNlKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShmYWxzZSkpOwogI2VuZGlmCi0gICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRDdXN0b21Vc2VyQWdlbnQiKSkgewotICAgICAgICBXS1N0cmluZ1Jl
ZiB1c2VyQWdlbnQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdXNlckFnZW50KTsKKyAgICAgICAgV0tQYWdlU2V0Q3Vz
dG9tVXNlckFnZW50KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUiKSkgewotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoV0tCb29sZWFuR2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJv
b2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKSB7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRTd2FwVG9FcGhlbWVy
YWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24o
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIpKSB7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRTd2FwVG9EZWZhdWx0
U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSkpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbWFn
ZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCIpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0g
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJk
KCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiByZXN1bHQgPSBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKGNvdW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW1hZ2VDb3Vu
dEluR2VuZXJhbFBhc3RlYm9hcmQiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmltYWdlQ291bnRJbkdlbmVyYWxQYXN0
ZWJvYXJkKCkpKTsKICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIkRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMiKSkgewogICAgICAgICBXS1dl
YnNpdGVEYXRhU3RvcmVSZW1vdmVBbGxJbmRleGVkRGF0YWJhc2VzKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS53ZWJzaXRlRGF0YVN0b3JlKCksIG51bGxwdHIsIHsgfSk7CkBAIC0xMTkxLDE3
ICs5MDAsMTAgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVj
ZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFkZE1vY2tNZWRpYURldmlj
ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0
aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBlcnNpc3RlbnRJREtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBlcnNpc3RlbnRJRCIpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiTGFiZWwiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB0eXBlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VHlwZSIpKTsKLQotICAgICAgICBhdXRvIHBlcnNpc3RlbnRJRCA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
cGVyc2lzdGVudElES2V5LmdldCgpKSk7Ci0gICAgICAgIGF1dG8gbGFiZWwgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGxhYmVsS2V5LmdldCgpKSk7Ci0gICAgICAgIGF1dG8gdHlwZSA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgdHlwZUtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBwZXJzaXN0
ZW50SUQgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJQZXJzaXN0ZW50SUQi
KTsKKyAgICAgICAgYXV0byBsYWJlbCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkxhYmVsIik7CisgICAgICAgIGF1dG8gdHlwZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIlR5cGUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmFkZE1vY2tNZWRpYURldmljZShwZXJzaXN0ZW50SUQsIGxhYmVsLCB0eXBlKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMTIxMiw5ICs5MTQsNyBAQCBXS1JldGFpblB0cjxX
S1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJv
bUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiUmVtb3ZlTW9ja01lZGlhRGV2aWNlIikpIHsKLSAgICAgICAgV0tTdHJp
bmdSZWYgcGVyc2lzdGVudElkID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5
KTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVtb3ZlTW9ja01lZGlh
RGV2aWNlKHBlcnNpc3RlbnRJZCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5yZW1vdmVNb2NrTWVkaWFEZXZpY2Uoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0xMjI0LDE0MiArOTI0LDg3IEBAIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01l
c3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iKSkgewotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0NhbWVyYU9yaWVudGF0aW9u
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSkp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0NhbWVyYU9yaWVu
dGF0aW9uKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiSXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQiKSkgewotICAgICAg
ICBib29sIGlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkID0gVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVk
KCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc01vY2tSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCkpOwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXJFbmFibGVkIikpCisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ckVuYWJsZWQoKSkpOwogICAgIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiSGFzQXBwQm91bmRTZXNzaW9uIikpIHsKLSAgICAgICAgYm9vbCBoYXNB
cHBCb3VuZFNlc3Npb24gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzQXBwQm91bmRT
ZXNzaW9uKCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNBcHBC
b3VuZFNlc3Npb24pKTsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJIYXNBcHBCb3VuZFNlc3Npb24iKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNBcHBC
b3VuZFNlc3Npb24oKSkpOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ29ubmVjdE1vY2tHYW1lcGFkIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5
cGVJRCgpKTsKLQotICAgICAgICB1aW50NjRfdCBpbmRleCA9IFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFdlYkNvcmVUZXN0
U3VwcG9ydDo6Y29ubmVjdE1vY2tHYW1lcGFkKGluZGV4KTsKLSAgICAgICAgCisgICAgICAgIFdl
YkNvcmVUZXN0U3VwcG9ydDo6Y29ubmVjdE1vY2tHYW1lcGFkKHVpbnQ2NFZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGlzY29ubmVjdE1vY2tHYW1lcGFk
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2
NEdldFR5cGVJRCgpKTsKLQotICAgICAgICB1aW50NjRfdCBpbmRleCA9IFdLVUludDY0R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFdlYkNv
cmVUZXN0U3VwcG9ydDo6ZGlzY29ubmVjdE1vY2tHYW1lcGFkKGluZGV4KTsKLQorICAgICAgICBX
ZWJDb3JlVGVzdFN1cHBvcnQ6OmRpc2Nvbm5lY3RNb2NrR2FtZXBhZCh1aW50NjRWYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHYW1lcGFkRGV0
YWlscyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJREtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJRCIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1hcHBpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJNYXBwaW5nIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gYXhpc0NvdW50S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QXhpc0NvdW50IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0dG9uQ291
bnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25Db3Vu
dCIpKTsKLQotICAgICAgICBXS1VJbnQ2NFJlZiBnYW1lcGFkSW5kZXggPSBzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGdhbWVwYWRJbmRleEtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBnYW1lcGFk
SUQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGdhbWVwYWRJREtleS5nZXQoKSkpOwotICAgICAgICBXS1N0
cmluZ1JlZiBtYXBwaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtYXBwaW5nS2V5LmdldCgpKSk7Ci0g
ICAgICAgIFdLVUludDY0UmVmIGF4aXNDb3VudCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYXhpc0NvdW50
S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGJ1dHRvbkNvdW50ID0gc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBidXR0b25Db3VudEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdlYkNvcmVUZXN0U3Vw
cG9ydDo6c2V0TW9ja0dhbWVwYWREZXRhaWxzKFdLVUludDY0R2V0VmFsdWUoZ2FtZXBhZEluZGV4
KSwgdG9XVEZTdHJpbmcoZ2FtZXBhZElEKSwgdG9XVEZTdHJpbmcobWFwcGluZyksIFdLVUludDY0
R2V0VmFsdWUoYXhpc0NvdW50KSwgV0tVSW50NjRHZXRWYWx1ZShidXR0b25Db3VudCkpOworICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gZ2FtZXBhZEluZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiR2FtZXBhZEluZGV4Iik7CisgICAgICAgIGF1dG8gZ2FtZXBhZElEID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiR2FtZXBhZElEIik7CisgICAgICAg
IGF1dG8gbWFwcGluZyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk1hcHBp
bmciKTsKKyAgICAgICAgYXV0byBheGlzQ291bnQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJBeGlzQ291bnQiKTsKKyAgICAgICAgYXV0byBidXR0b25Db3VudCA9IHVpbnQ2
NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkJ1dHRvbkNvdW50Iik7CisgICAgICAgIFdl
YkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWREZXRhaWxzKGdhbWVwYWRJbmRleCwgdG9X
VEZTdHJpbmcoZ2FtZXBhZElEKSwgdG9XVEZTdHJpbmcobWFwcGluZyksIGF4aXNDb3VudCwgYnV0
dG9uQ291bnQpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tHYW1lcGFkQXhp
c1ZhbHVlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZ2FtZXBhZEluZGV4S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXhpc0luZGV4S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXhpc0luZGV4IikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1VJbnQ2NFJlZiBnYW1lcGFkSW5k
ZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGdhbWVwYWRJbmRleEtleS5nZXQoKSkpOwotICAgICAgICBX
S1VJbnQ2NFJlZiBheGlzSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGF4aXNJbmRleEtleS5nZXQo
KSkpOwotICAgICAgICBXS0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVL
ZXkuZ2V0KCkpKTsKLQotICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFk
QXhpc1ZhbHVlKFdLVUludDY0R2V0VmFsdWUoZ2FtZXBhZEluZGV4KSwgV0tVSW50NjRHZXRWYWx1
ZShheGlzSW5kZXgpLCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7Ci0KKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIGdhbWVwYWRJbmRleCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIkdhbWVwYWRJbmRleCIpOworICAgICAgICBhdXRvIGF4aXNJbmRleCA9IHVpbnQ2NFZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkF4aXNJbmRleCIpOworICAgICAgICBhdXRvIHZhbHVl
ID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAg
V2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZShnYW1lcGFkSW5kZXgs
IGF4aXNJbmRleCwgdmFsdWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1vY2tH
YW1lcGFkQnV0dG9uVmFsdWUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25h
cnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFk
SW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFk
SW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBidXR0b25JbmRleEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbkluZGV4Iikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1VJbnQ2
NFJlZiBnYW1lcGFkSW5kZXggPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGdhbWVwYWRJbmRleEtleS5nZXQo
KSkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBidXR0b25JbmRleCA9IHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
YnV0dG9uSW5kZXhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0
aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV2ViQ29yZVRlc3RTdXBw
b3J0OjpzZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlKFdLVUludDY0R2V0VmFsdWUoZ2FtZXBhZElu
ZGV4KSwgV0tVSW50NjRHZXRWYWx1ZShidXR0b25JbmRleCksIFdLRG91YmxlR2V0VmFsdWUodmFs
dWUpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlW
YWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZ2FtZXBhZEluZGV4ID0gdWludDY0VmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiR2FtZXBhZEluZGV4Iik7CisgICAgICAgIGF1dG8g
YnV0dG9uSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJCdXR0b25J
bmRleCIpOworICAgICAgICBhdXRvIHZhbHVlID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2Ft
ZXBhZEJ1dHRvblZhbHVlKGdhbWVwYWRJbmRleCwgYnV0dG9uSW5kZXgsIHZhbHVlKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tE
aWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Im9yaWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIG9yaWdpbktleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBwYXJlbnRPcmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbldLID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBwYXJlbnRPcmlnaW5LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAg
ICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgYXV0byBvcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIm9yaWdpbiIpOworICAgICAgICBhdXRvIHBhcmVudE9yaWdpbldLID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGFyZW50T3JpZ2luIik7CiAgICAgICAgIHVu
c2lnbmVkIGNvdW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4ob3JpZ2luV0ssIHBhcmVudE9yaWdpbldLKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoY291bnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc0RvaW5nTWVkaWFDYXB0
dXJlIikpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNEb2luZ01lZGlh
Q2FwdHVyZSgpKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGNvdW50KSk7CiAgICAgfQorCisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc0RvaW5nTWVkaWFDYXB0dXJlIikpCisg
ICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuaXNEb2luZ01lZGlhQ2FwdHVyZSgpKSk7CiAgICAgCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDbGVhclN0YXRpc3RpY3NEYXRhRm9y
RG9tYWluIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgZG9tYWluID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuY2xlYXJTdGF0aXN0aWNzRGF0YUZvckRvbWFpbihkb21haW4pOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYXJTdGF0aXN0aWNzRGF0YUZvckRv
bWFpbihzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkRvZXNTdGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gZG9tYWluSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJEb21haW5JRCIpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgZG9tYWluSUQgPSBz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGRvbWFpbklES2V5LmdldCgpKSk7Ci0gICAgICAgIGJvb2wgZG9tYWlu
SURFeGlzdHMgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZG9lc1N0YXRpc3RpY3NEb21h
aW5JREV4aXN0SW5EYXRhYmFzZShXS1VJbnQ2NEdldFZhbHVlKGRvbWFpbklEKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
ZG9tYWluSURFeGlzdHMpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIGRvbWFpbklEID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
RG9tYWluSUQiKTsKKyAgICAgICAgYm9vbCBkb21haW5JREV4aXN0cyA9IFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5kb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlKGRvbWFp
bklEKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRvbWFpbklERXhp
c3RzKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzRW5hYmxlZCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NFbmFi
bGVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRW5hYmxlZChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NFcGhlbWVyYWwiKSkg
ewotICAgICAgICBib29sIGlzRXBoZW1lcmFsID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmlzU3RhdGlzdGljc0VwaGVtZXJhbCgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzRXBoZW1lcmFsKSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzRXBoZW1lcmFsKCkpKTsKICAg
ICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyIpKSB7CkBAIC0xMzY4LDIyNCArMTAxMywx
MjggQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5
bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1ByZXZhbGVudFJl
c291cmNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S1N0cmluZ0dldFR5cGVJRCgpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaXNQcmV2
YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UoaG9zdE5hbWUpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3Vs
dCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uoc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFs
ZW50KSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJJc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkp
OwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBib29sIGlzUHJldmFsZW50ID0gVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShob3N0TmFtZSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgYm9vbCBpc1ByZXZhbGVudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5pc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2Uoc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50
KSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VicmVzb3VyY2VIb3N0S2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3VicmVzb3VyY2VIb3N0Iikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVIb3N0S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0IikpOwotICAg
ICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgc3VicmVzb3VyY2VIb3N0ID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBzdWJyZXNvdXJjZUhvc3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9w
RnJhbWVIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3RLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZh
bHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBzdWJyZXNvdXJjZUhvc3QgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTdWJyZXNvdXJjZUhvc3QiKTsKKyAgICAgICAg
YXV0byB0b3BGcmFtZUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJU
b3BGcmFtZUhvc3QiKTsKICAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcihzdWJyZXNvdXJjZUhvc3QsIHRvcEZyYW1lSG9zdCk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1N1
YnJlc291cmNlVW5kZXIpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJGcmFtZUhv
c3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJGcmFtZUhv
c3QiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3RLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3QiKSk7
Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBzdWJGcmFtZUhvc3QgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHN1YkZyYW1lSG9zdEtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BG
cmFtZUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lSG9zdEtleS5nZXQoKSkpOwotCisg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBzdWJGcmFtZUhvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJTdWJGcmFtZUhvc3QiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZUhv
c3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BGcmFtZUhvc3QiKTsK
ICAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihzdWJG
cmFtZUhvc3QsIHRvcEZyYW1lSG9zdCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4g
cmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVu
ZGVyKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0
YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBob3N0UmVkaXJlY3RlZEZyb21LZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0UmVkaXJlY3RlZEZyb20iKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0UmVkaXJlY3RlZFRvS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdFJlZGlyZWN0ZWRUbyIpKTsKLSAgICAgICAg
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3RSZWRpcmVjdGVkRnJvbSA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgaG9zdFJlZGlyZWN0ZWRGcm9tS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhv
c3RSZWRpcmVjdGVkVG8gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3RSZWRpcmVjdGVkVG9LZXkuZ2V0
KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGlj
dGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0UmVkaXJlY3RlZEZy
b20gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0UmVkaXJlY3RlZEZy
b20iKTsKKyAgICAgICAgYXV0byBob3N0UmVkaXJlY3RlZFRvID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdFJlZGlyZWN0ZWRUbyIpOwogICAgICAgICBib29sIGlzUmVn
aXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0
YXRpc3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGhvc3RSZWRpcmVjdGVkRnJvbSwgaG9z
dFJlZGlyZWN0ZWRUbyk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8pKTsKICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0hhc0hh
ZFVzZXJJbnRlcmFjdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmlu
Z1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihob3N0TmFtZSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaGFzSGFkVXNlckludGVyYWN0aW9uKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keSkpOworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFzSGFkVXNl
ckludGVyYWN0aW9uKSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25h
cnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIGF1dG8gc3ViSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN1Ykhvc3QiKSk7Ci0gICAgICAgIGF1dG8gdG9wSG9zdEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEhvc3QiKSk7Ci0gICAgICAgIAot
ICAgICAgICBXS1N0cmluZ1JlZiBzdWJIb3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJIb3N0S2V5
LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHRvcEhvc3RLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc3ViSG9zdCA9
IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlN1Ykhvc3QiKTsKKyAgICAgICAg
YXV0byB0b3BIb3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wSG9z
dCIpOwogICAgICAgICBib29sIHN0YXRpc3RpY0luRGF0YWJhc2VPbmNlID0gVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZShzdWJIb3N0LCB0
b3BIb3N0KTsKICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHN0YXRpc3Rp
Y0luRGF0YWJhc2VPbmNlKSk7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYg
aG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7
Ci0gICAgICAgIAotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc0dyYW5kZmF0aGVyZWQoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBib29sZWFuVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKGhvc3ROYW1lLCB2YWx1
ZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0dyYW5kZmF0
aGVyZWQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
U3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBib29s
IGlzR3JhbmRmYXRoZXJlZCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3Rp
Y3NHcmFuZGZhdGhlcmVkKGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVyZWQpKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQgPSBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keSkpOworICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaXNHcmFuZGZhdGhlcmVkKSk7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRVc2VJVFBEYXRhYmFzZSIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotCi0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
VXNlSVRQRGF0YWJhc2UoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFVzZUlUUERhdGFiYXNlKGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNz
U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9w
RnJhbWVIb3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlRvcEZyYW1lSG9zdE5hbWUiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0
TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tT
dHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0
TmFtZUtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
ZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAgIGF1
dG8gdG9wRnJhbWVIb3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IlRvcEZyYW1lSG9zdE5hbWUiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oaG9zdE5hbWUsIHRvcEZy
YW1lSG9zdE5hbWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0
aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3Rh
dGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gdG9wRnJhbWVIb3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlRvcEZyYW1lSG9zdE5hbWUiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1Jl
ZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgdG9wRnJhbWVIb3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wRnJh
bWVIb3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRv
IGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUi
KTsKKyAgICAgICAgYXV0byB0b3BGcmFtZUhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVIb3N0TmFtZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdp
bihob3N0TmFtZSwgdG9wRnJhbWVIb3N0TmFtZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8iKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZVJlZGlyZWN0ZWRUb0tleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZFRvIikpOwotICAgICAg
ICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3RO
YW1lS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRv
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZVJlZGlyZWN0ZWRUb0tleS5nZXQoKSkpOwotICAg
ICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFs
dWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBob3N0TmFtZVJl
ZGlyZWN0ZWRUbyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1l
UmVkaXJlY3RlZFRvIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGhvc3ROYW1lLCBob3N0TmFtZVJl
ZGlyZWN0ZWRUbyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1N1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAot
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9z
dE5hbWVSZWRpcmVjdGVkRnJvbUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0
cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbUtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAg
ICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJv
ZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRGcm9t
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVjdGVk
RnJvbSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0
ZWRGcm9tKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Rv
cEZyYW1lVW5pcXVlUmVkaXJlY3RUbyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAg
ICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdL
RGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1l
UmVkaXJlY3RlZFRvS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdE5hbWVSZWRpcmVjdGVkVG8iKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBo
b3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAg
V0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3RO
YW1lUmVkaXJlY3RlZFRvS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAg
IGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0
TmFtZSIpOworICAgICAgICBhdXRvIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKTsKICAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0VG8oaG9zdE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZFRvKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9t
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkRnJvbUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZEZy
b20iKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWVSZWRpcmVjdGVkRnJvbSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkRnJv
bUtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1l
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAg
ICAgYXV0byBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpOwogICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9t
KGhvc3ROYW1lLCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24i
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlv
bmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgYXV0byBmcm9tSG9zdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkZyb21Ib3N0IikpOwotICAgICAgICBhdXRvIHRvSG9zdEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvSG9zdCIpKTsKLQotICAgICAg
ICBXS1N0cmluZ1JlZiBmcm9tSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZnJvbUhvc3RLZXkuZ2V0
KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdG9Ib3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b0hv
c3RLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBmcm9tSG9z
dCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkZyb21Ib3N0Iik7CisgICAg
ICAgIGF1dG8gdG9Ib3N0ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9I
b3N0Iik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbihmcm9tSG9zdCwgdG9Ib3N0KTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
b3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNf
Y2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oV0tEb3Vi
bGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGVWYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCkBAIC0xNjAw
LDk3ICsxMTQ5LDY5IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzTm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKFdLQm9vbGVhbkdldFZhbHVlKHZh
bHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0SXNSdW5u
aW5nVGVzdCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KFdLQm9vbGVhbkdldFZh
bHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzSXNSdW5uaW5nVGVzdChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKFdLQm9vbGVhbkdldFZhbHVlKHZh
bHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbGVhblZh
bHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlz
dGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChXS0RvdWJsZUdldFZhbHVl
KHNlY29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGlj
c0dyYW5kZmF0aGVyaW5nVGltZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91YmxlUmVmIHNl
Y29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGlt
ZShXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TWF4U3RhdGlz
dGljc0VudHJpZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0g
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyhXS1VJ
bnQ2NEdldFZhbHVlKGVudHJpZXMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1aW50NjRWYWx1ZShtZXNzYWdl
Qm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRQcnVuZUVudHJpZXNE
b3duVG8iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
VUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0gc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8oV0tVSW50NjRHZXRW
YWx1ZShlbnRyaWVzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rp
b25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJbmNsdWRlSHR0cE9ubHlDb29raWVzIikpOwotICAgICAgICAK
LSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1l
S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBpbmNsdWRlSHR0cE9ubHlDb29raWVz
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgCi0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhv
c3QoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKGluY2x1ZGVIdHRwT25seUNvb2tpZXMpKTsK
KyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVz
c2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byBpbmNsdWRlSHR0cE9ubHlD
b29raWVzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkluY2x1ZGVIdHRw
T25seUNvb2tpZXMiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRp
c3RpY3NEZWxldGVDb29raWVzRm9ySG9zdChob3N0TmFtZSwgaW5jbHVkZUh0dHBPbmx5Q29va2ll
cyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9y
YWdlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0
cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1l
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBo
b3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYm9vbCBoYXNMb2Nh
bFN0b3JhZ2UgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzSGFzTG9j
YWxTdG9yYWdlKGhvc3ROYW1lKTsKICAgICAgICAgYXV0byByZXN1bHQgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShoYXNMb2NhbFN0b3JhZ2UpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRG91
YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0NhY2hlTWF4
QWdlQ2FwKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwKGRvdWJsZVZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSGFzU3RhdGlzdGljc0lz
b2xhdGVkU2Vzc2lvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1Jl
ZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAg
ICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIGJv
b2wgaGFzSXNvbGF0ZWRTZXNzaW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc1N0
YXRpc3RpY3NJc29sYXRlZFNlc3Npb24oaG9zdE5hbWUpOwogICAgICAgICBhdXRvIHJlc3VsdCA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0lzb2xhdGVkU2Vzc2lvbikpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYXJET01DYWNoZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdL
U3RyaW5nUmVmIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7
Ci0KKyAgICAgICAgYXV0byBvcmlnaW4gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhckRPTUNhY2hlKG9yaWdpbik7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTE3MDEsMzUgKzEyMjIsMjQgQEAgV0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3Vz
TWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkhhc0RPTUNhY2hlIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgb3JpZ2luID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VC
b2R5KTsKLQorICAgICAgICBhdXRvIG9yaWdpbiA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsK
ICAgICAgICAgYm9vbCBoYXNET01DYWNoZSA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5o
YXNET01DYWNoZShvcmlnaW4pOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3Vs
dCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0RPTUNhY2hlKSk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNET01D
YWNoZSkpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiRE9NQ2FjaGVTaXplIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgb3JpZ2luID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQorICAg
ICAgICBhdXRvIG9yaWdpbiA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYXV0
byBkb21DYWNoZVNpemUgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZG9tQ2FjaGVTaXpl
KG9yaWdpbik7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShkb21DYWNoZVNpemUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZG9tQ2FjaGVTaXplKSk7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIGF1
dG8gY2FuSW5jcmVhc2UgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGNhbkluY3JlYXNlKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UoYm9vbGVh
blZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW5qZWN0
VXNlclNjcmlwdCIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmluamVjdFVzZXJTY3JpcHQoc2NyaXB0KTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmluamVjdFVzZXJTY3JpcHQoc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0xNzM5LDE1
ICsxMjQ5LDEyIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJl
Y2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTZXJ2aWNlV29ya2Vy
RmV0Y2hUaW1lb3V0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9
IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGlu
ZyhXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKGRvdWJsZVZh
bHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBhdXRvIHVz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIGF1dG8gdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSk7CiAgICAg
ICAgIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2Vzcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTE3NjUsNjAgKzEyNzIs
MzUgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5
bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFkZFRlc3RLZXlUb0tleWNoYWluIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25h
cnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiB0ZXN0S2V5RGljdGlvbmFy
eSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcml2YXRlS2V5S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUHJpdmF0ZUtleSIpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgcHJpdmF0ZUtleVdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkodGVzdEtleURpY3Rpb25hcnksIHByaXZhdGVLZXlLZXkuZ2V0KCkpKTsKLQot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpOwotICAgICAgICBXS1N0
cmluZ1JlZiBhdHRyTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KHRlc3RLZXlEaWN0aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkpKTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXBwbGljYXRpb25UYWdLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvblRhZyIpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgYXBwbGljYXRpb25UYWdXSyA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3RLZXlEaWN0aW9uYXJ5LCBhcHBs
aWNhdGlvblRhZ0tleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gdGVzdEtleURpY3Rpb25hcnkg
PSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHByaXZhdGVLZXlX
SyA9IHN0cmluZ1ZhbHVlKHRlc3RLZXlEaWN0aW9uYXJ5LCAiUHJpdmF0ZUtleSIpOworICAgICAg
ICBhdXRvIGF0dHJMYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdEtleURpY3Rpb25hcnksICJBdHRy
TGFiZWwiKTsKKyAgICAgICAgYXV0byBhcHBsaWNhdGlvblRhZ1dLID0gc3RyaW5nVmFsdWUodGVz
dEtleURpY3Rpb25hcnksICJBcHBsaWNhdGlvblRhZyIpOwogICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuYWRkVGVzdEtleVRvS2V5Y2hhaW4odG9XVEZTdHJpbmcocHJpdmF0ZUtl
eVdLKSwgdG9XVEZTdHJpbmcoYXR0ckxhYmVsV0spLCB0b1dURlN0cmluZyhhcHBsaWNhdGlvblRh
Z1dLKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYW5VcEtleWNoYWluIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiB0ZXN0RGljdGlvbmFyeSA9IHN0
YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBhdHRyTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGF0dHJM
YWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkodGVzdERpY3Rpb25hcnksIGF0dHJMYWJlbEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBhcHBsaWNhdGlvbkxhYmVsS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25MYWJlbCIpKTsKLSAgICAgICAgV0tT
dHJpbmdSZWYgYXBwbGljYXRpb25MYWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdERpY3Rpb25hcnksIGFwcGxpY2F0aW9uTGFiZWxL
ZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIHRlc3REaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZh
bHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBhdHRyTGFiZWxXSyA9IHN0cmluZ1ZhbHVl
KHRlc3REaWN0aW9uYXJ5LCAiQXR0ckxhYmVsIik7CisgICAgICAgIGF1dG8gYXBwbGljYXRpb25M
YWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERpY3Rpb25hcnksICJBcHBsaWNhdGlvbkxhYmVsIik7
CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhblVwS2V5Y2hhaW4odG9X
VEZTdHJpbmcoYXR0ckxhYmVsV0spLCBhcHBsaWNhdGlvbkxhYmVsV0sgPyB0b1dURlN0cmluZyhh
cHBsaWNhdGlvbkxhYmVsV0spIDogU3RyaW5nKCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIktleUV4aXN0c0luS2V5Y2hhaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIHRlc3REaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJMYWJl
bEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXR0ckxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0RGljdGlvbmFyeSwgYXR0ckxhYmVs
S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFwcGxpY2F0
aW9uTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBs
aWNhdGlvbkxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxhYmVsV0sg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0
RGljdGlvbmFyeSwgYXBwbGljYXRpb25MYWJlbEtleS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8g
dGVzdERpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIGF0dHJMYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERpY3Rpb25hcnksICJBdHRyTGFiZWwi
KTsKKyAgICAgICAgYXV0byBhcHBsaWNhdGlvbkxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0RGlj
dGlvbmFyeSwgIkFwcGxpY2F0aW9uTGFiZWwiKTsKICAgICAgICAgYm9vbCBrZXlFeGlzdHNJbktl
eWNoYWluID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmtleUV4aXN0c0luS2V5Y2hhaW4o
dG9XVEZTdHJpbmcoYXR0ckxhYmVsV0spLCB0b1dURlN0cmluZyhhcHBsaWNhdGlvbkxhYmVsV0sp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShrZXlFeGlzdHNJbktleWNoYWluKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShrZXlFeGlzdHNJbktleWNo
YWluKSk7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQiKSkgewot
ICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNlcnZlclRydXN0RXZhbHVhdGlvbkNh
bGxiYWNrQ2FsbHNDb3VudCgpKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2VydmVyVHJ1
c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50IikpCisgICAgICAgIHJldHVybiBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXJ2ZXJUcnVzdEV2
YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQoKSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0
c0FzeW5jaHJvbm91c2x5IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNB
c3luY2hyb25vdXNseShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3lu
Y2hyb25vdXNseShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCkBAIC0xODQ4LDE2ICsxMzMwLDEzIEBAIFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5q
ZWN0ZWRCCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKFdLQm9v
bGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sZWFuVmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmciKSkgewogICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVVJMR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS1VSTFJlZiB1cmwgPSBzdGF0aWNfY2FzdDxXS1VSTFJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvblVSTEZvclRlc3RpbmcodXJsKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKHN0YXRp
Y19jYXN0PFdLVVJMUmVmPihtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKQEAgLTE5MDIsMTcgKzEzODEsMTAgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6cnVu
VUlTaWRlU2NyaXB0KFdLU3RyaW5nUmVmIHNjcmlwdCwgdW5zaWduZWQgc2NyaXB0Q2FsbGJhY2sK
IAogdm9pZCBUZXN0SW52b2NhdGlvbjo6dWlTY3JpcHREaWRDb21wbGV0ZShjb25zdCBTdHJpbmcm
IHJlc3VsdCwgdW5zaWduZWQgc2NyaXB0Q2FsbGJhY2tJRCkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDYWxsVUlTaWRlU2NyaXB0Q2FsbGJhY2siKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVzdWx0S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzdWx0IikpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1VJbnQ2NFJlZj4gY2FsbGJhY2tJRFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzY3Jp
cHRDYWxsYmFja0lEKSk7Ci0KLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5Lmdl
dCgpLCByZXN1bHRLZXkuZ2V0KCksIHRvV0socmVzdWx0KS5nZXQoKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgY2FsbGJhY2tJREtleS5nZXQoKSwgY2FsbGJh
Y2tJRFZhbHVlLmdldCgpKTsKLQotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRs
ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUobWVz
c2FnZUJvZHksICJSZXN1bHQiLCByZXN1bHQpOworICAgIHNldFZhbHVlKG1lc3NhZ2VCb2R5LCAi
Q2FsbGJhY2tJRCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzY3JpcHRDYWxsYmFja0lEKSk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsVUlTaWRlU2NyaXB0Q2FsbGJhY2siLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246Om91dHB1dFRleHQoY29uc3QgV1RG
OjpTdHJpbmcmIHRleHQpCkBAIC0xOTIyLDE3NCArMTM5NCwxNDMgQEAgdm9pZCBUZXN0SW52b2Nh
dGlvbjo6b3V0cHV0VGV4dChjb25zdCBXVEY6OlN0cmluZyYgdGV4dCkKIAogdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZGlkQmVnaW5Td2lwZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bERpZEJlZ2luU3dpcGVDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZEJl
Z2luU3dpcGVDYWxsYmFjayIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjp3aWxsRW5kU3dp
cGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxXaWxsRW5kU3dpcGVDYWxsYmFj
ayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbFdpbGxFbmRTd2lwZUNhbGxiYWNrIik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZEVuZFN3aXBlKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsRGlkRW5kU3dpcGVDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiQ2FsbERpZEVuZFN3aXBlQ2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkUmVtb3ZlU3dpcGVTbmFwc2hvdCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bERpZFJlbW92ZVN3aXBlU25hcHNob3RDYWxsYmFjayIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
Q2FsbERpZFJlbW92ZVN3aXBlU25hcHNob3RDYWxsYmFjayIpOwogfQogCiB2b2lkIFRlc3RJbnZv
Y2F0aW9uOjpub3RpZnlEb3dubG9hZERvbmUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ik5vdGlmeURvd25sb2FkRG9uZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiTm90aWZ5RG93bmxv
YWREb25lIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc0lu
TWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
YWxsRGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKSk7Ci0gICAg
V0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3Rl
bnRTdG9yZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRDbGVhclN0YXRpc3RpY3NU
aHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
YWxsRGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpKTsKLSAgICBX
S1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiQ2FsbERpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJl
bW92YWwiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxkRG93bmdyYWRl
UmVmZXJyZXIoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRTaG91bGRE
b3duZ3JhZGVSZWZlcnJlciIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFNob3Vs
ZERvd25ncmFkZVJlZmVycmVyIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFNo
b3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkNhbGxEaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzIikpOwotICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyIpOwog
fQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJD
YWxsRGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiKTsKIH0KIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMoKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIpKTsK
LSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29r
aWVzIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEZpcnN0UGFydHlIb3N0Q05B
TUVEb21haW4oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRGaXJzdFBh
cnR5SG9zdENOQU1FRG9tYWluIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1
bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlk
U2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9u
OjpkaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkNhbGxEaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4iKSk7Ci0gICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxEaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4iKTsKIH0KIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkUmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUoKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3Rl
bnRTdGF0ZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlc2V0U3RhdGlzdGljc1Rv
Q29uc2lzdGVudFN0YXRlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldEJsb2Nr
Q29va2llc0Zvckhvc3QoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRC
bG9ja0Nvb2tpZXNGb3JIb3N0IikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1
bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0Qmxv
Y2tDb29raWVzRm9ySG9zdCIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRTdGF0
aXN0aWNzRGVidWdNb2RlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0
U3RhdGlzdGljc0RlYnVnTW9kZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFN0
YXRpc3RpY3NEZWJ1Z01vZGUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkNhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIpKTsKLSAgICBXS1BhZ2VQ
b3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlIik7CiB9CiAK
IHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldExhc3RTZWVuKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsRGlkU2V0TGFzdFNlZW4iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNh
bGxEaWRTZXRMYXN0U2VlbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRNZXJnZVN0
YXRpc3RpYygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZE1lcmdlU3RhdGlz
dGljIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkTWVyZ2VTdGF0aXN0aWMiKTsKIH0K
IAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0RXhwaXJlZFN0YXRpc3RpYygpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEV4cGlyZWRTdGF0aXN0aWMiKSk7Ci0gICAg
V0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRFeHBpcmVkU3RhdGlzdGljIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZSIpOwogfQogCiB2b2lkIFRlc3RJ
bnZvY2F0aW9uOjpkaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNhbGxEaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tQ
YWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UiKTsKIH0KIAogdm9p
ZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0SGFzSGFkVXNlckludGVyYWN0aW9uKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0SGFzSGFkVXNlckludGVyYWN0aW9uIikpOwot
ICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0SGFzSGFkVXNlckludGVyYWN0aW9uIik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmll
cyhWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Q2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllcyIpKTsKLSAgICAKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKLSAgICAg
ICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoZG9tYWluLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0gICAg
Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5Lmdl
dCgpLCB0b1dLKGRvbWFpbikuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJl
Y2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllcyIsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWlucyhW
ZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bERpZFJlY2VpdmVMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiKSk7Ci0gICAgCi0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVB
cnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVB
cnJheUNyZWF0ZSgpKTsKICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpCi0gICAgICAg
IFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGRvbWFpbi51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCi0gICAg
V0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCB0
b1dLKGRvbWFpbikuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFJlY2VpdmVM
b2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFscygpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0Nh
bGxiYWNrIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVtb3ZlQWxsU2Vzc2lvbkNy
ZWRlbnRpYWxzQ2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QXBw
Qm91bmREb21haW5zKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0QXBw
Qm91bmREb21haW5zIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0QXBw
Qm91bmREb21haW5zIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKCkKQEAgLTIxMDQsOCArMTU0NSw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246
OmR1bXBBZENsaWNrQXR0cmlidXRpb24oKQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpwZXJmb3Jt
Q3VzdG9tTWVudUFjdGlvbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGVyZm9ybUN1
c3RvbU1lbnVBY3Rpb24iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlBlcmZvcm1DdXN0b21NZW51
QWN0aW9uIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmluaXRpYWxpemVXYWl0VG9EdW1w
V2F0Y2hkb2dUaW1lcklmTmVlZGVkKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYTE1ZmMwYTBlOWFmYWUzNDFjY2NkMDYwMzgzZWQzMDFhNzI0MWI2Yi4uNjE3MThhYzY1
NTg4MTc3OGU4M2M5N2ZiZTE3ODI3OGM4NzBlNmI4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTM1NSw2ICszNTUsOCBAQAogCQk4NDFDQzAwRDE4MTE4NUJGMDA0MkU5
QjYgLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBP
cHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQxQ0MwMEUxODExODVC
RjAwNDJFOUI2IC8qIE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2
MDBEOTZCNUUgLyogV2ViS2l0VGVzdFJ1bm5lciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVk
ZUluSW5kZXggPSAwOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcjsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKKwkJOTMzOEQxQkEyNTBBNzlFQjAwRTgyN0Y2IC8qIEpTQmFzaWNz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEpTQmFzaWNzLmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVk
L0JpbmRpbmdzL0pTQmFzaWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMzhE
MUJFMjUwQkQ5REQwMEU4MjdGNiAvKiBEaWN0aW9uYXJ5RnVuY3Rpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpY3Rpb25hcnlGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTM3NjQxNzYyMTBENzM2MDAwQTNEQUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVyV2lu
ZG93Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzc2NDE3NzIxMEQ3MzYxMDBB
M0RBQUUgLyogV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVyV2luZG93Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzQzc4ODFGMjUwQzY5RTQwMEMwQUEyNCAvKiBSZWZ0ZXN0RnVuY3Rpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlZnRlc3RGdW5jdGlvbnMu
Y3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9SZWZ0ZXN0RnVuY3Rpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg5Miw2ICs4OTQsNyBAQAogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkzNzhENDQyMjEzMzQ2RDAwMDA2QTc3N0IgLyog
Y29uZmlnLmggKi8sCisJCQkJOTMzOEQxQkUyNTBCRDlERDAwRTgyN0Y2IC8qIERpY3Rpb25hcnlG
dW5jdGlvbnMuaCAqLywKIAkJCQlCQzk5QTQ4NDEyMDg5MDFBMDA3RTlGMDggLyogU3RyaW5nRnVu
Y3Rpb25zLmggKi8sCiAJCQkJOUIzNkEyNzAyMDk0NTNBMDAwM0UwNjUxIC8qIFdoYXRUb0R1bXAu
aCAqLywKIAkJCSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYk5vdGlm
aWNhdGlvblByb3ZpZGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0
aW9uUHJvdmlkZXIuY3BwCmluZGV4IDQ1ODY3N2Y1MDliMTE3NDM5M2FlNGMzOGNhMDk0NTdjOGU4
MGY4NGMuLmNkNWZjNjYyMTVhNGIwMzc5NjgyYzcyYjJlYzFkMWYwYjk4MDczYjIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCkBA
IC0xMjYsOCArMTI2LDggQEAgdm9pZCBXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6Y2xvc2VXZWJO
b3RpZmljYXRpb24oV0tOb3RpZmljYXRpb25SZWYgbm90aWZpY2F0aW8KIAogICAgIHJlbW92ZUds
b2JhbElERnJvbUlETWFwKG1fbG9jYWxUb0dsb2JhbE5vdGlmaWNhdGlvbklETWFwLCBpZCk7CiAK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gd2tJRCA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoaWQpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9w
dFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gd2tJRCA9IGFkb3B0V0soV0tV
SW50NjRDcmVhdGUoaWQpKTsKKyAgICBhdXRvIGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJh
eUNyZWF0ZSgpKTsKICAgICBXS0FycmF5QXBwZW5kSXRlbShhcnJheS5nZXQoKSwgd2tJRC5nZXQo
KSk7CiAgICAgV0tOb3RpZmljYXRpb25NYW5hZ2VyUHJvdmlkZXJEaWRDbG9zZU5vdGlmaWNhdGlv
bnMobm90aWZpY2F0aW9uTWFuYWdlciwgYXJyYXkuZ2V0KCkpOwogfQpAQCAtMTQ0LDcgKzE0NCw3
IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6OnJlbW92ZU5vdGlmaWNhdGlvbk1hbmFn
ZXIoV0tOb3RpZmljYXRpb25NYW5hZ2VyUmVmCiAgICAgYXV0byB0b1JlbW92ZSA9IGl0ZXJhdG9y
LT52YWx1ZTsKICAgICBXS1JldGFpblB0cjxXS05vdGlmaWNhdGlvbk1hbmFnZXJSZWY+IGd1YXJk
KG1hbmFnZXIpOwogICAgIG1fb3duZWROb3RpZmljYXRpb25zLnJlbW92ZShpdGVyYXRvcik7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRXSyhXS011dGFi
bGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRvIGFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJh
eUNyZWF0ZSgpKTsKICAgICBmb3IgKHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEIDogdG9SZW1vdmUp
IHsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9vd25pbmdNYW5hZ2VyLnJlbW92ZShub3RpZmlj
YXRpb25JRCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CkBAIC0x
NzMsNyArMTczLDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6cmVzZXQoKQogICAg
IGZvciAoYXV0byYgbm90aWZpY2F0aW9uUGFpciA6IG1fb3duZWROb3RpZmljYXRpb25zKSB7CiAg
ICAgICAgIGlmIChub3RpZmljYXRpb25QYWlyLnZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gYXJyYXkg
PSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgICAgICBhdXRvIGFycmF5ID0g
YWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICAgICAgZm9yICh1aW50NjRfdCBu
b3RpZmljYXRpb25JRCA6IG5vdGlmaWNhdGlvblBhaXIudmFsdWUpCiAgICAgICAgICAgICBXS0Fy
cmF5QXBwZW5kSXRlbShhcnJheS5nZXQoKSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShub3RpZmlj
YXRpb25JRCkpLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9X
b3JrUXVldWVNYW5hZ2VyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFu
YWdlci5jcHAKaW5kZXggMjBkNWExYWFkYjI5ZTMzMmJlMjliMmIxZjRjMjM2MDkxOWJhMGZmMS4u
YzlkNDdmZDYzYjg0ZTQ2ZTQ2MmE1MGZmNGJlMDdiZjM0NjhhY2E2MCAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiV29ya1F1ZXVlTWFuYWdlci5oIgogCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3Lmgi
CisjaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIu
aCIKICNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLUGFnZVBy
aXZhdGUuaD4KQEAgLTc1LDcgKzc2LDcgQEAgdGVtcGxhdGUgPFdvcmtRdWV1ZUl0ZW06OlR5cGUg
dHlwZT4KIGNsYXNzIFNjcmlwdEl0ZW0gOiBwdWJsaWMgV29ya1F1ZXVlSXRlbSB7CiBwdWJsaWM6
CiAgICAgZXhwbGljaXQgU2NyaXB0SXRlbShjb25zdCBTdHJpbmcmIHNjcmlwdCkKLSAgICAgICAg
OiBtX3NjcmlwdChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNjcmlwdC51
dGY4KCkuZGF0YSgpKSkpCisgICAgICAgIDogbV9zY3JpcHQodG9XSyhzY3JpcHQpKQogICAgIHsK
ICAgICB9CiAKQEAgLTE2MSw3ICsxNjIsNyBAQCB2b2lkIFdvcmtRdWV1ZU1hbmFnZXI6OnF1ZXVl
TG9hZEhUTUxTdHJpbmcoY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmCiAgICAg
Y2xhc3MgTG9hZEhUTUxTdHJpbmdJdGVtIDogcHVibGljIFdvcmtRdWV1ZUl0ZW0gewogICAgIHB1
YmxpYzoKICAgICAgICAgTG9hZEhUTUxTdHJpbmdJdGVtKGNvbnN0IFN0cmluZyYgY29udGVudCwg
Y29uc3QgU3RyaW5nJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIHVucmVhY2hhYmxlVVJMKQotICAg
ICAgICAgICAgOiBtX2NvbnRlbnQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
Zyhjb250ZW50LnV0ZjgoKS5kYXRhKCkpKSkKKyAgICAgICAgICAgIDogbV9jb250ZW50KHRvV0so
Y29udGVudCkpCiAgICAgICAgICAgICAsIG1fYmFzZVVSTChhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGJhc2VVUkwudXRmOCgpLmRhdGEoKSkpKQogICAgICAgICAgICAgLCBtX3Vu
cmVhY2hhYmxlVVJMKGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodW5yZWFjaGFi
bGVVUkwudXRmOCgpLmRhdGEoKSkpKQogICAgICAgICB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAppbmRleCA2NzMzOGY0YWE4MjczY2ZiNjg3MjI5
YmZiYWQzZmE0ZGRiMzdiNGRmLi4wMWM1MzFhOWI2YWNlOGU4MTY5NDhmNjc2Y2U2MzFmNTI3OTRi
NmM0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9u
Q0cuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5j
cHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVDR0NvbnRleHRG
cm9tQ0dJbWFnZShDR0ltYWdlUmVmIGltYWdlKQogICAgIHNpemVfdCByb3dCeXRlcyA9ICg0ICog
cGl4ZWxzV2lkZSArIDYzKSAmIH42MzsKIAogICAgIC8vIENyZWF0aW5nIHRoaXMgYml0bWFwIGlu
IHRoZSBkZXZpY2UgY29sb3Igc3BhY2Ugc2hvdWxkIHByZXZlbnQgYW55IGNvbG9yIGNvbnZlcnNp
b24gd2hlbiB0aGUgaW1hZ2Ugb2YgdGhlIHdlYiB2aWV3IGlzIGRyYXduIGludG8gaXQuCi0gICAg
UmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNw
YWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dD
b2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIHBpeGVsc1dpZGUsIHBpeGVsc0hpZ2gsIDgsIHJvd0J5
dGVzLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwg
a0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMgQ0dDb250ZXh0UmVmIGNyZWF0
ZUNHQ29udGV4dEZyb21DR0ltYWdlKENHSW1hZ2VSZWYgaW1hZ2UpCiAKIHN0YXRpYyBDR0NvbnRl
eHRSZWYgY3JlYXRlQ0dDb250ZXh0RnJvbUltYWdlKFdLSW1hZ2VSZWYgd2tJbWFnZSkKIHsKLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKFdLSW1hZ2VDcmVhdGVDR0lt
YWdlKHdrSW1hZ2UpKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihXS0ltYWdlQ3JlYXRlQ0dJ
bWFnZSh3a0ltYWdlKSk7CiAgICAgcmV0dXJuIGNyZWF0ZUNHQ29udGV4dEZyb21DR0ltYWdlKGlt
YWdlLmdldCgpKTsKIH0KIApAQCAtMTA5LDkgKzEwOSw5IEBAIHZvaWQgY29tcHV0ZVNIQTFIYXNo
U3RyaW5nRm9yQ29udGV4dChDR0NvbnRleHRSZWYgYml0bWFwQ29udGV4dCwgY2hhciBoYXNoU3Ry
aW5nCiAKIHN0YXRpYyB2b2lkIGR1bXBCaXRtYXAoQ0dDb250ZXh0UmVmIGJpdG1hcENvbnRleHQs
IGNvbnN0IGNoYXIqIGNoZWNrc3VtKQogewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFn
ZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dCkpOwot
ICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBpbWFnZURhdGEgPSBhZG9wdENGKENGRGF0
YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25S
ZWY+IGltYWdlRGVzdCA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEo
aW1hZ2VEYXRhLmdldCgpLCBrVVRUeXBlUE5HLCAxLCAwKSk7CisgICAgYXV0byBpbWFnZSA9IGFk
b3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dCkpOworICAgIGF1
dG8gaW1hZ2VEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKyAgICBh
dXRvIGltYWdlRGVzdCA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEo
aW1hZ2VEYXRhLmdldCgpLCBrVVRUeXBlUE5HLCAxLCAwKSk7CiAgICAgQ0dJbWFnZURlc3RpbmF0
aW9uQWRkSW1hZ2UoaW1hZ2VEZXN0LmdldCgpLCBpbWFnZS5nZXQoKSwgMCk7CiAgICAgQ0dJbWFn
ZURlc3RpbmF0aW9uRmluYWxpemUoaW1hZ2VEZXN0LmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9DcmFzaFJlcG9ydGVySW5mby5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0KaW5kZXggNGM3OWFiNWI4
NWQ2NDE4OWE3ZTBhMjk2ZWVhOTBjMWQ4MTE4ZGMzZC4uNDEwZDlmZGNiMzFlMmM2ZTZjYTc2NDk1
NjE0NjA2MzhjMDkxMDVlYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2Nv
YS9DcmFzaFJlcG9ydGVySW5mby5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29h
L0NyYXNoUmVwb3J0ZXJJbmZvLm1tCkBAIC0zNSwxMiArMzUsMTIgQEAgbmFtZXNwYWNlIFdUUiB7
CiAKIHN0YXRpYyBTdHJpbmcgdGVzdFBhdGhGcm9tVVJMKFdLVVJMUmVmIHVybCkKIHsKLSAgICBS
ZXRhaW5QdHI8Q0ZVUkxSZWY+IGNmVVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCB1cmwpKTsKKyAgICBhdXRvIGNmVVJMID0gYWRvcHRDRihXS1VSTENvcHlD
RlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmwpKTsKICAgICBpZiAoIWNmVVJMKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjaGVtZUNG
U3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlTY2hlbWUoY2ZVUkwuZ2V0KCkpKTsKLSAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5UGF0aChj
ZlVSTC5nZXQoKSkpOworICAgIGF1dG8gc2NoZW1lQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29w
eVNjaGVtZShjZlVSTC5nZXQoKSkpOworICAgIGF1dG8gcGF0aENGU3RyaW5nID0gYWRvcHRDRihD
RlVSTENvcHlQYXRoKGNmVVJMLmdldCgpKSk7CiAKICAgICBTdHJpbmcgc2NoZW1lU3RyaW5nKHNj
aGVtZUNGU3RyaW5nLmdldCgpKTsKICAgICBTdHJpbmcgcGF0aFN0cmluZyhwYXRoQ0ZTdHJpbmcu
Z2V0KCkpOwpAQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgU3RyaW5nIHRlc3RQYXRoRnJvbVVSTChX
S1VSTFJlZiB1cmwpCiAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hl
bWVTdHJpbmcsICJodHRwIikgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVt
ZVN0cmluZywgImh0dHBzIikpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gaG9zdENGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlIb3N0TmFt
ZShjZlVSTC5nZXQoKSkpOworICAgIGF1dG8gaG9zdENGU3RyaW5nID0gYWRvcHRDRihDRlVSTENv
cHlIb3N0TmFtZShjZlVSTC5nZXQoKSkpOwogICAgIFN0cmluZyBob3N0U3RyaW5nKGhvc3RDRlN0
cmluZy5nZXQoKSk7CiAgICAgaWYgKGhvc3RTdHJpbmcgPT0gIjEyNy4wLjAuMSIpCiAgICAgICAg
IHJldHVybiBwYXRoU3RyaW5nOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9j
b2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2Nv
YS9UZXN0Q29udHJvbGxlckNvY29hLm1tCmluZGV4IDM2NTMzN2FkZjk5ZjBiOWNkZDZhZjA5N2Zj
MDJiZTg3YTY3MTY2NTcuLjcxMzAzMjZhM2U2MWNlMmJkMGE3NmRmNzI4OThkOWU0YjAwNjNiMDQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJD
b2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVy
Q29jb2EubW0KQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bUluaXRpYWxpemVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3QgVAogCiB2
b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZVdlYlZpZXcoV0tQYWdlQ29uZmlndXJh
dGlvblJlZiwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgUmV0YWluUHRyPFdL
V2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtnbG9i
YWxXZWJWaWV3Q29uZmlndXJhdGlvbiBjb3B5XSk7CisgICAgYXV0byBjb3BpZWRDb25maWd1cmF0
aW9uID0gYWRvcHROUyhbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24gY29weV0pOwogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAob3B0aW9ucy51c2VEYXRhRGV0ZWN0aW9uKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJW
aWV3Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3
Lm1tCmluZGV4IDVjODYyZTliMGVjNzdkMDVlMDc3MjlkY2U2NDc2ZjU4OTIxMjNiMzguLjkxNWY0
NzZjNjE1YWU2MTA5MGQ5MGNhNzk3NmJmOGYyYzk5YjU2NmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KQEAgLTkwLDcgKzkw
LDcgQEAgSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJkZXByZWNhdGVkLWltcGxlbWVudGF0aW9ucyIp
CiAtICh2b2lkKWRyYWdJbWFnZTooTlNJbWFnZSAqKWFuSW1hZ2UgYXQ6KE5TUG9pbnQpdmlld0xv
Y2F0aW9uIG9mZnNldDooTlNTaXplKWluaXRpYWxPZmZzZXQgZXZlbnQ6KE5TRXZlbnQgKilldmVu
dCBwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYm9hcmQgc291cmNlOihpZClzb3VyY2VPYmog
c2xpZGVCYWNrOihCT09MKXNsaWRlRmxhZwogSUdOT1JFX1dBUk5JTkdTX0VORAogewotICAgIFJl
dGFpblB0cjxXZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZvPiBkcmFnZ2luZ0luZm8gPSBhZG9w
dE5TKFtbV2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mbyBhbGxvY10gaW5pdFdpdGhJbWFnZTph
bkltYWdlIG9mZnNldDppbml0aWFsT2Zmc2V0IHBhc3RlYm9hcmQ6cGJvYXJkIHNvdXJjZTpzb3Vy
Y2VPYmpdKTsKKyAgICBhdXRvIGRyYWdnaW5nSW5mbyA9IGFkb3B0TlMoW1tXZWJLaXRUZXN0UnVu
bmVyRHJhZ2dpbmdJbmZvIGFsbG9jXSBpbml0V2l0aEltYWdlOmFuSW1hZ2Ugb2Zmc2V0OmluaXRp
YWxPZmZzZXQgcGFzdGVib2FyZDpwYm9hcmQgc291cmNlOnNvdXJjZU9ial0pOwogICAgIFtzZWxm
IGRyYWdnaW5nVXBkYXRlZDpkcmFnZ2luZ0luZm8uZ2V0KCldOwogfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29h
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29h
LmgKaW5kZXggYWJjMGE1MGM5NzBjMWJiMzNmMWZiMTA5MzkzNTJhZjhjYTdlMDQwMy4uY2M5ODEz
OTQyNGYyODgwNjQ0Mzk4OTgzNDVjM2U3ZDRlYTU1MzM3OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5oCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaApAQCAtMzIs
MTIgKzMyLDE3IEBAIE9CSkNfQ0xBU1MgVGVzdFJ1bm5lcldLV2ViVmlldzsKIG5hbWVzcGFjZSBX
VFIgewogCiBjbGFzcyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSA6IHB1YmxpYyBVSVNjcmlwdENv
bnRyb2xsZXJDb21tb24gewotcHVibGljOgorcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFVJU2Ny
aXB0Q29udHJvbGxlckNvY29hKFVJU2NyaXB0Q29udGV4dCYpOworICAgIFRlc3RSdW5uZXJXS1dl
YlZpZXcgKndlYlZpZXcoKSBjb25zdDsKKworICAgIHZvaWQgZG9Bc3luY1Rhc2soSlNWYWx1ZVJl
Zikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CiAgICAgdm9pZCBzZXRWaWV3U2NhbGUoZG91YmxlKSBv
dmVycmlkZTsKICAgICB2b2lkIHNldE1pbmltdW1FZmZlY3RpdmVXaWR0aChkb3VibGUpIG92ZXJy
aWRlOwogICAgIHZvaWQgYmVjb21lRmlyc3RSZXNwb25kZXIoKSBvdmVycmlkZTsKICAgICB2b2lk
IHJlc2lnbkZpcnN0UmVzcG9uZGVyKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkb0FzeW5jVGFzayhK
U1ZhbHVlUmVmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZVZpZXdGcm9tV2luZG93KEpTVmFs
dWVSZWYpIG92ZXJyaWRlOwogICAgIHZvaWQgYWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYpIG92
ZXJyaWRlOwogICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmLCBKU1N0cmlu
Z1JlZikgb3ZlcnJpZGU7CkBAIC01OSwxMSArNjQsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGlu
c2VydEF0dGFjaG1lbnRGb3JGaWxlUGF0aChKU1N0cmluZ1JlZiBmaWxlUGF0aCwgSlNTdHJpbmdS
ZWYgY29udGVudFR5cGUsIEpTVmFsdWVSZWYgY2FsbGJhY2spIG92ZXJyaWRlOwogCi1wcm90ZWN0
ZWQ6Ci0gICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EoVUlTY3JpcHRDb250ZXh0
Jik7Ci0gICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldygpIGNvbnN0OwotCi1wcml2YXRl
OgogICAgIHZvaWQgY29tcGxldGVUYXNrQXN5bmNocm9ub3VzbHlBZnRlckFjdGl2aXR5U3RhdGVV
cGRhdGUodW5zaWduZWQgY2FsbGJhY2tJRCk7CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQppbmRleCA5OGJi
NzRiNDEzYjk1MDNlNjk4ODA3ZWRiODYyOThlMzcwZGNkMGYyLi41ODQ3OTc2ZjIxODU3ZjUzZjQ4
NWVjYjFmYjFlYjkxMTcyMWE1NmRhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0KQEAgLTEzNSwyMiArMTM1LDE4
IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2E6OmFkZFZpZXdUb1dpbmRvdyhKU1ZhbHVl
UmVmIGNhbGxiYWNrKQogCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpvdmVycmlkZVBy
ZWZlcmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVyZW5jZVJlZiwgSlNTdHJpbmdSZWYgdmFsdWVSZWYp
CiB7Ci0gICAgV0tQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSB3ZWJWaWV3KCkuY29uZmlndXJh
dGlvbi5wcmVmZXJlbmNlczsKLQotICAgIFN0cmluZyBwcmVmZXJlbmNlID0gdG9XVEZTdHJpbmco
dG9XSyhwcmVmZXJlbmNlUmVmKSk7Ci0gICAgU3RyaW5nIHZhbHVlID0gdG9XVEZTdHJpbmcodG9X
Syh2YWx1ZVJlZikpOwotICAgIGlmIChwcmVmZXJlbmNlID09ICJXZWJLaXRNaW5pbXVtRm9udFNp
emUiKQotICAgICAgICBwcmVmZXJlbmNlcy5taW5pbXVtRm9udFNpemUgPSB2YWx1ZS50b0RvdWJs
ZSgpOworICAgIGlmICh0b1dURlN0cmluZyhwcmVmZXJlbmNlUmVmKSA9PSAiV2ViS2l0TWluaW11
bUZvbnRTaXplIikKKyAgICAgICAgd2ViVmlldygpLmNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMu
bWluaW11bUZvbnRTaXplID0gdG9XVEZTdHJpbmcodmFsdWVSZWYpLnRvRG91YmxlKCk7CiB9CiAK
IHZvaWQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2E6OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgc3Ry
aW5nLCB1bnNpZ25lZCBsb25nIG9wdGlvbnMsIHVuc2lnbmVkIGxvbmcgbWF4Q291bnQpCiB7Ci0g
ICAgW3dlYlZpZXcoKSBfZmluZFN0cmluZzp0b1dURlN0cmluZyh0b1dLKHN0cmluZykpIG9wdGlv
bnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3VudF07CisgICAgW3dlYlZpZXcoKSBfZmluZFN0cmlu
Zzp0b1dURlN0cmluZyhzdHJpbmcpIG9wdGlvbnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3VudF07
CiB9CiAKIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpjb250ZW50c09mVXNl
ckludGVyZmFjZUl0ZW0oSlNTdHJpbmdSZWYgaW50ZXJmYWNlSXRlbSkgY29uc3QKIHsKLSAgICBO
U0RpY3Rpb25hcnkgKmNvbnRlbnREaWN0aW9uYXJ5ID0gW3dlYlZpZXcoKSBfY29udGVudHNPZlVz
ZXJJbnRlcmZhY2VJdGVtOnRvV1RGU3RyaW5nKHRvV0soaW50ZXJmYWNlSXRlbSkpXTsKKyAgICBO
U0RpY3Rpb25hcnkgKmNvbnRlbnREaWN0aW9uYXJ5ID0gW3dlYlZpZXcoKSBfY29udGVudHNPZlVz
ZXJJbnRlcmZhY2VJdGVtOnRvV1RGU3RyaW5nKGludGVyZmFjZUl0ZW0pXTsKICAgICByZXR1cm4g
SlNWYWx1ZVRvT2JqZWN0KG1fY29udGV4dC0+anNDb250ZXh0KCksIFtKU1ZhbHVlIHZhbHVlV2l0
aE9iamVjdDpjb250ZW50RGljdGlvbmFyeSBpbkNvbnRleHQ6W0pTQ29udGV4dCBjb250ZXh0V2l0
aEpTR2xvYmFsQ29udGV4dFJlZjptX2NvbnRleHQtPmpzQ29udGV4dCgpXV0uSlNWYWx1ZVJlZiwg
bnVsbHB0cik7CiB9CiAKQEAgLTIxOSwxMiArMjE1LDEwIEBAIHZvaWQgVUlTY3JpcHRDb250cm9s
bGVyQ29jb2E6OnBhc3RlKCkKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2E6Omluc2VydEF0
dGFjaG1lbnRGb3JGaWxlUGF0aChKU1N0cmluZ1JlZiBmaWxlUGF0aCwgSlNTdHJpbmdSZWYgY29u
dGVudFR5cGUsIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgdW5zaWduZWQgY2FsbGJhY2tJ
RCA9IG1fY29udGV4dC0+cHJlcGFyZUZvckFzeW5jVGFzayhjYWxsYmFjaywgQ2FsbGJhY2tUeXBl
Tm9uUGVyc2lzdGVudCk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHRlc3RVUkwgPSBhZG9w
dENGKFdLVVJMQ29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1bHQsIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5jdXJyZW50VGVzdFVSTCgpKSk7Ci0gICAgUmV0YWluUHRyPE5TVVJMPiBhdHRh
Y2htZW50VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0b1dURlN0cmluZyh0b1dLKGZpbGVQ
YXRoKSkgcmVsYXRpdmVUb1VSTDooX19icmlkZ2UgTlNVUkwgKil0ZXN0VVJMLmdldCgpXTsKLQot
ICAgIGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5p
dFdpdGhVUkw6YXR0YWNobWVudFVSTC5nZXQoKSBvcHRpb25zOjAgZXJyb3I6bmlsXSk7Ci0gICAg
W3dlYlZpZXcoKSBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlci5n
ZXQoKSBjb250ZW50VHlwZTp0b1dURlN0cmluZyh0b1dLKGNvbnRlbnRUeXBlKSkgY29tcGxldGlv
bjpeKEJPT0wgc3VjY2VzcykgeworICAgIGF1dG8gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5
Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmN1
cnJlbnRUZXN0VVJMKCkpKTsKKyAgICBhdXRvIGF0dGFjaG1lbnRVUkwgPSBbTlNVUkwgZmlsZVVS
TFdpdGhQYXRoOnRvV1RGU3RyaW5nKGZpbGVQYXRoKSByZWxhdGl2ZVRvVVJMOihfX2JyaWRnZSBO
U1VSTCAqKXRlc3RVUkwuZ2V0KCldOworICAgIGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtb
TlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFdpdGhVUkw6YXR0YWNobWVudFVSTCBvcHRpb25zOjAg
ZXJyb3I6bmlsXSk7CisgICAgW3dlYlZpZXcoKSBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3Jh
cHBlcjpmaWxlV3JhcHBlci5nZXQoKSBjb250ZW50VHlwZTp0b1dURlN0cmluZyhjb250ZW50VHlw
ZSkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgewogICAgICAgICBpZiAoIW1fY29udGV4dCkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9jb250ZXh0LT5hc3luY1Rhc2tDb21wbGV0
ZShjYWxsYmFja0lEKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJ
REV2ZW50R2VuZXJhdG9yLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRH
ZW5lcmF0b3IubW0KaW5kZXggZTI5ODM4YmE4MjhmYjRiZDkwODU3YWI2YmVmMmZkNDY1OWZiNDIx
OC4uMGM0NDYzMzViMjQwZDZhN2UwNjc0MTRjYTljMzA0MGFhNmUzNTQ2MyAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IubW0KKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IubW0KQEAgLTE4OSw3ICsx
ODksNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdAogCiAtICh2b2lkKV9zZW5kSU9ISURLZXlib2Fy
ZEV2ZW50Oih1aW50NjRfdCl0aW1lc3RhbXAgdXNhZ2U6KHVpbnQzMl90KXVzYWdlIGlzS2V5RG93
bjooYm9vbClpc0tleURvd24KIHsKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRS
ZWYgPSBhZG9wdENGKElPSElERXZlbnRDcmVhdGVLZXlib2FyZEV2ZW50KGtDRkFsbG9jYXRvckRl
ZmF1bHQsCisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0ZUtleWJv
YXJkRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwKICAgICAgICAgdGltZXN0YW1wLAogICAgICAg
ICBrSElEUGFnZV9LZXlib2FyZE9yS2V5cGFkLAogICAgICAgICB1c2FnZSwKQEAgLTM2MSw3ICsz
NjEsNyBAQCAtIChJT0hJREV2ZW50UmVmKV9jcmVhdGVJT0hJREV2ZW50VHlwZTooSGFuZEV2ZW50
VHlwZSlldmVudFR5cGUKICAgICAgICAgZXZlbnRNYXNrIHw9IGtJT0hJRERpZ2l0aXplckV2ZW50
SWRlbnRpdHk7CiAKICAgICB1aW50NjRfdCBtYWNoVGltZSA9IG1hY2hfYWJzb2x1dGVfdGltZSgp
OwotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURF
dmVudENyZWF0ZURpZ2l0aXplckV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1hY2hUaW1lLAor
ICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKElPSElERXZlbnRDcmVhdGVEaWdpdGl6ZXJFdmVu
dChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtYWNoVGltZSwKICAgICAgICAga0lPSElERGlnaXRpemVy
VHJhbnNkdWNlclR5cGVIYW5kLAogICAgICAgICAwLAogICAgICAgICAwLApAQCAtNDUzLDcgKzQ1
Myw3IEBAIC0gKEJPT0wpX3NlbmRISURFdmVudDooSU9ISURFdmVudFJlZilldmVudFJlZgogICAg
ICAgICBfaW9TeXN0ZW1DbGllbnQgPSBJT0hJREV2ZW50U3lzdGVtQ2xpZW50Q3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQpOwogCiAgICAgaWYgKGV2ZW50UmVmKSB7Ci0gICAgICAgIFJldGFpblB0
cjxJT0hJREV2ZW50UmVmPiBzdHJvbmdFdmVudCA9IGV2ZW50UmVmOworICAgICAgICBhdXRvIHN0
cm9uZ0V2ZW50ID0gcmV0YWluUHRyKGV2ZW50UmVmKTsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKICAgICAgICAgICAgIHVpbnQzMl90IGNvbnRl
eHRJRCA9IFtVSUFwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9uXS5rZXlXaW5kb3cuX2NvbnRl
eHRJZDsKICAgICAgICAgICAgIEFTU0VSVChjb250ZXh0SUQpOwpAQCAtNTEyLDcgKzUxMiw3IEBA
IC0gKHZvaWQpX3VwZGF0ZVRvdWNoUG9pbnRzOihDR1BvaW50Kilwb2ludHMgY291bnQ6KE5TVUlu
dGVnZXIpY291bnQKICAgICAgICAgW1tHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVk
R2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93XSB1cGRhdGVEZWJ1Z0luZGljYXRvckZvclRvdWNo
Omkgd2l0aFBvaW50SW5XaW5kb3dDb29yZGluYXRlczpwb2ludHNbaV0gaXNUb3VjaGluZzpZRVNd
OwogICAgIH0KICAgICAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBh
ZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpoYW5kRXZlbnRUeXBlXSk7CisgICAg
YXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOmhhbmRF
dmVudFR5cGVdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0K
IApAQCAtNTI5LDcgKzUyOSw3IEBAIC0gKHZvaWQpdG91Y2hEb3duQXRQb2ludHM6KENHUG9pbnQq
KWxvY2F0aW9ucyB0b3VjaENvdW50OihOU1VJbnRlZ2VyKXRvdWNoQ291bnQKICAgICAgICAgW1tH
ZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVkR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2lu
ZG93XSB1cGRhdGVEZWJ1Z0luZGljYXRvckZvclRvdWNoOmluZGV4IHdpdGhQb2ludEluV2luZG93
Q29vcmRpbmF0ZXM6bG9jYXRpb25zW2luZGV4XSBpc1RvdWNoaW5nOllFU107CiAgICAgfQogCi0g
ICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3Jl
YXRlSU9ISURFdmVudFR5cGU6SGFuZEV2ZW50VG91Y2hlZF0pOworICAgIGF1dG8gZXZlbnRSZWYg
PSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpIYW5kRXZlbnRUb3VjaGVkXSk7
CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTU2Myw3
ICs1NjMsNyBAQCAtICh2b2lkKWxpZnRVcEF0UG9pbnRzOihDR1BvaW50Kilsb2NhdGlvbnMgdG91
Y2hDb3VudDooTlNVSW50ZWdlcil0b3VjaENvdW50CiAgICAgICAgIFtbR2VuZXJhdGVkVG91Y2hl
c0RlYnVnV2luZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvd10gdXBkYXRlRGVi
dWdJbmRpY2F0b3JGb3JUb3VjaDppbmRleCB3aXRoUG9pbnRJbldpbmRvd0Nvb3JkaW5hdGVzOkNH
UG9pbnRaZXJvIGlzVG91Y2hpbmc6Tk9dOwogICAgIH0KICAgICAKLSAgICBSZXRhaW5QdHI8SU9I
SURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlw
ZTpIYW5kRXZlbnRMaWZ0ZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBf
Y3JlYXRlSU9ISURFdmVudFR5cGU6SGFuZEV2ZW50TGlmdGVkXSk7CiAgICAgW3NlbGYgX3NlbmRI
SURFdmVudDpldmVudFJlZi5nZXQoKV07CiAgICAgCiAgICAgX2FjdGl2ZVBvaW50Q291bnQgPSBu
ZXdQb2ludENvdW50OwpAQCAtNjQxLDcgKzY0MSw3IEBAIC0gKHZvaWQpc3R5bHVzRG93bkF0UG9p
bnQ6KENHUG9pbnQpbG9jYXRpb24gYXppbXV0aEFuZ2xlOihDR0Zsb2F0KWF6aW11dGhBbmdsZSBh
CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hemltdXRoQW5nbGUgPSBNX1BJICogMiAtIGF6aW11dGhB
bmdsZTsKICAgICBfYWN0aXZlUG9pbnRzWzBdLmFsdGl0dWRlQW5nbGUgPSBNX1BJXzIgLSBhbHRp
dHVkZUFuZ2xlOwogCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRv
cHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRUb3VjaGVkXSk7Cisg
ICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0
eWx1c0V2ZW50VG91Y2hlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0
KCldOwogfQogCkBAIC02NTUsNyArNjU1LDcgQEAgLSAodm9pZClzdHlsdXNNb3ZlVG9Qb2ludDoo
Q0dQb2ludClsb2NhdGlvbiBhemltdXRoQW5nbGU6KENHRmxvYXQpYXppbXV0aEFuZ2xlIGEKICAg
ICBfYWN0aXZlUG9pbnRzWzBdLmF6aW11dGhBbmdsZSA9IE1fUEkgKiAyIC0gYXppbXV0aEFuZ2xl
OwogICAgIF9hY3RpdmVQb2ludHNbMF0uYWx0aXR1ZGVBbmdsZSA9IE1fUElfMiAtIGFsdGl0dWRl
QW5nbGU7CiAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENG
KFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudE1vdmVkXSk7CisgICAgYXV0
byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2
ZW50TW92ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0K
IApAQCAtNjY4LDcgKzY2OCw3IEBAIC0gKHZvaWQpc3R5bHVzVXBBdFBvaW50OihDR1BvaW50KWxv
Y2F0aW9uCiAgICAgX2FjdGl2ZVBvaW50c1swXS5hemltdXRoQW5nbGUgPSAwOwogICAgIF9hY3Rp
dmVQb2ludHNbMF0uYWx0aXR1ZGVBbmdsZSA9IDA7CiAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVu
dFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpTdHls
dXNFdmVudExpZnRlZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVh
dGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudExpZnRlZF0pOwogICAgIFtzZWxmIF9zZW5kSElE
RXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC0xMDIxLDcgKzEwMjEsNyBAQCAtICh2b2lk
KWRpc3BhdGNoRXZlbnRXaXRoSW5mbzooTlNEaWN0aW9uYXJ5ICopZXZlbnRJbmZvCiB7CiAgICAg
QVNTRVJUKFtOU1RocmVhZCBpc01haW5UaHJlYWRdKTsKIAotICAgIFJldGFpblB0cjxJT0hJREV2
ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRXaXRoSW5m
bzpldmVudEluZm9dKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRl
SU9ISURFdmVudFdpdGhJbmZvOmV2ZW50SW5mb10pOwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6
ZXZlbnRSZWYuZ2V0KCldOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1VJU2NyaXB0Q29udHJvbGxlcklPUy5oCmluZGV4IDI4ZDA2MGM2ZGZjNDcxYTkwNTQ5MDY4Mzk1
YzNkNDBmNmE5YzA5NmIuLjg1NDY0NDc2NmQ4YmM1YTgxNWQyNjdlOWE3YmE0YTIwNWQ2ZTYxMjIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5oCkBAIC0yNSwxMSArMjUsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorCiAjaW1wb3J0ICJVSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5oIgogI2lt
cG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgRmxvYXRSZWN0OwpAQCAt
MzcsMTMgKzM3LDE0IEBAIGNsYXNzIEZsb2F0UmVjdDsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNs
YXNzIFVJU2NyaXB0Q29udHJvbGxlcklPUyA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb2Nv
YSB7CitjbGFzcyBVSVNjcmlwdENvbnRyb2xsZXJJT1MgZmluYWwgOiBwdWJsaWMgVUlTY3JpcHRD
b250cm9sbGVyQ29jb2EgewogcHVibGljOgogICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29udHJvbGxl
cklPUyhVSVNjcmlwdENvbnRleHQmIGNvbnRleHQpCiAgICAgICAgIDogVUlTY3JpcHRDb250cm9s
bGVyQ29jb2EoY29udGV4dCkKICAgICB7CiAgICAgfQogCitwcml2YXRlOgogICAgIHZvaWQgd2Fp
dEZvck91dHN0YW5kaW5nQ2FsbGJhY2tzKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkb0FmdGVyUHJl
c2VudGF0aW9uVXBkYXRlKEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIHZvaWQgZG9BZnRlck5l
eHRTdGFibGVQcmVzZW50YXRpb25VcGRhdGUoSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CkBAIC0xNTYs
NyArMTU3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGlkRW5kU2Nyb2xsaW5nQ2FsbGJhY2so
SlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhckFsbENhbGxiYWNrcygpIG92ZXJy
aWRlOwogCi1wcml2YXRlOgogICAgIHZvaWQgd2FpdEZvck1vZGFsVHJhbnNpdGlvblRvRmluaXNo
KCkgY29uc3Q7CiAgICAgdm9pZCB3YWl0Rm9yU2luZ2xlVGFwVG9SZXNldCgpIGNvbnN0OwogICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0Rm9yTWVudUFjdGlvbihDRlN0cmluZ1JlZikgY29uc3Q7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xs
ZXJJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJ
T1MubW0KaW5kZXggMTMwYzQ5N2MyNDBkODM4YmI0YWZmZmQyMDczMTQxNzVhODNkYmIyNi4uN2Fm
NmVjZjUwOTg1ZjE1ZWY0N2MxOTE4YjY1YTJlYmRhNmQyNmEwOCAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQpAQCAtNjgsMjQg
KzY4LDE0IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnRvTlNEaWN0aW9uYXJ5KENHUmVjdCByZWN0
KQogICAgIH07CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBhcnJheUxlbmd0aChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgYXJyYXkpCi17Ci0gICAgYXV0byBsZW5ndGhTdHJpbmcgPSBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGlmIChh
dXRvIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBhcnJheSwgbGVu
Z3RoU3RyaW5nLmdldCgpLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsK
LSAgICByZXR1cm4gMDsKLX0KLQogc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBhcnNlTW9kaWZpZXJB
cnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhcnJheVZhbHVlKQogewogICAg
IGlmICghYXJyYXlWYWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIFRoZSB2YWx1
ZSBtYXkgZWl0aGVyIGJlIGEgc3RyaW5nIHdpdGggYSBzaW5nbGUgbW9kaWZpZXIgb3IgYW4gYXJy
YXkgb2YgbW9kaWZpZXJzLgotICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgYXJyYXlW
YWx1ZSkpIHsKLSAgICAgICAgYXV0byBzdHJpbmcgPSB0b1dURlN0cmluZyh0b1dLKGFkb3B0KEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJyYXlWYWx1ZSwgbnVsbHB0cikpKSk7Ci0gICAg
ICAgIHJldHVybiB7IHN0cmluZyB9OwotICAgIH0KKyAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNv
bnRleHQsIGFycmF5VmFsdWUpKQorICAgICAgICByZXR1cm4geyB0b1dURlN0cmluZyhjb250ZXh0
LCBhcnJheVZhbHVlKSB9OwogCiAgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgYXJy
YXlWYWx1ZSkpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC05MywxNiArODMsOCBAQCBzdGF0aWMg
VmVjdG9yPFN0cmluZz4gcGFyc2VNb2RpZmllckFycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U1ZhbHVlUmVmIGFycmF5VgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRl
eHQsIGFycmF5KTsKICAgICBWZWN0b3I8U3RyaW5nPiBtb2RpZmllcnM7CiAgICAgbW9kaWZpZXJz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxs
cHRyOwotICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5k
ZXgoY29udGV4dCwgYXJyYXksIGksICZleGNlcHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gc3RyaW5nID0gYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgJmV4Y2VwdGlvbikpOwotICAgICAgICBp
ZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1vZGlmaWVycy5h
cHBlbmQodG9XVEZTdHJpbmcodG9XSyhzdHJpbmcuZ2V0KCkpKSk7Ci0gICAgfQorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgbW9kaWZpZXJzLmFwcGVu
ZCh0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBhcnJheSwgaSwgbnVsbHB0cikpKTsKICAgICByZXR1cm4gbW9kaWZpZXJzOwogfQogCkBAIC01
MTQsMTAgKzQ5Niw5IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9TOjp0eXBlQ2hhcmFjdGVy
VXNpbmdIYXJkd2FyZUtleWJvYXJkKEpTU3RyaW5nUmVmIGNoYXJhCiAgICAgdW5zaWduZWQgY2Fs
bGJhY2tJRCA9IG1fY29udGV4dC0+cHJlcGFyZUZvckFzeW5jVGFzayhjYWxsYmFjaywgQ2FsbGJh
Y2tUeXBlTm9uUGVyc2lzdGVudCk7CiAKICAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIGtleWJvYXJk
IGlzIGFscmVhZHkgc2hvd24uCi0gICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVu
dEdlbmVyYXRvcl0ga2V5UHJlc3M6dG9XVEZTdHJpbmcodG9XSyhjaGFyYWN0ZXIpKSBjb21wbGV0
aW9uQmxvY2s6bWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNhbGxiYWNrSURdIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIG1fY29udGV4dC0+YXN5bmNUYXNrQ29tcGxldGUoY2FsbGJhY2tJRCk7Cisg
ICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0ga2V5UHJlc3M6
dG9XVEZTdHJpbmcoY2hhcmFjdGVyKSBjb21wbGV0aW9uQmxvY2s6bWFrZUJsb2NrUHRyKFtzdHJv
bmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKKyAgICAgICAgaWYgKHN0cm9u
Z1RoaXMtPm1fY29udGV4dCkKKyAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fY29udGV4dC0+YXN5
bmNUYXNrQ29tcGxldGUoY2FsbGJhY2tJRCk7CiAgICAgfSkuZ2V0KCldOwogfQogCkBAIC01MzQs
NyArNTE1LDcgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnJhd0tleURvd24oSlNTdHJp
bmdSZWYga2V5KQogewogICAgIC8vIEtleSBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIFVuaWNvZGUg
Y29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpYWwga2V5IChlLmcuICJkb3duQXJyb3ci
KS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93cyBob3cgdG8gbWFwIHRoZXNlIHNwZWNp
YWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29kZS4KLSAgICBbW0hJREV2ZW50R2VuZXJh
dG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlEb3duOnRvV1RGU3RyaW5nKHRvV0soa2V5
KSldOworICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtl
eURvd246dG9XVEZTdHJpbmcoa2V5KV07CiAgICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRI
SURFdmVudEdlbmVyYXRvcl0gc2VuZE1hcmtlckhJREV2ZW50V2l0aENvbXBsZXRpb25CbG9jazpe
eyAvKiBEbyBub3RoaW5nICovIH1dOwogfQogCkBAIC01NDIsNyArNTIzLDcgQEAgdm9pZCBVSVNj
cmlwdENvbnRyb2xsZXJJT1M6OnJhd0tleVVwKEpTU3RyaW5nUmVmIGtleSkKIHsKICAgICAvLyBL
ZXkgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSBVbmljb2RlIGNvZGUgcG9pbnQgb3IgdGhlIG5hbWUg
b2YgYSBzcGVjaWFsIGtleSAoZS5nLiAiZG93bkFycm93IikuCiAgICAgLy8gSElERXZlbnRHZW5l
cmF0b3Iga25vd3MgaG93IHRvIG1hcCB0aGVzZSBzcGVjaWFsIGtleXMgdG8gdGhlIGFwcHJvcHJp
YXRlIGtleWNvZGUuCi0gICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVy
YXRvcl0ga2V5VXA6dG9XVEZTdHJpbmcodG9XSyhrZXkpKV07CisgICAgW1tISURFdmVudEdlbmVy
YXRvciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0ga2V5VXA6dG9XVEZTdHJpbmcoa2V5KV07CiAg
ICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0gc2VuZE1hcmtl
ckhJREV2ZW50V2l0aENvbXBsZXRpb25CbG9jazpeeyAvKiBEbyBub3RoaW5nICovIH1dOwogfQog
CkBAIC01NTAsNyArNTMxLDcgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OmtleURvd24o
SlNTdHJpbmdSZWYgY2hhcmFjdGVyLCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXIKIHsKICAgICAvLyBD
aGFyYWN0ZXIgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSBVbmljb2RlIGNvZGUgcG9pbnQgb3IgdGhl
IG5hbWUgb2YgYSBzcGVjaWFsIGtleSAoZS5nLiAiZG93bkFycm93IikuCiAgICAgLy8gSElERXZl
bnRHZW5lcmF0b3Iga25vd3MgaG93IHRvIG1hcCB0aGVzZSBzcGVjaWFsIGtleXMgdG8gdGhlIGFw
cHJvcHJpYXRlIGtleWNvZGUuCi0gICAgU3RyaW5nIGlucHV0U3RyaW5nID0gdG9XVEZTdHJpbmco
dG9XSyhjaGFyYWN0ZXIpKTsKKyAgICBhdXRvIGlucHV0U3RyaW5nID0gdG9XVEZTdHJpbmcoY2hh
cmFjdGVyKTsKICAgICBhdXRvIG1vZGlmaWVyRmxhZ3MgPSBwYXJzZU1vZGlmaWVyQXJyYXkobV9j
b250ZXh0LT5qc0NvbnRleHQoKSwgbW9kaWZpZXJBcnJheSk7CiAKICAgICBmb3IgKGF1dG8mIG1v
ZGlmaWVyRmxhZyA6IG1vZGlmaWVyRmxhZ3MpCkBAIC03MjcsNyArNzA4LDcgQEAgdm9pZCBVSVNj
cmlwdENvbnRyb2xsZXJJT1M6OmFwcGx5QXV0b2NvcnJlY3Rpb24oSlNTdHJpbmdSZWYgbmV3U3Ry
aW5nLCBKU1N0cmluZ1IKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250ZXh0LT5wcmVw
YXJlRm9yQXN5bmNUYXNrKGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25QZXJzaXN0ZW50KTsKIAog
ICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcgPSB0aGlzLT53ZWJWaWV3KCk7Ci0gICAg
W3dlYlZpZXcgYXBwbHlBdXRvY29ycmVjdGlvbjp0b1dURlN0cmluZyh0b1dLKG5ld1N0cmluZykp
IHRvU3RyaW5nOnRvV1RGU3RyaW5nKHRvV0sob2xkU3RyaW5nKSkgd2l0aENvbXBsZXRpb25IYW5k
bGVyOm1ha2VCbG9ja1B0cihbdGhpcywgc3Ryb25nVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxs
YmFja0lEXSB7CisgICAgW3dlYlZpZXcgYXBwbHlBdXRvY29ycmVjdGlvbjp0b1dURlN0cmluZyhu
ZXdTdHJpbmcpIHRvU3RyaW5nOnRvV1RGU3RyaW5nKG9sZFN0cmluZykgd2l0aENvbXBsZXRpb25I
YW5kbGVyOm1ha2VCbG9ja1B0cihbdGhpcywgc3Ryb25nVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBj
YWxsYmFja0lEXSB7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIG1ha2VCbG9ja1B0cihbdGhpcywgc3Ryb25nVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBj
YWxsYmFja0lEXSB7CiAgICAgICAgICAgICAvLyBhcHBseUF1dG9jb3JyZWN0aW9uIGNhbiBjYWxs
IGl0cyBjb21wbGV0aW9uIGhhbmRsZXIgc3luY2hyb25vdXNseSwKICAgICAgICAgICAgIC8vIHdo
aWNoIG1ha2VzIFVJU2NyaXB0Q29udHJvbGxlciB1bmhhcHB5IChzZWUgYnVnIDE3Mjg4NCkuCkBA
IC0xMTU3LDcgKzExMzgsNyBAQCBib29sIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6aXNTaG93aW5n
RGF0YUxpc3RTdWdnZXN0aW9ucygpIGNvbnN0CiAKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVySU9T
OjpzZXRLZXlib2FyZElucHV0TW9kZUlkZW50aWZpZXIoSlNTdHJpbmdSZWYgaWRlbnRpZmllcikK
IHsKLSAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0S2V5Ym9hcmRJbnB1dE1vZGVJ
ZGVudGlmaWVyKHRvV1RGU3RyaW5nKHRvV0soaWRlbnRpZmllcikpKTsKKyAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0S2V5Ym9hcmRJbnB1dE1vZGVJZGVudGlmaWVyKHRvV1RGU3Ry
aW5nKGlkZW50aWZpZXIpKTsKIH0KIAogLy8gRklYTUU6IFdyaXRlIHRoaXMgaW4gdGVybXMgb2Yg
SElERXZlbnRHZW5lcmF0b3Igb25jZSB3ZSBrbm93IGhvdyB0byByZXNldCBjYXBzIGxvY2sgc3Rh
dGUKQEAgLTExNzgsNyArMTE1OSw3IEBAIGJvb2wgVUlTY3JpcHRDb250cm9sbGVySU9TOjprZXli
b2FyZElzQXV0b21hdGljYWxseVNoaWZ0ZWQoKSBjb25zdAogCiBKU09iamVjdFJlZiBVSVNjcmlw
dENvbnRyb2xsZXJJT1M6OmF0dGFjaG1lbnRJbmZvKEpTU3RyaW5nUmVmIGpzQXR0YWNobWVudElk
ZW50aWZpZXIpCiB7Ci0gICAgYXV0byBhdHRhY2htZW50SWRlbnRpZmllciA9IHRvV1RGU3RyaW5n
KHRvV0soanNBdHRhY2htZW50SWRlbnRpZmllcikpOworICAgIGF1dG8gYXR0YWNobWVudElkZW50
aWZpZXIgPSB0b1dURlN0cmluZyhqc0F0dGFjaG1lbnRJZGVudGlmaWVyKTsKICAgICBfV0tBdHRh
Y2htZW50ICphdHRhY2htZW50ID0gW3dlYlZpZXcoKSBfYXR0YWNobWVudEZvcklkZW50aWZpZXI6
YXR0YWNobWVudElkZW50aWZpZXJdOwogICAgIF9XS0F0dGFjaG1lbnRJbmZvICphdHRhY2htZW50
SW5mbyA9IGF0dGFjaG1lbnQuaW5mbzsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFj
L0V2ZW50U2VuZGVyUHJveHkubW0KaW5kZXggMDY3MmI1ODFiZjY1YjVhZDlhMmI4NWZlYTg2MTY0
OGYyMjNlYjRjNS4uMTAyNzI4ODQwODRkMmMxMDIwOGNmYTA3MTRmMWIxMGM1ZWZjMGEwYiAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5tbQor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tCkBAIC0y
NzIsMjAgKzI3MiwxMCBAQCBzdGF0aWMgTlNUaW1lSW50ZXJ2YWwgYWJzb2x1dGVUaW1lRm9yRXZl
bnRUaW1lKGRvdWJsZSBjdXJyZW50RXZlbnRUaW1lKQogCiBFdmVudFNlbmRlclByb3h5OjpFdmVu
dFNlbmRlclByb3h5KFRlc3RDb250cm9sbGVyKiB0ZXN0Q29udHJvbGxlcikKICAgICA6IG1fdGVz
dENvbnRyb2xsZXIodGVzdENvbnRyb2xsZXIpCi0gICAgLCBtX3RpbWUoMCkKLSAgICAsIG1fcG9z
aXRpb24oKQotICAgICwgbV9sZWZ0TW91c2VCdXR0b25Eb3duKGZhbHNlKQotICAgICwgbV9jbGlj
a0NvdW50KDApCi0gICAgLCBtX2NsaWNrVGltZSgwKQotICAgICwgbV9jbGlja1Bvc2l0aW9uKCkK
LSAgICAsIG1fY2xpY2tCdXR0b24oa1dLRXZlbnRNb3VzZUJ1dHRvbk5vQnV0dG9uKQotICAgICwg
ZXZlbnROdW1iZXIoMCkKIHsKIH0KIAotRXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2VuZGVyUHJv
eHkoKQotewotfQorRXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2VuZGVyUHJveHkoKSA9IGRlZmF1
bHQ7CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihp
bnQgYnV0dG9uKQogewpAQCAtMzk0LDcgKzM4NCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZUZvcmNl
RXZlbnRTeW5jaHJvbm91c2x5KE5TRXZlbnQgKmV2ZW50KQogCiBSZXRhaW5QdHI8TlNFdmVudD4g
RXZlbnRTZW5kZXJQcm94eTo6YmVnaW5QcmVzc3VyZUV2ZW50KGludCBzdGFnZSkKIHsKLSAgICBS
ZXRhaW5QdHI8RXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudD4gZXZlbnQgPSBhZG9wdE5TKFtbRXZl
bnRTZW5kZXJTeW50aGV0aWNFdmVudCBhbGxvY10gaW5pdFByZXNzdXJlRXZlbnRBdExvY2F0aW9u
Ok5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQorICAgIGF1dG8gZXZlbnQg
PSBhZG9wdE5TKFtbRXZlbnRTZW5kZXJTeW50aGV0aWNFdmVudCBhbGxvY10gaW5pdFByZXNzdXJl
RXZlbnRBdExvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQog
ICAgICAgICBnbG9iYWxMb2NhdGlvbjooW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCkt
PnBsYXRmb3JtV2luZG93KCkgY29udmVydFJlY3RUb1NjcmVlbjpOU01ha2VSZWN0KG1fcG9zaXRp
b24ueCwgbV9wb3NpdGlvbi55LCAxLCAxKV0ub3JpZ2luKQogICAgICAgICBzdGFnZTpzdGFnZQog
ICAgICAgICBwcmVzc3VyZTowLjUKQEAgLTQwOSw3ICszOTksNyBAQCBSZXRhaW5QdHI8TlNFdmVu
dD4gRXZlbnRTZW5kZXJQcm94eTo6YmVnaW5QcmVzc3VyZUV2ZW50KGludCBzdGFnZSkKIAogUmV0
YWluUHRyPE5TRXZlbnQ+IEV2ZW50U2VuZGVyUHJveHk6OnByZXNzdXJlQ2hhbmdlRXZlbnQoaW50
IHN0YWdlLCBmbG9hdCBwcmVzc3VyZSwgRXZlbnRTZW5kZXJQcm94eTo6UHJlc3N1cmVDaGFuZ2VE
aXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIFJldGFpblB0cjxFdmVudFNlbmRlclN5bnRoZXRp
Y0V2ZW50PiBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5bnRoZXRpY0V2ZW50IGFsbG9j
XSBpbml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBt
X3Bvc2l0aW9uLnkpCisgICAgYXV0byBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5bnRo
ZXRpY0V2ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNNYWtlUG9pbnQo
bV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIGdsb2JhbExvY2F0aW9uOihbbV90
ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSBjb252ZXJ0UmVj
dFRvU2NyZWVuOk5TTWFrZVJlY3QobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIDEsIDEpXS5v
cmlnaW4pCiAgICAgICAgIHN0YWdlOnN0YWdlCiAgICAgICAgIHByZXNzdXJlOnByZXNzdXJlCkBA
IC00MzEsMTAgKzQyMSwxMCBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VDbGlj
aygpCiB7CiAgICAgc2VuZE1vdXNlRG93blRvU3RhcnRQcmVzc3VyZUV2ZW50cygpOwogCi0gICAg
UmV0YWluUHRyPE5TRXZlbnQ+IGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMSk7
Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IHByZUZvcmNlQ2xpY2sgPSBwcmVzc3VyZUNoYW5nZUV2
ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKLSAgICBSZXRhaW5Q
dHI8TlNFdmVudD4gZm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVD
aGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiByZWxl
YXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJl
Y3Rpb246OkRlY3JlYXNpbmcpOworICAgIGF1dG8gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1
cmVFdmVudCgxKTsKKyAgICBhdXRvIHByZUZvcmNlQ2xpY2sgPSBwcmVzc3VyZUNoYW5nZUV2ZW50
KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIGZvcmNl
Q2xpY2sgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJ
bmNyZWFzaW5nKTsKKyAgICBhdXRvIHJlbGVhc2luZ1ByZXNzdXJlID0gcHJlc3N1cmVDaGFuZ2VF
dmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CiAgICAgTlNFdmVu
dCAqbW91c2VVcCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0V2ZW50VHlwZUxlZnRN
b3VzZVVwCiAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3Np
dGlvbi55KQogICAgICAgICBtb2RpZmllckZsYWdzOjAKQEAgLTQ2OCw5ICs0NTgsOSBAQCB2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OnN0YXJ0QW5kQ2FuY2VsTW91c2VGb3JjZUNsaWNrKCkKIHsKICAg
ICBzZW5kTW91c2VEb3duVG9TdGFydFByZXNzdXJlRXZlbnRzKCk7CiAKLSAgICBSZXRhaW5QdHI8
TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKLSAgICBSZXRh
aW5QdHI8TlNFdmVudD4gaW5jcmVhc2luZ1ByZXNzdXJlID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgx
LCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5T
RXZlbnQ+IHJlbGVhc2luZ1ByZXNzdXJlID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3Vy
ZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0g
YmVnaW5QcmVzc3VyZUV2ZW50KDEpOworICAgIGF1dG8gaW5jcmVhc2luZ1ByZXNzdXJlID0gcHJl
c3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7
CisgICAgYXV0byByZWxlYXNpbmdQcmVzc3VyZSA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJl
c3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwogICAgIE5TRXZlbnQgKm1vdXNlVXAg
PSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNFdmVudFR5cGVMZWZ0TW91c2VVcAogICAg
ICAgICBsb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAg
ICAgICAgbW9kaWZpZXJGbGFnczowCkBAIC01MDMsOSArNDkzLDkgQEAgdm9pZCBFdmVudFNlbmRl
clByb3h5Ojptb3VzZUZvcmNlRG93bigpCiB7CiAgICAgc2VuZE1vdXNlRG93blRvU3RhcnRQcmVz
c3VyZUV2ZW50cygpOwogCi0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGJlZ2luUHJlc3N1cmUgPSBi
ZWdpblByZXNzdXJlRXZlbnQoMSk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IHByZUZvcmNlQ2xp
Y2sgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNy
ZWFzaW5nKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gZm9yY2VNb3VzZURvd24gPSBwcmVzc3Vy
ZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAg
ICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMSk7CisgICAgYXV0byBw
cmVGb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVj
dGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBmb3JjZU1vdXNlRG93biA9IHByZXNzdXJlQ2hh
bmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwogCiAgICAg
TlNWaWV3ICp0YXJnZXRWaWV3ID0gW21fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBs
YXRmb3JtVmlldygpIGhpdFRlc3Q6W2JlZ2luUHJlc3N1cmUgbG9jYXRpb25JbldpbmRvd11dOwog
ICAgIHRhcmdldFZpZXcgPSB0YXJnZXRWaWV3ID8gdGFyZ2V0VmlldyA6IG1fdGVzdENvbnRyb2xs
ZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOwpAQCAtNTI2LDkgKzUxNiw5IEBAIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZURvd24oKQogCiB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6Om1vdXNlRm9yY2VVcCgpCiB7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGJlZ2luUHJl
c3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMik7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IHN0
YWdlVHdvRXZlbnQgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJlQ2hhbmdlRGlyZWN0
aW9uOjpEZWNyZWFzaW5nKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gc3RhZ2VPbmVFdmVudCA9
IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNp
bmcpOworICAgIGF1dG8gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgyKTsKKyAg
ICBhdXRvIHN0YWdlVHdvRXZlbnQgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDIsIFByZXNzdXJlQ2hh
bmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAgICBhdXRvIHN0YWdlT25lRXZlbnQgPSBwcmVz
c3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsK
IAogICAgIC8vIFNpbmNlIEFwcEtpdCBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yY2V1cC9kb3duIGFz
IG1vdXNlIGV2ZW50cywgd2UgbmVlZCB0byBzZW5kIHR3byBwcmVzc3VyZSBldmVudHMgdG8gZGV0
ZWN0CiAgICAgLy8gdGhlIGNoYW5nZSBpbiBzdGFnZSB0aGF0IG1hcmtzIHRob3NlIG1vbWVudHMu
CkBAIC01NTEsOCArNTQxLDggQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlQ2hh
bmdlZChmbG9hdCBmb3JjZSkKIHsKICAgICBpbnQgc3RhZ2UgPSBmb3JjZSA8IDEgPyAxIDogMjsK
ICAgICBmbG9hdCBwcmVzc3VyZSA9IGZvcmNlIDwgMSA/IGZvcmNlIDogZm9yY2UgLSAxOwotICAg
IFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KHN0
YWdlKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcHJlc3N1cmVDaGFuZ2VkRXZlbnQgPSBwcmVz
c3VyZUNoYW5nZUV2ZW50KHN0YWdlLCBwcmVzc3VyZSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246
OkluY3JlYXNpbmcpOworICAgIGF1dG8gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVu
dChzdGFnZSk7CisgICAgYXV0byBwcmVzc3VyZUNoYW5nZWRFdmVudCA9IHByZXNzdXJlQ2hhbmdl
RXZlbnQoc3RhZ2UsIHByZXNzdXJlLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2lu
Zyk7CiAKICAgICBOU1ZpZXcgKnRhcmdldFZpZXcgPSBbbV90ZXN0Q29udHJvbGxlci0+bWFpbldl
YlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkgaGl0VGVzdDpbYmVnaW5QcmVzc3VyZSBsb2NhdGlvbklu
V2luZG93XV07CiAgICAgdGFyZ2V0VmlldyA9IHRhcmdldFZpZXcgPyB0YXJnZXRWaWV3IDogbV90
ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CkBAIC02MTEsOCAr
NjAxLDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNv
bmRzKQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmtleURvd24oV0tTdHJpbmdSZWYga2V5LCBX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgdW5zaWduZWQga2V5TG9jYXRpb24pCiB7Ci0gICAg
TlNTdHJpbmcqIGNoYXJhY3RlciA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzp0b1NURChr
ZXkpLmNfc3RyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6
W05TU3RyaW5nIGRlZmF1bHRDU3RyaW5nRW5jb2RpbmddXTsKKyAgICBOU1N0cmluZyogY2hhcmFj
dGVyID0gdG9XVEZTdHJpbmcoa2V5KTsKIAogICAgIE5TU3RyaW5nICpldmVudENoYXJhY3RlciA9
IGNoYXJhY3RlcjsKICAgICB1bnNpZ25lZCBzaG9ydCBrZXlDb2RlID0gMDsKQEAgLTgzMiw3ICs4
MjEsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmtleURvd24oV0tTdHJpbmdSZWYga2V5LCBX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgdW5zaQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6
Om1vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5KQogewotICAgIFJldGFpblB0cjxDR0V2ZW50UmVm
PiBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVudDIo
MCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkpOworICAgIGF1dG8gY2dTY3Jv
bGxFdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZVNjcm9sbFdoZWVsRXZlbnQyKDAsIGtDR1Nj
cm9sbEV2ZW50VW5pdExpbmUsIDIsIHksIHgsIDApKTsKIAogICAgIC8vIFNldCB0aGUgQ0dFdmVu
dCBsb2NhdGlvbiBpbiBmbGlwcGVkIGNvb3JkcyByZWxhdGl2ZSB0byB0aGUgZmlyc3Qgc2NyZWVu
LCB3aGljaAogICAgIC8vIGNvbXBlbnNhdGVzIGZvciB0aGUgYmVoYXZpb3Igb2YgK1tOU0V2ZW50
IGV2ZW50V2l0aENHRXZlbnQ6XSB3aGVuIHRoZSBldmVudCBoYXMKQEAgLTg1OSw3ICs4NDgsNyBA
QCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KGludCB4LCBp
bnQgeSwgYm9vbCBwYWdlZCkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5
V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoaW50IHgsIGludCB5LCBpbnQgcGhhc2UsIGludCBt
b21lbnR1bSkKIHsKLSAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4gY2dTY3JvbGxFdmVudCA9IGFk
b3B0Q0YoQ0dFdmVudENyZWF0ZVNjcm9sbFdoZWVsRXZlbnQyKDAsIGtDR1Njcm9sbEV2ZW50VW5p
dExpbmUsIDIsIHksIHgsIDApKTsKKyAgICBhdXRvIGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENH
RXZlbnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAy
LCB5LCB4LCAwKSk7CiAKICAgICAvLyBTZXQgdGhlIENHRXZlbnQgbG9jYXRpb24gaW4gZmxpcHBl
ZCBjb29yZHMgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IHNjcmVlbiwgd2hpY2gKICAgICAvLyBjb21w
ZW5zYXRlcyBmb3IgdGhlIGJlaGF2aW9yIG9mICtbTlNFdmVudCBldmVudFdpdGhDR0V2ZW50Ol0g
d2hlbiB0aGUgZXZlbnQgaGFzCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0
Zm9ybVdlYlZpZXdNYWMubW0KaW5kZXggNjQxNzgyY2E5N2UxZGFmYjkwMDkxOWRiMTliMzQ3NGE1
NTQzODhlNS4uNWE0ZTk2YjgxZWE4Y2RhMDZiMzdiNDY4ZTU4ODU5ZWY3MWViNDZiOCAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQpAQCAt
NjQsNyArNjQsNyBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS1dlYlZpZXdD
b25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBjb25zdCBUZQogICAgIGlmIChtX29wdGlvbnMu
dXNlUmVtb3RlTGF5ZXJUcmVlKQogICAgICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNl
ckRlZmF1bHRzXSBzZXRWYWx1ZTpAWUVTIGZvcktleTpAIldlYktpdDJVc2VSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYSJdOwogCi0gICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+
IGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtjb25maWd1cmF0aW9uIGNvcHldKTsKKyAg
ICBhdXRvIGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtjb25maWd1cmF0aW9uIGNvcHld
KTsKICAgICBXS1ByZWZlcmVuY2VzU2V0VGhyZWFkZWRTY3JvbGxpbmdFbmFibGVkKChfX2JyaWRn
ZSBXS1ByZWZlcmVuY2VzUmVmKVtjb3BpZWRDb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSwgbV9v
cHRpb25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nKTsKIAogICAgIE5TUmVjdCByZWN0ID0gTlNNYWtl
UmVjdCgwLCAwLCBUZXN0Q29udHJvbGxlcjo6dmlld1dpZHRoLCBUZXN0Q29udHJvbGxlcjo6dmll
d0hlaWdodCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29u
dHJvbGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVy
TWFjLm1tCmluZGV4IDE0YjdkYzlkMGYyNGVjMTBlNzhhYzJiMGUwMzY1YTllYTY0OWFiMjYuLmIy
MjI4NzFjZDBhMzkxOWUzM2VkNjA2ZDBmNDQxNjg4NTY5M2EyMDUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCkBAIC0xODQsNyArMTg0LDcg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3Qo
Y29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QKICAgICBpZiAoIXRlc3QudXJsQ29udGFpbnMoImNv
bnRlbnRleHRlbnNpb25zLyIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXRhaW5QdHI8Q0ZV
UkxSZWY+IHRlc3RVUkwgPSBhZG9wdENGKFdLVVJMQ29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHRlc3QudXJsKCkpKTsKKyAgICBhdXRvIHRlc3RVUkwgPSBhZG9wdENGKFdLVVJMQ29weUNG
VVJMKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRlc3QudXJsKCkpKTsKICAgICBOU1VSTCAqZmlsdGVy
VVJMID0gWyhfX2JyaWRnZSBOU1VSTCAqKXRlc3RVUkwuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRo
RXh0ZW5zaW9uOkAianNvbiJdOwogCiAgICAgX19ibG9jayBOU1N0cmluZyAqY29udGVudEV4dGVu
c2lvblN0cmluZzsKQEAgLTM3MSwxNCArMzcxLDE0IEBAIHN0YXRpYyBOU1NldCAqc3lzdGVtSGlk
ZGVuRm9udEZhbWlseVNldCgpCiAKIHN0YXRpYyBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBnZW5l
cmF0ZUZvbnRBbGxvd0xpc3QoKQogewotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVm
PiByZXN1bHQgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gcmVz
dWx0ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAgICBmb3IgKE5TU3RyaW5n
ICpmb250RmFtaWx5IGluIGFsbG93ZWRGb250RmFtaWx5U2V0KCkpIHsKICAgICAgICAgTlNBcnJh
eSAqZm9udHNGb3JGYW1pbHkgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGF2
YWlsYWJsZU1lbWJlcnNPZkZvbnRGYW1pbHk6Zm9udEZhbWlseV07Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBmYW1pbHlJbkZvbnQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKFtmb250RmFtaWx5IFVURjhTdHJpbmddKSk7CisgICAgICAgIGF1dG8gZmFt
aWx5SW5Gb250ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhbZm9udEZh
bWlseSBVVEY4U3RyaW5nXSkpOwogICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShyZXN1bHQuZ2V0
KCksIGZhbWlseUluRm9udC5nZXQoKSk7CiAgICAgICAgIGZvciAoTlNBcnJheSAqZm9udEluZm8g
aW4gZm9udHNGb3JGYW1pbHkpIHsKICAgICAgICAgICAgIC8vIEZvbnQgbmFtZSBpcyB0aGUgZmly
c3QgZW50cnkgaW4gdGhlIGFycmF5LgotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGZvbnROYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhbW2Zv
bnRJbmZvIG9iamVjdEF0SW5kZXg6MF0gVVRGOFN0cmluZ10pKTsKKyAgICAgICAgICAgIGF1dG8g
Zm9udE5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFtbZm9udElu
Zm8gb2JqZWN0QXRJbmRleDowXSBVVEY4U3RyaW5nXSkpOwogICAgICAgICAgICAgV0tBcnJheUFw
cGVuZEl0ZW0ocmVzdWx0LmdldCgpLCBmb250TmFtZS5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFs
aXplQ29udGV4dCgpCiAgICAgLy8gVGVzdGluZyB1c2VzIGEgcHJpdmF0ZSBzZXNzaW9uLCB3aGlj
aCBpcyBtZW1vcnkgb25seS4gSG93ZXZlciBjcmVhdGluZyBvbmUgaW5zdGFudGlhdGVzIGEgc2hh
cmVkIE5TVVJMQ2FjaGUsCiAgICAgLy8gYW5kIGlmIHdlIGhhdmVuJ3QgY3JlYXRlZCBvbmUgeWV0
LCB0aGUgZGVmYXVsdCBvbmUgd2lsbCBiZSBjcmVhdGVkIG9uIGRpc2suCiAgICAgLy8gTWFraW5n
IHRoZSBzaGFyZWQgY2FjaGUgbWVtb3J5LW9ubHkgYXZvaWRzIHRvdWNoaW5nIHRoZSBmaWxlIHN5
c3RlbS4KLSAgICBSZXRhaW5QdHI8TlNVUkxDYWNoZT4gc2hhcmVkQ2FjaGUgPQorICAgIGF1dG8g
c2hhcmVkQ2FjaGUgPQogICAgICAgICBhZG9wdE5TKFtbTlNVUkxDYWNoZSBhbGxvY10gaW5pdFdp
dGhNZW1vcnlDYXBhY2l0eToxMDI0ICogMTAyNAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXNrQ2FwYWNpdHk6MAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlza1BhdGg6bmlsXSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5oCmluZGV4IDBlYWI4OTQ5ZTZiZWJmZWU2NTk0
NzU4OWFmYjllOGQ5YjhiZTFlYzcuLjJkMmQxZDZiODQ2ZTY4NzhiMGIxZWJkYzE2NjdjMTc1ZTkx
NTY2NWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29u
dHJvbGxlck1hYy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29u
dHJvbGxlck1hYy5oCkBAIC0zMSwxMyArMzEsMTQgQEAgT0JKQ19DTEFTUyBXS1dlYlZpZXc7CiAK
IG5hbWVzcGFjZSBXVFIgewogCi1jbGFzcyBVSVNjcmlwdENvbnRyb2xsZXJNYWMgOiBwdWJsaWMg
VUlTY3JpcHRDb250cm9sbGVyQ29jb2EgeworY2xhc3MgVUlTY3JpcHRDb250cm9sbGVyTWFjIGZp
bmFsIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKIHB1YmxpYzoKICAgICBleHBs
aWNpdCBVSVNjcmlwdENvbnRyb2xsZXJNYWMoVUlTY3JpcHRDb250ZXh0JiBjb250ZXh0KQogICAg
ICAgICA6IFVJU2NyaXB0Q29udHJvbGxlckNvY29hKGNvbnRleHQpCiAgICAgewogICAgIH0KIAor
cHJpdmF0ZToKICAgICB2b2lkIHJlcGxhY2VUZXh0QXRSYW5nZShKU1N0cmluZ1JlZiwgaW50LCBp
bnQpIG92ZXJyaWRlOwogICAgIHZvaWQgem9vbVRvU2NhbGUoZG91YmxlLCBKU1ZhbHVlUmVmKSBv
dmVycmlkZTsKICAgICBkb3VibGUgem9vbVNjYWxlKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02Miw3
ICs2Myw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWN0aXZhdGVBdFBvaW50KGxvbmcgeCwgbG9u
ZyB5LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKSBvdmVycmlkZTsKIAotcHJpdmF0ZToKICAgICBOU1Rh
YmxlVmlldyAqZGF0YUxpc3RTdWdnZXN0aW9uc1RhYmxlVmlldygpIGNvbnN0OwogfTsKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFj
Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1t
CmluZGV4IGNkMTEzMjlhNjU0MWQ3YjRlYjc3ZDdlYzE0Njg4ZTk5MjFmMjdjNTMuLmI1Y2I1MTgx
NTA1OWU3YTA5M2ExNDIzOTkxZTg5MTdlM2VkMzA5MDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KQEAgLTIxNCw3ICsyMTQs
NyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlck1hYzo6Y29tcGxldGVCYWNrU3dpcGUoSlNWYWx1
ZVJlZiBjYWxsYmFjaykKIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJNYWM6OnBsYXlCYWNrRXZl
bnRTdHJlYW0oSlNTdHJpbmdSZWYgZXZlbnRTdHJlYW0sIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7
Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzdHJlYW0gPSBhZG9wdENGKEpTU3RyaW5nQ29w
eUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV2ZW50U3RyZWFtKSk7CisgICAgYXV0byBz
dHJlYW0gPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGV2ZW50U3RyZWFtKSk7CiAgICAgcGxheUJhY2tFdmVudHMod2ViVmlldygpLCBtX2NvbnRleHQs
IChfX2JyaWRnZSBOU1N0cmluZyAqKXN0cmVhbS5nZXQoKSwgY2FsbGJhY2spOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409891</attachid>
            <date>2020-09-28 09:57:13 -0700</date>
            <delta_ts>2020-09-28 19:35:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200928095712.patch</filename>
            <type>text/plain</type>
            <size>703764</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWU2MGM1MzZkYjc2M2JkNzg3YjkwMGZjNGM2NTJkNGJmZWY0NTFlYS4u
ZjMwMjBmNzM4YzdlNmQ0ZTY0OTQwNDBiZTVlMzUyNGZkMTdkNGMyMiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2MCBAQAorMjAy
MC0wOS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlm
eWluZywgYnV0IGV2ZW4gbW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVz
dAorICAgICAgICBjb2RlIGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkg
YW5kIHBhc3RlIHJhdGhlciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0
ZXIgdGhlIHJlZmFjdG9yaW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlz
IGNvZGUgaXMgd3JpdHRlbiB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGlu
ZyBmb3IgZWFjaCBmdW5jdGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpt
YWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAo
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0Ns
YXNzIHdpdGggdGhpcy4gUmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBj
bGVhciB0aGlzIHBhc3NlcyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJv
dmUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNw
cDoKKyAgICAgICAgKHVpRWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBS
ZW1vdmVkIHVubmVlZGVkIGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3
aGljaCBzdGFydHMgb3V0IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5n
cy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBl
Q29uc3RydWN0b3IpOiBVc2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAg
ICAgICAoX3JldHVybkV4cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0ND
b250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxl
cik6IERlbGV0ZWQuCisgICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2Ug
YW5kIGF1dG8uCisgICAgICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERp
dHRvLgorICAgICAgICAoZ2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAg
IChHQ0NvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6
IFJlcGxhY2VkIGdldEpTQ2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFp
blB0ciB0byBtYWtlIGl0IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVy
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0
aGUgYWJvdmUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAg
ICAgICAgKGVuY29kZUhvc3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAg
ICAgIChleGVjQ29tbWFuZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2Fs
bGJhY2spOiBEaXR0by4KKyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRv
LgorICAgICAgICAob3ZlcnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAg
KHF1ZXVlTG9hZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5n
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3Qp
OiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVh
dGVKU0NsYXNzKTogUmVwbGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAg
ICAgIEpTUmV0YWluUHRyIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRv
IHRoZSBjYWxsZXIuCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJl
dHVybiB2YWx1ZSBjb25zdCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMp
OiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmly
ZWQpOiBTaW1wbGlmaWVkIHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2spOiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAor
ICAgICAgICB0YWJsZSB2YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBu
ZWVkIHRvIGJlIG9iamVjdHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNh
bGxiYWNrKTogRGl0dG8uCisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxs
YmFja3MpOiBEaXR0by4KKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTog
VXNlIGFycmF5TGVuZ3RoLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDog
VXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnBsYXRmb3JtTmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAg
ICAgICAoY3JlYXRlRW1wdHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmlu
Zy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJ
RWxlbWVudHMpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkRvY3VtZW50TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8u
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
SGVhZGVycyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ29sdW1ucyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mUm93cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8u
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5o
OiBSZW1vdmVkIHVubmVlZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGgu
CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIg
SlNWYWx1ZUlzT2JqZWN0LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnBsYXRmb3JtTmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAo
Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1l
dGVyaXplZEF0dHJpYnV0ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBS
ZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09i
amVjdC4KKyAgICAgICAgKHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVy
aWEpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxp
dHlWYWx1ZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERl
bGVnYXRlIGRpZENsZWFyV2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6Cisg
ICAgICAgIFVzZSBhdXRvLiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0
LiBTaW1wbGlmaWVkIG9iamVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0
TlMgaW5zdGVhZCBvZiByZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRD
bGVhcldpbmRvd09iamVjdEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNl
IGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW06CisgICAgICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVu
Z3RoLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNw
cDoKKyAgICAgICAgKEZyYW1lTG9hZERlbGVnYXRlOjpkaWRDbGVhcldpbmRvd09iamVjdEZvckZy
YW1lSW5TdGFuZGFyZFdvcmxkKToKKyAgICAgICAgUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFr
ZVdpbmRvd09iamVjdC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dP
YmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXh0SW5wdXRD
b250cm9sbGVyOjpjcmVhdGVKU0NsYXNzKTogUmVwbGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMu
IFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRyIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNz
ZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisgICAgICAgIChUZXh0SW5wdXRDb250cm9sbGVy
OjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25zdCouCisgICAgICAgIChUZXh0
SW5wdXRDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS93aW4vVGV4dElucHV0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciBhYm92ZS4K
KworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwOgorICAg
ICAgICAoV1RSOjp0b09wdGlvbmFsQm9vbCk6IFJlbmFtZWQgZnJvbSBKU1ZhbHVlTWFrZUJvb2xl
YW5Pck51bGwuCisgICAgICAgIChXVFI6OnRvT3B0aW9uYWxEb3VibGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdUUjo6bWFrZVZhbHVlKTogQWRkZWQgd2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlw
ZXMuCisgICAgICAgIFJlcGxhY2VkIEpTVmFsdWVUb051bGxhYmxlQm9vbGVhbiBhbmQgSlNWYWx1
ZU1ha2VTdHJpbmdPck51bGwuCisgICAgICAgIChXVFI6OmNyZWF0ZUpTU3RyaW5nKTogQWRkZWQg
d2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlwZXMuCisgICAgICAgIChXVFI6OnByb3BlcnR5
KTogQWRkZWQuCisgICAgICAgIChXVFI6OnN0cmluZ1Byb3BlcnR5KTogQWRkZWQuCisgICAgICAg
IChXVFI6OmJvb2xlYW5Qcm9wZXJ0eSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpudW1lcmljUHJv
cGVydHkpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6b2JqZWN0UHJvcGVydHkpOiBSZWZhY3RvcmVk
IHRvIGNhbGwgcHJvcGVydHkuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogQWRkZWQuCisg
ICAgICAgIChXVFI6OnNldEdsb2JhbE9iamVjdFByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChX
VFI6OmNhbGwpOiBSZWZhY3RvcmVkIHRvIGxldCBvYmplY3RQcm9wZXJ0eSBkbyBtb3JlIG9mIHRo
ZSBudWxsIGNoZWNraW5nLgorICAgICAgICAoV1RSOjpjYWxsQ29uc3RydWN0b3IpOiBEaXR0by4K
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmg6IFVwZGF0ZWQg
Zm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNX
cmFwcGFibGUuaDogUmVkdWNlZCBpbmNsdWRlcyBhIGJpdC4KKworICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmg6IEFkZGVkIHNldEdsb2JhbE9iamVjdFByb3Bl
cnR5LgorCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250ZXh0LmNwcDoKKyAgICAgICAgKFVJU2NyaXB0Q29udGV4dDo6VUlTY3JpcHRDb250ZXh0
KTogUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFVJ
U2NyaXB0Q29udGV4dDo6cnVuVUlTY3JpcHQpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAg
IChVSVNjcmlwdENvbnRleHQ6Om9iamVjdEZyb21SZWN0IGNvbnN0KTogVXNlIHNldFByb3BlcnR5
LgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBUZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwOgorICAg
ICAgICAoV1RSOjp0b0RldmljZU9yaWVudGF0aW9uKTogVXNlIGNyZWF0ZUpTU3RyaW5nIGFuZCBK
U1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nLgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRy
b2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisK
KyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIu
bW06CisgICAgICAgICgtW0xheW91dFRlc3RTcGVsbENoZWNrZXIgc2V0UmVzdWx0c0Zyb21KU1Zh
bHVlOmluQ29udGV4dDpdKTogVXNlIGNyZWF0ZUpTU3RyaW5nCisgICAgICAgIGFuZCByZW1vdmVk
IHVubmVlZGVkIHVzZSBvZiBscm91bmRsLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9E
aWN0aW9uYXJ5RnVuY3Rpb25zLmg6IEFkZGVkLiBDb250YWlucyBjb252ZW5pZW5jZSBmdW5jdGlv
bnMKKyAgICAgICAgZm9yIGRlYWxpbmcgd2l0aCBXS0RpY3Rpb25hcnlSZWYuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaDogSW5pdGlhbGl6ZSBkYXRhIG1l
bWJlcnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmNwcDoKKyAgICAgICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbik6
IFVzZSBPcHRpb25hbCBpbnN0ZWFkIG9mIHNlcGFyYXRlIGJvb2wuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oOiBVcGRhdGVkIGZvciB0aGUgYWJv
dmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtOgor
ICAgICAgICAoX2dlbmVyYXRlSW1wbGVtZW50YXRpb25GaWxlKTogVXNlIHN0YXRpYyBpbml0aWFs
aXphdGlvbiBhbmQgYSBsYW1iZGEgaW5zdGVhZCBvZgorICAgICAgICBhbiBpZiBzdGF0ZW1lbnQg
dG8gaW5pdGlhbGl6ZS4KKyAgICAgICAgKF9wbGF0Zm9ybVR5cGVDb25zdHJ1Y3Rvcik6IFVzZSB0
b09wdGlvbmFsQm9vbCBhbmQgY3JlYXRlSlNTdHJpbmcuIEFsc28gYWRkZWQKKyAgICAgICAgc3Vw
cG9ydCBmb3IgbnVsbGFibGUgZG91YmxlcyBhbmQgdXNlZCBhdXRvIGEgYml0IG1vcmUuCisgICAg
ICAgIChfcmV0dXJuRXhwcmVzc2lvbik6IFVzZSBtYWtlVmFsdWUuCisKKyAgICAgICAgKiBJbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDogTWFkZSB0aGUgb3B0aW9uYWwgYXJn
dW1lbnRzIHRvIHRoZQorICAgICAgICBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiBmdW5jdGlv
biAiZG91YmxlPyIgaW5zdGVhZCBvZiAib2JqZWN0Ii4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXVFI6OmdldE1lbnVJdGVtQ2hpbGRyZW5DYWxsYmFjayk6IFVzZSBhdXRvIGFuZCBub3QgSlNW
YWx1ZVRvT2JqZWN0LgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IE1vdmVkIHRvIEpTQmFz
aWNzLmgvY3BwLgorICAgICAgICAoV1RSOjpwYXJzZVRvdWNoTW9kaWZpZXIpOiBBZGRlZC4gRmFj
dG9yZWQgb3V0IG9mIHRoZQorICAgICAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3Vj
aE1vZGlmaWVyIGZ1bmN0aW9uLgorICAgICAgICAoV1RSOjpwYXJzZU1vZGlmaWVyQXJyYXkpOiBV
c2UgY3JlYXRlSlNTdHJpbmcgYW5kIHJlbW92ZSB1bm5lZWRlZCBpZ25vcmVkCisgICAgICAgIGV4
Y2VwdGlvbiBvdXQgYXJndW1lbnQsIHNpbmNlIHRoYXQgaXMgb3B0aW9uYWwuIEFsc28gYWRkZWQg
b3ZlcmxvYWQgdGhhdAorICAgICAgICBnZXRzIHRoZSBjb250ZXh0LgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNlbmRpbmdDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KTog
VXNlIGFkb3B0V0sgYW5kIHNldFZhbHVlLiBSZXR1cm4gYSBXS1JldGFpblB0ci4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKTogVXNlIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
b3VzZVVwKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1v
dXNlTW92ZVRvKTogVXNlIHNldFZhbHVlIGFuZAorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZXMuCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9y
Y2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpz
dGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlRG93bik6IERpdHRvLgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZUZvcmNlVXApOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNoYW5nZWQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bGVhcEZvcndhcmQpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hy
b25vdXNDbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OmNyZWF0ZUtl
eURvd25NZXNzYWdlQm9keSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6a2V5RG93bik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25v
dXNLZXlEb3duKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9s
bEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMpOiBVc2UKKyAgICAgICAgc2V0VmFsdWUgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
Y29udGludW91c01vdXNlU2Nyb2xsQnkpOiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjpjb250ZXh0Q2xpY2spOiBVc2UgYXV0byBhbmQgbm90IEpTVmFsdWVUb09iamVjdC4KKyAg
ICAgICAgKFdUUjo6dG9Nb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKTogVXNlIGJvb2xlYW5Qcm9w
ZXJ0eS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6YWRkVG91Y2hQb2lu
dCk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAg
IChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcik6
IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaFBv
aW50UmFkaXVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnRvdWNoU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6dG91Y2hNb3ZlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoRW5kKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoQ2FuY2VsKTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmNsZWFyVG91Y2hQb2ludHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6cmVsZWFzZVRvdWNoUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FuY2VsVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNl
dEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUu
CisgICAgICAgIERlbGV0ZWQgdmFyaW91cyB1bm5lZWRlZCBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXVFI6OkdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdUUjo6R0NDb250cm9sbGVyOjp+R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6R0NDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFBy
b3BlcnR5LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0Nv
bnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICBBbHNvIG1hcmtlZCB0
aGUgY2xhc3MgZmluYWwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRp
ZENyZWF0ZVBhZ2UpOiBVc2UgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6cmVwb3J0TGl2ZURvY3VtZW50cyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSk6IFVzZSBk
aWN0aW9uYXJ5VmFsdWUsCisgICAgICAgIGJvb2xlYW5WYWx1ZSwgcG9zdFBhZ2VNZXNzYWdlLCB2
YWx1ZSwgYW5kIG1vcmUgdG8gc3RyZWFtbGluZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGU6OmJvb2xlYW5Gb3JLZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRs
ZTo6c3RyaW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OmJlZ2luVGVzdGluZyk6IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlOjpkb25lKTogVXNlIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6Y2xvc2VPdGhlclBhZ2VzKTogVXNlIHNldFZhbHVlIGFuZCB0b1dLLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6ZHVtcFRvU3RkRXJyKTogVXNlIHBvc3RQYWdlTWVzc2FnZQor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dCk6IFVzZSB0b1dLLgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVl
KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBv
c3RBZGRDaHJvbWVJbnB1dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpwb3N0UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdEZvY3VzV2ViVmlldyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdFNldEJhY2tpbmdTY2FsZUZhY3Rvcik6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cG9zdFNldFdpbmRvd0lzS2V5KTogVXNlIHRvV0suCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0Vmlld1NpemUpOiBVc2Ugc2V0VmFs
dWUgYW5kIHRvV0suCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2ltdWxhdGVX
ZWJOb3RpZmljYXRpb25DbGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpwb3N0U2V0QWRkc1Zpc2l0ZWRMaW5rcyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKTogRGl0dG8u
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bik6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLAorICAgICAgICBhbmQgdXNlIE9w
dGlvbmFsIGluc3RlYWQgb2YgYm9vbC9kb3VibGUgcGFpcnMuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IpOiBV
c2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aXNHZW9s
b2NhdGlvblByb3ZpZGVyQWN0aXZlIGNvbnN0KTogVXNlIHRvV0sgYW5kIGJvb2xlYW5WYWx1ZS4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJv
YXJkIGNvbnN0KTogVXNlIHRvV0sgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2V0VXNlck1lZGlhUGVybWlzc2lvbik6IFVzZSBwb3N0UGFnZU1lc3NhZ2Uu
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcnNp
c3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKTogVXNlIHNldFZhbHVlCisgICAgICAgIGFuZCBwb3N0
UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjp1c2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JP
cmlnaW4pOiBVc2V0IHNldFZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKTogVXNlIHNldFZh
bHVlIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpz
ZXRIaWRkZW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldENhY2hl
TW9kZWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nl
c3NXb3JrUXVldWUgY29uc3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6cHJvY2Vzc1dvcmtRdWV1ZSk6IFVzZSBwb3N0UGFnZU1lc3Nh
Z2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUZvcndhcmROYXZpZ2F0
aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWQpOiBV
c2Ugc2V0VmFsdWUgYW5kIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTG9hZEhUTUxTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OnF1ZXVlUmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVu
ZGxlOjpxdWV1ZUxvYWRpbmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0
TWVzc2FnZSk6IEFkZGVkLiBPdmVybG9hZHMgZm9yIG1hbnkgdHlwZXMgdG8ga2VlcCBjYWxsZXIg
Y29kZSBzdHJlYW1saW5lZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0UGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6IFVwZGF0ZWQgZm9y
IHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6cHJvcGVydHlWYWx1ZSk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6OnByb3BlcnR5VmFsdWVEb3VibGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6cHJvcGVydHlW
YWx1ZUludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpudW1lcmljV2luZG93UHJvcGVydHkpOiBS
ZW5hbWVkIGZyb20gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUgZm9yIGJyZXZpdHkKKyAgICAg
ICAgYW5kIGZvciBjb25zaXN0ZW5jeSB3aXRoIEpTQmFzaWNzLmggZnVuY3Rpb25zLgorICAgICAg
ICAoV1RSOjpkdW1wUGF0aCk6IFVzZSBzdHJpbmdQcm9wZXJ0eSwgb2JqZWN0UHJvcGVydHksIGFu
ZCBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpyYW5nZVRvU3RyKTogVXNlIGF1dG8sIG51bWVy
aWNQcm9wZXJ0eSwgYW5kIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Ok5hdmlnYXRpb25UeXBl
VG9TdHJpbmcpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVuYW1lZCBmcm9t
IHNlY3VyaXR5T3JpZ2luVG9TdHIuIFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpmcmFt
ZVRvU3RyKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6cmVz
ZXRBZnRlclRlc3QpOiBSZW1vdmVkIHVubmVlZGVkIGxvY2FsLgorICAgICAgICAoV1RSOjpkdW1w
RnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCk6IFVzZSBhdXRvLgorICAgICAg
ICAoV1RSOjpkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogRGl0
dG8uCisgICAgICAgIChXVFI6OmR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OmR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKTogVXBkYXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdUUjo6dG9KUyk6IERl
bGV0ZWQuIFVzZSBmdW5jdGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChX
VFI6Omhhc0RvY3VtZW50RWxlbWVudCk6IFVzZSBvYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKTogVXNlIHNldEds
b2JhbE9iamVjdFByb3BlcnR5LAorICAgICAgICBhbmQgcGFzcyBmZXdlciBhcmd1bWVudHMgdG8g
bWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKTogU3RyZWFtbGluZSBjb2RlIGEgYml0LgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKTog
VXNlIG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Omxhc3RGaWxlVVJMUGF0aENvbXBvbmVudCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNi
YXJUZXh0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVh
Y2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGluZyk6IERpdHRv
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcik6IFVzZSB0b1dLLgor
ICAgICAgICAoV1RSOjpwYWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6Om1haW5GcmFtZSk6IEFk
ZGVkLgorICAgICAgICAoV1RSOjptYWluSlNDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmRpc3BsYXkpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6ZGlzcGxheUFuZFRyYWNrUmVwYWludHMpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6dG9X
Syk6IEFkZGVkIG92ZXJsb2FkIGZvciBkb3VibGUuCisgICAgICAgIChXVFI6OmNyZWF0ZVdLRGlj
dGlvbmFyeSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0
aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbik6IEFkZGVkLgorICAgICAgICAo
V1RSOjpwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NCk6IEFkZGVkLgor
ICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRk
ZWQuCisgICAgICAgIChXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IEFkZGVkLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzaG91bGREdW1wUGl4ZWxzIGNvbnN0KTogVXNlIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXREdW1wUGl4ZWxzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OndoYXRUb0R1bXAgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2hhdFRvRHVt
cCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRXYWl0VW50aWxEb25lKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNob3VsZFdhaXRVbnRpbERvbmUgY29uc3QpOiBVc2UgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlwdCk6IFVzZSBwYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpleGVjQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpmaW5k
T3B0aW9uc0Zyb21BcnJheSk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgYW5kIGNy
ZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNl
IHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmdNYXRjaGVzSW5QYWdl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0
SW5kaWNlcyk6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBhcnJheUxlbmd0aCBhbmQKKyAgICAgICAg
cmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIHN0ZDo6cm91bmQuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk6IFVzZSBwYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVt
U2l6ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hl
RGlza1VzYWdlRm9yT3JpZ2luKTogRGl0dG8uCisgICAgICAgIChXVFI6OnN0cmluZ0FycmF5VG9K
Uyk6IFR3ZWFrZWQgY29kaW5nIHN0eWxlIGEgYml0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1lZGlhRGV2aWNl
c0VuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViUlRDTURO
U0lDRUNhbmRpZGF0ZXNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldEN1c3RvbVVzZXJBZ2VudCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCk6IFVzZSBvdmVy
cmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdl
YkdMMkVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V3JpdGFi
bGVTdHJlYW1BUElFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlm
aWNhdGUpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9u
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1
bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRQbHVnaW5zRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUpOiBVc2UgbWFpbkZyYW1lLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIpOiBSZW1vdmVkIGxvY2FsLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBdWRpb1Jlc3VsdCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6IFVzZSBwYWdlLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9i
amVjdFByb3BlcnR5LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9y
KTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9y
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKTog
VXNlIHJhbmdlLWJhc2VkIGZvciBsb29wLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24pOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5h
dmlnYXRpb24gY29uc3QpOgorICAgICAgICBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbik6CisgICAgICAgIFVzZSBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y2FjaGVUZXN0UnVubmVy
Q2FsbGJhY2spOiBDaGFuZ2VkIG1hcCB0byBzdG9yZSBvYmplY3RzIGluc3RlYWQgb2YgdmFsdWVz
LgorICAgICAgICAoV1RSOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogU2ltcGxpZnkgc2luY2Ug
bWFwIGhhcyBvYmplY3RzLiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYXJUZXN0UnVubmVyQ2FsbGJhY2tzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T25seUFjY2VwdEZpcnN0UGFydHlD
b29raWVzKTogVXNlIGF1dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFVzZXJTdHlsZVNoZWV0RW5hYmxlZCk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24pOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsV2ViTm90
aWZpY2F0aW9uUGVybWlzc2lvbnMpOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6c2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBPcHRp
b25hbDxkb3VibGU+IGluc3RlYWQgb2YgYm9vbC9kb3VibGUKKyAgICAgICAgcGFpcnMsIGxldHRp
bmcgdGhlIElETCBiaW5kaW5ncyBkbyB0aGUgd29yayBmb3IgdXMuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFJl
bW92ZWQgbG9jYWwuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzRG9pbmdNZWRpYUNhcHR1
cmUgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlz
c2lvbkZvck9yaWdpbik6IFJlbW92ZWQgbG9jYWxzLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
Ojp1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RDb3VudEZvck9yaWdpbik6IERJdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjYWxs
U2hvdWxkQ2xvc2VPbldlYlZpZXcpOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpxdWV1ZUxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVl
dWVMb2FkSFRNTFN0cmluZyk6IFJlbW92ZWQgYSBsb2NhbC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXMpOgorICAgICAgICBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQgY29uc3QpOiBVc2Ug
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKTogVXNlIG1h
aW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGls
ZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlv
bik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVOYXZp
Z2F0aW9uUG9saWN5QWZ0ZXJEZWxheSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNF
bmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldElnbm9yZXNWaWV3
cG9ydFNjYWxlTGltaXRzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNo
b3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycyk6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0KTogVXNlIHBvc3RQYWdlTWVz
c2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHRJbW1lZGlhdGVseSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdENhbGxiYWNrKTog
VXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldEFsbG93ZWRN
ZW51QWN0aW9ucyk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwKKyAgICAgICAgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbEN1c3Rv
bU1lbnVBY3Rpb24pOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKTogVXNlIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvZXNTdGF0aXN0aWNzRG9tYWluSURF
eGlzdEluRGF0YWJhc2UpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VS
ZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
RW5hYmxlZCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppc1N0YXRpc3RpY3NFcGhlbWVyYWwpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzRGVidWdNb2RlKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRXhwaXJlZFN0
YXRpc3RpYyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6IFVzZSBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NWZXJ5UHJldmFs
ZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0
aWNzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKTogVXNlIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6aXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlKTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKTogVXNlIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZUlUUERh
dGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0dy
YW5kZmF0aGVyZWQpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Rp
ZFJ1blRlbGVtZXRyeUNhbGxiYWNrKTogVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSk6IFVzZSBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdCk6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJpbmdUaW1lKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NNYXhTdGF0aXN0aWNzRW50cmllcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKTog
VXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURh
dGFSZW1vdmFsKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NE
ZWxldGVDb29raWVzRm9ySG9zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UpOiBVc2UgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXApOiBVc2UgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aGFzU3RhdGlzdGljc0lzb2xh
dGVkU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xl
YW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3Jh
ZGVSZWZlcnJlcik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NT
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWlu
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmdldEFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6Om1ha2VEb21haW5zVmFs
dWUpOiBGYWN0b3JlZCBvdXQuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2spOiBV
c2UgbWFrZURvbWFpbnNWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bG9hZGVkU3Vi
cmVzb3VyY2VEb21haW5zKTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKTogVXNl
IG1ha2VEb21haW5zVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFkZE1vY2tNZWRp
YURldmljZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpjbGVhck1vY2tNZWRpYURldmljZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6cmVtb3ZlTW9ja01lZGlhRGV2aWNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnJlc2V0TW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQpOiBV
c2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCk6IFVzZSBwb3N0U3luY2hy
b25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dh
bWVwYWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRE
ZXRhaWxzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFk
QXhpc1ZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1l
cGFkQnV0dG9uVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T3Bl
blBhbmVsRmlsZXMpOiBVc2UgbWFpbkpTQ29udGV4dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3Ry
aW5nLAorICAgICAgICBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRPcGVuUGFuZWxGaWxlc01lZGlhSWNvbik6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBw
b3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlbW92ZUFsbFNlc3Np
b25DcmVkZW50aWFscyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6Y2xlYXJET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpjbGVhckRPTUNhY2hlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpoYXNET01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJl
dHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZSk6
IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZSk6IFVzZSBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QXBw
bGljYXRpb25NYW5pZmVzdFRoZW4pOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmluamVjdFVzZXJTY3JpcHQpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdl
ZE1lc3NhZ2VGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6YWRkVGVzdEtleVRvS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYW5VcEtleWNoYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmtleUV4aXN0c0luS2V5Y2hhaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXJ2ZXJUcnVzdEV2YWx1
YXRpb25DYWxsYmFja0NhbGxzQ291bnQpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxk
RGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseSk6IFVzZQorICAgICAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphYm9ydE1vZGFs
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmR1bXBBZENsaWNrQXR0cmlidXRp
b24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92
YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9m
ZnNjcmVlbkNhbnZhc0VuYWJsZWQpOiBVc2Ugb3ZlcnJpZGVQcmVmZXJlbmNlLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNlc3Npb24pOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpj
bGVhckFwcEJvdW5kU2Vzc2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRBcHBCb3VuZERvbWFpbnMpOiBVc2UgbWFpbkpTQ29udGV4
dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3RyaW5nLAorICAgICAgICBhbmQgdG9XSy4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6cG9zdE1lc3NhZ2UpOiBBZGRlZC4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOiBVcGRhdGVkIGZvciB0
aGUgYWJvdmUuIEFsc28gY2hhbmdlZAorICAgICAgICBvdmVycmlkZVByZWZlcmVuY2Ugb3QgYSBz
dGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGV4dElu
cHV0Q29udHJvbGxlcjo6VGV4dElucHV0Q29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OlRleHRJbnB1dENvbnRyb2xsZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6VGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdCk6IFVz
ZSBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBE
ZWxldGVkLiBVc2UgdGhlIG9uZSBmcm9tIEpTQmFzaWNzLmggbm93LgorICAgICAgICAoV1RSOjpj
cmVhdGVDb21wb3NpdGlvbkhpZ2hsaWdodERhdGEpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmg6IFVw
ZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3Ry
aW5nLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVKU1N0cmluZyBmcm9tIEpTQmFzaWNzLmggbm93Lgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRV
SUVsZW1lbnRzKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRGVz
Y3JpcHRpb25PZkF0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcyk6
IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxl
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0
aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omxhbmd1YWdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnZhbHVlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNGb2N1c2VkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRlIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9w
RWZmZWN0cyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29s
dW1ucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZSb3dzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2li
aWxpdHlWYWx1ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZT
Y3JlZW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDb2xsYXBzZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24p
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tOgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRlclByb3h5OjpFdmVudFNlbmRlclByb3h5KTogSW5pdGlhbGl6ZSBpbiB0aGUgY2xh
c3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2Vu
ZGVyUHJveHkpOiBEZWxldGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbToKKyAgICAgICAgKFdUUjo6bWFr
ZUpTQXJyYXkpOiBSZXR1cm4gYSBKU09iamVjdFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VBcnJheVJl
ZkZvckFycmF5LgorICAgICAgICAoV1RSOjptYWtlSlNPYmplY3QpOiBSZXR1cm4gYSBKU09iamVj
dFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5LgorICAgICAgICAo
V1RSOjptYWtlVmFsdWVSZWZGb3JWYWx1ZSk6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAg
ICAgKFdUUjo6c2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENy
aXRlcmlhKTogVXNlIHRvV1RGU3RyaW5nCisgICAgICAgIGFuZCBhcnJheUxlbmd0aC4KKworICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToK
KyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVK
U1N0cmluZyBmcm9tIEpTQmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6Y29udmVydFZl
Y3RvclRvT2JqZWN0QXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6
IFJlbmFtZWQgZnJvbSBjb252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheS4KKyAgICAgICAgKFdUUjo6
c2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYSk6IFVzZSB0b1dURlN0
cmluZyBhbmQgYXJyYXlMZW5ndGguCisgICAgICAgIChXVFI6OnNlYXJjaFRleHRQYXJhbWV0ZXJp
emVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm93SGVhZGVycyBjb25zdCk6IFVzZSBtYWtlSlNBcnJheS4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJh
eUF0dHJpYnV0ZVZhbHVlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlYXJjaFRleHRXaXRoQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlIGNvbnN0KTogVXNl
IGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
b2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjppbnNwZWN0b3JUZXN0U3R1YlVSTCk6IFJlbW92ZSBsb2NhbHMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oOiBBZGRlZCB0b1dLU3RyaW5nIG92
ZXJsb2FkIHRoYXQgY29udmVydHMgZnJvbQorICAgICAgICBhIEpTVmFsdWVSZWYsIEpTU3RyaW5n
UmVmLCBvciBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYW5kIHRvV0sgb3ZlcmxvYWQgdGhhdCBj
b252ZXJ0cworICAgICAgICBmcm9tIGEgY29uc3QgY2hhciouCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemUpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVMaXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpjaGVja0ZvcldvcmxkTGVha3MpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6
Y29udGVudEV4dGVuc2lvbkpTT05QYXRoKTogVXNlIHRvU1RELgorICAgICAgICAoV1RSOjpUZXN0
Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QpOiBVc2UgdG9XSy4K
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSk6IFVzZSBzdHJpbmdWYWx1ZQorICAgICAgICBhbmQgdWludDY0VmFs
dWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50
c0xpc3QpOiBVc2UgZGljdGlvbmFyeVZhbHVlIGFuZAorICAgICAgICB1aW50NjRWYWx1ZS4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKTogVXNlIGRpY3Rpb25hcnlWYWx1ZSwKKyAgICAgICAgc3RyaW5nVmFsdWUsIHVpbnQ2
NFZhbHVlLCBkb3VibGVWYWx1ZSwgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0QmxvY2tBbGxQbHVnaW5z
KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5TdXBw
b3J0ZWRNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKTogUmVtb3ZlZCBsb2NhbC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSk6IFVzZSBhdXRvIGFuZCB0b1dURlN0cmluZworICAgICAgICBpbnN0ZWFkIG9mIHRvU1RE
LgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24pOiBVc2UgT3B0aW9uYWwgaW5zdGVhZCBvZiBwYWlycworICAgICAgICBvZiBib29sIGFuZCBk
b3VibGUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpoYW5kbGVDaGVja09mVXNlck1l
ZGlhUGVybWlzc2lvbkZvck9yaWdpbik6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3Np
YmxlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJ
ZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyk6IFVzZSB0b1dLLgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6
OnBvc3RQYWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
VGVzdEluY292YXRpb24pOiBVc2UgdG9XVEZTdHJpbmcuCisgICAgICAgIChXVFI6OlRlc3RJbnZv
Y2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KTogVXNlIGF1dG8gYW5kIHNldFZh
bHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKTogVXNlIHBvc3RQYWdl
TWVzc2FnZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UKKyAg
ICAgICAgYW5kIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
UmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZQorICAgICAg
ICBkaWN0aW9uYXJ5VmFsdWUsIGJvb2xlYW5WYWx1ZSwgdmFsdWUsIHN0cmluZ1ZhbHVlLCBkb3Vi
bGVWYWx1ZSwgYW5kCisgICAgICAgIG9wdGlvbmFsRG91YmxlVmFsdWUuCisgICAgICAgIChXVFI6
OlRlc3RJbnZvY2F0aW9uOjp1aVNjcmlwdERpZENvbXBsZXRlKTogVXNlIHBvc3RQYWdlTWVzc2Fn
ZSBhbmQgc2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRCZWdpblN3
aXBlKTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OndpbGxFbmRTd2lwZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
RW5kU3dpcGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92
ZVN3aXBlU25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246Om5v
dGlmeURvd25sb2FkRG9uZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
ZGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJz
aXRlRGF0YVJlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJ
bnZvY2F0aW9uOjpkaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OmRpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbik6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVzZXRTdGF0aXN0aWNzVG9Db25z
aXN0ZW50U3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNl
dEJsb2NrQ29va2llc0Zvckhvc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRp
b246OmRpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRMYXN0U2Vlbik6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkTWVyZ2VTdGF0aXN0aWMpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291
cmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21h
aW5zKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVBbGxT
ZXNzaW9uQ3JlZGVudGlhbHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFNldEFwcEJvdW5kRG9tYWlucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2Nh
dGlvbjo6cGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24pOiBEaXR0by4KKworICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICBBZGRlZCBKU0Jhc2ljcy5oIHRvIERpY3Rpb25hcnlGdW5jdGlvbnMuaCB0byBhcHBy
b3ByaWF0ZSB0YXJnZXRzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdUUjo6U2NyaXB0SXRlbTo6U2NyaXB0SXRlbSk6IFVzZSB0
b1dLLgorICAgICAgICAoV1RSOjpXb3JrUXVldWVNYW5hZ2VyOjpxdWV1ZUxvYWRIVE1MU3RyaW5n
KTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29u
dHJvbGxlckNvY29hLmg6IE1ha2UgbW9zdCBmdW5jdGlvbnMgcHJpdmF0ZS4KKworICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW06CisgICAg
ICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlckNvY29hOjpvdmVycmlkZVByZWZlcmVuY2UpOiBV
c2UgdG9XVEZTdHJpbmcuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MuaDogTWFya2VkIHRoZSBjbGFzcyBmaW5hbCBhbmQgbWFkZQorICAgICAg
ICBtb3N0IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6
IERlbGV0ZWQuIFVzZSB0aGUgb25lIGluIEpTQmFzaWNzLmguCisgICAgICAgIChXVFI6OnBhcnNl
TW9kaWZpZXJBcnJheSk6IFVzZSB0aGUgbmV3IHRvV1RGU3RyaW5nIG92ZXJsb2FkLgorICAgICAg
ICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJl
S2V5Ym9hcmQpOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50
U2VuZGVyUHJveHkubW06CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2Vu
ZGVyUHJveHkpOiBJbml0aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3duKTogVXNlIHRvV1RGU3RyaW5nLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmg6IE1hcmtl
ZCB0aGUgY2xhc3MgZmluYWwgYW5kIG1hZGUKKyAgICAgICAgbW9zdCBmdW5jdGlvbnMgcHJpdmF0
ZS4KKwogMjAyMC0wOS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHJ1bi13ZWJraXQtdGVzdHMgY29kZSB0aGF0IHN0cmlwcyB0cmFpbGluZyBzcGFj
ZXMgd2hlbiBjb21wYXJpbmcgZXhwZWN0ZWQudHh0IGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKaW5kZXggMWEwYzE2NzA2YjJhZTQy
NjBlMzJkMjkwNDQ5YmYyZDY1Y2ZhM2RmYS4uOWUyNDBlNTU5Y2E0NTIzMzc0Nzk4NGE2YmE5MzUx
NTRhYWNjZDdkZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogCiAvLyBTdGF0aWMgVmFsdWUgR2V0dGVycwogCkBA
IC00NywxNSArNDgsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRSb290RWxlbWVudENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzTwogCiAvLyBPYmplY3QgQ3Jl
YXRpb24KIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIiKSk7Ci0gICAgCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpT
Q2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyT2JqZWN0ID0g
SlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVsZWFz
ZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJTdHIuZ2V0KCksIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgSlNPYmplY3RNYWtl
KGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQoKSwgdGhpcykpOwogfQogCiBzdGF0aWMgSlNW
YWx1ZVJlZiBsb2dGb2N1c0V2ZW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwg
SlNWYWx1ZVJlZiopCkBAIC0xNTIsOSArMTQ3LDkgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0UGxh
dGZvcm1OYW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXMK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcGxhdGZvcm1OYW1lLmdldCgp
KTsKIH0KIAotSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFzcygp
CitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRl
SlNDbGFzcygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25z
W10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRpY0Z1bmN0aW9uIGZ1bmN0aW9uc1td
ID0gewogICAgICAgICB7ICJsb2dGb2N1c0V2ZW50cyIsIGxvZ0ZvY3VzRXZlbnRzQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAibG9nVmFsdWVDaGFuZ2VFdmVudHMiLCBsb2dWYWx1ZUNoYW5n
ZUV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImxvZ1Njcm9sbGluZ1N0YXJ0RXZl
bnRzIiwgbG9nU2Nyb2xsaW5nU3RhcnRFdmVudHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMTY2LDIx
ICsxNjEsMTggQEAgSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0SlNDbGFz
cygpCiAgICAgICAgIHsgImVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSIsIGVuYWJsZUVuaGFu
Y2VkQWNjZXNzaWJpbGl0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAg
ICAgfTsKLQotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAg
IHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAi
Zm9jdXNlZEVsZW1lbnQiLCBnZXRGb2N1c2VkRWxlbWVudENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgInJvb3RFbGVtZW50IiwgZ2V0Um9vdEVsZW1lbnRDYWxsYmFjaywgMCwga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7ICJlbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkIiwgZ2V0RW5oYW5jZWRB
Y2Nlc3NpYmlsaXR5RW5hYmxlZENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInBsYXRm
b3JtTmFtZSIsIGdldFBsYXRmb3JtTmFtZUNhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
MCwgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFz
c0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyIiwgMCwgc3RhdGljVmFsdWVzLCBzdGF0aWNGdW5jdGlvbnMsCisg
ICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7CisgICAgICAg
IDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgMCwg
dmFsdWVzLCBmdW5jdGlvbnMsCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7
CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pKTsKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAppbmRleCAxZGM3
ZDNiNTYzYTE1NGY0Y2U5YmY3YTMwMzBjOGM1YTc2OTdmMzlhLi44YTI4N2M0OGIxZGY1MzZiNDc1
YjYxODQxN2MyNjEzNWZiMzg2MTI2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAg
ICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKICAgICB+QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZv
aWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgLy8gQ29udHJvbGxlciBN
ZXRob2RzIC0gcGxhdGZvcm0taW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zCiAgICAgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCByb290RWxlbWVudCgpOwpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNzKCk7
CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsKIAog
I2lmIFBMQVRGT1JNKFdJTikKICAgICBIV0lORVZFTlRIT09LIG1fZm9jdXNFdmVudEhvb2sgeyBu
dWxscHRyIH07CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuY3BwCmluZGV4IDBlNWE1MGY2YjlkM2NlNWNhNzdiYTQ0ODY4N2MwMDljYmIxNzVkMjAuLjhl
Zjg1ZWVkZjA4NGQ2NzYyMjcxY2FmMmM4ZjQ0YWI4NTQ3OTI2NzEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCkBAIC0yMDYsNyArMjA2LDcg
QEAgc3RhdGljIEpTVmFsdWVSZWYgdWlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVkaWNhdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBz
dGFydEVsZW1lbnQgPSBudWxscHRyOwogICAgIGJvb2wgaXNEaXJlY3Rpb25OZXh0ID0gdHJ1ZTsK
ICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleSA9IG51bGxwdHI7Ci0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHNlYXJjaFRleHQgPSBudWxscHRyOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBzZWFyY2hUZXh0OwogICAgIGJvb2wgdmlzaWJsZU9ubHkgPSBmYWxzZTsKICAgICBib29s
IGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSA9IGZhbHNlOwogICAgIGlmIChhcmd1bWVudENvdW50
ID49IDUgJiYgYXJndW1lbnRDb3VudCA8PSA2KSB7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0gYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0KaW5k
ZXggZWNlNTFlYTM5YTUxNjgzNTRiZDU2OTQ2MzU5MDg2ZDkwMjJlYTE5ZC4uMTRjNjI3MGY4MjMx
ZGMwZjI2YTA1ZTY5NWRhODQ3YmRmOGU0OGM4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVyVHJlZS5wbQpA
QCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MzEsMTAgKzQz
MSwxMCBAQCBzdWIgX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yCiB7CiAgICAgbXkgKCRzZWxmLCAk
dHlwZSwgJGFyZ3VtZW50TmFtZSkgPSBAXzsKIAotICAgIHJldHVybiAiSlNWYWx1ZVRvTnVsbGFi
bGVCb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFtZSBlcSAiYm9v
bGVhbiIgJiYgJHR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsQm9vbChj
b250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0
eXBlLT5pc051bGxhYmxlOwogICAgIHJldHVybiAiSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCAk
YXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAi
JGFyZ3VtZW50TmFtZSIgaWYgJHR5cGUtPm5hbWUgZXEgIm9iamVjdCI7Ci0gICAgcmV0dXJuICJh
ZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsICRhcmd1bWVudE5hbWUsIG51bGxwdHIp
KSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJl
dHVybiAiY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICQkc2VsZntj
b2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gIkpTVmFsdWVU
b051bWJlcihjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSIgaWYgJCRzZWxme2NvZGVH
ZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAidG8iIC4gX2lt
cGxlbWVudGF0aW9uQ2xhc3NOYW1lKCR0eXBlKSAuICIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSki
OwogfQpAQCAtNDcyLDExICs0NzIsMTEgQEAgc3ViIF9yZXR1cm5FeHByZXNzaW9uCiAgICAgbXkg
KCRzZWxmLCAkcmV0dXJuVHlwZSwgJGV4cHJlc3Npb24pID0gQF87CiAKICAgICByZXR1cm4gIkpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAidW5k
ZWZpbmVkIjsKLSAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICRyZXR1
cm5UeXBlLT5pc051bGxhYmxlOworICAgIHJldHVybiAibWFrZVZhbHVlKGNvbnRleHQsICR7ZXhw
cmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5
cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwg
JHtleHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICBy
ZXR1cm4gIiR7ZXhwcmVzc2lvbn0iIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJvYmplY3QiOwog
ICAgIHJldHVybiAiSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCRyZXR1cm5UeXBlKTsKLSAg
ICByZXR1cm4gIkpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0u
Z2V0KCkpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkcmV0dXJuVHlw
ZSk7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSki
IGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKICAg
ICByZXR1cm4gInRvSlMoY29udGV4dCwgV1RGOjpnZXRQdHIoJHtleHByZXNzaW9ufSkpIjsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKaW5kZXggNGEzN2JmM2ExM2RhNGNh
ZWVhNDBhMGNmOGE3MDlmZTU4ZDM0ZWE0Yy4uYWVmN2VjOGE1MDViZmM1MWE4N2UzZDJmOWUxNjc1
MzlkZWUyOWRjNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVy
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcyICsy
OSw0OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgog
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotCi1HQ0NvbnRyb2xsZXI6OkdDQ29udHJvbGxlcigp
Ci17Ci19Ci0KLUdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcigpCi17Ci19CisjaW5jbHVkZSAi
SlNCYXNpY3MuaCIKIAogLy8gU3RhdGljIEZ1bmN0aW9ucwogCiBzdGF0aWMgSlNWYWx1ZVJlZiBj
b2xsZWN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+Y29sbGVjdCgpOworICAg
IGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4oSlNPYmplY3RH
ZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLmNvbGxlY3QoKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
UmVmIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKLSAgICBib29sIHdhaXRVbnRpbERvbmUgPSBmYWxzZTsKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA+IDApCi0gICAgICAgIHdhaXRVbnRpbERvbmUgPSBKU1ZhbHVlVG9Cb29sZWFu
KGNvbnRleHQsIGFyZ3VtZW50c1swXSk7Ci0KLSAgICBHQ0NvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCh3YWl0VW50aWxE
b25lKTsKLQorICAgIGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBib29sIHdhaXRVbnRpbERv
bmUgPSBhcmd1bWVudENvdW50ID4gMCAmJiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVu
dGlsRG9uZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQog
CiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRKU09iamVjdENvdW50Q2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0g
ICAgc2l6ZV90IGpzT2JqZWN0Q291bnQgPSBjb250cm9sbGVyLT5nZXRKU09iamVjdENvdW50KCk7
Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwganNPYmplY3RDb3VudCk7
CisgICAgYXV0byYgY29udHJvbGxlciA9ICpzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09i
amVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJl
cihjb250ZXh0LCBjb250cm9sbGVyLmdldEpTT2JqZWN0Q291bnQoKSk7CiB9CiAKIC8vIE9iamVj
dCBDcmVhdGlvbgogCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCkKIHsKLSAgICBhdXRvIGdjQ29udHJvbGxlclN0ciA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJHQ0NvbnRyb2xsZXIiKSk7Ci0KLSAgICBKU0NsYXNzUmVmIGNs
YXNzUmVmID0gZ2V0SlNDbGFzcygpOwotICAgIEpTVmFsdWVSZWYgZ2NDb250cm9sbGVyT2JqZWN0
ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVs
ZWFzZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRv
d09iamVjdCwgZ2NDb250cm9sbGVyU3RyLmdldCgpLCBnY0NvbnRyb2xsZXJPYmplY3QsIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUs
IGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAi
R0NDb250cm9sbGVyIiwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQo
KSwgdGhpcykpOwogfQogCi1KU0NsYXNzUmVmIEdDQ29udHJvbGxlcjo6Z2V0SlNDbGFzcygpCitK
U1JldGFpblB0cjxKU0NsYXNzUmVmPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewot
ICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0geworICAgIHN0
YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKICAgICAgICAg
eyAiY29sbGVjdCIsIGNvbGxlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJjb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWQiLCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJnZXRKU09iamVjdENvdW50IiwgZ2V0SlNPYmplY3RDb3VudENhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBK
U0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNz
QXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIHN0YXRpY0Z1bmN0aW9ucywKKyAg
ICBzdGF0aWMgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsKKyAgICAgICAg
MCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiR0NDb250cm9sbGVyIiwgMCwgMCwgZnVuY3Rpb25z
LAogICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiAgICAgfTsKLQotICAg
IHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJldHVybiBhZG9w
dChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJv
bGxlci5oCmluZGV4IDY0MjQzODRkZjUzMGU4YzFmZGFlOGZiNjEzMTFiZjBhZGM0YTZhOGYuLjM3
YWE0NmE3NzRjZTNlNzBiODc4OWQ0NDNmMWU0MTgxNGFjNThmNWMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0dDQ29udHJvbGxlci5oCkBAIC0yNiwxOSArMjYsMTUgQEAKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBHQ0NvbnRyb2xsZXJfaAotI2RlZmluZSBHQ0NvbnRyb2xsZXJfaAorI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KIAogY2xhc3MgR0NDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBHQ0NvbnRyb2xsZXIoKTsKLSAgICB+R0NDb250cm9sbGVyKCk7Ci0KLSAg
ICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lkIG1ha2VXaW5k
b3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIC8vIENvbnRyb2xsZXIgTWV0aG9kcyAtIHBs
YXRmcm9tIGluZGVwZW5kYW50IGltcGxlbWVudGF0aW9ucwogICAgIHZvaWQgY29sbGVjdCgpIGNv
bnN0OwpAQCAtNDYsNyArNDIsNSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGdldEpTT2JqZWN0Q291
bnQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNz
KCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3MoKTsK
IH07Ci0KLSNlbmRpZiAvLyBHQ0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVy
LmNwcAppbmRleCA1ZTUzNWFmMWRlYWQ4NDJkMmVmNGY1Zjc2NjAyYzgzYTk1MGI3NjUyLi4zN2Y2
OTFjYjc5NmI1NjM5MjYyODA0ZWUzZjQwMWNhYmRhZThmMGUxIDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0UnVubmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSAi
V29ya1F1ZXVlSXRlbS5oIgpAQCAtMzgsMTAgKzM5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDVGVzdFJ1bm5lclV0aWxzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVk1JbmxpbmVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Mb2dJ
bml0aWFsaXphdGlvbi5oPgpAQCAtNDg5LDcgKzQ4Nyw2IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRp
c3BsYXlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dz
IGltcGxlbWVudGF0aW9uCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGNvbnRy
b2xsZXItPmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCk7CiAKQEAgLTQ5OCwxMiArNDk1LDEwIEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGVuY29kZUhvc3RO
YW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBt
YWMgaW1wbGVtZW50YXRpb24KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
KTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKICAgICBhdXRvIGVuY29kZWRIb3N0TmFtZSA9IGNvbnRyb2xsZXItPmNvcHlFbmNv
ZGVkSG9zdE5hbWUobmFtZS5nZXQoKSk7CkBAIC01MTIsMjIgKzUwNywxMiBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBleGVjQ29tbWFuZENhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRz
W10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgTWFjICYgV2luZG93cyBp
bXBsZW1lbnRhdGlvbnMuCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5hbWUgPSBhZG9w
dChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQorICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRl
SlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICAvLyBJZ25vcmluZyB0aGUgc2Vj
b25kIHBhcmFtZXRlciAodXNlckludGVyZmFjZSksIGFzIHRoaXMgY29tbWFuZCBlbXVsYXRlcyBh
IG1hbnVhbCBhY3Rpb24uCi0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdmFsdWU7Ci0g
ICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMykgewotICAgICAgICB2YWx1ZSA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKLSAgICAg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmFsdWUgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotCisgICAgYXV0byB2YWx1ZSA9
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDIgPyBhcmd1bWVu
dHNbMl0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICBj
b250cm9sbGVyLT5leGVjQ29tbWFuZChuYW1lLmdldCgpLCB2YWx1ZS5nZXQoKSk7CkBAIC01NDEs
MTEgKzUyNiw4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGZpbmRTdHJpbmdDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sCiAgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAK
LSAgICBhdXRvIHRhcmdldCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotCi0gICAg
SlNPYmplY3RSZWYgb3B0aW9ucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBhdXRvIHRhcmdl
dCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKKyAgICBhdXRv
IG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFdLCBudWxscHRy
KTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmZpbmRTdHJpbmcoY29udGV4dCwgdGFyZ2V0
LmdldCgpLCBvcHRpb25zKSk7CkBAIC01NjYsOCArNTQ4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYg
aXNDb21tYW5kRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW4KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NF
UlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29u
dGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIApA
QCAtNTc5LDEwICs1NjAsOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBvdmVycmlkZVByZWZlcmVuY2VD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZgogICAgIGlmIChhcmd1
bWVudENvdW50IDwgMikKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogCi0gICAgYXV0byBrZXkgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAg
ICBhdXRvIHZhbHVlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYXV0byBr
ZXkgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7CisgICAgYXV0
byB2YWx1ZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzFdKTsKIAog
ICAgIC8vIFNob3VsZCB1c2UgYDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zv
cndhcmRDYWNoZT10cnVlIF0gLS0+YCBpbnN0ZWFkLgogICAgIFJFTEVBU0VfQVNTRVJUKCFKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleS5nZXQoKSwgIldlYktpdFVzZXNCYWNrRm9yd2Fy
ZENhY2hlUHJlZmVyZW5jZUtleSIpKTsKQEAgLTY2MiwxNSArNjQxLDEwIEBAIHN0YXRpYyBKU1Zh
bHVlUmVmIHF1ZXVlTG9hZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gdXJsID0gYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAg
IGF1dG8gdXJsID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudHNbMF0pOwog
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
dGFyZ2V0OwotICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAgdGFyZ2V0ID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlv
bikpOwotICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIH0gZWxzZQotICAgICAgICB0
YXJnZXQgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworICAgIGF1
dG8gdGFyZ2V0ID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVudENvdW50ID4g
MSA/IGFyZ3VtZW50c1sxXSA6IG51bGxwdHIpOwogCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOwogICAgIGNvbnRyb2xsZXItPnF1ZXVlTG9hZCh1cmwuZ2V0KCksIHRhcmdldC5nZXQoKSk7
CkBAIC02OTIsNyArNjY2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2FkSFRNTFN0cmlu
Z0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZgogICAgICAgICBiYXNl
VVJMID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOwogICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogICAgIH0gZWxzZQotICAg
ICAgICBiYXNlVVJMID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsK
KyAgICAgICAgYmFzZVVSTCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIAogICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKIApAQCAtMjA0NSwzNCArMjAxOSwyNCBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBydW5VSVNjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiwgSlNPYmplYwogCiBzdGF0aWMgdm9pZCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUoSlNPYmpl
Y3RSZWYgb2JqZWN0KQogewotICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIGNvbnRyb2xs
ZXItPmRlcmVmKCk7CisgICAgc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKS0+ZGVyZWYoKTsKIH0KIAogLy8gT2JqZWN0IENyZWF0aW9uCiAKLXZvaWQg
VGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFRlc3RSdW5u
ZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgYXV0byB0
ZXN0UnVubmVyU3RyID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRlc3RS
dW5uZXIiKSk7CiAgICAgcmVmKCk7Ci0KLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlND
bGFzcygpOwotICAgIEpTVmFsdWVSZWYgbGF5b3V0VGVzdENvbnRvbGxlck9iamVjdCA9IEpTT2Jq
ZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xh
c3NSZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3Qs
IHRlc3RSdW5uZXJTdHIuZ2V0KCksIGxheW91dFRlc3RDb250b2xsZXJPYmplY3QsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4
Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGVz
dFJ1bm5lciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCkuZ2V0KCksIHRo
aXMpKTsKIH0KIAotSlNDbGFzc1JlZiBUZXN0UnVubmVyOjpnZXRKU0NsYXNzKCkKK0pTUmV0YWlu
UHRyPEpTQ2xhc3NSZWY+IFRlc3RSdW5uZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewotICAgIHN0YXRp
YyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMgPSBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMo
KTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zID0gVGVzdFJ1
bm5lcjo6c3RhdGljRnVuY3Rpb25zKCk7Ci0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNs
YXNzRGVmaW5pdGlvbiA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiVGVz
dFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAorICAgIHN0YXRpYyBj
b25zdCBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0geworICAgICAgICAwLCBrSlNDbGFz
c0F0dHJpYnV0ZU5vbmUsICJUZXN0UnVubmVyIiwgMCwgc3RhdGljVmFsdWVzKCksIHN0YXRpY0Z1
bmN0aW9ucygpLAogICAgICAgICAwLCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNs
YXNzRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRp
b24pKTsKIH0KIAogLy8gQ29uc3RhbnRzCkBAIC0yMTA3LDkgKzIwNzEsOSBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBnZXRSRU5ERVJfVFJFRV9TSE9XX0xBWUVSX0ZSQUdNRU5UUyhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYgogICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAzMik7
CiB9CiAKLUpTU3RhdGljVmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCitjb25zdCBK
U1N0YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogewotICAgIHN0YXRpYyBK
U1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNT
dGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAiZGlkQ2FuY2VsQ2xpZW50UmVkaXJl
Y3QiLCBnZXREaWRDYW5jZWxDbGllbnRSZWRpcmVjdCwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJ0
aW1lb3V0IiwgZ2V0VGltZW91dENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImdsb2Jh
bEZsYWciLCBnZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIHNldEdsb2JhbEZsYWdDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCkBAIC0yMTI3LDEyICsyMDkxLDEyIEBAIEpTU3RhdGlj
VmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCiAgICAgICAgIHsgIlJFTkRFUl9UUkVF
X1NIT1dfTEFZRVJfRlJBR01FTlRTIiwgZ2V0UkVOREVSX1RSRUVfU0hPV19MQVlFUl9GUkFHTUVO
VFMsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAwLCAwLCAwLCAwIH0KICAgICB9OwotICAgIHJldHVy
biBzdGF0aWNWYWx1ZXM7CisgICAgcmV0dXJuIHZhbHVlczsKIH0KIAotSlNTdGF0aWNGdW5jdGlv
biogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKK2NvbnN0IEpTU3RhdGljRnVuY3Rpb24q
IFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRp
Y0Z1bmN0aW9uIGZ1bmN0aW9uc1tdID0gewogICAgICAgICB7ICJhYm9ydE1vZGFsIiwgYWJvcnRN
b2RhbENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZERpc2FsbG93ZWRVUkwiLCBhZGRE
aXNhbGxvd2VkVVJMQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkVVJMVG9SZWRpcmVj
dCIsIGFkZFVSTFRvUmVkaXJlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMjI5Nyw3ICsyMjYxLDcg
QEAgSlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKICAgICAg
ICAgeyAwLCAwLCAwIH0KICAgICB9OwogCi0gICAgcmV0dXJuIHN0YXRpY0Z1bmN0aW9uczsKKyAg
ICByZXR1cm4gZnVuY3Rpb25zOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxT
dHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKQEAgLTIzNDIs
MTQgKzIzMDYsMTEgQEAgdm9pZCBUZXN0UnVubmVyOjppZ25vcmVMZWdhY3lXZWJOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdHMoKQogCiB2b2lkIFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyRmlyZWQoKQogewotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAiRkFJTDogVGlt
ZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iOwotICAgIGZwcmlu
dGYodGVzdFJlc3VsdCwgIiVzIiwgbWVzc2FnZSk7CisgICAgZnB1dHMoIkZBSUw6IFRpbWVkIG91
dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIiwgdGVzdFJlc3VsdCk7CiAK
LSAgICBhdXRvIGFjY3VtdWxhdGVkTG9ncyA9IGdldEFuZFJlc2V0QWNjdW11bGF0ZWRMb2dzKCk7
Ci0gICAgaWYgKCFhY2N1bXVsYXRlZExvZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIG1lc3NhZ2UgPSAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4iOwotICAg
ICAgICBmcHJpbnRmKHRlc3RSZXN1bHQsICIlcyVzXG4iLCBtZXNzYWdlLCBhY2N1bXVsYXRlZExv
Z3MudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQorICAgIGF1dG8gbG9ncyA9IGdldEFuZFJlc2V0QWNj
dW11bGF0ZWRMb2dzKCk7CisgICAgaWYgKCFsb2dzLmlzRW1wdHkoKSkKKyAgICAgICAgZnByaW50
Zih0ZXN0UmVzdWx0LCAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46XG4lc1xuIiwg
bG9ncy51dGY4KCkuZGF0YSgpKTsKIAogICAgIG5vdGlmeURvbmUoKTsKIH0KQEAgLTI0MDMsMjQg
KzIzNjQsMjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRBY2N1bW11bGF0ZUxvZ3NGb3JDaGFubmVs
KEpTU3RyaW5nUmVmIGNoYW5uZWwpCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRMb2dDaGFu
bmVsVG9BY2N1bXVsYXRlKHsgYnVmZmVyLmdldCgpIH0pOwogfQogCi10eXBlZGVmIFdURjo6SGFz
aE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVJlZj4gQ2FsbGJhY2tNYXA7Cit1c2luZyBDYWxsYmFja01h
cCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNPYmplY3RSZWY+Owogc3RhdGljIENhbGxiYWNr
TWFwJiBjYWxsYmFja01hcCgpCiB7CiAgICAgc3RhdGljIENhbGxiYWNrTWFwJiBtYXAgPSAqbmV3
IENhbGxiYWNrTWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6Y2Fj
aGVUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIEpTVmFsdWVSZWYgY2FsbGJhY2sp
Cit2b2lkIFRlc3RSdW5uZXI6OmNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4
LCBKU1ZhbHVlUmVmIGNhbGxiYWNrVmFsdWUpCiB7Ci0gICAgaWYgKCFjYWxsYmFjaykKKyAgICBh
dXRvIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKKyAgICBpZiAoIWNhbGxiYWNrVmFs
dWUgfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYWxsYmFja1ZhbHVlKSkKICAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gY2FsbGJhY2sgPSAoSlNPYmplY3RSZWYpY2FsbGJhY2tWYWx1ZTsK
IAogICAgIGlmIChjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkgewotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5lciBj
YWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICVkKVxuIiwgaW5kZXgpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVzdFJ1bm5l
ciBjYWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICV1KVxuIiwgaW5kZXgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluRnJhbWVK
U0NvbnRleHQoKTsKICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAg
Y2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNrKTsKIH0KQEAgLTI0MzAsMjIgKzIzOTIs
MTggQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGlu
ZGV4LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY28KICAgICBpZiAoIWNhbGxiYWNrTWFwKCkuY29u
dGFpbnMoaW5kZXgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOwotICAgIGlmIChKU09iamVjdFJlZiBjYWxsYmFjayA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpLCAwKSkg
ewotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywg
MCk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgaWYgKGF1
dG8gY2FsbGJhY2sgPSBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpKSB7CisgICAgICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdldEdsb2JhbE9i
amVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBudWxscHRyKTsKICAgICAg
ICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAgfQogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OmNsZWFyVGVzdFJ1bm5lckNhbGxiYWNrcygpCiB7Ci0gICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKLQotICAgIGZvciAoYXV0byYgaXRl
ciA6IGNhbGxiYWNrTWFwKCkpIHsKLSAgICAgICAgaWYgKEpTT2JqZWN0UmVmIGNhbGxiYWNrID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGl0ZXIudmFsdWUsIDApKQotICAgICAgICAgICAgSlNW
YWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgfQotCisgICAgYXV0byBjb250
ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNh
bGxiYWNrTWFwKCkudmFsdWVzKCkpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwg
Y2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFwKCkuY2xlYXIoKTsKIH0KIApAQCAtMjUwOCwxNiAr
MjQ2NiwxMSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGZpbGVzVmFsdWUpCiB7CiAgICAgaWYgKCFKU1ZhbHVlSXNB
cnJheShjb250ZXh0LCBmaWxlc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgSlNPYmpl
Y3RSZWYgZmlsZXMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZmlsZXNWYWx1ZSwgbnVsbHB0
cik7Ci0gICAgc3RhdGljIGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgZmlsZXNMZW5ndGhW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZmlsZXMsIGxlbmd0aFByb3BlcnR5
LmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBmaWxl
c0xlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZmlsZXMgPSAoSlNPYmpl
Y3RSZWYpZmlsZXNWYWx1ZTsKKyAgICBhdXRvIGZpbGVzTGVuZ3RoID0gV1RSOjphcnJheUxlbmd0
aChjb250ZXh0LCBmaWxlcyk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVzLmNsZWFyKCk7Ci0gICAg
YXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbGVzTGVuZ3RoOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIGZpbGVWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZpbGVzLCBpLCBudWxscHRyKTsKICAgICAg
ICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgZmlsZVZhbHVlKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCmluZGV4IDE2NzEyMDU4YTEwY2U5
ODlhM2M4ZDQzZDY0NGY5YTllMzAwZDQwZGUuLmU4NTdhYTRkY2RhMjk3YzRmZTNlNzZhYzdlOWVh
ZjA1YTA5YzgwYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKQEAgLTU0LDcgKzU0LDcg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xlYW51cCgpOwogCi0gICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYp
OwogCiAgICAgdm9pZCBhZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCk7CiAgICAgY29u
c3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBhbGxvd2VkSG9zdHMoKSBjb25zdCB7IHJldHVybiBt
X2FsbG93ZWRIb3N0czsgfQpAQCAtNDk3LDcgKzQ5Nyw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp2
ZWN0b3I8Y2hhcj4gbV9vcGVuUGFuZWxGaWxlc01lZGlhSWNvbjsKICNlbmRpZgogCi0gICAgc3Rh
dGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOwotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBz
dGF0aWNWYWx1ZXMoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rp
b25zKCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xhc3Mo
KTsKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzKCk7CisgICAg
c3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOwogfTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cklPUy5tbQppbmRleCA2MWUwMWY1ZWQ3Njc1YTgzMGJhNmYzOGY4ZWNmNTg0MGZiYzgzOWNiLi5l
ODUyZGZkYWJjZDQzOTkzYjMxMzkzZDM1ZGYwMDU0Y2Y2Nzk0Zjc5IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCkBA
IC0yNCwxMiArMjQsMTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkR1
bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogCiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
IgorI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1ByaXZhdGUuaD4KQEAgLTE1NSw1
ICsxNTYsNSBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2li
aWxpdHlFbmFibGVkKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaW9zIikpOworICAgIHJldHVybiBXVFI6OmNyZWF0
ZUpTU3RyaW5nKCJpb3MiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5kZXggZTNjOTA5ZDZkZDI3MDM5MjgzZWFj
Y2QzMmFlNDA5MjZjZThhOWU2NC4uNjQ1ZmM4NjNjZWYxMGEwMGY1YmI0YjdkMTM5YzZlMGRjZTQw
OGRlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW0KQEAgLTI0LDExICsyNCwxMiBAQAogICovCiAKICNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCIKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogI2lt
cG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCIKKyNpbXBvcnQgIkR1bXBS
ZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5oPgpAQCAtNDEsMTEgKzQyLDYgQEAKIAog
dHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwg
TlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKLSAgICA6IG1fZWxl
bWVudChlbGVtZW50KQotewotfQotCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChVSUFjY2Vzc2liaWxp
dHlIaWRkZW4pCiAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooQ0dQb2ludClwb2ludDsKIC0g
KGlkKWFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50OwpAQCAtMTEyLDkgKzEwOCw5IEBAIEBpbnRl
cmZhY2UgTlNPYmplY3QgKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyUHJpdmF0ZSkKIC0g
KENHUGF0aFJlZilfYWNjZXNzaWJpbGl0eVBhdGg7CiBAZW5kCiAKLXN0YXRpYyBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGlkIGVsZW1lbnQpCisgICAgOiBtX2VsZW1lbnQo
ZWxlbWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cyhudWxscHRyLCAwKSk7CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY29u
Y2F0ZW5hdGVBdHRyaWJ1dGVBbmRWYWx1ZShOU1N0cmluZyAqYXR0cmlidXRlLCBOU1N0cmluZyAq
dmFsdWUpCkBAIC0xODAsNyArMTc2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpmaWVsZHNldEFuY2VzdG9yRWxlbWVudCgpCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLQogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnVybCgpCiB7CiAgICAgTlNVUkwgKnVybCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0
eVVSTF07CkBAIC0yOTEsNyArMjg2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpsaW5rZWRFbGVtZW50KCkKIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KHVuc2lnbmVk
IGluZGV4KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtNTU4LDcgKzU1Miw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAgICAgaWQgdGV4
dE1hcmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKICAgICBp
ZiAoIXRleHRNYXJrZXJzIHx8ICFbdGV4dE1hcmtlcnMgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBj
bGFzc11dKQotICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgICAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxlbWVudCBzdHJp
bmdGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCkBA
IC02ODEsMjIgKzY3NSwyMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3Vt
ZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbAogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2Vk
VUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQogewotICAgIHJldHVybiBjcmVhdGVF
bXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJp
YnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJu
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0
dHJpYnV0ZSkKQEAgLTcxNiw3ICs3MTAsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZQogICAg
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGF0dHJpYnV0ZSwgIkFYVGV4dHVhbENv
bnRleHQiKSkKICAgICAgICAgcmV0dXJuIFtbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlUZXh0dWFs
Q29udGV4dF0gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkKCkKQEAgLTc1
NSwxNyArNzQ5LDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVT
dXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5n
KCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFnZVVwKCkKQEAg
LTc4OSwxNyArNzgzLDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFn
ZVJpZ2h0KCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvbGVEZXNjcmlwdGlvbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKCkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQpAQCAtODA5
LDcgKzgwMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpkZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFs
dWUoKQpAQCAtODE5LDcgKzgxMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRl
eHQoKSBjb25zdApAQCAtODQ5LDcgKzg0Myw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2V0VmFsdWUoSlNTdHJpbmdSZWYgdmFsdWVUZXh0KQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbigpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRM
aW5lTnVtYmVyKCkKQEAgLTg2OSw3ICs4NjMsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
Rm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtODkyLDcgKzg4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDaGVja2VkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lu
ZGV0ZXJtaW5hdGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTkwOCw3ICs5MDAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFyaWFJc0dyYWJiZWQoKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3Ry
aW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50
IGluZGV4KQpAQCAtOTE4LDM3ICs5MTAsMzcgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmxpbmVGb3JJbmRleChpbnQgaW5kZXgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQogewotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJl
dHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dDb3VudCgpCkBAIC05ODcsMjIgKzk3OSwxOSBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQg
Y29sLAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUo
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQg
eSkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2ZVRlY2hu
b2xvZ3lTaW11bGF0ZWRGb2N1cygpCkBAIC0xMDM1LDIzICsxMDI0LDIxIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNT
dHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3Rp
ZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQpAQCAtMTA4Myw0
MyArMTA3MCwzNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyKCkKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJs
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBz
ZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTExMzAsMTMgKzExMTAsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2lu
Z2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtMTE1MiwyNyArMTEzMCwyMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cG9wdXBWYWx1ZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGFrZUZvY3VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVj
dGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAogfQogCiB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRDb3VudEZv
clNlYXJjaFByZWRpY2F0ZShKU0NvbnRleHRSZWYgY29udGV4dCwgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgSlNWYWx1ZVJlZiBzZWFy
Y2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1t
ZWRpYXRlRGVzY2VuZGFudHNPbmx5KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gMDsKIH0KIApAQCAtMTIxNCwyMyArMTE4NywxOSBAQCBkb3VibGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xhc3NM
aXN0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXJyYXlBdHRy
aWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Jikg
Y29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4m
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB1bnNpZ25lZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZENoaWxkcmVuQ291bnQoKSBjb25zdApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgKaW5kZXggMzg1
MGI0MTQ0NjNlMDE1YzY3ZDU2ZWYwNGE1OTM4Yzk5MWM0N2VkOC4uMTViZjUxZjg0ZDNlODE4MWMw
MmNmNjYzYzc1NTM5ZGMyOGFkOWRkNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oCkBAIC00MSw0ICs0MSw0IEBAIEBpbnRlcmZhY2Ug
TlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQogLSAoSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+KWNyZWF0ZUpTU3RyaW5nUmVmOwogQGVuZAogCi1leHRlcm4gTlNEaWN0aW9uYXJ5ICpzZWFy
Y2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250
ZXh0UmVmLCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50ICpzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJl
Y3Rpb25OZXh0LCB1bnNpZ25lZCByZXN1bHRzTGltaXQsIEpTVmFsdWVSZWYgc2VhcmNoS2V5LCBK
U1N0cmluZ1JlZiBzZWFyY2hUZXh0LCBib29sIHZpc2libGVPbmx5LCBib29sIGltbWVkaWF0ZURl
c2NlbmRhbnRzT25seSk7CitOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZWYsIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5leHQsIHVuc2lnbmVkIHJl
c3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFyY2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQs
IGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1t
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KaW5k
ZXggNzk0MDczOGEzMzkwZWIyNzBhNjA4YmZkMDU5ZTE3MmFmNGI3OTA5Mi4uMDMwNjdlMmQwODky
MTRmYmU4NDY2N2IyODI0ZjhjZTMxNDgwZjk4NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oIgogCisj
aW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZD
Ri5oPgogCiBAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQpA
QCAtNTYsNyArNTcsNiBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICBbcGFyYW1l
dGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c3RhcnRFbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVu
dCgpIGZvcktleTpAIkFYU3RhcnRFbGVtZW50Il07CiAKICAgICBbcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZSBzZXRPYmplY3Q6KGlzRGlyZWN0aW9uTmV4dCkgPyBAIkFYRGlyZWN0aW9uTmV4dCIgOiBA
IkFYRGlyZWN0aW9uUHJldmlvdXMiIGZvcktleTpAIkFYRGlyZWN0aW9uIl07Ci0KICAgICBbcGFy
YW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QChyZXN1bHRzTGltaXQpIGZvcktleTpAIkFY
UmVzdWx0c0xpbWl0Il07CiAKICAgICBpZiAoc2VhcmNoS2V5KSB7CkBAIC02NiwxNCArNjYsOCBA
QCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JT
ZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0cmlu
ZykKICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZy5nZXQoKV07CiAgICAgICAgIH0gZWxzZSBp
ZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsKLSAgICAgICAgICAgIEpT
T2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJj
aEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0
aCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJp
bmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAg
ICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RH
ZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcu
Z2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleUFycmF5TGVuZ3RoVmFs
dWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUp
KQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVl
LCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJj
aEtleUFycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaEtleTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHNlYXJjaEtleUFycmF5TGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBzZWFyY2hL
ZXlBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoS2V5
QXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoS2V5
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlBcnJh
eSwgaSwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2VhcmNoS2V5U3Ry
aW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hLZXlWYWx1ZSwgbnVsbHB0
cik7CkBAIC04OCwxMiArODIsMTEgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJh
bWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICAgICAg
aWYgKHNlYXJjaEtleVBhcmFtZXRlcikKICAgICAgICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmli
dXRlIHNldE9iamVjdDpzZWFyY2hLZXlQYXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWFyY2hLZXkiXTsK
ICAgICB9Ci0gICAgCisKICAgICBpZiAoc2VhcmNoVGV4dCAmJiBKU1N0cmluZ0dldExlbmd0aChz
ZWFyY2hUZXh0KSkKICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OltO
U1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoVGV4dF0gZm9yS2V5OkAiQVhTZWFy
Y2hUZXh0Il07Ci0gICAgCisKICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6
QCh2aXNpYmxlT25seSkgZm9yS2V5OkAiQVhWaXNpYmxlT25seSJdOwotICAgIAogICAgIFtwYXJh
bWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSkg
Zm9yS2V5OkAiQVhJbW1lZGlhdGVEZXNjZW5kYW50c09ubHkiXTsKICAgICAKICAgICByZXR1cm4g
cGFyYW1ldGVyaXplZEF0dHJpYnV0ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRleCA1MWYwMzFkZGJiY2Q4NTNh
ZGI0ZmU3MTQ3ZDg1YTUyNTc2YTAwNzhiLi45NWEwNmYzYTQwYTA0ODllM2UwYjBiMzE2NTc0YzNm
Y2JmMmVjZjExIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJBY2Nl
c3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2ltcG9ydCAi
SlNCYXNpY3MuaCIKICNpbXBvcnQgPEFwcEtpdC9OU0NvbG9yLmg+CiAjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+
CkBAIC0xNTgsNSArMTU5LDUgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5j
ZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZCgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm1hYyIpKTsKKyAgICByZXR1cm4g
V1RSOjpjcmVhdGVKU1N0cmluZygibWFjIik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IGUxZWZkN2Y0ZTE2
MWFmZmRlZTIyNGNjNDUzODQ4YjM5Y2I0OTcwNjMuLjY0OTFhMmQwYTVmYTRjNzRlNzIxNzkyNzhm
N2UxY2E5OWQ3NjhkNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFz
aWNzLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgpA
QCAtODAsMTEgKzgxLDYgQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9p
bnQ6KE5TUG9pbnQpcG9pbnQ7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6KGlkKXZh
bHVlIGZvckF0dHJpYnV0ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWU7CiBAZW5kCiAKLXN0YXRp
YyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0gICAg
cmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkpOwot
fQotCiBzdGF0aWMgT3B0aW9uYWw8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gbWFrZVZlY3RvckVs
ZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCosIGlkIGVsZW1lbnQpCiB7CiAgICAg
cmV0dXJuIHsgeyBlbGVtZW50IH0gfTsKQEAgLTIyMSwxNCArMjE3LDggQEAgc3RhdGljIE5TRGlj
dGlvbmFyeSAqc2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0Nv
bnRleHRSZWYgY28KICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRP
YmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5n
LmdldCgpXV07CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hT
dHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVs
bHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSAw
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3RyaW5nID0g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBKU09iamVjdEdl
dFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJvcGVydHlTdHJp
bmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NBcnJheUxl
bmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJp
bmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgCisgICAgICAgICAg
ICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheSA9IChKU09iamVjdFJlZilzZWFyY2hTdHJpbmdzOwor
ICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBXVFI6OmFycmF5TGVu
Z3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdD
b3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0
cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKICAgICAgICAgICAgICAgICBpZiAo
c2VhcmNoU3RyaW5nc1N0cmluZykKQEAgLTI2MiwxNCArMjUyLDggQEAgc3RhdGljIE5TRGljdGlv
bmFyeSAqc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRl
eHRSZWYgY28KICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQogICAgICAgICAg
ICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKICAgICAgICAgfSBl
bHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKLSAgICAg
ICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNl
YXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJv
cGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5n
dGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNo
U3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJj
aFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAg
ICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaFN0cmluZ3M7
CisgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IFdUUjo6YXJyYXlM
ZW5ndGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNo
U3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgICAgIGlm
IChzZWFyY2hTdHJpbmdzU3RyaW5nKQpAQCAtMTQ0NiwxMyArMTQzMCwxMyBAQCB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxk
cmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIGZ1bmN0aW9uLgogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIFdUUjo6Y3Jl
YXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQpAQCAtMTQ2Myw3ICsxNDQ3LDcgQEAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5j
b2RpbmcoKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBF
TkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQpAQCAt
MTQ3NCw3ICsxNDU4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBjcmVhdGVKU1N0
cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogICAgIAotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVy
bCgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdh
dGUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KaW5k
ZXggMzY3MTQ5MzlmZGEwYTU2NzQ5Yzc5OTg4NmExZWE0Mzg5MjE4OWE0YS4uMzQyYjNhMDFkYzdl
YTg3OWFmMWI1NGIwZWUyNzNkNjgxMmY4ZjdhNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQpAQCAtMzExLDU0ICszMTEsMjYgQEAgSUdOT1JFX1dB
Uk5JTkdTX0VORAogCiAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxk
Rm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKIHsKLSAgICAvLyBNYWtlIE5ldy1TdHlsZSBUZXN0
UnVubmVyCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07
Ci0gICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0
KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBhdXRvIGNvbnRl
eHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07CisgICAgYXV0byB3ZWJWaWV3ID0gW2ZyYW1lIHdl
YlZpZXddOworICAgIGF1dG8gd2luZG93T2JqZWN0ID0gW2ZyYW1lIHdpbmRvd09iamVjdF07CiAK
LSAgICBBU1NFUlQoZ1Rlc3RSdW5uZXIpOwotICAgIGdUZXN0UnVubmVyLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNl
cHRpb24pOwotCi0gICAgZ2NDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIGds
b2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgZ2xvYmFs
T2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgZ1Rlc3RS
dW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgZ2NDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQpOwogCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJ
bnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiAKLSAgICAvLyBNYWtlIE9sZC1TdHlsZSBjb250cm9s
bGVycwotCi0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtmcmFtZSB3ZWJWaWV3XTsKLSAgICBXZWJT
Y3JpcHRPYmplY3QgKm9iaiA9IFtmcmFtZSB3aW5kb3dPYmplY3RdOwotI2lmICFQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIEFwcGxlU2NyaXB0Q29udHJvbGxlciAqYXNjID0gW1tBcHBsZVNjcmlw
dENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XTsKLSAgICBbb2JqIHNl
dFZhbHVlOmFzYyBmb3JLZXk6QCJhcHBsZVNjcmlwdENvbnRyb2xsZXIiXTsKLSAgICBbYXNjIHJl
bGVhc2VdOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2luZG93T2JqZWN0IHNldFZhbHVlOmFk
b3B0TlMoW1tBcHBsZVNjcmlwdENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJW
aWV3XSkuZ2V0KCkgZm9yS2V5OkAiYXBwbGVTY3JpcHRDb250cm9sbGVyIl07CiAjZW5kaWYKIAot
ICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgKmVzYyA9IFtbRXZlbnRTZW5kaW5nQ29udHJvbGxl
ciBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTplc2MgZm9yS2V5OkAiZXZlbnRTZW5k
ZXIiXTsKLSAgICBbZXNjIHJlbGVhc2VdOwotICAgIAotICAgIFtvYmogc2V0VmFsdWU6Z05hdmln
YXRpb25Db250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07Ci0gICAgCi0g
ICAgT2JqQ0NvbnRyb2xsZXIgKm9jYyA9IFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwot
ICAgIFtvYmogc2V0VmFsdWU6b2NjIGZvcktleTpAIm9iakNDb250cm9sbGVyIl07Ci0gICAgW29j
YyByZWxlYXNlXTsKLQotICAgIE9iakNQbHVnaW4gKnBsdWdpbiA9IFtbT2JqQ1BsdWdpbiBhbGxv
Y10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTpwbHVnaW4gZm9yS2V5OkAib2JqQ1BsdWdpbiJd
OwotICAgIFtwbHVnaW4gcmVsZWFzZV07Ci0gICAgCi0gICAgT2JqQ1BsdWdpbkZ1bmN0aW9uICpw
bHVnaW5GdW5jdGlvbiA9IFtbT2JqQ1BsdWdpbkZ1bmN0aW9uIGFsbG9jXSBpbml0XTsKLSAgICBb
b2JqIHNldFZhbHVlOnBsdWdpbkZ1bmN0aW9uIGZvcktleTpAIm9iakNQbHVnaW5GdW5jdGlvbiJd
OwotICAgIFtwbHVnaW5GdW5jdGlvbiByZWxlYXNlXTsKLQotICAgIFRleHRJbnB1dENvbnRyb2xs
ZXIgKnRpYyA9IFtbVGV4dElucHV0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXddOwotICAgIFtvYmogc2V0VmFsdWU6dGljIGZvcktleTpAInRleHRJbnB1dENvbnRyb2xs
ZXIiXTsKLSAgICBbdGljIHJlbGVhc2VdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6YWRv
cHROUyhbW0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6
QCJldmVudFNlbmRlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6Z05hdmlnYXRpb25D
b250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07CisgICAgW3dpbmRvd09i
amVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQo
KSBmb3JLZXk6QCJvYmpDQ29udHJvbGxlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6
YWRvcHROUyhbW09iakNQbHVnaW4gYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDUGx1
Z2luIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ1BsdWdpbkZ1
bmN0aW9uIGFsbG9jXSBpbml0XSkuZ2V0KCkgZm9yS2V5OkAib2JqQ1BsdWdpbkZ1bmN0aW9uIl07
CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbVGV4dElucHV0Q29udHJvbGxl
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKS5nZXQoKSBmb3JLZXk6QCJ0ZXh0SW5w
dXRDb250cm9sbGVyIl07CiB9CiAKIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFt
ZTooV2ViRnJhbWUgKilmcmFtZSBpbklzb2xhdGVkV29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29y
bGQKQEAgLTM3MSw3ICszNDMsNyBAQCAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJh
bWU6KFdlYkZyYW1lICopZnJhbWUgaW5Jc29sYXRlZFdvcmxkOihXZWJTY3JpcAogICAgIGlmICgh
Z2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09iamVjdFNldFByb3BlcnR5
KGN0eCwgZ2xvYmFsT2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
X193b3JsZElEIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHdvcmxkSURGb3JXb3Js
ZCh3b3JsZCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAgICBKU09iamVj
dFNldFByb3BlcnR5KGN0eCwgZ2xvYmFsT2JqZWN0LCBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJfX3dv
cmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCB3b3JsZElERm9yV29ybGQod29y
bGQpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7CiB9CiAKIC0gKHZvaWQpd2Vi
VmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lOihXZWJG
cmFtZSAqKWZyYW1lIGluU2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggZWJhMDkzZWUxODdjZDMx
MGQwNTFiMjMwYWVkMmEzMDBmZTc5NDljMC4uZTIxMDcwYWMzMWIzNGNmY2JiNTc5ZDc3NzViNzYx
OTkxMTRhYmRmZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0K
QEAgLTMyLDYgKzMyLDcgQEAKIAogI2ltcG9ydCAiRGVmYXVsdFBvbGljeURlbGVnYXRlLmgiCiAj
aW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0
ICJMYXlvdXRUZXN0U3BlbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJNb2NrR2VvbG9jYXRpb25Qcm92
aWRlci5oIgogI2ltcG9ydCAiTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmgiCkBAIC02NzAs
MTUgKzY3MSwxMCBAQCBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZQogewogICAgIFdlYkZpbmRPcHRp
b25zIG9wdGlvbnMgPSAwOwogCi0gICAgYXV0byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYg
bGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwg
bGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihj
b250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdGFyZ2V0Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhcmdldCkpOworICAgIGF1dG8gbGVuZ3RoID0g
V1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBvcHRpb25zQXJyYXkpOworICAgIGF1dG8gdGFyZ2V0
Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHRhcmdldCkpOwogCi0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKICAgICAgICAgaWYg
KCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcAppbmRl
eCBmZDc3YWQxYzM5MjYzOGRhOTQxNDNlZTdkNWE4MjFlNjk0MTAyMzEzLi41ZjNiNzQwNDA1MDBm
MDMwZGEyYmVkMWFhZjk2NzNmOGI2MmJiMTY2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKQEAgLTM3MSwxOSArMzcxLDEwIEBAIHZvaWQgRnJh
bWVMb2FkRGVsZWdhdGU6OmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVJblN0YW5kYXJkV29y
bGQoSVdlYkZyYW1lKiBmCiAgICAgSVdlYkZyYW1lKiBwYXJlbnRGcmFtZSA9IDA7CiAgICAgZnJh
bWUtPnBhcmVudEZyYW1lKCZwYXJlbnRGcmFtZSk7CiAKLSAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlv
biA9IDA7Ci0KLSAgICA6OmdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdp
bmRvd09iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAg
bV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAm
ZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBtX2FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4
Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAgbV90ZXh0SW5wdXRDb250
cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlv
bik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOworICAgIDo6Z1Rlc3RSdW5uZXItPm1ha2VXaW5k
b3dPYmplY3QoY29udGV4dCk7CisgICAgbV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CisgICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0KTsKKyAgICBtX3RleHRJbnB1dENvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3Qo
Y29udGV4dCk7CiAKICAgICBKU1N0cmluZ1JlZiBldmVudFNlbmRlclN0ciA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJldmVudFNlbmRlciIpOwogICAgIEpTVmFsdWVSZWYgZXZlbnRT
ZW5kZXIgPSBtYWtlRXZlbnRTZW5kZXIoY29udGV4dCwgIXBhcmVudEZyYW1lKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAppbmRleCAzYjlh
MmI3OGQ5ZDU4ODM1NTAzNDA1NWYyNGQyMDI1OGQzMmI3YjE1Li5kMmU1MzUyNGY1ZjVlMTM1MmQw
NDUyMTc5ZDgyYmNkODIwM2I1YWY3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93
aW4vVGV4dElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgogCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogLy8gU3RhdGljIEZ1bmN0aW9ucwpAQCAtMTYyLDQyICsxNjIs
MzIgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2VsZWN0ZWRSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGkKIAogLy8gT2JqZWN0IENyZWF0aW9uCiAKLXZv
aWQgVGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2
b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNv
bnRleHQpCiB7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+ICB0ZXh0SW5wdXRDb250b2xs
ZXJTdHIoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXh0SW5wdXRDb250
cm9sbGVyIikpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpTQ2xhc3MoKTsKLSAg
ICBKU1ZhbHVlUmVmIHRleHRJbnB1dENvbnRvbGxlck9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250
ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NSZWYpOwotCi0g
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIHRleHRJbnB1dENv
bnRvbGxlclN0ci5nZXQoKSwgdGV4dElucHV0Q29udG9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRp
b24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRleHRJbnB1
dENvbnRyb2xsZXIiLCBKU09iamVjdE1ha2UoY29udGV4dCwgY3JlYXRlSlNDbGFzcygpLmdldCgp
LCB0aGlzKSk7CiB9CiAKLUpTQ2xhc3NSZWYgVGV4dElucHV0Q29udHJvbGxlcjo6Z2V0SlNDbGFz
cygpCitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBUZXh0SW5wdXRDb250cm9sbGVyOjpjcmVhdGVK
U0NsYXNzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzID0gVGV4
dElucHV0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9IFRleHRJbnB1dENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0
aW9ucygpOwotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSAK
LSAgICB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIlRleHRJbnB1dENvbnRy
b2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBjb25zdCBKU0Ns
YXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtKU0NsYXNzQXR0
cmlidXRlTm9uZSwgIlRleHRJbnB1dENvbnRyb2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMoKSwgc3Rh
dGljRnVuY3Rpb25zKCksCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAK
ICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7Cisg
ICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbikpOwogfQogCi1K
U1N0YXRpY1ZhbHVlKiBUZXh0SW5wdXRDb250cm9sbGVyOjpzdGF0aWNWYWx1ZXMoKQorY29uc3Qg
SlNTdGF0aWNWYWx1ZSogVGV4dElucHV0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVzKCkKIHsKLSAg
ICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBzdGF0aWNWYWx1ZXNbXSA9IAorICAgIHN0YXRpYyBjb25z
dCBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0KICAgICB7CiAgICAgICAgIHsgMCwgMCwg
MCwgMCB9CiAgICAgfTsKICAgICByZXR1cm4gc3RhdGljVmFsdWVzOwogfQogCi1KU1N0YXRpY0Z1
bmN0aW9uKiBUZXh0SW5wdXRDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKQorY29uc3QgSlNT
dGF0aWNGdW5jdGlvbiogVGV4dElucHV0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKCkKIHsK
LSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICBz
dGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKICAgICAg
ICAgeyAic2V0TWFya2VkVGV4dCIsIHNldE1hcmtlZFRleHRDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJoYXNNYXJrZWRUZXh0IiwgaGFzTWFya2VkVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgInVubWFya1RleHQiLCB1bm1hcmtUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGV4dElucHV0Q29udHJvbGxlci5oCmluZGV4IDI5ZjAz
OGJlMmRkYjUwZTlmYWU1MzBlMWM2ZDEzYzFkNDZmOTk3OTIuLmU1YWY1ZWJlY2E0MmJiZWQ1ZjMx
ZDk5ZDRjOGE4MGE5NDZjMDQzMmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9UZXh0SW5wdXRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rl
eHRJbnB1dENvbnRyb2xsZXIuaApAQCAtMjYsMjAgKzI2LDE2IEBACiAgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAgCi0jaWZuZGVmIFRleHRJbnB1dENvbnRyb2xsZXJfaAotI2RlZmluZSBUZXh0SW5wdXRDb250
cm9sbGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250
ZXh0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTVmFsdWVSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5o
PgogI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBjbGFz
cyBUZXh0SW5wdXRDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJl
ZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICB2b2lkIHNldE1hcmtlZFRleHQoSlNTdHJp
bmdSZWYgdGV4dCwgdW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW5ndGgpOwogICAg
IGJvb2wgaGFzTWFya2VkVGV4dCgpOwpAQCAtNTAsOSArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3Rk
Ojp2ZWN0b3I8aW50PiBzZWxlY3RlZFJhbmdlKCk7CiAKIHByaXZhdGU6ICAgIAotICAgIHN0YXRp
YyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3Rh
dGljVmFsdWVzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9u
cygpOworICAgIHN0YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7
CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlcygpOworICAgIHN0
YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKIH07Ci0KLSNl
bmRpZiAvLyBUZXh0SW5wdXRDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9C
aW5kaW5ncy9KU0Jhc2ljcy5jcHAKaW5kZXggZmZmMGI3NDk5MGFmYjllMTJhYzlkMDFhNzEwYTRj
NTI4MGUxZTkwOC4uNmIwMzAwZGNmYjA3ZWY2ZDU1NjRhNWZiMjRkOTVkYTlmNGU4MTc2MiAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKKysr
IGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKQEAgLTI4LDE5
ICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZUJv
b2xlYW5Pck51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIE9wdGlvbmFsPGJvb2w+IHZhbHVlKQor
T3B0aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2woSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNv
bnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOworICAgIHJl
dHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFsdWVJc051bGwo
Y29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9wdGlvbmFsKEpTVmFsdWVUb0Jv
b2xlYW4oY29udGV4dCwgdmFsdWUpKTsKK30KKworT3B0aW9uYWw8ZG91YmxlPiB0b09wdGlvbmFs
RG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIHJl
dHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFsdWVJc051bGwo
Y29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9wdGlvbmFsKEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogfQogCi1PcHRpb25hbDxib29sPiBKU1Zh
bHVlVG9OdWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFs
dWUpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgT3B0aW9uYWw8
Ym9vbD4gdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2
YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgPyBXVEY6Om51bGxvcHQgOiBP
cHRpb25hbDxib29sPihKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHZhbHVlKSk7CisgICAgcmV0
dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDog
SlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCi1KU1ZhbHVlUmVmIEpTVmFsdWVNYWtlU3Ry
aW5nT3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiBzdHJpbmdPck51bGwp
CitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYg
c3RyaW5nKQogewotICAgIHJldHVybiBzdHJpbmdPck51bGwgPyBKU1ZhbHVlTWFrZVN0cmluZyhj
b250ZXh0LCBzdHJpbmdPck51bGwpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOworICAgIHJl
dHVybiBzdHJpbmcgPyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmcpIDogSlNWYWx1
ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRl
SlNTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQpAQCAtNDgsMTkgKzUzLDQzIEBAIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpCiAgICAg
cmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZykpOwogfQog
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgYXV0byBzdHJpbmcgPSBhZG9wdCh2YWx1
ZSA/IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogbnVsbHB0
cik7CisgICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZyA6IGNyZWF0ZUpTU3RyaW5nKCIiKTsKK30K
KwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHN0cmluZykKIHsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgY3JlYXRl
SlNTdHJpbmcoc3RyaW5nKS5nZXQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgcHJvcGVydHkoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sK
KyAgICByZXR1cm4gb2JqZWN0ID8gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3Qs
IGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBudWxscHRyKSA6IG51bGxwdHI7Cit9CisKK0pT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpKTsK
K30KKworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUpCit7CisgICAg
YXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7CisgICAgcmV0dXJu
IHZhbHVlID8gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgOiBkZWZhdWx0VmFsdWU7
Cit9CisKK2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBhdXRvIHZhbHVlID0gcHJv
cGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4gdmFsdWUgPyBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogMDsKK30KKwogSlNPYmplY3RSZWYg
b2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwg
Y29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb2Jq
ZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUpOworICAgIGF1dG8gdmFsdWUg
PSBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAgIHJldHVybiB2YWx1ZSA/IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpLCBu
dWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIG9iamVjdFByb3BlcnR5KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxjb25zdCBjaGFyKj4gbmFtZXMpCkBAIC03MCwyNyArOTksNDEgQEAgSlNPYmplY3RSZWYgb2Jq
ZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgc3Rk
Ojppbml0aWEKICAgICByZXR1cm4gb2JqZWN0OwogfQogCit1bnNpZ25lZCBhcnJheUxlbmd0aChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBu
dW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIik7Cit9CisKIHZvaWQgc2V0
UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3Qg
Y2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRl
eHQsIG9iamVjdCwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIEpTVmFsdWVNYWtlQm9vbGVh
bihjb250ZXh0LCB2YWx1ZSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7CiB9
CiAKK3ZvaWQgc2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9i
amVjdCwgY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVlKQoreworICAgIEpTT2JqZWN0U2V0
UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgSlNW
YWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgdmFsdWUpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUs
IG51bGxwdHIpOworfQorCit2b2lkIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIEpT
T2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRl
eHQpLCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgdmFsdWUsIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIG51bGxwdHIpOwor
fQorCit2b2lkIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBj
b25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpCit7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkoY29udGV4dCwgbmFtZSwgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgdmFsdWUpKTsK
K30KKwogSlNWYWx1ZVJlZiBjYWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBv
YmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlUmVm
PiBhcmd1bWVudHMpCiB7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGF1dG8gZnVuY3Rpb24gPSBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5h
bWUpOwotICAgIGlmICghZnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGZ1bmN0aW9uLCBvYmplY3QsIGFy
Z3VtZW50cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKTsKKyAgICByZXR1cm4g
ZnVuY3Rpb24gPyBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGZ1bmN0aW9uLCBvYmpl
Y3QsIGFyZ3VtZW50cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKSA6IG51bGxw
dHI7CiB9CiAKIEpTT2JqZWN0UmVmIGNhbGxDb25zdHJ1Y3RvcihKU0dsb2JhbENvbnRleHRSZWYg
Y29udGV4dCwgY29uc3QgY2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PEpTVmFsdWVS
ZWY+IGFyZ3VtZW50cykKIHsKICAgICBhdXRvIGNvbnN0cnVjdG9yID0gb2JqZWN0UHJvcGVydHko
Y29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCB7IG5hbWUgfSk7Ci0g
ICAgaWYgKCFjb25zdHJ1Y3RvcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dCwgY29uc3RydWN0b3IsIGFyZ3VtZW50
cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gY29uc3Ry
dWN0b3IgPyBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnN0cnVjdG9yLCBh
cmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuYmVnaW4oKSwgbnVsbHB0cikgOiBudWxscHRyOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFy
ZWQvQmluZGluZ3MvSlNCYXNpY3MuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3Mv
SlNCYXNpY3MuaAppbmRleCAxMWRkYTUyNDdhNWFiNmMwNDA5NjNkZjE5YWIwZjVlMDI5NmNlYjgy
Li5kMjE5Njk4YThmNmIxMDQyYTkwNWI0YzAyYjE3Njg2NmVkN2M5NzI2IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmgKKysrIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oCkBAIC0zMiwxNiArMzIsMjkgQEAKIAog
bmFtZXNwYWNlIFdUUiB7CiAKLUpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKEpT
Q29udGV4dFJlZiwgT3B0aW9uYWw8Ym9vbD4pOwotT3B0aW9uYWw8Ym9vbD4gSlNWYWx1ZVRvTnVs
bGFibGVCb29sZWFuKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitPcHRpb25hbDxib29sPiB0
b09wdGlvbmFsQm9vbChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOworT3B0aW9uYWw8ZG91Ymxl
PiB0b09wdGlvbmFsRG91YmxlKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAKLUpTVmFsdWVS
ZWYgSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoSlNDb250ZXh0UmVmLCBKU1N0cmluZ1JlZik7CitK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciogPSAiIik7
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoSlNDb250ZXh0UmVmLCBK
U1ZhbHVlUmVmKTsKIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUpTU3RyaW5nKGNv
bnN0IGNoYXIqKTsKIEpTVmFsdWVSZWYgbWFrZVZhbHVlKEpTQ29udGV4dFJlZiwgY29uc3QgY2hh
ciopOworSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmLCBPcHRpb25hbDxib29sPik7
CitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVmKTsKKworSlNW
YWx1ZVJlZiBwcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBu
YW1lKTsKK2Jvb2wgYm9vbGVhblByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIGNv
bnN0IGNoYXIqIG5hbWUsIGJvb2wgZGVmYXVsdFZhbHVlID0gZmFsc2UpOworZG91YmxlIG51bWVy
aWNQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsK
K0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpT
T2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKK3Vuc2lnbmVkIGFycmF5TGVuZ3RoKEpTQ29u
dGV4dFJlZiwgSlNPYmplY3RSZWYpOwogSlNPYmplY3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250
ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFtZSk7CiBKU09iamVjdFJlZiBvYmpl
Y3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8Y29uc3QgY2hhcio+IG5hbWVzKTsKKwogdm9pZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYs
IEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKTsKK3ZvaWQgc2V0UHJv
cGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFtZSwgZG91Ymxl
IHZhbHVlKTsKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmLCBjb25z
dCBjaGFyKiBuYW1lLCBKU1ZhbHVlUmVmKTsKK3ZvaWQgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHko
SlNDb250ZXh0UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpOworCiBKU1ZhbHVl
UmVmIGNhbGwoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFtZSwgc3Rk
Ojppbml0aWFsaXplcl9saXN0PEpTVmFsdWVSZWY+IGFyZ3VtZW50cyk7CiBKU09iamVjdFJlZiBj
YWxsQ29uc3RydWN0b3IoSlNHbG9iYWxDb250ZXh0UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJndW1lbnRzKTsKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCmluZGV4IDllMGYwN2RmNTkzMmFi
MzAzMzFkN2I2MWQxNzM1M2FlNmUwMWM0NzMuLjU5YmUxZGFlYTI3NzU0ZWU0Nzc1YjRmM2U3YTVk
NjgyZmIxZDVmMWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3Mv
SlNXcmFwcGFibGUuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3Jh
cHBhYmxlLmgKQEAgLTI1LDkgKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTQ2xhc3MqIEpTQ2xhc3NSZWY7CisKIG5hbWVzcGFj
ZSBXVFIgewogCiBjbGFzcyBKU1dyYXBwYWJsZSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTV3JhcHBh
YmxlPiB7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3Jh
cHBlci5oIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaAppbmRl
eCBmNjc5OGY5OWE0ZmVjNjc1NjNkMDkxNTYzYjUwNTA5ZGZjODU3MmRhLi45YjZiYWQ4YWYwNDRi
MjAyZmY4NzI3YWNlZDdjYjlmZmIyY2VjNTJlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVy
U2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBlci5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
QmluZGluZ3MvSlNXcmFwcGVyLmgKQEAgLTUwLDQgKzUwLDkgQEAgaW5saW5lIHZvaWQgc2V0UHJv
cGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hh
ciogcHIKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgY3JlYXRlSlNT
dHJpbmcocHJvcGVydHlOYW1lKS5nZXQoKSwgSlNXcmFwcGVyOjp3cmFwKGNvbnRleHQsIHZhbHVl
KSwgYXR0cmlidXRlcywgZXhjZXB0aW9uKTsKIH0KIAoraW5saW5lIHZvaWQgc2V0R2xvYmFsT2Jq
ZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFt
ZSwgSlNXcmFwcGFibGUqIHZhbHVlKQoreworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNv
bnRleHQsIHByb3BlcnR5TmFtZSwgSlNXcmFwcGVyOjp3cmFwKGNvbnRleHQsIHZhbHVlKSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9FdmVudFNlcmlhbGl6YXRpb24vbWFjL0V2ZW50U2VyaWFsaXplck1hYy5tbSBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvRXZlbnRTZXJpYWxpemF0aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMu
bW0KaW5kZXggMGYxN2IyY2Q2MzlhNjMwNjNhNDg4ZGYzYTMzYTM1ZTMyYTJlY2NjMS4uYmRkMjA3
YmQ0MDlmMDRlZTVmMzgyMzE5NGZhMjRlNjMyODg1ODkxNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9FdmVudFNlcmlhbGl6YXRpb24vbWFjL0V2ZW50U2VyaWFsaXplck1hYy5t
bQorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9tYWMvRXZl
bnRTZXJpYWxpemVyTWFjLm1tCkBAIC0xOTUsNyArMTk1LDcgQEAgQGltcGxlbWVudGF0aW9uIEV2
ZW50U2VyaWFsaXplcgogCiArIChOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5Rm9yRXZlbnQ6KENH
RXZlbnRSZWYpcmF3RXZlbnQgcmVsYXRpdmVUb1RpbWU6KENHRXZlbnRUaW1lc3RhbXApcmVmZXJl
bmNlVGltZXN0YW1wCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IHBsYWluRXZlbnQgPSBh
ZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOworICAgIGF1dG8gcGxhaW5FdmVudCA9IGFkb3B0
Q0YoQ0dFdmVudENyZWF0ZShOVUxMKSk7CiAgICAgQ0dFdmVudFJlZiByYXdQbGFpbkV2ZW50ID0g
cGxhaW5FdmVudC5nZXQoKTsKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3QgPSBbW1tO
U011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CkBAIC0yMjYsNyAr
MjI2LDcgQEAgKyAoTlNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeUZvckV2ZW50OihDR0V2ZW50UmVm
KXJhd0V2ZW50IHJlbGF0aXZlVG9UaW1lOihDR0V2ZW4KIAogKyAoUmV0YWluUHRyPENHRXZlbnRS
ZWY+KWNyZWF0ZUV2ZW50Rm9yRGljdGlvbmFyeTooTlNEaWN0aW9uYXJ5ICopZGljdCBpbldpbmRv
dzooTlNXaW5kb3cgKil3aW5kb3cgcmVsYXRpdmVUb1RpbWU6KENHRXZlbnRUaW1lc3RhbXApcmVm
ZXJlbmNlVGltZXN0YW1wCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IGV2ZW50ID0gYWRv
cHRDRihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsKKyAgICBhdXRvIGV2ZW50ID0gYWRvcHRDRihDR0V2
ZW50Q3JlYXRlKE5VTEwpKTsKICAgICBDR0V2ZW50UmVmIHJhd0V2ZW50ID0gZXZlbnQuZ2V0KCk7
CiAKICAgICBGT1JfRUFDSF9DR0VWRU5UX0lOVEVHRVJfRklFTEQoU1RPUkVfSU5URUdFUl9GSUVM
RF9UT19FVkVOVCk7CkBAIC0yNjQsNyArMjY0LDcgQEAgY29uc3QgZmxvYXQgZXZlbnREaXNwYXRj
aFRpbWVyUmF0ZSA9IDEuIC8gMTIwLjsKIAogKyAodm9pZClwbGF5U3RyZWFtOihOU0FycmF5PE5T
RGljdGlvbmFyeSAqPiAqKWV2ZW50RGljdHMgd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCheKSgpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgUmV0YWlu
UHRyPEV2ZW50U3RyZWFtUGxheWVyPiBwbGF5ZXIgPSBhZG9wdE5TKFtbRXZlbnRTdHJlYW1QbGF5
ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHBsYXllciA9IGFkb3B0TlMoW1tFdmVudFN0cmVh
bVBsYXllciBhbGxvY10gaW5pdF0pOwogCiAgICAgcGxheWVyLT5fcmVtYWluaW5nRXZlbnREaWN0
aW9uYXJpZXMgPSBhZG9wdE5TKFtldmVudERpY3RzIG11dGFibGVDb3B5XSk7CiAgICAgcGxheWVy
LT5fd2luZG93ID0gd2luZG93OwpAQCAtMjgyLDcgKzI4Miw3IEBAIC0gKHZvaWQpcGxheWJhY2tU
aW1lckZpcmVkOihOU1RpbWVyICopdGltZXIKICAgICBhdXRvIHJlbW92ZUxpc3QgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICBOU0V2ZW50ICpuc0V2ZW50ID0g
bmlsOwogICAgIGZvciAoaWQgZXZlbnREaWN0IGluIF9yZW1haW5pbmdFdmVudERpY3Rpb25hcmll
cy5nZXQoKSkgewotICAgICAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4gZXZlbnQgPSBbRXZlbnRT
ZXJpYWxpemVyIGNyZWF0ZUV2ZW50Rm9yRGljdGlvbmFyeTpldmVudERpY3QgaW5XaW5kb3c6X3dp
bmRvdy5nZXQoKSByZWxhdGl2ZVRvVGltZTpfc3RhcnRUaW1lXTsKKyAgICAgICAgYXV0byBldmVu
dCA9IFtFdmVudFNlcmlhbGl6ZXIgY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5OmV2ZW50RGljdCBp
bldpbmRvdzpfd2luZG93LmdldCgpIHJlbGF0aXZlVG9UaW1lOl9zdGFydFRpbWVdOwogICAgICAg
ICBpZiAoQ0dFdmVudEdldFRpbWVzdGFtcChldmVudC5nZXQoKSkgPCBtYWNoX2Fic29sdXRlX3Rp
bWUoKSkgewogICAgICAgICAgICAgbnNFdmVudCA9IFtOU0V2ZW50IGV2ZW50V2l0aENHRXZlbnQ6
ZXZlbnQuZ2V0KCldOwogICAgICAgICAgICAgW05TQXBwIHBvc3RFdmVudDpuc0V2ZW50IGF0U3Rh
cnQ6Tk9dOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRl
eHQvVUlTY3JpcHRDb250ZXh0LmNwcCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRD
b250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAKaW5kZXggMjcwNWIzOWEyNDdkZDI1N2Q1YzZkNThj
NDcwZTk2MzNhOTE5ZGZkNC4uNWRjZmI3Yzk4NzJmMzk5ZjE1Njc0ZDk3MTBkZWIyODliMmQxMjE4
ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlT
Y3JpcHRDb250ZXh0LmNwcAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29u
dGV4dC9VSVNjcmlwdENvbnRleHQuY3BwCkBAIC0yNiw5ICsyNiw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJKU0Jhc2lj
cy5oIgogI2luY2x1ZGUgIlVJU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTQ29udGV4dFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVS
ZWYuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V1RSOwpAQCAtNDMsMTEgKzQyLDcgQEAgVUlTY3JpcHRDb250ZXh0OjpVSVNjcmlwdENvbnRleHQo
VUlTY3JpcHRDb250ZXh0RGVsZWdhdGUmIGRlbGVnYXRlLCBVSVNjcmlwdENvbnQKICAgICAsIG1f
ZGVsZWdhdGUoZGVsZWdhdGUpCiB7CiAgICAgbV9jb250cm9sbGVyID0gZmFjdG9yeSgqdGhpcyk7
Ci0KLSAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmpl
Y3QobV9jb250ZXh0LmdldCgpKTsKLQotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0
cjsKLSAgICBtX2NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QobV9jb250ZXh0LmdldCgpLCBn
bG9iYWxPYmplY3QsICZleGNlcHRpb24pOworICAgIG1fY29udHJvbGxlci0+bWFrZVdpbmRvd09i
amVjdChtX2NvbnRleHQuZ2V0KCkpOwogfQogCiBVSVNjcmlwdENvbnRleHQ6On5VSVNjcmlwdENv
bnRleHQoKQpAQCAtNjYsOSArNjEsNyBAQCB2b2lkIFVJU2NyaXB0Q29udGV4dDo6cnVuVUlTY3Jp
cHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIHVuc2lnbmVkIHNjcmlwdENhbGxiYWNrSQogICAgIEpT
VmFsdWVSZWYgcmVzdWx0ID0gSlNFdmFsdWF0ZVNjcmlwdChtX2NvbnRleHQuZ2V0KCksIHN0cmlu
Z1JlZi5nZXQoKSwgMCwgMCwgMSwgJmV4Y2VwdGlvbik7CiAgICAgCiAgICAgaWYgKCFoYXNPdXRz
dGFuZGluZ0FzeW5jVGFza3MoKSkgewotICAgICAgICBKU1ZhbHVlUmVmIHN0cmluZ2lmeUV4Y2Vw
dGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gc3RyaW5naWZpZWQgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KG1fY29udGV4dC5nZXQoKSwgcmVzdWx0LCAmc3RyaW5naWZ5RXhjZXB0aW9u
KSk7Ci0gICAgICAgIHJlcXVlc3RVSVNjcmlwdENvbXBsZXRpb24oc3RyaW5naWZpZWQuZ2V0KCkp
OworICAgICAgICByZXF1ZXN0VUlTY3JpcHRDb21wbGV0aW9uKGNyZWF0ZUpTU3RyaW5nKG1fY29u
dGV4dC5nZXQoKSwgcmVzdWx0KS5nZXQoKSk7CiAgICAgICAgIHRyeVRvQ29tcGxldGVVSVNjcmlw
dEZvckN1cnJlbnRQYXJlbnRDYWxsYmFjaygpOwogICAgIH0KIH0KQEAgLTE4OSwxMCArMTgyLDEw
IEBAIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udGV4dDo6b2JqZWN0RnJvbVJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiByZWN0KSBjb25zCiB7CiAgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0g
SlNPYmplY3RNYWtlKG1fY29udGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAKLSAgICBK
U09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVmdCIpKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIo
bV9jb250ZXh0LmdldCgpLCByZWN0LngoKSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVs
bHB0cik7Ci0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwg
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRvcCIpKS5nZXQoKSwgSlNWYWx1
ZU1ha2VOdW1iZXIobV9jb250ZXh0LmdldCgpLCByZWN0LnkoKSksIGtKU1Byb3BlcnR5QXR0cmli
dXRlTm9uZSwgbnVsbHB0cik7Ci0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0
KCksIG9iamVjdCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikp
LmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3Qud2lkdGgoKSks
IGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVsbHB0cik7Ci0gICAgSlNPYmplY3RTZXRQcm9w
ZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImhlaWdodCIpKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIobV9jb250ZXh0Lmdl
dCgpLCByZWN0LmhlaWdodCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsK
KyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwgImxlZnQiLCByZWN0Lngo
KSk7CisgICAgc2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsICJ0b3AiLCByZWN0
LnkoKSk7CisgICAgc2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsICJ3aWR0aCIs
IHJlY3Qud2lkdGgoKSk7CisgICAgc2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3Qs
ICJoZWlnaHQiLCByZWN0LmhlaWdodCgpKTsKICAgICAKICAgICByZXR1cm4gb2JqZWN0OwogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250cm9sbGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRyb2xsZXIuaAppbmRleCBhNWE4ZDdjYzJmY2M5ZmVkNmZmNTUyMmNjOWVkNjdj
ZTQyOThjYTgxLi4zNTI0YjYwYmQ4MWNkOWNhYjMxMGFhMWI1NjhmMjNmZDUxNjhkY2VmIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENv
bnRyb2xsZXIuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRyb2xsZXIuaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
b250ZXh0RGVzdHJveWVkKCk7CiAgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JPdXRzdGFuZGluZ0Nh
bGxiYWNrcygpIHsgLyogbm90SW1wbGVtZW50ZWQoKTsgKi8gfQogCi0gICAgdm9pZCBtYWtlV2lu
ZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYp
OwogCiAgICAgLy8gVHJhbnNhY3Rpb24gaGVscGVycwogICAgIApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyU2hhcmVk
LmNwcCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlclNoYXJlZC5jcHAKaW5kZXggYzZlYjE0MGFhMzU2YzY2ZDhjNDUwMjE0ZTdkYjJjODVh
ZDNhNzFhMy4uYmZmNGYzNDMzZGJkMjk1NzVkNjI1YjczOTRlNmQ5ZDM4MWNhZWMyNiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250
cm9sbGVyU2hhcmVkLmNwcAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29u
dGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwCkBAIC00MSwyMCArNDEsMTUgQEAgRGV2
aWNlT3JpZW50YXRpb24qIHRvRGV2aWNlT3JpZW50YXRpb24oSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgdmFsdWUpCiAgICAgICAgIERldmljZU9yaWVudGF0aW9uOjpMYW5kc2NhcGVM
ZWZ0LAogICAgICAgICBEZXZpY2VPcmllbnRhdGlvbjo6TGFuZHNjYXBlUmlnaHQKICAgICB9Owot
Ci0gICAgYXV0byBvcHRpb24gPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZh
bHVlLCBudWxscHRyKSk7Ci0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gInBvcnRyYWl0IikK
KyAgICBhdXRvIG9wdGlvbiA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKTsKKyAgICBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb24uZ2V0KCksICJwb3J0cmFpdCIp
KQogICAgICAgICByZXR1cm4gJnZhbHVlc1swXTsKLQotICAgIGlmIChvcHRpb24tPnN0cmluZygp
ID09ICJwb3J0cmFpdC11cHNpZGVkb3duIikKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhvcHRpb24uZ2V0KCksICJwb3J0cmFpdC11cHNpZGVkb3duIikpCiAgICAgICAgIHJl
dHVybiAmdmFsdWVzWzFdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gImxhbmRzY2Fw
ZS1sZWZ0IikKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb24uZ2V0
KCksICJsYW5kc2NhcGUtbGVmdCIpKQogICAgICAgICByZXR1cm4gJnZhbHVlc1syXTsKLQotICAg
IGlmIChvcHRpb24tPnN0cmluZygpID09ICJsYW5kc2NhcGUtcmlnaHQiKQorICAgIGlmIChKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgImxhbmRzY2FwZS1yaWdodCIp
KQogICAgICAgICByZXR1cm4gJnZhbHVlc1szXTsKLQogICAgIHJldHVybiBudWxscHRyOwogfQog
CkBAIC02OCw5ICs2Myw5IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpjb250ZXh0RGVzdHJv
eWVkKCkKICAgICBtX2NvbnRleHQgPSBudWxscHRyOwogfQogCi12b2lkIFVJU2NyaXB0Q29udHJv
bGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
d2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFVJU2NyaXB0Q29udHJv
bGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQ
cm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJ1aUNvbnRyb2xsZXIiLCB0aGlzLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
LCBleGNlcHRpb24pOworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJ1aUNv
bnRyb2xsZXIiLCB0aGlzKTsKIH0KIAogSlNDbGFzc1JlZiBVSVNjcmlwdENvbnRyb2xsZXI6Ondy
YXBwZXJDbGFzcygpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL2NvY29hL0xh
eW91dFRlc3RTcGVsbENoZWNrZXIubW0gYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL2NvY29hL0xh
eW91dFRlc3RTcGVsbENoZWNrZXIubW0KaW5kZXggOGZjMDIxMTY3YWFjMjIxNTM2YTE3NjZlNTM5
MDE5ZmU2NDQwNThlMS4uZDg2ZWY5NTZmODBkZmExOTIyOTU0ZTExNzlhZjJiMzUyYjk4MzkyNCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9jb2NvYS9MYXlvdXRUZXN0U3BlbGxD
aGVja2VyLm1tCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvY29jb2EvTGF5b3V0VGVzdFNw
ZWxsQ2hlY2tlci5tbQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1w
b3J0ICJMYXlvdXRUZXN0U3BlbGxDaGVja2VyLmgiCiAKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+CisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8b2JqYy9ydW50
aW1lLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRy
Lmg+CkBAIC0yMTIsMTEgKzIxMiwxMSBAQCAtICh2b2lkKXNldFJlc3VsdHM6KFRleHRDaGVja2lu
Z1Jlc3VsdHNEaWN0aW9uYXJ5ICopcmVzdWx0cwogLSAodm9pZClzZXRSZXN1bHRzRnJvbUpTVmFs
dWU6KEpTVmFsdWVSZWYpcmVzdWx0c1ZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0UmVmKWNvbnRl
eHQKIHsKICAgICBhdXRvIHJlc3VsdHNPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwg
cmVzdWx0c1ZhbHVlLCBudWxscHRyKTsKLSAgICBhdXRvIGZyb21Qcm9wZXJ0eU5hbWUgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZnJvbSIpKTsKLSAgICBhdXRvIHRvUHJv
cGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRvIikpOwot
ICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJ0eXBlIikpOwotICAgIGF1dG8gcmVwbGFjZW1lbnRQcm9wZXJ0eU5hbWUgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicmVwbGFjZW1lbnQiKSk7Ci0gICAgYXV0
byBkZXRhaWxzUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImRldGFpbHMiKSk7CisgICAgYXV0byBmcm9tUHJvcGVydHlOYW1lID0gV1RSOjpjcmVhdGVK
U1N0cmluZygiZnJvbSIpOworICAgIGF1dG8gdG9Qcm9wZXJ0eU5hbWUgPSBXVFI6OmNyZWF0ZUpT
U3RyaW5nKCJ0byIpOworICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNT
dHJpbmcoInR5cGUiKTsKKyAgICBhdXRvIHJlcGxhY2VtZW50UHJvcGVydHlOYW1lID0gV1RSOjpj
cmVhdGVKU1N0cmluZygicmVwbGFjZW1lbnQiKTsKKyAgICBhdXRvIGRldGFpbHNQcm9wZXJ0eU5h
bWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJkZXRhaWxzIik7CiAgICAgYXV0byByZXN1bHRzID0g
YWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKIAogICAgIC8vIEZJ
WE1FOiBVc2luZyB0aGUgT2JqZWN0aXZlLUMgQVBJIHdvdWxkIG1ha2UgdGhpcyBsb2dpYyBlYXNp
ZXIgdG8gZm9sbG93LgpAQCAtMjI4LDE1ICsyMjgsMTMgQEAgLSAodm9pZClzZXRSZXN1bHRzRnJv
bUpTVmFsdWU6KEpTVmFsdWVSZWYpcmVzdWx0c1ZhbHVlIGluQ29udGV4dDooSlNDb250ZXh0UmVm
KWMKICAgICAgICAgYXV0byByZXN1bHRzRm9yV29yZCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF0pOwogICAgICAgICBmb3IgKHNpemVfdCByZXN1bHRJbmRleCA9IDA7IHJl
c3VsdEluZGV4IDwgSlNQcm9wZXJ0eU5hbWVBcnJheUdldENvdW50KHJlc3VsdHNBcnJheVByb3Bl
cnR5TmFtZXMpOyArK3Jlc3VsdEluZGV4KSB7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdHNPYmpl
Y3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgo
Y29udGV4dCwgcmVzdWx0c0FycmF5LCByZXN1bHRJbmRleCwgbnVsbHB0ciksIG51bGxwdHIpOwot
ICAgICAgICAgICAgbG9uZyBmcm9tVmFsdWUgPSBscm91bmRsKEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIGZyb21Qcm9w
ZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBsb25nIHRv
VmFsdWUgPSBscm91bmRsKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBKU09iamVjdEdldFByb3Bl
cnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIHRvUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRy
KSwgbnVsbHB0cikpOwotICAgICAgICAgICAgYXV0byB0eXBlVmFsdWUgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0
c09iamVjdCwgdHlwZVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxwdHIpKTsKKyAg
ICAgICAgICAgIGxvbmcgZnJvbVZhbHVlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgZnJvbVByb3BlcnR5TmFtZS5n
ZXQoKSwgbnVsbHB0ciksIG51bGxwdHIpOworICAgICAgICAgICAgbG9uZyB0b1ZhbHVlID0gSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0
c09iamVjdCwgdG9Qcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpLCBudWxscHRyKTsKKyAgICAg
ICAgICAgIGF1dG8gdHlwZVZhbHVlID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmplY3QsIHR5cGVQcm9wZXJ0eU5hbWUu
Z2V0KCksIG51bGxwdHIpKTsKICAgICAgICAgICAgIGF1dG8gcmVwbGFjZW1lbnRWYWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgcmVwbGFjZW1lbnRQcm9w
ZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpOwogICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiByZXBsYWNlbWVudFRleHQ7Ci0gICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5l
ZChjb250ZXh0LCByZXBsYWNlbWVudFZhbHVlKSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVw
bGFjZW1lbnRKU1N0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgcmVw
bGFjZW1lbnRWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50VGV4
dCA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVw
bGFjZW1lbnRKU1N0cmluZy5nZXQoKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgcmVwbGFjZW1lbnRWYWx1ZSkpCisgICAgICAg
ICAgICAgICAgcmVwbGFjZW1lbnRUZXh0ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHJlcGxhY2Vt
ZW50VmFsdWUpLmdldCgpKSk7CiAgICAgICAgICAgICBhdXRvIGRldGFpbHMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICAgICAgICAgIGF1dG8gZGV0YWlsc1Zh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCBkZXRhaWxz
UHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmICghSlNWYWx1ZUlz
VW5kZWZpbmVkKGNvbnRleHQsIGRldGFpbHNWYWx1ZSkpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvRGljdGlvbmFyeUZ1bmN0aW9ucy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQwNzJmMjgwN2I4NzkwNzQ1
N2UwYzU1ZDE2ZDRiOGVhMTdmZDYxMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvRGljdGlvbmFyeUZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKKworbmFt
ZXNwYWNlIFdUUiB7CisKK1dLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5VmFsdWUoV0tUeXBlUmVm
KTsKKworYm9vbCBib29sZWFuVmFsdWUoV0tUeXBlUmVmKTsKK2Jvb2wgYm9vbGVhblZhbHVlKGNv
bnN0IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4mKTsKKworZG91YmxlIGRvdWJsZVZhbHVlKFdLVHlw
ZVJlZik7CitPcHRpb25hbDxkb3VibGU+IG9wdGlvbmFsRG91YmxlVmFsdWUoV0tUeXBlUmVmKTsK
KworV0tTdHJpbmdSZWYgc3RyaW5nVmFsdWUoV0tUeXBlUmVmKTsKK1dURjo6U3RyaW5nIHRvV1RG
U3RyaW5nKFdLVHlwZVJlZik7CisKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLVHlwZVJlZik7Cit1
aW50NjRfdCB1aW50NjRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS1R5cGVSZWY+Jik7CisKK1dL
VHlwZVJlZiB2YWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CisKK2Jvb2wg
Ym9vbGVhblZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsKK2RvdWJsZSBk
b3VibGVWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CitXS1N0cmluZ1Jl
ZiBzdHJpbmdWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7Cit1aW50NjRf
dCB1aW50NjRWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7CisKK09wdGlv
bmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNo
YXIqIGtleSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2V0VmFsdWUoY29uc3QgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0
IE9wdGlvbmFsPFQ+JiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBXS1R5cGVSZWYgdmFsdWUp
Owordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVm
PiYsIGNvbnN0IGNoYXIqIGtleSwgYm9vbCB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBjb25z
dCBjaGFyKiB2YWx1ZSk7Cit2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCB1aW50NjRfdCB2YWx1ZSk7Cit2b2lk
IHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29u
c3QgY2hhcioga2V5LCBkb3VibGUgdmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgV1RG
OjpTdHJpbmcmIHZhbHVlKTsKKworaW5saW5lIGJvb2wgYm9vbGVhblZhbHVlKFdLVHlwZVJlZiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpICYmIFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4odmFsdWUpKTsKK30KKworaW5saW5lIGJvb2wgYm9vbGVhblZhbHVlKGNvbnN0IFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4mIHZhbHVlKQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUodmFs
dWUuZ2V0KCkpOworfQorCitpbmxpbmUgV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnlWYWx1ZShX
S1R5cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVl
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSA/IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4odmFsdWUpIDogbnVsbHB0cjsKK30KKworaW5saW5lIGRvdWJsZSBkb3VibGVWYWx1ZShXS1R5
cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9
PSBXS0RvdWJsZUdldFR5cGVJRCgpID8gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Rv
dWJsZVJlZj4odmFsdWUpKSA6IDA7Cit9CisKK2lubGluZSBPcHRpb25hbDxkb3VibGU+IG9wdGlv
bmFsRG91YmxlVmFsdWUoV0tUeXBlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAmJiBX
S0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSA/IG1ha2VPcHRpb25hbChX
S0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPih2YWx1ZSkpKSA6IFdURjo6
bnVsbG9wdDsKK30KKworaW5saW5lIFdLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLVHlwZVJlZiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLU3Ry
aW5nR2V0VHlwZUlEKCkgPyBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4odmFsdWUpIDogbnVsbHB0
cjsKK30KKworaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKFdLVHlwZVJlZiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUodmFsdWUpKTsKK30KKworaW5s
aW5lIHVpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09IFdLVUludDY0R2V0VHlwZUlEKCkgPyBXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPih2YWx1ZSkpIDogMDsKK30KKwor
aW5saW5lIHVpbnQ2NF90IHVpbnQ2NFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4m
IHZhbHVlKQoreworICAgIHJldHVybiB1aW50NjRWYWx1ZSh2YWx1ZS5nZXQoKSk7Cit9CisKK2lu
bGluZSBXS1R5cGVSZWYgdmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNo
YXIqIGtleSkKK3sKKyAgICByZXR1cm4gZGljdGlvbmFyeSA/IFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkoZGljdGlvbmFyeSwgdG9XSyhrZXkpLmdldCgpKSA6IG51bGxwdHI7Cit9CisKK2lubGlu
ZSBib29sIGJvb2xlYW5WYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hh
cioga2V5KQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5
KSk7Cit9CisKK2lubGluZSBkb3VibGUgZG91YmxlVmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rp
b25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gZG91YmxlVmFsdWUodmFsdWUo
ZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShX
S0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVy
biBzdHJpbmdWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsKK30KKworaW5saW5lIHVpbnQ2
NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBr
ZXkpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHZhbHVlKGRpY3Rpb25hcnksIGtleSkpOwor
fQorCitpbmxpbmUgT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdLRGljdGlv
bmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIG9wdGlv
bmFsRG91YmxlVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSB2b2lk
IHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0
aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHRvV0soa2V5KS5nZXQoKSwgdmFsdWUpOwor
fQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBib29sIHZhbHVlKQorewor
ICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRy
PFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIGNv
bnN0IGNoYXIqIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgdG9XSyh2
YWx1ZSkuZ2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBj
b25zdCBXVEY6OlN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwga2V5
LCB0b1dLKHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXksIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwg
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30KKworaW5saW5lIHZvaWQg
c2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rp
b25hcnksIGNvbnN0IGNoYXIqIGtleSwgZG91YmxlIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRp
Y3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBjb25z
dCBPcHRpb25hbDxUPiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBzZXRWYWx1
ZShkaWN0aW9uYXJ5LCBrZXksICp2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmggYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaAppbmRleCA2NDQ3NjAzOTY4ZDIw
NjQyMGJlYjk0Mjc3M2IyNGI3ODk2NDFiNWM5Li5mYTNhODhkM2FmMzkzNGQ0Yzg4MjBiZjUwZmU5
Zjg5N2IzOGZkMDRhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHku
aApAQCAtMTEyLDE4ICsxMTIsMTkgQEAgcHJpdmF0ZToKICAgICBQT0lOVCBwb3NpdGlvbkluUG9p
bnQoKSBjb25zdCB7IHJldHVybiB7IHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueCksIHN0
YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueSkgfTsgfQogI2VuZGlmCiAKLSAgICBkb3VibGUg
bV90aW1lOwotICAgIFdLUG9pbnQgbV9wb3NpdGlvbjsKLSAgICBib29sIG1fbGVmdE1vdXNlQnV0
dG9uRG93bjsKLSAgICBpbnQgbV9jbGlja0NvdW50OwotICAgIGRvdWJsZSBtX2NsaWNrVGltZTsK
LSAgICBXS1BvaW50IG1fY2xpY2tQb3NpdGlvbjsKLSAgICBXS0V2ZW50TW91c2VCdXR0b24gbV9j
bGlja0J1dHRvbjsKKyAgICBkb3VibGUgbV90aW1lIHsgMCB9OworICAgIFdLUG9pbnQgbV9wb3Np
dGlvbiB7IH07CisgICAgYm9vbCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24geyBmYWxzZSB9OworICAg
IGludCBtX2NsaWNrQ291bnQgeyAwIH07CisgICAgZG91YmxlIG1fY2xpY2tUaW1lIHsgMCB9Owor
ICAgIFdLUG9pbnQgbV9jbGlja1Bvc2l0aW9uIHsgfTsKKyAgICBXS0V2ZW50TW91c2VCdXR0b24g
bV9jbGlja0J1dHRvbiB7IGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbiB9OwogICAgIHVuc2ln
bmVkIG1fbW91c2VCdXR0b25zQ3VycmVudGx5RG93biB7IDAgfTsKICNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBpbnQgZXZlbnROdW1iZXI7Ci0jZWxpZiBQTEFURk9STShXUEUpCi0gICAgdWludDMy
X3QgbV9idXR0b25TdGF0ZTsKKyAgICBpbnQgZXZlbnROdW1iZXIgeyAwIH07CisjZW5kaWYKKyNp
ZiBQTEFURk9STShXUEUpCisgICAgdWludDMyX3QgbV9idXR0b25TdGF0ZSB7IDAgfTsKICAgICBW
ZWN0b3I8c3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+IG1fdG91Y2hFdmVudHM7CiAg
ICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV91cGRhdGVkVG91Y2hFdmVudHM7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92
aWRlck1vY2suY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVy
TW9jay5jcHAKaW5kZXggNmY5M2NhMjczMDMwZjU3NzZlMzE4ZjllNDU2OTAyMmNlZTE0YjkwZC4u
YzQyNTFiMzAxZmI1NTRjN2VhZTYwMzE2Mjc1OTZmNTBiNzhhMjU5ZCAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKQEAgLTYzLDkg
KzYzLDkgQEAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6On5HZW9sb2NhdGlvblByb3ZpZGVyTW9j
aygpCiAgICAgV0tHZW9sb2NhdGlvbk1hbmFnZXJTZXRQcm92aWRlcihtX2dlb2xvY2F0aW9uTWFu
YWdlciwgMCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9u
KGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29s
IHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywg
ZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHBy
b3ZpZGVzRmxvb3JMZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIEdlb2xvY2F0aW9uUHJv
dmlkZXJNb2NrOjpzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFs
PGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBtX3Bv
c2l0aW9uLmFkb3B0KFdLR2VvbG9jYXRpb25Qb3NpdGlvbkNyZWF0ZV9jKFdhbGxUaW1lOjpub3co
KS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNj
dXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNT
cGVlZCwgc3BlZWQsIHByb3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCkpOworICAgIG1fcG9z
aXRpb24uYWRvcHQoV0tHZW9sb2NhdGlvblBvc2l0aW9uQ3JlYXRlX2MoV2FsbFRpbWU6Om5vdygp
LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1
cmFjeSwgYWx0aXR1ZGUuaGFzVmFsdWUoKSwgYWx0aXR1ZGUudmFsdWVPcigwKSwgYWx0aXR1ZGVB
Y2N1cmFjeS5oYXNWYWx1ZSgpLCBhbHRpdHVkZUFjY3VyYWN5LnZhbHVlT3IoMCksIGhlYWRpbmcu
aGFzVmFsdWUoKSwgaGVhZGluZy52YWx1ZU9yKDApLCBzcGVlZC5oYXNWYWx1ZSgpLCBzcGVlZC52
YWx1ZU9yKDApLCBmbG9vckxldmVsLmhhc1ZhbHVlKCksIGZsb29yTGV2ZWwudmFsdWVPcigwKSkp
OwogCiAgICAgbV9oYXNFcnJvciA9IGZhbHNlOwogICAgIG1fZXJyb3JNZXNzYWdlLmNsZWFyKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmgK
aW5kZXggMWVkNGFkZjliMzkzOTNhMzMzYWEzMjUxMDk3YjllM2FhNDJjYzM2Yi4uOWJmNjMzODRh
ZTI3ZGIyOGM1ZjU0MDU2ODViODhmNzViZWQ3YjUxNiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5oCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suaApAQCAtMzcsNyArMzcsNyBAQCBwdWJs
aWM6CiAgICAgR2VvbG9jYXRpb25Qcm92aWRlck1vY2soV0tDb250ZXh0UmVmKTsKICAgICB+R2Vv
bG9jYXRpb25Qcm92aWRlck1vY2soKTsKIAotICAgIHZvaWQgc2V0UG9zaXRpb24oZG91YmxlIGxh
dGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwg
ZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVh
ZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9v
ckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25h
bDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJs
ZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRQb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tT
dHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKIAogICAgIHZvaWQgc3RhcnRVcGRhdGluZyhXS0dlb2xv
Y2F0aW9uTWFuYWdlclJlZik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmluZGV4
IDZhMDhhYWE2YjYzOWYzZjU1YzhjNDZhOTRjMmZlOTVkYjU0N2Y3ODIuLmFkNGEyNWFlNWIwN2I3
NThlMmUwYTkxZmFmMWI1MjgzMDNlYjg0OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuY3BwCkBAIC03NSw5ICs3NSw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnVw
ZGF0ZUlzb2xhdGVkVHJlZU1vZGUoKQogfQogI2VuZGlmCiAKLXZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsK
LSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJv
cGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgdGhpcyk7CiB9CiAKIEpT
Q2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCkBAIC05Niwx
NyArOTYsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5jZWRBY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpCiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKKwogUmVmPEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7
Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3QgPSBzdGF0aWNf
Y2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7
Ci0KICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHJvb3QpOwogfQog
CiBSZWY8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZv
Y3VzZWRFbGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgUGxhdGZvcm1VSUVsZW1l
bnQgZm9jdXNlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nl
c3NpYmlsaXR5Rm9jdXNlZE9iamVjdChwYWdlKSk7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNyZWF0ZShmb2N1c2VkRWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmgKaW5kZXggNjZjMzQzODIyYmJiYzY5NTk5YmFmNmE0NzY2MGExMzg3ZWUyNTFiMC4u
ZDljMmYxMjZmODcxY2UyZWVmMDdiMDAzNTgwZjZkYWNlNmM1NDIzNSAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgfkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKCk7CiAKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9p
ZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAgICAgdmlydHVhbCBKU0NsYXNzUmVm
IHdyYXBwZXJDbGFzcygpOwogICAgIAogICAgIC8vIEVuaGFuY2VkIGFjY2Vzc2liaWxpdHkuCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdz
L0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQppbmRleCBiOWY1
ZWVmZmE0NjQ5ZjQxN2Y4MmIxNjE3MDlmNGFiYWUwOTk5MWYyLi41MmUzZWZhOTkxYjlkZDZjMTc1
ZGJiOGU0MTBlNmZlY2ZhYzMwMTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVy
YXRvclRlc3RSdW5uZXIucG0KQEAgLTI2MSw4ICsyNjEsNyBAQCAke2ltcGxlbWVudGF0aW9uQ2xh
c3NOYW1lfSogdG8ke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfShKU0NvbnRleHRSZWYgY29udGV4
dCwgSgogCiBKU0NsYXNzUmVmICR7Y2xhc3NOYW1lfTo6JHtjbGFzc1JlZkdldHRlcn0oKQogewot
ICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7Ci0gICAgaWYgKCFqc0NsYXNzKSB7CisgICAg
c3RhdGljIGNvbnN0IEpTQ2xhc3NSZWYganNDbGFzcyA9IFtdIHsKICAgICAgICAgSlNDbGFzc0Rl
ZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OwogICAgICAgICBk
ZWZpbml0aW9uLmNsYXNzTmFtZSA9ICJAe1skdHlwZS0+bmFtZV19IjsKICAgICAgICAgZGVmaW5p
dGlvbi5wYXJlbnRDbGFzcyA9IEB7WyRzZWxmLT5fcGFyZW50Q2xhc3NSZWZHZXR0ZXJFeHByZXNz
aW9uKCRpbnRlcmZhY2UpXX07CkBAIC0yNzQsOCArMjczLDggQEAgRU9GCiAgICAgcHVzaChAY29u
dGVudHMsICIgICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBmaW5hbGl6ZTtcbiIpIHVubGVz
cyBfcGFyZW50SW50ZXJmYWNlKCRpbnRlcmZhY2UpOwogCiAgICAgcHVzaChAY29udGVudHMsIDw8
RU9GKTsKLSAgICAgICAganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0oKTsK
ICAgICByZXR1cm4ganNDbGFzczsKIH0KIApAQCAtNDc3LDEwICs0NzYsMTEgQEAgc3ViIF9wbGF0
Zm9ybVR5cGVDb25zdHJ1Y3RvcgogewogICAgIG15ICgkc2VsZiwgJHR5cGUsICRhcmd1bWVudE5h
bWUpID0gQF87CiAKLSAgICByZXR1cm4gIkpTVmFsdWVUb051bGxhYmxlQm9vbGVhbihjb250ZXh0
LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0eXBlLT5p
c051bGxhYmxlOworICAgIHJldHVybiAidG9PcHRpb25hbEJvb2woY29udGV4dCwgJGFyZ3VtZW50
TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkdHlwZS0+aXNOdWxsYWJsZTsK
ICAgICByZXR1cm4gIkpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlm
ICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKICAgICByZXR1cm4gIiRhcmd1bWVudE5hbWUiIGlm
ICR0eXBlLT5uYW1lIGVxICJvYmplY3QiOwotICAgIHJldHVybiAiYWRvcHQoSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSkiIGlmICQkc2VsZntjb2Rl
R2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gImNyZWF0ZUpTU3Ry
aW5nKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklz
U3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsRG91YmxlKGNvbnRleHQs
ICRhcmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJpbWl0aXZlVHlw
ZSgkdHlwZSkgJiYgJHR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgJGFyZ3VtZW50TmFtZSwgbnVsbHB0cikiIGlmICQkc2VsZntjb2RlR2VuZXJh
dG9yfS0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gInRvIiAuIF9pbXBsZW1l
bnRhdGlvbkNsYXNzTmFtZSgkdHlwZSkgLiAiKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIjsKIH0K
QEAgLTQ5OSwxOCArNDk5LDE2IEBAIHN1YiBfcGxhdGZvcm1UeXBlVmFyaWFibGVEZWNsYXJhdGlv
bgogICAgICAgICAiSlNWYWx1ZVJlZiIgPT4gMSwKICAgICApOwogCi0gICAgbXkgJG51bGxWYWx1
ZSA9ICIwIjsKKyAgICBteSAkbnVsbFZhbHVlID0gIm51bGxwdHIiOwogICAgIGlmICgkcGxhdGZv
cm1UeXBlIGVxICJKU1ZhbHVlUmVmIikgewogICAgICAgICAkbnVsbFZhbHVlID0gIkpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpIjsKLSAgICB9IGVsc2lmIChkZWZpbmVkICRub25Qb2ludGVy
VHlwZXN7JHBsYXRmb3JtVHlwZX0gJiYgJHBsYXRmb3JtVHlwZSBuZSAiZG91YmxlIikgewotICAg
ICAgICAkbnVsbFZhbHVlID0gIiRwbGF0Zm9ybVR5cGUoKSI7CisgICAgfSBlbHNpZiAoZGVmaW5l
ZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9KSB7CisgICAgICAgICRudWxsVmFsdWUg
PSAkdHlwZS0+aXNOdWxsYWJsZSA/ICJXVEY6Om51bGxvcHQiIDogIiRwbGF0Zm9ybVR5cGUoKSI7
CiAgICAgfQogCi0gICAgJHBsYXRmb3JtVHlwZSAuPSAiKiIgdW5sZXNzIGRlZmluZWQgJG5vblBv
aW50ZXJUeXBlc3skcGxhdGZvcm1UeXBlfTsKLQotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAk
dmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiAmJiAkY29uc3RydWN0b3I7IiBpZiAkY29uZGl0aW9u
ICYmICRwbGF0Zm9ybVR5cGUgZXEgImJvb2wiOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAk
dmFyaWFibGVOYW1lID0gJGNvbmRpdGlvbiA/ICRjb25zdHJ1Y3RvciA6ICRudWxsVmFsdWU7IiBp
ZiAkY29uZGl0aW9uOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAkdmFyaWFibGVOYW1lID0g
JGNvbnN0cnVjdG9yOyI7CisgICAgcmV0dXJuICJib29sICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0
aW9uICYmICRjb25zdHJ1Y3RvcjsiIGlmICRjb25kaXRpb24gJiYgJHBsYXRmb3JtVHlwZSBlcSAi
Ym9vbCI7CisgICAgcmV0dXJuICJhdXRvICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uID8gJGNv
bnN0cnVjdG9yIDogJG51bGxWYWx1ZTsiIGlmICRjb25kaXRpb247CisgICAgcmV0dXJuICJhdXRv
ICR2YXJpYWJsZU5hbWUgPSAkY29uc3RydWN0b3I7IjsKIH0KIAogc3ViIF9yZXR1cm5FeHByZXNz
aW9uCkBAIC01MTgsMTEgKzUxNiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBteSAo
JHNlbGYsICRyZXR1cm5UeXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAiSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1bmRl
ZmluZWQiOwotICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQsICR7
ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVy
blR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHBy
ZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlw
ZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAk
e2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJl
dHVybiAiJHtleHByZXNzaW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7CiAg
ICAgcmV0dXJuICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYg
JCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwotICAg
IHJldHVybiAiSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufS5n
ZXQoKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBl
KTsKKyAgICByZXR1cm4gIm1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIg
aWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwogICAg
IHJldHVybiAidG9KUyhjb250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwogfQog
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL1Rlc3RSdW5uZXIuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAppbmRleCBmYmVmMzk2ZjVmNmYzYmZmNGY5OWM4YTU2
YTZlNjJhYzAxNDBmZmE0Li5mMzdlMDA2Nzc1YjhlMzA2MWM3Y2VjOGY5YjVlZjc4ODYxODA5MTBh
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL1Rlc3RSdW5uZXIuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKQEAgLTIxNSw3ICsyMTUsNyBAQCBpbnRlcmZh
Y2UgVGVzdFJ1bm5lciB7CiAKICAgICAvLyBHZW9sb2NhdGlvbgogICAgIHVuZGVmaW5lZCBzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbGVhbiB2YWx1ZSk7Ci0gICAgdW5kZWZpbmVkIHNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgYWx0aXR1ZGUsIG9wdGlvbmFsIG9iamVj
dCBhbHRpdHVkZUFjY3VyYWN5LCBvcHRpb25hbCBvYmplY3QgaGVhZGluZywgb3B0aW9uYWwgb2Jq
ZWN0IHNwZWVkLCBvcHRpb25hbCBvYmplY3QgZmxvb3JMZXZlbCk7CisgICAgdW5kZWZpbmVkIHNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBvcHRpb25hbCBkb3VibGU/IGFsdGl0dWRlLCBvcHRpb25hbCBk
b3VibGU/IGFsdGl0dWRlQWNjdXJhY3ksIG9wdGlvbmFsIGRvdWJsZT8gaGVhZGluZywgb3B0aW9u
YWwgZG91YmxlPyBzcGVlZCwgb3B0aW9uYWwgZG91YmxlPyBmbG9vckxldmVsKTsKICAgICB1bmRl
ZmluZWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKERPTVN0cmlu
ZyBlcnJvck1lc3NhZ2UpOwogICAgIGJvb2xlYW4gaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZl
KCk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
RXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDU1M2ZkMDVlZjE2OWYz
NTIzYTA0MzFmMTMxNzQyZmJjMjIxNzA0MDkuLjQ0MjdmMDg5MjYwMTZhYTM0ODM5NzIyYzcxYmMz
YTA2MTJkZDI3ZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcApAQCAtMjYsMTAg
KzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kaW5nQ29u
dHJvbGxlci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5j
bHVkZSAiSlNFdmVudFNlbmRpbmdDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rp
b25zLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dL
QnVuZGxlRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oPgpA
QCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgTWVudUl0ZW1Qcml2YXRlRGF0YSB7CiB9OwogCiAjaWYg
RU5BQkxFKENPTlRFWFRfTUVOVVMpCisKIHN0YXRpYyBKU1ZhbHVlUmVmIG1lbnVJdGVtQ2xpY2tD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKIHsKICAg
ICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJdGVt
UHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtNjIsNyAr
NjMsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNrQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iagogc3RhdGljIEpTVmFsdWVSZWYgZ2V0TWVu
dUl0ZW1UaXRsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmpl
Y3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewog
ICAgIE1lbnVJdGVtUHJpdmF0ZURhdGEqIHByaXZhdGVEYXRhID0gc3RhdGljX2Nhc3Q8TWVudUl0
ZW1Qcml2YXRlRGF0YSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZSA9IGFkb3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5
VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQoKSkpOworICAgIGF1dG8gd2tUaXRsZSA9IGFk
b3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQo
KSkpOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHdrVGl0bGUp
LmdldCgpKTsKIH0KIApAQCAtNzMsMTggKzc0LDE3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldE1l
bnVJdGVtQ2hpbGRyZW5DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYK
ICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJ
dGVtUHJpdmF0ZURhdGEqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CiAgICAgYXV0byBj
aGlsZHJlbiA9IGFkb3B0V0soV0tDb250ZXh0TWVudUNvcHlTdWJtZW51SXRlbXMocHJpdmF0ZURh
dGEtPm1faXRlbS5nZXQoKSkpOwogCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2Jq
ZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVj
dE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAoIVdLQXJyYXlHZXRTaXplKGNo
aWxkcmVuLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgICAgICByZXR1
cm4gYXJyYXk7CiAKLSAgICBKU09iamVjdFJlZiBhcnJheU9iamVjdCA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBX
S0FycmF5R2V0U2l6ZShjaGlsZHJlbi5nZXQoKSk7ICsraSkgewogICAgICAgICBhdXRvIGl0ZW0g
PSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4
KGNoaWxkcmVuLmdldCgpLCBpKSk7CiAgICAgICAgIGF1dG8qIHByaXZhdGVEYXRhID0gbmV3IE1l
bnVJdGVtUHJpdmF0ZURhdGEoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBpdGVtKTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
YXJyYXlPYmplY3QsIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCks
IHByaXZhdGVEYXRhKSwgMCk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNv
bnRleHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFzcygp
LCBwcml2YXRlRGF0YSksIDApOwogICAgIH0KIAotICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAg
ICByZXR1cm4gYXJyYXk7CiB9CiAKIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY01lbnVJ
dGVtRnVuY3Rpb25zW10gPSB7CkBAIC0xMjYsNiArMTI2LDcgQEAgc3RhdGljIEpTQ2xhc3NSZWYg
Z2V0TWVudUl0ZW1DbGFzcygpCiAKICAgICByZXR1cm4gbWVudUl0ZW1DbGFzczsKIH0KKwogI2Vu
ZGlmCiAKIHN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXIoSlNTdHJpbmdSZWYg
bW9kaWZpZXIpCkBAIC0xNTAsMjUgKzE1MSwzMSBAQCBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBw
YXJzZU1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyKQogICAgIHJldHVybiAwOwogfQogCi1z
dGF0aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGFycmF5KQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK3N0YXRpYyB1aW50NjRfdCBw
YXJzZVRvdWNoTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIpCiB7Ci0gICAgYXV0byBsZW5n
dGhTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikp
OwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQsIGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIDApOwotICAgIGlmICghbGVuZ3RoVmFsdWUp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CisgICAgaWYgKEpTU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJjdHJsIikpCisgICAgICAgIHJldHVybiBr
V0tFdmVudE1vZGlmaWVyc0NvbnRyb2xLZXk7CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobW9kaWZpZXIsICJzaGlmdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2Rp
ZmllcnNTaGlmdEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2Rp
ZmllciwgImFsdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2RpZmllcnNBbHRLZXk7Cisg
ICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJtZXRhS2V5Iikp
CisgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVyc01ldGFLZXk7CisgICAgcmV0dXJuIDA7
CiB9CiAKKyNlbmRpZgorCiBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJy
YXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKICAgICBp
ZiAoIWFycmF5VmFsdWUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gVGhlIHZhbHVlIG1h
eSBlaXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBv
ZiBtb2RpZmllcnMuCi0gICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVl
KSkgewotICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgYXJyYXlWYWx1ZSwgMCkpOwotICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihzdHJp
bmcuZ2V0KCkpOwotICAgIH0KKyAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFycmF5
VmFsdWUpKQorICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihjcmVhdGVKU1N0cmluZyhjb250
ZXh0LCBhcnJheVZhbHVlKS5nZXQoKSk7CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250
ZXh0LCBhcnJheVZhbHVlKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzYsMjkgKzE4MywyMCBA
QCBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYQogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5TGVu
Z3RoKGNvbnRleHQsIGFycmF5KTsKICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IDA7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCAmZXhjZXB0aW9uKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRv
IHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsICZleGNl
cHRpb24pKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBtb2RpZmllcnMgfD0gcGFyc2VNb2RpZmllcihzdHJpbmcuZ2V0KCkpOworICAgICAg
ICBpZiAoYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFy
cmF5LCBpLCBudWxscHRyKSkKKyAgICAgICAgICAgIG1vZGlmaWVycyB8PSBwYXJzZU1vZGlmaWVy
KGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CiAgICAgfQogICAgIHJldHVy
biBtb2RpZmllcnM7CiB9CiAKLVJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXIpOwotfQotCi1FdmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNl
bmRpbmdDb250cm9sbGVyKCkKK3N0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXJB
cnJheShKU1ZhbHVlUmVmIGFycmF5VmFsdWUpCiB7CisgICAgcmV0dXJuIHBhcnNlTW9kaWZpZXJB
cnJheShXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpLCBhcnJh
eVZhbHVlKTsKIH0KIAotRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRy
b2xsZXIoKQorUmVmPEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+IEV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OmNyZWF0ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcik7CiB9CiAKIEpTQ2xhc3NSZWYgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6d3JhcHBl
ckNsYXNzKCkKQEAgLTIwNiwyMzcgKzIwNCwxMTYgQEAgSlNDbGFzc1JlZiBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogICAgIHJldHVybiBKU0V2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmV2ZW50U2VuZGluZ0NvbnRyb2xsZXJDbGFzcygpOwogfQogCi1lbnVtIE1vdXNlU3Rh
dGUgewotICAgIE1vdXNlVXAsCi0gICAgTW91c2VEb3duCi19OworZW51bSBNb3VzZVN0YXRlIHsg
TW91c2VVcCwgTW91c2VEb3duIH07CiAKLXN0YXRpYyBXS011dGFibGVEaWN0aW9uYXJ5UmVmIGNy
ZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VTdGF0ZSBzdGF0ZSwgaW50IGJ1dHRvbiwgV0tFdmVu
dE1vZGlmaWVycyBtb2RpZmllcnMpCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlU3RhdGUgc3RhdGUsIGludCBidXR0b24sIFdL
RXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQogewotICAgIFdLTXV0YWJsZURpY3Rpb25hcnlSZWYg
RXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHN0YXRlID09IE1vdXNlVXAgPyAiTW91c2VVcCIgOiAiTW91c2VEb3duIikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGJ1dHRvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkJ1dHRvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gYnV0dG9uUmVm
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHksIGJ1dHRvbktleS5nZXQoKSwgYnV0dG9uUmVmLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlmaWVyc1JlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUobW9kaWZpZXJzKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LCBtb2RpZmllcnNLZXkuZ2V0KCksIG1vZGlmaWVyc1JlZi5nZXQoKSk7Ci0KLSAgICBy
ZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3Nh
Z2UiLCBzdGF0ZSA9PSBNb3VzZVVwID8gIk1vdXNlVXAiIDogIk1vdXNlRG93biIpOworICAgIHNl
dFZhbHVlKGJvZHksICJCdXR0b24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbikpLmdl
dCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTW9kaWZpZXJzIiwgYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShtb2RpZmllcnMpKS5nZXQoKSk7CisgICAgcmV0dXJuIGJvZHk7CiB9CiAKIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9k
aWZpZXJBcnJheSkgCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBpbmplY3RlZEJ1bmRs
ZS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQ
YWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5k
bGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJz
IG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFycmF5KTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZURvd24sIGJ1dHRvbiwg
bW9kaWZpZXJzKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhwYWdlLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZl
bnRTZW5kZXIiLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBwYXJz
ZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJheSkpLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjptb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJB
cnJheSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFy
cmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBidXR0
b24sIG1vZGlmaWVycykpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVh
dGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlVXAsIGJ1dHRvbiwgcGFyc2VNb2RpZmllckFycmF5KG1v
ZGlmaWVyQXJyYXkpKS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
bW91c2VNb3ZlVG8oaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZU1vdmVUbyIpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VL
ZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlki
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0gYWRv
cHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJT
dWJNZXNzYWdlIiwgIk1vdXNlTW92ZVRvIik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CiAgICAgbV9wb3NpdGlvbiA9IFdLUG9p
bnRNYWtlKHgsIHkpOwotICAgIAotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgMCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9k
eS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNs
aWNrKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTW91c2VGb3JjZUNsaWNrIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVz
c2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZUNsaWNrIik7
CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQo
KSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c3RhcnRBbmRDYW5jZWxNb3Vz
ZUZvcmNlQ2xpY2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZl
bnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZl
bnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdl
IiwgIlN0YXJ0QW5kQ2FuY2VsTW91c2VGb3JjZUNsaWNrIik7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZURvd24oKQogewotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Vi
TWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlRG93biIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJN
ZXNzYWdlIiwgIk1vdXNlRm9yY2VEb3duIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3Nh
Z2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6bW91c2VGb3JjZVVwKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VGb3JjZVVwIikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtl
eS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91
c2VGb3JjZVVwIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VG
b3JjZUNoYW5nZWQoZG91YmxlIGZvcmNlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlQ2hhbmdlZCIpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkZvcmNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBmb3JjZVJlZiA9
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoZm9yY2UpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGZvcmNlS2V5LmdldCgpLCBmb3JjZVJlZi5n
ZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAg
IGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZUZvcmNlQ2hhbmdlZCIpOworICAgIHNl
dFZhbHVlKGJvZHksICJGb3JjZSIsIGZvcmNlKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMZWFwRm9yd2Fy
ZCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVGltZUluTWlsbGlzZWNvbmRzIikpOwotICAgIFdLUmV0YWluUHRyPFdL
VUludDY0UmVmPiB0aW1lUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHRpbWVLZXkuZ2V0KCksIHRpbWVSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTGVh
cEZvcndhcmQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiVGltZUluTWlsbGlzZWNvbmRzIiwgYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMpKS5nZXQoKSk7CisgICAgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljaygpCiB7Ci0g
ICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOwotICAgIGludCBidXR0b24gPSAwOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLQot
ICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSBkb3duLgotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IG1vdXNlRG93bk1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhjcmVhdGVNb3Vz
ZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlRG93bk1lc3NhZ2VCb2R5Lmdl
dCgpKTsKLQotICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSB1cC4KLSAgICBXS1JldGFpblB0cjxX
S011dGFibGVEaWN0aW9uYXJ5UmVmPiBtb3VzZVVwTWVzc2FnZUJvZHkgPSBhZG9wdFdLKGNyZWF0
ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBtb2RpZmllcnMpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlVXBNZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVz
c2FnZUJvZHkoTW91c2VEb3duLCAwLCAwKS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJF
dmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgMCwgMCkuZ2V0KCkp
OwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRl
S2V5RG93bk1lc3NhZ2VCb2R5KEpTU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2Rp
ZmllcnMsIGludCBsb2NhdGlvbikKIHsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9u
YXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleURvd24iKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5Lmdl
dCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4ga2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5Iikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
a2V5S2V5LmdldCgpLCB0b1dLKGtleSkuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZpZXJz
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyc0tleS5nZXQo
KSwgbW9kaWZpZXJzUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBs
b2NhdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxvY2F0
aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBsb2NhdGlvblJlZiA9IGFkb3B0
V0soV0tVSW50NjRDcmVhdGUobG9jYXRpb24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGxvY2F0aW9uS2V5LmdldCgpLCBsb2NhdGlvblJl
Zi5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBhdXRv
IGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiS2V5RG93biIpOworICAgIHNldFZhbHVlKGJvZHksICJL
ZXkiLCB0b1dLKGtleSkuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJNb2RpZmllcnMiLCBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKG1vZGlmaWVycykpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiTG9jYXRpb24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxvY2F0aW9uKSkuZ2V0KCkp
OworICAgIHJldHVybiBib2R5OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Omtl
eURvd24oSlNTdHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2Nh
dGlvbikKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFy
cmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4ga2V5RG93bk1lc3Nh
Z2VCb2R5ID0gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgbW9kaWZpZXJzLCBsb2NhdGlv
bik7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgY3JlYXRlS2V5RG93bk1lc3NhZ2VC
b2R5KGtleSwgcGFyc2VNb2RpZmllckFycmF5KG1vZGlmaWVyQXJyYXkpLCBsb2NhdGlvbikuZ2V0
KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNjaGVkdWxlQXN5bmNocm9u
b3VzS2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBrZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHko
a2V5LCAwIC8qIG1vZGlmaWVycyAqLywgMCAvKiBsb2NhdGlvbiAqLyk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZUtleURvd25NZXNz
YWdlQm9keShrZXksIDAsIDApLmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1l
c3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW91c2VTY3JvbGxCeSIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1
Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYgPSBhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCiAgICAgV0tCdW5k
bGVQYWdlRm9yY2VSZXBhaW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSk7IC8vIFRyaWdnZXJzIGEgc2Nyb2xsaW5nIHRyZWUgY29tbWl0LgotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSk7CisKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VTY3JvbGxCeSIp
OworICAgIHNldFZhbHVlKGJvZHksICJYIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh4KSkuZ2V0
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh5KSku
Z2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsK
IH0KIAogc3RhdGljIHVpbnQ2NF90IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcoSlNTdHJpbmdSZWYg
cGhhc2VTdHIpCkBAIC00NzUsOTAgKzM1Miw1OCBAQCBzdGF0aWMgdWludDY0X3QgY2dFdmVudE1v
bWVudHVtUGhhc2VGcm9tU3RyaW5nKEpTU3RyaW5nUmVmIHBoYXNlU3RyKQogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNl
cyhpbnQgeCwgaW50IHksIEpTU3RyaW5nUmVmIHBoYXNlU3RyLCBKU1N0cmluZ1JlZiBtb21lbnR1
bVN0cikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAg
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIk1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyIp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLSAgICAKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHhSZWYgPSBh
ZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJl
ZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0K
ICAgICB1aW50NjRfdCBwaGFzZSA9IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcocGhhc2VTdHIpOwog
ICAgIHVpbnQ2NF90IG1vbWVudHVtID0gY2dFdmVudE1vbWVudHVtUGhhc2VGcm9tU3RyaW5nKG1v
bWVudHVtU3RyKTsKLSAgICAKKwogICAgIGlmIChwaGFzZSA9PSA0IC8qIGtDR1Njcm9sbFBoYXNl
RW5kZWQgKi8gfHwgcGhhc2UgPT0gOCAvKiBrQ0dTY3JvbGxQaGFzZUNhbmNlbGxlZCAqLykKICAg
ICAgICAgbV9zZW50V2hlZWxQaGFzZUVuZE9yQ2FuY2VsID0gdHJ1ZTsKLSAgICAKICAgICBpZiAo
bW9tZW50dW0gPT0gMyAvKiBrQ0dNb21lbnR1bVNjcm9sbFBoYXNlRW5kICovKQogICAgICAgICBt
X3NlbnRXaGVlbE1vbWVudHVtUGhhc2VFbmQgPSB0cnVlOwogCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBoYXNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiUGhhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHBoYXNlUmVmID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShwaGFzZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgcGhhc2VLZXkuZ2V0KCksIHBoYXNlUmVmLmdldCgp
KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb21lbnR1bUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vbWVudHVtIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLVUludDY0UmVmPiBtb21lbnR1bVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9t
ZW50dW0pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIG1vbWVudHVtS2V5LmdldCgpLCBtb21lbnR1bVJlZi5nZXQoKSk7Ci0KICAgICBXS0J1
bmRsZVBhZ2VGb3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpKTsgLy8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcgdHJlZSBjb21taXQuCi0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpKTsKKworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZVNjcm9sbEJ5
V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWCIsIGFk
b3B0V0soV0tEb3VibGVDcmVhdGUoeCkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIs
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
UGhhc2UiLCBwaGFzZSk7CisgICAgc2V0VmFsdWUoYm9keSwgIk1vbWVudHVtIiwgbW9tZW50dW0p
OworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAog
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQg
eCwgaW50IHksIGJvb2wgcGFnZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5IikpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3Vi
TWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0gYWRvcHRXSyhX
S0RvdWJsZUNyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0V0so
V0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gcGFnZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJQYWdlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcGFnZWRS
ZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHBhZ2VkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwYWdlZEtleS5nZXQoKSwgcGFnZWRS
ZWYuZ2V0KCkpOwotCisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkNvbnRpbnVvdXNN
b3VzZVNjcm9sbEJ5Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91Ymxl
Q3JlYXRlKHgpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdLRG91
YmxlQ3JlYXRlKHkpKS5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlBhZ2VkIiwgcGFnZWQp
OwogICAgIC8vIEZJWE1FOiBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIGFzeW5jaHJvbm91cywgYXMg
c2Nyb2xsaW5nIGlzIGludHJpbnNpY2FsbHkgYXN5bmNocm9ub3VzLgogICAgIC8vIFNlZSBhbHNv
OiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODI1Nj4uCi0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogSlNWYWx1ZVJl
ZiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250ZXh0Q2xpY2soKQogewotICAgIFdLQnVuZGxl
UGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
OworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogI2lmIEVOQUJMRShDT05URVhUX01FTlVT
KQotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1
bmRsZVBhZ2VDb3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikp
OwotICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0
LCAwLCAwLCAwKTsKKyAgICBhdXRvIG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VD
b3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikpOworICAgIGF1
dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAo
IW1lbnVFbnRyaWVzKQotICAgICAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgICAgIHJldHVy
biBhcnJheTsKIAotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIGFycmF5UmVzdWx0LCAwKTsKICAgICBzaXplX3QgZW50cmllc1NpemUgPSBXS0FycmF5
R2V0U2l6ZShtZW51RW50cmllcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
bnRyaWVzU2l6ZTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0
SXRlbUF0SW5kZXgobWVudUVudHJpZXMuZ2V0KCksIGkpKSA9PSBXS0NvbnRleHRNZW51SXRlbUdl
dFR5cGVJRCgpKTsKIAogICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJlZiBpdGVtID0gc3RhdGlj
X2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChtZW51RW50
cmllcy5nZXQoKSwgaSkpOwogICAgICAgICBNZW51SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0
YSA9IG5ldyBNZW51SXRlbVByaXZhdGVEYXRhKHBhZ2UsIGl0ZW0pOwotICAgICAgICBKU09iamVj
dFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwgaSwgSlNPYmplY3RNYWtlKGNv
bnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAwKTsKKyAgICAgICAgSlNP
YmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXksIGksIEpTT2JqZWN0TWFrZShj
b250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCksIHByaXZhdGVEYXRhKSwgMCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgIHJldHVybiBhcnJheTsKICNlbHNlCiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogI2VuZGlmCkBAIC02MTUsMjEgKzQ2
MCwxNCBAQCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKiB0b01vbml0b3JXaGVlbEV2ZW50c09w
dGlvbnMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVgogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0
KGNvbnRleHQsIGFyZ3VtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRv
IHJlc2V0TGF0Y2hpbmdTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygicmVzZXRMYXRjaGluZyIpKTsKLSAgICBhdXRvIHJlc2V0TGF0Y2hpbmdWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50
LCBudWxscHRyKSwgcmVzZXRMYXRjaGluZ1N0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAgICBi
b29sIHJlc2V0TGF0Y2hpbmcgPSB0cnVlOwotICAgIGlmIChyZXNldExhdGNoaW5nVmFsdWUgJiYg
SlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5nVmFsdWUpKQotICAgICAgICBy
ZXNldExhdGNoaW5nID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCByZXNldExhdGNoaW5nVmFs
dWUpOwotCiAgICAgc3RhdGljIE1vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMgb3B0aW9uczsKLSAg
ICBvcHRpb25zLnJlc2V0TGF0Y2hpbmcgPSByZXNldExhdGNoaW5nOworICAgIG9wdGlvbnMucmVz
ZXRMYXRjaGluZyA9IGJvb2xlYW5Qcm9wZXJ0eShjb250ZXh0LCAoSlNPYmplY3RSZWYpYXJndW1l
bnQsICJyZXNldExhdGNoaW5nIiwgdHJ1ZSk7CiAgICAgcmV0dXJuICZvcHRpb25zOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vbml0b3JXaGVlbEV2ZW50cyhNb25pdG9yV2hl
ZWxFdmVudHNPcHRpb25zKiBvcHRpb25zKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFn
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICAKICAg
ICBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgPSBmYWxzZTsKICAgICBtX3NlbnRXaGVlbE1v
bWVudHVtUGhhc2VFbmQgPSBmYWxzZTsKQEAgLTY2Myw3ICs1MDEsNyBAQCB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OmNhbGxBZnRlclNjcm9sbGluZ0NvbXBsZXRlcyhKU1ZhbHVlUmVmIGZ1
bmN0aW9uQ2FsbAogICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
V0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgCkBAIC02
ODMsMTk5ICs1MjEsMTAyIEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FsbEFmdGVy
U2Nyb2xsaW5nQ29tcGxldGVzKEpTVmFsdWVSZWYgZnVuY3Rpb25DYWxsCiB9CiAKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmFkZFRvdWNo
UG9pbnQoaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRUb3VjaFBvaW50IikpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5n
ZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJBZGRU
b3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oeCkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHkp
KTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5Lmdl
dCgpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp1cGRhdGVUb3VjaFBvaW50
KGludCBpbmRleCwgaW50IHgsIGludCB5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdl
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVcGRhdGVUb3VjaFBvaW50IikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSW5kZXgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGluZGV4UmVmID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXkuZ2V0KCksIGluZGV4UmVmLmdl
dCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2
NFJlZj4geFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IHlSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYu
Z2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiVXBkYXRlVG91Y2hQb2ludCIpOworICAgIHNl
dFZhbHVlKGJvZHksICJJbmRleCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbmRleCkpOworICAg
IHNldFZhbHVlKGJvZHksICJYIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHgpKTsKKyAgICBzZXRW
YWx1ZShib2R5LCAiWSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih5KSk7CisgICAgcG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keS5nZXQoKSk7CiB9CiAKLXZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihjb25zdCBKU1N0cmluZ1Jl
ZiAmbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQordm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpz
ZXRUb3VjaE1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0VG91Y2hNb2RpZmllciIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdl
dCgpKTsKLQotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kID0gMDsKLSAgICBpZiAoSlNTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImN0cmwiKSkKLSAgICAgICAgbW9kID0ga1dL
RXZlbnRNb2RpZmllcnNDb250cm9sS2V5OwotICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1vZGlmaWVyLCAic2hpZnQiKSkKLSAgICAgICAgbW9kID0ga1dLRXZlbnRNb2RpZmll
cnNTaGlmdEtleTsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmll
ciwgImFsdCIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlmaWVyc0FsdEtleTsKLSAgICBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgIm1ldGEiKSkKLSAgICAg
ICAgbW9kID0ga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5OwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1vZGlmaWVyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiTW9kaWZpZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1vZGlmaWVy
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2QpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyS2V5LmdldCgpLCBtb2Rp
ZmllclJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRW5hYmxlIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBlbmFibGVSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGVuYWJsZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgZW5hYmxlS2V5LmdldCgpLCBlbmFibGVSZWYuZ2V0KCkpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1
Yk1lc3NhZ2UiLCAiU2V0VG91Y2hNb2RpZmllciIpOworICAgIHNldFZhbHVlKGJvZHksICJNb2Rp
ZmllciIsIHBhcnNlVG91Y2hNb2RpZmllcihtb2RpZmllcikpOworICAgIHNldFZhbHVlKGJvZHks
ICJFbmFibGUiLCBlbmFibGUpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCi0KIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
dWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFRvdWNoUG9pbnRSYWRpdXMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5n
ZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1giKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHJhZGl1c1gpKTsKLSAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXku
Z2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNZIikpOwotICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShy
YWRpdXNZKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlNl
dFRvdWNoUG9pbnRSYWRpdXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUmFkaXVzWCIsIHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihyYWRpdXNYKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlJhZGl1c1ki
LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmFkaXVzWSkpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OnRvdWNoU3RhcnQoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNz
YWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2Fn
ZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaFN0YXJ0IikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2Fn
ZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJs
ZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAi
VG91Y2hTdGFydCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRl
ciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNo
TW92ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRl
ciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlRvdWNoTW92ZSIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VO
YW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7
CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwor
ICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlRvdWNoTW92ZSIpOworICAgIHBvc3RT
eW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoRW5kKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hFbmQiKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBz
dWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVz
c2FnZSIsICJUb3VjaEVuZCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVu
dFNlbmRlciIsIGJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OnRvdWNoQ2FuY2VsKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2
ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hDYW5jZWwiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBz
dWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJUb3VjaENhbmNlbCIp
OworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0
KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNsZWFyVG91Y2hQb2ludHMo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDbGVhclRvdWNoUG9pbnRzIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2Fn
ZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAw
KTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiQ2xlYXJUb3VjaFBvaW50cyIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkuZ2V0KCkp
OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnJlbGVhc2VUb3VjaFBvaW50KGlu
dCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2Vu
ZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUmVsZWFzZVRvdWNoUG9pbnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBz
dWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5k
ZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5kZXhSZWYgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwgaW5kZXhSZWYuZ2V0KCkpOwotCi0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1
Yk1lc3NhZ2UiLCAiUmVsZWFzZVRvdWNoUG9pbnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiSW5k
ZXgiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXgpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5LmdldCgpKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FuY2Vs
VG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiBpbmRleFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGluZGV4S2V5
LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJDYW5jZWxUb3Vj
aFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIkluZGV4Iiwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGluZGV4KSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgYm9keS5nZXQoKSk7CiB9CisKICNlbmRpZgogCiAvLyBPYmplY3QgQ3JlYXRpb24KIAotdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3ZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRS
ZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJl
dmVudFNlbmRlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgImV2ZW50U2VuZGVyIiwgdGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRleCA5YTJhZmQ5NThjY2Q3MGVj
ZDIxZWM0ZTNiM2ZlYzRjZjdjYzg1YmE4Li5lYTQzN2ZiZGJlMGMzNDg5MDU3ZTMxNjA3NWFkZWE2
NTNhZGI1MTBkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaApAQCAtMzAsMjcgKzMwLDIz
IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLR2VvbWV0cnkuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+
CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwor
dHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVmOwordHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAK
IHN0cnVjdCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zIHsKLSAgICBNb25pdG9yV2hlZWxFdmVu
dHNPcHRpb25zKGJvb2wgcmVzZXRMYXRjaGluZyA9IHRydWUpCi0gICAgICAgIDogcmVzZXRMYXRj
aGluZyhyZXNldExhdGNoaW5nKQotICAgIHsgfQotCiAgICAgYm9vbCByZXNldExhdGNoaW5nIHsg
dHJ1ZSB9OwogfTsKIAogTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9ucyogdG9Nb25pdG9yV2hlZWxF
dmVudHNPcHRpb25zKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAKLWNsYXNzIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgeworY2xhc3MgRXZlbnRTZW5kaW5n
Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5F
dmVudFNlbmRpbmdDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CiAKLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVy
Q2xhc3MoKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAg
IHZvaWQgbW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSk7CiAg
ICAgdm9pZCBtb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSk7CkBA
IC03Myw3ICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGtleURvd24oSlNTdHJpbmdSZWYga2V5
LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2NhdGlvbik7CiAgICAgdm9pZCBzY2hl
ZHVsZUFzeW5jaHJvbm91c0tleURvd24oSlNTdHJpbmdSZWYga2V5KTsKIAotICAgIC8vIFpvb20g
ZnVuY3Rpb25zLgogICAgIHZvaWQgdGV4dFpvb21JbigpOwogICAgIHZvaWQgdGV4dFpvb21PdXQo
KTsKICAgICB2b2lkIHpvb21QYWdlSW4oKTsKQEAgLTgxLDEwICs3Niw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNjYWxlUGFnZUJ5KGRvdWJsZSBzY2FsZSwgZG91YmxlIHgsIGRvdWJsZSB5KTsKIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgLy8gVG91Y2ggZXZlbnRzLgogICAgIHZvaWQg
YWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpOwogICAgIHZvaWQgdXBkYXRlVG91Y2hQb2ludChp
bnQgaW5kZXgsIGludCB4LCBpbnQgeSk7Ci0gICAgdm9pZCBzZXRUb3VjaE1vZGlmaWVyKGNvbnN0
IEpTU3RyaW5nUmVmICZtb2RpZmllciwgYm9vbCBlbmFibGUpOworICAgIHZvaWQgc2V0VG91Y2hN
b2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllciwgYm9vbCBlbmFibGUpOwogICAgIHZvaWQgc2V0
VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOwogICAgIHZvaWQgdG91
Y2hTdGFydCgpOwogICAgIHZvaWQgdG91Y2hNb3ZlKCk7CkBAIC05Niw3ICs5MCwxMCBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyKCk7Cisg
ICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlcigpID0gZGVmYXVsdDsKKworICAgIEpTQ2xhc3NSZWYg
d3JhcHBlckNsYXNzKCkgZmluYWw7CisKICAgICBXS1BvaW50IG1fcG9zaXRpb247CiAgICAgYm9v
bCBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zZW50
V2hlZWxNb21lbnR1bVBoYXNlRW5kIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcAppbmRleCA5MzU4ZjRh
MGRlNWIzZDliYzMxNmI1ZTBhZGZkMDQxMjY2NDI1OGZmLi5kYjQyNWU3NWU4MGIwNTQwOGJkZjNl
M2UzNjQ3NjUxMDk2MzBkM2ZkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0zNywxNCArMzcsNiBAQCBSZWY8
R0NDb250cm9sbGVyPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgR0NDb250cm9sbGVyKTsKIH0KIAotR0NDb250cm9sbGVyOjpHQ0NvbnRyb2xsZXIoKQot
ewotfQotCi1HQ0NvbnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIoKQotewotfQotCiBKU0NsYXNzUmVm
IEdDQ29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKIHsKICAgICByZXR1cm4gSlNHQ0NvbnRyb2xs
ZXI6OmdDQ29udHJvbGxlckNsYXNzKCk7CkBAIC02NSwxMSArNTcsOSBAQCBzaXplX3QgR0NDb250
cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkKICAgICByZXR1cm4gV0tCdW5kbGVHZXRKYXZhU2Ny
aXB0T2JqZWN0c0NvdW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSk7CiB9
CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09i
amVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dP
YmplY3QsICJHQ0NvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIHNldEds
b2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJHQ0NvbnRyb2xsZXIiLCB0aGlzKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaAppbmRleCBkMzQ5YzFjZTk5MGU4N2Q3ZGYyZmNiOGM4
Mjg4NWJjYTMwNTcyYTBiLi4zNGFiMjQyNTEzOGMxZDc1ZmIyNGEyNTEwNzQzNjc4ZDgxOWVkYzIy
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29u
dHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0ND
b250cm9sbGVyLmgKQEAgLTI2LDI2ICsyNiwyNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJKU1dyYXBwYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4
dFJlZjsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIEdDQ29udHJvbGxlciA6IHB1YmxpYyBK
U1dyYXBwYWJsZSB7CitjbGFzcyBHQ0NvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgSlNXcmFwcGFi
bGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R0NDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAg
ICB2aXJ0dWFsIH5HQ0NvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKIAotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBw
ZXJDbGFzcygpOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAg
ICAgdm9pZCBjb2xsZWN0KCk7CiAgICAgdm9pZCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9v
bCB3YWl0VW50aWxEb25lKTsKICAgICBzaXplX3QgZ2V0SlNPYmplY3RDb3VudCgpOwogCiBwcml2
YXRlOgotICAgIEdDQ29udHJvbGxlcigpOworICAgIEdDQ29udHJvbGxlcigpID0gZGVmYXVsdDsK
KworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggN2FlODFiYjRiNTkwOTZjNThjOGI1YTE0Yzg4
YzRjMzNmOGMxNDU3MS4uYmQxM2ExY2QyMmJhZTJhN2M1YzA5ZGRjNmExMzdhOTdmNzFhNTY5MyAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHAKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJJbmplY3RlZEJ1
bmRsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgorI2luY2x1ZGUgIkRpY3Rpb25h
cnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKLSNpbmNsdWRl
ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVu
ZGxlLmg+CkBAIC0xMTgsMTggKzExOCwxMyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRDcmVh
dGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIGlmICghaXNNYWluUGFnZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluaXRpYWxpemF0aW9uIikp
OwogICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOwogICAgIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKG1f
YnVuZGxlLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXN1bHQpOworICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShtX2J1bmRsZSwgdG9XSygiSW5pdGlhbGl6YXRpb24i
KS5nZXQoKSwgbnVsbHB0ciwgJnJlc3VsdCk7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECi0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJlc3VsdCkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gaW5pdGlhbGl6
YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KHJl
c3VsdCkpOworICAgIGF1dG8gaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5ID0gYWRvcHRXSyhkaWN0
aW9uYXJ5VmFsdWUocmVzdWx0KSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVz
dW1lVGVzdGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJl
c3VtZVRlc3RpbmciKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VtZVRlc3RpbmdWYWx1ZSA9IFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkoaW5pdGlhbGl6YXRpb25EaWN0aW9uYXJ5LmdldCgpLCByZXN1
bWVUZXN0aW5nS2V5LmdldCgpKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmVzdW1lVGVzdGlu
Z1ZhbHVlKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgaWYgKFdLQm9vbGVhbkdldFZh
bHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdW1lVGVzdGluZ1ZhbHVlKSkpCisgICAg
aWYgKGJvb2xlYW5WYWx1ZShpbml0aWFsaXphdGlvbkRpY3Rpb25hcnkuZ2V0KCksICJSZXN1bWVU
ZXN0aW5nIikpCiAgICAgICAgIGJlZ2luVGVzdGluZyhpbml0aWFsaXphdGlvbkRpY3Rpb25hcnku
Z2V0KCksIEJlZ2luZ1Rlc3RpbmdNb2RlOjpSZXN1bWUpOwogfQogCkBAIC0xNzksMTYgKzE3NCwx
NCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldExvY2FsU2V0dGluZ3MoKQogICAgIHNldGxv
Y2FsZShMQ19BTEwsICIiKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKK3Zv
aWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKFdLU3RyaW5nUmVmLCBXS1R5cGVS
ZWYpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFcnJvciIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShtX2J1bmRsZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgdG9XSygiRXJyb3IiKS5nZXQo
KSwgdG9XSygiVW5rbm93biIpLmdldCgpKTsKIH0KIAogc3RhdGljIHZvaWQgcG9zdEdDVGFzayh2
b2lkKiBjb250ZXh0KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gcmVpbnRlcnByZXRf
Y2FzdDxXS0J1bmRsZVBhZ2VSZWY+KGNvbnRleHQpOworICAgIGF1dG8gcGFnZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8V0tCdW5kbGVQYWdlUmVmPihjb250ZXh0KTsKICAgICBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucmVwb3J0TGl2ZURvY3VtZW50cyhwYWdlKTsKICAgICBXS1JlbGVhc2UocGFn
ZSk7CiB9CkBAIC0xOTksNjcgKzE5Miw0NCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXBvcnRM
aXZlRG9jdW1lbnRzKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIFdLQnVuZGxlUmVsZWFzZU1l
bW9yeShtX2J1bmRsZSk7CiAKICAgICBjb25zdCBib29sIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VH
cm91cCA9IHRydWU7Ci0gICAgYXV0byBkb2N1bWVudFVSTHMgPSBhZG9wdFdLKFdLQnVuZGxlR2V0
TGl2ZURvY3VtZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJ
blBhZ2VHcm91cCkpOwotICAgIGF1dG8gYWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMaXZlRG9jdW1lbnRzIikpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RNZXNzYWdlKHBhZ2UsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBkb2N1bWVudFVSTHMuZ2V0
KCkpOworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UsIHRvV0soIkxpdmVEb2N1bWVu
dHMiKS5nZXQoKSwgYWRvcHRXSyhXS0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5kbGUs
IG1fcGFnZUdyb3VwLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXApKS5nZXQoKSk7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5
KQogewogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
QmVnaW5UZXN0IikpIHsKICAgICAgICAgQVNTRVJUKG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gZHVtcFBpeGVsc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkR1bXBQaXhlbHMiKSk7Ci0gICAgICAgIG1fZHVtcFBpeGVscyA9IFdLQm9v
bGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGR1bXBQaXhlbHNLZXkuZ2V0KCkpKSk7Ci0K
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVvdXRLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lb3V0IikpOwotICAgICAgICBtX3RpbWVv
dXQgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCB0aW1lb3V0S2V5LmdldCgpKSkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikpOwotICAgICAg
ICBtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycktleS5nZXQoKSkpKTsKLQotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2siKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBhY2tNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkJlZ2luVGVzdCIpKTsKLSAgICAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
cGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGFja01lc3NhZ2VCb2R5LmdldCgpKTsKLQorICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIG1fZHVtcFBpeGVscyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJEdW1wUGl4ZWxzIik7CisgICAgICAgIG1fdGltZW91dCA9IFNlY29uZHM6OmZy
b21NaWxsaXNlY29uZHMoV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
dmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVGltZW91dCIpKSkpOworICAgICAgICBtX2R1
bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiKTsKKyAgICAgICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSwgdG9XSygiQWNrIikuZ2V0KCksIHRvV0soIkJlZ2luVGVzdCIpLmdldCgp
KTsKICAgICAgICAgYmVnaW5UZXN0aW5nKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgQmVnaW5nVGVz
dGluZ01vZGU6Ok5ldyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlc2V0IikpIHsKICAgICAgICAg
QVNTRVJUKG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJl
ZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGpzY09wdGlvbnNL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJKU0NPcHRpb25zIikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ganNjT3B0aW9uc1N0cmluZyA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwganNjT3B0aW9uc0tleS5nZXQoKSkpOworICAgICAgICBhdXRvIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAg
IGF1dG8ganNjT3B0aW9uc1N0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPih2YWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJKU0NPcHRpb25zIikpOwogICAgICAgICBpZiAoanNjT3B0
aW9uc1N0cmluZykgewogICAgICAgICAgICAgU3RyaW5nIG9wdGlvbnMgPSB0b1dURlN0cmluZyhq
c2NPcHRpb25zU3RyaW5nKTsKICAgICAgICAgICAgIEpTQzo6T3B0aW9uczo6c2V0T3B0aW9ucyhv
cHRpb25zLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHNob3VsZEdDS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2hvdWxkR0MiKSk7Ci0gICAgICAgIGJvb2wgc2hvdWxkR0MgPSBXS0Jvb2xlYW5H
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzaG91bGRHQ0tleS5nZXQoKSkpKTsKKyAgICAgICAg
Ym9vbCBzaG91bGRHQyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTaG91
bGRHQyIpOwogICAgICAgICBpZiAoc2hvdWxkR0MpCiAgICAgICAgICAgICBXS0J1bmRsZUdhcmJh
Z2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMobV9idW5kbGUpOwogCiAjaWYgRU5BQkxFKEFDQ0VT
U0lCSUxJVFlfSVNPTEFURURfVFJFRSkKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGF4SXNvbGF0ZWRNb2RlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIpKTsKLSAgICAgICAgbV9hY2Nlc3NpYmlsaXR5
SXNvbGF0ZWRUcmVlTW9kZSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGF4
SXNvbGF0ZWRNb2RlS2V5LmdldCgpKSkpOworICAgICAgICBtX2FjY2Vzc2liaWxpdHlJc29sYXRl
ZFRyZWVNb2RlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkFjY2Vzc2li
aWxpdHlJc29sYXRlZFRyZWUiKTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGFsbG93ZWRIb3N0c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkFsbG93ZWRIb3N0cyIpKTsKLSAgICAgICAgV0tUeXBlUmVmIGFsbG93
ZWRIb3N0c1ZhbHVlID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGFsbG93ZWRIb3N0c0tleS5nZXQoKSk7CisgICAgICAgIGF1dG8gYWxsb3dlZEhvc3Rz
VmFsdWUgPSB2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJBbGxvd2VkSG9zdHMiKTsKICAg
ICAgICAgaWYgKGFsbG93ZWRIb3N0c1ZhbHVlICYmIFdLR2V0VHlwZUlEKGFsbG93ZWRIb3N0c1Zh
bHVlKSA9PSBXS0FycmF5R2V0VHlwZUlEKCkpIHsKICAgICAgICAgICAgIG1fYWxsb3dlZEhvc3Rz
LmNsZWFyKCk7Ci0KLSAgICAgICAgICAgIFdLQXJyYXlSZWYgYWxsb3dlZEhvc3RzQXJyYXkgPSBz
dGF0aWNfY2FzdDxXS0FycmF5UmVmPihhbGxvd2VkSG9zdHNWYWx1ZSk7Ci0gICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGFsbG93ZWRIb3N0c0FycmF5
KTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tB
cnJheUdldEl0ZW1BdEluZGV4KGFsbG93ZWRIb3N0c0FycmF5LCBpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKQot
ICAgICAgICAgICAgICAgICAgICBtX2FsbG93ZWRIb3N0cy5hcHBlbmQodG9XVEZTdHJpbmcoc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBhdXRvIGFycmF5ID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4oYWxsb3dlZEhvc3RzVmFsdWUp
OworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBXS0FycmF5R2V0U2l6ZShh
cnJheSk7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAgICAgbV9hbGxvd2VkSG9zdHMuYXBw
ZW5kKHRvV1RGU3RyaW5nKFdLQXJyYXlHZXRJdGVtQXRJbmRleChhcnJheSwgaSkpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIG1fc3RhdGUgPSBJZGxlOwpAQCAtMjc1LDkgKzI0NSw3IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBw
YWdlLCBXS1N0cmluZ1JlZiBtCiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIkdldExpdmVEb2N1bWVudHMiKSkgewogICAgICAgICBjb25zdCBib29s
IGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCA9IGZhbHNlOwotICAgICAgICBhdXRvIGRvY3Vt
ZW50VVJMcyA9IGFkb3B0V0soV0tCdW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBt
X3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwKSk7Ci0gICAgICAgIGF1dG8g
YWNrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJM
aXZlRG9jdW1lbnRzIikpOwotICAgICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBh
Y2tNZXNzYWdlTmFtZS5nZXQoKSwgZG9jdW1lbnRVUkxzLmdldCgpKTsKKyAgICAgICAgcG9zdFBh
Z2VNZXNzYWdlKCJMaXZlRG9jdW1lbnRzIiwgYWRvcHRXSyhXS0J1bmRsZUdldExpdmVEb2N1bWVu
dFVSTHMobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXAp
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQyOCw3ICszOTYsNyBAQCB2b2lkIElu
amVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSwgV0tTdHJpbmdSZWYgbQogICAgICAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5zOwogICAgICAg
ICBkb21haW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9
IFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5zQXJyYXksIGkpOworICAgICAgICAgICAgYXV0
byBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CiAgICAgICAg
ICAgICBpZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBXS1N0cmluZ0dldFR5cGVJRCgp
KQogICAgICAgICAgICAgICAgIGRvbWFpbnMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihpdGVtKSkpOwogICAgICAgICB9CkBAIC00NDYsNyArNDE0LDcgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICAgICAgVmVjdG9yPFN0cmluZz4gZG9tYWluczsKICAg
ICAgICAgZG9tYWlucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgV0tUeXBlUmVmIGl0
ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKKyAgICAgICAgICAg
IGF1dG8gaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5zQXJyYXksIGkpOwogICAg
ICAgICAgICAgaWYgKGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRlbSkgPT0gV0tTdHJpbmdHZXRUeXBl
SUQoKSkKICAgICAgICAgICAgICAgICBkb21haW5zLnVuY2hlY2tlZEFwcGVuZCh0b1dURlN0cmlu
ZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKICAgICAgICAgfQpAQCAtNDY3LDE3
ICs0MzUsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2Uo
V0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0KICAgICB9CiAKICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNhbGxVSVNpZGVTY3JpcHRD
YWxsYmFjayIpKSB7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVzdWx0IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0KLSAgICAgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9ICh1
bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgY2FsbGJhY2tJREtleS5n
ZXQoKSkpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiByZXN1bHRTdHJpbmcgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHJlc3VsdEtleS5nZXQoKSkpOwotICAgICAgICBhdXRvIHJlc3VsdEpTU3RyaW5nID0g
dG9KUyhyZXN1bHRTdHJpbmcpOwotCi0gICAgICAgIG1fdGVzdFJ1bm5lci0+cnVuVUlTY3JpcHRD
YWxsYmFjayhjYWxsYmFja0lELCByZXN1bHRKU1N0cmluZy5nZXQoKSk7CisgICAgICAgIGF1dG8g
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byBjYWxsYmFja0lEID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiQ2FsbGJhY2tJRCIpOworICAgICAgICBhdXRvIHJlc3VsdFN0cmluZyA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlJlc3VsdCIpOworICAgICAgICBtX3Rlc3RSdW5uZXIt
PnJ1blVJU2NyaXB0Q2FsbGJhY2soY2FsbGJhY2tJRCwgdG9KUyhyZXN1bHRTdHJpbmcpLmdldCgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDk4LDI5ICs0NTksMTcgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLU3RyaW5nUmVmIG0KICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlGaW5p
c2hlZCIpKSB7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOdW1iZXJPZlByZXZhbGVudFJl
c291cmNlcyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG51bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIk51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJ
bnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRl
cmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcFBy
ZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlv
biIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lZGlhbkRheXNTaW5jZVVz
ZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbktleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1lZGlhbkRheXNTaW5jZVVzZXJJ
bnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNl
c1dpdGhVSUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcDNO
dW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSSIp
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcDNNZWRpYW5TdWJSZXNvdXJj
ZVdpdGhvdXRVSUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRv
cDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUlLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3AzTWVkaWFuVW5pcXVlUmVkaXJlY3Rz
V2l0aG91dFVJIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wM01lZGlh
bkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkiKSk7
Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlcyA9
ICh1bnNpZ25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXNLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9ICh1bnNpZ25lZClXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24gPSAodW5zaWduZWQpV0tVSW50NjRH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9wUHJldmFs
ZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uID0g
KHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BQcmV2YWxlbnRS
ZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25LZXkuZ2V0
KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblBy
ZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiA9ICh1bnNpZ25lZClXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJl
dmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uS2V5LmdldCgpKSkpOwotICAgICAgICB1
bnNpZ25lZCB0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUkgPSAodW5zaWduZWQp
V0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNOdW1iZXJPZlByZXZhbGVudFJl
c291cmNlc1dpdGhVSUtleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgdG9wM01lZGlhblN1
YkZyYW1lV2l0aG91dFVJID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCB0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVu
c2lnbmVkIHRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSA9ICh1bnNpZ25lZClXS1VJbnQ2
NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJ
S2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3Rz
V2l0aG91dFVJID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50
NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0
b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJS2V5LmdldCgpKSkpOwotICAgICAgICB1
bnNpZ25lZCB0b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJID0gKHVuc2lnbmVk
KVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3AzTWVkaWFuRGF0YVJlY29yZHNS
ZW1vdmVkV2l0aG91dFVJS2V5LmdldCgpKSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gbnVt
YmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJOdW1iZXJPZlByZXZhbGVudFJlc291cmNlcyIpOworICAgICAgICBhdXRvIG51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9IHVpbnQ2NFZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIk51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRl
cmFjdGlvbiIpOworICAgICAgICBhdXRvIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbiA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk51
bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAg
ICBhdXRvIHRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVz
ZXJJbnRlcmFjdGlvbiA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcFBy
ZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlv
biIpOworICAgICAgICBhdXRvIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVu
dFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIk1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNl
V2l0aFVzZXJJbnRlcmFjdGlvbiIpOworICAgICAgICBhdXRvIHRvcDNOdW1iZXJPZlByZXZhbGVu
dFJlc291cmNlc1dpdGhVSSA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRv
cDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSIpOworICAgICAgICBhdXRvIHRvcDNN
ZWRpYW5TdWJGcmFtZVdpdGhvdXRVSSA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIlRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSSIpOworICAgICAgICBhdXRvIHRvcDNNZWRp
YW5TdWJSZXNvdXJjZVdpdGhvdXRVSSA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgIlRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSIpOworICAgICAgICBhdXRvIHRvcDNN
ZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUkgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJUb3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJIik7CisgICAgICAg
IGF1dG8gdG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSA9IHVpbnQ2NFZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRo
b3V0VUkiKTsKIAogICAgICAgICBtX3Rlc3RSdW5uZXItPnN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0
cnlDYWxsYmFjayhudW1iZXJPZlByZXZhbGVudFJlc291cmNlcywgbnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb24sIHRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFj
dGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiwgbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uLCB0b3AzTnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVUksIHRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSSwgdG9wM01l
ZGlhblN1YlJlc291cmNlV2l0aG91dFVJLCB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91
dFVJLCB0b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNTQxLDMxICs0OTAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZl
TWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFcnJvciIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNz
YWdlQm9keS5nZXQoKSk7Ci19Ci0KLWJvb2wgSW5qZWN0ZWRCdW5kbGU6OmJvb2xlYW5Gb3JLZXko
V0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKLXsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKGtleSkpOwotICAgIFdLVHlwZVJlZiB2YWx1ZSA9IFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkoZGljdGlvbmFyeSwgd2tLZXkuZ2V0KCkpOwotICAgIGlmIChXS0dldFR5cGVJRCh2
YWx1ZSkgIT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpIHsKLSAgICAgICAgb3V0cHV0VGV4dChtYWtl
U3RyaW5nKCJCb29sZWFuIHZhbHVlIGZvciBrZXkiLCBrZXksICIgbm90IGZvdW5kIGluIGRpY3Rp
b25hcnlcbiIpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gV0tC
b29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPih2YWx1ZSkpOwotfQotCi1T
dHJpbmcgSW5qZWN0ZWRCdW5kbGU6OnN0cmluZ0ZvcktleShXS0RpY3Rpb25hcnlSZWYgZGljdGlv
bmFyeSwgY29uc3QgY2hhcioga2V5KQotewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3
a0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoa2V5KSk7Ci0gICAg
V0tTdHJpbmdSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShkaWN0aW9uYXJ5LCB3a0tleS5nZXQoKSkpOwotICAgIGlmICghdmFsdWUp
IHsKLSAgICAgICAgb3V0cHV0VGV4dChtYWtlU3RyaW5nKCJTdHJpbmcgdmFsdWUgZm9yIGtleSIs
IGtleSwgIiBub3QgZm91bmQgaW4gZGljdGlvbmFyeVxuIikpOwotICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvV1RGU3RyaW5nKHZhbHVlKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIkVycm9yIiwgIlVua25vd24iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6YmVnaW5UZXN0aW5nKFdLRGljdGlvbmFyeVJlZiBzZXR0aW5ncywgQmVnaW5nVGVzdGlu
Z01vZGUgdGVzdGluZ01vZGUpCkBAIC01OTgsMTEgKzUyMywxMSBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlOjpiZWdpblRlc3RpbmcoV0tEaWN0aW9uYXJ5UmVmIHNldHRpbmdzLCBCZWdpbmdUZXN0aW5n
TW9kZSB0ZQogICAgIFdLQnVuZGxlU2V0QWxsb3dTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxTKG1f
YnVuZGxlLCBtX3BhZ2VHcm91cCwgZmFsc2UpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICBXS0J1bmRsZVBhZ2VTZXRVc2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKHBhZ2Uo
KS0+cGFnZSgpLCAhYm9vbGVhbkZvcktleShzZXR0aW5ncywgIlVzZUZsZXhpYmxlVmlld3BvcnQi
KSk7CisgICAgV0tCdW5kbGVQYWdlU2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmlndXJhdGlvbihw
YWdlKCktPnBhZ2UoKSwgIWJvb2xlYW5WYWx1ZShzZXR0aW5ncywgIlVzZUZsZXhpYmxlVmlld3Bv
cnQiKSk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFdlYkNvcmVUZXN0U3Vw
cG9ydDo6c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKHN0cmluZ0Zv
cktleShzZXR0aW5ncywgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIikpOworICAgIFdl
YkNvcmVUZXN0U3VwcG9ydDo6c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0
aW5nKHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKHNldHRpbmdzLCAiYWRkaXRpb25hbFN1cHBvcnRl
ZEltYWdlVHlwZXMiKSkpOwogI2VuZGlmCiAKICAgICBtX3Rlc3RSdW5uZXItPnNldFBsdWdpbnNF
bmFibGVkKHRydWUpOwpAQCAtNjYwLDI1ICs1ODUsMTUgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6
ZG9uZSgpCiAgICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+cmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZSgpOwogI2VuZGlmCiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZG9uZU1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRG9uZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBkb25lTWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gcGl4ZWxSZXN1bHRJc1BlbmRpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaXhlbFJlc3VsdElzUGVuZGluZyIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBpeGVsUmVzdWx0SXNQZW5kaW5nID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUobV9waXhlbFJlc3VsdElzUGVuZGluZykpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCBwaXhlbFJlc3VsdElzUGVuZGluZ0tleS5nZXQo
KSwgcGl4ZWxSZXN1bHRJc1BlbmRpbmcuZ2V0KCkpOwotCi0gICAgaWYgKCFtX3BpeGVsUmVzdWx0
SXNQZW5kaW5nKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3Vs
dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0
IikpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwg
cGl4ZWxSZXN1bHRLZXkuZ2V0KCksIG1fcGl4ZWxSZXN1bHQuZ2V0KCkpOwotICAgIH0KKyAgICBh
dXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CiAKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVwYWludFJlY3RzS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVwYWludFJlY3RzIikpOwotICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCByZXBhaW50UmVjdHNLZXkuZ2V0KCksIG1f
cmVwYWludFJlY3RzLmdldCgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUGl4ZWxSZXN1bHRJc1Bl
bmRpbmciLCBtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKTsKKyAgICBpZiAoIW1fcGl4ZWxSZXN1bHRJ
c1BlbmRpbmcpCisgICAgICAgIHNldFZhbHVlKGJvZHksICJQaXhlbFJlc3VsdCIsIG1fcGl4ZWxS
ZXN1bHQuZ2V0KCkpOworICAgIHNldFZhbHVlKGJvZHksICJSZXBhaW50UmVjdHMiLCBtX3JlcGFp
bnRSZWN0cy5nZXQoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIkF1ZGlvUmVzdWx0IiwgbV9hdWRp
b1Jlc3VsdC5nZXQoKSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9SZXN1
bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdWRpb1Jlc3Vs
dCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgYXVk
aW9SZXN1bHRLZXkuZ2V0KCksIG1fYXVkaW9SZXN1bHQuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNNb2RlKHBhZ2UoKS0+cGFnZSgp
LCBkb25lTWVzc2FnZU5hbWUuZ2V0KCksIGRvbmVNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNNb2RlKHBhZ2UoKS0+
cGFnZSgpLCB0b1dLKCJEb25lIikuZ2V0KCksIGJvZHkuZ2V0KCkpOwogCiAgICAgY2xvc2VPdGhl
clBhZ2VzKCk7CiAKQEAgLTY5MSw5ICs2MDYsOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpjbG9z
ZU90aGVyUGFnZXMoKQogICAgIHNpemVfdCBzaXplID0gbV9wYWdlcy5zaXplKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIHBhZ2VzVG9DbG9zZS5hcHBl
bmQobV9wYWdlc1tpXS0+cGFnZSgpKTsKLSAgICBzaXplID0gcGFnZXNUb0Nsb3NlLnNpemUoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgV0tCdW5kbGVQ
YWdlQ2xvc2UocGFnZXNUb0Nsb3NlW2ldKTsKKyAgICBmb3IgKGF1dG8mIHBhZ2UgOiBwYWdlc1Rv
Q2xvc2UpCisgICAgICAgIFdLQnVuZGxlUGFnZUNsb3NlKHBhZ2UpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlOjpkdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFBhZ2VzKFN0cmluZ0J1aWxkZXIm
IHN0cmluZ0J1aWxkZXIpCkBAIC03MDksMTMgKzYyMyw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6
OmR1bXBUb1N0ZEVycihjb25zdCBTdHJpbmcmIG91dHB1dCkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmIChvdXRwdXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRHVtcFRvU3RkRXJyIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlQm9keTsKLSAgICBpZiAoYXV0byB1dGY4ID0gb3V0cHV0LnRyeUdldFV0ZjgoKSkKLSAg
ICAgICAgbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHV0ZjgtPmRhdGEoKSkpOwotICAgIGVsc2UKLSAgICAgICAgbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJPdXQgb2YgbWVtb3J5XG4iKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgLy8gRklYTUU6IERvIHdlIHJlYWxseSBoYXZlIHRv
IGNvbnZlcnQgdG8gVVRGLTggaW5zdGVhZCBvZiB1c2luZyB0b1dLPworICAgIGF1dG8gc3RyaW5n
ID0gb3V0cHV0LnRyeUdldFV0ZjgoKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkR1bXBUb1N0ZEVy
ciIsIHN0cmluZyA/IHN0cmluZy0+ZGF0YSgpIDogIk91dCBvZiBtZW1vcnlcbiIpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlOjpvdXRwdXRUZXh0KGNvbnN0IFN0cmluZyYgb3V0cHV0KQpAQCAt
NzI0LDI4MCArNjM0LDE1NSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpvdXRwdXRUZXh0KGNvbnN0
IFN0cmluZyYgb3V0cHV0KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG91dHB1dC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXh0T3V0cHV0
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keTsKLSAgICBpZiAo
YXV0byB1dGY4ID0gb3V0cHV0LnRyeUdldFV0ZjgoKSkKLSAgICAgICAgbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHV0ZjgtPmRhdGEoKSkpOwotICAg
IGVsc2UKLSAgICAgICAgbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJPdXQgb2YgbWVtb3J5XG4iKSk7CisgICAgLy8gRklYTUU6IERvIHdlIHJlYWxs
eSBoYXZlIHRvIGNvbnZlcnQgdG8gVVRGLTggaW5zdGVhZCBvZiB1c2luZyB0b1dLPworICAgIGF1
dG8gc3RyaW5nID0gb3V0cHV0LnRyeUdldFV0ZjgoKTsKICAgICAvLyBXZSB1c2UgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNNb2RlKCkgaW5zdGVhZCBvZiBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZSgpIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCB0ZXh0IG91dHB1
dAogICAgIC8vIGlzIGRvbmUgdmlhIGFzeW5jaHJvbm91cyBJUEMsIGV2ZW4gaWYgdGhlIGNvbm5l
Y3Rpb24gaXMgaW4gZnVsbHkgc3luY2hyb25vdXMgbW9kZSBkdWUgdG8gYSBXS0J1bmRsZVBhZ2VQ
b3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZygpCiAgICAgLy8gY2FsbC4gT3RoZXJ3aXNl
LCBtZXNzYWdlcyBsb2dnZWQgdmlhIHN5bmMgYW5kIGFzeW5jIElQQyBtYXkgZW5kIHVwIG91dCBv
ZiBvcmRlciBhbmQgY2F1c2UgZmxha2luZXNzLgotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdl
SWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZUln
bm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCksIHRvV0soIlRleHRPdXRw
dXQiKS5nZXQoKSwgdG9XSyhzdHJpbmcgPyBzdHJpbmctPmRhdGEoKSA6ICJPdXQgb2YgbWVtb3J5
XG4iKS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3ROZXdCZWZvcmVVbmxv
YWRSZXR1cm5WYWx1ZShib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJl
Zm9yZVVubG9hZFJldHVyblZhbHVlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQmVmb3JlVW5sb2FkUmV0dXJu
VmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpLmdldCgpKTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6cG9zdEFkZENocm9tZUlucHV0RmllbGQoKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkFkZENocm9tZUlucHV0RmllbGQiKSk7Ci0gICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIkFkZENocm9tZUlucHV0RmllbGQiKTsKIH0KIAogdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6cG9zdFJlbW92ZUNocm9tZUlucHV0RmllbGQoKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlJlbW92ZUNocm9tZUlucHV0RmllbGQiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlJlbW92ZUNocm9tZUlucHV0RmllbGQiKTsKIH0KIAogdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6cG9zdEZvY3VzV2ViVmlldygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Rm9jdXNXZWJWaWV3IikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJGb2N1c1dl
YlZpZXciKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFNldEJhY2tpbmdTY2FsZUZh
Y3Rvcihkb3VibGUgYmFja2luZ1NjYWxlRmFjdG9yKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldEJhY2tpbmdTY2FsZUZhY3RvciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGJhY2tpbmdTY2FsZUZhY3Rv
cikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0
QmFja2luZ1NjYWxlRmFjdG9yIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShiYWNraW5nU2NhbGVG
YWN0b3IpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRXaW5kb3dJc0tleShi
b29sIGlzS2V5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFdpbmRvd0lzS2V5Iikp
OwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShpc0tleSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJTZXRXaW5kb3dJc0tleSIpLmdldCgpLCBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0tleSkpLmdldCgpLCAwKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6cG9zdFNldFZpZXdTaXplKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRWaWV3U2l6ZSIpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB3aWR0aEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIndpZHRoIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoZWln
aHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoZWlnaHQiKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLRG91YmxlUmVmPiB3aWR0aFdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh3aWR0aCkpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHdpZHRoS2V5LmdldCgp
LCB3aWR0aFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBoZWlnaHRX
SyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoaGVpZ2h0KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgaGVpZ2h0S2V5LmdldCgpLCBoZWlnaHRXSy5nZXQoKSk7
Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIndpZHRoIiwgd2lkdGgpOworICAgIHNldFZhbHVlKGJvZHksICJoZWln
aHQiLCBoZWlnaHQpOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJTZXRWaWV3U2l6ZSIpLmdldCgpLCBib2R5Lmdl
dCgpLCAwKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFNpbXVsYXRlV2ViTm90aWZp
Y2F0aW9uQ2xpY2sodWludDY0X3Qgbm90aWZpY2F0aW9uSUQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG5vdGlm
aWNhdGlvbklEKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShub3RpZmljYXRpb25JRCkpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFNldEFk
ZHNWaXNpdGVkTGlua3MoYm9vbCBhZGRzVmlzaXRlZExpbmtzKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldEFkZHNWaXNpdGVkTGlua3MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGFkZHNWaXNpdGVk
TGlua3MpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2Uo
IlNldEFkZHNWaXNpdGVkTGlua3MiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShhZGRzVmlzaXRl
ZExpbmtzKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24oYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0R2VvbG9jYXRpb25QZXJtaXNz
aW9uIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpKTsKIH0KIAotdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBk
b3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwg
ZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFs
dGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9v
bCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBk
b3VibGUgZmxvb3JMZXZlbCkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRl
QWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVl
ZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbGF0aXR1ZGVL
ZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxhdGl0dWRlIikp
OwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBsYXRpdHVkZVdLID0gYWRvcHRXSyhXS0Rv
dWJsZUNyZWF0ZShsYXRpdHVkZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJv
ZHkuZ2V0KCksIGxhdGl0dWRlS2V5V0suZ2V0KCksIGxhdGl0dWRlV0suZ2V0KCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvbmdpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibG9uZ2l0dWRlIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RG91YmxlUmVmPiBsb25naXR1ZGVXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUobG9uZ2l0dWRl
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgbG9uZ2l0dWRl
S2V5V0suZ2V0KCksIGxvbmdpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBhY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiYWNjdXJhY3kiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGFjY3VyYWN5
V0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGFjY3VyYWN5KSk7Ci0gICAgV0tEaWN0aW9uYXJ5
U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWNjdXJhY3lLZXlXSy5nZXQoKSwgYWNjdXJhY3lX
Sy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNBbHRpdHVk
ZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNB
bHRpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzQWx0aXR1
ZGVXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzQWx0aXR1ZGUpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwcm92aWRlc0FsdGl0dWRlS2V5
V0suZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gYWx0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImFsdGl0dWRlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBhbHRp
dHVkZVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShhbHRpdHVkZSkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFsdGl0dWRlS2V5V0suZ2V0KCksIGFsdGl0
dWRlV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygicHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5V0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1l
c3NhZ2VCb2R5LmdldCgpLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lLZXlXSy5nZXQoKSwgcHJv
dmlkZXNBbHRpdHVkZUFjY3VyYWN5V0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGFsdGl0dWRlQWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImFsdGl0dWRlQWNjdXJhY3kiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3Vi
bGVSZWY+IGFsdGl0dWRlQWNjdXJhY3lXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoYWx0aXR1
ZGVBY2N1cmFjeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCks
IGFsdGl0dWRlQWNjdXJhY3lLZXlXSy5nZXQoKSwgYWx0aXR1ZGVBY2N1cmFjeVdLLmdldCgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0hlYWRpbmdLZXlXSyA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzSGVhZGluZyIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzSGVhZGluZ1dLID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNIZWFkaW5nKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNIZWFkaW5nS2V5V0suZ2V0KCksIHByb3Zp
ZGVzSGVhZGluZ1dLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoZWFk
aW5nS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoZWFkaW5n
IikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBoZWFkaW5nV0sgPSBhZG9wdFdLKFdL
RG91YmxlQ3JlYXRlKGhlYWRpbmcpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VC
b2R5LmdldCgpLCBoZWFkaW5nS2V5V0suZ2V0KCksIGhlYWRpbmdXSy5nZXQoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNTcGVlZEtleVdLID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNTcGVlZCIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzU3BlZWRXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHByb3ZpZGVzU3BlZWQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5
LmdldCgpLCBwcm92aWRlc1NwZWVkS2V5V0suZ2V0KCksIHByb3ZpZGVzU3BlZWRXSy5nZXQoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3BlZWRLZXlXSyA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInNwZWVkIikpOwotICAgIFdLUmV0YWluUHRyPFdL
RG91YmxlUmVmPiBzcGVlZFdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzcGVlZCkpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHNwZWVkS2V5V0suZ2V0KCks
IHNwZWVkV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVz
Rmxvb3JMZXZlbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
cHJvdmlkZXNGbG9vckxldmVsIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcHJv
dmlkZXNGbG9vckxldmVsV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwcm92aWRlc0Zsb29y
TGV2ZWwpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwcm92
aWRlc0Zsb29yTGV2ZWxLZXlXSy5nZXQoKSwgcHJvdmlkZXNGbG9vckxldmVsV0suZ2V0KCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZsb29yTGV2ZWxLZXlXSyA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZsb29yTGV2ZWwiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEb3VibGVSZWY+IGZsb29yTGV2ZWxXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUo
Zmxvb3JMZXZlbCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCks
IGZsb29yTGV2ZWxLZXlXSy5nZXQoKSwgZmxvb3JMZXZlbFdLLmdldCgpKTsKLQotICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAibGF0aXR1ZGUiLCBsYXRpdHVkZSk7
CisgICAgc2V0VmFsdWUoYm9keSwgImxvbmdpdHVkZSIsIGxvbmdpdHVkZSk7CisgICAgc2V0VmFs
dWUoYm9keSwgImFjY3VyYWN5IiwgYWNjdXJhY3kpOworICAgIHNldFZhbHVlKGJvZHksICJhbHRp
dHVkZSIsIGFsdGl0dWRlKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiYWx0aXR1ZGVBY2N1cmFjeSIs
IGFsdGl0dWRlQWNjdXJhY3kpOworICAgIHNldFZhbHVlKGJvZHksICJoZWFkaW5nIiwgaGVhZGlu
Zyk7CisgICAgc2V0VmFsdWUoYm9keSwgInNwZWVkIiwgc3BlZWQpOworICAgIHNldFZhbHVlKGJv
ZHksICJmbG9vckxldmVsIiwgZmxvb3JMZXZlbCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIsIGJvZHkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYg
ZXJyb3JNZXNzYWdlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIGVycm9yTWVzc2FnZSk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxl
RXJyb3IiLCBlcnJvck1lc3NhZ2UpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlOjppc0dlb2xv
Y2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VsdFRvUGFz
cyA9IDA7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCAmcmVzdWx0VG9QYXNzKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlzQWN0aXZlID0gYWRvcHRXSyhzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KHJlc3VsdFRvUGFzcykpOwotCi0gICAgcmV0dXJuIFdLQm9vbGVhbkdl
dFZhbHVlKGlzQWN0aXZlLmdldCgpKTsKKyAgICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVsbHB0cjsK
KyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlKCkt
PnBhZ2UoKSwgdG9XSygiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIpLmdldCgpLCAwLCAmcmVz
dWx0KTsKKyAgICByZXR1cm4gYm9vbGVhblZhbHVlKGFkb3B0V0socmVzdWx0KS5nZXQoKSk7CiB9
CiAKIHVuc2lnbmVkIEluamVjdGVkQnVuZGxlOjppbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2Fy
ZCgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW1hZ2VDb3VudEluR2VuZXJh
bFBhc3RlYm9hcmQiKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VsdFRvUGFzcyA9IDA7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCAwLCAmcmVzdWx0VG9QYXNzKTsKLSAgICBXS1JldGFpblB0cjxX
S1VJbnQ2NFJlZj4gaW1hZ2VDb3VudCA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KHJlc3VsdFRvUGFzcykpOwotICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
V0tVSW50NjRHZXRWYWx1ZShpbWFnZUNvdW50LmdldCgpKSk7CisgICAgV0tUeXBlUmVmIHJlc3Vs
dCA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIkltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJk
IikuZ2V0KCksIDAsICZyZXN1bHQpOworICAgIHJldHVybiB1aW50NjRWYWx1ZShhZG9wdFdLKHJl
c3VsdCkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRVc2VyTWVkaWFQZXJt
aXNzaW9uKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0VXNlck1lZGlhUGVybWlzc2lvbiIpKTsK
LSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0VXNl
ck1lZGlhUGVybWlzc2lvbiIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKSk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvbigpCiB7Ci0g
ICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlJlc2V0VXNlck1lZGlhUGVybWlzc2lvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKGJvb2wgcGVy
bWlzc2lvbiwgV0tTdHJpbmdSZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pCiB7
Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luIikpOwotICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHBlcm1pc3Npb25LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoInBlcm1pc3Npb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBwZXJt
aXNzaW9uV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwZXJtaXNzaW9uKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGVybWlzc2lvbktleVdLLmdldCgp
LCBwZXJtaXNzaW9uV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9y
aWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2lu
IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIG9yaWdpbktl
eVdLLmdldCgpLCBvcmlnaW4pOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVu
dE9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFy
ZW50T3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCks
IHBhcmVudE9yaWdpbktleVdLLmdldCgpLCBwYXJlbnRPcmlnaW4pOwotCi0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJwZXJtaXNzaW9uIiwgcGVybWlzc2lvbik7
CisgICAgc2V0VmFsdWUoYm9keSwgIm9yaWdpbiIsIG9yaWdpbik7CisgICAgc2V0VmFsdWUoYm9k
eSwgInBhcmVudE9yaWdpbiIsIHBhcmVudE9yaWdpbik7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJT
ZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbiIsIGJvZHkpOwogfQogCiB1
bnNpZ25lZCBJbmplY3RlZEJ1bmRsZTo6dXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZv
ck9yaWdpbihXS1N0cmluZ1JlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbikgY29u
c3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dENvdW50Rm9yT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIG9yaWdpbktleVdLLmdldCgpLCBvcmlnaW4pOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktleVdLID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBhcmVudE9yaWdpbktleVdLLmdldCgp
LCBwYXJlbnRPcmlnaW4pOwotCi0gICAgV0tUeXBlUmVmIHJlc3VsdFRvUGFzcyA9IDA7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJlc3VsdFRvUGFzcyk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGNvdW50ID0gYWRvcHRXSyhzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4ocmVzdWx0VG9QYXNzKSk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoY291bnQuZ2V0KCkpKTsKKyAgICBhdXRvIGJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9k
eSwgIm9yaWdpbiIsIG9yaWdpbik7CisgICAgc2V0VmFsdWUoYm9keSwgInBhcmVudE9yaWdpbiIs
IHBhcmVudE9yaWdpbik7CisgICAgV0tUeXBlUmVmIHJlc3VsdCA9IG51bGxwdHI7CisgICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCks
IHRvV0soIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4iKS5nZXQoKSwg
Ym9keS5nZXQoKSwgJnJlc3VsdCk7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKGFkb3B0V0socmVz
dWx0KS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlc2V0VXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihXS1N0cmluZ1JlZiBvcmlnaW4sIFdLU3RyaW5n
UmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXNldFVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2lu
S2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgb3JpZ2luS2V5V0su
Z2V0KCksIG9yaWdpbik7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3Jp
Z2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwYXJlbnRP
cmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGFy
ZW50T3JpZ2luS2V5V0suZ2V0KCksIHBhcmVudE9yaWdpbik7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIm9yaWdpbiIsIG9yaWdpbik7CisgICAgc2V0VmFs
dWUoYm9keSwgInBhcmVudE9yaWdpbiIsIHBhcmVudE9yaWdpbik7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4iLCBib2R5
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoYm9v
bCBlbmFibGVkLCBib29sIHBlcm1pc3NpdmUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVE
aWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNy
ZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbmFibGVkS2V5V0sgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJlbmFibGVkIikpOwotICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZW5hYmxlZFdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoZW5hYmxlZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCks
IGVuYWJsZWRLZXlXSy5nZXQoKSwgZW5hYmxlZFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBwZXJtaXNzaXZlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJwZXJtaXNzaXZlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gcGVybWlzc2l2ZVdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocGVybWlzc2l2ZSkpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBlcm1pc3NpdmVLZXlX
Sy5nZXQoKSwgcGVybWlzc2l2ZVdLLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
KyAgICBzZXRWYWx1ZShib2R5LCAiZW5hYmxlZCIsIGVuYWJsZWQpOworICAgIHNldFZhbHVlKGJv
ZHksICJwZXJtaXNzaXZlIiwgcGVybWlzc2l2ZSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRD
dXN0b21Qb2xpY3lEZWxlZ2F0ZSIsIGJvZHkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpz
ZXRIaWRkZW4oYm9vbCBoaWRkZW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0SGlk
ZGVuIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGlzSW5pdGlhbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiaGlkZGVuIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gaXNJbml0aWFsV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoaWRkZW4pKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBpc0luaXRpYWxLZXlXSy5nZXQo
KSwgaXNJbml0aWFsV0suZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
YXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNl
dFZhbHVlKGJvZHksICJoaWRkZW4iLCBoaWRkZW4pOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0
SGlkZGVuIiwgYm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldENhY2hl
TW9kZWwoaW50IG1vZGVsKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldENhY2hlTW9k
ZWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShtb2RlbCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJTZXRDYWNoZU1vZGVsIiku
Z2V0KCksIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kZWwpKS5nZXQoKSwgbnVsbHB0cik7CiB9
CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nlc3NXb3JrUXVldWUoKSBjb25zdApA
QCAtMTAwNSwxMTAgKzc5MCw3MyBAQCBib29sIEluamVjdGVkQnVuZGxlOjpzaG91bGRQcm9jZXNz
V29ya1F1ZXVlKCkgY29uc3QKICAgICBpZiAoIW1fdXNlV29ya1F1ZXVlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1dvcmtRdWV1ZUVtcHR5Iikp
OwotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgMCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBp
c0VtcHR5ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJlc3VsdFRvUGFzcykp
OworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJJc1dvcmtR
dWV1ZUVtcHR5IikuZ2V0KCksIDAsICZyZXN1bHQpOwogCiAgICAgLy8gVGhlIElQQyBmYWlsZWQu
IFRoaXMgaGFwcGVucyB3aGVuIHN3YXBwaW5nIHByb2Nlc3NlcyBvbiBuYXZpZ2F0aW9uIGJlY2F1
c2UgdGhlIFdlYlBhZ2VQcm94eSB1bnJlZ2lzdGVycyBpdHNlbGYKICAgICAvLyBhcyBhIE1lc3Nh
Z2VSZWNlaXZlciBmcm9tIHRoZSBvbGQgV2ViUHJvY2Vzc1Byb3h5IGFuZCByZWdpc3RlciBpdHNl
bGYgd2l0aCB0aGUgbmV3IFdlYlByb2Nlc3NQcm94eSBpbnN0ZWFkLgotICAgIGlmICghaXNFbXB0
eSkKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJu
ICFXS0Jvb2xlYW5HZXRWYWx1ZShpc0VtcHR5LmdldCgpKTsKKyAgICBhdXRvIGlzRW1wdHkgPSBi
b29sZWFuVmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdldCgpKTsKKyAgICByZXR1cm4gIWlzRW1wdHk7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnByb2Nlc3NXb3JrUXVldWUoKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlByb2Nlc3NXb3JrUXVldWUiKSk7Ci0gICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIlByb2Nlc3NXb3JrUXVldWUiKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZTo6cXVldWVCYWNrTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJCYWNrd2FyZCkKIHsKICAg
ICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJRdWV1
ZUJhY2tOYXZpZ2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaG93RmFyQmFja3dhcmQpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlQmFja05hdmlnYXRp
b24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvd0ZhckJhY2t3YXJkKSkpOwogfQogCiB2b2lk
IEluamVjdGVkQnVuZGxlOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHVuc2lnbmVkIGhvd0ZhckZv
cndhcmQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiUXVldWVGb3J3YXJkTmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJ
bnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvd0ZhckZvcndh
cmQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1
ZXVlRm9yd2FyZE5hdmlnYXRpb24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvd0ZhckZvcndh
cmQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZChXS1N0cmluZ1JlZiB1
cmwsIFdLU3RyaW5nUmVmIHRhcmdldCwgYm9vbCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzKQogewog
ICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1
ZXVlTG9hZCIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGxv
YWREYXRhID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoInVybCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRhLmdl
dCgpLCB1cmxLZXkuZ2V0KCksIHVybCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dGFyZ2V0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidGFyZ2V0
IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIHRhcmdldEtleS5n
ZXQoKSwgdGFyZ2V0KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzaG91bGRPcGVu
RXh0ZXJuYWxVUkxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
c2hvdWxkT3BlbkV4dGVybmFsVVJMcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWREYXRh
LmdldCgpLCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzS2V5LmdldCgpLCBzaG91bGRPcGVuRXh0ZXJu
YWxVUkxzVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBsb2FkRGF0YS5nZXQoKSk7CisgICAgYXV0byBi
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVl
KGJvZHksICJ1cmwiLCB1cmwpOworICAgIHNldFZhbHVlKGJvZHksICJ0YXJnZXQiLCB0YXJnZXQp
OworICAgIHNldFZhbHVlKGJvZHksICJzaG91bGRPcGVuRXh0ZXJuYWxVUkxzIiwgc2hvdWxkT3Bl
bkV4dGVybmFsVVJMcyk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUxvYWQiLCBib2R5Lmdl
dCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVMb2FkSFRNTFN0cmluZyhXS1N0
cmluZ1JlZiBjb250ZW50LCBXS1N0cmluZ1JlZiBiYXNlVVJMLCBXS1N0cmluZ1JlZiB1bnJlYWNo
YWJsZVVSTCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJRdWV1ZUxvYWRIVE1MU3RyaW5nIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gbG9hZERhdGEgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY29udGVudEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbnRlbnQiKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgY29udGVudEtleS5nZXQoKSwgY29u
dGVudCk7Ci0KLSAgICBpZiAoYmFzZVVSTCkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gYmFzZVVSTEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImJhc2VVUkwiKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCks
IGJhc2VVUkxLZXkuZ2V0KCksIGJhc2VVUkwpOwotICAgIH0KLQotICAgIGlmICh1bnJlYWNoYWJs
ZVVSTCkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkxL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1bnJlYWNoYWJsZVVS
TCIpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgdW5yZWFj
aGFibGVVUkxLZXkuZ2V0KCksIHVucmVhY2hhYmxlVVJMKTsKLSAgICB9Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIGxvYWRE
YXRhLmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgImNvbnRlbnQiLCBjb250ZW50KTsKKyAgICBp
ZiAoYmFzZVVSTCkKKyAgICAgICAgc2V0VmFsdWUoYm9keSwgImJhc2VVUkwiLCBiYXNlVVJMKTsK
KyAgICBpZiAodW5yZWFjaGFibGVVUkwpCisgICAgICAgIHNldFZhbHVlKGJvZHksICJ1bnJlYWNo
YWJsZVVSTCIsIHVucmVhY2hhYmxlVVJMKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlTG9h
ZEhUTUxTdHJpbmciLCBib2R5KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVSZWxv
YWQoKQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlF1ZXVlUmVsb2FkIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJR
dWV1ZVJlbG9hZCIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWRpbmdTY3Jp
cHQoV0tTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlTG9hZGluZ1NjcmlwdCIpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHNj
cmlwdCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUxvYWRpbmdTY3JpcHQiLCBzY3JpcHQp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoV0tTdHJp
bmdSZWYgc2NyaXB0KQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHNjcmlwdCk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZU5vbkxvYWRpbmdTY3JpcHQiLCBzY3JpcHQpOwog
fQogCiBib29sIEluamVjdGVkQnVuZGxlOjppc0FsbG93ZWRIb3N0KFdLU3RyaW5nUmVmIGhvc3Qp
CkBAIC0xMTQzLDQgKzg5MSw2NyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjp0ZXh0RmllbGREaWRF
bmRFZGl0aW5nKCkKICAgICBtX3Rlc3RSdW5uZXItPnRleHRGaWVsZERpZEVuZEVkaXRpbmdDYWxs
YmFjaygpOwogfQogCit2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJl
ZiB2YWx1ZSkKK3sKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUpOworfQorCit2b2lkIHBv
c3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIHZhbHVlKQoreworICAgIHBvc3RN
ZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUodmFsdWUpKS5nZXQoKSk7Cit9CisK
K3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYg
dmFsdWUpCit7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUsIG51bGxw
dHIpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwg
Ym9vbCB2YWx1ZSkKK3sKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdWludDY0X3QgdmFsdWUpCit7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHZhbHVlKSkuZ2V0
KCkpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwg
dW5zaWduZWQgdmFsdWUpCit7CisgICAgdWludDY0X3QgcHJvbW90ZWRWYWx1ZSA9IHZhbHVlOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UobmFtZSwgcHJvbW90ZWRWYWx1ZSk7Cit9CisKK3Zv
aWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUp
Cit7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLRG91YmxlQ3Jl
YXRlKHZhbHVlKSkuZ2V0KCkpOworfQorCit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFy
KiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgaWYgKGF1dG8gcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkpCisgICAgICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNz
YWdlKHBhZ2UtPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUpOworfQorCit2b2lkIHBv
c3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIHBvc3RQ
YWdlTWVzc2FnZShuYW1lLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKK30KKwor
dm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUp
Cit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKG5hbWUsIHRvV0sodmFsdWUpKTsKK30KKwordm9pZCBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFs
dWUpCit7CisgICAgaWYgKGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCkpCisgICAgICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0
aW5nKHBhZ2UtPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUsIG51bGxwdHIpOworfQor
Cit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wg
dmFsdWUpCit7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UobmFtZSwgYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUodmFsdWUpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5oCmluZGV4IGI3NjAxNDM2ZjBjNjcyODU2MzNhMDhlMjVmOTQyYThhYTk4ZDk3MGIuLmQ3YTY5
ZDdmYzQwNWEwYWNiMzQ1YjczMzVjYTA3ZTk0M2RkYmRmYjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKQEAgLTk2
LDcgKzk2LDcgQEAgcHVibGljOgogCiAgICAgLy8gR2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFj
eSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hl
YWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwg
Ym9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJsZSBmbG9vckxldmVsKTsKKyAgICB2b2lkIHNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxk
b3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9u
YWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKTsKICAgICB2b2lk
IHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihXS1N0cmluZ1JlZiBl
cnJvck1lc3NhZ2UpOwogICAgIGJvb2wgaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29u
c3Q7CiAKQEAgLTE2OSw5ICsxNjksNiBAQCBwcml2YXRlOgogICAgIGVudW0gY2xhc3MgQmVnaW5n
VGVzdGluZ01vZGUgeyBOZXcsIFJlc3VtZSB9OwogICAgIHZvaWQgYmVnaW5UZXN0aW5nKFdLRGlj
dGlvbmFyeVJlZiBpbml0aWFsU2V0dGluZ3MsIEJlZ2luZ1Rlc3RpbmdNb2RlKTsKIAotICAgIGJv
b2wgYm9vbGVhbkZvcktleShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7Ci0gICAg
U3RyaW5nIHN0cmluZ0ZvcktleShXS0RpY3Rpb25hcnlSZWYsIGNvbnN0IGNoYXIqIGtleSk7Ci0K
ICAgICBXS0J1bmRsZVJlZiBtX2J1bmRsZSB7IG51bGxwdHIgfTsKICAgICBXS0J1bmRsZVBhZ2VH
cm91cFJlZiBtX3BhZ2VHcm91cCB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEluamVjdGVkQnVuZGxlUGFnZT4+IG1fcGFnZXM7CkBAIC0yMTAsNCArMjA3LDQzIEBAIHBy
aXZhdGU6CiAgICAgc2l6ZV90IG1fdXNlclNjcmlwdEluamVjdGVkQ291bnQgeyAwIH07CiB9Owog
Cit2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9IG51
bGxwdHIpOwordm9pZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1
ZSk7Cit2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVl
KTsKKwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlw
ZVJlZiB2YWx1ZSA9IG51bGxwdHIpOwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0
IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNv
bnN0IGNoYXIqIG5hbWUsIHVpbnQ2NF90IHZhbHVlKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVlKTsKK3ZvaWQgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CisK
K3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiB2YWx1ZSA9
IG51bGxwdHIpOwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2
YWx1ZSk7Cit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFy
KiB2YWx1ZSk7CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciog
bmFtZSwgV0tUeXBlUmVmIHZhbHVlID0gbnVsbHB0cik7Cit2b2lkIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwg
Y29uc3QgV0tSZXRhaW5QdHI8VD4mIHZhbHVlKQoreworICAgIHBvc3RNZXNzYWdlKG5hbWUsIHZh
bHVlLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWluUHRyPFQ+JiB2YWx1ZSkK
K3sKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIHZhbHVlLmdldCgpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFt
ZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIHZhbHVlKQoreworICAgIHBvc3RQYWdlTWVzc2FnZShu
YW1lLCB2YWx1ZS5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8
VD4mIHZhbHVlKQoreworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKG5hbWUsIHZhbHVl
LmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAK
aW5kZXggZDg5ZmVhZjliNmRhZTRjOTY4NTMxZjBhYjYzODU4OTFiMTRmOThmOC4uMmY1NjQyNzcz
MTE2ZDlmMTAyNGZhNmZiZTlkYzM1MjBiMTVlMThhOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNw
cApAQCAtNjAsNTAgKzYwLDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBX
VFIgewogCi1zdGF0aWMgSlNWYWx1ZVJlZiBwcm9wZXJ0eVZhbHVlKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKK3N0YXRp
YyBkb3VibGUgbnVtZXJpY1dpbmRvd1Byb3BlcnR5KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNv
bnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIGF1dG8gcHJvcGVydHlOYW1lU3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcocHJvcGVydHlOYW1lKSk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWVTdHJpbmcuZ2V0KCksIDApOwotfQotCi1zdGF0
aWMgZG91YmxlIHByb3BlcnR5VmFsdWVEb3VibGUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQotewotICAgIEpTVmFsdWVS
ZWYgdmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsK
LSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIHZhbHVlLCAwKTsgICAgCi19Ci0KLXN0YXRpYyBpbnQgcHJvcGVydHlW
YWx1ZUludChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBj
aGFyKiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocHJvcGVy
dHlWYWx1ZURvdWJsZShjb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZSkpOyAgICAKLX0KLQot
c3RhdGljIGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZShXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lLCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwot
ICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlRG91YmxlKGNvbnRleHQsIEpTQ29udGV4dEdldEdsb2Jh
bE9iamVjdChjb250ZXh0KSwgcHJvcGVydHlOYW1lKTsKKyAgICBhdXRvIGNvbnRleHQgPSBXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOworICAgIHJldHVybiBudW1lcmlj
UHJvcGVydHkoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBuYW1l
KTsKIH0KIAogc3RhdGljIFdURjo6U3RyaW5nIGR1bXBQYXRoKEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBub2RlVmFsdWUpCiB7Ci0gICAgSlNWYWx1ZVJlZiBub2RlTmFt
ZVZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBub2RlVmFsdWUsICJub2RlTmFtZSIpOwot
ICAgIGF1dG8ganNTdHJpbmdOb2RlTmFtZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgbm9kZU5hbWVWYWx1ZSwgMCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBu
b2RlTmFtZSA9IHRvV0soanNTdHJpbmdOb2RlTmFtZSk7Ci0KLSAgICBKU1ZhbHVlUmVmIHBhcmVu
dE5vZGUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIG5vZGVWYWx1ZSwgInBhcmVudE5vZGUiKTsK
LQotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyhub2RlTmFtZSkpOwotCi0gICAgaWYgKHBhcmVudE5vZGUgJiYgSlNW
YWx1ZUlzT2JqZWN0KGNvbnRleHQsIHBhcmVudE5vZGUpKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiID4gIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGR1
bXBQYXRoKGNvbnRleHQsIChKU09iamVjdFJlZilwYXJlbnROb2RlKSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBhdXRvIG5hbWUgPSB0b1dURlN0
cmluZyhzdHJpbmdQcm9wZXJ0eShjb250ZXh0LCBub2RlVmFsdWUsICJub2RlTmFtZSIpKTsKKyAg
ICBpZiAoYXV0byBwYXJlbnROb2RlID0gb2JqZWN0UHJvcGVydHkoY29udGV4dCwgbm9kZVZhbHVl
LCAicGFyZW50Tm9kZSIpKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhuYW1lLCAiID4gIiwg
ZHVtcFBhdGgoY29udGV4dCwgcGFyZW50Tm9kZSkpOworICAgIHJldHVybiBuYW1lOwogfQogCiBz
dGF0aWMgV1RGOjpTdHJpbmcgZHVtcFBhdGgoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxl
U2NyaXB0V29ybGRSZWYgd29ybGQsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlKQpAQCAtMTI2
LDUzICs5NCw0MCBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgcmFuZ2VUb1N0cihXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZAogICAgIGlmICghcmFuZ2VSZWYp
CiAgICAgICAgIHJldHVybiAiKG51bGwpIjsKIAotICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0KLSAgICBKU0dsb2JhbENvbnRleHRS
ZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZy
YW1lLCB3b3JsZCk7Ci0gICAgSlNWYWx1ZVJlZiByYW5nZVZhbHVlID0gV0tCdW5kbGVGcmFtZUdl
dEphdmFTY3JpcHRXcmFwcGVyRm9yUmFuZ2VGb3JXb3JsZChmcmFtZSwgcmFuZ2VSZWYsIHdvcmxk
KTsKKyAgICBhdXRvIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOworICAg
IGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxk
KGZyYW1lLCB3b3JsZCk7CisgICAgYXV0byByYW5nZVZhbHVlID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRXcmFwcGVyRm9yUmFuZ2VGb3JXb3JsZChmcmFtZSwgcmFuZ2VSZWYsIHdvcmxkKTsK
ICAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHJhbmdlVmFsdWUpKTsKLSAgICBK
U09iamVjdFJlZiByYW5nZU9iamVjdCA9IChKU09iamVjdFJlZilyYW5nZVZhbHVlOwotCi0gICAg
SlNWYWx1ZVJlZiBzdGFydE5vZGVWYWx1ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgcmFuZ2VP
YmplY3QsICJzdGFydENvbnRhaW5lciIpOwotICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29u
dGV4dCwgc3RhcnROb2RlVmFsdWUpKTsKLSAgICBKU09iamVjdFJlZiBzdGFydE5vZGVPYmplY3Qg
PSAoSlNPYmplY3RSZWYpc3RhcnROb2RlVmFsdWU7Ci0KLSAgICBKU1ZhbHVlUmVmIGVuZE5vZGVW
YWx1ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRDb250YWluZXIi
KTsKLSAgICBBU1NFUlQoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGVuZE5vZGVWYWx1ZSkpOwot
ICAgIEpTT2JqZWN0UmVmIGVuZE5vZGVPYmplY3QgPSAoSlNPYmplY3RSZWYpZW5kTm9kZVZhbHVl
OwotCi0gICAgaW50IHN0YXJ0T2Zmc2V0ID0gcHJvcGVydHlWYWx1ZUludChjb250ZXh0LCByYW5n
ZU9iamVjdCwgInN0YXJ0T2Zmc2V0Iik7Ci0gICAgaW50IGVuZE9mZnNldCA9IHByb3BlcnR5VmFs
dWVJbnQoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRPZmZzZXQiKTsKLQotICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoInJh
bmdlIGZyb20gIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoc3RhcnRPZmZzZXQp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG9mICIpOwotICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGR1bXBQYXRoKGNvbnRleHQsIHN0YXJ0Tm9kZU9iamVjdCkpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTnVtYmVyKGVuZE9mZnNldCk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIg
b2YgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4dCwgZW5kTm9k
ZU9iamVjdCkpOwotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgYXV0
byByYW5nZU9iamVjdCA9IChKU09iamVjdFJlZilyYW5nZVZhbHVlOworCisgICAgcmV0dXJuIG1h
a2VTdHJpbmcoInJhbmdlIGZyb20gIiwKKyAgICAgICAgbnVtZXJpY1Byb3BlcnR5KGNvbnRleHQs
IHJhbmdlT2JqZWN0LCAic3RhcnRPZmZzZXQiKSwKKyAgICAgICAgIiBvZiAiLAorICAgICAgICBk
dW1wUGF0aChjb250ZXh0LCBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCByYW5nZU9iamVjdCwgInN0
YXJ0Q29udGFpbmVyIikpLAorICAgICAgICAiIHRvICIsCisgICAgICAgIG51bWVyaWNQcm9wZXJ0
eShjb250ZXh0LCByYW5nZU9iamVjdCwgImVuZE9mZnNldCIpLAorICAgICAgICAiIG9mICIsCisg
ICAgICAgIGR1bXBQYXRoKGNvbnRleHQsIG9iamVjdFByb3BlcnR5KGNvbnRleHQsIHJhbmdlT2Jq
ZWN0LCAiZW5kQ29udGFpbmVyIikpCisgICAgKTsKIH0KIAogc3RhdGljIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBOYXZpZ2F0aW9uVHlwZVRvU3RyaW5nKFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSB0
eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9u
VHlwZUxpbmtDbGlja2VkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygibGluayBjbGlja2VkIikpOworICAgICAgICByZXR1cm4gdG9XSygibGlu
ayBjbGlja2VkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlRm9ybVN1Ym1pdHRl
ZDoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImZvcm0gc3VibWl0dGVkIikpOworICAgICAgICByZXR1cm4gdG9XSygiZm9ybSBzdWJtaXR0ZWQi
KTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVCYWNrRm9yd2FyZDoKLSAgICAgICAg
cmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImJhY2svZm9yd2Fy
ZCIpKTsKKyAgICAgICAgcmV0dXJuIHRvV0soImJhY2svZm9yd2FyZCIpOwogICAgIGNhc2Uga1dL
RnJhbWVOYXZpZ2F0aW9uVHlwZVJlbG9hZDoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInJlbG9hZCIpKTsKKyAgICAgICAgcmV0dXJuIHRvV0so
InJlbG9hZCIpOwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZUZvcm1SZXN1Ym1pdHRl
ZDoKLSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImZvcm0gcmVzdWJtaXR0ZWQiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJmb3JtIHJlc3VibWl0
dGVkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlT3RoZXI6Ci0gICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvdGhlciIpKTsKKyAg
ICAgICAgcmV0dXJuIHRvV0soIm90aGVyIik7CiAgICAgfQotICAgIHJldHVybiBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJpbGxlZ2FsIHZhbHVlIikpOworICAgIHJldHVy
biB0b1dLKCJpbGxlZ2FsIHZhbHVlIik7CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBzdHlsZURl
Y1RvU3RyKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZiBzdHlsZSkKQEAgLTE4NSwyMyAr
MTQwLDE0IEBAIHN0YXRpYyBXVEY6OlN0cmluZyBzdHlsZURlY1RvU3RyKFdLQnVuZGxlQ1NTU3R5
bGVEZWNsYXJhdGlvblJlZiBzdHlsZSkKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOwogfQogCi1zdGF0aWMgV1RGOjpTdHJpbmcgc2VjdXJpdHlPcmlnaW5Ub1N0cihXS1NlY3Vy
aXR5T3JpZ2luUmVmIG9yaWdpbikKK3N0YXRpYyBXVEY6OlN0cmluZyBzdHJpbmcoV0tTZWN1cml0
eU9yaWdpblJlZiBvcmlnaW4pCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwot
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCd7Jyk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
dG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikp
KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlIb3N0
KG9yaWdpbikpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKFdLU2VjdXJpdHlPcmlnaW5HZXRQb3J0KG9yaWdp
bikpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCd9Jyk7Ci0KLSAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCd7JywgdG9XVEZTdHJp
bmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikpKSwgIiwgIiwg
dG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpLCAi
LCAiLCBXS1NlY3VyaXR5T3JpZ2luR2V0UG9ydChvcmlnaW4pLCAnfScpOwogfQogCiBzdGF0aWMg
V1RGOjpTdHJpbmcgZnJhbWVUb1N0cihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5h
bWUoZnJhbWUpKTsKKyAgICBhdXRvIG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFt
ZShmcmFtZSkpOwogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBpZiAoV0tC
dW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkgewogICAgICAgICBpZiAoIVdLU3RyaW5nSXNF
bXB0eShuYW1lLmdldCgpKSkgewpAQCAtMjM1LDEyICsxODEsMTIgQEAgc3RhdGljIGlubGluZSBX
VEY6OlN0cmluZyBwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLVVJMUmVmIGZpbGVVcmwpCiAg
ICAgaWYgKCFmaWxlVXJsKQogICAgICAgICByZXR1cm4gIihudWxsKSI7CiAKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc2NoZW1lU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUo
ZmlsZVVybCkpOworICAgIGF1dG8gc2NoZW1lU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTY2hl
bWUoZmlsZVVybCkpOwogICAgIGlmICghaXNMb2NhbEZpbGVTY2hlbWUoc2NoZW1lU3RyaW5nLmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5n
KGZpbGVVcmwpKSk7CiAKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxl
UGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCkpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdL
QnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOworICAgIGF1dG8gbWFpbkZyYW1lVVJMID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUpKTsKICAgICBpZiAoIW1haW5G
cmFtZVVSTCkKICAgICAgICAgbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29w
eVByb3Zpc2lvbmFsVVJMKG1haW5GcmFtZSkpOwogCkBAIC00MzQsOCArMzgwLDcgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OnJlc2V0QWZ0ZXJUZXN0KCkKICAgICAvLyAoc2VlIDxodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MzM0PiksIGhvd2V2ZXIgZm9yIHRl
c3RzLCB3ZSB3YW50IHRvIHN0YXJ0IGVhY2ggb25lIHdpdGggYSBjbGVhbiBzdGF0ZS4KICAgICBX
S0J1bmRsZUZyYW1lRm9jdXMoZnJhbWUpOwogCi0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwotICAgIFdlYkNv
cmVUZXN0U3VwcG9ydDo6cmVzZXRJbnRlcm5hbHNPYmplY3QoY29udGV4dCk7CisgICAgV2ViQ29y
ZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdChXS0J1bmRsZUZyYW1lR2V0SmF2YVNj
cmlwdENvbnRleHQoZnJhbWUpKTsKICAgICBhc3NpZ25lZFVybHNDYWNoZSgpLmNsZWFyKCk7CiAK
ICAgICAvLyBVc2VyIHNjcmlwdHMgbmVlZCB0byBiZSByZW1vdmVkIGFmdGVyIHRoZSB0ZXN0IGFu
ZCBiZWZvcmUgbG9hZGluZyBhYm91dDpibGFuaywgYXMgb3RoZXJ3aXNlIHRoZXkgd291bGQgcnVu
IGluIGFib3V0OmJsYW5rLCBhbmQgcG90ZW50aWFsbHkgbGVhayByZXN1bHRzIGludG8gYSBzdWJz
ZXF1ZXN0IHRlc3QuCkBAIC00NTEsNyArMzk2LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OnJlc2V0QWZ0ZXJUZXN0KCkKIC8vIFN0cmluZyBvdXRwdXQgbXVzdCBiZSBpZGVudGljYWwgdG8g
LVtXZWJGcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0XS4KIHN0YXRp
YyB2b2lkIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFt
ZShmcmFtZSkpOworICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1l
KGZyYW1lKSk7CiAgICAgaWYgKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpIHsKICAg
ICAgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShuYW1lLmdldCgpKSkgewogICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIik7CkBAIC00ODYsMjcgKzQzMSwy
MSBAQCBzdGF0aWMgdm9pZCBkdW1wTG9hZEV2ZW50KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSkKIAogc3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXF1ZXN0RGVz
Y3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFN0
cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tVUkxSZWY+IGZpcnN0UGFydHkgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlGaXJz
dFBhcnR5Rm9yQ29va2llcyhyZXF1ZXN0KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGh0dHBNZXRob2QgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlIVFRQTWV0aG9kKHJlcXVlc3Qp
KTsKLQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPE5TVVJMUmVxdWVzdCBVUkwg
Iik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1
cmwuZ2V0KCkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgbWFpbiBkb2N1
bWVudCBVUkwgIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGF0aFN1aXRhYmxlRm9yVGVz
dFJlc3VsdChmaXJzdFBhcnR5LmdldCgpKSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIsIGh0dHAgbWV0aG9kICIpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVl
c3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIGZpcnN0UGFydHkgPSBhZG9wdFdLKFdLVVJM
UmVxdWVzdENvcHlGaXJzdFBhcnR5Rm9yQ29va2llcyhyZXF1ZXN0KSk7CisgICAgYXV0byBodHRw
TWV0aG9kID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1ZXN0KSk7CiAK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TVVJMUmVxdWVzdCBVUkwgIiwgcGF0aFN1aXRh
YmxlRm9yVGVzdFJlc3VsdCh1cmwuZ2V0KCkpLCAiLCBtYWluIGRvY3VtZW50IFVSTCAiLCBwYXRo
U3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpLCAiLCBodHRwIG1ldGhvZCAi
KTsKICAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KGh0dHBNZXRob2QuZ2V0KCkpKQogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIihub25lKSIpOwogICAgIGVsc2UKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoaHR0cE1ldGhvZCkpOwotCiAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJz4nKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXNw
b25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLVVJMUmVzcG9uc2VSZWYgcmVz
cG9uc2UsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIGJvb2wgc2hvdWxkRHVtcFJlc3Bv
bnNlSGVhZGVycyA9IGZhbHNlKQogewotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBh
ZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CisgICAgYXV0byB1cmwgPSBh
ZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CiAgICAgaWYgKCF1cmwpIHsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobnVsbCkiKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNTM1LDMxICs0NzQsMjAgQEAgdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpyZXNwb25zZUhlYWRlckNvdW50KFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiAKIHN0YXRp
YyBpbmxpbmUgdm9pZCBkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChX
S0Vycm9yUmVmIGVycm9yLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvckRvbWFpbiA9IGFkb3B0V0soV0tFcnJvckNvcHlE
b21haW4oZXJyb3IpKTsKLSAgICBpbnQgZXJyb3JDb2RlID0gV0tFcnJvckdldEVycm9yQ29kZShl
cnJvcik7CisgICAgYXV0byBlcnJvckRvbWFpbiA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tFcnJv
ckNvcHlEb21haW4oZXJyb3IpKSk7CisgICAgYXV0byBlcnJvckNvZGUgPSBXS0Vycm9yR2V0RXJy
b3JDb2RlKGVycm9yKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gZG8gc29tZSBlcnJvciBtYXBwaW5n
IGhlcmUgdG8gbWF0Y2ggdGhlIHRlc3QgZXhwZWN0YXRpb25zIChNYWMgZXJyb3IgbmFtZXMgYXJl
IGV4cGVjdGVkKS4KLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhlcnJvckRv
bWFpbi5nZXQoKSwgIldlYktpdE5ldHdvcmtFcnJvciIpKSB7Ci0gICAgICAgIGVycm9yRG9tYWlu
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTlNVUkxFcnJvckRvbWFp
biIpKTsKKyAgICBpZiAoZXJyb3JEb21haW4gPT0gIldlYktpdE5ldHdvcmtFcnJvciIpIHsKKyAg
ICAgICAgZXJyb3JEb21haW4gPSAiTlNVUkxFcnJvckRvbWFpbiI7CiAgICAgICAgIGVycm9yQ29k
ZSA9IC05OTk7CiAgICAgfQorICAgIGlmIChlcnJvckRvbWFpbiA9PSAgIldlYktpdFBvbGljeUVy
cm9yIikKKyAgICAgICAgZXJyb3JEb21haW4gPSAiV2ViS2l0RXJyb3JEb21haW4iOwogCi0gICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZXJyb3JEb21haW4uZ2V0KCksICJXZWJL
aXRQb2xpY3lFcnJvciIpKQotICAgICAgICBlcnJvckRvbWFpbiA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdEVycm9yRG9tYWluIikpOwotCi0gICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8TlNFcnJvciBkb21haW4gIik7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZXJyb3JEb21haW4pKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiwgY29kZSAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJl
cihlcnJvckNvZGUpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0so
V0tFcnJvckNvcHlGYWlsaW5nVVJMKGVycm9yKSk7Ci0gICAgaWYgKHVybC5nZXQoKSkgewotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENv
cHlTdHJpbmcodXJsLmdldCgpKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiLCBmYWlsaW5nIFVSTCBcIiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyInKTsK
LSAgICB9Ci0KKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPE5TRXJyb3IgZG9tYWluICIsIGVy
cm9yRG9tYWluLCAiLCBjb2RlICIsIGVycm9yQ29kZSk7CisgICAgaWYgKGF1dG8gdXJsID0gYWRv
cHRXSyhXS0Vycm9yQ29weUZhaWxpbmdVUkwoZXJyb3IpKSkKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIiwgZmFpbGluZyBVUkwgXCIiLCB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29w
eVN0cmluZyh1cmwuZ2V0KCkpKSksICciJyk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz4n
KTsKIH0KIApAQCAtNjk1LDcgKzYyMyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT50ZXN0
VVJMKCkpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHRlc3RVUkwgPSBhZG9wdFdL
KFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwoZnJhbWUpKTsKKyAgICAgICAgYXV0byB0
ZXN0VVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKGZyYW1lKSk7
CiAgICAgICAgIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2V0VGVzdFVSTCh0ZXN0VVJM
LmdldCgpKTsKICAgICB9CiAKQEAgLTc3NCwxMyArNzAyLDEzIEBAIGVudW0gRnJhbWVOYW1lUG9s
aWN5IHsgU2hvdWxkTm90SW5jbHVkZUZyYW1lTmFtZSwgU2hvdWxkSW5jbHVkZUZyYW1lTmFtZSB9
OwogCiBzdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBGcmFtZU5hbWVQb2xpY3kgc2hv
dWxkSW5jbHVkZUZyYW1lTmFtZSA9IFNob3VsZE5vdEluY2x1ZGVGcmFtZU5hbWUpCiB7Ci0gICAg
ZG91YmxlIHggPSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZShmcmFtZSwgInBhZ2VYT2Zmc2V0
Iik7Ci0gICAgZG91YmxlIHkgPSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZShmcmFtZSwgInBh
Z2VZT2Zmc2V0Iik7CisgICAgZG91YmxlIHggPSBudW1lcmljV2luZG93UHJvcGVydHkoZnJhbWUs
ICJwYWdlWE9mZnNldCIpOworICAgIGRvdWJsZSB5ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5KGZy
YW1lLCAicGFnZVlPZmZzZXQiKTsKICAgICBpZiAoZmFicyh4KSA8PSAwLjAwMDAwMDAxICYmIGZh
YnMoeSkgPD0gMC4wMDAwMDAwMSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZElu
Y2x1ZGVGcmFtZU5hbWUpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUg
PSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOworICAgICAgICBhdXRvIG5h
bWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZyYW1lICciKTsKICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodG9XVEZTdHJpbmcobmFtZSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIicgIik7CkBAIC03OTQsNyArNzIyLDcgQEAgc3RhdGljIHZvaWQgZHVtcEZyYW1l
U2Nyb2xsUG9zaXRpb24oV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3Ry
aW4KIAogc3RhdGljIHZvaWQgZHVtcERlc2NlbmRhbnRGcmFtZVNjcm9sbFBvc2l0aW9ucyhXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAg
IFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGNoaWxkRnJhbWVzID0gYWRvcHRXSyhXS0J1bmRsZUZy
YW1lQ29weUNoaWxkRnJhbWVzKGZyYW1lKSk7CisgICAgYXV0byBjaGlsZEZyYW1lcyA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOwogICAgIHNpemVfdCBzaXpl
ID0gV0tBcnJheUdldFNpemUoY2hpbGRGcmFtZXMuZ2V0KCkpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgc3ViZnJhbWUg
PSBzdGF0aWNfY2FzdDxXS0J1bmRsZUZyYW1lUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoY2hp
bGRGcmFtZXMuZ2V0KCksIGkpKTsKQEAgLTgxMCwyOCArNzM4LDEwIEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkdW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlvbnMoU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlCiAgICAgZHVtcERlc2NlbmRhbnRGcmFtZVNjcm9sbFBvc2l0aW9ucyhmcmFtZSwg
c3RyaW5nQnVpbGRlcik7CiB9CiAKLXN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdG9K
Uyhjb25zdCBjaGFyKiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKHN0cmluZykpOwotfQotCiBzdGF0aWMgYm9vbCBoYXNEb2N1bWVudEVs
ZW1lbnQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYg
Y29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7Ci0gICAg
SlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRl
eHQpOwotCi0gICAgSlNWYWx1ZVJlZiBkb2N1bWVudFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0
eShjb250ZXh0LCBnbG9iYWxPYmplY3QsIHRvSlMoImRvY3VtZW50IikuZ2V0KCksIDApOwotICAg
IGlmICghZG9jdW1lbnRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJU
KEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBkb2N1bWVudFZhbHVlKSk7Ci0gICAgSlNPYmplY3RS
ZWYgZG9jdW1lbnQgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZG9jdW1lbnRWYWx1ZSwgMCk7
Ci0KLSAgICBKU1ZhbHVlUmVmIGRvY3VtZW50RWxlbWVudFZhbHVlID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eShjb250ZXh0LCBkb2N1bWVudCwgdG9KUygiZG9jdW1lbnRFbGVtZW50IikuZ2V0KCksIDAp
OwotICAgIGlmICghZG9jdW1lbnRFbGVtZW50VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGRvY3VtZW50RWxlbWVudFZh
bHVlKTsKKyAgICBhdXRvIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQoZnJhbWUpOworICAgIHJldHVybiBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRH
ZXRHbG9iYWxPYmplY3QoY29udGV4dCksIHsgImRvY3VtZW50IiwgImRvY3VtZW50RWxlbWVudCIg
fSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVRleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFt
ZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKQEAgLTg1NCwxMSArNzY0LDExIEBAIHN0YXRpYyB2
b2lkIGR1bXBGcmFtZVRleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYg
YnVpbGRlcikKIAogc3RhdGljIHZvaWQgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tBcnJheVJlZj4gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVD
b3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsKKyAgICBhdXRvIGNoaWxkRnJhbWVzID0gYWRvcHRXSyhX
S0J1bmRsZUZyYW1lQ29weUNoaWxkRnJhbWVzKGZyYW1lKSk7CiAgICAgc2l6ZV90IHNpemUgPSBX
S0FycmF5R2V0U2l6ZShjaGlsZEZyYW1lcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBzdWJmcmFtZSA9IHN0
YXRpY19jYXN0PFdLQnVuZGxlRnJhbWVSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZEZy
YW1lcy5nZXQoKSwgaSkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViZnJh
bWVOYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUoc3ViZnJhbWUpKTsKKyAgICAg
ICAgYXV0byBzdWJmcmFtZU5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShzdWJm
cmFtZSkpOwogCiAgICAgICAgIC8vIER1bXBSZW5kZXJUcmVlIGlnbm9yZXMgZW1wdHkgZnJhbWVz
LCBzbyBkbyB0aGUgc2FtZSB0aGluZyBoZXJlLgogICAgICAgICBpZiAoIWhhc0RvY3VtZW50RWxl
bWVudChzdWJmcmFtZSkpCkBAIC04ODQsOSArNzk0LDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmR1bXBBbGxGcmFtZXNUZXh0KFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcERPTUFzV2ViQXJjaGl2ZShXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewogI2lmIFVTRShDRikgJiYg
IVBMQVRGT1JNKFdJTl9DQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKLSAgICBXS1JldGFpblB0cjxX
S0RhdGFSZWY+IHdrRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZy
YW1lKSk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFD
cmVhdGUoMCwgV0tEYXRhR2V0Qnl0ZXMod2tEYXRhLmdldCgpKSwgV0tEYXRhR2V0U2l6ZSh3a0Rh
dGEuZ2V0KCkpKSk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZlN0cmluZyA9IGFkb3B0
Q0YoV2ViQ29yZVRlc3RTdXBwb3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEo
Y2ZEYXRhLmdldCgpKSk7CisgICAgYXV0byB3a0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVD
b3B5V2ViQXJjaGl2ZShmcmFtZSkpOworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFD
cmVhdGUoMCwgV0tEYXRhR2V0Qnl0ZXMod2tEYXRhLmdldCgpKSwgV0tEYXRhR2V0U2l6ZSh3a0Rh
dGEuZ2V0KCkpKSk7CisgICAgYXV0byBjZlN0cmluZyA9IGFkb3B0Q0YoV2ViQ29yZVRlc3RTdXBw
b3J0OjpjcmVhdGVYTUxTdHJpbmdGcm9tV2ViQXJjaGl2ZURhdGEoY2ZEYXRhLmdldCgpKSk7CiAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoY2ZTdHJpbmcuZ2V0KCkpOwogI2VuZGlmCiB9CkBAIC05
MDIsOSArODEyLDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXAoKQogICAgIFdLQnVu
ZGxlUGFnZUZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRlKG1fcGFnZSk7CiAKICAgICBXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybFJlZiA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNv
cHlVUkwoZnJhbWUpKTsKKyAgICBhdXRvIHVybFJlZiA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNv
cHlVUkwoZnJhbWUpKTsKICAgICBTdHJpbmcgdXJsID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VS
TENvcHlTdHJpbmcodXJsUmVmLmdldCgpKSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtaW1lVHlwZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlNSU1FVHlwZUZvclJlc291cmNl
V2l0aFVSTChmcmFtZSwgdXJsUmVmLmdldCgpKSk7CisgICAgYXV0byBtaW1lVHlwZSA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlNSU1FVHlwZUZvclJlc291cmNlV2l0aFVSTChmcmFtZSwgdXJs
UmVmLmdldCgpKSk7CiAgICAgaWYgKHVybC5maW5kKCJkdW1wQXNUZXh0LyIpICE9IG5vdEZvdW5k
IHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWltZVR5cGUuZ2V0KCksICJ0ZXh0L3Bs
YWluIikpCiAgICAgICAgIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+ZHVtcEFzVGV4dChm
YWxzZSk7CiAKQEAgLTEwMTgsMjEgKzkyOCwxOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZQog
ICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dEZvcldvcmxkKGZyYW1lLCB3b3JsZCk7Ci0gICAgSlNPYmplY3RSZWYgd2lu
ZG93ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpOworICAgIGF1dG8gY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZyYW1lLCB3b3Js
ZCk7CiAKICAgICBpZiAoV0tCdW5kbGVTY3JpcHRXb3JsZE5vcm1hbFdvcmxkKCkgIT0gd29ybGQp
IHsKLSAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3csIHRvSlMoIl9f
d29ybGRJRCIpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBUZXN0UnVubmVyOjp3
b3JsZElERm9yV29ybGQod29ybGQpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7
CisgICAgICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJfX3dvcmxkSUQiLCBU
ZXN0UnVubmVyOjp3b3JsZElERm9yV29ybGQod29ybGQpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICBpbmplY3RlZEJ1
bmRsZS50ZXN0UnVubmVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhj
ZXB0aW9uKTsKLSAgICBpbmplY3RlZEJ1bmRsZS5nY0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09i
amVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwotICAgIGluamVjdGVkQnVuZGxlLmV2
ZW50U2VuZGluZ0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3cs
ICZleGNlcHRpb24pOwotICAgIGluamVjdGVkQnVuZGxlLnRleHRJbnB1dENvbnRyb2xsZXIoKS0+
bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOworICAgIGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKKyAgICBp
bmplY3RlZEJ1bmRsZS5nY0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsK
KyAgICBpbmplY3RlZEJ1bmRsZS5ldmVudFNlbmRpbmdDb250cm9sbGVyKCktPm1ha2VXaW5kb3dP
YmplY3QoY29udGV4dCk7CisgICAgaW5qZWN0ZWRCdW5kbGUudGV4dElucHV0Q29udHJvbGxlcigp
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOwogI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKLSAg
ICBpbmplY3RlZEJ1bmRsZS5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRCdW5kbGUuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0KTsKICNlbmRp
ZgogCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoY29udGV4
dCk7CkBAIC0xMTM2LDcgKzEwNDQsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkSW5p
dGlhdGVMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZAogICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxS
ZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CisgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVx
dWVzdENvcHlVUkwocmVxdWVzdCkpOwogICAgIGFzc2lnbmVkVXJsc0NhY2hlKCkuYWRkKGlkZW50
aWZpZXIsIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSk7CiB9CiAKQEAgLTEx
NzUsMTYgKzEwODMsMTYgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2ls
bFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICBpZiAoaW5qZWN0
ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpICYmIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gcmVkaXJlY3RVUkwgPSBhZG9wdFdLKFdLVVJMUmVz
cG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CisgICAgYXV0byByZWRpcmVjdFVSTCA9IGFkb3B0V0so
V0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKICAgICBpZiAoaW5qZWN0ZWRCdW5kbGUu
aXNUZXN0UnVubmluZygpICYmIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+d2lsbFNlbmRS
ZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KCkgJiYgcmVkaXJlY3RVUkwpIHsKICAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCgiUmV0dXJuaW5nIG51bGwgZm9yIHRoaXMgcmVkaXJl
Y3RcbiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBXS1JldGFpblB0
cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdCA9IGFkb3B0V0soV0tVUkxDb3B5SG9z
dE5hbWUodXJsLmdldCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjaGVtZSA9
IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkp
KTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7
CisgICAgYXV0byBob3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFtZSh1cmwuZ2V0KCkpKTsK
KyAgICBhdXRvIHNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOwor
ICAgIGF1dG8gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSk7
CiAgICAgaWYgKGhvc3QgJiYgIVdLU3RyaW5nSXNFbXB0eShob3N0LmdldCgpKQogICAgICAgICAm
JiBpc0hUVFBPckhUVFBTU2NoZW1lKHNjaGVtZS5nZXQoKSkKICAgICAgICAgJiYgIVdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoaG9zdC5nZXQoKSwgIjI1NS4yNTUuMjU1LjI1NSIpIC8vIFVz
ZWQgaW4gc29tZSB0ZXN0cyB0aGF0IGV4cGVjdCB0byBnZXQgYmFjayBhbiBlcnJvci4KQEAgLTEx
OTIsMTIgKzExMDAsMTIgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2ls
bFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAgICAgYm9vbCBt
YWluRnJhbWVJc0V4dGVybmFsID0gZmFsc2U7CiAgICAgICAgIGlmIChpbmplY3RlZEJ1bmRsZS5p
c1Rlc3RSdW5uaW5nKCkpIHsKICAgICAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1l
ID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSk7Ci0gICAgICAgICAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVS
TChtYWluRnJhbWUpKTsKKyAgICAgICAgICAgIGF1dG8gbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhX
S0J1bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUpKTsKICAgICAgICAgICAgIGlmICghbWFpbkZy
YW1lVVJMIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlT
dHJpbmcobWFpbkZyYW1lVVJMLmdldCgpKSkuZ2V0KCksICJhYm91dDpibGFuayIpKQogICAgICAg
ICAgICAgICAgIG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNp
b25hbFVSTChtYWluRnJhbWUpKTsKIAotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1haW5GcmFtZUhvc3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1lKG1haW5GcmFtZVVS
TC5nZXQoKSkpOwotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1haW5GcmFt
ZVNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKG1haW5GcmFtZVVSTC5nZXQoKSkpOwor
ICAgICAgICAgICAgYXV0byBtYWluRnJhbWVIb3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0TmFt
ZShtYWluRnJhbWVVUkwuZ2V0KCkpKTsKKyAgICAgICAgICAgIGF1dG8gbWFpbkZyYW1lU2NoZW1l
ID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7CiAgICAgICAg
ICAgICBtYWluRnJhbWVJc0V4dGVybmFsID0gaXNIVFRQT3JIVFRQU1NjaGVtZShtYWluRnJhbWVT
Y2hlbWUuZ2V0KCkpICYmICFpc0xvY2FsSG9zdChtYWluRnJhbWVIb3N0LmdldCgpKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoIW1haW5GcmFtZUlzRXh0ZXJuYWwgJiYgIWlzQWxsb3dlZEhvc3Qo
aG9zdC5nZXQoKSkpIHsKQEAgLTEyMTQsNyArMTEyMiw3IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBw
YWdlCiAgICAgICAgIFN0cmluZyBib2R5ID0gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53
aWxsU2VuZFJlcXVlc3RIVFRQQm9keSgpOwogICAgICAgICBpZiAoIWJvZHkuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICBDU3RyaW5nIGNCb2R5ID0gYm9keS51dGY4KCk7Ci0gICAgICAgICAgICBX
S1JldGFpblB0cjxXS0RhdGFSZWY+IGJvZHkgPSBhZG9wdFdLKFdLRGF0YUNyZWF0ZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihjQm9keS5kYXRhKCkpLCBjQm9keS5sZW5n
dGgoKSkpOworICAgICAgICAgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS0RhdGFDcmVhdGUocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY0JvZHkuZGF0YSgpKSwgY0JvZHku
bGVuZ3RoKCkpKTsKICAgICAgICAgICAgIHJldHVybiBXS1VSTFJlcXVlc3RDb3B5U2V0dGluZ0hU
VFBCb2R5KHJlcXVlc3QsIGJvZHkuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI0Miw5
ICsxMTUwLDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25zZUZv
clJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0IKICAgICBpZiAoIWluamVjdGVkQnVu
ZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0
V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1
cmwuZ2V0KCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWltZVR5cGVTdHJpbmcg
PSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlNRVR5cGUocmVzcG9uc2UpKTsKKyAgICBhdXRv
IHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKKyAgICBhdXRv
IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQodXJsLmdldCgp
KSk7CisgICAgYXV0byBtaW1lVHlwZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlN
SU1FVHlwZShyZXNwb25zZSkpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwog
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwpAQCAtMTM1
MCwxMCArMTI1OCw4IEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tCCiAgICAgICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgLSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uXG4iKTsKICAgICAgICAgZHVtcFJl
cXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0LCBzdHJpbmdCdWls
ZGVyKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgaXMgbWFpbiBmcmFt
ZSAtICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChXS0J1bmRsZUZyYW1lSXNNYWlu
RnJhbWUoZnJhbWUpID8gInllcyIgOiAibm8iKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgc2hvdWxkIG9wZW4gVVJMcyBleHRlcm5hbGx5IC0gIik7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5F
eHRlcm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVzIiA6ICJubyIpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgiIGlzIG1haW4gZnJhbWUgLSAiLCBXS0J1bmRsZUZyYW1lSXNN
YWluRnJhbWUoZnJhbWUpID8gInllcyIgOiAibm8iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoIiBzaG91bGQgb3BlbiBVUkxzIGV4dGVybmFsbHkgLSAiLCBXS0J1bmRsZU5hdmlnYXRp
b25BY3Rpb25HZXRTaG91bGRPcGVuRXh0ZXJuYWxVUkxzKG5hdmlnYXRpb25BY3Rpb24pID8gInll
cyIgOiAibm8iKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgICAg
IGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAg
ICB9CkBAIC0xMzYxLDI0ICsxMjY3LDIxIEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tCCiAgICAg
aWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVFbmFibGVk
KCkpCiAgICAgICAgIHJldHVybiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb25QYXNzVGhyb3VnaDsK
IAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENv
cHlVUkwocmVxdWVzdCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTY2hlbWUg
PSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkpKTsKKyAgICBhdXRvIHVybCA9IGFk
b3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CisgICAgYXV0byB1cmxTY2hlbWUg
PSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkpKTsKIAogICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlBvbGlj
eSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIpOwotICAgIGlmIChpc0xvY2FsRmlsZVNjaGVt
ZSh1cmxTY2hlbWUuZ2V0KCkpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBm
aWxlbmFtZSA9IGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQodXJsLmdldCgpKSk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGZpbGVuYW1lKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9
IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICB9CisgICAgaWYgKGlzTG9j
YWxGaWxlU2NoZW1lKHVybFNjaGVtZS5nZXQoKSkpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQodXJsLmdl
dCgpKSkpKTsKKyAgICBlbHNlCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpKSk7CiAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgd2l0aCBuYXZpZ2F0aW9uIHR5cGUgXCciKTsKICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhOYXZpZ2F0aW9uVHlwZVRvU3RyaW5nKFdLQnVu
ZGxlTmF2aWdhdGlvbkFjdGlvbkdldE5hdmlnYXRpb25UeXBlKG5hdmlnYXRpb25BY3Rpb24pKSkp
OwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCciKTsKLSAgICBXS1JldGFpblB0
cjxXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWY+IGhpdFRlc3RSZXN1bHRSZWYgPSBhZG9wdFdLKFdL
QnVuZGxlTmF2aWdhdGlvbkFjdGlvbkNvcHlIaXRUZXN0UmVzdWx0KG5hdmlnYXRpb25BY3Rpb24p
KTsKKyAgICBhdXRvIGhpdFRlc3RSZXN1bHRSZWYgPSBhZG9wdFdLKFdLQnVuZGxlTmF2aWdhdGlv
bkFjdGlvbkNvcHlIaXRUZXN0UmVzdWx0KG5hdmlnYXRpb25BY3Rpb24pKTsKICAgICBpZiAoaGl0
VGVzdFJlc3VsdFJlZikgewotICAgICAgICBXS1JldGFpblB0cjxXS0J1bmRsZU5vZGVIYW5kbGVS
ZWY+IG5vZGVIYW5kbGVSZWYgPSBhZG9wdFdLKFdLQnVuZGxlSGl0VGVzdFJlc3VsdENvcHlOb2Rl
SGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBub2RlSGFuZGxl
UmVmID0gYWRvcHRXSyhXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5Tm9kZUhhbmRsZShoaXRUZXN0
UmVzdWx0UmVmLmdldCgpKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
IG9yaWdpbmF0aW5nIGZyb20gIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGR1bXBQ
YXRoKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgbm9kZUhhbmRsZVJlZi5nZXQoKSkpOwogICAgIH0K
QEAgLTE0MDAsMTIgKzEzMDMsNyBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZShXS0J1bmRsZVBhZwogewogICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwogICAgIGlm
IChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkgJiYgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpLT5pc1BvbGljeURlbGVnYXRlRW5hYmxlZCgpICYmIFdLVVJMUmVzcG9uc2VJc0F0dGFjaG1l
bnQocmVzcG9uc2UpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZpbGVuYW1lID0gYWRvcHRXSyhXS1VSTFJl
c3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3BvbnNlKSk7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBpcyBhbiBhdHRh
Y2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHRvV1RGU3RyaW5nKGZpbGVuYW1lKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiXCdcbiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJQb2xpY3kgZGVsZWdhdGU6
IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciLCB0b1dU
RlN0cmluZyhhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUocmVzcG9u
c2UpKSksICJcJ1xuIikpOwogICAgIH0KIAogICAgIHJldHVybiBXS0J1bmRsZVBhZ2VQb2xpY3lB
Y3Rpb25QYXNzVGhyb3VnaDsKQEAgLTE0NzEsMTAgKzEzNjksMTAgQEAgc3RhdGljIFdURjo6U3Ry
aW5nIGFkZExlYWRpbmdTcGFjZVN0cmlwVHJhaWxpbmdTcGFjZXNBZGROZXdsaW5lKGNvbnN0IFdU
Rjo6U3RyaW4KIAogc3RhdGljIFdURjo6U3RyaW5nIGxhc3RGaWxlVVJMUGF0aENvbXBvbmVudChj
b25zdCBXVEY6OlN0cmluZyYgcGF0aCkKIHsKLSAgICBzaXplX3QgcG9zID0gcGF0aC5maW5kKCJm
aWxlOi8vIik7CisgICAgYXV0byBwb3MgPSBwYXRoLmZpbmQoImZpbGU6Ly8iKTsKICAgICBBU1NF
UlQoV1RGOjpub3RGb3VuZCAhPSBwb3MpOwogCi0gICAgV1RGOjpTdHJpbmcgdG1wUGF0aCA9IHBh
dGguc3Vic3RyaW5nKHBvcyArIDcpOworICAgIGF1dG8gdG1wUGF0aCA9IHBhdGguc3Vic3RyaW5n
KHBvcyArIDcpOwogICAgIGlmICh0bXBQYXRoLmxlbmd0aCgpIDwgMikgLy8gS2VlcCB0aGUgbG9u
ZSBzbGFzaCB0byBhdm9pZCBlbXB0eSBvdXRwdXQuCiAgICAgICAgIHJldHVybiB0bXBQYXRoOwog
CkBAIC0xNTIxLDExICsxNDE5LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRT
dGF0dXNiYXJUZXh0KFdLU3RyaW5nUmVmIHN0YXR1c2JhclRleHQpCiAgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNLOiBzZXRT
dGF0dXNUZXh0OiIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXR1
c2JhclRleHQpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0
ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJB
Q0s6IHNldFN0YXR1c1RleHQ6IiwgdG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCksICdcbicpKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0QWxlcnQoV0tT
dHJpbmdSZWYgbWVzc2FnZSwgV0tCdW5kbGVGcmFtZVJlZikKQEAgLTE1NTksMTUgKzE0NTMsOCBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2lu
UXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZgogICAgICAgICAvLyBSb3VuZGluZyB1cCBvciBkb3du
IGRvZXMgbm90IHJlYWxseSBtYXR0ZXIgZm9yIHRoZXNlIHRlc3RzLiBJdCdzCiAgICAgICAgIC8v
IHN1ZmZpY2llbnQgdG8ganVzdCBnZXQgYSByYW5nZSBvZiAxMDAwMCB0byBkZXRlcm1pbmUgaWYg
d2Ugd2VyZQogICAgICAgICAvLyBhYm92ZSBvciBiZWxvdyBhIHRocmVzaG9sZC4KLSAgICAgICAg
aW50NjRfdCB0cnVuY2F0ZWRTcGFjZU5lZWRlZCA9ICh0b3RhbEJ5dGVzTmVlZGVkIC8gMTAwMDAp
ICogMTAwMDA7Ci0KLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIEFQUExJQ0FUSU9OIENB
Q0hFIENBTExCQUNLOiBleGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YUZvclNlY3Vy
aXR5T3JpZ2luOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZWN1cml0eU9yaWdp
blRvU3RyKG9yaWdpbikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0
b3RhbFNwYWNlTmVlZGVkOn4iKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIo
dHJ1bmNhdGVkU3BhY2VOZWVkZWQpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4n
KTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkpOworICAgICAgICBhdXRvIHRydW5jYXRlZFNwYWNlTmVlZGVkID0gKHRvdGFsQnl0ZXNO
ZWVkZWQgLyAxMDAwMCkgKiAxMDAwMDsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4
dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBBUFBMSUNBVElPTiBDQUNIRSBDQUxMQkFDSzogZXhj
ZWVkZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiLCBzdHJp
bmcob3JpZ2luKSwgIiB0b3RhbFNwYWNlTmVlZGVkOn4iLCB0cnVuY2F0ZWRTcGFjZU5lZWRlZCwg
J1xuJykpOwogICAgIH0KIAogICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNo
b3VsZERpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKSkKQEAgLTE1ODAs
MTUgKzE0NjcsOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlv
bkNhY2hlT3JpZ2luUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZgogdWludDY0X3QgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3Jp
Z2luLCBXS1N0cmluZ1JlZiBkYXRhYmFzZU5hbWUsIFdLU3RyaW5nUmVmIGRhdGFiYXNlRGlzcGxh
eU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRRdW90YUJ5dGVzLCB1aW50NjRfdCBjdXJyZW50T3JpZ2lu
VXNhZ2VCeXRlcywgdWludDY0X3QgY3VycmVudERhdGFiYXNlVXNhZ2VCeXRlcywgdWludDY0X3Qg
ZXhwZWN0ZWRVc2FnZUJ5dGVzKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBEYXRhYmFzZUNhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJV
SSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2Vj
dXJpdHlPcmlnaW46Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlY3VyaXR5T3Jp
Z2luVG9TdHIob3JpZ2luKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
IGRhdGFiYXNlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhk
YXRhYmFzZU5hbWUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAg
ICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
LSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcERh
dGFiYXNlQ2FsbGJhY2tzKCkpCisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFr
ZVN0cmluZygiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VR
dW90YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmluZyhvcmlnaW4pLCAiIGRhdGFiYXNlOiIsIHRv
V1RGU3RyaW5nKGRhdGFiYXNlTmFtZSksICdcbicpKTsKIAogICAgIHVpbnQ2NF90IGRlZmF1bHRR
dW90YSA9IDUgKiAxMDI0ICogMTAyNDsKICAgICBkb3VibGUgdGVzdERlZmF1bHRRdW90YSA9IGlu
amVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+ZGF0YWJhc2VEZWZhdWx0UXVvdGEoKTsKQEAgLTE2
MDEsMTIgKzE0ODEsNyBAQCB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEV4Y2VlZERh
dGFiYXNlUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sCiAgICAgaWYgKG1heFF1b3Rh
ID49IDApIHsKICAgICAgICAgaWYgKGRlZmF1bHRRdW90YSA8IGV4cGVjdGVkVXNhZ2VCeXRlcyAm
JiBleHBlY3RlZFVzYWdlQnl0ZXMgPD0gbWF4UXVvdGEpIHsKICAgICAgICAgICAgIG5ld1F1b3Rh
ID0gZXhwZWN0ZWRVc2FnZUJ5dGVzOwotCi0gICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERF
TEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBpbmNyZWFzZWQgcXVvdGEgdG8gIik7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihuZXdRdW90YSk7Ci0gICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgICAgIGluamVjdGVkQnVuZGxlLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGluamVjdGVk
QnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJB
Q0s6IGluY3JlYXNlZCBxdW90YSB0byAiLCBuZXdRdW90YSwgJ1xuJykpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBuZXdRdW90YTsKQEAgLTE2NzUsMTMgKzE1NTAsOCBAQCBib29sIElu
amVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVS
ZWYgcmFuZ2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElO
RyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdl
KSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgfQorICAg
IGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpCisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQobWFrZVN0cmluZygiRURJ
VElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiLCByYW5nZVRvU3Ry
KG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7CiAgICAgcmV0dXJuIGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAgLTE2
OTEsMTMgKzE1NjEsOCBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGlu
ZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUu
aXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAg
ICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJh
bmdlOiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwg
bV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xu
Jyk7Ci0gICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKLSAgICB9CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hv
dWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0
VGV4dChtYWtlU3RyaW5nKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01S
YW5nZToiLCByYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpLCAnXG4nKSk7
CiAgICAgcmV0dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0
aW5nKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IGE2MjU1ODk3MjdiYzcxYjc0MWVjZjI1NjUxNTIxZWZi
NGY0OTk3ZjMuLjk3ZmEyOTAwOTg5YTEwNDU3MzZlNzE3NzBhYjMwZTJiZGEzM2M5YzEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlRlc3RSdW5uZXIuaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNs
dWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUGFnZS5oIgog
I2luY2x1ZGUgIkpTVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgot
I2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDVGVzdFJ1bm5lclV0aWxzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KQEAgLTY5LDcgKzY5LDcgQEAgUmVm
PFRlc3RSdW5uZXI+IFRlc3RSdW5uZXI6OmNyZWF0ZSgpCiB9CiAKIFRlc3RSdW5uZXI6OlRlc3RS
dW5uZXIoKQotICAgIDogbV91c2VyU3R5bGVTaGVldExvY2F0aW9uKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKSkKKyAgICA6IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlv
bih0b1dLKCIiKSkKIHsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIH0KQEAgLTgzLDM0ICs4
MywxMDEgQEAgSlNDbGFzc1JlZiBUZXN0UnVubmVyOjp3cmFwcGVyQ2xhc3MoKQogICAgIHJldHVy
biBKU1Rlc3RSdW5uZXI6OnRlc3RSdW5uZXJDbGFzcygpOwogfQogCitzdGF0aWMgV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UoKQoreworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCk7Cit9CisKK3N0YXRpYyBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSgp
Cit7CisgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKCkpOworfQorCitz
dGF0aWMgSlNDb250ZXh0UmVmIG1haW5KU0NvbnRleHQoKQoreworICAgIHJldHVybiBXS0J1bmRs
ZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKCkpOworfQorCiB2b2lkIFRlc3RS
dW5uZXI6OmRpc3BsYXkoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIFdLQnVuZGxlUGFnZUZvcmNl
UmVwYWludChwYWdlKTsKKyAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQocGFnZSgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5QW5kVHJhY2tSZXBhaW50cygpCiB7Ci0gICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCk7CisgICAgYXV0byBwYWdlID0gV1RSOjpwYWdlKCk7CiAgICAgV0tCdW5kbGVQYWdlRm9y
Y2VSZXBhaW50KHBhZ2UpOwogICAgIFdLQnVuZGxlUGFnZVNldFRyYWNrc1JlcGFpbnRzKHBhZ2Us
IHRydWUpOwogICAgIFdLQnVuZGxlUGFnZVJlc2V0VHJhY2tlZFJlcGFpbnRzKHBhZ2UpOwogfQog
CitzdGF0aWMgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHRvV0soZG91YmxlIHZhbHVlKQorewor
ICAgIHJldHVybiBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSk7Cit9CisKK3N0YXRpYyBX
S1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IGNyZWF0ZVdLRGljdGlvbmFyeShzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8c3RkOjpwYWlyPGNvbnN0IGNoYXIqLCBXS1JldGFpblB0cjxXS1R5cGVSZWY+
Pj4gcGFpcnMpCit7CisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBrZXlzOworICAgIFZlY3RvcjxX
S1R5cGVSZWY+IHZhbHVlczsKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBz
dHJpbmdzOworICAgIGZvciAoYXV0byYgcGFpciA6IHBhaXJzKSB7CisgICAgICAgIGF1dG8ga2V5
ID0gdG9XSyhwYWlyLmZpcnN0KTsKKyAgICAgICAga2V5cy5hcHBlbmQoa2V5LmdldCgpKTsKKyAg
ICAgICAgdmFsdWVzLmFwcGVuZChwYWlyLnNlY29uZC5nZXQoKSk7CisgICAgICAgIHN0cmluZ3Mu
YXBwZW5kKFdURk1vdmUoa2V5KSk7CisgICAgfQorICAgIHJldHVybiBhZG9wdFdLKFdLRGljdGlv
bmFyeUNyZWF0ZShrZXlzLmRhdGEoKSwgdmFsdWVzLmRhdGEoKSwga2V5cy5zaXplKCkpKTsKK30K
Kworc3RhdGljIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVdp
dGhSZXR1cm5WYWx1ZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBudWxscHRy
KQoreworICAgIFdLVHlwZVJlZiByYXdSZXR1cm5WYWx1ZSA9IG51bGxwdHI7CisgICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUsICZyYXdSZXR1cm5WYWx1ZSk7CisgICAgcmV0
dXJuIGFkb3B0V0socmF3UmV0dXJuVmFsdWUpOworfQorCitzdGF0aWMgYm9vbCBwb3N0U3luY2hy
b25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbihjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYg
dmFsdWUgPSBudWxscHRyKQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUocG9zdFN5bmNocm9u
b3VzTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQorCitzdGF0aWMgV0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVdpdGhSZXR1cm5W
YWx1ZShjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBudWxscHRyKQoreworICAg
IFdLVHlwZVJlZiByYXdSZXR1cm5WYWx1ZSA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2
YWx1ZSwgJnJhd1JldHVyblZhbHVlKTsKKyAgICByZXR1cm4gYWRvcHRXSyhyYXdSZXR1cm5WYWx1
ZSk7Cit9CisKK3N0YXRpYyBib29sIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5n
Qm9vbGVhbihjb25zdCBjaGFyKiBuYW1lLCBXS1R5cGVSZWYgdmFsdWUgPSBudWxscHRyKQorewor
ICAgIHJldHVybiBib29sZWFuVmFsdWUocG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRoUmV0
dXJuVmFsdWUobmFtZSwgdmFsdWUpKTsKK30KKworc3RhdGljIHVpbnQ2NF90IHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nVUludDY0KGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJl
ZiB2YWx1ZSA9IG51bGxwdHIpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5hbWUsIHZhbHVlKSk7Cit9CisKK3N0YXRp
YyB1aW50NjRfdCBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KGNvbnN0IGNo
YXIqIG5hbWUpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVlKHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VXaXRoUmV0dXJuVmFsdWUobmFtZSkpOworfQorCitzdGF0aWMgdm9pZCBvdmVycmlkZVByZWZl
cmVuY2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBhdXRvJiBidW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQ
cmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihidW5kbGUuYnVuZGxlKCksIGJ1bmRsZS5wYWdlR3JvdXAo
KSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUpOworfQorCiBib29sIFRlc3RSdW5uZXI6OnNob3Vs
ZER1bXBQaXhlbHMoKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldER1bXBQ
aXhlbHMiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNT
RVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKCJHZXREdW1wUGl4ZWxzIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0RHVtcFBpeGVscyhib29sIGR1bXBQaXhlbHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0RHVtcFBpeGVscyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZHVtcFBpeGVscykpOwotICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0RHVtcFBpeGVscyIsIGR1bXBQaXhlbHMp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmR1bXBBc1RleHQoYm9vbCBkdW1wUGl4ZWxzKQpAQCAt
MTIyLDE4ICsxODksMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpkdW1wQXNUZXh0KGJvb2wgZHVtcFBp
eGVscykKICAgICAKIFdoYXRUb0R1bXAgVGVzdFJ1bm5lcjo6d2hhdFRvRHVtcCgpIGNvbnN0CiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0V2hhdFRvRHVtcCIpKTsKLSAgICBXS1R5cGVS
ZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJu
RGF0YSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdo
YXRUb0R1bXA+KFdLVUludDY0R2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4ocmV0dXJuRGF0YSkpLmdldCgpKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdoYXRUb0R1
bXA+KHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdVSW50NjQoIkdldFdoYXRUb0R1bXAi
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2hhdFRvRHVtcChXaGF0VG9EdW1wIHdoYXRU
b0R1bXApCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0V2hhdFRvRHVtcCIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih3aGF0VG9EdW1wKSkpOwotICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0V2hhdFRvRHVtcCIsIHN0YXRpY19jYXN0PHVpbnQ2
NF90Pih3aGF0VG9EdW1wKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tUG9saWN5
RGVsZWdhdGUoYm9vbCBlbmFibGVkLCBib29sIHBlcm1pc3NpdmUpCkBAIC0xNTgsMjYgKzIxOSwx
OSBAQCB2b2lkIFRlc3RSdW5uZXI6OndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKQogCiB2b2lk
IFRlc3RSdW5uZXI6OndhaXRVbnRpbERvbmUoKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFJFTEVBU0VfQVNTRVJUKGluamVj
dGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSk7CiAKICAgICBzZXRXYWl0VW50aWxE
b25lKHRydWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdhaXRVbnRpbERvbmUoYm9vbCB2
YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRXYWl0VW50aWxEb25lIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U2V0V2FpdFVudGlsRG9uZSIsIHZhbHVlKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpzaG91bGRX
YWl0VW50aWxEb25lKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0V2Fp
dFVudGlsRG9uZSIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0g
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJHZXRXYWl0VW50aWxEb25lIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSgpCkBAIC0yMTAsMTggKzI2NCwxMiBAQCB2b2lkIFRlc3RS
dW5uZXI6OmZvcmNlSW1tZWRpYXRlQ29tcGxldGlvbigpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
U2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2
YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldER1bXBGcmFt
ZUxvYWRDYWxsYmFja3MiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVt
cEZyYW1lTG9hZENhbGxiYWNrcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldER1
bXBGcmFtZUxvYWRDYWxsYmFja3MiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxs
cHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVy
bkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0
U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiR2V0RHVtcEZyYW1lTG9hZENhbGxi
YWNrcyIpOwogfQogCiB1bnNpZ25lZCBUZXN0UnVubmVyOjppbWFnZUNvdW50SW5HZW5lcmFsUGFz
dGVib2FyZCgpIGNvbnN0CkBAIC0yMzEsMTggKzI3OSwxNCBAQCB1bnNpZ25lZCBUZXN0UnVubmVy
OjppbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCgpIGNvbnN0CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9v
bCBhbGxGcmFtZXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNvdXJjZVdLID0g
dG9XSyhzb3VyY2UpOwotCi0gICAgV0tCdW5kbGVQYWdlQWRkVXNlclNjcmlwdChJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHNvdXJjZVdLLmdldCgpLAorICAgIFdL
QnVuZGxlUGFnZUFkZFVzZXJTY3JpcHQocGFnZSgpLCB0b1dLKHNvdXJjZSkuZ2V0KCksCiAgICAg
ICAgIChydW5BdFN0YXJ0ID8ga1dLSW5qZWN0QXREb2N1bWVudFN0YXJ0IDoga1dLSW5qZWN0QXRE
b2N1bWVudEVuZCksCiAgICAgICAgIChhbGxGcmFtZXMgPyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6
IGtXS0luamVjdEluVG9wRnJhbWVPbmx5KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNl
clN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1lcykKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc291cmNlV0sgPSB0b1dLKHNvdXJjZSk7Ci0KLSAgICBX
S0J1bmRsZVBhZ2VBZGRVc2VyU3R5bGVTaGVldChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIHNvdXJjZVdLLmdldCgpLAorICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJT
dHlsZVNoZWV0KHBhZ2UoKSwgdG9XSyhzb3VyY2UpLmdldCgpLAogICAgICAgICAoYWxsRnJhbWVz
ID8ga1dLSW5qZWN0SW5BbGxGcmFtZXMgOiBrV0tJbmplY3RJblRvcEZyYW1lT25seSkpOwogfQog
CkBAIC0yNTMsMjkgKzI5NywxNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmtlZXBXZWJIaXN0b3J5KCkK
IAogdm9pZCBUZXN0UnVubmVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmlu
Z1JlZiBzaG93VUksIEpTU3RyaW5nUmVmIHZhbHVlKQogewotICAgIFdLQnVuZGxlUGFnZUV4ZWN1
dGVFZGl0aW5nQ29tbWFuZChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIHRvV0sobmFtZSkuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKKyAgICBXS0J1bmRsZVBh
Z2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQocGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB0b1dLKHZh
bHVlKS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxXS0ZpbmRPcHRpb25zPiBmaW5kT3B0
aW9uc0Zyb21BcnJheShKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFzVmFsdWUpCiB7Ci0gICAgYXV0
byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tC
dW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoaW5qZWN0
ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgYXV0byBsZW5n
dGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVu
Z3RoIikpOwotICAgIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBvcHRpb25zQXJyYXlBc1ZhbHVlLCAwKTsKLSAgICBKU1ZhbHVlUmVmIGxlbmd0aFZh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcHRpb25zQXJyYXksIGxlbmd0aFBy
b3BlcnR5TmFtZS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwg
bGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCisgICAgYXV0byBj
b250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOworICAgIGF1dG8gb3B0aW9uc0FycmF5ID0gSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHQsIG9wdGlvbnNBcnJheUFzVmFsdWUsIG51bGxwdHIpOworICAgIGF1
dG8gbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgb3B0aW9uc0FycmF5KTsKICAgICBXS0Zp
bmRPcHRpb25zIG9wdGlvbnMgPSAwOwotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiB2
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwg
aSwgMCk7Ci0gICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gb3B0aW9uTmFtZSA9IGFkb3B0KEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLQorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIG9wdGlvbk5hbWUgPSBj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBvcHRpb25zQXJyYXksIGksIDApKTsKICAgICAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkNhc2VJbnNlbnNpdGl2ZSIpKQogICAgICAgICAg
ICAgb3B0aW9ucyB8PSBrV0tGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZTsKICAgICAgICAgZWxz
ZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQXRX
b3JkU3RhcnRzIikpCkBAIC0yOTYsNyArMzI4LDcgQEAgc3RhdGljIE9wdGlvbmFsPFdLRmluZE9w
dGlvbnM+IGZpbmRPcHRpb25zRnJvbUFycmF5KEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWwK
IGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU1N0cmluZ1JlZiB0YXJnZXQsIEpTVmFsdWVS
ZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHsKICAgICBpZiAoYXV0byBvcHRpb25zID0gZmluZE9w
dGlvbnNGcm9tQXJyYXkob3B0aW9uc0FycmF5QXNWYWx1ZSkpCi0gICAgICAgIHJldHVybiBXS0J1
bmRsZVBhZ2VGaW5kU3RyaW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgdG9XSyh0YXJnZXQpLmdldCgpLCAqb3B0aW9ucyk7CisgICAgICAgIHJldHVybiBXS0J1
bmRsZVBhZ2VGaW5kU3RyaW5nKHBhZ2UoKSwgdG9XSyh0YXJnZXQpLmdldCgpLCAqb3B0aW9ucyk7
CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0zMDQsMjggKzMzNiwyMyBAQCBib29sIFRlc3RS
dW5uZXI6OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVmIG9wdGlvbnNB
cnJheUFzVmFsdWUpCiB2b2lkIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmdNYXRjaGVzSW5QYWdlKEpT
U3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogewogICAg
IGlmIChhdXRvIG9wdGlvbnMgPSBmaW5kT3B0aW9uc0Zyb21BcnJheShvcHRpb25zQXJyYXlBc1Zh
bHVlKSkKLSAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmdNYXRjaGVzKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyh0YXJnZXQpLmdldCgp
LCAqb3B0aW9ucyk7CisgICAgICAgIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmdNYXRjaGVzKHBhZ2Uo
KSwgdG9XSyh0YXJnZXQpLmdldCgpLCAqb3B0aW9ucyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
cmVwbGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKEpTVmFsdWVSZWYgbWF0Y2hJbmRpY2VzQXNWYWx1
ZSwgSlNTdHJpbmdSZWYgcmVwbGFjZW1lbnRUZXh0LCBib29sIHNlbGVjdGlvbk9ubHkpCiB7CiAg
ICAgYXV0byYgYnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIGF1dG8g
bWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGJ1bmRsZS5wYWdlKCktPnBhZ2Uo
KSk7Ci0gICAgYXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0
KG1haW5GcmFtZSk7Ci0gICAgYXV0byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOworICAgIGF1dG8gY29udGV4dCA9IG1h
aW5KU0NvbnRleHQoKTsKICAgICBhdXRvIG1hdGNoSW5kaWNlc09iamVjdCA9IEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBtYXRjaEluZGljZXNBc1ZhbHVlLCAwKTsKLSAgICBhdXRvIGxlbmd0aFZh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBtYXRjaEluZGljZXNPYmplY3QsIGxl
bmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgMCk7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29u
dGV4dCwgbGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBsZW5ndGggPSBh
cnJheUxlbmd0aChjb250ZXh0LCBtYXRjaEluZGljZXNPYmplY3QpOwogCiAgICAgYXV0byBpbmRp
Y2VzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBhdXRvIGxlbmd0aCA9
IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVl
LCAwKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgbWF0Y2hJ
bmRpY2VzT2JqZWN0LCBpLCAwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4
KGNvbnRleHQsIG1hdGNoSW5kaWNlc09iamVjdCwgaSwgbnVsbHB0cik7CiAgICAgICAgIGlmICgh
SlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIGF1dG8gaW5kZXggPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHN0ZDo6cm91bmQo
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCBudWxscHRyKSkpKTsKKyAgICAgICAgYXV0
byBpbmRleCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IHZhbHVlLCBudWxscHRyKSkpOwogICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShpbmRpY2VzLmdl
dCgpLCBpbmRleC5nZXQoKSk7CiAgICAgfQogICAgIFdLQnVuZGxlUGFnZVJlcGxhY2VTdHJpbmdN
YXRjaGVzKGJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgaW5kaWNlcy5nZXQoKSwgdG9XSyhyZXBsYWNl
bWVudFRleHQpLmdldCgpLCBzZWxlY3Rpb25Pbmx5KTsKQEAgLTMzNCwxMSArMzYxLDcgQEAgdm9p
ZCBUZXN0UnVubmVyOjpyZXBsYWNlRmluZE1hdGNoZXNBdEluZGljZXMoSlNWYWx1ZVJlZiBtYXRj
aEluZGljZXNBc1ZhbHVlLCBKU1MKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxEYXRhYmFzZXMo
KQogewogICAgIFdLQnVuZGxlQ2xlYXJBbGxEYXRhYmFzZXMoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRlbGV0ZUFsbElu
ZGV4ZWREYXRhYmFzZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUpKTsKLQotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZSgiRGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcyIsIHRydWUpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEodWludDY0X3QgcXVvdGEpCkBA
IC0zNDgsMjkgKzM3MSwyNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEodWlu
dDY0X3QgcXVvdGEpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSgpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3luY0xvY2FsU3RvcmFnZSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dHJ1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3luY0xvY2FsU3Rv
cmFnZSIsIHRydWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsQXBwbGljYXRpb25D
YWNoZXMoKQogewotICAgIFdLQnVuZGxlUGFnZUNsZWFyQXBwbGljYXRpb25DYWNoZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlUGFnZUNs
ZWFyQXBwbGljYXRpb25DYWNoZShwYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFy
QXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tC
dW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpKTsKKyAgICBXS0J1
bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4ocGFnZSgpLCB0b1dLKG9yaWdp
bikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUo
dWludDY0X3Qgc2l6ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VTZXRBcHBDYWNoZU1heGltdW1TaXpl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgc2l6ZSk7CisgICAg
V0tCdW5kbGVQYWdlU2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShwYWdlKCksIHNpemUpOwogfQogCiBs
b25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihK
U1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIFdLQnVuZGxlUGFnZUdldEFwcENhY2hl
VXNhZ2VGb3JPcmlnaW4oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCB0b1dLKG9yaWdpbikuZ2V0KCkpOworICAgIHJldHVybiBXS0J1bmRsZVBhZ2VHZXRBcHBDYWNo
ZVVzYWdlRm9yT3JpZ2luKHBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpkaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkKQEAg
LTM4MSwxNTggKzQwMiwxMDggQEAgdm9pZCBUZXN0UnVubmVyOjpkaXNhbGxvd0luY3JlYXNlRm9y
QXBwbGljYXRpb25DYWNoZVF1b3RhKCkKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZVJlZiBzdHJpbmdB
cnJheVRvSlMoSlNDb250ZXh0UmVmIGNvbnRleHQsIFdLQXJyYXlSZWYgc3RyaW5ncykKIHsKICAg
ICBjb25zdCBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZShzdHJpbmdzKTsKLQotICAgIEpT
VmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAw
KTsKLSAgICBKU09iamVjdFJlZiBhcnJheU9iaiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBh
cnJheVJlc3VsdCwgMCk7CisgICAgYXV0byBhcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRl
eHQsIDAsIDAsIG51bGxwdHIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBXS1N0cmluZ1JlZiBzdHJpbmdSZWYgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHN0cmluZ3MsIGkpKTsKLSAgICAgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZ0pTID0gdG9KUyhzdHJpbmdSZWYpOwotICAgICAgICBK
U09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheU9iaiwgaSwgSlNWYWx1ZU1h
a2VTdHJpbmcoY29udGV4dCwgc3RyaW5nSlMuZ2V0KCkpLCAwKTsKKyAgICAgICAgYXV0byBzdHJp
bmdSZWYgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHN0
cmluZ3MsIGkpKTsKKyAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
YXJyYXksIGksIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIHRvSlMoc3RyaW5nUmVmKS5nZXQo
KSksIG51bGxwdHIpOwogICAgIH0KLQotICAgIHJldHVybiBhcnJheVJlc3VsdDsKKyAgICByZXR1
cm4gYXJyYXk7CiB9CiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhBcHBsaWNh
dGlvbkNhY2hlKCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLQotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlS
ZWY+IG9yaWdpbnMgPSBhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlPcmlnaW5zV2l0aEFwcGxpY2F0
aW9uQ2FjaGUocGFnZSkpOwotCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLQotICAgIHJldHVy
biBzdHJpbmdBcnJheVRvSlMoY29udGV4dCwgb3JpZ2lucy5nZXQoKSk7CisgICAgcmV0dXJuIHN0
cmluZ0FycmF5VG9KUyhtYWluSlNDb250ZXh0KCksIGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weU9y
aWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShwYWdlKCkpKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVz
dFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZChKU1N0cmluZ1JlZiBuYW1lKQogewotICAgIHJldHVy
biBXS0J1bmRsZVBhZ2VJc0VkaXRpbmdDb21tYW5kRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCkpOworICAgIHJldHVybiBX
S0J1bmRsZVBhZ2VJc0VkaXRpbmdDb21tYW5kRW5hYmxlZChwYWdlKCksIHRvV0sobmFtZSkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldENhbk9wZW5XaW5kb3dzKCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Q2FuT3BlbldpbmRvd3MiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRy
dWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRDYW5PcGVuV2lu
ZG93cyIsIHRydWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVk
KGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0WFNTQXVkaXRvckVuYWJs
ZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihp
bmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5n
ZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFhTU0F1
ZGl0b3JFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TWVkaWFE
ZXZpY2VzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdE1l
ZGlhRGV2aWNlc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNl
Rm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFn
ZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVu
Y2UoIldlYktpdE1lZGlhRGV2aWNlc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRXZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRXZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJsZWQi
KSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmpl
Y3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQo
KSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYlJUQ01E
TlNJQ0VDYW5kaWRhdGVzRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldEN1c3RvbVVzZXJBZ2VudChKU1N0cmluZ1JlZiB1c2VyQWdlbnQpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0Q3VzdG9tVXNlckFnZW50IikpOwotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCB0b1dLKHVzZXJBZ2VudCkuZ2V0KCksIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldEN1c3RvbVVzZXJBZ2VudCIsIHRvV0sodXNlckFnZW50
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRXZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0
UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAo
KSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2Vi
S2l0V2ViQVBJU3RhdGlzdGljc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIldlYktpdE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIikpOwotICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdL
QnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUu
YnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQp
OworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xz
RW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdlYkdMMkVuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRXZWJHTDJFbmFibGVk
IikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5q
ZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0
KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJHTDJF
bmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V3JpdGFibGVTdHJl
YW1BUElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V3Jp
dGFibGVTdHJlYW1BUElFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVy
ZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxl
LnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVm
ZXJlbmNlKCJXZWJLaXRXcml0YWJsZVN0cmVhbUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRUcmFuc2Zvcm1TdHJlYW1BUElFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0VHJhbnNmb3JtU3RyZWFtQVBJRW5hYmxlZCIp
KTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVj
dGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgp
LCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0VHJhbnNmb3Jt
U3RyZWFtQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFJl
YWRhYmxlQnl0ZVN0cmVhbUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJXZWJLaXRSZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFibGVkIikpOwotICAgIGF1dG8mIGlu
amVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxl
T3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxl
KCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAg
IFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRSZWFkYWJsZUJ5dGVTdHJlYW1BUElFbmFi
bGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RW5jcnlwdGVkTWVkaWFB
UElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
a2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0RW5jcnlw
dGVkTWVkaWFBUElFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5j
ZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBh
Z2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJl
bmNlKCJXZWJLaXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZChib29sIGVuYWJsZWQp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFBpY3R1cmVJblBpY3R1cmVBUElFbmFibGVkIikp
OwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
OwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0
ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCks
IGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRQaWN0dXJlSW5Q
aWN0dXJlQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEdl
bmVyaWNDdWVBUElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2Vi
S2l0R2VuZXJpY0N1ZUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVm
ZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5k
bGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVBy
ZWZlcmVuY2UoIldlYktpdEdlbmVyaWNDdWVBUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCBlbmFibGVkKQog
ewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
OwotICAgIGluamVjdGVkQnVuZGxlLnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGVuYWJsZWQp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGVuYWJsZWQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoZW5hYmxlZCk7Cisg
ICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
IiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRvRXBoZW1l
cmFsU2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oYm9vbCBzaG91bGRTd2FwKQogewotICAgIGF1dG8m
IGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vzc2lvbk9uTmV4dE5h
dmlnYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHNob3VsZFN3YXApKTsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0U2hvdWxkU3dhcFRvRXBoZW1lcmFsU2Vz
c2lvbk9uTmV4dE5hdmlnYXRpb24iLCBzaG91bGRTd2FwKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vzc2lvbk9uTmV4dE5hdmlnYXRpb24oYm9vbCBzaG91
bGRTd2FwKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkU3dhcFRvRGVm
YXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShzaG91bGRTd2FwKSk7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoaW5qZWN0
ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldFNob3Vs
ZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2aWdhdGlvbiIsIHNob3VsZFN3YXApOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJv
b2wgZW5hYmxlZCkKQEAgLTU1NSw5ICs1MjYsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE5lZWRz
U3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrKGJvb2wgbmVlZHNRdWlyaykKICAgICAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJXZWJLaXRQbHVnaW5zRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRl
Qm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmpl
Y3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92
ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0UGx1Z2luc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZW5h
YmxlZCkKQEAgLTU5MSw4ICs1NjAsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFj
Y2Vzc0FsbG93TGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdAogYm9vbCBU
ZXN0UnVubmVyOjppc1BhZ2VCb3hWaXNpYmxlKGludCBwYWdlSW5kZXgpCiB7CiAgICAgYXV0byYg
aW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5k
bGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoaW5qZWN0ZWRC
dW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIHJldHVybiBXS0J1bmRsZUlzUGFnZUJveFZpc2li
bGUoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIG1haW5GcmFtZSwgcGFnZUluZGV4KTsKKyAgICBy
ZXR1cm4gV0tCdW5kbGVJc1BhZ2VCb3hWaXNpYmxlKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBt
YWluRnJhbWUoKSwgcGFnZUluZGV4KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZv
clVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHJpbmdS
ZWYgdmFsdWUpCkBAIC02MDAsMTYgKzU2OCwxNCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVl
Rm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVtZW50LCBKU1N0cgog
ICAgIGlmICghZWxlbWVudCB8fCAhSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGVsZW1lbnQpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS0J1bmRsZU5vZGVIYW5kbGVSZWY+
IG5vZGVIYW5kbGUgPSBhZG9wdFdLKFdLQnVuZGxlTm9kZUhhbmRsZUNyZWF0ZShjb250ZXh0LCBj
b25zdF9jYXN0PEpTT2JqZWN0UmVmPihlbGVtZW50KSkpOwotICAgIFdLQnVuZGxlTm9kZUhhbmRs
ZVNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIobm9kZUhhbmRsZS5nZXQoKSwgdG9XSyh2
YWx1ZSkuZ2V0KCkpOworICAgIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRW
YWx1ZUZvclVzZXIoYWRvcHRXSyhXS0J1bmRsZU5vZGVIYW5kbGVDcmVhdGUoY29udGV4dCwgY29u
c3RfY2FzdDxKU09iamVjdFJlZj4oZWxlbWVudCkpKS5nZXQoKSwgdG9XSyh2YWx1ZSkuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1ZGlvUmVzdWx0KEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU1ZhbHVlUmVmIGRhdGEpCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgLy8gRklYTUUgKDEyMzA1OCk6IFVzZSBhIEpT
QyBBUEkgdG8gZ2V0IGJ1ZmZlciBjb250ZW50cyBvbmNlIHN1Y2ggaXMgZXhwb3NlZC4KLSAgICBX
S1JldGFpblB0cjxXS0RhdGFSZWY+IGF1ZGlvRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVDcmVhdGVX
S0RhdGFGcm9tVUludDhBcnJheShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgY29udGV4dCwgZGF0
YSkpOwotICAgIGluamVjdGVkQnVuZGxlLnNldEF1ZGlvUmVzdWx0KGF1ZGlvRGF0YS5nZXQoKSk7
CisgICAgaW5qZWN0ZWRCdW5kbGUuc2V0QXVkaW9SZXN1bHQoYWRvcHRXSyhXS0J1bmRsZUNyZWF0
ZVdLRGF0YUZyb21VSW50OEFycmF5KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBjb250ZXh0LCBk
YXRhKSkuZ2V0KCkpOwogICAgIHNldFdoYXRUb0R1bXAoV2hhdFRvRHVtcDo6QXVkaW8pOwogICAg
IHNldER1bXBQaXhlbHMoZmFsc2UpOwogfQpAQCAtNjIxLDMzICs1ODcsMzAgQEAgdW5zaWduZWQg
VGVzdFJ1bm5lcjo6d2luZG93Q291bnQoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQmFja0Zv
cndhcmRMaXN0KCkKIHsKLSAgICBXS0J1bmRsZUNsZWFySGlzdG9yeUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUNsZWFy
SGlzdG9yeUZvclRlc3RpbmcocGFnZSgpKTsKIH0KIAotLy8gT2JqZWN0IENyZWF0aW9uCi0KLXZv
aWQgVGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIFRlc3RS
dW5uZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgc2V0
UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCAidGVzdFJ1bm5lciIsIHRoaXMsIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUs
IGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRlc3RS
dW5uZXIiLCB0aGlzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9yKCkK
IHsKLSAgICBXS0J1bmRsZUluc3BlY3RvclNob3coV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpOworICAgIFdLQnVuZGxl
SW5zcGVjdG9yU2hvdyhXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgpKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQogewotICAgIFdLQnVuZGxlSW5zcGVj
dG9yQ2xvc2UoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSkpOworICAgIFdLQnVuZGxlSW5zcGVjdG9yQ2xvc2UoV0tCdW5k
bGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmV2YWx1
YXRlSW5XZWJJbnNwZWN0b3IoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAgICBXS0J1bmRsZUluc3Bl
Y3RvckV2YWx1YXRlU2NyaXB0Rm9yVGVzdChXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSwgc2NyaXB0V0suZ2V0KCkpOwor
ICAgIFdLQnVuZGxlSW5zcGVjdG9yRXZhbHVhdGVTY3JpcHRGb3JUZXN0KFdLQnVuZGxlUGFnZUdl
dEluc3BlY3RvcihwYWdlKCkpLCB0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCi10eXBlZGVmIFdU
Rjo6SGFzaE1hcDx1bnNpZ25lZCwgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4g
PiBXb3JsZE1hcDsKK3VzaW5nIFdvcmxkTWFwID0gV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBXS1Jl
dGFpblB0cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVmPj47CiBzdGF0aWMgV29ybGRNYXAmIHdvcmxk
TWFwKCkKIHsKICAgICBzdGF0aWMgV29ybGRNYXAmIG1hcCA9ICpuZXcgV29ybGRNYXA7CkBAIC02
NTYsMTIgKzYxOSwxMSBAQCBzdGF0aWMgV29ybGRNYXAmIHdvcmxkTWFwKCkKIAogdW5zaWduZWQg
VGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQp
CiB7Ci0gICAgV29ybGRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmxkTWFwKCkuZW5kKCk7
Ci0gICAgZm9yIChXb3JsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB3b3JsZE1hcCgpLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlID09IHdvcmxkKQot
ICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgdGhlIGFu
dGktcGF0dGVybiBvZiBpdGVyYXRpbmcgYW4gZW50aXJlIG1hcC4gVHlwaWNhbGx5IHdlIHVzZSBh
IHBhaXIgb2YgbWFwcyBvciBqdXN0IGEgdmVjdG9yIGluIGEgY2FzZSBsaWtlIHRoaXMuCisgICAg
Zm9yIChhdXRvJiBtYXBFbnRyeSA6IHdvcmxkTWFwKCkpIHsKKyAgICAgICAgaWYgKG1hcEVudHJ5
LnZhbHVlID09IHdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIG1hcEVudHJ5LmtleTsKICAgICB9
Ci0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjgxLDcgKzY0Myw3IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoSlNDb250ZXh0UmVmIGNvbnRleHQsIHVu
c2lnbmVkIHdvCiAKICAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVGcmFtZUZv
ckphdmFTY3JpcHRDb250ZXh0KGNvbnRleHQpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIGZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSk7CisgICAgICAgIGZyYW1lID0gbWFpbkZyYW1lKCk7CiAKICAgICBK
U0dsb2JhbENvbnRleHRSZWYganNDb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkLmdldCgpKTsKICAgICBKU0V2YWx1YXRlU2NyaXB0
KGpzQ29udGV4dCwgc2NyaXB0LCAwLCAwLCAwLCAwKTsgCkBAIC02OTYsOCArNjU4LDcgQEAgdm9p
ZCBUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZShKU1N0cmluZ1JlZiBsb2NhbGUpCiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZiBkaXJlY3Rpb24pCiB7Ci0g
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICByZXR1cm4g
V0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24obWFpbkZyYW1lLCB0b1dLKGRpcmVjdGlvbiku
Z2V0KCkpOworICAgIHJldHVybiBXS0J1bmRsZUZyYW1lU2V0VGV4dERpcmVjdGlvbihtYWluRnJh
bWUoKSwgdG9XSyhkaXJlY3Rpb24pLmdldCgpKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoYm9vbCBzaG91bGRT
dGF5T25QYWdlKQpAQCAtNzA3LDE3ICs2NjgsMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91
bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChib29sIHNob3VsZFN0YXlPblAK
IAogYm9vbCBUZXN0UnVubmVyOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25h
bE5hdmlnYXRpb24oKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpKTsKLSAgICBXS1R5cGVS
ZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VS
VChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAg
cmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZVJldHVybmluZ0Jvb2xlYW4oIkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lv
bmFsTmF2aWdhdGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2
aWdhdGlvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiQ2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRp
b24iKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShKU1N0cmluZ1Jl
ZiBzdGF0ZSkKQEAgLTczMCw3ICs2ODYsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZp
c2liaWxpdHkoKQogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRIaWRkZW4oZmFs
c2UpOwogfQogCi10eXBlZGVmIFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVJlZj4gQ2Fs
bGJhY2tNYXA7Cit1c2luZyBDYWxsYmFja01hcCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNP
YmplY3RSZWY+Owogc3RhdGljIENhbGxiYWNrTWFwJiBjYWxsYmFja01hcCgpCiB7CiAgICAgc3Rh
dGljIENhbGxiYWNrTWFwJiBtYXAgPSAqbmV3IENhbGxiYWNrTWFwOwpAQCAtNzgzLDM4ICs3Mzks
MzIgQEAgc3RhdGljIHZvaWQgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgs
IEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgaWYgKCFjYWxsYmFjaykKICAgICAgICAgcmV0
dXJuOwotCisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOworICAgIGlmICghSlNW
YWx1ZUlzT2JqZWN0KGNvbnRleHQsIGNhbGxiYWNrKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkgewogICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJGQUlMOiBUcmllZCB0byBpbnN0
YWxsIGEgc2Vjb25kIFRlc3RSdW5uZXIgY2FsbGJhY2sgZm9yIHRoZSBzYW1lIGV2ZW50IChpZCAi
LCBpbmRleCwgIilcblxuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgV0tCdW5k
bGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29u
dGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogICAg
IEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKLSAgICBjYWxsYmFja01hcCgpLmFk
ZChpbmRleCwgY2FsbGJhY2spOworICAgIGNhbGxiYWNrTWFwKCkuYWRkKGluZGV4LCBjb25zdF9j
YXN0PEpTT2JqZWN0UmVmPihjYWxsYmFjaykpOwogfQogCiBzdGF0aWMgdm9pZCBjYWxsVGVzdFJ1
bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBzaXplX3QgYXJndW1lbnRDb3VudCA9IDAsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10gPSBudWxscHRyKQogewotICAgIGlmICghY2FsbGJh
Y2tNYXAoKS5jb250YWlucyhpbmRleCkpCisgICAgYXV0byBjYWxsYmFjayA9IGNhbGxiYWNrTWFw
KCkudGFrZShpbmRleCk7CisgICAgaWYgKCFjYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwotICAg
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1l
KTsKLSAgICBKU09iamVjdFJlZiBjYWxsYmFjayA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBj
YWxsYmFja01hcCgpLnRha2UoaW5kZXgpLCAwKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlND
b250ZXh0KCk7CiAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaywg
SlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBhcmd1bWVudENvdW50LCBhcmd1bWVu
dHMsIDApOwogICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OmNsZWFyVGVzdFJ1bm5lckNhbGxiYWNrcygpCiB7Ci0gICAgZm9yIChh
dXRvJiBpdGVyIDogY2FsbGJhY2tNYXAoKSkgewotICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIG1h
aW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdL
QnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgICAgICBKU09i
amVjdFJlZiBjYWxsYmFjayA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBpdGVyLnZhbHVlLCAw
KTsKLSAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgfQot
CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOworICAgIGZvciAoYXV0byYgdmFs
dWUgOiBjYWxsYmFja01hcCgpLnZhbHVlcygpKQorICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNv
bnRleHQsIEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogICAgIGNh
bGxiYWNrTWFwKCkuY2xlYXIoKTsKIH0KIApAQCAtODk0LDIwICs4NDQsMTIgQEAgdm9pZCBUZXN0
UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVyZW5jZSwgSlNTdHJp
bmdSZWYgdmFsdWUpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhi
b29sIGFjY2VwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBbHdheXNBY2NlcHRD
b29raWVzIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGFjY2VwdCkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKCJTZXRBbHdheXNBY2NlcHRDb29raWVzIiwgYWNjZXB0KTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMoYm9vbCBhY2Nl
cHQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0T25seUFjY2VwdEZpcnN0UGFydHlD
b29raWVzIikpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShhY2NlcHQpKTsKLSAgICAKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29va2llcyIs
IGFjY2VwdCk7CiB9CiAKIGRvdWJsZSBUZXN0UnVubmVyOjpwcmVjaXNlVGltZSgpCkBAIC05MjQs
MTUgKzg2NiwxNSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChi
b29sIGVuYWJsZWQpCiB7CiAgICAgbV91c2VyU3R5bGVTaGVldEVuYWJsZWQgPSBlbmFibGVkOwog
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVtcHR5VXJsID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotICAgIFdLU3RyaW5nUmVmIGxvY2F0aW9uID0g
ZW5hYmxlZCA/IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbi5nZXQoKSA6IGVtcHR5VXJsLmdldCgp
OworICAgIGF1dG8gZW1wdHlTdHJpbmcgPSB0b1dLKCIiKTsKKyAgICBhdXRvIGxvY2F0aW9uID0g
ZW5hYmxlZCA/IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbi5nZXQoKSA6IGVtcHR5U3RyaW5nLmdl
dCgpOwogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpOwogICAgIFdLQnVuZGxlU2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihpbmplY3RlZEJ1bmRs
ZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGxvY2F0aW9uKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGxv
Y2F0aW9uKQogewotICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcobG9jYXRpb24pKTsKKyAgICBtX3VzZXJTdHlsZVNoZWV0TG9j
YXRpb24gPSB0b1dLKGxvY2F0aW9uKTsKIAogICAgIGlmIChtX3VzZXJTdHlsZVNoZWV0RW5hYmxl
ZCkKICAgICAgICAgc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKHRydWUpOwpAQCAtOTQ2LDggKzg4
OCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHMoYm9vbCBlbmFibGVkKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlU2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBh
Z2UoKSwgZW5hYmxlZCk7CisgICAgV0tCdW5kbGVTZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCksIGVuYWJsZWQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2FkcygpCkBAIC05NzMs
MzYgKzkxNCwyOCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIAogdm9pZCBUZXN0UnVubmVyOjpncmFudFdlYk5vdGlm
aWNhdGlvblBlcm1pc3Npb24oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBhdXRvJiBpbmplY3Rl
ZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVNldFdl
Yk5vdGlmaWNhdGlvblBlcm1pc3Npb24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVk
QnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCBvcmlnaW5XSy5nZXQoKSwgdHJ1ZSk7CisgICAgV0tCdW5k
bGVTZXRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgcGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCksIHRydWUpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OmRlbnlXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9y
aWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9y
aWdpbik7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCk7Ci0gICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKGluamVjdGVk
QnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgb3JpZ2luV0su
Z2V0KCksIGZhbHNlKTsKKyAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24o
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCksIHRvV0sob3JpZ2lu
KS5nZXQoKSwgZmFsc2UpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFsbFdlYk5vdGlm
aWNhdGlvblBlcm1pc3Npb25zKCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZVJlbW92ZUFsbFdlYk5vdGlmaWNh
dGlvblBlcm1pc3Npb25zKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5w
YWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVSZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJt
aXNzaW9ucyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHBhZ2UoKSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhKU1ZhbHVl
UmVmIG5vdGlmaWNhdGlvbikKIHsKICAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdL
QnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7Ci0g
ICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQobWFpbkZyYW1lKTsKLSAgICB1aW50NjRfdCBub3RpZmljYXRpb25JRCA9IFdLQnVuZGxlR2V0
V2ViTm90aWZpY2F0aW9uSUQoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIG5vdGlm
aWNhdGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUucG9zdFNpbXVsYXRlV2ViTm90aWZpY2F0aW9u
Q2xpY2sobm90aWZpY2F0aW9uSUQpOworICAgIGluamVjdGVkQnVuZGxlLnBvc3RTaW11bGF0ZVdl
Yk5vdGlmaWNhdGlvbkNsaWNrKFdLQnVuZGxlR2V0V2ViTm90aWZpY2F0aW9uSUQoaW5qZWN0ZWRC
dW5kbGUuYnVuZGxlKCksIG1haW5KU0NvbnRleHQoKSwgbm90aWZpY2F0aW9uKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKIHsK
LSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4KKyAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4KICAgICBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGVuYWJsZWQpOwogfQogCkBAIC0xMDEx
LDEwMiArOTQ0LDUxIEBAIGJvb2wgVGVzdFJ1bm5lcjo6aXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0
aXZlKCkKICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzR2VvbG9jYXRp
b25Qcm92aWRlckFjdGl2ZSgpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFj
Y3VyYWN5LCBKU1ZhbHVlUmVmIGpzQWx0aXR1ZGUsIEpTVmFsdWVSZWYganNBbHRpdHVkZUFjY3Vy
YWN5LCBKU1ZhbHVlUmVmIGpzSGVhZGluZywgSlNWYWx1ZVJlZiBqc1NwZWVkLCBKU1ZhbHVlUmVm
IGpzRmxvb3JMZXZlbCkKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIE9w
dGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIE9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGVBY2N1cmFj
eSwgT3B0aW9uYWw8ZG91YmxlPiBoZWFkaW5nLCBPcHRpb25hbDxkb3VibGU+IHNwZWVkLCBPcHRp
b25hbDxkb3VibGU+IGZsb29yTGV2ZWwpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdl
KCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRDb250ZXh0KG1haW5GcmFtZSk7Ci0KLSAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGUgPSBmYWxz
ZTsKLSAgICBkb3VibGUgYWx0aXR1ZGUgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5l
ZChjb250ZXh0LCBqc0FsdGl0dWRlKSkgewotICAgICAgICBwcm92aWRlc0FsdGl0dWRlID0gdHJ1
ZTsKLSAgICAgICAgYWx0aXR1ZGUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNBbHRpdHVk
ZSwgMCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kgPSBmYWxz
ZTsKLSAgICBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlz
VW5kZWZpbmVkKGNvbnRleHQsIGpzQWx0aXR1ZGVBY2N1cmFjeSkpIHsKLSAgICAgICAgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5ID0gdHJ1ZTsKLSAgICAgICAgYWx0aXR1ZGVBY2N1cmFjeSA9IEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBqc0FsdGl0dWRlQWNjdXJhY3ksIDApOwotICAgIH0KLQot
ICAgIGJvb2wgcHJvdmlkZXNIZWFkaW5nID0gZmFsc2U7Ci0gICAgZG91YmxlIGhlYWRpbmcgPSAw
LjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCBqc0hlYWRpbmcpKSB7Ci0g
ICAgICAgIHByb3ZpZGVzSGVhZGluZyA9IHRydWU7Ci0gICAgICAgIGhlYWRpbmcgPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwganNIZWFkaW5nLCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3Zp
ZGVzU3BlZWQgPSBmYWxzZTsKLSAgICBkb3VibGUgc3BlZWQgPSAwLjsKLSAgICBpZiAoIUpTVmFs
dWVJc1VuZGVmaW5lZChjb250ZXh0LCBqc1NwZWVkKSkgewotICAgICAgICBwcm92aWRlc1NwZWVk
ID0gdHJ1ZTsKLSAgICAgICAgc3BlZWQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNTcGVl
ZCwgMCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwgPSBmYWxzZTsKLSAg
ICBkb3VibGUgZmxvb3JMZXZlbCA9IDAuOwotICAgIGlmICghSlNWYWx1ZUlzVW5kZWZpbmVkKGNv
bnRleHQsIGpzRmxvb3JMZXZlbCkpIHsKLSAgICAgICAgcHJvdmlkZXNGbG9vckxldmVsID0gdHJ1
ZTsKLSAgICAgICAgZmxvb3JMZXZlbCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc0Zsb29y
TGV2ZWwsIDApOwotICAgIH0KLQotICAgIGluamVjdGVkQnVuZGxlLnNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRl
LCBhbHRpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBw
cm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkLCBwcm92aWRlc0Zs
b29yTGV2ZWwsIGZsb29yTGV2ZWwpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5z
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwg
YWx0aXR1ZGUsIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkLCBmbG9vckxldmVsKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxh
YmxlRXJyb3IoSlNTdHJpbmdSZWYgbWVzc2FnZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZVdLID0gdG9XSyhtZXNzYWdlKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKG1lc3Nh
Z2VXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcih0b1dLKG1lc3NhZ2UpLmdldCgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4KKyAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4KICAgICBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVybWlzc2lvbihlbmFibGVkKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24oKQogewotICAgIC8vIEZJWE1FOiB0
aGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBkb25lIGJ5IGZyYW1lLgogICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXNldFVz
ZXJNZWRpYVBlcm1pc3Npb24oKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc0RvaW5nTWVkaWFD
YXB0dXJlKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc0RvaW5nTWVkaWFD
YXB0dXJlIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAm
cmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJu
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNEb2luZ01lZGlh
Q2FwdHVyZSIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQ
ZXJtaXNzaW9uRm9yT3JpZ2luKGJvb2wgcGVybWlzc2lvbiwgSlNTdHJpbmdSZWYgb3JpZ2luLCBK
U1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBw
YXJlbnRPcmlnaW5XSyA9IHRvV0socGFyZW50T3JpZ2luKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25Gb3JPcmlnaW4ocGVy
bWlzc2lvbiwgb3JpZ2luV0suZ2V0KCksIHBhcmVudE9yaWdpbldLLmdldCgpKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVyc2lzdGVudFBlcm1pc3Npb25G
b3JPcmlnaW4ocGVybWlzc2lvbiwgdG9XSyhvcmlnaW4pLmdldCgpLCB0b1dLKHBhcmVudE9yaWdp
bikuZ2V0KCkpOwogfQogCiB1bnNpZ25lZCBUZXN0UnVubmVyOjp1c2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdENvdW50Rm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbiwgSlNTdHJpbmdSZWYgcGFy
ZW50T3JpZ2luKSBjb25zdAogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5X
SyA9IHRvV0sob3JpZ2luKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3Jp
Z2luV0sgPSB0b1dLKHBhcmVudE9yaWdpbik7Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS51c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKG9yaWdp
bldLLmdldCgpLCBwYXJlbnRPcmlnaW5XSy5nZXQoKSk7CisgICAgcmV0dXJuIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS51c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2lu
KHRvV0sob3JpZ2luKS5nZXQoKSwgdG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmln
aW4oSlNTdHJpbmdSZWYgb3JpZ2luLCBKU1N0cmluZ1JlZiBwYXJlbnRPcmlnaW4pCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwYXJlbnRPcmlnaW5XSyA9IHRvV0socGFyZW50T3JpZ2lu
KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucmVzZXRVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKG9yaWdpbldLLmdldCgpLCBwYXJlbnRPcmlnaW5XSy5n
ZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnJlc2V0VXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbih0b1dLKG9yaWdpbikuZ2V0KCksIHRvV0socGFy
ZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6Y2FsbFNob3VsZENsb3Nl
T25XZWJWaWV3KCkKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxl
UGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCkpOwotICAgIHJldHVybiBXS0J1bmRsZUZyYW1lQ2FsbFNob3VsZENsb3NlT25XZWJWaWV3KG1h
aW5GcmFtZSk7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVDYWxsU2hvdWxkQ2xvc2VPbldlYlZp
ZXcobWFpbkZyYW1lKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlQmFja05hdmlnYXRp
b24odW5zaWduZWQgaG93RmFyQmFja3dhcmQpCkBAIC0xMTIyLDIwICsxMDA0LDE3IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJGb3J3YXJk
KQogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1Jl
ZiB0YXJnZXQsIGJvb2wgc2hvdWxkT3BlbkV4dGVybmFsVVJMcykKIHsKICAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS1JldGFpblB0
cjxXS1VSTFJlZj4gYmFzZVVSTFdLID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybFdLID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhC
YXNlVVJMKGJhc2VVUkxXSy5nZXQoKSwgdG9XVEZTdHJpbmcodG9XSyh1cmwpKS51dGY4KCkuZGF0
YSgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZ1dLID0gYWRvcHRX
SyhXS1VSTENvcHlTdHJpbmcodXJsV0suZ2V0KCkpKTsKLQorICAgIGF1dG8gYmFzZVVSTFdLID0g
YWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUoKSkpOworICAgIGF1dG8gdXJs
V0sgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTFdLLmdldCgpLCB0b1dU
RlN0cmluZyh1cmwpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBhdXRvIHVybFN0cmluZ1dLID0gYWRv
cHRXSyhXS1VSTENvcHlTdHJpbmcodXJsV0suZ2V0KCkpKTsKICAgICBpbmplY3RlZEJ1bmRsZS5x
dWV1ZUxvYWQodXJsU3RyaW5nV0suZ2V0KCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgc2hvdWxkT3Bl
bkV4dGVybmFsVVJMcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkSFRNTFN0cmlu
ZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMLCBKU1N0cmluZ1JlZiB1
bnJlYWNoYWJsZVVSTCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY29udGVudFdL
ID0gdG9XSyhjb250ZW50KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYmFzZVVSTFdL
ID0gYmFzZVVSTCA/IHRvV0soYmFzZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkxXSyA9IHVucmVhY2hh
YmxlVVJMID8gdG9XSyh1bnJlYWNoYWJsZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4o
KTsKLQotICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZUxvYWRIVE1MU3RyaW5n
KGNvbnRlbnRXSy5nZXQoKSwgYmFzZVVSTFdLLmdldCgpLCB1bnJlYWNoYWJsZVVSTFdLLmdldCgp
KTsKKyAgICBhdXRvIGJhc2VVUkxXSyA9IGJhc2VVUkwgPyB0b1dLKGJhc2VVUkwpIDogV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+KCk7CisgICAgYXV0byB1bnJlYWNoYWJsZVVSTFdLID0gdW5yZWFj
aGFibGVVUkwgPyB0b1dLKHVucmVhY2hhYmxlVVJMKSA6IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PigpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZUxvYWRIVE1MU3RyaW5n
KHRvV0soY29udGVudCkuZ2V0KCksIGJhc2VVUkxXSy5nZXQoKSwgdW5yZWFjaGFibGVVUkxXSy5n
ZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQoKQpAQCAtMTE0NSwxNjMg
KzEwMjQsMTE5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQoKQogCiB2b2lkIFRlc3RS
dW5uZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZUxvYWRpbmdTY3JpcHQoc2NyaXB0V0suZ2V0KCkp
OworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZUxvYWRpbmdTY3JpcHQodG9X
SyhzY3JpcHQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZU5vbkxvYWRpbmdT
Y3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucXVldWVOb25Mb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucXVldWVOb25Mb2FkaW5nU2NyaXB0KHRvV0soc2NyaXB0KS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENv
bnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9y
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlcyIsIHZhbHVlKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhib29sIGhhbmRsZXNBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0SGFuZGxlc0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFuZGxlc0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlcykpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEhhbmRsZXNBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZXMiLCBoYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2hv
dWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGRMb2dDYW5BdXRoZW50aWNh
dGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkTG9nRG93bmxvYWRDYWxs
YmFja3MiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25V
c2VybmFtZShKU1N0cmluZ1JlZiB1c2VybmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodXNl
cm5hbWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lIiwg
dG9XSyh1c2VybmFtZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhlbnRp
Y2F0aW9uUGFzc3dvcmQoSlNTdHJpbmdSZWYgcGFzc3dvcmQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0QXV0aGVudGljYXRpb25QYXNzd29yZCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKHBhc3N3b3JkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0QXV0aGVudGljYXRpb25QYXNz
d29yZCIsIHRvV0socGFzc3dvcmQpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpzZWN1
cmVFdmVudElucHV0SXNFbmFibGVkKCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZWN1cmVFdmVudElucHV0SXNFbmFibGVkIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRh
ID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlE
KHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29s
ZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEp
KS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5n
Qm9vbGVhbigiU2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCIpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldEJsb2NrQWxsUGx1Z2lucyhib29sIHNob3VsZEJsb2NrKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldEJsb2NrQWxsUGx1Z2lucyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkQmxv
Y2spKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRCbG9ja0FsbFBsdWdpbnMiLCBzaG91bGRCbG9j
ayk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2luU3VwcG9ydGVkTW9kZShKU1N0cmlu
Z1JlZiBtb2RlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFBsdWdpblN1cHBvcnRl
ZE1vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhtb2RlKSk7Ci0gICAgV0tCdW5kbGVQYWdl
UG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiU2V0UGx1Z2luU3VwcG9ydGVkTW9kZSIsIHRvV0sobW9kZSkuZ2V0KCkpOwogfQogCiBKU1Zh
bHVlUmVmIFRlc3RSdW5uZXI6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKCkKIHsKLSAgICBXS0J1bmRs
ZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250
ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAg
cmV0dXJuIEpTQzo6ZmFpbE5leHROZXdDb2RlQmxvY2soY29udGV4dCk7CisgICAgcmV0dXJuIEpT
Qzo6ZmFpbE5leHROZXdDb2RlQmxvY2sobWFpbkpTQ29udGV4dCgpKTsKIH0KIAotSlNWYWx1ZVJl
ZiBUZXN0UnVubmVyOjpudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWVSZWYgdGhlRnVuY3Rpb24p
CitKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiBm
dW5jdGlvbikKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFn
ZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkp
OwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0KG1haW5GcmFtZSk7Ci0gICAgcmV0dXJuIEpTQzo6bnVtYmVyT2ZERkdDb21waWxlcyhj
b250ZXh0LCB0aGVGdW5jdGlvbik7CisgICAgcmV0dXJuIEpTQzo6bnVtYmVyT2ZERkdDb21waWxl
cyhtYWluSlNDb250ZXh0KCksIGZ1bmN0aW9uKTsKIH0KIAotSlNWYWx1ZVJlZiBUZXN0UnVubmVy
OjpuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgdGhlRnVuY3Rpb24pCitKU1ZhbHVlUmVm
IFRlc3RSdW5uZXI6Om5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiBmdW5jdGlvbikKIHsK
LSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5G
cmFtZSk7Ci0gICAgcmV0dXJuIEpTQzo6c2V0TmV2ZXJJbmxpbmUoY29udGV4dCwgdGhlRnVuY3Rp
b24pOworICAgIHJldHVybiBKU0M6OnNldE5ldmVySW5saW5lKG1haW5KU0NvbnRleHQoKSwgZnVu
Y3Rpb24pOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Q
b2xpY3lBZnRlckRlbGF5KGJvb2wgdmFsdWUpCiB7CiAgICAgbV9zaG91bGREZWNpZGVOYXZpZ2F0
aW9uUG9saWN5QWZ0ZXJEZWxheSA9IHZhbHVlOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5IikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2
YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xp
Y3lBZnRlckRlbGF5IiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZERl
Y2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheShib29sIHZhbHVlKQogewogICAgIG1fc2hvdWxk
RGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5ID0gdmFsdWU7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5IikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZERlY2lkZVJlc3Bv
bnNlUG9saWN5QWZ0ZXJEZWxheSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRO
YXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZCIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkIiwg
dmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGlt
aXRzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0SWdub3Jlc1Zp
ZXdwb3J0U2NhbGVMaW1pdHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiU2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKGJvb2wg
dmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U2hvdWxkRG93bmxvYWRVbmRp
c3BsYXlhYmxlTUlNRVR5cGVzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIlNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyIsIHZhbHVlKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5k
TW90aW9uQWNjZXNzKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGRBbGxvd0RldmljZU9yaWVu
dGF0aW9uQW5kTW90aW9uQWNjZXNzIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZSgiVGVybWluYXRlTmV0d29ya1Byb2Nlc3MiKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVGVybWluYXRlU2VydmljZVdvcmtlcnMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzIik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzIiwgdmFsdWUpOwogfQogCiBzdGF0aWMgdW5zaWdu
ZWQgbmV4dFVJU2NyaXB0Q2FsbGJhY2tJRCgpCkBAIC0xMzE0LDk3ICsxMTQ5LDQ4IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0LCBKU1ZhbHVlUmVmIGNh
bGxiYWNrKQogewogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBuZXh0VUlTY3JpcHRDYWxsYmFj
a0lEKCk7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soY2FsbGJhY2tJRCwgY2FsbGJhY2sp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUnVuVUlQcm9jZXNzU2NyaXB0IikpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gdGVzdERpY3Rpb25hcnkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc2NyaXB0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2NyaXB0IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRWYWx1
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoc2NyaXB0KSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IGNhbGxiYWNrSURWYWx1ZSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY2FsbGJh
Y2tJRCkpOwotCi0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbSh0ZXN0RGljdGlvbmFyeS5nZXQoKSwg
c2NyaXB0S2V5LmdldCgpLCBzY3JpcHRWYWx1ZS5nZXQoKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbSh0ZXN0RGljdGlvbmFyeS5nZXQoKSwgY2FsbGJhY2tJREtleS5nZXQoKSwgY2FsbGJhY2tJ
RFZhbHVlLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHRlc3RE
aWN0aW9uYXJ5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJ1blVJUHJvY2Vzc1Njcmlw
dCIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlNjcmlwdCIsIHRvV0soc2NyaXB0
KSB9LAorICAgICAgICB7ICJDYWxsYmFja0lEIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjYWxs
YmFja0lEKSkuZ2V0KCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
cnVuVUlTY3JpcHRJbW1lZGlhdGVseShKU1N0cmluZ1JlZiBzY3JpcHQsIEpTVmFsdWVSZWYgY2Fs
bGJhY2spCiB7CiAgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9IG5leHRVSVNjcmlwdENhbGxiYWNr
SUQoKTsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhjYWxsYmFja0lELCBjYWxsYmFjayk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSdW5VSVByb2Nlc3NTY3JpcHRJbW1lZGlhdGVs
eSIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IHRlc3REaWN0
aW9uYXJ5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNjcmlwdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c2NyaXB0VmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHNjcmlwdCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwotICAgIFdLUmV0
YWluUHRyPFdLVUludDY0UmVmPiBjYWxsYmFja0lEVmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGNhbGxiYWNrSUQpKTsKLQotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0odGVzdERpY3Rpb25h
cnkuZ2V0KCksIHNjcmlwdEtleS5nZXQoKSwgc2NyaXB0VmFsdWUuZ2V0KCkpOwotICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0odGVzdERpY3Rpb25hcnkuZ2V0KCksIGNhbGxiYWNrSURLZXkuZ2V0KCks
IGNhbGxiYWNrSURWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCB0ZXN0RGljdGlvbmFyeS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJSdW5VSVBy
b2Nlc3NTY3JpcHRJbW1lZGlhdGVseSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsg
IlNjcmlwdCIsIHRvV0soc2NyaXB0KSB9LAorICAgICAgICB7ICJDYWxsYmFja0lEIiwgYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShjYWxsYmFja0lEKSkuZ2V0KCkgfSwKKyAgICB9KS5nZXQoKSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHRDYWxsYmFjayh1bnNpZ25lZCBjYWxsYmFj
a0lELCBKU1N0cmluZ1JlZiByZXN1bHQpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotCi0gICAgSlNWYWx1ZVJlZiByZXN1
bHRWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIHJlc3VsdCk7CisgICAgSlNWYWx1
ZVJlZiByZXN1bHRWYWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKG1haW5KU0NvbnRleHQoKSwgcmVz
dWx0KTsKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKGNhbGxiYWNrSUQsIDEsICZyZXN1bHRW
YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dlZE1lbnVBY3Rpb25zKEpTVmFs
dWVSZWYgYWN0aW9ucykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBbGxvd2VkTWVu
dUFjdGlvbnMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLQotICAgIGF1dG8gcGFnZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBhdXRvIG1h
aW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKLSAgICBhdXRvIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICBh
dXRvIGxlbmd0aFByb3BlcnR5TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJsZW5ndGgiKSk7CisgICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
QXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogICAg
IGF1dG8gYWN0aW9uc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFjdGlvbnMsIG51
bGxwdHIpOwotICAgIGF1dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRl
eHQsIGFjdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKTsKLSAg
ICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBhY3Rpb25zQXJyYXksIGksIDApOwotICAgICAgICBpZiAoIUpT
VmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBhdXRvIGFjdGlvbk5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIHZhbHVlLCAwKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhY3Rpb24g
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGFjdGlvbk5hbWUuZ2V0KCkpKTsK
LSAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFjdGlvbi5nZXQo
KSk7CisgICAgYXV0byBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBhY3Rpb25zQXJyYXkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBh
dXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYWN0aW9uc0Fy
cmF5LCBpLCBudWxscHRyKTsKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2FnZUJvZHku
Z2V0KCksIHRvV0tTdHJpbmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsKICAgICB9Ci0KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0QWxsb3dlZE1lbnVBY3Rpb25zIiwg
bWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxDdXN0b21N
ZW51QWN0aW9uKEpTU3RyaW5nUmVmIG5hbWUsIGJvb2wgZGlzbWlzc2VzQXV0b21hdGljYWxseSwg
SlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhDdXN0
b21NZW51QWN0aW9uQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRh
YmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm5hbWUiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVWYWx1ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcobmFtZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0
KCksIG5hbWVLZXkuZ2V0KCksIG5hbWVWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gZGlzbWlzc2VzQXV0b21hdGljYWxseUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImRpc21pc3Nlc0F1dG9tYXRpY2FsbHkiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5VmFsdWUgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZShkaXNtaXNzZXNBdXRvbWF0aWNhbGx5KSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgZGlzbWlzc2VzQXV0b21hdGljYWxseUtl
eS5nZXQoKSwgZGlzbWlzc2VzQXV0b21hdGljYWxseVZhbHVlLmdldCgpKTsKLQotICAgIFdLQnVu
ZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkluc3RhbGxDdXN0b21NZW51QWN0aW9uIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsK
KyAgICAgICAgeyAibmFtZSIsIHRvV0sobmFtZSkgfSwKKyAgICAgICAgeyAiZGlzbWlzc2VzQXV0
b21hdGljYWxseSIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGRpc21pc3Nlc0F1dG9tYXRpY2Fs
bHkpKS5nZXQoKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0
YWxsRGlkQmVnaW5Td2lwZUNhbGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spCkBAIC0xNDQ5LDU4
ICsxMjM1LDMwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZVN3aXBlU25hcHNob3RD
YWxsYmFjaygpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJTdGF0aXN0aWNzRGF0YUZvckRvbWFp
bihKU1N0cmluZ1JlZiBkb21haW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJT
dGF0aXN0aWNzRGF0YUZvckRvbWFpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGRvbWFpbikp
OwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ2xlYXJTdGF0aXN0aWNzRGF0
YUZvckRvbWFpbiIsIHRvV0soZG9tYWluKS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6
ZG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSh1bnNpZ25lZCBkb21haW5JRCkK
IHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb21haW5JRCIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGRvbWFpbklEKSkpOwotCi0gICAgVmVj
dG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBl
UmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0
KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFi
YXNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7
Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
cmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkp
LmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuKCJEb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFiYXNlIiwgY3JlYXRlV0tE
aWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiRG9tYWluSUQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KGRvbWFpbklEKSkgfQorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzRW5hYmxlZChib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFN0YXRpc3RpY3NFbmFibGVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc0VuYWJsZWQiLCB2YWx1ZSk7
CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzRXBoZW1lcmFsKCkKIHsKLSAgICBh
dXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SXNTdGF0aXN0aWNzRXBoZW1lcmFsIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVs
bHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVy
bkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0
VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQo
KSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVh
bigiSXNTdGF0aXN0aWNzRXBoZW1lcmFsIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc0RlYnVnTW9kZShib29sIHZhbHVlLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NEZWJ1Z01vZGVD
YWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdL
QnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJT
ZXRTdGF0aXN0aWNzRGVidWdNb2RlIiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NDYWxsRGlkU2V0RGVidWdNb2RlQ2FsbGJhY2soKQpAQCAtMTUxMSwxMCArMTI2OSw3
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXREZWJ1Z01vZGVDYWxsYmFj
aygpCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2VGb3JEZWJ1Z01vZGVDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAg
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
Rm9yRGVidWdNb2RlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBX
S0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgi
U2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlIiwgdG9XSyhob3N0TmFt
ZSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGVDYWxsYmFjaygpCkBAIC0xNTI2LDI3ICsxMjgxLDEw
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKEpTU3RyaW5nUmVmIGhv
c3ROYW1lLCBkb3VibGUgc2Vjb25kcywgSlNWCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJh
Y2soU2V0U3RhdGlzdGljc0xhc3RTZWVuQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwog
Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUp
KSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNy
ZWF0ZShzZWNvbmRzKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhr
ZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXpl
KCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkg
ewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVz
W2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzTGFzdFNlZW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9u
YXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMu
ZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdL
QnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJT
ZXRTdGF0aXN0aWNzTGFzdFNlZW4iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJI
b3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgdG9XSyhzZWNv
bmRzKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNz
Q2FsbERpZFNldExhc3RTZWVuQ2FsbGJhY2soKQpAQCAtMTU1OCw0OSArMTI5NiwxOCBAQCB2b2lk
IFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyhKU1N0cmluZ1JlZiBob3N0
TmFtZSwgSlNTdHJpbmdSZWYgdAogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0
YXRpc3RpY3NNZXJnZVN0YXRpc3RpY0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVG9wRnJhbWVEb21haW4xIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVEb21haW4xKSkpOwotICAgIAotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lRG9t
YWluMiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpT
U3RyaW5nKHRvcEZyYW1lRG9tYWluMikpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxhc3RTZWVuIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUobGFzdFNlZW4pKSk7Ci0KLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYWRVc2VySW50ZXJhY3Rp
b24iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNl
ckludGVyYWN0aW9uKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b24pKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJJc0dyYW5kZmF0aGVyZWQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhlcmVkKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNQcmV2YWxlbnQiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKSk7Ci0K
LSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJ
c1ZlcnlQcmV2YWxlbnQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUoaXNWZXJ5UHJldmFsZW50KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGF0YVJlY29yZHNSZW1vdmVkIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZGF0YVJlY29yZHNSZW1vdmVkKSkp
OwotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBW
ZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9
IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsK
LSAgICB9Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc01lcmdlU3RhdGlz
dGljIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljIiwg
Y3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1l
KSB9LAorICAgICAgICB7ICJUb3BGcmFtZURvbWFpbjEiLCB0b1dLKHRvcEZyYW1lRG9tYWluMSkg
fSwKKyAgICAgICAgeyAiVG9wRnJhbWVEb21haW4yIiwgdG9XSyh0b3BGcmFtZURvbWFpbjIpIH0s
CisgICAgICAgIHsgIkxhc3RTZWVuIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShsYXN0U2Vlbikp
IH0sCisgICAgICAgIHsgIkhhZFVzZXJJbnRlcmFjdGlvbiIsIGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKGhhZFVzZXJJbnRlcmFjdGlvbikpIH0sCisgICAgICAgIHsgIk1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb24iLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b24pKSB9LAorICAgICAgICB7ICJJc0dyYW5kZmF0aGVyZWQiLCBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShpc0dyYW5kZmF0aGVyZWQpKSB9LAorICAgICAgICB7ICJJc1ByZXZhbGVudCIsIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkgfSwKKyAgICAgICAgeyAiSXNWZXJ5UHJl
dmFsZW50IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNWZXJ5UHJldmFsZW50KSkgfSwKKyAg
ICAgICAgeyAiRGF0YVJlY29yZHNSZW1vdmVkIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkYXRh
UmVjb3Jkc1JlbW92ZWQpKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzQ2FsbERpZFNldE1lcmdlU3RhdGlzdGljQ2FsbGJhY2soKQpAQCAtMTYxMiwz
MSArMTMxOSwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlz
dGljKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIGhhZFVzZQogewogICAgIGNhY2hlVGVzdFJ1
bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljQ2FsbGJhY2tJRCwgY29t
cGxldGlvbkhhbmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4g
a2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhob3N0TmFtZSkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYWRVc2VySW50ZXJhY3Rpb24pKSk7Ci0KLSAg
ICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1Nj
aGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJl
bW92YWwpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJc1ByZXZhbGVudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdS
ZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVl
cyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAg
cmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVh
dGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3Nh
Z2UoIlNldFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsK
KyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJIYWRV
c2VySW50ZXJhY3Rpb24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYWRVc2VySW50ZXJhY3Rp
b24pKSB9LAorICAgICAgICB7ICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFs
IiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCkpIH0sCisgICAgICAgIHsgIklzUHJldmFsZW50IiwgYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUoaXNQcmV2YWxlbnQpKSB9CisgICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0RXhwaXJlZFN0YXRpc3RpY0NhbGxiYWNrKCkKQEAgLTE2
NDgsMjkgKzEzMzYsMTAgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUKIHsKICAgICBjYWNoZVRl
c3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VDYWxsYmFja0lE
LCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0K
LSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
b3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0
cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAg
cmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVz
LnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdW
YWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlD
cmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7
Ci0KLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0
TWVzc2FnZSgiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIiwgY3JlYXRlV0tEaWN0aW9u
YXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7
ICJWYWx1ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRQcmV2YWxlbnRS
ZXNvdXJjZUNhbGxiYWNrKCkKQEAgLTE2ODIsMjkgKzEzNTEsMTAgQEAgdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1l
LCBib29sIHYKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzVmVy
eVByZXZhbGVudFJlc291cmNlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVmFsdWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dmFsdWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZl
Y3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUo
KSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tp
XSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQo
KTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1Zl
cnlQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCks
IHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRp
c3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAg
ICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZUNh
bGxiYWNrKCkKQEAgLTE3MTQsMTM4ICsxMzY0LDUxIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlz
dGljc0NhbGxEaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2VDYWxsYmFjaygpCiAgICAgCiB2b2lk
IFRlc3RSdW5uZXI6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyIpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiZHVtcFJlc291cmNlTG9hZFN0
YXRpc3RpY3MiKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRh
dGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFs
dWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7
CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigi
SXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiLCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9
CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKEpT
U3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlz
dGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RO
YW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRv
cHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAg
cmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0
aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQog
CiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIoSlNTdHJpbmdSZWYgc3VicmVzb3VyY2VIb3N0LCBKU1N0cmluZ1JlZiB0b3BGcmFtZUhvc3Qp
CiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1YnJlc291cmNlSG9zdCIp
KSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KHN1YnJlc291cmNlSG9zdCkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3QiKSkpOwotICAgIHZhbHVlcy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZUhvc3QpKSk7
Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAg
ICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tl
eXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0u
Z2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGlj
c1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0
aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tl
eXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLVHlw
ZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEp
OwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBl
SUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRB
c1N1YnJlc291cmNlVW5kZXIiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJTdWJy
ZXNvdXJjZUhvc3QiLCB0b1dLKHN1YnJlc291cmNlSG9zdCkgfSwKKyAgICAgICAgeyAiVG9wRnJh
bWVIb3N0IiwgdG9XSyh0b3BGcmFtZUhvc3QpIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiBib29s
IFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoSlNTdHJp
bmdSZWYgc3ViRnJhbWVIb3N0LCBKU1N0cmluZ1JlZiB0b3BGcmFtZUhvc3QpCiB7Ci0gICAgVmVj
dG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViRnJhbWVIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoc3ViRnJhbWVIb3N0KSkpOwot
ICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlRvcEZyYW1lSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1lSG9zdCkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJh
d1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAg
ICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdL
ZXlzLnNpemUoKSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5E
YXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZh
bHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkp
OworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4o
IklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiLCBjcmVhdGVXS0RpY3Rpb25h
cnkoeworICAgICAgICB7ICJTdWJGcmFtZUhvc3QiLCB0b1dLKHN1YkZyYW1lSG9zdCkgfSwKKyAg
ICAgICAgeyAiVG9wRnJhbWVIb3N0IiwgdG9XSyh0b3BGcmFtZUhvc3QpIH0sCisgICAgfSkuZ2V0
KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8oSlNTdHJpbmdSZWYgaG9zdFJlZGlyZWN0ZWRGcm9tLCBKU1N0cmluZ1JlZiBob3N0
UmVkaXJlY3RlZFRvKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtl
eXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAg
ICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0
UmVkaXJlY3RlZEZyb20iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyhob3N0UmVkaXJlY3RlZEZyb20pKSk7Ci0gICAgCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdFJlZGlyZWN0
ZWRUbyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpT
U3RyaW5nKGhvc3RSZWRpcmVjdGVkVG8pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVm
PiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXMo
dmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJh
d1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Rp
Y3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMu
c2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEp
ID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUo
YWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNT
dGF0aXN0aWNzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7
CisgICAgICAgIHsgIkhvc3RSZWRpcmVjdGVkRnJvbSIsIHRvV0soaG9zdFJlZGlyZWN0ZWRGcm9t
KSB9LAorICAgICAgICB7ICJIb3N0UmVkaXJlY3RlZFRvIiwgdG9XSyhob3N0UmVkaXJlY3RlZFRv
KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlLCBK
U1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxi
YWNrKFNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb25DYWxsYmFja0lELCBjb21wbGV0
aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlz
OwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5h
bWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdS
ZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tl
eXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXpl
KCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkg
ewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVz
W2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNy
ZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsK
LSAgICAKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIsIGNyZWF0ZVdL
RGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAg
ICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0sCisgICAg
fSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0SGFz
SGFkVXNlckludGVyYWN0aW9uQ2FsbGJhY2soKQpAQCAtMTg1NSwyNjEgKzE0MTgsOTUgQEAgdm9p
ZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbkNh
bGxiYWNrKCkKIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJh
Y3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcoaG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJu
RGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRW
YWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgp
KTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
KCJJc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKTsKIH0KIAogYm9vbCBUZXN0UnVu
bmVyOjppc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UoSlNTdHJpbmdSZWYgc3ViSG9zdCwg
SlNTdHJpbmdSZWYgdG9wSG9zdCkKIHsKLSAgICAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1
ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdWJIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcoc3ViSG9zdCkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BIb3N0IikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wSG9zdCkpKTsKLSAg
ICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZl
Y3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0g
a2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwot
ICAgIH0KLQotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UiKSk7Ci0gICAgYXV0
byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLVHlwZVJlZiByZXR1
cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFT
U0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0g
ICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZSIs
IGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIlN1Ykhvc3QiLCB0b1dLKHN1Ykhvc3Qp
IH0sCisgICAgICAgIHsgIlRvcEhvc3QiLCB0b1dLKHRvcEhvc3QpIH0sCisgICAgfSkuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKEpTU3Ry
aW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZh
bHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOwotICAgIAotICAg
IFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdW
YWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5y
ZXNpemUodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwot
ICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpOwotICAg
IFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGlj
dGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5z
aXplKCkpKTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0
YXRpc3RpY3NHcmFuZGZhdGhlcmVkIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAi
SG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1ZSIsIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRVc2VJVFBEYXRhYmFzZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAg
ICAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFVzZUlUUERhdGFiYXNl
IiwgdmFsdWUpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0dyYW5kZmF0aGVy
ZWQoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNT
dGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1l
KSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRX
SyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0
dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0
aWNzR3JhbmRmYXRoZXJlZCIsIHRvV0soaG9zdE5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKEpTU3RyaW5n
UmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiB0b3BGcmFtZUhvc3ROYW1lKQogewotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRv
cEZyYW1lSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZUhvc3ROYW1lKSkpOwotICAgIAotICAgIFZlY3RvcjxX
S1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4g
cmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQo
KTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVz
LmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4iLCBjcmVhdGVX
S0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisg
ICAgICAgIHsgIlRvcEZyYW1lSG9zdE5hbWUiLCB0b1dLKHRvcEZyYW1lSG9zdE5hbWUpIH0sCisg
ICAgfSkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVm
IHRvcEZyYW1lSG9zdE5hbWUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
Pj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAg
IAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Ikhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFtZSIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1l
SG9zdE5hbWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMu
c2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0g
PSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4iKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9u
YXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUo
KSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbiIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAg
ICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVI
b3N0TmFtZSIsIHRvV0sodG9wRnJhbWVIb3N0TmFtZSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byhKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8p
CiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5h
bWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZVJlZGlyZWN0ZWRUbykp
KTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwot
ICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3
S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tp
XS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlz
dGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rp
Y3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3
S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUi
LCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIsIHRv
V0soaG9zdE5hbWVSZWRpcmVjdGVkVG8pIH0sCisgICAgfSkuZ2V0KCkpOwogfQogCiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKEpT
U3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKQog
ewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1l
KSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZVJlZGlyZWN0ZWRGcm9t
KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7
Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICBy
YXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVz
W2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0
aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20iKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRl
KHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RGcm9tIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9z
dE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJIb3N0TmFtZVJlZGlyZWN0ZWRG
cm9tIiwgdG9XSyhob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKSB9LAorICAgIH0pLmdldCgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRv
KEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBKU1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRUbykK
IHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFt
ZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSkp
OwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0g
ICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdL
ZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ld
LmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0
aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlz
LmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0VG8iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0so
aG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJlY3RlZFRvIiwgdG9XSyhob3N0
TmFtZVJlZGlyZWN0ZWRUbykgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKEpTU3RyaW5nUmVmIGhv
c3ROYW1lLCBKU1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKQogewotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAot
ICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhv
c3ROYW1lUmVkaXJlY3RlZEZyb20iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKSkpOwotICAgIAot
ICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9y
PFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0g
a2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwot
ICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzVG9wRnJh
bWVVbmlxdWVSZWRpcmVjdEZyb20iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9t
IiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3RO
YW1lKSB9LAorICAgICAgICB7ICJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIiwgdG9XSyhob3N0TmFt
ZVJlZGlyZWN0ZWRGcm9tKSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbihKU1N0cmluZ1Jl
ZiBmcm9tSG9zdCwgSlNTdHJpbmdSZWYgdG9Ib3N0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+
IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJGcm9tSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGZyb21Ib3N0KSkpOwotICAgIAotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvSG9zdCIpKSk7Ci0g
ICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvSG9z
dCkpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkp
OwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
cmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVl
c1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3Rh
dGlzdGljc0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3Jl
YXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc0Nyb3NzU2l0
ZUxvYWRXaXRoTGlua0RlY29yYXRpb24iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7
ICJGcm9tSG9zdCIsIHRvV0soZnJvbUhvc3QpIH0sCisgICAgICAgIHsgIlRvSG9zdCIsIHRvV0so
dG9Ib3N0KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcykKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
biIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIiwgc2Vjb25kcyk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVj
b3Jkc0NhbGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spCkBAIC0yMTQ3LDEyICsxNTQ0LDkgQEAg
dm9pZCBUZXN0UnVubmVyOjppbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNr
KEpTVmFsdWVSZWYgY2FsbGJhY2spCiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NE
aWRSdW5UZWxlbWV0cnlDYWxsYmFjayh1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNl
cywgdW5zaWduZWQgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9u
LCB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sIHVuc2lnbmVkIHRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNT
aW5jZVVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3AzTnVt
YmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVUksIHVuc2lnbmVkIHRvcDNNZWRpYW5TdWJGcmFt
ZVdpdGhvdXRVSSwgdW5zaWduZWQgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJLCB1bnNp
Z25lZCB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJLCB1bnNpZ25lZCB0b3AzTWVk
aWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYg
bWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAKICAgICBTdHJp
bmcgc3RyaW5nID0gbWFrZVN0cmluZygieyBcIm51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzXCIg
OiAiLCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlcywgIiwgXCJudW1iZXJPZlByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25cIiA6ICIsIG51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgIiwgXCJudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb25cIiA6ICIsIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbiwgIiwgXCJ0b3BQcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50
ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25cIiA6ICIsIHRvcFByZXZhbGVudFJlc291
cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiwgIiwgXCJtZWRp
YW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJh
Y3Rpb25cIiA6ICIsIG1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291
cmNlV2l0aFVzZXJJbnRlcmFjdGlvbiwgIiwgXCJ0b3AzTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRoVUlcIiA6ICIsIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSwgIiwg
XCJ0b3AzTWVkaWFuU3ViRnJhbWVXaXRob3V0VUlcIiA6ICIsIHRvcDNNZWRpYW5TdWJGcmFtZVdp
dGhvdXRVSSwgIiwgXCJ0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUlcIiA6ICIsIHRvcDNN
ZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSSwgIiwgXCJ0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3Rz
V2l0aG91dFVJXCIgOiAiLCB0b3AzTWVkaWFuVW5pcXVlUmVkaXJlY3RzV2l0aG91dFVJLCAiLCBc
InRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUlcIiA6ICIsIHRvcDNNZWRpYW5E
YXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUksICIgfSIpOwogICAgIAotICAgIEpTVmFsdWVSZWYg
cmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhjb250ZXh0LCBhZG9wdChKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmcudXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKKyAg
ICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcobWFpbkpTQ29u
dGV4dCgpLCBjcmVhdGVKU1N0cmluZyhzdHJpbmcudXRmOCgpLmRhdGEoKSkuZ2V0KCkpOwogCiAg
ICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJh
Y2tJRCwgMSwgJnJlc3VsdCk7CiB9CkBAIC0yMTY0LDE2ICsxNTU4LDE0IEBAIGJvb2wgVGVzdFJ1
bm5lcjo6c3RhdGlzdGljc05vdGlmeU9ic2VydmVyKCkKIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMiKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1VwZGF0ZUNv
b2tpZUJsb2NraW5nKEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVU
ZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNldEJsb2NrQ29va2llc0Zvckhvc3RDYWxs
YmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
dGF0aXN0aWNzVXBkYXRlQ29va2llQmxvY2tpbmciKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1VwZGF0ZUNvb2tpZUJsb2Nr
aW5nIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRCbG9ja0Nv
b2tpZXNGb3JIb3N0Q2FsbGJhY2soKQpAQCAtMjE4MywxMzUgKzE1NzUsODMgQEAgdm9pZCBUZXN0
UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEJsb2NrQ29va2llc0Zvckhvc3RDYWxsYmFjaygp
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSgpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSIpKTsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSIpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlz
dGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIsIHZhbHVlKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdChib29sIHZhbHVlKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0IikpOwot
ICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U3RhdGlzdGljc1NldElzUnVubmluZ1Rlc3QiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGlj
c1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3Rh
dGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIiwg
dmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVt
b3ZhbCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92
YWwiLCBzZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRm
YXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
b3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzR3JhbmRm
YXRoZXJpbmdUaW1lIiwgc2Vjb25kcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkIGVudHJpZXMpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoZW50cmll
cykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TWF4U3RhdGlzdGlj
c0VudHJpZXMiLCBlbnRyaWVzKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCBlbnRyaWVzKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldFBydW5lRW50cmllc0Rvd25UbyIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1R5cGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShlbnRyaWVzKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRQcnVuZUVudHJpZXNEb3du
VG8iLCBlbnRyaWVzKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBj
YWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnRTdG9yZUNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpOwotICAgIFdL
QnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3ND
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91
cnModW5zaWduZWQgaG91cnMsIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZENsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3Rv
cmVDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0
aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3VycyIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShob3VycykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3VycyIsIGhvdXJzKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsKEpTVmFsdWVSZWYg
Y2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZENs
ZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbENhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURh
dGFSZW1vdmFsIikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9z
dE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QoSlNTdHJp
bmdSZWYgaG9zdE5hbWUsIGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcykKIHsKLSAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0
cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5jbHVkZUh0
dHBPbmx5Q29va2llcyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSkpOwotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVm
PiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlz
LnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgp
KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAg
ICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0g
dmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRp
c3RpY3NEZWxldGVDb29raWVzRm9ySG9zdCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25h
cnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5k
YXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QiLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUp
IH0sCisgICAgICAgIHsgIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiLCBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShpbmNsdWRlSHR0cE9ubHlDb29raWVzKSkgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAK
IGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlKEpTU3RyaW5nUmVm
IGhvc3ROYW1lKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiKSk7Ci0gICAg
YXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9z
dE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShh
ZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAg
ICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0
YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiLCB0b1dLKGhvc3ROYW1lKS5nZXQoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwKGRvdWJsZSBzZWNvbmRz
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNh
cCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIlNldFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCIsIHNlY29uZHMpOwogfQogCiBib29s
IFRlc3RSdW5uZXI6Omhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24oSlNTdHJpbmdSZWYgaG9z
dE5hbWUpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24iKSk7Ci0gICAgYXV0
byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5h
bWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0g
V0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9w
dFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICBy
ZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJIYXNTdGF0
aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlcihib29sIHZh
bHVlLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjMyMCw5ICsxNjYwLDcgQEAg
dm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoYm9v
bCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb20KICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGNhY2hl
VGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJl
ckNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZh
bHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
cG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlciIsIHZhbHVl
KTsKICAgICBtX2hhc1NldERvd25ncmFkZVJlZmVycmVyQ2FsbGJhY2sgPSB0cnVlOwogfQogCkBA
IC0yMzM4LDExICsxNjc2LDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1Nob3Vs
ZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRTaG91
bGRCbG9ja1RoaXJkUGFydHlDb29raWVzQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFy
dHlDb29raWVzIikpOworICAgIGF1dG8gbWVzc2FnZU5hbWUgPSAiU2V0U3RhdGlzdGljc1Nob3Vs
ZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiOwogICAgIGlmIChvbmx5T25TaXRlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24pCi0gICAgICAgIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tp
ZXNPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsK
LSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAgICAgbWVz
c2FnZU5hbWUgPSAiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNPblNp
dGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiI7CisgICAgcG9zdE1lc3NhZ2UobWVzc2FnZU5hbWUs
IHZhbHVlKTsKICAgICBtX2hhc1NldEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNDYWxsYmFjayA9IHRy
dWU7CiB9CiAKQEAgLTIzNTgsOSArMTY5NSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKGJvb2wgdmFsdWUsIEpTVmFsCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NE
aWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUNhbGxiYWNrSUQsIGNvbXBsZXRp
b25IYW5kbGVyKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAg
V0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2Uo
IlNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSIsIHZhbHVlKTsK
ICAgICBtX2hhc1NldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlQ2FsbGJhY2sgPSB0
cnVlOwogfQogCkBAIC0yMzgzLDEwICsxNzE4LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0
aWNzQ2FsbENsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbENhbGxiYWNrKCkKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzKEpTU3RyaW5nUmVm
IGhvc3ROYW1lLCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVz
dFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0Nh
bGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU2V0VG9TYW1l
U2l0ZVN0cmljdENvb2tpZXMiKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU3RhdGlzdGljc1NldFRv
U2FtZVNpdGVTdHJpY3RDb29raWVzIiwgdG9XSyhob3N0TmFtZSkuZ2V0KCkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXND
YWxsYmFjaygpCkBAIC0yMzk4LDI3ICsxNzMwLDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlz
dGljc0NhbGxEaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0NhbGxiYWNrKCkKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc1NldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4oSlNTdHJpbmdS
ZWYgZmlyc3RQYXJ0eVVSTFN0cmluZywgSlNTdHJpbmdSZWYgY25hbWVVUkxTdHJpbmcsIEpTVmFs
dWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2so
U3RhdGlzdGljc0RpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFja0lELCBjb21w
bGV0aW9uSGFuZGxlcik7Ci0KLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBr
ZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRmly
c3RQYXJ0eVVSTCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aEpTU3RyaW5nKGZpcnN0UGFydHlVUkxTdHJpbmcpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBl
bmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ05BTUUiKSkpOwotICAg
IHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhjbmFtZVVS
TFN0cmluZykpKTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5z
aXplKCkpOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsK
LSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9
IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldEZpcnN0UGFydHlI
b3N0Q05BTUVEb21haW4iKSk7Ci0gICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0
aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNp
emUoKSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAg
IHBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkZpcnN0UGFydHlVUkwiLCB0b1dLKGZpcnN0
UGFydHlVUkxTdHJpbmcpIH0sCisgICAgICAgIHsgIkNOQU1FIiwgdG9XSyhjbmFtZVVSTFN0cmlu
ZykgfSwKKyAgICB9KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Nh
bGxEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAtMjQyOSwxMCAr
MTc0NCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRGaXJzdFBhcnR5
SG9zdENOQU1FRG9tYWluQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0
VGhpcmRQYXJ0eUNOQU1FRG9tYWluKEpTU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nLCBKU1ZhbHVl
UmVmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0
YXRpc3RpY3NEaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW5DYWxsYmFja0lELCBjb21wbGV0aW9u
SGFuZGxlcik7Ci0KLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKTsK
LSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
ZyhjbmFtZVVSTFN0cmluZykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9t
YWluIiwgdG9XSyhjbmFtZVVSTFN0cmluZykuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJhY2soKQpAQCAt
MjQ0Myw5ICsxNzU1LDggQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRo
aXJkUGFydHlDTkFNRURvbWFpbkNhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGlj
c1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkUmVzZXRUb0NvbnNpc3Rl
bnRTdGF0ZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICAKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSIpKTsKLSAgICBX
S0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworCisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3Rp
Y3NSZXNldFRvQ29uc2lzdGVudFN0YXRlIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlz
dGljc0NhbGxEaWRSZXNldFRvQ29uc2lzdGVudFN0YXRlQ2FsbGJhY2soKQpAQCAtMjQ4Niw5NSAr
MTc5Nyw0NiBAQCB2b2lkIFRlc3RSdW5uZXI6OnRleHRGaWVsZERpZEVuZEVkaXRpbmdDYWxsYmFj
aygpCiB2b2lkIFRlc3RSdW5uZXI6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKEpTVmFsdWVS
ZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soQWxsU3RvcmFnZUFj
Y2Vzc0VudHJpZXNDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiR2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0TWVzc2FnZSgiR2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMiKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VB
Y2Nlc3NFbnRyaWVzQ2FsbGJhY2soVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCitzdGF0aWMgSlNW
YWx1ZVJlZiBtYWtlRG9tYWluc1ZhbHVlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQog
ewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlND
b250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFp
bkZyYW1lKTsKLSAgICAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJbIik7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OworICAgIGJ1aWxkZXIuYXBwZW5kKCdbJyk7CiAgICAgYm9vbCBmaXJzdERvbWFpbiA9IHRydWU7
CiAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0gICAgICAgIGlmIChmaXJzdERv
bWFpbikKLSAgICAgICAgICAgIGZpcnN0RG9tYWluID0gZmFsc2U7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChkb21haW4pOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiIik7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZpcnN0RG9tYWluID8gIlwiIiA6ICIsIFwiIiwgZG9t
YWluLCAnIicpOworICAgICAgICBmaXJzdERvbWFpbiA9IGZhbHNlOwogICAgIH0KLSAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIl0iKTsKLSAgICAKLSAgICBKU1ZhbHVlUmVmIHJlc3Vs
dCA9IEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcoY29udGV4dCwgYWRvcHQoSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
KS5nZXQoKSk7Ci0KKyAgICBidWlsZGVyLmFwcGVuZCgnXScpOworICAgIHJldHVybiBKU1ZhbHVl
TWFrZUZyb21KU09OU3RyaW5nKG1haW5KU0NvbnRleHQoKSwgY3JlYXRlSlNTdHJpbmcoYnVpbGRl
ci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpLmdldCgpKTsKK30KK3ZvaWQgVGVzdFJ1bm5lcjo6
Y2FsbERpZFJlY2VpdmVBbGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrKFZlY3RvcjxTdHJp
bmc+JiBkb21haW5zKQoreworICAgIGF1dG8gcmVzdWx0ID0gbWFrZURvbWFpbnNWYWx1ZShkb21h
aW5zKTsKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVz
Q2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6bG9hZGVkU3Vi
cmVzb3VyY2VEb21haW5zKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVu
bmVyQ2FsbGJhY2soTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2tJRCwgY2FsbGJhY2sp
OwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxvYWRlZFN1YnJlc291cmNlRG9tYWlu
cyIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RNZXNzYWdl
KCJMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjYWxs
RGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKFZlY3RvcjxTdHJpbmc+
JiYgZG9tYWlucykKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxl
UGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgCi0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdbJyk7Ci0gICAgYm9vbCBpc0ZpcnN0RG9t
YWluID0gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAgICAg
aWYgKGlzRmlyc3REb21haW4pCi0gICAgICAgICAgICBpc0ZpcnN0RG9tYWluID0gZmFsc2U7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAi
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChkb21haW4pOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIlwiIik7Ci0gICAgfQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCddJyk7Ci0g
ICAgCi0gICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNv
bnRleHQsIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOwotCisgICAgYXV0byByZXN1bHQgPSBt
YWtlRG9tYWluc1ZhbHVlKGRvbWFpbnMpOwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soTG9h
ZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2tJRCwgMSwgJnJlc3VsdCk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6YWRkTW9ja01lZGlhRGV2aWNlKEpTU3RyaW5nUmVmIHBlcnNpc3RlbnRJZCwg
SlNTdHJpbmdSZWYgbGFiZWwsIGNvbnN0IGNoYXIqIHR5cGUpCiB7Ci0gICAgVmVjdG9yPFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBl
UmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUGVyc2lzdGVudElEIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRvV0so
cGVyc2lzdGVudElkKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGxhYmVs
KSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJUeXBlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcodHlwZSkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5
czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUo
a2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3
S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tp
XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRNb2NrTWVkaWFE
ZXZpY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0
YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNz
YWdlKCJBZGRNb2NrTWVkaWFEZXZpY2UiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7
ICJQZXJzaXN0ZW50SUQiLCB0b1dLKHBlcnNpc3RlbnRJZCkgfSwKKyAgICAgICAgeyAiTGFiZWwi
LCB0b1dLKGxhYmVsKSB9LAorICAgICAgICB7ICJUeXBlIiwgdG9XSyh0eXBlKSB9LAorICAgIH0p
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrQ2FtZXJhRGV2aWNlKEpTU3Ry
aW5nUmVmIHBlcnNpc3RlbnRJZCwgSlNTdHJpbmdSZWYgbGFiZWwpCkBAIC0yNTk0LDE1MyArMTg1
Niw3MiBAQCB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTY3JlZW5EZXZpY2UoSlNTdHJpbmdSZWYg
cGVyc2lzdGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbAogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFy
TW9ja01lZGlhRGV2aWNlcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJNb2Nr
TWVkaWFEZXZpY2VzIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxs
cHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhck1vY2tNZWRp
YURldmljZXMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVNb2NrTWVkaWFEZXZpY2Uo
SlNTdHJpbmdSZWYgcGVyc2lzdGVudElkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJl
bW92ZU1vY2tNZWRpYURldmljZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3Nh
Z2VCb2R5KHRvV0socGVyc2lzdGVudElkKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIlJlbW92ZU1vY2tNZWRpYURldmljZSIsIHRvV0socGVyc2lzdGVudElkKSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRNb2NrTWVkaWFEZXZpY2VzKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJSZXNldE1vY2tNZWRpYURldmljZXMiKSk7Ci0gICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlJlc2V0TW9ja01lZGlhRGV2aWNlcyIpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldE1vY2tDYW1lcmFPcmllbnRhdGlvbih1bnNpZ25lZCBvcmllbnRhdGlvbikKIHsKLSAg
ICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKG9yaWVudGF0aW9uKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iLCBvcmllbnRhdGlvbik7
CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVu
YWJsZWQoKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJJc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCIp
KTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRh
dGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlckVuYWJsZWQiKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKKwogdm9pZCBUZXN0UnVu
bmVyOjpjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ29ubmVjdE1vY2tHYW1lcGFkIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0KLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNvbm5lY3RNb2NrR2FtZXBhZCIsIGlu
ZGV4KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dhbWVwYWQodW5zaWdu
ZWQgaW5kZXgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlzY29ubmVjdE1vY2tHYW1l
cGFkIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoIkRpc2Nvbm5lY3RNb2NrR2FtZXBhZCIsIGluZGV4KTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRNb2NrR2FtZXBhZERldGFpbHModW5zaWduZWQgaW5kZXgsIEpTU3RyaW5nUmVmIGdh
bWVwYWRJRCwgSlNTdHJpbmdSZWYgbWFwcGluZywgdW5zaWduZWQgYXhpc0NvdW50LCB1bnNpZ25l
ZCBidXR0b25Db3VudCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBr
ZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBr
ZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFk
SUQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhnYW1lcGFkSUQpKTsKLQotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1hcHBpbmciKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhtYXBwaW5nKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwot
ICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXND
b3VudCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXND
b3VudCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkJ1dHRvbkNvdW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tV
SW50NjRDcmVhdGUoYnV0dG9uQ291bnQpKSk7Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJh
d0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVz
aXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1
ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dh
bWVwYWREZXRhaWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFs
dWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZSgiU2V0TW9ja0dhbWVwYWREZXRhaWxzIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsK
KyAgICAgICAgeyAiR2FtZXBhZElEIiwgdG9XSyhnYW1lcGFkSUQpIH0sCisgICAgICAgIHsgIk1h
cHBpbmciLCB0b1dLKG1hcHBpbmcpIH0sCisgICAgICAgIHsgIkdhbWVwYWRJbmRleCIsIGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJBeGlzQ291bnQiLCBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGF4aXNDb3VudCkpIH0sCisgICAgICAgIHsgIkJ1dHRvbkNvdW50
IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25Db3VudCkpIH0sCisgICAgfSkuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKHVuc2lnbmVk
IGluZGV4LCB1bnNpZ25lZCBheGlzSW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF4aXNJbmRleCIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpKTsKLQotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikp
KTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSk7Ci0K
LSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4g
cmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1
ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwot
ICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5
Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkp
OwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZEF4
aXNWYWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkdhbWVwYWRJbmRleCIs
IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJBeGlzSW5kZXgi
LCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGF4aXNJbmRleCkpIH0sCisgICAgICAgIHsgIlZhbHVl
IiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkuZ2V0KCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWduZWQgaW5k
ZXgsIHVuc2lnbmVkIGJ1dHRvbkluZGV4LCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tU
eXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b25JbmRleCIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbkluZGV4KSkpOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpKTsK
LQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVm
PiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1Zh
bHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7
Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlv
bmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXpl
KCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0TW9ja0dhbWVw
YWRCdXR0b25WYWx1ZSIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkdhbWVwYWRJ
bmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKSB9LAorICAgICAgICB7ICJCdXR0
b25JbmRleCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uSW5kZXgpKSB9LAorICAgICAg
ICB7ICJWYWx1ZSIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKSB9LAorICAgIH0pLmdl
dCgpKTsKIH0KKwogI2Vsc2UKKwogdm9pZCBUZXN0UnVubmVyOjpjb25uZWN0TW9ja0dhbWVwYWQo
dW5zaWduZWQpCiB7CiB9CkBAIC0yNzYwLDMwICsxOTQxLDI1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUodW5zaWduZWQsIHVuc2lnbmVkLCBkb3VibGUpCiB2b2lk
IFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWduZWQsIHVuc2lnbmVk
LCBkb3VibGUpCiB7CiB9CisKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0T3BlblBhbmVsRmlsZXMoSlNWYWx1ZVJlZiBmaWxlc1ZhbHVlKQogewotICAgIFdL
QnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKSk7CisgICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSBtYWluSlNDb250ZXh0KCk7CiAKICAgICBpZiAoIUpTVmFsdWVJc0Fy
cmF5KGNvbnRleHQsIGZpbGVzVmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09iamVj
dFJlZiBmaWxlcyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBmaWxlc1ZhbHVlLCBudWxscHRy
KTsKLSAgICBzdGF0aWMgYXV0byBsZW5ndGhQcm9wZXJ0eSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBmaWxlc0xlbmd0aFZh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBmaWxlcywgbGVuZ3RoUHJvcGVydHku
Z2V0KCksIG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGZpbGVz
TGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGZpbGVzID0gKEpTT2Jq
ZWN0UmVmKWZpbGVzVmFsdWU7CiAgICAgYXV0byBmaWxlVVJMcyA9IGFkb3B0V0soV0tNdXRhYmxl
QXJyYXlDcmVhdGUoKSk7Ci0gICAgYXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVf
dD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsK
KyAgICBhdXRvIGZpbGVzTGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgZmlsZXMpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1Zh
bHVlUmVmIGZpbGVWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZp
bGVzLCBpLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwg
ZmlsZVZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gZmlsZSA9
IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgZmlsZVZhbHVlLCBudWxscHRyKSk7
CisgICAgICAgIGF1dG8gZmlsZSA9IGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1ZSk7
CiAgICAgICAgIHNpemVfdCBmaWxlQnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhD
U3RyaW5nU2l6ZShmaWxlLmdldCgpKSArIDE7CiAgICAgICAgIGF1dG8gZmlsZUJ1ZmZlciA9IG1h
a2VVbmlxdWVBcnJheTxjaGFyPihmaWxlQnVmZmVyU2l6ZSk7CiAgICAgICAgIEpTU3RyaW5nR2V0
VVRGOENTdHJpbmcoZmlsZS5nZXQoKSwgZmlsZUJ1ZmZlci5nZXQoKSwgZmlsZUJ1ZmZlclNpemUp
OwpAQCAtMjc5NywyMiArMTk3MywxNSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZp
bGVzKEpTVmFsdWVSZWYgZmlsZXNWYWx1ZSkKIAogICAgIH0KIAotICAgIHN0YXRpYyBhdXRvIG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0T3Bl
blBhbmVsRmlsZVVSTHMiKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVz
c2FnZU5hbWUuZ2V0KCksIGZpbGVVUkxzLmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNl
dE9wZW5QYW5lbEZpbGVVUkxzIiwgZmlsZVVSTHMuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldE9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKEpTVmFsdWVSZWYgZGF0YSkKIHsKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwotICAgIEpTQ29udGV4dFJlZiBjb250
ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShwYWdlKSk7Ci0KLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKTsKICAgICAvLyBGSVhNRSAoMTIzMDU4KTogVXNlIGEgSlNDIEFQSSB0
byBnZXQgYnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBleHBvc2VkLgotICAgIFdLUmV0YWlu
UHRyPFdLRGF0YVJlZj4gaWNvbkRhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJv
bVVJbnQ4QXJyYXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKTsKLQot
ICAgIHN0YXRpYyBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0T3BlblBhbmVsRmlsZVVSTHNNZWRpYUljb24iKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCksIGljb25EYXRhLmdldCgp
KTsKKyAgICBhdXRvIGljb25EYXRhID0gYWRvcHRXSyhXS0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21V
SW50OEFycmF5KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWFpbkpTQ29u
dGV4dCgpLCBkYXRhKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRPcGVuUGFuZWxGaWxlVVJM
c01lZGlhSWNvbiIsIGljb25EYXRhLmdldCgpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRh
dGEpOwogI2VuZGlmCkBAIC0yODIxLDExICsxOTkwLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRP
cGVuUGFuZWxGaWxlc01lZGlhSWNvbihKU1ZhbHVlUmVmIGRhdGEpCiB2b2lkIFRlc3RSdW5uZXI6
OnJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFscyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAg
IGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0Nh
bGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZW1v
dmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUpKTsKLSAgICAKLSAg
ICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2Fn
ZSgiUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzIiwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6Y2FsbERpZFJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFsc0NhbGxiYWNrKCkKQEAgLTI4
MzUsNDkgKzIwMDAsMzMgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlQWxsU2Vzc2lv
bkNyZWRlbnRpYWxzQ2FsbGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGUo
SlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRE9N
Q2FjaGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyRE9NQ2FjaGUiLCB0b1dLKG9yaWdpbikuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGVzKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJDbGVhckRPTUNhY2hlcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZSgiQ2xlYXJET01DYWNoZXMiKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNET01DYWNoZShK
U1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFzRE9NQ2Fj
aGUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBXS1R5cGVSZWYgcmV0
dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBB
U1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwot
ICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFn
ZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJIYXNET01DYWNoZSIsIHRvV0sob3JpZ2luKS5nZXQo
KSk7CiB9CiAKIHVpbnQ2NF90IFRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZShKU1N0cmluZ1JlZiBv
cmlnaW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRE9NQ2FjaGVTaXplIikpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcob3JpZ2luKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBu
dWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgcmV0dXJuIFdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVybkRhdGEpKTsKKyAgICBy
ZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50NjQoIkRPTUNhY2hl
U2l6ZSIsIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxs
b3dTdG9yYWdlUXVvdGFJbmNyZWFzZShib29sIHdpbGxJbmNyZWFzZSkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIikpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZSh3aWxsSW5jcmVhc2UpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdl
KCJTZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlIiwgd2lsbEluY3JlYXNlKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpnZXRBcHBsaWNhdGlvbk1hbmlmZXN0VGhlbihKU1ZhbHVlUmVmIGNhbGxi
YWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKEdldEFwcGxpY2F0aW9uTWFuaWZl
c3RDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
R2V0QXBwbGljYXRpb25NYW5pZmVzdCIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RNZXNzYWdlKCJHZXRBcHBsaWNhdGlvbk1hbmlmZXN0Iik7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6ZGlkR2V0QXBwbGljYXRpb25NYW5pZmVzdCgpCkBAIC0yODk3LDIyMSAr
MjA0NiwxMzAgQEAgc2l6ZV90IFRlc3RSdW5uZXI6OnVzZXJTY3JpcHRJbmplY3RlZENvdW50KCkg
Y29uc3QKIAogdm9pZCBUZXN0UnVubmVyOjppbmplY3RVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNj
cmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbmplY3RVc2VyU2NyaXB0IikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoc2NyaXB0KSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkluamVjdFVzZXJTY3JpcHQiLCB0b1dLKHNj
cmlwdCkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNlbmREaXNwbGF5Q29uZmlndXJh
dGlvbkNoYW5nZWRNZXNzYWdlRm9yVGVzdGluZygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nIikpOwot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAg
ICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2Vk
TWVzc2FnZUZvclRlc3RpbmciKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTZXJ2aWNlV29y
a2VyRmV0Y2hUaW1lb3V0KGRvdWJsZSBzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
b3VibGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7
Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTZXJ2aWNlV29ya2VyRmV0
Y2hUaW1lb3V0Iiwgc2Vjb25kcyk7CiB9CiAKIC8vIFdlYkF1dGhuCiB2b2lkIFRlc3RSdW5uZXI6
OmFkZFRlc3RLZXlUb0tleWNoYWluKEpTU3RyaW5nUmVmIHByaXZhdGVLZXlCYXNlNjQsIEpTU3Ry
aW5nUmVmIGF0dHJMYWJlbCwgSlNTdHJpbmdSZWYgYXBwbGljYXRpb25UYWdCYXNlNjQpCiB7Ci0g
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUHJpdmF0ZUtleSIpKSk7Ci0gICAgdmFsdWVz
LmFwcGVuZCh0b1dLKHByaXZhdGVLZXlCYXNlNjQpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZCh0b1dLKGF0dHJMYWJlbCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25UYWciKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQodG9XSyhhcHBsaWNhdGlvblRhZ0Jhc2U2NCkpOwotCi0gICAgVmVjdG9yPFdL
U3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAg
ICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1
ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsr
aSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFs
dWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkFkZFRlc3RLZXlUb0tleWNoYWluIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFy
eVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRh
dGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQWRkVGVzdEtleVRvS2V5Y2hhaW4iLCBjcmVhdGVXS0Rp
Y3Rpb25hcnkoeworICAgICAgICB7ICJQcml2YXRlS2V5IiwgdG9XSyhwcml2YXRlS2V5QmFzZTY0
KSB9LAorICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAgICAg
eyAiQXBwbGljYXRpb25UYWciLCB0b1dLKGFwcGxpY2F0aW9uVGFnQmFzZTY0KSB9LAorICAgIH0p
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhblVwS2V5Y2hhaW4oSlNTdHJpbmdS
ZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KQogewotICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZCh0b1dLKGF0dHJMYWJlbCkpOwotCi0gICAgaWYgKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQp
IHsKLSAgICAgICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQXBwbGljYXRpb25MYWJlbCIpKSk7Ci0gICAgICAgIHZhbHVlcy5hcHBlbmQodG9XSyhh
cHBsaWNhdGlvbkxhYmVsQmFzZTY0KSk7Ci0gICAgfQotCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVm
PiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlz
LnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgp
KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAg
ICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0g
dmFsdWVzW2ldLmdldCgpOworICAgIGlmICghYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgeworICAg
ICAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhblVwS2V5Y2hhaW4iLCBjcmVhdGVXS0Rp
Y3Rpb25hcnkoeworICAgICAgICAgICAgeyAiQXR0ckxhYmVsIiwgdG9XSyhhdHRyTGFiZWwpIH0s
CisgICAgICAgIH0pLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNsZWFuVXBLZXljaGFpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rp
Y3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3
S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIp
OworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFuVXBLZXljaGFpbiIsIGNyZWF0ZVdL
RGljdGlvbmFyeSh7CisgICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAor
ICAgICAgICB7ICJBcHBsaWNhdGlvbkxhYmVsIiwgdG9XSyhhcHBsaWNhdGlvbkxhYmVsQmFzZTY0
KSB9LAorICAgIH0pLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjprZXlFeGlzdHNJbktl
eWNoYWluKEpTU3RyaW5nUmVmIGF0dHJMYWJlbCwgSlNTdHJpbmdSZWYgYXBwbGljYXRpb25MYWJl
bEJhc2U2NCkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFw
cGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSkp
OwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhhdHRyTGFiZWwpKTsKLQotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFiZWwi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQodG9XSyhhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSk7Ci0K
LSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4g
cmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1
ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwot
ICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiS2V5RXhpc3RzSW5LZXljaGFpbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVh
dGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0K
LSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNT
RVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VSZXR1cm5pbmdCb29sZWFuKCJLZXlFeGlzdHNJbktleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9u
YXJ5KHsKKyAgICAgICAgeyAiQXR0ckxhYmVsIiwgdG9XSyhhdHRyTGFiZWwpIH0sCisgICAgICAg
IHsgIkFwcGxpY2F0aW9uTGFiZWwiLCB0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpIH0sCisg
ICAgfSkuZ2V0KCkpOwogfQogCiB1bnNpZ25lZCBsb25nIFRlc3RSdW5uZXI6OnNlcnZlclRydXN0
RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50IikpOwotICAgIFdLVHlw
ZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25v
dXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNT
RVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAg
IHJldHVybiBXS1VJbnQ2NEdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VS
ZXR1cm5pbmdVSW50NjQoIlNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCIp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRz
QXN5bmNocm9ub3VzbHkoYm9vbCBzaG91bGREaXNtaXNzQXN5bmNocm9ub3VzbHkpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hy
b25vdXNseSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkRGlzbWlzc0FzeW5jaHJvbm91c2x5KSk7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTaG91bGREaXNtaXNzSmF2YVNjcmlw
dEFsZXJ0c0FzeW5jaHJvbm91c2x5Iiwgc2hvdWxkRGlzbWlzc0FzeW5jaHJvbm91c2x5KTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjphYm9ydE1vZGFsKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJBYm9ydE1vZGFsIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBu
dWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJBYm9ydE1vZGFs
Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbigpCiB7Ci0g
ICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkR1bXBBZENsaWNrQXR0cmlidXRpb24iKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkR1bXBBZENsaWNrQXR0cmlidXRpb24iKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpCiB7Ci0gICAgYXV0byBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFy
QWRDbGlja0F0dHJpYnV0aW9uIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c1BhZ2VNZXNzYWdlKCJDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbiIpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92
YWwoKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbnNUaHJvdWdoV2Vic2l0ZURhdGFS
ZW1vdmFsIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBu
dWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhckFkQ2xpY2tBdHRyaWJ1
dGlvbnNUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlk
ZVRpbWVyRm9yVGVzdGluZyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlNldEFkQ2xpY2tB
dHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nIiwgdmFsdWUpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKEpT
U3RyaW5nUmVmIHVybFN0cmluZykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBZENs
aWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyIpKTsKLSAgICBhdXRvIHd0ZlVS
TFN0cmluZyA9IHRvV1RGU3RyaW5nKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHVybFN0cmlu
ZykpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tV
UkxDcmVhdGVXaXRoVVRGOENTdHJpbmcod3RmVVJMU3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2Uo
IlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nIiwKKyAgICAgICAg
YWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0b1dURlN0cmluZyh1cmxTdHJpbmcp
LnV0ZjgoKS5kYXRhKCkpKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6bWFya0FkQ2xpY2tBdHRy
aWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmciKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwg
bnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIk1hcmtBZENsaWNrQXR0
cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dE9mZnNjcmVlbkNhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJPZmZzY3JlZW5DYW52YXNFbmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJl
ZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVu
ZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQ
cmVmZXJlbmNlKCJPZmZzY3JlZW5DYW52YXNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIGJvb2wg
VGVzdFJ1bm5lcjo6aGFzQXBwQm91bmRTZXNzaW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFzQXBwQm91bmRTZXNz
aW9uIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAmcmV0
dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLQotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4g
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJIYXNBcHBCb3VuZFNl
c3Npb24iKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcEJvdW5kU2Vzc2lvbigpCiB7
Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNsZWFyQXBwQm91bmRTZXNzaW9uIikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdl
KCJDbGVhckFwcEJvdW5kU2Vzc2lvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFwcEJv
dW5kRG9tYWlucyhKU1ZhbHVlUmVmIG9yaWdpbkFycmF5LCBKU1ZhbHVlUmVmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKERpZFNldEFwcEJvdW5kRG9t
YWluc0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIEpTQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKTsK
KyAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKIAogICAgIGlmICgh
SlNWYWx1ZUlzQXJyYXkoY29udGV4dCwgb3JpZ2luQXJyYXkpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBKU09iamVjdFJlZiBvcmlnaW5zID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9yaWdp
bkFycmF5LCBudWxscHRyKTsKLSAgICBzdGF0aWMgYXV0byBsZW5ndGhQcm9wZXJ0eSA9IGFkb3B0
KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJl
ZiBvcmlnaW5zTGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9yaWdp
bnMsIGxlbmd0aFByb3BlcnR5LmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAoIUpTVmFsdWVJc051
bWJlcihjb250ZXh0LCBvcmlnaW5zTGVuZ3RoVmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBhdXRvIG9yaWdpbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3JpZ2luQXJyYXksIG51
bGxwdHIpOwogICAgIGF1dG8gb3JpZ2luVVJMcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7Ci0gICAgYXV0byBvcmlnaW5zTGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgb3JpZ2luc0xlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcmlnaW5zTGVuZ3RoOyArK2kpIHsKKyAgICBhdXRvIG9y
aWdpbnNMZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBvcmlnaW5zKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgb3JpZ2luc0xlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWVS
ZWYgb3JpZ2luVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvcmln
aW5zLCBpLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwg
b3JpZ2luVmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBvcmln
aW4gPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIG9yaWdpblZhbHVlLCBudWxs
cHRyKSk7CisgICAgICAgIGF1dG8gb3JpZ2luID0gY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgb3Jp
Z2luVmFsdWUpOwogICAgICAgICBzaXplX3Qgb3JpZ2luQnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0
TWF4aW11bVVURjhDU3RyaW5nU2l6ZShvcmlnaW4uZ2V0KCkpICsgMTsKICAgICAgICAgYXV0byBv
cmlnaW5CdWZmZXIgPSBtYWtlVW5pcXVlQXJyYXk8Y2hhcj4ob3JpZ2luQnVmZmVyU2l6ZSk7CiAg
ICAgICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcob3JpZ2luLmdldCgpLCBvcmlnaW5CdWZmZXIu
Z2V0KCksIG9yaWdpbkJ1ZmZlclNpemUpOwpAQCAtMzExOSw3ICsyMTc3LDcgQEAgdm9pZCBUZXN0
UnVubmVyOjpzZXRBcHBCb3VuZERvbWFpbnMoSlNWYWx1ZVJlZiBvcmlnaW5BcnJheSwgSlNWYWx1
ZVJlZiBjb21wbGV0aW8KICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0ob3JpZ2luVVJMcy5nZXQo
KSwgYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhvcmlnaW5CdWZmZXIuZ2V0KCkp
KS5nZXQoKSk7CiAgICAgfQogCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFwcEJvdW5kRG9tYWlucyIpKTsKKyAgICBhdXRv
IG1lc3NhZ2VOYW1lID0gdG9XSygiU2V0QXBwQm91bmREb21haW5zIik7CiAgICAgV0tCdW5kbGVQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBvcmlnaW5VUkxzLmdldCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCBjMGExNDA5MDVlZGYz
ZGRhNGE3NjFhYjYyMDdkOTdiNDM2MjA4NmJiLi4yZmZmZjJlZjk1ZDA0ZDkyMGVhOTkzMzBlODQ3
OTBjMDU2NTY2MGE5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL1Rlc3RSdW5uZXIuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gSlNX
cmFwcGFibGUKICAgICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCk7CiAKLSAgICB2
b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmpl
Y3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZik7CiAKICAgICBib29sIGlzSU9TRmFtaWx5KCkgY29uc3QKICAgICB7CkBAIC0y
NTMsNyArMjUzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJu
c051bGwoYm9vbCBmKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwgPSBmOyB9CiAgICAg
Ym9vbCB3aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3dpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdDsgfQogICAgIHZvaWQgc2V0
V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGJvb2wgZikgeyBtX3dpbGxTZW5k
UmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCA9IGY7IH0KLSAgICB2b2lkIHNldFdpbGxTZW5k
UmVxdWVzdEFkZHNIVFRQQm9keShKU1N0cmluZ1JlZiBib2R5KSB7IG1fd2lsbFNlbmRSZXF1ZXN0
SFRUUEJvZHkgPSB0b1dURlN0cmluZyh0b1dLKGJvZHkpKTsgfQorICAgIHZvaWQgc2V0V2lsbFNl
bmRSZXF1ZXN0QWRkc0hUVFBCb2R5KEpTU3RyaW5nUmVmIGJvZHkpIHsgbV93aWxsU2VuZFJlcXVl
c3RIVFRQQm9keSA9IHRvV1RGU3RyaW5nKGJvZHkpOyB9CiAgICAgU3RyaW5nIHdpbGxTZW5kUmVx
dWVzdEhUVFBCb2R5KCkgY29uc3QgeyByZXR1cm4gbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keTsg
fQogCiAgICAgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmKTsKQEAgLTI4Niw3ICsy
ODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2soKTsKICAg
ICB2b2lkIGNhbGxTZXRCYWNraW5nU2NhbGVGYWN0b3JDYWxsYmFjaygpOwogCi0gICAgdm9pZCBv
dmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVyZW5jZSwgSlNTdHJpbmdSZWYgdmFs
dWUpOworICAgIHN0YXRpYyB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVm
ZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSk7CiAKICAgICAvLyBDb29raWVzIHRlc3RpbmcKICAg
ICB2b2lkIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCk7CkBAIC0zMDQsNyArMzA0LDcgQEAg
cHVibGljOgogCiAgICAgLy8gR2VvbG9jYXRpb24uCiAgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBl
cm1pc3Npb24oYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNWYWx1ZVJl
ZiBhbHRpdHVkZSwgSlNWYWx1ZVJlZiBhbHRpdHVkZUFjY3VyYWN5LCBKU1ZhbHVlUmVmIGhlYWRp
bmcsIEpTVmFsdWVSZWYgc3BlZWQsIEpTVmFsdWVSZWYgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBz
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8
ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlv
bmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9p
ZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoSlNTdHJpbmdSZWYg
bWVzc2FnZSk7CiAgICAgYm9vbCBpc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKTsKIApAQCAt
MzM1LDggKzMzNSw4IEBAIHB1YmxpYzoKICAgICBib29sIHNlY3VyZUV2ZW50SW5wdXRJc0VuYWJs
ZWQoKSBjb25zdDsKIAogICAgIEpTVmFsdWVSZWYgZmFpbE5leHROZXdDb2RlQmxvY2soKTsKLSAg
ICBKU1ZhbHVlUmVmIG51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbik7
Ci0gICAgSlNWYWx1ZVJlZiBuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgdGhlRnVuY3Rp
b24pOworICAgIEpTVmFsdWVSZWYgbnVtYmVyT2ZERkdDb21waWxlcyhKU1ZhbHVlUmVmIGZ1bmN0
aW9uKTsKKyAgICBKU1ZhbHVlUmVmIG5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiBmdW5j
dGlvbik7CiAKICAgICBib29sIHNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5
KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxh
eTsgfQogICAgIHZvaWQgc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXko
Ym9vbCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAppbmRleCA2NGFjODE5NzE1M2FhZTBhMGFi
NzFlYmJjMjk0MjQ4NGEzNWU2NWFkLi42ZTAwZDk5MjI1ZDFmMWFhYjI2MTU2Yzg5MjViMDU2NmEz
NjZkNzI5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCiAKKyNp
bmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUu
aCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKICNpbmNsdWRlICJKU1RleHRJbnB1
dENvbnRyb2xsZXIuaCIKQEAgLTQwLDMwICs0MSwxNCBAQCBSZWY8VGV4dElucHV0Q29udHJvbGxl
cj4gVGV4dElucHV0Q29udHJvbGxlcjo6Y3JlYXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBUZXh0SW5wdXRDb250cm9sbGVyKTsKIH0KIAotVGV4dElucHV0Q29udHJvbGxlcjo6VGV4dElu
cHV0Q29udHJvbGxlcigpCi17Ci19Ci0KLVRleHRJbnB1dENvbnRyb2xsZXI6On5UZXh0SW5wdXRD
b250cm9sbGVyKCkKLXsKLX0KLQogSlNDbGFzc1JlZiBUZXh0SW5wdXRDb250cm9sbGVyOjp3cmFw
cGVyQ2xhc3MoKQogewogICAgIHJldHVybiBKU1RleHRJbnB1dENvbnRyb2xsZXI6OnRleHRJbnB1
dENvbnRyb2xsZXJDbGFzcygpOwogfQogCi12b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VX
aW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVj
dCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjptYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNv
bnRleHQsIHdpbmRvd09iamVjdCwgInRleHRJbnB1dENvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBl
eGNlcHRpb24pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGFycmF5KQotewotICAgIGF1dG8gbGVuZ3RoU3RyaW5nID0g
YWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBpZiAo
YXV0byBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgYXJyYXksIGxl
bmd0aFN0cmluZy5nZXQoKSwgbnVsbHB0cikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCBudWxscHRyKSk7
Ci0gICAgcmV0dXJuIDA7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgInRl
eHRJbnB1dENvbnRyb2xsZXIiLCB0aGlzKTsKIH0KIAogc3RhdGljIFdLQXJyYXlSZWYgY3JlYXRl
Q29tcG9zaXRpb25IaWdobGlnaHREYXRhKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IGpzSGlnaGxpZ2h0c1ZhbHVlKQpAQCAtNzIsNTAgKzU3LDE5IEBAIHN0YXRpYyBXS0FycmF5UmVm
IGNyZWF0ZUNvbXBvc2l0aW9uSGlnaGxpZ2h0RGF0YShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byByZXN1bHQgPSBXS011
dGFibGVBcnJheUNyZWF0ZSgpOwotICAgIGF1dG8ganNIaWdobGlnaHRzQXJyYXkgPSBjb25zdF9j
YXN0PEpTT2JqZWN0UmVmPihqc0hpZ2hsaWdodHNWYWx1ZSk7Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYXJyYXlMZW5ndGgoY29udGV4dCwganNIaWdobGlnaHRzQXJyYXkpOwotICAgIGlmICghbGVu
Z3RoKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgYXV0byBqc0Zyb21LZXkgPSBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZnJvbSIpKTsKLSAgICBhdXRvIGpzTGVu
Z3RoS2V5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsK
LSAgICBhdXRvIGpzQ29sb3JLZXkgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiY29sb3IiKSk7Ci0KLSAgICBhdXRvIHdrRnJvbUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImZyb20iKSk7Ci0gICAgYXV0byB3a0xlbmd0aEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBhdXRvIHdr
Q29sb3JLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb2xvciIp
KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
SlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgICAgICBhdXRvIGpzT2JqZWN0VmFs
dWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBqc0hpZ2hsaWdodHNBcnJh
eSwgaSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24gfHwgIUpTVmFsdWVJc09i
amVjdChjb250ZXh0LCBqc09iamVjdFZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGF1dG8ganNPYmplY3QgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihqc09iamVjdFZh
bHVlKTsKLSAgICAgICAgYXV0byBqc0Zyb21WYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29u
dGV4dCwganNPYmplY3QsIGpzRnJvbUtleS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmICgh
anNGcm9tVmFsdWUgfHwgIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBqc0Zyb21WYWx1ZSkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIGpzTGVuZ3RoVmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIGpzT2JqZWN0LCBqc0xlbmd0aEtleS5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgICAgIGlmICghanNMZW5ndGhWYWx1ZSB8fCAhSlNWYWx1ZUlzTnVtYmVyKGNv
bnRleHQsIGpzTGVuZ3RoVmFsdWUpKQorICAgIGF1dG8gYXJyYXkgPSBjb25zdF9jYXN0PEpTT2Jq
ZWN0UmVmPihqc0hpZ2hsaWdodHNWYWx1ZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlM
ZW5ndGgoY29udGV4dCwgYXJyYXkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5k
ZXgoY29udGV4dCwgYXJyYXksIGksIG51bGxwdHIpOworICAgICAgICBpZiAoIXZhbHVlIHx8ICFK
U1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgYXV0byBqc0NvbG9yVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQs
IGpzT2JqZWN0LCBqc0NvbG9yS2V5LmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFqc0Nv
bG9yVmFsdWUgfHwgIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBqc0NvbG9yVmFsdWUpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBjb2xvciA9IGFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwganNDb2xvclZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgIGF1
dG8gd2tDb2xvciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoY29sb3IuZ2V0
KCkpKTsKLSAgICAgICAgYXV0byB3a0Zyb20gPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxyb3Vu
ZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNGcm9tVmFsdWUsIG51bGxwdHIpKSkpOwotICAg
ICAgICBhdXRvIHdrTGVuZ3RoID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShscm91bmQoSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGpzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKSkpOwotCisgICAgICAg
IGF1dG8gb2JqZWN0ID0gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUpOwogICAgICAgICBh
dXRvIGRpY3Rpb25hcnkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0g
ICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwgd2tGcm9tS2V5Lmdl
dCgpLCB3a0Zyb20uZ2V0KCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRpY3Rpb25h
cnkuZ2V0KCksIHdrTGVuZ3RoS2V5LmdldCgpLCB3a0xlbmd0aC5nZXQoKSk7Ci0gICAgICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwgd2tDb2xvcktleS5nZXQoKSwgd2tD
b2xvci5nZXQoKSk7CisgICAgICAgIHNldFZhbHVlKGRpY3Rpb25hcnksICJmcm9tIiwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KG51bWVyaWNQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsICJmcm9tIikp
KTsKKyAgICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImxlbmd0aCIsIHN0YXRpY19jYXN0PHVp
bnQ2NF90PihudW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIikpKTsKKyAg
ICAgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwgImNvbG9yIiwgdG9XSyhzdHJpbmdQcm9wZXJ0eShj
b250ZXh0LCBvYmplY3QsICJjb2xvciIpKS5nZXQoKSk7CiAgICAgICAgIFdLQXJyYXlBcHBlbmRJ
dGVtKHJlc3VsdCwgZGljdGlvbmFyeS5nZXQoKSk7CiAgICAgfQotCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXh0SW5wdXRDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaAppbmRleCA1NThjMmU2MTE0MDgxNzg1ZTNiN2Nh
ZTE5ZmVmZDM5NmFlYjM3YTk0Li5hNDRjMjhlODQ0MzkxNzI5MmE5YjM3YmNiN2UyNTUyZDEyMTQ0
Y2E0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
eHRJbnB1dENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaApAQCAtMjgsMTcgKzI4LDE3IEBACiAjaW5jbHVk
ZSAiSlNXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKK3R5cGVkZWYgY29uc3Qg
c3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3Bh
cXVlSlNTdHJpbmcqIEpTU3RyaW5nUmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNW
YWx1ZSogSlNWYWx1ZVJlZjsKKwogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIFRleHRJbnB1dENv
bnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgeworY2xhc3MgVGV4dElucHV0Q29udHJvbGxl
ciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxU
ZXh0SW5wdXRDb250cm9sbGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5UZXh0SW5wdXRDb250
cm9sbGVyKCk7Ci0KLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3
cmFwcGVyQ2xhc3MoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYs
IEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2
b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIHZvaWQgc2V0TWFya2Vk
VGV4dChKU1N0cmluZ1JlZiB0ZXh0LCBpbnQgZnJvbSwgaW50IGxlbmd0aCwgYm9vbCBzdXBwcmVz
c1VuZGVybGluZSwgSlNWYWx1ZVJlZiBoaWdobGlnaHRzKTsKICAgICBib29sIGhhc01hcmtlZFRl
eHQoKTsKQEAgLTQ2LDcgKzQ2LDkgQEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0VGV4dChKU1N0
cmluZ1JlZiB0ZXh0KTsKIAogcHJpdmF0ZToKLSAgICBUZXh0SW5wdXRDb250cm9sbGVyKCk7Cisg
ICAgVGV4dElucHV0Q29udHJvbGxlcigpID0gZGVmYXVsdDsKKworICAgIEpTQ2xhc3NSZWYgd3Jh
cHBlckNsYXNzKCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250
c0NvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9B
Y3RpdmF0ZUZvbnRzQ29jb2EubW0KaW5kZXggMDI0ZmU2MDU3M2I4ZjJjNTkyZWJmZGIzNWYzYTQ0
NDg1Y2RiOTc1Ni4uNWE1Yjc3ZWMxOTRkYTVmZTNmZmY5OTEzN2NlOWFjZDI2ZGZlNGMxZSAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3Rp
dmF0ZUZvbnRzQ29jb2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lk
IGFjdGl2YXRlRm9udHMoKQogCiB2b2lkIGluc3RhbGxGYWtlSGVsdmV0aWNhKFdLU3RyaW5nUmVm
IGNvbmZpZ3VyYXRpb24pCiB7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb25maWd1cmF0
aW9uU3RyaW5nID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBjb25maWd1cmF0aW9uKSk7CisgICAgYXV0byBjb25maWd1cmF0aW9uU3RyaW5nID0gYWRv
cHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0
aW9uKSk7CiAgICAgTlNVUkwgKnJlc291cmNlVVJMID0gW3Jlc291cmNlc0RpcmVjdG9yeVVSTCgp
IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IkZha2VIZWx2ZXRpY2EtJUAudHRmIiwgY29uZmlndXJhdGlvblN0cmluZy5nZXQoKV0gaXNEaXJl
Y3Rvcnk6Tk9dOwogICAgIENGRXJyb3JSZWYgZXJyb3IgPSBudWxscHRyOwogICAgIGlmICghQ1RG
b250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkwoKF9fYnJpZGdlIENGVVJMUmVmKXJlc291cmNl
VVJMLCBrQ1RGb250TWFuYWdlclNjb3BlUHJvY2VzcywgJmVycm9yKSkgewpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRs
ZVBhZ2VDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29j
b2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0KaW5kZXggODE3NjE4MjdhODgxZDA2ZGZlNzBh
OWJkMzIyNDczMmFlMTliY2YyOC4uOTFkMjQ5YzcyN2Y2ODc1ZWQ0YTRjY2YxNTljMGY3N2Q3MmY4
NWJkNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9j
b2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFnZUNvY29hLm1tCkBAIC00
NywxMyArNDcsMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnBsYXRmb3JtRGlkU3RhcnRQ
cm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmUKIAogU3RyaW5nIEluamVjdGVk
QnVuZGxlUGFnZTo6cGxhdGZvcm1SZXNwb25zZU1pbWVUeXBlKFdLVVJMUmVzcG9uc2VSZWYgcmVz
cG9uc2UpCiB7Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IG5zVVJMUmVzcG9uc2UgPSBh
ZG9wdE5TKFdLVVJMUmVzcG9uc2VDb3B5TlNVUkxSZXNwb25zZShyZXNwb25zZSkpOworICAgIGF1
dG8gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNl
KHJlc3BvbnNlKSk7CiAgICAgcmV0dXJuIFtuc1VSTFJlc3BvbnNlLmdldCgpIE1JTUVUeXBlXTsK
IH0KIAogdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpyZXNwb25zZUhlYWRlckNvdW50KFdL
VVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+
IG5zVVJMUmVzcG9uc2UgPSBhZG9wdE5TKFdLVVJMUmVzcG9uc2VDb3B5TlNVUkxSZXNwb25zZShy
ZXNwb25zZSkpOworICAgIGF1dG8gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25z
ZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICAgaWYgKCFbbnNVUkxSZXNwb25zZSBp
c0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKQogICAgICAgICByZXR1cm4g
eyB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCmluZGV4
IDg3Y2NkMjFjYTlhNzdhYTJkMGEyMWE0Y2FiNTIxY2FlZWZhOWM0YTIuLmM0MTgyMzBmM2I0ZmRl
NzE5YWM2Y2NjODRiNzQyZGJlY2ExNGQyNGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVySU9TLm1tCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQogewotICAg
IHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaW9zIikpOworICAg
IHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJpb3MiKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCkBAIC04OSw3ICs4OSw3IEBA
IHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoaWQgb2JqLCBOU1N0cmluZyAqaWRB
dHRyaWJ1dGUpCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmlidXRl
KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBpZCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZv
cm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFnZSkpOwogCiAgICAgaWQg
cmVzdWx0ID0gZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKHJvb3QsIFtOU1N0cmluZyBzdHJpbmdX
aXRoSlNTdHJpbmdSZWY6aWRBdHRyaWJ1dGVdKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0g
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tCmluZGV4IDUyMjM0YWE0ZDc0NzJjZGUwNzFkOWU4Njk2OTBkOTM1NTI5
YTIwZDIuLmJiYzhiYjE2Yzg2NGJjMjYxMGNmYWE2OWEwNmZkODEzYzc2OTVkMDQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQpAQCAtMTM2LDExICsxMzYsNiBA
QCBAZW5kCiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKQotewotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApKTsKLX0KLQogc3RhdGljIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBjb25jYXRlbmF0ZUF0dHJpYnV0ZUFuZFZhbHVlKE5TU3RyaW5nICphdHRy
aWJ1dGUsIE5TU3RyaW5nICp2YWx1ZSkKIHsKICAgICBWZWN0b3I8VW5pQ2hhcj4gYnVmZmVyKFth
dHRyaWJ1dGUgbGVuZ3RoXSk7CkBAIC0zMzAsMjcgKzMyNSwyNyBAQCBSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3coKQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mTGlua2VkVUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlu
a3MoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0
ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9mQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdS
ZWYgYXR0cmlidXRlKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAg
cmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBh
dHRyaWJ1dGUpCkBAIC0zODIsNyArMzc3LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmUKICAg
ICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhhdHRyaWJ1dGUsICJBWFRleHR1YWxD
b250ZXh0IikpCiAgICAgICAgIHJldHVybiBbW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5VGV4dHVh
bENvbnRleHRdIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1w
dHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBkb3VibGUg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYg
YXR0cmlidXRlKQpAQCAtNDQzLDE3ICs0MzgsMTcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVk
QXR0cmlidXRlTmFtZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1w
dHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSgpCiB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJp
bmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvbGVEZXNjcmlwdGlvbigpCkBAIC00NjMsMTMgKzQ1OCwxMiBAQCBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVk
Um9sZVN0cmluZygpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBjcmVh
dGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmRlc2NyaXB0aW9uKCkKQEAgLTQ3OSw3ICs0NzMsNyBAQCBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBj
b25zdAogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCkBAIC00ODksNyArNDgzLDcgQEAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdl
KCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aGVscFRleHQoKSBjb25zdApAQCAtNTQ5LDcgKzU0Myw3IEBAIGRvdWJsZSBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9uKCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVt
YmVyKCkKQEAgLTU4NCw3ICs1NzgsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
UmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNl
ZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsK
IH0KIApAQCAtNTk2LDEzICs1ODksMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1NlbGVjdGVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVj
dGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRl
cm1pbmF0ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtNjM4LDcgKzYyOSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAogewotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIC8vIHBhcmFtZXRlcml6ZWQgYXR0cmlidXRlcwpAQCAtNjU5LDcgKzY1MCw3IEBAIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyYW5nZUZvclBvc2l0
aW9uKGludCB4LCBpbnQgeSkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4g
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25l
ZCBsZW5ndGgpCkBAIC03MTMsMzIgKzcwNCwzMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0VGV4dFdpdGhDcml0ZXJpYShKU0NvbnRleAog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ29sdW1uSGVhZGVycygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpT
U3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlK
U1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRl
SlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNP
ZkhlYWRlcigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1
cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnRyYWl0cygpCkBAIC05MDMsMjMgKzg5NCwyMSBAQCB2b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5k
ZXgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENo
aWxkcmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFs
dWUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRl
RW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNv
ZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4g
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlK
U1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lzdGl2ZVRlY2hub2xvZ3lTaW11bGF0ZWRGb2N1cygpCkBA
IC0xMDE2LDMxICsxMDA1LDI2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1
c2FibGUoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJs
ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDb2xsYXBzZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEwNTIsMTMgKzEwMzYsMTEgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzU2luZ2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011
bHRpTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtMTA3NCwyMiArMTA1NiwxOCBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cG9wdXBWYWx1ZSgpIGNvbnN0CiAKIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmFkZFNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiAvLyBUZXh0IG1hcmtlcnMKQEAgLTExMzYsNyArMTExNCw3IEBA
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdG
b3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAgICAgaWQgdGV4dE1hcmtlcnMgPSBtYXJrZXJS
YW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKTsKICAgICBpZiAoIVt0ZXh0TWFya2VycyBp
c0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBjcmVhdGVFbXB0
eUpTU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVy
biBbW21fZWxlbWVudCBzdHJpbmdGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNT
dHJpbmdSZWZdOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvRXZlbnRTZW5kZXJQcm94eUlPUy5tbQppbmRleCBjYWIz
ZjE4YjM2NTlmNDkxNmJkNTAwODc5Mjg2ZDZhMjdjMGM5ZjkxLi5iMmUyODg0YTBiM2UzNmIyNDEy
MGYyMWQzZThiZGM3MWFkZDQ3MWIwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNlbmRlclByb3h5SU9TLm1tCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJT1MubW0K
QEAgLTM2LDIzICszNiwxMyBAQCBuYW1lc3BhY2UgV1RSIHsKIAogRXZlbnRTZW5kZXJQcm94eTo6
RXZlbnRTZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVzdENvbnRyb2xsZXIpCiAgICAgOiBt
X3Rlc3RDb250cm9sbGVyKHRlc3RDb250cm9sbGVyKQotICAgICwgbV90aW1lKDApCi0gICAgLCBt
X3Bvc2l0aW9uKCkKLSAgICAsIG1fbGVmdE1vdXNlQnV0dG9uRG93bihmYWxzZSkKLSAgICAsIG1f
Y2xpY2tDb3VudCgwKQotICAgICwgbV9jbGlja1RpbWUoMCkKLSAgICAsIG1fY2xpY2tQb3NpdGlv
bigpCi0gICAgLCBtX2NsaWNrQnV0dG9uKGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbikKLSAg
ICAsIGV2ZW50TnVtYmVyKDApCiB7CiAgICAgVU5VU0VEX1BBUkFNKG1fdGVzdENvbnRyb2xsZXIp
OwogICAgIFVOVVNFRF9QQVJBTShtX2xlZnRNb3VzZUJ1dHRvbkRvd24pOwogICAgIFVOVVNFRF9Q
QVJBTShldmVudE51bWJlcik7CiB9CiAKLUV2ZW50U2VuZGVyUHJveHk6On5FdmVudFNlbmRlclBy
b3h5KCkKLXsKLX0KK0V2ZW50U2VuZGVyUHJveHk6On5FdmVudFNlbmRlclByb3h5KCkgPSBkZWZh
dWx0OwogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24o
aW50IGJ1dHRvbikKIHsKQEAgLTcwLDE3ICs2MCwxNCBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6
OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKIAogdm9pZCBFdmVudFNlbmRl
clByb3h5Ojptb3VzZURvd24odW5zaWduZWQgYnV0dG9uTnVtYmVyLCBXS0V2ZW50TW9kaWZpZXJz
IG1vZGlmaWVycykKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclBy
b3h5Ojptb3VzZVVwKHVuc2lnbmVkIGJ1dHRvbk51bWJlciwgV0tFdmVudE1vZGlmaWVycyBtb2Rp
ZmllcnMpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
bW91c2VNb3ZlVG8oZG91YmxlIHgsIGRvdWJsZSB5KQogewotICAgIC8vIFdyaXRlIG1lLgogfQog
CiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCkBA
IC05MCw3OSArNzcsNjYgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpsZWFwRm9yd2FyZChpbnQg
bWlsbGlzZWNvbmRzKQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmtleURvd24oV0tTdHJpbmdS
ZWYga2V5LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgdW5zaWduZWQga2V5TG9jYXRpb24p
CiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VT
Y3JvbGxCeShpbnQgeCwgaW50IHkpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKGlu
dCB4LCBpbnQgeSwgaW50IHBoYXNlLCBpbnQgbW9tZW50dW0pCiB7Ci0gICAgLy8gV3JpdGUgbWUu
CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50
IHgsIGludCB5LCBib29sIHBhZ2VkKQogewotICAgIC8vIFdyaXRlIG1lLgogfQogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKKwogdm9pZCBFdmVudFNlbmRlclByb3h5OjphZGRUb3VjaFBvaW50
KGludCB4LCBpbnQgeSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRl
clByb3h5Ojp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQogewotICAg
IC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZp
ZXIoV0tFdmVudE1vZGlmaWVycywgYm9vbCBlbmFibGUpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9
CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVz
WCwgaW50IHJhZGl1c1kpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6dG91Y2hTdGFydCgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6dG91Y2hNb3ZlKCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9p
ZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaEVuZCgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAK
IHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5jZWwoKQogewotICAgIC8vIFdyaXRlIG1l
LgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNsZWFyVG91Y2hQb2ludHMoKQogewotICAg
IC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlbGVhc2VUb3VjaFBv
aW50KGludCBpbmRleCkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRl
clByb3h5OjpjYW5jZWxUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAgICAvLyBXcml0ZSBtZS4K
IH0KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5t
bSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxp
dHlDb21tb25NYWMubW0KaW5kZXggMjVlMGMzZDAwZTQ5YmIyYjVlZDIwM2UxOTBjZjFlY2M5MGRm
M2FmNC4uMzU0YThmNjU1NWM2YzAwMjY1ZjU2ODFhNmIzNzE1MmE4NGE1NjJjMCAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbW1vbk1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0
ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAKICNpbXBvcnQgIkpTV3JhcHBlci5oIgorI2lt
cG9ydCAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmlu
Z1JlZkNGLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KIApAQCAtNjEsMjYgKzYyLDIyIEBA
IENsYXNzIHdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQ2xhc3MoKQogICAgIHJldHVybiBj
bHM7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIG1ha2VBcnJheVJlZkZvckFycmF5KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBOU0FycmF5ICphcnJheSkKK3N0YXRpYyBKU09iamVjdFJlZiBtYWtlSlNB
cnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgTlNBcnJheSAqYXJyYXkpCiB7CiAgICAgTlNVSW50
ZWdlciBjb3VudCA9IGFycmF5LmNvdW50OwogICAgIEpTVmFsdWVSZWYgYXJndW1lbnRzW2NvdW50
XTsKLQogICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAg
IGFyZ3VtZW50c1tpXSA9IG1ha2VWYWx1ZVJlZkZvclZhbHVlKGNvbnRleHQsIFthcnJheSBvYmpl
Y3RBdEluZGV4OmldKTsKLQogICAgIHJldHVybiBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCBj
b3VudCwgYXJndW1lbnRzLCBudWxscHRyKTsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgbWFrZU9i
amVjdFJlZkZvckRpY3Rpb25hcnkoSlNDb250ZXh0UmVmIGNvbnRleHQsIE5TRGljdGlvbmFyeSAq
ZGljdGlvbmFyeSkKK3N0YXRpYyBKU09iamVjdFJlZiBtYWtlSlNPYmplY3QoSlNDb250ZXh0UmVm
IGNvbnRleHQsIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSkKIHsKLSAgICBKU09iamVjdFJlZiBv
YmplY3QgPSBKU09iamVjdE1ha2UoY29udGV4dCwgbnVsbHB0ciwgbnVsbHB0cik7Ci0KKyAgICBh
dXRvIG9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBudWxscHRyLCBudWxscHRyKTsKICAg
ICBbZGljdGlvbmFyeSBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU1N0cmlu
ZyAqa2V5LCBpZCBvYmosIEJPT0wgKikgewogICAgICAgICBpZiAoSlNWYWx1ZVJlZiBwcm9wZXJ0
eVZhbHVlID0gbWFrZVZhbHVlUmVmRm9yVmFsdWUoY29udGV4dCwgb2JqKSkKICAgICAgICAgICAg
IEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBba2V5IGNyZWF0ZUpTU3RyaW5n
UmVmXS5nZXQoKSwgcHJvcGVydHlWYWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxs
cHRyKTsKICAgICB9XTsKLQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKQEAgLTk2LDkgKzkzLDkg
QEAgSlNWYWx1ZVJlZiBtYWtlVmFsdWVSZWZGb3JWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwg
aWQgdmFsdWUpCiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOndlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQ2xhc3MoKV0pCiAgICAgICAgIHJldHVybiB0b0pTKGNvbnRleHQsIFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PFBsYXRmb3JtVUlFbGVt
ZW50Pih2YWx1ZSkpLnB0cigpKTsKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGlj
dGlvbmFyeSBjbGFzc11dKQotICAgICAgICByZXR1cm4gbWFrZU9iamVjdFJlZkZvckRpY3Rpb25h
cnkoY29udGV4dCwgdmFsdWUpOworICAgICAgICByZXR1cm4gbWFrZUpTT2JqZWN0KGNvbnRleHQs
IHZhbHVlKTsKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkK
LSAgICAgICAgcmV0dXJuIG1ha2VBcnJheVJlZkZvckFycmF5KGNvbnRleHQsIHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNvbnRleHQsIHZhbHVlKTsKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIApAQCAtMTE1LDI4ICsxMTIsMTYgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVk
aWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUK
IAogICAgIGlmIChzZWFyY2hLZXkpIHsKICAgICAgICAgaWQgc2VhcmNoS2V5UGFyYW1ldGVyID0g
bmlsOwotICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaEtleSkpIHsK
LSAgICAgICAgICAgIGF1dG8gc2VhcmNoS2V5U3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBzZWFyY2hLZXksIG51bGxwdHIpKTsKLSAgICAgICAgICAgIGlmIChzZWFy
Y2hLZXlTdHJpbmcpCi0gICAgICAgICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gW05TU3Ry
aW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hLZXlTdHJpbmcuZ2V0KCldOwotICAgICAg
ICB9IGVsc2UgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hLZXkpKSB7CisgICAg
ICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoS2V5KSkKKyAgICAgICAgICAg
IHNlYXJjaEtleVBhcmFtZXRlciA9IHRvV1RGU3RyaW5nKGNvbnRleHQsIHNlYXJjaEtleSk7Cisg
ICAgICAgIGVsc2UgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hLZXkpKSB7CiAg
ICAgICAgICAgICBKU09iamVjdFJlZiBzZWFyY2hLZXlBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBzZWFyY2hLZXksIG51bGxwdHIpOwotICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNo
S2V5QXJyYXlMZW5ndGggPSAwOwotCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5U3Ry
aW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAg
ICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0
R2V0UHJvcGVydHkoY29udGV4dCwgc2VhcmNoS2V5QXJyYXksIGxlbmd0aFByb3BlcnR5U3RyaW5n
LmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hLZXlBcnJheUxlbmd0aFZh
bHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVl
KSkKLSAgICAgICAgICAgICAgICBzZWFyY2hLZXlBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgc2VhcmNoS2V5QXJyYXlMZW5ndGhWYWx1
ZSwgbnVsbHB0cikpOwotCisgICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0
aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaEtleUFycmF5KTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hLZXlBcnJheUxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVy
dHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaEtleUFycmF5LCBpLCBudWxscHRyKTsKLSAgICAgICAg
ICAgICAgICBKU1N0cmluZ1JlZiBzZWFyY2hLZXlTdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIHNlYXJjaEtleVZhbHVlLCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBpZiAo
c2VhcmNoS2V5U3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc2VhcmNoS2V5UGFy
YW1ldGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gW05T
TXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEtleVBhcmFt
ZXRlciBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hLZXlT
dHJpbmddXTsKLSAgICAgICAgICAgICAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHNlYXJjaEtleVN0
cmluZyk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNoS2V5
ID0gdG9XVEZTdHJpbmcoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4
dCwgc2VhcmNoS2V5QXJyYXksIGksIG51bGxwdHIpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNl
YXJjaEtleVBhcmFtZXRlcikKKyAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVy
ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICAgICAgICAgICAgICBbc2VhcmNoS2V5UGFy
YW1ldGVyIGFkZE9iamVjdDpzZWFyY2hLZXldOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIGlmIChzZWFyY2hLZXlQYXJhbWV0ZXIpCkBAIC0xNDQsMTAgKzEyOSw5IEBAIE5TRGlj
dGlvbmFyeSAqc2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENy
aXRlcmlhKEpTQ29udGV4dFJlCiAgICAgfQogCiAgICAgaWYgKHNlYXJjaFRleHQgJiYgSlNTdHJp
bmdHZXRMZW5ndGgoc2VhcmNoVGV4dCkpCi0gICAgICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRl
IHNldE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFRleHRdIGZv
cktleTpAIkFYU2VhcmNoVGV4dCJdOworICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBz
ZXRPYmplY3Q6dG9XVEZTdHJpbmcoc2VhcmNoVGV4dCkgZm9yS2V5OkAiQVhTZWFyY2hUZXh0Il07
CiAKICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QCh2aXNpYmxlT25seSkg
Zm9yS2V5OkAiQVhWaXNpYmxlT25seSJdOwotCiAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUg
c2V0T2JqZWN0OkAoaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KSBmb3JLZXk6QCJBWEltbWVkaWF0
ZURlc2NlbmRhbnRzT25seSJdOwogCiAgICAgcmV0dXJuIHBhcmFtZXRlcml6ZWRBdHRyaWJ1dGU7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCmluZGV4IDkxM2Fl
MGY3NWNkYjRlZDVkZWRkZWI5MjVmNmM5NTAxOGRkZDE3MDQuLmE4ODdkZTVjODVkNTAyODRmZDI0
NDcxMjUxNmU4OWM5OThjM2FhNWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyTWFjLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbXBvcnQg
IkluamVjdGVkQnVuZGxlUGFnZS5oIgorI2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XS0J1bmRsZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLQnVuZGxlUGFnZS5oPgpAQCAtOTYsNyArOTcsNyBAQCBzdGF0
aWMgaWQgZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKGlkIG9iaiwgTlNTdHJpbmcgKmlkQXR0cmli
dXRlKQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBpZEF0dHJpYnV0ZSkKIHsK
LSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7CiAgICAgUGxhdGZvcm1VSUVsZW1lbnQgcm9vdCA9IHN0YXRpY19j
YXN0PFBsYXRmb3JtVUlFbGVtZW50PihXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpKTsK
IAogICAgIFJldGFpblB0cjxpZD4gcmVzdWx0OwpAQCAtMTExLDcgKzExMiw3IEBAIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJs
ZUVsZW1lbnRCeUlkKEpTCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIm1hYyIpKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0
cmluZygibWFjIik7CiB9CiAKIC8vIEFYVGhyZWFkIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50TWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQppbmRleCA1MGIzZTAyMjBiOGQxMjJhZDIy
YmM5NmQ0MjRjZmQ4MzMxYjY1ZjU5Li4yZWZmNDU0ZTY2NzkxZDY5OGY5NWJlYzc2OTRhMDlmYjJj
Y2YwYTExIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KQEAg
LTMyLDcgKzMyLDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKICNpbXBv
cnQgIkluamVjdGVkQnVuZGxlLmgiCiAjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKLQor
I2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgPEFwcEtpdC9OU0FjY2Vzc2liaWxpdHkuaD4K
ICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSlNTdHJpbmdSZWZDRi5oPgpAQCAtODcsMTEgKzg3LDYgQEAgQGVuZAogCiBuYW1lc3BhY2Ug
V1RSIHsKIAotc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVFbXB0eUpTU3Ry
aW5nKCkKLXsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhu
dWxscHRyLCAwKSk7Ci19Ci0KIFJlZlB0cjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c19jb250cm9sbGVyOwogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGlkIGVsZW1lbnQpCkBAIC0yMDYsNyArMjAxLDcgQEAg
c3RhdGljIE5TU3RyaW5nKiBkZXNjcmlwdGlvbk9mVmFsdWUoaWQgdmFsdWVPYmplY3QsIGlkIGVs
ZW1lbnQpCiAKIHN0YXRpYyBOU1N0cmluZyAqYXR0cmlidXRlc09mRWxlbWVudChpZCBhY2Nlc3Np
YmlsaXR5T2JqZWN0KQogewotICAgIFJldGFpblB0cjxOU0FycmF5PiBhdHRyaWJ1dGVzID0gc3Vw
cG9ydGVkQXR0cmlidXRlcyhhY2Nlc3NpYmlsaXR5T2JqZWN0KTsKKyAgICBhdXRvIGF0dHJpYnV0
ZXMgPSBzdXBwb3J0ZWRBdHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QpOwogCiAgICAgTlNN
dXRhYmxlU3RyaW5nKiBhdHRyaWJ1dGVzU3RyaW5nID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdd
OwogICAgIGZvciAoTlNTdHJpbmcqIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzLmdldCgpKSB7CkBA
IC0yMjcsMTYgKzIyMiwxMyBAQCBzdGF0aWMgTlNTdHJpbmcgKmF0dHJpYnV0ZXNPZkVsZW1lbnQo
aWQgYWNjZXNzaWJpbGl0eU9iamVjdCkKICAgICByZXR1cm4gYXR0cmlidXRlc1N0cmluZzsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBKU1ZhbHVlUmVmIGNvbnZlcnRWZWN0b3JU
b09iamVjdEFycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBWZWN0b3I8VD4gY29uc3QmIGVsZW1l
bnRzKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VKU0FycmF5
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBWZWN0b3I8VD4mIGVsZW1lbnRzKQogewotICAg
IEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAw
LCAwKTsKLSAgICBKU09iamVjdFJlZiBhcnJheU9iaiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0
LCBhcnJheVJlc3VsdCwgMCk7CisgICAgYXV0byBhcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGNv
bnRleHQsIDAsIDAsIDApOwogICAgIHNpemVfdCBlbGVtZW50Q291bnQgPSBlbGVtZW50cy5zaXpl
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbGVtZW50Q291bnQ7ICsraSkKLSAgICAg
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXlPYmosIGksIEpTT2Jq
ZWN0TWFrZShjb250ZXh0LCBlbGVtZW50c1tpXS0+d3JhcHBlckNsYXNzKCksIGVsZW1lbnRzW2ld
LmdldCgpKSwgMCk7Ci0KLSAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgICAgIEpTT2JqZWN0
U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBKU09iamVjdE1ha2UoY29udGV4
dCwgZWxlbWVudHNbaV0tPndyYXBwZXJDbGFzcygpLCBlbGVtZW50c1tpXS5nZXQoKSksIDApOwor
ICAgIHJldHVybiBhcnJheTsKIH0KIAogc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBj
b25jYXRlbmF0ZUF0dHJpYnV0ZUFuZFZhbHVlKE5TU3RyaW5nKiBhdHRyaWJ1dGUsIE5TU3RyaW5n
KiB2YWx1ZSkKQEAgLTI3MywyNSArMjY1LDEzIEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnNlbGVj
dFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEoSlNDb250ZXh0UmVmIGNvCiAg
ICAgCiAgICAgaWYgKHNlYXJjaFN0cmluZ3MpIHsKICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnNl
YXJjaFN0cmluZ3NQYXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICBp
ZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAg
ICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNv
bnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hT
dHJpbmdzU3RyaW5nKQotICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFk
ZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJp
bmcuZ2V0KCldXTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3Qo
Y29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKKyAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhj
b250ZXh0LCBzZWFyY2hTdHJpbmdzKSkKKyAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1l
dGVyIGFkZE9iamVjdDp0b1dURlN0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKV07CisgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoU3RyaW5nc0FycmF5ID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpOwotICAgICAg
ICAgICAgdW5zaWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gMDsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVm
IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250
ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGxlbmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxs
cHRyKTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSAmJiBK
U1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUpKQot
ICAgICAgICAgICAgICAgIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3Ro
VmFsdWUsIG51bGxwdHIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBzZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJp
bmdzQXJyYXksIGksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNl
YXJjaFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFy
YW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0
cmluZ3NTdHJpbmcuZ2V0KCldXTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVuc2lnbmVk
IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaFN0
cmluZ3NBcnJheSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNo
U3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQ
YXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVy
dHlBdEluZGV4KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0cikpXTsKICAg
ICAgICAgfQogICAgICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c2VhcmNo
U3RyaW5nc1BhcmFtZXRlciBmb3JLZXk6QCJBWFNlbGVjdFRleHRTZWFyY2hTdHJpbmdzIl07CiAg
ICAgfQpAQCAtMzE0LDI0ICsyOTQsMTMgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqc2VhcmNoVGV4
dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYShKU0NvbnRleHRSZWYgY28KIAogICAg
IGlmIChzZWFyY2hTdHJpbmdzKSB7CiAgICAgICAgIE5TTXV0YWJsZUFycmF5ICpzZWFyY2hTdHJp
bmdzUGFyYW1ldGVyID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgaWYgKEpTVmFs
dWVJc1N0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgewotICAgICAgICAgICAgYXV0byBz
ZWFyY2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBz
ZWFyY2hTdHJpbmdzLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0
cmluZykKLSAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6
W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5nLmdldCgp
XV07Ci0gICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0
cmluZ3MpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2VhcmNoU3Ry
aW5ncykpCisgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9X
VEZTdHJpbmcoY29udGV4dCwgc2VhcmNoU3RyaW5ncyldOworICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNl
YXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJv
cGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBsZW5n
dGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoc2VhcmNo
U3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJj
aFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmdz
QXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29u
dGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwotICAgICAg
ICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICBb
c2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0
cmluZ1JlZjpzZWFyY2hTdHJpbmdzU3RyaW5nLmdldCgpXV07Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBhcnJheUxlbmd0aChj
b250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAg
IFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDp0b1dURlN0cmluZyhjb250ZXh0LCBK
U09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGks
IG51bGxwdHIpKV07CiAgICAgICAgIH0KICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUg
c2V0T2JqZWN0OnNlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWFyY2hUZXh0U2Vh
cmNoU3RyaW5ncyJdOwogICAgIH0KQEAgLTQwMSw3ICszNzAsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJvd0hlYWRlcnMoKSBjb25zdAogICAgIGlkIHZhbHVlID0gYXR0
cmlidXRlVmFsdWUobV9lbGVtZW50LmdldCgpLCBOU0FjY2Vzc2liaWxpdHlSb3dIZWFkZXJVSUVs
ZW1lbnRzQXR0cmlidXRlKTsKICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkg
Y2xhc3NdXSkKICAgICAgICAgZWxlbWVudHMgPSBtYWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Pj4odmFsdWUpOwotICAgIHJldHVybiBjb252ZXJ0VmVjdG9yVG9PYmplY3RB
cnJheTxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KGNvbnRleHQsIGVsZW1lbnRzKTsK
KyAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgZWxlbWVudHMpOwogICAgIEVORF9BWF9P
QkpDX0VYQ0VQVElPTlMKIH0KIApAQCAtNDE1LDcgKzM4NCw3IEBAIEpTVmFsdWVSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycygpIGNvbnN0CiAgICAgaWQgdmFsdWUgPSBh
dHRyaWJ1dGVWYWx1ZShtX2VsZW1lbnQuZ2V0KCksIE5TQWNjZXNzaWJpbGl0eUNvbHVtbkhlYWRl
clVJRWxlbWVudHNBdHRyaWJ1dGUpOwogICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNB
cnJheSBjbGFzc11dKQogICAgICAgICBlbGVtZW50cyA9IG1ha2VWZWN0b3I8UmVmUHRyPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+Pih2YWx1ZSk7Ci0gICAgcmV0dXJuIGNvbnZlcnRWZWN0b3JUb09i
amVjdEFycmF5PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4oY29udGV4dCwgZWxlbWVu
dHMpOworICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0LCBlbGVtZW50cyk7CiAgICAgRU5E
X0FYX09CSkNfRVhDRVBUSU9OUwogfQogICAgIApAQCAtNjA3LDcgKzU3Niw3IEBAIEpTVmFsdWVS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXJyYXlBdHRyaWJ1dGVWYWx1ZShK
U1N0cmluZ1JlZiBhdHRyCiAKICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+PiBlbGVtZW50czsKICAgICBnZXRVSUVsZW1lbnRzV2l0aEF0dHJpYnV0ZShhdHRyaWJ1dGUs
IGVsZW1lbnRzKTsKLSAgICByZXR1cm4gY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVmUHRy
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pihjb250ZXh0LCBlbGVtZW50cyk7CisgICAgcmV0dXJu
IG1ha2VKU0FycmF5KGNvbnRleHQsIGVsZW1lbnRzKTsKIH0KIAogUmVmUHRyPEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEF0dHJpYnV0ZVZh
bHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkgY29uc3QKQEAgLTk3Niw3ICs5NDUsNiBAQCBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWQoKSBjb25zdAogCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEyMjksNyAr
MTE5Nyw3IEBAIEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VhcmNoVGV4dFdp
dGhDcml0ZXJpYShKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICBOU0RpY3Rpb25hcnkgKnBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGUgPSBzZWFyY2hUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNy
aXRlcmlhKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MsIHN0YXJ0RnJvbSwgZGlyZWN0aW9uKTsKICAg
ICBpZCByZXN1bHQgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFY
U2VhcmNoVGV4dFdpdGhDcml0ZXJpYSIgZm9yUGFyYW1ldGVyOnBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVdOwogICAgIGlmIChbcmVzdWx0IGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5PFJlZlB0cjxBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlclJhbmdlPj4oY29udGV4dCwgbWFrZVZlY3RvcjxSZWZQdHI8QWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZT4+KHJlc3VsdCkpOworICAgICAgICByZXR1cm4gbWFrZUpTQXJy
YXkoY29udGV4dCwgbWFrZVZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5n
ZT4+KHJlc3VsdCkpOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKIAogICAgIHJldHVybiBu
dWxscHRyOwpAQCAtMTU0NiwxMyArMTUxNCwxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOwor
ICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCkBAIC0xNTYyLDgg
KzE1MjgsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZG9jdW1lbnRFbmNvZGluZygpCiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0
cmluZyBjbGFzc11dKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVmXTsK
ICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCi0gICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKQEAg
LTE1NzMsOCArMTUzOCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCiAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltO
U1N0cmluZyBjbGFzc11dKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVm
XTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCi0gICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCgpCkBAIC0xNTgz
LDcgKzE1NDcsNiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dXJsKCkKICAgICBOU1VSTCAqdXJsID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5VVJMQXR0cmlidXRlXTsKICAgICByZXR1cm4gW1t1
cmwgYWJzb2x1dGVTdHJpbmddIGNyZWF0ZUpTU3RyaW5nUmVmXTsgICAgCiAgICAgRU5EX0FYX09C
SkNfRVhDRVBUSU9OUwotICAgIAogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0xNjIyLDcg
KzE1ODUsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29u
c3QKICAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKICAgICByZXN1bHQgPSBbbV9lbGVtZW50
IGFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOk5TQWNjZXNzaWJpbGl0eUZvY3VzZWRB
dHRyaWJ1dGVdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAgICAKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC0xNjQ4LDE5ICsxNjEwLDE2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09m
ZlNjcmVlbigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtMTY3NSwxMyArMTYzNCwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdu
b3JlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5l
KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lKCkgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzE0
LDE3ICsxNjcxLDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKCkK
IAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKIHsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRk
U2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50CiB9CiAKIC8vIFRleHQgbWFya2VycwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbSBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggNDAz
ZjRmZjgzMmVlMGVmN2MzY2ZhYmRmMGY4N2UyY2NiZTYxNGY4YS4uYWRiYjRiN2I1ZDU0ZmIxNGE5
YzRiZGU4YTkyMjc1ZjExYzE0MTZkOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCkBAIC00NiwxNiAr
NDYsMTEgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6Omluc3BlY3RvclRl
c3RTdHViVVJMKCkKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHJldHVybiBudWxscHRy
OwogI2Vsc2UKLSAgICBDRkJ1bmRsZVJlZiBpbnNwZWN0b3JCdW5kbGUgPSBDRkJ1bmRsZUdldEJ1
bmRsZVdpdGhJZGVudGlmaWVyKENGU1RSKCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiKSk7Cisg
ICAgYXV0byBpbnNwZWN0b3JCdW5kbGUgPSBDRkJ1bmRsZUdldEJ1bmRsZVdpdGhJZGVudGlmaWVy
KENGU1RSKCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JC
dW5kbGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVm
PiB1cmwgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKGluc3BlY3RvckJ1bmRsZSwg
Q0ZTVFIoIlRlc3RTdHViIiksIENGU1RSKCJodG1sIiksIE5VTEwpKTsKLSAgICBpZiAoIXVybCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDRlN0cmluZ1JlZiB1cmxTdHJpbmcgPSBD
RlVSTEdldFN0cmluZyh1cmwuZ2V0KCkpOwotICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0
ZVdpdGhDRlN0cmluZyh1cmxTdHJpbmcpKTsKKyAgICBhdXRvIHJlc291cmNlVVJMID0gYWRvcHRD
RihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChpbnNwZWN0b3JCdW5kbGUsIENGU1RSKCJUZXN0U3R1
YiIpLCBDRlNUUigiaHRtbCIpLCBOVUxMKSk7CisgICAgcmV0dXJuIHJlc291cmNlVVJMID8gYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZVUkxHZXRTdHJpbmcocmVzb3VyY2VVUkwu
Z2V0KCkpKSkgOiBudWxscHRyOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1N0
cmluZ0Z1bmN0aW9ucy5oCmluZGV4IDFiYzA1YzBhNWYzYTgwNGMwYjE0MWI4OTY5MGI3NWQyNzcx
MGU3NjEuLjY3ZjM5ZTY5ZjE1NDA4YjkyZWEzYWU5NDdjOWZhOTJmZWVhMTI4Y2QgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjQsMTUgKzI0LDEyIEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBTdHJpbmdGdW5jdGlvbnNf
aAotI2RlZmluZSBTdHJpbmdGdW5jdGlvbnNfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHQuaD4KKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogI2luY2x1ZGUgPFdlYktpdC9XS1Jl
dGFpblB0ci5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1N0cmluZy5oPgogI2luY2x1ZGUgPFdlYktp
dC9XS1N0cmluZ1ByaXZhdGUuaD4KLSNpbmNsdWRlIDxXZWJLaXQvV0tVUkwuaD4KICNpbmNsdWRl
IDxzc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
QEAgLTQ0LDcgKzQxLDggQEAKIAogbmFtZXNwYWNlIFdUUiB7CiAKLS8vIENvbnZlcnNpb24gZnVu
Y3Rpb25zCitXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XS1N0cmluZyhKU0NvbnRleHRSZWYs
IEpTVmFsdWVSZWYpOworV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoSlNDb250ZXh0UmVmLCBKU1Zh
bHVlUmVmKTsKIAogaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKEpTU3RyaW5n
UmVmIHN0cmluZykKIHsKQEAgLTU2LDkgKzU0LDE0IEBAIGlubGluZSBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdG9XSyhjb25zdCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4mIHN0cmluZykKICAg
ICByZXR1cm4gdG9XSyhzdHJpbmcuZ2V0KCkpOwogfQogCitpbmxpbmUgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHRvV0soY29uc3QgY2hhciogc3RyaW5nKQoreworICAgIHJldHVybiBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZykpOworfQorCiBpbmxpbmUgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soY29uc3QgV1RGOjpTdHJpbmcmIHN0cmluZykKIHsK
LSAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmcu
dXRmOCgpLmRhdGEoKSkpOworICAgIHJldHVybiB0b1dLKHN0cmluZy51dGY4KCkuZGF0YSgpKTsK
IH0KIAogaW5saW5lIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKFdLU3RyaW5nUmVmIHN0
cmluZykKQEAgLTk5LDYgKzEwMiwyNSBAQCBpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmco
Y29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmcpCiAgICAgcmV0dXJuIHRvV1RG
U3RyaW5nKHN0cmluZy5nZXQoKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdUUgoraW5saW5lIFdU
Rjo6U3RyaW5nIHRvV1RGU3RyaW5nKEpTU3RyaW5nUmVmIHN0cmluZykKK3sKKyAgICByZXR1cm4g
dG9XVEZTdHJpbmcodG9XSyhzdHJpbmcpKTsKK30KIAotI2VuZGlmIC8vIFN0cmluZ0Z1bmN0aW9u
c19oCitpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3QgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+JiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvV1RGU3RyaW5nKHN0cmluZy5nZXQo
KSk7Cit9CisKK2lubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XS1N0cmluZyhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9XSyhj
cmVhdGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkuZ2V0KCkpOworfQorCitpbmxpbmUgV1RGOjpT
dHJpbmcgdG9XVEZTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUp
Cit7CisgICAgLy8gRklYTUU6IENvdWxkIG1ha2UgdGhpcyBlZmZpY2llbnQgYnkgdXNpbmcgdGhl
IFdURlN0cmluZyBpbnNpZGUgT3BhcXVlSlNTdHJpbmcgaWYgd2Ugd2FudGVkIHRvLgorICAgIHJl
dHVybiB0b1dURlN0cmluZyhjcmVhdGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKaW5kZXggMTM0NWM0MmMxMWU2MmRjMDg4YzZmMmQzOGI5OWIwOTM1NjRlMDEzOC4uNzVkOWZi
NjA0NDQxNDVmMWVjZGZhZWZkOTkwOGFhZTI2ODg1NGVmMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTI2LDEwICsyNiwxMCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9u
YXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kZXJQcm94eS5oIgogI2luY2x1ZGUg
Ik9wdGlvbnMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKLSNpbmNsdWRlICJTdHJp
bmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgogI2luY2x1ZGUgIldl
YkNvcmVUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVU
aHJlYWRpbmcuaD4KQEAgLTQ5NCw4ICs0OTQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0
aWFsaXplKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgV2ViQ29yZVRlc3RTdXBw
b3J0OjppbnN0YWxsTW9ja0dhbWVwYWRQcm92aWRlcigpOwogI2VuZGlmCiAKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gcGFnZUdyb3VwSWRlbnRpZmllciA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFRlc3RSdW5uZXJQYWdlR3JvdXAiKSk7Ci0gICAg
bV9wYWdlR3JvdXAuYWRvcHQoV0tQYWdlR3JvdXBDcmVhdGVXaXRoSWRlbnRpZmllcihwYWdlR3Jv
dXBJZGVudGlmaWVyLmdldCgpKSk7CisgICAgbV9wYWdlR3JvdXAuYWRvcHQoV0tQYWdlR3JvdXBD
cmVhdGVXaXRoSWRlbnRpZmllcih0b1dLKCJXZWJLaXRUZXN0UnVubmVyUGFnZUdyb3VwIikuZ2V0
KCkpKTsKIAogICAgIG1fZXZlbnRTZW5kZXJQcm94eSA9IG1ha2VVbmlxdWU8RXZlbnRTZW5kZXJQ
cm94eT4odGhpcyk7CiB9CkBAIC01MDcsOSArNTA2LDkgQEAgV0tSZXRhaW5QdHI8V0tDb250ZXh0
Q29uZmlndXJhdGlvblJlZj4gVGVzdENvbnRyb2xsZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3Vy
YXQKICAgICBXS0NvbnRleHRDb25maWd1cmF0aW9uU2V0RnVsbHlTeW5jaHJvbm91c01vZGVJc0Fs
bG93ZWRGb3JUZXN0aW5nKGNvbmZpZ3VyYXRpb24uZ2V0KCksIHRydWUpOwogICAgIFdLQ29udGV4
dENvbmZpZ3VyYXRpb25TZXRJZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzRm9yVGVz
dGluZyhjb25maWd1cmF0aW9uLmdldCgpLCBvcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2Fn
aW5nVGltZW91dHMpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IG92ZXJy
aWRlTGFuZ3VhZ2VzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBhdXRv
IG92ZXJyaWRlTGFuZ3VhZ2VzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKICAg
ICBmb3IgKGF1dG8mIGxhbmd1YWdlIDogb3B0aW9ucy5vdmVycmlkZUxhbmd1YWdlcykKLSAgICAg
ICAgV0tBcnJheUFwcGVuZEl0ZW0ob3ZlcnJpZGVMYW5ndWFnZXMuZ2V0KCksIGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSkpLmdldCgp
KTsKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0ob3ZlcnJpZGVMYW5ndWFnZXMuZ2V0KCksIHRv
V0sobGFuZ3VhZ2UpLmdldCgpKTsKICAgICBXS0NvbnRleHRDb25maWd1cmF0aW9uU2V0T3ZlcnJp
ZGVMYW5ndWFnZXMoY29uZmlndXJhdGlvbi5nZXQoKSwgb3ZlcnJpZGVMYW5ndWFnZXMuZ2V0KCkp
OwogCiAgICAgaWYgKG9wdGlvbnMuc2hvdWxkRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24o
KSkgewpAQCAtODQzLDMxICs4NDIsMjQgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVm
ZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW8KICAgICBX
S1ByZWZlcmVuY2VzUmVzZXRBbGxJbnRlcm5hbERlYnVnRmVhdHVyZXMocHJlZmVyZW5jZXMpOwog
CiAgICAgLy8gU2V0IGludGVybmFsIGZlYXR1cmVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgZGVmYXVs
dCB2YWx1ZXMgZm9yIHRlc3RpbmcuCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGFzeW5jT3ZlcmZs
b3dTY3JvbGxpbmdGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFzeW5j
T3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFs
RGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBmYWxzZSwgYXN5bmNPdmVyZmxvd1Njcm9s
bGluZ0ZlYXR1cmUpOwogCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGFzeW5jRnJhbWVTY3JvbGxp
bmdGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFzeW5jRnJhbWVTY3Jv
bGxpbmdFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJl
Rm9yS2V5KHByZWZlcmVuY2VzLCBmYWxzZSwgYXN5bmNGcmFtZVNjcm9sbGluZ0ZlYXR1cmUpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNl
cywgZmFsc2UsIHRvV0soIkFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkIikuZ2V0KCkpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNl
cywgZmFsc2UsIHRvV0soIkFzeW5jRnJhbWVTY3JvbGxpbmdFbmFibGVkIikuZ2V0KCkpOwogCiAj
aWYgRU5BQkxFKElOUFVUX1RZUEVfREFURSkKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRU
eXBlRGF0ZUZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5wdXRUeXBl
RGF0ZUVuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVG
b3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlwZURhdGVGZWF0dXJlKTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUs
IHRvV0soIklucHV0VHlwZURhdGVFbmFibGVkIikuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxF
KElOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgaW5wdXRU
eXBlRGF0ZVRpbWVMb2NhbEZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SW5wdXRUeXBlRGF0ZVRpbWVMb2NhbEVuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIGlucHV0VHlwZURhdGVU
aW1lTG9jYWxGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZURhdGVUaW1lTG9jYWxF
bmFibGVkIikuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfTU9OVEgpCi0g
ICAgc3RhdGljIFdLU3RyaW5nUmVmIGlucHV0VHlwZU1vbnRoRmVhdHVyZSA9IFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1dFR5cGVNb250aEVuYWJsZWQiKTsKLSAgICBXS1ByZWZl
cmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIGlu
cHV0VHlwZU1vbnRoRmVhdHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdG
ZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVNb250aEVuYWJs
ZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9USU1FKQotICAgIHN0
YXRpYyBXS1N0cmluZ1JlZiBpbnB1dFR5cGVUaW1lRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJJbnB1dFR5cGVUaW1lRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNT
ZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBl
VGltZUZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZv
cktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlVGltZUVuYWJsZWQiKS5nZXQo
KSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9XRUVLKQotICAgIHN0YXRpYyBXS1N0
cmluZ1JlZiBpbnB1dFR5cGVXZWVrRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJJbnB1dFR5cGVXZWVrRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5h
bERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlV2Vla0ZlYXR1
cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVm
ZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlV2Vla0VuYWJsZWQiKS5nZXQoKSk7CiAjZW5k
aWYKIAogICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgOiBvcHRpb25z
LmludGVybmFsRGVidWdGZWF0dXJlcykKQEAgLTkyMCwyNSArOTEyLDE2IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9w
dGlvbnMmIG9wdGlvCiAgICAgV0tQcmVmZXJlbmNlc1NldFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5k
c0luRGFya01vZGUocHJlZmVyZW5jZXMsIG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRz
SW5EYXJrTW9kZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVy
ZW5jZXMsIG9wdGlvbnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZSk7CiAKLSAgICBzdGF0aWMgV0tT
dHJpbmdSZWYgZGVmYXVsdFRleHRFbmNvZGluZyA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJJU08tODg1OS0xIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldERlZmF1bHRUZXh0RW5jb2Rp
bmdOYW1lKHByZWZlcmVuY2VzLCBkZWZhdWx0VGV4dEVuY29kaW5nKTsKLQotICAgIHN0YXRpYyBX
S1N0cmluZ1JlZiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVGltZXMiKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgY3Vyc2l2ZUZvbnRGYW1pbHkg
PSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGUgQ2hhbmNlcnkiKTsKLSAgICBz
dGF0aWMgV0tTdHJpbmdSZWYgZmFudGFzeUZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiUGFweXJ1cyIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBmaXhlZEZvbnRG
YW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ291cmllciIpOwotICAgIHN0
YXRpYyBXS1N0cmluZ1JlZiBwaWN0b2dyYXBoRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJBcHBsZSBDb2xvciBFbW9qaSIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1Jl
ZiBzYW5zU2VyaWZGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhl
bHZldGljYSIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBzZXJpZkZvbnRGYW1pbHkgPSBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZXMiKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
RGVmYXVsdFRleHRFbmNvZGluZ05hbWUocHJlZmVyZW5jZXMsIHRvV0soIklTTy04ODU5LTEiKS5n
ZXQoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzU2V0TWluaW11bUZvbnRTaXplKHByZWZlcmVuY2Vz
LCAwKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0U3RhbmRhcmRGb250RmFtaWx5KHByZWZlcmVuY2Vz
LCBzdGFuZGFyZEZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDdXJzaXZlRm9udEZh
bWlseShwcmVmZXJlbmNlcywgY3Vyc2l2ZUZvbnRGYW1pbHkpOwotICAgIFdLUHJlZmVyZW5jZXNT
ZXRGYW50YXN5Rm9udEZhbWlseShwcmVmZXJlbmNlcywgZmFudGFzeUZvbnRGYW1pbHkpOwotICAg
IFdLUHJlZmVyZW5jZXNTZXRGaXhlZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIGZpeGVkRm9udEZh
bWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFBpY3RvZ3JhcGhGb250RmFtaWx5KHByZWZlcmVu
Y2VzLCBwaWN0b2dyYXBoRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFNhbnNTZXJp
ZkZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHNhbnNTZXJpZkZvbnRGYW1pbHkpOwotICAgIFdLUHJl
ZmVyZW5jZXNTZXRTZXJpZkZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHNlcmlmRm9udEZhbWlseSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldFN0YW5kYXJkRm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9X
SygiVGltZXMiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEN1cnNpdmVGb250RmFtaWx5
KHByZWZlcmVuY2VzLCB0b1dLKCJBcHBsZSBDaGFuY2VyeSIpLmdldCgpKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0RmFudGFzeUZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIlBhcHlydXMiKS5n
ZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEZpeGVkRm9udEZhbWlseShwcmVmZXJlbmNlcywg
dG9XSygiQ291cmllciIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0UGljdG9ncmFwaEZv
bnRGYW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIkFwcGxlIENvbG9yIEVtb2ppIikuZ2V0KCkpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRTYW5zU2VyaWZGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dL
KCJIZWx2ZXRpY2EiKS5nZXQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFNlcmlmRm9udEZhbWls
eShwcmVmZXJlbmNlcywgdG9XSygiVGltZXMiKS5nZXQoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1Nl
dEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAj
aWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAgICBXS1ByZWZlcmVuY2VzU2V0TWVkaWFTb3VyY2VF
bmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKQEAgLTEwMTAsMzggKzk5MywyNyBAQCBib29sIFRl
c3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRp
b25zJiBvcHRpb25zLCBSZQogCiAgICAgV0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50KG1fbWFpbldl
YlZpZXctPnBhZ2UoKSwgbnVsbHB0cik7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXNl
dCIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiByZXNldE1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIGF1dG8g
cmVzZXRNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
IAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzaG91bGRHQ0tleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNob3VsZEdDIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gc2hvdWxkR0NWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1f
Z2NCZXR3ZWVuVGVzdHMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJv
ZHkuZ2V0KCksIHNob3VsZEdDS2V5LmdldCgpLCBzaG91bGRHQ1ZhbHVlLmdldCgpKTsKKyAgICBz
ZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiU2hvdWxkR0MiLCBtX2djQmV0d2VlblRlc3RzKTsK
IAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhbGxvd2VkSG9zdHNLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBbGxvd2VkSG9zdHMiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IGFsbG93ZWRIb3N0c1ZhbHVlID0gYWRvcHRXSyhX
S011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGhvc3QgOiBtX2FsbG93ZWRI
b3N0cykgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tIb3N0ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhob3N0LmNfc3RyKCkpKTsKLSAgICAgICAg
V0tBcnJheUFwcGVuZEl0ZW0oYWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCksIHdrSG9zdC5nZXQoKSk7
Ci0gICAgfQotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0ocmVzZXRNZXNzYWdlQm9keS5nZXQoKSwg
YWxsb3dlZEhvc3RzS2V5LmdldCgpLCBhbGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSk7CisgICAgYXV0
byBhbGxvd2VkSG9zdHNWYWx1ZSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Cisg
ICAgZm9yIChhdXRvJiBob3N0IDogbV9hbGxvd2VkSG9zdHMpCisgICAgICAgIFdLQXJyYXlBcHBl
bmRJdGVtKGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpLCB0b1dLKGhvc3QuY19zdHIoKSkuZ2V0KCkp
OworICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJBbGxvd2VkSG9zdHMiLCBhbGxvd2Vk
SG9zdHNWYWx1ZS5nZXQoKSk7CiAKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9U
UkVFKQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheElzb2xhdGVkTW9kZUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFjY2Vzc2liaWxpdHlJc29sYXRl
ZFRyZWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBheElzb2xhdGVkTW9kZVZh
bHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVl
TW9kZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0ocmVzZXRNZXNzYWdlQm9keS5nZXQoKSwg
YXhJc29sYXRlZE1vZGVLZXkuZ2V0KCksIGF4SXNvbGF0ZWRNb2RlVmFsdWUuZ2V0KCkpOworICAg
IHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIiwg
bV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSk7CiAjZW5kaWYKLSAgICAKLSAgICBpZiAo
b3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBqc2NPcHRpb25zS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSlNDT3B0aW9ucyIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGpz
Y09wdGlvbnNWYWx1ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcob3B0
aW9ucy5qc2NPcHRpb25zLmNfc3RyKCkpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShy
ZXNldE1lc3NhZ2VCb2R5LmdldCgpLCBqc2NPcHRpb25zS2V5LmdldCgpLCBqc2NPcHRpb25zVmFs
dWUuZ2V0KCkpOwotICAgIH0KKworICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3RoKCkp
CisgICAgICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJKU0NPcHRpb25zIiwgb3B0aW9u
cy5qc2NPcHRpb25zLmNfc3RyKCkpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgV2ViQ29y
ZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmco
b3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKTsKICNlbmRpZgog
Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCByZXNl
dE1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9X
SygiUmVzZXQiKS5nZXQoKSwgcmVzZXRNZXNzYWdlQm9keS5nZXQoKSk7CiAKICAgICBXS0NvbnRl
eHRTZXRTaG91bGRVc2VGb250U21vb3RoaW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5j
b250ZXh0KCksIGZhbHNlKTsKIApAQCAtMTIwMyw4ICsxMTc1LDcgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6dXBkYXRlTGl2ZURvY3VtZW50c0FmdGVyVGVzdCgpCiAKICAgICBBc3luY1Rhc2soW10o
KSB7CiAgICAgICAgIC8vIEFmdGVyIGVhY2ggdGVzdCwgd2UgdXBkYXRlIHRoZSBsaXN0IG9mIGxp
dmUgZG9jdW1lbnRzIHNvIHRoYXQgd2UgY2FuIGRldGVjdCB3aGVuIGFuIGFiYW5kb25lZCBkb2N1
bWVudCBmaXJzdCBzaG93ZWQgdXAuCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldExp
dmVEb2N1bWVudHMiKSk7Ci0gICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRs
ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCB0b1dLKCJHZXRMaXZlRG9jdW1lbnRzIikuZ2V0KCksIG51bGxwdHIpOwogICAgIH0sIDVf
cykucnVuKCk7CiB9CiAKQEAgLTEyMTUsOCArMTE4Niw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OmNoZWNrRm9yV29ybGRMZWFrcygpCiAKICAgICBBc3luY1Rhc2soW10oKSB7CiAgICAgICAgIC8v
IFRoaXMgcnVucyBhdCB0aGUgZW5kIG9mIGEgc2VyaWVzIG9mIHRlc3RzLiBJdCBjbGVhcnMgY2Fj
aGVzLCBydW5zIGEgR0MgYW5kIHRoZW4gZmV0Y2hlcyB0aGUgbGlzdCBvZiBkb2N1bWVudHMuCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNoZWNrRm9yV29ybGRMZWFrcyIpKTsKLSAgICAg
ICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
KTsKKyAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHRvV0soIkNoZWNrRm9yV29y
bGRMZWFrcyIpLmdldCgpLCBudWxscHRyKTsKICAgICB9LCAyMF9zKS5ydW4oKTsKIH0KIApAQCAt
MTMyNCw2ICsxMjk0LDcgQEAgY29uc3QgY2hhciogVGVzdENvbnRyb2xsZXI6Om5ldHdvcmtQcm9j
ZXNzTmFtZSgpCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCisKIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wgYWxsb3dzKQogewogICAgIG1fYWxs
b3dzQW55U1NMQ2VydGlmaWNhdGUgPSBhbGxvd3M7CkBAIC0xNDAwLDggKzEzNzEsOCBAQCBzdGF0
aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZh
bHVlKQogCiBzdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1Jl
bGF0aXZlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IGJhc2VVUkwgPSBhZG9wdFdL
KGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1VS
TFJlZj4gcmVsYXRpdmVVUkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVS
TC5nZXQoKSwgdmFsdWUuY19zdHIoKSkpOworICAgIGF1dG8gYmFzZVVSTCA9IGFkb3B0V0soY3Jl
YXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpOworICAgIGF1dG8gcmVsYXRpdmVVUkwgPSBh
ZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIo
KSkpOwogICAgIHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVBhdGgocmVsYXRpdmVVUkwu
Z2V0KCkpKSk7CiB9CiAKQEAgLTE0MTUsOCArMTM4Niw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVRl
c3RPcHRpb25zRnJvbVRlc3RIZWFkZXIoVGVzdE9wdGlvbnMmIHRlc3RPcHRpb25zLCBjb25zdCBz
dGQ6CiAgICAgc3RkOjpzdHJpbmcgZmlsZW5hbWUgPSBhYnNvbHV0ZVBhdGg7CiAgICAgaWYgKGZp
bGVuYW1lLmVtcHR5KCkpIHsKICAgICAgICAgLy8gR3Jvc3MuIE5lZWQgdG8gcmVkdWNlIGNvbnZl
cnNpb25zIGJldHdlZW4gYWxsIHRoZSBzdHJpbmcgdHlwZXMgYW5kIFVSTHMuCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JV
UkwuY19zdHIoKSkpOwotICAgICAgICBmaWxlbmFtZSA9IHRlc3RQYXRoKHdrVVJMLmdldCgpKTsK
KyAgICAgICAgZmlsZW5hbWUgPSB0ZXN0UGF0aChhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9y
VVJMLmNfc3RyKCkpKS5nZXQoKSk7CiAgICAgfQogCiAgICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkp
CkBAIC0xNjE1LDYgKzE1ODUsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVWaWV3
Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIH0KIAogI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpICYmICFQTEFURk9STShDT0NPQSkKKwogc3RydWN0IENvbnRlbnRFeHRl
bnNpb25TdG9yZUNhbGxiYWNrQ29udGV4dCB7CiAgICAgZXhwbGljaXQgQ29udGVudEV4dGVuc2lv
blN0b3JlQ2FsbGJhY2tDb250ZXh0KFRlc3RDb250cm9sbGVyJiBjb250cm9sbGVyKQogICAgICAg
ICA6IHRlc3RDb250cm9sbGVyKGNvbnRyb2xsZXIpCkBAIC0xNjQyLDE1ICsxNjEzLDkgQEAgc3Rh
dGljIHN0ZDo6c3RyaW5nIGNvbnRlbnRFeHRlbnNpb25KU09OUGF0aChXS1VSTFJlZiB1cmwpCiAg
ICAgaWYgKHBhdGgubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBwYXRoICsgIi5qc29uIjsKIAot
ICAgIGF1dG8gcCA9IGFkb3B0V0soV0tVUkxDb3B5UGF0aCh1cmwpKTsKLSAgICBhdXRvIGJ1ZmZl
ciA9IHN0ZDo6dmVjdG9yPGNoYXI+KFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShw
LmdldCgpKSk7Ci0gICAgY29uc3QgYXV0byBsZW5ndGggPSBXS1N0cmluZ0dldFVURjhDU3RyaW5n
KHAuZ2V0KCksIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOwotICAgIHJldHVybiBzdGQ6
OnN0cmluZygiTGF5b3V0VGVzdHMvaHR0cC90ZXN0cyIpICsgc3RkOjpzdHJpbmcoYnVmZmVyLmRh
dGEoKSwgbGVuZ3RoIC0gMSkgKyAiLmpzb24iOworICAgIHJldHVybiAiTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cyIgKyB0b1NURChhZG9wdFdLKFdLVVJMQ29weVBhdGgodXJsKSkuZ2V0KCkpICsgIi5q
c29uIjsKIH0KLSNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0
ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKICAgICBjb25zdCBj
aGFyKiBjb250ZW50RXh0ZW5zaW9uc1BhdGggPSBsaWJyYXJ5UGF0aEZvclRlc3RpbmcoKTsKQEAg
LTE2NzAsMTMgKzE2MzUsMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVu
dEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QKICAgICB9CiAKICAg
ICBzdGQ6OnN0cmluZyBqc29uRmlsZUNvbnRlbnRzIHtzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8
Y2hhcj4oanNvbkZpbGUpLCBzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4oKX07Ci0gICAg
YXV0byBqc29uU291cmNlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhq
c29uRmlsZUNvbnRlbnRzLmNfc3RyKCkpKTsKKyAgICBhdXRvIGpzb25Tb3VyY2UgPSB0b1dLKGpz
b25GaWxlQ29udGVudHMuY19zdHIoKSk7CiAKLSAgICBhdXRvIHN0b3JlUGF0aCA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29udGVudEV4dGVuc2lvbnNQYXRoKSk7Cisg
ICAgYXV0byBzdG9yZVBhdGggPSB0b1dLKGNvbnRlbnRFeHRlbnNpb25zUGF0aCk7CiAgICAgYXV0
byBleHRlbnNpb25TdG9yZSA9IGFkb3B0V0soV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ3Jl
YXRlKHN0b3JlUGF0aC5nZXQoKSkpOwogICAgIEFTU0VSVChleHRlbnNpb25TdG9yZSk7CiAKLSAg
ICBhdXRvIGZpbHRlcklkZW50aWZpZXIgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJUZXN0Q29udGVudEV4dGVuc2lvbiIpKTsKKyAgICBhdXRvIGZpbHRlcklkZW50aWZp
ZXIgPSB0b1dLKCJUZXN0Q29udGVudEV4dGVuc2lvbiIpOwogCiAgICAgQ29udGVudEV4dGVuc2lv
blN0b3JlQ2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwogICAgIFdLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZUNvbXBpbGUoZXh0ZW5zaW9uU3RvcmUuZ2V0KCksIGZpbHRlcklkZW50aWZp
ZXIuZ2V0KCksIGpzb25Tb3VyY2UuZ2V0KCksICZjb250ZXh0LCBjb250ZW50RXh0ZW5zaW9uU3Rv
cmVDYWxsYmFjayk7CkBAIC0xNzAxLDE4ICsxNjY2LDIyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnJlc2V0Q29udGVudEV4dGVuc2lvbnMoKQogCiAgICAgV0tVc2VyQ29udGVudENvbnRyb2xsZXJS
ZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnModXNlckNvbnRlbnRDb250cm9sbGVyKCkpOwogCi0g
ICAgYXV0byBzdG9yZVBhdGggPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KGNvbnRlbnRFeHRlbnNpb25zUGF0aCkpOworICAgIGF1dG8gc3RvcmVQYXRoID0gdG9XSyhjb250
ZW50RXh0ZW5zaW9uc1BhdGgpOwogICAgIGF1dG8gZXh0ZW5zaW9uU3RvcmUgPSBhZG9wdFdLKFdL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNyZWF0ZShzdG9yZVBhdGguZ2V0KCkpKTsKICAgICBB
U1NFUlQoZXh0ZW5zaW9uU3RvcmUpOwogCi0gICAgYXV0byBmaWx0ZXJJZGVudGlmaWVyID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGVzdENvbnRlbnRFeHRlbnNpb24i
KSk7CisgICAgYXV0byBmaWx0ZXJJZGVudGlmaWVyID0gdG9XSygiVGVzdENvbnRlbnRFeHRlbnNp
b24iKTsKIAogICAgIENvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrQ29udGV4dCBjb250ZXh0
KCp0aGlzKTsKICAgICBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmUoZXh0ZW5zaW9u
U3RvcmUuZ2V0KCksIGZpbHRlcklkZW50aWZpZXIuZ2V0KCksICZjb250ZXh0LCBjb250ZW50RXh0
ZW5zaW9uU3RvcmVDYWxsYmFjayk7CiAgICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBub1RpbWVv
dXQpOwogICAgIEFTU0VSVCghY29udGV4dC5maWx0ZXIpOwogfQotI2Vsc2UgLy8gRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
ICYmICFQTEFURk9STShDT0NPQSkKKworI2lmICFFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQor
CiB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChj
b25zdCBUZXN0SW52b2NhdGlvbiYpCiB7CiB9CkBAIC0xNzIwLDE0ICsxNjg5LDEzIEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRl
c3RJbnZvY2F0aW9uJikKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2lv
bnMoKQogewogfQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jZW5kaWYg
Ly8gIVBMQVRGT1JNKENPQ09BKQorCisjZW5kaWYgLy8gIUVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCiAKIGNsYXNzIENvbW1hbmRUb2tlbml6ZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IENv
bW1hbmRUb2tlbml6ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KQogICAgICAgICA6IG1faW5w
dXQoaW5wdXQpCi0gICAgICAgICwgbV9wb3NOZXh0U2VwYXJhdG9yKDApCiAgICAgewogICAgICAg
ICBwdW1wKCk7CiAgICAgfQpAQCAtMTc0MCw3ICsxNzA4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgY29uc3QgY2hhciBrU2VwYXJhdG9yID0gJ1wnJzsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
bV9pbnB1dDsKICAgICBzdGQ6OnN0cmluZyBtX25leHQ7Ci0gICAgc2l6ZV90IG1fcG9zTmV4dFNl
cGFyYXRvcjsKKyAgICBzaXplX3QgbV9wb3NOZXh0U2VwYXJhdG9yIHsgMCB9OwogfTsKIAogdm9p
ZCBDb21tYW5kVG9rZW5pemVyOjpwdW1wKCkKQEAgLTE4MTQsOCArMTc4Miw3IEBAIGJvb2wgVGVz
dENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhciogaW5wdXRMaW5lKQogICAgIAogICAgIFRl
c3RPcHRpb25zIG9wdGlvbnMgPSB0ZXN0T3B0aW9uc0ZvclRlc3QoY29tbWFuZCk7CiAKLSAgICBX
S1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwoY29tbWFu
ZC5wYXRoT3JVUkwuY19zdHIoKSkpOwotICAgIG1fY3VycmVudEludm9jYXRpb24gPSBtYWtlVW5p
cXVlPFRlc3RJbnZvY2F0aW9uPih3a1VSTC5nZXQoKSwgb3B0aW9ucyk7CisgICAgbV9jdXJyZW50
SW52b2NhdGlvbiA9IG1ha2VVbmlxdWU8VGVzdEludm9jYXRpb24+KGFkb3B0V0soY3JlYXRlVGVz
dFVSTChjb21tYW5kLnBhdGhPclVSTC5jX3N0cigpKSkuZ2V0KCksIG9wdGlvbnMpOwogCiAgICAg
aWYgKGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyB8fCBtX3Nob3VsZER1bXBQaXhlbHNGb3JBbGxU
ZXN0cykKICAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0SXNQaXhlbFRlc3QoY29tbWFu
ZC5leHBlY3RlZFBpeGVsSGFzaCk7CkBAIC0xOTQ0LDE4ICsxOTExLDkgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6Z3B1UHJvY2Vzc0RpZENyYXNoKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1Byb2Nl
c3NJRCBwcm9jZXMKICAgICBzdGF0aWNfY2FzdDxUZXN0Q29udHJvbGxlcio+KGNvbnN0X2Nhc3Q8
dm9pZCo+KGNsaWVudEluZm8pKS0+Z3B1UHJvY2Vzc0RpZENyYXNoKHByb2Nlc3NJRCk7CiB9CiAK
LXZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZShXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBib29sIHN5bmNo
cm9ub3VzKQordm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJv
bUluamVjdGVkQnVuZGxlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBib29sIHN5bmNocm9u
b3VzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXlLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJLZXkiKSk7Ci0gICAgV0tTdHJpbmdSZWYga2V5
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBrZXlLZXkuZ2V0KCkpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBz
dGF0aWNfY2FzdDxXS0V2ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgbW9kaWZpZXJzS2V5LmdldCgpKSkpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBsb2NhdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkxvY2F0aW9uIikpOwotICAgIHVuc2lnbmVkIGxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBsb2NhdGlvbktleS5nZXQoKSkp
KSk7Ci0KLSAgICBtX2V2ZW50U2VuZGVyUHJveHktPmtleURvd24oa2V5LCBtb2RpZmllcnMsIGxv
Y2F0aW9uKTsKKyAgICBtX2V2ZW50U2VuZGVyUHJveHktPmtleURvd24oc3RyaW5nVmFsdWUoZGlj
dGlvbmFyeSwgIktleSIpLCB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJzIiksIHVp
bnQ2NFZhbHVlKGRpY3Rpb25hcnksICJMb2NhdGlvbiIpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJv
bGxlcjo6ZGlkUmVjZWl2ZUxpdmVEb2N1bWVudHNMaXN0KFdLQXJyYXlSZWYgbGl2ZURvY3VtZW50
TGlzdCkKQEAgLTE5NjQsMTggKzE5MjIsOCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNl
aXZlTGl2ZURvY3VtZW50c0xpc3QoV0tBcnJheVJlZiBsaXZlRG9jdW1lbnRMaXN0KQogCiAgICAg
SGFzaE1hcDx1aW50NjRfdCwgU3RyaW5nPiBkb2N1bWVudEluZm87CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1Eb2N1bWVudHM7ICsraSkgewotICAgICAgICBXS1R5cGVSZWYgaXRlbSA9
IFdLQXJyYXlHZXRJdGVtQXRJbmRleChsaXZlRG9jdW1lbnRMaXN0LCBpKTsKLSAgICAgICAgaWYg
KGl0ZW0gJiYgV0tHZXRUeXBlSUQoaXRlbSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpIHsK
LSAgICAgICAgICAgIFdLRGljdGlvbmFyeVJlZiBsaXZlRG9jdW1lbnRJdGVtID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihpdGVtKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGlkS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
aWQiKSk7Ci0gICAgICAgICAgICBXS1VJbnQ2NFJlZiBkb2N1bWVudElEID0gc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobGl2ZURvY3VtZW50SXRlbSwg
aWRLZXkuZ2V0KCkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVy
bEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVybCIpKTsKLSAg
ICAgICAgICAgIFdLU3RyaW5nUmVmIGRvY3VtZW50VVJMID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobGl2ZURvY3VtZW50SXRlbSwgdXJsS2V5Lmdl
dCgpKSk7Ci0KLSAgICAgICAgICAgIGRvY3VtZW50SW5mby5hZGQoV0tVSW50NjRHZXRWYWx1ZShk
b2N1bWVudElEKSwgdG9XVEZTdHJpbmcoZG9jdW1lbnRVUkwpKTsKLSAgICAgICAgfQorICAgICAg
ICBpZiAoYXV0byBkaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKFdLQXJyYXlHZXRJdGVtQXRJ
bmRleChsaXZlRG9jdW1lbnRMaXN0LCBpKSkpCisgICAgICAgICAgICBkb2N1bWVudEluZm8uYWRk
KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJpZCIpLCB0b1dURlN0cmluZyhzdHJpbmdWYWx1ZShk
aWN0aW9uYXJ5LCAidXJsIikpKTsKICAgICB9CiAKICAgICBpZiAoIWRvY3VtZW50SW5mby5zaXpl
KCkpIHsKQEAgLTIwMDcsNjAgKzE5NTUsMzUgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAg
ICAgICAgaWYgKG1fc3RhdGUgIT0gUnVubmluZ1Rlc3QpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgICAgIFdLU3RyaW5n
UmVmIHN1Yk1lc3NhZ2VOYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzdWJNZXNzYWdlS2V5LmdldCgp
KSk7Ci0KLSAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2Fn
ZU5hbWUsICJNb3VzZURvd24iKSB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1l
c3NhZ2VOYW1lLCAiTW91c2VVcCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gYnV0dG9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QnV0dG9uIikpOwotICAgICAgICAgICAgdW5zaWduZWQgYnV0dG9uID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25LZXkuZ2V0KCkp
KSkpOworICAgICAgICBhdXRvIGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJv
ZHkpOworICAgICAgICBhdXRvIHN1Yk1lc3NhZ2VOYW1lID0gc3RyaW5nVmFsdWUoZGljdGlvbmFy
eSwgIlN1Yk1lc3NhZ2UiKTsKIAotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1v
ZGlmaWVycyIpKTsKLSAgICAgICAgICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gc3Rh
dGljX2Nhc3Q8V0tFdmVudE1vZGlmaWVycz4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIG1vZGlmaWVyc0tleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8g
V2ViUHJvY2VzcwotICAgICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
c3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSkKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPm1vdXNlRG93bihidXR0b24sIG1vZGlmaWVycyk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVVwKGJ1dHRvbiwgbW9k
aWZpZXJzKTsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVz
c2FnZU5hbWUsICJNb3VzZURvd24iKSkgeworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5
LT5tb3VzZURvd24odWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRWYWx1
ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJzIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CiAKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2Fn
ZU5hbWUsICJNb3VzZVVwIikpIHsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91
c2VVcCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiksIHVpbnQ2NFZhbHVlKGRpY3Rp
b25hcnksICJNb2RpZmllcnMiKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwg
IktleURvd24iKSkgewotICAgICAgICAgICAgZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUlu
amVjdGVkQnVuZGxlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZmFsc2UpOworICAgICAgICAgICAg
ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKGRpY3Rpb25hcnksIGZh
bHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VTY3JvbGxCeSIp
KSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBkb3VibGUg
eCA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpOwotCi0g
ICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IFdL
RG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotCi0gICAgICAg
ICAgICAvLyBGb3J3YXJkIHRvIFdlYlByb2Nlc3MKLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQ
cm94eS0+bW91c2VTY3JvbGxCeSh4LCB5KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94
eS0+bW91c2VTY3JvbGxCeShkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpLCBkb3VibGVWYWx1
ZShkaWN0aW9uYXJ5LCAiWSIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAi
TW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzIikpIHsKLSAgICAgICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB4ID0gV0tEb3VibGVHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gV0tEb3Vi
bGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaGFzZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBoYXNlIikpOwotICAgICAgICAgICAgaW50
IHBoYXNlID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgcGhhc2VLZXkuZ2V0KCkpKSkpOwotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1vbWVudHVtS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
TW9tZW50dW0iKSk7Ci0gICAgICAgICAgICBpbnQgbW9tZW50dW0gPSBzdGF0aWNfY2FzdDxpbnQ+
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb21lbnR1bUtleS5nZXQoKSkpKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcworICAg
ICAgICAgICAgYXV0byB4ID0gZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKTsKKyAgICAgICAg
ICAgIGF1dG8geSA9IGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJZIik7CisgICAgICAgICAgICBh
dXRvIHBoYXNlID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlBoYXNlIik7CisgICAgICAgICAg
ICBhdXRvIG1vbWVudHVtID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vbWVudHVtIik7CiAg
ICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRN
b21lbnR1bVBoYXNlcyh4LCB5LCBwaGFzZSwgbW9tZW50dW0pOwotCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIApAQCAtMjA4Myw0MiArMjAwNiwyNiBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3Ry
aW5nUmVmCiAgICAgICAgIGlmIChtX3N0YXRlICE9IFJ1bm5pbmdUZXN0KQogICAgICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogCi0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tE
aWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdWJNZXNzYWdlIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBzdWJNZXNzYWdlTmFtZSA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgc3ViTWVzc2FnZUtleS5nZXQoKSkpOworICAgICAgICBhdXRvIGRp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHN1
Yk1lc3NhZ2VOYW1lID0gc3RyaW5nVmFsdWUoZGljdGlvbmFyeSwgIlN1Yk1lc3NhZ2UiKTsKIAog
ICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwg
IktleURvd24iKSkgewotICAgICAgICAgICAgZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUlu
amVjdGVkQnVuZGxlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdHJ1ZSk7Ci0KKyAgICAgICAgICAg
IGRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShkaWN0aW9uYXJ5LCB0
cnVlKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1l
c3NhZ2VOYW1lLCAiTW91c2VEb3duIikgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhz
dWJNZXNzYWdlTmFtZSwgIk1vdXNlVXAiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGJ1dHRvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkJ1dHRvbiIpKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ1dHRvbiA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYnV0dG9uS2V5Lmdl
dCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVy
c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVycyIp
KTsKLSAgICAgICAgICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8
V0tFdmVudE1vZGlmaWVycz4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1vZGlm
aWVyc0tleS5nZXQoKSkpKSk7CisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VEb3duIikpIHsKKyAgICAgICAgICAgIG1fZXZlbnRT
ZW5kZXJQcm94eS0+bW91c2VEb3duKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwg
dWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlmaWVycyIpKTsKKyAgICAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAv
LyBGb3J3YXJkIHRvIFdlYlByb2Nlc3MKLSAgICAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VEb3duIikpCi0gICAgICAgICAgICAg
ICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZURvd24oYnV0dG9uLCBtb2RpZmllcnMpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VV
cChidXR0b24sIG1vZGlmaWVycyk7CisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTW91c2VVcCIpKSB7CisgICAgICAgICAgICBtX2V2ZW50
U2VuZGVyUHJveHktPm1vdXNlVXAodWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1
aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9kaWZpZXJzIikpOwogICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZU1vdmVUbyIp
KSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgICAgICAgICBkb3VibGUg
eCA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpOwotCi0g
ICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IFdL
RG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpOwotCi0gICAgICAg
ICAgICAvLyBGb3J3YXJkIHRvIFdlYlByb2Nlc3MKLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQ
cm94eS0+bW91c2VNb3ZlVG8oeCwgeSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHkt
Pm1vdXNlTW92ZVRvKGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIiksIGRvdWJsZVZhbHVlKGRp
Y3Rpb25hcnksICJZIikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51
bGxwdHIpOwogICAgICAgICB9CiAKQEAgLTIxNDQsODEgKzIwNTEsNDggQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShX
S1N0cmluZ1JlZgogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZUZvcmNlQ2hhbmdlZCIpKSB7Ci0gICAgICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZm9yY2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJGb3JjZSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSBmb3Jj
ZSA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmb3JjZUtleS5nZXQoKSkpKTsK
LQotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZUZvcmNlQ2hhbmdlZChmb3Jj
ZSk7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRm9yY2VDaGFuZ2VkKGRv
dWJsZVZhbHVlKGRpY3Rpb25hcnksICJGb3JjZSIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdl
TmFtZSwgIkNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiWCIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB4ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
WSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBwYWdlZEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBh
Z2VkIikpOwotICAgICAgICAgICAgYm9vbCBwYWdlZCA9IHN0YXRpY19jYXN0PGJvb2w+KFdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwYWdlZEtleS5nZXQoKSkpKSk7Ci0KLSAgICAg
ICAgICAgIC8vIEZvcndhcmQgdG8gV2ViUHJvY2VzcworICAgICAgICAgICAgYXV0byB4ID0gZG91
YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKTsKKyAgICAgICAgICAgIGF1dG8geSA9IGRvdWJsZVZh
bHVlKGRpY3Rpb25hcnksICJZIik7CisgICAgICAgICAgICBhdXRvIHBhZ2VkID0gYm9vbGVhblZh
bHVlKGRpY3Rpb25hcnksICJQYWdlZCIpOwogICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5
LT5jb250aW51b3VzTW91c2VTY3JvbGxCeSh4LCB5LCBwYWdlZCk7CiAgICAgICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIkxlYXBGb3J3YXJk
IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZUluTWlsbGlzZWNvbmRzIikp
OwotICAgICAgICAgICAgdW5zaWduZWQgdGltZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdGltZUtleS5nZXQoKSkpKSk7Ci0KLSAgICAg
ICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bGVhcEZvcndhcmQodGltZSk7CisgICAgICAgICAg
ICBtX2V2ZW50U2VuZGVyUHJveHktPmxlYXBGb3J3YXJkKHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnks
ICJUaW1lSW5NaWxsaXNlY29uZHMiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAg
ICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAi
QWRkVG91Y2hQb2ludCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
eEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAg
ICAgICAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHhLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlki
KSk7Ci0gICAgICAgICAgICBpbnQgeSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBtX2V2ZW50
U2VuZGVyUHJveHktPmFkZFRvdWNoUG9pbnQoeCwgeSk7CisgICAgICAgICAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPmFkZFRvdWNoUG9pbnQodWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlgiKSwgdWlu
dDY0VmFsdWUoZGljdGlvbmFyeSwgIlkiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIlVwZGF0ZVRvdWNoUG9pbnQiKSkgewot
ICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgICAgICAgICBpbnQg
aW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBpbmRleEtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsK
LSAgICAgICAgICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0
YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgeEtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiWSIpKTsKLSAgICAgICAgICAgIGludCB5ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKSk7Ci0KKyAgICAgICAgICAgIGF1
dG8gaW5kZXggPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiSW5kZXgiKTsKKyAgICAgICAgICAg
IGF1dG8geCA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJYIik7CisgICAgICAgICAgICBhdXRv
IHkgPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWSIpOwogICAgICAgICAgICAgbV9ldmVudFNl
bmRlclByb3h5LT51cGRhdGVUb3VjaFBvaW50KGluZGV4LCB4LCB5KTsKICAgICAgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiU2V0VG91Y2hN
b2RpZmllciIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZp
ZXJLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllciIp
KTsKLSAgICAgICAgICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXIgPSBzdGF0aWNfY2FzdDxX
S0V2ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9kaWZp
ZXJLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
ZW5hYmxlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRW5hYmxl
IikpOwotICAgICAgICAgICAgYm9vbCBlbmFibGUgPSBzdGF0aWNfY2FzdDxib29sPihXS1VJbnQ2
NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZW5hYmxlS2V5LmdldCgpKSkpKTsKLQorICAgICAg
ICAgICAgYXV0byBtb2RpZmllciA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllciIp
OworICAgICAgICAgICAgYXV0byBlbmFibGUgPSBib29sZWFuVmFsdWUoZGljdGlvbmFyeSwgIkVu
YWJsZSIpOwogICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5zZXRUb3VjaE1vZGlmaWVy
KG1vZGlmaWVyLCBlbmFibGUpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJTZXRUb3VjaFBvaW50UmFkaXVzIikpIHsKLSAgICAg
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmFkaXVzWCIpKTsKLSAgICAgICAgICAgIGludCB4ID0gc3Rh
dGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtleS5nZXQo
KSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmFkaXVzWSIpKTsKLSAgICAgICAg
ICAgIGludCB5ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgeUtleS5nZXQoKSkpKSk7Ci0KKyAgICAgICAgICAgIGF1dG8geCA9IHVpbnQ2NFZhbHVl
KGRpY3Rpb25hcnksICJSYWRpdXNYIik7CisgICAgICAgICAgICBhdXRvIHkgPSB1aW50NjRWYWx1
ZShkaWN0aW9uYXJ5LCAiUmFkaXVzWSIpOwogICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5
LT5zZXRUb3VjaFBvaW50UmFkaXVzKHgsIHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CkBAIC0yMjQ5LDE2ICsyMTIzLDEyIEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGUoV0tTdHJpbmdSZWYKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiUmVsZWFzZVRvdWNoUG9pbnQiKSkg
ewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgICAgICAgICBp
bnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBpbmRleEtleS5nZXQoKSkpKSk7Ci0gICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHkt
PnJlbGVhc2VUb3VjaFBvaW50KGluZGV4KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94
eS0+cmVsZWFzZVRvdWNoUG9pbnQodWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkluZGV4IikpOwog
ICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5h
bWUsICJDYW5jZWxUb3VjaFBvaW50IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBpbmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkluZGV4IikpOwotICAgICAgICAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaW5kZXhLZXkuZ2V0KCkpKSkpOwotICAgICAg
ICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5jYW5jZWxUb3VjaFBvaW50KGluZGV4KTsKKyAgICAg
ICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+Y2FuY2VsVG91Y2hQb2ludCh1aW50NjRWYWx1ZShk
aWN0aW9uYXJ5LCAiSW5kZXgiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIobnVsbHB0cik7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMjI3NSwxNCArMjE0NSwxNiBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKFdLU3RyaW5nUmVmCiAgICAgfTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWx3YXlzQWNjZXB0Q29va2llcyIpKSB7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiBhY2NlcHQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgV0tIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSA9IFdL
Qm9vbGVhbkdldFZhbHVlKGFjY2VwdCkgPyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlz
IDoga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwor
ICAgICAgICBhdXRvIHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpKQorICAgICAgICAgICAgPyBrV0tIVFRQQ29va2llQWNjZXB0
UG9saWN5QWx3YXlzCisgICAgICAgICAgICA6IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5
RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKICAgICAgICAgcmV0dXJuIHNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kocG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRPbmx5
QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMiKSkgewotICAgICAgICBXS0Jvb2xlYW5SZWYgYWNjZXB0
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLSFRU
UENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShhY2NlcHQpID8g
a1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFp
biA6IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsK
KyAgICAgICAgYXV0byBwb2xpY3kgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkKKyAgICAgICAgICAgID8ga1dLSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFpbgorICAgICAgICAgICAgOiBr
V0tIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAgICAg
ICAgIHJldHVybiBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0KIApAQCAtMjQwMywxMiArMjI3NSw4IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnNldEJsb2NrQWxsUGx1Z2lucyhib29sIHNob3VsZEJsb2NrKQogCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIGF1dG8gcG9saWN5ID0gc2hvdWxkQmxvY2sgPyBrV0tQbHVnaW5M
b2FkQ2xpZW50UG9saWN5QmxvY2sgOiBrV0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5QWxsb3c7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZU5ldHNjYXBlID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdpbiIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZUZsYXNoID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBs
dWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW1wdHlTdHJpbmcgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7Ci0gICAgV0tDb250ZXh0U2V0
UGx1Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRleHQuZ2V0KCksIHBvbGljeSwgZW1wdHlTdHJp
bmcuZ2V0KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgZW1wdHlTdHJpbmcuZ2V0KCkpOwotICAgIFdL
Q29udGV4dFNldFBsdWdpbkxvYWRDbGllbnRQb2xpY3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ks
IGVtcHR5U3RyaW5nLmdldCgpLCBuYW1lRmxhc2guZ2V0KCksIGVtcHR5U3RyaW5nLmdldCgpKTsK
KyAgICBXS0NvbnRleHRTZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwg
cG9saWN5LCB0b1dLKCIiKS5nZXQoKSwgdG9XSygiY29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdp
biIpLmdldCgpLCB0b1dLKCIiKS5nZXQoKSk7CisgICAgV0tDb250ZXh0U2V0UGx1Z2luTG9hZENs
aWVudFBvbGljeShtX2NvbnRleHQuZ2V0KCksIHBvbGljeSwgdG9XSygiIikuZ2V0KCksIHRvV0so
ImNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVnaW4iKS5nZXQoKSwgdG9XSygiIikuZ2V0
KCkpOwogI2VuZGlmCiB9CiAKQEAgLTI0MjMsMjkgKzIyOTEsMjQgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6c2V0UGx1Z2luU3VwcG9ydGVkTW9kZShjb25zdCBTdHJpbmcmIG1vZGUpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gZW1w
dHlBcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGFsbE9yaWdpbnMgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNwZWNpZmljT3Jp
Z2luID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibG9jYWxob3N0Iikp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBkZk5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNeSBwZXJzb25hbCBQREYiKSk7Ci0gICAgV0tDb250
ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgYWxsT3JpZ2lucy5nZXQoKSwg
cGRmTmFtZS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAg
YXV0byBlbXB0eUFycmF5ID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lTmV0c2NhcGUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1Z2luIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtaW1lVHlwZU5ldHNjYXBlID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1u
ZXRzY2FwZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gbWltZVR5cGVz
TmV0c2NhcGUgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwotICAgIFdLQXJyYXlB
cHBlbmRJdGVtKG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCBtaW1lVHlwZU5ldHNjYXBlLmdldCgp
KTsKKyAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dL
KCIiKS5nZXQoKSwgdG9XSygiTXkgcGVyc29uYWwgUERGIikuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0
KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5h
bWVQZGYgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXQgYnVp
bHQtaW4gUERGIikpOworICAgIGF1dG8gbmFtZU5ldHNjYXBlID0gdG9XSygiY29tLmFwcGxlLnRl
c3RuZXRzY2FwZXBsdWdpbiIpOworICAgIGF1dG8gbWltZVR5cGVzTmV0c2NhcGUgPSBhZG9wdFdL
KFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1pbWVUeXBl
c05ldHNjYXBlLmdldCgpLCB0b1dLKCJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBl
IikuZ2V0KCkpOworICAgIGF1dG8gbmFtZVBkZiA9IHRvV0soIldlYktpdCBidWlsdC1pbiBQREYi
KTsKIAogICAgIGlmIChtX3Vuc3VwcG9ydGVkUGx1Z2luTW9kZSA9PSAiYWxsT3JpZ2lucyIpIHsK
LSAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgYWxs
T3JpZ2lucy5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBtaW1lVHlwZXNOZXRzY2FwZS5nZXQo
KSwgZW1wdHlBcnJheS5nZXQoKSk7Ci0gICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdp
bihtX2NvbnRleHQuZ2V0KCksIGFsbE9yaWdpbnMuZ2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5
QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOworICAgICAgICBXS0NvbnRleHRBZGRTdXBw
b3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCB0b1dLKCIiKS5nZXQoKSwgbmFtZU5ldHNjYXBl
LmdldCgpLCBtaW1lVHlwZXNOZXRzY2FwZS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAg
ICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0soIiIp
LmdldCgpLCBuYW1lUGRmLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChtX3Vuc3VwcG9ydGVkUGx1Z2lu
TW9kZSA9PSAic3BlY2lmaWNPcmlnaW4iKSB7Ci0gICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRl
ZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHNwZWNpZmljT3JpZ2luLmdldCgpLCBuYW1lTmV0c2Nh
cGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKLSAg
ICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgc3BlY2lm
aWNPcmlnaW4uZ2V0KCksIG5hbWVQZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJy
YXkuZ2V0KCkpOworICAgICAgICBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0
LmdldCgpLCB0b1dLKCJsb2NhbGhvc3QiKS5nZXQoKSwgbmFtZU5ldHNjYXBlLmdldCgpLCBtaW1l
VHlwZXNOZXRzY2FwZS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4
dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0soImxvY2FsaG9zdCIpLmdl
dCgpLCBuYW1lUGRmLmdldCgpLCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTI0OTEsMTQgKzIzNTQsMTIgQEAgYm9vbCBU
ZXN0Q29udHJvbGxlcjo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShXS1Bh
Z2VSZWYgcGFnZSwgV0tQcm8KIHsKICAgICBpZiAobV9zaG91bGRMb2dDYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5vdXRw
dXRUZXh0KCJjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlXG4iKTsKLSAgICBX
S1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1l
ID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRBdXRoZW50aWNhdGlvblNjaGVtZShwcm90ZWN0aW9uU3Bh
Y2UpOwotICAgIAotICAgIGlmIChhdXRoZW50aWNhdGlvblNjaGVtZSA9PSBrV0tQcm90ZWN0aW9u
U3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZCkg
ewotICAgICAgICBzdGQ6OnN0cmluZyBob3N0ID0gdG9TVEQoYWRvcHRXSyhXS1Byb3RlY3Rpb25T
cGFjZUNvcHlIb3N0KHByb3RlY3Rpb25TcGFjZSkpLmdldCgpKTsKKyAgICBhdXRvIHNjaGVtZSA9
IFdLUHJvdGVjdGlvblNwYWNlR2V0QXV0aGVudGljYXRpb25TY2hlbWUocHJvdGVjdGlvblNwYWNl
KTsKKyAgICBpZiAoc2NoZW1lID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2No
ZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkKSB7CisgICAgICAgIGF1dG8gaG9zdCA9
IHRvU1REKGFkb3B0V0soV0tQcm90ZWN0aW9uU3BhY2VDb3B5SG9zdChwcm90ZWN0aW9uU3BhY2Up
KSk7CiAgICAgICAgIHJldHVybiBob3N0ID09ICJsb2NhbGhvc3QiIHx8IGhvc3QgPT0gIjEyNy4w
LjAuMSIgfHwgKG1fYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzICYmIG1f
YWxsb3dlZEhvc3RzLmZpbmQoaG9zdCkgIT0gbV9hbGxvd2VkSG9zdHMuZW5kKCkpOwogICAgIH0K
LSAgICAKLSAgICByZXR1cm4gYXV0aGVudGljYXRpb25TY2hlbWUgPD0ga1dLUHJvdGVjdGlvblNw
YWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQRGlnZXN0IHx8IGF1dGhlbnRpY2F0aW9uU2NoZW1l
ID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lT0F1dGg7CisgICAgcmV0
dXJuIHNjaGVtZSA8PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBE
aWdlc3QgfHwgc2NoZW1lID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1l
T0F1dGg7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZEZpbmlzaE5hdmlnYXRpb24oV0tQ
YWdlUmVmIHBhZ2UsIFdLTmF2aWdhdGlvblJlZiBuYXZpZ2F0aW9uKQpAQCAtMjUwNiw4ICsyMzY3
LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTmF2aWdhdGlvbihXS1BhZ2VSZWYg
cGFnZSwgV0tOYXZpZ2F0aW9uUmVmIG5hdmlnYXQKICAgICBpZiAobV9zdGF0ZSAhPSBSZXNldHRp
bmcpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTCA9
IGFkb3B0V0soV0tGcmFtZUNvcHlVUkwoV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpKSk7Ci0gICAg
aWYgKCFXS1VSTElzRXF1YWwod2tVUkwuZ2V0KCksIGJsYW5rVVJMKCkpKQorICAgIGlmICghV0tV
UkxJc0VxdWFsKGFkb3B0V0soV0tGcmFtZUNvcHlVUkwoV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2Up
KSkuZ2V0KCksIGJsYW5rVVJMKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RvbmVSZXNl
dHRpbmcgPSB0cnVlOwpAQCAtMjUyNyw3ICsyMzg3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdLUGFnZVJlZiBwYWdlLCBXS0F1dGhl
bnQKICAgICAgICAgbV9zZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0NhbGxzQ291bnQrKzsK
IAogICAgICAgICBpZiAobV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSkgewotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tDcmVkZW50aWFsUmVmPiBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRl
bnRpYWxDcmVhdGUodG9XSygiYWNjZXB0IHNlcnZlciB0cnVzdCIpLmdldCgpLCB0b1dLKCIiKS5n
ZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSkpOworICAgICAgICAgICAgYXV0byBj
cmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRpYWxDcmVhdGUodG9XSygiYWNjZXB0IHNlcnZl
ciB0cnVzdCIpLmdldCgpLCB0b1dLKCIiKS5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNl
Tm9uZSkpOwogICAgICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VD
cmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIGNyZWRlbnRpYWwuZ2V0KCkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNTQxLDkgKzI0MDEsOSBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmIHBhZ2Us
IFdLQXV0aGVudAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3RkOjpzdHJpbmcgaG9z
dCA9IHRvU1REKGFkb3B0V0soV0tQcm90ZWN0aW9uU3BhY2VDb3B5SG9zdChwcm90ZWN0aW9uU3Bh
Y2UpKS5nZXQoKSk7CisgICAgYXV0byBob3N0ID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1Byb3Rl
Y3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rpb25TcGFjZSkpLmdldCgpKTsKICAgICBpbnQgcG9y
dCA9IFdLUHJvdGVjdGlvblNwYWNlR2V0UG9ydChwcm90ZWN0aW9uU3BhY2UpOwotICAgIFN0cmlu
ZyBtZXNzYWdlID0gbWFrZVN0cmluZyhob3N0LmNfc3RyKCksICc6JywgcG9ydCwgIiAtIGRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAtICIsIHRvU3RyaW5nKGF1dGhlbnRpY2F0aW9u
U2NoZW1lKSwgIiAtICIpOworICAgIFN0cmluZyBtZXNzYWdlID0gbWFrZVN0cmluZyhob3N0LCAn
OicsIHBvcnQsICIgLSBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgLSAiLCB0b1N0
cmluZyhhdXRoZW50aWNhdGlvblNjaGVtZSksICIgLSAiKTsKICAgICBpZiAoIW1faGFuZGxlc0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcykKICAgICAgICAgbWVzc2FnZS5hcHBlbmQoIlNpbXVsYXRp
bmcgY2FuY2VsbGVkIGF1dGhlbnRpY2F0aW9uIHNoZWV0XG4iKTsKICAgICBlbHNlCkBAIC0yNTU0
LDEzICsyNDE0LDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYgcGFnZSwgV0tBdXRoZW50CiAgICAgICAgIFdLQXV0aGVu
dGljYXRpb25EZWNpc2lvbkxpc3RlbmVyVXNlQ3JlZGVudGlhbChkZWNpc2lvbkxpc3RlbmVyLCAw
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dXNlcm5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1fYXV0aGVu
dGljYXRpb25Vc2VybmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHBhc3N3b3JkID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyht
X2F1dGhlbnRpY2F0aW9uUGFzc3dvcmQudXRmOCgpLmRhdGEoKSkpOwotICAgIFdLUmV0YWluUHRy
PFdLQ3JlZGVudGlhbFJlZj4gY3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFsQ3JlYXRl
KHVzZXJuYW1lLmdldCgpLCBwYXNzd29yZC5nZXQoKSwga1dLQ3JlZGVudGlhbFBlcnNpc3RlbmNl
Rm9yU2Vzc2lvbikpOworICAgIGF1dG8gY3JlZGVudGlhbCA9IGFkb3B0V0soV0tDcmVkZW50aWFs
Q3JlYXRlKHRvV0sobV9hdXRoZW50aWNhdGlvblVzZXJuYW1lKS5nZXQoKSwgdG9XSyhtX2F1dGhl
bnRpY2F0aW9uUGFzc3dvcmQpLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNz
aW9uKSk7CiAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFs
KGRlY2lzaW9uTGlzdGVuZXIsIGNyZWRlbnRpYWwuZ2V0KCkpOwogfQogCi0gICAgCisKIC8vIFdL
Q29udGV4dERvd25sb2FkQ2xpZW50CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRvd25sb2FkRGlk
U3RhcnQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLRG93bmxvYWRSZWYgZG93bmxvYWQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCkBAIC0yNzA0LDkgKzI1NjIsOSBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogICAgIGRlY2lkZVBv
bGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RJZlBvc3NpYmxlKCk7CiB9CiAKLXZv
aWQgVGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0
aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRv
dWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRp
bmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JM
ZXZlbCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJs
ZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBh
bHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJs
ZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBtX2dlb2xvY2F0
aW9uUHJvdmlkZXItPnNldFBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBw
cm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRp
dHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNw
ZWVkLCBwcm92aWRlc0Zsb29yTGV2ZWwsIGZsb29yTGV2ZWwpOworICAgIG1fZ2VvbG9jYXRpb25Q
cm92aWRlci0+c2V0UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0
dWRlLCBhbHRpdHVkZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCwgZmxvb3JMZXZlbCk7CiB9CiAK
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFi
bGVFcnJvcihXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UpCkBAIC0yODU2LDkgKzI3MTQsNyBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpoYW5kbGVDaGVja09mVXNlck1lZGlhUGVybWlzc2lvbkZvck9y
aWdpbihXS0ZyYW1lUmVmIGZyYW1lLAogewogICAgIGF1dG8gb3JpZ2luSGFzaCA9IHVzZXJNZWRp
YU9yaWdpbkhhc2godXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIHRvcExldmVsRG9jdW1lbnRPcmln
aW4pOwogICAgIGF1dG8gc2FsdCA9IHNhbHRGb3JPcmlnaW4oZnJhbWUsIG9yaWdpbkhhc2gpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzYWx0U3RyaW5nID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzYWx0LnV0ZjgoKS5kYXRhKCkpKTsKLQotICAgIFdLVXNl
ck1lZGlhUGVybWlzc2lvbkNoZWNrU2V0VXNlck1lZGlhQWNjZXNzSW5mbyhjaGVja1JlcXVlc3Qs
IHNhbHRTdHJpbmcuZ2V0KCksIHNldHRpbmdzRm9yT3JpZ2luKG9yaWdpbkhhc2gpLnBlcnNpc3Rl
bnRQZXJtaXNzaW9uKCkpOworICAgIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrU2V0VXNlck1l
ZGlhQWNjZXNzSW5mbyhjaGVja1JlcXVlc3QsIHRvV0soc2FsdCkuZ2V0KCksIHNldHRpbmdzRm9y
T3JpZ2luKG9yaWdpbkhhc2gpLnBlcnNpc3RlbnRQZXJtaXNzaW9uKCkpOwogfQogCiBib29sIFRl
c3RDb250cm9sbGVyOjpoYW5kbGVEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc1JlcXVl
c3QoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4pCkBAIC0yOTE0LDggKzI3NzAsOCBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjpkZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dElmUG9zc2libGUoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAg
ICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBhdWRpb0RldmljZVVJRHMgPSBhZG9wdFdLKFdLVXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RBdWRpb0RldmljZVVJRHMocmVxdWVzdCkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiB2aWRlb0RldmljZVVJRHMgPSBhZG9wdFdLKFdLVXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RWaWRlb0RldmljZVVJRHMocmVxdWVzdCkpOworICAgICAg
ICBhdXRvIGF1ZGlvRGV2aWNlVUlEcyA9IGFkb3B0V0soV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVx
dWVzdEF1ZGlvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7CisgICAgICAgIGF1dG8gdmlkZW9EZXZpY2VV
SURzID0gYWRvcHRXSyhXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0VmlkZW9EZXZpY2VVSURz
KHJlcXVlc3QpKTsKIAogICAgICAgICBpZiAoIVdLQXJyYXlHZXRTaXplKHZpZGVvRGV2aWNlVUlE
cy5nZXQoKSkgJiYgIVdLQXJyYXlHZXRTaXplKGF1ZGlvRGV2aWNlVUlEcy5nZXQoKSkpIHsKICAg
ICAgICAgICAgIFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3REZW55KHJlcXVlc3QsIGtXS05v
Q29uc3RyYWludHMpOwpAQCAtMjkyNiwxMyArMjc4MiwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpkZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKQog
ICAgICAgICBpZiAoV0tBcnJheUdldFNpemUodmlkZW9EZXZpY2VVSURzLmdldCgpKSkKICAgICAg
ICAgICAgIHZpZGVvRGV2aWNlVUlEID0gcmVpbnRlcnByZXRfY2FzdDxXS1N0cmluZ1JlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KHZpZGVvRGV2aWNlVUlEcy5nZXQoKSwgMCkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICB2aWRlb0RldmljZVVJRCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIiIpKTsKKyAgICAgICAgICAgIHZpZGVvRGV2aWNlVUlEID0gdG9XSygi
Iik7CiAKICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF1ZGlvRGV2aWNlVUlEOwog
ICAgICAgICBpZiAoV0tBcnJheUdldFNpemUoYXVkaW9EZXZpY2VVSURzLmdldCgpKSkKICAgICAg
ICAgICAgIGF1ZGlvRGV2aWNlVUlEID0gcmVpbnRlcnByZXRfY2FzdDxXS1N0cmluZ1JlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KGF1ZGlvRGV2aWNlVUlEcy5nZXQoKSwgMCkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBhdWRpb0RldmljZVVJRCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIiIpKTsKKyAgICAgICAgICAgIGF1ZGlvRGV2aWNlVUlEID0gdG9XSygi
Iik7CiAKICAgICAgICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdEFsbG93KHJlcXVlc3Qs
IGF1ZGlvRGV2aWNlVUlELmdldCgpLCB2aWRlb0RldmljZVVJRC5nZXQoKSk7CiAgICAgfQpAQCAt
MzA1NiwxMiArMjkxMiw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZE5hdmlnYXRlV2l0aE5h
dmlnYXRpb25EYXRhKFdLTmF2aWdhdGlvbkRhdGFSZWYgbmF2aWdhdGlvCiAgICAgaWYgKCFtX3No
b3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFja3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8v
IFVSTAogICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weVVSTChuYXZp
Z2F0aW9uRGF0YSkpOwogICAgIGF1dG8gdXJsU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhX
S1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkpOwotICAgIC8vIFRpdGxlCiAgICAgYXV0byB0aXRs
ZSA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tOYXZpZ2F0aW9uRGF0YUNvcHlUaXRsZShuYXZpZ2F0
aW9uRGF0YSkpKTsKLSAgICAvLyBIVFRQIG1ldGhvZAogICAgIGF1dG8gcmVxdWVzdCA9IGFkb3B0
V0soV0tOYXZpZ2F0aW9uRGF0YUNvcHlPcmlnaW5hbFJlcXVlc3QobmF2aWdhdGlvbkRhdGEpKTsK
ICAgICBhdXRvIG1ldGhvZCA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUhU
VFBNZXRob2QocmVxdWVzdC5nZXQoKSkpKTsKIApAQCAtMzIwNiw3ICszMDU5LDcgQEAgdm9pZCBn
ZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrKHZvaWQqIHVzZXJEYXRhLCBXS0FycmF5
UmVmIGRvbWFpbkxpc3QpCiAKICAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHREb21haW5zOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXS0FycmF5R2V0U2l6ZShkb21haW5MaXN0KTsgaSsr
KSB7Ci0gICAgICAgIGF1dG8gZG9tYWluID0gIHJlaW50ZXJwcmV0X2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5MaXN0LCBpKSk7CisgICAgICAgIGF1dG8gZG9t
YWluID0gcmVpbnRlcnByZXRfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4
KGRvbWFpbkxpc3QsIGkpKTsKICAgICAgICAgYXV0byBidWZmZXIgPSBzdGQ6OnZlY3RvcjxjaGFy
PihXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoZG9tYWluKSk7CiAgICAgICAgIGF1
dG8gc3RyaW5nTGVuZ3RoID0gV0tTdHJpbmdHZXRVVEY4Q1N0cmluZyhkb21haW4sIGJ1ZmZlci5k
YXRhKCksIGJ1ZmZlci5zaXplKCkpOwogCkBAIC0zOTc4LDcgKzM4MzEsNyBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpyZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKQogdm9pZCBUZXN0Q29udHJv
bGxlcjo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5n
JiBidW5kbGVJZGVudGlmaWVyKQogewogICAgIEluQXBwQnJvd3NlclByaXZhY3lDYWxsYmFja0Nv
bnRleHQgY29udGV4dCgqdGhpcyk7Ci0gICAgV0tXZWJzaXRlRGF0YVN0b3JlVXBkYXRlQnVuZGxl
SWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3Rv
cmUoKSwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhidW5kbGVJZGVudGlm
aWVyLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSwgJmNvbnRleHQsIGluQXBwQnJvd3NlclByaXZhY3lW
b2lkUmVzdWx0Q2FsbGJhY2spOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZVVwZGF0ZUJ1bmRsZUlk
ZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0b3Jl
KCksIHRvV0soYnVuZGxlSWRlbnRpZmllcikuZ2V0KCksICZjb250ZXh0LCBpbkFwcEJyb3dzZXJQ
cml2YWN5Vm9pZFJlc3VsdENhbGxiYWNrKTsKICAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5v
VGltZW91dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRl
eCBmOTRkNTdjMTQ3YjMxNmYwNzhmYTg1ZjIyMGY0MDc2MDk0MTEzYzhjLi5mZjgzOTRlYzAzODc3
YTZkYmMwZGM0YjNlNDhjMGVmNGYzZjNiMzM5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oCkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIEdl
b2xvY2F0aW9uLgogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wpOwotICAg
IHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUg
bG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91Ymxl
IGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRl
QWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92
aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUg
Zmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91
YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25h
bDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJs
ZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZh
aWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKICAgICB2b2lkIGhhbmRsZUdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
UmVmKTsKICAgICBib29sIGlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAppbmRleCBhNWI2ZGQwNTU4MGFl
MGMyZDk1NzA3N2RmZTQ1MGE0ODZlNmQwMWVjLi41MDEyN2Y2Nzg0MWUwM2M1NTY4ZTE5ZTk5MTE3
OTdjOGZjMmQ2YjgyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNw
cApAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RJ
bnZvY2F0aW9uLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5j
bHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJVSVNjcmlwdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIKQEAgLTY2LDIxICs2NiwxNyBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV1RSIHsKIAorc3RhdGljIHZvaWQgcG9zdFBh
Z2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIFdLVHlwZVJlZiBib2R5ID0gbnVsbHB0cikKK3sK
KyAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgYm9keSk7
Cit9CisKIFRlc3RJbnZvY2F0aW9uOjpUZXN0SW52b2NhdGlvbihXS1VSTFJlZiB1cmwsIGNvbnN0
IFRlc3RPcHRpb25zJiBvcHRpb25zKQogICAgIDogbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBt
X3VybCh1cmwpCiAgICAgLCBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJlRlc3RJbnZvY2F0aW9uOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJM
Q29weVN0cmluZyhtX3VybC5nZXQoKSkpOwotCi0gICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IFdL
U3RyaW5nR2V0TGVuZ3RoKHVybFN0cmluZy5nZXQoKSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gdXJs
VmVjdG9yOwotICAgIHVybFZlY3Rvci5yZXNpemUoc3RyaW5nTGVuZ3RoICsgMSk7Ci0KLSAgICBX
S1N0cmluZ0dldFVURjhDU3RyaW5nKHVybFN0cmluZy5nZXQoKSwgdXJsVmVjdG9yLmRhdGEoKSwg
c3RyaW5nTGVuZ3RoICsgMSk7Ci0KLSAgICBtX3VybFN0cmluZyA9IFN0cmluZyh1cmxWZWN0b3Iu
ZGF0YSgpLCBzdHJpbmdMZW5ndGgpOworICAgIG1fdXJsU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRv
cHRXSyhXS1VSTENvcHlTdHJpbmcobV91cmwuZ2V0KCkpKS5nZXQoKSk7CiAKICAgICAvLyBGSVhN
RTogQXZvaWQgbXV0YXRpbmcgdGhlIHNldHRpbmcgdmlhIGEgdGVzdCBkaXJlY3RvcnkgbGlrZSB0
aGlzLgogICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IHVybENvbnRhaW5zKCJsb2FkaW5n
LyIpICYmICF1cmxDb250YWlucygiOi8vbG9jYWxob3N0Iik7CkBAIC0xMjksMjggKzEyNSwxMiBA
QCBib29sIFRlc3RJbnZvY2F0aW9uOjpzaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKCkg
Y29uc3QKIAogV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gVGVzdEludm9jYXRp
b246OmNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkoKQogewotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IGJlZ2luVGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHVzZUZsZXhpYmxlVmlld3BvcnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJVc2VGbGV4aWJsZVZpZXdwb3J0IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gdXNlRmxleGlibGVWaWV3cG9ydFZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
b3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCB1c2VGbGV4aWJsZVZpZXdwb3J0S2V5LmdldCgp
LCB1c2VGbGV4aWJsZVZpZXdwb3J0VmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGR1bXBQaXhlbHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJEdW1wUGl4ZWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZHVt
cFBpeGVsc1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wUGl4ZWxzKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgZHVtcFBp
eGVsc0tleS5nZXQoKSwgZHVtcFBpeGVsc1ZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB0aW1lb3V0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVGltZW91dCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gdGltZW91
dFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtX3RpbWVvdXQubWlsbGlzZWNvbmRzKCkp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCB0
aW1lb3V0S2V5LmdldCgpLCB0aW1lb3V0VmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycktleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyclZhbHVl
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCBkdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnJLZXkuZ2V0KCksIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyclZh
bHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc1ZhbHVlID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhvcHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRl
ZEltYWdlVHlwZXMuY19zdHIoKSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0
TWVzc2FnZUJvZHkuZ2V0KCksIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzS2V5LmdldCgp
LCBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc1ZhbHVlLmdldCgpKTsKLQorICAgIGF1dG8g
YmVnaW5UZXN0TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJVc2VGbGV4aWJsZVZpZXdw
b3J0Iiwgb3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQpOworICAgIHNldFZhbHVlKGJlZ2lu
VGVzdE1lc3NhZ2VCb2R5LCAiRHVtcFBpeGVscyIsIG1fZHVtcFBpeGVscyk7CisgICAgc2V0VmFs
dWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJUaW1lb3V0Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1fdGltZW91dC5taWxsaXNlY29uZHMoKSkpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3Nh
Z2VCb2R5LCAiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgbV9kdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnIpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXMiLCBvcHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlw
ZXMuY19zdHIoKSk7CiAgICAgcmV0dXJuIGJlZ2luVGVzdE1lc3NhZ2VCb2R5OwogfQogCkBAIC0x
NjgsOSArMTQ4LDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6aW52b2tlKCkKIAogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgY2xlYXIgb3V0IHZpc2l0ZWQgbGlua3MgaGVyZS4KIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkJlZ2luVGVzdCIpKTsKLSAgICBhdXRvIGJlZ2luVGVzdE1lc3NhZ2VC
b2R5ID0gY3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpOwotICAgIFdLUGFnZVBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQmVnaW5UZXN0IiwgY3JlYXRlVGVzdFNldHRpbmdz
RGljdGlvbmFyeSgpLmdldCgpKTsKIAogICAgIG1fc3RhcnRlZFRlc3RpbmcgPSB0cnVlOwogCkBA
IC0zMjcsMTg1ICszMDUsMTA0IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBY2siKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBtZXNzYWdlQm9keVN0cmluZyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VCb2R5U3RyaW5nLCAiQmVnaW5UZXN0IikpIHsKKyAg
ICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHkpLCAiQmVnaW5UZXN0IikpIHsKICAgICAgICAgICAgIG1fZ290SW5pdGlhbFJlc3BvbnNl
ID0gdHJ1ZTsKICAgICAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ub3RpZnlE
b25lKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkRvbmUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBw
aXhlbFJlc3VsdElzUGVuZGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlBpeGVsUmVzdWx0SXNQZW5kaW5nIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcGl4
ZWxSZXN1bHRJc1BlbmRpbmcgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwaXhlbFJlc3VsdElzUGVuZGlu
Z0tleS5nZXQoKSkpOwotICAgICAgICBtX3BpeGVsUmVzdWx0SXNQZW5kaW5nID0gV0tCb29sZWFu
R2V0VmFsdWUocGl4ZWxSZXN1bHRJc1BlbmRpbmcpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgbV9w
aXhlbFJlc3VsdElzUGVuZGluZyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJQaXhlbFJlc3VsdElzUGVuZGluZyIpOwogICAgICAgICBpZiAoIW1fcGl4ZWxSZXN1bHRJc1Bl
bmRpbmcpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3Vs
dEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0
IikpOwotICAgICAgICAgICAgbV9waXhlbFJlc3VsdCA9IHN0YXRpY19jYXN0PFdLSW1hZ2VSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwaXhlbFJl
c3VsdEtleS5nZXQoKSkpOworICAgICAgICAgICAgbV9waXhlbFJlc3VsdCA9IHN0YXRpY19jYXN0
PFdLSW1hZ2VSZWY+KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlBpeGVsUmVzdWx0Iikp
OwogICAgICAgICAgICAgQVNTRVJUKCFtX3BpeGVsUmVzdWx0IHx8IG1fZHVtcFBpeGVscyk7CiAg
ICAgICAgIH0KLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVwYWludFJlY3Rz
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVwYWludFJlY3Rz
IikpOwotICAgICAgICBtX3JlcGFpbnRSZWN0cyA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCByZXBhaW50UmVj
dHNLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9S
ZXN1bHRLZXkgPSAgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXVkaW9S
ZXN1bHQiKSk7Ci0gICAgICAgIG1fYXVkaW9SZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0RhdGFSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhdWRpb1Jl
c3VsdEtleS5nZXQoKSkpOwotCisgICAgICAgIG1fcmVwYWludFJlY3RzID0gc3RhdGljX2Nhc3Q8
V0tBcnJheVJlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUmVwYWludFJlY3RzIikp
OworICAgICAgICBtX2F1ZGlvUmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0tEYXRhUmVmPih2YWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJBdWRpb1Jlc3VsdCIpKTsKICAgICAgICAgZG9uZSgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJUZXh0T3V0cHV0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tT
dHJpbmdSZWYgdGV4dE91dHB1dCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIG1fdGV4dE91dHB1dC5hcHBlbmQodG9XVEZTdHJpbmcodGV4dE91dHB1dCkp
OworICAgICAgICBtX3RleHRPdXRwdXQuYXBwZW5kKHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEdW1wVG9TdGRFcnIiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0ZXh0T3V0cHV0ID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIHRvV1RG
U3RyaW5nKHRleHRPdXRwdXQpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIiVzIiwgdG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKS51dGY4KCkuZGF0
YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGJlZm9yZVVubG9hZFJldHVyblZhbHVlID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShXS0Jvb2xlYW5H
ZXRWYWx1ZShiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRDaHJvbWVJbnB1dEZpZWxk
IikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PmFkZENocm9tZUlucHV0RmllbGQoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bEFkZENocm9tZUlucHV0RmllbGRDYWxsYmFjayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmll
dygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNz
YWdlKCJDYWxsQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlJlbW92ZUNocm9tZUlucHV0RmllbGQiKSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxi
YWNrIikpOwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIDApOworICAgICAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxSZW1vdmVDaHJvbWVJbnB1
dEZpZWxkQ2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkZvY3VzV2ViVmlldyIp
KSB7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5t
YWtlV2ViVmlld0ZpcnN0UmVzcG9uZGVyKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkNhbGxGb2N1c1dlYlZpZXdDYWxsYmFjayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdl
KCJDYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QmFj
a2luZ1NjYWxlRmFjdG9yIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgZG91YmxlIGJhY2tpbmdTY2Fs
ZUZhY3RvciA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3Nh
Z2VCb2R5KSk7Ci0gICAgICAgIFdLUGFnZVNldEN1c3RvbUJhY2tpbmdTY2FsZUZhY3RvcihUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBiYWNraW5nU2Nh
bGVGYWN0b3IpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxTZXRCYWNraW5n
U2NhbGVGYWN0b3JDYWxsYmFjayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVj
dGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2lu
Z1NjYWxlRmFjdG9yKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiQ2FsbFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2siKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1
aW50NjRfdCBub3RpZmljYXRpb25JRCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklE
ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldEFkZHNWaXNpdGVkTGlua3MiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBXS1BhZ2VTZXRBZGRzVmlzaXRlZExpbmtzKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIFdLQm9vbGVhbkdldFZh
bHVlKGVuYWJsZWRXSykpOworICAgICAgICBXS1BhZ2VTZXRBZGRzVmlzaXRlZExpbmtzKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGJvb2xlYW5WYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGVuYWJsZWRXSyA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKFdLQm9vbGVhbkdldFZh
bHVlKGVuYWJsZWRXSykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkp
OwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGxhdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJsYXRpdHVkZSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgbGF0aXR1ZGVX
SyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgbGF0aXR1ZGVLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3Vi
bGUgbGF0aXR1ZGUgPSBXS0RvdWJsZUdldFZhbHVlKGxhdGl0dWRlV0spOwotCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsb25naXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImxvbmdpdHVkZSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYg
bG9uZ2l0dWRlV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxvbmdpdHVkZUtleVdLLmdldCgpKSk7Ci0g
ICAgICAgIGRvdWJsZSBsb25naXR1ZGUgPSBXS0RvdWJsZUdldFZhbHVlKGxvbmdpdHVkZVdLKTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNjdXJhY3lLZXlXSyA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFjY3VyYWN5IikpOwotICAgICAgICBX
S0RvdWJsZVJlZiBhY2N1cmFjeVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhY2N1cmFjeUtleVdLLmdl
dCgpKSk7Ci0gICAgICAgIGRvdWJsZSBhY2N1cmFjeSA9IFdLRG91YmxlR2V0VmFsdWUoYWNjdXJh
Y3lXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1
ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVz
QWx0aXR1ZGUiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwcm92aWRlc0FsdGl0dWRlV0sgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc0FsdGl0dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAg
Ym9vbCBwcm92aWRlc0FsdGl0dWRlID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNBbHRpdHVk
ZVdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0aXR1ZGVLZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFsdGl0dWRlIikpOwotICAg
ICAgICBXS0RvdWJsZVJlZiBhbHRpdHVkZVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhbHRpdHVkZUtl
eVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBhbHRpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUo
YWx0aXR1ZGVXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygicHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5IikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYg
cHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5V0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc0Fs
dGl0dWRlQWNjdXJhY3lLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzQWx0aXR1
ZGVBY2N1cmFjeSA9IFdLQm9vbGVhbkdldFZhbHVlKHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdL
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0aXR1ZGVBY2N1cmFjeUtl
eVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWx0aXR1ZGVBY2N1
cmFjeSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgYWx0aXR1ZGVBY2N1cmFjeVdLID0gc3RhdGlj
X2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBhbHRpdHVkZUFjY3VyYWN5S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91Ymxl
IGFsdGl0dWRlQWNjdXJhY3kgPSBXS0RvdWJsZUdldFZhbHVlKGFsdGl0dWRlQWNjdXJhY3lXSyk7
Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzSGVhZGluZ0tleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNIZWFkaW5n
IikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNIZWFkaW5nV0sgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBwcm92aWRlc0hlYWRpbmdLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3Zp
ZGVzSGVhZGluZyA9IFdLQm9vbGVhbkdldFZhbHVlKHByb3ZpZGVzSGVhZGluZ1dLKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVhZGluZ0tleVdLID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVhZGluZyIpKTsKLSAgICAgICAgV0tEb3VibGVS
ZWYgaGVhZGluZ1dLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBoZWFkaW5nS2V5V0suZ2V0KCkpKTsKLSAg
ICAgICAgZG91YmxlIGhlYWRpbmcgPSBXS0RvdWJsZUdldFZhbHVlKGhlYWRpbmdXSyk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzU3BlZWRLZXlXSyA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzU3BlZWQiKSk7Ci0gICAg
ICAgIFdLQm9vbGVhblJlZiBwcm92aWRlc1NwZWVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92
aWRlc1NwZWVkS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92aWRlc1NwZWVkID0gV0tC
b29sZWFuR2V0VmFsdWUocHJvdmlkZXNTcGVlZFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc3BlZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoInNwZWVkIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBzcGVlZFdLID0gc3RhdGljX2Nh
c3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBzcGVlZEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBzcGVlZCA9IFdLRG91
YmxlR2V0VmFsdWUoc3BlZWRXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHByb3ZpZGVzRmxvb3JMZXZlbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygicHJvdmlkZXNGbG9vckxldmVsIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJv
dmlkZXNGbG9vckxldmVsV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc0Zsb29yTGV2ZWxL
ZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCA9IFdLQm9vbGVh
bkdldFZhbHVlKHByb3ZpZGVzRmxvb3JMZXZlbFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gZmxvb3JMZXZlbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiZmxvb3JMZXZlbCIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgZmxvb3JMZXZl
bFdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmbG9vckxldmVsS2V5V0suZ2V0KCkpKTsKLSAgICAgICAg
ZG91YmxlIGZsb29yTGV2ZWwgPSBXS0RvdWJsZUdldFZhbHVlKGZsb29yTGV2ZWxXSyk7Ci0KLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRp
dHVkZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRl
c0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkLCBwcm92aWRlc0Zsb29yTGV2
ZWwsIGZsb29yTGV2ZWwpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gbGF0aXR1ZGUgPSBkb3Vi
bGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJsYXRpdHVkZSIpOworICAgICAgICBhdXRv
IGxvbmdpdHVkZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImxvbmdpdHVk
ZSIpOworICAgICAgICBhdXRvIGFjY3VyYWN5ID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiYWNjdXJhY3kiKTsKKyAgICAgICAgYXV0byBhbHRpdHVkZSA9IG9wdGlvbmFsRG91
YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiYWx0aXR1ZGUiKTsKKyAgICAgICAgYXV0
byBhbHRpdHVkZUFjY3VyYWN5ID0gb3B0aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJhbHRpdHVkZUFjY3VyYWN5Iik7CisgICAgICAgIGF1dG8gaGVhZGluZyA9IG9wdGlv
bmFsRG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiaGVhZGluZyIpOworICAgICAg
ICBhdXRvIHNwZWVkID0gb3B0aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJzcGVlZCIpOworICAgICAgICBhdXRvIGZsb29yTGV2ZWwgPSBvcHRpb25hbERvdWJsZVZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImZsb29yTGV2ZWwiKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBs
b25naXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywg
c3BlZWQsIGZsb29yTGV2ZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmlu
Z1JlZiBlcnJvck1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkp
OworICAgICAgICBXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9j
YXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0VXNlck1lZGlhUGVybWlzc2lvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQ
ZXJtaXNzaW9uKFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSykpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVybWlzc2lvbihib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTE1LDExNyArNDEy
LDY2IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRVc2VyTWVkaWFQZXJzaXN0ZW50
UGVybWlzc2lvbkZvck9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25h
cnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVm
PihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBlcm1p
c3Npb25LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBlcm1p
c3Npb24iKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwZXJtaXNzaW9uV0sgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBwZXJtaXNzaW9uS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwZXJtaXNzaW9u
ID0gV0tCb29sZWFuR2V0VmFsdWUocGVybWlzc2lvbldLKTsKLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygib3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW5XSyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgb3JpZ2luS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHBhcmVudE9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGFyZW50T3Jp
Z2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBhcmVudE9yaWdpbktleS5nZXQoKSkpOwotCisgICAg
ICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgYXV0byBwZXJtaXNzaW9uID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgInBlcm1pc3Npb24iKTsKKyAgICAgICAgYXV0byBvcmlnaW5XSyA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIm9yaWdpbiIpOworICAgICAgICBhdXRvIHBh
cmVudE9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGFyZW50
T3JpZ2luIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVk
aWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbihwZXJtaXNzaW9uLCBvcmlnaW5XSywgcGFy
ZW50T3JpZ2luV0spOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZXNldFVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0Q291bnRGb3JPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBv
cmlnaW5LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4i
KSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBvcmln
aW5LZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50
T3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50
T3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW5XSyA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgcGFyZW50T3JpZ2luS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRv
IG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7Cisg
ICAgICAgIGF1dG8gb3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJvcmlnaW4iKTsKKyAgICAgICAgYXV0byBwYXJlbnRPcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgInBhcmVudE9yaWdpbiIpOwogICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkucmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9y
T3JpZ2luKG9yaWdpbldLLCBwYXJlbnRPcmlnaW5XSyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dEN1c3RvbVBvbGljeURlbGVnYXRlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlv
bmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlS
ZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5h
YmxlZEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZW5hYmxl
ZCIpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IGVuYWJsZWRLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIGVuYWJsZWQgPSBXS0Jvb2xlYW5H
ZXRWYWx1ZShlbmFibGVkV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBw
ZXJtaXNzaXZlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJw
ZXJtaXNzaXZlIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcGVybWlzc2l2ZVdLID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgcGVybWlzc2l2ZUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcGVybWlz
c2l2ZSA9IFdLQm9vbGVhbkdldFZhbHVlKHBlcm1pc3NpdmVXSyk7Ci0KKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIGVuYWJsZWQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
ZW5hYmxlZCIpOworICAgICAgICBhdXRvIHBlcm1pc3NpdmUgPSBib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAicGVybWlzc2l2ZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZW5hYmxlZCwgcGVybWlzc2l2ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEhpZGRlbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tE
aWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGlzSW5pdGlhbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiaGlkZGVuIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaGlkZGVuV0sgPSBzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBpc0luaXRpYWxLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIGhpZGRlbiA9
IFdLQm9vbGVhbkdldFZhbHVlKGhpZGRlbldLKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0SGlkZGVuKGhpZGRlbik7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhpZGRlbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiaGlkZGVuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJQcm9jZXNzV29ya1F1
ZXVlIikpIHsKLSAgICAgICAgaWYgKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVl
dWVNYW5hZ2VyKCkucHJvY2Vzc1dvcmtRdWV1ZSgpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJXb3JrUXVldWVQcm9jZXNzZWRDYWxsYmFjayIpKTsKLSAgICAgICAgICAgIFdL
UGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5h
Z2VyKCkucHJvY2Vzc1dvcmtRdWV1ZSgpKQorICAgICAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJX
b3JrUXVldWVQcm9jZXNzZWRDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUJh
Y2tOYXZpZ2F0aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgdWludDY0X3Qgc3RlcENvdW50ID0g
V0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5x
dWV1ZUJhY2tOYXZpZ2F0aW9uKHN0ZXBDb3VudCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVCYWNrTmF2aWdhdGlvbih1aW50NjRW
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUZvcndhcmROYXZp
Z2F0aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgdWludDY0X3Qgc3RlcENvdW50ID0gV0tVSW50
NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUZv
cndhcmROYXZpZ2F0aW9uKHN0ZXBDb3VudCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVGb3J3YXJkTmF2aWdhdGlvbih1aW50NjRW
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUxvYWQiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIGxvYWREYXRhRGljdGlvbmFyeSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJ1cmwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVybFdLID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0
aW9uYXJ5LCB1cmxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gdGFyZ2V0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidGFy
Z2V0IikpOwotICAgICAgICBXS1N0cmluZ1JlZiB0YXJnZXRXSyA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgdGFy
Z2V0S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3Vs
ZE9wZW5FeHRlcm5hbFVSTHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJzaG91bGRPcGVuRXh0ZXJuYWxVUkxzIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgc2hv
dWxkT3BlbkV4dGVybmFsVVJMc1ZhbHVlV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCBzaG91bGRPcGVuRXh0
ZXJuYWxVUkxzS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWQodG9XVEZTdHJpbmcodXJsV0spLCB0b1dU
RlN0cmluZyh0YXJnZXRXSyksIFdLQm9vbGVhbkdldFZhbHVlKHNob3VsZE9wZW5FeHRlcm5hbFVS
THNWYWx1ZVdLKSk7CisgICAgICAgIGF1dG8gbG9hZERhdGFEaWN0aW9uYXJ5ID0gZGljdGlvbmFy
eVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byB1cmwgPSB0b1dURlN0cmluZyhzdHJp
bmdWYWx1ZShsb2FkRGF0YURpY3Rpb25hcnksICJ1cmwiKSk7CisgICAgICAgIGF1dG8gdGFyZ2V0
ID0gdG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAidGFyZ2V0Iikp
OworICAgICAgICBhdXRvIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMgPSBib29sZWFuVmFsdWUobG9h
ZERhdGFEaWN0aW9uYXJ5LCAic2hvdWxkT3BlbkV4dGVybmFsVVJMcyIpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZCh1cmws
IHRhcmdldCwgc2hvdWxkT3BlbkV4dGVybmFsVVJMcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1
ZXVlTG9hZEhUTUxTdHJpbmciKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5
UmVmIGxvYWREYXRhRGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVz
c2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjb250ZW50S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29udGVudCIpKTsKLSAg
ICAgICAgV0tTdHJpbmdSZWYgY29udGVudFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCBjb250ZW50S2V5Lmdl
dCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJiYXNlVVJMIikpOwotICAgICAg
ICBXS1N0cmluZ1JlZiBiYXNlVVJMV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIGJhc2VVUkxLZXkuZ2V0KCkp
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkxLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1bnJlYWNoYWJsZVVSTCIp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkxXSyA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwg
dW5yZWFjaGFibGVVUkxLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIGxvYWREYXRhRGljdGlv
bmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gY29udGVu
dFdLID0gc3RyaW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAiY29udGVudCIpOworICAgICAg
ICBhdXRvIGJhc2VVUkxXSyA9IHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgImJhc2VV
UkwiKTsKKyAgICAgICAgYXV0byB1bnJlYWNoYWJsZVVSTFdLID0gc3RyaW5nVmFsdWUobG9hZERh
dGFEaWN0aW9uYXJ5LCAidW5yZWFjaGFibGVVUkwiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWRIVE1MU3RyaW5nKHRvV1RG
U3RyaW5nKGNvbnRlbnRXSyksIGJhc2VVUkxXSyA/IHRvV1RGU3RyaW5nKGJhc2VVUkxXSykgOiBT
dHJpbmcoKSwgdW5yZWFjaGFibGVVUkxXSyA/IHRvV1RGU3RyaW5nKHVucmVhY2hhYmxlVVJMV0sp
IDogU3RyaW5nKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjM2LDE1NCArNDgyLDEx
NyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVMb2FkaW5nU2NyaXB0IikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
d29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZGluZ1NjcmlwdCh0b1dURlN0cmluZyhzY3JpcHQp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVOb25Mb2FkaW5nU2NyaXB0IikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1
ZXVlTWFuYWdlcigpLnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCh0b1dURlN0cmluZyhzY3JpcHQpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVl
Rm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0UmVqZWN0c1Byb3RlY3Rpb25T
cGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKFdLQm9vbGVhbkdldFZh
bHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRSZWpl
Y3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMo
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEhhbmRs
ZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRIYW5kbGVzQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJv
b2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRM
b2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxk
TG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShXS0Jvb2xlYW5HZXRWYWx1
ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxk
TG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sZWFuVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkTG9nRG93bmxvYWRDYWxs
YmFja3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyhXS0Jvb2xlYW5HZXRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hv
dWxkTG9nRG93bmxvYWRDYWxsYmFja3MoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS1N0cmluZ1JlZiB1c2VybmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPiht
ZXNzYWdlQm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHVzZXJuYW1lID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXV0
aGVudGljYXRpb25Vc2VybmFtZSh0b1dURlN0cmluZyh1c2VybmFtZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tTdHJpbmdSZWYgcGFzc3dvcmQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJv
ZHkpOworICAgICAgICBXS1N0cmluZ1JlZiBwYXNzd29yZCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEF1dGhlbnRpY2F0
aW9uUGFzc3dvcmQodG9XVEZTdHJpbmcocGFzc3dvcmQpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0QmxvY2tBbGxQbHVnaW5zIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBz
aG91bGRCbG9jayA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QmxvY2tBbGxQbHVnaW5zKFdLQm9v
bGVhbkdldFZhbHVlKHNob3VsZEJsb2NrKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRCbG9ja0FsbFBsdWdpbnMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldFBsdWdpblN1cHBvcnRlZE1vZGUiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS1N0cmluZ1JlZiBtb2RlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgbW9kZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFBsdWdpblN1cHBv
cnRlZE1vZGUodG9XVEZTdHJpbmcobW9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91
bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheSIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lk
ZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREZWNpZGVOYXZpZ2F0
aW9uUG9saWN5QWZ0ZXJEZWxheShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5IikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KFdLQm9vbGVhbkdldFZh
bHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91
bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVl
KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXROYXZpZ2F0aW9uR2Vz
dHVyZXNFbmFibGVkKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRJZ25vcmVz
Vmlld3BvcnRTY2FsZUxpbWl0cyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMo
Ym9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3Vs
ZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBX
S0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERvd25sb2Fk
VW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlh
YmxlTUlNRVR5cGVzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyhXS0Jvb2xl
YW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzcyhib29sZWFuVmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3Vs
ZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKFdLQm9vbGVhbkdl
dFZhbHVlKHZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyhib29sZWFuVmFsdWUo
bWVzc2FnZUJvZHkpLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1No
b3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxv
Y2tUaGlyZFBhcnR5Q29va2llcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSksIGZhbHNlKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRCbG9j
a1RoaXJkUGFydHlDb29raWVzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSksIGZhbHNlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiUnVuVUlQcm9jZXNzU2NyaXB0IikpIHsKLSAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2Ny
aXB0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0Iikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0KLSAgICAg
ICAgVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSogaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJ
bnZvY2F0aW9uRGF0YSgpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaW52b2NhdGlvbkRhdGEg
PSBuZXcgVUlTY3JpcHRJbnZvY2F0aW9uRGF0YTsKICAgICAgICAgaW52b2NhdGlvbkRhdGEtPnRl
c3RJbnZvY2F0aW9uID0gdGhpczsKLSAgICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQg
PSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNhbGxiYWNrSURL
ZXkuZ2V0KCkpKSk7Ci0gICAgICAgIGludm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHNjcmlwdEtleS5nZXQoKSkpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+
Y2FsbGJhY2tJRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNhbGxiYWNr
SUQiKTsKKyAgICAgICAgaW52b2NhdGlvbkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlNjcmlwdCIpOwogICAgICAgICBtX3BlbmRpbmdVSVNj
cmlwdEludm9jYXRpb25EYXRhID0gaW52b2NhdGlvbkRhdGE7CiAgICAgICAgIFdLUGFnZUNhbGxB
ZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSwgaW52b2NhdGlvbkRhdGEsIHJ1blVJU2lkZVNjcmlwdEFmdGVy
VXBkYXRlQ2FsbGJhY2spOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSdW5VSVByb2Nlc3NTY3JpcHRJ
bW1lZGlhdGVseSIpKSB7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdEtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNjcmlwdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDYWxsYmFja0lEIikpOwotCi0gICAgICAgIFVJU2NyaXB0SW52b2NhdGlvbkRhdGEq
IGludm9jYXRpb25EYXRhID0gbmV3IFVJU2NyaXB0SW52b2NhdGlvbkRhdGEoKTsKKyAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIGludm9jYXRpb25EYXRhID0gbmV3IFVJU2NyaXB0SW52b2NhdGlvbkRh
dGE7CiAgICAgICAgIGludm9jYXRpb25EYXRhLT50ZXN0SW52b2NhdGlvbiA9IHRoaXM7Ci0gICAg
ICAgIGludm9jYXRpb25EYXRhLT5jYWxsYmFja0lEID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBjYWxsYmFja0lES2V5LmdldCgpKSkpOwotICAgICAgICBpbnZv
Y2F0aW9uRGF0YS0+c2NyaXB0U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzY3JpcHRLZXkuZ2V0
KCkpKTsKKyAgICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQgPSB1aW50NjRWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJDYWxsYmFja0lEIik7CisgICAgICAgIGludm9jYXRpb25E
YXRhLT5zY3JpcHRTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJT
Y3JpcHQiKTsKICAgICAgICAgbV9wZW5kaW5nVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSA9IGludm9j
YXRpb25EYXRhOwogICAgICAgICBydW5VSVNpZGVTY3JpcHRJbW1lZGlhdGVseShudWxscHRyLCBp
bnZvY2F0aW9uRGF0YSk7CiAgICAgICAgIHJldHVybjsKQEAgLTc5MSwxMSArNjAwLDkgQEAgdm9p
ZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tT
dHJpbmdSZWYgbWVzc2FnZU5hbWUKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiSW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24iKSkgewogICAgICAgICBh
dXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm5hbWUiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBuYW1lS2V5
LmdldCgpKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkaXNtaXNzZXNBdXRv
bWF0aWNhbGx5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGlz
bWlzc2VzQXV0b21hdGljYWxseSIpKTsKLSAgICAgICAgYXV0byBkaXNtaXNzZXNBdXRvbWF0aWNh
bGx5ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZGlzbWlzc2VzQXV0b21hdGljYWxseUtleS5nZXQoKSkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW5zdGFsbEN1c3RvbU1lbnVB
Y3Rpb24odG9XVEZTdHJpbmcobmFtZS5nZXQoKSksIFdLQm9vbGVhbkdldFZhbHVlKGRpc21pc3Nl
c0F1dG9tYXRpY2FsbHkpKTsKKyAgICAgICAgYXV0byBuYW1lID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAibmFtZSIpOworICAgICAgICBhdXRvIGRpc21pc3Nlc0F1dG9tYXRp
Y2FsbHkgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiZGlzbWlzc2VzQXV0
b21hdGljYWxseSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW5zdGFs
bEN1c3RvbU1lbnVBY3Rpb24odG9XVEZTdHJpbmcobmFtZSksIGRpc21pc3Nlc0F1dG9tYXRpY2Fs
bHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04MDUsNyArNjEyLDcgQEAgdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJp
bmdSZWYgbWVzc2FnZU5hbWUKICAgICAgICAgVmVjdG9yPFN0cmluZz4gYWN0aW9uczsKICAgICAg
ICAgYWN0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgICAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgKytpbmRleCkKLSAgICAgICAgICAgIGFjdGlv
bnMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0
SXRlbUF0SW5kZXgobWVzc2FnZUJvZHlBcnJheSwgaW5kZXgpKSkpOworICAgICAgICAgICAgYWN0
aW9ucy5hcHBlbmQodG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUoV0tBcnJheUdldEl0ZW1BdEluZGV4
KG1lc3NhZ2VCb2R5QXJyYXksIGluZGV4KSkpKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldEFsbG93ZWRNZW51QWN0aW9ucyhhY3Rpb25zKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTgyOCwxMDggKzYzNSw2MyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUo
V0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYg
aG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01v
ZGUoaG9zdE5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTGFzdFNlZW4i
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlv
bmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlE
aWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYg
dmFsdWUgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NMYXN0U2Vlbihob3N0TmFtZSwg
V0tEb3VibGVHZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5h
bWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAg
ICAgICBhdXRvIHZhbHVlID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFs
dWUiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NM
YXN0U2Vlbihob3N0TmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0
aWNzTWVyZ2VTdGF0aXN0aWMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25h
cnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFt
ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVEb21haW4xS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVEb21haW4xIikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVEb21haW4yS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVEb21haW4yIikp
OwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbGFzdFNlZW5LZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMYXN0U2VlbiIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhhZFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNHcmFuZGZh
dGhlcmVkS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNHcmFu
ZGZhdGhlcmVkIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNQcmV2YWxl
bnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ByZXZhbGVu
dCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzVmVyeVByZXZhbGVudEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzVmVyeVByZXZhbGVu
dCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRhdGFSZWNvcmRzUmVtb3Zl
ZEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRhdGFSZWNvcmRz
UmVtb3ZlZCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVzQWNjZXNz
ZWRGaXJzdFBhcnR5SW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJUaW1lc0FjY2Vzc2VkRmlyc3RQYXJ0eUludGVyYWN0aW9uIikpOwotCi0gICAg
ICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5n
ZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZURvbWFpbjEgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHRvcEZyYW1lRG9tYWluMUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0
b3BGcmFtZURvbWFpbjIgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lRG9tYWluMktleS5nZXQo
KSkpOwotICAgICAgICBXS0RvdWJsZVJlZiBsYXN0U2VlbiA9IHN0YXRpY19jYXN0PFdLRG91Ymxl
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbGFz
dFNlZW5LZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGhhZFVzZXJJbnRlcmFjdGlv
biA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGhhZFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpOwotICAg
ICAgICBXS0RvdWJsZVJlZiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gc3RhdGljX2Nhc3Q8
V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9v
bGVhblJlZiBpc0dyYW5kZmF0aGVyZWQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc0dyYW5kZmF0aGVy
ZWRLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzUHJldmFsZW50ID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgaXNQcmV2YWxlbnRLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVm
IGlzVmVyeVByZXZhbGVudCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzVmVyeVByZXZhbGVudEtleS5n
ZXQoKSkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGRhdGFSZWNvcmRzUmVtb3ZlZEtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMoaG9zdE5h
bWUsIHRvcEZyYW1lRG9tYWluMSwgdG9wRnJhbWVEb21haW4yLCBXS0RvdWJsZUdldFZhbHVlKGxh
c3RTZWVuKSwgV0tCb29sZWFuR2V0VmFsdWUoaGFkVXNlckludGVyYWN0aW9uKSwgV0tEb3VibGVH
ZXRWYWx1ZShtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNH
cmFuZGZhdGhlcmVkKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNQcmV2YWxlbnQpLCBXS0Jvb2xlYW5H
ZXRWYWx1ZShpc1ZlcnlQcmV2YWxlbnQpLCBXS1VJbnQ2NEdldFZhbHVlKGRhdGFSZWNvcmRzUmVt
b3ZlZCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlW
YWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHRvcEZyYW1l
RG9tYWluMSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lRG9t
YWluMSIpOworICAgICAgICBhdXRvIHRvcEZyYW1lRG9tYWluMiA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lRG9tYWluMiIpOworICAgICAgICBhdXRvIGxhc3RT
ZWVuID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTGFzdFNlZW4iKTsKKyAg
ICAgICAgYXV0byBoYWRVc2VySW50ZXJhY3Rpb24gPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiSGFkVXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gbW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvbiA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBpc0dyYW5kZmF0aGVyZWQg
PSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNHcmFuZGZhdGhlcmVkIik7
CisgICAgICAgIGF1dG8gaXNQcmV2YWxlbnQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiSXNQcmV2YWxlbnQiKTsKKyAgICAgICAgYXV0byBpc1ZlcnlQcmV2YWxlbnQgPSBi
b29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNWZXJ5UHJldmFsZW50Iik7Cisg
ICAgICAgIGF1dG8gZGF0YVJlY29yZHNSZW1vdmVkID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiRGF0YVJlY29yZHNSZW1vdmVkIik7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMoaG9zdE5hbWUsIHRvcEZy
YW1lRG9tYWluMSwgdG9wRnJhbWVEb21haW4yLCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9u
LCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50
LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwot
Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNf
Y2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBo
YWRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJl
bW92YWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gaXNQcmV2YWxlbnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJc1ByZXZhbGVudCIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFt
ZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhhZFVzZXJJbnRl
cmFjdGlvbktleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNTY2hlZHVsZWRGb3JB
bGxCdXRDb29raWVEYXRhUmVtb3ZhbCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzU2NoZWR1bGVkRm9y
QWxsQnV0Q29va2llRGF0YVJlbW92YWxLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVm
IGlzUHJldmFsZW50ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNQcmV2YWxlbnRLZXkuZ2V0KCkpKTsK
LQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0V4cGly
ZWRTdGF0aXN0aWMoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKGhhZFVzZXJJbnRlcmFjdGlv
biksIFdLQm9vbGVhbkdldFZhbHVlKGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwpLCBXS0Jvb2xlYW5HZXRWYWx1ZShpc1ByZXZhbGVudCkpOworICAgICAgICBhdXRvIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAg
IGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0
TmFtZSIpOworICAgICAgICBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJIYWRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0
byBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsID0gYm9vbGVhblZhbHVlKG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwiKTsKKyAgICAgICAgYXV0byBpc1ByZXZhbGVudCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJJc1ByZXZhbGVudCIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMoaG9zdE5hbWUsIGhhZFVzZXJJ
bnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2
YWxlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFu
UmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAg
ICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJI
b3N0TmFtZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUsIHZhbHVlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0
VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKGhv
c3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1
dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFt
ZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTk0NCw1MSArNzA2LDM1IEBAIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3Nh
Z2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlm
aWVkU2luY2VIb3VycyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGhvdXJzID0g
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0
b3JlTW9kaWZpZWRTaW5jZUhvdXJzKFdLVUludDY0R2V0VmFsdWUoaG91cnMpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJl
ciIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlcihXS0Jvb2xlYW5H
ZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGUoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U3RhdGlzdGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c1RvU2FtZVNpdGVTdHJpY3RDb29raWVzKGhvc3ROYW1lKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llcyhzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0
Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAg
ICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0
PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gZmlyc3RQYXJ0eVVSTFN0cmluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkZpcnN0UGFydHlVUkwiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBjbmFtZVVSTFN0cmluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkNOQU1FIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgZmly
c3RQYXJ0eVVSTFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZmlyc3RQYXJ0eVVSTFN0cmluZ0tl
eS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBjbmFtZVVSTFN0cmluZyA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgY25hbWVVUkxTdHJpbmdLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBmaXJzdFBhcnR5VVJMU3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiRmlyc3RQYXJ0eVVSTCIpOworICAgICAgICBhdXRvIGNuYW1lVVJMU3Ry
aW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQ05BTUUiKTsKICAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9z
dENOQU1FRG9tYWluKGZpcnN0UGFydHlVUkxTdHJpbmcsIGNuYW1lVVJMU3RyaW5nKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBl
SUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW4oY25hbWVVUkxTdHJpbmcp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RoaXJk
UGFydHlDTkFNRURvbWFpbihzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xMDEyLDggKzc1OCw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1l
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRB
cHBsaWNhdGlvbk1hbmlmZXN0IikpIHsKICNpZmRlZiBfX0JMT0NLU19fCiAgICAgICAgIFdLUGFn
ZUdldEFwcGxpY2F0aW9uTWFuaWZlc3RfYihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBeewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RGlkR2V0QXBwbGljYXRpb25NYW5pZmVzdCIpKTsKLSAgICAgICAgICAgIFdLUGFnZVBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgICAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkRpZEdldEFwcGxpY2F0aW9uTWFuaWZlc3QiKTsKICAgICAgICAgfSk7CiAjZWxz
ZQogICAgICAgICAvLyBGSVhNRTogQWRkIEFQSSBmb3IgbG9hZGluZyB0aGUgbWFuaWZlc3Qgb24g
bm9uLV9fQkxPQ0tTX18gcG9ydHMuCkBAIC0xMDIzLDE2ICs3NjgsMTAgQEAgdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYg
bWVzc2FnZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdl
dFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiho
b3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5h
bWUiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihob3N0TmFtZSwgdmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0xMDQzLDggKzc4Miw3IEBAIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3Nh
Z2VOYW1lCiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldEFwcEJvdW5kRG9tYWlucyIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tBcnJheUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tBcnJheVJlZiBv
cmlnaW5VUkxzID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXBwQm91bmREb21haW5zKG9yaWdpblVS
THMpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXBwQm91bmREb21h
aW5zKHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTEwNTUsOTQgKzc5Myw3MCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVk
QgogewogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
SW5pdGlhbGl6YXRpb24iKSkgewogICAgICAgICBhdXRvIHNldHRpbmdzID0gY3JlYXRlVGVzdFNl
dHRpbmdzRGljdGlvbmFyeSgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVz
dW1lVGVzdGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJl
c3VtZVRlc3RpbmciKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcmVzdW1l
VGVzdGluZ1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9zdGFydGVkVGVzdGluZykp
OwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHNldHRpbmdzLmdldCgpLCByZXN1bWVUZXN0
aW5nS2V5LmdldCgpLCByZXN1bWVUZXN0aW5nVmFsdWUuZ2V0KCkpOworICAgICAgICBzZXRWYWx1
ZShzZXR0aW5ncywgIlJlc3VtZVRlc3RpbmciLCBtX3N0YXJ0ZWRUZXN0aW5nKTsKICAgICAgICAg
cmV0dXJuIHNldHRpbmdzOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0RHVtcFBpeGVscyIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAg
ICBtX2R1bXBQaXhlbHMgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIG1fZHVtcFBpeGVscyA9IGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldER1bXBQaXhlbHMiKSkK
ICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcFBpeGVscykpOwog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRX
aGF0VG9EdW1wIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgbV93aGF0VG9EdW1wID0gc3RhdGljX2Nh
c3Q8V2hhdFRvRHVtcD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
bWVzc2FnZUJvZHkpKSk7CisgICAgICAgIG1fd2hhdFRvRHVtcCA9IHN0YXRpY19jYXN0PFdoYXRU
b0R1bXA+KHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkdldFdoYXRUb0R1bXAiKSkKICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fd2hhdFRvRHVtcCkpKTsKIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0V2FpdFVudGlsRG9uZSIp
KSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFu
R2V0VHlwZUlEKCkpOwotICAgICAgICBzZXRXYWl0VW50aWxEb25lKHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpKSkpOworICAgICAgICBzZXRXYWl0VW50aWxEb25lKGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRXYWl0VW50aWxEb25lIikp
CiAgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX3dhaXRVbnRpbERvbmUp
KTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBtX2R1bXBG
cmFtZUxvYWRDYWxsYmFja3MgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihXS0Jvb2xlYW5H
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAg
ICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIikpCiAg
ICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBGcmFtZUxvYWRDYWxs
YmFja3MpKTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0Q2FuT3BlbldpbmRvd3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgbV9jYW5PcGVu
V2luZG93cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KFdLQm9vbGVhbkdldFZhbHVlKHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIG1fY2FuT3Bl
bldpbmRvd3MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFdpbmRvd0lzS2V5IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiBpc0tleVZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5zZXRX
aW5kb3dJc0tleShXS0Jvb2xlYW5HZXRWYWx1ZShpc0tleVZhbHVlKSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5zZXRXaW5kb3dJc0tleShib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRW
aWV3U2l6ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdpZHRoS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygid2lkdGgiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBoZWlnaHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJoZWlnaHQiKSk7Ci0KLSAgICAgICAgV0tEb3VibGVSZWYgd2lkdGhXSyA9
IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgd2lkdGhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYg
aGVpZ2h0V0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhlaWdodEtleS5nZXQoKSkpOwotCi0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5yZXNpemVUbyhXS0Rv
dWJsZUdldFZhbHVlKHdpZHRoV0spLCBXS0RvdWJsZUdldFZhbHVlKGhlaWdodFdLKSk7CisgICAg
ICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgYXV0byB3aWR0aCA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIndpZHRoIik7CisgICAgICAgIGF1dG8gaGVpZ2h0ID0gZG91YmxlVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiaGVpZ2h0Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5yZXNpemVUbyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJJc0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpIHsKLSAgICAg
ICAgYm9vbCBpc0FjdGl2ZSA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0dlb2xvY2F0
aW9uUHJvdmlkZXJBY3RpdmUoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1
bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0FjdGl2ZSkpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0dlb2xv
Y2F0aW9uUHJvdmlkZXJBY3RpdmUoKSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRDYWNoZU1vZGVsIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAg
ICAgdWludDY0X3QgbW9kZWwgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0
UmVmPihtZXNzYWdlQm9keSkpOworICAgICAgICB1aW50NjRfdCBtb2RlbCA9IHVpbnQ2NFZhbHVl
KG1lc3NhZ2VCb2R5KTsKICAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlU2V0Q2FjaGVNb2RlbFN5
bmNocm9ub3VzbHlGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53ZWJzaXRl
RGF0YVN0b3JlKCksIG1vZGVsKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0g
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1dvcmtR
dWV1ZUVtcHR5IikpIHsKLSAgICAgICAgYm9vbCBpc0VtcHR5ID0gVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5pc1dvcmtRdWV1ZUVtcHR5KCk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
aXNFbXB0eSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzV29ya1F1ZXVlRW1wdHkiKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkuaXNXb3JrUXVldWVFbXB0eSgpKSk7CiAKLSAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTmF2aWdhdGlvbigpKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpCisgICAgICAgIHJl
dHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkpKTsKIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYXJE
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkgewogICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYXJEaWRSZWNlaXZlU2VydmVyUmVk
aXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oKTsKQEAgLTExNTAsNDAgKzg2NCwzNSBAQCBX
S1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25v
dXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCIpKSB7
Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShJ
c1NlY3VyZUV2ZW50SW5wdXRFbmFibGVkKCkpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAg
IHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShJc1NlY3VyZUV2ZW50SW5wdXRFbmFibGVk
KCkpKTsKICNlbHNlCi0gICAgICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcmVzdWx0ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGZhbHNlKSk7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldEN1c3RvbVVzZXJBZ2VudCIpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVzZXJBZ2Vu
dCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUGFn
ZVNldEN1c3RvbVVzZXJBZ2VudChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCB1c2VyQWdlbnQpOworICAgICAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdl
bnQoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbGVhblZhbHVl
KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3Vs
ZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIikpIHsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25P
bk5leHROYXZpZ2F0aW9uKFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTaG91bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sZWFuVmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hv
dWxkU3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIikpIHsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25O
ZXh0TmF2aWdhdGlvbihXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U2hvdWxkU3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJvb2xlYW5WYWx1ZSht
ZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkltYWdlQ291bnRJbkdl
bmVyYWxQYXN0ZWJvYXJkIikpIHsKLSAgICAgICAgdW5zaWduZWQgY291bnQgPSBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuaW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoY291bnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbWFnZUNvdW50SW5HZW5lcmFs
UGFzdGVib2FyZCIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSkp
OwogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiRGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcyIpKSB7CiAgICAgICAgIFdLV2Vic2l0ZURhdGFT
dG9yZVJlbW92ZUFsbEluZGV4ZWREYXRhYmFzZXMoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LndlYnNpdGVEYXRhU3RvcmUoKSwgbnVsbHB0ciwgeyB9KTsKQEAgLTExOTEsMTcgKzkwMCwxMCBA
QCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hy
b25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWRkTW9ja01lZGlhRGV2aWNlIikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRU
eXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGVyc2lzdGVudElES2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGVyc2lzdGVudElEIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJMYWJlbCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHR5
cGVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUeXBlIikpOwot
Ci0gICAgICAgIGF1dG8gcGVyc2lzdGVudElEID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwZXJzaXN0ZW50
SURLZXkuZ2V0KCkpKTsKLSAgICAgICAgYXV0byBsYWJlbCA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbGFi
ZWxLZXkuZ2V0KCkpKTsKLSAgICAgICAgYXV0byB0eXBlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0eXBl
S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHBlcnNpc3RlbnRJRCA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlBlcnNpc3RlbnRJRCIpOworICAgICAg
ICBhdXRvIGxhYmVsID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTGFiZWwi
KTsKKyAgICAgICAgYXV0byB0eXBlID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiVHlwZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuYWRkTW9ja01l
ZGlhRGV2aWNlKHBlcnNpc3RlbnRJRCwgbGFiZWwsIHR5cGUpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CkBAIC0xMjEyLDkgKzkxNCw3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4g
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRC
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJSZW1vdmVNb2NrTWVkaWFEZXZpY2UiKSkgewotICAgICAgICBXS1N0cmluZ1JlZiBwZXJz
aXN0ZW50SWQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCi0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZW1vdmVNb2NrTWVkaWFEZXZpY2UocGVy
c2lzdGVudElkKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJlbW92ZU1v
Y2tNZWRpYURldmljZShzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKQEAgLTEyMjQsMTQyICs5MjQsODcgQEAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21J
bmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldE1vY2tDYW1lcmFPcmllbnRhdGlvbiIpKSB7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24oV0tVSW50NjRH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24odWlu
dDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc01v
Y2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCIpKSB7Ci0gICAgICAgIGJvb2wgaXNN
b2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQgPSBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuaXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQoKTsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzTW9ja1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXJFbmFibGVkKSk7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJs
ZWQiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5pc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgp
KSk7CiAgICAgCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJIYXNBcHBCb3VuZFNlc3Npb24iKSkgewotICAgICAgICBib29sIGhhc0FwcEJvdW5kU2Vz
c2lvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNBcHBCb3VuZFNlc3Npb24oKTsK
LSAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0FwcEJvdW5kU2Vzc2lv
bikpOwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIkhhc0FwcEJvdW5kU2Vzc2lvbiIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc0FwcEJvdW5kU2Vzc2lv
bigpKSk7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJDb25uZWN0TW9ja0dhbWVwYWQiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwot
Ci0gICAgICAgIHVpbnQ2NF90IGluZGV4ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpj
b25uZWN0TW9ja0dhbWVwYWQoaW5kZXgpOwotICAgICAgICAKKyAgICAgICAgV2ViQ29yZVRlc3RT
dXBwb3J0Ojpjb25uZWN0TW9ja0dhbWVwYWQodWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEaXNjb25uZWN0TW9ja0dhbWVwYWQiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlE
KCkpOwotCi0gICAgICAgIHVpbnQ2NF90IGluZGV4ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgV2ViQ29yZVRlc3RTdXBw
b3J0OjpkaXNjb25uZWN0TW9ja0dhbWVwYWQoaW5kZXgpOwotCisgICAgICAgIFdlYkNvcmVUZXN0
U3VwcG9ydDo6ZGlzY29ubmVjdE1vY2tHYW1lcGFkKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dhbWVwYWREZXRhaWxzIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZ2FtZXBhZEluZGV4S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZ2FtZXBhZElES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZElEIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWFwcGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIk1hcHBpbmciKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheGlzQ291
bnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBeGlzQ291bnQi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBidXR0b25Db3VudEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbkNvdW50IikpOwotCi0g
ICAgICAgIFdLVUludDY0UmVmIGdhbWVwYWRJbmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZ2FtZXBh
ZEluZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGdhbWVwYWRJRCA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgZ2FtZXBhZElES2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1h
cHBpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIG1hcHBpbmdLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tV
SW50NjRSZWYgYXhpc0NvdW50ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBheGlzQ291bnRLZXkuZ2V0KCkp
KTsKLSAgICAgICAgV0tVSW50NjRSZWYgYnV0dG9uQ291bnQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1
dHRvbkNvdW50S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRN
b2NrR2FtZXBhZERldGFpbHMoV0tVSW50NjRHZXRWYWx1ZShnYW1lcGFkSW5kZXgpLCB0b1dURlN0
cmluZyhnYW1lcGFkSUQpLCB0b1dURlN0cmluZyhtYXBwaW5nKSwgV0tVSW50NjRHZXRWYWx1ZShh
eGlzQ291bnQpLCBXS1VJbnQ2NEdldFZhbHVlKGJ1dHRvbkNvdW50KSk7CisgICAgICAgIGF1dG8g
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgYXV0byBnYW1lcGFkSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJHYW1lcGFkSW5kZXgiKTsKKyAgICAgICAgYXV0byBnYW1lcGFkSUQgPSBzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJHYW1lcGFkSUQiKTsKKyAgICAgICAgYXV0byBtYXBw
aW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTWFwcGluZyIpOworICAg
ICAgICBhdXRvIGF4aXNDb3VudCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IkF4aXNDb3VudCIpOworICAgICAgICBhdXRvIGJ1dHRvbkNvdW50ID0gdWludDY0VmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiQnV0dG9uQ291bnQiKTsKKyAgICAgICAgV2ViQ29yZVRlc3RT
dXBwb3J0OjpzZXRNb2NrR2FtZXBhZERldGFpbHMoZ2FtZXBhZEluZGV4LCB0b1dURlN0cmluZyhn
YW1lcGFkSUQpLCB0b1dURlN0cmluZyhtYXBwaW5nKSwgYXhpc0NvdW50LCBidXR0b25Db3VudCk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSW5kZXhLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheGlzSW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJBeGlzSW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLVUludDY0UmVmIGdhbWVwYWRJbmRleCA9IHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgZ2FtZXBhZEluZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVm
IGF4aXNJbmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYXhpc0luZGV4S2V5LmdldCgpKSk7Ci0gICAg
ICAgIFdLRG91YmxlUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkp
OwotCi0gICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUo
V0tVSW50NjRHZXRWYWx1ZShnYW1lcGFkSW5kZXgpLCBXS1VJbnQ2NEdldFZhbHVlKGF4aXNJbmRl
eCksIFdLRG91YmxlR2V0VmFsdWUodmFsdWUpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8g
Z2FtZXBhZEluZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiR2FtZXBh
ZEluZGV4Iik7CisgICAgICAgIGF1dG8gYXhpc0luZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiQXhpc0luZGV4Iik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBkb3VibGVW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1ZSIpOworICAgICAgICBXZWJDb3JlVGVz
dFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKGdhbWVwYWRJbmRleCwgYXhpc0luZGV4
LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dhbWVwYWRCdXR0
b25WYWx1ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VC
b2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1dHRvbkluZGV4S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uSW5kZXgiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLVUludDY0UmVmIGdhbWVw
YWRJbmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZ2FtZXBhZEluZGV4S2V5LmdldCgpKSk7Ci0gICAg
ICAgIFdLVUludDY0UmVmIGJ1dHRvbkluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25JbmRl
eEtleS5nZXQoKSkpOwotICAgICAgICBXS0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdL
RG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1v
Y2tHYW1lcGFkQnV0dG9uVmFsdWUoV0tVSW50NjRHZXRWYWx1ZShnYW1lcGFkSW5kZXgpLCBXS1VJ
bnQ2NEdldFZhbHVlKGJ1dHRvbkluZGV4KSwgV0tEb3VibGVHZXRWYWx1ZSh2YWx1ZSkpOwotCisg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgYXV0byBnYW1lcGFkSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJHYW1lcGFkSW5kZXgiKTsKKyAgICAgICAgYXV0byBidXR0b25JbmRl
eCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkJ1dHRvbkluZGV4Iik7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJW
YWx1ZSIpOworICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkQnV0dG9u
VmFsdWUoZ2FtZXBhZEluZGV4LCBidXR0b25JbmRleCwgdmFsdWUpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJVc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdENvdW50Rm9yT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlv
bmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlS
ZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3Jp
Z2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikp
OwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgb3JpZ2lu
S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9y
aWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9y
aWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luV0sgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHBhcmVudE9yaWdpbktleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIG9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
b3JpZ2luIik7CisgICAgICAgIGF1dG8gcGFyZW50T3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJwYXJlbnRPcmlnaW4iKTsKICAgICAgICAgdW5zaWduZWQgY291
bnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkudXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RDb3VudEZvck9yaWdpbihvcmlnaW5XSywgcGFyZW50T3JpZ2luV0spOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1VJbnQ2NFJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjb3Vu
dCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzRG9pbmdNZWRpYUNhcHR1cmUiKSkgewot
ICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0RvaW5nTWVkaWFDYXB0dXJlKCkp
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoY291bnQpKTsKICAgICB9CisKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzRG9pbmdNZWRpYUNhcHR1cmUiKSkKKyAgICAgICAgcmV0
dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5p
c0RvaW5nTWVkaWFDYXB0dXJlKCkpKTsKICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4iKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBkb21haW4gPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5jbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKGRvbWFpbik7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5jbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRG9lc1N0
YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tE
aWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBkb21haW5JREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkRvbWFpbklEIikpOwotICAgICAgICBXS1VJbnQ2NFJlZiBkb21haW5JRCA9IHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgZG9tYWluSURLZXkuZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBkb21haW5JREV4aXN0cyA9
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5kb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJ
bkRhdGFiYXNlKFdLVUludDY0R2V0VmFsdWUoZG9tYWluSUQpKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkb21haW5JREV4
aXN0cykpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8g
ZG9tYWluSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJEb21haW5JRCIp
OworICAgICAgICBib29sIGRvbWFpbklERXhpc3RzID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmRvZXNTdGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UoZG9tYWluSUQpOworICAg
ICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZG9tYWluSURFeGlzdHMpKTsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldFN0YXRpc3RpY3NFbmFibGVkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0VuYWJsZWQoV0tCb29s
ZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NFbmFibGVkKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0VwaGVtZXJhbCIpKSB7Ci0gICAgICAg
IGJvb2wgaXNFcGhlbWVyYWwgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0
aWNzRXBoZW1lcmFsKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNFcGhlbWVyYWwpKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NFcGhlbWVyYWwoKSkpOwogICAgIH0KICAgICAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgImR1bXBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzIikpIHsKQEAgLTEzNjgsMjI0ICsxMDEzLDEyOCBAQCBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNN
ZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0
VHlwZUlEKCkpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudCA9IFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSho
b3N0TmFtZSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgYm9vbCBpc1ByZXZhbGVudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5p
c1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IklzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKGhvc3ROYW1l
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICBib29sIGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlz
dGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOworICAg
ICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKICAgICB9
CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJyZXNvdXJjZUhvc3RLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJyZXNvdXJjZUhvc3QiKSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3RLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3QiKSk7Ci0gICAgICAgIAotICAg
ICAgICBXS1N0cmluZ1JlZiBzdWJyZXNvdXJjZUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1YnJl
c291cmNlSG9zdEtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZUhvc3Qg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lSG9zdEtleS5nZXQoKSkpOwotICAgICAgICAKKyAg
ICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2Fn
ZUJvZHkpOworICAgICAgICBhdXRvIHN1YnJlc291cmNlSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIlN1YnJlc291cmNlSG9zdCIpOworICAgICAgICBhdXRvIHRvcEZy
YW1lSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lSG9z
dCIpOwogICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyKHN1YnJlc291cmNlSG9zdCwgdG9wRnJhbWVIb3N0KTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVy
ZWRBc1N1YnJlc291cmNlVW5kZXIpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VV
bmRlcikpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1YkZyYW1lSG9zdEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1YkZyYW1lSG9zdCIpKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lSG9zdEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdCIpKTsKLSAgICAgICAg
Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN1YkZyYW1lSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3Vi
RnJhbWVIb3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lSG9zdCA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0
byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOwor
ICAgICAgICBhdXRvIHN1YkZyYW1lSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIlN1YkZyYW1lSG9zdCIpOworICAgICAgICBhdXRvIHRvcEZyYW1lSG9zdCA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lSG9zdCIpOwogICAgICAgICBi
b29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5pc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lSG9zdCwg
dG9wRnJhbWVIb3N0KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcikpOwogICAgIH0KICAgICAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhvc3RSZWRpcmVjdGVkRnJvbUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkRnJvbSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGhvc3RSZWRpcmVjdGVkVG9LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0UmVkaXJlY3RlZFRvIikpOwotICAgICAgICAKLSAgICAgICAg
V0tTdHJpbmdSZWYgaG9zdFJlZGlyZWN0ZWRGcm9tID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0UmVk
aXJlY3RlZEZyb21LZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdFJlZGlyZWN0
ZWRUbyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdFJlZGlyZWN0ZWRUb0tleS5nZXQoKSkpOwotICAg
ICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFs
dWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3RSZWRpcmVjdGVkRnJvbSA9IHN0cmlu
Z1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3RSZWRpcmVjdGVkRnJvbSIpOworICAg
ICAgICBhdXRvIGhvc3RSZWRpcmVjdGVkVG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJIb3N0UmVkaXJlY3RlZFRvIik7CiAgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNS
ZWRpcmVjdGluZ1RvID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oaG9zdFJlZGlyZWN0ZWRGcm9tLCBob3N0UmVkaXJlY3Rl
ZFRvKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8pKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVn
aXN0ZXJlZEFzUmVkaXJlY3RpbmdUbykpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVy
YWN0aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3RO
YW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9v
bCBoYXNIYWRVc2VySW50ZXJhY3Rpb24gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNT
dGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNIYWRV
c2VySW50ZXJhY3Rpb24pKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYm9vbCBo
YXNIYWRVc2VySW50ZXJhY3Rpb24gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0
aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNIYWRVc2VySW50ZXJhY3Rp
b24pKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJ
RCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAg
ICAgYXV0byBzdWJIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU3ViSG9zdCIpKTsKLSAgICAgICAgYXV0byB0b3BIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wSG9zdCIpKTsKLSAgICAgICAgCi0gICAgICAgIFdL
U3RyaW5nUmVmIHN1Ykhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1Ykhvc3RLZXkuZ2V0KCkpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgdG9wSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wSG9zdEtl
eS5nZXQoKSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlv
bmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBzdWJIb3N0ID0gc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiU3ViSG9zdCIpOworICAgICAgICBhdXRvIHRvcEhv
c3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BIb3N0Iik7CiAgICAg
ICAgIGJvb2wgc3RhdGlzdGljSW5EYXRhYmFzZU9uY2UgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuaXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlKHN1Ykhvc3QsIHRvcEhvc3QpOwog
ICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc3RhdGlzdGljSW5EYXRhYmFz
ZU9uY2UpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVmFsdWUiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFu
UmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLSAgICAgICAg
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRm
YXRoZXJlZChob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0
byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOwor
ICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoaG9zdE5hbWUsIHZhbHVlKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaXNHcmFuZGZh
dGhlcmVkID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0dyYW5kZmF0
aGVyZWQoaG9zdE5hbWUpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICBib29sIGlzR3JhbmRmYXRoZXJlZCA9IFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5k
ZmF0aGVyZWQpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFVzZUlUUERhdGFiYXNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0KLSAgICAg
ICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VJVFBEYXRh
YmFzZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0VXNlSVRQRGF0YWJhc2UoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9z
dE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3RO
YW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVI
b3N0TmFtZSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0
b3BGcmFtZUhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3ROYW1lS2V5Lmdl
dCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5
VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB0b3BGcmFt
ZUhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVI
b3N0TmFtZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihob3N0TmFtZSwgdG9wRnJhbWVIb3N0TmFt
ZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFt
ZUhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9w
RnJhbWVIb3N0TmFtZSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1l
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmlu
Z1JlZiB0b3BGcmFtZUhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3ROYW1l
S2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAg
ICBhdXRvIHRvcEZyYW1lSG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJUb3BGcmFtZUhvc3ROYW1lIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGhvc3ROYW1l
LCB0b3BGcmFtZUhvc3ROYW1lKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwot
ICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhvc3ROYW1lUmVkaXJlY3RlZFRvS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKSk7Ci0gICAgICAgIAotICAgICAg
ICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0
KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8gPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGhvc3ROYW1lUmVkaXJlY3RlZFRvS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAg
ICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdl
Qm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIGhvc3ROYW1lUmVkaXJlY3RlZFRv
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVjdGVk
VG8iKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oaG9zdE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZFRv
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdEZyb20iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9z
dE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZVJlZGly
ZWN0ZWRGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9z
dE5hbWVSZWRpcmVjdGVkRnJvbSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhv
c3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBX
S1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0
TmFtZVJlZGlyZWN0ZWRGcm9tS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAg
ICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJI
b3N0TmFtZSIpOworICAgICAgICBhdXRvIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20gPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIik7CiAg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdEZyb20oaG9zdE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdFRvIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rp
b25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0
TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1l
IikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVk
VG9LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJl
ZGlyZWN0ZWRUbyIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1Jl
ZiBob3N0TmFtZVJlZGlyZWN0ZWRUbyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVj
dGVkVG9LZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0
TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7Cisg
ICAgICAgIGF1dG8gaG9zdE5hbWVSZWRpcmVjdGVkVG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpOwogICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyho
b3N0TmFtZSwgaG9zdE5hbWVSZWRpcmVjdGVkVG8pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20iKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKTsKLSAg
ICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBo
b3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0
ZWRGcm9tID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tS2V5LmdldCgp
KSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rp
b25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdW
YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIGhv
c3ROYW1lUmVkaXJlY3RlZEZyb20gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oaG9zdE5hbWUs
IGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlw
ZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBhdXRvIGZyb21Ib3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRnJvbUhvc3QiKSk7Ci0gICAgICAgIGF1dG8gdG9Ib3N0S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9Ib3N0IikpOwotCi0gICAgICAgIFdLU3RyaW5n
UmVmIGZyb21Ib3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmcm9tSG9zdEtleS5nZXQoKSkpOwotICAg
ICAgICBXS1N0cmluZ1JlZiB0b0hvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvSG9zdEtleS5nZXQo
KSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0
aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGZyb21Ib3N0ID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRnJvbUhvc3QiKTsKKyAgICAgICAgYXV0byB0
b0hvc3QgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb0hvc3QiKTsKICAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uKGZyb21Ib3N0LCB0b0hvc3QpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91
YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihXS0RvdWJsZUdldFZhbHVl
KHNlY29uZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRp
c3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKQEAgLTE2MDAsOTcgKzExNDks
NjkgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5
bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVh
blJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0Iikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0U3RhdGlzdGljc0lzUnVubmluZ1Rlc3QoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NJc1J1
bm5pbmdUZXN0KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRDbGFz
c2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tE
b3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZXJpbmdUaW1lIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKFdLRG91Ymxl
R2V0VmFsdWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNYXhTdGF0aXN0aWNzRW50cmll
cyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50
NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKFdLVUludDY0R2V0VmFs
dWUoZW50cmllcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFBydW5lRW50cmllc0Rvd25UbyIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25UbyhXS1VJbnQ2NEdldFZhbHVlKGVudHJp
ZXMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQ
cnVuZUVudHJpZXNEb3duVG8odWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiKSk7Ci0gICAgICAgIAotICAgICAgICBX
S1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkp
KTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGluY2x1ZGVIdHRwT25seUNvb2tpZXMgPSBzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdChob3N0TmFt
ZSwgV0tCb29sZWFuR2V0VmFsdWUoaW5jbHVkZUh0dHBPbmx5Q29va2llcykpOworICAgICAgICBh
dXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7
CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIGluY2x1ZGVIdHRwT25seUNvb2tpZXMgPSBi
b29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSW5jbHVkZUh0dHBPbmx5Q29va2ll
cyIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0RlbGV0
ZUNvb2tpZXNGb3JIb3N0KGhvc3ROYW1lLCBpbmNsdWRlSHR0cE9ubHlDb29raWVzKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlw
ZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBib29sIGhhc0xvY2FsU3RvcmFnZSA9
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2Uo
aG9zdE5hbWUpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGhhc0xvY2FsU3RvcmFnZSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlz
dGljc0NhY2hlTWF4QWdlQ2FwIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vj
b25kcyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAoV0tE
b3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJIYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNz
aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0
cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1l
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBo
b3N0TmFtZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYm9vbCBoYXNJc29s
YXRlZFNlc3Npb24gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzU3RhdGlzdGljc0lz
b2xhdGVkU2Vzc2lvbihob3N0TmFtZSk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoaGFzSXNvbGF0ZWRTZXNzaW9uKSk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJDbGVhckRPTUNhY2hlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYg
b3JpZ2luID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQorICAgICAg
ICBhdXRvIG9yaWdpbiA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFyRE9NQ2FjaGUob3JpZ2luKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMTcwMSwzNSArMTIyMiwyNCBAQCBXS1JldGFpblB0cjxX
S1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJv
bUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiSGFzRE9NQ2FjaGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmlu
Z1JlZiBvcmlnaW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCisg
ICAgICAgIGF1dG8gb3JpZ2luID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBi
b29sIGhhc0RPTUNhY2hlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc0RPTUNhY2hl
KG9yaWdpbik7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoaGFzRE9NQ2FjaGUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0RPTUNhY2hlKSk7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJET01DYWNoZVNpemUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW4g
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCisgICAgICAgIGF1dG8g
b3JpZ2luID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBhdXRvIGRvbUNhY2hl
U2l6ZSA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5kb21DYWNoZVNpemUob3JpZ2luKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKGRvbUNhY2hlU2l6ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm4gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkb21DYWNoZVNpemUpKTsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFsbG93
U3RvcmFnZVF1b3RhSW5jcmVhc2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgYXV0byBjYW5JbmNy
ZWFzZSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2Fn
ZUJvZHkpKTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFsbG93U3Rv
cmFnZVF1b3RhSW5jcmVhc2UoY2FuSW5jcmVhc2UpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZShib29sZWFuVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbmplY3RVc2VyU2NyaXB0
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmlu
Z0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuaW5qZWN0VXNlclNjcmlwdChzY3JpcHQpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuaW5qZWN0VXNlclNjcmlwdChzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTE3MzksMTUgKzEyNDksMTIg
QEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNo
cm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVv
dXQiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91
YmxlR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nh
c3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKFdLRG91Ymxl
R2V0VmFsdWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoZG91YmxlVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRVc2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIGF1dG8gdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgYXV0byB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgV0tDb250
ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuY29udGV4dCgpLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMTc2NSw2MCArMTI3MiwzNSBAQCBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNN
ZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWRkVGVzdEtleVRvS2V5Y2hhaW4iKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIHRlc3RLZXlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHByaXZhdGVLZXlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJQcml2YXRlS2V5IikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwcml2YXRl
S2V5V0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eSh0ZXN0S2V5RGljdGlvbmFyeSwgcHJpdmF0ZUtleUtleS5nZXQoKSkpOwotCi0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdHRyTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGF0
dHJMYWJlbFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkodGVzdEtleURpY3Rpb25hcnksIGF0dHJMYWJlbEtleS5nZXQoKSkpOwotCi0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhcHBsaWNhdGlvblRhZ0tleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uVGFnIikpOwotICAgICAgICBX
S1N0cmluZ1JlZiBhcHBsaWNhdGlvblRhZ1dLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkodGVzdEtleURpY3Rpb25hcnksIGFwcGxpY2F0aW9uVGFn
S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byB0ZXN0S2V5RGljdGlvbmFyeSA9IGRpY3Rpb25h
cnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gcHJpdmF0ZUtleVdLID0gc3RyaW5n
VmFsdWUodGVzdEtleURpY3Rpb25hcnksICJQcml2YXRlS2V5Iik7CisgICAgICAgIGF1dG8gYXR0
ckxhYmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0S2V5RGljdGlvbmFyeSwgIkF0dHJMYWJlbCIpOwor
ICAgICAgICBhdXRvIGFwcGxpY2F0aW9uVGFnV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0S2V5RGljdGlv
bmFyeSwgIkFwcGxpY2F0aW9uVGFnIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5hZGRUZXN0S2V5VG9LZXljaGFpbih0b1dURlN0cmluZyhwcml2YXRlS2V5V0spLCB0b1dU
RlN0cmluZyhhdHRyTGFiZWxXSyksIHRvV1RGU3RyaW5nKGFwcGxpY2F0aW9uVGFnV0spKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDbGVhblVwS2V5Y2hhaW4iKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIHRlc3REaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGF0dHJMYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkF0dHJMYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXR0ckxhYmVsV0sgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0RGlj
dGlvbmFyeSwgYXR0ckxhYmVsS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGFwcGxpY2F0aW9uTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBh
cHBsaWNhdGlvbkxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleSh0ZXN0RGljdGlvbmFyeSwgYXBwbGljYXRpb25MYWJlbEtleS5nZXQoKSkp
OwotCisgICAgICAgIGF1dG8gdGVzdERpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2Fn
ZUJvZHkpOworICAgICAgICBhdXRvIGF0dHJMYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERpY3Rp
b25hcnksICJBdHRyTGFiZWwiKTsKKyAgICAgICAgYXV0byBhcHBsaWNhdGlvbkxhYmVsV0sgPSBz
dHJpbmdWYWx1ZSh0ZXN0RGljdGlvbmFyeSwgIkFwcGxpY2F0aW9uTGFiZWwiKTsKICAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFuVXBLZXljaGFpbih0b1dURlN0cmluZyhh
dHRyTGFiZWxXSyksIGFwcGxpY2F0aW9uTGFiZWxXSyA/IHRvV1RGU3RyaW5nKGFwcGxpY2F0aW9u
TGFiZWxXSykgOiBTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiS2V5RXhp
c3RzSW5LZXljaGFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYg
dGVzdERpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpOwotICAgICAg
ICBXS1N0cmluZ1JlZiBhdHRyTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkp
KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXBwbGljYXRpb25MYWJlbEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFi
ZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxXSyA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5
LCBhcHBsaWNhdGlvbkxhYmVsS2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byB0ZXN0RGljdGlv
bmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gYXR0ckxh
YmVsV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0RGljdGlvbmFyeSwgIkF0dHJMYWJlbCIpOworICAgICAg
ICBhdXRvIGFwcGxpY2F0aW9uTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAi
QXBwbGljYXRpb25MYWJlbCIpOwogICAgICAgICBib29sIGtleUV4aXN0c0luS2V5Y2hhaW4gPSBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkua2V5RXhpc3RzSW5LZXljaGFpbih0b1dURlN0cmlu
ZyhhdHRyTGFiZWxXSyksIHRvV1RGU3RyaW5nKGFwcGxpY2F0aW9uTGFiZWxXSykpOwotICAgICAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGtleUV4aXN0c0luS2V5Y2hhaW4pKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGtleUV4aXN0c0luS2V5Y2hhaW4pKTsKICAg
ICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCIpKSB7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxs
c0NvdW50KCkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXJ2ZXJUcnVzdEV2YWx1YXRp
b25DYWxsYmFja0NhbGxzQ291bnQiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRD
cmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNlcnZlclRydXN0RXZhbHVhdGlvbkNh
bGxiYWNrQ2FsbHNDb3VudCgpKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9u
b3VzbHkiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91
c2x5KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5
KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKQEAgLTE4NDgsMTYgKzEzMzAsMTMgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0
SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoV0tCb29sZWFuR2V0VmFs
dWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBZENsaWNrQXR0cmli
dXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVUkxHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLVVJMUmVm
IHVybCA9IHN0YXRpY19jYXN0PFdLVVJMUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJM
Rm9yVGVzdGluZyh1cmwpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmcoc3RhdGljX2Nhc3Q8V0tV
UkxSZWY+KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApA
QCAtMTkwMiwxNyArMTM4MSwxMCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpydW5VSVNpZGVTY3Jp
cHQoV0tTdHJpbmdSZWYgc2NyaXB0LCB1bnNpZ25lZCBzY3JpcHRDYWxsYmFjawogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjp1aVNjcmlwdERpZENvbXBsZXRlKGNvbnN0IFN0cmluZyYgcmVzdWx0LCB1
bnNpZ25lZCBzY3JpcHRDYWxsYmFja0lEKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNh
bGxVSVNpZGVTY3JpcHRDYWxsYmFjayIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURp
Y3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3Jl
YXRlKCkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXN1bHRLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXN1bHQiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiBjYWxsYmFja0lEVmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHNjcmlwdENhbGxiYWNr
SUQpKTsKLQotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHJlc3Vs
dEtleS5nZXQoKSwgdG9XSyhyZXN1bHQpLmdldCgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KG1lc3NhZ2VCb2R5LmdldCgpLCBjYWxsYmFja0lES2V5LmdldCgpLCBjYWxsYmFja0lEVmFsdWUu
Z2V0KCkpOwotCi0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShtZXNzYWdlQm9keSwg
IlJlc3VsdCIsIHJlc3VsdCk7CisgICAgc2V0VmFsdWUobWVzc2FnZUJvZHksICJDYWxsYmFja0lE
Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNjcmlwdENhbGxiYWNrSUQpKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxVSVNpZGVTY3JpcHRDYWxsYmFjayIsIG1lc3NhZ2VCb2R5LmdldCgpKTsK
IH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6b3V0cHV0VGV4dChjb25zdCBXVEY6OlN0cmluZyYg
dGV4dCkKQEAgLTE5MjIsMTc0ICsxMzk0LDE0MyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpvdXRw
dXRUZXh0KGNvbnN0IFdURjo6U3RyaW5nJiB0ZXh0KQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpk
aWRCZWdpblN3aXBlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkQmVnaW5T
d2lwZUNhbGxiYWNrIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkQmVnaW5Td2lwZUNh
bGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OndpbGxFbmRTd2lwZSgpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbFdpbGxFbmRTd2lwZUNhbGxiYWNrIikpOwotICAg
IFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJDYWxsV2lsbEVuZFN3aXBlQ2FsbGJhY2siKTsKIH0KIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkRW5kU3dpcGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkNhbGxEaWRFbmRTd2lwZUNhbGxiYWNrIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlk
RW5kU3dpcGVDYWxsYmFjayIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVT
d2lwZVNuYXBzaG90KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVtb3Zl
U3dpcGVTbmFwc2hvdENhbGxiYWNrIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3Rl
ZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVt
b3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246Om5v
dGlmeURvd25sb2FkRG9uZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTm90aWZ5RG93
bmxvYWREb25lIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJOb3RpZnlEb3dubG9hZERvbmUiKTsK
IH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRDbGVh
clN0YXRpc3RpY3NJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSIpKTsKLSAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiQ2FsbERpZENsZWFyU3RhdGlzdGljc0luTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIik7
CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJz
aXRlRGF0YVJlbW92YWwoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRDbGVh
clN0YXRpc3RpY3NUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIikpOwotICAgIFdLUGFnZVBvc3RN
ZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJDYWxsRGlkQ2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpOwog
fQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlcigp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFNob3VsZERvd25ncmFkZVJl
ZmVycmVyIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0U2hvdWxkRG93bmdyYWRl
UmVmZXJyZXIiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxkQmxvY2tU
aGlyZFBhcnR5Q29va2llcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNl
dFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIkNhbGxEaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRG
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0
aW9uOjpkaWRTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQ2FsbERpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIikpOwotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKTsKIH0K
IAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbigp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05B
TUVEb21haW4iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRGaXJzdFBh
cnR5SG9zdENOQU1FRG9tYWluIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFRo
aXJkUGFydHlDTkFNRURvbWFpbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERp
ZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
Q2FsbERpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0
aW9uOjpkaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0ZSgpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2FsbERpZFJlc2V0U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlIikp
OwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50
U3RhdGUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QmxvY2tDb29raWVzRm9y
SG9zdCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEJsb2NrQ29va2ll
c0Zvckhvc3QiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRCbG9ja0Nvb2tpZXNG
b3JIb3N0Iik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFN0YXRpc3RpY3NEZWJ1
Z01vZGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRTdGF0aXN0aWNz
RGVidWdNb2RlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0U3RhdGlzdGljc0Rl
YnVnTW9kZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRQcmV2YWxlbnRSZXNv
dXJjZUZvckRlYnVnTW9kZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNl
dFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJD
YWxsRGlkU2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKTsKIH0KIAogdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZGlkU2V0TGFzdFNlZW4oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkNhbGxEaWRTZXRMYXN0U2VlbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldExh
c3RTZWVuIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZE1lcmdlU3RhdGlzdGljKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkTWVyZ2VTdGF0aXN0aWMiKSk7Ci0g
ICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAg
ICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRNZXJnZVN0YXRpc3RpYyIpOwogfQogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRTZXRFeHBpcmVkU3RhdGlzdGljKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsRGlkU2V0RXhwaXJlZFN0YXRpc3RpYyIpKTsKLSAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiQ2FsbERpZFNldEV4cGlyZWRTdGF0aXN0aWMiKTsKIH0KIAogdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZGlkU2V0UHJldmFsZW50UmVzb3VyY2UoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkNhbGxEaWRTZXRQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgi
Q2FsbERpZFNldFByZXZhbGVudFJlc291cmNlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246
OmRpZFNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2FsbERpZFNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2Fn
ZSgiQ2FsbERpZFNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpOwogfQogCiB2b2lkIFRlc3RJbnZv
Y2F0aW9uOjpkaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb24oKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkNhbGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tQYWdl
UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb24iKTsKIH0KIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFZlY3RvcjxT
dHJpbmc+JiYgZG9tYWlucykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVj
ZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzIikpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZUFycmF5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7CisgICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKSk7CiAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKQotICAgICAgICBXS0FycmF5
QXBwZW5kSXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhkb21haW4udXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKLSAgICAKLSAgICBXS1Bh
Z2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHRvV0so
ZG9tYWluKS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVjZWl2ZUFsbFN0
b3JhZ2VBY2Nlc3NFbnRyaWVzIiwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RJ
bnZvY2F0aW9uOjpkaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zKFZlY3RvcjxTdHJp
bmc+JiYgZG9tYWlucykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVjZWl2
ZUxvYWRlZFN1YnJlc291cmNlRG9tYWlucyIpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS011
dGFibGVBcnJheVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRl
KCkpOworICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRl
KCkpOwogICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKLSAgICAgICAgV0tBcnJheUFw
cGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoZG9tYWluLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0KLSAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsK
KyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHRvV0soZG9tYWlu
KS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJl
c291cmNlRG9tYWlucyIsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0SW52b2Nh
dGlvbjo6ZGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzKCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2siKSk7
Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHND
YWxsYmFjayIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRBcHBCb3VuZERvbWFp
bnMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRBcHBCb3VuZERvbWFp
bnMiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRBcHBCb3VuZERvbWFp
bnMiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MoKQpAQCAtMjEwNCw4ICsxNTQ1LDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcEFkQ2xp
Y2tBdHRyaWJ1dGlvbigpCiAKIHZvaWQgVGVzdEludm9jYXRpb246OnBlcmZvcm1DdXN0b21NZW51
QWN0aW9uKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQZXJmb3JtQ3VzdG9tTWVudUFj
dGlvbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiUGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24iKTsK
IH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6aW5pdGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1Rp
bWVySWZOZWVkZWQoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRU
ZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhMTVm
YzBhMGU5YWZhZTM0MWNjY2QwNjAzODNlZDMwMWE3MjQxYjZiLi42MTcxOGFjNjU1ODgxNzc4ZTgz
Yzk3ZmJlMTc4Mjc4Yzg3MGU2YjhmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMzU1LDYgKzM1NSw4IEBACiAJCTg0MUNDMDBEMTgxMTg1QkYwMDQyRTlCNiAvKiBPcHRp
b25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDFDQzAwRTE4MTE4NUJGMDA0MkU5QjYg
LyogT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAv
KiBXZWJLaXRUZXN0UnVubmVyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OworCQk5MzM4RDFCQTI1MEE3OUVCMDBFODI3RjYgLyogSlNCYXNpY3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gSlNCYXNpY3MuaDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3Mv
SlNCYXNpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzOEQxQkUyNTBCRDlE
RDAwRTgyN0Y2IC8qIERpY3Rpb25hcnlGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGlv
bmFyeUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzc2NDE3NjIx
MEQ3MzYwMDBBM0RBQUUgLyogV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNzY0MTc3MjEwRDczNjEwMEEzREFBRSAvKiBX
ZWJLaXRUZXN0UnVubmVyV2luZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNDNzg4MUYyNTBDNjlFNDAwQzBBQTI0IC8qIFJlZnRlc3RGdW5jdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVmdGVzdEZ1bmN0aW9ucy5jcHA7IHBhdGgg
PSAuLi9UZXN0UnVubmVyU2hhcmVkL1JlZnRlc3RGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODkyLDYgKzg5NCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTM3OEQ0NDIyMTMzNDZEMDAwMDZBNzc3QiAvKiBjb25maWcuaCAq
LywKKwkJCQk5MzM4RDFCRTI1MEJEOUREMDBFODI3RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9ucy5o
ICovLAogCQkJCUJDOTlBNDg0MTIwODkwMUEwMDdFOUYwOCAvKiBTdHJpbmdGdW5jdGlvbnMuaCAq
LywKIAkJCQk5QjM2QTI3MDIwOTQ1M0EwMDAzRTA2NTEgLyogV2hhdFRvRHVtcC5oICovLAogCQkJ
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0aW9uUHJv
dmlkZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5jcHAKaW5kZXggNDU4Njc3ZjUwOWIxMTc0MzkzYWU0YzM4Y2EwOTQ1N2M4ZTgwZjg0Yy4uY2Q1
ZmM2NjIxNWE0YjAzNzk2ODJjNzJiMmVjMWQxZjBiOTgwNzNiMiAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9XZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9XZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAKQEAgLTEyNiw4ICsx
MjYsOCBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyOjpjbG9zZVdlYk5vdGlmaWNhdGlv
bihXS05vdGlmaWNhdGlvblJlZiBub3RpZmljYXRpbwogCiAgICAgcmVtb3ZlR2xvYmFsSURGcm9t
SURNYXAobV9sb2NhbFRvR2xvYmFsTm90aWZpY2F0aW9uSURNYXAsIGlkKTsKIAotICAgIFdLUmV0
YWluUHRyPFdLVUludDY0UmVmPiB3a0lEID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpZCkpOwot
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0soV0tNdXRh
YmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byB3a0lEID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0
ZShpZCkpOworICAgIGF1dG8gYXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkp
OwogICAgIFdLQXJyYXlBcHBlbmRJdGVtKGFycmF5LmdldCgpLCB3a0lELmdldCgpKTsKICAgICBX
S05vdGlmaWNhdGlvbk1hbmFnZXJQcm92aWRlckRpZENsb3NlTm90aWZpY2F0aW9ucyhub3RpZmlj
YXRpb25NYW5hZ2VyLCBhcnJheS5nZXQoKSk7CiB9CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBX
ZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTWFuYWdlcihXS05vdGlm
aWNhdGlvbk1hbmFnZXJSZWYKICAgICBhdXRvIHRvUmVtb3ZlID0gaXRlcmF0b3ItPnZhbHVlOwog
ICAgIFdLUmV0YWluUHRyPFdLTm90aWZpY2F0aW9uTWFuYWdlclJlZj4gZ3VhcmQobWFuYWdlcik7
CiAgICAgbV9vd25lZE5vdGlmaWNhdGlvbnMucmVtb3ZlKGl0ZXJhdG9yKTsKLSAgICBXS1JldGFp
blB0cjxXS011dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3Jl
YXRlKCkpOworICAgIGF1dG8gYXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkp
OwogICAgIGZvciAodWludDY0X3Qgbm90aWZpY2F0aW9uSUQgOiB0b1JlbW92ZSkgewogICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBtX293bmluZ01hbmFnZXIucmVtb3ZlKG5vdGlmaWNhdGlvbklEKTsK
ICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKQEAgLTE3Myw3ICsxNzMs
NyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyOjpyZXNldCgpCiAgICAgZm9yIChhdXRv
JiBub3RpZmljYXRpb25QYWlyIDogbV9vd25lZE5vdGlmaWNhdGlvbnMpIHsKICAgICAgICAgaWYg
KG5vdGlmaWNhdGlvblBhaXIudmFsdWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0so
V0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgICAgIGF1dG8gYXJyYXkgPSBhZG9wdFdLKFdL
TXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgICAgICBmb3IgKHVpbnQ2NF90IG5vdGlmaWNhdGlv
bklEIDogbm90aWZpY2F0aW9uUGFpci52YWx1ZSkKICAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJ
dGVtKGFycmF5LmdldCgpLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKG5vdGlmaWNhdGlvbklEKSku
Z2V0KCkpOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1h
bmFnZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcApp
bmRleCAyMGQ1YTFhYWRiMjllMzMyYmUyOWIyYjFmNGMyMzYwOTE5YmEwZmYxLi5jOWQ0N2ZkNjNi
ODRlNDZlNDYyYTUwZmY0YmUwN2JmMzQ2OGFjYTYwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJXb3Jr
UXVldWVNYW5hZ2VyLmgiCiAKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRl
ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1
ZGUgPFdlYktpdC9XS1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlUHJpdmF0ZS5oPgpA
QCAtNzUsNyArNzYsNyBAQCB0ZW1wbGF0ZSA8V29ya1F1ZXVlSXRlbTo6VHlwZSB0eXBlPgogY2xh
c3MgU2NyaXB0SXRlbSA6IHB1YmxpYyBXb3JrUXVldWVJdGVtIHsKIHB1YmxpYzoKICAgICBleHBs
aWNpdCBTY3JpcHRJdGVtKGNvbnN0IFN0cmluZyYgc2NyaXB0KQotICAgICAgICA6IG1fc2NyaXB0
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2NyaXB0LnV0ZjgoKS5kYXRh
KCkpKSkKKyAgICAgICAgOiBtX3NjcmlwdCh0b1dLKHNjcmlwdCkpCiAgICAgewogICAgIH0KIApA
QCAtMTYxLDcgKzE2Miw3IEBAIHZvaWQgV29ya1F1ZXVlTWFuYWdlcjo6cXVldWVMb2FkSFRNTFN0
cmluZyhjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYKICAgICBjbGFzcyBMb2Fk
SFRNTFN0cmluZ0l0ZW0gOiBwdWJsaWMgV29ya1F1ZXVlSXRlbSB7CiAgICAgcHVibGljOgogICAg
ICAgICBMb2FkSFRNTFN0cmluZ0l0ZW0oY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJp
bmcmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgdW5yZWFjaGFibGVVUkwpCi0gICAgICAgICAgICA6
IG1fY29udGVudChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnRlbnQu
dXRmOCgpLmRhdGEoKSkpKQorICAgICAgICAgICAgOiBtX2NvbnRlbnQodG9XSyhjb250ZW50KSkK
ICAgICAgICAgICAgICwgbV9iYXNlVVJMKGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJp
bmcoYmFzZVVSTC51dGY4KCkuZGF0YSgpKSkpCiAgICAgICAgICAgICAsIG1fdW5yZWFjaGFibGVV
UkwoYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1bnJlYWNoYWJsZVVSTC51dGY4
KCkuZGF0YSgpKSkpCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rl
c3RJbnZvY2F0aW9uQ0cuY3BwCmluZGV4IDY3MzM4ZjRhYTgyNzNjZmI2ODcyMjliZmJhZDNmYTRk
ZGIzN2I0ZGYuLjAxYzUzMWE5YjZhY2U4ZTgxNjk0OGY2NzZjZTYzMWY1Mjc5NGI2YzQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcApAQCAtNTIs
NyArNTIsNyBAQCBzdGF0aWMgQ0dDb250ZXh0UmVmIGNyZWF0ZUNHQ29udGV4dEZyb21DR0ltYWdl
KENHSW1hZ2VSZWYgaW1hZ2UpCiAgICAgc2l6ZV90IHJvd0J5dGVzID0gKDQgKiBwaXhlbHNXaWRl
ICsgNjMpICYgfjYzOwogCiAgICAgLy8gQ3JlYXRpbmcgdGhpcyBiaXRtYXAgaW4gdGhlIGRldmlj
ZSBjb2xvciBzcGFjZSBzaG91bGQgcHJldmVudCBhbnkgY29sb3IgY29udmVyc2lvbiB3aGVuIHRo
ZSBpbWFnZSBvZiB0aGUgd2ViIHZpZXcgaXMgZHJhd24gaW50byBpdC4KLSAgICBSZXRhaW5QdHI8
Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVE
ZXZpY2VSR0IoKSk7CisgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VD
cmVhdGVEZXZpY2VSR0IoKSk7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENv
bnRleHRDcmVhdGUoMCwgcGl4ZWxzV2lkZSwgcGl4ZWxzSGlnaCwgOCwgcm93Qnl0ZXMsIGNvbG9y
U3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkhvc3QpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC02Myw3ICs2Myw3IEBAIHN0YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0
RnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSkKIAogc3RhdGljIENHQ29udGV4dFJlZiBjcmVh
dGVDR0NvbnRleHRGcm9tSW1hZ2UoV0tJbWFnZVJlZiB3a0ltYWdlKQogewotICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoV0tJbWFnZUNyZWF0ZUNHSW1hZ2Uod2tJbWFn
ZSkpOworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKFdLSW1hZ2VDcmVhdGVDR0ltYWdlKHdrSW1h
Z2UpKTsKICAgICByZXR1cm4gY3JlYXRlQ0dDb250ZXh0RnJvbUNHSW1hZ2UoaW1hZ2UuZ2V0KCkp
OwogfQogCkBAIC0xMDksOSArMTA5LDkgQEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JD
b250ZXh0KENHQ29udGV4dFJlZiBiaXRtYXBDb250ZXh0LCBjaGFyIGhhc2hTdHJpbmcKIAogc3Rh
dGljIHZvaWQgZHVtcEJpdG1hcChDR0NvbnRleHRSZWYgYml0bWFwQ29udGV4dCwgY29uc3QgY2hh
ciogY2hlY2tzdW0pCiB7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0KSk7Ci0gICAgUmV0YWlu
UHRyPENGTXV0YWJsZURhdGFSZWY+IGltYWdlRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0
YWJsZSgwLCAwKSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gaW1hZ2VE
ZXN0ID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShpbWFnZURhdGEu
Z2V0KCksIGtVVFR5cGVQTkcsIDEsIDApKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0KSk7CisgICAgYXV0byBpbWFnZURh
dGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOworICAgIGF1dG8gaW1hZ2VE
ZXN0ID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShpbWFnZURhdGEu
Z2V0KCksIGtVVFR5cGVQTkcsIDEsIDApKTsKICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFn
ZShpbWFnZURlc3QuZ2V0KCksIGltYWdlLmdldCgpLCAwKTsKICAgICBDR0ltYWdlRGVzdGluYXRp
b25GaW5hbGl6ZShpbWFnZURlc3QuZ2V0KCkpOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2NvY29hL0NyYXNoUmVwb3J0ZXJJbmZvLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9DcmFzaFJlcG9ydGVySW5mby5tbQppbmRleCA0Yzc5YWI1Yjg1ZDY0MTg5YTdl
MGEyOTZlZWE5MGMxZDgxMThkYzNkLi40MTBkOWZkY2IzMWUyYzZlNmNhNzY0OTU2MTQ2MDYzOGMw
OTEwNWViIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0NyYXNoUmVw
b3J0ZXJJbmZvLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hSZXBv
cnRlckluZm8ubW0KQEAgLTM1LDEyICszNSwxMiBAQCBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGlj
IFN0cmluZyB0ZXN0UGF0aEZyb21VUkwoV0tVUkxSZWYgdXJsKQogewotICAgIFJldGFpblB0cjxD
RlVSTFJlZj4gY2ZVUkwgPSBhZG9wdENGKFdLVVJMQ29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHVybCkpOworICAgIGF1dG8gY2ZVUkwgPSBhZG9wdENGKFdLVVJMQ29weUNGVVJMKGtDRkFs
bG9jYXRvckRlZmF1bHQsIHVybCkpOwogICAgIGlmICghY2ZVUkwpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2NoZW1lQ0ZTdHJpbmcgPSBh
ZG9wdENGKENGVVJMQ29weVNjaGVtZShjZlVSTC5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gcGF0aENGU3RyaW5nID0gYWRvcHRDRihDRlVSTENvcHlQYXRoKGNmVVJMLmdldCgp
KSk7CisgICAgYXV0byBzY2hlbWVDRlN0cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5U2NoZW1lKGNm
VVJMLmdldCgpKSk7CisgICAgYXV0byBwYXRoQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVBh
dGgoY2ZVUkwuZ2V0KCkpKTsKIAogICAgIFN0cmluZyBzY2hlbWVTdHJpbmcoc2NoZW1lQ0ZTdHJp
bmcuZ2V0KCkpOwogICAgIFN0cmluZyBwYXRoU3RyaW5nKHBhdGhDRlN0cmluZy5nZXQoKSk7CkBA
IC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBTdHJpbmcgdGVzdFBhdGhGcm9tVVJMKFdLVVJMUmVmIHVy
bCkKICAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0cmluZywg
Imh0dHAiKSAmJiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3RyaW5nLCAi
aHR0cHMiKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBob3N0Q0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weUhvc3ROYW1lKGNmVVJMLmdl
dCgpKSk7CisgICAgYXV0byBob3N0Q0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weUhvc3ROYW1l
KGNmVVJMLmdldCgpKSk7CiAgICAgU3RyaW5nIGhvc3RTdHJpbmcoaG9zdENGU3RyaW5nLmdldCgp
KTsKICAgICBpZiAoaG9zdFN0cmluZyA9PSAiMTI3LjAuMC4xIikKICAgICAgICAgcmV0dXJuIHBh
dGhTdHJpbmc7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RD
b250cm9sbGVyQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250
cm9sbGVyQ29jb2EubW0KaW5kZXggMzY1MzM3YWRmOTlmMGI5Y2RkNmFmMDk3ZmMwMmJlODdhNjcx
NjY1Ny4uNzEzMDMyNmEzZTYxY2UyYmQwYTc2ZGY3Mjg5OGQ5ZTRiMDA2M2IwNCAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQpA
QCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6
ZURhdGFTdG9yZShXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBUCiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRlV2ViVmlldyhXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBj
b25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29u
ZmlndXJhdGlvbj4gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2dsb2JhbFdlYlZpZXdD
b25maWd1cmF0aW9uIGNvcHldKTsKKyAgICBhdXRvIGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbiBjb3B5XSk7CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIGlmIChvcHRpb25zLnVzZURhdGFEZXRlY3Rpb24pCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0gYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KaW5kZXgg
NWM4NjJlOWIwZWM3N2QwNWUwNzcyOWRjZTY0NzZmNTg5MjEyM2IzOC4uOTE1ZjQ3NmM2MTVhZTYx
MDkwZDkwY2E3OTc2YmY4ZjJjOTliNTY2YiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQpAQCAtOTAsNyArOTAsNyBAQCBJR05P
UkVfV0FSTklOR1NfQkVHSU4oImRlcHJlY2F0ZWQtaW1wbGVtZW50YXRpb25zIikKIC0gKHZvaWQp
ZHJhZ0ltYWdlOihOU0ltYWdlICopYW5JbWFnZSBhdDooTlNQb2ludCl2aWV3TG9jYXRpb24gb2Zm
c2V0OihOU1NpemUpaW5pdGlhbE9mZnNldCBldmVudDooTlNFdmVudCAqKWV2ZW50IHBhc3RlYm9h
cmQ6KE5TUGFzdGVib2FyZCAqKXBib2FyZCBzb3VyY2U6KGlkKXNvdXJjZU9iaiBzbGlkZUJhY2s6
KEJPT0wpc2xpZGVGbGFnCiBJR05PUkVfV0FSTklOR1NfRU5ECiB7Ci0gICAgUmV0YWluUHRyPFdl
YktpdFRlc3RSdW5uZXJEcmFnZ2luZ0luZm8+IGRyYWdnaW5nSW5mbyA9IGFkb3B0TlMoW1tXZWJL
aXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZvIGFsbG9jXSBpbml0V2l0aEltYWdlOmFuSW1hZ2Ugb2Zm
c2V0OmluaXRpYWxPZmZzZXQgcGFzdGVib2FyZDpwYm9hcmQgc291cmNlOnNvdXJjZU9ial0pOwor
ICAgIGF1dG8gZHJhZ2dpbmdJbmZvID0gYWRvcHROUyhbW1dlYktpdFRlc3RSdW5uZXJEcmFnZ2lu
Z0luZm8gYWxsb2NdIGluaXRXaXRoSW1hZ2U6YW5JbWFnZSBvZmZzZXQ6aW5pdGlhbE9mZnNldCBw
YXN0ZWJvYXJkOnBib2FyZCBzb3VyY2U6c291cmNlT2JqXSk7CiAgICAgW3NlbGYgZHJhZ2dpbmdV
cGRhdGVkOmRyYWdnaW5nSW5mby5nZXQoKV07CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaAppbmRleCBh
YmMwYTUwYzk3MGMxYmIzM2YxZmIxMDkzOTM1MmFmOGNhN2UwNDAzLi5jYzk4MTM5NDI0ZjI4ODA2
NDQzOTg5ODM0NWMzZTdkNGVhNTUzMzc4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5oCkBAIC0zMiwxMiArMzIsMTcg
QEAgT0JKQ19DTEFTUyBUZXN0UnVubmVyV0tXZWJWaWV3OwogbmFtZXNwYWNlIFdUUiB7CiAKIGNs
YXNzIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNv
bW1vbiB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9s
bGVyQ29jb2EoVUlTY3JpcHRDb250ZXh0Jik7CisgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2Vi
VmlldygpIGNvbnN0OworCisgICAgdm9pZCBkb0FzeW5jVGFzayhKU1ZhbHVlUmVmKSBvdmVycmlk
ZTsKKworcHJpdmF0ZToKICAgICB2b2lkIHNldFZpZXdTY2FsZShkb3VibGUpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc2V0TWluaW11bUVmZmVjdGl2ZVdpZHRoKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBiZWNvbWVGaXJzdFJlc3BvbmRlcigpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzaWduRmly
c3RSZXNwb25kZXIoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRvQXN5bmNUYXNrKEpTVmFsdWVSZWYp
IG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlVmlld0Zyb21XaW5kb3coSlNWYWx1ZVJlZikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBhZGRWaWV3VG9XaW5kb3coSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKSBvdmVy
cmlkZTsKQEAgLTU5LDExICs2NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW5zZXJ0QXR0YWNo
bWVudEZvckZpbGVQYXRoKEpTU3RyaW5nUmVmIGZpbGVQYXRoLCBKU1N0cmluZ1JlZiBjb250ZW50
VHlwZSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykgb3ZlcnJpZGU7CiAKLXByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShVSVNjcmlwdENvbnRleHQmKTsKLSAgICBU
ZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3KCkgY29uc3Q7Ci0KLXByaXZhdGU6CiAgICAgdm9p
ZCBjb21wbGV0ZVRhc2tBc3luY2hyb25vdXNseUFmdGVyQWN0aXZpdHlTdGF0ZVVwZGF0ZSh1bnNp
Z25lZCBjYWxsYmFja0lEKTsKIH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tCmluZGV4IDk4YmI3NGI0MTNiOTUw
M2U2OTg4MDdlZGI4NjI5OGUzNzBkY2QwZjIuLjU4NDc5NzZmMjE4NTdmNTNmNDg1ZWNiMWZiMWVi
OTExNzIxYTU2ZGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlT
Y3JpcHRDb250cm9sbGVyQ29jb2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2Nv
YS9VSVNjcmlwdENvbnRyb2xsZXJDb2NvYS5tbQpAQCAtMTM1LDIyICsxMzUsMTggQEAgdm9pZCBV
SVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6YWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYgY2FsbGJh
Y2spCiAKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2E6Om92ZXJyaWRlUHJlZmVyZW5jZShK
U1N0cmluZ1JlZiBwcmVmZXJlbmNlUmVmLCBKU1N0cmluZ1JlZiB2YWx1ZVJlZikKIHsKLSAgICBX
S1ByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IHdlYlZpZXcoKS5jb25maWd1cmF0aW9uLnByZWZl
cmVuY2VzOwotCi0gICAgU3RyaW5nIHByZWZlcmVuY2UgPSB0b1dURlN0cmluZyh0b1dLKHByZWZl
cmVuY2VSZWYpKTsKLSAgICBTdHJpbmcgdmFsdWUgPSB0b1dURlN0cmluZyh0b1dLKHZhbHVlUmVm
KSk7Ci0gICAgaWYgKHByZWZlcmVuY2UgPT0gIldlYktpdE1pbmltdW1Gb250U2l6ZSIpCi0gICAg
ICAgIHByZWZlcmVuY2VzLm1pbmltdW1Gb250U2l6ZSA9IHZhbHVlLnRvRG91YmxlKCk7CisgICAg
aWYgKHRvV1RGU3RyaW5nKHByZWZlcmVuY2VSZWYpID09ICJXZWJLaXRNaW5pbXVtRm9udFNpemUi
KQorICAgICAgICB3ZWJWaWV3KCkuY29uZmlndXJhdGlvbi5wcmVmZXJlbmNlcy5taW5pbXVtRm9u
dFNpemUgPSB0b1dURlN0cmluZyh2YWx1ZVJlZikudG9Eb3VibGUoKTsKIH0KIAogdm9pZCBVSVNj
cmlwdENvbnRyb2xsZXJDb2NvYTo6ZmluZFN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcsIHVuc2ln
bmVkIGxvbmcgb3B0aW9ucywgdW5zaWduZWQgbG9uZyBtYXhDb3VudCkKIHsKLSAgICBbd2ViVmll
dygpIF9maW5kU3RyaW5nOnRvV1RGU3RyaW5nKHRvV0soc3RyaW5nKSkgb3B0aW9uczpvcHRpb25z
IG1heENvdW50Om1heENvdW50XTsKKyAgICBbd2ViVmlldygpIF9maW5kU3RyaW5nOnRvV1RGU3Ry
aW5nKHN0cmluZykgb3B0aW9uczpvcHRpb25zIG1heENvdW50Om1heENvdW50XTsKIH0KIAogSlNP
YmplY3RSZWYgVUlTY3JpcHRDb250cm9sbGVyQ29jb2E6OmNvbnRlbnRzT2ZVc2VySW50ZXJmYWNl
SXRlbShKU1N0cmluZ1JlZiBpbnRlcmZhY2VJdGVtKSBjb25zdAogewotICAgIE5TRGljdGlvbmFy
eSAqY29udGVudERpY3Rpb25hcnkgPSBbd2ViVmlldygpIF9jb250ZW50c09mVXNlckludGVyZmFj
ZUl0ZW06dG9XVEZTdHJpbmcodG9XSyhpbnRlcmZhY2VJdGVtKSldOworICAgIE5TRGljdGlvbmFy
eSAqY29udGVudERpY3Rpb25hcnkgPSBbd2ViVmlldygpIF9jb250ZW50c09mVXNlckludGVyZmFj
ZUl0ZW06dG9XVEZTdHJpbmcoaW50ZXJmYWNlSXRlbSldOwogICAgIHJldHVybiBKU1ZhbHVlVG9P
YmplY3QobV9jb250ZXh0LT5qc0NvbnRleHQoKSwgW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OmNv
bnRlbnREaWN0aW9uYXJ5IGluQ29udGV4dDpbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxD
b250ZXh0UmVmOm1fY29udGV4dC0+anNDb250ZXh0KCldXS5KU1ZhbHVlUmVmLCBudWxscHRyKTsK
IH0KIApAQCAtMjE5LDEyICsyMTUsMTAgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6
cGFzdGUoKQogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6aW5zZXJ0QXR0YWNobWVudEZv
ckZpbGVQYXRoKEpTU3RyaW5nUmVmIGZpbGVQYXRoLCBKU1N0cmluZ1JlZiBjb250ZW50VHlwZSwg
SlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250
ZXh0LT5wcmVwYXJlRm9yQXN5bmNUYXNrKGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25QZXJzaXN0
ZW50KTsKLQotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxD
b3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmN1cnJlbnRUZXN0VVJMKCkpKTsKLSAgICBSZXRhaW5QdHI8TlNVUkw+IGF0dGFjaG1lbnRVUkwg
PSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnRvV1RGU3RyaW5nKHRvV0soZmlsZVBhdGgpKSByZWxh
dGl2ZVRvVVJMOihfX2JyaWRnZSBOU1VSTCAqKXRlc3RVUkwuZ2V0KCldOwotCi0gICAgYXV0byBm
aWxlV3JhcHBlciA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFVSTDph
dHRhY2htZW50VVJMLmdldCgpIG9wdGlvbnM6MCBlcnJvcjpuaWxdKTsKLSAgICBbd2ViVmlldygp
IF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyLmdldCgpIGNvbnRl
bnRUeXBlOnRvV1RGU3RyaW5nKHRvV0soY29udGVudFR5cGUpKSBjb21wbGV0aW9uOl4oQk9PTCBz
dWNjZXNzKSB7CisgICAgYXV0byB0ZXN0VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY3VycmVudFRlc3RV
UkwoKSkpOworICAgIGF1dG8gYXR0YWNobWVudFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6
dG9XVEZTdHJpbmcoZmlsZVBhdGgpIHJlbGF0aXZlVG9VUkw6KF9fYnJpZGdlIE5TVVJMICopdGVz
dFVSTC5nZXQoKV07CisgICAgYXV0byBmaWxlV3JhcHBlciA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFw
cGVyIGFsbG9jXSBpbml0V2l0aFVSTDphdHRhY2htZW50VVJMIG9wdGlvbnM6MCBlcnJvcjpuaWxd
KTsKKyAgICBbd2ViVmlldygpIF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVX
cmFwcGVyLmdldCgpIGNvbnRlbnRUeXBlOnRvV1RGU3RyaW5nKGNvbnRlbnRUeXBlKSBjb21wbGV0
aW9uOl4oQk9PTCBzdWNjZXNzKSB7CiAgICAgICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBtX2NvbnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNr
SUQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5l
cmF0b3IubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5t
bQppbmRleCBlMjk4MzhiYTgyOGZiNGJkOTA4NTdhYjZiZWYyZmQ0NjU5ZmI0MjE4Li4wYzQ0NjMz
NWIyNDBkNmE3ZTA2NzQxNGNhOWMzMDQwYWE2ZTM1NDYzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbQorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbQpAQCAtMTg5LDcgKzE4OSw3IEBAIC0g
KGluc3RhbmNldHlwZSlpbml0CiAKIC0gKHZvaWQpX3NlbmRJT0hJREtleWJvYXJkRXZlbnQ6KHVp
bnQ2NF90KXRpbWVzdGFtcCB1c2FnZToodWludDMyX3QpdXNhZ2UgaXNLZXlEb3duOihib29sKWlz
S2V5RG93bgogewotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0
Q0YoSU9ISURFdmVudENyZWF0ZUtleWJvYXJkRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwKKyAg
ICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlS2V5Ym9hcmRFdmVudChr
Q0ZBbGxvY2F0b3JEZWZhdWx0LAogICAgICAgICB0aW1lc3RhbXAsCiAgICAgICAgIGtISURQYWdl
X0tleWJvYXJkT3JLZXlwYWQsCiAgICAgICAgIHVzYWdlLApAQCAtMzYxLDcgKzM2MSw3IEBAIC0g
KElPSElERXZlbnRSZWYpX2NyZWF0ZUlPSElERXZlbnRUeXBlOihIYW5kRXZlbnRUeXBlKWV2ZW50
VHlwZQogICAgICAgICBldmVudE1hc2sgfD0ga0lPSElERGlnaXRpemVyRXZlbnRJZGVudGl0eTsK
IAogICAgIHVpbnQ2NF90IG1hY2hUaW1lID0gbWFjaF9hYnNvbHV0ZV90aW1lKCk7Ci0gICAgUmV0
YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRl
RGlnaXRpemVyRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbWFjaFRpbWUsCisgICAgYXV0byBl
dmVudFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0ZURpZ2l0aXplckV2ZW50KGtDRkFsbG9j
YXRvckRlZmF1bHQsIG1hY2hUaW1lLAogICAgICAgICBrSU9ISUREaWdpdGl6ZXJUcmFuc2R1Y2Vy
VHlwZUhhbmQsCiAgICAgICAgIDAsCiAgICAgICAgIDAsCkBAIC00NTMsNyArNDUzLDcgQEAgLSAo
Qk9PTClfc2VuZEhJREV2ZW50OihJT0hJREV2ZW50UmVmKWV2ZW50UmVmCiAgICAgICAgIF9pb1N5
c3RlbUNsaWVudCA9IElPSElERXZlbnRTeXN0ZW1DbGllbnRDcmVhdGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCk7CiAKICAgICBpZiAoZXZlbnRSZWYpIHsKLSAgICAgICAgUmV0YWluUHRyPElPSElERXZl
bnRSZWY+IHN0cm9uZ0V2ZW50ID0gZXZlbnRSZWY7CisgICAgICAgIGF1dG8gc3Ryb25nRXZlbnQg
PSByZXRhaW5QdHIoZXZlbnRSZWYpOwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBeewogICAgICAgICAgICAgdWludDMyX3QgY29udGV4dElEID0gW1VJ
QXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dLmtleVdpbmRvdy5fY29udGV4dElkOwogICAg
ICAgICAgICAgQVNTRVJUKGNvbnRleHRJRCk7CkBAIC01MTIsNyArNTEyLDcgQEAgLSAodm9pZClf
dXBkYXRlVG91Y2hQb2ludHM6KENHUG9pbnQqKXBvaW50cyBjb3VudDooTlNVSW50ZWdlciljb3Vu
dAogICAgICAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRU
b3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aSB3aXRoUG9p
bnRJbldpbmRvd0Nvb3JkaW5hdGVzOnBvaW50c1tpXSBpc1RvdWNoaW5nOllFU107CiAgICAgfQog
ICAgIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3Nl
bGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOmhhbmRFdmVudFR5cGVdKTsKKyAgICBhdXRvIGV2ZW50
UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6aGFuZEV2ZW50VHlwZV0p
OwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC01Mjks
NyArNTI5LDcgQEAgLSAodm9pZCl0b3VjaERvd25BdFBvaW50czooQ0dQb2ludCopbG9jYXRpb25z
IHRvdWNoQ291bnQ6KE5TVUludGVnZXIpdG91Y2hDb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRv
dWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0
ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aW5kZXggd2l0aFBvaW50SW5XaW5kb3dDb29yZGluYXRl
czpsb2NhdGlvbnNbaW5kZXhdIGlzVG91Y2hpbmc6WUVTXTsKICAgICB9CiAKLSAgICBSZXRhaW5Q
dHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2
ZW50VHlwZTpIYW5kRXZlbnRUb3VjaGVkXSk7CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0Yo
W3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudFRvdWNoZWRdKTsKICAgICBbc2Vs
ZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKIH0KIApAQCAtNTYzLDcgKzU2Myw3IEBA
IC0gKHZvaWQpbGlmdFVwQXRQb2ludHM6KENHUG9pbnQqKWxvY2F0aW9ucyB0b3VjaENvdW50OihO
U1VJbnRlZ2VyKXRvdWNoQ291bnQKICAgICAgICAgW1tHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5k
b3cgc2hhcmVkR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93XSB1cGRhdGVEZWJ1Z0luZGljYXRv
ckZvclRvdWNoOmluZGV4IHdpdGhQb2ludEluV2luZG93Q29vcmRpbmF0ZXM6Q0dQb2ludFplcm8g
aXNUb3VjaGluZzpOT107CiAgICAgfQogICAgIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVm
PiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVu
dExpZnRlZF0pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJ
REV2ZW50VHlwZTpIYW5kRXZlbnRMaWZ0ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2
ZW50UmVmLmdldCgpXTsKICAgICAKICAgICBfYWN0aXZlUG9pbnRDb3VudCA9IG5ld1BvaW50Q291
bnQ7CkBAIC02NDEsNyArNjQxLDcgQEAgLSAodm9pZClzdHlsdXNEb3duQXRQb2ludDooQ0dQb2lu
dClsb2NhdGlvbiBhemltdXRoQW5nbGU6KENHRmxvYXQpYXppbXV0aEFuZ2xlIGEKICAgICBfYWN0
aXZlUG9pbnRzWzBdLmF6aW11dGhBbmdsZSA9IE1fUEkgKiAyIC0gYXppbXV0aEFuZ2xlOwogICAg
IF9hY3RpdmVQb2ludHNbMF0uYWx0aXR1ZGVBbmdsZSA9IE1fUElfMiAtIGFsdGl0dWRlQW5nbGU7
CiAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxm
IF9jcmVhdGVJT0hJREV2ZW50VHlwZTpTdHlsdXNFdmVudFRvdWNoZWRdKTsKKyAgICBhdXRvIGV2
ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRU
b3VjaGVkXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAK
QEAgLTY1NSw3ICs2NTUsNyBAQCAtICh2b2lkKXN0eWx1c01vdmVUb1BvaW50OihDR1BvaW50KWxv
Y2F0aW9uIGF6aW11dGhBbmdsZTooQ0dGbG9hdClhemltdXRoQW5nbGUgYQogICAgIF9hY3RpdmVQ
b2ludHNbMF0uYXppbXV0aEFuZ2xlID0gTV9QSSAqIDIgLSBhemltdXRoQW5nbGU7CiAgICAgX2Fj
dGl2ZVBvaW50c1swXS5hbHRpdHVkZUFuZ2xlID0gTV9QSV8yIC0gYWx0aXR1ZGVBbmdsZTsKIAot
ICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2Ny
ZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TW92ZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVm
ID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRNb3ZlZF0p
OwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC02Njgs
NyArNjY4LDcgQEAgLSAodm9pZClzdHlsdXNVcEF0UG9pbnQ6KENHUG9pbnQpbG9jYXRpb24KICAg
ICBfYWN0aXZlUG9pbnRzWzBdLmF6aW11dGhBbmdsZSA9IDA7CiAgICAgX2FjdGl2ZVBvaW50c1sw
XS5hbHRpdHVkZUFuZ2xlID0gMDsKIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVu
dFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TGlm
dGVkXSk7CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZl
bnRUeXBlOlN0eWx1c0V2ZW50TGlmdGVkXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVu
dFJlZi5nZXQoKV07CiB9CiAKQEAgLTEwMjEsNyArMTAyMSw3IEBAIC0gKHZvaWQpZGlzcGF0Y2hF
dmVudFdpdGhJbmZvOihOU0RpY3Rpb25hcnkgKilldmVudEluZm8KIHsKICAgICBBU1NFUlQoW05T
VGhyZWFkIGlzTWFpblRocmVhZF0pOwogCi0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2
ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFdpdGhJbmZvOmV2ZW50SW5m
b10pOworICAgIGF1dG8gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50
V2l0aEluZm86ZXZlbnRJbmZvXSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5n
ZXQoKV07CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2Ny
aXB0Q29udHJvbGxlcklPUy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRD
b250cm9sbGVySU9TLmgKaW5kZXggMjhkMDYwYzZkZmM0NzFhOTA1NDkwNjgzOTVjM2Q0MGY2YTlj
MDk2Yi4uODU0NjQ0NzY2ZDhiYzVhODE1ZDI2N2U5YTdiYTRhMjA1ZDZlNjEyMiAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKQEAg
LTI1LDExICsyNSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisKICNpbXBvcnQgIlVJU2NyaXB0Q29udHJvbGxlckNvY29hLmgiCiAjaW1wb3J0IDx3dGYv
QmxvY2tQdHIuaD4KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CkBAIC0zNywxMyArMzcs
MTQgQEAgY2xhc3MgRmxvYXRSZWN0OwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVUlTY3Jp
cHRDb250cm9sbGVySU9TIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKK2NsYXNz
IFVJU2NyaXB0Q29udHJvbGxlcklPUyBmaW5hbCA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJD
b2NvYSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVySU9TKFVJU2Ny
aXB0Q29udGV4dCYgY29udGV4dCkKICAgICAgICAgOiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShj
b250ZXh0KQogICAgIHsKICAgICB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCB3YWl0Rm9yT3V0c3Rh
bmRpbmdDYWxsYmFja3MoKSBvdmVycmlkZTsKICAgICB2b2lkIGRvQWZ0ZXJQcmVzZW50YXRpb25V
cGRhdGUoSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkb0FmdGVyTmV4dFN0YWJsZVBy
ZXNlbnRhdGlvblVwZGF0ZShKU1ZhbHVlUmVmKSBvdmVycmlkZTsKQEAgLTE1Niw3ICsxNTcsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXREaWRFbmRTY3JvbGxpbmdDYWxsYmFjayhKU1ZhbHVlUmVm
KSBvdmVycmlkZTsKICAgICB2b2lkIGNsZWFyQWxsQ2FsbGJhY2tzKCkgb3ZlcnJpZGU7CiAKLXBy
aXZhdGU6CiAgICAgdm9pZCB3YWl0Rm9yTW9kYWxUcmFuc2l0aW9uVG9GaW5pc2goKSBjb25zdDsK
ICAgICB2b2lkIHdhaXRGb3JTaW5nbGVUYXBUb1Jlc2V0KCkgY29uc3Q7CiAgICAgV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3RGb3JNZW51QWN0aW9uKENGU3RyaW5nUmVmKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQppbmRl
eCAxMzBjNDk3YzI0MGQ4MzhiYjRhZmZmZDIwNzMxNDE3NWE4M2RiYjI2Li43YWY2ZWNmNTA5ODVm
MTVlZjQ3YzE5MThiNjVhMmViZGE2ZDI2YTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBAIC02OCwyNCArNjgsMTQgQEAg
c3RhdGljIE5TRGljdGlvbmFyeSAqdG9OU0RpY3Rpb25hcnkoQ0dSZWN0IHJlY3QpCiAgICAgfTsK
IH0KIAotc3RhdGljIHVuc2lnbmVkIGFycmF5TGVuZ3RoKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBhcnJheSkKLXsKLSAgICBhdXRvIGxlbmd0aFN0cmluZyA9IGFkb3B0KEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgaWYgKGF1dG8gbGVuZ3Ro
VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGFycmF5LCBsZW5ndGhTdHJpbmcu
Z2V0KCksIG51bGxwdHIpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgIHJldHVy
biAwOwotfQotCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gcGFyc2VNb2RpZmllckFycmF5KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGFycmF5VmFsdWUpCiB7CiAgICAgaWYgKCFhcnJh
eVZhbHVlKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gVGhlIHZhbHVlIG1heSBlaXRo
ZXIgYmUgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBvZiBtb2Rp
ZmllcnMuCi0gICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkgewot
ICAgICAgICBhdXRvIHN0cmluZyA9IHRvV1RGU3RyaW5nKHRvV0soYWRvcHQoSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBhcnJheVZhbHVlLCBudWxscHRyKSkpKTsKLSAgICAgICAgcmV0dXJu
IHsgc3RyaW5nIH07Ci0gICAgfQorICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgYXJy
YXlWYWx1ZSkpCisgICAgICAgIHJldHVybiB7IHRvV1RGU3RyaW5nKGNvbnRleHQsIGFycmF5VmFs
dWUpIH07CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBhcnJheVZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTkzLDE2ICs4Myw4IEBAIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYg
YXJyYXlWCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkp
OwogICAgIFZlY3RvcjxTdHJpbmc+IG1vZGlmaWVyczsKICAgICBtb2RpZmllcnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAg
ICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0
LCBhcnJheSwgaSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byBzdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIHZhbHVlLCAmZXhjZXB0aW9uKSk7Ci0gICAgICAgIGlmIChleGNlcHRp
b24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbW9kaWZpZXJzLmFwcGVuZCh0b1dU
RlN0cmluZyh0b1dLKHN0cmluZy5nZXQoKSkpKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBtb2RpZmllcnMuYXBwZW5kKHRvV1RGU3Ry
aW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBp
LCBudWxscHRyKSkpOwogICAgIHJldHVybiBtb2RpZmllcnM7CiB9CiAKQEAgLTUxNCwxMCArNDk2
LDkgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3
YXJlS2V5Ym9hcmQoSlNTdHJpbmdSZWYgY2hhcmEKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0g
bV9jb250ZXh0LT5wcmVwYXJlRm9yQXN5bmNUYXNrKGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25Q
ZXJzaXN0ZW50KTsKIAogICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUga2V5Ym9hcmQgaXMgYWxyZWFk
eSBzaG93bi4KLSAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9y
XSBrZXlQcmVzczp0b1dURlN0cmluZyh0b1dLKGNoYXJhY3RlcikpIGNvbXBsZXRpb25CbG9jazpt
YWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJ
RF0gewotICAgICAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9jb250ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShjYWxsYmFja0lEKTsKKyAgICBbW0hJREV2
ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlQcmVzczp0b1dURlN0cmlu
ZyhjaGFyYWN0ZXIpIGNvbXBsZXRpb25CbG9jazptYWtlQmxvY2tQdHIoW3N0cm9uZ1RoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0geworICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9j
b250ZXh0KQorICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9jb250ZXh0LT5hc3luY1Rhc2tDb21w
bGV0ZShjYWxsYmFja0lEKTsKICAgICB9KS5nZXQoKV07CiB9CiAKQEAgLTUzNCw3ICs1MTUsNyBA
QCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6cmF3S2V5RG93bihKU1N0cmluZ1JlZiBrZXkp
CiB7CiAgICAgLy8gS2V5IGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50
IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lhbCBrZXkgKGUuZy4gImRvd25BcnJvdyIpLgogICAgIC8v
IEhJREV2ZW50R2VuZXJhdG9yIGtub3dzIGhvdyB0byBtYXAgdGhlc2Ugc3BlY2lhbCBrZXlzIHRv
IHRoZSBhcHByb3ByaWF0ZSBrZXljb2RlLgotICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVk
SElERXZlbnRHZW5lcmF0b3JdIGtleURvd246dG9XVEZTdHJpbmcodG9XSyhrZXkpKV07CisgICAg
W1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0ga2V5RG93bjp0b1dU
RlN0cmluZyhrZXkpXTsKICAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2Vu
ZXJhdG9yXSBzZW5kTWFya2VySElERXZlbnRXaXRoQ29tcGxldGlvbkJsb2NrOl57IC8qIERvIG5v
dGhpbmcgKi8gfV07CiB9CiAKQEAgLTU0Miw3ICs1MjMsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJv
bGxlcklPUzo6cmF3S2V5VXAoSlNTdHJpbmdSZWYga2V5KQogewogICAgIC8vIEtleSBjYW4gYmUg
ZWl0aGVyIGEgc2luZ2xlIFVuaWNvZGUgY29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNp
YWwga2V5IChlLmcuICJkb3duQXJyb3ciKS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93
cyBob3cgdG8gbWFwIHRoZXNlIHNwZWNpYWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29k
ZS4KLSAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlV
cDp0b1dURlN0cmluZyh0b1dLKGtleSkpXTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJl
ZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlVcDp0b1dURlN0cmluZyhrZXkpXTsKICAgICBbW0hJREV2
ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBzZW5kTWFya2VySElERXZlbnRX
aXRoQ29tcGxldGlvbkJsb2NrOl57IC8qIERvIG5vdGhpbmcgKi8gfV07CiB9CiAKQEAgLTU1MCw3
ICs1MzEsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6a2V5RG93bihKU1N0cmluZ1Jl
ZiBjaGFyYWN0ZXIsIEpTVmFsdWVSZWYgbW9kaWZpZXJBcgogewogICAgIC8vIENoYXJhY3RlciBj
YW4gYmUgZWl0aGVyIGEgc2luZ2xlIFVuaWNvZGUgY29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBh
IHNwZWNpYWwga2V5IChlLmcuICJkb3duQXJyb3ciKS4KICAgICAvLyBISURFdmVudEdlbmVyYXRv
ciBrbm93cyBob3cgdG8gbWFwIHRoZXNlIHNwZWNpYWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUg
a2V5Y29kZS4KLSAgICBTdHJpbmcgaW5wdXRTdHJpbmcgPSB0b1dURlN0cmluZyh0b1dLKGNoYXJh
Y3RlcikpOworICAgIGF1dG8gaW5wdXRTdHJpbmcgPSB0b1dURlN0cmluZyhjaGFyYWN0ZXIpOwog
ICAgIGF1dG8gbW9kaWZpZXJGbGFncyA9IHBhcnNlTW9kaWZpZXJBcnJheShtX2NvbnRleHQtPmpz
Q29udGV4dCgpLCBtb2RpZmllckFycmF5KTsKIAogICAgIGZvciAoYXV0byYgbW9kaWZpZXJGbGFn
IDogbW9kaWZpZXJGbGFncykKQEAgLTcyNyw3ICs3MDgsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJv
bGxlcklPUzo6YXBwbHlBdXRvY29ycmVjdGlvbihKU1N0cmluZ1JlZiBuZXdTdHJpbmcsIEpTU3Ry
aW5nUgogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBtX2NvbnRleHQtPnByZXBhcmVGb3JBc3lu
Y1Rhc2soY2FsbGJhY2ssIENhbGxiYWNrVHlwZU5vblBlcnNpc3RlbnQpOwogCiAgICAgVGVzdFJ1
bm5lcldLV2ViVmlldyAqd2ViVmlldyA9IHRoaXMtPndlYlZpZXcoKTsKLSAgICBbd2ViVmlldyBh
cHBseUF1dG9jb3JyZWN0aW9uOnRvV1RGU3RyaW5nKHRvV0sobmV3U3RyaW5nKSkgdG9TdHJpbmc6
dG9XVEZTdHJpbmcodG9XSyhvbGRTdHJpbmcpKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFrZUJs
b2NrUHRyKFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsK
KyAgICBbd2ViVmlldyBhcHBseUF1dG9jb3JyZWN0aW9uOnRvV1RGU3RyaW5nKG5ld1N0cmluZykg
dG9TdHJpbmc6dG9XVEZTdHJpbmcob2xkU3RyaW5nKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFr
ZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURd
IHsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgbWFr
ZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURd
IHsKICAgICAgICAgICAgIC8vIGFwcGx5QXV0b2NvcnJlY3Rpb24gY2FuIGNhbGwgaXRzIGNvbXBs
ZXRpb24gaGFuZGxlciBzeW5jaHJvbm91c2x5LAogICAgICAgICAgICAgLy8gd2hpY2ggbWFrZXMg
VUlTY3JpcHRDb250cm9sbGVyIHVuaGFwcHkgKHNlZSBidWcgMTcyODg0KS4KQEAgLTExNTcsNyAr
MTEzOCw3IEBAIGJvb2wgVUlTY3JpcHRDb250cm9sbGVySU9TOjppc1Nob3dpbmdEYXRhTGlzdFN1
Z2dlc3Rpb25zKCkgY29uc3QKIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnNldEtleWJv
YXJkSW5wdXRNb2RlSWRlbnRpZmllcihKU1N0cmluZ1JlZiBpZGVudGlmaWVyKQogewotICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRLZXlib2FyZElucHV0TW9kZUlkZW50aWZpZXIo
dG9XVEZTdHJpbmcodG9XSyhpZGVudGlmaWVyKSkpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRLZXlib2FyZElucHV0TW9kZUlkZW50aWZpZXIodG9XVEZTdHJpbmcoaWRlbnRp
ZmllcikpOwogfQogCiAvLyBGSVhNRTogV3JpdGUgdGhpcyBpbiB0ZXJtcyBvZiBISURFdmVudEdl
bmVyYXRvciBvbmNlIHdlIGtub3cgaG93IHRvIHJlc2V0IGNhcHMgbG9jayBzdGF0ZQpAQCAtMTE3
OCw3ICsxMTU5LDcgQEAgYm9vbCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OmtleWJvYXJkSXNBdXRv
bWF0aWNhbGx5U2hpZnRlZCgpIGNvbnN0CiAKIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxl
cklPUzo6YXR0YWNobWVudEluZm8oSlNTdHJpbmdSZWYganNBdHRhY2htZW50SWRlbnRpZmllcikK
IHsKLSAgICBhdXRvIGF0dGFjaG1lbnRJZGVudGlmaWVyID0gdG9XVEZTdHJpbmcodG9XSyhqc0F0
dGFjaG1lbnRJZGVudGlmaWVyKSk7CisgICAgYXV0byBhdHRhY2htZW50SWRlbnRpZmllciA9IHRv
V1RGU3RyaW5nKGpzQXR0YWNobWVudElkZW50aWZpZXIpOwogICAgIF9XS0F0dGFjaG1lbnQgKmF0
dGFjaG1lbnQgPSBbd2ViVmlldygpIF9hdHRhY2htZW50Rm9ySWRlbnRpZmllcjphdHRhY2htZW50
SWRlbnRpZmllcl07CiAgICAgX1dLQXR0YWNobWVudEluZm8gKmF0dGFjaG1lbnRJbmZvID0gYXR0
YWNobWVudC5pbmZvOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9F
dmVudFNlbmRlclByb3h5Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5k
ZXJQcm94eS5tbQppbmRleCAwNjcyYjU4MWJmNjViNWFkOWEyYjg1ZmVhODYxNjQ4ZjIyM2ViNGM1
Li4xMDI3Mjg4NDA4NGQyYzEwMjA4Y2ZhMDcxNGYxYjEwYzVlZmMwYTBiIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW0KQEAgLTI3MiwyMCArMjcy
LDEwIEBAIHN0YXRpYyBOU1RpbWVJbnRlcnZhbCBhYnNvbHV0ZVRpbWVGb3JFdmVudFRpbWUoZG91
YmxlIGN1cnJlbnRFdmVudFRpbWUpCiAKIEV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJv
eHkoVGVzdENvbnRyb2xsZXIqIHRlc3RDb250cm9sbGVyKQogICAgIDogbV90ZXN0Q29udHJvbGxl
cih0ZXN0Q29udHJvbGxlcikKLSAgICAsIG1fdGltZSgwKQotICAgICwgbV9wb3NpdGlvbigpCi0g
ICAgLCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24oZmFsc2UpCi0gICAgLCBtX2NsaWNrQ291bnQoMCkK
LSAgICAsIG1fY2xpY2tUaW1lKDApCi0gICAgLCBtX2NsaWNrUG9zaXRpb24oKQotICAgICwgbV9j
bGlja0J1dHRvbihrV0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b24pCi0gICAgLCBldmVudE51bWJl
cigwKQogewogfQogCi1FdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSgpCi17Ci19
CitFdmVudFNlbmRlclByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSgpID0gZGVmYXVsdDsKIAogdm9p
ZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24p
CiB7CkBAIC0zOTQsNyArMzg0LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlRm9yY2VFdmVudFN5bmNo
cm9ub3VzbHkoTlNFdmVudCAqZXZlbnQpCiAKIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRl
clByb3h5OjpiZWdpblByZXNzdXJlRXZlbnQoaW50IHN0YWdlKQogewotICAgIFJldGFpblB0cjxF
dmVudFNlbmRlclN5bnRoZXRpY0V2ZW50PiBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5
bnRoZXRpY0V2ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNNYWtlUG9p
bnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCisgICAgYXV0byBldmVudCA9IGFkb3B0TlMo
W1tFdmVudFNlbmRlclN5bnRoZXRpY0V2ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVFdmVudEF0TG9j
YXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIGds
b2JhbExvY2F0aW9uOihbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1X
aW5kb3coKSBjb252ZXJ0UmVjdFRvU2NyZWVuOk5TTWFrZVJlY3QobV9wb3NpdGlvbi54LCBtX3Bv
c2l0aW9uLnksIDEsIDEpXS5vcmlnaW4pCiAgICAgICAgIHN0YWdlOnN0YWdlCiAgICAgICAgIHBy
ZXNzdXJlOjAuNQpAQCAtNDA5LDcgKzM5OSw3IEBAIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNl
bmRlclByb3h5OjpiZWdpblByZXNzdXJlRXZlbnQoaW50IHN0YWdlKQogCiBSZXRhaW5QdHI8TlNF
dmVudD4gRXZlbnRTZW5kZXJQcm94eTo6cHJlc3N1cmVDaGFuZ2VFdmVudChpbnQgc3RhZ2UsIGZs
b2F0IHByZXNzdXJlLCBFdmVudFNlbmRlclByb3h5OjpQcmVzc3VyZUNoYW5nZURpcmVjdGlvbiBk
aXJlY3Rpb24pCiB7Ci0gICAgUmV0YWluUHRyPEV2ZW50U2VuZGVyU3ludGhldGljRXZlbnQ+IGV2
ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVz
c3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24u
eSkKKyAgICBhdXRvIGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQg
YWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9u
LngsIG1fcG9zaXRpb24ueSkKICAgICAgICAgZ2xvYmFsTG9jYXRpb246KFttX3Rlc3RDb250cm9s
bGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpIGNvbnZlcnRSZWN0VG9TY3JlZW46
TlNNYWtlUmVjdChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSwgMSwgMSldLm9yaWdpbikKICAg
ICAgICAgc3RhZ2U6c3RhZ2UKICAgICAgICAgcHJlc3N1cmU6cHJlc3N1cmUKQEAgLTQzMSwxMCAr
NDIxLDEwIEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZUNsaWNrKCkKIHsKICAg
ICBzZW5kTW91c2VEb3duVG9TdGFydFByZXNzdXJlRXZlbnRzKCk7CiAKLSAgICBSZXRhaW5QdHI8
TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKLSAgICBSZXRh
aW5QdHI8TlNFdmVudD4gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJl
c3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50
PiBmb3JjZUNsaWNrID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVj
dGlvbjo6SW5jcmVhc2luZyk7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IHJlbGVhc2luZ1ByZXNz
dXJlID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVj
cmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEp
OworICAgIGF1dG8gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1
cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gZm9yY2VDbGljayA9IHBy
ZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcp
OworICAgIGF1dG8gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFBy
ZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKICAgICBOU0V2ZW50ICptb3VzZVVw
ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TRXZlbnRUeXBlTGVmdE1vdXNlVXAKICAg
ICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAg
ICAgICAgIG1vZGlmaWVyRmxhZ3M6MApAQCAtNDY4LDkgKzQ1OCw5IEBAIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6c3RhcnRBbmRDYW5jZWxNb3VzZUZvcmNlQ2xpY2soKQogewogICAgIHNlbmRNb3Vz
ZURvd25Ub1N0YXJ0UHJlc3N1cmVFdmVudHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBi
ZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxOU0V2
ZW50PiBpbmNyZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJl
Q2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcmVs
ZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGly
ZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAgICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNz
dXJlRXZlbnQoMSk7CisgICAgYXV0byBpbmNyZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5n
ZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRv
IHJlbGVhc2luZ1ByZXNzdXJlID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5n
ZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CiAgICAgTlNFdmVudCAqbW91c2VVcCA9IFtOU0V2ZW50
IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0V2ZW50VHlwZUxlZnRNb3VzZVVwCiAgICAgICAgIGxvY2F0
aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRpb24ueCwgbV9wb3NpdGlvbi55KQogICAgICAgICBtb2Rp
ZmllckZsYWdzOjAKQEAgLTUwMyw5ICs0OTMsOSBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1v
dXNlRm9yY2VEb3duKCkKIHsKICAgICBzZW5kTW91c2VEb3duVG9TdGFydFByZXNzdXJlRXZlbnRz
KCk7CiAKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1
cmVFdmVudCgxKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcHJlRm9yY2VDbGljayA9IHByZXNz
dXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwot
ICAgIFJldGFpblB0cjxOU0V2ZW50PiBmb3JjZU1vdXNlRG93biA9IHByZXNzdXJlQ2hhbmdlRXZl
bnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gYmVn
aW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKKyAgICBhdXRvIHByZUZvcmNlQ2xp
Y2sgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNy
ZWFzaW5nKTsKKyAgICBhdXRvIGZvcmNlTW91c2VEb3duID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgy
LCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CiAKICAgICBOU1ZpZXcgKnRh
cmdldFZpZXcgPSBbbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCkgaGl0VGVzdDpbYmVnaW5QcmVzc3VyZSBsb2NhdGlvbkluV2luZG93XV07CiAgICAgdGFyZ2V0
VmlldyA9IHRhcmdldFZpZXcgPyB0YXJnZXRWaWV3IDogbV90ZXN0Q29udHJvbGxlci0+bWFpbldl
YlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CkBAIC01MjYsOSArNTE2LDkgQEAgdm9pZCBFdmVudFNl
bmRlclByb3h5Ojptb3VzZUZvcmNlRG93bigpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91
c2VGb3JjZVVwKCkKIHsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJl
Z2luUHJlc3N1cmVFdmVudCgyKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gc3RhZ2VUd29FdmVu
dCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3Jl
YXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBzdGFnZU9uZUV2ZW50ID0gcHJlc3N1cmVD
aGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAg
YXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDIpOworICAgIGF1dG8gc3Rh
Z2VUd29FdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rp
b246OkRlY3JlYXNpbmcpOworICAgIGF1dG8gc3RhZ2VPbmVFdmVudCA9IHByZXNzdXJlQ2hhbmdl
RXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwogCiAgICAgLy8g
U2luY2UgQXBwS2l0IGRvZXMgbm90IGltcGxlbWVudCBmb3JjZXVwL2Rvd24gYXMgbW91c2UgZXZl
bnRzLCB3ZSBuZWVkIHRvIHNlbmQgdHdvIHByZXNzdXJlIGV2ZW50cyB0byBkZXRlY3QKICAgICAv
LyB0aGUgY2hhbmdlIGluIHN0YWdlIHRoYXQgbWFya3MgdGhvc2UgbW9tZW50cy4KQEAgLTU1MSw4
ICs1NDEsOCBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0
IGZvcmNlKQogewogICAgIGludCBzdGFnZSA9IGZvcmNlIDwgMSA/IDEgOiAyOwogICAgIGZsb2F0
IHByZXNzdXJlID0gZm9yY2UgPCAxID8gZm9yY2UgOiBmb3JjZSAtIDE7Ci0gICAgUmV0YWluUHRy
PE5TRXZlbnQ+IGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoc3RhZ2UpOwotICAg
IFJldGFpblB0cjxOU0V2ZW50PiBwcmVzc3VyZUNoYW5nZWRFdmVudCA9IHByZXNzdXJlQ2hhbmdl
RXZlbnQoc3RhZ2UsIHByZXNzdXJlLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2lu
Zyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KHN0YWdlKTsK
KyAgICBhdXRvIHByZXNzdXJlQ2hhbmdlZEV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudChzdGFn
ZSwgcHJlc3N1cmUsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKIAogICAg
IE5TVmlldyAqdGFyZ2V0VmlldyA9IFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5w
bGF0Zm9ybVZpZXcoKSBoaXRUZXN0OltiZWdpblByZXNzdXJlIGxvY2F0aW9uSW5XaW5kb3ddXTsK
ICAgICB0YXJnZXRWaWV3ID0gdGFyZ2V0VmlldyA/IHRhcmdldFZpZXcgOiBtX3Rlc3RDb250cm9s
bGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKQEAgLTYxMSw4ICs2MDEsNyBAQCB2
b2lkIEV2ZW50U2VuZGVyUHJveHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiAKIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2Rp
ZmllcnMgbW9kaWZpZXJzLCB1bnNpZ25lZCBrZXlMb2NhdGlvbikKIHsKLSAgICBOU1N0cmluZyog
Y2hhcmFjdGVyID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDU3RyaW5nOnRvU1REKGtleSkuY19zdHIo
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzpbTlNTdHJpbmcg
ZGVmYXVsdENTdHJpbmdFbmNvZGluZ11dOworICAgIE5TU3RyaW5nKiBjaGFyYWN0ZXIgPSB0b1dU
RlN0cmluZyhrZXkpOwogCiAgICAgTlNTdHJpbmcgKmV2ZW50Q2hhcmFjdGVyID0gY2hhcmFjdGVy
OwogICAgIHVuc2lnbmVkIHNob3J0IGtleUNvZGUgPSAwOwpAQCAtODMyLDcgKzgyMSw3IEBAIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2Rp
ZmllcnMgbW9kaWZpZXJzLCB1bnNpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3Jv
bGxCeShpbnQgeCwgaW50IHkpCiB7Ci0gICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IGNnU2Nyb2xs
RXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3Jv
bGxFdmVudFVuaXRMaW5lLCAyLCB5LCB4LCAwKSk7CisgICAgYXV0byBjZ1Njcm9sbEV2ZW50ID0g
YWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRV
bml0TGluZSwgMiwgeSwgeCwgMCkpOwogCiAgICAgLy8gU2V0IHRoZSBDR0V2ZW50IGxvY2F0aW9u
IGluIGZsaXBwZWQgY29vcmRzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBzY3JlZW4sIHdoaWNoCiAg
ICAgLy8gY29tcGVuc2F0ZXMgZm9yIHRoZSBiZWhhdmlvciBvZiArW05TRXZlbnQgZXZlbnRXaXRo
Q0dFdmVudDpdIHdoZW4gdGhlIGV2ZW50IGhhcwpAQCAtODU5LDcgKzg0OCw3IEBAIHZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBib29s
IHBhZ2VkKQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxB
bmRNb21lbnR1bVBoYXNlcyhpbnQgeCwgaW50IHksIGludCBwaGFzZSwgaW50IG1vbWVudHVtKQog
ewotICAgIFJldGFpblB0cjxDR0V2ZW50UmVmPiBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2
ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwg
eSwgeCwgMCkpOworICAgIGF1dG8gY2dTY3JvbGxFdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0
ZVNjcm9sbFdoZWVsRXZlbnQyKDAsIGtDR1Njcm9sbEV2ZW50VW5pdExpbmUsIDIsIHksIHgsIDAp
KTsKIAogICAgIC8vIFNldCB0aGUgQ0dFdmVudCBsb2NhdGlvbiBpbiBmbGlwcGVkIGNvb3JkcyBy
ZWxhdGl2ZSB0byB0aGUgZmlyc3Qgc2NyZWVuLCB3aGljaAogICAgIC8vIGNvbXBlbnNhdGVzIGZv
ciB0aGUgYmVoYXZpb3Igb2YgK1tOU0V2ZW50IGV2ZW50V2l0aENHRXZlbnQ6XSB3aGVuIHRoZSBl
dmVudCBoYXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3Jt
V2ViVmlld01hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmll
d01hYy5tbQppbmRleCA2NDE3ODJjYTk3ZTFkYWZiOTAwOTE5ZGIxOWIzNDc0YTU1NDM4OGU1Li41
YTRlOTZiODFlYThjZGEwNmIzN2I0NjhlNTg4NTllZjcxZWI0NmI4IDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCkBAIC02NCw3ICs2NCw3
IEBAIFBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLV2ViVmlld0NvbmZpZ3VyYXRp
b24qIGNvbmZpZ3VyYXRpb24sIGNvbnN0IFRlCiAgICAgaWYgKG1fb3B0aW9ucy51c2VSZW1vdGVM
YXllclRyZWUpCiAgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
IHNldFZhbHVlOkBZRVMgZm9yS2V5OkAiV2ViS2l0MlVzZVJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhIl07CiAKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29waWVkQ29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOworICAgIGF1dG8gY29w
aWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOwogICAgIFdL
UHJlZmVyZW5jZXNTZXRUaHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdlIFdLUHJlZmVy
ZW5jZXNSZWYpW2NvcGllZENvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCBtX29wdGlvbnMudXNl
VGhyZWFkZWRTY3JvbGxpbmcpOwogCiAgICAgTlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAs
IFRlc3RDb250cm9sbGVyOjp2aWV3V2lkdGgsIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0KTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFj
Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KaW5k
ZXggMTRiN2RjOWQwZjI0ZWMxMGU3OGFjMmIwZTAzNjVhOWVhNjQ5YWIyNi4uYjIyMjg3MWNkMGEz
OTE5ZTMzZWQ2MDZkMGY0NDE2ODg1NjkzYTIwNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0
SW52b2NhdGlvbiYgdGVzdAogICAgIGlmICghdGVzdC51cmxDb250YWlucygiY29udGVudGV4dGVu
c2lvbnMvIikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdGVz
dFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGVzdC51
cmwoKSkpOworICAgIGF1dG8gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgdGVzdC51cmwoKSkpOwogICAgIE5TVVJMICpmaWx0ZXJVUkwgPSBbKF9f
YnJpZGdlIE5TVVJMICopdGVzdFVSTC5nZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhFeHRlbnNpb246
QCJqc29uIl07CiAKICAgICBfX2Jsb2NrIE5TU3RyaW5nICpjb250ZW50RXh0ZW5zaW9uU3RyaW5n
OwpAQCAtMzcxLDE0ICszNzEsMTQgQEAgc3RhdGljIE5TU2V0ICpzeXN0ZW1IaWRkZW5Gb250RmFt
aWx5U2V0KCkKIAogc3RhdGljIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGdlbmVyYXRlRm9udEFs
bG93TGlzdCgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IHJlc3VsdCA9
IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAgYXV0byByZXN1bHQgPSBhZG9w
dFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAoTlNTdHJpbmcgKmZvbnRGYW1p
bHkgaW4gYWxsb3dlZEZvbnRGYW1pbHlTZXQoKSkgewogICAgICAgICBOU0FycmF5ICpmb250c0Zv
ckZhbWlseSA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gYXZhaWxhYmxlTWVt
YmVyc09mRm9udEZhbWlseTpmb250RmFtaWx5XTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGZhbWlseUluRm9udCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoW2ZvbnRGYW1pbHkgVVRGOFN0cmluZ10pKTsKKyAgICAgICAgYXV0byBmYW1pbHlJbkZvbnQg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFtmb250RmFtaWx5IFVURjhT
dHJpbmddKSk7CiAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHJlc3VsdC5nZXQoKSwgZmFtaWx5
SW5Gb250LmdldCgpKTsKICAgICAgICAgZm9yIChOU0FycmF5ICpmb250SW5mbyBpbiBmb250c0Zv
ckZhbWlseSkgewogICAgICAgICAgICAgLy8gRm9udCBuYW1lIGlzIHRoZSBmaXJzdCBlbnRyeSBp
biB0aGUgYXJyYXkuCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZm9udE5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFtbZm9udEluZm8gb2Jq
ZWN0QXRJbmRleDowXSBVVEY4U3RyaW5nXSkpOworICAgICAgICAgICAgYXV0byBmb250TmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW1tmb250SW5mbyBvYmplY3RB
dEluZGV4OjBdIFVURjhTdHJpbmddKSk7CiAgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShy
ZXN1bHQuZ2V0KCksIGZvbnROYW1lLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM5NCw3
ICszOTQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0
KCkKICAgICAvLyBUZXN0aW5nIHVzZXMgYSBwcml2YXRlIHNlc3Npb24sIHdoaWNoIGlzIG1lbW9y
eSBvbmx5LiBIb3dldmVyIGNyZWF0aW5nIG9uZSBpbnN0YW50aWF0ZXMgYSBzaGFyZWQgTlNVUkxD
YWNoZSwKICAgICAvLyBhbmQgaWYgd2UgaGF2ZW4ndCBjcmVhdGVkIG9uZSB5ZXQsIHRoZSBkZWZh
dWx0IG9uZSB3aWxsIGJlIGNyZWF0ZWQgb24gZGlzay4KICAgICAvLyBNYWtpbmcgdGhlIHNoYXJl
ZCBjYWNoZSBtZW1vcnktb25seSBhdm9pZHMgdG91Y2hpbmcgdGhlIGZpbGUgc3lzdGVtLgotICAg
IFJldGFpblB0cjxOU1VSTENhY2hlPiBzaGFyZWRDYWNoZSA9CisgICAgYXV0byBzaGFyZWRDYWNo
ZSA9CiAgICAgICAgIGFkb3B0TlMoW1tOU1VSTENhY2hlIGFsbG9jXSBpbml0V2l0aE1lbW9yeUNh
cGFjaXR5OjEwMjQgKiAxMDI0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpc2tDYXBhY2l0eTowCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkaXNrUGF0aDpuaWxdKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFj
L1VJU2NyaXB0Q29udHJvbGxlck1hYy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlT
Y3JpcHRDb250cm9sbGVyTWFjLmgKaW5kZXggMGVhYjg5NDllNmJlYmZlZTY1OTQ3NTg5YWZiOWU4
ZDliOGJlMWVjNy4uMmQyZDFkNmI4NDZlNjg3OGIwYjFlYmRjMTY2N2MxNzVlOTE1NjY1ZiAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFj
LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFj
LmgKQEAgLTMxLDEzICszMSwxNCBAQCBPQkpDX0NMQVNTIFdLV2ViVmlldzsKIAogbmFtZXNwYWNl
IFdUUiB7CiAKLWNsYXNzIFVJU2NyaXB0Q29udHJvbGxlck1hYyA6IHB1YmxpYyBVSVNjcmlwdENv
bnRyb2xsZXJDb2NvYSB7CitjbGFzcyBVSVNjcmlwdENvbnRyb2xsZXJNYWMgZmluYWwgOiBwdWJs
aWMgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EgewogcHVibGljOgogICAgIGV4cGxpY2l0IFVJU2Ny
aXB0Q29udHJvbGxlck1hYyhVSVNjcmlwdENvbnRleHQmIGNvbnRleHQpCiAgICAgICAgIDogVUlT
Y3JpcHRDb250cm9sbGVyQ29jb2EoY29udGV4dCkKICAgICB7CiAgICAgfQogCitwcml2YXRlOgog
ICAgIHZvaWQgcmVwbGFjZVRleHRBdFJhbmdlKEpTU3RyaW5nUmVmLCBpbnQsIGludCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCB6b29tVG9TY2FsZShkb3VibGUsIEpTVmFsdWVSZWYpIG92ZXJyaWRlOwog
ICAgIGRvdWJsZSB6b29tU2NhbGUoKSBjb25zdCBvdmVycmlkZTsKQEAgLTYyLDcgKzYzLDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBhY3RpdmF0ZUF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpTVmFs
dWVSZWYgY2FsbGJhY2spIG92ZXJyaWRlOwogCi1wcml2YXRlOgogICAgIE5TVGFibGVWaWV3ICpk
YXRhTGlzdFN1Z2dlc3Rpb25zVGFibGVWaWV3KCkgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0gYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KaW5kZXggY2Qx
MTMyOWE2NTQxZDdiNGViNzdkN2VjMTQ2ODhlOTkyMWYyN2M1My4uYjVjYjUxODE1MDU5ZTdhMDkz
YTE0MjM5OTFlODkxN2UzZWQzMDkwOCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQg
VUlTY3JpcHRDb250cm9sbGVyTWFjOjpjb21wbGV0ZUJhY2tTd2lwZShKU1ZhbHVlUmVmIGNhbGxi
YWNrKQogCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlck1hYzo6cGxheUJhY2tFdmVudFN0cmVhbShK
U1N0cmluZ1JlZiBldmVudFN0cmVhbSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKLSAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHN0cmVhbSA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmco
a0NGQWxsb2NhdG9yRGVmYXVsdCwgZXZlbnRTdHJlYW0pKTsKKyAgICBhdXRvIHN0cmVhbSA9IGFk
b3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXZlbnRTdHJl
YW0pKTsKICAgICBwbGF5QmFja0V2ZW50cyh3ZWJWaWV3KCksIG1fY29udGV4dCwgKF9fYnJpZGdl
IE5TU3RyaW5nICopc3RyZWFtLmdldCgpLCBjYWxsYmFjayk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409952</attachid>
            <date>2020-09-28 19:35:47 -0700</date>
            <delta_ts>2020-09-29 14:15:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217028-20200928193546.patch</filename>
            <type>text/plain</type>
            <size>708927</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NzA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDc4ZWRmNzEyZmRkMzdjZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyLi5lZWJjN2I1NzM1MjY2MjQy
MGI2NTllNDQzZjM3Y2EwZDZmNWNiZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bh
c3RlIGNvZGUgYW5kIGxvbmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU1JldGFpblB0ci5oOiBB
ZGRlZCBzdXBwb3J0IGZvciBKU0NsYXNzUmVmLgorCiAyMDIwLTA5LTI2ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGFm
dGVyIHIyNjczNzMgdG8gcmVzb2x2ZSBwb3N0LWNvbW1pdCByZXZpZXcgY29tbWVudHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaAppbmRleCBmZDg0MTJmM2VjMWVjNDM4OWZj
YTRhZTQ4MDIxMjI1OTgyYjdiODQzLi4wNzZkMTM5MDlhMzgxZDVhMjlkYTg5OGJiN2JjYWNmMmMz
ODJlZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTUmV0YWluUHRy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1JldGFpblB0ci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
MTMgKzI5LDE2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLWlubGluZSB2b2lkIEpTUmV0YWluKEpTU3RyaW5nUmVmIHN0cmluZykgeyBKU1N0cmlu
Z1JldGFpbihzdHJpbmcpOyB9Ci1pbmxpbmUgdm9pZCBKU1JlbGVhc2UoSlNTdHJpbmdSZWYgc3Ry
aW5nKSB7IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOyB9CitpbmxpbmUgdm9pZCBKU1JldGFpbihK
U0NsYXNzUmVmIGNvbnRleHQpIHsgSlNDbGFzc1JldGFpbihjb250ZXh0KTsgfQoraW5saW5lIHZv
aWQgSlNSZWxlYXNlKEpTQ2xhc3NSZWYgY29udGV4dCkgeyBKU0NsYXNzUmVsZWFzZShjb250ZXh0
KTsgfQogaW5saW5lIHZvaWQgSlNSZXRhaW4oSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsg
SlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOyB9CiBpbmxpbmUgdm9pZCBKU1JlbGVhc2Uo
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQpIHsgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250
ZXh0KTsgfQoraW5saW5lIHZvaWQgSlNSZXRhaW4oSlNTdHJpbmdSZWYgc3RyaW5nKSB7IEpTU3Ry
aW5nUmV0YWluKHN0cmluZyk7IH0KK2lubGluZSB2b2lkIEpTUmVsZWFzZShKU1N0cmluZ1JlZiBz
dHJpbmcpIHsgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7IH0KIAogZW51bSBBZG9wdFRhZyB7IEFk
b3B0IH07CiAKQEAgLTc0LDYgKzc3LDcgQEAgcHJpdmF0ZToKICAgICBUIG1fcHRyIHsgbnVsbHB0
ciB9OwogfTsKIAorSlNSZXRhaW5QdHI8SlNDbGFzc1JlZj4gYWRvcHQoSlNDbGFzc1JlZik7CiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWRvcHQoSlNTdHJpbmdSZWYpOwogSlNSZXRhaW5QdHI8
SlNHbG9iYWxDb250ZXh0UmVmPiBhZG9wdChKU0dsb2JhbENvbnRleHRSZWYpOwogCkBAIC04Miw2
ICs4NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNSZXRhaW5QdHI8VD46OkpT
UmV0YWluUHRyKEFkb3B0VGFnLCBUIHB0cikKIHsKIH0KIAoraW5saW5lIEpTUmV0YWluUHRyPEpT
Q2xhc3NSZWY+IGFkb3B0KEpTQ2xhc3NSZWYgbykKK3sKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8
SlNDbGFzc1JlZj4oQWRvcHQsIG8pOworfQorCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGFkb3B0KEpTU3RyaW5nUmVmIG8pCiB7CiAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgbyk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggMTg1NzMzYTgwZjdjNGJiNWMwODU4Mzg5MGNmYjJiZjJjNmJjMmMyMC4u
ZTQyY2M5MjczNDQzNDYyM2Q5YzNkMzI5YTMyZjRjMjNhOTJkZjgzZiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2MCBAQAorMjAy
MC0wOS0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgdGVzdCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxv
bmctd2luZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJIGRpZCBhIGxvdCBvZiBzaW1wbGlmeWluZywgYnV0IGV2ZW4g
bW9yZSBpcyBwb3NzaWJsZS4gRm9yIHNvbWUgcmVhc29uLCB0aGUgdGVzdAorICAgICAgICBjb2Rl
IGlzIGEgaG90YmVkIG9mIHJlcGVhdGVkIGlkaW9tcywgYW5kIGNvcHkgYW5kIHBhc3RlIHJhdGhl
ciB0aGFuIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgIEV2ZW4gYWZ0ZXIgdGhlIHJlZmFjdG9y
aW5nLCBJIGhhdmUgc29tZSBkb3VidHMgYWJvdXQgdGhlIHdheSB0aGlzIGNvZGUgaXMgd3JpdHRl
biB3aXRoCisgICAgICAgIHNvIG11Y2ggcmVwZWF0ZWQgbWFyc2hhbGluZyBmb3IgZWFjaCBmdW5j
dGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0
KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmNyZWF0ZUpTQ2xhc3MpOiBSZXBsYWNlZCBnZXRKU0NsYXNzIHdpdGggdGhpcy4g
UmV0dXJuIGEKKyAgICAgICAgSlNSZXRhaW5QdHIgdG8gbWFrZSBpdCBjbGVhciB0aGlzIHBhc3Nl
cyBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKHVp
RWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlQ2FsbGJhY2spOiBSZW1vdmVkIHVubmVlZGVk
IGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIEpTUmV0YWluUHRyLCB3aGljaCBzdGFydHMgb3V0
IG51bGwuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9y
RHVtcFJlbmRlclRyZWUucG06CisgICAgICAgIChfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IpOiBV
c2UgdG9PcHRpb25hbEJvb2wgYW5kIGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoX3JldHVybkV4
cHJlc3Npb24pOiBVc2UgbWFrZVZhbHVlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChjb2xsZWN0Q2FsbGJhY2spOiBVc2UgYSByZWZlcmVuY2UgYW5kIGF1dG8uCisgICAg
ICAgIChjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAo
Z2V0SlNPYmplY3RDb3VudENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChHQ0NvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Y3JlYXRlSlNDbGFzcyk6IFJlcGxhY2VkIGdldEpT
Q2xhc3Mgd2l0aCB0aGlzLiBSZXR1cm4gYQorICAgICAgICBKU1JldGFpblB0ciB0byBtYWtlIGl0
IGNsZWFyIHRoaXMgcGFzc2VzIG93bmVyc2hpcCB0byB0aGUgY2FsbGVyLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKGVuY29kZUhv
c3ROYW1lQ2FsbGJhY2spOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChleGVjQ29tbWFu
ZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChmaW5kU3RyaW5nQ2FsbGJhY2spOiBEaXR0by4K
KyAgICAgICAgKGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAob3Zl
cnJpZGVQcmVmZXJlbmNlQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKHF1ZXVlTG9hZENhbGxi
YWNrKTogRGl0dG8uCisgICAgICAgIChxdWV1ZUxvYWRIVE1MU3RyaW5nQ2FsbGJhY2spOiBEaXR0
by4KKyAgICAgICAgKFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFs
T2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXN0UnVubmVyOjpjcmVhdGVKU0NsYXNzKTogUmVw
bGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAgICAgIEpTUmV0YWluUHRy
IHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRvIHRoZSBjYWxsZXIuCisg
ICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMpOiBNYWRlIHJldHVybiB2YWx1ZSBjb25z
dCouCisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAg
ICAgKFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQpOiBTaW1wbGlmaWVk
IHByaW50aW5nLgorICAgICAgICAoVGVzdFJ1bm5lcjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sp
OiBVcGRhdGVkIHRvIHVzZSBvYmplY3QgcG9pbnRlcnMgYXMgaGFzaAorICAgICAgICB0YWJsZSB2
YWx1ZXMgaW5zdGVhZCBvZiB2YWx1ZXMsIHNpbmNlIGNhbGxiYWNrcyBuZWVkIHRvIGJlIG9iamVj
dHMuCisgICAgICAgIChUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogRGl0dG8u
CisgICAgICAgIChUZXN0UnVubmVyOjpjbGVhclRlc3RSdW5uZXJDYWxsYmFja3MpOiBEaXR0by4K
KyAgICAgICAgKFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKTogVXNlIGFycmF5TGVuZ3Ro
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDogVXBkYXRlZCBmb3IgdGhl
IGFib3ZlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3Jt
TmFtZSBjb25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoY3JlYXRlRW1w
dHlKU1N0cmluZyk6IERsZXRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZSk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50
TGlua3MpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
bGxBdHRyaWJ1dGVzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGl0dG8uCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdWJyb2xlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dmFsdWVEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXJpYURyb3BFZmZlY3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
cyk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
VmlzaWJsZUNlbGxzKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oOiBSZW1vdmVkIHVubmVl
ZGVkICJleHRlcm4iLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlDb21tb25NYWMubW06CisgICAgICAgIChzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEpOiBVc2UgYXJyYXlMZW5ndGguCisgICAgICAgIFJlbW92
ZWQgdW5uZWVkZWQgY2FsbCB0byBKU1ZhbHVlVG9PYmplY3QgYWZ0ZXIgSlNWYWx1ZUlzT2JqZWN0
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSBj
b25zdCk6IFVzZSBjcmVhdGVKU1N0cmluZy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoY3JlYXRlRW1wdHlKU1N0
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3RUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZUZvckNyaXRlcmlhKTogVXNlIGFycmF5TGVuZ3RoLgorICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGNhbGwgdG8gSlNWYWx1ZVRvT2JqZWN0IGFmdGVyIEpTVmFsdWVJc09iamVjdC4KKyAgICAgICAg
KHNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEpOiBEaXR0by4KKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSBjb25zdCk6
IFVzZSBjcmVhdGVKU1N0cmluZy4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRvY3VtZW50VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRnJh
bWVMb2FkRGVsZWdhdGUubW06CisgICAgICAgICgtW0ZyYW1lTG9hZERlbGVnYXRlIGRpZENsZWFy
V2luZG93T2JqZWN0SW5TdGFuZGFyZFdvcmxkRm9yRnJhbWU6XSk6CisgICAgICAgIFVzZSBhdXRv
LiBQYXNzIGZld2VyIGFyZ3VtZW50cyB0byBtYWtlV2luZG93T2JqZWN0LiBTaW1wbGlmaWVkIG9i
amVjdAorICAgICAgICBjcmVhdGlvbiBjb2RlIGJ5IHVzaW5nIGFkb3B0TlMgaW5zdGVhZCBvZiBy
ZWxlYXNlLgorICAgICAgICAoLVtGcmFtZUxvYWREZWxlZ2F0ZSBkaWRDbGVhcldpbmRvd09iamVj
dEZvckZyYW1lOmluSXNvbGF0ZWRXb3JsZDpdKToKKyAgICAgICAgVXNlIGNyZWF0ZUpTU3RyaW5n
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAg
ICAgIChUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIGFycmF5TGVuZ3RoLgorCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAgKEZy
YW1lTG9hZERlbGVnYXRlOjpkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lSW5TdGFuZGFyZFdv
cmxkKToKKyAgICAgICAgUGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFrZVdpbmRvd09iamVjdC4K
KworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOiBVc2Ugc2V0
R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAgIChUZXh0SW5wdXRDb250cm9sbGVyOjpjcmVh
dGVKU0NsYXNzKTogUmVwbGFjZWQgZ2V0SlNDbGFzcyB3aXRoIHRoaXMuIFJldHVybiBhCisgICAg
ICAgIEpTUmV0YWluUHRyIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBwYXNzZXMgb3duZXJzaGlwIHRv
IHRoZSBjYWxsZXIuCisgICAgICAgIChUZXh0SW5wdXRDb250cm9sbGVyOjpzdGF0aWNWYWx1ZXMp
OiBNYWRlIHJldHVybiB2YWx1ZSBjb25zdCouCisgICAgICAgIChUZXh0SW5wdXRDb250cm9sbGVy
OjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4v
VGV4dElucHV0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIFRl
c3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwOgorICAgICAgICAoV1RSOjp0b09w
dGlvbmFsQm9vbCk6IFJlbmFtZWQgZnJvbSBKU1ZhbHVlTWFrZUJvb2xlYW5Pck51bGwuCisgICAg
ICAgIChXVFI6OnRvT3B0aW9uYWxEb3VibGUpOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6bWFrZVZh
bHVlKTogQWRkZWQgd2l0aCBvdmVybG9hZHMgZm9yIHZhcmlvdXMgdHlwZXMuCisgICAgICAgIFJl
cGxhY2VkIEpTVmFsdWVUb051bGxhYmxlQm9vbGVhbiBhbmQgSlNWYWx1ZU1ha2VTdHJpbmdPck51
bGwuCisgICAgICAgIChXVFI6OmNyZWF0ZUpTU3RyaW5nKTogQWRkZWQgd2l0aCBvdmVybG9hZHMg
Zm9yIHZhcmlvdXMgdHlwZXMuCisgICAgICAgIChXVFI6OnByb3BlcnR5KTogQWRkZWQuCisgICAg
ICAgIChXVFI6OnN0cmluZ1Byb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChXVFI6OmJvb2xlYW5Q
cm9wZXJ0eSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpudW1lcmljUHJvcGVydHkpOiBBZGRlZC4K
KyAgICAgICAgKFdUUjo6b2JqZWN0UHJvcGVydHkpOiBSZWZhY3RvcmVkIHRvIGNhbGwgcHJvcGVy
dHkuCisgICAgICAgIChXVFI6OmFycmF5TGVuZ3RoKTogQWRkZWQuCisgICAgICAgIChXVFI6OnNl
dEdsb2JhbE9iamVjdFByb3BlcnR5KTogQWRkZWQuCisgICAgICAgIChXVFI6OmNhbGwpOiBSZWZh
Y3RvcmVkIHRvIGxldCBvYmplY3RQcm9wZXJ0eSBkbyBtb3JlIG9mIHRoZSBudWxsIGNoZWNraW5n
LgorICAgICAgICAoV1RSOjpjYWxsQ29uc3RydWN0b3IpOiBEaXR0by4KKyAgICAgICAgKiBUZXN0
UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4K
KworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGFibGUuaDogUmVk
dWNlZCBpbmNsdWRlcyBhIGJpdC4KKworICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvQmluZGlu
Z3MvSlNXcmFwcGVyLmg6IEFkZGVkIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorCisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250ZXh0LmNwcDoK
KyAgICAgICAgKFVJU2NyaXB0Q29udGV4dDo6VUlTY3JpcHRDb250ZXh0KTogUGFzcyBmZXdlciBh
cmd1bWVudHMgdG8gbWFrZVdpbmRvd09iamVjdC4KKyAgICAgICAgKFVJU2NyaXB0Q29udGV4dDo6
cnVuVUlTY3JpcHQpOiBVc2UgY3JlYXRlSlNTdHJpbmcuCisgICAgICAgIChVSVNjcmlwdENvbnRl
eHQ6Om9iamVjdEZyb21SZWN0IGNvbnN0KTogVXNlIHNldFByb3BlcnR5LgorICAgICAgICAqIFRl
c3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oOiBVcGRh
dGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0
Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwOgorICAgICAgICAoV1RSOjp0b0Rl
dmljZU9yaWVudGF0aW9uKTogVXNlIGNyZWF0ZUpTU3RyaW5nIGFuZCBKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nLgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6Om1ha2VXaW5k
b3dPYmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisKKyAgICAgICAgKiBUZXN0
UnVubmVyU2hhcmVkL2NvY29hL0xheW91dFRlc3RTcGVsbENoZWNrZXIubW06CisgICAgICAgICgt
W0xheW91dFRlc3RTcGVsbENoZWNrZXIgc2V0UmVzdWx0c0Zyb21KU1ZhbHVlOmluQ29udGV4dDpd
KTogVXNlIGNyZWF0ZUpTU3RyaW5nCisgICAgICAgIGFuZCByZW1vdmVkIHVubmVlZGVkIHVzZSBv
ZiBscm91bmRsLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rp
b25zLmg6IEFkZGVkLiBDb250YWlucyBjb252ZW5pZW5jZSBmdW5jdGlvbnMKKyAgICAgICAgZm9y
IGRlYWxpbmcgd2l0aCBXS0RpY3Rpb25hcnlSZWYuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0V2ZW50U2VuZGVyUHJveHkuaDogSW5pdGlhbGl6ZSBkYXRhIG1lbWJlcnMuCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmNwcDoKKyAgICAg
ICAgKEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbik6IFVzZSBPcHRpb25hbCBp
bnN0ZWFkIG9mIHNlcGFyYXRlIGJvb2wuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9HZW9s
b2NhdGlvblByb3ZpZGVyTW9jay5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om1ha2VXaW5kb3dP
YmplY3QpOiBVc2Ugc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkuCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oOiBVcGRhdGVk
IGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtOgorICAgICAgICAoX2dlbmVy
YXRlSW1wbGVtZW50YXRpb25GaWxlKTogVXNlIHN0YXRpYyBpbml0aWFsaXphdGlvbiBhbmQgYSBs
YW1iZGEgaW5zdGVhZCBvZgorICAgICAgICBhbiBpZiBzdGF0ZW1lbnQgdG8gaW5pdGlhbGl6ZS4K
KyAgICAgICAgKF9wbGF0Zm9ybVR5cGVDb25zdHJ1Y3Rvcik6IFVzZSB0b09wdGlvbmFsQm9vbCBh
bmQgY3JlYXRlSlNTdHJpbmcuIEFsc28gYWRkZWQKKyAgICAgICAgc3VwcG9ydCBmb3IgbnVsbGFi
bGUgZG91YmxlcyBhbmQgdXNlZCBhdXRvIGEgYml0IG1vcmUuCisgICAgICAgIChfcmV0dXJuRXhw
cmVzc2lvbik6IFVzZSBtYWtlVmFsdWUuCisKKyAgICAgICAgKiBJbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9UZXN0UnVubmVyLmlkbDogTWFkZSB0aGUgb3B0aW9uYWwgYXJndW1lbnRzIHRvIHRoZQor
ICAgICAgICBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiBmdW5jdGlvbiAiZG91YmxlPyIgaW5z
dGVhZCBvZiAib2JqZWN0Ii4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OmdldE1lbnVJ
dGVtQ2hpbGRyZW5DYWxsYmFjayk6IFVzZSBhdXRvIGFuZCBub3QgSlNWYWx1ZVRvT2JqZWN0Lgor
ICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IE1vdmVkIHRvIEpTQmFzaWNzLmgvY3BwLgorICAg
ICAgICAoV1RSOjpwYXJzZVRvdWNoTW9kaWZpZXIpOiBBZGRlZC4gRmFjdG9yZWQgb3V0IG9mIHRo
ZQorICAgICAgICBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyIGZ1bmN0
aW9uLgorICAgICAgICAoV1RSOjpwYXJzZU1vZGlmaWVyQXJyYXkpOiBVc2UgY3JlYXRlSlNTdHJp
bmcgYW5kIHJlbW92ZSB1bm5lZWRlZCBpZ25vcmVkCisgICAgICAgIGV4Y2VwdGlvbiBvdXQgYXJn
dW1lbnQsIHNpbmNlIHRoYXQgaXMgb3B0aW9uYWwuIEFsc28gYWRkZWQgb3ZlcmxvYWQgdGhhdAor
ICAgICAgICBnZXRzIHRoZSBjb250ZXh0LgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250
cm9sbGVyOjpFdmVudFNlbmRpbmdDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIpOiBEZWxldGVk
LgorICAgICAgICAoV1RSOjpjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KTogVXNlIGFkb3B0V0sgYW5k
IHNldFZhbHVlLiBSZXR1cm4gYSBXS1JldGFpblB0ci4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6bW91c2VEb3duKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdl
LgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVVwKTogRGl0dG8u
CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlTW92ZVRvKTogVXNl
IHNldFZhbHVlIGFuZAorICAgICAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZXMuCisgICAg
ICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRm9yY2VDbGljayk6IERpdHRv
LgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzdGFydEFuZENhbmNlbE1v
dXNlRm9yY2VDbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9s
bGVyOjptb3VzZUZvcmNlRG93bik6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdD
b250cm9sbGVyOjptb3VzZUZvcmNlVXApOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bGVhcEZvcndhcmQpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljayk6IFVz
ZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OmNyZWF0ZUtleURvd25NZXNzYWdlQm9k
eSk6IFVzZSBzZXRWYWx1ZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
a2V5RG93bik6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNLZXlEb3duKTogVXNl
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
bW91c2VTY3JvbGxCeSk6IFVzZSBzZXRWYWx1ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5k
TW9tZW50dW1QaGFzZXMpOiBVc2UKKyAgICAgICAgc2V0VmFsdWUgYW5kIHBvc3RQYWdlTWVzc2Fn
ZS4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y29udGludW91c01vdXNl
U2Nyb2xsQnkpOiBVc2Ugc2V0VmFsdWUgYW5kCisgICAgICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VN
ZXNzYWdlLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250ZXh0Q2xp
Y2spOiBVc2UgYXV0byBhbmQgbm90IEpTVmFsdWVUb09iamVjdC4KKyAgICAgICAgKFdUUjo6dG9N
b25pdG9yV2hlZWxFdmVudHNPcHRpb25zKTogVXNlIGJvb2xlYW5Qcm9wZXJ0eS4KKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6YWRkVG91Y2hQb2ludCk6IFVzZSBzZXRWYWx1
ZSBhbmQgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcik6IERpdHRvLgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaFBvaW50UmFkaXVzKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoU3RhcnQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hNb3ZlKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoRW5kKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoQ2FuY2Vs
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNsZWFyVG91
Y2hQb2ludHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
cmVsZWFzZVRvdWNoUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6Y2FuY2VsVG91Y2hQb2ludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFBy
b3BlcnR5LgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRT
ZW5kaW5nQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgIERlbGV0
ZWQgdmFyaW91cyB1bm5lZWRlZCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OkdDQ29u
dHJvbGxlcjo6R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6R0NDb250cm9s
bGVyOjp+R0NDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6R0NDb250cm9sbGVy
OjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5LgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaDogVXBk
YXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICBBbHNvIG1hcmtlZCB0aGUgY2xhc3MgZmluYWwu
CisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRpZENyZWF0ZVBhZ2UpOiBV
c2UgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RQ
YWdlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6cmVwb3J0
TGl2ZURvY3VtZW50cyk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSk6IFVzZSBkaWN0aW9uYXJ5VmFsdWUs
CisgICAgICAgIGJvb2xlYW5WYWx1ZSwgcG9zdFBhZ2VNZXNzYWdlLCB2YWx1ZSwgYW5kIG1vcmUg
dG8gc3RyZWFtbGluZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmJvb2xlYW5Gb3JL
ZXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c3RyaW5nRm9yS2V5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmJlZ2luVGVzdGluZyk6
IFVzZSBib29sZWFuVmFsdWUuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpkb25lKTog
VXNlIHN0cmluZ1ZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6Y2xvc2VPdGhl
clBhZ2VzKTogVXNlIHNldFZhbHVlIGFuZCB0b1dLLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6ZHVtcFRvU3RkRXJyKTogVXNlIHBvc3RQYWdlTWVzc2FnZQorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dCk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVlKTogVXNlIHBvc3RQYWdl
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnBvc3RBZGRDaHJvbWVJbnB1
dEZpZWxkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0UmVtb3Zl
Q2hyb21lSW5wdXRGaWVsZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cG9zdEZvY3VzV2ViVmlldyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6
cG9zdFNldEJhY2tpbmdTY2FsZUZhY3Rvcik6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6cG9zdFNldFdpbmRvd0lzS2V5KTogVXNlIHRvV0suCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlOjpwb3N0U2V0Vmlld1NpemUpOiBVc2Ugc2V0VmFsdWUgYW5kIHRvV0suCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpwb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25D
bGljayk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
Ojpwb3N0U2V0QWRkc1Zpc2l0ZWRMaW5rcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBzZXRWYWx1
ZSBhbmQgcG9zdFBhZ2VNZXNzYWdlLAorICAgICAgICBhbmQgdXNlIE9wdGlvbmFsIGluc3RlYWQg
b2YgYm9vbC9kb3VibGUgcGFpcnMuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IpOiBVc2UgcG9zdFBhZ2VNZXNz
YWdlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aXNHZW9sb2NhdGlvblByb3ZpZGVy
QWN0aXZlIGNvbnN0KTogVXNlIHRvV0sgYW5kIGJvb2xlYW5WYWx1ZS4KKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGU6OmltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkIGNvbnN0KTogVXNl
IHRvV0sgYW5kIHVpbnQ2NFZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2V0
VXNlck1lZGlhUGVybWlzc2lvbik6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb24pOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9u
Rm9yT3JpZ2luKTogVXNlIHNldFZhbHVlCisgICAgICAgIGFuZCBwb3N0UGFnZU1lc3NhZ2UuCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjp1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENv
dW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
OjpyZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4pOiBVc2V0IHNl
dFZhbHVlCisgICAgICAgIGFuZCB1aW50NjRWYWx1ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKTogVXNlIHNldFZhbHVlIGFuZCBwb3N0UGFn
ZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpzZXRIaWRkZW4pOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNldENhY2hlTW9kZWwpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nlc3NXb3JrUXVldWUgY29u
c3QpOiBVc2UgdG9XSyBhbmQgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZTo6cHJvY2Vzc1dvcmtRdWV1ZSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChX
VFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKTogRGl0dG8uCisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWQpOiBVc2Ugc2V0VmFsdWUgYW5k
IHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9h
ZEhUTUxTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVl
UmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWRp
bmdTY3JpcHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTm9u
TG9hZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpwb3N0TWVzc2FnZSk6IEFkZGVk
LiBPdmVybG9hZHMgZm9yIG1hbnkgdHlwZXMgdG8ga2VlcCBjYWxsZXIgY29kZSBzdHJlYW1saW5l
ZC4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZSk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpwb3N0UGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6cG9zdFN5bmNo
cm9ub3VzUGFnZU1lc3NhZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlLmNwcDoKKyAgICAgICAgKFdUUjo6cHJvcGVydHlWYWx1ZSk6IERlbGV0ZWQuIFVzZSBmdW5j
dGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChXVFI6OnByb3BlcnR5VmFs
dWVEb3VibGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6cHJvcGVydHlWYWx1ZUludCk6IERpdHRv
LgorICAgICAgICAoV1RSOjpudW1lcmljV2luZG93UHJvcGVydHkpOiBSZW5hbWVkIGZyb20gbnVt
ZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUgZm9yIGJyZXZpdHkKKyAgICAgICAgYW5kIGZvciBjb25z
aXN0ZW5jeSB3aXRoIEpTQmFzaWNzLmggZnVuY3Rpb25zLgorICAgICAgICAoV1RSOjpkdW1wUGF0
aCk6IFVzZSBzdHJpbmdQcm9wZXJ0eSwgb2JqZWN0UHJvcGVydHksIGFuZCBtYWtlU3RyaW5nLgor
ICAgICAgICAoV1RSOjpyYW5nZVRvU3RyKTogVXNlIGF1dG8sIG51bWVyaWNQcm9wZXJ0eSwgYW5k
IG1ha2VTdHJpbmcuCisgICAgICAgIChXVFI6Ok5hdmlnYXRpb25UeXBlVG9TdHJpbmcpOiBVc2Ug
dG9XSy4KKyAgICAgICAgKFdUUjo6c3RyaW5nKTogUmVuYW1lZCBmcm9tIHNlY3VyaXR5T3JpZ2lu
VG9TdHIuIFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpmcmFtZVRvU3RyKTogVXNlIGF1
dG8uCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRlclRlc3QpOiBS
ZW1vdmVkIHVubmVlZGVkIGxvY2FsLgorICAgICAgICAoV1RSOjpkdW1wRnJhbWVEZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdCk6IFVzZSBhdXRvLgorICAgICAgICAoV1RSOjpkdW1wUmVx
dWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogRGl0dG8uCisgICAgICAgIChX
VFI6OmR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KTogVXNlIGF1dG8g
YW5kIHRvV0suCisgICAgICAgIChXVFI6OmR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKTogVXBkYXRl
IGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdUUjo6dG9KUyk6IERlbGV0ZWQuIFVzZSBmdW5j
dGlvbnMgZnJvbSBKU0Jhc2ljcy5oIGluc3RlYWQuCisgICAgICAgIChXVFI6Omhhc0RvY3VtZW50
RWxlbWVudCk6IFVzZSBvYmplY3RQcm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKTogVXNlIHNldEdsb2JhbE9iamVjdFByb3Bl
cnR5LAorICAgICAgICBhbmQgcGFzcyBmZXdlciBhcmd1bWVudHMgdG8gbWFrZVdpbmRvd09iamVj
dC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uKTogU3RyZWFtbGluZSBjb2RlIGEgYml0LgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKTogVXNlIG1ha2VTdHJpbmcu
CisgICAgICAgIChXVFI6Omxhc3RGaWxlVVJMUGF0aENvbXBvbmVudCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNiYXJUZXh0KTogRGl0dG8u
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlvbkNh
Y2hlT3JpZ2luUXVvdGEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKTogRGl0dG8uCisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGluZyk6IERpdHRvLgorCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcik6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpw
YWdlKTogQWRkZWQuCisgICAgICAgIChXVFI6Om1haW5GcmFtZSk6IEFkZGVkLgorICAgICAgICAo
V1RSOjptYWluSlNDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRp
c3BsYXkpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6ZGlzcGxheUFuZFRy
YWNrUmVwYWludHMpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6dG9XSyk6IEFkZGVkIG92ZXJs
b2FkIGZvciBkb3VibGUuCisgICAgICAgIChXVFI6OmNyZWF0ZVdLRGljdGlvbmFyeSk6IEFkZGVk
LgorICAgICAgICAoV1RSOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKTog
QWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlV2l0
aFJldHVyblZhbHVlKTogQWRkZWQuCisgICAgICAgIChXVFI6OnBvc3RTeW5jaHJvbm91c1BhZ2VN
ZXNzYWdlUmV0dXJuaW5nQm9vbGVhbik6IEFkZGVkLgorICAgICAgICAoV1RSOjpwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NCk6IEFkZGVkLgorICAgICAgICAoV1RSOjpw
b3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KTogQWRkZWQuCisgICAgICAgIChX
VFI6Om92ZXJyaWRlUHJlZmVyZW5jZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzaG91bGREdW1wUGl4ZWxzIGNvbnN0KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXREdW1wUGl4ZWxzKTog
VXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Ondo
YXRUb0R1bXAgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2
NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2hhdFRvRHVtcCk6IFVzZSBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRXYWl0VW50aWxE
b25lKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNob3VsZFdhaXRVbnRpbERvbmUgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZER1
bXBGcmFtZUxvYWRDYWxsYmFja3MpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyk6IFVzZSBw
b3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6YWRkVXNlclNjcmlwdCk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjphZGRVc2VyU3R5bGVTaGVldCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpleGVjQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpmaW5kT3B0aW9uc0Zyb21BcnJh
eSk6IFVzZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwgYW5kIGNyZWF0ZUpTU3RyaW5nLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpmaW5kU3RyaW5nKTogVXNlIHBhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmZpbmRTdHJpbmdNYXRjaGVzSW5QYWdlKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlcGxhY2VGaW5kTWF0Y2hlc0F0SW5kaWNlcyk6IFVzZSBt
YWluSlNDb250ZXh0IGFuZCBhcnJheUxlbmd0aCBhbmQKKyAgICAgICAgcmVtb3ZlZCB1bm5lZWRl
ZCBjYWxsIHRvIHN0ZDo6cm91bmQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQWxs
RGF0YWJhc2VzKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk6IFVzZSBwYWdlLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3Jp
Z2luKTogRGl0dG8uCisgICAgICAgIChXVFI6OnN0cmluZ0FycmF5VG9KUyk6IFR3ZWFrZWQgY29k
aW5nIHN0eWxlIGEgYml0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFw
cGxpY2F0aW9uQ2FjaGUpOiBVc2UgcGFnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXND
b21tYW5kRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRDYW5P
cGVuV2luZG93cyk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2Uu
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1lZGlhRGV2aWNlc0VuYWJsZWQpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNF
bmFibGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldEN1c3RvbVVzZXJB
Z2VudCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRXZWJBUElTdGF0aXN0aWNzRW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2Uu
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVk
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFdlYkdMMkVuYWJsZWQpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0V3JpdGFibGVTdHJlYW1BUElFbmFi
bGVkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFRyYW5zZm9ybVN0cmVh
bUFQSUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0UmVhZGFi
bGVCeXRlU3RyZWFtQVBJRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0R2VuZXJpY0N1ZUFQSUVuYWJsZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUpOiBVc2UgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNo
b3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0
TmF2aWdhdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRQbHVnaW5z
RW5hYmxlZCk6IFVzZSBvdmVycmlkZVByZWZlcmVuY2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OmlzUGFnZUJveFZpc2libGUpOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIpOiBSZW1vdmVkIGxvY2FsLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRBdWRpb1Jlc3VsdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6IFVzZSBwYWdlLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjptYWtlV2luZG93T2JqZWN0KTogVXNlIHNldEdsb2JhbE9iamVjdFByb3BlcnR5Lgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9yKTogVXNlIHBhZ2UuCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6d29ybGRJREZvcldvcmxkKTogVXNlIHJhbmdlLWJhc2Vk
IGZvciBsb29wLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZCk6IFVzZSBtYWluRnJhbWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFRleHREaXJlY3Rpb24pOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24gY29uc3Qp
OgorICAgICAgICBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVj
dEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbik6CisgICAgICAgIFVzZSBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2spOiBDaGFu
Z2VkIG1hcCB0byBzdG9yZSBvYmplY3RzIGluc3RlYWQgb2YgdmFsdWVzLgorICAgICAgICAoV1RS
OjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKTogU2ltcGxpZnkgc2luY2UgbWFwIGhhcyBvYmplY3Rz
LiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xlYXJUZXN0
UnVubmVyQ2FsbGJhY2tzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldEFs
d2F5c0FjY2VwdENvb2tpZXMpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6c2V0T25seUFjY2VwdEZpcnN0UGFydHlDb29raWVzKTogVXNlIGF1
dG8gYW5kIHRvV0suCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0
RW5hYmxlZCk6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRVc2VyU3R5
bGVTaGVldExvY2F0aW9uKTogVXNlIHBhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24pOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24pOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlz
c2lvbnMpOiBVc2UgbWFpbkpTQ29udGV4dC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2lt
dWxhdGVXZWJOb3RpZmljYXRpb25DbGljayk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbik6IFVzZSBPcHRpb25hbDxkb3VibGU+IGlu
c3RlYWQgb2YgYm9vbC9kb3VibGUKKyAgICAgICAgcGFpcnMsIGxldHRpbmcgdGhlIElETCBiaW5k
aW5ncyBkbyB0aGUgd29yayBmb3IgdXMuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcik6IFJlbW92ZWQgbG9jYWwuCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzRG9pbmdNZWRpYUNhcHR1cmUgY29uc3QpOiBVc2Ug
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbik6
IFJlbW92ZWQgbG9jYWxzLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjp1c2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdp
bik6IERJdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldl
YlZpZXcpOiBVc2UgbWFpbkZyYW1lLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpxdWV1ZUxv
YWQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVldWVMb2FkSFRNTFN0cmlu
Zyk6IFJlbW92ZWQgYSBsb2NhbC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cXVldWVMb2Fk
aW5nU2NyaXB0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnF1ZXVlTm9uTG9h
ZGluZ1NjcmlwdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRSZWplY3Rz
UHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpOgor
ICAgICAgICBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9u
U3BhY2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkTG9nRG93
bmxvYWRDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QXV0
aGVudGljYXRpb25Vc2VybmFtZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQgY29uc3QpOiBVc2UgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRCbG9ja0FsbFBsdWdpbnMpOiBVc2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKTogVXNlIG1haW5KU0NvbnRleHQuCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGlsZXMpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlvbik6IERpdHRvLgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0
ZXJEZWxheSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRz
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNob3VsZERvd25sb2FkVW5k
aXNwbGF5YWJsZU1JTUVUeXBlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKTogVXNlIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjp0ZXJt
aW5hdGVTZXJ2aWNlV29ya2Vycyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0KTogVXNlIHBvc3RQYWdlTWVzc2FnZS4KKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6cnVuVUlTY3JpcHRJbW1lZGlhdGVseSk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpydW5VSVNjcmlwdENhbGxiYWNrKTogVXNlIG1haW5KU0NvbnRl
eHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldEFsbG93ZWRNZW51QWN0aW9ucyk6IFVz
ZSBtYWluSlNDb250ZXh0LCBhcnJheUxlbmd0aCwKKyAgICAgICAgYW5kIHBvc3RQYWdlTWVzc2Fn
ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24pOiBV
c2UgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhclN0YXRp
c3RpY3NEYXRhRm9yRG9tYWluKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAg
IChXVFI6OlRlc3RSdW5uZXI6OmRvZXNTdGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2Up
OiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFu
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRW5hYmxlZCk6IFVzZSBw
b3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRp
c3RpY3NFcGhlbWVyYWwpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdC
b29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRGVidWdNb2Rl
KTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyk6IERpdHRv
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZS4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Up
OiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppc1N0
YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8pOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbik6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNT
dGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKTogVXNlIHBvc3RTeW5jaHJvbm91c1BhZ2VN
ZXNzYWdlUmV0dXJuaW5nQm9vbGVhbi4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aXNTdGF0
aXN0aWNzT25seUluRGF0YWJhc2VPbmNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFVzZUlUUERhdGFiYXNlKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQpOiBV
c2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
KTogVXNlIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4pOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RUbyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdEZyb20pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNh
bGxiYWNrKTogVXNlIG1haW5KU0NvbnRleHQuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKTogVXNlIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NVcGRhdGVD
b29raWVCbG9ja2luZyk6IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c3RhdGlzdGljc1N1Ym1pdFRlbGVtZXRyeSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzSXNSdW5uaW5nVGVzdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNz
RW50cmllcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
UHJ1bmVFbnRyaWVzRG93blRvKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKTogVXNlIHBvc3RNZXNzYWdl
LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyk6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9y
SG9zdCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjppc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UpOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFn
ZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRT
dGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXApOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vzc2lvbik6IFVz
ZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlcik6IFVz
ZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1No
b3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NTZXRUb1NhbWVTaXRlU3Ry
aWN0Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNz
U2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzdGF0aXN0aWNzU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKTog
RGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRy
aWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6Om1ha2VEb21haW5zVmFsdWUpOiBGYWN0b3JlZCBv
dXQuIFVzZSBtYWluSlNDb250ZXh0LgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjYWxsRGlk
UmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJhY2spOiBVc2UgbWFrZURvbWFpbnNW
YWx1ZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6bG9hZGVkU3VicmVzb3VyY2VEb21haW5z
KTogVXNlIHBvc3RNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjYWxsRGlkUmVj
ZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWluc0NhbGxiYWNrKTogVXNlIG1ha2VEb21haW5zVmFs
dWUuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmFkZE1vY2tNZWRpYURldmljZSk6IFVzZSBw
b3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhck1v
Y2tNZWRpYURldmljZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6cmVtb3Zl
TW9ja01lZGlhRGV2aWNlKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlc2V0
TW9ja01lZGlhRGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRN
b2NrQ2FtZXJhT3JpZW50YXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
aXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQpOiBVc2UKKyAgICAgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4uCisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpkaXNjb25uZWN0TW9ja0dhbWVwYWQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWREZXRhaWxzKTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXMpOiBV
c2UgbWFpbkpTQ29udGV4dCwgYXJyYXlMZW5ndGgsIGNyZWF0ZUpTU3RyaW5nLAorICAgICAgICBh
bmQgcG9zdFBhZ2VNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRPcGVuUGFu
ZWxGaWxlc01lZGlhSWNvbik6IFVzZSBtYWluSlNDb250ZXh0IGFuZCBwb3N0UGFnZU1lc3NhZ2Uu
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFscyk6
IFVzZSBwb3N0TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xlYXJET01DYWNo
ZSk6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpjbGVhckRPTUNhY2hlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpoYXNE
T01DYWNoZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4u
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmRvbUNhY2hlU2l6ZSk6IFVzZSBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZVJldHVybmluZ1VJbnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZSk6IFVzZSBwb3N0U3luY2hyb25vdXNQYWdl
TWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Z2V0QXBwbGljYXRpb25NYW5pZmVz
dFRoZW4pOiBVc2UgcG9zdE1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmluamVj
dFVzZXJTY3JpcHQpOiBVc2UgcG9zdFN5bmNocm9ub3VzTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6c2VuZERpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0
aW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFNlcnZpY2VXb3JrZXJG
ZXRjaFRpbWVvdXQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6YWRkVGVzdEtl
eVRvS2V5Y2hhaW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6Y2xlYW5VcEtl
eWNoYWluKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmtleUV4aXN0c0luS2V5
Y2hhaW4pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuLgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxsYmFja0Nh
bGxzQ291bnQpOiBVc2UKKyAgICAgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJ
bnQ2NC4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U2hvdWxkRGlzbWlzc0phdmFTY3Jp
cHRBbGVydHNBc3luY2hyb25vdXNseSk6IFVzZQorICAgICAgICBwb3N0U3luY2hyb25vdXNNZXNz
YWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjphYm9ydE1vZGFsKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OmR1bXBBZENsaWNrQXR0cmlidXRpb24pOiBVc2UgcG9zdFN5
bmNocm9ub3VzUGFnZU1lc3NhZ2UuCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFyQWRD
bGlja0F0dHJpYnV0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmNsZWFy
QWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1l
ckZvclRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0QWRDbGlj
a0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5n
KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldE9mZnNjcmVlbkNhbnZhc0Vu
YWJsZWQpOiBVc2Ugb3ZlcnJpZGVQcmVmZXJlbmNlLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpoYXNBcHBCb3VuZFNlc3Npb24pOiBVc2UgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1
cm5pbmdCb29sZWFuLgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVhckFwcEJvdW5kU2Vz
c2lvbik6IFVzZSBwb3N0U3luY2hyb25vdXNNZXNzYWdlLgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpzZXRBcHBCb3VuZERvbWFpbnMpOiBVc2UgbWFpbkpTQ29udGV4dCwgYXJyYXlMZW5ndGgs
IGNyZWF0ZUpTU3RyaW5nLAorICAgICAgICBhbmQgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6cG9zdE1lc3NhZ2UpOiBBZGRlZC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuIEFsc28g
Y2hhbmdlZAorICAgICAgICBvdmVycmlkZVByZWZlcmVuY2Ugb3QgYSBzdGF0aWMgbWVtYmVyIGZ1
bmN0aW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0
SW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGV4dElucHV0Q29udHJvbGxlcjo6
VGV4dElucHV0Q29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OlRleHRJbnB1dENv
bnRyb2xsZXI6On5UZXh0SW5wdXRDb250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
VGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdCk6IFVzZSBzZXRHbG9iYWxPYmpl
Y3RQcm9wZXJ0eS4KKyAgICAgICAgKFdUUjo6YXJyYXlMZW5ndGgpOiBEZWxldGVkLiBVc2UgdGhl
IG9uZSBmcm9tIEpTQmFzaWNzLmggbm93LgorICAgICAgICAoV1RSOjpjcmVhdGVDb21wb3NpdGlv
bkhpZ2hsaWdodERhdGEpOiBVc2Ugc2V0VmFsdWUuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmg6IFVwZGF0ZWQgZm9yIHRoZSBh
Ym92ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKTogVXNlIGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudElPUy5tbToKKyAgICAgICAgKFdUUjo6Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQu
IFVzZSBjcmVhdGVKU1N0cmluZyBmcm9tIEpTQmFzaWNzLmggbm93LgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKTogVXNl
IGNyZWF0ZUpTU3RyaW5nLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMpOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRGVzY3JpcHRpb25PZkF0dHJp
YnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcyk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uIGNvbnN0KTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1
c2VkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRlIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cyBjb25zdCk6
IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JS
YW5nZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOiBEaXR0by4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6IERpdHRvLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKTog
RGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNP
ZlZpc2libGVDZWxscyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3RlZENoaWxkcmVuIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSBjb25z
dCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVu
dEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRvY3VtZW50VVJJKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzU2VsZWN0YWJsZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQg
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNT
aW5nbGVMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzTXVsdGlMaW5lIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yVGV4dE1hcmtlclJhbmdl
KTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lv
cy9FdmVudFNlbmRlclByb3h5SU9TLm1tOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5
OjpFdmVudFNlbmRlclByb3h5KTogSW5pdGlhbGl6ZSBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4K
KyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6fkV2ZW50U2VuZGVyUHJveHkpOiBEZWxl
dGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNj
ZXNzaWJpbGl0eUNvbW1vbk1hYy5tbToKKyAgICAgICAgKFdUUjo6bWFrZUpTQXJyYXkpOiBSZXR1
cm4gYSBKU09iamVjdFJlZi4gUmVuYW1lZCBmcm9tIG1ha2VBcnJheVJlZkZvckFycmF5LgorICAg
ICAgICAoV1RSOjptYWtlSlNPYmplY3QpOiBSZXR1cm4gYSBKU09iamVjdFJlZi4gUmVuYW1lZCBm
cm9tIG1ha2VPYmplY3RSZWZGb3JEaWN0aW9uYXJ5LgorICAgICAgICAoV1RSOjptYWtlVmFsdWVS
ZWZGb3JWYWx1ZSk6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKyAgICAgICAgKFdUUjo6c2VhcmNo
UHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvclNlYXJjaENyaXRlcmlhKTogVXNlIHRv
V1RGU3RyaW5nCisgICAgICAgIGFuZCBhcnJheUxlbmd0aC4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1t
OgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKTog
VXNlIGNyZWF0ZUpTU3RyaW5nLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKyAgICAgICAgKFdUUjo6
Y3JlYXRlRW1wdHlKU1N0cmluZyk6IERlbGV0ZWQuIFVzZSBjcmVhdGVKU1N0cmluZyBmcm9tIEpT
QmFzaWNzLmggaW5zdGVhZC4KKyAgICAgICAgKFdUUjo6Y29udmVydFZlY3RvclRvT2JqZWN0QXJy
YXkpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjptYWtlSlNBcnJheSk6IFJlbmFtZWQgZnJvbSBj
b252ZXJ0VmVjdG9yVG9PYmplY3RBcnJheS4KKyAgICAgICAgKFdUUjo6c2VsZWN0VGV4dFBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJpYSk6IFVzZSB0b1dURlN0cmluZyBhbmQgYXJyYXlM
ZW5ndGguCisgICAgICAgIChXVFI6OnNlYXJjaFRleHRQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9y
Q3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cm93SGVhZGVycyBjb25zdCk6IFVzZSBtYWtlSlNBcnJheS4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0ZVZhbHVl
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNl
YXJjaFRleHRXaXRoQ3JpdGVyaWEpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlIGNvbnN0KTogVXNlIGNyZWF0ZUpTU3RyaW5n
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5n
KTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50
VVJJKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjppbnNwZWN0
b3JUZXN0U3R1YlVSTCk6IFJlbW92ZSBsb2NhbHMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL1N0cmluZ0Z1bmN0aW9ucy5oOiBBZGRlZCB0b1dLU3RyaW5nIG92ZXJsb2FkIHRoYXQgY29u
dmVydHMgZnJvbQorICAgICAgICBhIEpTVmFsdWVSZWYsIEpTU3RyaW5nUmVmLCBvciBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gYW5kIHRvV0sgb3ZlcmxvYWQgdGhhdCBjb252ZXJ0cworICAgICAg
ICBmcm9tIGEgY29uc3QgY2hhciouCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUp
OiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmdlbmVyYXRlQ29udGV4
dENvbmZpZ3VyYXRpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOiBVc2Ug
c2V0VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVMaXZlRG9jdW1l
bnRzQWZ0ZXJUZXN0KTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjaGVj
a0ZvcldvcmxkTGVha3MpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6Y29udGVudEV4dGVuc2lv
bkpTT05QYXRoKTogVXNlIHRvU1RELgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Y29u
ZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QpOiBVc2UgdG9XSy4KKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVLZXlEb3duTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRs
ZSk6IFVzZSBzdHJpbmdWYWx1ZQorICAgICAgICBhbmQgdWludDY0VmFsdWUuCisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTGl2ZURvY3VtZW50c0xpc3QpOiBVc2UgZGlj
dGlvbmFyeVZhbHVlIGFuZAorICAgICAgICB1aW50NjRWYWx1ZS4KKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKTogVXNlIGRp
Y3Rpb25hcnlWYWx1ZSwKKyAgICAgICAgc3RyaW5nVmFsdWUsIHVpbnQ2NFZhbHVlLCBkb3VibGVW
YWx1ZSwgYm9vbGVhblZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkUmVj
ZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IERpdHRvLgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0QmxvY2tBbGxQbHVnaW5zKTogVXNlIHRvV0suCisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5TdXBwb3J0ZWRNb2RlKTogRGl0
dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlKTogVXNlIGF1dG8uCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
OjpkaWRGaW5pc2hOYXZpZ2F0aW9uKTogUmVtb3ZlZCBsb2NhbC4KKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6IFVzZSBhdXRv
IGFuZCB0b1dURlN0cmluZworICAgICAgICBpbnN0ZWFkIG9mIHRvU1RELgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24pOiBVc2UgT3B0aW9u
YWwgaW5zdGVhZCBvZiBwYWlycworICAgICAgICBvZiBib29sIGFuZCBkb3VibGUuCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpoYW5kbGVDaGVja09mVXNlck1lZGlhUGVybWlzc2lvbkZv
ck9yaWdpbik6IFVzZSB0b1dLLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6ZGVjaWRl
UG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RJZlBvc3NpYmxlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3
b3JrUHJvY2Vzcyk6IFVzZSB0b1dLLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OnBvc3RQYWdlTWVzc2Fn
ZSk6IEFkZGVkLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6VGVzdEluY292YXRpb24p
OiBVc2UgdG9XVEZTdHJpbmcuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpjcmVhdGVU
ZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KTogVXNlIGF1dG8gYW5kIHNldFZhbHVlLgorICAgICAgICAo
V1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKTogVXNlIHBvc3RQYWdlTWVzc2FnZSBhbmQgc2V0
VmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSk6IFVzZSBwb3N0UGFnZU1lc3NhZ2UKKyAgICAgICAgYW5kIHN0cmlu
Z1ZhbHVlLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9u
b3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6IFVzZQorICAgICAgICBkaWN0aW9uYXJ5VmFs
dWUsIGJvb2xlYW5WYWx1ZSwgdmFsdWUsIHN0cmluZ1ZhbHVlLCBkb3VibGVWYWx1ZSwgYW5kCisg
ICAgICAgIG9wdGlvbmFsRG91YmxlVmFsdWUuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9u
Ojp1aVNjcmlwdERpZENvbXBsZXRlKTogVXNlIHBvc3RQYWdlTWVzc2FnZSBhbmQgc2V0VmFsdWUu
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRCZWdpblN3aXBlKTogVXNlIHBvc3RQ
YWdlTWVzc2FnZS4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OndpbGxFbmRTd2lwZSk6
IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkRW5kU3dpcGUpOiBEaXR0
by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlbW92ZVN3aXBlU25hcHNob3Qp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246Om5vdGlmeURvd25sb2FkRG9u
ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0
aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVz
dEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFNob3VsZERvd25n
cmFkZVJlZmVycmVyKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRT
ZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRl
c3RJbnZvY2F0aW9uOjpkaWRTZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSk6IERp
dHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0VG9TYW1lU2l0ZVN0cmlj
dENvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldEZp
cnN0UGFydHlIb3N0Q05BTUVEb21haW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OmRpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbik6IERpdHRvLgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUpOiBE
aXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldEJsb2NrQ29va2llc0Zv
ckhvc3QpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFN0YXRp
c3RpY3NEZWJ1Z01vZGUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKTogRGl0dG8uCisgICAgICAgIChXVFI6
OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRMYXN0U2Vlbik6IERpdHRvLgorICAgICAgICAoV1RSOjpU
ZXN0SW52b2NhdGlvbjo6ZGlkTWVyZ2VTdGF0aXN0aWMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
VGVzdEludm9jYXRpb246OmRpZFNldEV4cGlyZWRTdGF0aXN0aWMpOiBEaXR0by4KKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldFByZXZhbGVudFJlc291cmNlKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Up
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldEhhc0hhZFVzZXJJ
bnRlcmFjdGlvbik6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVj
ZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKTogRGl0dG8uCisgICAgICAgIChXVFI6OlRlc3RJ
bnZvY2F0aW9uOjpkaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zKTogRGl0dG8uCisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlh
bHMpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFNldEFwcEJvdW5k
RG9tYWlucyk6IERpdHRvLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6cGVyZm9ybUN1
c3RvbU1lbnVBY3Rpb24pOiBEaXR0by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2Vi
S2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGRlZCBK
U0Jhc2ljcy5oIHRvIERpY3Rpb25hcnlGdW5jdGlvbnMuaCB0byBhcHByb3ByaWF0ZSB0YXJnZXRz
LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdUUjo6U2NyaXB0SXRlbTo6U2NyaXB0SXRlbSk6IFVzZSB0b1dLLgorICAgICAgICAo
V1RSOjpXb3JrUXVldWVNYW5hZ2VyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKTogRGl0dG8uCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLmg6
IE1ha2UgbW9zdCBmdW5jdGlvbnMgcHJpdmF0ZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW06CisgICAgICAgIChXVFI6OlVJU2Ny
aXB0Q29udHJvbGxlckNvY29hOjpvdmVycmlkZVByZWZlcmVuY2UpOiBVc2UgdG9XVEZTdHJpbmcu
CisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1Mu
aDogTWFya2VkIHRoZSBjbGFzcyBmaW5hbCBhbmQgbWFkZQorICAgICAgICBtb3N0IGZ1bmN0aW9u
cyBwcml2YXRlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250
cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjphcnJheUxlbmd0aCk6IERlbGV0ZWQuIFVzZSB0
aGUgb25lIGluIEpTQmFzaWNzLmguCisgICAgICAgIChXVFI6OnBhcnNlTW9kaWZpZXJBcnJheSk6
IFVzZSB0aGUgbmV3IHRvV1RGU3RyaW5nIG92ZXJsb2FkLgorICAgICAgICAoV1RSOjpVSVNjcmlw
dENvbnRyb2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJlS2V5Ym9hcmQpOiBEaXR0
by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL0V2ZW50U2VuZGVyUHJveHkubW06
CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkpOiBJbml0
aWFsaXplIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5OjprZXlEb3duKTogVXNlIHRvV1RGU3RyaW5nLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmg6IE1hcmtlZCB0aGUgY2xhc3MgZmlu
YWwgYW5kIG1hZGUKKyAgICAgICAgbW9zdCBmdW5jdGlvbnMgcHJpdmF0ZS4KKworMjAyMC0wOS0y
NyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdGVz
dCBydW5uZXIgY29kZSB0byBjdXQgZG93biBvbiBjb3B5L3Bhc3RlIGNvZGUgYW5kIGxvbmctd2lu
ZGVkIHJlcGV0aXRpdmUgaWRpb21zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTcwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKwogMjAyMC0wOS0yOCAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgTm90aWZ5IGlnYWxpYSB0ZWFtIGFib3V0IHByZS1leGlzdGluZyB0ZXN0IGZhaWx1
cmVzIGFuZCBidWlsZCBmYWlsdXJlcyBmb3IgV1BFIGFuZCBHVEsgcXVldWVzCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKaW5kZXggMWEwYzE2
NzA2YjJhZTQyNjBlMzJkMjkwNDQ5YmYyZDY1Y2ZhM2RmYS4uOWUyNDBlNTU5Y2E0NTIzMzc0Nzk4
NGE2YmE5MzUxNTRhYWNjZDdkZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0Jhc2ljcy5oIgogCiAvLyBTdGF0aWMgVmFsdWUgR2V0
dGVycwogCkBAIC00NywxNSArNDgsOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRSb290RWxlbWVu
dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0aGlzTwogCiAvLyBP
YmplY3QgQ3JlYXRpb24KIAotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bWFrZVdpbmRv
d09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjptYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8gYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJTdHIgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiKSk7Ci0gICAgCi0gICAgSlNDbGFzc1JlZiBjbGFzc1Jl
ZiA9IGdldEpTQ2xhc3MoKTsKLSAgICBKU1ZhbHVlUmVmIGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
T2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0Ns
YXNzUmVsZWFzZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQs
IHdpbmRvd09iamVjdCwgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJTdHIuZ2V0KCksIGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyT2JqZWN0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAgIFdUUjo6c2V0R2xv
YmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgSlNP
YmplY3RNYWtlKGNvbnRleHQsIGNyZWF0ZUpTQ2xhc3MoKS5nZXQoKSwgdGhpcykpOwogfQogCiBz
dGF0aWMgSlNWYWx1ZVJlZiBsb2dGb2N1c0V2ZW50c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgs
IEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QsIGNvbnN0IEpTVmFs
dWVSZWZbXSwgSlNWYWx1ZVJlZiopCkBAIC0xNTIsOSArMTQ3LDkgQEAgc3RhdGljIEpTVmFsdWVS
ZWYgZ2V0UGxhdGZvcm1OYW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIHRoaXMKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgcGxhdGZvcm1O
YW1lLmdldCgpKTsKIH0KIAotSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0
SlNDbGFzcygpCitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6Y3JlYXRlSlNDbGFzcygpCiB7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGlj
RnVuY3Rpb25zW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1N0YXRpY0Z1bmN0aW9uIGZ1
bmN0aW9uc1tdID0gewogICAgICAgICB7ICJsb2dGb2N1c0V2ZW50cyIsIGxvZ0ZvY3VzRXZlbnRz
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAibG9nVmFsdWVDaGFuZ2VFdmVudHMiLCBsb2dW
YWx1ZUNoYW5nZUV2ZW50c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImxvZ1Njcm9sbGlu
Z1N0YXJ0RXZlbnRzIiwgbG9nU2Nyb2xsaW5nU3RhcnRFdmVudHNDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApA
QCAtMTY2LDIxICsxNjEsMTggQEAgSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
Z2V0SlNDbGFzcygpCiAgICAgICAgIHsgImVuYWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eSIsIGVu
YWJsZUVuaGFuY2VkQWNjZXNzaWJpbGl0eUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwg
MCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1td
ID0geworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAg
ICAgICAgeyAiZm9jdXNlZEVsZW1lbnQiLCBnZXRGb2N1c2VkRWxlbWVudENhbGxiYWNrLCAwLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgInJvb3RFbGVtZW50IiwgZ2V0Um9vdEVsZW1lbnRDYWxsYmFjaywg
MCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJlbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkIiwgZ2V0
RW5oYW5jZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgInBsYXRmb3JtTmFtZSIsIGdldFBsYXRmb3JtTmFtZUNhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgMCwgMCwgMCwgMCB9CiAgICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5p
dGlvbiBjbGFzc0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9u
ZSwgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgMCwgc3RhdGljVmFsdWVzLCBzdGF0aWNGdW5j
dGlvbnMsCisgICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSB7
CisgICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkFjY2Vzc2liaWxpdHlDb250cm9s
bGVyIiwgMCwgdmFsdWVzLCBmdW5jdGlvbnMsCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVm
aW5pdGlvbik7CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pKTsK
IH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0
ZSgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaApp
bmRleCAxZGM3ZDNiNTYzYTE1NGY0Y2U5YmY3YTMwMzBjOGM1YTc2OTdmMzlhLi44YTI4N2M0OGIx
ZGY1MzZiNDc1YjYxODQxN2MyNjEzNWZiMzg2MTI2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBw
dWJsaWM6CiAgICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKICAgICB+QWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
OworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYpOwogCiAgICAgLy8gQ29u
dHJvbGxlciBNZXRob2RzIC0gcGxhdGZvcm0taW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zCiAg
ICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCByb290RWxlbWVudCgpOwpAQCAtODMsNyArODMsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRK
U0NsYXNzKCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpTQ2xh
c3MoKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBIV0lORVZFTlRIT09LIG1fZm9jdXNFdmVu
dEhvb2sgeyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuY3BwCmluZGV4IDBlNWE1MGY2YjlkM2NlNWNhNzdiYTQ0ODY4N2MwMDljYmIx
NzVkMjAuLjhlZjg1ZWVkZjA4NGQ2NzYyMjcxY2FmMmM4ZjQ0YWI4NTQ3OTI2NzEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCkBAIC0yMDYs
NyArMjA2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgdWlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVk
aWNhdGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50KiBzdGFydEVsZW1lbnQgPSBudWxscHRyOwogICAgIGJvb2wgaXNEaXJlY3Rpb25OZXh0
ID0gdHJ1ZTsKICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtleSA9IG51bGxwdHI7Ci0gICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IHNlYXJjaFRleHQgPSBudWxscHRyOworICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBzZWFyY2hUZXh0OwogICAgIGJvb2wgdmlzaWJsZU9ubHkgPSBmYWxzZTsK
ICAgICBib29sIGltbWVkaWF0ZURlc2NlbmRhbnRzT25seSA9IGZhbHNlOwogICAgIGlmIChhcmd1
bWVudENvdW50ID49IDUgJiYgYXJndW1lbnRDb3VudCA8PSA2KSB7CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRyZWUucG0g
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yRHVtcFJlbmRlclRy
ZWUucG0KaW5kZXggZWNlNTFlYTM5YTUxNjgzNTRiZDU2OTQ2MzU5MDg2ZDkwMjJlYTE5ZC4uMTRj
NjI3MGY4MjMxZGMwZjI2YTA1ZTY5NWRhODQ3YmRmOGU0OGM4ZSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvQmluZGluZ3MvQ29kZUdlbmVyYXRvckR1bXBSZW5kZXJUcmVlLnBtCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JEdW1wUmVuZGVy
VHJlZS5wbQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MzEsMTAgKzQzMSwxMCBAQCBzdWIgX3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9yCiB7CiAgICAgbXkg
KCRzZWxmLCAkdHlwZSwgJGFyZ3VtZW50TmFtZSkgPSBAXzsKIAotICAgIHJldHVybiAiSlNWYWx1
ZVRvTnVsbGFibGVCb29sZWFuKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIiBpZiAkdHlwZS0+bmFt
ZSBlcSAiYm9vbGVhbiIgJiYgJHR5cGUtPmlzTnVsbGFibGU7CisgICAgcmV0dXJuICJ0b09wdGlv
bmFsQm9vbChjb250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xl
YW4iICYmICR0eXBlLT5pc051bGxhYmxlOwogICAgIHJldHVybiAiSlNWYWx1ZVRvQm9vbGVhbihj
b250ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAg
IHJldHVybiAiJGFyZ3VtZW50TmFtZSIgaWYgJHR5cGUtPm5hbWUgZXEgIm9iamVjdCI7Ci0gICAg
cmV0dXJuICJhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsICRhcmd1bWVudE5hbWUs
IG51bGxwdHIpKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHR5cGUp
OworICAgIHJldHVybiAiY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKICAgICByZXR1cm4g
IkpTVmFsdWVUb051bWJlcihjb250ZXh0LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSIgaWYgJCRz
ZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAi
dG8iIC4gX2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lKCR0eXBlKSAuICIoY29udGV4dCwgJGFyZ3Vt
ZW50TmFtZSkiOwogfQpAQCAtNDcyLDExICs0NzIsMTEgQEAgc3ViIF9yZXR1cm5FeHByZXNzaW9u
CiAgICAgbXkgKCRzZWxmLCAkcmV0dXJuVHlwZSwgJGV4cHJlc3Npb24pID0gQF87CiAKICAgICBy
ZXR1cm4gIkpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpIiBpZiAkcmV0dXJuVHlwZS0+bmFt
ZSBlcSAidW5kZWZpbmVkIjsKLSAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbk9yTnVsbChj
b250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4i
ICYmICRyZXR1cm5UeXBlLT5pc051bGxhYmxlOworICAgIHJldHVybiAibWFrZVZhbHVlKGNvbnRl
eHQsICR7ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYg
JHJldHVyblR5cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlTWFrZUJvb2xlYW4o
Y29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFu
IjsKICAgICByZXR1cm4gIiR7ZXhwcmVzc2lvbn0iIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJv
YmplY3QiOwogICAgIHJldHVybiAiSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgJHtleHByZXNz
aW9ufSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNQcmltaXRpdmVUeXBlKCRyZXR1cm5U
eXBlKTsKLSAgICByZXR1cm4gIkpTVmFsdWVNYWtlU3RyaW5nT3JOdWxsKGNvbnRleHQsICR7ZXhw
cmVzc2lvbn0uZ2V0KCkpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgk
cmV0dXJuVHlwZSk7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9u
fS5nZXQoKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5U
eXBlKTsKICAgICByZXR1cm4gInRvSlMoY29udGV4dCwgV1RGOjpnZXRQdHIoJHtleHByZXNzaW9u
fSkpIjsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVy
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKaW5kZXggNGEzN2Jm
M2ExM2RhNGNhZWVhNDBhMGNmOGE3MDlmZTU4ZDM0ZWE0Yy4uYWVmN2VjOGE1MDViZmM1MWE4N2Uz
ZDJmOWUxNjc1MzlkZWUyOWRjNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvR0ND
b250cm9sbGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5LDcyICsyOSw0OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDQ29udHJv
bGxlci5oIgogCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotCi1HQ0NvbnRyb2xsZXI6OkdDQ29u
dHJvbGxlcigpCi17Ci19Ci0KLUdDQ29udHJvbGxlcjo6fkdDQ29udHJvbGxlcigpCi17Ci19Cisj
aW5jbHVkZSAiSlNCYXNpY3MuaCIKIAogLy8gU3RhdGljIEZ1bmN0aW9ucwogCiBzdGF0aWMgSlNW
YWx1ZVJlZiBjb2xsZWN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewot
ICAgIEdDQ29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+Y29sbGVj
dCgpOworICAgIGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0NDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLmNvbGxlY3Qo
KTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRp
YyBKU1ZhbHVlUmVmIGNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZENhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBib29sIHdhaXRVbnRpbERvbmUgPSBmYWxzZTsKLSAg
ICBpZiAoYXJndW1lbnRDb3VudCA+IDApCi0gICAgICAgIHdhaXRVbnRpbERvbmUgPSBKU1ZhbHVl
VG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7Ci0KLSAgICBHQ0NvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxHQ0NvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCh3
YWl0VW50aWxEb25lKTsKLQorICAgIGF1dG8mIGNvbnRyb2xsZXIgPSAqc3RhdGljX2Nhc3Q8R0ND
b250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBib29sIHdh
aXRVbnRpbERvbmUgPSBhcmd1bWVudENvdW50ID4gMCAmJiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRl
eHQsIGFyZ3VtZW50c1swXSk7CisgICAgY29udHJvbGxlci5jb2xsZWN0T25BbHRlcm5hdGVUaHJl
YWQod2FpdFVudGlsRG9uZSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRKU09iamVjdENvdW50Q2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEdDQ29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PEdDQ29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2Jq
ZWN0KSk7Ci0gICAgc2l6ZV90IGpzT2JqZWN0Q291bnQgPSBjb250cm9sbGVyLT5nZXRKU09iamVj
dENvdW50KCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwganNPYmpl
Y3RDb3VudCk7CisgICAgYXV0byYgY29udHJvbGxlciA9ICpzdGF0aWNfY2FzdDxHQ0NvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVl
TWFrZU51bWJlcihjb250ZXh0LCBjb250cm9sbGVyLmdldEpTT2JqZWN0Q291bnQoKSk7CiB9CiAK
IC8vIE9iamVjdCBDcmVhdGlvbgogCi12b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVj
dChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0Nv
bnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBhdXRvIGdjQ29udHJvbGxlclN0ciA9IGFkb3B0KEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHQ0NvbnRyb2xsZXIiKSk7Ci0KLSAgICBKU0Ns
YXNzUmVmIGNsYXNzUmVmID0gZ2V0SlNDbGFzcygpOwotICAgIEpTVmFsdWVSZWYgZ2NDb250cm9s
bGVyT2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBK
U0NsYXNzUmVsZWFzZShjbGFzc1JlZik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRl
eHQsIHdpbmRvd09iamVjdCwgZ2NDb250cm9sbGVyU3RyLmdldCgpLCBnY0NvbnRyb2xsZXJPYmpl
Y3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShj
b250ZXh0LCAiR0NDb250cm9sbGVyIiwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGNyZWF0ZUpTQ2xh
c3MoKS5nZXQoKSwgdGhpcykpOwogfQogCi1KU0NsYXNzUmVmIEdDQ29udHJvbGxlcjo6Z2V0SlND
bGFzcygpCitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZUpTQ2xh
c3MoKQogewotICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNTdGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsK
ICAgICAgICAgeyAiY29sbGVjdCIsIGNvbGxlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQiLCBjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAogICAgICAgICB7ICJnZXRKU09iamVjdENvdW50IiwgZ2V0SlNPYmplY3RD
b3VudENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKLQotICAg
IHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAs
IGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIkdDQ29udHJvbGxlciIsIDAsIDAsIHN0YXRpY0Z1bmN0
aW9ucywKKyAgICBzdGF0aWMgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IHsK
KyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiR0NDb250cm9sbGVyIiwgMCwgMCwg
ZnVuY3Rpb25zLAogICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiAgICAg
fTsKLQotICAgIHJldHVybiBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJl
dHVybiBhZG9wdChKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKSk7CiB9CmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0dDQ29udHJvbGxlci5oCmluZGV4IDY0MjQzODRkZjUzMGU4YzFmZGFlOGZiNjEzMTFiZjBhZGM0
YTZhOGYuLjM3YWE0NmE3NzRjZTNlNzBiODc4OWQ0NDNmMWU0MTgxNGFjNThmNWMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oCkBAIC0yNiwxOSArMjYsMTUgQEAKICAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBHQ0NvbnRyb2xsZXJfaAotI2RlZmluZSBHQ0NvbnRyb2xsZXJfaAor
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KIAogY2xhc3MgR0NDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBHQ0NvbnRyb2xsZXIoKTsKLSAgICB+R0NDb250cm9sbGVy
KCk7Ci0KLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICB2b2lk
IG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIC8vIENvbnRyb2xsZXIgTWV0
aG9kcyAtIHBsYXRmcm9tIGluZGVwZW5kYW50IGltcGxlbWVudGF0aW9ucwogICAgIHZvaWQgY29s
bGVjdCgpIGNvbnN0OwpAQCAtNDYsNyArNDIsNSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGdldEpT
T2JqZWN0Q291bnQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBn
ZXRKU0NsYXNzKCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0ZUpT
Q2xhc3MoKTsKIH07Ci0KLSNlbmRpZiAvLyBHQ0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0UnVubmVyLmNwcAppbmRleCA1ZTUzNWFmMWRlYWQ4NDJkMmVmNGY1Zjc2NjAyYzgzYTk1MGI3
NjUyLi4zN2Y2OTFjYjc5NmI1NjM5MjYyODA0ZWUzZjQwMWNhYmRhZThmMGUxIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9UZXN0UnVubmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKIAorI2luY2x1ZGUgIkpTQmFzaWNzLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAj
aW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgpAQCAtMzgsMTAgKzM5LDcgQEAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
QXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDVGVzdFJ1bm5l
clV0aWxzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U1JldGFpblB0ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVk1JbmxpbmVzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Mb2dJbml0aWFsaXphdGlvbi5oPgpAQCAtNDg5LDcgKzQ4Nyw2IEBAIHN0YXRpYyBKU1Zh
bHVlUmVmIGRpc3BsYXlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRz
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIC8vIEhhcyBtYWMg
JiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCiAgICAgVGVzdFJ1bm5lciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwog
ICAgIGNvbnRyb2xsZXItPmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCk7CiAKQEAgLTQ5OCwxMiAr
NDk1LDEwIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGRpc3BsYXlBbmRUcmFja1JlcGFpbnRzQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGVu
Y29kZUhvc3ROYW1lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAg
IC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8g
bmFtZSA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBl
eGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdU
Ujo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5u
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKICAgICBhdXRvIGVuY29kZWRIb3N0TmFtZSA9IGNvbnRyb2xsZXIt
PmNvcHlFbmNvZGVkSG9zdE5hbWUobmFtZS5nZXQoKSk7CkBAIC01MTIsMjIgKzUwNywxMiBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBleGVjQ29tbWFuZENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICAvLyBIYXMgTWFjICYg
V2luZG93cyBpbXBsZW1lbnRhdGlvbnMuCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICBhdXRvIG5h
bWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLQorICAgIGF1dG8gbmFtZSA9IFdU
Ujo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKICAgICAvLyBJZ25vcmlu
ZyB0aGUgc2Vjb25kIHBhcmFtZXRlciAodXNlckludGVyZmFjZSksIGFzIHRoaXMgY29tbWFuZCBl
bXVsYXRlcyBhIG1hbnVhbCBhY3Rpb24uCi0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
dmFsdWU7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMykgewotICAgICAgICB2YWx1ZSA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24p
KTsKLSAgICAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmFs
dWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOwotCisgICAgYXV0
byB2YWx1ZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRDb3VudCA+IDIg
PyBhcmd1bWVudHNbMl0gOiBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIg
PSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKICAgICBjb250cm9sbGVyLT5leGVjQ29tbWFuZChuYW1lLmdldCgpLCB2YWx1ZS5nZXQoKSk7
CkBAIC01NDEsMTEgKzUyNiw4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGZpbmRTdHJpbmdDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sCiAgICAgaWYgKGFy
Z3VtZW50Q291bnQgPCAyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiAKLSAgICBhdXRvIHRhcmdldCA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24p
OwotCi0gICAgSlNPYmplY3RSZWYgb3B0aW9ucyA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBh
cmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBh
dXRvIHRhcmdldCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsK
KyAgICBhdXRvIG9wdGlvbnMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFd
LCBudWxscHRyKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxU
ZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGNvbnRyb2xsZXItPmZpbmRTdHJpbmcoY29udGV4
dCwgdGFyZ2V0LmdldCgpLCBvcHRpb25zKSk7CkBAIC01NjYsOCArNTQ4LDcgQEAgc3RhdGljIEpT
VmFsdWVSZWYgaXNDb21tYW5kRW5hYmxlZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW4KICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gbmFtZSA9IGFkb3B0
KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsK
LSAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGF1dG8gbmFtZSA9IFdUUjo6Y3JlYXRlSlNT
dHJpbmcoY29udGV4dCwgYXJndW1lbnRzWzBdKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKIApAQCAtNTc5LDEwICs1NjAsOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBvdmVycmlkZVBy
ZWZlcmVuY2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZgogICAg
IGlmIChhcmd1bWVudENvdW50IDwgMikKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwogCi0gICAgYXV0byBrZXkgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCEqZXhjZXB0
aW9uKTsKLSAgICBhdXRvIHZhbHVlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Cisg
ICAgYXV0byBrZXkgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7
CisgICAgYXV0byB2YWx1ZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4dCwgYXJndW1lbnRz
WzFdKTsKIAogICAgIC8vIFNob3VsZCB1c2UgYDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5h
YmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+YCBpbnN0ZWFkLgogICAgIFJFTEVBU0VfQVNT
RVJUKCFKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleS5nZXQoKSwgIldlYktpdFVzZXNC
YWNrRm9yd2FyZENhY2hlUHJlZmVyZW5jZUtleSIpKTsKQEAgLTY2MiwxNSArNjQxLDEwIEBAIHN0
YXRpYyBKU1ZhbHVlUmVmIHF1ZXVlTG9hZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotICAgIGF1dG8gdXJsID0g
YWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bikpOworICAgIGF1dG8gdXJsID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVu
dHNbMF0pOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gdGFyZ2V0OwotICAgIGlmIChhcmd1bWVudENvdW50ID49IDIpIHsKLSAgICAgICAg
dGFyZ2V0ID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0s
IGV4Y2VwdGlvbikpOwotICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIH0gZWxzZQot
ICAgICAgICB0YXJnZXQgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikp
OworICAgIGF1dG8gdGFyZ2V0ID0gV1RSOjpjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBhcmd1bWVu
dENvdW50ID4gMSA/IGFyZ3VtZW50c1sxXSA6IG51bGxwdHIpOwogCiAgICAgVGVzdFJ1bm5lciog
Y29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwogICAgIGNvbnRyb2xsZXItPnF1ZXVlTG9hZCh1cmwuZ2V0KCksIHRhcmdl
dC5nZXQoKSk7CkBAIC02OTIsNyArNjY2LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgcXVldWVMb2Fk
SFRNTFN0cmluZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZgogICAg
ICAgICBiYXNlVVJMID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOwogICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwogICAgIH0g
ZWxzZQotICAgICAgICBiYXNlVVJMID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIiIpKTsKKyAgICAgICAgYmFzZVVSTCA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIAogICAg
IFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKIApAQCAtMjA0NSwzNCArMjAxOSwyNCBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBydW5VSVNjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiwgSlNPYmplYwogCiBzdGF0aWMgdm9pZCB0ZXN0UnVubmVyT2JqZWN0RmluYWxp
emUoSlNPYmplY3RSZWYgb2JqZWN0KQogewotICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAg
IGNvbnRyb2xsZXItPmRlcmVmKCk7CisgICAgc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZShvYmplY3QpKS0+ZGVyZWYoKTsKIH0KIAogLy8gT2JqZWN0IENyZWF0aW9u
CiAKLXZvaWQgVGVzdFJ1bm5lcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lk
IFRlc3RSdW5uZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0g
ICAgYXV0byB0ZXN0UnVubmVyU3RyID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoInRlc3RSdW5uZXIiKSk7CiAgICAgcmVmKCk7Ci0KLSAgICBKU0NsYXNzUmVmIGNsYXNzUmVm
ID0gZ2V0SlNDbGFzcygpOwotICAgIEpTVmFsdWVSZWYgbGF5b3V0VGVzdENvbnRvbGxlck9iamVj
dCA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1Jl
bGVhc2UoY2xhc3NSZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5k
b3dPYmplY3QsIHRlc3RSdW5uZXJTdHIuZ2V0KCksIGxheW91dFRlc3RDb250b2xsZXJPYmplY3Qs
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUsIGV4Y2VwdGlvbik7CisgICAgV1RSOjpzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShjb250
ZXh0LCAidGVzdFJ1bm5lciIsIEpTT2JqZWN0TWFrZShjb250ZXh0LCBjcmVhdGVKU0NsYXNzKCku
Z2V0KCksIHRoaXMpKTsKIH0KIAotSlNDbGFzc1JlZiBUZXN0UnVubmVyOjpnZXRKU0NsYXNzKCkK
K0pTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IFRlc3RSdW5uZXI6OmNyZWF0ZUpTQ2xhc3MoKQogewot
ICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZXMgPSBUZXN0UnVubmVyOjpzdGF0
aWNWYWx1ZXMoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25z
ID0gVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCk7Ci0gICAgc3RhdGljIEpTQ2xhc3NEZWZp
bml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVO
b25lLCAiVGVzdFJ1bm5lciIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAorICAg
IHN0YXRpYyBjb25zdCBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0geworICAgICAgICAw
LCBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsICJUZXN0UnVubmVyIiwgMCwgc3RhdGljVmFsdWVzKCks
IHN0YXRpY0Z1bmN0aW9ucygpLAogICAgICAgICAwLCB0ZXN0UnVubmVyT2JqZWN0RmluYWxpemUs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3ND
cmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUo
JmRlZmluaXRpb24pKTsKIH0KIAogLy8gQ29uc3RhbnRzCkBAIC0yMTA3LDkgKzIwNzEsOSBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBnZXRSRU5ERVJfVFJFRV9TSE9XX0xBWUVSX0ZSQUdNRU5UUyhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYgogICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250
ZXh0LCAzMik7CiB9CiAKLUpTU3RhdGljVmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygp
Citjb25zdCBKU1N0YXRpY1ZhbHVlKiBUZXN0UnVubmVyOjpzdGF0aWNWYWx1ZXMoKQogewotICAg
IHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAgIHN0YXRpYyBjb25z
dGV4cHIgSlNTdGF0aWNWYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAgeyAiZGlkQ2FuY2VsQ2xp
ZW50UmVkaXJlY3QiLCBnZXREaWRDYW5jZWxDbGllbnRSZWRpcmVjdCwgMCwga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJ0aW1lb3V0IiwgZ2V0VGltZW91dENhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgImdsb2JhbEZsYWciLCBnZXRHbG9iYWxGbGFnQ2FsbGJhY2ssIHNldEdsb2JhbEZsYWdDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCkBAIC0yMTI3LDEyICsyMDkxLDEyIEBA
IEpTU3RhdGljVmFsdWUqIFRlc3RSdW5uZXI6OnN0YXRpY1ZhbHVlcygpCiAgICAgICAgIHsgIlJF
TkRFUl9UUkVFX1NIT1dfTEFZRVJfRlJBR01FTlRTIiwgZ2V0UkVOREVSX1RSRUVfU0hPV19MQVlF
Ul9GUkFHTUVOVFMsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAwLCAwLCAwLCAwIH0KICAgICB9Owot
ICAgIHJldHVybiBzdGF0aWNWYWx1ZXM7CisgICAgcmV0dXJuIHZhbHVlczsKIH0KIAotSlNTdGF0
aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKK2NvbnN0IEpTU3RhdGlj
RnVuY3Rpb24qIFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiB7Ci0gICAgc3RhdGljIEpT
U3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBKU1N0YXRpY0Z1bmN0aW9uIGZ1bmN0aW9uc1tdID0gewogICAgICAgICB7ICJhYm9ydE1vZGFs
IiwgYWJvcnRNb2RhbENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFkZERpc2FsbG93ZWRV
UkwiLCBhZGREaXNhbGxvd2VkVVJMQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkVVJM
VG9SZWRpcmVjdCIsIGFkZFVSTFRvUmVkaXJlY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtMjI5Nyw3
ICsyMjYxLDcgQEAgSlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25z
KCkKICAgICAgICAgeyAwLCAwLCAwIH0KICAgICB9OwogCi0gICAgcmV0dXJuIHN0YXRpY0Z1bmN0
aW9uczsKKyAgICByZXR1cm4gZnVuY3Rpb25zOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVl
TG9hZEhUTUxTdHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCkK
QEAgLTIzNDIsMTQgKzIzMDYsMTEgQEAgdm9pZCBUZXN0UnVubmVyOjppZ25vcmVMZWdhY3lXZWJO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQogCiB2b2lkIFRlc3RSdW5uZXI6OndhaXRU
b0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKQogewotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAi
RkFJTDogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iOwot
ICAgIGZwcmludGYodGVzdFJlc3VsdCwgIiVzIiwgbWVzc2FnZSk7CisgICAgZnB1dHMoIkZBSUw6
IFRpbWVkIG91dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIiwgdGVzdFJl
c3VsdCk7CiAKLSAgICBhdXRvIGFjY3VtdWxhdGVkTG9ncyA9IGdldEFuZFJlc2V0QWNjdW11bGF0
ZWRMb2dzKCk7Ci0gICAgaWYgKCFhY2N1bXVsYXRlZExvZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46
XG4iOwotICAgICAgICBmcHJpbnRmKHRlc3RSZXN1bHQsICIlcyVzXG4iLCBtZXNzYWdlLCBhY2N1
bXVsYXRlZExvZ3MudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQorICAgIGF1dG8gbG9ncyA9IGdldEFu
ZFJlc2V0QWNjdW11bGF0ZWRMb2dzKCk7CisgICAgaWYgKCFsb2dzLmlzRW1wdHkoKSkKKyAgICAg
ICAgZnByaW50Zih0ZXN0UmVzdWx0LCAiTG9ncyBhY2N1bXVsYXRlZCBkdXJpbmcgdGVzdCBydW46
XG4lc1xuIiwgbG9ncy51dGY4KCkuZGF0YSgpKTsKIAogICAgIG5vdGlmeURvbmUoKTsKIH0KQEAg
LTI0MDMsMjQgKzIzNjQsMjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRBY2N1bW11bGF0ZUxvZ3NG
b3JDaGFubmVsKEpTU3RyaW5nUmVmIGNoYW5uZWwpCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpz
ZXRMb2dDaGFubmVsVG9BY2N1bXVsYXRlKHsgYnVmZmVyLmdldCgpIH0pOwogfQogCi10eXBlZGVm
IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVJlZj4gQ2FsbGJhY2tNYXA7Cit1c2luZyBD
YWxsYmFja01hcCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgSlNPYmplY3RSZWY+Owogc3RhdGlj
IENhbGxiYWNrTWFwJiBjYWxsYmFja01hcCgpCiB7CiAgICAgc3RhdGljIENhbGxiYWNrTWFwJiBt
YXAgPSAqbmV3IENhbGxiYWNrTWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKLXZvaWQgVGVzdFJ1
bm5lcjo6Y2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIEpTVmFsdWVSZWYg
Y2FsbGJhY2spCit2b2lkIFRlc3RSdW5uZXI6OmNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2ln
bmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxiYWNrVmFsdWUpCiB7Ci0gICAgaWYgKCFjYWxsYmFj
aykKKyAgICBhdXRvIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKKyAgICBpZiAoIWNh
bGxiYWNrVmFsdWUgfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBjYWxsYmFja1ZhbHVlKSkK
ICAgICAgICAgcmV0dXJuOworICAgIGF1dG8gY2FsbGJhY2sgPSAoSlNPYmplY3RSZWYpY2FsbGJh
Y2tWYWx1ZTsKIAogICAgIGlmIChjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkgewotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQgVGVz
dFJ1bm5lciBjYWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICVkKVxuIiwgaW5kZXgpOwor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZBSUw6IFRyaWVkIHRvIGluc3RhbGwgYSBzZWNvbmQg
VGVzdFJ1bm5lciBjYWxsYmFjayBmb3IgdGhlIHNhbWUgZXZlbnQgKGlkICV1KVxuIiwgaW5kZXgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBt
YWluRnJhbWVKU0NvbnRleHQoKTsKICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBjYWxsYmFj
ayk7CiAgICAgY2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNrKTsKIH0KQEAgLTI0MzAs
MjIgKzIzOTIsMTggQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKHVu
c2lnbmVkIGluZGV4LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY28KICAgICBpZiAoIWNhbGxiYWNr
TWFwKCkuY29udGFpbnMoaW5kZXgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0NvbnRleHRS
ZWYgY29udGV4dCA9IG1haW5GcmFtZUpTQ29udGV4dCgpOwotICAgIGlmIChKU09iamVjdFJlZiBj
YWxsYmFjayA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBjYWxsYmFja01hcCgpLnRha2UoaW5k
ZXgpLCAwKSkgewotICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxi
YWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIGFyZ3VtZW50Q291bnQsIGFy
Z3VtZW50cywgMCk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7Cisg
ICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpKSB7CisgICAg
ICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdl
dEdsb2JhbE9iamVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBudWxscHRy
KTsKICAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7CiAgICAgfQog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyVGVzdFJ1bm5lckNhbGxiYWNrcygpCiB7Ci0gICAg
SlNDb250ZXh0UmVmIGNvbnRleHQgPSBtYWluRnJhbWVKU0NvbnRleHQoKTsKLQotICAgIGZvciAo
YXV0byYgaXRlciA6IGNhbGxiYWNrTWFwKCkpIHsKLSAgICAgICAgaWYgKEpTT2JqZWN0UmVmIGNh
bGxiYWNrID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGl0ZXIudmFsdWUsIDApKQotICAgICAg
ICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgfQotCisgICAg
YXV0byBjb250ZXh0ID0gbWFpbkZyYW1lSlNDb250ZXh0KCk7CisgICAgZm9yIChhdXRvJiBjYWxs
YmFjayA6IGNhbGxiYWNrTWFwKCkudmFsdWVzKCkpCisgICAgICAgIEpTVmFsdWVVbnByb3RlY3Qo
Y29udGV4dCwgY2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFwKCkuY2xlYXIoKTsKIH0KIApAQCAt
MjUwOCwxNiArMjQ2NiwxMSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGZpbGVzVmFsdWUpCiB7CiAgICAgaWYgKCFK
U1ZhbHVlSXNBcnJheShjb250ZXh0LCBmaWxlc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuOwotCi0g
ICAgSlNPYmplY3RSZWYgZmlsZXMgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZmlsZXNWYWx1
ZSwgbnVsbHB0cik7Ci0gICAgc3RhdGljIGF1dG8gbGVuZ3RoUHJvcGVydHkgPSBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgZmls
ZXNMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZmlsZXMsIGxlbmd0
aFByb3BlcnR5LmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250
ZXh0LCBmaWxlc0xlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZmlsZXMg
PSAoSlNPYmplY3RSZWYpZmlsZXNWYWx1ZTsKKyAgICBhdXRvIGZpbGVzTGVuZ3RoID0gV1RSOjph
cnJheUxlbmd0aChjb250ZXh0LCBmaWxlcyk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVzLmNsZWFy
KCk7Ci0gICAgYXV0byBmaWxlc0xlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIGZpbGVzTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpbGVzTGVuZ3RoOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZmlsZXNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIGZpbGVWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZpbGVzLCBpLCBudWxscHRy
KTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgZmlsZVZhbHVlKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVz
dFJ1bm5lci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCmluZGV4IDE2NzEy
MDU4YTEwY2U5ODlhM2M4ZDQzZDY0NGY5YTllMzAwZDQwZGUuLmU4NTdhYTRkY2RhMjk3YzRmZTNl
NzZhYzdlOWVhZjA1YTA5YzgwYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RSdW5uZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKQEAgLTU0
LDcgKzU0LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xlYW51cCgpOwogCi0gICAgdm9p
ZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0Nv
bnRleHRSZWYpOwogCiAgICAgdm9pZCBhZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmIHVybCk7
CiAgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBhbGxvd2VkSG9zdHMoKSBjb25zdCB7
IHJldHVybiBtX2FsbG93ZWRIb3N0czsgfQpAQCAtNDk3LDcgKzQ5Nyw3IEBAIHByaXZhdGU6CiAg
ICAgc3RkOjp2ZWN0b3I8Y2hhcj4gbV9vcGVuUGFuZWxGaWxlc01lZGlhSWNvbjsKICNlbmRpZgog
Ci0gICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOwotICAgIHN0YXRpYyBKU1N0YXRp
Y1ZhbHVlKiBzdGF0aWNWYWx1ZXMoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiogc3Rh
dGljRnVuY3Rpb25zKCk7CisgICAgc3RhdGljIEpTUmV0YWluUHRyPEpTQ2xhc3NSZWY+IGNyZWF0
ZUpTQ2xhc3MoKTsKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVz
KCk7CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygp
OwogfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcklPUy5tbQppbmRleCA2MWUwMWY1ZWQ3Njc1YTgzMGJhNmYzOGY4ZWNmNTg0MGZi
YzgzOWNiLi5lODUyZGZkYWJjZDQzOTkzYjMxMzkzZDM1ZGYwMDU0Y2Y2Nzk0Zjc5IDEwMDY0NAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1Mu
bW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
SU9TLm1tCkBAIC0yNCwxMiArMjQsMTMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5oIgogCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudC5oIgorI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkpTQmFzaWNz
LmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJGcmFtZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1ByaXZhdGUuaD4K
QEAgLTE1NSw1ICsxNTYsNSBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNl
ZEFjY2Vzc2liaWxpdHlFbmFibGVkKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBh
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaW9zIikpOworICAgIHJldHVybiBX
VFI6OmNyZWF0ZUpTU3RyaW5nKCJpb3MiKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5kZXggZTNjOTA5ZDZkZDI3
MDM5MjgzZWFjY2QzMmFlNDA5MjZjZThhOWU2NC4uNjQ1ZmM4NjNjZWYxMGEwMGY1YmI0YjdkMTM5
YzZlMGRjZTQwOGRlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KQEAgLTI0LDExICsyNCwxMiBAQAogICovCiAKICNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKICNpbXBvcnQgIkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1h
Yy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCIKKyNpbXBv
cnQgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1Jl
ZkNGLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5oPgpAQCAtNDEsMTEgKzQy
LDYgQEAKIAogdHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQg
ZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKLUFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxlbWVudCkKLSAg
ICA6IG1fZWxlbWVudChlbGVtZW50KQotewotfQotCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChVSUFj
Y2Vzc2liaWxpdHlIaWRkZW4pCiAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooQ0dQb2ludClw
b2ludDsKIC0gKGlkKWFjY2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50OwpAQCAtMTEyLDkgKzEwOCw5
IEBAIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyUHJp
dmF0ZSkKIC0gKENHUGF0aFJlZilfYWNjZXNzaWJpbGl0eVBhdGg7CiBAZW5kCiAKLXN0YXRpYyBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCitBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGlkIGVsZW1lbnQpCisgICAgOiBt
X2VsZW1lbnQoZWxlbWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycyhudWxscHRyLCAwKSk7CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gY29uY2F0ZW5hdGVBdHRyaWJ1dGVBbmRWYWx1ZShOU1N0cmluZyAqYXR0cmlidXRlLCBO
U1N0cmluZyAqdmFsdWUpCkBAIC0xODAsNyArMTc2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpmaWVsZHNldEFuY2VzdG9yRWxlbWVudCgpCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLQogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnVybCgpCiB7CiAgICAgTlNVUkwgKnVybCA9IFttX2VsZW1lbnQgYWNj
ZXNzaWJpbGl0eVVSTF07CkBAIC0yOTEsNyArMjg2LDYgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5rZWRFbGVtZW50KCkKIAogQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4
KHVuc2lnbmVkIGluZGV4KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4g
MDsKIH0KIApAQCAtNTU4LDcgKzU1Miw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzCiB7CiAg
ICAgaWQgdGV4dE1hcmtlcnMgPSBtYXJrZXJSYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2Uo
KTsKICAgICBpZiAoIXRleHRNYXJrZXJzIHx8ICFbdGV4dE1hcmtlcnMgaXNLaW5kT2ZDbGFzczpb
TlNBcnJheSBjbGFzc11dKQotICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOwor
ICAgICAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogICAgIHJldHVybiBbW21fZWxl
bWVudCBzdHJpbmdGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc10gY3JlYXRlSlNTdHJpbmdSZWZd
OwogfQogCkBAIC02ODEsMjIgKzY3NSwyMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldERvY3VtZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbAogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mTGlua2VkVUlFbGVtZW50cygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmco
KTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRM
aW5rcygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4g
V1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQogewotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmco
KTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmFsbEF0dHJpYnV0ZXMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3Ry
aW5nUmVmIGF0dHJpYnV0ZSkKQEAgLTcxNiw3ICs3MTAsNyBAQCBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJp
bmdSZQogICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGF0dHJpYnV0ZSwgIkFY
VGV4dHVhbENvbnRleHQiKSkKICAgICAgICAgcmV0dXJuIFtbbV9lbGVtZW50IGFjY2Vzc2liaWxp
dHlUZXh0dWFsQ29udGV4dF0gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIAotICAgIHJldHVybiBj
cmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVk
KCkKQEAgLTc1NSwxNyArNzQ5LDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNB
dHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0
ZU5hbWVzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlK
U1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKIHsK
LSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNyZWF0
ZUpTU3RyaW5nKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsUGFn
ZVVwKCkKQEAgLTc4OSwxNyArNzgzLDE3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2Nyb2xsUGFnZVJpZ2h0KCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xl
U3RyaW5nKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVy
biBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24o
KQpAQCAtODA5LDcgKzgwMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygp
OwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c3RyaW5nVmFsdWUoKQpAQCAtODE5LDcgKzgxMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aGVscFRleHQoKSBjb25zdApAQCAtODQ5LDcgKzg0Myw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2V0VmFsdWUoSlNTdHJpbmdSZWYgdmFsdWVUZXh0KQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbigp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpj
cmVhdGVKU1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0
aW9uUG9pbnRMaW5lTnVtYmVyKCkKQEAgLTg2OSw3ICs4NjMsNiBAQCBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzRm9jdXNlZCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAg
IHJldHVybiBmYWxzZTsKIH0KIApAQCAtODkyLDcgKzg4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNDaGVja2VkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0luZGV0ZXJtaW5hdGUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTkwOCw3ICs5MDAsNyBAQCBib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmFyaWFJc0dyYWJiZWQoKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBXVFI6OmNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9y
SW5kZXgoaW50IGluZGV4KQpAQCAtOTE4LDM3ICs5MTAsMzcgQEAgaW50IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmxpbmVGb3JJbmRleChpbnQgaW5kZXgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2Nh
dGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5n
KCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhl
YWRlcnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJu
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJp
bmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3Ry
aW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3Mo
KQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygp
OwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dDb3VudCgpCkBAIC05ODcsMjIgKzk3OSwxOSBAQCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3co
dW5zaWduZWQgY29sLAogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFr
ZVZpc2libGUoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
IH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGlu
dCB4LCBpbnQgeSkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpj
cmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFzc2lz
dGl2ZVRlY2hub2xvZ3lTaW11bGF0ZWRGb2N1cygpCkBAIC0xMDM1LDIzICsxMDI0LDIxIEBAIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1l
bnRVUkkoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJu
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQpA
QCAtMTA4Myw0MyArMTA3MCwzNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0ZvY3VzYWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUo
KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNDb2xsYXBzZWQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTExMzAsMTMgKzExMTAsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzU2luZ2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRp
TGluZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApAQCAtMTE1MiwyNyArMTEzMCwyMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cG9wdXBWYWx1ZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCiB7Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmFkZFNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB2b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAogfQogCiB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1l
bnRDb3VudEZvclNlYXJjaFByZWRpY2F0ZShKU0NvbnRleHRSZWYgY29udGV4dCwgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgSlNWYWx1
ZVJlZiBzZWFyY2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHks
IGJvb2wgaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTIxNCwyMyArMTE4NywxOSBAQCBkb3VibGUgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0
cmlidXRlKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y2xhc3NMaXN0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50
QXJyYXlBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiwgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+JikgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4mKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50PiYpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiB1bnNpZ25l
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZENoaWxkcmVuQ291bnQoKSBjb25zdApk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25N
YWMuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgK
aW5kZXggMzg1MGI0MTQ0NjNlMDE1YzY3ZDU2ZWYwNGE1OTM4Yzk5MWM0N2VkOC4uMTViZjUxZjg0
ZDNlODE4MWMwMmNmNjYzYzc1NTM5ZGMyOGFkOWRkNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMuaAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5oCkBAIC00MSw0ICs0MSw0IEBAIEBp
bnRlcmZhY2UgTlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRkaXRpb25zKQogLSAoSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+KWNyZWF0ZUpTU3RyaW5nUmVmOwogQGVuZAogCi1leHRlcm4gTlNEaWN0aW9u
YXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVy
aWEoSlNDb250ZXh0UmVmLCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50ICpzdGFydEVsZW1lbnQsIGJv
b2wgaXNEaXJlY3Rpb25OZXh0LCB1bnNpZ25lZCByZXN1bHRzTGltaXQsIEpTVmFsdWVSZWYgc2Vh
cmNoS2V5LCBKU1N0cmluZ1JlZiBzZWFyY2hUZXh0LCBib29sIHZpc2libGVPbmx5LCBib29sIGlt
bWVkaWF0ZURlc2NlbmRhbnRzT25seSk7CitOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBh
cmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZWYsIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQgKnN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5leHQsIHVu
c2lnbmVkIHJlc3VsdHNMaW1pdCwgSlNWYWx1ZVJlZiBzZWFyY2hLZXksIEpTU3RyaW5nUmVmIHNl
YXJjaFRleHQsIGJvb2wgdmlzaWJsZU9ubHksIGJvb2wgaW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29t
bW9uTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25N
YWMubW0KaW5kZXggNzk0MDczOGEzMzkwZWIyNzBhNjA4YmZkMDU5ZTE3MmFmNGI3OTA5Mi4uMDMw
NjdlMmQwODkyMTRmYmU4NDY2N2IyODI0ZjhjZTMxNDgwZjk4NyAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0KQEAgLTMxLDYgKzMx
LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUNvbW1vbk1h
Yy5oIgogCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNT
dHJpbmdSZWZDRi5oPgogCiBAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKEpTU3RyaW5nUmVmQWRk
aXRpb25zKQpAQCAtNTYsNyArNTcsNiBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBh
cmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAg
ICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c3RhcnRFbGVtZW50LT5wbGF0Zm9y
bVVJRWxlbWVudCgpIGZvcktleTpAIkFYU3RhcnRFbGVtZW50Il07CiAKICAgICBbcGFyYW1ldGVy
aXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6KGlzRGlyZWN0aW9uTmV4dCkgPyBAIkFYRGlyZWN0aW9u
TmV4dCIgOiBAIkFYRGlyZWN0aW9uUHJldmlvdXMiIGZvcktleTpAIkFYRGlyZWN0aW9uIl07Ci0K
ICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QChyZXN1bHRzTGltaXQpIGZv
cktleTpAIkFYUmVzdWx0c0xpbWl0Il07CiAKICAgICBpZiAoc2VhcmNoS2V5KSB7CkBAIC02Niwx
NCArNjYsOCBAQCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRy
aWJ1dGVGb3JTZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogICAgICAgICAgICAgaWYgKHNlYXJj
aEtleVN0cmluZykKICAgICAgICAgICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZy5nZXQoKV07CiAgICAgICAg
IH0gZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSkpIHsKLSAgICAg
ICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaEtleUFycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIHNlYXJjaEtleSwgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlB
cnJheUxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoUHJv
cGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlID0g
SlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgbGVuZ3RoUHJvcGVy
dHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleUFycmF5
TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHNlYXJjaEtleUFycmF5TGVu
Z3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBzZWFyY2hLZXlBcnJheUxl
bmd0aFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIEpTT2JqZWN0
UmVmIHNlYXJjaEtleUFycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJjaEtleTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChjb250ZXh0
LCBzZWFyY2hLZXlBcnJheSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2VhcmNoS2V5QXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYg
c2VhcmNoS2V5VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFy
Y2hLZXlBcnJheSwgaSwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2Vh
cmNoS2V5U3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBzZWFyY2hLZXlWYWx1
ZSwgbnVsbHB0cik7CkBAIC04OCwxMiArODIsMTEgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVk
aWNhdGVQYXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUK
ICAgICAgICAgaWYgKHNlYXJjaEtleVBhcmFtZXRlcikKICAgICAgICAgICAgIFtwYXJhbWV0ZXJp
emVkQXR0cmlidXRlIHNldE9iamVjdDpzZWFyY2hLZXlQYXJhbWV0ZXIgZm9yS2V5OkAiQVhTZWFy
Y2hLZXkiXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoc2VhcmNoVGV4dCAmJiBKU1N0cmluZ0dl
dExlbmd0aChzZWFyY2hUZXh0KSkKICAgICAgICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0
T2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoVGV4dF0gZm9yS2V5
OkAiQVhTZWFyY2hUZXh0Il07Ci0gICAgCisKICAgICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBz
ZXRPYmplY3Q6QCh2aXNpYmxlT25seSkgZm9yS2V5OkAiQVhWaXNpYmxlT25seSJdOwotICAgIAog
ICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDpAKGltbWVkaWF0ZURlc2NlbmRh
bnRzT25seSkgZm9yS2V5OkAiQVhJbW1lZGlhdGVEZXNjZW5kYW50c09ubHkiXTsKICAgICAKICAg
ICByZXR1cm4gcGFyYW1ldGVyaXplZEF0dHJpYnV0ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRleCA1MWYwMzFk
ZGJiY2Q4NTNhZGI0ZmU3MTQ3ZDg1YTUyNTc2YTAwNzhiLi45NWEwNmYzYTQwYTA0ODllM2UwYjBi
MzE2NTc0YzNmY2JmMmVjZjExIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0zMCw2ICszMCw3IEBACiAjaW1w
b3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgor
I2ltcG9ydCAiSlNCYXNpY3MuaCIKICNpbXBvcnQgPEFwcEtpdC9OU0NvbG9yLmg+CiAjaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3Ry
aW5nUmVmLmg+CkBAIC0xNTgsNSArMTU5LDUgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6ZW5oYW5jZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZCgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm1hYyIpKTsKKyAg
ICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygibWFjIik7CiB9CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IGUx
ZWZkN2Y0ZTE2MWFmZmRlZTIyNGNjNDUzODQ4YjM5Y2I0OTcwNjMuLjY0OTFhMmQwYTVmYTRjNzRl
NzIxNzkyNzhmN2UxY2E5OWQ3NjhkNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uSGFuZGxlci5oIgogI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBv
cnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJG
cmFtZS5oPgpAQCAtODAsMTEgKzgxLDYgQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRv
R2xvYmFsUG9pbnQ6KE5TUG9pbnQpcG9pbnQ7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2V0VmFs
dWU6KGlkKXZhbHVlIGZvckF0dHJpYnV0ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWU7CiBAZW5k
CiAKLXN0YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0
ciwgMCkpOwotfQotCiBzdGF0aWMgT3B0aW9uYWw8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gbWFr
ZVZlY3RvckVsZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCosIGlkIGVsZW1lbnQp
CiB7CiAgICAgcmV0dXJuIHsgeyBlbGVtZW50IH0gfTsKQEAgLTIyMSwxNCArMjE3LDggQEAgc3Rh
dGljIE5TRGljdGlvbmFyeSAqc2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0
ZXJpYShKU0NvbnRleHRSZWYgY28KICAgICAgICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFt
ZXRlciBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpzZWFyY2hTdHJp
bmdzU3RyaW5nLmdldCgpXV07CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlz
T2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKSB7Ci0gICAgICAgICAgICBKU09iamVjdFJl
ZiBzZWFyY2hTdHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNoU3Ry
aW5ncywgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGggPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3BlcnR5
U3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsK
LSAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgPSBK
U09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3RoUHJv
cGVydHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmlu
Z3NBcnJheUxlbmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hTdHJp
bmdzQXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0FycmF5
TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBz
ZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAgCisg
ICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheSA9IChKU09iamVjdFJlZilzZWFyY2hT
dHJpbmdzOworICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGggPSBXVFI6
OmFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQs
IHNlYXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIpKTsKICAgICAgICAgICAg
ICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKQEAgLTI2MiwxNCArMjUyLDggQEAgc3RhdGlj
IE5TRGljdGlvbmFyeSAqc2VhcmNoVGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JDcml0ZXJp
YShKU0NvbnRleHRSZWYgY28KICAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQog
ICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJp
bmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKICAg
ICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncykp
IHsKLSAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaFN0cmluZ3NBcnJheSA9IEpTVmFsdWVU
b09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzLCBudWxscHRyKTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAgICAgIGF1dG8g
bGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hTdHJpbmdzQXJyYXlM
ZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgc2VhcmNoU3RyaW5nc0Fy
cmF5LCBsZW5ndGhQcm9wZXJ0eVN0cmluZy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBp
ZiAoc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlKSkKLSAgICAgICAgICAgICAgICBzZWFy
Y2hTdHJpbmdzQXJyYXlMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0K
KyAgICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc0FycmF5ID0gKEpTT2JqZWN0UmVmKXNlYXJj
aFN0cmluZ3M7CisgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IFdU
Ujo6YXJyYXlMZW5ndGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkg
ewogICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFkb3B0KEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4
dCwgc2VhcmNoU3RyaW5nc0FycmF5LCBpLCBudWxscHRyKSwgbnVsbHB0cikpOwogICAgICAgICAg
ICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQpAQCAtMTQ0NiwxMyArMTQzMCwxMyBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxl
Y3RlZENoaWxkcmVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgogfQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJu
IFdUUjo6Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQpAQCAtMTQ2Myw3ICsxNDQ3
LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcoKQogICAgICAgICByZXR1cm4gW3ZhbHVlIGNyZWF0ZUpTU3RyaW5nUmVm
XTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gV1RSOjpjcmVhdGVKU1N0cmluZygpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRV
UkkoKQpAQCAtMTQ3NCw3ICsxNDU4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBj
cmVhdGVKU1N0cmluZ1JlZl07CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogICAgIAotICAg
IHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNT
dHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnVybCgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVM
b2FkRGVsZWdhdGUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdh
dGUubW0KaW5kZXggMzY3MTQ5MzlmZGEwYTU2NzQ5Yzc5OTg4NmExZWE0Mzg5MjE4OWE0YS4uMzQy
YjNhMDFkYzdlYTg3OWFmMWI1NGIwZWUyNzNkNjgxMmY4ZjdhNyAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQpAQCAtMzExLDU0ICszMTEsMjYgQEAg
SUdOT1JFX1dBUk5JTkdTX0VORAogCiAtICh2b2lkKWRpZENsZWFyV2luZG93T2JqZWN0SW5TdGFu
ZGFyZFdvcmxkRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKIHsKLSAgICAvLyBNYWtlIE5ldy1T
dHlsZSBUZXN0UnVubmVyCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBbZnJhbWUgZ2xvYmFs
Q29udGV4dF07Ci0gICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xv
YmFsT2JqZWN0KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBh
dXRvIGNvbnRleHQgPSBbZnJhbWUgZ2xvYmFsQ29udGV4dF07CisgICAgYXV0byB3ZWJWaWV3ID0g
W2ZyYW1lIHdlYlZpZXddOworICAgIGF1dG8gd2luZG93T2JqZWN0ID0gW2ZyYW1lIHdpbmRvd09i
amVjdF07CiAKLSAgICBBU1NFUlQoZ1Rlc3RSdW5uZXIpOwotICAgIGdUZXN0UnVubmVyLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNT
RVJUKCFleGNlcHRpb24pOwotCi0gICAgZ2NDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNv
bnRleHQsIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24p
OwotCi0gICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4
dCwgZ2xvYmFsT2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Cisg
ICAgZ1Rlc3RSdW5uZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgZ2NDb250cm9s
bGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOwogCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0
OjppbmplY3RJbnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiAKLSAgICAvLyBNYWtlIE9sZC1TdHls
ZSBjb250cm9sbGVycwotCi0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtmcmFtZSB3ZWJWaWV3XTsK
LSAgICBXZWJTY3JpcHRPYmplY3QgKm9iaiA9IFtmcmFtZSB3aW5kb3dPYmplY3RdOwotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIEFwcGxlU2NyaXB0Q29udHJvbGxlciAqYXNjID0gW1tB
cHBsZVNjcmlwdENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3XTsKLSAg
ICBbb2JqIHNldFZhbHVlOmFzYyBmb3JLZXk6QCJhcHBsZVNjcmlwdENvbnRyb2xsZXIiXTsKLSAg
ICBbYXNjIHJlbGVhc2VdOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2luZG93T2JqZWN0IHNl
dFZhbHVlOmFkb3B0TlMoW1tBcHBsZVNjcmlwdENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3XSkuZ2V0KCkgZm9yS2V5OkAiYXBwbGVTY3JpcHRDb250cm9sbGVyIl07CiAj
ZW5kaWYKIAotICAgIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgKmVzYyA9IFtbRXZlbnRTZW5kaW5n
Q29udHJvbGxlciBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTplc2MgZm9yS2V5OkAi
ZXZlbnRTZW5kZXIiXTsKLSAgICBbZXNjIHJlbGVhc2VdOwotICAgIAotICAgIFtvYmogc2V0VmFs
dWU6Z05hdmlnYXRpb25Db250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07
Ci0gICAgCi0gICAgT2JqQ0NvbnRyb2xsZXIgKm9jYyA9IFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2Nd
IGluaXRdOwotICAgIFtvYmogc2V0VmFsdWU6b2NjIGZvcktleTpAIm9iakNDb250cm9sbGVyIl07
Ci0gICAgW29jYyByZWxlYXNlXTsKLQotICAgIE9iakNQbHVnaW4gKnBsdWdpbiA9IFtbT2JqQ1Bs
dWdpbiBhbGxvY10gaW5pdF07Ci0gICAgW29iaiBzZXRWYWx1ZTpwbHVnaW4gZm9yS2V5OkAib2Jq
Q1BsdWdpbiJdOwotICAgIFtwbHVnaW4gcmVsZWFzZV07Ci0gICAgCi0gICAgT2JqQ1BsdWdpbkZ1
bmN0aW9uICpwbHVnaW5GdW5jdGlvbiA9IFtbT2JqQ1BsdWdpbkZ1bmN0aW9uIGFsbG9jXSBpbml0
XTsKLSAgICBbb2JqIHNldFZhbHVlOnBsdWdpbkZ1bmN0aW9uIGZvcktleTpAIm9iakNQbHVnaW5G
dW5jdGlvbiJdOwotICAgIFtwbHVnaW5GdW5jdGlvbiByZWxlYXNlXTsKLQotICAgIFRleHRJbnB1
dENvbnRyb2xsZXIgKnRpYyA9IFtbVGV4dElucHV0Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXddOwotICAgIFtvYmogc2V0VmFsdWU6dGljIGZvcktleTpAInRleHRJbnB1
dENvbnRyb2xsZXIiXTsKLSAgICBbdGljIHJlbGVhc2VdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0
VmFsdWU6YWRvcHROUyhbW0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKS5nZXQo
KSBmb3JLZXk6QCJldmVudFNlbmRlciJdOworICAgIFt3aW5kb3dPYmplY3Qgc2V0VmFsdWU6Z05h
dmlnYXRpb25Db250cm9sbGVyIGZvcktleTpAIm5hdmlnYXRpb25Db250cm9sbGVyIl07CisgICAg
W3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2JqQ0NvbnRyb2xsZXIgYWxsb2NdIGlu
aXRdKS5nZXQoKSBmb3JLZXk6QCJvYmpDQ29udHJvbGxlciJdOworICAgIFt3aW5kb3dPYmplY3Qg
c2V0VmFsdWU6YWRvcHROUyhbW09iakNQbHVnaW4gYWxsb2NdIGluaXRdKS5nZXQoKSBmb3JLZXk6
QCJvYmpDUGx1Z2luIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbT2Jq
Q1BsdWdpbkZ1bmN0aW9uIGFsbG9jXSBpbml0XSkuZ2V0KCkgZm9yS2V5OkAib2JqQ1BsdWdpbkZ1
bmN0aW9uIl07CisgICAgW3dpbmRvd09iamVjdCBzZXRWYWx1ZTphZG9wdE5TKFtbVGV4dElucHV0
Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKS5nZXQoKSBmb3JLZXk6
QCJ0ZXh0SW5wdXRDb250cm9sbGVyIl07CiB9CiAKIC0gKHZvaWQpZGlkQ2xlYXJXaW5kb3dPYmpl
Y3RGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZSBpbklzb2xhdGVkV29ybGQ6KFdlYlNjcmlwdFdv
cmxkICopd29ybGQKQEAgLTM3MSw3ICszNDMsNyBAQCAtICh2b2lkKWRpZENsZWFyV2luZG93T2Jq
ZWN0Rm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUgaW5Jc29sYXRlZFdvcmxkOihXZWJTY3JpcAog
ICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU09iamVjdFNl
dFByb3BlcnR5KGN0eCwgZ2xvYmFsT2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiX193b3JsZElEIikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIHdvcmxk
SURGb3JXb3JsZCh3b3JsZCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKKyAg
ICBKU09iamVjdFNldFByb3BlcnR5KGN0eCwgZ2xvYmFsT2JqZWN0LCBXVFI6OmNyZWF0ZUpTU3Ry
aW5nKCJfX3dvcmxkSUQiKS5nZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCB3b3JsZElERm9y
V29ybGQod29ybGQpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7CiB9CiAKIC0g
KHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDbGVhcldpbmRvd09iamVjdEZvckZy
YW1lOihXZWJGcmFtZSAqKWZyYW1lIGluU2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29y
bGQKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1t
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggZWJhMDkz
ZWUxODdjZDMxMGQwNTFiMjMwYWVkMmEzMDBmZTc5NDljMC4uZTIxMDcwYWMzMWIzNGNmY2JiNTc5
ZDc3NzViNzYxOTkxMTRhYmRmZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0KQEAgLTMyLDYgKzMyLDcgQEAKIAogI2ltcG9ydCAiRGVmYXVsdFBvbGljeURlbGVn
YXRlLmgiCiAjaW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKKyNpbXBvcnQgIkpTQmFzaWNzLmgi
CiAjaW1wb3J0ICJMYXlvdXRUZXN0U3BlbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJNb2NrR2VvbG9j
YXRpb25Qcm92aWRlci5oIgogI2ltcG9ydCAiTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmgi
CkBAIC02NzAsMTUgKzY3MSwxMCBAQCBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZQogewogICAgIFdl
YkZpbmRPcHRpb25zIG9wdGlvbnMgPSAwOwogCi0gICAgYXV0byBsZW5ndGhQcm9wZXJ0eU5hbWUg
PSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpT
VmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlv
bnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJ
c051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdGFyZ2V0Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3Ry
aW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhcmdldCkpOworICAgIGF1dG8g
bGVuZ3RoID0gV1RSOjphcnJheUxlbmd0aChjb250ZXh0LCBvcHRpb25zQXJyYXkpOworICAgIGF1
dG8gdGFyZ2V0Q0ZTdHJpbmcgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9j
YXRvckRlZmF1bHQsIHRhcmdldCkpOwogCi0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0
PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNP
YmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKICAg
ICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQogICAgICAgICAgICAg
Y29udGludWU7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2Fk
RGVsZWdhdGUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRl
LmNwcAppbmRleCBmZDc3YWQxYzM5MjYzOGRhOTQxNDNlZTdkNWE4MjFlNjk0MTAyMzEzLi41ZjNi
NzQwNDA1MDBmMDMwZGEyYmVkMWFhZjk2NzNmOGI2MmJiMTY2IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKQEAgLTM3MSwxOSArMzcxLDEwIEBA
IHZvaWQgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVJblN0
YW5kYXJkV29ybGQoSVdlYkZyYW1lKiBmCiAgICAgSVdlYkZyYW1lKiBwYXJlbnRGcmFtZSA9IDA7
CiAgICAgZnJhbWUtPnBhcmVudEZyYW1lKCZwYXJlbnRGcmFtZSk7CiAKLSAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IDA7Ci0KLSAgICA6OmdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KGNv
bnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24p
OwotCi0gICAgbV9nY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93
T2JqZWN0LCAmZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBtX2Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOwotCi0gICAgbV90ZXh0
SW5wdXRDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwg
JmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24pOworICAgIDo6Z1Rlc3RSdW5uZXIt
Pm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CisgICAgbV9nY0NvbnRyb2xsZXItPm1ha2VXaW5k
b3dPYmplY3QoY29udGV4dCk7CisgICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+bWFrZVdp
bmRvd09iamVjdChjb250ZXh0KTsKKyAgICBtX3RleHRJbnB1dENvbnRyb2xsZXItPm1ha2VXaW5k
b3dPYmplY3QoY29udGV4dCk7CiAKICAgICBKU1N0cmluZ1JlZiBldmVudFNlbmRlclN0ciA9IEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJldmVudFNlbmRlciIpOwogICAgIEpTVmFsdWVS
ZWYgZXZlbnRTZW5kZXIgPSBtYWtlRXZlbnRTZW5kZXIoY29udGV4dCwgIXBhcmVudEZyYW1lKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVy
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmNwcApp
bmRleCAzYjlhMmI3OGQ5ZDU4ODM1NTAzNDA1NWYyNGQyMDI1OGQzMmI3YjE1Li5kMmU1MzUyNGY1
ZjVlMTM1MmQwNDUyMTc5ZDgyYmNkODIwM2I1YWY3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vVGV4dElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgogCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlICJKU0Jhc2ljcy5o
IgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogLy8gU3RhdGljIEZ1bmN0aW9ucwpAQCAtMTYy
LDQyICsxNjIsMzIgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2VsZWN0ZWRSYW5nZUNhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGkKIAogLy8gT2JqZWN0IENyZWF0
aW9uCiAKLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250
ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+ICB0ZXh0SW5w
dXRDb250b2xsZXJTdHIoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXh0
SW5wdXRDb250cm9sbGVyIikpOwotCi0gICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IGdldEpTQ2xh
c3MoKTsKLSAgICBKU1ZhbHVlUmVmIHRleHRJbnB1dENvbnRvbGxlck9iamVjdCA9IEpTT2JqZWN0
TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhpcyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NS
ZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIHRl
eHRJbnB1dENvbnRvbGxlclN0ci5nZXQoKSwgdGV4dElucHV0Q29udG9sbGVyT2JqZWN0LCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
LCBleGNlcHRpb24pOworICAgIFdUUjo6c2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwg
InRleHRJbnB1dENvbnRyb2xsZXIiLCBKU09iamVjdE1ha2UoY29udGV4dCwgY3JlYXRlSlNDbGFz
cygpLmdldCgpLCB0aGlzKSk7CiB9CiAKLUpTQ2xhc3NSZWYgVGV4dElucHV0Q29udHJvbGxlcjo6
Z2V0SlNDbGFzcygpCitKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBUZXh0SW5wdXRDb250cm9sbGVy
OjpjcmVhdGVKU0NsYXNzKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFs
dWVzID0gVGV4dElucHV0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVzKCk7Ci0gICAgc3RhdGljIEpT
U3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucyA9IFRleHRJbnB1dENvbnRyb2xsZXI6OnN0
YXRpY0Z1bmN0aW9ucygpOwotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmlu
aXRpb24gPSAKLSAgICB7Ci0gICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIlRleHRJ
bnB1dENvbnRyb2xsZXIiLCAwLCBzdGF0aWNWYWx1ZXMsIHN0YXRpY0Z1bmN0aW9ucywKKyAgICBj
b25zdCBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtK
U0NsYXNzQXR0cmlidXRlTm9uZSwgIlRleHRJbnB1dENvbnRyb2xsZXIiLCAwLCBzdGF0aWNWYWx1
ZXMoKSwgc3RhdGljRnVuY3Rpb25zKCksCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAKICAgICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5p
dGlvbik7CisgICAgcmV0dXJuIGFkb3B0KEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbikp
OwogfQogCi1KU1N0YXRpY1ZhbHVlKiBUZXh0SW5wdXRDb250cm9sbGVyOjpzdGF0aWNWYWx1ZXMo
KQorY29uc3QgSlNTdGF0aWNWYWx1ZSogVGV4dElucHV0Q29udHJvbGxlcjo6c3RhdGljVmFsdWVz
KCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBzdGF0aWNWYWx1ZXNbXSA9IAorICAgIHN0
YXRpYyBjb25zdCBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0KICAgICB7CiAgICAgICAg
IHsgMCwgMCwgMCwgMCB9CiAgICAgfTsKICAgICByZXR1cm4gc3RhdGljVmFsdWVzOwogfQogCi1K
U1N0YXRpY0Z1bmN0aW9uKiBUZXh0SW5wdXRDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKQor
Y29uc3QgSlNTdGF0aWNGdW5jdGlvbiogVGV4dElucHV0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rp
b25zKCkKIHsKLSAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9
IHsKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9
IHsKICAgICAgICAgeyAic2V0TWFya2VkVGV4dCIsIHNldE1hcmtlZFRleHRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJoYXNNYXJrZWRUZXh0IiwgaGFzTWFya2VkVGV4dENhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgInVubWFya1RleHQiLCB1bm1hcmtUZXh0Q2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9s
bGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGV4dElucHV0Q29udHJvbGxlci5oCmlu
ZGV4IDI5ZjAzOGJlMmRkYjUwZTlmYWU1MzBlMWM2ZDEzYzFkNDZmOTk3OTIuLmU1YWY1ZWJlY2E0
MmJiZWQ1ZjMxZDk5ZDRjOGE4MGE5NDZjMDQzMmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9UZXh0SW5wdXRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL1RleHRJbnB1dENvbnRyb2xsZXIuaApAQCAtMjYsMjAgKzI2LDE2IEBACiAgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAgCi0jaWZuZGVmIFRleHRJbnB1dENvbnRyb2xsZXJfaAotI2RlZmluZSBUZXh0
SW5wdXRDb250cm9sbGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNDb250ZXh0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1Jl
dGFpblB0ci5oPgogI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgogCiBjbGFzcyBUZXh0SW5wdXRDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9p
ZCBtYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZik7CiAKICAgICB2b2lkIHNldE1hcmtlZFRl
eHQoSlNTdHJpbmdSZWYgdGV4dCwgdW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW5n
dGgpOwogICAgIGJvb2wgaGFzTWFya2VkVGV4dCgpOwpAQCAtNTAsOSArNDYsNyBAQCBwdWJsaWM6
CiAgICAgc3RkOjp2ZWN0b3I8aW50PiBzZWxlY3RlZFJhbmdlKCk7CiAKIHByaXZhdGU6ICAgIAot
ICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNW
YWx1ZSogc3RhdGljVmFsdWVzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRp
Y0Z1bmN0aW9ucygpOworICAgIHN0YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVK
U0NsYXNzKCk7CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlcygp
OworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsK
IH07Ci0KLSNlbmRpZiAvLyBUZXh0SW5wdXRDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuY3BwIGIvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAKaW5kZXggZmZmMGI3NDk5MGFmYjllMTJhYzlk
MDFhNzEwYTRjNTI4MGUxZTkwOC4uNmIwMzAwZGNmYjA3ZWY2ZDU1NjRhNWZiMjRkOTVkYTlmNGU4
MTc2MiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2lj
cy5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5jcHAK
QEAgLTI4LDE5ICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSlNWYWx1ZVJlZiBKU1Zh
bHVlTWFrZUJvb2xlYW5Pck51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQsIE9wdGlvbmFsPGJvb2w+
IHZhbHVlKQorT3B0aW9uYWw8Ym9vbD4gdG9PcHRpb25hbEJvb2woSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VC
b29sZWFuKGNvbnRleHQsIHZhbHVlLnZhbHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQp
OworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFs
dWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9wdGlvbmFsKEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKTsKK30KKworT3B0aW9uYWw8ZG91YmxlPiB0
b09wdGlvbmFsRG91YmxlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQor
eworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpIHx8IEpTVmFs
dWVJc051bGwoY29udGV4dCwgdmFsdWUpID8gV1RGOjpudWxsb3B0IDogbWFrZU9wdGlvbmFsKEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpOwogfQogCi1PcHRpb25hbDxi
b29sPiBKU1ZhbHVlVG9OdWxsYWJsZUJvb2xlYW4oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgdmFsdWUpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwg
T3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJc1VuZGVmaW5lZChj
b250ZXh0LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkgPyBXVEY6Om51
bGxvcHQgOiBPcHRpb25hbDxib29sPihKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHZhbHVlKSk7
CisgICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhbHVlLnZh
bHVlKCkpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCi1KU1ZhbHVlUmVmIEpTVmFs
dWVNYWtlU3RyaW5nT3JOdWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiBzdHJp
bmdPck51bGwpCitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNT
dHJpbmdSZWYgc3RyaW5nKQogewotICAgIHJldHVybiBzdHJpbmdPck51bGwgPyBKU1ZhbHVlTWFr
ZVN0cmluZyhjb250ZXh0LCBzdHJpbmdPck51bGwpIDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQp
OworICAgIHJldHVybiBzdHJpbmcgPyBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBzdHJpbmcp
IDogSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQpAQCAtNDgsMTkgKzUzLDQzIEBA
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVKU1N0cmluZyhjb25zdCBjaGFyKiBzdHJp
bmcpCiAgICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmlu
ZykpOwogfQogCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgYXV0byBzdHJpbmcgPSBh
ZG9wdCh2YWx1ZSA/IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIG51bGxwdHIp
IDogbnVsbHB0cik7CisgICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZyA6IGNyZWF0ZUpTU3RyaW5n
KCIiKTsKK30KKwogSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHN0cmluZykKIHsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4
dCwgY3JlYXRlSlNTdHJpbmcoc3RyaW5nKS5nZXQoKSk7CiB9CiAKK0pTVmFsdWVSZWYgcHJvcGVy
dHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciog
bmFtZSkKK3sKKyAgICByZXR1cm4gb2JqZWN0ID8gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0
LCBvYmplY3QsIGNyZWF0ZUpTU3RyaW5nKG5hbWUpLmdldCgpLCBudWxscHRyKSA6IG51bGxwdHI7
Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IHJldHVybiBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3Qs
IG5hbWUpKTsKK30KKworYm9vbCBib29sZWFuUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBkZWZhdWx0VmFsdWUp
Cit7CisgICAgYXV0byB2YWx1ZSA9IHByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbmFtZSk7Cisg
ICAgcmV0dXJuIHZhbHVlID8gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkgOiBkZWZh
dWx0VmFsdWU7Cit9CisKK2RvdWJsZSBudW1lcmljUHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBhdXRvIHZh
bHVlID0gcHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBuYW1lKTsKKyAgICByZXR1cm4gdmFsdWUg
PyBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpIDogMDsKK30KKwogSlNP
YmplY3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29u
dGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgbnVsbHB0cik7Ci0gICAg
aWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdFJlZj4odmFsdWUpOworICAgIGF1
dG8gdmFsdWUgPSBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWUpOworICAgIHJldHVybiB2
YWx1ZSA/IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBwcm9wZXJ0eShjb250ZXh0LCBvYmplY3Qs
IG5hbWUpLCBudWxscHRyKSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIG9iamVjdFByb3Bl
cnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gbmFtZXMpCkBAIC03MCwyNyArOTksNDEgQEAgSlNPYmpl
Y3RSZWYgb2JqZWN0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9i
amVjdCwgc3RkOjppbml0aWEKICAgICByZXR1cm4gb2JqZWN0OwogfQogCit1bnNpZ25lZCBhcnJh
eUxlbmd0aChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAg
IHJldHVybiBudW1lcmljUHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCAibGVuZ3RoIik7Cit9CisK
IHZvaWQgc2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVj
dCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBKU09iamVjdFNldFByb3Bl
cnR5KGNvbnRleHQsIG9iamVjdCwgY3JlYXRlSlNTdHJpbmcobmFtZSkuZ2V0KCksIEpTVmFsdWVN
YWtlQm9vbGVhbihjb250ZXh0LCB2YWx1ZSksIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSwgbnVs
bHB0cik7CiB9CiAKK3ZvaWQgc2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVlKQoreworICAgIEpT
T2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBjcmVhdGVKU1N0cmluZyhuYW1lKS5n
ZXQoKSwgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgdmFsdWUpLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZU5vbmUsIG51bGxwdHIpOworfQorCit2b2lkIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBKU1ZhbHVlUmVmIHZhbHVlKQor
eworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2Jq
ZWN0KGNvbnRleHQpLCBjcmVhdGVKU1N0cmluZyhuYW1lKS5nZXQoKSwgdmFsdWUsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIG51
bGxwdHIpOworfQorCit2b2lkIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUpCit7CisgICAgc2V0R2xvYmFs
T2JqZWN0UHJvcGVydHkoY29udGV4dCwgbmFtZSwgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwg
dmFsdWUpKTsKK30KKwogSlNWYWx1ZVJlZiBjYWxsKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBvYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxK
U1ZhbHVlUmVmPiBhcmd1bWVudHMpCiB7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIGF1dG8gZnVuY3Rpb24gPSBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBv
YmplY3QsIG5hbWUpOwotICAgIGlmICghZnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGZ1bmN0aW9uLCBv
YmplY3QsIGFyZ3VtZW50cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKTsKKyAg
ICByZXR1cm4gZnVuY3Rpb24gPyBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHQsIGZ1bmN0
aW9uLCBvYmplY3QsIGFyZ3VtZW50cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRy
KSA6IG51bGxwdHI7CiB9CiAKIEpTT2JqZWN0UmVmIGNhbGxDb25zdHJ1Y3RvcihKU0dsb2JhbENv
bnRleHRSZWYgY29udGV4dCwgY29uc3QgY2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0
PEpTVmFsdWVSZWY+IGFyZ3VtZW50cykKIHsKICAgICBhdXRvIGNvbnN0cnVjdG9yID0gb2JqZWN0
UHJvcGVydHkoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCB7IG5h
bWUgfSk7Ci0gICAgaWYgKCFjb25zdHJ1Y3RvcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dCwgY29uc3RydWN0b3Is
IGFyZ3VtZW50cy5zaXplKCksIGFyZ3VtZW50cy5iZWdpbigpLCBudWxscHRyKTsKKyAgICByZXR1
cm4gY29uc3RydWN0b3IgPyBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnN0
cnVjdG9yLCBhcmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuYmVnaW4oKSwgbnVsbHB0cikgOiBu
dWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
QmluZGluZ3MvSlNCYXNpY3MuaAppbmRleCAxMWRkYTUyNDdhNWFiNmMwNDA5NjNkZjE5YWIwZjVl
MDI5NmNlYjgyLi44ZDExYmM0OGM4MmQ3NzRhNGMwY2FhODU2MjYwZDA4OWUyMTU5MTkxIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmgKKysrIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oCkBAIC0zMiwxNiArMzIs
MzAgQEAKIAogbmFtZXNwYWNlIFdUUiB7CiAKLUpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VCb29sZWFu
T3JOdWxsKEpTQ29udGV4dFJlZiwgT3B0aW9uYWw8Ym9vbD4pOwotT3B0aW9uYWw8Ym9vbD4gSlNW
YWx1ZVRvTnVsbGFibGVCb29sZWFuKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitPcHRpb25h
bDxib29sPiB0b09wdGlvbmFsQm9vbChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOworT3B0aW9u
YWw8ZG91YmxlPiB0b09wdGlvbmFsRG91YmxlKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CiAK
LUpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VTdHJpbmdPck51bGwoSlNDb250ZXh0UmVmLCBKU1N0cmlu
Z1JlZik7CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoY29uc3QgY2hh
ciogPSAiIik7CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlSlNTdHJpbmcoSlNDb250
ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKIAotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNyZWF0ZUpT
U3RyaW5nKGNvbnN0IGNoYXIqKTsKIEpTVmFsdWVSZWYgbWFrZVZhbHVlKEpTQ29udGV4dFJlZiwg
Y29uc3QgY2hhciopOworSlNWYWx1ZVJlZiBtYWtlVmFsdWUoSlNDb250ZXh0UmVmLCBPcHRpb25h
bDxib29sPik7CitKU1ZhbHVlUmVmIG1ha2VWYWx1ZShKU0NvbnRleHRSZWYsIEpTU3RyaW5nUmVm
KTsKKworSlNWYWx1ZVJlZiBwcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25z
dCBjaGFyKiBuYW1lKTsKK2Jvb2wgYm9vbGVhblByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmpl
Y3RSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgZGVmYXVsdFZhbHVlID0gZmFsc2UpOworZG91
YmxlIG51bWVyaWNQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFy
KiBuYW1lKTsKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmdQcm9wZXJ0eShKU0NvbnRl
eHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lKTsKK3Vuc2lnbmVkIGFycmF5TGVu
Z3RoKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOwogSlNPYmplY3RSZWYgb2JqZWN0UHJvcGVy
dHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFtZSk7CiBKU09iamVj
dFJlZiBvYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IG5hbWVzKTsKKwogdm9pZCBzZXRQcm9wZXJ0eShKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKTsKK3Zv
aWQgc2V0UHJvcGVydHkoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgY29uc3QgY2hhciogbmFt
ZSwgZG91YmxlIHZhbHVlKTsKKwordm9pZCBzZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRl
eHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWVSZWYpOwordm9pZCBzZXRHbG9iYWxPYmpl
Y3RQcm9wZXJ0eShKU0NvbnRleHRSZWYsIGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSk7
CisKIEpTVmFsdWVSZWYgY2FsbChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBjb25zdCBjaGFy
KiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZVJlZj4gYXJndW1lbnRzKTsKIEpT
T2JqZWN0UmVmIGNhbGxDb25zdHJ1Y3RvcihKU0dsb2JhbENvbnRleHRSZWYsIGNvbnN0IGNoYXIq
IG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxKU1ZhbHVlUmVmPiBhcmd1bWVudHMpOwogCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBhYmxlLmgg
Yi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3JhcHBhYmxlLmgKaW5kZXggOWUw
ZjA3ZGY1OTMyYWIzMDMzMWQ3YjYxZDE3MzUzYWU2ZTAxYzQ3My4uNTliZTFkYWVhMjc3NTRlZTQ3
NzViNGYzZTdhNWQ2ODJmYjFkNWYxZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmlu
ZGluZ3MvSlNXcmFwcGFibGUuaApAQCAtMjUsOSArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KIAordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNDbGFzcyogSlNDbGFzc1JlZjsK
KwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNzIEpTV3JhcHBhYmxlIDogcHVibGljIFJlZkNvdW50
ZWQ8SlNXcmFwcGFibGU+IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvQmlu
ZGluZ3MvSlNXcmFwcGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTV3Jh
cHBlci5oCmluZGV4IGY2Nzk4Zjk5YTRmZWM2NzU2M2QwOTE1NjNiNTA1MDlkZmM4NTcyZGEuLjli
NmJhZDhhZjA0NGIyMDJmZjg3MjdhY2VkN2NiOWZmYjJjZWM1MmUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNXcmFwcGVyLmgKKysrIGIvVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9CaW5kaW5ncy9KU1dyYXBwZXIuaApAQCAtNTAsNCArNTAsOSBAQCBpbmxpbmUg
dm9pZCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0
LCBjb25zdCBjaGFyKiBwcgogICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0
LCBjcmVhdGVKU1N0cmluZyhwcm9wZXJ0eU5hbWUpLmdldCgpLCBKU1dyYXBwZXI6OndyYXAoY29u
dGV4dCwgdmFsdWUpLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOwogfQogCitpbmxpbmUgdm9pZCBz
ZXRHbG9iYWxPYmplY3RQcm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgY2hhciog
cHJvcGVydHlOYW1lLCBKU1dyYXBwYWJsZSogdmFsdWUpCit7CisgICAgc2V0R2xvYmFsT2JqZWN0
UHJvcGVydHkoY29udGV4dCwgcHJvcGVydHlOYW1lLCBKU1dyYXBwZXI6OndyYXAoY29udGV4dCwg
dmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9tYWMvRXZlbnRTZXJpYWxpemVyTWFjLm1t
IGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9FdmVudFNlcmlhbGl6YXRpb24vbWFjL0V2ZW50U2Vy
aWFsaXplck1hYy5tbQppbmRleCAwZjE3YjJjZDYzOWE2MzA2M2E0ODhkZjNhMzNhMzVlMzJhMmVj
Y2MxLi5iZGQyMDdiZDQwOWYwNGVlNWYzODIzMTk0ZmEyNGU2MzI4ODU4OTE3IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL0V2ZW50U2VyaWFsaXphdGlvbi9tYWMvRXZlbnRTZXJp
YWxpemVyTWFjLm1tCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvRXZlbnRTZXJpYWxpemF0
aW9uL21hYy9FdmVudFNlcmlhbGl6ZXJNYWMubW0KQEAgLTE5NSw3ICsxOTUsNyBAQCBAaW1wbGVt
ZW50YXRpb24gRXZlbnRTZXJpYWxpemVyCiAKICsgKE5TRGljdGlvbmFyeSAqKWRpY3Rpb25hcnlG
b3JFdmVudDooQ0dFdmVudFJlZilyYXdFdmVudCByZWxhdGl2ZVRvVGltZTooQ0dFdmVudFRpbWVz
dGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4gcGxh
aW5FdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZShOVUxMKSk7CisgICAgYXV0byBwbGFpbkV2
ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlKE5VTEwpKTsKICAgICBDR0V2ZW50UmVmIHJhd1Bs
YWluRXZlbnQgPSBwbGFpbkV2ZW50LmdldCgpOwogCiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAq
ZGljdCA9IFtbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsK
QEAgLTIyNiw3ICsyMjYsNyBAQCArIChOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5Rm9yRXZlbnQ6
KENHRXZlbnRSZWYpcmF3RXZlbnQgcmVsYXRpdmVUb1RpbWU6KENHRXZlbgogCiArIChSZXRhaW5Q
dHI8Q0dFdmVudFJlZj4pY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5OihOU0RpY3Rpb25hcnkgKilk
aWN0IGluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyByZWxhdGl2ZVRvVGltZTooQ0dFdmVudFRp
bWVzdGFtcClyZWZlcmVuY2VUaW1lc3RhbXAKIHsKLSAgICBSZXRhaW5QdHI8Q0dFdmVudFJlZj4g
ZXZlbnQgPSBhZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOworICAgIGF1dG8gZXZlbnQgPSBh
ZG9wdENGKENHRXZlbnRDcmVhdGUoTlVMTCkpOwogICAgIENHRXZlbnRSZWYgcmF3RXZlbnQgPSBl
dmVudC5nZXQoKTsKIAogICAgIEZPUl9FQUNIX0NHRVZFTlRfSU5URUdFUl9GSUVMRChTVE9SRV9J
TlRFR0VSX0ZJRUxEX1RPX0VWRU5UKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBjb25zdCBmbG9hdCBl
dmVudERpc3BhdGNoVGltZXJSYXRlID0gMS4gLyAxMjAuOwogCiArICh2b2lkKXBsYXlTdHJlYW06
KE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICopZXZlbnREaWN0cyB3aW5kb3c6KE5TV2luZG93ICop
d2luZG93IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKCkpY29tcGxldGlvbkhhbmRsZXIKIHsK
LSAgICBSZXRhaW5QdHI8RXZlbnRTdHJlYW1QbGF5ZXI+IHBsYXllciA9IGFkb3B0TlMoW1tFdmVu
dFN0cmVhbVBsYXllciBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gcGxheWVyID0gYWRvcHROUyhb
W0V2ZW50U3RyZWFtUGxheWVyIGFsbG9jXSBpbml0XSk7CiAKICAgICBwbGF5ZXItPl9yZW1haW5p
bmdFdmVudERpY3Rpb25hcmllcyA9IGFkb3B0TlMoW2V2ZW50RGljdHMgbXV0YWJsZUNvcHldKTsK
ICAgICBwbGF5ZXItPl93aW5kb3cgPSB3aW5kb3c7CkBAIC0yODIsNyArMjgyLDcgQEAgLSAodm9p
ZClwbGF5YmFja1RpbWVyRmlyZWQ6KE5TVGltZXIgKil0aW1lcgogICAgIGF1dG8gcmVtb3ZlTGlz
dCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogICAgIE5TRXZlbnQg
Km5zRXZlbnQgPSBuaWw7CiAgICAgZm9yIChpZCBldmVudERpY3QgaW4gX3JlbWFpbmluZ0V2ZW50
RGljdGlvbmFyaWVzLmdldCgpKSB7Ci0gICAgICAgIFJldGFpblB0cjxDR0V2ZW50UmVmPiBldmVu
dCA9IFtFdmVudFNlcmlhbGl6ZXIgY3JlYXRlRXZlbnRGb3JEaWN0aW9uYXJ5OmV2ZW50RGljdCBp
bldpbmRvdzpfd2luZG93LmdldCgpIHJlbGF0aXZlVG9UaW1lOl9zdGFydFRpbWVdOworICAgICAg
ICBhdXRvIGV2ZW50ID0gW0V2ZW50U2VyaWFsaXplciBjcmVhdGVFdmVudEZvckRpY3Rpb25hcnk6
ZXZlbnREaWN0IGluV2luZG93Ol93aW5kb3cuZ2V0KCkgcmVsYXRpdmVUb1RpbWU6X3N0YXJ0VGlt
ZV07CiAgICAgICAgIGlmIChDR0V2ZW50R2V0VGltZXN0YW1wKGV2ZW50LmdldCgpKSA8IG1hY2hf
YWJzb2x1dGVfdGltZSgpKSB7CiAgICAgICAgICAgICBuc0V2ZW50ID0gW05TRXZlbnQgZXZlbnRX
aXRoQ0dFdmVudDpldmVudC5nZXQoKV07CiAgICAgICAgICAgICBbTlNBcHAgcG9zdEV2ZW50Om5z
RXZlbnQgYXRTdGFydDpOT107CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJ
U2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250ZXh0LmNwcAppbmRleCAyNzA1YjM5YTI0N2Rk
MjU3ZDVjNmQ1OGM0NzBlOTYzM2E5MTlkZmQ0Li41ZGNmYjdjOTg3MmYzOTlmMTU2NzRkOTcxMGRl
YjI4OWIyZDEyMThkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0
Q29udGV4dC9VSVNjcmlwdENvbnRleHQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
VUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udGV4dC5jcHAKQEAgLTI2LDkgKzI2LDggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJVSVNjcmlwdENvbnRleHQuaCIKIAorI2luY2x1
ZGUgIkpTQmFzaWNzLmgiCiAjaW5jbHVkZSAiVUlTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNWYWx1ZVJlZi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXVFI7CkBAIC00MywxMSArNDIsNyBAQCBVSVNjcmlwdENvbnRleHQ6OlVJU2Ny
aXB0Q29udGV4dChVSVNjcmlwdENvbnRleHREZWxlZ2F0ZSYgZGVsZWdhdGUsIFVJU2NyaXB0Q29u
dAogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKIHsKICAgICBtX2NvbnRyb2xsZXIgPSBmYWN0
b3J5KCp0aGlzKTsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdl
dEdsb2JhbE9iamVjdChtX2NvbnRleHQuZ2V0KCkpOwotCi0gICAgSlNWYWx1ZVJlZiBleGNlcHRp
b24gPSBudWxscHRyOwotICAgIG1fY29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChtX2NvbnRl
eHQuZ2V0KCksIGdsb2JhbE9iamVjdCwgJmV4Y2VwdGlvbik7CisgICAgbV9jb250cm9sbGVyLT5t
YWtlV2luZG93T2JqZWN0KG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIFVJU2NyaXB0Q29udGV4dDo6
flVJU2NyaXB0Q29udGV4dCgpCkBAIC02Niw5ICs2MSw3IEBAIHZvaWQgVUlTY3JpcHRDb250ZXh0
OjpydW5VSVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgdW5zaWduZWQgc2NyaXB0Q2FsbGJh
Y2tJCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSBKU0V2YWx1YXRlU2NyaXB0KG1fY29udGV4dC5n
ZXQoKSwgc3RyaW5nUmVmLmdldCgpLCAwLCAwLCAxLCAmZXhjZXB0aW9uKTsKICAgICAKICAgICBp
ZiAoIWhhc091dHN0YW5kaW5nQXN5bmNUYXNrcygpKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYgc3Ry
aW5naWZ5RXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBzdHJpbmdpZmllZCA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkobV9jb250ZXh0LmdldCgpLCByZXN1bHQsICZzdHJpbmdp
ZnlFeGNlcHRpb24pKTsKLSAgICAgICAgcmVxdWVzdFVJU2NyaXB0Q29tcGxldGlvbihzdHJpbmdp
ZmllZC5nZXQoKSk7CisgICAgICAgIHJlcXVlc3RVSVNjcmlwdENvbXBsZXRpb24oY3JlYXRlSlNT
dHJpbmcobV9jb250ZXh0LmdldCgpLCByZXN1bHQpLmdldCgpKTsKICAgICAgICAgdHJ5VG9Db21w
bGV0ZVVJU2NyaXB0Rm9yQ3VycmVudFBhcmVudENhbGxiYWNrKCk7CiAgICAgfQogfQpAQCAtMTg5
LDEwICsxODIsMTAgQEAgSlNPYmplY3RSZWYgVUlTY3JpcHRDb250ZXh0OjpvYmplY3RGcm9tUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpIGNvbnMKIHsKICAgICBKU09iamVjdFJl
ZiBvYmplY3QgPSBKU09iamVjdE1ha2UobV9jb250ZXh0LmdldCgpLCBudWxscHRyLCBudWxscHRy
KTsKIAotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkobV9jb250ZXh0LmdldCgpLCBvYmplY3QsIGFk
b3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZWZ0IikpLmdldCgpLCBKU1ZhbHVl
TWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QueCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1
dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQo
KSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidG9wIikpLmdl
dCgpLCBKU1ZhbHVlTWFrZU51bWJlcihtX2NvbnRleHQuZ2V0KCksIHJlY3QueSgpKSwga0pTUHJv
cGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KG1f
Y29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
Zygid2lkdGgiKSkuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKG1fY29udGV4dC5nZXQoKSwgcmVj
dC53aWR0aCgpKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBudWxscHRyKTsKLSAgICBKU09i
amVjdFNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCBhZG9wdChKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVpZ2h0IikpLmdldCgpLCBKU1ZhbHVlTWFrZU51bWJlciht
X2NvbnRleHQuZ2V0KCksIHJlY3QuaGVpZ2h0KCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUs
IG51bGxwdHIpOworICAgIHNldFByb3BlcnR5KG1fY29udGV4dC5nZXQoKSwgb2JqZWN0LCAibGVm
dCIsIHJlY3QueCgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVjdCwg
InRvcCIsIHJlY3QueSgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0KCksIG9iamVj
dCwgIndpZHRoIiwgcmVjdC53aWR0aCgpKTsKKyAgICBzZXRQcm9wZXJ0eShtX2NvbnRleHQuZ2V0
KCksIG9iamVjdCwgImhlaWdodCIsIHJlY3QuaGVpZ2h0KCkpOwogICAgIAogICAgIHJldHVybiBv
YmplY3Q7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29u
dGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3Jp
cHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGE1YThkN2NjMmZjYzlmZWQ2ZmY1
NTIyY2M5ZWQ2N2NlNDI5OGNhODEuLjM1MjRiNjBiZDgxY2Q5Y2FiMzEwYWExYjU2OGYyM2ZkNTE2
OGRjZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0
L1VJU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3Jp
cHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvck91
dHN0YW5kaW5nQ2FsbGJhY2tzKCkgeyAvKiBub3RJbXBsZW1lbnRlZCgpOyAqLyB9CiAKLSAgICB2
b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmpl
Y3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2JqZWN0KEpT
Q29udGV4dFJlZik7CiAKICAgICAvLyBUcmFuc2FjdGlvbiBoZWxwZXJzCiAgICAgCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRy
b2xsZXJTaGFyZWQuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQv
VUlTY3JpcHRDb250cm9sbGVyU2hhcmVkLmNwcAppbmRleCBjNmViMTQwYWEzNTZjNjZkOGM0NTAy
MTRlN2RiMmM4NWFkM2E3MWEzLi5iZmY0ZjM0MzNkYmQyOTU3NWQ2MjViNzM5NGU2ZDlkMzgxY2Fl
YzI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRyb2xsZXJTaGFyZWQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
VUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlclNoYXJlZC5jcHAKQEAgLTQxLDIwICs0
MSwxNSBAQCBEZXZpY2VPcmllbnRhdGlvbiogdG9EZXZpY2VPcmllbnRhdGlvbihKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKICAgICAgICAgRGV2aWNlT3JpZW50YXRpb246
OkxhbmRzY2FwZUxlZnQsCiAgICAgICAgIERldmljZU9yaWVudGF0aW9uOjpMYW5kc2NhcGVSaWdo
dAogICAgIH07Ci0KLSAgICBhdXRvIG9wdGlvbiA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKLSAgICBpZiAob3B0aW9uLT5zdHJpbmcoKSA9PSAi
cG9ydHJhaXQiKQorICAgIGF1dG8gb3B0aW9uID0gY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFs
dWUpOworICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwg
InBvcnRyYWl0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzBdOwotCi0gICAgaWYgKG9wdGlv
bi0+c3RyaW5nKCkgPT0gInBvcnRyYWl0LXVwc2lkZWRvd24iKQorICAgIGlmIChKU1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbi5nZXQoKSwgInBvcnRyYWl0LXVwc2lkZWRvd24iKSkK
ICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbMV07Ci0KLSAgICBpZiAob3B0aW9uLT5zdHJpbmcoKSA9
PSAibGFuZHNjYXBlLWxlZnQiKQorICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG9wdGlvbi5nZXQoKSwgImxhbmRzY2FwZS1sZWZ0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVz
WzJdOwotCi0gICAgaWYgKG9wdGlvbi0+c3RyaW5nKCkgPT0gImxhbmRzY2FwZS1yaWdodCIpCisg
ICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uLmdldCgpLCAibGFuZHNj
YXBlLXJpZ2h0IikpCiAgICAgICAgIHJldHVybiAmdmFsdWVzWzNdOwotCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKQEAgLTY4LDkgKzYzLDkgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OmNv
bnRleHREZXN0cm95ZWQoKQogICAgIG1fY29udGV4dCA9IG51bGxwdHI7CiB9CiAKLXZvaWQgVUlT
Y3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgVUlT
Y3JpcHRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQog
ewotICAgIHNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgInVpQ29udHJvbGxlciIs
IHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29u
dGV4dCwgInVpQ29udHJvbGxlciIsIHRoaXMpOwogfQogCiBKU0NsYXNzUmVmIFVJU2NyaXB0Q29u
dHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFy
ZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbSBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFy
ZWQvY29jb2EvTGF5b3V0VGVzdFNwZWxsQ2hlY2tlci5tbQppbmRleCA4ZmMwMjExNjdhYWMyMjE1
MzZhMTc2NmU1MzkwMTlmZTY0NDA1OGUxLi5kODZlZjk1NmY4MGRmYTE5MjI5NTRlMTE3OWFmMmIz
NTJiOTgzOTI0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL2NvY29hL0xheW91
dFRlc3RTcGVsbENoZWNrZXIubW0KKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9jb2NvYS9M
YXlvdXRUZXN0U3BlbGxDaGVja2VyLm1tCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25m
aWcuaCIKICNpbXBvcnQgIkxheW91dFRlc3RTcGVsbENoZWNrZXIuaCIKIAotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbXBvcnQgIkpTQmFzaWNzLmgiCiAjaW1wb3J0
IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0IDx3
dGYvQmxvY2tQdHIuaD4KQEAgLTIxMiwxMSArMjEyLDExIEBAIC0gKHZvaWQpc2V0UmVzdWx0czoo
VGV4dENoZWNraW5nUmVzdWx0c0RpY3Rpb25hcnkgKilyZXN1bHRzCiAtICh2b2lkKXNldFJlc3Vs
dHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFsdWUgaW5Db250ZXh0OihKU0NvbnRl
eHRSZWYpY29udGV4dAogewogICAgIGF1dG8gcmVzdWx0c09iamVjdCA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCByZXN1bHRzVmFsdWUsIG51bGxwdHIpOwotICAgIGF1dG8gZnJvbVByb3BlcnR5
TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJmcm9tIikpOwotICAg
IGF1dG8gdG9Qcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygidG8iKSk7Ci0gICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoInR5cGUiKSk7Ci0gICAgYXV0byByZXBsYWNlbWVudFByb3BlcnR5
TmFtZSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJyZXBsYWNlbWVudCIp
KTsKLSAgICBhdXRvIGRldGFpbHNQcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiZGV0YWlscyIpKTsKKyAgICBhdXRvIGZyb21Qcm9wZXJ0eU5hbWUgPSBX
VFI6OmNyZWF0ZUpTU3RyaW5nKCJmcm9tIik7CisgICAgYXV0byB0b1Byb3BlcnR5TmFtZSA9IFdU
Ujo6Y3JlYXRlSlNTdHJpbmcoInRvIik7CisgICAgYXV0byB0eXBlUHJvcGVydHlOYW1lID0gV1RS
OjpjcmVhdGVKU1N0cmluZygidHlwZSIpOworICAgIGF1dG8gcmVwbGFjZW1lbnRQcm9wZXJ0eU5h
bWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJyZXBsYWNlbWVudCIpOworICAgIGF1dG8gZGV0YWls
c1Byb3BlcnR5TmFtZSA9IFdUUjo6Y3JlYXRlSlNTdHJpbmcoImRldGFpbHMiKTsKICAgICBhdXRv
IHJlc3VsdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwog
CiAgICAgLy8gRklYTUU6IFVzaW5nIHRoZSBPYmplY3RpdmUtQyBBUEkgd291bGQgbWFrZSB0aGlz
IGxvZ2ljIGVhc2llciB0byBmb2xsb3cuCkBAIC0yMjgsMTUgKzIyOCwxMyBAQCAtICh2b2lkKXNl
dFJlc3VsdHNGcm9tSlNWYWx1ZTooSlNWYWx1ZVJlZilyZXN1bHRzVmFsdWUgaW5Db250ZXh0OihK
U0NvbnRleHRSZWYpYwogICAgICAgICBhdXRvIHJlc3VsdHNGb3JXb3JkID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgICAgIGZvciAoc2l6ZV90IHJlc3VsdElu
ZGV4ID0gMDsgcmVzdWx0SW5kZXggPCBKU1Byb3BlcnR5TmFtZUFycmF5R2V0Q291bnQocmVzdWx0
c0FycmF5UHJvcGVydHlOYW1lcyk7ICsrcmVzdWx0SW5kZXgpIHsKICAgICAgICAgICAgIGF1dG8g
cmVzdWx0c09iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCByZXN1bHRzQXJyYXksIHJlc3VsdEluZGV4LCBudWxscHRyKSwg
bnVsbHB0cik7Ci0gICAgICAgICAgICBsb25nIGZyb21WYWx1ZSA9IGxyb3VuZGwoSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVj
dCwgZnJvbVByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxwdHIpKTsKLSAgICAgICAg
ICAgIGxvbmcgdG9WYWx1ZSA9IGxyb3VuZGwoSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgdG9Qcm9wZXJ0eU5hbWUuZ2V0
KCksIG51bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBhdXRvIHR5cGVWYWx1ZSA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250
ZXh0LCByZXN1bHRzT2JqZWN0LCB0eXBlUHJvcGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwgbnVs
bHB0cikpOworICAgICAgICAgICAgbG9uZyBmcm9tVmFsdWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCBmcm9tUHJv
cGVydHlOYW1lLmdldCgpLCBudWxscHRyKSwgbnVsbHB0cik7CisgICAgICAgICAgICBsb25nIHRv
VmFsdWUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250
ZXh0LCByZXN1bHRzT2JqZWN0LCB0b1Byb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0ciksIG51bGxw
dHIpOworICAgICAgICAgICAgYXV0byB0eXBlVmFsdWUgPSBXVFI6OmNyZWF0ZUpTU3RyaW5nKGNv
bnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgcmVzdWx0c09iamVjdCwgdHlwZVBy
b3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cikpOwogICAgICAgICAgICAgYXV0byByZXBsYWNlbWVu
dFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCByZXN1bHRzT2JqZWN0LCByZXBs
YWNlbWVudFByb3BlcnR5TmFtZS5nZXQoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHJlcGxhY2VtZW50VGV4dDsKLSAgICAgICAgICAgIGlmICghSlNWYWx1
ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHJlcGxhY2VtZW50VmFsdWUpKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byByZXBsYWNlbWVudEpTU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCByZXBsYWNlbWVudFZhbHVlLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAgICAgcmVw
bGFjZW1lbnRUZXh0ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCByZXBsYWNlbWVudEpTU3RyaW5nLmdldCgpKSk7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCByZXBsYWNlbWVudFZhbHVl
KSkKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRleHQgPSBhZG9wdENGKEpTU3RyaW5nQ29w
eUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFdUUjo6Y3JlYXRlSlNTdHJpbmcoY29udGV4
dCwgcmVwbGFjZW1lbnRWYWx1ZSkuZ2V0KCkpKTsKICAgICAgICAgICAgIGF1dG8gZGV0YWlscyA9
IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogICAgICAgICAgICAgYXV0
byBkZXRhaWxzVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHJlc3VsdHNPYmpl
Y3QsIGRldGFpbHNQcm9wZXJ0eU5hbWUuZ2V0KCksIG51bGxwdHIpOwogICAgICAgICAgICAgaWYg
KCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgZGV0YWlsc1ZhbHVlKSkgewpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25zLmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0RpY3Rpb25hcnlGdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYTMzMGYw
ZmM2MjA4MzE4OGVmNzAyOTk0ZWU0ZDIxYzA5MWU0NTg1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9EaWN0aW9uYXJ5RnVuY3Rpb25zLmgKQEAgLTAsMCArMSwxODkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9u
cy5oIgorCituYW1lc3BhY2UgV1RSIHsKKworV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnlWYWx1
ZShXS1R5cGVSZWYpOworCitib29sIGJvb2xlYW5WYWx1ZShXS1R5cGVSZWYpOworYm9vbCBib29s
ZWFuVmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYpOworCitkb3VibGUgZG91Ymxl
VmFsdWUoV0tUeXBlUmVmKTsKK09wdGlvbmFsPGRvdWJsZT4gb3B0aW9uYWxEb3VibGVWYWx1ZShX
S1R5cGVSZWYpOworCitXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShXS1R5cGVSZWYpOworV1RGOjpT
dHJpbmcgdG9XVEZTdHJpbmcoV0tUeXBlUmVmKTsKKwordWludDY0X3QgdWludDY0VmFsdWUoV0tU
eXBlUmVmKTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4mKTsKKworV0tUeXBlUmVmIHZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5
KTsKKworYm9vbCBib29sZWFuVmFsdWUoV0tEaWN0aW9uYXJ5UmVmLCBjb25zdCBjaGFyKiBrZXkp
OworZG91YmxlIGRvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5KTsK
K1dLU3RyaW5nUmVmIHN0cmluZ1ZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5
KTsKK3VpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJlZiwgY29uc3QgY2hhcioga2V5
KTsKKworT3B0aW9uYWw8ZG91YmxlPiBvcHRpb25hbERvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJl
ZiwgY29uc3QgY2hhcioga2V5KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZXRWYWx1
ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIq
IGtleSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3Qg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGJv
b2wgdmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hhciogdmFsdWUpOwordm9pZCBz
ZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0
IGNoYXIqIGtleSwgdWludDY0X3QgdmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgZG91YmxlIHZh
bHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIFdLU3RyaW5nUmVmIHZhbHVlKTsKK3ZvaWQgc2V0VmFs
dWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFy
KiBrZXksIEpTU3RyaW5nUmVmIHZhbHVlKTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IFdURjo6
U3RyaW5nJiB2YWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNldFZhbHVlKGNvbnN0
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiwgY29uc3QgY2hhcioga2V5LCBj
b25zdCBPcHRpb25hbDxUPiYgdmFsdWUpOwordm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYsIGNvbnN0IGNoYXIqIGtleSwgaW50IHZhbHVlKSA9
IGRlbGV0ZTsKK3ZvaWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4mLCBjb25zdCBjaGFyKiBrZXksIHVuc2lnbmVkIHZhbHVlKSA9IGRlbGV0ZTsKK3Zv
aWQgc2V0VmFsdWUoY29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mLCBj
b25zdCBjaGFyKiBrZXksIGNvbnN0IHZvaWQqIHZhbHVlKSA9IGRlbGV0ZTsKKworaW5saW5lIGJv
b2wgYm9vbGVhblZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYg
V0tHZXRUeXBlSUQodmFsdWUpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpICYmIFdLQm9vbGVhbkdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4odmFsdWUpKTsKK30KKworaW5saW5lIGJv
b2wgYm9vbGVhblZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4mIHZhbHVlKQorewor
ICAgIHJldHVybiBib29sZWFuVmFsdWUodmFsdWUuZ2V0KCkpOworfQorCitpbmxpbmUgV0tEaWN0
aW9uYXJ5UmVmIGRpY3Rpb25hcnlWYWx1ZShXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJu
IHZhbHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSA/
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4odmFsdWUpIDogbnVsbHB0cjsKK30KKworaW5s
aW5lIGRvdWJsZSBkb3VibGVWYWx1ZShXS1R5cGVSZWYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZh
bHVlICYmIFdLR2V0VHlwZUlEKHZhbHVlKSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpID8gV0tEb3Vi
bGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4odmFsdWUpKSA6IDA7Cit9CisKK2lu
bGluZSBPcHRpb25hbDxkb3VibGU+IG9wdGlvbmFsRG91YmxlVmFsdWUoV0tUeXBlUmVmIHZhbHVl
KQoreworICAgIHJldHVybiB2YWx1ZSAmJiBXS0dldFR5cGVJRCh2YWx1ZSkgPT0gV0tEb3VibGVH
ZXRUeXBlSUQoKSA/IG1ha2VPcHRpb25hbChXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdL
RG91YmxlUmVmPih2YWx1ZSkpKSA6IFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFdLU3RyaW5n
UmVmIHN0cmluZ1ZhbHVlKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYg
V0tHZXRUeXBlSUQodmFsdWUpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkgPyBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4odmFsdWUpIDogbnVsbHB0cjsKK30KKworaW5saW5lIFdURjo6U3RyaW5nIHRv
V1RGU3RyaW5nKFdLVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3Ry
aW5nVmFsdWUodmFsdWUpKTsKK30KKworaW5saW5lIHVpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLVHlw
ZVJlZiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgJiYgV0tHZXRUeXBlSUQodmFsdWUpID09
IFdLVUludDY0R2V0VHlwZUlEKCkgPyBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPih2YWx1ZSkpIDogMDsKK30KKworaW5saW5lIHVpbnQ2NF90IHVpbnQ2NFZhbHVlKGNv
bnN0IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4mIHZhbHVlKQoreworICAgIHJldHVybiB1aW50NjRW
YWx1ZSh2YWx1ZS5nZXQoKSk7Cit9CisKK2lubGluZSBXS1R5cGVSZWYgdmFsdWUoV0tEaWN0aW9u
YXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICByZXR1cm4gZGljdGlv
bmFyeSA/IFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoZGljdGlvbmFyeSwgdG9XSyhrZXkpLmdl
dCgpKSA6IG51bGxwdHI7Cit9CisKK2lubGluZSBib29sIGJvb2xlYW5WYWx1ZShXS0RpY3Rpb25h
cnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBib29sZWFu
VmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGluZSBkb3VibGUgZG91Ymxl
VmFsdWUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAg
ICByZXR1cm4gZG91YmxlVmFsdWUodmFsdWUoZGljdGlvbmFyeSwga2V5KSk7Cit9CisKK2lubGlu
ZSBXS1N0cmluZ1JlZiBzdHJpbmdWYWx1ZShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29u
c3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBzdHJpbmdWYWx1ZSh2YWx1ZShkaWN0aW9uYXJ5
LCBrZXkpKTsKK30KKworaW5saW5lIHVpbnQ2NF90IHVpbnQ2NFZhbHVlKFdLRGljdGlvbmFyeVJl
ZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVl
KHZhbHVlKGRpY3Rpb25hcnksIGtleSkpOworfQorCitpbmxpbmUgT3B0aW9uYWw8ZG91YmxlPiBv
cHRpb25hbERvdWJsZVZhbHVlKFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXkpCit7CisgICAgcmV0dXJuIG9wdGlvbmFsRG91YmxlVmFsdWUodmFsdWUoZGljdGlvbmFy
eSwga2V5KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2V0VmFsdWUoY29uc3Qg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rpb25hcnksIGNvbnN0IGNo
YXIqIGtleSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIHZhbHVlKQoreworICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwgdG9XSyhrZXkpLmdldCgpLCB2YWx1ZS5nZXQoKSk7
Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0YWluUHRyPFdLTXV0YWJsZURp
Y3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXksIEpTU3RyaW5nUmVmIHZh
bHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgdG9XSyh2YWx1ZSkpOworfQor
CitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBXS1N0cmluZ1JlZiB2YWx1ZSkK
K3sKKyAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGRpY3Rpb25hcnkuZ2V0KCksIHRvV0soa2V5KS5n
ZXQoKSwgdmFsdWUpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBi
b29sIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUodmFsdWUpKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFy
KiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtl
eSwgdG9XSyh2YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFp
blB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5
LCBjb25zdCBXVEY6OlN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0VmFsdWUoZGljdGlvbmFyeSwg
a2V5LCB0b1dLKHZhbHVlKSk7Cit9CisKK2lubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFdLUmV0
YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+JiBkaWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBr
ZXksIHVpbnQ2NF90IHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnksIGtleSwgYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpKTsKK30KKworaW5saW5lIHZvaWQgc2V0VmFsdWUo
Y29uc3QgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4mIGRpY3Rpb25hcnksIGNv
bnN0IGNoYXIqIGtleSwgZG91YmxlIHZhbHVlKQoreworICAgIHNldFZhbHVlKGRpY3Rpb25hcnks
IGtleSwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBzZXRWYWx1ZShjb25zdCBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5LCBjb25zdCBPcHRpb25hbDxUPiYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5LCBr
ZXksICp2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9FdmVudFNlbmRlclByb3h5LmggYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0V2ZW50U2VuZGVyUHJveHkuaAppbmRleCA2NDQ3NjAzOTY4ZDIwNjQyMGJlYjk0Mjc3M2Iy
NGI3ODk2NDFiNWM5Li5mYTNhODhkM2FmMzkzNGQ0Yzg4MjBiZjUwZmU5Zjg5N2IzOGZkMDRhIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaApAQCAtMTEyLDE4ICsx
MTIsMTkgQEAgcHJpdmF0ZToKICAgICBQT0lOVCBwb3NpdGlvbkluUG9pbnQoKSBjb25zdCB7IHJl
dHVybiB7IHN0YXRpY19jYXN0PExPTkc+KG1fcG9zaXRpb24ueCksIHN0YXRpY19jYXN0PExPTkc+
KG1fcG9zaXRpb24ueSkgfTsgfQogI2VuZGlmCiAKLSAgICBkb3VibGUgbV90aW1lOwotICAgIFdL
UG9pbnQgbV9wb3NpdGlvbjsKLSAgICBib29sIG1fbGVmdE1vdXNlQnV0dG9uRG93bjsKLSAgICBp
bnQgbV9jbGlja0NvdW50OwotICAgIGRvdWJsZSBtX2NsaWNrVGltZTsKLSAgICBXS1BvaW50IG1f
Y2xpY2tQb3NpdGlvbjsKLSAgICBXS0V2ZW50TW91c2VCdXR0b24gbV9jbGlja0J1dHRvbjsKKyAg
ICBkb3VibGUgbV90aW1lIHsgMCB9OworICAgIFdLUG9pbnQgbV9wb3NpdGlvbiB7IH07CisgICAg
Ym9vbCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24geyBmYWxzZSB9OworICAgIGludCBtX2NsaWNrQ291
bnQgeyAwIH07CisgICAgZG91YmxlIG1fY2xpY2tUaW1lIHsgMCB9OworICAgIFdLUG9pbnQgbV9j
bGlja1Bvc2l0aW9uIHsgfTsKKyAgICBXS0V2ZW50TW91c2VCdXR0b24gbV9jbGlja0J1dHRvbiB7
IGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbiB9OwogICAgIHVuc2lnbmVkIG1fbW91c2VCdXR0
b25zQ3VycmVudGx5RG93biB7IDAgfTsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpbnQgZXZl
bnROdW1iZXI7Ci0jZWxpZiBQTEFURk9STShXUEUpCi0gICAgdWludDMyX3QgbV9idXR0b25TdGF0
ZTsKKyAgICBpbnQgZXZlbnROdW1iZXIgeyAwIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShXUEUp
CisgICAgdWludDMyX3QgbV9idXR0b25TdGF0ZSB7IDAgfTsKICAgICBWZWN0b3I8c3RydWN0IHdw
ZV9pbnB1dF90b3VjaF9ldmVudF9yYXc+IG1fdG91Y2hFdmVudHM7CiAgICAgSGFzaFNldDx1bnNp
Z25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVuc2lnbmVkPj4gbV91cGRhdGVkVG91Y2hFdmVudHM7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKaW5kZXgg
NmY5M2NhMjczMDMwZjU3NzZlMzE4ZjllNDU2OTAyMmNlZTE0YjkwZC4uYzQyNTFiMzAxZmI1NTRj
N2VhZTYwMzE2Mjc1OTZmNTBiNzhhMjU5ZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9HZW9sb2NhdGlvblByb3ZpZGVyTW9jay5jcHAKQEAgLTYzLDkgKzYzLDkgQEAgR2VvbG9j
YXRpb25Qcm92aWRlck1vY2s6On5HZW9sb2NhdGlvblByb3ZpZGVyTW9jaygpCiAgICAgV0tHZW9s
b2NhdGlvbk1hbmFnZXJTZXRQcm92aWRlcihtX2dlb2xvY2F0aW9uTWFuYWdlciwgMCk7CiB9CiAK
LXZvaWQgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1
ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJs
ZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcs
IGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBib29sIHByb3ZpZGVzRmxvb3JMZXZl
bCwgZG91YmxlIGZsb29yTGV2ZWwpCit2b2lkIEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQ
b3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFj
eSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFj
Y3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQs
IE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAgICBtX3Bvc2l0aW9uLmFkb3B0KFdL
R2VvbG9jYXRpb25Qb3NpdGlvbkNyZWF0ZV9jKFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VF
cG9jaCgpLnNlY29uZHMoKSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVz
QWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNj
dXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHBy
b3ZpZGVzRmxvb3JMZXZlbCwgZmxvb3JMZXZlbCkpOworICAgIG1fcG9zaXRpb24uYWRvcHQoV0tH
ZW9sb2NhdGlvblBvc2l0aW9uQ3JlYXRlX2MoV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVw
b2NoKCkuc2Vjb25kcygpLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGUu
aGFzVmFsdWUoKSwgYWx0aXR1ZGUudmFsdWVPcigwKSwgYWx0aXR1ZGVBY2N1cmFjeS5oYXNWYWx1
ZSgpLCBhbHRpdHVkZUFjY3VyYWN5LnZhbHVlT3IoMCksIGhlYWRpbmcuaGFzVmFsdWUoKSwgaGVh
ZGluZy52YWx1ZU9yKDApLCBzcGVlZC5oYXNWYWx1ZSgpLCBzcGVlZC52YWx1ZU9yKDApLCBmbG9v
ckxldmVsLmhhc1ZhbHVlKCksIGZsb29yTGV2ZWwudmFsdWVPcigwKSkpOwogCiAgICAgbV9oYXNF
cnJvciA9IGZhbHNlOwogICAgIG1fZXJyb3JNZXNzYWdlLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJNb2NrLmgKaW5kZXggMWVkNGFkZjli
MzkzOTNhMzMzYWEzMjUxMDk3YjllM2FhNDJjYzM2Yi4uOWJmNjMzODRhZTI3ZGIyOGM1ZjU0MDU2
ODViODhmNzViZWQ3YjUxNiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HZW9s
b2NhdGlvblByb3ZpZGVyTW9jay5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9j
YXRpb25Qcm92aWRlck1vY2suaApAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgR2VvbG9j
YXRpb25Qcm92aWRlck1vY2soV0tDb250ZXh0UmVmKTsKICAgICB+R2VvbG9jYXRpb25Qcm92aWRl
ck1vY2soKTsKIAotICAgIHZvaWQgc2V0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUg
bG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91Ymxl
IGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRl
QWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92
aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUg
Zmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJs
ZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwg
T3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRp
bmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7
CiAgICAgdm9pZCBzZXRQb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JN
ZXNzYWdlKTsKIAogICAgIHZvaWQgc3RhcnRVcGRhdGluZyhXS0dlb2xvY2F0aW9uTWFuYWdlclJl
Zik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmluZGV4IDZhMDhhYWE2YjYzOWYz
ZjU1YzhjNDZhOTRjMmZlOTVkYjU0N2Y3ODIuLmFkNGEyNWFlNWIwN2I3NThlMmUwYTkxZmFmMWI1
MjgzMDNlYjg0OGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCkBAIC03NSw5
ICs3NSw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnVwZGF0ZUlzb2xhdGVkVHJl
ZU1vZGUoKQogfQogI2VuZGlmCiAKLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om1ha2VX
aW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVj
dCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0
eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJhY2Nlc3NpYmlsaXR5Q29udHJvbGxlciIsIHRoaXMs
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUsIGV4Y2VwdGlvbik7CisgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwg
ImFjY2Vzc2liaWxpdHlDb250cm9sbGVyIiwgdGhpcyk7CiB9CiAKIEpTQ2xhc3NSZWYgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCkBAIC05NiwxNyArOTYsMTcgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5jZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKKwogUmVmPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7Ci0gICAgV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7
CisgICAgYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpOwogICAgIFBsYXRmb3JtVUlFbGVtZW50IHJvb3QgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJ
RWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7Ci0KICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHJvb3QpOwogfQogCiBSZWY8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KCkK
IHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgUGxhdGZvcm1VSUVsZW1lbnQgZm9jdXNlZEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Rm9jdXNl
ZE9iamVjdChwYWdlKSk7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0
ZShmb2N1c2VkRWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKaW5kZXgg
NjZjMzQzODIyYmJiYzY5NTk5YmFmNmE0NzY2MGExMzg3ZWUyNTFiMC4uZDljMmYxMjZmODcxY2Uy
ZWVmMDdiMDAzNTgwZjZkYWNlNmM1NDIzNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
aApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcj4gY3JlYXRlKCk7CiAgICAgfkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCk7CiAK
LSAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5k
b3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgdm9pZCBtYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZik7CiAgICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygp
OwogICAgIAogICAgIC8vIEVuaGFuY2VkIGFjY2Vzc2liaWxpdHkuCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JU
ZXN0UnVubmVyLnBtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQppbmRleCBiOWY1ZWVmZmE0NjQ5ZjQxN2Y4
MmIxNjE3MDlmNGFiYWUwOTk5MWYyLi41MmUzZWZhOTkxYjlkZDZjMTc1ZGJiOGU0MTBlNmZlY2Zh
YzMwMTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIu
cG0KQEAgLTI2MSw4ICsyNjEsNyBAQCAke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfSogdG8ke2lt
cGxlbWVudGF0aW9uQ2xhc3NOYW1lfShKU0NvbnRleHRSZWYgY29udGV4dCwgSgogCiBKU0NsYXNz
UmVmICR7Y2xhc3NOYW1lfTo6JHtjbGFzc1JlZkdldHRlcn0oKQogewotICAgIHN0YXRpYyBKU0Ns
YXNzUmVmIGpzQ2xhc3M7Ci0gICAgaWYgKCFqc0NsYXNzKSB7CisgICAgc3RhdGljIGNvbnN0IEpT
Q2xhc3NSZWYganNDbGFzcyA9IFtdIHsKICAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5p
dGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OwogICAgICAgICBkZWZpbml0aW9uLmNsYXNz
TmFtZSA9ICJAe1skdHlwZS0+bmFtZV19IjsKICAgICAgICAgZGVmaW5pdGlvbi5wYXJlbnRDbGFz
cyA9IEB7WyRzZWxmLT5fcGFyZW50Q2xhc3NSZWZHZXR0ZXJFeHByZXNzaW9uKCRpbnRlcmZhY2Up
XX07CkBAIC0yNzQsOCArMjczLDggQEAgRU9GCiAgICAgcHVzaChAY29udGVudHMsICIgICAgICAg
IGRlZmluaXRpb24uZmluYWxpemUgPSBmaW5hbGl6ZTtcbiIpIHVubGVzcyBfcGFyZW50SW50ZXJm
YWNlKCRpbnRlcmZhY2UpOwogCiAgICAgcHVzaChAY29udGVudHMsIDw8RU9GKTsKLSAgICAgICAg
anNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwotICAgIH0KKyAgICAgICAgcmV0
dXJuIEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0oKTsKICAgICByZXR1cm4ganND
bGFzczsKIH0KIApAQCAtNDc3LDEwICs0NzYsMTEgQEAgc3ViIF9wbGF0Zm9ybVR5cGVDb25zdHJ1
Y3RvcgogewogICAgIG15ICgkc2VsZiwgJHR5cGUsICRhcmd1bWVudE5hbWUpID0gQF87CiAKLSAg
ICByZXR1cm4gIkpTVmFsdWVUb051bGxhYmxlQm9vbGVhbihjb250ZXh0LCAkYXJndW1lbnROYW1l
KSIgaWYgJHR5cGUtPm5hbWUgZXEgImJvb2xlYW4iICYmICR0eXBlLT5pc051bGxhYmxlOworICAg
IHJldHVybiAidG9PcHRpb25hbEJvb2woY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICR0eXBl
LT5uYW1lIGVxICJib29sZWFuIiAmJiAkdHlwZS0+aXNOdWxsYWJsZTsKICAgICByZXR1cm4gIkpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICR0eXBlLT5uYW1lIGVx
ICJib29sZWFuIjsKICAgICByZXR1cm4gIiRhcmd1bWVudE5hbWUiIGlmICR0eXBlLT5uYW1lIGVx
ICJvYmplY3QiOwotICAgIHJldHVybiAiYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCAkYXJndW1lbnROYW1lLCBudWxscHRyKSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNT
dHJpbmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gImNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsICRh
cmd1bWVudE5hbWUpIiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkdHlw
ZSk7CisgICAgcmV0dXJuICJ0b09wdGlvbmFsRG91YmxlKGNvbnRleHQsICRhcmd1bWVudE5hbWUp
IiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgJiYgJHR5
cGUtPmlzTnVsbGFibGU7CiAgICAgcmV0dXJuICJKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgJGFy
Z3VtZW50TmFtZSwgbnVsbHB0cikiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNQcmltaXRp
dmVUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gInRvIiAuIF9pbXBsZW1lbnRhdGlvbkNsYXNzTmFt
ZSgkdHlwZSkgLiAiKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIjsKIH0KQEAgLTQ5OSwxOCArNDk5
LDE2IEBAIHN1YiBfcGxhdGZvcm1UeXBlVmFyaWFibGVEZWNsYXJhdGlvbgogICAgICAgICAiSlNW
YWx1ZVJlZiIgPT4gMSwKICAgICApOwogCi0gICAgbXkgJG51bGxWYWx1ZSA9ICIwIjsKKyAgICBt
eSAkbnVsbFZhbHVlID0gIm51bGxwdHIiOwogICAgIGlmICgkcGxhdGZvcm1UeXBlIGVxICJKU1Zh
bHVlUmVmIikgewogICAgICAgICAkbnVsbFZhbHVlID0gIkpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpIjsKLSAgICB9IGVsc2lmIChkZWZpbmVkICRub25Qb2ludGVyVHlwZXN7JHBsYXRmb3Jt
VHlwZX0gJiYgJHBsYXRmb3JtVHlwZSBuZSAiZG91YmxlIikgewotICAgICAgICAkbnVsbFZhbHVl
ID0gIiRwbGF0Zm9ybVR5cGUoKSI7CisgICAgfSBlbHNpZiAoZGVmaW5lZCAkbm9uUG9pbnRlclR5
cGVzeyRwbGF0Zm9ybVR5cGV9KSB7CisgICAgICAgICRudWxsVmFsdWUgPSAkdHlwZS0+aXNOdWxs
YWJsZSA/ICJXVEY6Om51bGxvcHQiIDogIiRwbGF0Zm9ybVR5cGUoKSI7CiAgICAgfQogCi0gICAg
JHBsYXRmb3JtVHlwZSAuPSAiKiIgdW5sZXNzIGRlZmluZWQgJG5vblBvaW50ZXJUeXBlc3skcGxh
dGZvcm1UeXBlfTsKLQotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAkdmFyaWFibGVOYW1lID0g
JGNvbmRpdGlvbiAmJiAkY29uc3RydWN0b3I7IiBpZiAkY29uZGl0aW9uICYmICRwbGF0Zm9ybVR5
cGUgZXEgImJvb2wiOwotICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAkdmFyaWFibGVOYW1lID0g
JGNvbmRpdGlvbiA/ICRjb25zdHJ1Y3RvciA6ICRudWxsVmFsdWU7IiBpZiAkY29uZGl0aW9uOwot
ICAgIHJldHVybiAiJHBsYXRmb3JtVHlwZSAkdmFyaWFibGVOYW1lID0gJGNvbnN0cnVjdG9yOyI7
CisgICAgcmV0dXJuICJib29sICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uICYmICRjb25zdHJ1
Y3RvcjsiIGlmICRjb25kaXRpb24gJiYgJHBsYXRmb3JtVHlwZSBlcSAiYm9vbCI7CisgICAgcmV0
dXJuICJhdXRvICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uID8gJGNvbnN0cnVjdG9yIDogJG51
bGxWYWx1ZTsiIGlmICRjb25kaXRpb247CisgICAgcmV0dXJuICJhdXRvICR2YXJpYWJsZU5hbWUg
PSAkY29uc3RydWN0b3I7IjsKIH0KIAogc3ViIF9yZXR1cm5FeHByZXNzaW9uCkBAIC01MTgsMTEg
KzUxNiwxMSBAQCBzdWIgX3JldHVybkV4cHJlc3Npb24KICAgICBteSAoJHNlbGYsICRyZXR1cm5U
eXBlLCAkZXhwcmVzc2lvbikgPSBAXzsKIAogICAgIHJldHVybiAiSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCkiIGlmICRyZXR1cm5UeXBlLT5uYW1lIGVxICJ1bmRlZmluZWQiOwotICAgIHJl
dHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuT3JOdWxsKGNvbnRleHQsICR7ZXhwcmVzc2lvbn0pIiBp
ZiAkcmV0dXJuVHlwZS0+bmFtZSBlcSAiYm9vbGVhbiIgJiYgJHJldHVyblR5cGUtPmlzTnVsbGFi
bGU7CisgICAgcmV0dXJuICJtYWtlVmFsdWUoY29udGV4dCwgJHtleHByZXNzaW9ufSkiIGlmICRy
ZXR1cm5UeXBlLT5uYW1lIGVxICJib29sZWFuIiAmJiAkcmV0dXJuVHlwZS0+aXNOdWxsYWJsZTsK
ICAgICByZXR1cm4gIkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAke2V4cHJlc3Npb259KSIg
aWYgJHJldHVyblR5cGUtPm5hbWUgZXEgImJvb2xlYW4iOwogICAgIHJldHVybiAiJHtleHByZXNz
aW9ufSIgaWYgJHJldHVyblR5cGUtPm5hbWUgZXEgIm9iamVjdCI7CiAgICAgcmV0dXJuICJKU1Zh
bHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJCRzZWxme2NvZGVHZW5l
cmF0b3J9LT5Jc1ByaW1pdGl2ZVR5cGUoJHJldHVyblR5cGUpOwotICAgIHJldHVybiAiSlNWYWx1
ZU1ha2VTdHJpbmdPck51bGwoY29udGV4dCwgJHtleHByZXNzaW9ufS5nZXQoKSkiIGlmICQkc2Vs
Zntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRyZXR1cm5UeXBlKTsKKyAgICByZXR1cm4g
Im1ha2VWYWx1ZShjb250ZXh0LCAke2V4cHJlc3Npb259LmdldCgpKSIgaWYgJCRzZWxme2NvZGVH
ZW5lcmF0b3J9LT5Jc1N0cmluZ1R5cGUoJHJldHVyblR5cGUpOwogICAgIHJldHVybiAidG9KUyhj
b250ZXh0LCBXVEY6OmdldFB0cigke2V4cHJlc3Npb259KSkiOwogfQogCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIu
aWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0
UnVubmVyLmlkbAppbmRleCBmYmVmMzk2ZjVmNmYzYmZmNGY5OWM4YTU2YTZlNjJhYzAxNDBmZmE0
Li5mMzdlMDA2Nzc1YjhlMzA2MWM3Y2VjOGY5YjVlZjc4ODYxODA5MTBhIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIu
aWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3Mv
VGVzdFJ1bm5lci5pZGwKQEAgLTIxNSw3ICsyMTUsNyBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7
CiAKICAgICAvLyBHZW9sb2NhdGlvbgogICAgIHVuZGVmaW5lZCBzZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24oYm9vbGVhbiB2YWx1ZSk7Ci0gICAgdW5kZWZpbmVkIHNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5
LCBvcHRpb25hbCBvYmplY3QgYWx0aXR1ZGUsIG9wdGlvbmFsIG9iamVjdCBhbHRpdHVkZUFjY3Vy
YWN5LCBvcHRpb25hbCBvYmplY3QgaGVhZGluZywgb3B0aW9uYWwgb2JqZWN0IHNwZWVkLCBvcHRp
b25hbCBvYmplY3QgZmxvb3JMZXZlbCk7CisgICAgdW5kZWZpbmVkIHNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5LCBvcHRpb25hbCBkb3VibGU/IGFsdGl0dWRlLCBvcHRpb25hbCBkb3VibGU/IGFsdGl0dWRl
QWNjdXJhY3ksIG9wdGlvbmFsIGRvdWJsZT8gaGVhZGluZywgb3B0aW9uYWwgZG91YmxlPyBzcGVl
ZCwgb3B0aW9uYWwgZG91YmxlPyBmbG9vckxldmVsKTsKICAgICB1bmRlZmluZWQgc2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKERPTVN0cmluZyBlcnJvck1lc3NhZ2Up
OwogICAgIGJvb2xlYW4gaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCk7CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29u
dHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50
U2VuZGluZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDU1M2ZkMDVlZjE2OWYzNTIzYTA0MzFmMTMxNzQy
ZmJjMjIxNzA0MDkuLjQ3MTI4NzgwNmE1Y2Q0NjFkNTFlMDljYmUxOWI4YTUwYWIwZjQ3NTMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5k
aW5nQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcApAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oIgogCisj
aW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxl
LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAjaW5jbHVkZSAiSlNFdmVudFNl
bmRpbmdDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVk
ZSA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlRnJhbWUuaD4K
ICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oPgpAQCAtNTIsNiArNTIsNyBA
QCBzdHJ1Y3QgTWVudUl0ZW1Qcml2YXRlRGF0YSB7CiB9OwogCiAjaWYgRU5BQkxFKENPTlRFWFRf
TUVOVVMpCisKIHN0YXRpYyBKU1ZhbHVlUmVmIG1lbnVJdGVtQ2xpY2tDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKIHsKICAgICBNZW51SXRlbVByaXZh
dGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJdGVtUHJpdmF0ZURhdGEqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtNjIsNyArNjMsNyBAQCBzdGF0aWMg
SlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNrQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmLCBKU09iagogc3RhdGljIEpTVmFsdWVSZWYgZ2V0TWVudUl0ZW1UaXRsZUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIE1lbnVJdGVtUHJp
dmF0ZURhdGEqIHByaXZhdGVEYXRhID0gc3RhdGljX2Nhc3Q8TWVudUl0ZW1Qcml2YXRlRGF0YSo+
KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gd2tUaXRsZSA9IGFkb3B0V0soV0tDb250ZXh0TWVudUl0ZW1Db3B5VGl0bGUocHJpdmF0ZURh
dGEtPm1faXRlbS5nZXQoKSkpOworICAgIGF1dG8gd2tUaXRsZSA9IGFkb3B0V0soV0tDb250ZXh0
TWVudUl0ZW1Db3B5VGl0bGUocHJpdmF0ZURhdGEtPm1faXRlbS5nZXQoKSkpOwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHdrVGl0bGUpLmdldCgpKTsKIH0KIApA
QCAtNzIsMTkgKzczLDEzIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldE1lbnVJdGVtQ2hpbGRyZW5D
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYKIHsKICAgICBNZW51SXRl
bVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PE1lbnVJdGVtUHJpdmF0ZURh
dGEqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CiAgICAgYXV0byBjaGlsZHJlbiA9IGFk
b3B0V0soV0tDb250ZXh0TWVudUNvcHlTdWJtZW51SXRlbXMocHJpdmF0ZURhdGEtPm1faXRlbS5n
ZXQoKSkpOwotCi0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2JqZWN0TWFrZUFycmF5
KGNvbnRleHQsIDAsIDAsIDApOwotICAgIGlmICghV0tBcnJheUdldFNpemUoY2hpbGRyZW4uZ2V0
KCkpKQotICAgICAgICByZXR1cm4gYXJyYXlSZXN1bHQ7Ci0KLSAgICBKU09iamVjdFJlZiBhcnJh
eU9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcnJheVJlc3VsdCwgMCk7CisgICAg
YXV0byBhcnJheSA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgV0tBcnJheUdldFNpemUoY2hpbGRyZW4uZ2V0KCkpOyArK2kp
IHsKICAgICAgICAgYXV0byBpdGVtID0gc3RhdGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+
KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZHJlbi5nZXQoKSwgaSkpOwogICAgICAgICBhdXRv
KiBwcml2YXRlRGF0YSA9IG5ldyBNZW51SXRlbVByaXZhdGVEYXRhKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgaXRlbSk7Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJv
cGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5T2JqZWN0LCBpLCBKU09iamVjdE1ha2UoY29udGV4
dCwgZ2V0TWVudUl0ZW1DbGFzcygpLCBwcml2YXRlRGF0YSksIDApOworICAgICAgICBKU09iamVj
dFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgSlNPYmplY3RNYWtlKGNvbnRl
eHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJpdmF0ZURhdGEpLCAwKTsKICAgICB9Ci0KLSAgICBy
ZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgcmV0dXJuIGFycmF5OwogfQogCiBzdGF0aWMgSlNTdGF0
aWNGdW5jdGlvbiBzdGF0aWNNZW51SXRlbUZ1bmN0aW9uc1tdID0gewpAQCAtMTI2LDIxICsxMjEs
MjIgQEAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0TWVudUl0ZW1DbGFzcygpCiAKICAgICByZXR1cm4g
bWVudUl0ZW1DbGFzczsKIH0KKwogI2VuZGlmCiAKLXN0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBh
cnNlTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIpCitzdGF0aWMgV0tFdmVudE1vZGlmaWVy
cyBwYXJzZU1vZGlmaWVyKGNvbnN0IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiYgbW9kaWZpZXIp
CiB7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJjdHJs
S2V5IikpCisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIuZ2V0
KCksICJjdHJsS2V5IikpCiAgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVyc0NvbnRyb2xL
ZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJzaGlm
dEtleSIpIHx8IEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJyYW5nZVNl
bGVjdGlvbktleSIpKQorICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1vZGlm
aWVyLmdldCgpLCAic2hpZnRLZXkiKSB8fCBKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1v
ZGlmaWVyLmdldCgpLCAicmFuZ2VTZWxlY3Rpb25LZXkiKSkKICAgICAgICAgcmV0dXJuIGtXS0V2
ZW50TW9kaWZpZXJzU2hpZnRLZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobW9kaWZpZXIsICJhbHRLZXkiKSkKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtb2RpZmllci5nZXQoKSwgImFsdEtleSIpKQogICAgICAgICByZXR1cm4ga1dLRXZlbnRN
b2RpZmllcnNBbHRLZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9k
aWZpZXIsICJtZXRhS2V5IikpCisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bW9kaWZpZXIuZ2V0KCksICJtZXRhS2V5IikpCiAgICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlm
aWVyc01ldGFLZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZp
ZXIsICJjYXBzTG9ja0tleSIpKQorICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1vZGlmaWVyLmdldCgpLCAiY2Fwc0xvY2tLZXkiKSkKICAgICAgICAgcmV0dXJuIGtXS0V2ZW50
TW9kaWZpZXJzQ2Fwc0xvY2tLZXk7Ci0gICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobW9kaWZpZXIsICJhZGRTZWxlY3Rpb25LZXkiKSkgeworICAgIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVyLmdldCgpLCAiYWRkU2VsZWN0aW9uS2V5IikpIHsKICNp
ZiBPUyhNQUNfT1NfWCkKICAgICAgICAgcmV0dXJuIGtXS0V2ZW50TW9kaWZpZXJzTWV0YUtleTsK
ICNlbHNlCkBAIC0xNTAsMjUgKzE0NiwzMSBAQCBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJz
ZU1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0
aWMgdW5zaWduZWQgYXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGFycmF5KQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK3N0YXRpYyB1aW50NjRfdCBwYXJz
ZVRvdWNoTW9kaWZpZXIoSlNTdHJpbmdSZWYgbW9kaWZpZXIpCiB7Ci0gICAgYXV0byBsZW5ndGhT
dHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwot
ICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQs
IGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIDApOwotICAgIGlmICghbGVuZ3RoVmFsdWUpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CisgICAgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJjdHJsIikpCisgICAgICAgIHJldHVybiBrV0tF
dmVudE1vZGlmaWVyc0NvbnRyb2xLZXk7CisgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobW9kaWZpZXIsICJzaGlmdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2RpZmll
cnNTaGlmdEtleTsKKyAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmll
ciwgImFsdCIpKQorICAgICAgICByZXR1cm4ga1dLRXZlbnRNb2RpZmllcnNBbHRLZXk7CisgICAg
aWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobW9kaWZpZXIsICJtZXRhS2V5IikpCisg
ICAgICAgIHJldHVybiBrV0tFdmVudE1vZGlmaWVyc01ldGFLZXk7CisgICAgcmV0dXJuIDA7CiB9
CiAKKyNlbmRpZgorCiBzdGF0aWMgV0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJyYXko
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZSkKIHsKICAgICBpZiAo
IWFycmF5VmFsdWUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gVGhlIHZhbHVlIG1heSBl
aXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBvZiBt
b2RpZmllcnMuCi0gICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkg
ewotICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgYXJyYXlWYWx1ZSwgMCkpOwotICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihzdHJpbmcu
Z2V0KCkpOwotICAgIH0KKyAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIGFycmF5VmFs
dWUpKQorICAgICAgICByZXR1cm4gcGFyc2VNb2RpZmllcihjcmVhdGVKU1N0cmluZyhjb250ZXh0
LCBhcnJheVZhbHVlKSk7CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBhcnJh
eVZhbHVlKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzYsMjkgKzE3OCwyMCBAQCBzdGF0aWMg
V0tFdmVudE1vZGlmaWVycyBwYXJzZU1vZGlmaWVyQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgYXJyYQogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRl
eHQsIGFycmF5KTsKICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IDA7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYg
ZXhjZXB0aW9uID0gMDsKLSAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYg
KGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIHN0cmluZyA9
IGFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsICZleGNlcHRpb24pKTsK
LSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBt
b2RpZmllcnMgfD0gcGFyc2VNb2RpZmllcihzdHJpbmcuZ2V0KCkpOworICAgICAgICBpZiAoYXV0
byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBu
dWxscHRyKSkKKyAgICAgICAgICAgIG1vZGlmaWVycyB8PSBwYXJzZU1vZGlmaWVyKGNyZWF0ZUpT
U3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7CiAgICAgfQogICAgIHJldHVybiBtb2RpZmllcnM7CiB9
CiAKLVJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpj
cmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXIpOwotfQotCi1FdmVudFNlbmRpbmdDb250cm9sbGVyOjpFdmVudFNlbmRpbmdDb250cm9sbGVy
KCkKK3N0YXRpYyBXS0V2ZW50TW9kaWZpZXJzIHBhcnNlTW9kaWZpZXJBcnJheShKU1ZhbHVlUmVm
IGFycmF5VmFsdWUpCiB7CisgICAgcmV0dXJuIHBhcnNlTW9kaWZpZXJBcnJheShXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpLCBhcnJheVZhbHVlKTsKIH0KIAot
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6fkV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKQorUmVmPEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI+IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCiB7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXZlbnRTZW5kaW5nQ29udHJvbGxlcik7CiB9CiAK
IEpTQ2xhc3NSZWYgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKQEAgLTIw
NiwyMzcgKzE5OSwxMTYgQEAgSlNDbGFzc1JlZiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp3cmFw
cGVyQ2xhc3MoKQogICAgIHJldHVybiBKU0V2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXJDbGFzcygpOwogfQogCi1lbnVtIE1vdXNlU3RhdGUgewotICAgIE1vdXNl
VXAsCi0gICAgTW91c2VEb3duCi19OworZW51bSBNb3VzZVN0YXRlIHsgTW91c2VVcCwgTW91c2VE
b3duIH07CiAKLXN0YXRpYyBXS011dGFibGVEaWN0aW9uYXJ5UmVmIGNyZWF0ZU1vdXNlTWVzc2Fn
ZUJvZHkoTW91c2VTdGF0ZSBzdGF0ZSwgaW50IGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyBtb2Rp
ZmllcnMpCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBjcmVhdGVNb3VzZU1l
c3NhZ2VCb2R5KE1vdXNlU3RhdGUgc3RhdGUsIGludCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMg
bW9kaWZpZXJzKQogewotICAgIFdLTXV0YWJsZURpY3Rpb25hcnlSZWYgRXZlbnRTZW5kZXJNZXNz
YWdlQm9keSA9IFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0
YXRlID09IE1vdXNlVXAgPyAiTW91c2VVcCIgOiAiTW91c2VEb3duIikpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keSwgc3ViTWVzc2FnZUtleS5nZXQoKSwg
c3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1
dHRvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbiIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gYnV0dG9uUmVmID0gYWRvcHRXSyhXS1VJ
bnQ2NENyZWF0ZShidXR0b24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHksIGJ1dHRvbktleS5nZXQoKSwgYnV0dG9uUmVmLmdldCgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJNb2RpZmllcnMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IG1vZGlmaWVyc1JlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kaWZpZXJzKSk7
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LCBtb2RpZmll
cnNLZXkuZ2V0KCksIG1vZGlmaWVyc1JlZi5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCBzdGF0ZSA9PSBN
b3VzZVVwID8gIk1vdXNlVXAiIDogIk1vdXNlRG93biIpOworICAgIHNldFZhbHVlKGJvZHksICJC
dXR0b24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbikpKTsKKyAgICBzZXRWYWx1ZShi
b2R5LCAiTW9kaWZpZXJzIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKSk7Cisg
ICAgcmV0dXJuIGJvZHk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VE
b3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSkgCiB7Ci0gICAgYXV0byYg
aW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5k
bGVQYWdlUmVmIHBhZ2UgPSBpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAg
IEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0
KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJB
cnJheShjb250ZXh0LCBtb2RpZmllckFycmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VN
ZXNzYWdlQm9keShNb3VzZURvd24sIGJ1dHRvbiwgbW9kaWZpZXJzKSk7Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhwYWdlLCBFdmVudFNlbmRlck1l
c3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVhdGVNb3VzZU1lc3Nh
Z2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBwYXJzZU1vZGlmaWVyQXJyYXkobW9kaWZpZXJBcnJh
eSkpKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVVwKGludCBidXR0
b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICBXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwotICAg
IEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0
KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJB
cnJheShjb250ZXh0LCBtb2RpZmllckFycmF5KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soY3JlYXRlTW91c2VN
ZXNzYWdlQm9keShNb3VzZVVwLCBidXR0b24sIG1vZGlmaWVycykpOwotCi0gICAgV0tCdW5kbGVQ
YWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiRXZlbnRTZW5kZXIiLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlVXAsIGJ1dHRv
biwgcGFyc2VNb2RpZmllckFycmF5KG1vZGlmaWVyQXJyYXkpKSk7CiB9CiAKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8oaW50IHgsIGludCB5KQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZU1v
dmVUbyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geFJlZiA9
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYg
PSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCisg
ICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAg
IHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIk1vdXNlTW92ZVRvIik7CisgICAgc2V0VmFs
dWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKSk7CisgICAgc2V0VmFsdWUo
Ym9keSwgIlkiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKSk7CiAgICAgbV9wb3NpdGlvbiA9
IFdLUG9pbnRNYWtlKHgsIHkpOwotICAgIAotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgMCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVy
IiwgYm9keSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNs
aWNrKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTW91c2VGb3JjZUNsaWNrIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVz
c2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZUNsaWNrIik7
CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keSk7CiB9
CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c3RhcnRBbmRDYW5jZWxNb3VzZUZvcmNl
Q2xpY2soKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5k
ZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdGFydEFuZENhbmNlbE1vdXNlRm9yY2VDbGljayIpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VL
ZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlN0
YXJ0QW5kQ2FuY2VsTW91c2VGb3JjZUNsaWNrIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6bW91c2VGb3JjZURvd24oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3VzZUZvcmNlRG93biIpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VL
ZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVE
aWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIk1v
dXNlRm9yY2VEb3duIik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2Vu
ZGVyIiwgYm9keSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3Jj
ZVVwKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTW91c2VGb3JjZVVwIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2Fn
ZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAw
KTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTW91c2VGb3JjZVVwIik7CisgICAg
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keSk7CiB9CiAKIHZv
aWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VGb3JjZUNoYW5nZWQoZG91YmxlIGZvcmNl
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJNb3VzZUZvcmNlQ2hhbmdlZCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3Nh
Z2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZvcmNlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLRG91YmxlUmVmPiBmb3JjZVJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUo
Zm9yY2UpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIGZvcmNlS2V5LmdldCgpLCBmb3JjZVJlZi5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2Fn
ZSIsICJNb3VzZUZvcmNlQ2hhbmdlZCIpOworICAgIHNldFZhbHVlKGJvZHksICJGb3JjZSIsIGZv
cmNlKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5
KTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpsZWFwRm9yd2FyZChpbnQgbWls
bGlzZWNvbmRzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRT
ZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJMZWFwRm9yd2FyZCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1l
c3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZUluTWlsbGlzZWNv
bmRzIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB0aW1lUmVmID0gYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHRpbWVLZXkuZ2V0KCksIHRpbWVSZWYuZ2V0KCkp
OwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRv
IGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFs
dWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiTGVhcEZvcndhcmQiKTsKKyAgICBzZXRWYWx1ZShib2R5
LCAiVGltZUluTWlsbGlzZWNvbmRzIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29u
ZHMpKSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9k
eSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25v
dXNDbGljaygpCiB7Ci0gICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSAwOwotICAgIGlu
dCBidXR0b24gPSAwOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVu
dFNlbmRlciIpKTsKLQotICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSBkb3duLgotICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1vdXNlRG93bk1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBtb2RpZmllcnMp
KTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlRG93
bk1lc3NhZ2VCb2R5LmdldCgpKTsKLQotICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSB1cC4KLSAg
ICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtb3VzZVVwTWVzc2FnZUJvZHkg
PSBhZG9wdFdLKGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBtb2RpZmll
cnMpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNl
VXBNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIs
IGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VEb3duLCAwLCAwKSk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJFdmVudFNlbmRlciIsIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgMCwg
MCkpOwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3Jl
YXRlS2V5RG93bk1lc3NhZ2VCb2R5KEpTU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBt
b2RpZmllcnMsIGludCBsb2NhdGlvbikKIHsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3Nh
Z2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdl
IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIktleURvd24iKSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5
LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4ga2V5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiS2V5
IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwga2V5S2V5LmdldCgpLCB0b1dLKGtleSkuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1vZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIk1vZGlmaWVycyIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbW9kaWZp
ZXJzUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RpZmllcnMpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVyc0tleS5n
ZXQoKSwgbW9kaWZpZXJzUmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBsb2NhdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxv
Y2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBsb2NhdGlvblJlZiA9IGFk
b3B0V0soV0tVSW50NjRDcmVhdGUobG9jYXRpb24pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGxvY2F0aW9uS2V5LmdldCgpLCBsb2NhdGlv
blJlZi5nZXQoKSk7Ci0KLSAgICByZXR1cm4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keTsKKyAgICBh
dXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0
VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiS2V5RG93biIpOworICAgIHNldFZhbHVlKGJvZHks
ICJLZXkiLCBrZXkpOworICAgIHNldFZhbHVlKGJvZHksICJNb2RpZmllcnMiLCBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKG1vZGlmaWVycykpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiTG9jYXRpb24i
LCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGxvY2F0aW9uKSkpOworICAgIHJldHVybiBib2R5Owog
fQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmtleURvd24oSlNTdHJpbmdSZWYga2V5
LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2NhdGlvbikKIHsKLSAgICBXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1l
KHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHBh
cnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmllckFycmF5KTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4ga2V5RG93bk1lc3NhZ2VCb2R5ID0gY3JlYXRlS2V5RG93
bk1lc3NhZ2VCb2R5KGtleSwgbW9kaWZpZXJzLCBsb2NhdGlvbik7Ci0KLSAgICBXS0J1bmRsZVBh
Z2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIGtleURv
d25NZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2Uo
IkV2ZW50U2VuZGVyIiwgY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgcGFyc2VNb2RpZmll
ckFycmF5KG1vZGlmaWVyQXJyYXkpLCBsb2NhdGlvbikpOwogfQogCiB2b2lkIEV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93bihKU1N0cmluZ1JlZiBrZXkp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsK
LSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBrZXlEb3duTWVzc2FnZUJv
ZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoa2V5LCAwIC8qIG1vZGlmaWVycyAqLywgMCAv
KiBsb2NhdGlvbiAqLyk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUu
Z2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJF
dmVudFNlbmRlciIsIGNyZWF0ZUtleURvd25NZXNzYWdlQm9keShrZXksIDAsIDApKTsKIH0KIAog
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiTW91c2VTY3JvbGxCeSIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1l
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rv
dWJsZVJlZj4geFJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeEtleS5nZXQoKSwgeFJl
Zi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tE
b3VibGVSZWY+IHlSZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKTsKLSAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlS
ZWYuZ2V0KCkpOwotCiAgICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7IC8vIFRyaWdnZXJzIGEgc2Nyb2xsaW5nIHRy
ZWUgY29tbWl0LgotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSk7CisKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1l
c3NhZ2UiLCAiTW91c2VTY3JvbGxCeSIpOworICAgIHNldFZhbHVlKGJvZHksICJYIiwgYWRvcHRX
SyhXS0RvdWJsZUNyZWF0ZSh4KSkpOworICAgIHNldFZhbHVlKGJvZHksICJZIiwgYWRvcHRXSyhX
S0RvdWJsZUNyZWF0ZSh5KSkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBi
b2R5KTsKIH0KIAogc3RhdGljIHVpbnQ2NF90IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcoSlNTdHJp
bmdSZWYgcGhhc2VTdHIpCkBAIC00NzUsOTAgKzM0Nyw1OCBAQCBzdGF0aWMgdWludDY0X3QgY2dF
dmVudE1vbWVudHVtUGhhc2VGcm9tU3RyaW5nKEpTU3RyaW5nUmVmIHBoYXNlU3RyKQogCiB2b2lk
IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1
bVBoYXNlcyhpbnQgeCwgaW50IHksIEpTU3RyaW5nUmVmIHBoYXNlU3RyLCBKU1N0cmluZ1JlZiBt
b21lbnR1bVN0cikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50
U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBo
YXNlcyIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLSAgICAK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHhS
ZWYgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwot
ICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJl
Zj4geVJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQo
KSk7Ci0KICAgICB1aW50NjRfdCBwaGFzZSA9IGNnRXZlbnRQaGFzZUZyb21TdHJpbmcocGhhc2VT
dHIpOwogICAgIHVpbnQ2NF90IG1vbWVudHVtID0gY2dFdmVudE1vbWVudHVtUGhhc2VGcm9tU3Ry
aW5nKG1vbWVudHVtU3RyKTsKLSAgICAKKwogICAgIGlmIChwaGFzZSA9PSA0IC8qIGtDR1Njcm9s
bFBoYXNlRW5kZWQgKi8gfHwgcGhhc2UgPT0gOCAvKiBrQ0dTY3JvbGxQaGFzZUNhbmNlbGxlZCAq
LykKICAgICAgICAgbV9zZW50V2hlZWxQaGFzZUVuZE9yQ2FuY2VsID0gdHJ1ZTsKLSAgICAKICAg
ICBpZiAobW9tZW50dW0gPT0gMyAvKiBrQ0dNb21lbnR1bVNjcm9sbFBoYXNlRW5kICovKQogICAg
ICAgICBtX3NlbnRXaGVlbE1vbWVudHVtUGhhc2VFbmQgPSB0cnVlOwogCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHBoYXNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiUGhhc2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHBoYXNlUmVm
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShwaGFzZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgcGhhc2VLZXkuZ2V0KCksIHBoYXNlUmVm
LmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb21lbnR1bUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vbWVudHVtIikpOwotICAgIFdL
UmV0YWluUHRyPFdLVUludDY0UmVmPiBtb21lbnR1bVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVh
dGUobW9tZW50dW0pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIG1vbWVudHVtS2V5LmdldCgpLCBtb21lbnR1bVJlZi5nZXQoKSk7Ci0KICAg
ICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpKTsgLy8gVHJpZ2dlcnMgYSBzY3JvbGxpbmcgdHJlZSBjb21taXQuCi0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpKTsKKworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJNb3VzZVNj
cm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
WCIsIGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeCkpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIs
IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoeSkpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUGhhc2Ui
LCBwaGFzZSk7CisgICAgc2V0VmFsdWUoYm9keSwgIk1vbWVudHVtIiwgbW9tZW50dW0pOworICAg
IHBvc3RQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5KTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHksIGJv
b2wgcGFnZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNl
bmRlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5IikpOwotICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5n
ZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB4UmVmID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0
ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZiA9IGFkb3B0V0soV0tEb3VibGVDcmVh
dGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gcGFnZWRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQ
YWdlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcGFnZWRSZWYgPSBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKHBhZ2VkKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwYWdlZEtleS5nZXQoKSwgcGFnZWRSZWYuZ2V0KCkpOwot
CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwor
ICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIkNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5
Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIlgiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHgpKSk7
CisgICAgc2V0VmFsdWUoYm9keSwgIlkiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHkpKSk7Cisg
ICAgc2V0VmFsdWUoYm9keSwgIlBhZ2VkIiwgcGFnZWQpOwogICAgIC8vIEZJWE1FOiBUaGlzIG1l
c3NhZ2Ugc2hvdWxkIGJlIGFzeW5jaHJvbm91cywgYXMgc2Nyb2xsaW5nIGlzIGludHJpbnNpY2Fs
bHkgYXN5bmNocm9ub3VzLgogICAgIC8vIFNlZSBhbHNvOiA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0ODI1Nj4uCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCAwKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5k
ZXIiLCBib2R5KTsKIH0KIAogSlNWYWx1ZVJlZiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250
ZXh0Q2xpY2soKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1h
aW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRS
ZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUp
OwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+
IG1lbnVFbnRyaWVzID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5Q29udGV4dE1lbnVBdFBvaW50
SW5XaW5kb3cocGFnZSwgbV9wb3NpdGlvbikpOwotICAgIEpTVmFsdWVSZWYgYXJyYXlSZXN1bHQg
PSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsKKyAgICBhdXRvIG1lbnVFbnRy
aWVzID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5Q29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3co
cGFnZSwgbV9wb3NpdGlvbikpOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShj
b250ZXh0LCAwLCAwLCAwKTsKICAgICBpZiAoIW1lbnVFbnRyaWVzKQotICAgICAgICByZXR1cm4g
YXJyYXlSZXN1bHQ7CisgICAgICAgIHJldHVybiBhcnJheTsKIAotICAgIEpTT2JqZWN0UmVmIGFy
cmF5T2JqID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKICAgICBz
aXplX3QgZW50cmllc1NpemUgPSBXS0FycmF5R2V0U2l6ZShtZW51RW50cmllcy5nZXQoKSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyaWVzU2l6ZTsgKytpKSB7CiAgICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChXS0FycmF5R2V0SXRlbUF0SW5kZXgobWVudUVudHJpZXMuZ2V0KCks
IGkpKSA9PSBXS0NvbnRleHRNZW51SXRlbUdldFR5cGVJRCgpKTsKIAogICAgICAgICBXS0NvbnRl
eHRNZW51SXRlbVJlZiBpdGVtID0gc3RhdGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdL
QXJyYXlHZXRJdGVtQXRJbmRleChtZW51RW50cmllcy5nZXQoKSwgaSkpOwogICAgICAgICBNZW51
SXRlbVByaXZhdGVEYXRhKiBwcml2YXRlRGF0YSA9IG5ldyBNZW51SXRlbVByaXZhdGVEYXRhKHBh
Z2UsIGl0ZW0pOwotICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBh
cnJheU9iaiwgaSwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGdldE1lbnVJdGVtQ2xhc3MoKSwgcHJp
dmF0ZURhdGEpLCAwKTsKKyAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4
dCwgYXJyYXksIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRNZW51SXRlbUNsYXNzKCksIHBy
aXZhdGVEYXRhKSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGFycmF5UmVzdWx0OworICAgIHJl
dHVybiBhcnJheTsKICNlbHNlCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogI2VuZGlmCkBAIC02MTUsMjEgKzQ1NSwxNCBAQCBNb25pdG9yV2hlZWxFdmVudHNPcHRp
b25zKiB0b01vbml0b3JXaGVlbEV2ZW50c09wdGlvbnMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
VgogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50KSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHJlc2V0TGF0Y2hpbmdTdHJpbmcgPSBhZG9wdChK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicmVzZXRMYXRjaGluZyIpKTsKLSAgICBhdXRv
IHJlc2V0TGF0Y2hpbmdWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50LCBudWxscHRyKSwgcmVzZXRMYXRjaGluZ1N0cmlu
Zy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAgICBib29sIHJlc2V0TGF0Y2hpbmcgPSB0cnVlOwotICAg
IGlmIChyZXNldExhdGNoaW5nVmFsdWUgJiYgSlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCByZXNl
dExhdGNoaW5nVmFsdWUpKQotICAgICAgICByZXNldExhdGNoaW5nID0gSlNWYWx1ZVRvQm9vbGVh
bihjb250ZXh0LCByZXNldExhdGNoaW5nVmFsdWUpOwotCiAgICAgc3RhdGljIE1vbml0b3JXaGVl
bEV2ZW50c09wdGlvbnMgb3B0aW9uczsKLSAgICBvcHRpb25zLnJlc2V0TGF0Y2hpbmcgPSByZXNl
dExhdGNoaW5nOworICAgIG9wdGlvbnMucmVzZXRMYXRjaGluZyA9IGJvb2xlYW5Qcm9wZXJ0eShj
b250ZXh0LCAoSlNPYmplY3RSZWYpYXJndW1lbnQsICJyZXNldExhdGNoaW5nIiwgdHJ1ZSk7CiAg
ICAgcmV0dXJuICZvcHRpb25zOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1v
bml0b3JXaGVlbEV2ZW50cyhNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKiBvcHRpb25zKQogewot
ICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKTsKICAgICAKICAgICBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwg
PSBmYWxzZTsKICAgICBtX3NlbnRXaGVlbE1vbWVudHVtUGhhc2VFbmQgPSBmYWxzZTsKQEAgLTY2
Myw3ICs0OTYsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNhbGxBZnRlclNjcm9s
bGluZ0NvbXBsZXRlcyhKU1ZhbHVlUmVmIGZ1bmN0aW9uQ2FsbAogICAgIGlmICghZnVuY3Rpb25D
YWxsYmFjaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBwYWdl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVu
ZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwog
ICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250
ZXh0KG1haW5GcmFtZSk7CiAgICAgCkBAIC02ODMsMTk5ICs1MTYsMTAyIEBAIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6Y2FsbEFmdGVyU2Nyb2xsaW5nQ29tcGxldGVzKEpTVmFsdWVSZWYg
ZnVuY3Rpb25DYWxsCiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5KQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBZGRU
b3VjaFBvaW50IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB4
UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh4KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB4S2V5LmdldCgpLCB4UmVmLmdldCgpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4g
eVJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7
Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8g
Ym9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1
ZShib2R5LCAiU3ViTWVzc2FnZSIsICJBZGRUb3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9k
eSwgIlgiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oeCkpOworICAgIHNldFZhbHVlKGJvZHksICJZ
Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHkpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVz
c2FnZSgiRXZlbnRTZW5kZXIiLCBib2R5KTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVcGRh
dGVUb3VjaFBvaW50IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGluZGV4S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5kZXgiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IGluZGV4UmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhL
ZXkuZ2V0KCksIGluZGV4UmVmLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geFJlZiA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
eCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgeEtleS5nZXQoKSwgeFJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4geUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlkiKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHlSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KHkpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rp
b25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiVXBkYXRl
VG91Y2hQb2ludCIpOworICAgIHNldFZhbHVlKGJvZHksICJJbmRleCIsIHN0YXRpY19jYXN0PHVp
bnQ2NF90PihpbmRleCkpOworICAgIHNldFZhbHVlKGJvZHksICJYIiwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiWSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90
Pih5KSk7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9k
eSk7CiB9CiAKLXZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihj
b25zdCBKU1N0cmluZ1JlZiAmbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQordm9pZCBFdmVudFNlbmRp
bmdDb250cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyKEpTU3RyaW5nUmVmIG1vZGlmaWVyLCBib29s
IGVuYWJsZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2Vu
ZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0K
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0VG91Y2hNb2RpZmllciIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1
Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kID0gMDsKLSAg
ICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwgImN0cmwiKSkKLSAg
ICAgICAgbW9kID0ga1dLRXZlbnRNb2RpZmllcnNDb250cm9sS2V5OwotICAgIGlmIChKU1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1vZGlmaWVyLCAic2hpZnQiKSkKLSAgICAgICAgbW9kID0g
a1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleTsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtb2RpZmllciwgImFsdCIpKQotICAgICAgICBtb2QgPSBrV0tFdmVudE1vZGlmaWVy
c0FsdEtleTsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtb2RpZmllciwg
Im1ldGEiKSkKLSAgICAgICAgbW9kID0ga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5OwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vZGlmaWVyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IG1vZGlmaWVyUmVmID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2QpKTsKLSAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIG1vZGlmaWVy
S2V5LmdldCgpLCBtb2RpZmllclJlZi5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gZW5hYmxlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RW5hYmxlIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBlbmFibGVSZWYgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGVuYWJsZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgZW5hYmxlS2V5LmdldCgpLCBlbmFibGVSZWYuZ2V0
KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1l
c3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBh
dXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0
VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiU2V0VG91Y2hNb2RpZmllciIpOworICAgIHNldFZh
bHVlKGJvZHksICJNb2RpZmllciIsIHBhcnNlVG91Y2hNb2RpZmllcihtb2RpZmllcikpOworICAg
IHNldFZhbHVlKGJvZHksICJFbmFibGUiLCBlbmFibGUpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkpOwogfQogCi0KIHZvaWQgRXZlbnRTZW5kaW5n
Q29udHJvbGxlcjo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kp
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsK
LSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlNldFRvdWNoUG9pbnRSYWRpdXMiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNz
YWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4geEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJhZGl1c1giKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IHhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHJhZGl1
c1gpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIHhLZXkuZ2V0KCksIHhSZWYuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNZ
IikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmID0gYWRvcHRXSyhXS1VJbnQ2
NENyZWF0ZShyYWRpdXNZKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKLQotICAgIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhX
S011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJTdWJNZXNz
YWdlIiwgIlNldFRvdWNoUG9pbnRSYWRpdXMiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiUmFkaXVz
WCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYWRpdXNYKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
IlJhZGl1c1kiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmFkaXVzWSkpOworICAgIHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkpOwogfQogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoU3RhcnQoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxl
RGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3ViTWVz
c2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaFN0YXJ0IikpOwotICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVz
c2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0
YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2Ui
LCAiVG91Y2hTdGFydCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNl
bmRlciIsIGJvZHkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoTW92
ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIp
KTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJNZXNzYWdlIikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRvdWNoTW92ZSIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1l
LmdldCgpKTsKLQotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0
aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7Cisg
ICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAg
IHNldFZhbHVlKGJvZHksICJTdWJNZXNzYWdlIiwgIlRvdWNoTW92ZSIpOworICAgIHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkpOwogfQogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoRW5kKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURp
Y3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3Nh
Z2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hFbmQiKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdl
S2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJU
b3VjaEVuZCIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIs
IGJvZHkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoQ2FuY2VsKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVG91Y2hDYW5jZWwiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5n
ZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
ZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAg
IGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAiU3ViTWVzc2FnZSIsICJUb3VjaENhbmNlbCIpOworICAgIHBvc3RTeW5j
aHJvbm91c1BhZ2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkpOwogfQogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6OmNsZWFyVG91Y2hQb2ludHMoKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U3ViTWVzc2FnZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhclRvdWNoUG9p
bnRzIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwotCi0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBh
ZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwg
IlN1Yk1lc3NhZ2UiLCAiQ2xlYXJUb3VjaFBvaW50cyIpOworICAgIHBvc3RTeW5jaHJvbm91c1Bh
Z2VNZXNzYWdlKCJFdmVudFNlbmRlciIsIGJvZHkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OnJlbGVhc2VUb3VjaFBvaW50KGludCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVsZWFzZVRvdWNo
UG9pbnQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7Ci0KLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4gaW5kZXhSZWYgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSk7Ci0gICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQo
KSwgaW5kZXhSZWYuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIlN1Yk1lc3NhZ2UiLCAiUmVsZWFzZVRvdWNoUG9p
bnQiKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiSW5kZXgiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
aW5kZXgpKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiRXZlbnRTZW5kZXIiLCBi
b2R5KTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50
KGludCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50
U2VuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZUtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3NhZ2UiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2FuY2VsVG91Y2hQb2ludCIpKTsKLSAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCks
IHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBp
bmRleEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluZGV4Iikp
OwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBpbmRleFJlZiA9IGFkb3B0V0soV0tVSW50
NjRDcmVhdGUoaW5kZXgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIGluZGV4S2V5LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7Ci0KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0
KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIGF1dG8gYm9keSA9IGFk
b3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAi
U3ViTWVzc2FnZSIsICJDYW5jZWxUb3VjaFBvaW50Iik7CisgICAgc2V0VmFsdWUoYm9keSwgIklu
ZGV4Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGluZGV4KSk7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIkV2ZW50U2VuZGVyIiwgYm9keSk7CiB9CisKICNlbmRpZgogCiAvLyBPYmpl
Y3QgQ3JlYXRpb24KIAotdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3ZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bWFrZVdpbmRv
d09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0eShjb250ZXh0
LCB3aW5kb3dPYmplY3QsICJldmVudFNlbmRlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7Cisg
ICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgImV2ZW50U2VuZGVyIiwgdGhpcyk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRl
eCA5YTJhZmQ5NThjY2Q3MGVjZDIxZWM0ZTNiM2ZlYzRjZjdjYzg1YmE4Li5lYTQzN2ZiZGJlMGMz
NDg5MDU3ZTMxNjA3NWFkZWE2NTNhZGI1MTBkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIu
aApAQCAtMzAsMjcgKzMwLDIzIEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLR2VvbWV0cnkuaD4KICNp
bmNsdWRlIDx3dGYvUmVmLmg+CiAKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4
dCogSlNDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNTdHJpbmcqIEpTU3RyaW5n
UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwog
bmFtZXNwYWNlIFdUUiB7CiAKIHN0cnVjdCBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zIHsKLSAg
ICBNb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKGJvb2wgcmVzZXRMYXRjaGluZyA9IHRydWUpCi0g
ICAgICAgIDogcmVzZXRMYXRjaGluZyhyZXNldExhdGNoaW5nKQotICAgIHsgfQotCiAgICAgYm9v
bCByZXNldExhdGNoaW5nIHsgdHJ1ZSB9OwogfTsKIAogTW9uaXRvcldoZWVsRXZlbnRzT3B0aW9u
cyogdG9Nb25pdG9yV2hlZWxFdmVudHNPcHRpb25zKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7
CiAKLWNsYXNzIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgOiBwdWJsaWMgSlNXcmFwcGFibGUgewor
Y2xhc3MgRXZlbnRTZW5kaW5nQ29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxFdmVudFNlbmRpbmdDb250cm9sbGVyPiBjcmVhdGUo
KTsKLSAgICB2aXJ0dWFsIH5FdmVudFNlbmRpbmdDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIG1h
a2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKLSAgICAvLyBKU1dyYXBwYWJsZQotICAgIHZpcnR1YWwg
SlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlND
b250ZXh0UmVmKTsKIAogICAgIHZvaWQgbW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYg
bW9kaWZpZXJBcnJheSk7CiAgICAgdm9pZCBtb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYg
bW9kaWZpZXJBcnJheSk7CkBAIC03Myw3ICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGtleURv
d24oSlNTdHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2NhdGlv
bik7CiAgICAgdm9pZCBzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24oSlNTdHJpbmdSZWYga2V5
KTsKIAotICAgIC8vIFpvb20gZnVuY3Rpb25zLgogICAgIHZvaWQgdGV4dFpvb21JbigpOwogICAg
IHZvaWQgdGV4dFpvb21PdXQoKTsKICAgICB2b2lkIHpvb21QYWdlSW4oKTsKQEAgLTgxLDEwICs3
Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjYWxlUGFnZUJ5KGRvdWJsZSBzY2FsZSwgZG91Ymxl
IHgsIGRvdWJsZSB5KTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgLy8gVG91Y2gg
ZXZlbnRzLgogICAgIHZvaWQgYWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpOwogICAgIHZvaWQg
dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSk7Ci0gICAgdm9pZCBzZXRU
b3VjaE1vZGlmaWVyKGNvbnN0IEpTU3RyaW5nUmVmICZtb2RpZmllciwgYm9vbCBlbmFibGUpOwor
ICAgIHZvaWQgc2V0VG91Y2hNb2RpZmllcihKU1N0cmluZ1JlZiBtb2RpZmllciwgYm9vbCBlbmFi
bGUpOwogICAgIHZvaWQgc2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1
c1kpOwogICAgIHZvaWQgdG91Y2hTdGFydCgpOwogICAgIHZvaWQgdG91Y2hNb3ZlKCk7CkBAIC05
Niw3ICs5MCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBFdmVudFNlbmRp
bmdDb250cm9sbGVyKCk7CisgICAgRXZlbnRTZW5kaW5nQ29udHJvbGxlcigpID0gZGVmYXVsdDsK
KworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7CisKICAgICBXS1BvaW50IG1f
cG9zaXRpb247CiAgICAgYm9vbCBtX3NlbnRXaGVlbFBoYXNlRW5kT3JDYW5jZWwgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9zZW50V2hlZWxNb21lbnR1bVBoYXNlRW5kIHsgZmFsc2UgfTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVy
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVy
LmNwcAppbmRleCA5MzU4ZjRhMGRlNWIzZDliYzMxNmI1ZTBhZGZkMDQxMjY2NDI1OGZmLi5kYjQy
NWU3NWU4MGIwNTQwOGJkZjNlM2UzNjQ3NjUxMDk2MzBkM2ZkIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0z
NywxNCArMzcsNiBAQCBSZWY8R0NDb250cm9sbGVyPiBHQ0NvbnRyb2xsZXI6OmNyZWF0ZSgpCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR0NDb250cm9sbGVyKTsKIH0KIAotR0NDb250cm9sbGVy
OjpHQ0NvbnRyb2xsZXIoKQotewotfQotCi1HQ0NvbnRyb2xsZXI6On5HQ0NvbnRyb2xsZXIoKQot
ewotfQotCiBKU0NsYXNzUmVmIEdDQ29udHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKIHsKICAgICBy
ZXR1cm4gSlNHQ0NvbnRyb2xsZXI6OmdDQ29udHJvbGxlckNsYXNzKCk7CkBAIC02NSwxMSArNTcs
OSBAQCBzaXplX3QgR0NDb250cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkKICAgICByZXR1cm4g
V0tCdW5kbGVHZXRKYXZhU2NyaXB0T2JqZWN0c0NvdW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSk7CiB9CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIEdDQ29udHJv
bGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
d2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit2b2lkIEdDQ29udHJvbGxlcjo6
bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBzZXRQcm9wZXJ0
eShjb250ZXh0LCB3aW5kb3dPYmplY3QsICJHQ0NvbnRyb2xsZXIiLCB0aGlzLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNl
cHRpb24pOworICAgIHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJHQ0NvbnRyb2xs
ZXIiLCB0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuaAppbmRleCBkMzQ5YzFj
ZTk5MGU4N2Q3ZGYyZmNiOGM4Mjg4NWJjYTMwNTcyYTBiLi4zNGFiMjQyNTEzOGMxZDc1ZmIyNGEy
NTEwNzQzNjc4ZDgxOWVkYzIyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmgKQEAgLTI2LDI2ICsyNiwyNiBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJKU1dyYXBwYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVK
U0NvbnRleHQqIEpTQ29udGV4dFJlZjsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIEdDQ29u
dHJvbGxlciA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7CitjbGFzcyBHQ0NvbnRyb2xsZXIgZmluYWwg
OiBwdWJsaWMgSlNXcmFwcGFibGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R0NDb250cm9s
bGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5HQ0NvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQg
bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIAotICAgIC8vIEpTV3JhcHBhYmxlCi0gICAgdmlydHVh
bCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYpOwogCiAgICAgdm9pZCBjb2xsZWN0KCk7CiAgICAgdm9pZCBjb2xsZWN0T25B
bHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKTsKICAgICBzaXplX3QgZ2V0SlNPYmpl
Y3RDb3VudCgpOwogCiBwcml2YXRlOgotICAgIEdDQ29udHJvbGxlcigpOworICAgIEdDQ29udHJv
bGxlcigpID0gZGVmYXVsdDsKKworICAgIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgZmluYWw7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggN2FlODFiYjRi
NTkwOTZjNThjOGI1YTE0Yzg4YzRjMzNmOGMxNDU3MS4uMWE5Y2IxNzc1OTQxNjRlZTNhOWFkNWI1
NjQ4ZWI0MGM4ZGQ4ZTg5ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw4ICsyNyw4IEBACiAj
aW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2YXRlRm9udHMuaCIK
KyNpbmNsdWRlICJEaWN0aW9uYXJ5RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5k
bGVQYWdlLmgiCi0jaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZVRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3B0aW9ucy5oPgogI2lu
Y2x1ZGUgPFdlYktpdC9XS0J1bmRsZS5oPgpAQCAtMTE4LDE4ICsxMTgsMTMgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6ZGlkQ3JlYXRlUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKICAgICBpZiAo
IWlzTWFpblBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJJbml0aWFsaXphdGlvbiIpKTsKICAgICBXS1R5cGVSZWYgcmVzdWx0ID0gbnVsbHB0cjsKICAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShtX2J1bmRsZSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAm
cmVzdWx0KTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UobV9idW5kbGUsIHRv
V0soIkluaXRpYWxpemF0aW9uIikuZ2V0KCksIG51bGxwdHIsICZyZXN1bHQpOwogICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXN1
bHQpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rp
b25hcnlSZWY+IGluaXRpYWxpemF0aW9uRGljdGlvbmFyeSA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihyZXN1bHQpKTsKKyAgICBhdXRvIGluaXRpYWxpemF0aW9uRGljdGlv
bmFyeSA9IGFkb3B0V0soZGljdGlvbmFyeVZhbHVlKHJlc3VsdCkpOwogCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHJlc3VtZVRlc3RpbmdLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJSZXN1bWVUZXN0aW5nIikpOwotICAgIFdLVHlwZVJlZiByZXN1bWVU
ZXN0aW5nVmFsdWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGluaXRpYWxpemF0aW9uRGlj
dGlvbmFyeS5nZXQoKSwgcmVzdW1lVGVzdGluZ0tleS5nZXQoKSk7Ci0gICAgQVNTRVJUKFdLR2V0
VHlwZUlEKHJlc3VtZVRlc3RpbmdWYWx1ZSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAg
IGlmIChXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJlc3VtZVRl
c3RpbmdWYWx1ZSkpKQorICAgIGlmIChib29sZWFuVmFsdWUoaW5pdGlhbGl6YXRpb25EaWN0aW9u
YXJ5LmdldCgpLCAiUmVzdW1lVGVzdGluZyIpKQogICAgICAgICBiZWdpblRlc3RpbmcoaW5pdGlh
bGl6YXRpb25EaWN0aW9uYXJ5LmdldCgpLCBCZWdpbmdUZXN0aW5nTW9kZTo6UmVzdW1lKTsKIH0K
IApAQCAtMTc0LDIxICsxNjksMjAgQEAgSW5qZWN0ZWRCdW5kbGVQYWdlKiBJbmplY3RlZEJ1bmRs
ZTo6cGFnZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGFnZXNbMF0uZ2V0KCk7CiB9CiAKLXZvaWQg
SW5qZWN0ZWRCdW5kbGU6OnJlc2V0TG9jYWxTZXR0aW5ncygpCitXS0J1bmRsZVBhZ2VSZWYgSW5q
ZWN0ZWRCdW5kbGU6OnBhZ2VSZWYoKSBjb25zdAogewotICAgIHNldGxvY2FsZShMQ19BTEwsICIi
KTsKKyAgICBhdXRvIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisgICAgcmV0dXJuIHBhZ2UgPyBwYWdl
LT5wYWdlKCkgOiBudWxscHRyOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZl
TWVzc2FnZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQor
dm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoV0tTdHJpbmdSZWYsIFdLVHlw
ZVJlZikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVycm9yIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5rbm93biIpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNz
YWdlKG1fYnVuZGxlLCBlcnJvck1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKG1fYnVuZGxlLCB0b1dLKCJFcnJvciIpLmdl
dCgpLCB0b1dLKCJVbmtub3duIikuZ2V0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBwb3N0R0NUYXNr
KHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSByZWludGVycHJl
dF9jYXN0PFdLQnVuZGxlUGFnZVJlZj4oY29udGV4dCk7CisgICAgYXV0byBwYWdlID0gcmVpbnRl
cnByZXRfY2FzdDxXS0J1bmRsZVBhZ2VSZWY+KGNvbnRleHQpOwogICAgIEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5yZXBvcnRMaXZlRG9jdW1lbnRzKHBhZ2UpOwogICAgIFdLUmVsZWFzZShw
YWdlKTsKIH0KQEAgLTE5OSw3NCArMTkzLDQ3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlcG9y
dExpdmVEb2N1bWVudHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiAgICAgV0tCdW5kbGVSZWxlYXNl
TWVtb3J5KG1fYnVuZGxlKTsKIAogICAgIGNvbnN0IGJvb2wgZXhjbHVkZURvY3VtZW50c0luUGFn
ZUdyb3VwID0gdHJ1ZTsKLSAgICBhdXRvIGRvY3VtZW50VVJMcyA9IGFkb3B0V0soV0tCdW5kbGVH
ZXRMaXZlRG9jdW1lbnRVUkxzKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgZXhjbHVkZURvY3VtZW50
c0luUGFnZUdyb3VwKSk7Ci0gICAgYXV0byBhY2tNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxpdmVEb2N1bWVudHMiKSk7Ci0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UocGFnZSwgYWNrTWVzc2FnZU5hbWUuZ2V0KCksIGRvY3VtZW50VVJMcy5n
ZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgdG9XSygiTGl2ZURvY3Vt
ZW50cyIpLmdldCgpLCBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJMcyhtX2J1bmRs
ZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cCkpLmdldCgpKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJv
ZHkpCiB7CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJCZWdpblRlc3QiKSkgewogICAgICAgICBBU1NFUlQobWVzc2FnZUJvZHkpOwotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBkdW1wUGl4ZWxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRHVtcFBpeGVscyIpKTsKLSAgICAgICAgbV9kdW1wUGl4ZWxzID0gV0tC
b29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZHVtcFBpeGVsc0tleS5nZXQoKSkpKTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGltZW91dEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVvdXQiKSk7Ci0gICAgICAgIG1fdGlt
ZW91dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHRpbWVvdXRLZXkuZ2V0KCkpKSkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnJLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiKSk7Ci0gICAg
ICAgIG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyS2V5LmdldCgpKSkpOwotCi0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhY2tNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFjayIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGFja01lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQmVnaW5UZXN0IikpOwotICAgICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShwYWdlLCBhY2tNZXNzYWdlTmFtZS5nZXQoKSwgYWNrTWVzc2FnZUJvZHkuZ2V0KCkpOwotCisg
ICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgbV9kdW1wUGl4ZWxzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIkR1bXBQaXhlbHMiKTsKKyAgICAgICAgbV90aW1lb3V0ID0gU2Vjb25kczo6
ZnJvbU1pbGxpc2Vjb25kcyhXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVm
Pih2YWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUaW1lb3V0IikpKSk7CisgICAgICAgIG1f
ZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIkR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpOworICAgICAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShwYWdlLCB0b1dLKCJBY2siKS5nZXQoKSwgdG9XSygiQmVnaW5UZXN0IikuZ2V0
KCkpOwogICAgICAgICBiZWdpblRlc3RpbmcobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBCZWdpbmdU
ZXN0aW5nTW9kZTo6TmV3KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzZXQiKSkgewogICAgICAg
ICBBU1NFUlQobWVzc2FnZUJvZHkpOwotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5
UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ganNjT3B0aW9u
c0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkpTQ09wdGlvbnMi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBqc2NPcHRpb25zU3RyaW5nID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBqc2NPcHRpb25zS2V5LmdldCgpKSk7Ci0gICAgICAgIGlmIChqc2NP
cHRpb25zU3RyaW5nKSB7Ci0gICAgICAgICAgICBTdHJpbmcgb3B0aW9ucyA9IHRvV1RGU3RyaW5n
KGpzY09wdGlvbnNTdHJpbmcpOwotICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpzZXRPcHRpb25z
KG9wdGlvbnMudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gc2hvdWxkR0NLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTaG91bGRHQyIpKTsKLSAgICAgICAgYm9vbCBzaG91bGRHQyA9IFdLQm9vbGVh
bkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNob3VsZEdDS2V5LmdldCgpKSkpOwotICAgICAg
ICBpZiAoc2hvdWxkR0MpCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGlj
dGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgaWYgKGF1dG8gb3B0aW9ucyA9IHN0
cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkpTQ09wdGlvbnMiKSkKKyAgICAgICAg
ICAgIEpTQzo6T3B0aW9uczo6c2V0T3B0aW9ucyh0b1dURlN0cmluZyhvcHRpb25zKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgaWYgKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJTaG91bGRHQyIpKQogICAgICAgICAgICAgV0tCdW5kbGVHYXJiYWdlQ29sbGVjdEphdmFTY3Jp
cHRPYmplY3RzKG1fYnVuZGxlKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVE
X1RSRUUpCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheElzb2xhdGVkTW9kZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFjY2Vzc2liaWxpdHlJ
c29sYXRlZFRyZWUiKSk7Ci0gICAgICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUg
PSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBheElzb2xhdGVkTW9kZUtleS5n
ZXQoKSkpKTsKKyAgICAgICAgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSA9IGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVl
Iik7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBh
bGxvd2VkSG9zdHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
bGxvd2VkSG9zdHMiKSk7Ci0gICAgICAgIFdLVHlwZVJlZiBhbGxvd2VkSG9zdHNWYWx1ZSA9IFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhbGxvd2VkSG9z
dHNLZXkuZ2V0KCkpOworICAgICAgICBhdXRvIGFsbG93ZWRIb3N0c1ZhbHVlID0gdmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiQWxsb3dlZEhvc3RzIik7CiAgICAgICAgIGlmIChhbGxvd2Vk
SG9zdHNWYWx1ZSAmJiBXS0dldFR5cGVJRChhbGxvd2VkSG9zdHNWYWx1ZSkgPT0gV0tBcnJheUdl
dFR5cGVJRCgpKSB7CiAgICAgICAgICAgICBtX2FsbG93ZWRIb3N0cy5jbGVhcigpOwotCi0gICAg
ICAgICAgICBXS0FycmF5UmVmIGFsbG93ZWRIb3N0c0FycmF5ID0gc3RhdGljX2Nhc3Q8V0tBcnJh
eVJlZj4oYWxsb3dlZEhvc3RzVmFsdWUpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAs
IHNpemUgPSBXS0FycmF5R2V0U2l6ZShhbGxvd2VkSG9zdHNBcnJheSk7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChhbGxvd2VkSG9zdHNBcnJheSwgaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgV0tH
ZXRUeXBlSUQoaXRlbSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgbV9hbGxvd2VkSG9zdHMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihpdGVtKSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBhcnJheSA9IHN0
YXRpY19jYXN0PFdLQXJyYXlSZWY+KGFsbG93ZWRIb3N0c1ZhbHVlKTsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwLCBzaXplID0gV0tBcnJheUdldFNpemUoYXJyYXkpOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICAgICAgICAgIG1fYWxsb3dlZEhvc3RzLmFwcGVuZCh0b1dURlN0cmluZyhX
S0FycmF5R2V0SXRlbUF0SW5kZXgoYXJyYXksIGkpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBt
X3N0YXRlID0gSWRsZTsKICAgICAgICAgbV9kdW1wUGl4ZWxzID0gZmFsc2U7CiAgICAgICAgIG1f
cGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBmYWxzZTsKIAotICAgICAgICByZXNldExvY2FsU2V0dGlu
Z3MoKTsKKyAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgICAgICBUZXN0UnVubmVy
OjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpOwogCiAgICAgICAgIEluamVj
dGVkQnVuZGxlOjpwYWdlKCktPnJlc2V0QWZ0ZXJUZXN0KCk7CkBAIC0yNzUsOSArMjQyLDcgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdl
UmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiR2V0TGl2ZURvY3VtZW50cyIpKSB7CiAgICAgICAgIGNvbnN0
IGJvb2wgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwID0gZmFsc2U7Ci0gICAgICAgIGF1dG8g
ZG9jdW1lbnRVUkxzID0gYWRvcHRXSyhXS0J1bmRsZUdldExpdmVEb2N1bWVudFVSTHMobV9idW5k
bGUsIG1fcGFnZUdyb3VwLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXApKTsKLSAgICAgICAg
YXV0byBhY2tNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkxpdmVEb2N1bWVudHMiKSk7Ci0gICAgICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBh
Z2UsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBkb2N1bWVudFVSTHMuZ2V0KCkpOworICAgICAgICBw
b3N0UGFnZU1lc3NhZ2UoIkxpdmVEb2N1bWVudHMiLCBhZG9wdFdLKFdLQnVuZGxlR2V0TGl2ZURv
Y3VtZW50VVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VH
cm91cCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDI4LDcgKzM5Myw3IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnM7CiAg
ICAgICAgIGRvbWFpbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFdLVHlwZVJlZiBp
dGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7CisgICAgICAgICAg
ICBhdXRvIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluc0FycmF5LCBpKTsKICAg
ICAgICAgICAgIGlmIChpdGVtICYmIFdLR2V0VHlwZUlEKGl0ZW0pID09IFdLU3RyaW5nR2V0VHlw
ZUlEKCkpCiAgICAgICAgICAgICAgICAgZG9tYWlucy5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAgICAgIH0KQEAgLTQ0Niw3ICs0MTEsNyBA
QCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBh
Z2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgICAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5z
OwogICAgICAgICBkb21haW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBXS1R5cGVS
ZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChkb21haW5zQXJyYXksIGkpOworICAgICAg
ICAgICAgYXV0byBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnNBcnJheSwgaSk7
CiAgICAgICAgICAgICBpZiAoaXRlbSAmJiBXS0dldFR5cGVJRChpdGVtKSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKQogICAgICAgICAgICAgICAgIGRvbWFpbnMudW5jaGVja2VkQXBwZW5kKHRvV1RG
U3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwogICAgICAgICB9CkBAIC00
NjcsMTcgKzQzMiwxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRv
UGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2FsbFVJU2lkZVNj
cmlwdENhbGxiYWNrIikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXN1bHQiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBjYWxsYmFja0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FsbGJhY2tJRCIpKTsKLQotICAgICAgICB1bnNpZ25lZCBjYWxsYmFja0lE
ID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBjYWxsYmFja0lE
S2V5LmdldCgpKSkpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIHJlc3VsdFN0cmluZyA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgcmVzdWx0S2V5LmdldCgpKSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0SlNTdHJp
bmcgPSB0b0pTKHJlc3VsdFN0cmluZyk7Ci0KLSAgICAgICAgbV90ZXN0UnVubmVyLT5ydW5VSVNj
cmlwdENhbGxiYWNrKGNhbGxiYWNrSUQsIHJlc3VsdEpTU3RyaW5nLmdldCgpKTsKKyAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIGNhbGxiYWNrSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJDYWxsYmFja0lEIik7CisgICAgICAgIGF1dG8gcmVzdWx0U3RyaW5nID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUmVzdWx0Iik7CisgICAgICAgIG1fdGVzdFJ1
bm5lci0+cnVuVUlTY3JpcHRDYWxsYmFjayhjYWxsYmFja0lELCB0b0pTKHJlc3VsdFN0cmluZyku
Z2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00OTgsMjkgKzQ1NiwxNyBAQCB2
b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSwgV0tTdHJpbmdSZWYgbQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eUZpbmlzaGVkIikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc0tl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk51bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbnVt
YmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRob3V0VXNlckludGVyYWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNl
ckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVy
YWN0aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVkaWFuRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWVkaWFuRGF5c1NpbmNl
VXNlckludGVyYWN0aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wM051bWJlck9mUHJldmFsZW50UmVz
b3VyY2VzV2l0aFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJIikpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhblN1YkZyYW1lV2l0aG91
dFVJIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wM01lZGlhblN1YlJl
c291cmNlV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSUtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcDNNZWRpYW5VbmlxdWVSZWRp
cmVjdHNXaXRob3V0VUkiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3Az
TWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRV
SSIpKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJP
ZlByZXZhbGVudFJlc291cmNlc0tleS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dp
dGhVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiA9ICh1bnNpZ25lZClXS1VJ
bnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3BQ
cmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rp
b24gPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcFByZXZh
bGVudFJlc291cmNlV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbktl
eS5nZXQoKSkpKTsKLSAgICAgICAgdW5zaWduZWQgbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uID0gKHVuc2lnbmVkKVdLVUlu
dDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rp
b25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb25LZXkuZ2V0KCkpKSk7Ci0gICAg
ICAgIHVuc2lnbmVkIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSA9ICh1bnNp
Z25lZClXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wM051bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzV2l0aFVJS2V5LmdldCgpKSkpOwotICAgICAgICB1bnNpZ25lZCB0b3AzTWVk
aWFuU3ViRnJhbWVXaXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNf
Y2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIHRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSUtleS5nZXQoKSkpKTsKLSAgICAg
ICAgdW5zaWduZWQgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJID0gKHVuc2lnbmVkKVdL
VUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRo
b3V0VUlLZXkuZ2V0KCkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRp
cmVjdHNXaXRob3V0VUkgPSAodW5zaWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUlLZXkuZ2V0KCkpKSk7Ci0gICAg
ICAgIHVuc2lnbmVkIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkgPSAodW5z
aWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcDNNZWRpYW5EYXRhUmVj
b3Jkc1JlbW92ZWRXaXRob3V0VUlLZXkuZ2V0KCkpKSk7CisgICAgICAgIGF1dG8gbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0
byBudW1iZXJPZlByZXZhbGVudFJlc291cmNlcyA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgIk51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzIik7CisgICAgICAgIGF1dG8gbnVt
YmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gbnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uIik7Cisg
ICAgICAgIGF1dG8gdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAi
VG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVy
YWN0aW9uIik7CisgICAgICAgIGF1dG8gbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJl
dmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uID0gdWludDY0VmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiTWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJldmFsZW50UmVz
b3VyY2VXaXRoVXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gdG9wM051bWJlck9mUHJl
dmFsZW50UmVzb3VyY2VzV2l0aFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiVG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVJIik7CisgICAgICAgIGF1dG8g
dG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiVG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJIik7CisgICAgICAgIGF1dG8gdG9w
M01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiVG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJIik7CisgICAgICAgIGF1dG8g
dG9wM01lZGlhblVuaXF1ZVJlZGlyZWN0c1dpdGhvdXRVSSA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIlRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUkiKTsKKyAg
ICAgICAgYXV0byB0b3AzTWVkaWFuRGF0YVJlY29yZHNSZW1vdmVkV2l0aG91dFVJID0gdWludDY0
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3Zl
ZFdpdGhvdXRVSSIpOwogCiAgICAgICAgIG1fdGVzdFJ1bm5lci0+c3RhdGlzdGljc0RpZFJ1blRl
bGVtZXRyeUNhbGxiYWNrKG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCBudW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIG51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlcklu
dGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLCBtZWRpYW5EYXlzU2luY2VVc2VySW50
ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24sIHRvcDNOdW1iZXJP
ZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSwgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91dFVJLCB0
b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUksIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNX
aXRob3V0VUksIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkpOwogICAgICAg
ICByZXR1cm47CkBAIC01NDEsMzEgKzQ4Nyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJl
Y2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJy
b3JNZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVy
cm9yIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5rbm93biIpKTsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBlcnJvck1lc3NhZ2VOYW1lLmdldCgpLCBlcnJv
ck1lc3NhZ2VCb2R5LmdldCgpKTsKLX0KLQotYm9vbCBJbmplY3RlZEJ1bmRsZTo6Ym9vbGVhbkZv
cktleShXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQotewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoa2V5KSk7Ci0gICAgV0tUeXBlUmVmIHZhbHVlID0gV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShkaWN0aW9uYXJ5LCB3a0tleS5nZXQoKSk7Ci0gICAgaWYgKFdLR2V0VHlw
ZUlEKHZhbHVlKSAhPSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSkgewotICAgICAgICBvdXRwdXRUZXh0
KG1ha2VTdHJpbmcoIkJvb2xlYW4gdmFsdWUgZm9yIGtleSIsIGtleSwgIiBub3QgZm91bmQgaW4g
ZGljdGlvbmFyeVxuIikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHZhbHVlKSk7Ci19
Ci0KLVN0cmluZyBJbmplY3RlZEJ1bmRsZTo6c3RyaW5nRm9yS2V5KFdLRGljdGlvbmFyeVJlZiBk
aWN0aW9uYXJ5LCBjb25zdCBjaGFyKiBrZXkpCi17Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHdrS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhrZXkpKTsK
LSAgICBXS1N0cmluZ1JlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIHdrS2V5LmdldCgpKSk7Ci0gICAgaWYgKCF2
YWx1ZSkgewotICAgICAgICBvdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlN0cmluZyB2YWx1ZSBmb3Ig
a2V5Iiwga2V5LCAiIG5vdCBmb3VuZCBpbiBkaWN0aW9uYXJ5XG4iKSk7Ci0gICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gdG9XVEZTdHJpbmcodmFsdWUpOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiRXJyb3IiLCAiVW5rbm93biIpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlOjpiZWdpblRlc3RpbmcoV0tEaWN0aW9uYXJ5UmVmIHNldHRpbmdzLCBCZWdpbmdU
ZXN0aW5nTW9kZSB0ZXN0aW5nTW9kZSkKQEAgLTU5OCwxMSArNTIwLDExIEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6OmJlZ2luVGVzdGluZyhXS0RpY3Rpb25hcnlSZWYgc2V0dGluZ3MsIEJlZ2luZ1Rl
c3RpbmdNb2RlIHRlCiAgICAgV0tCdW5kbGVTZXRBbGxvd1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVS
TFMobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBmYWxzZSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIFdLQnVuZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24o
cGFnZSgpLT5wYWdlKCksICFib29sZWFuRm9yS2V5KHNldHRpbmdzLCAiVXNlRmxleGlibGVWaWV3
cG9ydCIpKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRVc2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0
aW9uKHBhZ2UoKS0+cGFnZSgpLCAhYm9vbGVhblZhbHVlKHNldHRpbmdzLCAiVXNlRmxleGlibGVW
aWV3cG9ydCIpKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV2ViQ29yZVRl
c3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcoc3Ry
aW5nRm9yS2V5KHNldHRpbmdzLCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKSk7Cisg
ICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0Zv
clRlc3RpbmcodG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUoc2V0dGluZ3MsICJhZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlcyIpKSk7CiAjZW5kaWYKIAogICAgIG1fdGVzdFJ1bm5lci0+c2V0UGx1
Z2luc0VuYWJsZWQodHJ1ZSk7CkBAIC02NjAsMjUgKzU4MiwxNSBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlOjpkb25lKCkKICAgICBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5yZXNldFRvQ29uc2lz
dGVudFN0YXRlKCk7CiAjZW5kaWYKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkb25l
TWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb25l
IikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGRvbmVNZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdElzUGVuZGluZ0tleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0SXNQZW5kaW5nIikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcGl4ZWxSZXN1bHRJc1BlbmRpbmcgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShtX3BpeGVsUmVzdWx0SXNQZW5kaW5nKSk7Ci0gICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIHBpeGVsUmVzdWx0SXNQZW5kaW5nS2V5
LmdldCgpLCBwaXhlbFJlc3VsdElzUGVuZGluZy5nZXQoKSk7Ci0KLSAgICBpZiAoIW1fcGl4ZWxS
ZXN1bHRJc1BlbmRpbmcpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVs
UmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxS
ZXN1bHQiKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZG9uZU1lc3NhZ2VCb2R5Lmdl
dCgpLCBwaXhlbFJlc3VsdEtleS5nZXQoKSwgbV9waXhlbFJlc3VsdC5nZXQoKSk7Ci0gICAgfQot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlcGFpbnRSZWN0c0tleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlcGFpbnRSZWN0cyIpKTsKLSAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgcmVwYWludFJlY3RzS2V5Lmdl
dCgpLCBtX3JlcGFpbnRSZWN0cy5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGF1ZGlvUmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QXVkaW9SZXN1bHQiKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkb25lTWVzc2FnZUJvZHku
Z2V0KCksIGF1ZGlvUmVzdWx0S2V5LmdldCgpLCBtX2F1ZGlvUmVzdWx0LmdldCgpKTsKKyAgICBz
ZXRWYWx1ZShib2R5LCAiUGl4ZWxSZXN1bHRJc1BlbmRpbmciLCBtX3BpeGVsUmVzdWx0SXNQZW5k
aW5nKTsKKyAgICBpZiAoIW1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcpCisgICAgICAgIHNldFZhbHVl
KGJvZHksICJQaXhlbFJlc3VsdCIsIG1fcGl4ZWxSZXN1bHQpOworICAgIHNldFZhbHVlKGJvZHks
ICJSZXBhaW50UmVjdHMiLCBtX3JlcGFpbnRSZWN0cyk7CisgICAgc2V0VmFsdWUoYm9keSwgIkF1
ZGlvUmVzdWx0IiwgbV9hdWRpb1Jlc3VsdCk7CiAKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCksIGRvbmVNZXNzYWdl
TmFtZS5nZXQoKSwgZG9uZU1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUocGFnZSgpLT5wYWdlKCksIHRvV0so
IkRvbmUiKS5nZXQoKSwgYm9keS5nZXQoKSk7CiAKICAgICBjbG9zZU90aGVyUGFnZXMoKTsKIApA
QCAtNjkxLDkgKzYwMyw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmNsb3NlT3RoZXJQYWdlcygp
CiAgICAgc2l6ZV90IHNpemUgPSBtX3BhZ2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MTsgaSA8IHNpemU7ICsraSkKICAgICAgICAgcGFnZXNUb0Nsb3NlLmFwcGVuZChtX3BhZ2VzW2ld
LT5wYWdlKCkpOwotICAgIHNpemUgPSBwYWdlc1RvQ2xvc2Uuc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBXS0J1bmRsZVBhZ2VDbG9zZShwYWdl
c1RvQ2xvc2VbaV0pOworICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2VzVG9DbG9zZSkKKyAgICAg
ICAgV0tCdW5kbGVQYWdlQ2xvc2UocGFnZSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmR1
bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRl
cikKQEAgLTcwOSwxMyArNjIwLDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZHVtcFRvU3RkRXJy
KGNvbnN0IFN0cmluZyYgb3V0cHV0KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG91dHB1dC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEdW1w
VG9TdGRFcnIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5Owot
ICAgIGlmIChhdXRvIHV0ZjggPSBvdXRwdXQudHJ5R2V0VXRmOCgpKQotICAgICAgICBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodXRmOC0+ZGF0YSgp
KSk7Ci0gICAgZWxzZQotICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIk91dCBvZiBtZW1vcnlcbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IGhhdmUgdG8gY29udmVydCB0byBV
VEYtOCBpbnN0ZWFkIG9mIHVzaW5nIHRvV0s/CisgICAgYXV0byBzdHJpbmcgPSBvdXRwdXQudHJ5
R2V0VXRmOCgpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiRHVtcFRvU3RkRXJyIiwgc3RyaW5nID8g
c3RyaW5nLT5kYXRhKCkgOiAiT3V0IG9mIG1lbW9yeVxuIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6Om91dHB1dFRleHQoY29uc3QgU3RyaW5nJiBvdXRwdXQpCkBAIC03MjQsMjgwICs2MzEs
MTU1IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6Om91dHB1dFRleHQoY29uc3QgU3RyaW5nJiBvdXRw
dXQpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAob3V0cHV0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRleHRPdXRwdXQiKSk7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5OwotICAgIGlmIChhdXRvIHV0ZjggPSBv
dXRwdXQudHJ5R2V0VXRmOCgpKQotICAgICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodXRmOC0+ZGF0YSgpKSk7Ci0gICAgZWxzZQotICAgICAg
ICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk91
dCBvZiBtZW1vcnlcbiIpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IGhhdmUgdG8gY29u
dmVydCB0byBVVEYtOCBpbnN0ZWFkIG9mIHVzaW5nIHRvV0s/CisgICAgYXV0byBzdHJpbmcgPSBv
dXRwdXQudHJ5R2V0VXRmOCgpOwogICAgIC8vIFdlIHVzZSBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUoKSBpbnN0ZWFkIG9mIFdLQnVuZGxlUGFnZVBv
c3RNZXNzYWdlKCkgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHRleHQgb3V0cHV0CiAgICAgLy8gaXMg
ZG9uZSB2aWEgYXN5bmNocm9ub3VzIElQQywgZXZlbiBpZiB0aGUgY29ubmVjdGlvbiBpcyBpbiBm
dWxseSBzeW5jaHJvbm91cyBtb2RlIGR1ZSB0byBhIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKCkKICAgICAvLyBjYWxsLiBPdGhlcndpc2UsIG1lc3NhZ2VzIGxv
Z2dlZCB2aWEgc3luYyBhbmQgYXN5bmMgSVBDIG1heSBlbmQgdXAgb3V0IG9mIG9yZGVyIGFuZCBj
YXVzZSBmbGFraW5lc3MuCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5
U3luY2hyb25vdXNNb2RlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5
bmNocm9ub3VzTW9kZShwYWdlKCktPnBhZ2UoKSwgdG9XSygiVGV4dE91dHB1dCIpLmdldCgpLCB0
b1dLKHN0cmluZyA/IHN0cmluZy0+ZGF0YSgpIDogIk91dCBvZiBtZW1vcnlcbiIpLmdldCgpKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVl
KGJvb2wgdmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQmVmb3JlVW5sb2FkUmV0
dXJuVmFsdWUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIsIHZhbHVl
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdEFkZENocm9tZUlucHV0RmllbGQoKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFkZENocm9tZUlucHV0RmllbGQiKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkFkZENocm9tZUlucHV0RmllbGQiKTsKIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFJlbW92ZUNocm9tZUlucHV0RmllbGQoKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlbW92ZUNocm9tZUlucHV0RmllbGQiKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAw
KTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlJlbW92ZUNocm9tZUlucHV0RmllbGQiKTsKIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdEZvY3VzV2ViVmlldygpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiRm9jdXNXZWJWaWV3IikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdl
KHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJGb2N1c1dlYlZpZXciKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFNldEJh
Y2tpbmdTY2FsZUZhY3Rvcihkb3VibGUgYmFja2luZ1NjYWxlRmFjdG9yKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldEJhY2tpbmdTY2FsZUZhY3RvciIpKTsKLSAgICBXS1JldGFpblB0
cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGJhY2tp
bmdTY2FsZUZhY3RvcikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0QmFja2luZ1NjYWxlRmFjdG9yIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShi
YWNraW5nU2NhbGVGYWN0b3IpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTZXRX
aW5kb3dJc0tleShib29sIGlzS2V5KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFdp
bmRvd0lzS2V5IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0tleSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJTZXRXaW5kb3dJc0tl
eSIpLmdldCgpLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0tleSkpLmdldCgpLCAwKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFNldFZpZXdTaXplKGRvdWJsZSB3aWR0aCwgZG91
YmxlIGhlaWdodCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRWaWV3U2l6ZSIpKTsK
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3aWR0aEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBoZWlnaHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJoZWlnaHQiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB3aWR0aFdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0
ZSh3aWR0aCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHdp
ZHRoS2V5LmdldCgpLCB3aWR0aFdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLRG91Ymxl
UmVmPiBoZWlnaHRXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoaGVpZ2h0KSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgaGVpZ2h0S2V5LmdldCgpLCBoZWln
aHRXSy5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCAwKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVh
dGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIndpZHRoIiwgd2lkdGgpOworICAgIHNldFZhbHVl
KGJvZHksICJoZWlnaHQiLCBoZWlnaHQpOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJTZXRWaWV3U2l6ZSIpLmdl
dCgpLCBib2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFNpbXVs
YXRlV2ViTm90aWZpY2F0aW9uQ2xpY2sodWludDY0X3Qgbm90aWZpY2F0aW9uSUQpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0
Q3JlYXRlKG5vdGlmaWNhdGlvbklEKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrIiwgYWRvcHRXSyhX
S1VJbnQ2NENyZWF0ZShub3RpZmljYXRpb25JRCkpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6cG9zdFNldEFkZHNWaXNpdGVkTGlua3MoYm9vbCBhZGRzVmlzaXRlZExpbmtzKQogewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFkZHNWaXNpdGVkTGlua3MiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGFkZHNWaXNpdGVkTGlua3MpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlNldEFkZHNWaXNpdGVkTGlua3MiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZShhZGRzVmlzaXRlZExpbmtzKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRHZW9s
b2NhdGlvblBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpOwot
ICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpKTsKIH0K
IAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91Ymxl
IGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUg
aGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNG
bG9vckxldmVsLCBkb3VibGUgZmxvb3JMZXZlbCkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3Vi
bGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8
ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uIikpOwotCi0gICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
TXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbGF0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImxhdGl0dWRlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBsYXRpdHVkZVdLID0g
YWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShsYXRpdHVkZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGxhdGl0dWRlS2V5V0suZ2V0KCksIGxhdGl0dWRlV0suZ2V0
KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvbmdpdHVkZUtleVdLID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibG9uZ2l0dWRlIikpOwotICAgIFdL
UmV0YWluUHRyPFdLRG91YmxlUmVmPiBsb25naXR1ZGVXSyA9IGFkb3B0V0soV0tEb3VibGVDcmVh
dGUobG9uZ2l0dWRlKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQo
KSwgbG9uZ2l0dWRlS2V5V0suZ2V0KCksIGxvbmdpdHVkZVdLLmdldCgpKTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBhY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiYWNjdXJhY3kiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVS
ZWY+IGFjY3VyYWN5V0sgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGFjY3VyYWN5KSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgYWNjdXJhY3lLZXlXSy5nZXQo
KSwgYWNjdXJhY3lXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJv
dmlkZXNBbHRpdHVkZUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygicHJvdmlkZXNBbHRpdHVkZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHBy
b3ZpZGVzQWx0aXR1ZGVXSyA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzQWx0aXR1
ZGUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwcm92aWRl
c0FsdGl0dWRlS2V5V0suZ2V0KCksIHByb3ZpZGVzQWx0aXR1ZGVXSy5nZXQoKSk7Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0aXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImFsdGl0dWRlIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91
YmxlUmVmPiBhbHRpdHVkZVdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShhbHRpdHVkZSkpOwot
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGFsdGl0dWRlS2V5V0su
Z2V0KCksIGFsdGl0dWRlV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygicHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5IikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5V0sgPSBhZG9wdFdLKFdL
Qm9vbGVhbkNyZWF0ZShwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kpKTsKLSAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3lLZXlX
Sy5nZXQoKSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5V0suZ2V0KCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGFsdGl0dWRlQWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFsdGl0dWRlQWNjdXJhY3kiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEb3VibGVSZWY+IGFsdGl0dWRlQWNjdXJhY3lXSyA9IGFkb3B0V0soV0tEb3VibGVD
cmVhdGUoYWx0aXR1ZGVBY2N1cmFjeSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2Fn
ZUJvZHkuZ2V0KCksIGFsdGl0dWRlQWNjdXJhY3lLZXlXSy5nZXQoKSwgYWx0aXR1ZGVBY2N1cmFj
eVdLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwcm92aWRlc0hlYWRp
bmdLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVz
SGVhZGluZyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzSGVhZGlu
Z1dLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocHJvdmlkZXNIZWFkaW5nKSk7Ci0gICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcHJvdmlkZXNIZWFkaW5nS2V5V0su
Z2V0KCksIHByb3ZpZGVzSGVhZGluZ1dLLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBoZWFkaW5nS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJoZWFkaW5nIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBoZWFkaW5nV0sg
PSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGhlYWRpbmcpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBoZWFkaW5nS2V5V0suZ2V0KCksIGhlYWRpbmdXSy5nZXQo
KSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcHJvdmlkZXNTcGVlZEtleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNTcGVlZCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHByb3ZpZGVzU3BlZWRXSyA9IGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKHByb3ZpZGVzU3BlZWQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KG1lc3NhZ2VCb2R5LmdldCgpLCBwcm92aWRlc1NwZWVkS2V5V0suZ2V0KCksIHByb3ZpZGVzU3Bl
ZWRXSy5nZXQoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3BlZWRLZXlXSyA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInNwZWVkIikpOwotICAgIFdL
UmV0YWluUHRyPFdLRG91YmxlUmVmPiBzcGVlZFdLID0gYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZShz
cGVlZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHNwZWVk
S2V5V0suZ2V0KCksIHNwZWVkV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHByb3ZpZGVzRmxvb3JMZXZlbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygicHJvdmlkZXNGbG9vckxldmVsIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9v
bGVhblJlZj4gcHJvdmlkZXNGbG9vckxldmVsV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShw
cm92aWRlc0Zsb29yTGV2ZWwpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5
LmdldCgpLCBwcm92aWRlc0Zsb29yTGV2ZWxLZXlXSy5nZXQoKSwgcHJvdmlkZXNGbG9vckxldmVs
V0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZsb29yTGV2ZWxLZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZsb29yTGV2ZWwiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IGZsb29yTGV2ZWxXSyA9IGFkb3B0V0soV0tE
b3VibGVDcmVhdGUoZmxvb3JMZXZlbCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2Fn
ZUJvZHkuZ2V0KCksIGZsb29yTGV2ZWxLZXlXSy5nZXQoKSwgZmxvb3JMZXZlbFdLLmdldCgpKTsK
LQotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tN
dXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAibGF0aXR1ZGUi
LCBsYXRpdHVkZSk7CisgICAgc2V0VmFsdWUoYm9keSwgImxvbmdpdHVkZSIsIGxvbmdpdHVkZSk7
CisgICAgc2V0VmFsdWUoYm9keSwgImFjY3VyYWN5IiwgYWNjdXJhY3kpOworICAgIHNldFZhbHVl
KGJvZHksICJhbHRpdHVkZSIsIGFsdGl0dWRlKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiYWx0aXR1
ZGVBY2N1cmFjeSIsIGFsdGl0dWRlQWNjdXJhY3kpOworICAgIHNldFZhbHVlKGJvZHksICJoZWFk
aW5nIiwgaGVhZGluZyk7CisgICAgc2V0VmFsdWUoYm9keSwgInNwZWVkIiwgc3BlZWQpOworICAg
IHNldFZhbHVlKGJvZHksICJmbG9vckxldmVsIiwgZmxvb3JMZXZlbCk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIsIGJvZHkpOwogfQogCiB2b2lkIElu
amVjdGVkQnVuZGxlOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3Io
V0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIGVycm9y
TWVzc2FnZSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
blVuYXZhaWxhYmxlRXJyb3IiLCBlcnJvck1lc3NhZ2UpOwogfQogCiBib29sIEluamVjdGVkQnVu
ZGxlOjppc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUoKSBjb25zdAogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKSk7Ci0gICAgV0tUeXBlUmVm
IHJlc3VsdFRvUGFzcyA9IDA7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCAmcmVzdWx0
VG9QYXNzKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGlzQWN0aXZlID0gYWRvcHRX
SyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJlc3VsdFRvUGFzcykpOwotCi0gICAgcmV0dXJu
IFdLQm9vbGVhbkdldFZhbHVlKGlzQWN0aXZlLmdldCgpKTsKKyAgICBXS1R5cGVSZWYgcmVzdWx0
ID0gbnVsbHB0cjsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhwYWdlKCktPnBhZ2UoKSwgdG9XSygiSXNHZW9sb2NhdGlvbkNsaWVudEFjdGl2ZSIpLmdl
dCgpLCAwLCAmcmVzdWx0KTsKKyAgICByZXR1cm4gYm9vbGVhblZhbHVlKGFkb3B0V0socmVzdWx0
KS5nZXQoKSk7CiB9CiAKIHVuc2lnbmVkIEluamVjdGVkQnVuZGxlOjppbWFnZUNvdW50SW5HZW5l
cmFsUGFzdGVib2FyZCgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW1hZ2VD
b3VudEluR2VuZXJhbFBhc3RlYm9hcmQiKSk7Ci0gICAgV0tUeXBlUmVmIHJlc3VsdFRvUGFzcyA9
IDA7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCAmcmVzdWx0VG9QYXNzKTsKLSAgICBX
S1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW1hZ2VDb3VudCA9IGFkb3B0V0soc3RhdGljX2Nhc3Q8
V0tVSW50NjRSZWY+KHJlc3VsdFRvUGFzcykpOwotICAgIAotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oV0tVSW50NjRHZXRWYWx1ZShpbWFnZUNvdW50LmdldCgpKSk7CisgICAgV0tU
eXBlUmVmIHJlc3VsdCA9IG51bGxwdHI7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcocGFnZSgpLT5wYWdlKCksIHRvV0soIkltYWdlQ291bnRJbkdlbmVy
YWxQYXN0ZWJvYXJkIikuZ2V0KCksIDAsICZyZXN1bHQpOworICAgIHJldHVybiB1aW50NjRWYWx1
ZShhZG9wdFdLKHJlc3VsdCkuZ2V0KCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRV
c2VyTWVkaWFQZXJtaXNzaW9uKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0VXNlck1lZGlhUGVy
bWlzc2lvbiIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoZW5hYmxlZCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiU2V0VXNlck1lZGlhUGVybWlzc2lvbiIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGVu
YWJsZWQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlc2V0VXNlck1lZGlhUGVybWlz
c2lvbigpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlJlc2V0VXNlck1lZGlhUGVybWlzc2lvbiIpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwor
ICAgIHBvc3RQYWdlTWVzc2FnZSgiUmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uIik7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3Jp
Z2luKGJvb2wgcGVybWlzc2lvbiwgV0tTdHJpbmdSZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBwYXJl
bnRPcmlnaW4pCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3Jp
Z2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHBlcm1pc3Npb25LZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoInBlcm1pc3Npb24iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBwZXJtaXNzaW9uV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShwZXJtaXNzaW9u
KSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgcGVybWlzc2lv
bktleVdLLmdldCgpLCBwZXJtaXNzaW9uV0suZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygib3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0
KCksIG9yaWdpbktleVdLLmdldCgpLCBvcmlnaW4pOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHBhcmVudE9yaWdpbktleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygicGFyZW50T3JpZ2luIikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2Fn
ZUJvZHkuZ2V0KCksIHBhcmVudE9yaWdpbktleVdLLmdldCgpLCBwYXJlbnRPcmlnaW4pOwotCi0g
ICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFi
bGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNldFZhbHVlKGJvZHksICJwZXJtaXNzaW9uIiwg
cGVybWlzc2lvbik7CisgICAgc2V0VmFsdWUoYm9keSwgIm9yaWdpbiIsIG9yaWdpbik7CisgICAg
c2V0VmFsdWUoYm9keSwgInBhcmVudE9yaWdpbiIsIHBhcmVudE9yaWdpbik7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJTZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbiIsIGJv
ZHkpOwogfQogCiB1bnNpZ25lZCBJbmplY3RlZEJ1bmRsZTo6dXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RDb3VudEZvck9yaWdpbihXS1N0cmluZ1JlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIHBhcmVu
dE9yaWdpbikgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5
Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbktleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIG9yaWdpbktleVdLLmdldCgpLCBv
cmlnaW4pOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktleVdL
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2luIikp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBhcmVudE9yaWdp
bktleVdLLmdldCgpLCBwYXJlbnRPcmlnaW4pOwotCi0gICAgV0tUeXBlUmVmIHJlc3VsdFRvUGFz
cyA9IDA7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rpbmco
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJl
c3VsdFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGNvdW50ID0gYWRvcHRX
SyhzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4ocmVzdWx0VG9QYXNzKSk7Ci0KLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUoY291bnQuZ2V0KCkpKTsKKyAg
ICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAg
c2V0VmFsdWUoYm9keSwgIm9yaWdpbiIsIG9yaWdpbik7CisgICAgc2V0VmFsdWUoYm9keSwgInBh
cmVudE9yaWdpbiIsIHBhcmVudE9yaWdpbik7CisgICAgV0tUeXBlUmVmIHJlc3VsdCA9IG51bGxw
dHI7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcocGFn
ZSgpLT5wYWdlKCksIHRvV0soIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmln
aW4iKS5nZXQoKSwgYm9keS5nZXQoKSwgJnJlc3VsdCk7CisgICAgcmV0dXJuIHVpbnQ2NFZhbHVl
KGFkb3B0V0socmVzdWx0KS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlc2V0
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihXS1N0cmluZ1JlZiBvcmln
aW4sIFdLU3RyaW5nUmVmIHBhcmVudE9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JPcmlnaW4iKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gb3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJvcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwg
b3JpZ2luS2V5V0suZ2V0KCksIG9yaWdpbik7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gcGFyZW50T3JpZ2luS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJwYXJlbnRPcmlnaW4iKSk7Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9k
eS5nZXQoKSwgcGFyZW50T3JpZ2luS2V5V0suZ2V0KCksIHBhcmVudE9yaWdpbik7Ci0KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURp
Y3Rpb25hcnlDcmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgIm9yaWdpbiIsIG9yaWdpbik7
CisgICAgc2V0VmFsdWUoYm9keSwgInBhcmVudE9yaWdpbiIsIHBhcmVudE9yaWdpbik7CisgICAg
cG9zdFBhZ2VNZXNzYWdlKCJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291bnRGb3JP
cmlnaW4iLCBib2R5KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0Q3VzdG9tUG9saWN5
RGVsZWdhdGUoYm9vbCBlbmFibGVkLCBib29sIHBlcm1pc3NpdmUpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUiKSk7Ci0KLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxl
RGljdGlvbmFyeUNyZWF0ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbmFi
bGVkS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJlbmFibGVk
IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZW5hYmxlZFdLID0gYWRvcHRXSyhX
S0Jvb2xlYW5DcmVhdGUoZW5hYmxlZCkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2Fn
ZUJvZHkuZ2V0KCksIGVuYWJsZWRLZXlXSy5nZXQoKSwgZW5hYmxlZFdLLmdldCgpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJtaXNzaXZlS2V5V0sgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwZXJtaXNzaXZlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gcGVybWlzc2l2ZVdLID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUocGVy
bWlzc2l2ZSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHBl
cm1pc3NpdmVLZXlXSy5nZXQoKSwgcGVybWlzc2l2ZVdLLmdldCgpKTsKLQotICAgIFdLQnVuZGxl
UGFnZVBvc3RNZXNzYWdlKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCkpOworICAgIGF1dG8gYm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFy
eUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShib2R5LCAiZW5hYmxlZCIsIGVuYWJsZWQpOworICAg
IHNldFZhbHVlKGJvZHksICJwZXJtaXNzaXZlIiwgcGVybWlzc2l2ZSk7CisgICAgcG9zdFBhZ2VN
ZXNzYWdlKCJTZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSIsIGJvZHkpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlOjpzZXRIaWRkZW4oYm9vbCBoaWRkZW4pCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0SGlkZGVuIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlS
ZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwot
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzSW5pdGlhbEtleVdLID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGlkZGVuIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gaXNJbml0aWFsV0sgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoaWRk
ZW4pKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBpc0luaXRp
YWxLZXlXSy5nZXQoKSwgaXNJbml0aWFsV0suZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgYXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOworICAgIHNldFZhbHVlKGJvZHksICJoaWRkZW4iLCBoaWRkZW4pOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiU2V0SGlkZGVuIiwgYm9keSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNl
dENhY2hlTW9kZWwoaW50IG1vZGVsKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldENh
Y2hlTW9kZWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtb2RlbCkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJTZXRDYWNoZU1v
ZGVsIikuZ2V0KCksIGFkb3B0V0soV0tVSW50NjRDcmVhdGUobW9kZWwpKS5nZXQoKSwgbnVsbHB0
cik7CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OnNob3VsZFByb2Nlc3NXb3JrUXVldWUoKSBj
b25zdApAQCAtMTAwNSwxMTAgKzc4Nyw3MyBAQCBib29sIEluamVjdGVkQnVuZGxlOjpzaG91bGRQ
cm9jZXNzV29ya1F1ZXVlKCkgY29uc3QKICAgICBpZiAoIW1fdXNlV29ya1F1ZXVlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1dvcmtRdWV1ZUVt
cHR5IikpOwotICAgIFdLVHlwZVJlZiByZXN1bHRUb1Bhc3MgPSAwOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCwgJnJlc3VsdFRvUGFzcyk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBpc0VtcHR5ID0gYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJlc3VsdFRv
UGFzcykpOworICAgIFdLVHlwZVJlZiByZXN1bHQgPSBudWxscHRyOworICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKS0+cGFnZSgpLCB0b1dLKCJJ
c1dvcmtRdWV1ZUVtcHR5IikuZ2V0KCksIDAsICZyZXN1bHQpOwogCiAgICAgLy8gVGhlIElQQyBm
YWlsZWQuIFRoaXMgaGFwcGVucyB3aGVuIHN3YXBwaW5nIHByb2Nlc3NlcyBvbiBuYXZpZ2F0aW9u
IGJlY2F1c2UgdGhlIFdlYlBhZ2VQcm94eSB1bnJlZ2lzdGVycyBpdHNlbGYKICAgICAvLyBhcyBh
IE1lc3NhZ2VSZWNlaXZlciBmcm9tIHRoZSBvbGQgV2ViUHJvY2Vzc1Byb3h5IGFuZCByZWdpc3Rl
ciBpdHNlbGYgd2l0aCB0aGUgbmV3IFdlYlByb2Nlc3NQcm94eSBpbnN0ZWFkLgotICAgIGlmICgh
aXNFbXB0eSkKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
cmV0dXJuICFXS0Jvb2xlYW5HZXRWYWx1ZShpc0VtcHR5LmdldCgpKTsKKyAgICBhdXRvIGlzRW1w
dHkgPSBib29sZWFuVmFsdWUoYWRvcHRXSyhyZXN1bHQpLmdldCgpKTsKKyAgICByZXR1cm4gIWlz
RW1wdHk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnByb2Nlc3NXb3JrUXVldWUoKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlByb2Nlc3NXb3JrUXVldWUiKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdE1lc3NhZ2UocGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIlByb2Nlc3NXb3JrUXVldWUiKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6cXVldWVCYWNrTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJCYWNrd2FyZCkK
IHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJRdWV1ZUJhY2tOYXZpZ2F0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBt
ZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaG93RmFyQmFja3dhcmQpKTsKLSAg
ICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlQmFja05h
dmlnYXRpb24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvd0ZhckJhY2t3YXJkKSkpOwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHVuc2lnbmVkIGhv
d0ZhckZvcndhcmQpCiB7CiAgICAgbV91c2VXb3JrUXVldWUgPSB0cnVlOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiUXVldWVGb3J3YXJkTmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0
cjxXS1VJbnQ2NFJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvd0Zh
ckZvcndhcmQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIlF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvd0Zh
ckZvcndhcmQpKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnF1ZXVlTG9hZChXS1N0cmlu
Z1JlZiB1cmwsIFdLU3RyaW5nUmVmIHRhcmdldCwgYm9vbCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxz
KQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlF1ZXVlTG9hZCIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlS
ZWY+IGxvYWREYXRhID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoInVybCIpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxvYWRE
YXRhLmdldCgpLCB1cmxLZXkuZ2V0KCksIHVybCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdGFyZ2V0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
dGFyZ2V0IikpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCksIHRhcmdl
dEtleS5nZXQoKSwgdGFyZ2V0KTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzaG91
bGRPcGVuRXh0ZXJuYWxVUkxzS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygic2hvdWxkT3BlbkV4dGVybmFsVVJMcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGxv
YWREYXRhLmdldCgpLCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzS2V5LmdldCgpLCBzaG91bGRPcGVu
RXh0ZXJuYWxVUkxzVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBsb2FkRGF0YS5nZXQoKSk7CisgICAg
YXV0byBib2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOworICAgIHNl
dFZhbHVlKGJvZHksICJ1cmwiLCB1cmwpOworICAgIHNldFZhbHVlKGJvZHksICJ0YXJnZXQiLCB0
YXJnZXQpOworICAgIHNldFZhbHVlKGJvZHksICJzaG91bGRPcGVuRXh0ZXJuYWxVUkxzIiwgc2hv
dWxkT3BlbkV4dGVybmFsVVJMcyk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUxvYWQiLCBi
b2R5KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVMb2FkSFRNTFN0cmluZyhXS1N0
cmluZ1JlZiBjb250ZW50LCBXS1N0cmluZ1JlZiBiYXNlVVJMLCBXS1N0cmluZ1JlZiB1bnJlYWNo
YWJsZVVSTCkKIHsKICAgICBtX3VzZVdvcmtRdWV1ZSA9IHRydWU7Ci0KLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJRdWV1ZUxvYWRIVE1MU3RyaW5nIikpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tN
dXRhYmxlRGljdGlvbmFyeVJlZj4gbG9hZERhdGEgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25h
cnlDcmVhdGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY29udGVudEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbnRlbnQiKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgY29udGVudEtleS5nZXQoKSwgY29u
dGVudCk7Ci0KLSAgICBpZiAoYmFzZVVSTCkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gYmFzZVVSTEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImJhc2VVUkwiKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obG9hZERhdGEuZ2V0KCks
IGJhc2VVUkxLZXkuZ2V0KCksIGJhc2VVUkwpOwotICAgIH0KLQotICAgIGlmICh1bnJlYWNoYWJs
ZVVSTCkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkxL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1bnJlYWNoYWJsZVVS
TCIpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShsb2FkRGF0YS5nZXQoKSwgdW5yZWFj
aGFibGVVUkxLZXkuZ2V0KCksIHVucmVhY2hhYmxlVVJMKTsKLSAgICB9Ci0KLSAgICBXS0J1bmRs
ZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIGxvYWRE
YXRhLmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7CisgICAgc2V0VmFsdWUoYm9keSwgImNvbnRlbnQiLCBjb250ZW50KTsKKyAgICBp
ZiAoYmFzZVVSTCkKKyAgICAgICAgc2V0VmFsdWUoYm9keSwgImJhc2VVUkwiLCBiYXNlVVJMKTsK
KyAgICBpZiAodW5yZWFjaGFibGVVUkwpCisgICAgICAgIHNldFZhbHVlKGJvZHksICJ1bnJlYWNo
YWJsZVVSTCIsIHVucmVhY2hhYmxlVVJMKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlF1ZXVlTG9h
ZEhUTUxTdHJpbmciLCBib2R5KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cXVldWVSZWxv
YWQoKQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlF1ZXVlUmVsb2FkIikpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKHBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJR
dWV1ZVJlbG9hZCIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZUxvYWRpbmdTY3Jp
cHQoV0tTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlF1ZXVlTG9hZGluZ1NjcmlwdCIpKTsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHNj
cmlwdCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZUxvYWRpbmdTY3JpcHQiLCBzY3JpcHQp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoV0tTdHJp
bmdSZWYgc2NyaXB0KQogewogICAgIG1fdXNlV29ya1F1ZXVlID0gdHJ1ZTsKLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIpKTsKLSAgICBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZShwYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHNjcmlwdCk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJRdWV1ZU5vbkxvYWRpbmdTY3JpcHQiLCBzY3JpcHQpOwog
fQogCiBib29sIEluamVjdGVkQnVuZGxlOjppc0FsbG93ZWRIb3N0KFdLU3RyaW5nUmVmIGhvc3Qp
CkBAIC0xMTQzLDQgKzg4OCw4MSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjp0ZXh0RmllbGREaWRF
bmRFZGl0aW5nKCkKICAgICBtX3Rlc3RSdW5uZXItPnRleHRGaWVsZERpZEVuZEVkaXRpbmdDYWxs
YmFjaygpOwogfQogCit2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAg
cG9zdE1lc3NhZ2UobmFtZSwgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiB7IH0pOworfQorCit2b2lk
IHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgcG9zdE1l
c3NhZ2UobmFtZSwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSk7Cit9CisKK3ZvaWQg
cG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgdmFsdWUpCit7CisgICAgcG9z
dE1lc3NhZ2UobmFtZSwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZSh2YWx1ZSkpKTsKK30KKwordm9p
ZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3sKKyAg
ICBwb3N0TWVzc2FnZShuYW1lLCB0b1dLKHZhbHVlKSk7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9u
b3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UobmFtZSwgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiB7IH0pOworfQorCit2b2lkIHBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKG5hbWUsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkp
OworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdWlu
dDY0X3QgdmFsdWUpCit7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShuYW1lLCBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKHZhbHVlKSkpOworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgdmFsdWUpCit7CisgICAgdWludDY0X3QgcHJv
bW90ZWRWYWx1ZSA9IHZhbHVlOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UobmFtZSwgcHJv
bW90ZWRWYWx1ZSk7Cit9CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFy
KiBuYW1lLCBkb3VibGUgdmFsdWUpCit7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShuYW1l
LCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSkpOworfQorCit2b2lkIHBvc3RQYWdlTWVz
c2FnZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHBvc3RQYWdlTWVzc2FnZShuYW1lLCBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IHsgfSk7Cit9CisKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNvbnN0
IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgcG9zdFBhZ2VNZXNzYWdlKG5hbWUsIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkpOworfQorCit2b2lkIHBvc3RQYWdlTWVzc2Fn
ZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBwb3N0UGFnZU1l
c3NhZ2UobmFtZSwgdG9XSyh2YWx1ZSkpOworfQorCit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25z
dCBjaGFyKiBuYW1lLCBXS1N0cmluZ1JlZiB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byBwYWdlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2VSZWYoKSkKKyAgICAgICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UocGFnZSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUpOworfQorCit2b2lk
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgcG9z
dFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UobmFtZSwgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiB7IH0p
OworfQorCit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUs
IGJvb2wgdmFsdWUpCit7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UobmFtZSwgYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5oCmluZGV4IGI3NjAxNDM2ZjBjNjcyODU2MzNhMDhlMjVmOTQyYThhYTk4ZDk3MGIu
LmY4YTdlMjk0NTRlYmVlMDM5ODc0NzkzOWE3MmIzNWY4ZWRiN2QzZWMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02Myw2ICs2Myw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgSW5qZWN0ZWRCdW5kbGVQ
YWdlKiBwYWdlKCkgY29uc3Q7CisgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYoKSBjb25zdDsK
ICAgICBzaXplX3QgcGFnZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlcy5zaXplKCk7IH0K
ICAgICB2b2lkIGNsb3NlT3RoZXJQYWdlcygpOwogCkBAIC05Niw3ICs5Nyw3IEBAIHB1YmxpYzoK
IAogICAgIC8vIEdlb2xvY2F0aW9uLgogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KGJvb2wpOwotICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0
dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRp
dHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91
YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGlu
ZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxl
dmVsLCBkb3VibGUgZmxvb3JMZXZlbCk7CisgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwg
T3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3Vy
YWN5LCBPcHRpb25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9w
dGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCk7CiAgICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlKTsKICAgICBi
b29sIGlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpIGNvbnN0OwogCkBAIC0xNjQsMTQgKzE2
NSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0VXBJbmplY3RlZEJ1bmRsZUNsaWVudHMoV0tC
dW5kbGVQYWdlUmVmKTsKIAogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKFdLVHlwZVJlZiBp
bml0aWFsaXphdGlvblVzZXJEYXRhKTsKLSAgICB2b2lkIHJlc2V0TG9jYWxTZXR0aW5ncygpOwog
CiAgICAgZW51bSBjbGFzcyBCZWdpbmdUZXN0aW5nTW9kZSB7IE5ldywgUmVzdW1lIH07CiAgICAg
dm9pZCBiZWdpblRlc3RpbmcoV0tEaWN0aW9uYXJ5UmVmIGluaXRpYWxTZXR0aW5ncywgQmVnaW5n
VGVzdGluZ01vZGUpOwogCi0gICAgYm9vbCBib29sZWFuRm9yS2V5KFdLRGljdGlvbmFyeVJlZiwg
Y29uc3QgY2hhcioga2V5KTsKLSAgICBTdHJpbmcgc3RyaW5nRm9yS2V5KFdLRGljdGlvbmFyeVJl
ZiwgY29uc3QgY2hhcioga2V5KTsKLQogICAgIFdLQnVuZGxlUmVmIG1fYnVuZGxlIHsgbnVsbHB0
ciB9OwogICAgIFdLQnVuZGxlUGFnZUdyb3VwUmVmIG1fcGFnZUdyb3VwIHsgbnVsbHB0ciB9Owog
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW5qZWN0ZWRCdW5kbGVQYWdlPj4gbV9wYWdlczsK
QEAgLTIxMCw0ICsyMDcsNTUgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV91c2VyU2NyaXB0SW5q
ZWN0ZWRDb3VudCB7IDAgfTsKIH07CiAKK3ZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgY2hhciogbmFt
ZSk7Cit2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9p
ZCBwb3N0TWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpOwordm9pZCBwb3N0TWVz
c2FnZShjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCB2YWx1ZSk7Cit2b2lkIHBvc3RNZXNzYWdl
KGNvbnN0IGNoYXIqIG5hbWUsIHVpbnQ2NF90IHZhbHVlKTsKK3ZvaWQgcG9zdE1lc3NhZ2UoY29u
c3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpOwordm9pZCBwb3N0TWVzc2FnZShjb25z
dCBjaGFyKiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSk7Cit2b2lkIHBvc3RNZXNzYWdlKGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IHZvaWQqIHZhbHVlKSA9IGRlbGV0ZTsKKwordm9pZCBwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUpOwordm9pZCBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGludCB2YWx1ZSk7Cit2b2lkIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgdmFsdWUpOwordm9pZCBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIHVpbnQ2NF90IHZhbHVlKTsKK3Zv
aWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgdmFsdWUp
Owordm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNo
YXIqIHZhbHVlKTsKK3ZvaWQgcG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBjaGFyKiBuYW1l
LCBjb25zdCB2b2lkKiB2YWx1ZSkgPSBkZWxldGU7CisKK3ZvaWQgcG9zdFBhZ2VNZXNzYWdlKGNv
bnN0IGNoYXIqIG5hbWUpOwordm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSwg
Ym9vbCB2YWx1ZSk7Cit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBjaGFyKiB2YWx1ZSk7Cit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBX
S1N0cmluZ1JlZiB2YWx1ZSk7Cit2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1l
LCBjb25zdCB2b2lkKiB2YWx1ZSkgPSBkZWxldGU7CisKK3ZvaWQgcG9zdFN5bmNocm9ub3VzUGFn
ZU1lc3NhZ2UoY29uc3QgY2hhciogbmFtZSk7Cit2b2lkIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNz
YWdlKGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpOwordm9pZCBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7Cit2b2lkIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IHZvaWQqIHZh
bHVlKSA9IGRlbGV0ZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBwb3N0TWVzc2FnZShj
b25zdCBjaGFyKiBuYW1lLCBjb25zdCBXS1JldGFpblB0cjxUPiYgdmFsdWUpCit7CisgICAgV0tC
dW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRv
V0sobmFtZSkuZ2V0KCksIHZhbHVlLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0
YWluUHRyPFQ+JiB2YWx1ZSkKK3sKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB2
YWx1ZS5nZXQoKSwgbnVsbHB0cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgcG9z
dFBhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWluUHRyPFQ+JiB2YWx1
ZSkKK3sKKyAgICBpZiAoYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2VSZWYoKSkKKyAgICAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgdG9XSyhuYW1l
KS5nZXQoKSwgdmFsdWUuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHBv
c3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWlu
UHRyPFQ+JiB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2VSZWYoKSkKKyAgICAgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcocGFnZSwgdG9XSyhuYW1lKS5nZXQoKSwgdmFsdWUuZ2V0KCksIG51
bGxwdHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcApp
bmRleCBkODlmZWFmOWI2ZGFlNGM5Njg1MzFmMGFiNjM4NTg5MWIxNGY5OGY4Li4yZjU2NDI3NzMx
MTZkOWYxMDI0ZmE2ZmJlOWRjMzUyMGIxNWUxOGE5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3Bw
CkBAIC02MCw1MCArNjAsMTggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdU
UiB7CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIHByb3BlcnR5VmFsdWUoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQorc3RhdGlj
IGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVydHkoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29u
c3QgY2hhciogbmFtZSkKIHsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgYXV0byBwcm9wZXJ0eU5hbWVTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKLSAgICByZXR1cm4gSlNPYmplY3RHZXRQcm9wZXJ0eShj
b250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZVN0cmluZy5nZXQoKSwgMCk7Ci19Ci0KLXN0YXRp
YyBkb3VibGUgcHJvcGVydHlWYWx1ZURvdWJsZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgSlNWYWx1ZVJl
ZiB2YWx1ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwot
ICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgdmFsdWUsIDApOyAgICAKLX0KLQotc3RhdGljIGludCBwcm9wZXJ0eVZh
bHVlSW50KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIGNvbnN0IGNo
YXIqIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihwcm9wZXJ0
eVZhbHVlRG91YmxlKGNvbnRleHQsIG9iamVjdCwgcHJvcGVydHlOYW1lKSk7ICAgIAotfQotCi1z
dGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0eVZhbHVlKFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKLXsKLSAgICBKU0dsb2JhbENvbnRleHRS
ZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7Ci0g
ICAgcmV0dXJuIHByb3BlcnR5VmFsdWVEb3VibGUoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFs
T2JqZWN0KGNvbnRleHQpLCBwcm9wZXJ0eU5hbWUpOworICAgIGF1dG8gY29udGV4dCA9IFdLQnVu
ZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7CisgICAgcmV0dXJuIG51bWVyaWNQ
cm9wZXJ0eShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIG5hbWUp
OwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIG5vZGVWYWx1ZSkKIHsKLSAgICBKU1ZhbHVlUmVmIG5vZGVOYW1l
VmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIG5vZGVWYWx1ZSwgIm5vZGVOYW1lIik7Ci0g
ICAgYXV0byBqc1N0cmluZ05vZGVOYW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBub2RlTmFtZVZhbHVlLCAwKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5v
ZGVOYW1lID0gdG9XSyhqc1N0cmluZ05vZGVOYW1lKTsKLQotICAgIEpTVmFsdWVSZWYgcGFyZW50
Tm9kZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgbm9kZVZhbHVlLCAicGFyZW50Tm9kZSIpOwot
Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKG5vZGVOYW1lKSk7Ci0KLSAgICBpZiAocGFyZW50Tm9kZSAmJiBKU1Zh
bHVlSXNPYmplY3QoY29udGV4dCwgcGFyZW50Tm9kZSkpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIgPiAiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVt
cFBhdGgoY29udGV4dCwgKEpTT2JqZWN0UmVmKXBhcmVudE5vZGUpKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIGF1dG8gbmFtZSA9IHRvV1RGU3Ry
aW5nKHN0cmluZ1Byb3BlcnR5KGNvbnRleHQsIG5vZGVWYWx1ZSwgIm5vZGVOYW1lIikpOworICAg
IGlmIChhdXRvIHBhcmVudE5vZGUgPSBvYmplY3RQcm9wZXJ0eShjb250ZXh0LCBub2RlVmFsdWUs
ICJwYXJlbnROb2RlIikpCisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKG5hbWUsICIgPiAiLCBk
dW1wUGF0aChjb250ZXh0LCBwYXJlbnROb2RlKSk7CisgICAgcmV0dXJuIG5hbWU7CiB9CiAKIHN0
YXRpYyBXVEY6OlN0cmluZyBkdW1wUGF0aChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVT
Y3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGUpCkBAIC0xMjYs
NTMgKzk0LDQwIEBAIHN0YXRpYyBXVEY6OlN0cmluZyByYW5nZVRvU3RyKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkCiAgICAgaWYgKCFyYW5nZVJlZikK
ICAgICAgICAgcmV0dXJuICIobnVsbCkiOwogCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJh
bWUsIHdvcmxkKTsKLSAgICBKU1ZhbHVlUmVmIHJhbmdlVmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0
SmF2YVNjcmlwdFdyYXBwZXJGb3JSYW5nZUZvcldvcmxkKGZyYW1lLCByYW5nZVJlZiwgd29ybGQp
OworICAgIGF1dG8gZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CisgICAg
YXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQo
ZnJhbWUsIHdvcmxkKTsKKyAgICBhdXRvIHJhbmdlVmFsdWUgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdFdyYXBwZXJGb3JSYW5nZUZvcldvcmxkKGZyYW1lLCByYW5nZVJlZiwgd29ybGQpOwog
ICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgcmFuZ2VWYWx1ZSkpOwotICAgIEpT
T2JqZWN0UmVmIHJhbmdlT2JqZWN0ID0gKEpTT2JqZWN0UmVmKXJhbmdlVmFsdWU7Ci0KLSAgICBK
U1ZhbHVlUmVmIHN0YXJ0Tm9kZVZhbHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCByYW5nZU9i
amVjdCwgInN0YXJ0Q29udGFpbmVyIik7Ci0gICAgQVNTRVJUKEpTVmFsdWVJc09iamVjdChjb250
ZXh0LCBzdGFydE5vZGVWYWx1ZSkpOwotICAgIEpTT2JqZWN0UmVmIHN0YXJ0Tm9kZU9iamVjdCA9
IChKU09iamVjdFJlZilzdGFydE5vZGVWYWx1ZTsKLQotICAgIEpTVmFsdWVSZWYgZW5kTm9kZVZh
bHVlID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCByYW5nZU9iamVjdCwgImVuZENvbnRhaW5lciIp
OwotICAgIEFTU0VSVChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgZW5kTm9kZVZhbHVlKSk7Ci0g
ICAgSlNPYmplY3RSZWYgZW5kTm9kZU9iamVjdCA9IChKU09iamVjdFJlZillbmROb2RlVmFsdWU7
Ci0KLSAgICBpbnQgc3RhcnRPZmZzZXQgPSBwcm9wZXJ0eVZhbHVlSW50KGNvbnRleHQsIHJhbmdl
T2JqZWN0LCAic3RhcnRPZmZzZXQiKTsKLSAgICBpbnQgZW5kT2Zmc2V0ID0gcHJvcGVydHlWYWx1
ZUludChjb250ZXh0LCByYW5nZU9iamVjdCwgImVuZE9mZnNldCIpOwotCi0gICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgicmFu
Z2UgZnJvbSAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihzdGFydE9mZnNldCk7
Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb2YgIik7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4dCwgc3RhcnROb2RlT2JqZWN0KSk7Ci0gICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG8gIik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmROdW1iZXIoZW5kT2Zmc2V0KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBv
ZiAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChjb250ZXh0LCBlbmROb2Rl
T2JqZWN0KSk7Ci0gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBhdXRv
IHJhbmdlT2JqZWN0ID0gKEpTT2JqZWN0UmVmKXJhbmdlVmFsdWU7CisKKyAgICByZXR1cm4gbWFr
ZVN0cmluZygicmFuZ2UgZnJvbSAiLAorICAgICAgICBudW1lcmljUHJvcGVydHkoY29udGV4dCwg
cmFuZ2VPYmplY3QsICJzdGFydE9mZnNldCIpLAorICAgICAgICAiIG9mICIsCisgICAgICAgIGR1
bXBQYXRoKGNvbnRleHQsIG9iamVjdFByb3BlcnR5KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAic3Rh
cnRDb250YWluZXIiKSksCisgICAgICAgICIgdG8gIiwKKyAgICAgICAgbnVtZXJpY1Byb3BlcnR5
KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zmc2V0IiksCisgICAgICAgICIgb2YgIiwKKyAg
ICAgICAgZHVtcFBhdGgoY29udGV4dCwgb2JqZWN0UHJvcGVydHkoY29udGV4dCwgcmFuZ2VPYmpl
Y3QsICJlbmRDb250YWluZXIiKSkKKyAgICApOwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5
cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25U
eXBlTGlua0NsaWNrZWQ6Ci0gICAgICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJsaW5rIGNsaWNrZWQiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJsaW5r
IGNsaWNrZWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVGb3JtU3VibWl0dGVk
OgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Zm9ybSBzdWJtaXR0ZWQiKSk7CisgICAgICAgIHJldHVybiB0b1dLKCJmb3JtIHN1Ym1pdHRlZCIp
OwogICAgIGNhc2Uga1dLRnJhbWVOYXZpZ2F0aW9uVHlwZUJhY2tGb3J3YXJkOgotICAgICAgICBy
ZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYmFjay9mb3J3YXJk
IikpOworICAgICAgICByZXR1cm4gdG9XSygiYmFjay9mb3J3YXJkIik7CiAgICAgY2FzZSBrV0tG
cmFtZU5hdmlnYXRpb25UeXBlUmVsb2FkOgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicmVsb2FkIikpOworICAgICAgICByZXR1cm4gdG9XSygi
cmVsb2FkIik7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVk
OgotICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Zm9ybSByZXN1Ym1pdHRlZCIpKTsKKyAgICAgICAgcmV0dXJuIHRvV0soImZvcm0gcmVzdWJtaXR0
ZWQiKTsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVPdGhlcjoKLSAgICAgICAgcmV0
dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm90aGVyIikpOworICAg
ICAgICByZXR1cm4gdG9XSygib3RoZXIiKTsKICAgICB9Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImlsbGVnYWwgdmFsdWUiKSk7CisgICAgcmV0dXJu
IHRvV0soImlsbGVnYWwgdmFsdWUiKTsKIH0KIAogc3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVj
VG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlKQpAQCAtMTg1LDIzICsx
NDAsMTQgQEAgc3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHls
ZURlY2xhcmF0aW9uUmVmIHN0eWxlKQogICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCk7CiB9CiAKLXN0YXRpYyBXVEY6OlN0cmluZyBzZWN1cml0eU9yaWdpblRvU3RyKFdLU2VjdXJp
dHlPcmlnaW5SZWYgb3JpZ2luKQorc3RhdGljIFdURjo6U3RyaW5nIHN0cmluZyhXS1NlY3VyaXR5
T3JpZ2luUmVmIG9yaWdpbikKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0g
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ3snKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0
b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkp
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qo
b3JpZ2luKSkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAg
c3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoV0tTZWN1cml0eU9yaWdpbkdldFBvcnQob3JpZ2lu
KSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ30nKTsKLQotICAgIHJldHVybiBzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoJ3snLCB0b1dURlN0cmlu
ZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkpLCAiLCAiLCB0
b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5SG9zdChvcmlnaW4pKSksICIs
ICIsIFdLU2VjdXJpdHlPcmlnaW5HZXRQb3J0KG9yaWdpbiksICd9Jyk7CiB9CiAKIHN0YXRpYyBX
VEY6OlN0cmluZyBmcmFtZVRvU3RyKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFt
ZShmcmFtZSkpOworICAgIGF1dG8gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1l
KGZyYW1lKSk7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGlmIChXS0J1
bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7CiAgICAgICAgIGlmICghV0tTdHJpbmdJc0Vt
cHR5KG5hbWUuZ2V0KCkpKSB7CkBAIC0yMzUsMTIgKzE4MSwxMiBAQCBzdGF0aWMgaW5saW5lIFdU
Rjo6U3RyaW5nIHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZWYgZmlsZVVybCkKICAg
ICBpZiAoIWZpbGVVcmwpCiAgICAgICAgIHJldHVybiAiKG51bGwpIjsKIAotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzY2hlbWVTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShm
aWxlVXJsKSk7CisgICAgYXV0byBzY2hlbWVTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVt
ZShmaWxlVXJsKSk7CiAgICAgaWYgKCFpc0xvY2FsRmlsZVNjaGVtZShzY2hlbWVTdHJpbmcuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmco
ZmlsZVVybCkpKTsKIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQ
YWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tC
dW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7CisgICAgYXV0byBtYWluRnJhbWVVUkwgPSBh
ZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOwogICAgIGlmICghbWFpbkZy
YW1lVVJMKQogICAgICAgICBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5
UHJvdmlzaW9uYWxVUkwobWFpbkZyYW1lKSk7CiAKQEAgLTQzNCw4ICszODAsNyBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6cmVzZXRBZnRlclRlc3QoKQogICAgIC8vIChzZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgzMzQ+KSwgaG93ZXZlciBmb3IgdGVz
dHMsIHdlIHdhbnQgdG8gc3RhcnQgZWFjaCBvbmUgd2l0aCBhIGNsZWFuIHN0YXRlLgogICAgIFdL
QnVuZGxlRnJhbWVGb2N1cyhmcmFtZSk7CiAKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7Ci0gICAgV2ViQ29y
ZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdChjb250ZXh0KTsKKyAgICBXZWJDb3Jl
VGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChmcmFtZSkpOwogICAgIGFzc2lnbmVkVXJsc0NhY2hlKCkuY2xlYXIoKTsKIAog
ICAgIC8vIFVzZXIgc2NyaXB0cyBuZWVkIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgdGhlIHRlc3QgYW5k
IGJlZm9yZSBsb2FkaW5nIGFib3V0OmJsYW5rLCBhcyBvdGhlcndpc2UgdGhleSB3b3VsZCBydW4g
aW4gYWJvdXQ6YmxhbmssIGFuZCBwb3RlbnRpYWxseSBsZWFrIHJlc3VsdHMgaW50byBhIHN1YnNl
cXVlc3QgdGVzdC4KQEAgLTQ1MSw3ICszOTYsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
cmVzZXRBZnRlclRlc3QoKQogLy8gU3RyaW5nIG91dHB1dCBtdXN0IGJlIGlkZW50aWNhbCB0byAt
W1dlYkZyYW1lIF9kcnRfZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHRdLgogc3RhdGlj
IHZvaWQgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tCdW5kbGVG
cmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1l
KGZyYW1lKSk7CisgICAgYXV0byBuYW1lID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU5hbWUo
ZnJhbWUpKTsKICAgICBpZiAoV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkgewogICAg
ICAgICBpZiAoV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIm1haW4gZnJhbWUiKTsKQEAgLTQ4NiwyNyArNDMxLDIx
IEBAIHN0YXRpYyB2b2lkIGR1bXBMb2FkRXZlbnQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29u
c3QgY2hhciogZXZlbnROYW1lKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlcXVlc3REZXNj
cmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgU3Ry
aW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4g
dXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKLSAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gZmlyc3RQYXJ0eSA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0
UGFydHlGb3JDb29raWVzKHJlcXVlc3QpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
aHR0cE1ldGhvZCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkp
OwotCi0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8TlNVUkxSZXF1ZXN0IFVSTCAi
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVy
bC5nZXQoKSkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBtYWluIGRvY3Vt
ZW50IFVSTCAiKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0
UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiwgaHR0cCBtZXRob2QgIik7CisgICAgYXV0byB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVz
dENvcHlVUkwocmVxdWVzdCkpOworICAgIGF1dG8gZmlyc3RQYXJ0eSA9IGFkb3B0V0soV0tVUkxS
ZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29raWVzKHJlcXVlc3QpKTsKKyAgICBhdXRvIGh0dHBN
ZXRob2QgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlIVFRQTWV0aG9kKHJlcXVlc3QpKTsKIAor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCI8TlNVUkxSZXF1ZXN0IFVSTCAiLCBwYXRoU3VpdGFi
bGVGb3JUZXN0UmVzdWx0KHVybC5nZXQoKSksICIsIG1haW4gZG9jdW1lbnQgVVJMICIsIHBhdGhT
dWl0YWJsZUZvclRlc3RSZXN1bHQoZmlyc3RQYXJ0eS5nZXQoKSksICIsIGh0dHAgbWV0aG9kICIp
OwogICAgIGlmIChXS1N0cmluZ0lzRW1wdHkoaHR0cE1ldGhvZC5nZXQoKSkpCiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG5vbmUpIik7CiAgICAgZWxzZQogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhodHRwTWV0aG9kKSk7Ci0KICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlc3Bv
bnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXNwb25zZVJlZiByZXNw
b25zZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgYm9vbCBzaG91bGREdW1wUmVzcG9u
c2VIZWFkZXJzID0gZmFsc2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFk
b3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKKyAgICBhdXRvIHVybCA9IGFk
b3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKICAgICBpZiAoIXVybCkgewog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIihudWxsKSIpOwogICAgICAgICBy
ZXR1cm47CkBAIC01MzUsMzEgKzQ3NCwyMCBAQCB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OnJlc3BvbnNlSGVhZGVyQ291bnQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKIAogc3RhdGlj
IGlubGluZSB2b2lkIGR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdL
RXJyb3JSZWYgZXJyb3IsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yRG9tYWluID0gYWRvcHRXSyhXS0Vycm9yQ29weURv
bWFpbihlcnJvcikpOwotICAgIGludCBlcnJvckNvZGUgPSBXS0Vycm9yR2V0RXJyb3JDb2RlKGVy
cm9yKTsKKyAgICBhdXRvIGVycm9yRG9tYWluID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS0Vycm9y
Q29weURvbWFpbihlcnJvcikpKTsKKyAgICBhdXRvIGVycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJv
ckNvZGUoZXJyb3IpOwogCiAgICAgLy8gV2UgbmVlZCB0byBkbyBzb21lIGVycm9yIG1hcHBpbmcg
aGVyZSB0byBtYXRjaCB0aGUgdGVzdCBleHBlY3RhdGlvbnMgKE1hYyBlcnJvciBuYW1lcyBhcmUg
ZXhwZWN0ZWQpLgotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGVycm9yRG9t
YWluLmdldCgpLCAiV2ViS2l0TmV0d29ya0Vycm9yIikpIHsKLSAgICAgICAgZXJyb3JEb21haW4g
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJOU1VSTEVycm9yRG9tYWlu
IikpOworICAgIGlmIChlcnJvckRvbWFpbiA9PSAiV2ViS2l0TmV0d29ya0Vycm9yIikgeworICAg
ICAgICBlcnJvckRvbWFpbiA9ICJOU1VSTEVycm9yRG9tYWluIjsKICAgICAgICAgZXJyb3JDb2Rl
ID0gLTk5OTsKICAgICB9CisgICAgaWYgKGVycm9yRG9tYWluID09ICAiV2ViS2l0UG9saWN5RXJy
b3IiKQorICAgICAgICBlcnJvckRvbWFpbiA9ICJXZWJLaXRFcnJvckRvbWFpbiI7CiAKLSAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhlcnJvckRvbWFpbi5nZXQoKSwgIldlYktp
dFBvbGljeUVycm9yIikpCi0gICAgICAgIGVycm9yRG9tYWluID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0RXJyb3JEb21haW4iKSk7Ci0KLSAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIjxOU0Vycm9yIGRvbWFpbiAiKTsKLSAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh0b1dURlN0cmluZyhlcnJvckRvbWFpbikpOwotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiLCBjb2RlICIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVy
KGVycm9yQ29kZSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhX
S0Vycm9yQ29weUZhaWxpbmdVUkwoZXJyb3IpKTsKLSAgICBpZiAodXJsLmdldCgpKSB7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29w
eVN0cmluZyh1cmwuZ2V0KCkpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIsIGZhaWxpbmcgVVJMIFwiIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RG
U3RyaW5nKHVybFN0cmluZykpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnIicpOwot
ICAgIH0KLQorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCI8TlNFcnJvciBkb21haW4gIiwgZXJy
b3JEb21haW4sICIsIGNvZGUgIiwgZXJyb3JDb2RlKTsKKyAgICBpZiAoYXV0byB1cmwgPSBhZG9w
dFdLKFdLRXJyb3JDb3B5RmFpbGluZ1VSTChlcnJvcikpKQorICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgiLCBmYWlsaW5nIFVSTCBcIiIsIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5
U3RyaW5nKHVybC5nZXQoKSkpKSwgJyInKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPicp
OwogfQogCkBAIC02OTUsNyArNjIzLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFN0
YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnRlc3RV
UkwoKSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdGVzdFVSTCA9IGFkb3B0V0so
V0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVSTChmcmFtZSkpOworICAgICAgICBhdXRvIHRl
c3RVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwoZnJhbWUpKTsK
ICAgICAgICAgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zZXRUZXN0VVJMKHRlc3RVUkwu
Z2V0KCkpOwogICAgIH0KIApAQCAtNzc0LDEzICs3MDIsMTMgQEAgZW51bSBGcmFtZU5hbWVQb2xp
Y3kgeyBTaG91bGROb3RJbmNsdWRlRnJhbWVOYW1lLCBTaG91bGRJbmNsdWRlRnJhbWVOYW1lIH07
CiAKIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIEZyYW1lTmFtZVBvbGljeSBzaG91
bGRJbmNsdWRlRnJhbWVOYW1lID0gU2hvdWxkTm90SW5jbHVkZUZyYW1lTmFtZSkKIHsKLSAgICBk
b3VibGUgeCA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVhPZmZzZXQi
KTsKLSAgICBkb3VibGUgeSA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFn
ZVlPZmZzZXQiKTsKKyAgICBkb3VibGUgeCA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0eShmcmFtZSwg
InBhZ2VYT2Zmc2V0Iik7CisgICAgZG91YmxlIHkgPSBudW1lcmljV2luZG93UHJvcGVydHkoZnJh
bWUsICJwYWdlWU9mZnNldCIpOwogICAgIGlmIChmYWJzKHgpIDw9IDAuMDAwMDAwMDEgJiYgZmFi
cyh5KSA8PSAwLjAwMDAwMDAxKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkSW5j
bHVkZUZyYW1lTmFtZSkgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZSA9
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CisgICAgICAgIGF1dG8gbmFt
ZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgJyIpOwogICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiJyAiKTsKQEAgLTc5NCw3ICs3MjIsNyBAQCBzdGF0aWMgdm9pZCBkdW1wRnJhbWVT
Y3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJp
bgogCiBzdGF0aWMgdm9pZCBkdW1wRGVzY2VuZGFudEZyYW1lU2Nyb2xsUG9zaXRpb25zKFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdLQnVuZGxlRnJh
bWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsKKyAgICBhdXRvIGNoaWxkRnJhbWVzID0gYWRvcHRX
SyhXS0J1bmRsZUZyYW1lQ29weUNoaWxkRnJhbWVzKGZyYW1lKSk7CiAgICAgc2l6ZV90IHNpemUg
PSBXS0FycmF5R2V0U2l6ZShjaGlsZEZyYW1lcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBzdWJmcmFtZSA9
IHN0YXRpY19jYXN0PFdLQnVuZGxlRnJhbWVSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGls
ZEZyYW1lcy5nZXQoKSwgaSkpOwpAQCAtODEwLDI4ICs3MzgsMTAgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmR1bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWlsZGUKICAgICBkdW1wRGVzY2VuZGFudEZyYW1lU2Nyb2xsUG9zaXRpb25zKGZyYW1lLCBz
dHJpbmdCdWlsZGVyKTsKIH0KIAotc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pT
KGNvbnN0IGNoYXIqIHN0cmluZykKLXsKLSAgICByZXR1cm4gYWRvcHQoSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7Ci19Ci0KIHN0YXRpYyBib29sIGhhc0RvY3VtZW50RWxl
bWVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKLSAgICBK
U09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4
dCk7Ci0KLSAgICBKU1ZhbHVlUmVmIGRvY3VtZW50VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5
KGNvbnRleHQsIGdsb2JhbE9iamVjdCwgdG9KUygiZG9jdW1lbnQiKS5nZXQoKSwgMCk7Ci0gICAg
aWYgKCFkb2N1bWVudFZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQo
SlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGRvY3VtZW50VmFsdWUpKTsKLSAgICBKU09iamVjdFJl
ZiBkb2N1bWVudCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBkb2N1bWVudFZhbHVlLCAwKTsK
LQotICAgIEpTVmFsdWVSZWYgZG9jdW1lbnRFbGVtZW50VmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5KGNvbnRleHQsIGRvY3VtZW50LCB0b0pTKCJkb2N1bWVudEVsZW1lbnQiKS5nZXQoKSwgMCk7
Ci0gICAgaWYgKCFkb2N1bWVudEVsZW1lbnRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgZG9jdW1lbnRFbGVtZW50VmFs
dWUpOworICAgIGF1dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChmcmFtZSk7CisgICAgcmV0dXJuIG9iamVjdFByb3BlcnR5KGNvbnRleHQsIEpTQ29udGV4dEdl
dEdsb2JhbE9iamVjdChjb250ZXh0KSwgeyAiZG9jdW1lbnQiLCAiZG9jdW1lbnRFbGVtZW50IiB9
KTsKIH0KIAogc3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQpAQCAtODU0LDExICs3NjQsMTEgQEAgc3RhdGljIHZv
aWQgZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBi
dWlsZGVyKQogCiBzdGF0aWMgdm9pZCBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoV0tCdW5kbGVG
cmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS0FycmF5UmVmPiBjaGlsZEZyYW1lcyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNv
cHlDaGlsZEZyYW1lcyhmcmFtZSkpOworICAgIGF1dG8gY2hpbGRGcmFtZXMgPSBhZG9wdFdLKFdL
QnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsKICAgICBzaXplX3Qgc2l6ZSA9IFdL
QXJyYXlHZXRTaXplKGNoaWxkRnJhbWVzLmdldCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkgewogICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIHN1YmZyYW1lID0gc3Rh
dGljX2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGNoaWxkRnJh
bWVzLmdldCgpLCBpKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJmcmFt
ZU5hbWUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TmFtZShzdWJmcmFtZSkpOworICAgICAg
ICBhdXRvIHN1YmZyYW1lTmFtZSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlOYW1lKHN1YmZy
YW1lKSk7CiAKICAgICAgICAgLy8gRHVtcFJlbmRlclRyZWUgaWdub3JlcyBlbXB0eSBmcmFtZXMs
IHNvIGRvIHRoZSBzYW1lIHRoaW5nIGhlcmUuCiAgICAgICAgIGlmICghaGFzRG9jdW1lbnRFbGVt
ZW50KHN1YmZyYW1lKSkKQEAgLTg4NCw5ICs3OTQsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6ZHVtcEFsbEZyYW1lc1RleHQoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7CiAjaWYgVVNFKENGKSAmJiAh
UExBVEZPUk0oV0lOX0NBSVJPKSAmJiAhVVNFKERJUkVDVDJEKQotICAgIFdLUmV0YWluUHRyPFdL
RGF0YVJlZj4gd2tEYXRhID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJh
bWUpKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNy
ZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0RhdGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0
YS5nZXQoKSkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmU3RyaW5nID0gYWRvcHRD
RihXZWJDb3JlVGVzdFN1cHBvcnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShj
ZkRhdGEuZ2V0KCkpKTsKKyAgICBhdXRvIHdrRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNv
cHlXZWJBcmNoaXZlKGZyYW1lKSk7CisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNy
ZWF0ZSgwLCBXS0RhdGFHZXRCeXRlcyh3a0RhdGEuZ2V0KCkpLCBXS0RhdGFHZXRTaXplKHdrRGF0
YS5nZXQoKSkpKTsKKyAgICBhdXRvIGNmU3RyaW5nID0gYWRvcHRDRihXZWJDb3JlVGVzdFN1cHBv
cnQ6OmNyZWF0ZVhNTFN0cmluZ0Zyb21XZWJBcmNoaXZlRGF0YShjZkRhdGEuZ2V0KCkpKTsKICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjZlN0cmluZy5nZXQoKSk7CiAjZW5kaWYKIH0KQEAgLTkw
Miw5ICs4MTIsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcCgpCiAgICAgV0tCdW5k
bGVQYWdlRmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUobV9wYWdlKTsKIAogICAgIFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKTsKLSAg
ICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsUmVmID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29w
eVVSTChmcmFtZSkpOworICAgIGF1dG8gdXJsUmVmID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29w
eVVSTChmcmFtZSkpOwogICAgIFN0cmluZyB1cmwgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJM
Q29weVN0cmluZyh1cmxSZWYuZ2V0KCkpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1pbWVUeXBlID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weU1JTUVUeXBlRm9yUmVzb3VyY2VX
aXRoVVJMKGZyYW1lLCB1cmxSZWYuZ2V0KCkpKTsKKyAgICBhdXRvIG1pbWVUeXBlID0gYWRvcHRX
SyhXS0J1bmRsZUZyYW1lQ29weU1JTUVUeXBlRm9yUmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxS
ZWYuZ2V0KCkpKTsKICAgICBpZiAodXJsLmZpbmQoImR1bXBBc1RleHQvIikgIT0gbm90Rm91bmQg
fHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtaW1lVHlwZS5nZXQoKSwgInRleHQvcGxh
aW4iKSkKICAgICAgICAgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5kdW1wQXNUZXh0KGZh
bHNlKTsKIApAQCAtMTAxOCwyMSArOTI4LDE5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
aWRDbGVhcldpbmRvd0ZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlCiAg
ICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxkKTsKLSAgICBKU09iamVjdFJlZiB3aW5k
b3cgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7CisgICAgYXV0byBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxk
KTsKIAogICAgIGlmIChXS0J1bmRsZVNjcmlwdFdvcmxkTm9ybWFsV29ybGQoKSAhPSB3b3JsZCkg
ewotICAgICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvdywgdG9KUygiX193
b3JsZElEIikuZ2V0KCksIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIFRlc3RSdW5uZXI6Ondv
cmxkSURGb3JXb3JsZCh3b3JsZCkpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsK
KyAgICAgICAgc2V0R2xvYmFsT2JqZWN0UHJvcGVydHkoY29udGV4dCwgIl9fd29ybGRJRCIsIFRl
c3RSdW5uZXI6OndvcmxkSURGb3JXb3JsZCh3b3JsZCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgIGluamVjdGVkQnVu
ZGxlLnRlc3RSdW5uZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNl
cHRpb24pOwotICAgIGluamVjdGVkQnVuZGxlLmdjQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUuZXZl
bnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywg
JmV4Y2VwdGlvbik7Ci0gICAgaW5qZWN0ZWRCdW5kbGUudGV4dElucHV0Q29udHJvbGxlcigpLT5t
YWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CisgICAgaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOworICAgIGlu
amVjdGVkQnVuZGxlLmdjQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOwor
ICAgIGluamVjdGVkQnVuZGxlLmV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09i
amVjdChjb250ZXh0KTsKKyAgICBpbmplY3RlZEJ1bmRsZS50ZXh0SW5wdXRDb250cm9sbGVyKCkt
Pm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCk7CiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotICAg
IGluamVjdGVkQnVuZGxlLmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmpl
Y3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5hY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQpOwogI2VuZGlm
CiAKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0
KTsKQEAgLTExMzYsNyArMTA0NCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRJbml0
aWF0ZUxvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kCiAgICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJl
cXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIHVybCA9IGFkb3B0V0soV0tVUkxSZXF1
ZXN0Q29weVVSTChyZXF1ZXN0KSk7CiAgICAgYXNzaWduZWRVcmxzQ2FjaGUoKS5hZGQoaWRlbnRp
ZmllciwgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwuZ2V0KCkpKTsKIH0KIApAQCAtMTE3
NSwxNiArMTA4MywxNiBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxs
U2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgIGlmIChpbmplY3Rl
ZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkgJiYgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53
aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiByZWRpcmVjdFVSTCA9IGFkb3B0V0soV0tVUkxSZXNw
b25zZUNvcHlVUkwocmVzcG9uc2UpKTsKKyAgICBhdXRvIHJlZGlyZWN0VVJMID0gYWRvcHRXSyhX
S1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwogICAgIGlmIChpbmplY3RlZEJ1bmRsZS5p
c1Rlc3RSdW5uaW5nKCkgJiYgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJl
cXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSAmJiByZWRpcmVjdFVSTCkgewogICAgICAgICBp
bmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KCJSZXR1cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVj
dFxuIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIFdLUmV0YWluUHRy
PFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0ID0gYWRvcHRXSyhXS1VSTENvcHlIb3N0
TmFtZSh1cmwuZ2V0KCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NoZW1lID0g
YWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkp
OworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsK
KyAgICBhdXRvIGhvc3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1lKHVybC5nZXQoKSkpOwor
ICAgIGF1dG8gc2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7Cisg
ICAgYXV0byB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0KCkpKTsK
ICAgICBpZiAoaG9zdCAmJiAhV0tTdHJpbmdJc0VtcHR5KGhvc3QuZ2V0KCkpCiAgICAgICAgICYm
IGlzSFRUUE9ySFRUUFNTY2hlbWUoc2NoZW1lLmdldCgpKQogICAgICAgICAmJiAhV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhob3N0LmdldCgpLCAiMjU1LjI1NS4yNTUuMjU1IikgLy8gVXNl
ZCBpbiBzb21lIHRlc3RzIHRoYXQgZXhwZWN0IHRvIGdldCBiYWNrIGFuIGVycm9yLgpAQCAtMTE5
MiwxMiArMTEwMCwxMiBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxs
U2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgICAgICBib29sIG1h
aW5GcmFtZUlzRXh0ZXJuYWwgPSBmYWxzZTsKICAgICAgICAgaWYgKGluamVjdGVkQnVuZGxlLmlz
VGVzdFJ1bm5pbmcoKSkgewogICAgICAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKTsKLSAgICAgICAgICAgIFdLUmV0YWlu
UHRyPFdLVVJMUmVmPiBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJM
KG1haW5GcmFtZSkpOworICAgICAgICAgICAgYXV0byBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdL
QnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOwogICAgICAgICAgICAgaWYgKCFtYWluRnJh
bWVVUkwgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0
cmluZyhtYWluRnJhbWVVUkwuZ2V0KCkpKS5nZXQoKSwgImFib3V0OmJsYW5rIikpCiAgICAgICAg
ICAgICAgICAgbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lv
bmFsVVJMKG1haW5GcmFtZSkpOwogCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWFpbkZyYW1lSG9zdCA9IGFkb3B0V0soV0tVUkxDb3B5SG9zdE5hbWUobWFpbkZyYW1lVVJM
LmdldCgpKSk7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWFpbkZyYW1l
U2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUobWFpbkZyYW1lVVJMLmdldCgpKSk7Cisg
ICAgICAgICAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3ROYW1l
KG1haW5GcmFtZVVSTC5nZXQoKSkpOworICAgICAgICAgICAgYXV0byBtYWluRnJhbWVTY2hlbWUg
PSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZShtYWluRnJhbWVVUkwuZ2V0KCkpKTsKICAgICAgICAg
ICAgIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBpc0hUVFBPckhUVFBTU2NoZW1lKG1haW5GcmFtZVNj
aGVtZS5nZXQoKSkgJiYgIWlzTG9jYWxIb3N0KG1haW5GcmFtZUhvc3QuZ2V0KCkpOwogICAgICAg
ICB9CiAgICAgICAgIGlmICghbWFpbkZyYW1lSXNFeHRlcm5hbCAmJiAhaXNBbGxvd2VkSG9zdCho
b3N0LmdldCgpKSkgewpAQCAtMTIxNCw3ICsxMTIyLDcgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVj
dGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UKICAgICAgICAgU3RyaW5nIGJvZHkgPSBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndp
bGxTZW5kUmVxdWVzdEhUVFBCb2R5KCk7CiAgICAgICAgIGlmICghYm9keS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIENTdHJpbmcgY0JvZHkgPSBib2R5LnV0ZjgoKTsKLSAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLRGF0YVJlZj4gYm9keSA9IGFkb3B0V0soV0tEYXRhQ3JlYXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGNCb2R5LmRhdGEoKSksIGNCb2R5Lmxlbmd0
aCgpKSk7CisgICAgICAgICAgICBhdXRvIGJvZHkgPSBhZG9wdFdLKFdLRGF0YUNyZWF0ZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihjQm9keS5kYXRhKCkpLCBjQm9keS5s
ZW5ndGgoKSkpOwogICAgICAgICAgICAgcmV0dXJuIFdLVVJMUmVxdWVzdENvcHlTZXR0aW5nSFRU
UEJvZHkocmVxdWVzdCwgYm9keS5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjQyLDkg
KzExNTAsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9y
UmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQgogICAgIGlmICghaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRX
SyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KHVy
bC5nZXQoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtaW1lVHlwZVN0cmluZyA9
IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlNSU1FVHlwZShyZXNwb25zZSkpOworICAgIGF1dG8g
dXJsID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOworICAgIGF1dG8g
dXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkp
KTsKKyAgICBhdXRvIG1pbWVUeXBlU3RyaW5nID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1J
TUVUeXBlKHJlc3BvbnNlKSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7CkBAIC0xMzUw
LDEwICsxMjU4LDggQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFn
ZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICAgICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IiAtIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25cbiIpOwogICAgICAgICBkdW1wUmVx
dWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlcXVlc3QsIHN0cmluZ0J1aWxk
ZXIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBpcyBtYWluIGZyYW1l
IC0gIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKFdLQnVuZGxlRnJhbWVJc01haW5G
cmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiBzaG91bGQgb3BlbiBVUkxzIGV4dGVybmFsbHkgLSAiKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4
dGVybmFsVVJMcyhuYXZpZ2F0aW9uQWN0aW9uKSA/ICJ5ZXMiIDogIm5vIik7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCIgaXMgbWFpbiBmcmFtZSAtICIsIFdLQnVuZGxlRnJhbWVJc01h
aW5GcmFtZShmcmFtZSkgPyAieWVzIiA6ICJubyIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiIHNob3VsZCBvcGVuIFVSTHMgZXh0ZXJuYWxseSAtICIsIFdLQnVuZGxlTmF2aWdhdGlv
bkFjdGlvbkdldFNob3VsZE9wZW5FeHRlcm5hbFVSTHMobmF2aWdhdGlvbkFjdGlvbikgPyAieWVz
IiA6ICJubyIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAg
IH0KQEAgLTEzNjEsMjQgKzEyNjcsMjEgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVj
dGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICBp
ZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwog
Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29w
eVVSTChyZXF1ZXN0KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFNjaGVtZSA9
IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRv
cHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKKyAgICBhdXRvIHVybFNjaGVtZSA9
IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOwogCiAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUG9saWN5
IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7Ci0gICAgaWYgKGlzTG9jYWxGaWxlU2NoZW1l
KHVybFNjaGVtZS5nZXQoKSkpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZp
bGVuYW1lID0gYWRvcHRXSyhXS1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0g
YWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgIH0KKyAgICBpZiAoaXNMb2Nh
bEZpbGVTY2hlbWUodXJsU2NoZW1lLmdldCgpKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0
KCkpKSkpOworICAgIGVsc2UKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJp
bmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkpKTsKICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIiB3aXRoIG5hdmlnYXRpb24gdHlwZSBcJyIpOwogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5k
bGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikpKSk7
CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcJyIpOwotICAgIFdLUmV0YWluUHRy
PFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZj4gaGl0VGVzdFJlc3VsdFJlZiA9IGFkb3B0V0soV0tC
dW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbikp
OworICAgIGF1dG8gaGl0VGVzdFJlc3VsdFJlZiA9IGFkb3B0V0soV0tCdW5kbGVOYXZpZ2F0aW9u
QWN0aW9uQ29weUhpdFRlc3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbikpOwogICAgIGlmIChoaXRU
ZXN0UmVzdWx0UmVmKSB7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlTm9kZUhhbmRsZVJl
Zj4gbm9kZUhhbmRsZVJlZiA9IGFkb3B0V0soV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVI
YW5kbGUoaGl0VGVzdFJlc3VsdFJlZi5nZXQoKSkpOworICAgICAgICBhdXRvIG5vZGVIYW5kbGVS
ZWYgPSBhZG9wdFdLKFdLQnVuZGxlSGl0VGVzdFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RS
ZXN1bHRSZWYuZ2V0KCkpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIg
b3JpZ2luYXRpbmcgZnJvbSAiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBh
dGgobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBub2RlSGFuZGxlUmVmLmdldCgpKSk7CiAgICAgfQpA
QCAtMTQwMCwxMiArMTMwMyw3IEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKFdLQnVuZGxlUGFnCiB7CiAgICAgYXV0
byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgaWYg
KGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVy
KCktPmlzUG9saWN5RGVsZWdhdGVFbmFibGVkKCkgJiYgV0tVUkxSZXNwb25zZUlzQXR0YWNobWVu
dChyZXNwb25zZSkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZmlsZW5hbWUgPSBhZG9wdFdLKFdLVVJMUmVz
cG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUocmVzcG9uc2UpKTsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFj
aG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJcJ1xuIik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5v
dXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlBvbGljeSBkZWxlZ2F0ZTog
cmVzb3VyY2UgaXMgYW4gYXR0YWNobWVudCwgc3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIsIHRvV1RG
U3RyaW5nKGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShyZXNwb25z
ZSkpKSwgIlwnXG4iKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFj
dGlvblBhc3NUaHJvdWdoOwpAQCAtMTQ3MSwxMCArMTM2OSwxMCBAQCBzdGF0aWMgV1RGOjpTdHJp
bmcgYWRkTGVhZGluZ1NwYWNlU3RyaXBUcmFpbGluZ1NwYWNlc0FkZE5ld2xpbmUoY29uc3QgV1RG
OjpTdHJpbgogCiBzdGF0aWMgV1RGOjpTdHJpbmcgbGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KGNv
bnN0IFdURjo6U3RyaW5nJiBwYXRoKQogewotICAgIHNpemVfdCBwb3MgPSBwYXRoLmZpbmQoImZp
bGU6Ly8iKTsKKyAgICBhdXRvIHBvcyA9IHBhdGguZmluZCgiZmlsZTovLyIpOwogICAgIEFTU0VS
VChXVEY6Om5vdEZvdW5kICE9IHBvcyk7CiAKLSAgICBXVEY6OlN0cmluZyB0bXBQYXRoID0gcGF0
aC5zdWJzdHJpbmcocG9zICsgNyk7CisgICAgYXV0byB0bXBQYXRoID0gcGF0aC5zdWJzdHJpbmco
cG9zICsgNyk7CiAgICAgaWYgKHRtcFBhdGgubGVuZ3RoKCkgPCAyKSAvLyBLZWVwIHRoZSBsb25l
IHNsYXNoIHRvIGF2b2lkIGVtcHR5IG91dHB1dC4KICAgICAgICAgcmV0dXJuIHRtcFBhdGg7CiAK
QEAgLTE1MjEsMTEgKzE0MTksNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0
YXR1c2JhclRleHQoV0tTdHJpbmdSZWYgc3RhdHVzYmFyVGV4dCkKICAgICBpZiAoIWluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNrcygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0
YXR1c1RleHQ6Iik7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdHVz
YmFyVGV4dCkpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGluamVjdGVk
QnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFD
Szogc2V0U3RhdHVzVGV4dDoiLCB0b1dURlN0cmluZyhzdGF0dXNiYXJUZXh0KSwgJ1xuJykpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0
cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVmKQpAQCAtMTU1OSwxNSArMTQ1Myw4IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5R
dW90YShXS1NlY3VyaXR5T3JpZ2luUmVmCiAgICAgICAgIC8vIFJvdW5kaW5nIHVwIG9yIGRvd24g
ZG9lcyBub3QgcmVhbGx5IG1hdHRlciBmb3IgdGhlc2UgdGVzdHMuIEl0J3MKICAgICAgICAgLy8g
c3VmZmljaWVudCB0byBqdXN0IGdldCBhIHJhbmdlIG9mIDEwMDAwIHRvIGRldGVybWluZSBpZiB3
ZSB3ZXJlCiAgICAgICAgIC8vIGFib3ZlIG9yIGJlbG93IGEgdGhyZXNob2xkLgotICAgICAgICBp
bnQ2NF90IHRydW5jYXRlZFNwYWNlTmVlZGVkID0gKHRvdGFsQnl0ZXNOZWVkZWQgLyAxMDAwMCkg
KiAxMDAwMDsKLQotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgQVBQTElDQVRJT04gQ0FD
SEUgQ0FMTEJBQ0s6IGV4Y2VlZGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhRm9yU2VjdXJp
dHlPcmlnaW46Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlY3VyaXR5T3JpZ2lu
VG9TdHIob3JpZ2luKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRv
dGFsU3BhY2VOZWVkZWQ6fiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0
cnVuY2F0ZWRTcGFjZU5lZWRlZCk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OwotICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CisgICAgICAgIGF1dG8gdHJ1bmNhdGVkU3BhY2VOZWVkZWQgPSAodG90YWxCeXRlc05l
ZWRlZCAvIDEwMDAwKSAqIDEwMDAwOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0
KG1ha2VTdHJpbmcoIlVJIERFTEVHQVRFIEFQUExJQ0FUSU9OIENBQ0hFIENBTExCQUNLOiBleGNl
ZWRlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YUZvclNlY3VyaXR5T3JpZ2luOiIsIHN0cmlu
ZyhvcmlnaW4pLCAiIHRvdGFsU3BhY2VOZWVkZWQ6fiIsIHRydW5jYXRlZFNwYWNlTmVlZGVkLCAn
XG4nKSk7CiAgICAgfQogCiAgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hv
dWxkRGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpKQpAQCAtMTU4MCwx
NSArMTQ2Nyw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9u
Q2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmCiB1aW50NjRfdCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmln
aW4sIFdLU3RyaW5nUmVmIGRhdGFiYXNlTmFtZSwgV0tTdHJpbmdSZWYgZGF0YWJhc2VEaXNwbGF5
TmFtZSwgdWludDY0X3QgY3VycmVudFF1b3RhQnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnRPcmlnaW5V
c2FnZUJ5dGVzLCB1aW50NjRfdCBjdXJyZW50RGF0YWJhc2VVc2FnZUJ5dGVzLCB1aW50NjRfdCBl
eHBlY3RlZFVzYWdlQnl0ZXMpCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJ
IERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1
cml0eU9yaWdpbjoiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VjdXJpdHlPcmln
aW5Ub1N0cihvcmlnaW4pKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIg
ZGF0YWJhc2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGRh
dGFiYXNlTmFtZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAg
ICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwot
ICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0
YWJhc2VDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtl
U3RyaW5nKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1
b3RhRm9yU2VjdXJpdHlPcmlnaW46Iiwgc3RyaW5nKG9yaWdpbiksICIgZGF0YWJhc2U6IiwgdG9X
VEZTdHJpbmcoZGF0YWJhc2VOYW1lKSwgJ1xuJykpOwogCiAgICAgdWludDY0X3QgZGVmYXVsdFF1
b3RhID0gNSAqIDEwMjQgKiAxMDI0OwogICAgIGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5kYXRhYmFzZURlZmF1bHRRdW90YSgpOwpAQCAtMTYw
MSwxMiArMTQ4MSw3IEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0
YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwKICAgICBpZiAobWF4UXVvdGEg
Pj0gMCkgewogICAgICAgICBpZiAoZGVmYXVsdFF1b3RhIDwgZXhwZWN0ZWRVc2FnZUJ5dGVzICYm
IGV4cGVjdGVkVXNhZ2VCeXRlcyA8PSBtYXhRdW90YSkgewogICAgICAgICAgICAgbmV3UXVvdGEg
PSBleHBlY3RlZFVzYWdlQnl0ZXM7Ci0KLSAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5n
QnVpbGRlcjsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVM
RUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGluY3JlYXNlZCBxdW90YSB0byAiKTsKLSAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKG5ld1F1b3RhKTsKLSAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgaW5qZWN0ZWRC
dW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFD
SzogaW5jcmVhc2VkIHF1b3RhIHRvICIsIG5ld1F1b3RhLCAnXG4nKSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgcmV0dXJuIG5ld1F1b3RhOwpAQCAtMTY3NSwxMyArMTU1MCw4IEBAIGJvb2wgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJl
ZiByYW5nZSkKICAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOiIpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2Up
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIGluamVjdGVk
QnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKLSAgICB9CisgICAg
aWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChtYWtlU3RyaW5nKCJFRElU
SU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOiIsIHJhbmdlVG9TdHIo
bV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsKICAgICByZXR1cm4gaW5qZWN0
ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTY5
MSwxMyArMTU2MSw4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5n
KFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5p
c1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAg
ICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFu
Z2U6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4n
KTsKLSAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkpOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRU
ZXh0KG1ha2VTdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJh
bmdlOiIsIHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSksICdcbicpKTsK
ICAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRp
bmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggYTYyNTU4OTcyN2JjNzFiNzQxZWNmMjU2NTE1MjFlZmI0
ZjQ5OTdmMy4uYWM0MWE5MGNlOTYyMDU0Y2Q0MTgwZjMyN2M3M2JmZDA0MDdiMmY1NCAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VGVzdFJ1bm5lci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeUZ1bmN0aW9ucy5oIgogI2luY2x1
ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCiAj
aW5jbHVkZSAiSlNUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0j
aW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NUZXN0UnVubmVyVXRpbHMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgpAQCAtNjksNyArNjksNyBAQCBSZWY8
VGVzdFJ1bm5lcj4gVGVzdFJ1bm5lcjo6Y3JlYXRlKCkKIH0KIAogVGVzdFJ1bm5lcjo6VGVzdFJ1
bm5lcigpCi0gICAgOiBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24oYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpKQorICAgIDogbV91c2VyU3R5bGVTaGVldExvY2F0aW9u
KHRvV0soIiIpKQogewogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogfQpAQCAtODMsMzQgKzgz
LDEyMSBAQCBKU0NsYXNzUmVmIFRlc3RSdW5uZXI6OndyYXBwZXJDbGFzcygpCiAgICAgcmV0dXJu
IEpTVGVzdFJ1bm5lcjo6dGVzdFJ1bm5lckNsYXNzKCk7CiB9CiAKK3N0YXRpYyBXS0J1bmRsZVBh
Z2VSZWYgcGFnZSgpCit7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKTsKK30KKworc3RhdGljIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lKCkK
K3sKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSk7Cit9CisKK3N0
YXRpYyBKU0NvbnRleHRSZWYgbWFpbkpTQ29udGV4dCgpCit7CisgICAgcmV0dXJuIFdLQnVuZGxl
RnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUoKSk7Cit9CisKIHZvaWQgVGVzdFJ1
bm5lcjo6ZGlzcGxheSgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgV0tCdW5kbGVQYWdlRm9yY2VS
ZXBhaW50KHBhZ2UpOworICAgIFdLQnVuZGxlUGFnZUZvcmNlUmVwYWludChwYWdlKCkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCkKIHsKLSAgICBXS0J1
bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKTsKKyAgICBhdXRvIHBhZ2UgPSBXVFI6OnBhZ2UoKTsKICAgICBXS0J1bmRsZVBhZ2VGb3Jj
ZVJlcGFpbnQocGFnZSk7CiAgICAgV0tCdW5kbGVQYWdlU2V0VHJhY2tzUmVwYWludHMocGFnZSwg
dHJ1ZSk7CiAgICAgV0tCdW5kbGVQYWdlUmVzZXRUcmFja2VkUmVwYWludHMocGFnZSk7CiB9CiAK
K3N0YXRpYyBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gdG9XSyhkb3VibGUgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0V0soV0tEb3VibGVDcmVhdGUodmFsdWUpKTsKK30KKworc3RhdGljIFdL
UmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gY3JlYXRlV0tEaWN0aW9uYXJ5KHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxzdGQ6OnBhaXI8Y29uc3QgY2hhciosIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+
PiBwYWlycykKK3sKKyAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IGtleXM7CisgICAgVmVjdG9yPFdL
VHlwZVJlZj4gdmFsdWVzOworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IHN0
cmluZ3M7CisgICAgZm9yIChhdXRvJiBwYWlyIDogcGFpcnMpIHsKKyAgICAgICAgYXV0byBrZXkg
PSB0b1dLKHBhaXIuZmlyc3QpOworICAgICAgICBrZXlzLmFwcGVuZChrZXkuZ2V0KCkpOworICAg
ICAgICB2YWx1ZXMuYXBwZW5kKHBhaXIuc2Vjb25kLmdldCgpKTsKKyAgICAgICAgc3RyaW5ncy5h
cHBlbmQoV1RGTW92ZShrZXkpKTsKKyAgICB9CisgICAgcmV0dXJuIGFkb3B0V0soV0tEaWN0aW9u
YXJ5Q3JlYXRlKGtleXMuZGF0YSgpLCB2YWx1ZXMuZGF0YSgpLCBrZXlzLnNpemUoKSkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBwb3N0
U3luY2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0
IFdLUmV0YWluUHRyPFQ+JiB2YWx1ZSkKK3sKKyAgICBXS1R5cGVSZWYgcmF3UmV0dXJuVmFsdWUg
PSBudWxscHRyOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sobmFtZSkuZ2V0KCksIHZhbHVlLmdldCgp
LCAmcmF3UmV0dXJuVmFsdWUpOworICAgIHJldHVybiBhZG9wdFdLKHJhd1JldHVyblZhbHVlKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGJvb2wgcG9zdFN5bmNocm9ub3VzTWVz
c2FnZVJldHVybmluZ0Jvb2xlYW4oY29uc3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8
VD4mIHZhbHVlKQoreworICAgIHJldHVybiBib29sZWFuVmFsdWUocG9zdFN5bmNocm9ub3VzTWVz
c2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkpOworfQorCitzdGF0aWMgYm9vbCBwb3N0
U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbihjb25zdCBjaGFyKiBuYW1lKQorewor
ICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbihuYW1lLCBX
S1JldGFpblB0cjxXS1R5cGVSZWY+IHsgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
YXRpYyBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlV2l0
aFJldHVyblZhbHVlKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFdLUmV0YWluUHRyPFQ+JiB2YWx1
ZSkKK3sKKyAgICBXS1R5cGVSZWYgcmF3UmV0dXJuVmFsdWUgPSBudWxscHRyOworICAgIFdLQnVu
ZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKHBhZ2UoKSwgdG9XSyhuYW1l
KS5nZXQoKSwgdmFsdWUuZ2V0KCksICZyYXdSZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIGFkb3B0
V0socmF3UmV0dXJuVmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgYm9v
bCBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oY29uc3QgY2hhciog
bmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIHZhbHVlKQoreworICAgIHJldHVybiBib29sZWFu
VmFsdWUocG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VXaXRoUmV0dXJuVmFsdWUobmFtZSwgdmFs
dWUpKTsKK30KKworc3RhdGljIGJvb2wgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5p
bmdCb29sZWFuKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbihuYW1lLCBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IHsgfSk7Cit9CisKK3N0YXRpYyBib29sIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJu
aW5nQm9vbGVhbihjb25zdCBjaGFyKiBuYW1lLCBKU1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAg
cmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbihuYW1lLCB0
b1dLKHN0cmluZykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdWludDY0X3Qg
cG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50NjQoY29uc3QgY2hhciogbmFt
ZSwgY29uc3QgV0tSZXRhaW5QdHI8VD4mIHZhbHVlKQoreworICAgIHJldHVybiB1aW50NjRWYWx1
ZShwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVdpdGhSZXR1cm5WYWx1ZShuYW1lLCB2YWx1ZSkp
OworfQorCitzdGF0aWMgdWludDY0X3QgcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJ
bnQ2NChjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVybiB1aW50NjRWYWx1ZShwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlV2l0aFJldHVyblZhbHVlKG5hbWUsIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4geyB9KSk7Cit9CisKK3N0YXRpYyBib29sIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0
dXJuaW5nVUludDY0KGNvbnN0IGNoYXIqIG5hbWUsIEpTU3RyaW5nUmVmIHN0cmluZykKK3sKKyAg
ICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdVSW50NjQobmFtZSwg
dG9XSyhzdHJpbmcpKTsKK30KKworc3RhdGljIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKGNvbnN0
IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgYXV0byYgYnVuZGxlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZv
clRlc3RSdW5uZXIoYnVuZGxlLmJ1bmRsZSgpLCBidW5kbGUucGFnZUdyb3VwKCksIHRvV0sobmFt
ZSkuZ2V0KCksIHZhbHVlKTsKK30KKwogYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wUGl4ZWxz
KCkgY29uc3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXREdW1wUGl4ZWxzIikpOwot
ICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5
cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdL
Qm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5E
YXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0dXJuaW5n
Qm9vbGVhbigiR2V0RHVtcFBpeGVscyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldER1bXBQ
aXhlbHMoYm9vbCBkdW1wUGl4ZWxzKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldER1
bXBQaXhlbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGR1bXBQaXhlbHMpKTsKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIlNldER1bXBQaXhlbHMiLCBkdW1wUGl4ZWxzKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpkdW1wQXNUZXh0KGJvb2wgZHVtcFBpeGVscykKQEAgLTEyMiwxOCArMjA5
LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEFzVGV4dChib29sIGR1bXBQaXhlbHMpCiAgICAg
CiBXaGF0VG9EdW1wIFRlc3RSdW5uZXI6OndoYXRUb0R1bXAoKSBjb25zdAogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkdldFdoYXRUb0R1bXAiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRh
dGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
LCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdL
VUludDY0R2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXaGF0VG9EdW1wPihX
S1VJbnQ2NEdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KHJldHVybkRh
dGEpKS5nZXQoKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXaGF0VG9EdW1wPihwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlUmV0dXJuaW5nVUludDY0KCJHZXRXaGF0VG9EdW1wIikpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFdoYXRUb0R1bXAoV2hhdFRvRHVtcCB3aGF0VG9EdW1wKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFdoYXRUb0R1bXAiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzdGF0
aWNfY2FzdDx1aW50NjRfdD4od2hhdFRvRHVtcCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlNldFdoYXRUb0R1bXAiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4od2hhdFRv
RHVtcCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJv
b2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQpAQCAtMTU4LDI2ICsyMzksMTkgQEAgdm9pZCBU
ZXN0UnVubmVyOjp3YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCkKIAogdm9pZCBUZXN0UnVubmVy
Ojp3YWl0VW50aWxEb25lKCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmplY3RlZEJ1bmRsZS5p
c1Rlc3RSdW5uaW5nKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpOwogCiAgICAgc2V0V2FpdFVudGlsRG9uZSh0cnVlKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VW50aWxEb25lKGJvb2wgdmFsdWUpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0V2FpdFVudGlsRG9uZSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFdhaXRVbnRp
bERvbmUiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkV2FpdFVudGlsRG9u
ZSgpIGNvbnN0CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdldFdhaXRVbnRpbERvbmUi
KSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChX
S0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0
dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihy
ZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNNZXNzYWdlUmV0
dXJuaW5nQm9vbGVhbigiR2V0V2FpdFVudGlsRG9uZSIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
Om5vdGlmeURvbmUoKQpAQCAtMjEwLDE4ICsyODQsMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpmb3Jj
ZUltbWVkaWF0ZUNvbXBsZXRpb24oKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZER1bXBG
cmFtZUxvYWRDYWxsYmFja3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0RHVtcEZyYW1lTG9hZENhbGxiYWNrcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xl
YW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXREdW1wRnJhbWVMb2FkQ2FsbGJh
Y2tzIiwgdmFsdWUpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OnNob3VsZER1bXBGcmFtZUxvYWRD
YWxsYmFja3MoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkdldER1bXBGcmFtZUxvYWRDYWxsYmFja3MiKTsKIH0K
IAogdW5zaWduZWQgVGVzdFJ1bm5lcjo6aW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSBj
b25zdApAQCAtMjMxLDE4ICsyOTksMTQgQEAgdW5zaWduZWQgVGVzdFJ1bm5lcjo6aW1hZ2VDb3Vu
dEluR2VuZXJhbFBhc3RlYm9hcmQoKSBjb25zdAogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJT
Y3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVz
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3VyY2VXSyA9IHRvV0soc291cmNl
KTsKLQotICAgIFdLQnVuZGxlUGFnZUFkZFVzZXJTY3JpcHQoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBzb3VyY2VXSy5nZXQoKSwKKyAgICBXS0J1bmRsZVBhZ2VB
ZGRVc2VyU2NyaXB0KHBhZ2UoKSwgdG9XSyhzb3VyY2UpLmdldCgpLAogICAgICAgICAocnVuQXRT
dGFydCA/IGtXS0luamVjdEF0RG9jdW1lbnRTdGFydCA6IGtXS0luamVjdEF0RG9jdW1lbnRFbmQp
LAogICAgICAgICAoYWxsRnJhbWVzID8ga1dLSW5qZWN0SW5BbGxGcmFtZXMgOiBrV0tJbmplY3RJ
blRvcEZyYW1lT25seSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0
KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHNvdXJjZVdLID0gdG9XSyhzb3VyY2UpOwotCi0gICAgV0tCdW5kbGVQYWdl
QWRkVXNlclN0eWxlU2hlZXQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBzb3VyY2VXSy5nZXQoKSwKKyAgICBXS0J1bmRsZVBhZ2VBZGRVc2VyU3R5bGVTaGVldChw
YWdlKCksIHRvV0soc291cmNlKS5nZXQoKSwKICAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVj
dEluQWxsRnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsKIH0KIApAQCAtMjUzLDI5
ICszMTcsMTcgQEAgdm9pZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgpCiAKIHZvaWQgVGVz
dFJ1bm5lcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYgc2hvd1VJ
LCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0Nv
bW1hbmQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5h
bWUpLmdldCgpLCB0b1dLKHZhbHVlKS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlRXhlY3V0ZUVk
aXRpbmdDb21tYW5kKHBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyh2YWx1ZSkuZ2V0KCkp
OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8V0tGaW5kT3B0aW9ucz4gZmluZE9wdGlvbnNGcm9tQXJy
YXkoSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogewotICAgIGF1dG8mIGluamVjdGVk
QnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBh
Z2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlO
YW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKLSAg
ICBKU09iamVjdFJlZiBvcHRpb25zQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3B0
aW9uc0FycmF5QXNWYWx1ZSwgMCk7Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUu
Z2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVl
KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQorICAgIGF1dG8gY29udGV4dCA9IG1h
aW5KU0NvbnRleHQoKTsKKyAgICBhdXRvIG9wdGlvbnNBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBvcHRpb25zQXJyYXlBc1ZhbHVlLCBudWxscHRyKTsKKyAgICBhdXRvIGxlbmd0aCA9
IGFycmF5TGVuZ3RoKGNvbnRleHQsIG9wdGlvbnNBcnJheSk7CiAgICAgV0tGaW5kT3B0aW9ucyBv
cHRpb25zID0gMDsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApOwotICAg
ICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBhdXRvIG9wdGlvbk5hbWUgPSBhZG9wdChKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7Ci0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byBvcHRpb25OYW1lID0gY3JlYXRlSlNTdHJp
bmcoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0Fy
cmF5LCBpLCAwKSk7CiAgICAgICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9w
dGlvbk5hbWUuZ2V0KCksICJDYXNlSW5zZW5zaXRpdmUiKSkKICAgICAgICAgICAgIG9wdGlvbnMg
fD0ga1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7CiAgICAgICAgIGVsc2UgaWYgKEpTU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkF0V29yZFN0YXJ0cyIp
KQpAQCAtMjk2LDcgKzM0OCw3IEBAIHN0YXRpYyBPcHRpb25hbDxXS0ZpbmRPcHRpb25zPiBmaW5k
T3B0aW9uc0Zyb21BcnJheShKU1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFzVmFsCiBib29sIFRlc3RS
dW5uZXI6OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVlUmVmIG9wdGlvbnNB
cnJheUFzVmFsdWUpCiB7CiAgICAgaWYgKGF1dG8gb3B0aW9ucyA9IGZpbmRPcHRpb25zRnJvbUFy
cmF5KG9wdGlvbnNBcnJheUFzVmFsdWUpKQotICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmlu
ZFN0cmluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0so
dGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMpOworICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlRmlu
ZFN0cmluZyhwYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMpOwogCiAgICAgcmV0
dXJuIGZhbHNlOwogfQpAQCAtMzA0LDI4ICszNTYsMjMgQEAgYm9vbCBUZXN0UnVubmVyOjpmaW5k
U3RyaW5nKEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVl
KQogdm9pZCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nTWF0Y2hlc0luUGFnZShKU1N0cmluZ1JlZiB0
YXJnZXQsIEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKIHsKICAgICBpZiAoYXV0byBv
cHRpb25zID0gZmluZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9uc0FycmF5QXNWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nTWF0Y2hlcyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgKm9wdGlvbnMp
OworICAgICAgICBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nTWF0Y2hlcyhwYWdlKCksIHRvV0sodGFy
Z2V0KS5nZXQoKSwgKm9wdGlvbnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlcGxhY2VGaW5k
TWF0Y2hlc0F0SW5kaWNlcyhKU1ZhbHVlUmVmIG1hdGNoSW5kaWNlc0FzVmFsdWUsIEpTU3RyaW5n
UmVmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCBzZWxlY3Rpb25Pbmx5KQogewogICAgIGF1dG8mIGJ1
bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBhdXRvIG1haW5GcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShidW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIGF1
dG8gY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUp
OwotICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlOYW1lID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWluSlNDb250ZXh0
KCk7CiAgICAgYXV0byBtYXRjaEluZGljZXNPYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCwgbWF0Y2hJbmRpY2VzQXNWYWx1ZSwgMCk7Ci0gICAgYXV0byBsZW5ndGhWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0LCBsZW5ndGhQcm9wZXJ0
eU5hbWUuZ2V0KCksIDApOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0
aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gbGVuZ3RoID0gYXJyYXlMZW5ndGgo
Y29udGV4dCwgbWF0Y2hJbmRpY2VzT2JqZWN0KTsKIAogICAgIGF1dG8gaW5kaWNlcyA9IGFkb3B0
V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgYXV0byBsZW5ndGggPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG1hdGNoSW5kaWNlc09iamVj
dCwgaSwgMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBt
YXRjaEluZGljZXNPYmplY3QsIGksIG51bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFsdWVJc051
bWJlcihjb250ZXh0LCB2YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBh
dXRvIGluZGV4ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShzdGQ6OnJvdW5kKEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVsbHB0cikpKSk7CisgICAgICAgIGF1dG8gaW5kZXggPSBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgbnVs
bHB0cikpKTsKICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0oaW5kaWNlcy5nZXQoKSwgaW5kZXgu
Z2V0KCkpOwogICAgIH0KICAgICBXS0J1bmRsZVBhZ2VSZXBsYWNlU3RyaW5nTWF0Y2hlcyhidW5k
bGUucGFnZSgpLT5wYWdlKCksIGluZGljZXMuZ2V0KCksIHRvV0socmVwbGFjZW1lbnRUZXh0KS5n
ZXQoKSwgc2VsZWN0aW9uT25seSk7CkBAIC0zMzQsMTEgKzM4MSw3IEBAIHZvaWQgVGVzdFJ1bm5l
cjo6cmVwbGFjZUZpbmRNYXRjaGVzQXRJbmRpY2VzKEpTVmFsdWVSZWYgbWF0Y2hJbmRpY2VzQXNW
YWx1ZSwgSlNTCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKICAgICBX
S0J1bmRsZUNsZWFyQWxsRGF0YWJhc2VzKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEZWxldGVBbGxJbmRleGVkRGF0YWJh
c2VzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLQm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIkRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMiLCB0cnVlKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1b3RhKQpAQCAtMzQ4LDI5ICsz
OTEsMjcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IHF1b3Rh
KQogCiB2b2lkIFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlN5bmNMb2NhbFN0b3JhZ2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHRydWUpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN5bmNMb2NhbFN0b3JhZ2UiLCB0cnVl
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKIHsK
LSAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0aW9uQ2FjaGUoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVBhZ2VDbGVhckFwcGxpY2F0
aW9uQ2FjaGUocGFnZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9u
Q2FjaGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLQnVuZGxlUGFnZUNs
ZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlQ2xl
YXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKHBhZ2UoKSwgdG9XSyhvcmlnaW4pLmdldCgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVpbnQ2NF90IHNp
emUpCiB7Ci0gICAgV0tCdW5kbGVQYWdlU2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHNpemUpOworICAgIFdLQnVuZGxlUGFn
ZVNldEFwcENhY2hlTWF4aW11bVNpemUocGFnZSgpLCBzaXplKTsKIH0KIAogbG9uZyBsb25nIFRl
c3RSdW5uZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYg
b3JpZ2luKQogewotICAgIHJldHVybiBXS0J1bmRsZVBhZ2VHZXRBcHBDYWNoZVVzYWdlRm9yT3Jp
Z2luKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhvcmln
aW4pLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlR2V0QXBwQ2FjaGVVc2FnZUZvck9y
aWdpbihwYWdlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpCkBAIC0zODEsMTU4ICs0
MjIsMTA4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9u
Q2FjaGVRdW90YSgpCiBzdGF0aWMgaW5saW5lIEpTVmFsdWVSZWYgc3RyaW5nQXJyYXlUb0pTKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBXS0FycmF5UmVmIHN0cmluZ3MpCiB7CiAgICAgY29uc3Qgc2l6
ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUoc3RyaW5ncyk7Ci0KLSAgICBKU1ZhbHVlUmVmIGFy
cmF5UmVzdWx0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7Ci0gICAgSlNP
YmplY3RSZWYgYXJyYXlPYmogPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJyYXlSZXN1bHQs
IDApOworICAgIGF1dG8gYXJyYXkgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCBu
dWxscHRyKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgc3RyaW5nUmVmID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJy
YXlHZXRJdGVtQXRJbmRleChzdHJpbmdzLCBpKSk7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBzdHJpbmdKUyA9IHRvSlMoc3RyaW5nUmVmKTsKLSAgICAgICAgSlNPYmplY3RTZXRQ
cm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJyYXlPYmosIGksIEpTVmFsdWVNYWtlU3RyaW5nKGNv
bnRleHQsIHN0cmluZ0pTLmdldCgpKSwgMCk7CisgICAgICAgIGF1dG8gc3RyaW5nUmVmID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChzdHJpbmdzLCBpKSk7
CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBK
U1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCB0b0pTKHN0cmluZ1JlZikuZ2V0KCkpLCBudWxscHRy
KTsKICAgICB9Ci0KLSAgICByZXR1cm4gYXJyYXlSZXN1bHQ7CisgICAgcmV0dXJuIGFycmF5Owog
fQogCiBKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZSgp
CiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7Ci0KLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBvcmlnaW5z
ID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKHBh
Z2UpKTsKLQotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKHBhZ2UpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nQXJy
YXlUb0pTKGNvbnRleHQsIG9yaWdpbnMuZ2V0KCkpOworICAgIHJldHVybiBzdHJpbmdBcnJheVRv
SlMobWFpbkpTQ29udGV4dCgpLCBhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlPcmlnaW5zV2l0aEFw
cGxpY2F0aW9uQ2FjaGUocGFnZSgpKSkuZ2V0KCkpOwogfQogCiBib29sIFRlc3RSdW5uZXI6Omlz
Q29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVQ
YWdlSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdl
SXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQocGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldENhbk9wZW5XaW5kb3dzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh0cnVlKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0Q2FuT3BlbldpbmRvd3MiLCB0cnVl
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFhTU0F1ZGl0b3JFbmFibGVkIikpOwotICAg
IGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAg
IFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5k
bGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJs
ZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxl
ZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1lZGlhRGV2aWNlc0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJLaXRNZWRpYURldmljZXNF
bmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5u
ZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBr
ZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRN
ZWRpYURldmljZXNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiV2ViS2l0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkIikpOwotICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdL
QnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoaW5qZWN0ZWRCdW5kbGUu
YnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCksIGVuYWJsZWQp
OworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJSVENNRE5TSUNFQ2FuZGlk
YXRlc0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRDdXN0b21V
c2VyQWdlbnQoSlNTdHJpbmdSZWYgdXNlckFnZW50KQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldEN1c3RvbVVzZXJBZ2VudCIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgdG9XSyh1c2VyQWdlbnQpLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTZXRDdXN0b21Vc2VyQWdlbnQiLCB0b1dLKHVzZXJBZ2VudCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFdlYkFQSVN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V2ViQVBJU3RhdGlzdGljc0VuYWJsZWQiKSk7Ci0g
ICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0g
ICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1
bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5h
YmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9kZXJuTWVk
aWFDb250cm9sc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXZWJL
aXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3Rl
ZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiLCBlbmFibGVk
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRXZWJHTDJFbmFibGVkKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0V2ViR0wyRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBp
bmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRs
ZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRs
ZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAg
ICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViR0wyRW5hYmxlZCIsIGVuYWJsZWQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdyaXRhYmxlU3RyZWFtQVBJRW5hYmxlZChib29s
IGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFdyaXRhYmxlU3RyZWFtQVBJRW5h
YmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVy
KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5
LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V3Jp
dGFibGVTdHJlYW1BUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0VHJhbnNmb3JtU3RyZWFtQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIldlYktpdFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5q
ZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVP
dmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUo
KSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAg
V1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFRyYW5zZm9ybVN0cmVhbUFQSUVuYWJsZWQi
LCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRSZWFkYWJsZUJ5dGVTdHJlYW1B
UElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
a2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0UmVhZGFi
bGVCeXRlU3RyZWFtQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZl
cmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRs
ZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJl
ZmVyZW5jZSgiV2ViS2l0UmVhZGFibGVCeXRlU3RyZWFtQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZChib29sIGVu
YWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdEVuY3J5cHRlZE1lZGlhQVBJRW5hYmxl
ZCIpKTsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKTsKLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGlu
amVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5Lmdl
dCgpLCBlbmFibGVkKTsKKyAgICBXVFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0RW5jcnlw
dGVkTWVkaWFBUElFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBrZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJXZWJLaXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZCIpKTsKLSAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBXS0J1bmRsZU92
ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgp
LCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBX
VFI6Om92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQi
LCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW5lcmljQ3VlQVBJRW5hYmxl
ZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdEdlbmVyaWNDdWVBUElF
bmFibGVkIikpOwotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5u
ZXIoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBr
ZXkuZ2V0KCksIGVuYWJsZWQpOworICAgIFdUUjo6b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRH
ZW5lcmljQ3VlQVBJRW5hYmxlZCIsIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLSAgICBpbmplY3RlZEJ1
bmRsZS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShlbmFibGVkKTsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldEFsbG93c0FueVNTTENlcnRpZmljYXRlIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShl
bmFibGVkKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGVuYWJsZWQpOworICAgIHBvc3RTeW5jaHJvbm91
c1BhZ2VNZXNzYWdlKCJTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSIsIGVuYWJsZWQpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHRO
YXZpZ2F0aW9uKGJvb2wgc2hvdWxkU3dhcCkKIHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShzaG91bGRTd2FwKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2UoIlNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0
aW9uIiwgc2hvdWxkU3dhcCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3dhcFRv
RGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJvb2wgc2hvdWxkU3dhcCkKIHsKLSAgICBh
dXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0
TmF2aWdhdGlvbiIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc2hvdWxkU3dhcCkpOwotICAgIFdLQnVuZGxlUGFn
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJTZXRTaG91bGRTd2FwVG9EZWZhdWx0U2Vz
c2lvbk9uTmV4dE5hdmlnYXRpb24iLCBzaG91bGRTd2FwKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCkBAIC01
NTUsOSArNTQ2LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXROZWVkc1N0b3JhZ2VBY2Nlc3NGcm9t
RmlsZVVSTHNRdWlyayhib29sIG5lZWRzUXVpcmspCiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFBsdWdpbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4ga2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0
UGx1Z2luc0VuYWJsZWQiKSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9y
VGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdy
b3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2Uo
IldlYktpdFBsdWdpbnNFbmFibGVkIiwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZWQpCkBAIC01OTEsOCAr
NTgwLDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NBbGxvd0xpc3RFbnRy
eShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3QKIGJvb2wgVGVzdFJ1bm5lcjo6aXNQYWdl
Qm94VmlzaWJsZShpbnQgcGFnZUluZGV4KQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFn
ZSgpKTsKLSAgICByZXR1cm4gV0tCdW5kbGVJc1BhZ2VCb3hWaXNpYmxlKGluamVjdGVkQnVuZGxl
LmJ1bmRsZSgpLCBtYWluRnJhbWUsIHBhZ2VJbmRleCk7CisgICAgcmV0dXJuIFdLQnVuZGxlSXNQ
YWdlQm94VmlzaWJsZShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgbWFpbkZyYW1lKCksIHBhZ2VJ
bmRleCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyaW5nUmVmIHZhbHVlKQpAQCAtNjAw
LDE2ICs1ODgsMTQgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHIKICAgICBpZiAoIWVsZW1lbnQg
fHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCBlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVOb2RlSGFuZGxlUmVmPiBub2RlSGFuZGxlID0gYWRv
cHRXSyhXS0J1bmRsZU5vZGVIYW5kbGVDcmVhdGUoY29udGV4dCwgY29uc3RfY2FzdDxKU09iamVj
dFJlZj4oZWxlbWVudCkpKTsKLSAgICBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVt
ZW50VmFsdWVGb3JVc2VyKG5vZGVIYW5kbGUuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKKyAg
ICBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JVc2VyKGFkb3B0
V0soV0tCdW5kbGVOb2RlSGFuZGxlQ3JlYXRlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8SlNPYmplY3RS
ZWY+KGVsZW1lbnQpKSkuZ2V0KCksIHRvV0sodmFsdWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRBdWRpb1Jlc3VsdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBk
YXRhKQogewogICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpOwogICAgIC8vIEZJWE1FICgxMjMwNTgpOiBVc2UgYSBKU0MgQVBJIHRvIGdldCBidWZm
ZXIgY29udGVudHMgb25jZSBzdWNoIGlzIGV4cG9zZWQuCi0gICAgV0tSZXRhaW5QdHI8V0tEYXRh
UmVmPiBhdWRpb0RhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJy
YXkoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKTsKLSAgICBpbmplY3Rl
ZEJ1bmRsZS5zZXRBdWRpb1Jlc3VsdChhdWRpb0RhdGEuZ2V0KCkpOworICAgIGluamVjdGVkQnVu
ZGxlLnNldEF1ZGlvUmVzdWx0KGFkb3B0V0soV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhB
cnJheShpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgY29udGV4dCwgZGF0YSkpLmdldCgpKTsKICAg
ICBzZXRXaGF0VG9EdW1wKFdoYXRUb0R1bXA6OkF1ZGlvKTsKICAgICBzZXREdW1wUGl4ZWxzKGZh
bHNlKTsKIH0KQEAgLTYyMSwzMyArNjA3LDMwIEBAIHVuc2lnbmVkIFRlc3RSdW5uZXI6OndpbmRv
d0NvdW50KCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCgpCiB7Ci0g
ICAgV0tCdW5kbGVDbGVhckhpc3RvcnlGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVDbGVhckhpc3RvcnlGb3JUZXN0aW5n
KHBhZ2UoKSk7CiB9CiAKLS8vIE9iamVjdCBDcmVhdGlvbgotCi12b2lkIFRlc3RSdW5uZXI6Om1h
a2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09i
amVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQordm9pZCBUZXN0UnVubmVyOjptYWtlV2luZG93
T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHNldFByb3BlcnR5KGNvbnRleHQs
IHdpbmRvd09iamVjdCwgInRlc3RSdW5uZXIiLCB0aGlzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCBleGNlcHRpb24pOworICAg
IHNldEdsb2JhbE9iamVjdFByb3BlcnR5KGNvbnRleHQsICJ0ZXN0UnVubmVyIiwgdGhpcyk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3RvcigpCiB7Ci0gICAgV0tCdW5kbGVJ
bnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvclNob3coV0tC
dW5kbGVQYWdlR2V0SW5zcGVjdG9yKHBhZ2UoKSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNs
b3NlV2ViSW5zcGVjdG9yKCkKIHsKLSAgICBXS0J1bmRsZUluc3BlY3RvckNsb3NlKFdLQnVuZGxl
UGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvckNsb3NlKFdLQnVuZGxlUGFnZUdldEluc3BlY3Rv
cihwYWdlKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9y
KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2Ny
aXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgV0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlw
dEZvclRlc3QoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSksIHNjcmlwdFdLLmdldCgpKTsKKyAgICBXS0J1bmRsZUluc3Bl
Y3RvckV2YWx1YXRlU2NyaXB0Rm9yVGVzdChXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IocGFnZSgp
KSwgdG9XSyhzY3JpcHQpLmdldCgpKTsKIH0KIAotdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWdu
ZWQsIFdLUmV0YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+ID4gV29ybGRNYXA7Cit1c2lu
ZyBXb3JsZE1hcCA9IFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgV0tSZXRhaW5QdHI8V0tCdW5kbGVT
Y3JpcHRXb3JsZFJlZj4+Owogc3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCiB7CiAgICAgc3Rh
dGljIFdvcmxkTWFwJiBtYXAgPSAqbmV3IFdvcmxkTWFwOwpAQCAtNjU2LDEyICs2MzksMTEgQEAg
c3RhdGljIFdvcmxkTWFwJiB3b3JsZE1hcCgpCiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6Ondvcmxk
SURGb3JXb3JsZChXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQogewotICAgIFdvcmxkTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB3b3JsZE1hcCgpLmVuZCgpOwotICAgIGZvciAoV29ybGRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29ybGRNYXAoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSB3b3JsZCkKLSAgICAgICAgICAgIHJldHVy
biBpdC0+a2V5OworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRoZSBhbnRpLXBhdHRlcm4gb2YgaXRl
cmF0aW5nIGFuIGVudGlyZSBtYXAuIFR5cGljYWxseSB3ZSB1c2UgYSBwYWlyIG9mIG1hcHMgb3Ig
anVzdCBhIHZlY3RvciBpbiBhIGNhc2UgbGlrZSB0aGlzLgorICAgIGZvciAoYXV0byYgbWFwRW50
cnkgOiB3b3JsZE1hcCgpKSB7CisgICAgICAgIGlmIChtYXBFbnRyeS52YWx1ZSA9PSB3b3JsZCkK
KyAgICAgICAgICAgIHJldHVybiBtYXBFbnRyeS5rZXk7CiAgICAgfQotCiAgICAgcmV0dXJuIDA7
CiB9CiAKQEAgLTY4MSw3ICs2NjMsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKEpTQ29udGV4dFJlZiBjb250ZXh0LCB1bnNpZ25lZCB3bwogCiAgICAg
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlRnJhbWVGb3JKYXZhU2NyaXB0Q29udGV4
dChjb250ZXh0KTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICBmcmFtZSA9IFdLQnVuZGxlUGFn
ZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkp
OworICAgICAgICBmcmFtZSA9IG1haW5GcmFtZSgpOwogCiAgICAgSlNHbG9iYWxDb250ZXh0UmVm
IGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZy
YW1lLCB3b3JsZC5nZXQoKSk7CiAgICAgSlNFdmFsdWF0ZVNjcmlwdChqc0NvbnRleHQsIHNjcmlw
dCwgMCwgMCwgMCwgMCk7IApAQCAtNjk2LDggKzY3OCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
UE9TSVhMb2NhbGUoSlNTdHJpbmdSZWYgbG9jYWxlKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRl
eHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVTZXRU
ZXh0RGlyZWN0aW9uKG1haW5GcmFtZSwgdG9XSyhkaXJlY3Rpb24pLmdldCgpKTsKKyAgICByZXR1
cm4gV0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24obWFpbkZyYW1lKCksIHRvV0soZGlyZWN0
aW9uKS5nZXQoKSk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBh
Z2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGJvb2wgc2hvdWxkU3RheU9uUGFnZSkKQEAgLTcw
NywxNyArNjg4LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVy
SGFuZGxpbmdCZWZvcmVVbmxvYWQoYm9vbCBzaG91bGRTdGF5T25QCiAKIGJvb2wgVGVzdFJ1bm5l
cjo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkgY29u
c3QKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBu
dWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5n
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0
dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5H
ZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdl
dCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29s
ZWFuKCJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTmF2aWdhdGlvbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJE
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkNsZWFyRGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoSlNTdHJpbmdSZWYgc3RhdGUpCkBAIC03MzAs
NyArNzA2LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGZhbHNlKTsKIH0KIAotdHlwZWRl
ZiBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFwOwordXNpbmcg
Q2FsbGJhY2tNYXAgPSBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTT2JqZWN0UmVmPjsKIHN0YXRp
YyBDYWxsYmFja01hcCYgY2FsbGJhY2tNYXAoKQogewogICAgIHN0YXRpYyBDYWxsYmFja01hcCYg
bWFwID0gKm5ldyBDYWxsYmFja01hcDsKQEAgLTc4MywzOCArNzU5LDMyIEBAIHN0YXRpYyB2b2lk
IGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxi
YWNrKQogewogICAgIGlmICghY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKLQorICAgIGF1dG8g
Y29udGV4dCA9IG1haW5KU0NvbnRleHQoKTsKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250
ZXh0LCBjYWxsYmFjaykpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoY2FsbGJhY2tNYXAoKS5j
b250YWlucyhpbmRleCkpIHsKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91
dHB1dFRleHQobWFrZVN0cmluZygiRkFJTDogVHJpZWQgdG8gaW5zdGFsbCBhIHNlY29uZCBUZXN0
UnVubmVyIGNhbGxiYWNrIGZvciB0aGUgc2FtZSBldmVudCAoaWQgIiwgaW5kZXgsICIpXG5cbiIp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICAgICBKU1ZhbHVlUHJvdGVjdChj
b250ZXh0LCBjYWxsYmFjayk7Ci0gICAgY2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNr
KTsKKyAgICBjYWxsYmFja01hcCgpLmFkZChpbmRleCwgY29uc3RfY2FzdDxKU09iamVjdFJlZj4o
Y2FsbGJhY2spKTsKIH0KIAogc3RhdGljIHZvaWQgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayh1bnNp
Z25lZCBpbmRleCwgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSAwLCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdID0gbnVsbHB0cikKIHsKLSAgICBpZiAoIWNhbGxiYWNrTWFwKCkuY29udGFpbnMo
aW5kZXgpKQorICAgIGF1dG8gY2FsbGJhY2sgPSBjYWxsYmFja01hcCgpLnRha2UoaW5kZXgpOwor
ICAgIGlmICghY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKLSAgICBXS0J1bmRsZUZyYW1lUmVm
IG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgSlNPYmplY3RS
ZWYgY2FsbGJhY2sgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgY2FsbGJhY2tNYXAoKS50YWtl
KGluZGV4KSwgMCk7CisgICAgYXV0byBjb250ZXh0ID0gbWFpbkpTQ29udGV4dCgpOwogICAgIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdldEdsb2Jh
bE9iamVjdChjb250ZXh0KSwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCAwKTsKICAgICBKU1Zh
bHVlVW5wcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpj
bGVhclRlc3RSdW5uZXJDYWxsYmFja3MoKQogewotICAgIGZvciAoYXV0byYgaXRlciA6IGNhbGxi
YWNrTWFwKCkpIHsKLSAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpKTsKLSAgICAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAgICAgSlNPYmplY3RSZWYgY2FsbGJhY2sg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgaXRlci52YWx1ZSwgMCk7Ci0gICAgICAgIEpTVmFs
dWVVbnByb3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwotICAgIH0KLQorICAgIGF1dG8gY29udGV4
dCA9IG1haW5KU0NvbnRleHQoKTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogY2FsbGJhY2tNYXAo
KS52YWx1ZXMoKSkKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250ZXh0LCBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgdmFsdWUsIG51bGxwdHIpKTsKICAgICBjYWxsYmFja01hcCgpLmNsZWFy
KCk7CiB9CiAKQEAgLTg5NCwyMCArODY0LDEyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQ
cmVmZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVmIHZhbHVlKQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhY2NlcHQpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QWx3YXlzQWNjZXB0Q29va2llcyIpKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShhY2NlcHQpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U2V0QWx3YXlzQWNjZXB0Q29va2llcyIsIGFjY2VwdCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0T25seUFjY2VwdEZpcnN0UGFydHlDb29raWVzKGJvb2wgYWNjZXB0KQogewotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldE9ubHlBY2NlcHRGaXJzdFBhcnR5Q29va2llcyIpKTsKLSAgICAK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoYWNjZXB0KSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTZXRPbmx5QWNjZXB0Rmlyc3RQYXJ0eUNvb2tpZXMiLCBhY2NlcHQpOwogfQogCiBk
b3VibGUgVGVzdFJ1bm5lcjo6cHJlY2lzZVRpbWUoKQpAQCAtOTI0LDE1ICs4ODYsMTUgQEAgdm9p
ZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewog
ICAgIG1fdXNlclN0eWxlU2hlZXRFbmFibGVkID0gZW5hYmxlZDsKIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBlbXB0eVVybCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIiIpKTsKLSAgICBXS1N0cmluZ1JlZiBsb2NhdGlvbiA9IGVuYWJsZWQgPyBtX3VzZXJT
dHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVVybC5nZXQoKTsKKyAgICBhdXRvIGVtcHR5
U3RyaW5nID0gdG9XSygiIik7CisgICAgYXV0byBsb2NhdGlvbiA9IGVuYWJsZWQgPyBtX3VzZXJT
dHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVN0cmluZy5nZXQoKTsKICAgICBhdXRvJiBp
bmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICBXS0J1bmRs
ZVNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVj
dGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBsb2NhdGlvbik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBsb2NhdGlvbikKIHsKLSAgICBt
X3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKGxvY2F0aW9uKSk7CisgICAgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uID0gdG9XSyhsb2Nh
dGlvbik7CiAKICAgICBpZiAobV91c2VyU3R5bGVTaGVldEVuYWJsZWQpCiAgICAgICAgIHNldFVz
ZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVlKTsKQEAgLTk0Niw4ICs5MDgsNyBAQCB2b2lkIFRlc3RS
dW5uZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KTsKLSAgICBXS0J1bmRsZVNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhpbmplY3RlZEJ1
bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIGVuYWJsZWQpOwor
ICAgIFdLQnVuZGxlU2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgcGFnZSgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoKQpAQCAtOTczLDM2ICs5MzQsMjggQEAgdm9p
ZCBUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVu
YWJsZWQpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6Z3JhbnRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9u
KEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3Jp
Z2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJt
aXNzaW9uKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBh
Z2UoKSwgb3JpZ2luV0suZ2V0KCksIHRydWUpOworICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0
aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHBhZ2Uo
KSwgdG9XSyhvcmlnaW4pLmdldCgpLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkZW55
V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIGF1dG8m
IGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwotICAgIFdLQnVu
ZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwg
aW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCksIG9yaWdpbldLLmdldCgpLCBmYWxzZSk7Cisg
ICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgcGFnZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCksIGZhbHNlKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9u
cygpCiB7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCk7Ci0gICAgV0tCdW5kbGVSZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhp
bmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpOwor
ICAgIFdLQnVuZGxlUmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBwYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soSlNWYWx1ZVJlZiBub3RpZmljYXRpb24p
CiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCk7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpOwotICAgIEpTQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0g
ICAgdWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSBXS0J1bmRsZUdldFdlYk5vdGlmaWNhdGlvbklE
KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBjb250ZXh0LCBub3RpZmljYXRpb24pOwotICAgIGlu
amVjdGVkQnVuZGxlLnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlv
bklEKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5wb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGlj
ayhXS0J1bmRsZUdldFdlYk5vdGlmaWNhdGlvbklEKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBt
YWluSlNDb250ZXh0KCksIG5vdGlmaWNhdGlvbikpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAgLy8gRklYTUU6IHRo
aXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbihlbmFibGVkKTsKIH0KIApAQCAtMTAxMSwxMDIgKzk2NCw1MSBAQCBi
b29sIFRlc3RSdW5uZXI6OmlzR2VvbG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpCiAgICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc0dlb2xvY2F0aW9uUHJvdmlkZXJBY3RpdmUo
KTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNWYWx1ZVJl
ZiBqc0FsdGl0dWRlLCBKU1ZhbHVlUmVmIGpzQWx0aXR1ZGVBY2N1cmFjeSwgSlNWYWx1ZVJlZiBq
c0hlYWRpbmcsIEpTVmFsdWVSZWYganNTcGVlZCwgSlNWYWx1ZVJlZiBqc0Zsb29yTGV2ZWwpCit2
b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFs
dGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJs
ZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9v
ckxldmVsKQogewotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRl
eHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJh
bWUpOwotCi0gICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlID0gZmFsc2U7Ci0gICAgZG91YmxlIGFs
dGl0dWRlID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwganNBbHRp
dHVkZSkpIHsKLSAgICAgICAgcHJvdmlkZXNBbHRpdHVkZSA9IHRydWU7Ci0gICAgICAgIGFsdGl0
dWRlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzQWx0aXR1ZGUsIDApOwotICAgIH0KLQot
ICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5ID0gZmFsc2U7Ci0gICAgZG91YmxlIGFs
dGl0dWRlQWNjdXJhY3kgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0
LCBqc0FsdGl0dWRlQWNjdXJhY3kpKSB7Ci0gICAgICAgIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eSA9IHRydWU7Ci0gICAgICAgIGFsdGl0dWRlQWNjdXJhY3kgPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwganNBbHRpdHVkZUFjY3VyYWN5LCAwKTsKLSAgICB9Ci0KLSAgICBib29sIHByb3ZpZGVz
SGVhZGluZyA9IGZhbHNlOwotICAgIGRvdWJsZSBoZWFkaW5nID0gMC47Ci0gICAgaWYgKCFKU1Zh
bHVlSXNVbmRlZmluZWQoY29udGV4dCwganNIZWFkaW5nKSkgewotICAgICAgICBwcm92aWRlc0hl
YWRpbmcgPSB0cnVlOwotICAgICAgICBoZWFkaW5nID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IGpzSGVhZGluZywgMCk7Ci0gICAgfQotCi0gICAgYm9vbCBwcm92aWRlc1NwZWVkID0gZmFsc2U7
Ci0gICAgZG91YmxlIHNwZWVkID0gMC47Ci0gICAgaWYgKCFKU1ZhbHVlSXNVbmRlZmluZWQoY29u
dGV4dCwganNTcGVlZCkpIHsKLSAgICAgICAgcHJvdmlkZXNTcGVlZCA9IHRydWU7Ci0gICAgICAg
IHNwZWVkID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGpzU3BlZWQsIDApOwotICAgIH0KLQot
ICAgIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsID0gZmFsc2U7Ci0gICAgZG91YmxlIGZsb29yTGV2
ZWwgPSAwLjsKLSAgICBpZiAoIUpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCBqc0Zsb29yTGV2
ZWwpKSB7Ci0gICAgICAgIHByb3ZpZGVzRmxvb3JMZXZlbCA9IHRydWU7Ci0gICAgICAgIGZsb29y
TGV2ZWwgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNGbG9vckxldmVsLCAwKTsKLSAgICB9
Ci0KLSAgICBpbmplY3RlZEJ1bmRsZS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVk
ZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBo
ZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgcHJvdmlkZXNGbG9vckxldmVsLCBmbG9vckxl
dmVsKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlLCBhbHRpdHVk
ZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCwgZmxvb3JMZXZlbCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKEpTU3RyaW5n
UmVmIG1lc3NhZ2UpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VXSyA9
IHRvV0sobWVzc2FnZSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihtZXNzYWdlV0suZ2V0KCkpOworICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVu
YXZhaWxhYmxlRXJyb3IodG9XSyhtZXNzYWdlKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0VXNlck1lZGlhUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7Ci0gICAgLy8gRklYTUU6
IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGRvbmUgYnkgZnJhbWUuCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldFVz
ZXJNZWRpYVBlcm1pc3Npb24oZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRV
c2VyTWVkaWFQZXJtaXNzaW9uKCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgZG9u
ZSBieSBmcmFtZS4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBieSBmcmFtZS4K
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9u
KCk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNEb2luZ01lZGlhQ2FwdHVyZSgpIGNvbnN0CiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNEb2luZ01lZGlhQ2FwdHVyZSIpKTsKLSAgICBX
S1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRhdGEpOwotICAg
IEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQ
YWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzRG9pbmdNZWRpYUNhcHR1cmUiKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlzc2lvbkZvck9yaWdp
bihib29sIHBlcm1pc3Npb24sIEpTU3RyaW5nUmVmIG9yaWdpbiwgSlNTdHJpbmdSZWYgcGFyZW50
T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0so
b3JpZ2luKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2luV0sgPSB0
b1dLKHBhcmVudE9yaWdpbik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldFVz
ZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Npb24sIG9yaWdpbldL
LmdldCgpLCBwYXJlbnRPcmlnaW5XSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnNldFVzZXJNZWRpYVBlcnNpc3RlbnRQZXJtaXNzaW9uRm9yT3JpZ2luKHBlcm1pc3Np
b24sIHRvV0sob3JpZ2luKS5nZXQoKSwgdG9XSyhwYXJlbnRPcmlnaW4pLmdldCgpKTsKIH0KIAog
dW5zaWduZWQgVGVzdFJ1bm5lcjo6dXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9y
aWdpbihKU1N0cmluZ1JlZiBvcmlnaW4sIEpTU3RyaW5nUmVmIHBhcmVudE9yaWdpbikgY29uc3QK
IHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbldLID0gdG9XSyhwYXJl
bnRPcmlnaW4pOwotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbihvcmlnaW5XSy5nZXQoKSwgcGFyZW50
T3JpZ2luV0suZ2V0KCkpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
dXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZvck9yaWdpbih0b1dLKG9yaWdpbikuZ2V0
KCksIHRvV0socGFyZW50T3JpZ2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVz
ZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9y
aWdpbiwgSlNTdHJpbmdSZWYgcGFyZW50T3JpZ2luKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gcGFyZW50T3JpZ2luV0sgPSB0b1dLKHBhcmVudE9yaWdpbik7Ci0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnJlc2V0VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3VudEZv
ck9yaWdpbihvcmlnaW5XSy5nZXQoKSwgcGFyZW50T3JpZ2luV0suZ2V0KCkpOworICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5yZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Q291
bnRGb3JPcmlnaW4odG9XSyhvcmlnaW4pLmdldCgpLCB0b1dLKHBhcmVudE9yaWdpbikuZ2V0KCkp
OwogfQogCiBib29sIFRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCiB7Ci0g
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICByZXR1cm4g
V0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhtYWluRnJhbWUpOworICAgIHJl
dHVybiBXS0J1bmRsZUZyYW1lQ2FsbFNob3VsZENsb3NlT25XZWJWaWV3KG1haW5GcmFtZSgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKHVuc2lnbmVkIGhvd0Zh
ckJhY2t3YXJkKQpAQCAtMTEyMiwyMCArMTAyNCwxNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVl
Rm9yd2FyZE5hdmlnYXRpb24odW5zaWduZWQgaG93RmFyRm9yd2FyZCkKIHZvaWQgVGVzdFJ1bm5l
cjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBib29sIHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHMpCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IGJhc2VV
UkxXSyA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwoV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKSkpOwotICAgIFdLUmV0YWluUHRyPFdL
VVJMUmVmPiB1cmxXSyA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMV0su
Z2V0KCksIHRvV1RGU3RyaW5nKHRvV0sodXJsKSkudXRmOCgpLmRhdGEoKSkpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmdXSyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5n
KHVybFdLLmdldCgpKSk7Ci0KKyAgICBhdXRvIGJhc2VVUkxXSyA9IGFkb3B0V0soV0tCdW5kbGVG
cmFtZUNvcHlVUkwobWFpbkZyYW1lKCkpKTsKKyAgICBhdXRvIHVybFdLID0gYWRvcHRXSyhXS1VS
TENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkxXSy5nZXQoKSwgdG9XVEZTdHJpbmcodXJsKS51dGY4
KCkuZGF0YSgpKSk7CisgICAgYXV0byB1cmxTdHJpbmdXSyA9IGFkb3B0V0soV0tVUkxDb3B5U3Ry
aW5nKHVybFdLLmdldCgpKSk7CiAgICAgaW5qZWN0ZWRCdW5kbGUucXVldWVMb2FkKHVybFN0cmlu
Z1dLLmdldCgpLCB0b1dLKHRhcmdldCkuZ2V0KCksIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoSlNTdHJpbmdSZWYgY29u
dGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCwgSlNTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkwpCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNvbnRlbnRXSyA9IHRvV0soY29udGVudCk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxXSyA9IGJhc2VVUkwgPyB0b1dL
KGJhc2VVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7Ci0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMV0sgPSB1bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5y
ZWFjaGFibGVVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7Ci0KLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkSFRNTFN0cmluZyhjb250ZW50V0suZ2V0KCks
IGJhc2VVUkxXSy5nZXQoKSwgdW5yZWFjaGFibGVVUkxXSy5nZXQoKSk7CisgICAgYXV0byBiYXNl
VVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJMKSA6IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PigpOworICAgIGF1dG8gdW5yZWFjaGFibGVVUkxXSyA9IHVucmVhY2hhYmxlVVJMID8gdG9XSyh1
bnJlYWNoYWJsZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKKyAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkSFRNTFN0cmluZyh0b1dLKGNvbnRlbnQpLmdl
dCgpLCBiYXNlVVJMV0suZ2V0KCksIHVucmVhY2hhYmxlVVJMV0suZ2V0KCkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKQEAgLTExNDUsMTYzICsxMDQ0LDExOSBAQCB2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRp
bmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucXVldWVMb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkaW5nU2NyaXB0KHRvV0soc2NyaXB0KS5nZXQoKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVm
IHNjcmlwdCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dL
KHNjcmlwdCk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTm9uTG9hZGlu
Z1NjcmlwdChzY3JpcHRXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCh0b1dLKHNjcmlwdCkuZ2V0KCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlcyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRS
ZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZXMiLCB2YWx1ZSk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldEhhbmRsZXNBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZXMoYm9vbCBoYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZXMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpKTsK
LSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwg
aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sIHZh
bHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZExvZ0NhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFu
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAg
V0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBv
c3RQYWdlTWVzc2FnZSgiU2V0U2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRMb2dEb3du
bG9hZENhbGxiYWNrcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAg
IFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBw
b3N0UGFnZU1lc3NhZ2UoIlNldFNob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIiwgdmFsdWUpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUoSlNTdHJpbmdS
ZWYgdXNlcm5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QXV0aGVudGljYXRp
b25Vc2VybmFtZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHVzZXJuYW1lKSk7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQ
YWdlTWVzc2FnZSgiU2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIsIHRvV0sodXNlcm5hbWUpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKEpTU3RyaW5n
UmVmIHBhc3N3b3JkKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEF1dGhlbnRpY2F0
aW9uUGFzc3dvcmQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhwYXNzd29yZCkpOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0
UGFnZU1lc3NhZ2UoIlNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiLCB0b1dLKHBhc3N3b3JkKSk7
CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCgpIGNvbnN0
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCIp
KTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgJnJldHVybkRh
dGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRU
eXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIlNlY3VyZUV2ZW50SW5wdXRJc0Vu
YWJsZWQiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRCbG9ja0FsbFBsdWdpbnMoYm9vbCBz
aG91bGRCbG9jaykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRCbG9ja0FsbFBsdWdp
bnMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHNob3VsZEJsb2NrKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0
QmxvY2tBbGxQbHVnaW5zIiwgc2hvdWxkQmxvY2spOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFBsdWdpblN1cHBvcnRlZE1vZGUoSlNTdHJpbmdSZWYgbW9kZSkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRQbHVnaW5TdXBwb3J0ZWRNb2RlIikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcobW9kZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldFBsdWdpblN1cHBvcnRlZE1vZGUiLCB0
b1dLKG1vZGUpKTsKIH0KIAogSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpmYWlsTmV4dE5ld0NvZGVC
bG9jaygpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VH
ZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsK
LSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29u
dGV4dChtYWluRnJhbWUpOwotICAgIHJldHVybiBKU0M6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKGNv
bnRleHQpOworICAgIHJldHVybiBKU0M6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKG1haW5KU0NvbnRl
eHQoKSk7CiB9CiAKLUpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZERkdDb21waWxlcyhK
U1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpudW1iZXJPZkRG
R0NvbXBpbGVzKEpTVmFsdWVSZWYgZnVuY3Rpb24pCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBt
YWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVu
ZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHJldHVybiBKU0M6
Om51bWJlck9mREZHQ29tcGlsZXMoY29udGV4dCwgdGhlRnVuY3Rpb24pOworICAgIHJldHVybiBK
U0M6Om51bWJlck9mREZHQ29tcGlsZXMobWFpbkpTQ29udGV4dCgpLCBmdW5jdGlvbik7CiB9CiAK
LUpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5jdGlvbihKU1ZhbHVlUmVmIHRo
ZUZ1bmN0aW9uKQorSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpuZXZlcklubGluZUZ1bmN0aW9uKEpT
VmFsdWVSZWYgZnVuY3Rpb24pCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBX
S0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIHJldHVybiBKU0M6OnNldE5ldmVySW5s
aW5lKGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4gSlNDOjpzZXROZXZlcklubGlu
ZShtYWluSlNDb250ZXh0KCksIGZ1bmN0aW9uKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRT
aG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheShib29sIHZhbHVlKQogewogICAg
IG1fc2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkgPSB2YWx1ZTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJE
ZWxheSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRv
cHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91
bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheSIsIHZhbHVlKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkoYm9vbCB2
YWx1ZSkKIHsKICAgICBtX3Nob3VsZERlY2lkZVJlc3BvbnNlUG9saWN5QWZ0ZXJEZWxheSA9IHZh
bHVlOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZERlY2lkZVJlc3BvbnNlUG9s
aWN5QWZ0ZXJEZWxheSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdl
KCJTZXRTaG91bGREZWNpZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkiLCB2YWx1ZSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZChib29sIHZhbHVl
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJs
ZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0TmF2aWdh
dGlvbkdlc3R1cmVzRW5hYmxlZCIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRJ
Z25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2
YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRz
IiwgdmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZERvd25sb2FkVW5kaXNw
bGF5YWJsZU1JTUVUeXBlcyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyIpKTsKLSAgICBXS1JldGFp
blB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dmFsdWUpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJTZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFi
bGVNSU1FVHlwZXMiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkQWxs
b3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzcyhib29sIHZhbHVlKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rp
b25BY2Nlc3MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0
U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyIsIHZhbHVlKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVGVybWluYXRlTmV0d29ya1Byb2Nlc3MiKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIlRlcm1pbmF0ZU5ldHdvcmtQ
cm9jZXNzIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6dGVybWluYXRlU2VydmljZVdvcmtlcnMo
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzIikp
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlKCJUZXJt
aW5hdGVTZXJ2aWNlV29ya2VycyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzIikpOwotICAgIFdLUmV0
YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0
ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0
aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNQYWdlTWVzc2FnZSgiU2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyIsIHZhbHVl
KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIG5leHRVSVNjcmlwdENhbGxiYWNrSUQoKQpAQCAtMTMx
NCw5NyArMTE2OSw0OCBAQCB2b2lkIFRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0KEpTU3RyaW5nUmVm
IHNjcmlwdCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICB1bnNpZ25lZCBjYWxsYmFja0lE
ID0gbmV4dFVJU2NyaXB0Q2FsbGJhY2tJRCgpOwogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNr
KGNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJ1blVJ
UHJvY2Vzc1NjcmlwdCIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlS
ZWY+IHRlc3REaWN0aW9uYXJ5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdEtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNjcmlwdCIpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc2NyaXB0VmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKHNjcmlwdCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGNhbGxiYWNrSURL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsYmFja0lEIikp
OwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBjYWxsYmFja0lEVmFsdWUgPSBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKGNhbGxiYWNrSUQpKTsKLQotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
dGVzdERpY3Rpb25hcnkuZ2V0KCksIHNjcmlwdEtleS5nZXQoKSwgc2NyaXB0VmFsdWUuZ2V0KCkp
OwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0odGVzdERpY3Rpb25hcnkuZ2V0KCksIGNhbGxiYWNr
SURLZXkuZ2V0KCksIGNhbGxiYWNrSURWYWx1ZS5nZXQoKSk7Ci0KLSAgICBXS0J1bmRsZVBhZ2VQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCB0ZXN0RGljdGlvbmFyeS5nZXQoKSk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJSdW5VSVByb2Nlc3NTY3JpcHQiLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7
ICJTY3JpcHQiLCB0b1dLKHNjcmlwdCkgfSwKKyAgICAgICAgeyAiQ2FsbGJhY2tJRCIsIGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpLmdldCgpIH0sCisgICAgfSkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0SW1tZWRpYXRlbHkoSlNTdHJpbmdSZWYgc2NyaXB0
LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBuZXh0
VUlTY3JpcHRDYWxsYmFja0lEKCk7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soY2FsbGJh
Y2tJRCwgY2FsbGJhY2spOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUnVuVUlQcm9jZXNz
U2NyaXB0SW1tZWRpYXRlbHkiKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiB0ZXN0RGljdGlvbmFyeSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTY3JpcHQiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHNjcmlwdFZhbHVlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhK
U1N0cmluZyhzY3JpcHQpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjYWxsYmFj
a0lES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbGJhY2tJ
RCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gY2FsbGJhY2tJRFZhbHVlID0gYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShjYWxsYmFja0lEKSk7Ci0KLSAgICBXS0RpY3Rpb25hcnlTZXRJ
dGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBzY3JpcHRLZXkuZ2V0KCksIHNjcmlwdFZhbHVlLmdl
dCgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHRlc3REaWN0aW9uYXJ5LmdldCgpLCBjYWxs
YmFja0lES2V5LmdldCgpLCBjYWxsYmFja0lEVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tCdW5kbGVQ
YWdlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgdGVzdERpY3Rpb25hcnkuZ2V0KCkpOworICAgIHBvc3RQYWdl
TWVzc2FnZSgiUnVuVUlQcm9jZXNzU2NyaXB0SW1tZWRpYXRlbHkiLCBjcmVhdGVXS0RpY3Rpb25h
cnkoeworICAgICAgICB7ICJTY3JpcHQiLCB0b1dLKHNjcmlwdCkgfSwKKyAgICAgICAgeyAiQ2Fs
bGJhY2tJRCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY2FsbGJhY2tJRCkpLmdldCgpIH0sCisg
ICAgfSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJ1blVJU2NyaXB0Q2FsbGJhY2sodW5zaWdu
ZWQgY2FsbGJhY2tJRCwgSlNTdHJpbmdSZWYgcmVzdWx0KQogewotICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLQotICAgIEpTVmFs
dWVSZWYgcmVzdWx0VmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCByZXN1bHQpOwor
ICAgIEpTVmFsdWVSZWYgcmVzdWx0VmFsdWUgPSBKU1ZhbHVlTWFrZVN0cmluZyhtYWluSlNDb250
ZXh0KCksIHJlc3VsdCk7CiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFjayhjYWxsYmFja0lELCAx
LCAmcmVzdWx0VmFsdWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93ZWRNZW51QWN0
aW9ucyhKU1ZhbHVlUmVmIGFjdGlvbnMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
QWxsb3dlZE1lbnVBY3Rpb25zIikpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0KLSAgICBh
dXRvIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0g
ICAgYXV0byBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAg
YXV0byBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFt
ZSk7Ci0gICAgYXV0byBsZW5ndGhQcm9wZXJ0eU5hbWUgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOworICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdL
KFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gY29udGV4dCA9IG1haW5KU0NvbnRl
eHQoKTsKICAgICBhdXRvIGFjdGlvbnNBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBh
Y3Rpb25zLCBudWxscHRyKTsKLSAgICBhdXRvIGxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eShjb250ZXh0LCBhY3Rpb25zQXJyYXksIGxlbmd0aFByb3BlcnR5TmFtZS5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYWN0aW9uc0FycmF5LCBpLCAwKTsKLSAgICAg
ICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgYXV0byBhY3Rpb25OYW1lID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gYWN0aW9uID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhhY3Rpb25OYW1l
LmdldCgpKSk7Ci0gICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBh
Y3Rpb24uZ2V0KCkpOworICAgIGF1dG8gbGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYWN0
aW9uc0FycmF5KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQs
IGFjdGlvbnNBcnJheSwgaSwgbnVsbHB0cik7CisgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1l
c3NhZ2VCb2R5LmdldCgpLCB0b1dLU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CiAgICAg
fQotCi0gICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldEFsbG93ZWRNZW51
QWN0aW9ucyIsIG1lc3NhZ2VCb2R5KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0YWxsQ3Vz
dG9tTWVudUFjdGlvbihKU1N0cmluZ1JlZiBuYW1lLCBib29sIGRpc21pc3Nlc0F1dG9tYXRpY2Fs
bHksIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2so
Q3VzdG9tTWVudUFjdGlvbkNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkluc3RhbGxDdXN0b21NZW51QWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJuYW1lIikpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lVmFsdWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aEpTU3RyaW5nKG5hbWUpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5
LmdldCgpLCBuYW1lS2V5LmdldCgpLCBuYW1lVmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJkaXNtaXNzZXNBdXRvbWF0aWNhbGx5IikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZGlzbWlzc2VzQXV0b21hdGljYWxseVZhbHVlID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZGlzbWlzc2VzQXV0b21hdGljYWxseSkpOwotICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIGRpc21pc3Nlc0F1dG9tYXRpY2Fs
bHlLZXkuZ2V0KCksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHlWYWx1ZS5nZXQoKSk7Ci0KLSAgICBX
S0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJJbnN0YWxsQ3VzdG9tTWVudUFjdGlvbiIsIGNyZWF0ZVdLRGljdGlvbmFy
eSh7CisgICAgICAgIHsgIm5hbWUiLCB0b1dLKG5hbWUpIH0sCisgICAgICAgIHsgImRpc21pc3Nl
c0F1dG9tYXRpY2FsbHkiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkaXNtaXNzZXNBdXRvbWF0
aWNhbGx5KSkuZ2V0KCkgfSwKKyAgICB9KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFs
bERpZEJlZ2luU3dpcGVDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQpAQCAtMTQ0OSw1OCAr
MTI1NSwzMCBAQCB2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2Fs
bGJhY2soKQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4o
SlNTdHJpbmdSZWYgZG9tYWluKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyU3Rh
dGlzdGljc0RhdGFGb3JEb21haW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhkb21haW4pKTsK
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyU3RhdGlzdGljc0RhdGFG
b3JEb21haW4iLCB0b1dLKGRvbWFpbikpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmRvZXNTdGF0
aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UodW5zaWduZWQgZG9tYWluSUQpCiB7Ci0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRG9tYWluSUQiKSkpOwotICAgIHZhbHVlcy5hcHBl
bmQoYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkb21haW5JRCkpKTsKLQotICAgIFZlY3RvcjxXS1N0
cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3
VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAg
ICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiRG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tl
eXMuc2l6ZSgpKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdL
QnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRh
dGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFs
dWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7
CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigi
RG9lc1N0YXRpc3RpY3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSIsIGNyZWF0ZVdLRGljdGlvbmFy
eSh7CisgICAgICAgIHsgIkRvbWFpbklEIiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkb21haW5J
RCkpIH0KKyAgICB9KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0VuYWJs
ZWQoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNz
RW5hYmxlZCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NFbmFibGVkIiwgdmFsdWUpOwogfQogCiBib29sIFRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc0VwaGVtZXJhbCgpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc0Vw
aGVtZXJhbCIpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwg
JnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0so
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVy
biBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGlj
c0VwaGVtZXJhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NEZWJ1Z01v
ZGUoYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNo
ZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzRGVidWdNb2RlQ2FsbGJhY2tJRCwgY29t
cGxldGlvbkhhbmRsZXIpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGlj
c0RlYnVnTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0Rl
YnVnTW9kZSIsIHZhbHVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERp
ZFNldERlYnVnTW9kZUNhbGxiYWNrKCkKQEAgLTE1MTEsMTAgKzEyODksNyBAQCB2b2lkIFRlc3RS
dW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0RGVidWdNb2RlQ2FsbGJhY2soKQogdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoSlNTdHJp
bmdSZWYgaG9zdE5hbWUsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2Fj
aGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlRm9yRGVi
dWdNb2RlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIAotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSIsIGhvc3ROYW1lKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2Rl
Q2FsbGJhY2soKQpAQCAtMTUyNiwyNyArMTMwMSwxMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NMYXN0U2VlbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMsIEpT
VgogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldFN0YXRpc3RpY3NMYXN0U2VlbkNh
bGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZh
bHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpKTsKLSAgICAKLSAg
ICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxX
S1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtl
eXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAg
ICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0xhc3RTZWVu
IikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwg
cmF3S2V5cy5zaXplKCkpKTsKLSAgICAKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0xhc3RTZWVuIiwgY3Jl
YXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9
LAorICAgICAgICB7ICJWYWx1ZSIsIHRvV0soc2Vjb25kcykgfSwKKyAgICB9KSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRMYXN0U2VlbkNhbGxiYWNrKCkKQEAg
LTE1NTgsNDkgKzEzMTYsMTggQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTWVyZ2VT
dGF0aXN0aWMoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIHQKIHsKICAgICBjYWNo
ZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWNDYWxsYmFja0lE
LCBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0K
LSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
b3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lRG9tYWluMSIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHRvcEZyYW1lRG9t
YWluMSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJUb3BGcmFtZURvbWFpbjIiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZURvbWFpbjIpKSk7Ci0KLSAg
ICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMYXN0
U2VlbiIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKGxhc3RT
ZWVuKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSGFkVXNlckludGVyYWN0aW9uIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGhhZFVzZXJJbnRlcmFjdGlvbikpKTsKLQotICAgIGtleXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb24iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0
ZShtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNHcmFuZGZhdGhlcmVkIikpKTsKLSAg
ICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkp
KTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIklzUHJldmFsZW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKGlzUHJldmFsZW50KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNWZXJ5UHJldmFsZW50IikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzVmVyeVByZXZhbGVudCkpKTsKLQotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRhdGFS
ZWNvcmRzUmVtb3ZlZCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3Jl
YXRlKGRhdGFSZWNvcmRzUmVtb3ZlZCkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3
S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVl
cy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1
ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rp
b25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5
cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5k
bGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0
YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsg
Ikhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVEb21haW4x
IiwgdG9XSyh0b3BGcmFtZURvbWFpbjEpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lRG9tYWluMiIs
IHRvV0sodG9wRnJhbWVEb21haW4yKSB9LAorICAgICAgICB7ICJMYXN0U2VlbiIsIGFkb3B0V0so
V0tEb3VibGVDcmVhdGUobGFzdFNlZW4pKSB9LAorICAgICAgICB7ICJIYWRVc2VySW50ZXJhY3Rp
b24iLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYWRVc2VySW50ZXJhY3Rpb24pKSB9LAorICAg
ICAgICB7ICJNb3N0UmVjZW50VXNlckludGVyYWN0aW9uIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0
ZShtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSkgfSwKKyAgICAgICAgeyAiSXNHcmFuZGZhdGhl
cmVkIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNHcmFuZGZhdGhlcmVkKSkgfSwKKyAgICAg
ICAgeyAiSXNQcmV2YWxlbnQiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkp
IH0sCisgICAgICAgIHsgIklzVmVyeVByZXZhbGVudCIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KGlzVmVyeVByZXZhbGVudCkpIH0sCisgICAgICAgIHsgIkRhdGFSZWNvcmRzUmVtb3ZlZCIsIGFk
b3B0V0soV0tVSW50NjRDcmVhdGUoZGF0YVJlY29yZHNSZW1vdmVkKSkgfSwKKyAgICB9KSk7CiB9
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRNZXJnZVN0YXRpc3RpY0Nh
bGxiYWNrKCkKQEAgLTE2MTIsMzEgKzEzMzksMTIgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyhKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCBoYWRVc2UK
IHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRp
c3RpY0NhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIYWRVc2VySW50ZXJhY3Rpb24i
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaGFkVXNlcklu
dGVyYWN0aW9uKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1NjaGVkdWxlZEZv
ckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNQcmV2YWxlbnQiKSkpOwotICAgIHZhbHVl
cy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKSk7Ci0gICAgCi0g
ICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8
V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNb
aV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCBy
YXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIHBvc3RNZXNzYWdlKCJTZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkg
fSwKKyAgICAgICAgeyAiSGFkVXNlckludGVyYWN0aW9uIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoaGFkVXNlckludGVyYWN0aW9uKSkgfSwKKyAgICAgICAgeyAiSXNTY2hlZHVsZWRGb3JBbGxC
dXRDb29raWVEYXRhUmVtb3ZhbCIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpKSB9LAorICAgICAgICB7ICJJc1ByZXZhbGVudCIs
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSkgfQorICAgIH0pKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEV4cGlyZWRTdGF0aXN0aWNDYWxs
YmFjaygpCkBAIC0xNjQ4LDI5ICsxMzU2LDEwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlCiB7
CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVm
Pj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVu
ZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpKTsKLSAgICAKLSAg
ICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3
VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMu
cmVzaXplKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
a2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsK
LSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSk7
Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0so
V0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdL
ZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIsIGNy
ZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkg
fSwKKyAgICAgICAgeyAiVmFsdWUiLCBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpIH0s
CisgICAgfSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0UHJl
dmFsZW50UmVzb3VyY2VDYWxsYmFjaygpCkBAIC0xNjgyLDI5ICsxMzcxLDEwIEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBo
b3N0TmFtZSwgYm9vbCB2CiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU2V0U3RhdGlz
dGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZUNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsK
IAotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAg
dmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1l
KSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlZhbHVlIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHZhbHVlKSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsK
LSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5
cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJh
d0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNb
aV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRp
c3RpY3NWZXJ5UHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9u
YXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMu
ZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdL
QnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJT
ZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsK
KyAgICAgICAgeyAiSG9zdE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJWYWx1
ZSIsIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9KSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRWZXJ5UHJldmFsZW50UmVzb3VyY2VD
YWxsYmFjaygpCkBAIC0xNzE0LDEzOCArMTM4NCw1MSBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRp
c3RpY3NDYWxsRGlkU2V0VmVyeVByZXZhbGVudFJlc291cmNlQ2FsbGJhY2soKQogICAgIAogdm9p
ZCBUZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiKSk7Ci0gICAgV0tCdW5k
bGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoImR1bXBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIik7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
Zyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5E
YXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZh
bHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkp
OworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4o
IklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIiwgaG9zdE5hbWUpOwogfQogCiBib29sIFRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBo
b3N0TmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NWZXJ5UHJl
dmFsZW50UmVzb3VyY2UiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VC
b2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwotICAg
IFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVy
bkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0
U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSIsIGhvc3ROYW1lKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0
YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKEpTU3RyaW5nUmVmIHN1YnJlc291
cmNlSG9zdCwgSlNTdHJpbmdSZWYgdG9wRnJhbWVIb3N0KQogewotICAgIFZlY3RvcjxXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJTdWJyZXNvdXJjZUhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJyZXNvdXJjZUhvc3QpKSk7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVG9wRnJhbWVIb3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0
cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3
VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
a2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsK
LSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRh
dGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxw
dHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBl
SUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jv
b2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0
YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5p
bmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyIiwgY3Jl
YXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU3VicmVzb3VyY2VIb3N0IiwgdG9XSyhzdWJy
ZXNvdXJjZUhvc3QpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lSG9zdCIsIHRvV0sodG9wRnJhbWVI
b3N0KSB9LAorICAgIH0pKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NSZWdp
c3RlcmVkQXNTdWJGcmFtZVVuZGVyKEpTU3RyaW5nUmVmIHN1YkZyYW1lSG9zdCwgSlNTdHJpbmdS
ZWYgdG9wRnJhbWVIb3N0KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+
IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1YkZy
YW1lSG9zdCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKHN1YkZyYW1lSG9zdCkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3QiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh0b3BGcmFtZUhv
c3QpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgp
KTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3
S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tp
XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NS
ZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFy
eVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRh
dGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS1R5cGVSZWYg
cmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3Vz
UGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJG
cmFtZVVuZGVyIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU3ViRnJhbWVIb3N0
IiwgdG9XSyhzdWJGcmFtZUhvc3QpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lSG9zdCIsIHRvV0so
dG9wRnJhbWVIb3N0KSB9LAorICAgIH0pKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRp
c3RpY3NSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKEpTU3RyaW5nUmVmIGhvc3RSZWRpcmVjdGVk
RnJvbSwgSlNTdHJpbmdSZWYgaG9zdFJlZGlyZWN0ZWRUbykKIHsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVS
ZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiSG9zdFJlZGlyZWN0ZWRGcm9tIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdFJlZGlyZWN0ZWRGcm9t
KSkpOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3RSZWRpcmVjdGVkVG8iKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0UmVkaXJlY3RlZFRvKSkpOwotICAgIAot
ICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9y
PFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlz
W2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAg
fQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdW
YWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRh
ID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVz
dGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChX
S0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0
dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihy
ZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4oIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8i
LCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0UmVkaXJlY3RlZEZyb20iLCB0
b1dLKGhvc3RSZWRpcmVjdGVkRnJvbSkgfSwKKyAgICAgICAgeyAiSG9zdFJlZGlyZWN0ZWRUbyIs
IHRvV0soaG9zdFJlZGlyZWN0ZWRUbykgfSwKKyAgICB9KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFt
ZSwgYm9vbCB2YWx1ZSwgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjYWNo
ZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uQ2Fs
bGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFs
dWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSkpOwotICAgIHZh
bHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1Zh
bHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJl
c2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJh
d0tleXMuc2l6ZSgpKSk7Ci0gICAgCi0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJh
Y3Rpb24iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0so
aG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZhbHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
dmFsdWUpKSB9LAorICAgIH0pKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2Fs
bERpZFNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbkNhbGxiYWNrKCkKQEAgLTE4NTUsMjYxICsxNDM4
LDk1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRIYXNIYWRVc2VySW50
ZXJhY3Rpb25DYWxsYmFjaygpCiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFk
VXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxs
cHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKHJldHVybkRhdGEpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tC
b29sZWFuR2V0VmFsdWUoYWRvcHRXSyhzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRh
dGEpKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJu
aW5nQm9vbGVhbigiSXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIiwgaG9zdE5hbWUp
OwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc09ubHlJbkRhdGFiYXNlT25jZShK
U1N0cmluZ1JlZiBzdWJIb3N0LCBKU1N0cmluZ1JlZiB0b3BIb3N0KQogewotICAgIAotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Ykhvc3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzdWJIb3N0KSkpOwotICAgIAotICAg
IGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEhv
c3QiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyh0b3BIb3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhr
ZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXpl
KCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0g
PSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc09ubHlJbkRhdGFi
YXNlT25jZSIpKTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlD
cmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7
Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAm
cmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJu
IHBvc3RTeW5jaHJvbm91c1BhZ2VNZXNzYWdlUmV0dXJuaW5nQm9vbGVhbigiSXNTdGF0aXN0aWNz
T25seUluRGF0YWJhc2VPbmNlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiU3Vi
SG9zdCIsIHRvV0soc3ViSG9zdCkgfSwKKyAgICAgICAgeyAiVG9wSG9zdCIsIHRvV0sodG9wSG9z
dCkgfSwKKyAgICB9KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5k
ZmF0aGVyZWQoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCiB7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFs
dWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUp
KSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxX
S1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0g
ICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtl
eXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAg
ICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0dyYW5kZmF0
aGVyZWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0
YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3Vz
TWVzc2FnZSgiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQiLCBjcmVhdGVXS0RpY3Rpb25hcnko
eworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIlZh
bHVlIiwgYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKSB9LAorICAgIH0pKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFVzZUlUUERhdGFiYXNlIikpOwotICAgIFdLUmV0YWluUHRy
PFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0VXNlSVRQ
RGF0YWJhc2UiLCB2YWx1ZSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzR3Jh
bmRmYXRoZXJlZChKU1N0cmluZ1JlZiBob3N0TmFtZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJJc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIikpOwotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmco
aG9zdE5hbWUpKTsKLSAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0
YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1
ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsK
KyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJ
c1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkIiwgaG9zdE5hbWUpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oSlNTdHJpbmdSZWYg
aG9zdE5hbWUsIEpTU3RyaW5nUmVmIHRvcEZyYW1lSG9zdE5hbWUpCiB7Ci0gICAgVmVjdG9yPFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tU
eXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJh
bWVIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aEpTU3RyaW5nKHRvcEZyYW1lSG9zdE5hbWUpKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3Ry
aW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdW
YWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwot
ICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0
YSgpLCByYXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZSgiU2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbiIsIGNyZWF0ZVdLRGlj
dGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAg
ICAgeyAiVG9wRnJhbWVIb3N0TmFtZSIsIHRvV0sodG9wRnJhbWVIb3N0TmFtZSkgfSwKKyAgICB9
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgSlNTdHJpbmdSZWYgdG9wRnJhbWVI
b3N0TmFtZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwot
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5
cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
Zyhob3N0TmFtZSkpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodG9wRnJhbWVIb3N0TmFtZSkp
KTsKLSAgICAKLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOwot
ICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3
S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tp
XS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlz
dGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbiIpKTsKLSAgICBXS1JldGFpblB0cjxX
S0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUo
cmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2luIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiSG9z
dE5hbWUiLCB0b1dLKGhvc3ROYW1lKSB9LAorICAgICAgICB7ICJUb3BGcmFtZUhvc3ROYW1lIiwg
dG9XSyh0b3BGcmFtZUhvc3ROYW1lKSB9LAorICAgIH0pKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKEpTU3RyaW5nUmVmIGhv
c3ROYW1lLCBKU1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRUbykKIHsKLSAgICBWZWN0b3I8
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1R5cGVSZWY+PiB2YWx1ZXM7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQo
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpKTsKLSAgICAKLSAg
ICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0
TmFtZVJlZGlyZWN0ZWRUbyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSkpOwotICAgIAotICAgIFZl
Y3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlw
ZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tp
XS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0K
LSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdFRvIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3
VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8iLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUp
IH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJlY3RlZFRvIiwgdG9XSyhob3N0TmFtZVJlZGly
ZWN0ZWRUbykgfSwKKyAgICB9KSk7CiB9CiAKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpT
U3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVm
Pj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5h
cHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRp
cmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pKSk7Ci0gICAgCi0gICAgVmVjdG9y
PFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVm
PiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdl
dCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAg
IAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0RnJvbSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1Zh
bHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20iLCBj
cmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUp
IH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJlY3RlZEZyb20iLCB0b1dLKGhvc3ROYW1lUmVk
aXJlY3RlZEZyb20pIH0sCisgICAgfSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3Ry
aW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZh
bHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIb3N0TmFtZSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSkpOwotICAgIAotICAgIGtleXMuYXBwZW5k
KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lUmVkaXJlY3Rl
ZFRvIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoaG9zdE5hbWVSZWRpcmVjdGVkVG8pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5n
UmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1
ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAg
ICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8i
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCBy
YXdLZXlzLnNpemUoKSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0
U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7
CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9XSyhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSG9z
dE5hbWVSZWRpcmVjdGVkVG8iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZFRvKSB9LAorICAgIH0p
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdEZyb20oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20pCiB7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsK
LSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtl
eXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1l
IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJp
bmcoaG9zdE5hbWUpKSk7Ci0gICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lUmVk
aXJlY3RlZEZyb20pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtl
eXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUo
KSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNb
aV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldFN0YXRpc3RpY3NUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25h
cnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgp
KSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRTdGF0aXN0aWNzVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdEZyb20iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7
ICJIb3N0TmFtZSIsIHRvV0soaG9zdE5hbWUpIH0sCisgICAgICAgIHsgIkhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20iLCB0b1dLKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pIH0sCisgICAgfSkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNv
cmF0aW9uKEpTU3RyaW5nUmVmIGZyb21Ib3N0LCBKU1N0cmluZ1JlZiB0b0hvc3QpCiB7Ci0gICAg
VmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOwotICAgIAotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkZyb21Ib3N0IikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoZnJvbUhvc3QpKSk7Ci0g
ICAgCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVG9Ib3N0IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoSlNTdHJpbmcodG9Ib3N0KSkpOwotICAgIAotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3
S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVl
cy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7
ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3
VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIp
KTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJh
d0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRT
dGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIsIGNyZWF0ZVdLRGljdGlv
bmFyeSh7CisgICAgICAgIHsgIkZyb21Ib3N0IiwgdG9XSyhmcm9tSG9zdCkgfSwKKyAgICAgICAg
eyAiVG9Ib3N0IiwgdG9XSyh0b0hvc3QpIH0sCisgICAgfSkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRz
KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9k
eSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24i
LCBzZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbnN0YWxsU3RhdGlzdGljc0RpZE1v
ZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKQEAgLTIxNDcsMTIg
KzE1NjQsOSBAQCB2b2lkIFRlc3RSdW5uZXI6Omluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1l
dHJ5Q2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKICAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6
c3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKHVuc2lnbmVkIG51bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2Vy
SW50ZXJhY3Rpb24sIHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVy
YWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCBtZWRpYW5EYXlzU2luY2VV
c2VySW50ZXJhY3Rpb25QcmV2YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2ln
bmVkIHRvcDNOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVSSwgdW5zaWduZWQgdG9wM01l
ZGlhblN1YkZyYW1lV2l0aG91dFVJLCB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRo
b3V0VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUksIHVuc2ln
bmVkIHRvcDNNZWRpYW5EYXRhUmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkpCiB7Ci0gICAgV0tCdW5k
bGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29u
dGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotICAg
IAogICAgIFN0cmluZyBzdHJpbmcgPSBtYWtlU3RyaW5nKCJ7IFwibnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNcIiA6ICIsIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCAiLCBcIm51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbnVtYmVyT2ZQcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCAiLCBcIm51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbnVtYmVyT2ZQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAiLCBcInRvcFByZXZhbGVudFJlc291cmNl
V2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblwiIDogIiwgdG9wUHJl
dmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9u
LCAiLCBcIm1lZGlhbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvblByZXZhbGVudFJlc291cmNlV2l0
aFVzZXJJbnRlcmFjdGlvblwiIDogIiwgbWVkaWFuRGF5c1NpbmNlVXNlckludGVyYWN0aW9uUHJl
dmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uLCAiLCBcInRvcDNOdW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVSVwiIDogIiwgdG9wM051bWJlck9mUHJldmFsZW50UmVzb3VyY2Vz
V2l0aFVJLCAiLCBcInRvcDNNZWRpYW5TdWJGcmFtZVdpdGhvdXRVSVwiIDogIiwgdG9wM01lZGlh
blN1YkZyYW1lV2l0aG91dFVJLCAiLCBcInRvcDNNZWRpYW5TdWJSZXNvdXJjZVdpdGhvdXRVSVwi
IDogIiwgdG9wM01lZGlhblN1YlJlc291cmNlV2l0aG91dFVJLCAiLCBcInRvcDNNZWRpYW5Vbmlx
dWVSZWRpcmVjdHNXaXRob3V0VUlcIiA6ICIsIHRvcDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRo
b3V0VUksICIsIFwidG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSVwiIDogIiwg
dG9wM01lZGlhbkRhdGFSZWNvcmRzUmVtb3ZlZFdpdGhvdXRVSSwgIiB9Iik7CiAgICAgCi0gICAg
SlNWYWx1ZVJlZiByZXN1bHQgPSBKU1ZhbHVlTWFrZUZyb21KU09OU3RyaW5nKGNvbnRleHQsIGFk
b3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZy51dGY4KCkuZGF0YSgpKSku
Z2V0KCkpOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmlu
ZyhtYWluSlNDb250ZXh0KCksIGNyZWF0ZUpTU3RyaW5nKHN0cmluZy51dGY4KCkuZGF0YSgpKS5n
ZXQoKSk7CiAKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRSdW5UZWxl
bWV0cnlDYWxsYmFja0lELCAxLCAmcmVzdWx0KTsKIH0KQEAgLTIxNjQsMTYgKzE1NzgsMTQgQEAg
Ym9vbCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzTm90aWZ5T2JzZXJ2ZXIoKQogCiB2b2lkIFRlc3RS
dW5uZXI6OnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCkKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRh
UmVjb3JkcyIpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwg
bnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiU3RhdGlzdGljc1Byb2Nlc3NT
dGF0aXN0aWNzQW5kRGF0YVJlY29yZHMiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0
aWNzVXBkYXRlQ29va2llQmxvY2tpbmcoSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0QmxvY2tDb29raWVz
Rm9ySG9zdENhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlN0YXRpc3RpY3NVcGRhdGVDb29raWVCbG9ja2luZyIpKTsKLSAgICBXS0J1bmRs
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzVXBkYXRl
Q29va2llQmxvY2tpbmciKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERp
ZFNldEJsb2NrQ29va2llc0Zvckhvc3RDYWxsYmFjaygpCkBAIC0yMTgzLDEzNSArMTU5NSw4MyBA
QCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsRGlkU2V0QmxvY2tDb29raWVzRm9ySG9z
dENhbGxiYWNrKCkKIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5
IikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5
Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKTsK
LSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
IlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIiwgdmFsdWUp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NJc1J1bm5pbmdUZXN0KGJvb2wg
dmFsdWUpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1NldElzUnVubmlu
Z1Rlc3QiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25v
dXNNZXNzYWdlKCJTdGF0aXN0aWNzU2V0SXNSdW5uaW5nVGVzdCIsIHZhbHVlKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNN
ZXNzYWdlKCJTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwiLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKIHsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0
YVJlY29yZHNSZW1vdmFsIikpOwotICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZSgiU2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCIsIHNlY29uZHMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRl
KHNlY29uZHMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFN0YXRp
c3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiLCBzZWNvbmRzKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQgZW50cmllcykKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNYXhTdGF0aXN0aWNzRW50cmllcyIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VJbnQ2NENy
ZWF0ZShlbnRyaWVzKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRN
YXhTdGF0aXN0aWNzRW50cmllcyIsIGVudHJpZXMpOwogfQogICAgIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkIGVudHJpZXMpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0UHJ1bmVFbnRyaWVzRG93blRvIikpOwotICAgIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KGVudHJpZXMpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFBydW5l
RW50cmllc0Rvd25UbyIsIGVudHJpZXMpOwogfQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0
aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZShKU1ZhbHVlUmVmIGNhbGxiYWNr
KQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudFN0b3JlQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotCi0gICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUi
KSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0TWVzc2FnZSgi
U3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlm
aWVkU2luY2VIb3Vycyh1bnNpZ25lZCBob3VycywgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAg
ICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZUNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRT
aW5jZUhvdXJzIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLVUludDY0Q3JlYXRlKGhvdXJzKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzIiwgaG91cnMpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwo
SlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0
aXN0aWNzRGlkQ2xlYXJUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsQ2FsbGJhY2tJRCwgY2FsbGJh
Y2spOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NDbGVhclRocm91
Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRy
KTsKKyAgICBwb3N0TWVzc2FnZSgiU3RhdGlzdGljc0NsZWFyVGhyb3VnaFdlYnNpdGVEYXRhUmVt
b3ZhbCIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9y
SG9zdChKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCBpbmNsdWRlSHR0cE9ubHlDb29raWVzKQog
ewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKSk7
Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJJbmNsdWRlSHR0cE9ubHlDb29raWVzIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKGluY2x1ZGVIdHRwT25seUNvb2tpZXMpKSk7Ci0KLSAgICBWZWN0b3I8
V0tTdHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwot
ICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZh
bHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdW
YWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3RhdGlzdGljc0RlbGV0ZUNvb2tpZXNGb3JIb3N0IikpOwotICAgIFdLUmV0YWluUHRy
PFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0
ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlN0YXRpc3RpY3NEZWxldGVDb29raWVz
Rm9ySG9zdCIsIGNyZWF0ZVdLRGljdGlvbmFyeSh7CisgICAgICAgIHsgIkhvc3ROYW1lIiwgdG9X
Syhob3N0TmFtZSkgfSwKKyAgICAgICAgeyAiSW5jbHVkZUh0dHBPbmx5Q29va2llcyIsIGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGluY2x1ZGVIdHRwT25seUNvb2tpZXMpKSB9LAorICAgIH0pKTsK
IH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UoSlNTdHJp
bmdSZWYgaG9zdE5hbWUpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSIpKTsK
LSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmlu
Zyhob3N0TmFtZSkpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBX
S0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5E
YXRhKSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZh
bHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkp
OworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4o
IklzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZSIsIGhvc3ROYW1lKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAoZG91YmxlIHNlY29uZHMpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEb3Vi
bGVDcmVhdGUoc2Vjb25kcykpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
U2V0U3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwIiwgc2Vjb25kcyk7CiB9CiAKIGJvb2wgVGVzdFJ1
bm5lcjo6aGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vzc2lvbihKU1N0cmluZ1JlZiBob3N0TmFtZSkK
IHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vzc2lvbiIpKTsKLSAgICBhdXRvIG1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOwot
ICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJl
dHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRhKSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBw
b3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkhhc1N0YXRpc3RpY3NJ
c29sYXRlZFNlc3Npb24iLCBob3N0TmFtZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKGJvb2wgdmFsdWUsIEpTVmFsdWVSZWYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0yMzIwLDkgKzE2ODAsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNl
dFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlcihib29sIHZhbHVlLCBKU1ZhbHVlUmVm
IGNvbQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2so
U3RhdGlzdGljc0RpZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyQ2FsbGJhY2tJRCwgY29tcGxl
dGlvbkhhbmRsZXIpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NTaG91
bGREb3duZ3JhZGVSZWZlcnJlciIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRs
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3Rh
dGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyIiwgdmFsdWUpOwogICAgIG1faGFzU2V0RG93
bmdyYWRlUmVmZXJyZXJDYWxsYmFjayA9IHRydWU7CiB9CiAKQEAgLTIzMzgsMTEgKzE2OTYsMTAg
QEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29v
a2llcyhib29sIHZhbHVlLCBKU1ZhbHVlUmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FjaGVU
ZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNv
b2tpZXNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiKSk7CisgICAg
YXV0byBtZXNzYWdlTmFtZSA9ICJTZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29v
a2llcyI7CiAgICAgaWYgKG9ubHlPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbikKLSAgICAg
ICAgbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc09uU2l0ZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJv
ZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgICAgICBtZXNzYWdlTmFtZSA9ICJTZXRTdGF0
aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc09uU2l0ZXNXaXRob3V0VXNlckludGVy
YWN0aW9uIjsKKyAgICBwb3N0TWVzc2FnZShtZXNzYWdlTmFtZSwgdmFsdWUpOwogICAgIG1faGFz
U2V0QmxvY2tUaGlyZFBhcnR5Q29va2llc0NhbGxiYWNrID0gdHJ1ZTsKIH0KIApAQCAtMjM1OCw5
ICsxNzE1LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGUoYm9vbCB2YWx1ZSwgSlNWYWwKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNldEZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBwb3N0TWVzc2FnZSgiU2V0U3RhdGlzdGljc0ZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIiwgdmFsdWUpOwogICAgIG1faGFzU2V0Rmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVDYWxsYmFjayA9IHRydWU7CiB9CiAKQEAgLTIzODMs
MTAgKzE3MzgsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDYWxsQ2xlYXJUaHJvdWdo
V2Vic2l0ZURhdGFSZW1vdmFsQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNz
U2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIEpTVmFsdWVS
ZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3Rh
dGlzdGljc0RpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzQ2FsbGJhY2tJRCwgY29tcGxldGlv
bkhhbmRsZXIpOwotCi0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llcyIp
KTsKLSAgICBhdXRvIG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhob3N0TmFtZSkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIHBvc3RNZXNzYWdlKCJTdGF0aXN0aWNzU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tp
ZXMiLCBob3N0TmFtZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRT
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0NhbGxiYWNrKCkKQEAgLTIzOTgsMjcgKzE3NTAsMTAg
QEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldFRvU2FtZVNpdGVTdHJpY3RD
b29raWVzQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0
eUhvc3RDTkFNRURvbWFpbihKU1N0cmluZ1JlZiBmaXJzdFBhcnR5VVJMU3RyaW5nLCBKU1N0cmlu
Z1JlZiBjbmFtZVVSTFN0cmluZywgSlNWYWx1ZVJlZiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkU2V0Rmlyc3RQYXJ0eUhvc3RD
TkFNRURvbWFpbkNhbGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4+IHZhbHVlczsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJGaXJzdFBhcnR5VVJMIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoZmlyc3RQYXJ0eVVSTFN0cmlu
ZykpKTsKLSAgICAKLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDTkFNRSIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aEpTU3RyaW5nKGNuYW1lVVJMU3RyaW5nKSkpOwotICAgIAotICAgIFZlY3RvcjxX
S1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4g
cmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwga2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQo
KTsKLSAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAg
IGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTdGF0aXN0aWNzU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbiIpKTsKLSAgICBhdXRvIG1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJh
d1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NTZXRGaXJz
dFBhcnR5SG9zdENOQU1FRG9tYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAi
Rmlyc3RQYXJ0eVVSTCIsIHRvV0soZmlyc3RQYXJ0eVVSTFN0cmluZykgfSwKKyAgICAgICAgeyAi
Q05BTUUiLCB0b1dLKGNuYW1lVVJMU3RyaW5nKSB9LAorICAgIH0pKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxs
YmFjaygpCkBAIC0yNDI5LDEwICsxNzY0LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNz
Q2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5DYWxsYmFjaygpCiB2b2lkIFRlc3RS
dW5uZXI6OnN0YXRpc3RpY3NTZXRUaGlyZFBhcnR5Q05BTUVEb21haW4oSlNTdHJpbmdSZWYgY25h
bWVVUkxTdHJpbmcsIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVU
ZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNldFRoaXJkUGFydHlDTkFNRURvbWFpbkNh
bGxiYWNrSUQsIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzU2V0VGhpcmRQ
YXJ0eUNOQU1FRG9tYWluIikpOwotICAgIGF1dG8gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGNuYW1lVVJMU3RyaW5nKSk7Ci0gICAgV0tCdW5kbGVQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgcG9zdE1lc3NhZ2UoIlN0YXRpc3RpY3NT
ZXRUaGlyZFBhcnR5Q05BTUVEb21haW4iLCB0b1dLKGNuYW1lVVJMU3RyaW5nKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRUaGlyZFBhcnR5Q05BTUVEb21haW5D
YWxsYmFjaygpCkBAIC0yNDQzLDkgKzE3NzUsOCBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3Rp
Y3NDYWxsRGlkU2V0VGhpcmRQYXJ0eUNOQU1FRG9tYWluQ2FsbGJhY2soKQogdm9pZCBUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShKU1ZhbHVlUmVmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRS
ZXNldFRvQ29uc2lzdGVudFN0YXRlQ2FsbGJhY2tJRCwgY29tcGxldGlvbkhhbmRsZXIpOwotICAg
IAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0
YXRlIikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBwb3N0TWVz
c2FnZSgiU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUiKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpzdGF0aXN0aWNzQ2FsbERpZFJlc2V0VG9Db25zaXN0ZW50U3RhdGVDYWxsYmFjaygp
CkBAIC0yNDg2LDk1ICsxODE3LDQ2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6dGV4dEZpZWxkRGlkRW5k
RWRpdGluZ0NhbGxiYWNrKCkKIHZvaWQgVGVzdFJ1bm5lcjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0Vu
dHJpZXMoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFj
ayhBbGxTdG9yYWdlQWNjZXNzRW50cmllc0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyIpKTsKLSAg
ICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RNZXNzYWdlKCJHZXRBbGxT
dG9yYWdlQWNjZXNzRW50cmllcyIpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZWNl
aXZlQWxsU3RvcmFnZUFjY2Vzc0VudHJpZXNDYWxsYmFjayhWZWN0b3I8U3RyaW5nPiYgZG9tYWlu
cykKK3N0YXRpYyBKU1ZhbHVlUmVmIG1ha2VEb21haW5zVmFsdWUoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGRvbWFpbnMpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpKTsKLSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChtYWluRnJhbWUpOwotICAgIAotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlsiKTsKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQoJ1snKTsKICAgICBib29sIGZpcnN0
RG9tYWluID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAg
ICAgaWYgKGZpcnN0RG9tYWluKQotICAgICAgICAgICAgZmlyc3REb21haW4gPSBmYWxzZTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiIik7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGRvbWFpbik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiXCIiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZmlyc3REb21haW4gPyAiXCIi
IDogIiwgXCIiLCBkb21haW4sICciJyk7CisgICAgICAgIGZpcnN0RG9tYWluID0gZmFsc2U7CiAg
ICAgfQotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXSIpOwotICAgIAotICAgIEpT
VmFsdWVSZWYgcmVzdWx0ID0gSlNWYWx1ZU1ha2VGcm9tSlNPTlN0cmluZyhjb250ZXh0LCBhZG9w
dChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKLQorICAgIGJ1aWxkZXIuYXBwZW5kKCddJyk7CisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmcobWFpbkpTQ29udGV4dCgpLCBjcmVhdGVK
U1N0cmluZyhidWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSkuZ2V0KCkpOworfQordm9p
ZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzQ2FsbGJh
Y2soVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCit7CisgICAgYXV0byByZXN1bHQgPSBtYWtlRG9t
YWluc1ZhbHVlKGRvbWFpbnMpOwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soQWxsU3RvcmFn
ZUFjY2Vzc0VudHJpZXNDYWxsYmFja0lELCAxLCAmcmVzdWx0KTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpsb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAg
ICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnNDYWxsYmFj
a0lELCBjYWxsYmFjayk7Ci0gICAgCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTG9hZGVkU3Vi
cmVzb3VyY2VEb21haW5zIikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcG9zdE1lc3NhZ2UoIkxvYWRlZFN1YnJlc291cmNlRG9tYWlucyIpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OmNhbGxEaWRSZWNlaXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zQ2FsbGJhY2so
VmVjdG9yPFN0cmluZz4mJiBkb21haW5zKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICAKLSAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1snKTsKLSAgICBi
b29sIGlzRmlyc3REb21haW4gPSB0cnVlOwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlu
cykgewotICAgICAgICBpZiAoaXNGaXJzdERvbWFpbikKLSAgICAgICAgICAgIGlzRmlyc3REb21h
aW4gPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIsICIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwi
Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGRvbWFpbik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKLSAgICB9Ci0gICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJ10nKTsKLSAgICAKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTVmFsdWVNYWtlRnJv
bUpTT05TdHJpbmcoY29udGV4dCwgYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
c3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0KKyAgICBh
dXRvIHJlc3VsdCA9IG1ha2VEb21haW5zVmFsdWUoZG9tYWlucyk7CiAgICAgY2FsbFRlc3RSdW5u
ZXJDYWxsYmFjayhMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnNDYWxsYmFja0lELCAxLCAmcmVzdWx0
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrTWVkaWFEZXZpY2UoSlNTdHJpbmdSZWYg
cGVyc2lzdGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbCwgY29uc3QgY2hhciogdHlwZSkKIHsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQZXJzaXN0ZW50SUQiKSkpOwotICAgIHZhbHVl
cy5hcHBlbmQodG9XSyhwZXJzaXN0ZW50SWQpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkxhYmVsIikpKTsKLSAgICB2YWx1ZXMuYXBw
ZW5kKHRvV0sobGFiZWwpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlR5cGUiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh0eXBlKSkpOwotCi0gICAgVmVjdG9yPFdLU3Ry
aW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKLSAgICBy
YXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMu
c2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkg
ewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAgICAgICAgcmF3VmFsdWVz
W2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkFkZE1vY2tNZWRpYURldmljZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+
IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCks
IHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoIkFkZE1vY2tNZWRpYURldmljZSIsIGNyZWF0ZVdLRGljdGlvbmFy
eSh7CisgICAgICAgIHsgIlBlcnNpc3RlbnRJRCIsIHRvV0socGVyc2lzdGVudElkKSB9LAorICAg
ICAgICB7ICJMYWJlbCIsIHRvV0sobGFiZWwpIH0sCisgICAgICAgIHsgIlR5cGUiLCB0b1dLKHR5
cGUpIH0sCisgICAgfSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tDYW1lcmFEZXZp
Y2UoSlNTdHJpbmdSZWYgcGVyc2lzdGVudElkLCBKU1N0cmluZ1JlZiBsYWJlbCkKQEAgLTI1OTQs
MTUzICsxODc2LDcyIEBAIHZvaWQgVGVzdFJ1bm5lcjo6YWRkTW9ja1NjcmVlbkRldmljZShKU1N0
cmluZ1JlZiBwZXJzaXN0ZW50SWQsIEpTU3RyaW5nUmVmIGxhYmVsCiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2xlYXJNb2NrTWVkaWFEZXZpY2VzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
bGVhck1vY2tNZWRpYURldmljZXMiKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFy
TW9ja01lZGlhRGV2aWNlcyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU1vY2tNZWRp
YURldmljZShKU1N0cmluZ1JlZiBwZXJzaXN0ZW50SWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUmVtb3ZlTW9ja01lZGlhRGV2aWNlIikpOwotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gbWVzc2FnZUJvZHkodG9XSyhwZXJzaXN0ZW50SWQpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiUmVtb3ZlTW9ja01lZGlhRGV2aWNlIiwgdG9XSyhwZXJzaXN0ZW50
SWQpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZXNldE1vY2tNZWRpYURldmljZXMoKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc2V0TW9ja01lZGlhRGV2aWNlcyIpKTsKLSAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcG9z
dFN5bmNocm9ub3VzTWVzc2FnZSgiUmVzZXRNb2NrTWVkaWFEZXZpY2VzIik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uKHVuc2lnbmVkIG9yaWVudGF0aW9u
KQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24iKSk7Ci0gICAgYXV0byBtZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUob3JpZW50YXRpb24pKTsKLSAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldE1vY2tDYW1lcmFPcmllbnRhdGlvbiIsIG9yaWVu
dGF0aW9uKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc01vY2tSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyRW5hYmxlZCgpCiB7Ci0gICAgYXV0byBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJF
bmFibGVkIikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCAm
cmV0dXJuRGF0YSk7Ci0gICAgQVNTRVJUKFdLR2V0VHlwZUlEKHJldHVybkRhdGEpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoYWRvcHRXSyhz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKS5nZXQoKSk7CisgICAgcmV0dXJu
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2VSZXR1cm5pbmdCb29sZWFuKCJJc01vY2tSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyRW5hYmxlZCIpOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQorCiB2b2lk
IFRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDb25uZWN0TW9ja0dhbWVwYWQiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgp
KTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiQ29ubmVjdE1vY2tHYW1l
cGFkIiwgaW5kZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc2Nvbm5lY3RNb2NrR2FtZXBh
ZCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEaXNjb25uZWN0
TW9ja0dhbWVwYWQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keSA9
IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNo
cm9ub3VzTWVzc2FnZSgiRGlzY29ubmVjdE1vY2tHYW1lcGFkIiwgaW5kZXgpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNldE1vY2tHYW1lcGFkRGV0YWlscyh1bnNpZ25lZCBpbmRleCwgSlNTdHJp
bmdSZWYgZ2FtZXBhZElELCBKU1N0cmluZ1JlZiBtYXBwaW5nLCB1bnNpZ25lZCBheGlzQ291bnQs
IHVuc2lnbmVkIGJ1dHRvbkNvdW50KQogewotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsK
LQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkdhbWVwYWRJRCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKGdhbWVwYWRJRCkpOwotCi0g
ICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTWFw
cGluZyIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZCh0b1dLKG1hcHBpbmcpKTsKLQotICAgIGtleXMu
YXBwZW5kKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRl
eCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSkp
OwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQXhpc0NvdW50IikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoYXhpc0NvdW50KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uQ291bnQiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRv
cHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25Db3VudCkpKTsKLQotICAgIFZlY3RvcjxXS1N0cmlu
Z1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3
S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNp
emUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tp
XSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRNb2NrR2FtZXBhZERldGFpbHMiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVm
PiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgp
LCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0
U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZERldGFpbHMiLCBjcmVhdGVXS0RpY3Rp
b25hcnkoeworICAgICAgICB7ICJHYW1lcGFkSUQiLCB0b1dLKGdhbWVwYWRJRCkgfSwKKyAgICAg
ICAgeyAiTWFwcGluZyIsIHRvV0sobWFwcGluZykgfSwKKyAgICAgICAgeyAiR2FtZXBhZEluZGV4
IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpIH0sCisgICAgICAgIHsgIkF4aXNDb3Vu
dCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhpc0NvdW50KSkgfSwKKyAgICAgICAgeyAiQnV0
dG9uQ291bnQiLCBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGJ1dHRvbkNvdW50KSkgfSwKKyAgICB9
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIHVuc2lnbmVkIGF4aXNJbmRleCwgZG91YmxlIHZhbHVlKQogewotICAgIFZlY3Rv
cjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZChhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGluZGV4KSkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXhpc0luZGV4IikpKTsKLSAgICB2
YWx1ZXMuYXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhpc0luZGV4KSkpOwotCi0gICAg
a2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUi
KSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpKTsK
LQotICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVm
PiByYXdWYWx1ZXM7Ci0gICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1Zh
bHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7
Ci0gICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSIpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS0RpY3Rpb25h
cnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgp
KSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldE1vY2tHYW1lcGFk
QXhpc1ZhbHVlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiR2FtZXBhZEluZGV4
IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpIH0sCisgICAgICAgIHsgIkF4aXNJbmRl
eCIsIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYXhpc0luZGV4KSkgfSwKKyAgICAgICAgeyAiVmFs
dWUiLCBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSkgfSwKKyAgICB9KSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZSh1bnNpZ25lZCBpbmRleCwg
dW5zaWduZWQgYnV0dG9uSW5kZXgsIGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVS
ZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSkpOwotICAgIHZhbHVlcy5hcHBlbmQoYWRvcHRX
SyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpKTsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbkluZGV4IikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKGFkb3B0V0soV0tVSW50NjRDcmVhdGUoYnV0dG9uSW5kZXgpKSk7Ci0KLSAgICBrZXlz
LmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKSk7
Ci0gICAgdmFsdWVzLmFwcGVuZChhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHZhbHVlKSkpOwotCi0g
ICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOwotICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJh
d1ZhbHVlczsKLSAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7Ci0gICAgcmF3VmFsdWVz
LnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkgewotICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKLSAg
ICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOwotICAgIH0KLQotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUiKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5
Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkp
OwotCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJTZXRNb2NrR2FtZXBhZEJ1
dHRvblZhbHVlIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsKKyAgICAgICAgeyAiR2FtZXBhZEluZGV4
IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpbmRleCkpIH0sCisgICAgICAgIHsgIkJ1dHRvbklu
ZGV4IiwgYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShidXR0b25JbmRleCkpIH0sCisgICAgICAgIHsg
IlZhbHVlIiwgYWRvcHRXSyhXS0RvdWJsZUNyZWF0ZSh2YWx1ZSkpIH0sCisgICAgfSkpOwogfQor
CiAjZWxzZQorCiB2b2lkIFRlc3RSdW5uZXI6OmNvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCkK
IHsKIH0KQEAgLTI3NjAsMzAgKzE5NjEsMjUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2Ft
ZXBhZEF4aXNWYWx1ZSh1bnNpZ25lZCwgdW5zaWduZWQsIGRvdWJsZSkKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZSh1bnNpZ25lZCwgdW5zaWduZWQsIGRvdWJsZSkK
IHsKIH0KKwogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRP
cGVuUGFuZWxGaWxlcyhKU1ZhbHVlUmVmIGZpbGVzVmFsdWUpCiB7Ci0gICAgV0tCdW5kbGVQYWdl
UmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0g
ICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRl
eHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpKTsKKyAgICBKU0NvbnRleHRSZWYgY29u
dGV4dCA9IG1haW5KU0NvbnRleHQoKTsKIAogICAgIGlmICghSlNWYWx1ZUlzQXJyYXkoY29udGV4
dCwgZmlsZXNWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0UmVmIGZpbGVz
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGZpbGVzVmFsdWUsIG51bGxwdHIpOwotICAgIHN0
YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIGZpbGVzTGVuZ3RoVmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIGZpbGVzLCBsZW5ndGhQcm9wZXJ0eS5nZXQoKSwgbnVs
bHB0cik7Ci0gICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgZmlsZXNMZW5ndGhWYWx1
ZSkpCi0gICAgICAgIHJldHVybjsKLQorICAgIGF1dG8gZmlsZXMgPSAoSlNPYmplY3RSZWYpZmls
ZXNWYWx1ZTsKICAgICBhdXRvIGZpbGVVUkxzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0
ZSgpKTsKLSAgICBhdXRvIGZpbGVzTGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgZmlsZXNMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOworICAgIGF1dG8g
ZmlsZXNMZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBmaWxlcyk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWVSZWYgZmls
ZVZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgZmlsZXMsIGksIG51
bGxwdHIpOwogICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBmaWxlVmFsdWUp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBmaWxlID0gYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBmaWxlVmFsdWUsIG51bGxwdHIpKTsKKyAgICAgICAg
YXV0byBmaWxlID0gY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgZmlsZVZhbHVlKTsKICAgICAgICAg
c2l6ZV90IGZpbGVCdWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXpl
KGZpbGUuZ2V0KCkpICsgMTsKICAgICAgICAgYXV0byBmaWxlQnVmZmVyID0gbWFrZVVuaXF1ZUFy
cmF5PGNoYXI+KGZpbGVCdWZmZXJTaXplKTsKICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmlu
ZyhmaWxlLmdldCgpLCBmaWxlQnVmZmVyLmdldCgpLCBmaWxlQnVmZmVyU2l6ZSk7CkBAIC0yNzk3
LDIyICsxOTkzLDE1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVsRmlsZXMoSlNWYWx1
ZVJlZiBmaWxlc1ZhbHVlKQogCiAgICAgfQogCi0gICAgc3RhdGljIGF1dG8gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRPcGVuUGFuZWxGaWxl
VVJMcyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgZmlsZVVSTHMuZ2V0KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiU2V0T3BlblBhbmVs
RmlsZVVSTHMiLCBmaWxlVVJMcyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T3BlblBhbmVs
RmlsZXNNZWRpYUljb24oSlNWYWx1ZVJlZiBkYXRhKQogewogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpKTsK
LQotICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
OwogICAgIC8vIEZJWE1FICgxMjMwNTgpOiBVc2UgYSBKU0MgQVBJIHRvIGdldCBidWZmZXIgY29u
dGVudHMgb25jZSBzdWNoIGlzIGV4cG9zZWQuCi0gICAgV0tSZXRhaW5QdHI8V0tEYXRhUmVmPiBp
Y29uRGF0YSA9IGFkb3B0V0soV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhBcnJheShpbmpl
Y3RlZEJ1bmRsZS5idW5kbGUoKSwgY29udGV4dCwgZGF0YSkpOwotCi0gICAgc3RhdGljIGF1dG8g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRP
cGVuUGFuZWxGaWxlVVJMc01lZGlhSWNvbiIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2Fn
ZShwYWdlLCBtZXNzYWdlTmFtZS5nZXQoKSwgaWNvbkRhdGEuZ2V0KCkpOworICAgIGF1dG8gaWNv
bkRhdGEgPSBhZG9wdFdLKFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtYWluSlNDb250ZXh0KCksIGRhdGEpKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIlNldE9wZW5QYW5lbEZpbGVVUkxzTWVkaWFJY29uIiwgaWNv
bkRhdGEpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGF0YSk7CiAjZW5kaWYKQEAgLTI4MjEs
MTEgKzIwMTAsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE9wZW5QYW5lbEZpbGVzTWVkaWFJY29u
KEpTVmFsdWVSZWYgZGF0YSkKIHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZWRl
bnRpYWxzKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJh
Y2soRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwot
ICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlbW92ZUFsbFNlc3Npb25DcmVkZW50aWFs
cyIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUodHJ1ZSkpOwotICAgIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIHBvc3RNZXNzYWdlKCJSZW1vdmVBbGxTZXNzaW9uQ3Jl
ZGVudGlhbHMiLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlQWxs
U2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2soKQpAQCAtMjgzNSw0OSArMjAyMCwzMyBAQCB2b2lk
IFRlc3RSdW5uZXI6OmNhbGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFjaygp
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJET01DYWNoZShKU1N0cmluZ1JlZiBvcmlnaW4pCiB7
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJET01DYWNoZSIpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKG9yaWdpbikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgi
Q2xlYXJET01DYWNoZSIsIHRvV0sob3JpZ2luKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xl
YXJET01DYWNoZXMoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyRE9NQ2FjaGVz
IikpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRy
KTsKKyAgICBwb3N0U3luY2hyb25vdXNNZXNzYWdlKCJDbGVhckRPTUNhY2hlcyIpOwogfQogCiBi
b29sIFRlc3RSdW5uZXI6Omhhc0RPTUNhY2hlKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJIYXNET01DYWNoZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KG9yaWdpbikpOwotICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgJnJldHVybkRhdGEpOwotICAgIEFTU0VSVChXS0dldFR5cGVJRChyZXR1cm5EYXRh
KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVl
KGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSkuZ2V0KCkpOwor
ICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4oIkhh
c0RPTUNhY2hlIiwgb3JpZ2luKTsKIH0KIAogdWludDY0X3QgVGVzdFJ1bm5lcjo6ZG9tQ2FjaGVT
aXplKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJET01D
YWNoZVNpemUiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKLSAgICBXS1R5cGVS
ZWYgcmV0dXJuRGF0YSA9IG51bGxwdHI7Ci0gICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsK
LSAgICByZXR1cm4gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4ocmV0
dXJuRGF0YSkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZVJldHVybmlu
Z1VJbnQ2NCgiRE9NQ2FjaGVTaXplIiwgb3JpZ2luKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGJvb2wgd2lsbEluY3JlYXNlKQogewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UiKSk7Ci0gICAg
V0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFu
Q3JlYXRlKHdpbGxJbmNyZWFzZSkpOwotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1l
c3NhZ2UoIlNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UiLCB3aWxsSW5jcmVhc2UpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OmdldEFwcGxpY2F0aW9uTWFuaWZlc3RUaGVuKEpTVmFsdWVSZWYg
Y2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soR2V0QXBwbGljYXRpb25N
YW5pZmVzdENhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJHZXRBcHBsaWNhdGlvbk1hbmlmZXN0IikpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bnVsbHB0cik7CisgICAgcG9zdE1lc3NhZ2UoIkdldEFwcGxpY2F0aW9uTWFuaWZlc3QiKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpkaWRHZXRBcHBsaWNhdGlvbk1hbmlmZXN0KCkKQEAgLTI4OTcs
MjIxICsyMDY2LDEzMCBAQCBzaXplX3QgVGVzdFJ1bm5lcjo6dXNlclNjcmlwdEluamVjdGVkQ291
bnQoKSBjb25zdAogCiB2b2lkIFRlc3RSdW5uZXI6OmluamVjdFVzZXJTY3JpcHQoSlNTdHJpbmdS
ZWYgc2NyaXB0KQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkluamVjdFVzZXJTY3JpcHQi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhzY3JpcHQpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0
U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzTWVzc2FnZSgiSW5qZWN0VXNlclNjcmlwdCIsIHRv
V0soc2NyaXB0KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2VuZERpc3BsYXlDb25maWd1cmF0
aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZW5kRGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkTWVzc2FnZUZvclRlc3RpbmciKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAg
IHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNlbmREaXNwbGF5Q29uZmlndXJhdGlvbkNoYW5nZWRN
ZXNzYWdlRm9yVGVzdGluZyIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXQoZG91YmxlIHNlY29uZHMpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dCIpKTsKLSAgICBXS1JldGFpblB0cjxXS0Rv
dWJsZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpKTsK
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51
bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIlNldFNlcnZpY2VXb3JrZXJGZXRj
aFRpbWVvdXQiLCBzZWNvbmRzKTsKIH0KIAogLy8gV2ViQXV0aG4KIHZvaWQgVGVzdFJ1bm5lcjo6
YWRkVGVzdEtleVRvS2V5Y2hhaW4oSlNTdHJpbmdSZWYgcHJpdmF0ZUtleUJhc2U2NCwgSlNTdHJp
bmdSZWYgYXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlvblRhZ0Jhc2U2NCkKIHsKLSAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwotICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQcml2YXRlS2V5IikpKTsKLSAgICB2YWx1ZXMu
YXBwZW5kKHRvV0socHJpdmF0ZUtleUJhc2U2NCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAgICB2YWx1
ZXMuYXBwZW5kKHRvV0soYXR0ckxhYmVsKSk7Ci0KLSAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsaWNhdGlvblRhZyIpKSk7Ci0gICAgdmFs
dWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0aW9uVGFnQmFzZTY0KSk7Ci0KLSAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IHJhd0tleXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAg
IHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVl
cy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1
ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7Ci0gICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQWRkVGVzdEtleVRvS2V5Y2hhaW4iKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0
YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOwotCi0gICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBw
b3N0U3luY2hyb25vdXNNZXNzYWdlKCJBZGRUZXN0S2V5VG9LZXljaGFpbiIsIGNyZWF0ZVdLRGlj
dGlvbmFyeSh7CisgICAgICAgIHsgIlByaXZhdGVLZXkiLCB0b1dLKHByaXZhdGVLZXlCYXNlNjQp
IH0sCisgICAgICAgIHsgIkF0dHJMYWJlbCIsIHRvV0soYXR0ckxhYmVsKSB9LAorICAgICAgICB7
ICJBcHBsaWNhdGlvblRhZyIsIHRvV0soYXBwbGljYXRpb25UYWdCYXNlNjQpIH0sCisgICAgfSkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFuVXBLZXljaGFpbihKU1N0cmluZ1JlZiBhdHRy
TGFiZWwsIEpTU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpCiB7Ci0gICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKLSAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tUeXBlUmVmPj4gdmFsdWVzOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpKTsKLSAgICB2YWx1ZXMuYXBwZW5kKHRv
V0soYXR0ckxhYmVsKSk7Ci0KLSAgICBpZiAoYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgewotICAg
ICAgICBrZXlzLmFwcGVuZChhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJB
cHBsaWNhdGlvbkxhYmVsIikpKTsKLSAgICAgICAgdmFsdWVzLmFwcGVuZCh0b1dLKGFwcGxpY2F0
aW9uTGFiZWxCYXNlNjQpKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tl
eXM7Ci0gICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOwotICAgIHJhd0tleXMucmVzaXpl
KGtleXMuc2l6ZSgpKTsKLSAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJh
d0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOwotICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNb
aV0uZ2V0KCk7CisgICAgaWYgKCFhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KSB7CisgICAgICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFuVXBLZXljaGFpbiIsIGNyZWF0ZVdLRGljdGlvbmFy
eSh7CisgICAgICAgICAgICB7ICJBdHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAg
ICAgfSkpOworICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2xlYW5VcEtleWNoYWluIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwg
cmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFN5
bmNocm9ub3VzTWVzc2FnZSgiQ2xlYW5VcEtleWNoYWluIiwgY3JlYXRlV0tEaWN0aW9uYXJ5KHsK
KyAgICAgICAgeyAiQXR0ckxhYmVsIiwgdG9XSyhhdHRyTGFiZWwpIH0sCisgICAgICAgIHsgIkFw
cGxpY2F0aW9uTGFiZWwiLCB0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpIH0sCisgICAgfSkp
OwogfQogCiBib29sIFRlc3RSdW5uZXI6OmtleUV4aXN0c0luS2V5Y2hhaW4oSlNTdHJpbmdSZWYg
YXR0ckxhYmVsLCBKU1N0cmluZ1JlZiBhcHBsaWNhdGlvbkxhYmVsQmFzZTY0KQogewotICAgIFZl
Y3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7Ci0gICAgVmVjdG9yPFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKLQotICAgIGtleXMuYXBwZW5kKGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkF0dHJMYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFwcGVu
ZCh0b1dLKGF0dHJMYWJlbCkpOwotCi0gICAga2V5cy5hcHBlbmQoYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGljYXRpb25MYWJlbCIpKSk7Ci0gICAgdmFsdWVzLmFw
cGVuZCh0b1dLKGFwcGxpY2F0aW9uTGFiZWxCYXNlNjQpKTsKLQotICAgIFZlY3RvcjxXS1N0cmlu
Z1JlZj4gcmF3S2V5czsKLSAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7Ci0gICAgcmF3
S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOwotICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNp
emUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7Ci0gICAgICAgIHJhd1ZhbHVlc1tp
XSA9IHZhbHVlc1tpXS5nZXQoKTsKLSAgICB9Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJL
ZXlFeGlzdHNJbktleWNoYWluIikpOwotICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwg
cmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKLQotICAgIFdLVHlwZVJlZiByZXR1
cm5EYXRhID0gbnVsbHB0cjsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0
dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiBXS0Jvb2xlYW5H
ZXRWYWx1ZShhZG9wdFdLKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpLmdl
dCgpKTsKKyAgICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ0Jvb2xlYW4o
IktleUV4aXN0c0luS2V5Y2hhaW4iLCBjcmVhdGVXS0RpY3Rpb25hcnkoeworICAgICAgICB7ICJB
dHRyTGFiZWwiLCB0b1dLKGF0dHJMYWJlbCkgfSwKKyAgICAgICAgeyAiQXBwbGljYXRpb25MYWJl
bCIsIHRvV0soYXBwbGljYXRpb25MYWJlbEJhc2U2NCkgfSwKKyAgICB9KSk7CiB9CiAKIHVuc2ln
bmVkIGxvbmcgVGVzdFJ1bm5lcjo6c2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0Nv
dW50KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25D
YWxsYmFja0NhbGxzQ291bnQiKSk7Ci0gICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSBudWxscHRy
OwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tHZXRUeXBlSUQocmV0dXJuRGF0
YSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIFdLVUludDY0R2V0VmFsdWUo
YWRvcHRXSyhzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4ocmV0dXJuRGF0YSkpLmdldCgpKTsKKyAg
ICByZXR1cm4gcG9zdFN5bmNocm9ub3VzTWVzc2FnZVJldHVybmluZ1VJbnQ2NCgiU2VydmVyVHJ1
c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50Iik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0U2hvdWxkRGlzbWlzc0phdmFTY3JpcHRBbGVydHNBc3luY2hyb25vdXNseShib29sIHNob3Vs
ZERpc21pc3NBc3luY2hyb25vdXNseSkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTaG91
bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5IikpOwotICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShz
aG91bGREaXNtaXNzQXN5bmNocm9ub3VzbHkpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoIlNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHkiLCBz
aG91bGREaXNtaXNzQXN5bmNocm9ub3VzbHkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFib3J0
TW9kYWwoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFib3J0TW9kYWwiKSk7Ci0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoIkFib3J0TW9kYWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRHVtcEFkQ2xpY2tBdHRyaWJ1dGlv
biIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgi
RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbiIpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWRD
bGlja0F0dHJpYnV0aW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJBZENsaWNrQXR0cmlidXRpb24iKSk7Ci0g
ICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVs
bHB0ciwgbnVsbHB0cik7CisgICAgcG9zdFN5bmNocm9ub3VzUGFnZU1lc3NhZ2UoIkNsZWFyQWRD
bGlja0F0dHJpYnV0aW9uIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBZENsaWNrQXR0
cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCgpCiB7Ci0gICAgYXV0byBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyQWRDbGlj
a0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwiKSk7Ci0gICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIHBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoIkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJl
bW92YWwiKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVy
cmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlKQogewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nIikpOwotICAg
IFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZSh2YWx1ZSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VG
b3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0U3lu
Y2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZv
clRlc3RpbmciLCB2YWx1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWRDbGlja0F0dHJp
YnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoSlNTdHJpbmdSZWYgdXJsU3RyaW5nKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25V
UkxGb3JUZXN0aW5nIikpOwotICAgIGF1dG8gd3RmVVJMU3RyaW5nID0gdG9XVEZTdHJpbmcoV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tV
UkxSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh3
dGZVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSkpOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
KyAgICBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2FnZSgiU2V0QWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvblVSTEZvclRlc3RpbmciLAorICAgICAgICBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKHRvV1RGU3RyaW5nKHVybFN0cmluZykudXRmOCgpLmRhdGEoKSkpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3Rp
bmcoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1hcmtBZENsaWNrQXR0cmlidXRpb25z
QXNFeHBpcmVkRm9yVGVzdGluZyIpKTsKLSAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBwb3N0U3luY2hy
b25vdXNQYWdlTWVzc2FnZSgiTWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0
aW5nIik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0T2Zmc2NyZWVuQ2FudmFzRW5hYmxlZChi
b29sIGVuYWJsZWQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk9mZnNjcmVlbkNhbnZhc0VuYWJsZWQi
KSk7Ci0gICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmpl
Y3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGtleS5nZXQo
KSwgZW5hYmxlZCk7CisgICAgV1RSOjpvdmVycmlkZVByZWZlcmVuY2UoIk9mZnNjcmVlbkNhbnZh
c0VuYWJsZWQiLCBlbmFibGVkKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpoYXNBcHBCb3VuZFNl
c3Npb24oKQogewotICAgIGF1dG8gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIYXNBcHBCb3VuZFNlc3Npb24iKSk7Ci0gICAgV0tUeXBlUmVmIHJl
dHVybkRhdGEgPSBudWxscHRyOwotICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsICZyZXR1cm5EYXRhKTsKLSAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQocmV0dXJuRGF0YSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotCi0gICAgcmV0
dXJuIFdLQm9vbGVhbkdldFZhbHVlKGFkb3B0V0soc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihy
ZXR1cm5EYXRhKSkuZ2V0KCkpOworICAgIHJldHVybiBwb3N0U3luY2hyb25vdXNQYWdlTWVzc2Fn
ZVJldHVybmluZ0Jvb2xlYW4oIkhhc0FwcEJvdW5kU2Vzc2lvbiIpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OmNsZWFyQXBwQm91bmRTZXNzaW9uKCkKIHsKLSAgICBhdXRvIG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2xlYXJBcHBCb3VuZFNlc3Np
b24iKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpOworICAgIHBvc3RTeW5jaHJvbm91c01lc3NhZ2UoIkNsZWFyQXBwQm91bmRTZXNzaW9uIik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQm91bmREb21haW5zKEpTVmFsdWVSZWYgb3Jp
Z2luQXJyYXksIEpTVmFsdWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgY2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2soRGlkU2V0QXBwQm91bmREb21haW5zQ2FsbGJhY2tJRCwgY29tcGxldGlv
bkhhbmRsZXIpOwogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0
SmF2YVNjcmlwdENvbnRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpOworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gbWFpbkpTQ29udGV4dCgpOwogCiAgICAgaWYgKCFKU1ZhbHVlSXNBcnJheShjb250ZXh0LCBv
cmlnaW5BcnJheSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0UmVmIG9yaWdpbnMg
PSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgb3JpZ2luQXJyYXksIG51bGxwdHIpOwotICAgIHN0
YXRpYyBhdXRvIGxlbmd0aFByb3BlcnR5ID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKLSAgICBKU1ZhbHVlUmVmIG9yaWdpbnNMZW5ndGhWYWx1ZSA9IEpT
T2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3JpZ2lucywgbGVuZ3RoUHJvcGVydHkuZ2V0KCks
IG51bGxwdHIpOwotICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIG9yaWdpbnNMZW5n
dGhWYWx1ZSkpCi0gICAgICAgIHJldHVybjsKLQorICAgIGF1dG8gb3JpZ2lucyA9IEpTVmFsdWVU
b09iamVjdChjb250ZXh0LCBvcmlnaW5BcnJheSwgbnVsbHB0cik7CiAgICAgYXV0byBvcmlnaW5V
UkxzID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBhdXRvIG9yaWdpbnNM
ZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBvcmln
aW5zTGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9y
aWdpbnNMZW5ndGg7ICsraSkgeworICAgIGF1dG8gb3JpZ2luc0xlbmd0aCA9IGFycmF5TGVuZ3Ro
KGNvbnRleHQsIG9yaWdpbnMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5z
TGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZVJlZiBvcmlnaW5WYWx1ZSA9IEpTT2JqZWN0
R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9yaWdpbnMsIGksIG51bGxwdHIpOwogICAgICAg
ICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBvcmlnaW5WYWx1ZSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIG9yaWdpbiA9IGFkb3B0KEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgb3JpZ2luVmFsdWUsIG51bGxwdHIpKTsKKyAgICAgICAgYXV0byBvcmln
aW4gPSBjcmVhdGVKU1N0cmluZyhjb250ZXh0LCBvcmlnaW5WYWx1ZSk7CiAgICAgICAgIHNpemVf
dCBvcmlnaW5CdWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKG9y
aWdpbi5nZXQoKSkgKyAxOwogICAgICAgICBhdXRvIG9yaWdpbkJ1ZmZlciA9IG1ha2VVbmlxdWVB
cnJheTxjaGFyPihvcmlnaW5CdWZmZXJTaXplKTsKICAgICAgICAgSlNTdHJpbmdHZXRVVEY4Q1N0
cmluZyhvcmlnaW4uZ2V0KCksIG9yaWdpbkJ1ZmZlci5nZXQoKSwgb3JpZ2luQnVmZmVyU2l6ZSk7
CkBAIC0zMTE5LDcgKzIxOTcsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEFwcEJvdW5kRG9tYWlu
cyhKU1ZhbHVlUmVmIG9yaWdpbkFycmF5LCBKU1ZhbHVlUmVmIGNvbXBsZXRpbwogICAgICAgICBX
S0FycmF5QXBwZW5kSXRlbShvcmlnaW5VUkxzLmdldCgpLCBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKG9yaWdpbkJ1ZmZlci5nZXQoKSkpLmdldCgpKTsKICAgICB9CiAKLSAgICBh
dXRvIG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0QXBwQm91bmREb21haW5zIikpOworICAgIGF1dG8gbWVzc2FnZU5hbWUgPSB0b1dLKCJTZXRB
cHBCb3VuZERvbWFpbnMiKTsKICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG9yaWdpblVSTHMuZ2V0
KCkpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5oCmluZGV4IGMwYTE0MDkwNWVkZjNkZGE0YTc2MWFiNjIwN2Q5N2I0MzYyMDg2
YmIuLjJmZmZmMmVmOTVkMDRkOTIwZWE5OTMzMGU4NDc5MGMwNTY1NjYwYTkgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCkBAIC00
Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICAvLyBKU1dyYXBwYWJsZQogICAgIHZpcnR1YWwgSlND
bGFzc1JlZiB3cmFwcGVyQ2xhc3MoKTsKIAotICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KTsKKyAgICB2b2lkIG1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmKTsKIAogICAgIGJvb2wg
aXNJT1NGYW1pbHkoKSBjb25zdAogICAgIHsKQEAgLTI1Myw3ICsyNTMsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbChib29sIGYpIHsgbV93aWxsU2Vu
ZFJlcXVlc3RSZXR1cm5zTnVsbCA9IGY7IH0KICAgICBib29sIHdpbGxTZW5kUmVxdWVzdFJldHVy
bnNOdWxsT25SZWRpcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJu
c051bGxPblJlZGlyZWN0OyB9CiAgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVs
bE9uUmVkaXJlY3QoYm9vbCBmKSB7IG1fd2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGly
ZWN0ID0gZjsgfQotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0QWRkc0hUVFBCb2R5KEpTU3Ry
aW5nUmVmIGJvZHkpIHsgbV93aWxsU2VuZFJlcXVlc3RIVFRQQm9keSA9IHRvV1RGU3RyaW5nKHRv
V0soYm9keSkpOyB9CisgICAgdm9pZCBzZXRXaWxsU2VuZFJlcXVlc3RBZGRzSFRUUEJvZHkoSlNT
dHJpbmdSZWYgYm9keSkgeyBtX3dpbGxTZW5kUmVxdWVzdEhUVFBCb2R5ID0gdG9XVEZTdHJpbmco
Ym9keSk7IH0KICAgICBTdHJpbmcgd2lsbFNlbmRSZXF1ZXN0SFRUUEJvZHkoKSBjb25zdCB7IHJl
dHVybiBtX3dpbGxTZW5kUmVxdWVzdEhUVFBCb2R5OyB9CiAKICAgICB2b2lkIHNldFRleHREaXJl
Y3Rpb24oSlNTdHJpbmdSZWYpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNhbGxGb2N1c1dlYlZpZXdDYWxsYmFjaygpOwogICAgIHZvaWQgY2FsbFNldEJhY2tpbmdTY2Fs
ZUZhY3RvckNhbGxiYWNrKCk7CiAKLSAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmlu
Z1JlZiBwcmVmZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgb3Zl
cnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVmIHZhbHVl
KTsKIAogICAgIC8vIENvb2tpZXMgdGVzdGluZwogICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29v
a2llcyhib29sKTsKQEAgLTMwNCw3ICszMDQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBHZW9sb2Nh
dGlvbi4KICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sKTsKLSAgICB2b2lk
IHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgZG91YmxlIGFjY3VyYWN5LCBKU1ZhbHVlUmVmIGFsdGl0dWRlLCBKU1ZhbHVlUmVmIGFs
dGl0dWRlQWNjdXJhY3ksIEpTVmFsdWVSZWYgaGVhZGluZywgSlNWYWx1ZVJlZiBzcGVlZCwgSlNW
YWx1ZVJlZiBmbG9vckxldmVsKTsKKyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
KGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRp
b25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ks
IE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9u
YWw8ZG91YmxlPiBmbG9vckxldmVsKTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uVW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdlKTsKICAgICBib29sIGlzR2Vv
bG9jYXRpb25Qcm92aWRlckFjdGl2ZSgpOwogCkBAIC0zMzUsOCArMzM1LDggQEAgcHVibGljOgog
ICAgIGJvb2wgc2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCgpIGNvbnN0OwogCiAgICAgSlNWYWx1
ZVJlZiBmYWlsTmV4dE5ld0NvZGVCbG9jaygpOwotICAgIEpTVmFsdWVSZWYgbnVtYmVyT2ZERkdD
b21waWxlcyhKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKTsKLSAgICBKU1ZhbHVlUmVmIG5ldmVySW5s
aW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbik7CisgICAgSlNWYWx1ZVJlZiBudW1i
ZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWVSZWYgZnVuY3Rpb24pOworICAgIEpTVmFsdWVSZWYgbmV2
ZXJJbmxpbmVGdW5jdGlvbihKU1ZhbHVlUmVmIGZ1bmN0aW9uKTsKIAogICAgIGJvb2wgc2hvdWxk
RGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5OyB9CiAgICAgdm9pZCBzZXRTaG91bGRE
ZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheShib29sKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xs
ZXIuY3BwCmluZGV4IDY0YWM4MTk3MTUzYWFlMGEwYWI3MWViYmMyOTQyNDg0YTM1ZTY1YWQuLmM3
NDQxYTljMTYxZTZmNjQxYmJmYmI4MWNiZTZmNmNmNDdlN2NmNzUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250
cm9sbGVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlv
bnMuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVu
ZGxlUGFnZS5oIgogI2luY2x1ZGUgIkpTVGV4dElucHV0Q29udHJvbGxlci5oIgpAQCAtNDAsMzAg
KzQxLDE0IEBAIFJlZjxUZXh0SW5wdXRDb250cm9sbGVyPiBUZXh0SW5wdXRDb250cm9sbGVyOjpj
cmVhdGUoKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHRJbnB1dENvbnRyb2xsZXIpOwog
fQogCi1UZXh0SW5wdXRDb250cm9sbGVyOjpUZXh0SW5wdXRDb250cm9sbGVyKCkKLXsKLX0KLQot
VGV4dElucHV0Q29udHJvbGxlcjo6flRleHRJbnB1dENvbnRyb2xsZXIoKQotewotfQotCiBKU0Ns
YXNzUmVmIFRleHRJbnB1dENvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCiB7CiAgICAgcmV0dXJu
IEpTVGV4dElucHV0Q29udHJvbGxlcjo6dGV4dElucHV0Q29udHJvbGxlckNsYXNzKCk7CiB9CiAK
LXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVm
IGNvbnRleHQpCiB7Ci0gICAgc2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCAidGV4
dElucHV0Q29udHJvbGxlciIsIHRoaXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7Ci19Ci0KLXN0YXRpYyB1
bnNpZ25lZCBhcnJheUxlbmd0aChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgYXJy
YXkpCi17Ci0gICAgYXV0byBsZW5ndGhTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGlmIChhdXRvIGxlbmd0aFZhbHVlID0gSlNPYmpl
Y3RHZXRQcm9wZXJ0eShjb250ZXh0LCBhcnJheSwgbGVuZ3RoU3RyaW5nLmdldCgpLCBudWxscHRy
KSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgbGVuZ3RoVmFsdWUsIG51bGxwdHIpKTsKLSAgICByZXR1cm4gMDsKKyAgICBzZXRH
bG9iYWxPYmplY3RQcm9wZXJ0eShjb250ZXh0LCAidGV4dElucHV0Q29udHJvbGxlciIsIHRoaXMp
OwogfQogCiBzdGF0aWMgV0tBcnJheVJlZiBjcmVhdGVDb21wb3NpdGlvbkhpZ2hsaWdodERhdGEo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYganNIaWdobGlnaHRzVmFsdWUpCkBAIC03
Miw1MCArNTcsMTkgQEAgc3RhdGljIFdLQXJyYXlSZWYgY3JlYXRlQ29tcG9zaXRpb25IaWdobGln
aHREYXRhKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmUKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBhdXRvIHJlc3VsdCA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7Ci0gICAg
YXV0byBqc0hpZ2hsaWdodHNBcnJheSA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGpzSGlnaGxp
Z2h0c1ZhbHVlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBq
c0hpZ2hsaWdodHNBcnJheSk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0KLSAgICBhdXRvIGpzRnJvbUtleSA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJmcm9tIikpOwotICAgIGF1dG8ganNMZW5ndGhLZXkgPSBhZG9wdChKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGF1dG8ganNDb2xvcktleSA9IGFk
b3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJjb2xvciIpKTsKLQotICAgIGF1dG8g
d2tGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZnJvbSIp
KTsKLSAgICBhdXRvIHdrTGVuZ3RoS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGF1dG8gd2tDb2xvcktleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImNvbG9yIikpOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IG51
bGxwdHI7Ci0gICAgICAgIGF1dG8ganNPYmplY3RWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlB
dEluZGV4KGNvbnRleHQsIGpzSGlnaGxpZ2h0c0FycmF5LCBpLCAmZXhjZXB0aW9uKTsKLSAgICAg
ICAgaWYgKGV4Y2VwdGlvbiB8fCAhSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIGpzT2JqZWN0VmFs
dWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBqc09iamVjdCA9IGNv
bnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGpzT2JqZWN0VmFsdWUpOwotICAgICAgICBhdXRvIGpzRnJv
bVZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBqc09iamVjdCwganNGcm9tS2V5
LmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFqc0Zyb21WYWx1ZSB8fCAhSlNWYWx1ZUlz
TnVtYmVyKGNvbnRleHQsIGpzRnJvbVZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGF1dG8ganNMZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwg
anNPYmplY3QsIGpzTGVuZ3RoS2V5LmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKCFqc0xl
bmd0aFZhbHVlIHx8ICFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwganNMZW5ndGhWYWx1ZSkpCisg
ICAgYXV0byBhcnJheSA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGpzSGlnaGxpZ2h0c1ZhbHVl
KTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheUxlbmd0aChjb250ZXh0LCBhcnJheSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8g
dmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgbnVs
bHB0cik7CisgICAgICAgIGlmICghdmFsdWUgfHwgIUpTVmFsdWVJc09iamVjdChjb250ZXh0LCB2
YWx1ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIGpzQ29sb3JWYWx1
ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwganNPYmplY3QsIGpzQ29sb3JLZXkuZ2V0
KCksIG51bGxwdHIpOwotICAgICAgICBpZiAoIWpzQ29sb3JWYWx1ZSB8fCAhSlNWYWx1ZUlzU3Ry
aW5nKGNvbnRleHQsIGpzQ29sb3JWYWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBhdXRvIGNvbG9yID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBqc0Nv
bG9yVmFsdWUsIG51bGxwdHIpKTsKLSAgICAgICAgYXV0byB3a0NvbG9yID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhjb2xvci5nZXQoKSkpOwotICAgICAgICBhdXRvIHdrRnJv
bSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobHJvdW5kKEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBqc0Zyb21WYWx1ZSwgbnVsbHB0cikpKSk7Ci0gICAgICAgIGF1dG8gd2tMZW5ndGggPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKGxyb3VuZChKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNMZW5n
dGhWYWx1ZSwgbnVsbHB0cikpKSk7Ci0KKyAgICAgICAgYXV0byBvYmplY3QgPSBjb25zdF9jYXN0
PEpTT2JqZWN0UmVmPih2YWx1ZSk7CiAgICAgICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0V0so
V0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShkaWN0aW9uYXJ5LmdldCgpLCB3a0Zyb21LZXkuZ2V0KCksIHdrRnJvbS5nZXQoKSk7Ci0gICAg
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oZGljdGlvbmFyeS5nZXQoKSwgd2tMZW5ndGhLZXkuZ2V0
KCksIHdrTGVuZ3RoLmdldCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShkaWN0aW9u
YXJ5LmdldCgpLCB3a0NvbG9yS2V5LmdldCgpLCB3a0NvbG9yLmdldCgpKTsKKyAgICAgICAgc2V0
VmFsdWUoZGljdGlvbmFyeSwgImZyb20iLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obnVtZXJpY1By
b3BlcnR5KGNvbnRleHQsIG9iamVjdCwgImZyb20iKSkpOworICAgICAgICBzZXRWYWx1ZShkaWN0
aW9uYXJ5LCAibGVuZ3RoIiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bWVyaWNQcm9wZXJ0eShj
b250ZXh0LCBvYmplY3QsICJsZW5ndGgiKSkpOworICAgICAgICBzZXRWYWx1ZShkaWN0aW9uYXJ5
LCAiY29sb3IiLCB0b1dLKHN0cmluZ1Byb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgImNvbG9yIikp
KTsKICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0ocmVzdWx0LCBkaWN0aW9uYXJ5LmdldCgpKTsK
ICAgICB9Ci0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuaCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5oCmlu
ZGV4IDU1OGMyZTYxMTQwODE3ODVlM2I3Y2FlMTlmZWZkMzk2YWViMzdhOTQuLmE0NGMyOGU4NDQz
OTE3MjkyYTliMzdiY2I3ZTI1NTJkMTIxNDRjYTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5oCkBA
IC0yOCwxNyArMjgsMTcgQEAKICNpbmNsdWRlICJKU1dyYXBwYWJsZS5oIgogI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KIAordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRl
eHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1N0cmluZyogSlNTdHJpbmdSZWY7Cit0eXBl
ZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVlUmVmOworCiBuYW1lc3BhY2Ug
V1RSIHsKIAotY2xhc3MgVGV4dElucHV0Q29udHJvbGxlciA6IHB1YmxpYyBKU1dyYXBwYWJsZSB7
CitjbGFzcyBUZXh0SW5wdXRDb250cm9sbGVyIGZpbmFsIDogcHVibGljIEpTV3JhcHBhYmxlIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFRleHRJbnB1dENvbnRyb2xsZXI+IGNyZWF0ZSgpOwot
ICAgIHZpcnR1YWwgflRleHRJbnB1dENvbnRyb2xsZXIoKTsKLQotICAgIC8vIEpTV3JhcHBhYmxl
Ci0gICAgdmlydHVhbCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOwogCi0gICAgdm9pZCBtYWtl
V2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pOworICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRS
ZWYpOwogCiAgICAgdm9pZCBzZXRNYXJrZWRUZXh0KEpTU3RyaW5nUmVmIHRleHQsIGludCBmcm9t
LCBpbnQgbGVuZ3RoLCBib29sIHN1cHByZXNzVW5kZXJsaW5lLCBKU1ZhbHVlUmVmIGhpZ2hsaWdo
dHMpOwogICAgIGJvb2wgaGFzTWFya2VkVGV4dCgpOwpAQCAtNDYsNyArNDYsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBpbnNlcnRUZXh0KEpTU3RyaW5nUmVmIHRleHQpOwogCiBwcml2YXRlOgotICAg
IFRleHRJbnB1dENvbnRyb2xsZXIoKTsKKyAgICBUZXh0SW5wdXRDb250cm9sbGVyKCkgPSBkZWZh
dWx0OworCisgICAgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKSBmaW5hbDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0FjdGl2YXRlRm9udHNDb2NvYS5tbQppbmRleCAwMjRm
ZTYwNTczYjhmMmM1OTJlYmZkYjM1ZjNhNDQ0ODVjZGI5NzU2Li41YTViNzdlYzE5NGRhNWZlM2Zm
Zjk5MTM3Y2U5YWNkMjZkZmU0YzFlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2NvY29hL0FjdGl2YXRlRm9udHNDb2NvYS5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0FjdGl2YXRlRm9udHNDb2NvYS5t
bQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgYWN0aXZhdGVGb250cygpCiAKIHZvaWQgaW5zdGFs
bEZha2VIZWx2ZXRpY2EoV0tTdHJpbmdSZWYgY29uZmlndXJhdGlvbikKIHsKLSAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGNvbmZpZ3VyYXRpb25TdHJpbmcgPSBhZG9wdENGKFdLU3RyaW5nQ29w
eUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRpb24pKTsKKyAgICBhdXRv
IGNvbmZpZ3VyYXRpb25TdHJpbmcgPSBhZG9wdENGKFdLU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRpb24pKTsKICAgICBOU1VSTCAqcmVzb3VyY2VVUkwg
PSBbcmVzb3VyY2VzRGlyZWN0b3J5VVJMKCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRmFrZUhlbHZldGljYS0lQC50dGYiLCBjb25maWd1
cmF0aW9uU3RyaW5nLmdldCgpXSBpc0RpcmVjdG9yeTpOT107CiAgICAgQ0ZFcnJvclJlZiBlcnJv
ciA9IG51bGxwdHI7CiAgICAgaWYgKCFDVEZvbnRNYW5hZ2VyUmVnaXN0ZXJGb250c0ZvclVSTCgo
X19icmlkZ2UgQ0ZVUkxSZWYpcmVzb3VyY2VVUkwsIGtDVEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNz
LCAmZXJyb3IpKSB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFnZUNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbQpp
bmRleCA4MTc2MTgyN2E4ODFkMDZkZmU3MGE5YmQzMjI0NzMyYWUxOWJjZjI4Li45MWQyNDljNzI3
ZjY4NzVlZDRhNGNjZjE1OWMwZjc3ZDcyZjg1YmQ1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFnZUNvY29hLm1t
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0
ZWRCdW5kbGVQYWdlQ29jb2EubW0KQEAgLTQ3LDEzICs0NywxMyBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6cGxhdGZvcm1EaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLQnVuZGxl
RnJhbWVSZQogCiBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlOjpwbGF0Zm9ybVJlc3BvbnNlTWlt
ZVR5cGUoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKIHsKLSAgICBSZXRhaW5QdHI8TlNVUkxS
ZXNwb25zZT4gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJl
c3BvbnNlKHJlc3BvbnNlKSk7CisgICAgYXV0byBuc1VSTFJlc3BvbnNlID0gYWRvcHROUyhXS1VS
TFJlc3BvbnNlQ29weU5TVVJMUmVzcG9uc2UocmVzcG9uc2UpKTsKICAgICByZXR1cm4gW25zVVJM
UmVzcG9uc2UuZ2V0KCkgTUlNRVR5cGVdOwogfQogCiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OnJlc3BvbnNlSGVhZGVyQ291bnQoV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSkKIHsKLSAg
ICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gbnNVUkxSZXNwb25zZSA9IGFkb3B0TlMoV0tVUkxS
ZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSk7CisgICAgYXV0byBuc1VSTFJlc3Bv
bnNlID0gYWRvcHROUyhXS1VSTFJlc3BvbnNlQ29weU5TVVJMUmVzcG9uc2UocmVzcG9uc2UpKTsK
ICAgICBpZiAoIVtuc1VSTFJlc3BvbnNlIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNl
IGNsYXNzXV0pCiAgICAgICAgIHJldHVybiB7IH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9T
Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJJT1MubW0KaW5kZXggODdjY2QyMWNhOWE3N2FhMmQwYTIxYTRjYWI1MjFj
YWVlZmE5YzRhMi4uYzQxODIzMGYzYjRmZGU3MTlhYzZjY2M4NGI3NDJkYmVjYTE0ZDI0YSAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KQEAgLTYyLDcgKzYy
LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlz
dGVuZXIoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnBsYXRmb3JtTmFtZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJpb3MiKSk7CisgICAgcmV0dXJuIFdUUjo6Y3JlYXRlSlNTdHJpbmcoImlv
cyIpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZXNldFRvQ29uc2lzdGVu
dFN0YXRlKCkKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIGlkIGZpbmRBY2Nlc3NpYmxlT2JqZWN0
QnlJZChpZCBvYmosIE5TU3RyaW5nICppZEF0dHJpYnV0ZSkKIAogUmVmUHRyPEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5
SWQoSlNTdHJpbmdSZWYgaWRBdHRyaWJ1dGUpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2Ug
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CisgICAgYXV0byBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIGlk
IHJvb3QgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9v
dE9iamVjdChwYWdlKSk7CiAKICAgICBpZCByZXN1bHQgPSBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5
SWQocm9vdCwgW05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjppZEF0dHJpYnV0ZV0pOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5kZXggNTIyMzRhYTRk
NzQ3MmNkZTA3MWQ5ZTg2OTY5MGQ5MzU1MjlhMjBkMi4uYmJjOGJiMTZjODY0YmMyNjEwY2ZhYTY5
YTA2ZmQ4MTNjNzY5NWQwNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
SU9TLm1tCkBAIC0xMzYsMTEgKzEzNiw2IEBAIEBlbmQKIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0
YXRpYyBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gY3JlYXRlRW1wdHlKU1N0cmluZygpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCkp
OwotfQotCiBzdGF0aWMgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNvbmNhdGVuYXRlQXR0cmli
dXRlQW5kVmFsdWUoTlNTdHJpbmcgKmF0dHJpYnV0ZSwgTlNTdHJpbmcgKnZhbHVlKQogewogICAg
IFZlY3RvcjxVbmlDaGFyPiBidWZmZXIoW2F0dHJpYnV0ZSBsZW5ndGhdKTsKQEAgLTMzMCwyNyAr
MzI1LDI3IEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpkaXNjbG9zZWRCeVJvdygpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKCkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmlu
ZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxk
cmVuKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0Rlc2NyaXB0aW9u
T2ZBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0
dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKQEAgLTM4Miw3ICszNzcsNyBAQCBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0
cmlidXRlVmFsdWUoSlNTdHJpbmdSZQogICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKGF0dHJpYnV0ZSwgIkFYVGV4dHVhbENvbnRleHQiKSkKICAgICAgICAgcmV0dXJuIFtbbV9l
bGVtZW50IGFjY2Vzc2liaWxpdHlUZXh0dWFsQ29udGV4dF0gY3JlYXRlSlNTdHJpbmdSZWZdOwog
ICAgIAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0
ZUpTU3RyaW5nKCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1iZXJB
dHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBAIC00NDMsMTcgKzQzOCwxNyBA
QCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKEpTU3Ry
aW5nUmVmIGF0dHJpYnV0ZSkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcygpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUo
KQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0
ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdWJyb2xlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygp
OworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKQEAgLTQ2Mywx
MyArNDU4LDEyIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb2xlRGVzY3JpcHRpb24oKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKCkKIHsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICByZXR1cm4g
Y3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRpdGxlKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmlu
ZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQpAQCAtNDc5LDcg
KzQ3Myw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpkZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SlNTdHJpbmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKQEAg
LTQ4OSw3ICs0ODMsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c3RyaW5nVmFsdWUoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpT
U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCgpIGNvbnN0CkBA
IC01NDksNyArNTQzLDcgQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVl
KCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZh
bHVlRGVzY3JpcHRpb24oKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQpAQCAtNTg0LDcgKzU3OCw2IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC01OTYsMTMgKzU4OSwxMSBAQCBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWQoKSBjb25zdAogCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC02MzgsNyArNjI5LDcgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNHcmFiYmVkKCkgY29uc3QKIAogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZm
ZWN0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogLy8gcGFyYW1ldGVyaXplZCBhdHRyaWJ1dGVz
CkBAIC02NTksNyArNjUwLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJhbmdlRm9yUG9zaXRpb24oaW50IHgsIGludCB5KQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UodW5z
aWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1w
dHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2Uo
dW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKQEAgLTcxMywzMiArNzA0LDMyIEBA
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RU
ZXh0V2l0aENyaXRlcmlhKEpTQ29udGV4CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygp
OwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mUm93SGVhZGVycygpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJp
bmcoKTsKKyAgICByZXR1cm4gY3JlYXRlSlNTdHJpbmcoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpT
U3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0
cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNl
bGxzKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBj
cmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKCkKIHsKLSAgICByZXR1cm4gY3JlYXRl
RW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dHJhaXRzKCkKQEAg
LTkwMywyMyArODk0LDIxIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2Vs
ZWN0aW9uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNy
ZWF0ZUpTU3RyaW5nKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRW1w
dHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVKU1N0cmluZygpOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQog
ewotICAgIHJldHVybiBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpT
U3RyaW5nKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXNzaXN0aXZlVGVj
aG5vbG9neVNpbXVsYXRlZEZvY3VzKCkKQEAgLTEwMTYsMzEgKzEwMDUsMjYgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
VmlzaWJsZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbigpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTA1MiwxMyAr
MTAzNiwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0
CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTaW5nbGVMaW5lKCkgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lKCkgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMDc0LDIyICsxMDU2LDE4
IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpwb3B1
cFZhbHVlKCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMo
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKCkKIHsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3Zl
U2VsZWN0aW9uKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIC8vIFRleHQgbWFy
a2VycwpAQCAtMTEzNiw3ICsxMTE0LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3MKIHsKICAg
ICBpZCB0ZXh0TWFya2VycyA9IG1hcmtlclJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgp
OwogICAgIGlmICghW3RleHRNYXJrZXJzIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SlNTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZUpTU3RyaW5nKCk7CiAgICAgcmV0dXJuIFtbbV9lbGVtZW50IHN0cmluZ0ZvclRleHRNYXJr
ZXJzOnRleHRNYXJrZXJzXSBjcmVhdGVKU1N0cmluZ1JlZl07CiB9CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0V2ZW50U2VuZGVyUHJveHlJ
T1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9FdmVudFNl
bmRlclByb3h5SU9TLm1tCmluZGV4IGNhYjNmMThiMzY1OWY0OTE2YmQ1MDA4NzkyODZkNmEyN2Mw
YzlmOTEuLmIyZTI4ODRhMGIzZTM2YjI0MTIwZjIxZDNlOGJkYzcxYWRkNDcxYjAgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0V2ZW50U2VuZGVy
UHJveHlJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9p
b3MvRXZlbnRTZW5kZXJQcm94eUlPUy5tbQpAQCAtMzYsMjMgKzM2LDEzIEBAIG5hbWVzcGFjZSBX
VFIgewogCiBFdmVudFNlbmRlclByb3h5OjpFdmVudFNlbmRlclByb3h5KFRlc3RDb250cm9sbGVy
KiB0ZXN0Q29udHJvbGxlcikKICAgICA6IG1fdGVzdENvbnRyb2xsZXIodGVzdENvbnRyb2xsZXIp
Ci0gICAgLCBtX3RpbWUoMCkKLSAgICAsIG1fcG9zaXRpb24oKQotICAgICwgbV9sZWZ0TW91c2VC
dXR0b25Eb3duKGZhbHNlKQotICAgICwgbV9jbGlja0NvdW50KDApCi0gICAgLCBtX2NsaWNrVGlt
ZSgwKQotICAgICwgbV9jbGlja1Bvc2l0aW9uKCkKLSAgICAsIG1fY2xpY2tCdXR0b24oa1dLRXZl
bnRNb3VzZUJ1dHRvbk5vQnV0dG9uKQotICAgICwgZXZlbnROdW1iZXIoMCkKIHsKICAgICBVTlVT
RURfUEFSQU0obV90ZXN0Q29udHJvbGxlcik7CiAgICAgVU5VU0VEX1BBUkFNKG1fbGVmdE1vdXNl
QnV0dG9uRG93bik7CiAgICAgVU5VU0VEX1BBUkFNKGV2ZW50TnVtYmVyKTsKIH0KIAotRXZlbnRT
ZW5kZXJQcm94eTo6fkV2ZW50U2VuZGVyUHJveHkoKQotewotfQorRXZlbnRTZW5kZXJQcm94eTo6
fkV2ZW50U2VuZGVyUHJveHkoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQogewpAQCAtNzAsMTcgKzYwLDE0
IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQg
YnV0dG9uKQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRG93bih1bnNpZ25lZCBidXR0
b25OdW1iZXIsIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzKQogewotICAgIC8vIFdyaXRlIG1l
LgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlVXAodW5zaWduZWQgYnV0dG9uTnVt
YmVyLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycykKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0K
IAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkp
CiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZv
cndhcmQoaW50IG1pbGxpc2Vjb25kcykKQEAgLTkwLDc5ICs3Nyw2NiBAQCB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiAKIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZp
ZXJzLCB1bnNpZ25lZCBrZXlMb2NhdGlvbikKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9p
ZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkKIHsKLSAgICAv
LyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5V2l0
aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoaW50IHgsIGludCB5LCBpbnQgcGhhc2UsIGludCBtb21l
bnR1bSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojpj
b250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiB7Ci0gICAg
Ly8gV3JpdGUgbWUuCiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCiB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5KQogewotICAgIC8vIFdyaXRl
IG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGlu
ZGV4LCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcihXS0V2ZW50TW9kaWZpZXJzLCBib29sIGVuYWJs
ZSkKIHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRU
b3VjaFBvaW50UmFkaXVzKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKIHsKLSAgICAvLyBXcml0
ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaFN0YXJ0KCkKIHsKLSAgICAv
LyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaE1vdmUoKQogewot
ICAgIC8vIFdyaXRlIG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoRW5kKCkK
IHsKLSAgICAvLyBXcml0ZSBtZS4KIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaENh
bmNlbCgpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
Y2xlYXJUb3VjaFBvaW50cygpCiB7Ci0gICAgLy8gV3JpdGUgbWUuCiB9CiAKIHZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQoaW50IGluZGV4KQogewotICAgIC8vIFdyaXRl
IG1lLgogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGlu
ZGV4KQogewotICAgIC8vIFdyaXRlIG1lLgogfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2Ug
V1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21h
Yy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbW1vbk1hYy5tbQppbmRleCAyNWUwYzNkMDBl
NDliYjJiNWVkMjAzZTE5MGNmMWVjYzkwZGYzYWY0Li4zNTRhOGY2NTU1YzZjMDAyNjVmNTY4MWE2
YjM3MTUyYTg0YTU2MmMwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb21tb25NYWMubW0K
QEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlDb21tb25NYWMuaCIKIAog
I2ltcG9ydCAiSlNXcmFwcGVyLmgiCisjaW1wb3J0ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPG9iamMvcnVudGlt
ZS5oPgogCkBAIC02MSwyNiArNjIsMjIgQEAgQ2xhc3Mgd2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJDbGFzcygpCiAgICAgcmV0dXJuIGNsczsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgbWFr
ZUFycmF5UmVmRm9yQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIE5TQXJyYXkgKmFycmF5KQor
c3RhdGljIEpTT2JqZWN0UmVmIG1ha2VKU0FycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBOU0Fy
cmF5ICphcnJheSkKIHsKICAgICBOU1VJbnRlZ2VyIGNvdW50ID0gYXJyYXkuY291bnQ7CiAgICAg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbY291bnRdOwotCiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgYXJndW1lbnRzW2ldID0gbWFrZVZhbHVlUmVmRm9y
VmFsdWUoY29udGV4dCwgW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pOwotCiAgICAgcmV0dXJuIEpT
T2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIGNvdW50LCBhcmd1bWVudHMsIG51bGxwdHIpOwogfQog
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBtYWtlT2JqZWN0UmVmRm9yRGljdGlvbmFyeShKU0NvbnRleHRS
ZWYgY29udGV4dCwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQorc3RhdGljIEpTT2JqZWN0UmVm
IG1ha2VKU09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9u
YXJ5KQogewotICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBu
dWxscHRyLCBudWxscHRyKTsKLQorICAgIGF1dG8gb2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRl
eHQsIG51bGxwdHIsIG51bGxwdHIpOwogICAgIFtkaWN0aW9uYXJ5IGVudW1lcmF0ZUtleXNBbmRP
YmplY3RzVXNpbmdCbG9jazpeKE5TU3RyaW5nICprZXksIGlkIG9iaiwgQk9PTCAqKSB7CiAgICAg
ICAgIGlmIChKU1ZhbHVlUmVmIHByb3BlcnR5VmFsdWUgPSBtYWtlVmFsdWVSZWZGb3JWYWx1ZShj
b250ZXh0LCBvYmopKQogICAgICAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBv
YmplY3QsIFtrZXkgY3JlYXRlSlNTdHJpbmdSZWZdLmdldCgpLCBwcm9wZXJ0eVZhbHVlLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIG51bGxwdHIpOwogICAgIH1dOwotCiAgICAgcmV0dXJuIG9i
amVjdDsKIH0KIApAQCAtOTYsOSArOTMsOSBAQCBKU1ZhbHVlUmVmIG1ha2VWYWx1ZVJlZkZvclZh
bHVlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBpZCB2YWx1ZSkKICAgICBpZiAoW3ZhbHVlIGlzS2lu
ZE9mQ2xhc3M6d2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJDbGFzcygpXSkKICAgICAgICAg
cmV0dXJuIHRvSlMoY29udGV4dCwgV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUo
c3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KHZhbHVlKSkucHRyKCkpOwogICAgIGlmIChb
dmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pCi0gICAgICAgIHJldHVy
biBtYWtlT2JqZWN0UmVmRm9yRGljdGlvbmFyeShjb250ZXh0LCB2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBtYWtlSlNPYmplY3QoY29udGV4dCwgdmFsdWUpOwogICAgIGlmIChbdmFsdWUgaXNLaW5k
T2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQotICAgICAgICByZXR1cm4gbWFrZUFycmF5UmVmRm9y
QXJyYXkoY29udGV4dCwgdmFsdWUpOworICAgICAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4
dCwgdmFsdWUpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0xMTUsMjggKzExMiwxNiBA
QCBOU0RpY3Rpb25hcnkgKnNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JT
ZWFyY2hDcml0ZXJpYShKU0NvbnRleHRSZQogCiAgICAgaWYgKHNlYXJjaEtleSkgewogICAgICAg
ICBpZCBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBuaWw7Ci0gICAgICAgIGlmIChKU1ZhbHVlSXNTdHJp
bmcoY29udGV4dCwgc2VhcmNoS2V5KSkgewotICAgICAgICAgICAgYXV0byBzZWFyY2hLZXlTdHJp
bmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaEtleSwgbnVsbHB0
cikpOwotICAgICAgICAgICAgaWYgKHNlYXJjaEtleVN0cmluZykKLSAgICAgICAgICAgICAgICBz
ZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJj
aEtleVN0cmluZy5nZXQoKV07Ci0gICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNv
bnRleHQsIHNlYXJjaEtleSkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0
LCBzZWFyY2hLZXkpKQorICAgICAgICAgICAgc2VhcmNoS2V5UGFyYW1ldGVyID0gdG9XVEZTdHJp
bmcoY29udGV4dCwgc2VhcmNoS2V5KTsKKyAgICAgICAgZWxzZSBpZiAoSlNWYWx1ZUlzT2JqZWN0
KGNvbnRleHQsIHNlYXJjaEtleSkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHNlYXJjaEtl
eUFycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJjaEtleSwgbnVsbHB0cik7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hLZXlBcnJheUxlbmd0aCA9IDA7Ci0KLSAgICAgICAg
ICAgIGF1dG8gbGVuZ3RoUHJvcGVydHlTdHJpbmcgPSBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzZWFyY2hLZXlB
cnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBzZWFyY2hLZXlB
cnJheSwgbGVuZ3RoUHJvcGVydHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAg
aWYgKHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUgJiYgSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQs
IHNlYXJjaEtleUFycmF5TGVuZ3RoVmFsdWUpKQotICAgICAgICAgICAgICAgIHNlYXJjaEtleUFy
cmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBzZWFyY2hLZXlBcnJheUxlbmd0aFZhbHVlLCBudWxscHRyKSk7Ci0KKyAgICAgICAgICAgIHVu
c2lnbmVkIHNlYXJjaEtleUFycmF5TGVuZ3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgc2VhcmNo
S2V5QXJyYXkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlYXJjaEtl
eUFycmF5TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVmIHNlYXJjaEtl
eVZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoS2V5QXJy
YXksIGksIG51bGxwdHIpOwotICAgICAgICAgICAgICAgIEpTU3RyaW5nUmVmIHNlYXJjaEtleVN0
cmluZyA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgc2VhcmNoS2V5VmFsdWUsIG51bGxw
dHIpOwotICAgICAgICAgICAgICAgIGlmIChzZWFyY2hLZXlTdHJpbmcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzZWFyY2hLZXlQYXJhbWV0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICAg
ICAgICAgICAgICBbc2VhcmNoS2V5UGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOnNlYXJjaEtleVN0cmluZ11dOwotICAgICAgICAgICAgICAgICAgICBK
U1N0cmluZ1JlbGVhc2Uoc2VhcmNoS2V5U3RyaW5nKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYXV0byBzZWFyY2hLZXkgPSB0b1dURlN0cmluZyhjb250ZXh0LCBKU09iamVj
dEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hLZXlBcnJheSwgaSwgbnVsbHB0cikp
OworICAgICAgICAgICAgICAgIGlmICghc2VhcmNoS2V5UGFyYW1ldGVyKQorICAgICAgICAgICAg
ICAgICAgICBzZWFyY2hLZXlQYXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAg
ICAgICAgICAgICAgIFtzZWFyY2hLZXlQYXJhbWV0ZXIgYWRkT2JqZWN0OnNlYXJjaEtleV07CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNlYXJjaEtleVBhcmFtZXRlcikK
QEAgLTE0NCwxMCArMTI5LDkgQEAgTlNEaWN0aW9uYXJ5ICpzZWFyY2hQcmVkaWNhdGVQYXJhbWV0
ZXJpemVkQXR0cmlidXRlRm9yU2VhcmNoQ3JpdGVyaWEoSlNDb250ZXh0UmUKICAgICB9CiAKICAg
ICBpZiAoc2VhcmNoVGV4dCAmJiBKU1N0cmluZ0dldExlbmd0aChzZWFyY2hUZXh0KSkKLSAgICAg
ICAgW3BhcmFtZXRlcml6ZWRBdHRyaWJ1dGUgc2V0T2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRo
SlNTdHJpbmdSZWY6c2VhcmNoVGV4dF0gZm9yS2V5OkAiQVhTZWFyY2hUZXh0Il07CisgICAgICAg
IFtwYXJhbWV0ZXJpemVkQXR0cmlidXRlIHNldE9iamVjdDp0b1dURlN0cmluZyhzZWFyY2hUZXh0
KSBmb3JLZXk6QCJBWFNlYXJjaFRleHQiXTsKIAogICAgIFtwYXJhbWV0ZXJpemVkQXR0cmlidXRl
IHNldE9iamVjdDpAKHZpc2libGVPbmx5KSBmb3JLZXk6QCJBWFZpc2libGVPbmx5Il07Ci0KICAg
ICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6QChpbW1lZGlhdGVEZXNjZW5kYW50
c09ubHkpIGZvcktleTpAIkFYSW1tZWRpYXRlRGVzY2VuZGFudHNPbmx5Il07CiAKICAgICByZXR1
cm4gcGFyYW1ldGVyaXplZEF0dHJpYnV0ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXJNYWMubW0KaW5kZXggOTEzYWUwZjc1Y2RiNGVkNWRlZGRlYjkyNWY2Yzk1MDE4ZGRk
MTcwNC4uYTg4N2RlNWM4NWQ1MDI4NGZkMjQ0NzEyNTE2ZTg5Yzk5OGMzYWE1ZiAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmgiCiAjaW1wb3J0ICJJ
bmplY3RlZEJ1bmRsZS5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCisjaW1wb3J0
ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGVQYWdl
Lmg+CkBAIC05Niw3ICs5Nyw3IEBAIHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQo
aWQgb2JqLCBOU1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpT
U3RyaW5nUmVmIGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8gcGFnZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBQbGF0Zm9y
bVVJRWxlbWVudCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNjZXNz
aWJpbGl0eVJvb3RPYmplY3QocGFnZSkpOwogCiAgICAgUmV0YWluUHRyPGlkPiByZXN1bHQ7CkBA
IC0xMTEsNyArMTEyLDcgQEAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlMKIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQogewot
ICAgIHJldHVybiBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibWFjIikpOwor
ICAgIHJldHVybiBXVFI6OmNyZWF0ZUpTU3RyaW5nKCJtYWMiKTsKIH0KIAogLy8gQVhUaHJlYWQg
aW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1t
CmluZGV4IDUwYjNlMDIyMGI4ZDEyMmFkMjJiYzk2ZDQyNGNmZDgzMzFiNjVmNTkuLjJlZmY0NTRl
NjY3OTFkNjk4Zjk1YmVjNzY5NGEwOWZiMmNjZjBhMTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMu
bW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudE1hYy5tbQpAQCAtMzIsNyArMzIsNyBAQAogI2ltcG9ydCAiQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5oIgogI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbXBvcnQg
IkluamVjdGVkQnVuZGxlUGFnZS5oIgotCisjaW1wb3J0ICJKU0Jhc2ljcy5oIgogI2ltcG9ydCA8
QXBwS2l0L05TQWNjZXNzaWJpbGl0eS5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CkBAIC04NywxMSAr
ODcsNiBAQCBAZW5kCiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0aWMgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IGNyZWF0ZUVtcHR5SlNTdHJpbmcoKQotewotICAgIHJldHVybiBhZG9wdChKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApKTsKLX0KLQogUmVmUHRyPEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzX2NvbnRyb2xsZXI7
CiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoaWQgZWxl
bWVudCkKQEAgLTIwNiw3ICsyMDEsNyBAQCBzdGF0aWMgTlNTdHJpbmcqIGRlc2NyaXB0aW9uT2ZW
YWx1ZShpZCB2YWx1ZU9iamVjdCwgaWQgZWxlbWVudCkKIAogc3RhdGljIE5TU3RyaW5nICphdHRy
aWJ1dGVzT2ZFbGVtZW50KGlkIGFjY2Vzc2liaWxpdHlPYmplY3QpCiB7Ci0gICAgUmV0YWluUHRy
PE5TQXJyYXk+IGF0dHJpYnV0ZXMgPSBzdXBwb3J0ZWRBdHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlP
YmplY3QpOworICAgIGF1dG8gYXR0cmlidXRlcyA9IHN1cHBvcnRlZEF0dHJpYnV0ZXMoYWNjZXNz
aWJpbGl0eU9iamVjdCk7CiAKICAgICBOU011dGFibGVTdHJpbmcqIGF0dHJpYnV0ZXNTdHJpbmcg
PSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CiAgICAgZm9yIChOU1N0cmluZyogYXR0cmlidXRl
IGluIGF0dHJpYnV0ZXMuZ2V0KCkpIHsKQEAgLTIyNywxNiArMjIyLDEzIEBAIHN0YXRpYyBOU1N0
cmluZyAqYXR0cmlidXRlc09mRWxlbWVudChpZCBhY2Nlc3NpYmlsaXR5T2JqZWN0KQogICAgIHJl
dHVybiBhdHRyaWJ1dGVzU3RyaW5nOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGlj
IEpTVmFsdWVSZWYgY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXkoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIFZlY3RvcjxUPiBjb25zdCYgZWxlbWVudHMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0
aWMgSlNPYmplY3RSZWYgbWFrZUpTQXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFZl
Y3RvcjxUPiYgZWxlbWVudHMpCiB7Ci0gICAgSlNWYWx1ZVJlZiBhcnJheVJlc3VsdCA9IEpTT2Jq
ZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2Jq
ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFycmF5UmVzdWx0LCAwKTsKKyAgICBhdXRvIGFy
cmF5ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7CiAgICAgc2l6ZV90IGVs
ZW1lbnRDb3VudCA9IGVsZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGVsZW1lbnRDb3VudDsgKytpKQotICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChj
b250ZXh0LCBhcnJheU9iaiwgaSwgSlNPYmplY3RNYWtlKGNvbnRleHQsIGVsZW1lbnRzW2ldLT53
cmFwcGVyQ2xhc3MoKSwgZWxlbWVudHNbaV0uZ2V0KCkpLCAwKTsKLQotICAgIHJldHVybiBhcnJh
eVJlc3VsdDsKKyAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgYXJy
YXksIGksIEpTT2JqZWN0TWFrZShjb250ZXh0LCBlbGVtZW50c1tpXS0+d3JhcHBlckNsYXNzKCks
IGVsZW1lbnRzW2ldLmdldCgpKSwgMCk7CisgICAgcmV0dXJuIGFycmF5OwogfQogCiBzdGF0aWMg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNvbmNhdGVuYXRlQXR0cmlidXRlQW5kVmFsdWUoTlNT
dHJpbmcqIGF0dHJpYnV0ZSwgTlNTdHJpbmcqIHZhbHVlKQpAQCAtMjczLDI1ICsyNjUsMTMgQEAg
c3RhdGljIE5TRGljdGlvbmFyeSAqc2VsZWN0VGV4dFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVGb3JD
cml0ZXJpYShKU0NvbnRleHRSZWYgY28KICAgICAKICAgICBpZiAoc2VhcmNoU3RyaW5ncykgewog
ICAgICAgICBOU011dGFibGVBcnJheSAqc2VhcmNoU3RyaW5nc1BhcmFtZXRlciA9IFtOU011dGFi
bGVBcnJheSBhcnJheV07Ci0gICAgICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgc2Vh
cmNoU3RyaW5ncykpIHsKLSAgICAgICAgICAgIGF1dG8gc2VhcmNoU3RyaW5nc1N0cmluZyA9IGFk
b3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgc2VhcmNoU3RyaW5ncywgbnVsbHB0cikp
OwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJpbmcpCi0gICAgICAgICAgICAgICAg
W3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoSlNT
dHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkgeworICAg
ICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmluZ3MpKQorICAgICAg
ICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OnRvV1RGU3RyaW5nKGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3MpXTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBKU09iamVj
dFJlZiBzZWFyY2hTdHJpbmdzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgc2VhcmNo
U3RyaW5ncywgbnVsbHB0cik7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzZWFyY2hTdHJpbmdzQXJy
YXlMZW5ndGggPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGxlbmd0aFByb3Bl
cnR5U3RyaW5nID0gYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIp
KTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWYgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUg
PSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgbGVuZ3Ro
UHJvcGVydHlTdHJpbmcuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKHNlYXJjaFN0
cmluZ3NBcnJheUxlbmd0aFZhbHVlICYmIEpTVmFsdWVJc051bWJlcihjb250ZXh0LCBzZWFyY2hT
dHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSkpCi0gICAgICAgICAgICAgICAgc2VhcmNoU3RyaW5nc0Fy
cmF5TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5
TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcg
PSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlB
dEluZGV4KGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0ciksIG51bGxwdHIp
KTsKLSAgICAgICAgICAgICAgICBpZiAoc2VhcmNoU3RyaW5nc1N0cmluZykKLSAgICAgICAgICAg
ICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJp
bmdXaXRoSlNTdHJpbmdSZWY6c2VhcmNoU3RyaW5nc1N0cmluZy5nZXQoKV1dOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gYXJy
YXlMZW5ndGgoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5KTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgICAgICBbc2VhcmNoU3RyaW5nc1BhcmFtZXRlciBhZGRPYmplY3Q6dG9XVEZTdHJpbmco
Y29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgc2VhcmNoU3RyaW5n
c0FycmF5LCBpLCBudWxscHRyKSldOwogICAgICAgICB9CiAgICAgICAgIFtwYXJhbWV0ZXJpemVk
QXR0cmlidXRlIHNldE9iamVjdDpzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGZvcktleTpAIkFYU2Vs
ZWN0VGV4dFNlYXJjaFN0cmluZ3MiXTsKICAgICB9CkBAIC0zMTQsMjQgKzI5NCwxMyBAQCBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpzZWFyY2hUZXh0UGFyYW1ldGVyaXplZEF0dHJpYnV0ZUZvckNyaXRl
cmlhKEpTQ29udGV4dFJlZiBjbwogCiAgICAgaWYgKHNlYXJjaFN0cmluZ3MpIHsKICAgICAgICAg
TlNNdXRhYmxlQXJyYXkgKnNlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXldOwotICAgICAgICBpZiAoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHNlYXJjaFN0cmlu
Z3MpKSB7Ci0gICAgICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ3NTdHJpbmcgPSBhZG9wdChKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIpKTsKLSAgICAg
ICAgICAgIGlmIChzZWFyY2hTdHJpbmdzU3RyaW5nKQotICAgICAgICAgICAgICAgIFtzZWFyY2hT
dHJpbmdzUGFyYW1ldGVyIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVm
OnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0KCldXTsKLSAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVl
SXNPYmplY3QoY29udGV4dCwgc2VhcmNoU3RyaW5ncykpIHsKKyAgICAgICAgaWYgKEpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdzKSkKKyAgICAgICAgICAgIFtzZWFyY2hTdHJp
bmdzUGFyYW1ldGVyIGFkZE9iamVjdDp0b1dURlN0cmluZyhjb250ZXh0LCBzZWFyY2hTdHJpbmdz
KV07CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNPYmplY3RSZWYgc2VhcmNoU3RyaW5n
c0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIHNlYXJjaFN0cmluZ3MsIG51bGxwdHIp
OwotICAgICAgICAgICAgdW5zaWduZWQgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoID0gMDsKLQot
ICAgICAgICAgICAgYXV0byBsZW5ndGhQcm9wZXJ0eVN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIHNl
YXJjaFN0cmluZ3NBcnJheUxlbmd0aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0
LCBzZWFyY2hTdHJpbmdzQXJyYXksIGxlbmd0aFByb3BlcnR5U3RyaW5nLmdldCgpLCBudWxscHRy
KTsKLSAgICAgICAgICAgIGlmIChzZWFyY2hTdHJpbmdzQXJyYXlMZW5ndGhWYWx1ZSAmJiBKU1Zh
bHVlSXNOdW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFsdWUpKQotICAg
ICAgICAgICAgICAgIHNlYXJjaFN0cmluZ3NBcnJheUxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgc2VhcmNoU3RyaW5nc0FycmF5TGVuZ3RoVmFs
dWUsIG51bGxwdHIpKTsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNl
YXJjaFN0cmluZ3NBcnJheUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWFy
Y2hTdHJpbmdzU3RyaW5nID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBKU09i
amVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBzZWFyY2hTdHJpbmdzQXJyYXksIGksIG51
bGxwdHIpLCBudWxscHRyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZ3NTdHJp
bmcpCi0gICAgICAgICAgICAgICAgICAgIFtzZWFyY2hTdHJpbmdzUGFyYW1ldGVyIGFkZE9iamVj
dDpbTlNTdHJpbmcgc3RyaW5nV2l0aEpTU3RyaW5nUmVmOnNlYXJjaFN0cmluZ3NTdHJpbmcuZ2V0
KCldXTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVuc2lnbmVkIHNlYXJjaFN0cmluZ3NB
cnJheUxlbmd0aCA9IGFycmF5TGVuZ3RoKGNvbnRleHQsIHNlYXJjaFN0cmluZ3NBcnJheSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nc0FycmF5TGVu
Z3RoOyArK2kpCisgICAgICAgICAgICAgICAgW3NlYXJjaFN0cmluZ3NQYXJhbWV0ZXIgYWRkT2Jq
ZWN0OnRvV1RGU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRl
eHQsIHNlYXJjaFN0cmluZ3NBcnJheSwgaSwgbnVsbHB0cikpXTsKICAgICAgICAgfQogICAgICAg
ICBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBzZXRPYmplY3Q6c2VhcmNoU3RyaW5nc1BhcmFtZXRl
ciBmb3JLZXk6QCJBWFNlYXJjaFRleHRTZWFyY2hTdHJpbmdzIl07CiAgICAgfQpAQCAtNDAxLDcg
KzM3MCw3IEBAIEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SGVhZGVycygp
IGNvbnN0CiAgICAgaWQgdmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZShtX2VsZW1lbnQuZ2V0KCksIE5T
QWNjZXNzaWJpbGl0eVJvd0hlYWRlclVJRWxlbWVudHNBdHRyaWJ1dGUpOwogICAgIGlmIChbdmFs
dWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQogICAgICAgICBlbGVtZW50cyA9IG1h
a2VWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+Pih2YWx1ZSk7Ci0gICAgcmV0
dXJuIGNvbnZlcnRWZWN0b3JUb09iamVjdEFycmF5PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Pj4oY29udGV4dCwgZWxlbWVudHMpOworICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0
LCBlbGVtZW50cyk7CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogfQogCkBAIC00MTUsNyAr
Mzg0LDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJz
KCkgY29uc3QKICAgICBpZCB2YWx1ZSA9IGF0dHJpYnV0ZVZhbHVlKG1fZWxlbWVudC5nZXQoKSwg
TlNBY2Nlc3NpYmlsaXR5Q29sdW1uSGVhZGVyVUlFbGVtZW50c0F0dHJpYnV0ZSk7CiAgICAgaWYg
KFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pCiAgICAgICAgIGVsZW1lbnRz
ID0gbWFrZVZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KHZhbHVlKTsKLSAg
ICByZXR1cm4gY29udmVydFZlY3RvclRvT2JqZWN0QXJyYXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ+Pihjb250ZXh0LCBlbGVtZW50cyk7CisgICAgcmV0dXJuIG1ha2VKU0FycmF5KGNv
bnRleHQsIGVsZW1lbnRzKTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiB9CiAgICAgCkBA
IC02MDcsNyArNTc2LDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVs
ZW1lbnRBcnJheUF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHIKIAogICAgIFZlY3RvcjxS
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+IGVsZW1lbnRzOwogICAgIGdldFVJRWxlbWVu
dHNXaXRoQXR0cmlidXRlKGF0dHJpYnV0ZSwgZWxlbWVudHMpOwotICAgIHJldHVybiBjb252ZXJ0
VmVjdG9yVG9PYmplY3RBcnJheTxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+KGNvbnRl
eHQsIGVsZW1lbnRzKTsKKyAgICByZXR1cm4gbWFrZUpTQXJyYXkoY29udGV4dCwgZWxlbWVudHMp
OwogfQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dWlFbGVtZW50QXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKSBjb25z
dApAQCAtOTc2LDcgKzk0NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxl
Y3RlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9w
dGlvbkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAogICAgIHJldHVy
biBmYWxzZTsKIH0KIApAQCAtMTIyOSw3ICsxMTk3LDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzZWFyY2hUZXh0V2l0aENyaXRlcmlhKEpTQ29udGV4dFJlZiBjb250ZXh0
LAogICAgIE5TRGljdGlvbmFyeSAqcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSA9IHNlYXJjaFRleHRQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlRm9yQ3JpdGVyaWEoY29udGV4dCwgc2VhcmNoU3RyaW5ncywg
c3RhcnRGcm9tLCBkaXJlY3Rpb24pOwogICAgIGlkIHJlc3VsdCA9IFttX2VsZW1lbnQgYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhTZWFyY2hUZXh0V2l0aENyaXRlcmlhIiBmb3JQYXJh
bWV0ZXI6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZV07CiAgICAgaWYgKFtyZXN1bHQgaXNLaW5kT2ZD
bGFzczpbTlNBcnJheSBjbGFzc11dKQotICAgICAgICByZXR1cm4gY29udmVydFZlY3RvclRvT2Jq
ZWN0QXJyYXk8UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+Pihjb250ZXh0LCBt
YWtlVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPj4ocmVzdWx0KSk7
CisgICAgICAgIHJldHVybiBtYWtlSlNBcnJheShjb250ZXh0LCBtYWtlVmVjdG9yPFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPj4ocmVzdWx0KSk7CiAgICAgRU5EX0FYX09CSkNf
RVhDRVBUSU9OUwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNTQ2LDEzICsxNTE0LDExIEBA
IHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uQXRJbmRleCh1bnNp
Z25lZCBpbmRleCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNl
bGVjdGVkQ2hpbGRyZW4oKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2li
aWxpdHlWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVy
biBjcmVhdGVFbXB0eUpTU3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZUpTU3RyaW5nKCk7CiB9
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1
bWVudEVuY29kaW5nKCkKQEAgLTE1NjIsOCArMTUyOCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKICAgICBpZiAo
W3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBb
dmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKLSAg
ICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVhdGVK
U1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZG9jdW1lbnRVUkkoKQpAQCAtMTU3Myw4ICsxNTM4LDcgQEAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKICAgICBp
ZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgIHJldHVy
biBbdmFsdWUgY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMK
LSAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlKU1N0cmluZygpOworICAgIHJldHVybiBjcmVh
dGVKU1N0cmluZygpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dXJsKCkKQEAgLTE1ODMsNyArMTU0Nyw2IEBAIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQogICAgIE5TVVJMICp1cmwgPSBb
bV9lbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlVUkxB
dHRyaWJ1dGVdOwogICAgIHJldHVybiBbW3VybCBhYnNvbHV0ZVN0cmluZ10gY3JlYXRlSlNTdHJp
bmdSZWZdOyAgICAKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCi0gICAgCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKQEAgLTE2MjIsNyArMTU4NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9O
UwogICAgIHJlc3VsdCA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUlzQXR0cmlidXRlU2V0dGFi
bGU6TlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV07CiAgICAgRU5EX0FYX09CSkNfRVhD
RVBUSU9OUwotICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE2NDgsMTkgKzE2MTAs
MTYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNv
bnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzT2ZmU2NyZWVuKCkgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzQ29sbGFwc2VkKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNjc1LDEzICsxNjM0LDExIEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1NpbmdsZUxpbmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNNdWx0aUxpbmUoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MTQsMTcgKzE2NzEsMTQgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnRha2VTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGRTZWxlY3Rpb24oKQogewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rp
b24oKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogLy8gVGV4dCBtYXJrZXJzCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0
UnVubmVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMv
VGVzdFJ1bm5lck1hYy5tbQppbmRleCA0MDNmNGZmODMyZWUwZWY3YzNjZmFiZGYwZjg3ZTJjY2Jl
NjE0ZjhhLi5hZGJiNGI3YjVkNTRmYjE0YTljNGJkZThhOTIyNzVmMTFjMTQxNmQ5IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVy
TWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rl
c3RSdW5uZXJNYWMubW0KQEAgLTQ2LDE2ICs0NiwxMSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gVGVzdFJ1bm5lcjo6aW5zcGVjdG9yVGVzdFN0dWJVUkwoKQogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgcmV0dXJuIG51bGxwdHI7CiAjZWxzZQotICAgIENGQnVuZGxlUmVmIGluc3Bl
Y3RvckJ1bmRsZSA9IENGQnVuZGxlR2V0QnVuZGxlV2l0aElkZW50aWZpZXIoQ0ZTVFIoImNvbS5h
cHBsZS5XZWJJbnNwZWN0b3JVSSIpKTsKKyAgICBhdXRvIGluc3BlY3RvckJ1bmRsZSA9IENGQnVu
ZGxlR2V0QnVuZGxlV2l0aElkZW50aWZpZXIoQ0ZTVFIoImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JV
SSIpKTsKICAgICBpZiAoIWluc3BlY3RvckJ1bmRsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybCA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVz
b3VyY2VVUkwoaW5zcGVjdG9yQnVuZGxlLCBDRlNUUigiVGVzdFN0dWIiKSwgQ0ZTVFIoImh0bWwi
KSwgTlVMTCkpOwotICAgIGlmICghdXJsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IENGU3RyaW5nUmVmIHVybFN0cmluZyA9IENGVVJMR2V0U3RyaW5nKHVybC5nZXQoKSk7Ci0gICAg
cmV0dXJuIGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHVybFN0cmluZykpOworICAg
IGF1dG8gcmVzb3VyY2VVUkwgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKGluc3Bl
Y3RvckJ1bmRsZSwgQ0ZTVFIoIlRlc3RTdHViIiksIENGU1RSKCJodG1sIiksIE5VTEwpKTsKKyAg
ICByZXR1cm4gcmVzb3VyY2VVUkwgPyBhZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhD
RlVSTEdldFN0cmluZyhyZXNvdXJjZVVSTC5nZXQoKSkpKSA6IG51bGxwdHI7CiAjZW5kaWYKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKaW5kZXggMWJjMDVjMGE1
ZjNhODA0YzBiMTQxYjg5NjkwYjc1ZDI3NzEwZTc2MS4uODg3ZmEzMzdlZmZkNjk2YzljZDc1YzY3
NDlhOTMxYTdmODgxNTFlMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJp
bmdGdW5jdGlvbnMuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9u
cy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0
eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
NCwxNSArMjQsMTIgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIFN0cmluZ0Z1bmN0aW9uc19oCi0jZGVmaW5lIFN0cmluZ0Z1bmN0aW9uc19oCisj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgorI2luY2x1ZGUgIkpTQmFzaWNz
LmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dL
U3RyaW5nLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nUHJpdmF0ZS5oPgotI2luY2x1ZGUg
PFdlYktpdC9XS1VSTC5oPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgog
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgpAQCAtNDQsNyArNDEsOCBAQAogCiBuYW1lc3BhY2Ug
V1RSIHsKIAotLy8gQ29udmVyc2lvbiBmdW5jdGlvbnMKK1dLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB0b1dLU3RyaW5nKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CitXVEY6OlN0cmluZyB0b1dU
RlN0cmluZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwogCiBpbmxpbmUgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRvV0soSlNTdHJpbmdSZWYgc3RyaW5nKQogewpAQCAtNTYsOSArNTQsMTQg
QEAgaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKGNvbnN0IEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiYgc3RyaW5nKQogICAgIHJldHVybiB0b1dLKHN0cmluZy5nZXQoKSk7CiB9
CiAKK2lubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBjaGFyKiBzdHJp
bmcpCit7CisgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
c3RyaW5nKSk7Cit9CisKIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25z
dCBXVEY6OlN0cmluZyYgc3RyaW5nKQogewotICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJuIHRv
V0soc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogfQogCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IHRvSlMoV0tTdHJpbmdSZWYgc3RyaW5nKQpAQCAtODYsNiArODksOCBAQCBpbmxpbmUg
c3RkOjpzdHJpbmcgdG9TVEQoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmcp
CiAKIGlubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhXS1N0cmluZ1JlZiBzdHJpbmcpCiB7
CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CiAgICAgc2l6
ZV90IGJ1ZmZlclNpemUgPSBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyaW5n
KTsKICAgICBhdXRvIGJ1ZmZlciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPGNo
YXJbXT4oYnVmZmVyU2l6ZSk7CiAgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IFdLU3RyaW5nR2V0
VVRGOENTdHJpbmdOb25TdHJpY3Qoc3RyaW5nLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwpA
QCAtOTksNiArMTA0LDI1IEBAIGlubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmluZykKICAgICByZXR1cm4gdG9XVEZTdHJpbmco
c3RyaW5nLmdldCgpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV1RSCitpbmxpbmUgV1RGOjpTdHJp
bmcgdG9XVEZTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKQoreworICAgIHJldHVybiB0b1dURlN0
cmluZyh0b1dLKHN0cmluZykpOworfQogCi0jZW5kaWYgLy8gU3RyaW5nRnVuY3Rpb25zX2gKK2lu
bGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4mIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5nLmdldCgpKTsKK30K
KworaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLU3RyaW5nKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIHJldHVybiB0b1dLKGNyZWF0ZUpT
U3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7Cit9CisKK2lubGluZSBXVEY6OlN0cmluZyB0
b1dURlN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAg
ICAvLyBGSVhNRTogQ291bGQgbWFrZSB0aGlzIGVmZmljaWVudCBieSB1c2luZyB0aGUgV1RGU3Ry
aW5nIGluc2lkZSBPcGFxdWVKU1N0cmluZyBpZiB3ZSB3YW50ZWQgdG8uCisgICAgcmV0dXJuIHRv
V1RGU3RyaW5nKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRl
eCAxMzQ1YzQyYzExZTYyZGMwODhjNmYyZDM4Yjk5YjA5MzU2NGUwMTM4Li44MzFiYzQ3NDBmYWYy
MDNhNDBmNzJhM2U3ZTg5Y2JhMjE2NzQ4ZDEwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcApAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5j
dGlvbnMuaCIKICNpbmNsdWRlICJFdmVudFNlbmRlclByb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9u
cy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2luY2x1ZGUgIlN0cmluZ0Z1bmN0
aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRl
c3RTdXBwb3J0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGlu
Zy5oPgpAQCAtNDk0LDggKzQ5NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUo
aW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6Omlu
c3RhbGxNb2NrR2FtZXBhZFByb3ZpZGVyKCk7CiAjZW5kaWYKIAotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBwYWdlR3JvdXBJZGVudGlmaWVyID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiV2ViS2l0VGVzdFJ1bm5lclBhZ2VHcm91cCIpKTsKLSAgICBtX3BhZ2VH
cm91cC5hZG9wdChXS1BhZ2VHcm91cENyZWF0ZVdpdGhJZGVudGlmaWVyKHBhZ2VHcm91cElkZW50
aWZpZXIuZ2V0KCkpKTsKKyAgICBtX3BhZ2VHcm91cC5hZG9wdChXS1BhZ2VHcm91cENyZWF0ZVdp
dGhJZGVudGlmaWVyKHRvV0soIldlYktpdFRlc3RSdW5uZXJQYWdlR3JvdXAiKS5nZXQoKSkpOwog
CiAgICAgbV9ldmVudFNlbmRlclByb3h5ID0gbWFrZVVuaXF1ZTxFdmVudFNlbmRlclByb3h5Pih0
aGlzKTsKIH0KQEAgLTUwNyw5ICs1MDYsOSBAQCBXS1JldGFpblB0cjxXS0NvbnRleHRDb25maWd1
cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdAogICAg
IFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRGdWxseVN5bmNocm9ub3VzTW9kZUlzQWxsb3dlZEZv
clRlc3RpbmcoY29uZmlndXJhdGlvbi5nZXQoKSwgdHJ1ZSk7CiAgICAgV0tDb250ZXh0Q29uZmln
dXJhdGlvblNldElnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHNGb3JUZXN0aW5nKGNv
bmZpZ3VyYXRpb24uZ2V0KCksIG9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1l
b3V0cyk7CiAKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gb3ZlcnJpZGVMYW5n
dWFnZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gb3ZlcnJp
ZGVMYW5ndWFnZXMgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAo
YXV0byYgbGFuZ3VhZ2UgOiBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzKQotICAgICAgICBXS0Fy
cmF5QXBwZW5kSXRlbShvdmVycmlkZUxhbmd1YWdlcy5nZXQoKSwgYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhsYW5ndWFnZS51dGY4KCkuZGF0YSgpKSkuZ2V0KCkpOworICAg
ICAgICBXS0FycmF5QXBwZW5kSXRlbShvdmVycmlkZUxhbmd1YWdlcy5nZXQoKSwgdG9XSyhsYW5n
dWFnZSkuZ2V0KCkpOwogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRPdmVycmlkZUxhbmd1
YWdlcyhjb25maWd1cmF0aW9uLmdldCgpLCBvdmVycmlkZUxhbmd1YWdlcy5nZXQoKSk7CiAKICAg
ICBpZiAob3B0aW9ucy5zaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigpKSB7CkBA
IC04NDMsMzEgKzg0MiwyNCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2Vz
VG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpbwogICAgIFdLUHJlZmVy
ZW5jZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0dXJlcyhwcmVmZXJlbmNlcyk7CiAKICAgICAv
LyBTZXQgaW50ZXJuYWwgZmVhdHVyZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBkZWZhdWx0IHZhbHVl
cyBmb3IgdGVzdGluZy4KLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgYXN5bmNPdmVyZmxvd1Njcm9s
bGluZ0ZlYXR1cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXN5bmNPdmVyZmxv
d1Njcm9sbGluZ0VuYWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBhc3luY092ZXJmbG93U2Nyb2xsaW5nRmVh
dHVyZSk7CiAKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgYXN5bmNGcmFtZVNjcm9sbGluZ0ZlYXR1
cmUgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXN5bmNGcmFtZVNjcm9sbGluZ0Vu
YWJsZWQiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXko
cHJlZmVyZW5jZXMsIGZhbHNlLCBhc3luY0ZyYW1lU2Nyb2xsaW5nRmVhdHVyZSk7CisgICAgV0tQ
cmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBmYWxz
ZSwgdG9XSygiQXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQiKS5nZXQoKSk7CisgICAgV0tQ
cmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBmYWxz
ZSwgdG9XSygiQXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJsZWQiKS5nZXQoKSk7CiAKICNpZiBFTkFC
TEUoSU5QVVRfVFlQRV9EQVRFKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1dFR5cGVEYXRl
RmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1dFR5cGVEYXRlRW5h
YmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShw
cmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlRGF0ZUZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5j
ZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygi
SW5wdXRUeXBlRGF0ZUVuYWJsZWQiKS5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5QVVRf
VFlQRV9EQVRFVElNRUxPQ0FMKQotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBpbnB1dFR5cGVEYXRl
VGltZUxvY2FsRmVhdHVyZSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJbnB1dFR5
cGVEYXRlVGltZUxvY2FsRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERl
YnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBlRGF0ZVRpbWVMb2Nh
bEZlYXR1cmUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktl
eShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlRGF0ZVRpbWVMb2NhbEVuYWJsZWQi
KS5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9NT05USCkKLSAgICBzdGF0
aWMgV0tTdHJpbmdSZWYgaW5wdXRUeXBlTW9udGhGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIklucHV0VHlwZU1vbnRoRW5hYmxlZCIpOwotICAgIFdLUHJlZmVyZW5jZXNT
ZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgaW5wdXRUeXBl
TW9udGhGZWF0dXJlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVG
b3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZU1vbnRoRW5hYmxlZCIpLmdl
dCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1RJTUUpCi0gICAgc3RhdGljIFdL
U3RyaW5nUmVmIGlucHV0VHlwZVRpbWVGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIklucHV0VHlwZVRpbWVFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVy
bmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVUaW1lRmVh
dHVyZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHBy
ZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVUaW1lRW5hYmxlZCIpLmdldCgpKTsKICNl
bmRpZgogI2lmIEVOQUJMRShJTlBVVF9UWVBFX1dFRUspCi0gICAgc3RhdGljIFdLU3RyaW5nUmVm
IGlucHV0VHlwZVdlZWtGZWF0dXJlID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklu
cHV0VHlwZVdlZWtFbmFibGVkIik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdG
ZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCBpbnB1dFR5cGVXZWVrRmVhdHVyZSk7Cisg
ICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2Vz
LCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVXZWVrRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcm5hbERlYnVnRmVhdHVyZSA6IG9wdGlvbnMuaW50ZXJu
YWxEZWJ1Z0ZlYXR1cmVzKQpAQCAtOTIwLDI1ICs5MTIsMTYgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYg
b3B0aW8KICAgICBXS1ByZWZlcmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJr
TW9kZShwcmVmZXJlbmNlcywgb3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZUNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywg
b3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENhY2hlKTsKIAotICAgIHN0YXRpYyBXS1N0cmluZ1Jl
ZiBkZWZhdWx0VGV4dEVuY29kaW5nID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklT
Ty04ODU5LTEiKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUo
cHJlZmVyZW5jZXMsIGRlZmF1bHRUZXh0RW5jb2RpbmcpOwotCi0gICAgc3RhdGljIFdLU3RyaW5n
UmVmIHN0YW5kYXJkRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJU
aW1lcyIpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBjdXJzaXZlRm9udEZhbWlseSA9IFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBcHBsZSBDaGFuY2VyeSIpOwotICAgIHN0YXRpYyBX
S1N0cmluZ1JlZiBmYW50YXN5Rm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJQYXB5cnVzIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGZpeGVkRm9udEZhbWlseSA9
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDb3VyaWVyIik7Ci0gICAgc3RhdGljIFdL
U3RyaW5nUmVmIHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkFwcGxlIENvbG9yIEVtb2ppIik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHNhbnNT
ZXJpZkZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGVsdmV0aWNh
Iik7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHNlcmlmRm9udEZhbWlseSA9IFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lcyIpOworICAgIFdLUHJlZmVyZW5jZXNTZXREZWZhdWx0
VGV4dEVuY29kaW5nTmFtZShwcmVmZXJlbmNlcywgdG9XSygiSVNPLTg4NTktMSIpLmdldCgpKTsK
IAogICAgIFdLUHJlZmVyZW5jZXNTZXRNaW5pbXVtRm9udFNpemUocHJlZmVyZW5jZXMsIDApOwot
ICAgIFdLUHJlZmVyZW5jZXNTZXRTdGFuZGFyZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHN0YW5k
YXJkRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEN1cnNpdmVGb250RmFtaWx5KHBy
ZWZlcmVuY2VzLCBjdXJzaXZlRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEZhbnRh
c3lGb250RmFtaWx5KHByZWZlcmVuY2VzLCBmYW50YXN5Rm9udEZhbWlseSk7Ci0gICAgV0tQcmVm
ZXJlbmNlc1NldEZpeGVkRm9udEZhbWlseShwcmVmZXJlbmNlcywgZml4ZWRGb250RmFtaWx5KTsK
LSAgICBXS1ByZWZlcmVuY2VzU2V0UGljdG9ncmFwaEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHBp
Y3RvZ3JhcGhGb250RmFtaWx5KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0U2Fuc1NlcmlmRm9udEZh
bWlseShwcmVmZXJlbmNlcywgc2Fuc1NlcmlmRm9udEZhbWlseSk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldFNlcmlmRm9udEZhbWlseShwcmVmZXJlbmNlcywgc2VyaWZGb250RmFtaWx5KTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0U3RhbmRhcmRGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJUaW1l
cyIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q3Vyc2l2ZUZvbnRGYW1pbHkocHJlZmVy
ZW5jZXMsIHRvV0soIkFwcGxlIENoYW5jZXJ5IikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXRGYW50YXN5Rm9udEZhbWlseShwcmVmZXJlbmNlcywgdG9XSygiUGFweXJ1cyIpLmdldCgpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0Rml4ZWRGb250RmFtaWx5KHByZWZlcmVuY2VzLCB0b1dLKCJD
b3VyaWVyIikuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRQaWN0b2dyYXBoRm9udEZhbWls
eShwcmVmZXJlbmNlcywgdG9XSygiQXBwbGUgQ29sb3IgRW1vamkiKS5nZXQoKSk7CisgICAgV0tQ
cmVmZXJlbmNlc1NldFNhbnNTZXJpZkZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHRvV0soIkhlbHZl
dGljYSIpLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0U2VyaWZGb250RmFtaWx5KHByZWZl
cmVuY2VzLCB0b1dLKCJUaW1lcyIpLmdldCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0QXN5bmNo
cm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsKICNpZiBFTkFC
TEUoTUVESUFfU09VUkNFKQogICAgIFdLUHJlZmVyZW5jZXNTZXRNZWRpYVNvdXJjZUVuYWJsZWQo
cHJlZmVyZW5jZXMsIHRydWUpOwpAQCAtMTAxMCwzOCArOTkzLDI3IEBAIGJvb2wgVGVzdENvbnRy
b2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9w
dGlvbnMsIFJlCiAKICAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQobV9tYWluV2ViVmlldy0+
cGFnZSgpLCBudWxscHRyKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc2V0IikpOwot
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IHJlc2V0TWVzc2FnZUJvZHkg
PSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisgICAgYXV0byByZXNldE1l
c3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwogCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZEdDS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2hvdWxkR0MiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBzaG91bGRHQ1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9nY0JldHdl
ZW5UZXN0cykpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0ocmVzZXRNZXNzYWdlQm9keS5nZXQo
KSwgc2hvdWxkR0NLZXkuZ2V0KCksIHNob3VsZEdDVmFsdWUuZ2V0KCkpOworICAgIHNldFZhbHVl
KHJlc2V0TWVzc2FnZUJvZHksICJTaG91bGRHQyIsIG1fZ2NCZXR3ZWVuVGVzdHMpOwogCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFsbG93ZWRIb3N0c0tleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFsbG93ZWRIb3N0cyIpKTsKLSAgICBXS1JldGFpblB0
cjxXS011dGFibGVBcnJheVJlZj4gYWxsb3dlZEhvc3RzVmFsdWUgPSBhZG9wdFdLKFdLTXV0YWJs
ZUFycmF5Q3JlYXRlKCkpOwotICAgIGZvciAoYXV0byYgaG9zdCA6IG1fYWxsb3dlZEhvc3RzKSB7
Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0hvc3QgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGhvc3QuY19zdHIoKSkpOwotICAgICAgICBXS0FycmF5
QXBwZW5kSXRlbShhbGxvd2VkSG9zdHNWYWx1ZS5nZXQoKSwgd2tIb3N0LmdldCgpKTsKLSAgICB9
Ci0gICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5LmdldCgpLCBhbGxvd2Vk
SG9zdHNLZXkuZ2V0KCksIGFsbG93ZWRIb3N0c1ZhbHVlLmdldCgpKTsKKyAgICBhdXRvIGFsbG93
ZWRIb3N0c1ZhbHVlID0gYWRvcHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKKyAgICBmb3Ig
KGF1dG8mIGhvc3QgOiBtX2FsbG93ZWRIb3N0cykKKyAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0o
YWxsb3dlZEhvc3RzVmFsdWUuZ2V0KCksIHRvV0soaG9zdC5jX3N0cigpKS5nZXQoKSk7CisgICAg
c2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkFsbG93ZWRIb3N0cyIsIGFsbG93ZWRIb3N0c1Zh
bHVlKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF4SXNvbGF0ZWRNb2RlS2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGF4SXNvbGF0ZWRNb2RlVmFsdWUgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKSk7Ci0gICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5LmdldCgpLCBheElzb2xhdGVkTW9k
ZUtleS5nZXQoKSwgYXhJc29sYXRlZE1vZGVWYWx1ZS5nZXQoKSk7CisgICAgc2V0VmFsdWUocmVz
ZXRNZXNzYWdlQm9keSwgIkFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWUiLCBtX2FjY2Vzc2liaWxp
dHlJc29sYXRlZFRyZWVNb2RlKTsKICNlbmRpZgotICAgIAotICAgIGlmIChvcHRpb25zLmpzY09w
dGlvbnMubGVuZ3RoKCkpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGpzY09w
dGlvbnNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJKU0NPcHRp
b25zIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4ganNjT3B0aW9uc1ZhbHVl
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhvcHRpb25zLmpzY09wdGlv
bnMuY19zdHIoKSkpOwotICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHJlc2V0TWVzc2FnZUJv
ZHkuZ2V0KCksIGpzY09wdGlvbnNLZXkuZ2V0KCksIGpzY09wdGlvbnNWYWx1ZS5nZXQoKSk7Ci0g
ICAgfQorCisgICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5sZW5ndGgoKSkKKyAgICAgICAgc2V0
VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkpTQ09wdGlvbnMiLCBvcHRpb25zLmpzY09wdGlvbnMu
Y19zdHIoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6
OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOwogI2VuZGlmCiAKLSAgICBXS1BhZ2VQ
b3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHJlc2V0TWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKCJSZXNldCIpLmdl
dCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsKIAogICAgIFdLQ29udGV4dFNldFNob3VsZFVz
ZUZvbnRTbW9vdGhpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFs
c2UpOwogCkBAIC0xMjAzLDggKzExNzUsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVM
aXZlRG9jdW1lbnRzQWZ0ZXJUZXN0KCkKIAogICAgIEFzeW5jVGFzayhbXSgpIHsKICAgICAgICAg
Ly8gQWZ0ZXIgZWFjaCB0ZXN0LCB3ZSB1cGRhdGUgdGhlIGxpc3Qgb2YgbGl2ZSBkb2N1bWVudHMg
c28gdGhhdCB3ZSBjYW4gZGV0ZWN0IHdoZW4gYW4gYWJhbmRvbmVkIGRvY3VtZW50IGZpcnN0IHNo
b3dlZCB1cC4KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2V0TGl2ZURvY3VtZW50cyIp
KTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBudWxscHRyKTsKKyAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIHRvV0soIkdl
dExpdmVEb2N1bWVudHMiKS5nZXQoKSwgbnVsbHB0cik7CiAgICAgfSwgNV9zKS5ydW4oKTsKIH0K
IApAQCAtMTIxNSw4ICsxMTg2LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2hlY2tGb3JXb3Js
ZExlYWtzKCkKIAogICAgIEFzeW5jVGFzayhbXSgpIHsKICAgICAgICAgLy8gVGhpcyBydW5zIGF0
IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgdGVzdHMuIEl0IGNsZWFycyBjYWNoZXMsIHJ1bnMgYSBH
QyBhbmQgdGhlbiBmZXRjaGVzIHRoZSBsaXN0IG9mIGRvY3VtZW50cy4KLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2hlY2tGb3JXb3JsZExlYWtzIikpOwotICAgICAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBX
S1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygiQ2hlY2tGb3JXb3JsZExlYWtzIikuZ2V0
KCksIG51bGxwdHIpOwogICAgIH0sIDIwX3MpLnJ1bigpOwogfQogCkBAIC0xMzI0LDYgKzEyOTQs
NyBAQCBjb25zdCBjaGFyKiBUZXN0Q29udHJvbGxlcjo6bmV0d29ya1Byb2Nlc3NOYW1lKCkKIH0K
IAogI2lmICFQTEFURk9STShDT0NPQSkKKwogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGUoYm9vbCBhbGxvd3MpCiB7CiAgICAgbV9hbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZSA9IGFsbG93czsKQEAgLTE0MDAsOCArMTM3MSw4IEBAIHN0YXRpYyBib29sIHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCiAKIHN0YXRp
YyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNv
bnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKIHsK
LSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gYmFzZVVSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVS
TChwYXRoT3JVUkwuY19zdHIoKSkpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiByZWxhdGl2
ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1
ZS5jX3N0cigpKSk7CisgICAgYXV0byBiYXNlVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBh
dGhPclVSTC5jX3N0cigpKSk7CisgICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxD
cmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7CiAgICAgcmV0
dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKIH0K
IApAQCAtMTQxNSw4ICsxMzg2LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlVGVzdE9wdGlvbnNGcm9t
VGVzdEhlYWRlcihUZXN0T3B0aW9ucyYgdGVzdE9wdGlvbnMsIGNvbnN0IHN0ZDoKICAgICBzdGQ6
OnN0cmluZyBmaWxlbmFtZSA9IGFic29sdXRlUGF0aDsKICAgICBpZiAoZmlsZW5hbWUuZW1wdHko
KSkgewogICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2UgY29udmVyc2lvbnMgYmV0d2Vl
biBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tV
UkxSZWY+IHdrVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7
Ci0gICAgICAgIGZpbGVuYW1lID0gdGVzdFBhdGgod2tVUkwuZ2V0KCkpOworICAgICAgICBmaWxl
bmFtZSA9IHRlc3RQYXRoKGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkp
LmdldCgpKTsKICAgICB9CiAKICAgICBpZiAoZmlsZW5hbWUuZW1wdHkoKSkKQEAgLTE2MTUsNiAr
MTU4NSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0
IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogfQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykgJiYgIVBMQVRGT1JNKENPQ09BKQorCiBzdHJ1Y3QgQ29udGVudEV4dGVuc2lvblN0b3JlQ2Fs
bGJhY2tDb250ZXh0IHsKICAgICBleHBsaWNpdCBDb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFj
a0NvbnRleHQoVGVzdENvbnRyb2xsZXImIGNvbnRyb2xsZXIpCiAgICAgICAgIDogdGVzdENvbnRy
b2xsZXIoY29udHJvbGxlcikKQEAgLTE2NDIsMTUgKzE2MTMsOSBAQCBzdGF0aWMgc3RkOjpzdHJp
bmcgY29udGVudEV4dGVuc2lvbkpTT05QYXRoKFdLVVJMUmVmIHVybCkKICAgICBpZiAocGF0aC5s
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHBhdGggKyAiLmpzb24iOwogCi0gICAgYXV0byBwID0g
YWRvcHRXSyhXS1VSTENvcHlQYXRoKHVybCkpOwotICAgIGF1dG8gYnVmZmVyID0gc3RkOjp2ZWN0
b3I8Y2hhcj4oV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHAuZ2V0KCkpKTsKLSAg
ICBjb25zdCBhdXRvIGxlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcocC5nZXQoKSwgYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0gICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCJMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzIikgKyBzdGQ6OnN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgg
LSAxKSArICIuanNvbiI7CisgICAgcmV0dXJuICJMYXlvdXRUZXN0cy9odHRwL3Rlc3RzIiArIHRv
U1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aCh1cmwpKS5nZXQoKSkgKyAiLmpzb24iOwogfQotI2Vu
ZGlmCiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0
KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogewogICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRF
eHRlbnNpb25zUGF0aCA9IGxpYnJhcnlQYXRoRm9yVGVzdGluZygpOwpAQCAtMTY3MCwxMyArMTYz
NSwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9y
VGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdAogICAgIH0KIAogICAgIHN0ZDo6c3RyaW5n
IGpzb25GaWxlQ29udGVudHMge3N0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPihqc29uRmls
ZSksIHN0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPigpfTsKLSAgICBhdXRvIGpzb25Tb3Vy
Y2UgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGpzb25GaWxlQ29udGVu
dHMuY19zdHIoKSkpOworICAgIGF1dG8ganNvblNvdXJjZSA9IHRvV0soanNvbkZpbGVDb250ZW50
cy5jX3N0cigpKTsKIAotICAgIGF1dG8gc3RvcmVQYXRoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhjb250ZW50RXh0ZW5zaW9uc1BhdGgpKTsKKyAgICBhdXRvIHN0b3Jl
UGF0aCA9IHRvV0soY29udGVudEV4dGVuc2lvbnNQYXRoKTsKICAgICBhdXRvIGV4dGVuc2lvblN0
b3JlID0gYWRvcHRXSyhXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDcmVhdGUoc3RvcmVQYXRo
LmdldCgpKSk7CiAgICAgQVNTRVJUKGV4dGVuc2lvblN0b3JlKTsKIAotICAgIGF1dG8gZmlsdGVy
SWRlbnRpZmllciA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRlc3RD
b250ZW50RXh0ZW5zaW9uIikpOworICAgIGF1dG8gZmlsdGVySWRlbnRpZmllciA9IHRvV0soIlRl
c3RDb250ZW50RXh0ZW5zaW9uIik7CiAKICAgICBDb250ZW50RXh0ZW5zaW9uU3RvcmVDYWxsYmFj
a0NvbnRleHQgY29udGV4dCgqdGhpcyk7CiAgICAgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Q29tcGlsZShleHRlbnNpb25TdG9yZS5nZXQoKSwgZmlsdGVySWRlbnRpZmllci5nZXQoKSwganNv
blNvdXJjZS5nZXQoKSwgJmNvbnRleHQsIGNvbnRlbnRFeHRlbnNpb25TdG9yZUNhbGxiYWNrKTsK
QEAgLTE3MDEsMTggKzE2NjYsMjIgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50
RXh0ZW5zaW9ucygpCiAKICAgICBXS1VzZXJDb250ZW50Q29udHJvbGxlclJlbW92ZUFsbFVzZXJD
b250ZW50RmlsdGVycyh1c2VyQ29udGVudENvbnRyb2xsZXIoKSk7CiAKLSAgICBhdXRvIHN0b3Jl
UGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29udGVudEV4dGVu
c2lvbnNQYXRoKSk7CisgICAgYXV0byBzdG9yZVBhdGggPSB0b1dLKGNvbnRlbnRFeHRlbnNpb25z
UGF0aCk7CiAgICAgYXV0byBleHRlbnNpb25TdG9yZSA9IGFkb3B0V0soV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlQ3JlYXRlKHN0b3JlUGF0aC5nZXQoKSkpOwogICAgIEFTU0VSVChleHRlbnNp
b25TdG9yZSk7CiAKLSAgICBhdXRvIGZpbHRlcklkZW50aWZpZXIgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXN0Q29udGVudEV4dGVuc2lvbiIpKTsKKyAgICBhdXRv
IGZpbHRlcklkZW50aWZpZXIgPSB0b1dLKCJUZXN0Q29udGVudEV4dGVuc2lvbiIpOwogCiAgICAg
Q29udGVudEV4dGVuc2lvblN0b3JlQ2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwogICAg
IFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZShleHRlbnNpb25TdG9yZS5nZXQoKSwg
ZmlsdGVySWRlbnRpZmllci5nZXQoKSwgJmNvbnRleHQsIGNvbnRlbnRFeHRlbnNpb25TdG9yZUNh
bGxiYWNrKTsKICAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5vVGltZW91dCk7CiAgICAgQVNT
RVJUKCFjb250ZXh0LmZpbHRlcik7CiB9Ci0jZWxzZSAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykgJiYgIVBMQVRGT1JN
KENPQ09BKQorCisjaWYgIUVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZv
Y2F0aW9uJikKIHsKIH0KQEAgLTE3MjAsMTQgKzE2ODksMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24m
KQogdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50RXh0ZW5zaW9ucygpCiB7CiB9Ci0j
ZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSNlbmRpZiAvLyAhUExBVEZPUk0o
Q09DT0EpCisKKyNlbmRpZiAvLyAhRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogY2xhc3Mg
Q29tbWFuZFRva2VuaXplciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29tbWFuZFRva2VuaXpl
cihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCiAgICAgICAgIDogbV9pbnB1dChpbnB1dCkKLSAg
ICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKICAgICB7CiAgICAgICAgIHB1bXAoKTsKICAg
ICB9CkBAIC0xNzQwLDcgKzE3MDgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBjaGFy
IGtTZXBhcmF0b3IgPSAnXCcnOwogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtX2lucHV0OwogICAg
IHN0ZDo6c3RyaW5nIG1fbmV4dDsKLSAgICBzaXplX3QgbV9wb3NOZXh0U2VwYXJhdG9yOworICAg
IHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3IgeyAwIH07CiB9OwogCiB2b2lkIENvbW1hbmRUb2tl
bml6ZXI6OnB1bXAoKQpAQCAtMTgxNCw4ICsxNzgyLDcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6
cnVuVGVzdChjb25zdCBjaGFyKiBpbnB1dExpbmUpCiAgICAgCiAgICAgVGVzdE9wdGlvbnMgb3B0
aW9ucyA9IHRlc3RPcHRpb25zRm9yVGVzdChjb21tYW5kKTsKIAotICAgIFdLUmV0YWluUHRyPFdL
VVJMUmVmPiB3a1VSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVSTChjb21tYW5kLnBhdGhPclVSTC5j
X3N0cigpKSk7Ci0gICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IG1ha2VVbmlxdWU8VGVzdEludm9j
YXRpb24+KHdrVVJMLmdldCgpLCBvcHRpb25zKTsKKyAgICBtX2N1cnJlbnRJbnZvY2F0aW9uID0g
bWFrZVVuaXF1ZTxUZXN0SW52b2NhdGlvbj4oYWRvcHRXSyhjcmVhdGVUZXN0VVJMKGNvbW1hbmQu
cGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSwgb3B0aW9ucyk7CiAKICAgICBpZiAoY29tbWFuZC5z
aG91bGREdW1wUGl4ZWxzIHx8IG1fc2hvdWxkRHVtcFBpeGVsc0ZvckFsbFRlc3RzKQogICAgICAg
ICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRJc1BpeGVsVGVzdChjb21tYW5kLmV4cGVjdGVkUGl4
ZWxIYXNoKTsKQEAgLTE5NDQsMTggKzE5MTEsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpncHVQ
cm9jZXNzRGlkQ3Jhc2goV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUHJvY2Vzc0lEIHByb2Nlcwog
ICAgIHN0YXRpY19jYXN0PFRlc3RDb250cm9sbGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50
SW5mbykpLT5ncHVQcm9jZXNzRGlkQ3Jhc2gocHJvY2Vzc0lEKTsKIH0KIAotdm9pZCBUZXN0Q29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZUtleURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnksIGJvb2wgc3luY2hyb25vdXMpCit2b2lk
IFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5k
bGUoV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGJvb2wgc3luY2hyb25vdXMpCiB7Ci0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIktleSIpKTsKLSAgICBXS1N0cmluZ1JlZiBrZXkgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIGtleUtleS5nZXQoKSkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1v
ZGlmaWVyc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlm
aWVycyIpKTsKLSAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdL
RXZlbnRNb2RpZmllcnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb2RpZmll
cnNLZXkuZ2V0KCkpKSkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvY2F0aW9u
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTG9jYXRpb24iKSk7
Ci0gICAgdW5zaWduZWQgbG9jYXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50NjRH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxvY2F0aW9uS2V5LmdldCgpKSkpKTsKLQotICAgIG1f
ZXZlbnRTZW5kZXJQcm94eS0+a2V5RG93bihrZXksIG1vZGlmaWVycywgbG9jYXRpb24pOworICAg
IG1fZXZlbnRTZW5kZXJQcm94eS0+a2V5RG93bihzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAiS2V5
IiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJNb2RpZmllcnMiKSwgdWludDY0VmFsdWUoZGlj
dGlvbmFyeSwgIkxvY2F0aW9uIikpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNl
aXZlTGl2ZURvY3VtZW50c0xpc3QoV0tBcnJheVJlZiBsaXZlRG9jdW1lbnRMaXN0KQpAQCAtMTk2
NCwxOCArMTkyMiw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVMaXZlRG9jdW1l
bnRzTGlzdChXS0FycmF5UmVmIGxpdmVEb2N1bWVudExpc3QpCiAKICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBTdHJpbmc+IGRvY3VtZW50SW5mbzsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bURvY3VtZW50czsgKytpKSB7Ci0gICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0
ZW1BdEluZGV4KGxpdmVEb2N1bWVudExpc3QsIGkpOwotICAgICAgICBpZiAoaXRlbSAmJiBXS0dl
dFR5cGVJRChpdGVtKSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSkgewotICAgICAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIGxpdmVEb2N1bWVudEl0ZW0gPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KGl0ZW0pOwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaWRL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJpZCIpKTsKLSAgICAg
ICAgICAgIFdLVUludDY0UmVmIGRvY3VtZW50SUQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsaXZlRG9jdW1lbnRJdGVtLCBpZEtleS5nZXQoKSkp
OwotCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidXJsIikpOwotICAgICAgICAgICAgV0tT
dHJpbmdSZWYgZG9jdW1lbnRVUkwgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShsaXZlRG9jdW1lbnRJdGVtLCB1cmxLZXkuZ2V0KCkpKTsKLQotICAg
ICAgICAgICAgZG9jdW1lbnRJbmZvLmFkZChXS1VJbnQ2NEdldFZhbHVlKGRvY3VtZW50SUQpLCB0
b1dURlN0cmluZyhkb2N1bWVudFVSTCkpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIGRp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUoV0tBcnJheUdldEl0ZW1BdEluZGV4KGxpdmVEb2N1
bWVudExpc3QsIGkpKSkKKyAgICAgICAgICAgIGRvY3VtZW50SW5mby5hZGQodWludDY0VmFsdWUo
ZGljdGlvbmFyeSwgImlkIiksIHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKGRpY3Rpb25hcnksICJ1
cmwiKSkpOwogICAgIH0KIAogICAgIGlmICghZG9jdW1lbnRJbmZvLnNpemUoKSkgewpAQCAtMjAw
Nyw2MCArMTk1NSwzNSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBpZiAobV9z
dGF0ZSAhPSBSdW5uaW5nVGVzdCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19j
YXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3ViTWVzc2FnZSIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc3ViTWVzc2Fn
ZU5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCkpKTsKLQotICAgICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNl
RG93biIpIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJN
b3VzZVVwIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBidXR0b25L
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCdXR0b24iKSk7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBidXR0b24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV0tVSW50
NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbktleS5nZXQoKSkpKSk7CisgICAgICAg
IGF1dG8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAg
IGF1dG8gc3ViTWVzc2FnZU5hbWUgPSBzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAiU3ViTWVzc2Fn
ZSIpOwogCi0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXJzIikpOwot
ICAgICAgICAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2FzdDxXS0V2
ZW50TW9kaWZpZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9kaWZpZXJz
S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCi0g
ICAgICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFt
ZSwgIk1vdXNlRG93biIpKQotICAgICAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91
c2VEb3duKGJ1dHRvbiwgbW9kaWZpZXJzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlVXAoYnV0dG9uLCBtb2RpZmllcnMpOworICAg
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1v
dXNlRG93biIpKSB7CisgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRG93bih1
aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiksIHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnks
ICJNb2RpZmllcnMiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAorICAgICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNl
VXAiKSkgeworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVVwKHVpbnQ2NFZh
bHVlKGRpY3Rpb25hcnksICJCdXR0b24iKSwgdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlm
aWVycyIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiS2V5RG93biIpKSB7
Ci0gICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmYWxzZSk7CisgICAgICAgICAgICBkaWRSZWNlaXZlS2V5
RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoZGljdGlvbmFyeSwgZmFsc2UpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVNjcm9sbEJ5IikpIHsKLSAgICAgICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB4ID0gV0tEb3VibGVH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gV0tEb3VibGVHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZvcndh
cmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVNj
cm9sbEJ5KHgsIHkpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVNjcm9s
bEJ5KGRvdWJsZVZhbHVlKGRpY3Rpb25hcnksICJYIiksIGRvdWJsZVZhbHVlKGRpY3Rpb25hcnks
ICJZIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJNb3VzZVNjcm9sbEJ5
V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJYIikpOwotICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19j
YXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgeEtleS5nZXQoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJZIikpOwotICAgICAgICAgICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgeUtleS5nZXQoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBoYXNlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUGhhc2UiKSk7Ci0gICAgICAgICAgICBpbnQgcGhhc2UgPSBzdGF0
aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwaGFzZUtleS5n
ZXQoKSkpKSk7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9tZW50dW1L
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb21lbnR1bSIpKTsK
LSAgICAgICAgICAgIGludCBtb21lbnR1bSA9IHN0YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIG1vbWVudHVtS2V5LmdldCgpKSkpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gRm9yd2FyZCB0byBXZWJQcm9jZXNzCisgICAgICAgICAgICBhdXRv
IHggPSBkb3VibGVWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpOworICAgICAgICAgICAgYXV0byB5ID0g
ZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlkiKTsKKyAgICAgICAgICAgIGF1dG8gcGhhc2UgPSB1
aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiUGhhc2UiKTsKKyAgICAgICAgICAgIGF1dG8gbW9tZW50
dW0gPSB1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiTW9tZW50dW0iKTsKICAgICAgICAgICAgIG1f
ZXZlbnRTZW5kZXJQcm94eS0+bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2Vz
KHgsIHksIHBoYXNlLCBtb21lbnR1bSk7Ci0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkBAIC0yMDgzLDQyICsyMDA2LDI2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2Vp
dmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYKICAgICAg
ICAgaWYgKG1fc3RhdGUgIT0gUnVubmluZ1Rlc3QpCiAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIobnVsbHB0cik7CiAKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFy
eVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+
KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVz
c2FnZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1Yk1lc3Nh
Z2UiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHN1Yk1lc3NhZ2VOYW1lID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBzdWJNZXNzYWdlS2V5LmdldCgpKSk7CisgICAgICAgIGF1dG8gZGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gc3ViTWVzc2FnZU5hbWUg
PSBzdHJpbmdWYWx1ZShkaWN0aW9uYXJ5LCAiU3ViTWVzc2FnZSIpOwogCiAgICAgICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiS2V5RG93biIpKSB7
Ci0gICAgICAgICAgICBkaWRSZWNlaXZlS2V5RG93bk1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0cnVlKTsKLQorICAgICAgICAgICAgZGlkUmVjZWl2ZUtl
eURvd25NZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKGRpY3Rpb25hcnksIHRydWUpOwogICAgICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJN
b3VzZURvd24iKSB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1l
LCAiTW91c2VVcCIpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYnV0
dG9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uIikp
OwotICAgICAgICAgICAgdW5zaWduZWQgYnV0dG9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdL
VUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25LZXkuZ2V0KCkpKSkpOwotCi0g
ICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbW9kaWZpZXJzS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTW9kaWZpZXJzIikpOwotICAgICAgICAg
ICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2FzdDxXS0V2ZW50TW9kaWZp
ZXJzPihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbW9kaWZpZXJzS2V5LmdldCgp
KSkpKTsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2Fn
ZU5hbWUsICJNb3VzZURvd24iKSkgeworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5t
b3VzZURvd24odWludDY0VmFsdWUoZGljdGlvbmFyeSwgIkJ1dHRvbiIpLCB1aW50NjRWYWx1ZShk
aWN0aW9uYXJ5LCAiTW9kaWZpZXJzIikpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKG51bGxwdHIpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEZvcndhcmQgdG8g
V2ViUHJvY2VzcwotICAgICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
c3ViTWVzc2FnZU5hbWUsICJNb3VzZURvd24iKSkKLSAgICAgICAgICAgICAgICBtX2V2ZW50U2Vu
ZGVyUHJveHktPm1vdXNlRG93bihidXR0b24sIG1vZGlmaWVycyk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZVVwKGJ1dHRvbiwgbW9k
aWZpZXJzKTsKKyAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVz
c2FnZU5hbWUsICJNb3VzZVVwIikpIHsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+
bW91c2VVcCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiQnV0dG9uIiksIHVpbnQ2NFZhbHVlKGRp
Y3Rpb25hcnksICJNb2RpZmllcnMiKSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIk1vdXNlTW92ZVRvIikpIHsKLSAgICAgICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB4ID0gV0tEb3VibGVH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIHhLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gV0tEb3VibGVHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHlLZXkuZ2V0KCkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZvcndh
cmQgdG8gV2ViUHJvY2VzcwotICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5tb3VzZU1v
dmVUbyh4LCB5KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VNb3ZlVG8o
ZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlgiKSwgZG91YmxlVmFsdWUoZGljdGlvbmFyeSwgIlki
KSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAg
ICAgIH0KIApAQCAtMjE0NCw4MSArMjA1MSw0OCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRS
ZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmCiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIk1vdXNlRm9yY2VDaGFuZ2VkIikpIHsKLSAgICAgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBmb3JjZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkZvcmNlIikpOwotICAgICAgICAgICAgZG91YmxlIGZvcmNlID0gV0tEb3VibGVH
ZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGZvcmNlS2V5LmdldCgpKSkpOwotCi0gICAgICAgICAg
ICBtX2V2ZW50U2VuZGVyUHJveHktPm1vdXNlRm9yY2VDaGFuZ2VkKGZvcmNlKTsKKyAgICAgICAg
ICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+bW91c2VGb3JjZUNoYW5nZWQoZG91YmxlVmFsdWUoZGlj
dGlvbmFyeSwgIkZvcmNlIikpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KG51bGxwdHIpOwogICAgICAgICB9CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAgICAgICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiQ29udGlu
dW91c01vdXNlU2Nyb2xsQnkiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwot
ICAgICAgICAgICAgZG91YmxlIHggPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91
YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
eEtleS5nZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAgICAg
ICAgICAgZG91YmxlIHkgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeUtleS5n
ZXQoKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhZ2VkS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGFnZWQiKSk7Ci0gICAg
ICAgICAgICBib29sIHBhZ2VkID0gc3RhdGljX2Nhc3Q8Ym9vbD4oV0tVSW50NjRHZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIHBhZ2VkS2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgLy8gRm9y
d2FyZCB0byBXZWJQcm9jZXNzCisgICAgICAgICAgICBhdXRvIHggPSBkb3VibGVWYWx1ZShkaWN0
aW9uYXJ5LCAiWCIpOworICAgICAgICAgICAgYXV0byB5ID0gZG91YmxlVmFsdWUoZGljdGlvbmFy
eSwgIlkiKTsKKyAgICAgICAgICAgIGF1dG8gcGFnZWQgPSBib29sZWFuVmFsdWUoZGljdGlvbmFy
eSwgIlBhZ2VkIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPmNvbnRpbnVvdXNN
b3VzZVNjcm9sbEJ5KHgsIHksIHBhZ2VkKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKHN1Yk1lc3NhZ2VOYW1lLCAiTGVhcEZvcndhcmQiKSkgewotICAgICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lSW5NaWxsaXNlY29uZHMiKSk7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCB0aW1lID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCB0aW1lS2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5sZWFwRm9yd2FyZCh0aW1lKTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5k
ZXJQcm94eS0+bGVhcEZvcndhcmQodWludDY0VmFsdWUoZGljdGlvbmFyeSwgIlRpbWVJbk1pbGxp
c2Vjb25kcyIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRy
KTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJBZGRUb3VjaFBvaW50
IikpIHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB4S2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWCIpKTsKLSAgICAgICAgICAgIGludCB4
ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgeEtl
eS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB5S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiWSIpKTsKLSAgICAgICAg
ICAgIGludCB5ID0gc3RhdGljX2Nhc3Q8aW50PihXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgeUtleS5nZXQoKSkpKSk7Ci0KLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+
YWRkVG91Y2hQb2ludCh4LCB5KTsKKyAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+YWRk
VG91Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiWCIpLCB1aW50NjRWYWx1ZShkaWN0
aW9uYXJ5LCAiWSIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxs
cHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKHN1Yk1lc3NhZ2VOYW1lLCAiVXBkYXRlVG91Y2hQb2ludCIpKSB7Ci0gICAgICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHN0YXRp
Y19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGluZGV4S2V5Lmdl
dCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJYIikpOwotICAgICAgICAgICAg
aW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tV
SW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCB4S2V5LmdldCgpKSkpKTsKLQotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJZIikpOwotICAg
ICAgICAgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCB5S2V5LmdldCgpKSkpKTsKLQorICAgICAgICAgICAgYXV0byBpbmRleCA9IHVp
bnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJbmRleCIpOworICAgICAgICAgICAgYXV0byB4ID0gdWlu
dDY0VmFsdWUoZGljdGlvbmFyeSwgIlgiKTsKKyAgICAgICAgICAgIGF1dG8geSA9IHVpbnQ2NFZh
bHVlKGRpY3Rpb25hcnksICJZIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnVw
ZGF0ZVRvdWNoUG9pbnQoaW5kZXgsIHgsIHkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoc3ViTWVzc2FnZU5hbWUsICJTZXRUb3VjaE1vZGlmaWVyIikpIHsK
LSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtb2RpZmllcktleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1vZGlmaWVyIikpOwotICAgICAgICAg
ICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciA9IHN0YXRpY19jYXN0PFdLRXZlbnRNb2RpZmll
cnM+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBtb2RpZmllcktleS5nZXQoKSkp
KSk7Ci0KLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbmFibGVLZXkgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFbmFibGUiKSk7Ci0gICAgICAg
ICAgICBib29sIGVuYWJsZSA9IHN0YXRpY19jYXN0PGJvb2w+KFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBlbmFibGVLZXkuZ2V0KCkpKSkpOwotCisgICAgICAgICAgICBhdXRvIG1v
ZGlmaWVyID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwgIk1vZGlmaWVyIik7CisgICAgICAgICAg
ICBhdXRvIGVuYWJsZSA9IGJvb2xlYW5WYWx1ZShkaWN0aW9uYXJ5LCAiRW5hYmxlIik7CiAgICAg
ICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnNldFRvdWNoTW9kaWZpZXIobW9kaWZpZXIsIGVu
YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJN
ZXNzYWdlTmFtZSwgIlNldFRvdWNoUG9pbnRSYWRpdXMiKSkgewotICAgICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJSYWRpdXNYIikpOwotICAgICAgICAgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+
KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB4S2V5LmdldCgpKSkpKTsKLQotICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSYWRpdXNZIikpOwotICAgICAgICAgICAgaW50IHkgPSBz
dGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB5S2V5Lmdl
dCgpKSkpKTsKLQorICAgICAgICAgICAgYXV0byB4ID0gdWludDY0VmFsdWUoZGljdGlvbmFyeSwg
IlJhZGl1c1giKTsKKyAgICAgICAgICAgIGF1dG8geSA9IHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnks
ICJSYWRpdXNZIik7CiAgICAgICAgICAgICBtX2V2ZW50U2VuZGVyUHJveHktPnNldFRvdWNoUG9p
bnRSYWRpdXMoeCwgeSk7CiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0cik7CiAgICAgICAgIH0KQEAgLTIyNDksMTYgKzIxMjMsMTIgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0
cmluZ1JlZgogICAgICAgICB9CiAKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoc3ViTWVzc2FnZU5hbWUsICJSZWxlYXNlVG91Y2hQb2ludCIpKSB7Ci0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJJbmRleCIpKTsKLSAgICAgICAgICAgIGludCBpbmRleCA9IHN0
YXRpY19jYXN0PGludD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGluZGV4S2V5
LmdldCgpKSkpKTsKLSAgICAgICAgICAgIG1fZXZlbnRTZW5kZXJQcm94eS0+cmVsZWFzZVRvdWNo
UG9pbnQoaW5kZXgpOworICAgICAgICAgICAgbV9ldmVudFNlbmRlclByb3h5LT5yZWxlYXNlVG91
Y2hQb2ludCh1aW50NjRWYWx1ZShkaWN0aW9uYXJ5LCAiSW5kZXgiKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdWJNZXNzYWdlTmFtZSwgIkNhbmNlbFRv
dWNoUG9pbnQiKSkgewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGluZGV4
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSW5kZXgiKSk7Ci0g
ICAgICAgICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KFdLVUludDY0R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBpbmRleEtleS5nZXQoKSkpKSk7Ci0gICAgICAgICAgICBtX2V2ZW50
U2VuZGVyUHJveHktPmNhbmNlbFRvdWNoUG9pbnQoaW5kZXgpOworICAgICAgICAgICAgbV9ldmVu
dFNlbmRlclByb3h5LT5jYW5jZWxUb3VjaFBvaW50KHVpbnQ2NFZhbHVlKGRpY3Rpb25hcnksICJJ
bmRleCIpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsK
ICAgICAgICAgfQogI2VuZGlmCkBAIC0yMjc1LDE0ICsyMTQ1LDE2IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tT
dHJpbmdSZWYKICAgICB9OwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRBbHdheXNBY2NlcHRDb29raWVzIikpIHsKLSAgICAgICAgV0tCb29s
ZWFuUmVmIGFjY2VwdCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBXS0hUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5ID0gV0tCb29sZWFuR2V0VmFs
dWUoYWNjZXB0KSA/IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMgOiBrV0tIVFRQQ29v
a2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47CisgICAgICAgIGF1dG8g
cG9saWN5ID0gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNz
YWdlQm9keSkpCisgICAgICAgICAgICA/IGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMK
KyAgICAgICAgICAgIDoga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3Vt
ZW50RG9tYWluOwogICAgICAgICByZXR1cm4gc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE9ubHlBY2NlcHRGaXJzdFBh
cnR5Q29va2llcyIpKSB7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBhY2NlcHQgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tIVFRQQ29va2llQWNjZXB0
UG9saWN5IHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKGFjY2VwdCkgPyBrV0tIVFRQQ29va2ll
QWNjZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIDoga1dLSFRUUENv
b2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOworICAgICAgICBhdXRv
IHBvbGljeSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpKQorICAgICAgICAgICAgPyBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5RXhjbHVz
aXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluCisgICAgICAgICAgICA6IGtXS0hUVFBDb29raWVB
Y2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKICAgICAgICAgcmV0dXJuIHNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgfQogCkBAIC0yNDAzLDEyICsyMjc1LDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wgc2hvdWxkQmxvY2spCiAKICNpZiBQTEFURk9STShNQUMp
CiAgICAgYXV0byBwb2xpY3kgPSBzaG91bGRCbG9jayA/IGtXS1BsdWdpbkxvYWRDbGllbnRQb2xp
Y3lCbG9jayA6IGtXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3lBbGxvdzsKLQotICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBuYW1lTmV0c2NhcGUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1Z2luIikpOwotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lRmxhc2ggPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luIikpOwotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbXB0eVN0cmluZyA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKLSAgICBXS0NvbnRleHRTZXRQbHVnaW5Mb2FkQ2xp
ZW50UG9saWN5KG1fY29udGV4dC5nZXQoKSwgcG9saWN5LCBlbXB0eVN0cmluZy5nZXQoKSwgbmFt
ZU5ldHNjYXBlLmdldCgpLCBlbXB0eVN0cmluZy5nZXQoKSk7Ci0gICAgV0tDb250ZXh0U2V0UGx1
Z2luTG9hZENsaWVudFBvbGljeShtX2NvbnRleHQuZ2V0KCksIHBvbGljeSwgZW1wdHlTdHJpbmcu
Z2V0KCksIG5hbWVGbGFzaC5nZXQoKSwgZW1wdHlTdHJpbmcuZ2V0KCkpOworICAgIFdLQ29udGV4
dFNldFBsdWdpbkxvYWRDbGllbnRQb2xpY3kobV9jb250ZXh0LmdldCgpLCBwb2xpY3ksIHRvV0so
IiIpLmdldCgpLCB0b1dLKCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1Z2luIikuZ2V0KCksIHRv
V0soIiIpLmdldCgpKTsKKyAgICBXS0NvbnRleHRTZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KG1f
Y29udGV4dC5nZXQoKSwgcG9saWN5LCB0b1dLKCIiKS5nZXQoKSwgdG9XSygiY29tLm1hY3JvbWVk
aWEuRmxhc2ggUGxheWVyLnBsdWdpbiIpLmdldCgpLCB0b1dLKCIiKS5nZXQoKSk7CiAjZW5kaWYK
IH0KIApAQCAtMjQyMywyOSArMjI5MSwyNCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRQbHVn
aW5TdXBwb3J0ZWRNb2RlKGNvbnN0IFN0cmluZyYgbW9kZSkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBlbXB0eUFycmF5ID0gYWRv
cHRXSyhXS011dGFibGVBcnJheUNyZWF0ZSgpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gYWxsT3JpZ2lucyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3BlY2lmaWNPcmlnaW4gPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsb2NhbGhvc3QiKSk7Ci0KLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gcGRmTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIk15IHBlcnNvbmFsIFBERiIpKTsKLSAgICBXS0NvbnRleHRBZGRTdXBwb3J0
ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBhbGxPcmlnaW5zLmdldCgpLCBwZGZOYW1lLmdldCgp
LCBlbXB0eUFycmF5LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICBhdXRvIGVtcHR5QXJy
YXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG5hbWVOZXRzY2FwZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImNvbS5hcHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4iKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlTmV0c2NhcGUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIikpOwot
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5UmVmPiBtaW1lVHlwZXNOZXRzY2FwZSA9IGFk
b3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7Ci0gICAgV0tBcnJheUFwcGVuZEl0ZW0obWlt
ZVR5cGVzTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlTmV0c2NhcGUuZ2V0KCkpOworICAgIFdLQ29u
dGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0soIiIpLmdldCgpLCB0
b1dLKCJNeSBwZXJzb25hbCBQREYiKS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJh
eS5nZXQoKSk7CiAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZVBkZiA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdCBidWlsdC1pbiBQREYiKSk7
CisgICAgYXV0byBuYW1lTmV0c2NhcGUgPSB0b1dLKCJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1
Z2luIik7CisgICAgYXV0byBtaW1lVHlwZXNOZXRzY2FwZSA9IGFkb3B0V0soV0tNdXRhYmxlQXJy
YXlDcmVhdGUoKSk7CisgICAgV0tBcnJheUFwcGVuZEl0ZW0obWltZVR5cGVzTmV0c2NhcGUuZ2V0
KCksIHRvV0soImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKS5nZXQoKSk7Cisg
ICAgYXV0byBuYW1lUGRmID0gdG9XSygiV2ViS2l0IGJ1aWx0LWluIFBERiIpOwogCiAgICAgaWYg
KG1fdW5zdXBwb3J0ZWRQbHVnaW5Nb2RlID09ICJhbGxPcmlnaW5zIikgewotICAgICAgICBXS0Nv
bnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBhbGxPcmlnaW5zLmdldCgp
LCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5
LmdldCgpKTsKLSAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5n
ZXQoKSwgYWxsT3JpZ2lucy5nZXQoKSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwg
ZW1wdHlBcnJheS5nZXQoKSk7CisgICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbiht
X2NvbnRleHQuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVU
eXBlc05ldHNjYXBlLmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250ZXh0
QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygiIikuZ2V0KCksIG5hbWVQ
ZGYuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG1fdW5zdXBwb3J0ZWRQbHVnaW5Nb2RlID09ICJzcGVj
aWZpY09yaWdpbiIpIHsKLSAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKG1fY29u
dGV4dC5nZXQoKSwgc3BlY2lmaWNPcmlnaW4uZ2V0KCksIG5hbWVOZXRzY2FwZS5nZXQoKSwgbWlt
ZVR5cGVzTmV0c2NhcGUuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwotICAgICAgICBXS0NvbnRl
eHRBZGRTdXBwb3J0ZWRQbHVnaW4obV9jb250ZXh0LmdldCgpLCBzcGVjaWZpY09yaWdpbi5nZXQo
KSwgbmFtZVBkZi5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSwgZW1wdHlBcnJheS5nZXQoKSk7Cisg
ICAgICAgIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihtX2NvbnRleHQuZ2V0KCksIHRvV0so
ImxvY2FsaG9zdCIpLmdldCgpLCBuYW1lTmV0c2NhcGUuZ2V0KCksIG1pbWVUeXBlc05ldHNjYXBl
LmdldCgpLCBlbXB0eUFycmF5LmdldCgpKTsKKyAgICAgICAgV0tDb250ZXh0QWRkU3VwcG9ydGVk
UGx1Z2luKG1fY29udGV4dC5nZXQoKSwgdG9XSygibG9jYWxob3N0IikuZ2V0KCksIG5hbWVQZGYu
Z2V0KCksIGVtcHR5QXJyYXkuZ2V0KCksIGVtcHR5QXJyYXkuZ2V0KCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogfQpAQCAtMjQ5MSwxNCArMjM1NCwxMiBAQCBib29sIFRlc3RDb250cm9sbGVy
OjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFdLUGFnZVJlZiBwYWdlLCBX
S1BybwogewogICAgIGlmIChtX3Nob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UpCiAgICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPm91dHB1dFRleHQoImNhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VcbiIpOwotICAgIFdLUHJvdGVjdGlvblNw
YWNlQXV0aGVudGljYXRpb25TY2hlbWUgYXV0aGVudGljYXRpb25TY2hlbWUgPSBXS1Byb3RlY3Rp
b25TcGFjZUdldEF1dGhlbnRpY2F0aW9uU2NoZW1lKHByb3RlY3Rpb25TcGFjZSk7Ci0gICAgCi0g
ICAgaWYgKGF1dGhlbnRpY2F0aW9uU2NoZW1lID09IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRp
Y2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkKSB7Ci0gICAgICAgIHN0
ZDo6c3RyaW5nIGhvc3QgPSB0b1NURChhZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29weUhvc3Qo
cHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkpOworICAgIGF1dG8gc2NoZW1lID0gV0tQcm90ZWN0aW9u
U3BhY2VHZXRBdXRoZW50aWNhdGlvblNjaGVtZShwcm90ZWN0aW9uU3BhY2UpOworICAgIGlmIChz
Y2hlbWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVTZXJ2ZXJUcnVz
dEV2YWx1YXRpb25SZXF1ZXN0ZWQpIHsKKyAgICAgICAgYXV0byBob3N0ID0gdG9TVEQoYWRvcHRX
SyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rpb25TcGFjZSkpKTsKICAgICAgICAg
cmV0dXJuIGhvc3QgPT0gImxvY2FsaG9zdCIgfHwgaG9zdCA9PSAiMTI3LjAuMC4xIiB8fCAobV9h
bGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMgJiYgbV9hbGxvd2VkSG9zdHMu
ZmluZChob3N0KSAhPSBtX2FsbG93ZWRIb3N0cy5lbmQoKSk7CiAgICAgfQotICAgIAotICAgIHJl
dHVybiBhdXRoZW50aWNhdGlvblNjaGVtZSA8PSBrV0tQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNh
dGlvblNjaGVtZUhUVFBEaWdlc3QgfHwgYXV0aGVudGljYXRpb25TY2hlbWUgPT0ga1dLUHJvdGVj
dGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVPQXV0aDsKKyAgICByZXR1cm4gc2NoZW1lIDw9
IGtXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdCB8fCBzY2hl
bWUgPT0ga1dLUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVPQXV0aDsKIH0KIAog
dm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTmF2aWdhdGlvbihXS1BhZ2VSZWYgcGFnZSwg
V0tOYXZpZ2F0aW9uUmVmIG5hdmlnYXRpb24pCkBAIC0yNTA2LDggKzIzNjcsNyBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpkaWRGaW5pc2hOYXZpZ2F0aW9uKFdLUGFnZVJlZiBwYWdlLCBXS05hdmln
YXRpb25SZWYgbmF2aWdhdAogICAgIGlmIChtX3N0YXRlICE9IFJlc2V0dGluZykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMID0gYWRvcHRXSyhXS0Zy
YW1lQ29weVVSTChXS1BhZ2VHZXRNYWluRnJhbWUocGFnZSkpKTsKLSAgICBpZiAoIVdLVVJMSXNF
cXVhbCh3a1VSTC5nZXQoKSwgYmxhbmtVUkwoKSkpCisgICAgaWYgKCFXS1VSTElzRXF1YWwoYWRv
cHRXSyhXS0ZyYW1lQ29weVVSTChXS1BhZ2VHZXRNYWluRnJhbWUocGFnZSkpKS5nZXQoKSwgYmxh
bmtVUkwoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZG9uZVJlc2V0dGluZyA9IHRydWU7
CkBAIC0yNTI3LDcgKzIzODcsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmIHBhZ2UsIFdLQXV0aGVudAogICAgICAgICBt
X3NlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCsrOwogCiAgICAgICAgIGlm
IChtX2FsbG93c0FueVNTTENlcnRpZmljYXRlKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxX
S0NyZWRlbnRpYWxSZWY+IGNyZWRlbnRpYWwgPSBhZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh0
b1dLKCJhY2NlcHQgc2VydmVyIHRydXN0IikuZ2V0KCksIHRvV0soIiIpLmdldCgpLCBrV0tDcmVk
ZW50aWFsUGVyc2lzdGVuY2VOb25lKSk7CisgICAgICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBh
ZG9wdFdLKFdLQ3JlZGVudGlhbENyZWF0ZSh0b1dLKCJhY2NlcHQgc2VydmVyIHRydXN0IikuZ2V0
KCksIHRvV0soIiIpLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSk7CiAgICAg
ICAgICAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVj
aXNpb25MaXN0ZW5lciwgY3JlZGVudGlhbC5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KQEAgLTI1NDEsOSArMjQwMSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXS1BhZ2VSZWYgcGFnZSwgV0tBdXRoZW50CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBob3N0ID0gdG9TVEQoYWRv
cHRXSyhXS1Byb3RlY3Rpb25TcGFjZUNvcHlIb3N0KHByb3RlY3Rpb25TcGFjZSkpLmdldCgpKTsK
KyAgICBhdXRvIGhvc3QgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLUHJvdGVjdGlvblNwYWNlQ29w
eUhvc3QocHJvdGVjdGlvblNwYWNlKSkuZ2V0KCkpOwogICAgIGludCBwb3J0ID0gV0tQcm90ZWN0
aW9uU3BhY2VHZXRQb3J0KHByb3RlY3Rpb25TcGFjZSk7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBt
YWtlU3RyaW5nKGhvc3QuY19zdHIoKSwgJzonLCBwb3J0LCAiIC0gZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlIC0gIiwgdG9TdHJpbmcoYXV0aGVudGljYXRpb25TY2hlbWUpLCAiIC0g
Iik7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSBtYWtlU3RyaW5nKGhvc3QsICc6JywgcG9ydCwgIiAt
IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAtICIsIHRvU3RyaW5nKGF1dGhlbnRp
Y2F0aW9uU2NoZW1lKSwgIiAtICIpOwogICAgIGlmICghbV9oYW5kbGVzQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VzKQogICAgICAgICBtZXNzYWdlLmFwcGVuZCgiU2ltdWxhdGluZyBjYW5jZWxsZWQg
YXV0aGVudGljYXRpb24gc2hlZXRcbiIpOwogICAgIGVsc2UKQEAgLTI1NTQsMTMgKzI0MTQsMTEg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KFdLUGFnZVJlZiBwYWdlLCBXS0F1dGhlbnQKICAgICAgICAgV0tBdXRoZW50aWNhdGlvbkRlY2lz
aW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKGRlY2lzaW9uTGlzdGVuZXIsIDApOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1c2VybmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9hdXRoZW50aWNhdGlvblVzZXJu
YW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFzc3dv
cmQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1fYXV0aGVudGljYXRp
b25QYXNzd29yZC51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tDcmVkZW50aWFs
UmVmPiBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRpYWxDcmVhdGUodXNlcm5hbWUuZ2V0
KCksIHBhc3N3b3JkLmdldCgpLCBrV0tDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uKSk7
CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHRXSyhXS0NyZWRlbnRpYWxDcmVhdGUodG9XSyht
X2F1dGhlbnRpY2F0aW9uVXNlcm5hbWUpLmdldCgpLCB0b1dLKG1fYXV0aGVudGljYXRpb25QYXNz
d29yZCkuZ2V0KCksIGtXS0NyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24pKTsKICAgICBX
S0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVjaXNpb25MaXN0
ZW5lciwgY3JlZGVudGlhbC5nZXQoKSk7CiB9CiAKLSAgICAKKwogLy8gV0tDb250ZXh0RG93bmxv
YWRDbGllbnQKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZG93bmxvYWREaWRTdGFydChXS0NvbnRl
eHRSZWYgY29udGV4dCwgV0tEb3dubG9hZFJlZiBkb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKQEAgLTI3MDQsOSArMjU2Miw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiAgICAgZGVjaWRlUG9saWN5Rm9yR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdElmUG9zc2libGUoKTsKIH0KIAotdm9pZCBUZXN0Q29udHJv
bGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUg
bG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91Ymxl
IGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRl
QWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92
aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGJvb2wgcHJvdmlkZXNGbG9vckxldmVsLCBkb3VibGUg
Zmxvb3JMZXZlbCkKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBP
cHRpb25hbDxkb3VibGU+IGFsdGl0dWRlLCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJh
Y3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0
aW9uYWw8ZG91YmxlPiBmbG9vckxldmVsKQogewotICAgIG1fZ2VvbG9jYXRpb25Qcm92aWRlci0+
c2V0UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1
ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ks
IHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHByb3ZpZGVz
Rmxvb3JMZXZlbCwgZmxvb3JMZXZlbCk7CisgICAgbV9nZW9sb2NhdGlvblByb3ZpZGVyLT5zZXRQ
b3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGUsIGFsdGl0dWRl
QWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkLCBmbG9vckxldmVsKTsKIH0KIAogdm9pZCBUZXN0Q29u
dHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKFdLU3Ry
aW5nUmVmIGVycm9yTWVzc2FnZSkKQEAgLTI4NTYsOSArMjcxNCw3IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmhhbmRsZUNoZWNrT2ZVc2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luKFdLRnJhbWVS
ZWYgZnJhbWUsCiB7CiAgICAgYXV0byBvcmlnaW5IYXNoID0gdXNlck1lZGlhT3JpZ2luSGFzaCh1
c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbik7CiAgICAgYXV0
byBzYWx0ID0gc2FsdEZvck9yaWdpbihmcmFtZSwgb3JpZ2luSGFzaCk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHNhbHRTdHJpbmcgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKHNhbHQudXRmOCgpLmRhdGEoKSkpOwotCi0gICAgV0tVc2VyTWVkaWFQZXJtaXNz
aW9uQ2hlY2tTZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGNoZWNrUmVxdWVzdCwgc2FsdFN0cmluZy5n
ZXQoKSwgc2V0dGluZ3NGb3JPcmlnaW4ob3JpZ2luSGFzaCkucGVyc2lzdGVudFBlcm1pc3Npb24o
KSk7CisgICAgV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tTZXRVc2VyTWVkaWFBY2Nlc3NJbmZv
KGNoZWNrUmVxdWVzdCwgdG9XSyhzYWx0KS5nZXQoKSwgc2V0dGluZ3NGb3JPcmlnaW4ob3JpZ2lu
SGFzaCkucGVyc2lzdGVudFBlcm1pc3Npb24oKSk7CiB9CiAKIGJvb2wgVGVzdENvbnRyb2xsZXI6
OmhhbmRsZURldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdChXS1NlY3VyaXR5
T3JpZ2luUmVmIG9yaWdpbikKQEAgLTI5MTQsOCArMjc3MCw4IEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFdLUmV0YWluUHRy
PFdLQXJyYXlSZWY+IGF1ZGlvRGV2aWNlVUlEcyA9IGFkb3B0V0soV0tVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdEF1ZGlvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLQXJyYXlSZWY+IHZpZGVvRGV2aWNlVUlEcyA9IGFkb3B0V0soV0tVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdFZpZGVvRGV2aWNlVUlEcyhyZXF1ZXN0KSk7CisgICAgICAgIGF1dG8gYXVkaW9E
ZXZpY2VVSURzID0gYWRvcHRXSyhXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0QXVkaW9EZXZp
Y2VVSURzKHJlcXVlc3QpKTsKKyAgICAgICAgYXV0byB2aWRlb0RldmljZVVJRHMgPSBhZG9wdFdL
KFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RWaWRlb0RldmljZVVJRHMocmVxdWVzdCkpOwog
CiAgICAgICAgIGlmICghV0tBcnJheUdldFNpemUodmlkZW9EZXZpY2VVSURzLmdldCgpKSAmJiAh
V0tBcnJheUdldFNpemUoYXVkaW9EZXZpY2VVSURzLmdldCgpKSkgewogICAgICAgICAgICAgV0tV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdERlbnkocmVxdWVzdCwga1dLTm9Db25zdHJhaW50cyk7
CkBAIC0yOTI2LDEzICsyNzgyLDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRlY2lkZVBvbGlj
eUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgpCiAgICAgICAgIGlmIChX
S0FycmF5R2V0U2l6ZSh2aWRlb0RldmljZVVJRHMuZ2V0KCkpKQogICAgICAgICAgICAgdmlkZW9E
ZXZpY2VVSUQgPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0
SW5kZXgodmlkZW9EZXZpY2VVSURzLmdldCgpLCAwKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHZpZGVvRGV2aWNlVUlEID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiIikpOworICAgICAgICAgICAgdmlkZW9EZXZpY2VVSUQgPSB0b1dLKCIiKTsKIAogICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9EZXZpY2VVSUQ7CiAgICAgICAgIGlmIChX
S0FycmF5R2V0U2l6ZShhdWRpb0RldmljZVVJRHMuZ2V0KCkpKQogICAgICAgICAgICAgYXVkaW9E
ZXZpY2VVSUQgPSByZWludGVycHJldF9jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0
SW5kZXgoYXVkaW9EZXZpY2VVSURzLmdldCgpLCAwKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGF1ZGlvRGV2aWNlVUlEID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiIikpOworICAgICAgICAgICAgYXVkaW9EZXZpY2VVSUQgPSB0b1dLKCIiKTsKIAogICAgICAg
ICBXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0QWxsb3cocmVxdWVzdCwgYXVkaW9EZXZpY2VV
SUQuZ2V0KCksIHZpZGVvRGV2aWNlVUlELmdldCgpKTsKICAgICB9CkBAIC0zMDU2LDEyICsyOTEy
LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEo
V0tOYXZpZ2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW8KICAgICBpZiAoIW1fc2hvdWxkTG9nSGlzdG9y
eUNsaWVudENhbGxiYWNrcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVVJMCiAgICAgYXV0
byB1cmwgPSBhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5VVJMKG5hdmlnYXRpb25EYXRhKSk7
CiAgICAgYXV0byB1cmxTdHJpbmcgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmlu
Zyh1cmwuZ2V0KCkpKSk7Ci0gICAgLy8gVGl0bGUKICAgICBhdXRvIHRpdGxlID0gdG9XVEZTdHJp
bmcoYWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weVRpdGxlKG5hdmlnYXRpb25EYXRhKSkpOwot
ICAgIC8vIEhUVFAgbWV0aG9kCiAgICAgYXV0byByZXF1ZXN0ID0gYWRvcHRXSyhXS05hdmlnYXRp
b25EYXRhQ29weU9yaWdpbmFsUmVxdWVzdChuYXZpZ2F0aW9uRGF0YSkpOwogICAgIGF1dG8gbWV0
aG9kID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1
ZXN0LmdldCgpKSkpOwogCkBAIC0zMjA2LDcgKzMwNTksNyBAQCB2b2lkIGdldEFsbFN0b3JhZ2VB
Y2Nlc3NFbnRyaWVzQ2FsbGJhY2sodm9pZCogdXNlckRhdGEsIFdLQXJyYXlSZWYgZG9tYWluTGlz
dCkKIAogICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdERvbWFpbnM7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKGRvbWFpbkxpc3QpOyBpKyspIHsKLSAgICAgICAg
YXV0byBkb21haW4gPSAgcmVpbnRlcnByZXRfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0
ZW1BdEluZGV4KGRvbWFpbkxpc3QsIGkpKTsKKyAgICAgICAgYXV0byBkb21haW4gPSByZWludGVy
cHJldF9jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWluTGlzdCwg
aSkpOwogICAgICAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6dmVjdG9yPGNoYXI+KFdLU3RyaW5nR2V0
TWF4aW11bVVURjhDU3RyaW5nU2l6ZShkb21haW4pKTsKICAgICAgICAgYXV0byBzdHJpbmdMZW5n
dGggPSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGRvbWFpbiwgYnVmZmVyLmRhdGEoKSwgYnVmZmVy
LnNpemUoKSk7CiAKQEAgLTM5NzgsNyArMzgzMSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJl
aW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpCiB2b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50
aWZpZXIpCiB7CiAgICAgSW5BcHBCcm93c2VyUHJpdmFjeUNhbGxiYWNrQ29udGV4dCBjb250ZXh0
KCp0aGlzKTsKLSAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRhdGVCdW5kbGVJZGVudGlmaWVySW5O
ZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpLCBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIudXRmOCgpLmRh
dGEoKSkpLmdldCgpLCAmY29udGV4dCwgaW5BcHBCcm93c2VyUHJpdmFjeVZvaWRSZXN1bHRDYWxs
YmFjayk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlVXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3RvcmUoKSwgdG9XSyhidW5k
bGVJZGVudGlmaWVyKS5nZXQoKSwgJmNvbnRleHQsIGluQXBwQnJvd3NlclByaXZhY3lWb2lkUmVz
dWx0Q2FsbGJhY2spOwogICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IGY5NGQ1N2MxNDdi
MzE2ZjA3OGZhODVmMjIwZjQwNzYwOTQxMTNjOGMuLmZmODM5NGVjMDM4NzdhNmRiYzBkYzRiM2U0
OGMwZWY0ZjNmM2IzMzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgK
QEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gR2VvbG9jYXRpb24uCiAg
ICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRv
dWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJv
b2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9v
bCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRv
dWJsZSBzcGVlZCwgYm9vbCBwcm92aWRlc0Zsb29yTGV2ZWwsIGRvdWJsZSBmbG9vckxldmVsKTsK
KyAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91
YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRl
LCBPcHRpb25hbDxkb3VibGU+IGFsdGl0dWRlQWNjdXJhY3ksIE9wdGlvbmFsPGRvdWJsZT4gaGVh
ZGluZywgT3B0aW9uYWw8ZG91YmxlPiBzcGVlZCwgT3B0aW9uYWw8ZG91YmxlPiBmbG9vckxldmVs
KTsKICAgICB2b2lkIHNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihX
S1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UpOwogICAgIHZvaWQgaGFuZGxlR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdChXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RSZWYpOwogICAgIGJv
b2wgaXNHZW9sb2NhdGlvblByb3ZpZGVyQWN0aXZlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IGE1YjZkZDA1NTgwYWUwYzJkOTU3MDc3ZGZl
NDUwYTQ4NmU2ZDAxZWMuLjAzNWQ2M2UwNmI5YjAwYmY4NWNlYjA0ZTY3ZWIzNjkyNjI5YmNmOTEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCkBAIC0yNyw4ICsy
Nyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIK
IAorI2luY2x1ZGUgIkRpY3Rpb25hcnlGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdl
YlZpZXcuaCIKLSNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0Q29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlVJU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldl
YkNvcmVUZXN0U3VwcG9ydC5oIgpAQCAtNjYsMjEgKzY2LDIyIEBAIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKIG5hbWVzcGFjZSBXVFIgewogCitzdGF0aWMgdm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29u
c3QgY2hhciogbmFtZSwgY29uc3QgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiYgYm9keSkKK3sKKyAg
ICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgYm9keS5nZXQo
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvc3RQYWdlTWVzc2FnZShjb25zdCBjaGFyKiBuYW1lKQor
eworICAgIHBvc3RQYWdlTWVzc2FnZShuYW1lLCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHsgfSk7
Cit9CisKIFRlc3RJbnZvY2F0aW9uOjpUZXN0SW52b2NhdGlvbihXS1VSTFJlZiB1cmwsIGNvbnN0
IFRlc3RPcHRpb25zJiBvcHRpb25zKQogICAgIDogbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBt
X3VybCh1cmwpCiAgICAgLCBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJlRlc3RJbnZvY2F0aW9uOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKQog
ewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJM
Q29weVN0cmluZyhtX3VybC5nZXQoKSkpOwotCi0gICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IFdL
U3RyaW5nR2V0TGVuZ3RoKHVybFN0cmluZy5nZXQoKSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gdXJs
VmVjdG9yOwotICAgIHVybFZlY3Rvci5yZXNpemUoc3RyaW5nTGVuZ3RoICsgMSk7Ci0KLSAgICBX
S1N0cmluZ0dldFVURjhDU3RyaW5nKHVybFN0cmluZy5nZXQoKSwgdXJsVmVjdG9yLmRhdGEoKSwg
c3RyaW5nTGVuZ3RoICsgMSk7Ci0KLSAgICBtX3VybFN0cmluZyA9IFN0cmluZyh1cmxWZWN0b3Iu
ZGF0YSgpLCBzdHJpbmdMZW5ndGgpOworICAgIG1fdXJsU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRv
cHRXSyhXS1VSTENvcHlTdHJpbmcobV91cmwuZ2V0KCkpKS5nZXQoKSk7CiAKICAgICAvLyBGSVhN
RTogQXZvaWQgbXV0YXRpbmcgdGhlIHNldHRpbmcgdmlhIGEgdGVzdCBkaXJlY3RvcnkgbGlrZSB0
aGlzLgogICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IHVybENvbnRhaW5zKCJsb2FkaW5n
LyIpICYmICF1cmxDb250YWlucygiOi8vbG9jYWxob3N0Iik7CkBAIC0xMjksMjggKzEzMCwxMiBA
QCBib29sIFRlc3RJbnZvY2F0aW9uOjpzaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKCkg
Y29uc3QKIAogV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gVGVzdEludm9jYXRp
b246OmNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkoKQogewotICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZURpY3Rpb25hcnlSZWY+IGJlZ2luVGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011
dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHVzZUZsZXhpYmxlVmlld3BvcnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJVc2VGbGV4aWJsZVZpZXdwb3J0IikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVh
blJlZj4gdXNlRmxleGlibGVWaWV3cG9ydFZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUo
b3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCB1c2VGbGV4aWJsZVZpZXdwb3J0S2V5LmdldCgp
LCB1c2VGbGV4aWJsZVZpZXdwb3J0VmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGR1bXBQaXhlbHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJEdW1wUGl4ZWxzIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gZHVt
cFBpeGVsc1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wUGl4ZWxzKSk7Ci0g
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwgZHVtcFBp
eGVsc0tleS5nZXQoKSwgZHVtcFBpeGVsc1ZhbHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB0aW1lb3V0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVGltZW91dCIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gdGltZW91
dFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtX3RpbWVvdXQubWlsbGlzZWNvbmRzKCkp
KTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCB0
aW1lb3V0S2V5LmdldCgpLCB0aW1lb3V0VmFsdWUuZ2V0KCkpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycktleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpKTsKLSAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyclZhbHVl
ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpKTsK
LSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCBkdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnJLZXkuZ2V0KCksIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyclZh
bHVlLmdldCgpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlc0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIikpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc1ZhbHVlID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhvcHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRl
ZEltYWdlVHlwZXMuY19zdHIoKSkpOwotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0
TWVzc2FnZUJvZHkuZ2V0KCksIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzS2V5LmdldCgp
LCBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc1ZhbHVlLmdldCgpKTsKLQorICAgIGF1dG8g
YmVnaW5UZXN0TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUo
KSk7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJVc2VGbGV4aWJsZVZpZXdw
b3J0Iiwgb3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQpOworICAgIHNldFZhbHVlKGJlZ2lu
VGVzdE1lc3NhZ2VCb2R5LCAiRHVtcFBpeGVscyIsIG1fZHVtcFBpeGVscyk7CisgICAgc2V0VmFs
dWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJUaW1lb3V0Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1fdGltZW91dC5taWxsaXNlY29uZHMoKSkpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3Nh
Z2VCb2R5LCAiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgbV9kdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnIpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXMiLCBvcHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlw
ZXMuY19zdHIoKSk7CiAgICAgcmV0dXJuIGJlZ2luVGVzdE1lc3NhZ2VCb2R5OwogfQogCkBAIC0x
NjgsOSArMTUzLDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6aW52b2tlKCkKIAogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgY2xlYXIgb3V0IHZpc2l0ZWQgbGlua3MgaGVyZS4KIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkJlZ2luVGVzdCIpKTsKLSAgICBhdXRvIGJlZ2luVGVzdE1lc3NhZ2VC
b2R5ID0gY3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpOwotICAgIFdLUGFnZVBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQmVnaW5UZXN0IiwgY3JlYXRlVGVzdFNldHRpbmdz
RGljdGlvbmFyeSgpKTsKIAogICAgIG1fc3RhcnRlZFRlc3RpbmcgPSB0cnVlOwogCkBAIC0zMjcs
MTg1ICszMTAsMTA0IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJv
bUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBY2siKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBtZXNzYWdlQm9keVN0cmluZyA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VCb2R5U3RyaW5nLCAiQmVnaW5UZXN0IikpIHsKKyAgICAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkp
LCAiQmVnaW5UZXN0IikpIHsKICAgICAgICAgICAgIG1fZ290SW5pdGlhbFJlc3BvbnNlID0gdHJ1
ZTsKICAgICAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ub3RpZnlEb25lKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIkRvbmUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5
UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
bWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJl
c3VsdElzUGVuZGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlBpeGVsUmVzdWx0SXNQZW5kaW5nIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcGl4ZWxSZXN1
bHRJc1BlbmRpbmcgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwaXhlbFJlc3VsdElzUGVuZGluZ0tleS5n
ZXQoKSkpOwotICAgICAgICBtX3BpeGVsUmVzdWx0SXNQZW5kaW5nID0gV0tCb29sZWFuR2V0VmFs
dWUocGl4ZWxSZXN1bHRJc1BlbmRpbmcpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgbV9waXhlbFJl
c3VsdElzUGVuZGluZyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJQaXhl
bFJlc3VsdElzUGVuZGluZyIpOwogICAgICAgICBpZiAoIW1fcGl4ZWxSZXN1bHRJc1BlbmRpbmcp
IHsKLSAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0IikpOwot
ICAgICAgICAgICAgbV9waXhlbFJlc3VsdCA9IHN0YXRpY19jYXN0PFdLSW1hZ2VSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwaXhlbFJlc3VsdEtl
eS5nZXQoKSkpOworICAgICAgICAgICAgbV9waXhlbFJlc3VsdCA9IHN0YXRpY19jYXN0PFdLSW1h
Z2VSZWY+KHZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlBpeGVsUmVzdWx0IikpOwogICAg
ICAgICAgICAgQVNTRVJUKCFtX3BpeGVsUmVzdWx0IHx8IG1fZHVtcFBpeGVscyk7CiAgICAgICAg
IH0KLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVwYWludFJlY3RzS2V5ID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUmVwYWludFJlY3RzIikpOwot
ICAgICAgICBtX3JlcGFpbnRSZWN0cyA9IHN0YXRpY19jYXN0PFdLQXJyYXlSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCByZXBhaW50UmVjdHNLZXku
Z2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXVkaW9SZXN1bHRL
ZXkgPSAgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXVkaW9SZXN1bHQi
KSk7Ci0gICAgICAgIG1fYXVkaW9SZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0RhdGFSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhdWRpb1Jlc3VsdEtl
eS5nZXQoKSkpOwotCisgICAgICAgIG1fcmVwYWludFJlY3RzID0gc3RhdGljX2Nhc3Q8V0tBcnJh
eVJlZj4odmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiUmVwYWludFJlY3RzIikpOworICAg
ICAgICBtX2F1ZGlvUmVzdWx0ID0gc3RhdGljX2Nhc3Q8V0tEYXRhUmVmPih2YWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJBdWRpb1Jlc3VsdCIpKTsKICAgICAgICAgZG9uZSgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJUZXh0T3V0cHV0IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdS
ZWYgdGV4dE91dHB1dCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0g
ICAgICAgIG1fdGV4dE91dHB1dC5hcHBlbmQodG9XVEZTdHJpbmcodGV4dE91dHB1dCkpOworICAg
ICAgICBtX3RleHRPdXRwdXQuYXBwZW5kKHRvV1RGU3RyaW5nKHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEdW1wVG9TdGRFcnIiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS1N0cmluZ1JlZiB0ZXh0T3V0cHV0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIHRvV1RGU3RyaW5n
KHRleHRPdXRwdXQpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVz
IiwgdG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpKS51dGY4KCkuZGF0YSgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiQmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGJlZm9yZVVubG9hZFJldHVyblZhbHVlID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShXS0Jvb2xlYW5HZXRWYWx1
ZShiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbGVhblZhbHVlKG1lc3NhZ2VC
b2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRDaHJvbWVJbnB1dEZpZWxkIikpIHsK
ICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPmFkZENo
cm9tZUlucHV0RmllbGQoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbEFkZENo
cm9tZUlucHV0RmllbGRDYWxsYmFjayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJD
YWxsQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlJl
bW92ZUNocm9tZUlucHV0RmllbGQiKSkgewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpOwotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrIikp
OwotICAgICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IDApOworICAgICAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxSZW1vdmVDaHJvbWVJbnB1dEZpZWxk
Q2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkZvY3VzV2ViVmlldyIpKSB7CiAg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5tYWtlV2Vi
Vmlld0ZpcnN0UmVzcG9uZGVyKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxG
b2N1c1dlYlZpZXdDYWxsYmFjayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVj
dGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxs
Rm9jdXNXZWJWaWV3Q2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QmFja2luZ1Nj
YWxlRmFjdG9yIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgZG91YmxlIGJhY2tpbmdTY2FsZUZhY3Rv
ciA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5
KSk7Ci0gICAgICAgIFdLUGFnZVNldEN1c3RvbUJhY2tpbmdTY2FsZUZhY3RvcihUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBiYWNraW5nU2NhbGVGYWN0
b3IpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxTZXRCYWNraW5nU2NhbGVG
YWN0b3JDYWxsYmFjayIpKTsKLSAgICAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxl
RmFjdG9yKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2Fs
bFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNp
bXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2siKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICB1aW50NjRf
dCBub3RpZmljYXRpb25JRCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRS
ZWY+KG1lc3NhZ2VCb2R5KSk7CisgICAgICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0gdWlu
dDY0VmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldEFkZHNWaXNpdGVkTGlua3MiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tCb29sZWFuUmVmIGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBXS1BhZ2VTZXRBZGRzVmlzaXRlZExpbmtzKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIFdLQm9vbGVhbkdldFZhbHVlKGVu
YWJsZWRXSykpOworICAgICAgICBXS1BhZ2VTZXRBZGRzVmlzaXRlZExpbmtzKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGJvb2xlYW5WYWx1ZShtZXNz
YWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRHZW9sb2NhdGlvblBlcm1pc3Npb24i
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGVuYWJsZWRXSyA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKFdLQm9vbGVhbkdldFZhbHVlKGVu
YWJsZWRXSykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGxhdGl0dWRlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJsYXRpdHVkZSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgbGF0aXR1ZGVXSyA9IHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgbGF0aXR1ZGVLZXlXSy5nZXQoKSkpOwotICAgICAgICBkb3VibGUgbGF0
aXR1ZGUgPSBXS0RvdWJsZUdldFZhbHVlKGxhdGl0dWRlV0spOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBsb25naXR1ZGVLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImxvbmdpdHVkZSIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgbG9uZ2l0
dWRlV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGxvbmdpdHVkZUtleVdLLmdldCgpKSk7Ci0gICAgICAg
IGRvdWJsZSBsb25naXR1ZGUgPSBXS0RvdWJsZUdldFZhbHVlKGxvbmdpdHVkZVdLKTsKLQotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNjdXJhY3lLZXlXSyA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFjY3VyYWN5IikpOwotICAgICAgICBXS0RvdWJs
ZVJlZiBhY2N1cmFjeVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhY2N1cmFjeUtleVdLLmdldCgpKSk7
Ci0gICAgICAgIGRvdWJsZSBhY2N1cmFjeSA9IFdLRG91YmxlR2V0VmFsdWUoYWNjdXJhY3lXSyk7
Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1ZGVLZXlX
SyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzQWx0aXR1
ZGUiKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwcm92aWRlc0FsdGl0dWRlV0sgPSBzdGF0aWNf
Y2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBwcm92aWRlc0FsdGl0dWRlS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBw
cm92aWRlc0FsdGl0dWRlID0gV0tCb29sZWFuR2V0VmFsdWUocHJvdmlkZXNBbHRpdHVkZVdLKTsK
LQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0aXR1ZGVLZXlXSyA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImFsdGl0dWRlIikpOwotICAgICAgICBX
S0RvdWJsZVJlZiBhbHRpdHVkZVdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBhbHRpdHVkZUtleVdLLmdl
dCgpKSk7Ci0gICAgICAgIGRvdWJsZSBhbHRpdHVkZSA9IFdLRG91YmxlR2V0VmFsdWUoYWx0aXR1
ZGVXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzQWx0aXR1
ZGVBY2N1cmFjeUtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
cHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5IikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5V0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3lLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1
cmFjeSA9IFdLQm9vbGVhbkdldFZhbHVlKHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeVdLKTsKLQot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0aXR1ZGVBY2N1cmFjeUtleVdLID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiYWx0aXR1ZGVBY2N1cmFjeSIp
KTsKLSAgICAgICAgV0tEb3VibGVSZWYgYWx0aXR1ZGVBY2N1cmFjeVdLID0gc3RhdGljX2Nhc3Q8
V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBhbHRpdHVkZUFjY3VyYWN5S2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91YmxlIGFsdGl0
dWRlQWNjdXJhY3kgPSBXS0RvdWJsZUdldFZhbHVlKGFsdGl0dWRlQWNjdXJhY3lXSyk7Ci0KLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzSGVhZGluZ0tleVdLID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHJvdmlkZXNIZWFkaW5nIikpOwot
ICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNIZWFkaW5nV0sgPSBzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBwcm92aWRlc0hlYWRpbmdLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzSGVh
ZGluZyA9IFdLQm9vbGVhbkdldFZhbHVlKHByb3ZpZGVzSGVhZGluZ1dLKTsKLQotICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVhZGluZ0tleVdLID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiaGVhZGluZyIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgaGVh
ZGluZ1dLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBoZWFkaW5nS2V5V0suZ2V0KCkpKTsKLSAgICAgICAg
ZG91YmxlIGhlYWRpbmcgPSBXS0RvdWJsZUdldFZhbHVlKGhlYWRpbmdXSyk7Ci0KLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3ZpZGVzU3BlZWRLZXlXSyA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInByb3ZpZGVzU3BlZWQiKSk7Ci0gICAgICAgIFdL
Qm9vbGVhblJlZiBwcm92aWRlc1NwZWVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc1Nw
ZWVkS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwcm92aWRlc1NwZWVkID0gV0tCb29sZWFu
R2V0VmFsdWUocHJvdmlkZXNTcGVlZFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc3BlZWRLZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
InNwZWVkIikpOwotICAgICAgICBXS0RvdWJsZVJlZiBzcGVlZFdLID0gc3RhdGljX2Nhc3Q8V0tE
b3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBzcGVlZEtleVdLLmdldCgpKSk7Ci0gICAgICAgIGRvdWJsZSBzcGVlZCA9IFdLRG91YmxlR2V0
VmFsdWUoc3BlZWRXSyk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHByb3Zp
ZGVzRmxvb3JMZXZlbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygicHJvdmlkZXNGbG9vckxldmVsIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcHJvdmlkZXNG
bG9vckxldmVsV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwcm92aWRlc0Zsb29yTGV2ZWxLZXlXSy5n
ZXQoKSkpOwotICAgICAgICBib29sIHByb3ZpZGVzRmxvb3JMZXZlbCA9IFdLQm9vbGVhbkdldFZh
bHVlKHByb3ZpZGVzRmxvb3JMZXZlbFdLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gZmxvb3JMZXZlbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiZmxvb3JMZXZlbCIpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgZmxvb3JMZXZlbFdLID0g
c3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBmbG9vckxldmVsS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgZG91Ymxl
IGZsb29yTGV2ZWwgPSBXS0RvdWJsZUdldFZhbHVlKGZsb29yTGV2ZWxXSyk7Ci0KLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxh
dGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwg
cHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRp
bmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkLCBwcm92aWRlc0Zsb29yTGV2ZWwsIGZs
b29yTGV2ZWwpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25h
cnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gbGF0aXR1ZGUgPSBkb3VibGVWYWx1
ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJsYXRpdHVkZSIpOworICAgICAgICBhdXRvIGxvbmdp
dHVkZSA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgImxvbmdpdHVkZSIpOwor
ICAgICAgICBhdXRvIGFjY3VyYWN5ID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiYWNjdXJhY3kiKTsKKyAgICAgICAgYXV0byBhbHRpdHVkZSA9IG9wdGlvbmFsRG91YmxlVmFs
dWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiYWx0aXR1ZGUiKTsKKyAgICAgICAgYXV0byBhbHRp
dHVkZUFjY3VyYWN5ID0gb3B0aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJhbHRpdHVkZUFjY3VyYWN5Iik7CisgICAgICAgIGF1dG8gaGVhZGluZyA9IG9wdGlvbmFsRG91
YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiaGVhZGluZyIpOworICAgICAgICBhdXRv
IHNwZWVkID0gb3B0aW9uYWxEb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJzcGVl
ZCIpOworICAgICAgICBhdXRvIGZsb29yTGV2ZWwgPSBvcHRpb25hbERvdWJsZVZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgImZsb29yTGV2ZWwiKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1
ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQs
IGZsb29yTGV2ZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvblVuYXZhaWxhYmxlRXJyb3IiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBl
cnJvck1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAg
ICAgICBXS1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7
CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Q
b3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0VXNlck1lZGlhUGVybWlzc2lvbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNz
aW9uKFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSykpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVybWlzc2lvbihib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTE1LDExNyArNDE3LDY2IEBA
IHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxl
KFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRVc2VyTWVkaWFQZXJzaXN0ZW50UGVybWlz
c2lvbkZvck9yaWdpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYg
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNz
YWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBlcm1pc3Npb25L
ZXlXSyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBlcm1pc3Npb24i
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBwZXJtaXNzaW9uV0sgPSBzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBwZXJtaXNzaW9uS2V5V0suZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBwZXJtaXNzaW9uID0gV0tC
b29sZWFuR2V0VmFsdWUocGVybWlzc2lvbldLKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gb3JpZ2luS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
Zygib3JpZ2luIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW5XSyA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgb3JpZ2luS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHBhcmVudE9yaWdpbktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoInBhcmVudE9yaWdpbiIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luV0sg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHBhcmVudE9yaWdpbktleS5nZXQoKSkpOwotCisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byBwZXJtaXNzaW9uID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgInBlcm1pc3Npb24iKTsKKyAgICAgICAgYXV0byBvcmlnaW5XSyA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIm9yaWdpbiIpOworICAgICAgICBhdXRvIHBhcmVudE9y
aWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAicGFyZW50T3JpZ2lu
Iik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJz
aXN0ZW50UGVybWlzc2lvbkZvck9yaWdpbihwZXJtaXNzaW9uLCBvcmlnaW5XSywgcGFyZW50T3Jp
Z2luV0spOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSZXNldFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0Q291bnRGb3JPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5
UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
bWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5L
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJvcmlnaW4iKSk7Ci0g
ICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbldLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBvcmlnaW5LZXku
Z2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGFyZW50T3JpZ2lu
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicGFyZW50T3JpZ2lu
IikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwYXJlbnRPcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgcGFyZW50T3JpZ2luS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAg
IGF1dG8gb3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJvcmln
aW4iKTsKKyAgICAgICAgYXV0byBwYXJlbnRPcmlnaW5XSyA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgInBhcmVudE9yaWdpbiIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkucmVzZXRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdENvdW50Rm9yT3JpZ2lu
KG9yaWdpbldLLCBwYXJlbnRPcmlnaW5XSyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEN1c3Rv
bVBvbGljeURlbGVnYXRlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJl
ZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1l
c3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW5hYmxlZEtl
eVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZW5hYmxlZCIpKTsK
LSAgICAgICAgV0tCb29sZWFuUmVmIGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGVuYWJs
ZWRLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIGVuYWJsZWQgPSBXS0Jvb2xlYW5HZXRWYWx1
ZShlbmFibGVkV0spOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwZXJtaXNz
aXZlS2V5V0sgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJwZXJtaXNz
aXZlIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgcGVybWlzc2l2ZVdLID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgcGVybWlzc2l2ZUtleVdLLmdldCgpKSk7Ci0gICAgICAgIGJvb2wgcGVybWlzc2l2ZSA9
IFdLQm9vbGVhbkdldFZhbHVlKHBlcm1pc3NpdmVXSyk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIGVuYWJsZWQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiZW5hYmxl
ZCIpOworICAgICAgICBhdXRvIHBlcm1pc3NpdmUgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAicGVybWlzc2l2ZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZW5hYmxlZCwgcGVybWlzc2l2ZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldEhpZGRlbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Rp
Y3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9u
YXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGlzSW5pdGlhbEtleVdLID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
aGlkZGVuIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaGlkZGVuV0sgPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBpc0luaXRpYWxLZXlXSy5nZXQoKSkpOwotICAgICAgICBib29sIGhpZGRlbiA9IFdLQm9v
bGVhbkdldFZhbHVlKGhpZGRlbldLKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0SGlkZGVuKGhpZGRlbik7CisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldEhpZGRlbihib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiaGlkZGVuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJQcm9jZXNzV29ya1F1ZXVlIikp
IHsKLSAgICAgICAgaWYgKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5h
Z2VyKCkucHJvY2Vzc1dvcmtRdWV1ZSgpKSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJXb3JrUXVldWVQcm9jZXNzZWRDYWxsYmFjayIpKTsKLSAgICAgICAgICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCku
cHJvY2Vzc1dvcmtRdWV1ZSgpKQorICAgICAgICAgICAgcG9zdFBhZ2VNZXNzYWdlKCJXb3JrUXVl
dWVQcm9jZXNzZWRDYWxsYmFjayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUJhY2tOYXZp
Z2F0aW9uIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgdWludDY0X3Qgc3RlcENvdW50ID0gV0tVSW50
NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUJh
Y2tOYXZpZ2F0aW9uKHN0ZXBDb3VudCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVCYWNrTmF2aWdhdGlvbih1aW50NjRWYWx1ZSht
ZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUZvcndhcmROYXZpZ2F0aW9u
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2
NEdldFR5cGVJRCgpKTsKLSAgICAgICAgdWludDY0X3Qgc3RlcENvdW50ID0gV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUZvcndhcmRO
YXZpZ2F0aW9uKHN0ZXBDb3VudCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVGb3J3YXJkTmF2aWdhdGlvbih1aW50NjRWYWx1ZSht
ZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUxvYWQiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIGxvYWREYXRhRGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB1cmxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJ1cmwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVybFdLID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5
LCB1cmxLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGFy
Z2V0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidGFyZ2V0Iikp
OwotICAgICAgICBXS1N0cmluZ1JlZiB0YXJnZXRXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgdGFyZ2V0S2V5
LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNob3VsZE9wZW5F
eHRlcm5hbFVSTHNLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJz
aG91bGRPcGVuRXh0ZXJuYWxVUkxzIikpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgc2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1ZhbHVlV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCBzaG91bGRPcGVuRXh0ZXJuYWxV
UkxzS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndv
cmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWQodG9XVEZTdHJpbmcodXJsV0spLCB0b1dURlN0cmlu
Zyh0YXJnZXRXSyksIFdLQm9vbGVhbkdldFZhbHVlKHNob3VsZE9wZW5FeHRlcm5hbFVSTHNWYWx1
ZVdLKSk7CisgICAgICAgIGF1dG8gbG9hZERhdGFEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVl
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byB1cmwgPSB0b1dURlN0cmluZyhzdHJpbmdWYWx1
ZShsb2FkRGF0YURpY3Rpb25hcnksICJ1cmwiKSk7CisgICAgICAgIGF1dG8gdGFyZ2V0ID0gdG9X
VEZTdHJpbmcoc3RyaW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAidGFyZ2V0IikpOworICAg
ICAgICBhdXRvIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMgPSBib29sZWFuVmFsdWUobG9hZERhdGFE
aWN0aW9uYXJ5LCAic2hvdWxkT3BlbkV4dGVybmFsVVJMcyIpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZCh1cmwsIHRhcmdl
dCwgc2hvdWxkT3BlbkV4dGVybmFsVVJMcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9h
ZEhUTUxTdHJpbmciKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIGxv
YWREYXRhRGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJv
ZHkpOwotCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBjb250ZW50S2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29udGVudCIpKTsKLSAgICAgICAg
V0tTdHJpbmdSZWYgY29udGVudFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCBjb250ZW50S2V5LmdldCgpKSk7
Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxLZXkgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJiYXNlVVJMIikpOwotICAgICAgICBXS1N0
cmluZ1JlZiBiYXNlVVJMV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25hcnksIGJhc2VVUkxLZXkuZ2V0KCkpKTsKLQot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkxLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1bnJlYWNoYWJsZVVSTCIpKTsKLSAg
ICAgICAgV0tTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgdW5yZWFj
aGFibGVVUkxLZXkuZ2V0KCkpKTsKLQorICAgICAgICBhdXRvIGxvYWREYXRhRGljdGlvbmFyeSA9
IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gY29udGVudFdLID0g
c3RyaW5nVmFsdWUobG9hZERhdGFEaWN0aW9uYXJ5LCAiY29udGVudCIpOworICAgICAgICBhdXRv
IGJhc2VVUkxXSyA9IHN0cmluZ1ZhbHVlKGxvYWREYXRhRGljdGlvbmFyeSwgImJhc2VVUkwiKTsK
KyAgICAgICAgYXV0byB1bnJlYWNoYWJsZVVSTFdLID0gc3RyaW5nVmFsdWUobG9hZERhdGFEaWN0
aW9uYXJ5LCAidW5yZWFjaGFibGVVUkwiKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWRIVE1MU3RyaW5nKHRvV1RGU3RyaW5n
KGNvbnRlbnRXSyksIGJhc2VVUkxXSyA/IHRvV1RGU3RyaW5nKGJhc2VVUkxXSykgOiBTdHJpbmco
KSwgdW5yZWFjaGFibGVVUkxXSyA/IHRvV1RGU3RyaW5nKHVucmVhY2hhYmxlVVJMV0spIDogU3Ry
aW5nKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjM2LDE1NCArNDg3LDExNyBAQCB2
b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShX
S1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVMb2FkaW5nU2NyaXB0IikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1
ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZGluZ1NjcmlwdCh0b1dURlN0cmluZyhzY3JpcHQpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVOb25Mb2FkaW5nU2NyaXB0IikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFu
YWdlcigpLnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCh0b1dURlN0cmluZyhzY3JpcHQpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFu
ZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKFdLQm9vbGVhbkdldFZhbHVlKHZh
bHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRSZWplY3RzUHJv
dGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoYm9vbGVh
blZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEhhbmRsZXNBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVm
IHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2xlYW5W
YWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGRMb2dDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9nQ2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1
ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9nQ2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3Mi
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2
YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9n
RG93bmxvYWRDYWxsYmFja3MoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS1N0cmluZ1JlZiB1c2VybmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdl
Qm9keSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHVzZXJuYW1lID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHkpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXV0aGVudGlj
YXRpb25Vc2VybmFtZSh0b1dURlN0cmluZyh1c2VybmFtZSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJp
bmdSZWYgcGFzc3dvcmQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwor
ICAgICAgICBXS1N0cmluZ1JlZiBwYXNzd29yZCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsK
ICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEF1dGhlbnRpY2F0aW9uUGFz
c3dvcmQodG9XVEZTdHJpbmcocGFzc3dvcmQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0Qmxv
Y2tBbGxQbHVnaW5zIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBzaG91bGRC
bG9jayA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QmxvY2tBbGxQbHVnaW5zKFdLQm9vbGVhbkdl
dFZhbHVlKHNob3VsZEJsb2NrKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRCbG9ja0FsbFBsdWdpbnMoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldFBsdWdpblN1cHBvcnRlZE1vZGUiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAg
ICBXS1N0cmluZ1JlZiBtb2RlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgbW9kZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsK
ICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFBsdWdpblN1cHBvcnRlZE1v
ZGUodG9XVEZTdHJpbmcobW9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTaG91bGREZWNp
ZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jv
b2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERlY2lkZU5hdmln
YXRpb25Qb2xpY3lBZnRlckRlbGF5KFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9s
aWN5QWZ0ZXJEZWxheShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5IikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U2hvdWxkRGVjaWRlUmVzcG9uc2VQb2xpY3lBZnRlckRlbGF5KFdLQm9vbGVhbkdldFZhbHVlKHZh
bHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGREZWNp
ZGVSZXNwb25zZVBvbGljeUFmdGVyRGVsYXkoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJ
RCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXROYXZpZ2F0aW9uR2VzdHVyZXNF
bmFibGVkKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiKSkgewotICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAg
V0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9k
eSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRJZ25vcmVzVmlld3Bv
cnRTY2FsZUxpbWl0cyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoYm9vbGVh
blZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZERvd25s
b2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZERvd25sb2FkVW5kaXNw
bGF5YWJsZU1JTUVUeXBlcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlN
RVR5cGVzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
ZXRTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyhXS0Jvb2xlYW5HZXRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hv
dWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzcyhib29sZWFuVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2Nr
VGhpcmRQYXJ0eUNvb2tpZXNPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKFdLQm9vbGVhbkdldFZhbHVl
KHZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyhib29sZWFuVmFsdWUobWVzc2Fn
ZUJvZHkpLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3VsZEJs
b2NrVGhpcmRQYXJ0eUNvb2tpZXMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVm
IHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGly
ZFBhcnR5Q29va2llcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSksIGZhbHNlKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJk
UGFydHlDb29raWVzKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSksIGZhbHNlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiUnVuVUlQcm9jZXNzU2NyaXB0IikpIHsKLSAgICAgICAgV0tEaWN0aW9uYXJ5
UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2NyaXB0IikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY2FsbGJhY2tJREtleSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxiYWNrSUQiKSk7Ci0KLSAgICAgICAgVUlT
Y3JpcHRJbnZvY2F0aW9uRGF0YSogaW52b2NhdGlvbkRhdGEgPSBuZXcgVUlTY3JpcHRJbnZvY2F0
aW9uRGF0YSgpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25h
cnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaW52b2NhdGlvbkRhdGEgPSBuZXcg
VUlTY3JpcHRJbnZvY2F0aW9uRGF0YTsKICAgICAgICAgaW52b2NhdGlvbkRhdGEtPnRlc3RJbnZv
Y2F0aW9uID0gdGhpczsKLSAgICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQgPSAodW5z
aWduZWQpV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGNhbGxiYWNrSURLZXkuZ2V0
KCkpKSk7Ci0gICAgICAgIGludm9jYXRpb25EYXRhLT5zY3JpcHRTdHJpbmcgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rp
b25hcnksIHNjcmlwdEtleS5nZXQoKSkpOworICAgICAgICBpbnZvY2F0aW9uRGF0YS0+Y2FsbGJh
Y2tJRCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkNhbGxiYWNrSUQiKTsK
KyAgICAgICAgaW52b2NhdGlvbkRhdGEtPnNjcmlwdFN0cmluZyA9IHN0cmluZ1ZhbHVlKG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgIlNjcmlwdCIpOwogICAgICAgICBtX3BlbmRpbmdVSVNjcmlwdElu
dm9jYXRpb25EYXRhID0gaW52b2NhdGlvbkRhdGE7CiAgICAgICAgIFdLUGFnZUNhbGxBZnRlck5l
eHRQcmVzZW50YXRpb25VcGRhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnBhZ2UoKSwgaW52b2NhdGlvbkRhdGEsIHJ1blVJU2lkZVNjcmlwdEFmdGVyVXBkYXRl
Q2FsbGJhY2spOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJSdW5VSVByb2Nlc3NTY3JpcHRJbW1lZGlh
dGVseSIpKSB7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNjcmlwdCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDYWxsYmFja0lEIikpOwotCi0gICAgICAgIFVJU2NyaXB0SW52b2NhdGlvbkRhdGEqIGludm9j
YXRpb25EYXRhID0gbmV3IFVJU2NyaXB0SW52b2NhdGlvbkRhdGEoKTsKKyAgICAgICAgYXV0byBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAg
ICAgICBhdXRvIGludm9jYXRpb25EYXRhID0gbmV3IFVJU2NyaXB0SW52b2NhdGlvbkRhdGE7CiAg
ICAgICAgIGludm9jYXRpb25EYXRhLT50ZXN0SW52b2NhdGlvbiA9IHRoaXM7Ci0gICAgICAgIGlu
dm9jYXRpb25EYXRhLT5jYWxsYmFja0lEID0gKHVuc2lnbmVkKVdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBjYWxsYmFja0lES2V5LmdldCgpKSkpOwotICAgICAgICBpbnZvY2F0aW9u
RGF0YS0+c2NyaXB0U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzY3JpcHRLZXkuZ2V0KCkpKTsK
KyAgICAgICAgaW52b2NhdGlvbkRhdGEtPmNhbGxiYWNrSUQgPSB1aW50NjRWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJDYWxsYmFja0lEIik7CisgICAgICAgIGludm9jYXRpb25EYXRhLT5z
Y3JpcHRTdHJpbmcgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJTY3JpcHQi
KTsKICAgICAgICAgbV9wZW5kaW5nVUlTY3JpcHRJbnZvY2F0aW9uRGF0YSA9IGludm9jYXRpb25E
YXRhOwogICAgICAgICBydW5VSVNpZGVTY3JpcHRJbW1lZGlhdGVseShudWxscHRyLCBpbnZvY2F0
aW9uRGF0YSk7CiAgICAgICAgIHJldHVybjsKQEAgLTc5MSwxMSArNjA1LDkgQEAgdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdS
ZWYgbWVzc2FnZU5hbWUKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiSW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24iKSkgewogICAgICAgICBhdXRvIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZUtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm5hbWUiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBuYW1lS2V5LmdldCgp
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkaXNtaXNzZXNBdXRvbWF0aWNh
bGx5S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZGlzbWlzc2Vz
QXV0b21hdGljYWxseSIpKTsKLSAgICAgICAgYXV0byBkaXNtaXNzZXNBdXRvbWF0aWNhbGx5ID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgZGlzbWlzc2VzQXV0b21hdGljYWxseUtleS5nZXQoKSkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW5zdGFsbEN1c3RvbU1lbnVBY3Rpb24o
dG9XVEZTdHJpbmcobmFtZS5nZXQoKSksIFdLQm9vbGVhbkdldFZhbHVlKGRpc21pc3Nlc0F1dG9t
YXRpY2FsbHkpKTsKKyAgICAgICAgYXV0byBuYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAibmFtZSIpOworICAgICAgICBhdXRvIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkg
PSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiZGlzbWlzc2VzQXV0b21hdGlj
YWxseSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW5zdGFsbEN1c3Rv
bU1lbnVBY3Rpb24odG9XVEZTdHJpbmcobmFtZSksIGRpc21pc3Nlc0F1dG9tYXRpY2FsbHkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04MDUsNyArNjE3LDcgQEAgdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYg
bWVzc2FnZU5hbWUKICAgICAgICAgVmVjdG9yPFN0cmluZz4gYWN0aW9uczsKICAgICAgICAgYWN0
aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgICAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgKytpbmRleCkKLSAgICAgICAgICAgIGFjdGlvbnMuYXBw
ZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0
SW5kZXgobWVzc2FnZUJvZHlBcnJheSwgaW5kZXgpKSkpOworICAgICAgICAgICAgYWN0aW9ucy5h
cHBlbmQodG9XVEZTdHJpbmcoc3RyaW5nVmFsdWUoV0tBcnJheUdldEl0ZW1BdEluZGV4KG1lc3Nh
Z2VCb2R5QXJyYXksIGluZGV4KSkpKTsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldEFsbG93ZWRNZW51QWN0aW9ucyhhY3Rpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTgyOCwxMDggKzY0MCw2MyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZl
TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIH0K
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
U3RhdGlzdGljc0RlYnVnTW9kZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYg
dmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoV0tCb29s
ZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJp
bmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSk7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoaG9z
dE5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTGFzdFNlZW4iKSkgewot
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdl
dFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9u
YXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgdmFsdWUg
PSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NMYXN0U2Vlbihob3N0TmFtZSwgV0tEb3Vi
bGVHZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBh
dXRvIHZhbHVlID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVmFsdWUiKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NMYXN0U2Vl
bihob3N0TmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTWVy
Z2VTdGF0aXN0aWMiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYg
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVEb21haW4xS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVEb21haW4xIikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9wRnJhbWVEb21haW4yS2V5ID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVEb21haW4yIikpOwotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbGFzdFNlZW5LZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJMYXN0U2VlbiIpKTsKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGhhZFVzZXJJbnRlcmFjdGlvbktleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhZFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25LZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJNb3N0UmVjZW50VXNlckludGVyYWN0
aW9uIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNHcmFuZGZhdGhlcmVk
S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNHcmFuZGZhdGhl
cmVkIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaXNQcmV2YWxlbnRLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1ByZXZhbGVudCIpKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGlzVmVyeVByZXZhbGVudEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzVmVyeVByZXZhbGVudCIpKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRhdGFSZWNvcmRzUmVtb3ZlZEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRhdGFSZWNvcmRzUmVtb3Zl
ZCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVzQWNjZXNzZWRGaXJz
dFBhcnR5SW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJUaW1lc0FjY2Vzc2VkRmlyc3RQYXJ0eUludGVyYWN0aW9uIikpOwotCi0gICAgICAgIFdL
U3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkp
OwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZURvbWFpbjEgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHRvcEZyYW1lRG9tYWluMUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFt
ZURvbWFpbjIgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvcEZyYW1lRG9tYWluMktleS5nZXQoKSkpOwot
ICAgICAgICBXS0RvdWJsZVJlZiBsYXN0U2VlbiA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbGFzdFNlZW5L
ZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdl
Qm9keURpY3Rpb25hcnksIGhhZFVzZXJJbnRlcmFjdGlvbktleS5nZXQoKSkpOwotICAgICAgICBX
S0RvdWJsZVJlZiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gc3RhdGljX2Nhc3Q8V0tEb3Vi
bGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uS2V5LmdldCgpKSk7Ci0gICAgICAgIFdLQm9vbGVhblJl
ZiBpc0dyYW5kZmF0aGVyZWQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBpc0dyYW5kZmF0aGVyZWRLZXku
Z2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzUHJldmFsZW50ID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgaXNQcmV2YWxlbnRLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzVmVy
eVByZXZhbGVudCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzVmVyeVByZXZhbGVudEtleS5nZXQoKSkp
OwotICAgICAgICBXS1VJbnQ2NFJlZiBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGRhdGFSZWNvcmRzUmVtb3ZlZEtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMoaG9zdE5hbWUsIHRv
cEZyYW1lRG9tYWluMSwgdG9wRnJhbWVEb21haW4yLCBXS0RvdWJsZUdldFZhbHVlKGxhc3RTZWVu
KSwgV0tCb29sZWFuR2V0VmFsdWUoaGFkVXNlckludGVyYWN0aW9uKSwgV0tEb3VibGVHZXRWYWx1
ZShtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNHcmFuZGZh
dGhlcmVkKSwgV0tCb29sZWFuR2V0VmFsdWUoaXNQcmV2YWxlbnQpLCBXS0Jvb2xlYW5HZXRWYWx1
ZShpc1ZlcnlQcmV2YWxlbnQpLCBXS1VJbnQ2NEdldFZhbHVlKGRhdGFSZWNvcmRzUmVtb3ZlZCkp
OworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZSht
ZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIHRvcEZyYW1lRG9tYWlu
MSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lRG9tYWluMSIp
OworICAgICAgICBhdXRvIHRvcEZyYW1lRG9tYWluMiA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIlRvcEZyYW1lRG9tYWluMiIpOworICAgICAgICBhdXRvIGxhc3RTZWVuID0g
ZG91YmxlVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTGFzdFNlZW4iKTsKKyAgICAgICAg
YXV0byBoYWRVc2VySW50ZXJhY3Rpb24gPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiSGFkVXNlckludGVyYWN0aW9uIik7CisgICAgICAgIGF1dG8gbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbiA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIk1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBpc0dyYW5kZmF0aGVyZWQgPSBib29s
ZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNHcmFuZGZhdGhlcmVkIik7CisgICAg
ICAgIGF1dG8gaXNQcmV2YWxlbnQgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCAiSXNQcmV2YWxlbnQiKTsKKyAgICAgICAgYXV0byBpc1ZlcnlQcmV2YWxlbnQgPSBib29sZWFu
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSXNWZXJ5UHJldmFsZW50Iik7CisgICAgICAg
IGF1dG8gZGF0YVJlY29yZHNSZW1vdmVkID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCAiRGF0YVJlY29yZHNSZW1vdmVkIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzTWVyZ2VTdGF0aXN0aWMoaG9zdE5hbWUsIHRvcEZyYW1lRG9t
YWluMSwgdG9wRnJhbWVEb21haW4yLCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1Zl
cnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBoYWRVc2Vy
SW50ZXJhY3Rpb25LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
YWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIpKTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxL
ZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1NjaGVkdWxlZEZv
ckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gaXNQcmV2YWxlbnRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJJc1ByZXZhbGVudCIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVm
IGhhZFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhhZFVzZXJJbnRlcmFjdGlv
bktleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgaXNTY2hlZHVsZWRGb3JBbGxCdXRD
b29raWVEYXRhUmVtb3ZhbCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzU2NoZWR1bGVkRm9yQWxsQnV0
Q29va2llRGF0YVJlbW92YWxLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIGlzUHJl
dmFsZW50ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNQcmV2YWxlbnRLZXkuZ2V0KCkpKTsKLQotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0
aXN0aWMoaG9zdE5hbWUsIFdLQm9vbGVhbkdldFZhbHVlKGhhZFVzZXJJbnRlcmFjdGlvbiksIFdL
Qm9vbGVhbkdldFZhbHVlKGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpLCBX
S0Jvb2xlYW5HZXRWYWx1ZShpc1ByZXZhbGVudCkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8g
aG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIp
OworICAgICAgICBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keURpY3Rpb25hcnksICJIYWRVc2VySW50ZXJhY3Rpb24iKTsKKyAgICAgICAgYXV0byBpc1Nj
aGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgIklzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiKTsK
KyAgICAgICAgYXV0byBpc1ByZXZhbGVudCA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJJc1ByZXZhbGVudCIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMoaG9zdE5hbWUsIGhhZFVzZXJJbnRlcmFj
dGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFy
eUdldFR5cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0
aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJWYWx1ZSIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZh
bHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKGhv
c3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1
dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFt
ZSIpOworICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgIlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0U3RhdGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlE
KCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBz
dGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZh
bHVlIikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKGhvc3ROYW1l
LCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9z
dE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOwor
ICAgICAgICBhdXRvIHZhbHVlID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IlZhbHVlIik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzVmVyeVByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lLCB2YWx1ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTk0NCw1MSArNzExLDM1IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1l
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2lu
Y2VIb3VycyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGhvdXJzID0gc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9k
aWZpZWRTaW5jZUhvdXJzKFdLVUludDY0R2V0VmFsdWUoaG91cnMpKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlciIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlcihXS0Jvb2xlYW5HZXRWYWx1
ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGUoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZShib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlz
dGljc1NldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tT
dHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkp
OwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RvU2Ft
ZVNpdGVTdHJpY3RDb29raWVzKGhvc3ROYW1lKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llcyhzdHJpbmdWYWx1
ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2V0Rmlyc3RQ
YXJ0eUhvc3RDTkFNRURvbWFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gZmlyc3RQYXJ0eVVSTFN0cmluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkZpcnN0UGFydHlVUkwiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBjbmFtZVVSTFN0cmluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkNOQU1FIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgZmlyc3RQYXJ0
eVVSTFN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZmlyc3RQYXJ0eVVSTFN0cmluZ0tleS5nZXQo
KSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBjbmFtZVVSTFN0cmluZyA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgY25hbWVVUkxTdHJpbmdLZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVz
c2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgYXV0byBmaXJzdFBhcnR5VVJMU3RyaW5nID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiRmlyc3RQYXJ0eVVSTCIpOworICAgICAgICBhdXRvIGNuYW1lVVJMU3RyaW5nID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiQ05BTUUiKTsKICAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1F
RG9tYWluKGZpcnN0UGFydHlVUkxTdHJpbmcsIGNuYW1lVVJMU3RyaW5nKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU3RhdGlzdGljc1NldFRoaXJkUGFydHlDTkFNRURvbWFpbiIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGNuYW1lVVJMU3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NUaGlyZFBhcnR5Q05BTUVEb21haW4oY25hbWVVUkxTdHJpbmcpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RoaXJkUGFydHlD
TkFNRURvbWFpbihzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xMDEyLDggKzc2Myw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2Vp
dmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRBcHBsaWNh
dGlvbk1hbmlmZXN0IikpIHsKICNpZmRlZiBfX0JMT0NLU19fCiAgICAgICAgIFdLUGFnZUdldEFw
cGxpY2F0aW9uTWFuaWZlc3RfYihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpLCBeewotICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGlkR2V0
QXBwbGljYXRpb25NYW5pZmVzdCIpKTsKLSAgICAgICAgICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9J
bmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgICAgICBwb3N0UGFnZU1lc3Nh
Z2UoIkRpZEdldEFwcGxpY2F0aW9uTWFuaWZlc3QiKTsKICAgICAgICAgfSk7CiAjZWxzZQogICAg
ICAgICAvLyBGSVhNRTogQWRkIEFQSSBmb3IgbG9hZGluZyB0aGUgbWFuaWZlc3Qgb24gbm9uLV9f
QkxPQ0tTX18gcG9ydHMuCkBAIC0xMDIzLDE2ICs3NzMsMTAgQEAgdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2Fn
ZU5hbWUKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJ
RCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
c3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdmFsdWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJW
YWx1ZSIpKTsKLQotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihob3N0TmFt
ZSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhv
c3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsK
KyAgICAgICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlz
dGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihob3N0TmFtZSwgdmFsdWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xMDQzLDggKzc4Nyw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1l
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dEFwcEJvdW5kRG9tYWlucyIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tBcnJheUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tBcnJheVJlZiBvcmlnaW5V
UkxzID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXBwQm91bmREb21haW5zKG9yaWdpblVSTHMpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXBwQm91bmREb21haW5zKHN0
YXRpY19jYXN0PFdLQXJyYXlSZWY+KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTEwNTUsOTQgKzc5OCw3MCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJ
bnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogewog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW5pdGlh
bGl6YXRpb24iKSkgewogICAgICAgICBhdXRvIHNldHRpbmdzID0gY3JlYXRlVGVzdFNldHRpbmdz
RGljdGlvbmFyeSgpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVzdW1lVGVz
dGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlJlc3VtZVRl
c3RpbmciKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcmVzdW1lVGVzdGlu
Z1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9zdGFydGVkVGVzdGluZykpOwotICAg
ICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHNldHRpbmdzLmdldCgpLCByZXN1bWVUZXN0aW5nS2V5
LmdldCgpLCByZXN1bWVUZXN0aW5nVmFsdWUuZ2V0KCkpOworICAgICAgICBzZXRWYWx1ZShzZXR0
aW5ncywgIlJlc3VtZVRlc3RpbmciLCBtX3N0YXJ0ZWRUZXN0aW5nKTsKICAgICAgICAgcmV0dXJu
IHNldHRpbmdzOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0RHVtcFBpeGVscyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBtX2R1
bXBQaXhlbHMgPSBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1l
c3NhZ2VCb2R5KSk7CisgICAgICAgIG1fZHVtcFBpeGVscyA9IGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldER1bXBQaXhlbHMiKSkKICAgICAg
ICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKG1fZHVtcFBpeGVscykpOwogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRXaGF0VG9E
dW1wIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJ
bnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgbV93aGF0VG9EdW1wID0gc3RhdGljX2Nhc3Q8V2hh
dFRvRHVtcD4oV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2Fn
ZUJvZHkpKSk7CisgICAgICAgIG1fd2hhdFRvRHVtcCA9IHN0YXRpY19jYXN0PFdoYXRUb0R1bXA+
KHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdl
dFdoYXRUb0R1bXAiKSkKICAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUoc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG1fd2hhdFRvRHVtcCkpKTsKIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0V2FpdFVudGlsRG9uZSIpKSB7Ci0g
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlw
ZUlEKCkpOwotICAgICAgICBzZXRXYWl0VW50aWxEb25lKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJv
ZHkpKSkpOworICAgICAgICBzZXRXYWl0VW50aWxEb25lKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9k
eSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRXYWl0VW50aWxEb25lIikpCiAgICAg
ICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX3dhaXRVbnRpbERvbmUpKTsKIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0RHVt
cEZyYW1lTG9hZENhbGxiYWNrcyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwotICAgICAgICBtX2R1bXBGcmFtZUxv
YWRDYWxsYmFja3MgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihXS0Jvb2xlYW5HZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBtX2R1
bXBGcmFtZUxvYWRDYWxsYmFja3MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJHZXREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIikpCiAgICAgICAg
IHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3Mp
KTsKIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0Q2FuT3BlbldpbmRvd3MiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgbV9jYW5PcGVuV2luZG93
cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIG1fY2FuT3BlbldpbmRv
d3MgPSBib29sZWFuVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldFdpbmRvd0lzS2V5IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiBp
c0tleVZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5zZXRXaW5kb3dJ
c0tleShXS0Jvb2xlYW5HZXRWYWx1ZShpc0tleVZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5zZXRXaW5kb3dJc0tleShib29sZWFuVmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRWaWV3U2l6
ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0
aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdpZHRoS2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygid2lkdGgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBoZWlnaHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJoZWlnaHQiKSk7Ci0KLSAgICAgICAgV0tEb3VibGVSZWYgd2lkdGhXSyA9IHN0YXRp
Y19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgd2lkdGhLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgaGVpZ2h0
V0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIGhlaWdodEtleS5nZXQoKSkpOwotCi0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5yZXNpemVUbyhXS0RvdWJsZUdl
dFZhbHVlKHdpZHRoV0spLCBXS0RvdWJsZUdldFZhbHVlKGhlaWdodFdLKSk7CisgICAgICAgIGF1
dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgYXV0byB3aWR0aCA9IGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IndpZHRoIik7CisgICAgICAgIGF1dG8gaGVpZ2h0ID0gZG91YmxlVmFsdWUobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCAiaGVpZ2h0Iik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5yZXNpemVUbyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJJc0dlb2xvY2F0aW9uQ2xpZW50QWN0aXZlIikpIHsKLSAgICAgICAgYm9v
bCBpc0FjdGl2ZSA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0dlb2xvY2F0aW9uUHJv
dmlkZXJBY3RpdmUoKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0FjdGl2ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIklzR2VvbG9jYXRpb25DbGllbnRBY3RpdmUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0so
V0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0dlb2xvY2F0aW9u
UHJvdmlkZXJBY3RpdmUoKSkpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRDYWNoZU1vZGVsIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKLSAgICAgICAgdWlu
dDY0X3QgbW9kZWwgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPiht
ZXNzYWdlQm9keSkpOworICAgICAgICB1aW50NjRfdCBtb2RlbCA9IHVpbnQ2NFZhbHVlKG1lc3Nh
Z2VCb2R5KTsKICAgICAgICAgV0tXZWJzaXRlRGF0YVN0b3JlU2V0Q2FjaGVNb2RlbFN5bmNocm9u
b3VzbHlGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53ZWJzaXRlRGF0YVN0
b3JlKCksIG1vZGVsKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1dvcmtRdWV1ZUVt
cHR5IikpIHsKLSAgICAgICAgYm9vbCBpc0VtcHR5ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLndvcmtRdWV1ZU1hbmFnZXIoKS5pc1dvcmtRdWV1ZUVtcHR5KCk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNFbXB0
eSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzV29ya1F1ZXVlRW1wdHkiKSkKKyAgICAg
ICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS53b3JrUXVldWVNYW5hZ2VyKCkuaXNXb3JrUXVldWVFbXB0eSgpKSk7CiAKLSAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkRpZFJlY2VpdmVTZXJ2
ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiIpKSB7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lv
bmFsTmF2aWdhdGlvbigpKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uIikpCisgICAgICAgIHJldHVybiBh
ZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkpKTsKIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2xlYXJEaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24iKSkgewogICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbE5hdmlnYXRpb24oKTsKQEAgLTExNTAsNDAgKzg2OSwzNSBAQCBXS1JldGFp
blB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNz
YWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCIpKSB7Ci0jaWYg
UExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShJc1NlY3Vy
ZUV2ZW50SW5wdXRFbmFibGVkKCkpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHJldHVy
biBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShJc1NlY3VyZUV2ZW50SW5wdXRFbmFibGVkKCkpKTsK
ICNlbHNlCi0gICAgICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gcmVzdWx0ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29s
ZWFuQ3JlYXRlKGZhbHNlKSk7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dEN1c3RvbVVzZXJBZ2VudCIpKSB7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHVzZXJBZ2VudCA9IHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUGFnZVNldEN1
c3RvbVVzZXJBZ2VudChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+
cGFnZSgpLCB1c2VyQWdlbnQpOworICAgICAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgc3RyaW5nVmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZSIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbGVhblZhbHVlKG1lc3Nh
Z2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNob3VsZFN3YXBU
b0VwaGVtZXJhbFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIikpIHsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZFN3YXBUb0VwaGVtZXJhbFNlc3Npb25Pbk5leHRO
YXZpZ2F0aW9uKFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTaG91
bGRTd2FwVG9FcGhlbWVyYWxTZXNzaW9uT25OZXh0TmF2aWdhdGlvbihib29sZWFuVmFsdWUobWVz
c2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U2hvdWxkU3dh
cFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uIikpIHsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3VsZFN3YXBUb0RlZmF1bHRTZXNzaW9uT25OZXh0TmF2
aWdhdGlvbihXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxk
U3dhcFRvRGVmYXVsdFNlc3Npb25Pbk5leHROYXZpZ2F0aW9uKGJvb2xlYW5WYWx1ZShtZXNzYWdl
Qm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkltYWdlQ291bnRJbkdlbmVyYWxQ
YXN0ZWJvYXJkIikpIHsKLSAgICAgICAgdW5zaWduZWQgY291bnQgPSBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuaW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKTsKLSAgICAgICAgV0tS
ZXRhaW5QdHI8V0tVSW50NjRSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUoY291
bnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVi
b2FyZCIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuaW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKSkpOwogICAg
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRGVs
ZXRlQWxsSW5kZXhlZERhdGFiYXNlcyIpKSB7CiAgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJl
bW92ZUFsbEluZGV4ZWREYXRhYmFzZXMoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndlYnNp
dGVEYXRhU3RvcmUoKSwgbnVsbHB0ciwgeyB9KTsKQEAgLTExOTEsMTcgKzkwNSwxMCBAQCBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNN
ZXNzYWdlRnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWRkTW9ja01lZGlhRGV2aWNlIikpIHsKLSAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0
YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gcGVyc2lzdGVudElES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUGVyc2lzdGVudElEIikpOwotICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJMYWJlbCIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHR5cGVLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUeXBlIikpOwotCi0gICAg
ICAgIGF1dG8gcGVyc2lzdGVudElEID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwZXJzaXN0ZW50SURLZXku
Z2V0KCkpKTsKLSAgICAgICAgYXV0byBsYWJlbCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgbGFiZWxLZXku
Z2V0KCkpKTsKLSAgICAgICAgYXV0byB0eXBlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0eXBlS2V5Lmdl
dCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5
VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIHBlcnNpc3RlbnRJRCA9IHN0cmluZ1Zh
bHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlBlcnNpc3RlbnRJRCIpOworICAgICAgICBhdXRv
IGxhYmVsID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTGFiZWwiKTsKKyAg
ICAgICAgYXV0byB0eXBlID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVHlw
ZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuYWRkTW9ja01lZGlhRGV2
aWNlKHBlcnNpc3RlbnRJRCwgbGFiZWwsIHR5cGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CkBAIC0xMjEyLDkgKzkxOSw3IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdElu
dm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJS
ZW1vdmVNb2NrTWVkaWFEZXZpY2UiKSkgewotICAgICAgICBXS1N0cmluZ1JlZiBwZXJzaXN0ZW50
SWQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZW1vdmVNb2NrTWVkaWFEZXZpY2UocGVyc2lzdGVu
dElkKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJlbW92ZU1vY2tNZWRp
YURldmljZShzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKQEAgLTEyMjQsMTQyICs5MjksODcgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3Rl
ZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlNldE1vY2tDYW1lcmFPcmllbnRhdGlvbiIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24oV0tVSW50NjRHZXRWYWx1
ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrQ2FtZXJhT3JpZW50YXRpb24odWludDY0VmFs
dWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc01vY2tSZWFs
dGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCIpKSB7Ci0gICAgICAgIGJvb2wgaXNNb2NrUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuaXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQoKTsKLSAgICAgICAgcmV0
dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJFbmFibGVkKSk7Ci0gICAgfQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiSXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQiKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5pc01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZCgpKSk7CiAg
ICAgCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJI
YXNBcHBCb3VuZFNlc3Npb24iKSkgewotICAgICAgICBib29sIGhhc0FwcEJvdW5kU2Vzc2lvbiA9
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNBcHBCb3VuZFNlc3Npb24oKTsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0FwcEJvdW5kU2Vzc2lvbikpOwot
ICAgIH0KKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
Ikhhc0FwcEJvdW5kU2Vzc2lvbiIpKQorICAgICAgICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5D
cmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc0FwcEJvdW5kU2Vzc2lvbigpKSk7
CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJDb25uZWN0TW9ja0dhbWVwYWQiKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotCi0gICAg
ICAgIHVpbnQ2NF90IGluZGV4ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpjb25uZWN0
TW9ja0dhbWVwYWQoaW5kZXgpOwotICAgICAgICAKKyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0
Ojpjb25uZWN0TW9ja0dhbWVwYWQodWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJEaXNjb25uZWN0TW9ja0dhbWVwYWQiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwot
Ci0gICAgICAgIHVpbnQ2NF90IGluZGV4ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpk
aXNjb25uZWN0TW9ja0dhbWVwYWQoaW5kZXgpOwotCisgICAgICAgIFdlYkNvcmVUZXN0U3VwcG9y
dDo6ZGlzY29ubmVjdE1vY2tHYW1lcGFkKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dhbWVwYWREZXRhaWxzIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7Ci0KLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gZ2FtZXBhZEluZGV4S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiR2FtZXBhZEluZGV4IikpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gZ2FtZXBhZElES2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiR2FtZXBhZElEIikpOwotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWFwcGluZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIk1h
cHBpbmciKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBheGlzQ291bnRLZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBeGlzQ291bnQiKSk7Ci0g
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBidXR0b25Db3VudEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJ1dHRvbkNvdW50IikpOwotCi0gICAgICAg
IFdLVUludDY0UmVmIGdhbWVwYWRJbmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgZ2FtZXBhZEluZGV4
S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGdhbWVwYWRJRCA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgZ2FtZXBhZElES2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIG1hcHBpbmcg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIG1hcHBpbmdLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tVSW50NjRS
ZWYgYXhpc0NvdW50ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBheGlzQ291bnRLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tVSW50NjRSZWYgYnV0dG9uQ291bnQgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGJ1dHRvbkNv
dW50S2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRNb2NrR2Ft
ZXBhZERldGFpbHMoV0tVSW50NjRHZXRWYWx1ZShnYW1lcGFkSW5kZXgpLCB0b1dURlN0cmluZyhn
YW1lcGFkSUQpLCB0b1dURlN0cmluZyhtYXBwaW5nKSwgV0tVSW50NjRHZXRWYWx1ZShheGlzQ291
bnQpLCBXS1VJbnQ2NEdldFZhbHVlKGJ1dHRvbkNvdW50KSk7CisgICAgICAgIGF1dG8gbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAg
YXV0byBnYW1lcGFkSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJH
YW1lcGFkSW5kZXgiKTsKKyAgICAgICAgYXV0byBnYW1lcGFkSUQgPSBzdHJpbmdWYWx1ZShtZXNz
YWdlQm9keURpY3Rpb25hcnksICJHYW1lcGFkSUQiKTsKKyAgICAgICAgYXV0byBtYXBwaW5nID0g
c3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiTWFwcGluZyIpOworICAgICAgICBh
dXRvIGF4aXNDb3VudCA9IHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkF4aXND
b3VudCIpOworICAgICAgICBhdXRvIGJ1dHRvbkNvdW50ID0gdWludDY0VmFsdWUobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCAiQnV0dG9uQ291bnQiKTsKKyAgICAgICAgV2ViQ29yZVRlc3RTdXBwb3J0
OjpzZXRNb2NrR2FtZXBhZERldGFpbHMoZ2FtZXBhZEluZGV4LCB0b1dURlN0cmluZyhnYW1lcGFk
SUQpLCB0b1dURlN0cmluZyhtYXBwaW5nKSwgYXhpc0NvdW50LCBidXR0b25Db3VudCk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKTsKLQotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBnYW1lcGFkSW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJHYW1lcGFkSW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBheGlzSW5kZXhLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJBeGlzSW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZh
bHVlIikpOwotCi0gICAgICAgIFdLVUludDY0UmVmIGdhbWVwYWRJbmRleCA9IHN0YXRpY19jYXN0
PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgZ2FtZXBhZEluZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGF4aXNJ
bmRleCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgYXhpc0luZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
RG91YmxlUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotCi0g
ICAgICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0TW9ja0dhbWVwYWRBeGlzVmFsdWUoV0tVSW50
NjRHZXRWYWx1ZShnYW1lcGFkSW5kZXgpLCBXS1VJbnQ2NEdldFZhbHVlKGF4aXNJbmRleCksIFdL
RG91YmxlR2V0VmFsdWUodmFsdWUpKTsKLQorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZ2FtZXBh
ZEluZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiR2FtZXBhZEluZGV4
Iik7CisgICAgICAgIGF1dG8gYXhpc0luZGV4ID0gdWludDY0VmFsdWUobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCAiQXhpc0luZGV4Iik7CisgICAgICAgIGF1dG8gdmFsdWUgPSBkb3VibGVWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1ZSIpOworICAgICAgICBXZWJDb3JlVGVzdFN1cHBv
cnQ6OnNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKGdhbWVwYWRJbmRleCwgYXhpc0luZGV4LCB2YWx1
ZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1
ZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0
aW9uYXJ5R2V0VHlwZUlEKCkpOwotCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9k
eURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdhbWVwYWRJbmRleEtleSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkdhbWVwYWRJbmRleCIpKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGJ1dHRvbkluZGV4S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQnV0dG9uSW5kZXgiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlZhbHVlIikpOwotCi0gICAgICAgIFdLVUludDY0UmVmIGdhbWVwYWRJbmRl
eCA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSwgZ2FtZXBhZEluZGV4S2V5LmdldCgpKSk7Ci0gICAgICAgIFdL
VUludDY0UmVmIGJ1dHRvbkluZGV4ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBidXR0b25JbmRleEtleS5n
ZXQoKSkpOwotICAgICAgICBXS0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91Ymxl
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFs
dWVLZXkuZ2V0KCkpKTsKLQotICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1l
cGFkQnV0dG9uVmFsdWUoV0tVSW50NjRHZXRWYWx1ZShnYW1lcGFkSW5kZXgpLCBXS1VJbnQ2NEdl
dFZhbHVlKGJ1dHRvbkluZGV4KSwgV0tEb3VibGVHZXRWYWx1ZSh2YWx1ZSkpOwotCisgICAgICAg
IGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgYXV0byBnYW1lcGFkSW5kZXggPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJHYW1lcGFkSW5kZXgiKTsKKyAgICAgICAgYXV0byBidXR0b25JbmRleCA9IHVp
bnQ2NFZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkJ1dHRvbkluZGV4Iik7CisgICAgICAg
IGF1dG8gdmFsdWUgPSBkb3VibGVWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJWYWx1ZSIp
OworICAgICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUo
Z2FtZXBhZEluZGV4LCBidXR0b25JbmRleCwgdmFsdWUpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dENvdW50Rm9yT3JpZ2luIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLRGljdGlvbmFyeVJl
ZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1l
c3NhZ2VCb2R5KTsKLQotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gb3JpZ2luS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygib3JpZ2luIikpOwotICAg
ICAgICBXS1N0cmluZ1JlZiBvcmlnaW5XSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgb3JpZ2luS2V5Lmdl
dCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBhcmVudE9yaWdpbktl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInBhcmVudE9yaWdpbiIp
KTsKLSAgICAgICAgV0tTdHJpbmdSZWYgcGFyZW50T3JpZ2luV0sgPSBzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHBhcmVudE9yaWdpbktleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBh
dXRvIG9yaWdpbldLID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAib3JpZ2lu
Iik7CisgICAgICAgIGF1dG8gcGFyZW50T3JpZ2luV0sgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9k
eURpY3Rpb25hcnksICJwYXJlbnRPcmlnaW4iKTsKICAgICAgICAgdW5zaWduZWQgY291bnQgPSBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkudXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RDb3Vu
dEZvck9yaWdpbihvcmlnaW5XSywgcGFyZW50T3JpZ2luV0spOwotICAgICAgICBXS1JldGFpblB0
cjxXS1VJbnQ2NFJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShjb3VudCkpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzRG9pbmdNZWRpYUNhcHR1cmUiKSkgewotICAgICAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0RvaW5nTWVkaWFDYXB0dXJlKCkpKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVh
dGUoY291bnQpKTsKICAgICB9CisKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIklzRG9pbmdNZWRpYUNhcHR1cmUiKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc0RvaW5n
TWVkaWFDYXB0dXJlKCkpKTsKICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkNsZWFyU3RhdGlzdGljc0RhdGFGb3JEb21haW4iKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlE
KCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBkb21haW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4obWVzc2FnZUJvZHkpOwotCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5j
bGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKGRvbWFpbik7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5jbGVhclN0YXRpc3RpY3NEYXRhRm9yRG9tYWluKHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRG9lc1N0YXRpc3Rp
Y3NEb21haW5JREV4aXN0SW5EYXRhYmFzZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0Rp
Y3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9u
YXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBk
b21haW5JREtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRvbWFp
bklEIikpOwotICAgICAgICBXS1VJbnQ2NFJlZiBkb21haW5JRCA9IHN0YXRpY19jYXN0PFdLVUlu
dDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
ZG9tYWluSURLZXkuZ2V0KCkpKTsKLSAgICAgICAgYm9vbCBkb21haW5JREV4aXN0cyA9IFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5kb2VzU3RhdGlzdGljc0RvbWFpbklERXhpc3RJbkRhdGFi
YXNlKFdLVUludDY0R2V0VmFsdWUoZG9tYWluSUQpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShkb21haW5JREV4aXN0cykp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gZG9tYWlu
SUQgPSB1aW50NjRWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJEb21haW5JRCIpOworICAg
ICAgICBib29sIGRvbWFpbklERXhpc3RzID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRv
ZXNTdGF0aXN0aWNzRG9tYWluSURFeGlzdEluRGF0YWJhc2UoZG9tYWluSUQpOworICAgICAgICBy
ZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoZG9tYWluSURFeGlzdHMpKTsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0
YXRpc3RpY3NFbmFibGVkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0VuYWJsZWQoV0tCb29sZWFuR2V0
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0
YXRpc3RpY3NFbmFibGVkKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0VwaGVtZXJhbCIpKSB7Ci0gICAgICAgIGJvb2wg
aXNFcGhlbWVyYWwgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzRXBo
ZW1lcmFsKCk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRX
SyhXS0Jvb2xlYW5DcmVhdGUoaXNFcGhlbWVyYWwpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5pc1N0YXRpc3RpY3NFcGhlbWVyYWwoKSkpOwogICAgIH0KICAgICAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgImR1bXBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzIikpIHsKQEAgLTEzNjgsMjI0ICsxMDE4LDEyOCBAQCBXS1JldGFpblB0
cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdl
RnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlE
KCkpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudCA9IFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFt
ZSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgYm9vbCBpc1ByZXZhbGVudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZShzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3Rh
dGlzdGljc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAg
ICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuaXNTdGF0aXN0aWNzVmVyeVByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lKTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNy
ZWF0ZShpc1ByZXZhbGVudCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBib29s
IGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1Zl
cnlQcmV2YWxlbnRSZXNvdXJjZShzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoaXNQcmV2YWxlbnQpKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0
YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyIikpIHsKLSAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
c3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJyZXNvdXJjZUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdWJyZXNvdXJjZUhvc3QiKSk7Ci0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3RLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJUb3BGcmFtZUhvc3QiKSk7Ci0gICAgICAgIAotICAgICAgICBX
S1N0cmluZ1JlZiBzdWJyZXNvdXJjZUhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1YnJlc291cmNl
SG9zdEtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFtZUhvc3QgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHRvcEZyYW1lSG9zdEtleS5nZXQoKSkpOwotICAgICAgICAKKyAgICAgICAg
YXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIHN1YnJlc291cmNlSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgIlN1YnJlc291cmNlSG9zdCIpOworICAgICAgICBhdXRvIHRvcEZyYW1lSG9z
dCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lSG9zdCIpOwog
ICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
KHN1YnJlc291cmNlSG9zdCwgdG9wRnJhbWVIb3N0KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tU
eXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1N1
YnJlc291cmNlVW5kZXIpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJu
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcikp
OwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIklzU3RhdGlzdGljc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiKSkgewotICAg
ICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5
cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1YkZyYW1lSG9zdEtleSA9IGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1YkZyYW1lSG9zdCIpKTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvcEZyYW1lSG9zdEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvcEZyYW1lSG9zdCIpKTsKLSAgICAgICAgCi0gICAg
ICAgIFdLU3RyaW5nUmVmIHN1YkZyYW1lSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgc3ViRnJhbWVI
b3N0S2V5LmdldCgpKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIHRvcEZyYW1lSG9zdCA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgdG9wRnJhbWVIb3N0S2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAg
ICBhdXRvIHN1YkZyYW1lSG9zdCA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
IlN1YkZyYW1lSG9zdCIpOworICAgICAgICBhdXRvIHRvcEZyYW1lSG9zdCA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIlRvcEZyYW1lSG9zdCIpOwogICAgICAgICBib29sIGlz
UmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5p
c1N0YXRpc3RpY3NSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lSG9zdCwgdG9wRnJh
bWVIb3N0KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlz
UmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcikpOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGhvc3RSZWRpcmVjdGVkRnJvbUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhvc3RSZWRpcmVjdGVkRnJvbSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhvc3RSZWRpcmVjdGVkVG9LZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIb3N0UmVkaXJlY3RlZFRvIikpOwotICAgICAgICAKLSAgICAgICAgV0tTdHJp
bmdSZWYgaG9zdFJlZGlyZWN0ZWRGcm9tID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0UmVkaXJlY3Rl
ZEZyb21LZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdFJlZGlyZWN0ZWRUbyA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaG9zdFJlZGlyZWN0ZWRUb0tleS5nZXQoKSkpOwotICAgICAgICAK
KyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVz
c2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3RSZWRpcmVjdGVkRnJvbSA9IHN0cmluZ1ZhbHVl
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3RSZWRpcmVjdGVkRnJvbSIpOworICAgICAgICBh
dXRvIGhvc3RSZWRpcmVjdGVkVG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnks
ICJIb3N0UmVkaXJlY3RlZFRvIik7CiAgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1JlZ2lzdGVy
ZWRBc1JlZGlyZWN0aW5nVG8oaG9zdFJlZGlyZWN0ZWRGcm9tLCBob3N0UmVkaXJlY3RlZFRvKTsK
LSAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVh
bkNyZWF0ZShpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8pKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGlzUmVnaXN0ZXJl
ZEFzUmVkaXJlY3RpbmdUbykpOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9u
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmlu
Z0dldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYm9vbCBoYXNI
YWRVc2VySW50ZXJhY3Rpb24gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0
aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGhvc3ROYW1lKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNIYWRVc2VySW50
ZXJhY3Rpb24pKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYm9vbCBoYXNIYWRV
c2VySW50ZXJhY3Rpb24gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KSk7CisgICAgICAg
IHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShoYXNIYWRVc2VySW50ZXJhY3Rpb24pKTsK
ICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJJc1N0YXRpc3RpY3NPbmx5SW5EYXRhYmFzZU9uY2UiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsK
LSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkg
PSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgYXV0
byBzdWJIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Vi
SG9zdCIpKTsKLSAgICAgICAgYXV0byB0b3BIb3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiVG9wSG9zdCIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5n
UmVmIHN1Ykhvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHN1Ykhvc3RLZXkuZ2V0KCkpKTsKLSAgICAg
ICAgV0tTdHJpbmdSZWYgdG9wSG9zdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdG9wSG9zdEtleS5nZXQo
KSkpOwotCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gZGljdGlvbmFyeVZh
bHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBzdWJIb3N0ID0gc3RyaW5nVmFsdWUobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCAiU3ViSG9zdCIpOworICAgICAgICBhdXRvIHRvcEhvc3QgPSBz
dHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb3BIb3N0Iik7CiAgICAgICAgIGJv
b2wgc3RhdGlzdGljSW5EYXRhYmFzZU9uY2UgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
aXNTdGF0aXN0aWNzT25seUluRGF0YWJhc2VPbmNlKHN1Ykhvc3QsIHRvcEhvc3QpOwogICAgICAg
ICByZXR1cm4gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoc3RhdGlzdGljSW5EYXRhYmFzZU9uY2Up
KTsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKSB7Ci0gICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwot
ICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHZhbHVlS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VmFsdWUiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZh
bHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKLSAgICAgICAgCi0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJl
ZChob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgYXV0byBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAg
ICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9z
dE5hbWUiKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keURp
Y3Rpb25hcnksICJWYWx1ZSIpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyZWQoaG9zdE5hbWUsIHZhbHVlKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZCIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVk
ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQo
aG9zdE5hbWUpOwotICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKGlzR3JhbmRmYXRoZXJlZCkpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICBib29sIGlzR3JhbmRmYXRoZXJlZCA9IFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5pc1N0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShpc0dyYW5kZmF0aGVy
ZWQpKTsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldFVzZUlUUERhdGFiYXNlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0KLSAgICAgICAgV0tC
b29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VJVFBEYXRhYmFzZShX
S0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0VXNlSVRQRGF0YWJhc2UoYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlv
bmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlS
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3RO
YW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3ROYW1lS2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVIb3N0TmFt
ZSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0
aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0b3BGcmFt
ZUhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3ROYW1lS2V5LmdldCgpKSk7
Ci0KKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUo
bWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5nVmFsdWUobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWUiKTsKKyAgICAgICAgYXV0byB0b3BGcmFtZUhvc3RO
YW1lID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiVG9wRnJhbWVIb3N0TmFt
ZSIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1N1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihob3N0TmFtZSwgdG9wRnJhbWVIb3N0TmFtZSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW4iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9z
dE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b3BGcmFtZUhvc3RO
YW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9wRnJhbWVI
b3N0TmFtZSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiB0
b3BGcmFtZUhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0b3BGcmFtZUhvc3ROYW1lS2V5Lmdl
dCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRp
Y3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJp
bmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRv
IHRvcEZyYW1lSG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJU
b3BGcmFtZUhvc3ROYW1lIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGhvc3ROYW1lLCB0b3BG
cmFtZUhvc3ROYW1lKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlz
dGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAg
ICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGhvc3ROYW1lUmVkaXJlY3RlZFRvS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0
cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsK
LSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8gPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25h
cnksIGhvc3ROYW1lUmVkaXJlY3RlZFRvS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBh
dXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7
CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25h
cnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIGhvc3ROYW1lUmVkaXJlY3RlZFRvID0gc3Ry
aW5nVmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSG9zdE5hbWVSZWRpcmVjdGVkVG8iKTsK
ICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0VG8oaG9zdE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZFRvKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdEZyb20iKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlv
bmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlS
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3RO
YW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUi
KSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZVJlZGlyZWN0ZWRG
cm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVS
ZWRpcmVjdGVkRnJvbSIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1l
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmlu
Z1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZVJl
ZGlyZWN0ZWRGcm9tS2V5LmdldCgpKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1
dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFt
ZSIpOworICAgICAgICBhdXRvIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20gPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZVJlZGlyZWN0ZWRGcm9tIik7CiAgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20oaG9zdE5hbWUsIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVSZWRpcmVjdGVkVG9LZXkg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZVJlZGlyZWN0
ZWRUbyIpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlE
aWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0
TmFtZVJlZGlyZWN0ZWRUbyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVSZWRpcmVjdGVkVG9L
ZXkuZ2V0KCkpKTsKLSAgICAgICAgCisgICAgICAgIGF1dG8gbWVzc2FnZUJvZHlEaWN0aW9uYXJ5
ID0gZGljdGlvbmFyeVZhbHVlKG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFtZSA9
IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgIkhvc3ROYW1lIik7CisgICAgICAg
IGF1dG8gaG9zdE5hbWVSZWRpcmVjdGVkVG8gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rp
b25hcnksICJIb3N0TmFtZVJlZGlyZWN0ZWRUbyIpOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhob3N0TmFt
ZSwgaG9zdE5hbWVSZWRpcmVjdGVkVG8pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20iKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgp
KTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWVSZWRpcmVjdGVkRnJvbSIpKTsKLSAgICAgICAg
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFt
ZUtleS5nZXQoKSkpOwotICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9t
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tS2V5LmdldCgpKSk7Ci0g
ICAgICAgIAorICAgICAgICBhdXRvIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlW
YWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZSht
ZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0TmFtZSIpOworICAgICAgICBhdXRvIGhvc3ROYW1l
UmVkaXJlY3RlZEZyb20gPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJIb3N0
TmFtZVJlZGlyZWN0ZWRGcm9tIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRTdGF0aXN0aWNzVG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oaG9zdE5hbWUsIGhvc3RO
YW1lUmVkaXJlY3RlZEZyb20pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRT
dGF0aXN0aWNzQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiIpKSB7Ci0gICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkp
OwotICAgICAgICAKLSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBh
dXRvIGZyb21Ib3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
RnJvbUhvc3QiKSk7Ci0gICAgICAgIGF1dG8gdG9Ib3N0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG9Ib3N0IikpOwotCi0gICAgICAgIFdLU3RyaW5nUmVmIGZy
b21Ib3N0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBmcm9tSG9zdEtleS5nZXQoKSkpOwotICAgICAgICBX
S1N0cmluZ1JlZiB0b0hvc3QgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRvSG9zdEtleS5nZXQoKSkpOwot
ICAgICAgICAKKyAgICAgICAgYXV0byBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5
VmFsdWUobWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGZyb21Ib3N0ID0gc3RyaW5nVmFsdWUo
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiRnJvbUhvc3QiKTsKKyAgICAgICAgYXV0byB0b0hvc3Qg
PSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJUb0hvc3QiKTsKICAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NDcm9zc1NpdGVMb2FkV2l0
aExpbmtEZWNvcmF0aW9uKGZyb21Ib3N0LCB0b0hvc3QpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIikpIHsKLSAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgp
KTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRT
dGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihXS0RvdWJsZUdldFZhbHVlKHNlY29u
ZHMpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NU
aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZVZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKQEAgLTE2MDAsOTcgKzExNTQsNjkgQEAg
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9u
b3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2
YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NTZXRJc1J1bm5pbmdUZXN0IikpIHsKLSAg
ICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBl
SUQoKSk7Ci0gICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U3RhdGlzdGljc0lzUnVubmluZ1Rlc3QoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NJc1J1bm5pbmdU
ZXN0KGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sZWFuVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTWluaW11bVRpbWVC
ZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVS
ZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWluaW11bVRpbWVC
ZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01pbmltdW1UaW1l
QmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdU
aW1lIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Rv
dWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19j
YXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKFdLRG91YmxlR2V0VmFs
dWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3Rh
dGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGVWYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNYXhTdGF0aXN0aWNzRW50cmllcyIpKSB7
Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRU
eXBlSUQoKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKFdLVUludDY0R2V0VmFsdWUoZW50
cmllcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c01heFN0YXRpc3RpY3NFbnRyaWVzKHVpbnQ2NFZhbHVlKG1lc3NhZ2VCb2R5KSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFBydW5lRW50cmllc0Rvd25UbyIpKSB7Ci0gICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQo
KSk7Ci0gICAgICAgIFdLVUludDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25UbyhXS1VJbnQ2NEdldFZhbHVlKGVudHJpZXMpKTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcnVuZUVu
dHJpZXNEb3duVG8odWludDY0VmFsdWUobWVzc2FnZUJvZHkpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTdGF0aXN0aWNzRGVsZXRlQ29va2llc0Zvckhvc3QiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgp
KTsKLSAgICAgICAgCi0gICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25h
cnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB2YWx1ZUtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkluY2x1ZGVIdHRwT25seUNvb2tpZXMiKSk7Ci0gICAgICAgIAotICAgICAgICBXS1N0cmlu
Z1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKLSAg
ICAgICAgV0tCb29sZWFuUmVmIGluY2x1ZGVIdHRwT25seUNvb2tpZXMgPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCB2YWx1ZUtleS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NEZWxldGVDb29raWVzRm9ySG9zdChob3N0TmFtZSwgV0tC
b29sZWFuR2V0VmFsdWUoaW5jbHVkZUh0dHBPbmx5Q29va2llcykpOworICAgICAgICBhdXRvIG1l
c3NhZ2VCb2R5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAg
ICAgIGF1dG8gaG9zdE5hbWUgPSBzdHJpbmdWYWx1ZShtZXNzYWdlQm9keURpY3Rpb25hcnksICJI
b3N0TmFtZSIpOworICAgICAgICBhdXRvIGluY2x1ZGVIdHRwT25seUNvb2tpZXMgPSBib29sZWFu
VmFsdWUobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCAiSW5jbHVkZUh0dHBPbmx5Q29va2llcyIpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0RlbGV0ZUNvb2tp
ZXNGb3JIb3N0KGhvc3ROYW1lLCBpbmNsdWRlSHR0cE9ubHlDb29raWVzKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UiKSkgewotICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkp
OwotICAgICAgICAKLSAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBhdXRvIGhvc3ROYW1lID0gc3RyaW5n
VmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBib29sIGhhc0xvY2FsU3RvcmFnZSA9IFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2UoaG9zdE5h
bWUpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0xv
Y2FsU3RvcmFnZSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0Nh
Y2hlTWF4QWdlQ2FwIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5
KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9
IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAoV0tEb3VibGVH
ZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkpKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJIYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9uIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKTsKLSAgICAgICAgCi0gICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgYXV0byBob3N0TmFt
ZSA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgYm9vbCBoYXNJc29sYXRlZFNl
c3Npb24gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzU3RhdGlzdGljc0lzb2xhdGVk
U2Vzc2lvbihob3N0TmFtZSk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRXSyhXS0Jvb2xl
YW5DcmVhdGUoaGFzSXNvbGF0ZWRTZXNzaW9uKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJDbGVhckRPTUNhY2hlIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgb3JpZ2lu
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQorICAgICAgICBhdXRv
IG9yaWdpbiA9IHN0cmluZ1ZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmNsZWFyRE9NQ2FjaGUob3JpZ2luKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQpAQCAtMTcwMSwzNSArMTIyNywyNCBAQCBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVj
dGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiSGFzRE9NQ2FjaGUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBv
cmlnaW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCisgICAgICAg
IGF1dG8gb3JpZ2luID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBib29sIGhh
c0RPTUNhY2hlID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhc0RPTUNhY2hlKG9yaWdp
bik7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS0Jv
b2xlYW5DcmVhdGUoaGFzRE9NQ2FjaGUpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGhhc0RPTUNhY2hlKSk7CiAgICAgfQog
CiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJET01D
YWNoZVNpemUiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICBXS1N0cmluZ1JlZiBvcmlnaW4gPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotCisgICAgICAgIGF1dG8gb3JpZ2lu
ID0gc3RyaW5nVmFsdWUobWVzc2FnZUJvZHkpOwogICAgICAgICBhdXRvIGRvbUNhY2hlU2l6ZSA9
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5kb21DYWNoZVNpemUob3JpZ2luKTsKLSAgICAg
ICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRl
KGRvbUNhY2hlU2l6ZSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShkb21DYWNoZVNpemUpKTsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFsbG93U3RvcmFn
ZVF1b3RhSW5jcmVhc2UiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKLSAgICAgICAgYXV0byBjYW5JbmNyZWFzZSA9
IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkp
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFsbG93U3RvcmFnZVF1
b3RhSW5jcmVhc2UoY2FuSW5jcmVhc2UpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZShib29sZWFuVmFsdWUobWVzc2FnZUJv
ZHkpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbmplY3RVc2VyU2NyaXB0IikpIHsK
LSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5
cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KTsKLQotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuaW5qZWN0VXNlclNjcmlwdChzY3JpcHQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuaW5qZWN0VXNlclNjcmlwdChzdHJpbmdWYWx1ZShtZXNzYWdlQm9keSkpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTE3MzksMTUgKzEyNTQsMTIgQEAgV0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3Vz
TWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXQiKSkg
ewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0
VHlwZUlEKCkpOwotICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tE
b3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKFdLRG91YmxlR2V0VmFs
dWUoc2Vjb25kcykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2Vy
dmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoZG91YmxlVmFsdWUobWVzc2FnZUJvZHkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIGF1dG8gdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4obWVzc2FnZUJvZHkpKTsKKyAgICAgICAgYXV0byB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQ
cm9jZXNzID0gYm9vbGVhblZhbHVlKG1lc3NhZ2VCb2R5KTsKICAgICAgICAgV0tDb250ZXh0U2V0
VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuY29udGV4dCgpLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMTc2NSw2MCArMTI3NywzNSBAQCBXS1JldGFpblB0
cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdl
RnJvbUluamVjdGVkQgogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiQWRkVGVzdEtleVRvS2V5Y2hhaW4iKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsK
LSAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIHRlc3RLZXlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHByaXZhdGVLZXlLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJQcml2YXRlS2V5IikpOwotICAgICAgICBXS1N0cmluZ1JlZiBwcml2YXRlS2V5V0sg
PSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0
S2V5RGljdGlvbmFyeSwgcHJpdmF0ZUtleUtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBhdHRyTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJBdHRyTGFiZWwiKSk7Ci0gICAgICAgIFdLU3RyaW5nUmVmIGF0dHJMYWJl
bFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
dGVzdEtleURpY3Rpb25hcnksIGF0dHJMYWJlbEtleS5nZXQoKSkpOwotCi0gICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBhcHBsaWNhdGlvblRhZ0tleSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uVGFnIikpOwotICAgICAgICBXS1N0cmlu
Z1JlZiBhcHBsaWNhdGlvblRhZ1dLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkodGVzdEtleURpY3Rpb25hcnksIGFwcGxpY2F0aW9uVGFnS2V5Lmdl
dCgpKSk7Ci0KKyAgICAgICAgYXV0byB0ZXN0S2V5RGljdGlvbmFyeSA9IGRpY3Rpb25hcnlWYWx1
ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gcHJpdmF0ZUtleVdLID0gc3RyaW5nVmFsdWUo
dGVzdEtleURpY3Rpb25hcnksICJQcml2YXRlS2V5Iik7CisgICAgICAgIGF1dG8gYXR0ckxhYmVs
V0sgPSBzdHJpbmdWYWx1ZSh0ZXN0S2V5RGljdGlvbmFyeSwgIkF0dHJMYWJlbCIpOworICAgICAg
ICBhdXRvIGFwcGxpY2F0aW9uVGFnV0sgPSBzdHJpbmdWYWx1ZSh0ZXN0S2V5RGljdGlvbmFyeSwg
IkFwcGxpY2F0aW9uVGFnIik7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5h
ZGRUZXN0S2V5VG9LZXljaGFpbih0b1dURlN0cmluZyhwcml2YXRlS2V5V0spLCB0b1dURlN0cmlu
ZyhhdHRyTGFiZWxXSyksIHRvV1RGU3RyaW5nKGFwcGxpY2F0aW9uVGFnV0spKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJDbGVhblVwS2V5Y2hhaW4iKSkgewotICAgICAgICBBU1NFUlQo
V0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKLSAg
ICAgICAgV0tEaWN0aW9uYXJ5UmVmIHRlc3REaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0
aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGF0dHJMYWJlbEtleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IkF0dHJMYWJlbCIpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgYXR0ckxhYmVsV0sgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh0ZXN0RGljdGlvbmFy
eSwgYXR0ckxhYmVsS2V5LmdldCgpKSk7Ci0KLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGFwcGxpY2F0aW9uTGFiZWxLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJBcHBsaWNhdGlvbkxhYmVsIikpOwotICAgICAgICBXS1N0cmluZ1JlZiBhcHBsaWNh
dGlvbkxhYmVsV0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRl
bUZvcktleSh0ZXN0RGljdGlvbmFyeSwgYXBwbGljYXRpb25MYWJlbEtleS5nZXQoKSkpOwotCisg
ICAgICAgIGF1dG8gdGVzdERpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5VmFsdWUobWVzc2FnZUJvZHkp
OworICAgICAgICBhdXRvIGF0dHJMYWJlbFdLID0gc3RyaW5nVmFsdWUodGVzdERpY3Rpb25hcnks
ICJBdHRyTGFiZWwiKTsKKyAgICAgICAgYXV0byBhcHBsaWNhdGlvbkxhYmVsV0sgPSBzdHJpbmdW
YWx1ZSh0ZXN0RGljdGlvbmFyeSwgIkFwcGxpY2F0aW9uTGFiZWwiKTsKICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmNsZWFuVXBLZXljaGFpbih0b1dURlN0cmluZyhhdHRyTGFi
ZWxXSyksIGFwcGxpY2F0aW9uTGFiZWxXSyA/IHRvV1RGU3RyaW5nKGFwcGxpY2F0aW9uTGFiZWxX
SykgOiBTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiS2V5RXhpc3RzSW5L
ZXljaGFpbiIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwotICAgICAgICBXS0RpY3Rpb25hcnlSZWYgdGVzdERp
Y3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKLQot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXR0ckxhYmVsS2V5ID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXR0ckxhYmVsIikpOwotICAgICAgICBXS1N0
cmluZ1JlZiBhdHRyTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5LCBhdHRyTGFiZWxLZXkuZ2V0KCkpKTsKLQot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXBwbGljYXRpb25MYWJlbEtleSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFwcGxpY2F0aW9uTGFiZWwiKSk7
Ci0gICAgICAgIFdLU3RyaW5nUmVmIGFwcGxpY2F0aW9uTGFiZWxXSyA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHRlc3REaWN0aW9uYXJ5LCBhcHBs
aWNhdGlvbkxhYmVsS2V5LmdldCgpKSk7Ci0KKyAgICAgICAgYXV0byB0ZXN0RGljdGlvbmFyeSA9
IGRpY3Rpb25hcnlWYWx1ZShtZXNzYWdlQm9keSk7CisgICAgICAgIGF1dG8gYXR0ckxhYmVsV0sg
PSBzdHJpbmdWYWx1ZSh0ZXN0RGljdGlvbmFyeSwgIkF0dHJMYWJlbCIpOworICAgICAgICBhdXRv
IGFwcGxpY2F0aW9uTGFiZWxXSyA9IHN0cmluZ1ZhbHVlKHRlc3REaWN0aW9uYXJ5LCAiQXBwbGlj
YXRpb25MYWJlbCIpOwogICAgICAgICBib29sIGtleUV4aXN0c0luS2V5Y2hhaW4gPSBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkua2V5RXhpc3RzSW5LZXljaGFpbih0b1dURlN0cmluZyhhdHRy
TGFiZWxXSyksIHRvV1RGU3RyaW5nKGFwcGxpY2F0aW9uTGFiZWxXSykpOwotICAgICAgICBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGtleUV4
aXN0c0luS2V5Y2hhaW4pKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJu
IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRlKGtleUV4aXN0c0luS2V5Y2hhaW4pKTsKICAgICB9CiAK
LSAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNlcnZl
clRydXN0RXZhbHVhdGlvbkNhbGxiYWNrQ2FsbHNDb3VudCIpKSB7Ci0gICAgICAgIFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2VydmVyVHJ1c3RFdmFsdWF0aW9uQ2FsbGJhY2tDYWxsc0NvdW50
KCkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXJ2ZXJUcnVzdEV2YWx1YXRpb25DYWxs
YmFja0NhbGxzQ291bnQiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNlcnZlclRydXN0RXZhbHVhdGlvbkNhbGxiYWNr
Q2FsbHNDb3VudCgpKSk7CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNob3VsZERpc21pc3NKYXZhU2NyaXB0QWxlcnRzQXN5bmNocm9ub3VzbHki
KSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KFdL
Qm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTaG91bGREaXNtaXNzSmF2YVNjcmlwdEFsZXJ0c0FzeW5jaHJvbm91c2x5KGJvb2xl
YW5WYWx1ZShtZXNzYWdlQm9keSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
QEAgLTE4NDgsMTYgKzEzMzUsMTMgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2Nh
dGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEFk
Q2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nIikpIHsKLSAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7Ci0g
ICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRDbGlj
a0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoV0tCb29sZWFuR2V0VmFsdWUodmFs
dWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRy
aWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2xlYW5WYWx1ZShtZXNzYWdlQm9keSkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBZENsaWNrQXR0cmlidXRpb25D
b252ZXJzaW9uVVJMRm9yVGVzdGluZyIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tVUkxHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLVVJMUmVmIHVybCA9
IHN0YXRpY19jYXN0PFdLVVJMUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVz
dGluZyh1cmwpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QWRDbGlj
a0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmcoc3RhdGljX2Nhc3Q8V0tVUkxSZWY+
KG1lc3NhZ2VCb2R5KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTkw
MiwxNyArMTM4NiwxMCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpydW5VSVNpZGVTY3JpcHQoV0tT
dHJpbmdSZWYgc2NyaXB0LCB1bnNpZ25lZCBzY3JpcHRDYWxsYmFjawogCiB2b2lkIFRlc3RJbnZv
Y2F0aW9uOjp1aVNjcmlwdERpZENvbXBsZXRlKGNvbnN0IFN0cmluZyYgcmVzdWx0LCB1bnNpZ25l
ZCBzY3JpcHRDYWxsYmFja0lEKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxVSVNp
ZGVTY3JpcHRDYWxsYmFjayIpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25h
cnlSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiByZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJSZXN1bHQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGNhbGxiYWNrSURLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJDYWxsYmFja0lEIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBjYWxs
YmFja0lEVmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHNjcmlwdENhbGxiYWNrSUQpKTsK
LQotICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHJlc3VsdEtleS5n
ZXQoKSwgdG9XSyhyZXN1bHQpLmdldCgpKTsKLSAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3Nh
Z2VCb2R5LmdldCgpLCBjYWxsYmFja0lES2V5LmdldCgpLCBjYWxsYmFja0lEVmFsdWUuZ2V0KCkp
OwotCi0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgYXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRh
YmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKKyAgICBzZXRWYWx1ZShtZXNzYWdlQm9keSwgIlJlc3Vs
dCIsIHJlc3VsdCk7CisgICAgc2V0VmFsdWUobWVzc2FnZUJvZHksICJDYWxsYmFja0lEIiwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHNjcmlwdENhbGxiYWNrSUQpKTsKKyAgICBwb3N0UGFnZU1lc3Nh
Z2UoIkNhbGxVSVNpZGVTY3JpcHRDYWxsYmFjayIsIG1lc3NhZ2VCb2R5KTsKIH0KIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6b3V0cHV0VGV4dChjb25zdCBXVEY6OlN0cmluZyYgdGV4dCkKQEAgLTE5
MjIsMTc0ICsxMzk5LDE0MyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpvdXRwdXRUZXh0KGNvbnN0
IFdURjo6U3RyaW5nJiB0ZXh0KQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRCZWdpblN3aXBl
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkQmVnaW5Td2lwZUNhbGxiYWNr
IikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
MCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkQmVnaW5Td2lwZUNhbGxiYWNrIik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OndpbGxFbmRTd2lwZSgpCiB7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FsbFdpbGxFbmRTd2lwZUNhbGxiYWNrIikpOwotICAgIFdLUGFnZVBvc3RN
ZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJDYWxsV2lsbEVuZFN3aXBlQ2FsbGJhY2siKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZGlkRW5kU3dpcGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRFbmRT
d2lwZUNhbGxiYWNrIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkRW5kU3dpcGVDYWxs
YmFjayIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZW1vdmVTd2lwZVNuYXBzaG90
KCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVtb3ZlU3dpcGVTbmFwc2hv
dENhbGxiYWNrIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVtb3ZlU3dpcGVTbmFw
c2hvdENhbGxiYWNrIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246Om5vdGlmeURvd25sb2Fk
RG9uZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTm90aWZ5RG93bmxvYWREb25lIikp
OwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJOb3RpZnlEb3dubG9hZERvbmUiKTsKIH0KIAogdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkQ2xlYXJTdGF0aXN0aWNzSW5NZW1vcnlBbmRQZXJzaXN0ZW50U3Rv
cmUoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NJ
bk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERp
ZENsZWFyU3RhdGlzdGljc0luTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIik7CiB9CiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZENsZWFyU3RhdGlzdGljc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92
YWwoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRDbGVhclN0YXRpc3RpY3NU
aHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlk
Q2xlYXJTdGF0aXN0aWNzVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbCIpOwogfQogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlcigpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyIikpOwot
ICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7Cisg
ICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIiKTsK
IH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29v
a2llcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFNob3VsZEJsb2Nr
VGhpcmRQYXJ0eUNvb2tpZXMiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRT
ZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZFNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGUiKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBudWxscHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRU
b1NhbWVTaXRlU3RyaWN0Q29va2llcygpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bERpZFNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcG9zdFBhZ2VNZXNz
YWdlKCJDYWxsRGlkU2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXMiKTsKIH0KIAogdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZGlkU2V0Rmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbigpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEZpcnN0UGFydHlIb3N0Q05BTUVEb21haW4iKSk7
Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxs
cHRyKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRGaXJzdFBhcnR5SG9zdENOQU1F
RG9tYWluIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFRoaXJkUGFydHlDTkFN
RURvbWFpbigpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFRoaXJkUGFy
dHlDTkFNRURvbWFpbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG51bGxwdHIpOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFRo
aXJkUGFydHlDTkFNRURvbWFpbiIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZXNl
dFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0ZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQ2FsbERpZFJlc2V0U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlIikpOwotICAgIFdLUGFn
ZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBh
Z2VNZXNzYWdlKCJDYWxsRGlkUmVzZXRTdGF0aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUiKTsKIH0K
IAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0QmxvY2tDb29raWVzRm9ySG9zdCgpCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldEJsb2NrQ29va2llc0Zvckhvc3QiKSk7
Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsK
KyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNhbGxEaWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0Iik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoKQogewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRTdGF0aXN0aWNzRGVidWdNb2RlIikp
OwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7
CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0U3RhdGlzdGljc0RlYnVnTW9kZSIpOwog
fQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRTZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlIikpOwotICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1
bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkU2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkU2V0TGFzdFNlZW4oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRTZXRM
YXN0U2VlbiIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldExhc3RTZWVuIik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZE1lcmdlU3RhdGlzdGljKCkKIHsKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkTWVyZ2VTdGF0aXN0aWMiKSk7Ci0gICAgV0tQYWdlUG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1l
c3NhZ2UoIkNhbGxEaWRNZXJnZVN0YXRpc3RpYyIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9u
OjpkaWRTZXRFeHBpcmVkU3RhdGlzdGljKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
YWxsRGlkU2V0RXhwaXJlZFN0YXRpc3RpYyIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERp
ZFNldEV4cGlyZWRTdGF0aXN0aWMiKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
UHJldmFsZW50UmVzb3VyY2UoKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxEaWRT
ZXRQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNldFBy
ZXZhbGVudFJlc291cmNlIik7CiB9CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpKTsKLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVzc2FnZSgiQ2FsbERpZFNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSIpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRT
ZXRIYXNIYWRVc2VySW50ZXJhY3Rpb24oKQogewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNh
bGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNh
bGxEaWRTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb24iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKFZlY3RvcjxTdHJpbmc+JiYgZG9t
YWlucykKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVjZWl2ZUFsbFN0b3Jh
Z2VBY2Nlc3NFbnRyaWVzIikpOwotICAgIAotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZUFycmF5
UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAg
YXV0byBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CiAgICAg
Zm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKQotICAgICAgICBXS0FycmF5QXBwZW5kSXRlbSht
ZXNzYWdlQm9keS5nZXQoKSwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhk
b21haW4udXRmOCgpLmRhdGEoKSkpLmdldCgpKTsKLSAgICAKLSAgICBXS1BhZ2VQb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAg
ICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHRvV0soZG9tYWluKS5nZXQo
KSk7CisgICAgcG9zdFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVjZWl2ZUFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzIiwgbWVzc2FnZUJvZHkpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNl
aXZlTG9hZGVkU3VicmVzb3VyY2VEb21haW5zKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucykKIHsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNl
RG9tYWlucyIpKTsKLSAgICAKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAoYXV0
byYgZG9tYWluIDogZG9tYWlucykKLSAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVzc2FnZUJv
ZHkuZ2V0KCksIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZG9tYWluLnV0
ZjgoKS5kYXRhKCkpKS5nZXQoKSk7Ci0KLSAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAgICAgV0tBcnJheUFw
cGVuZEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIHRvV0soZG9tYWluKS5nZXQoKSk7CisgICAgcG9z
dFBhZ2VNZXNzYWdlKCJDYWxsRGlkUmVjZWl2ZUxvYWRlZFN1YnJlc291cmNlRG9tYWlucyIsIG1l
c3NhZ2VCb2R5KTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVtb3ZlQWxsU2Vzc2lv
bkNyZWRlbnRpYWxzKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkUmVtb3Zl
QWxsU2Vzc2lvbkNyZWRlbnRpYWxzQ2FsbGJhY2siKSk7Ci0gICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICBwb3N0UGFnZU1lc3NhZ2UoIkNh
bGxEaWRSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHNDYWxsYmFjayIpOwogfQogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkaWRTZXRBcHBCb3VuZERvbWFpbnMoKQogewotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkNhbGxEaWRTZXRBcHBCb3VuZERvbWFpbnMiKSk7Ci0gICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBudWxscHRyKTsKKyAgICBwb3N0UGFn
ZU1lc3NhZ2UoIkNhbGxEaWRTZXRBcHBCb3VuZERvbWFpbnMiKTsKIH0KIAogdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKQpAQCAtMjEwNCw4ICsxNTUwLDcg
QEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbigpCiAKIHZvaWQg
VGVzdEludm9jYXRpb246OnBlcmZvcm1DdXN0b21NZW51QWN0aW9uKCkKIHsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJQZXJmb3JtQ3VzdG9tTWVudUFjdGlvbiIpKTsKLSAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgIHBvc3RQYWdlTWVz
c2FnZSgiUGVyZm9ybUN1c3RvbU1lbnVBY3Rpb24iKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6aW5pdGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQoKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhMTVmYzBhMGU5YWZhZTM0MWNjY2QwNjAzODNl
ZDMwMWE3MjQxYjZiLi42MTcxOGFjNjU1ODgxNzc4ZTgzYzk3ZmJlMTc4Mjc4Yzg3MGU2YjhmIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRl
c3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzU1LDYgKzM1NSw4IEBACiAJ
CTg0MUNDMDBEMTgxMTg1QkYwMDQyRTlCNiAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NDFDQzAwRTE4MTE4NUJGMDA0MkU5QjYgLyogT3B0aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBXZWJLaXRUZXN0UnVubmVyICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFj
aC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJLaXRUZXN0UnVu
bmVyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQk5MzM4RDFCQTI1MEE3
OUVCMDBFODI3RjYgLyogSlNCYXNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNCYXNpY3MuaDsgcGF0
aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTMzOEQxQkUyNTBCRDlERDAwRTgyN0Y2IC8qIERpY3Rpb25hcnlG
dW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGlvbmFyeUZ1bmN0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzc2NDE3NjIxMEQ3MzYwMDBBM0RBQUUgLyogV2ViS2l0
VGVzdFJ1bm5lcldpbmRvdy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzNzY0MTc3MjEwRDczNjEwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDNzg4MUYyNTBDNjlFNDAwQzBBQTI0
IC8qIFJlZnRlc3RGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gUmVmdGVzdEZ1bmN0aW9ucy5jcHA7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL1Jl
ZnRlc3RGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODkyLDYg
Kzg5NCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTM3OEQ0
NDIyMTMzNDZEMDAwMDZBNzc3QiAvKiBjb25maWcuaCAqLywKKwkJCQk5MzM4RDFCRTI1MEJEOURE
MDBFODI3RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9ucy5oICovLAogCQkJCUJDOTlBNDg0MTIwODkw
MUEwMDdFOUYwOCAvKiBTdHJpbmdGdW5jdGlvbnMuaCAqLywKIAkJCQk5QjM2QTI3MDIwOTQ1M0Ew
MDAzRTA2NTEgLyogV2hhdFRvRHVtcC5oICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9XZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAKaW5kZXggNDU4Njc3ZjUwOWIx
MTc0MzkzYWU0YzM4Y2EwOTQ1N2M4ZTgwZjg0Yy4uY2Q1ZmM2NjIxNWE0YjAzNzk2ODJjNzJiMmVj
MWQxZjBiOTgwNzNiMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJOb3Rp
ZmljYXRpb25Qcm92aWRlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJOb3Rp
ZmljYXRpb25Qcm92aWRlci5jcHAKQEAgLTEyNiw4ICsxMjYsOCBAQCB2b2lkIFdlYk5vdGlmaWNh
dGlvblByb3ZpZGVyOjpjbG9zZVdlYk5vdGlmaWNhdGlvbihXS05vdGlmaWNhdGlvblJlZiBub3Rp
ZmljYXRpbwogCiAgICAgcmVtb3ZlR2xvYmFsSURGcm9tSURNYXAobV9sb2NhbFRvR2xvYmFsTm90
aWZpY2F0aW9uSURNYXAsIGlkKTsKIAotICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB3a0lE
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpZCkpOwotICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CisgICAg
YXV0byB3a0lEID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpZCkpOworICAgIGF1dG8gYXJyYXkg
PSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIFdLQXJyYXlBcHBlbmRJdGVt
KGFycmF5LmdldCgpLCB3a0lELmdldCgpKTsKICAgICBXS05vdGlmaWNhdGlvbk1hbmFnZXJQcm92
aWRlckRpZENsb3NlTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25NYW5hZ2VyLCBhcnJheS5nZXQo
KSk7CiB9CkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6
cmVtb3ZlTm90aWZpY2F0aW9uTWFuYWdlcihXS05vdGlmaWNhdGlvbk1hbmFnZXJSZWYKICAgICBh
dXRvIHRvUmVtb3ZlID0gaXRlcmF0b3ItPnZhbHVlOwogICAgIFdLUmV0YWluUHRyPFdLTm90aWZp
Y2F0aW9uTWFuYWdlclJlZj4gZ3VhcmQobWFuYWdlcik7CiAgICAgbV9vd25lZE5vdGlmaWNhdGlv
bnMucmVtb3ZlKGl0ZXJhdG9yKTsKLSAgICBXS1JldGFpblB0cjxXS011dGFibGVBcnJheVJlZj4g
YXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOworICAgIGF1dG8gYXJyYXkg
PSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwogICAgIGZvciAodWludDY0X3Qgbm90
aWZpY2F0aW9uSUQgOiB0b1JlbW92ZSkgewogICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX293bmlu
Z01hbmFnZXIucmVtb3ZlKG5vdGlmaWNhdGlvbklEKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChz
dWNjZXNzLCBzdWNjZXNzKTsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFdlYk5vdGlmaWNhdGlv
blByb3ZpZGVyOjpyZXNldCgpCiAgICAgZm9yIChhdXRvJiBub3RpZmljYXRpb25QYWlyIDogbV9v
d25lZE5vdGlmaWNhdGlvbnMpIHsKICAgICAgICAgaWYgKG5vdGlmaWNhdGlvblBhaXIudmFsdWUu
aXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFdLUmV0YWluUHRyPFdL
TXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7
CisgICAgICAgIGF1dG8gYXJyYXkgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRlKCkpOwog
ICAgICAgICBmb3IgKHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEIDogbm90aWZpY2F0aW9uUGFpci52
YWx1ZSkKICAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKGFycmF5LmdldCgpLCBhZG9wdFdL
KFdLVUludDY0Q3JlYXRlKG5vdGlmaWNhdGlvbklEKSkuZ2V0KCkpOwogCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcAppbmRleCAyMGQ1YTFhYWRiMjllMzMyYmUy
OWIyYjFmNGMyMzYwOTE5YmEwZmYxLi5jOWQ0N2ZkNjNiODRlNDZlNDYyYTUwZmY0YmUwN2JmMzQ2
OGFjYTYwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFn
ZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJXb3JrUXVldWVNYW5hZ2VyLmgiCiAKICNpbmNs
dWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2UuaD4KICNp
bmNsdWRlIDxXZWJLaXQvV0tQYWdlUHJpdmF0ZS5oPgpAQCAtNzUsNyArNzYsNyBAQCB0ZW1wbGF0
ZSA8V29ya1F1ZXVlSXRlbTo6VHlwZSB0eXBlPgogY2xhc3MgU2NyaXB0SXRlbSA6IHB1YmxpYyBX
b3JrUXVldWVJdGVtIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTY3JpcHRJdGVtKGNvbnN0IFN0
cmluZyYgc2NyaXB0KQotICAgICAgICA6IG1fc2NyaXB0KGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc2NyaXB0LnV0ZjgoKS5kYXRhKCkpKSkKKyAgICAgICAgOiBtX3Njcmlw
dCh0b1dLKHNjcmlwdCkpCiAgICAgewogICAgIH0KIApAQCAtMTYxLDcgKzE2Miw3IEBAIHZvaWQg
V29ya1F1ZXVlTWFuYWdlcjo6cXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBTdHJpbmcmIGNvbnRl
bnQsIGNvbnN0IFN0cmluZyYKICAgICBjbGFzcyBMb2FkSFRNTFN0cmluZ0l0ZW0gOiBwdWJsaWMg
V29ya1F1ZXVlSXRlbSB7CiAgICAgcHVibGljOgogICAgICAgICBMb2FkSFRNTFN0cmluZ0l0ZW0o
Y29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIGNvbnN0IFN0cmlu
ZyYgdW5yZWFjaGFibGVVUkwpCi0gICAgICAgICAgICA6IG1fY29udGVudChhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnRlbnQudXRmOCgpLmRhdGEoKSkpKQorICAgICAg
ICAgICAgOiBtX2NvbnRlbnQodG9XSyhjb250ZW50KSkKICAgICAgICAgICAgICwgbV9iYXNlVVJM
KGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcoYmFzZVVSTC51dGY4KCkuZGF0YSgp
KSkpCiAgICAgICAgICAgICAsIG1fdW5yZWFjaGFibGVVUkwoYWRvcHRXSyhXS1VSTENyZWF0ZVdp
dGhVVEY4Q1N0cmluZyh1bnJlYWNoYWJsZVVSTC51dGY4KCkuZGF0YSgpKSkpCiAgICAgICAgIHsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCmluZGV4
IDY3MzM4ZjRhYTgyNzNjZmI2ODcyMjliZmJhZDNmYTRkZGIzN2I0ZGYuLjAxYzUzMWE5YjZhY2U4
ZTgxNjk0OGY2NzZjZTYzMWY1Mjc5NGI2YzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcApAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgQ0dDb250
ZXh0UmVmIGNyZWF0ZUNHQ29udGV4dEZyb21DR0ltYWdlKENHSW1hZ2VSZWYgaW1hZ2UpCiAgICAg
c2l6ZV90IHJvd0J5dGVzID0gKDQgKiBwaXhlbHNXaWRlICsgNjMpICYgfjYzOwogCiAgICAgLy8g
Q3JlYXRpbmcgdGhpcyBiaXRtYXAgaW4gdGhlIGRldmljZSBjb2xvciBzcGFjZSBzaG91bGQgcHJl
dmVudCBhbnkgY29sb3IgY29udmVyc2lvbiB3aGVuIHRoZSBpbWFnZSBvZiB0aGUgd2ViIHZpZXcg
aXMgZHJhd24gaW50byBpdC4KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNw
YWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgYXV0byBj
b2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgcGl4ZWxzV2lk
ZSwgcGl4ZWxzSGlnaCwgOCwgcm93Qnl0ZXMsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpOwogICAgIGlm
ICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02Myw3ICs2Myw3IEBAIHN0
YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0RnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBp
bWFnZSkKIAogc3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVDR0NvbnRleHRGcm9tSW1hZ2UoV0tJ
bWFnZVJlZiB3a0ltYWdlKQogewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFk
b3B0Q0YoV0tJbWFnZUNyZWF0ZUNHSW1hZ2Uod2tJbWFnZSkpOworICAgIGF1dG8gaW1hZ2UgPSBh
ZG9wdENGKFdLSW1hZ2VDcmVhdGVDR0ltYWdlKHdrSW1hZ2UpKTsKICAgICByZXR1cm4gY3JlYXRl
Q0dDb250ZXh0RnJvbUNHSW1hZ2UoaW1hZ2UuZ2V0KCkpOwogfQogCkBAIC0xMDksOSArMTA5LDkg
QEAgdm9pZCBjb21wdXRlU0hBMUhhc2hTdHJpbmdGb3JDb250ZXh0KENHQ29udGV4dFJlZiBiaXRt
YXBDb250ZXh0LCBjaGFyIGhhc2hTdHJpbmcKIAogc3RhdGljIHZvaWQgZHVtcEJpdG1hcChDR0Nv
bnRleHRSZWYgYml0bWFwQ29udGV4dCwgY29uc3QgY2hhciogY2hlY2tzdW0pCiB7Ci0gICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJ
bWFnZShiaXRtYXBDb250ZXh0KSk7Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGlt
YWdlRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7Ci0gICAgUmV0YWlu
UHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gaW1hZ2VEZXN0ID0gYWRvcHRDRihDR0ltYWdlRGVz
dGluYXRpb25DcmVhdGVXaXRoRGF0YShpbWFnZURhdGEuZ2V0KCksIGtVVFR5cGVQTkcsIDEsIDAp
KTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShi
aXRtYXBDb250ZXh0KSk7CisgICAgYXV0byBpbWFnZURhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0
ZU11dGFibGUoMCwgMCkpOworICAgIGF1dG8gaW1hZ2VEZXN0ID0gYWRvcHRDRihDR0ltYWdlRGVz
dGluYXRpb25DcmVhdGVXaXRoRGF0YShpbWFnZURhdGEuZ2V0KCksIGtVVFR5cGVQTkcsIDEsIDAp
KTsKICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShpbWFnZURlc3QuZ2V0KCksIGltYWdl
LmdldCgpLCAwKTsKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShpbWFnZURlc3QuZ2V0
KCkpOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0NyYXNoUmVw
b3J0ZXJJbmZvLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9DcmFzaFJlcG9ydGVy
SW5mby5tbQppbmRleCA0Yzc5YWI1Yjg1ZDY0MTg5YTdlMGEyOTZlZWE5MGMxZDgxMThkYzNkLi40
MTBkOWZkY2IzMWUyYzZlNmNhNzY0OTU2MTQ2MDYzOGMwOTEwNWViIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL0NyYXNoUmVwb3J0ZXJJbmZvLm1tCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvY29jb2EvQ3Jhc2hSZXBvcnRlckluZm8ubW0KQEAgLTM1LDEyICsz
NSwxMiBAQCBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGljIFN0cmluZyB0ZXN0UGF0aEZyb21VUkwo
V0tVUkxSZWYgdXJsKQogewotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2ZVUkwgPSBhZG9wdENG
KFdLVVJMQ29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybCkpOworICAgIGF1dG8gY2ZV
UkwgPSBhZG9wdENGKFdLVVJMQ29weUNGVVJMKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybCkpOwog
ICAgIGlmICghY2ZVUkwpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gc2NoZW1lQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVNjaGVtZShj
ZlVSTC5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcGF0aENGU3RyaW5nID0g
YWRvcHRDRihDRlVSTENvcHlQYXRoKGNmVVJMLmdldCgpKSk7CisgICAgYXV0byBzY2hlbWVDRlN0
cmluZyA9IGFkb3B0Q0YoQ0ZVUkxDb3B5U2NoZW1lKGNmVVJMLmdldCgpKSk7CisgICAgYXV0byBw
YXRoQ0ZTdHJpbmcgPSBhZG9wdENGKENGVVJMQ29weVBhdGgoY2ZVUkwuZ2V0KCkpKTsKIAogICAg
IFN0cmluZyBzY2hlbWVTdHJpbmcoc2NoZW1lQ0ZTdHJpbmcuZ2V0KCkpOwogICAgIFN0cmluZyBw
YXRoU3RyaW5nKHBhdGhDRlN0cmluZy5nZXQoKSk7CkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBT
dHJpbmcgdGVzdFBhdGhGcm9tVVJMKFdLVVJMUmVmIHVybCkKICAgICBpZiAoIWVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0cmluZywgImh0dHAiKSAmJiAhZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3RyaW5nLCAiaHR0cHMiKSkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBob3N0Q0ZTdHJpbmcgPSBh
ZG9wdENGKENGVVJMQ29weUhvc3ROYW1lKGNmVVJMLmdldCgpKSk7CisgICAgYXV0byBob3N0Q0ZT
dHJpbmcgPSBhZG9wdENGKENGVVJMQ29weUhvc3ROYW1lKGNmVVJMLmdldCgpKSk7CiAgICAgU3Ry
aW5nIGhvc3RTdHJpbmcoaG9zdENGU3RyaW5nLmdldCgpKTsKICAgICBpZiAoaG9zdFN0cmluZyA9
PSAiMTI3LjAuMC4xIikKICAgICAgICAgcmV0dXJuIHBhdGhTdHJpbmc7CmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0gYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KaW5kZXggMzY1
MzM3YWRmOTlmMGI5Y2RkNmFmMDk3ZmMwMmJlODdhNjcxNjY1Ny4uNzEzMDMyNmEzZTYxY2UyYmQw
YTc2ZGY3Mjg5OGQ5ZTRiMDA2M2IwNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZURhdGFTdG9yZShXS1BhZ2VDb25maWd1
cmF0aW9uUmVmLCBjb25zdCBUCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRl
V2ViVmlldyhXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9u
cykKIHsKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29waWVkQ29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsKKyAg
ICBhdXRvIGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtnbG9iYWxXZWJWaWV3Q29uZmln
dXJhdGlvbiBjb3B5XSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChvcHRp
b25zLnVzZURhdGFEZXRlY3Rpb24pCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Nv
Y29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KaW5kZXggNWM4NjJlOWIwZWM3N2QwNWUwNzcyOWRj
ZTY0NzZmNTg5MjEyM2IzOC4uOTE1ZjQ3NmM2MTVhZTYxMDkwZDkwY2E3OTc2YmY4ZjJjOTliNTY2
YiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tX
ZWJWaWV3Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldL
V2ViVmlldy5tbQpAQCAtOTAsNyArOTAsNyBAQCBJR05PUkVfV0FSTklOR1NfQkVHSU4oImRlcHJl
Y2F0ZWQtaW1wbGVtZW50YXRpb25zIikKIC0gKHZvaWQpZHJhZ0ltYWdlOihOU0ltYWdlICopYW5J
bWFnZSBhdDooTlNQb2ludCl2aWV3TG9jYXRpb24gb2Zmc2V0OihOU1NpemUpaW5pdGlhbE9mZnNl
dCBldmVudDooTlNFdmVudCAqKWV2ZW50IHBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBib2Fy
ZCBzb3VyY2U6KGlkKXNvdXJjZU9iaiBzbGlkZUJhY2s6KEJPT0wpc2xpZGVGbGFnCiBJR05PUkVf
V0FSTklOR1NfRU5ECiB7Ci0gICAgUmV0YWluUHRyPFdlYktpdFRlc3RSdW5uZXJEcmFnZ2luZ0lu
Zm8+IGRyYWdnaW5nSW5mbyA9IGFkb3B0TlMoW1tXZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZv
IGFsbG9jXSBpbml0V2l0aEltYWdlOmFuSW1hZ2Ugb2Zmc2V0OmluaXRpYWxPZmZzZXQgcGFzdGVi
b2FyZDpwYm9hcmQgc291cmNlOnNvdXJjZU9ial0pOworICAgIGF1dG8gZHJhZ2dpbmdJbmZvID0g
YWRvcHROUyhbW1dlYktpdFRlc3RSdW5uZXJEcmFnZ2luZ0luZm8gYWxsb2NdIGluaXRXaXRoSW1h
Z2U6YW5JbWFnZSBvZmZzZXQ6aW5pdGlhbE9mZnNldCBwYXN0ZWJvYXJkOnBib2FyZCBzb3VyY2U6
c291cmNlT2JqXSk7CiAgICAgW3NlbGYgZHJhZ2dpbmdVcGRhdGVkOmRyYWdnaW5nSW5mby5nZXQo
KV07CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaAppbmRleCBhYmMwYTUwYzk3MGMxYmIzM2YxZmIxMDkz
OTM1MmFmOGNhN2UwNDAzLi5jYzk4MTM5NDI0ZjI4ODA2NDQzOTg5ODM0NWMzZTdkNGVhNTUzMzc4
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJv
bGxlckNvY29hLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENv
bnRyb2xsZXJDb2NvYS5oCkBAIC0zMiwxMiArMzIsMTcgQEAgT0JKQ19DTEFTUyBUZXN0UnVubmVy
V0tXZWJWaWV3OwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNzIFVJU2NyaXB0Q29udHJvbGxlckNv
Y29hIDogcHVibGljIFVJU2NyaXB0Q29udHJvbGxlckNvbW1vbiB7Ci1wdWJsaWM6Citwcm90ZWN0
ZWQ6CisgICAgZXhwbGljaXQgVUlTY3JpcHRDb250cm9sbGVyQ29jb2EoVUlTY3JpcHRDb250ZXh0
Jik7CisgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldygpIGNvbnN0OworCisgICAgdm9p
ZCBkb0FzeW5jVGFzayhKU1ZhbHVlUmVmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKICAgICB2b2lk
IHNldFZpZXdTY2FsZShkb3VibGUpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TWluaW11bUVmZmVj
dGl2ZVdpZHRoKGRvdWJsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBiZWNvbWVGaXJzdFJlc3BvbmRl
cigpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzaWduRmlyc3RSZXNwb25kZXIoKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRvQXN5bmNUYXNrKEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVt
b3ZlVmlld0Zyb21XaW5kb3coSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCBhZGRWaWV3
VG9XaW5kb3coSlNWYWx1ZVJlZikgb3ZlcnJpZGU7CiAgICAgdm9pZCBvdmVycmlkZVByZWZlcmVu
Y2UoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKSBvdmVycmlkZTsKQEAgLTU5LDExICs2NCw2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgaW5zZXJ0QXR0YWNobWVudEZvckZpbGVQYXRoKEpTU3RyaW5n
UmVmIGZpbGVQYXRoLCBKU1N0cmluZ1JlZiBjb250ZW50VHlwZSwgSlNWYWx1ZVJlZiBjYWxsYmFj
aykgb3ZlcnJpZGU7CiAKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBVSVNjcmlwdENvbnRyb2xs
ZXJDb2NvYShVSVNjcmlwdENvbnRleHQmKTsKLSAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJW
aWV3KCkgY29uc3Q7Ci0KLXByaXZhdGU6CiAgICAgdm9pZCBjb21wbGV0ZVRhc2tBc3luY2hyb25v
dXNseUFmdGVyQWN0aXZpdHlTdGF0ZVVwZGF0ZSh1bnNpZ25lZCBjYWxsYmFja0lEKTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9s
bGVyQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJv
bGxlckNvY29hLm1tCmluZGV4IDk4YmI3NGI0MTNiOTUwM2U2OTg4MDdlZGI4NjI5OGUzNzBkY2Qw
ZjIuLjU4NDc5NzZmMjE4NTdmNTNmNDg1ZWNiMWZiMWViOTExNzIxYTU2ZGEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0K
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xsZXJDb2Nv
YS5tbQpAQCAtMTM1LDIyICsxMzUsMTggQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6
YWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYgY2FsbGJhY2spCiAKIHZvaWQgVUlTY3JpcHRDb250
cm9sbGVyQ29jb2E6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBwcmVmZXJlbmNlUmVm
LCBKU1N0cmluZ1JlZiB2YWx1ZVJlZikKIHsKLSAgICBXS1ByZWZlcmVuY2VzICpwcmVmZXJlbmNl
cyA9IHdlYlZpZXcoKS5jb25maWd1cmF0aW9uLnByZWZlcmVuY2VzOwotCi0gICAgU3RyaW5nIHBy
ZWZlcmVuY2UgPSB0b1dURlN0cmluZyh0b1dLKHByZWZlcmVuY2VSZWYpKTsKLSAgICBTdHJpbmcg
dmFsdWUgPSB0b1dURlN0cmluZyh0b1dLKHZhbHVlUmVmKSk7Ci0gICAgaWYgKHByZWZlcmVuY2Ug
PT0gIldlYktpdE1pbmltdW1Gb250U2l6ZSIpCi0gICAgICAgIHByZWZlcmVuY2VzLm1pbmltdW1G
b250U2l6ZSA9IHZhbHVlLnRvRG91YmxlKCk7CisgICAgaWYgKHRvV1RGU3RyaW5nKHByZWZlcmVu
Y2VSZWYpID09ICJXZWJLaXRNaW5pbXVtRm9udFNpemUiKQorICAgICAgICB3ZWJWaWV3KCkuY29u
ZmlndXJhdGlvbi5wcmVmZXJlbmNlcy5taW5pbXVtRm9udFNpemUgPSB0b1dURlN0cmluZyh2YWx1
ZVJlZikudG9Eb3VibGUoKTsKIH0KIAogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6Zmlu
ZFN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcsIHVuc2lnbmVkIGxvbmcgb3B0aW9ucywgdW5zaWdu
ZWQgbG9uZyBtYXhDb3VudCkKIHsKLSAgICBbd2ViVmlldygpIF9maW5kU3RyaW5nOnRvV1RGU3Ry
aW5nKHRvV0soc3RyaW5nKSkgb3B0aW9uczpvcHRpb25zIG1heENvdW50Om1heENvdW50XTsKKyAg
ICBbd2ViVmlldygpIF9maW5kU3RyaW5nOnRvV1RGU3RyaW5nKHN0cmluZykgb3B0aW9uczpvcHRp
b25zIG1heENvdW50Om1heENvdW50XTsKIH0KIAogSlNPYmplY3RSZWYgVUlTY3JpcHRDb250cm9s
bGVyQ29jb2E6OmNvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbShKU1N0cmluZ1JlZiBpbnRlcmZh
Y2VJdGVtKSBjb25zdAogewotICAgIE5TRGljdGlvbmFyeSAqY29udGVudERpY3Rpb25hcnkgPSBb
d2ViVmlldygpIF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06dG9XVEZTdHJpbmcodG9XSyhp
bnRlcmZhY2VJdGVtKSldOworICAgIE5TRGljdGlvbmFyeSAqY29udGVudERpY3Rpb25hcnkgPSBb
d2ViVmlldygpIF9jb250ZW50c09mVXNlckludGVyZmFjZUl0ZW06dG9XVEZTdHJpbmcoaW50ZXJm
YWNlSXRlbSldOwogICAgIHJldHVybiBKU1ZhbHVlVG9PYmplY3QobV9jb250ZXh0LT5qc0NvbnRl
eHQoKSwgW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OmNvbnRlbnREaWN0aW9uYXJ5IGluQ29udGV4
dDpbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOm1fY29udGV4dC0+anND
b250ZXh0KCldXS5KU1ZhbHVlUmVmLCBudWxscHRyKTsKIH0KIApAQCAtMjE5LDEyICsyMTUsMTAg
QEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYTo6cGFzdGUoKQogdm9pZCBVSVNjcmlwdENv
bnRyb2xsZXJDb2NvYTo6aW5zZXJ0QXR0YWNobWVudEZvckZpbGVQYXRoKEpTU3RyaW5nUmVmIGZp
bGVQYXRoLCBKU1N0cmluZ1JlZiBjb250ZW50VHlwZSwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsK
ICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250ZXh0LT5wcmVwYXJlRm9yQXN5bmNUYXNr
KGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25QZXJzaXN0ZW50KTsKLQotICAgIFJldGFpblB0cjxD
RlVSTFJlZj4gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmN1cnJlbnRUZXN0VVJMKCkpKTsKLSAg
ICBSZXRhaW5QdHI8TlNVUkw+IGF0dGFjaG1lbnRVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OnRvV1RGU3RyaW5nKHRvV0soZmlsZVBhdGgpKSByZWxhdGl2ZVRvVVJMOihfX2JyaWRnZSBOU1VS
TCAqKXRlc3RVUkwuZ2V0KCldOwotCi0gICAgYXV0byBmaWxlV3JhcHBlciA9IGFkb3B0TlMoW1tO
U0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFVSTDphdHRhY2htZW50VVJMLmdldCgpIG9wdGlv
bnM6MCBlcnJvcjpuaWxdKTsKLSAgICBbd2ViVmlldygpIF9pbnNlcnRBdHRhY2htZW50V2l0aEZp
bGVXcmFwcGVyOmZpbGVXcmFwcGVyLmdldCgpIGNvbnRlbnRUeXBlOnRvV1RGU3RyaW5nKHRvV0so
Y29udGVudFR5cGUpKSBjb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzKSB7CisgICAgYXV0byB0ZXN0
VVJMID0gYWRvcHRDRihXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuY3VycmVudFRlc3RVUkwoKSkpOworICAgIGF1dG8gYXR0YWNo
bWVudFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6dG9XVEZTdHJpbmcoZmlsZVBhdGgpIHJl
bGF0aXZlVG9VUkw6KF9fYnJpZGdlIE5TVVJMICopdGVzdFVSTC5nZXQoKV07CisgICAgYXV0byBm
aWxlV3JhcHBlciA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0V2l0aFVSTDph
dHRhY2htZW50VVJMIG9wdGlvbnM6MCBlcnJvcjpuaWxdKTsKKyAgICBbd2ViVmlldygpIF9pbnNl
cnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyLmdldCgpIGNvbnRlbnRUeXBl
OnRvV1RGU3RyaW5nKGNvbnRlbnRUeXBlKSBjb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzKSB7CiAg
ICAgICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2Nv
bnRleHQtPmFzeW5jVGFza0NvbXBsZXRlKGNhbGxiYWNrSUQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IubW0gYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbQppbmRleCBlMjk4MzhiYTgyOGZiNGJk
OTA4NTdhYjZiZWYyZmQ0NjU5ZmI0MjE4Li4wYzQ0NjMzNWIyNDBkNmE3ZTA2NzQxNGNhOWMzMDQw
YWE2ZTM1NDYzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVu
dEdlbmVyYXRvci5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdl
bmVyYXRvci5tbQpAQCAtMTg5LDcgKzE4OSw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0CiAKIC0g
KHZvaWQpX3NlbmRJT0hJREtleWJvYXJkRXZlbnQ6KHVpbnQ2NF90KXRpbWVzdGFtcCB1c2FnZToo
dWludDMyX3QpdXNhZ2UgaXNLZXlEb3duOihib29sKWlzS2V5RG93bgogewotICAgIFJldGFpblB0
cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0ZUtleWJv
YXJkRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRD
RihJT0hJREV2ZW50Q3JlYXRlS2V5Ym9hcmRFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LAogICAg
ICAgICB0aW1lc3RhbXAsCiAgICAgICAgIGtISURQYWdlX0tleWJvYXJkT3JLZXlwYWQsCiAgICAg
ICAgIHVzYWdlLApAQCAtMzYxLDcgKzM2MSw3IEBAIC0gKElPSElERXZlbnRSZWYpX2NyZWF0ZUlP
SElERXZlbnRUeXBlOihIYW5kRXZlbnRUeXBlKWV2ZW50VHlwZQogICAgICAgICBldmVudE1hc2sg
fD0ga0lPSElERGlnaXRpemVyRXZlbnRJZGVudGl0eTsKIAogICAgIHVpbnQ2NF90IG1hY2hUaW1l
ID0gbWFjaF9hYnNvbHV0ZV90aW1lKCk7Ci0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2
ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlRGlnaXRpemVyRXZlbnQoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgbWFjaFRpbWUsCisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURF
dmVudENyZWF0ZURpZ2l0aXplckV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1hY2hUaW1lLAog
ICAgICAgICBrSU9ISUREaWdpdGl6ZXJUcmFuc2R1Y2VyVHlwZUhhbmQsCiAgICAgICAgIDAsCiAg
ICAgICAgIDAsCkBAIC00NTMsNyArNDUzLDcgQEAgLSAoQk9PTClfc2VuZEhJREV2ZW50OihJT0hJ
REV2ZW50UmVmKWV2ZW50UmVmCiAgICAgICAgIF9pb1N5c3RlbUNsaWVudCA9IElPSElERXZlbnRT
eXN0ZW1DbGllbnRDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7CiAKICAgICBpZiAoZXZlbnRS
ZWYpIHsKLSAgICAgICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IHN0cm9uZ0V2ZW50ID0gZXZl
bnRSZWY7CisgICAgICAgIGF1dG8gc3Ryb25nRXZlbnQgPSByZXRhaW5QdHIoZXZlbnRSZWYpOwog
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewogICAg
ICAgICAgICAgdWludDMyX3QgY29udGV4dElEID0gW1VJQXBwbGljYXRpb24gc2hhcmVkQXBwbGlj
YXRpb25dLmtleVdpbmRvdy5fY29udGV4dElkOwogICAgICAgICAgICAgQVNTRVJUKGNvbnRleHRJ
RCk7CkBAIC01MTIsNyArNTEyLDcgQEAgLSAodm9pZClfdXBkYXRlVG91Y2hQb2ludHM6KENHUG9p
bnQqKXBvaW50cyBjb3VudDooTlNVSW50ZWdlciljb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRv
dWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0
ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aSB3aXRoUG9pbnRJbldpbmRvd0Nvb3JkaW5hdGVzOnBv
aW50c1tpXSBpc1RvdWNoaW5nOllFU107CiAgICAgfQogICAgIAotICAgIFJldGFpblB0cjxJT0hJ
REV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBl
OmhhbmRFdmVudFR5cGVdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3Jl
YXRlSU9ISURFdmVudFR5cGU6aGFuZEV2ZW50VHlwZV0pOwogICAgIFtzZWxmIF9zZW5kSElERXZl
bnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC01MjksNyArNTI5LDcgQEAgLSAodm9pZCl0b3Vj
aERvd25BdFBvaW50czooQ0dQb2ludCopbG9jYXRpb25zIHRvdWNoQ291bnQ6KE5TVUludGVnZXIp
dG91Y2hDb3VudAogICAgICAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRH
ZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6
aW5kZXggd2l0aFBvaW50SW5XaW5kb3dDb29yZGluYXRlczpsb2NhdGlvbnNbaW5kZXhdIGlzVG91
Y2hpbmc6WUVTXTsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRS
ZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpIYW5kRXZlbnRUb3VjaGVk
XSk7CisgICAgYXV0byBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRU
eXBlOkhhbmRFdmVudFRvdWNoZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVm
LmdldCgpXTsKIH0KIApAQCAtNTYzLDcgKzU2Myw3IEBAIC0gKHZvaWQpbGlmdFVwQXRQb2ludHM6
KENHUG9pbnQqKWxvY2F0aW9ucyB0b3VjaENvdW50OihOU1VJbnRlZ2VyKXRvdWNoQ291bnQKICAg
ICAgICAgW1tHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVkR2VuZXJhdGVkVG91Y2hl
c0RlYnVnV2luZG93XSB1cGRhdGVEZWJ1Z0luZGljYXRvckZvclRvdWNoOmluZGV4IHdpdGhQb2lu
dEluV2luZG93Q29vcmRpbmF0ZXM6Q0dQb2ludFplcm8gaXNUb3VjaGluZzpOT107CiAgICAgfQog
ICAgIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3Nl
bGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudExpZnRlZF0pOworICAgIGF1dG8gZXZl
bnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpIYW5kRXZlbnRMaWZ0
ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKICAgICAKICAg
ICBfYWN0aXZlUG9pbnRDb3VudCA9IG5ld1BvaW50Q291bnQ7CkBAIC02NDEsNyArNjQxLDcgQEAg
LSAodm9pZClzdHlsdXNEb3duQXRQb2ludDooQ0dQb2ludClsb2NhdGlvbiBhemltdXRoQW5nbGU6
KENHRmxvYXQpYXppbXV0aEFuZ2xlIGEKICAgICBfYWN0aXZlUG9pbnRzWzBdLmF6aW11dGhBbmds
ZSA9IE1fUEkgKiAyIC0gYXppbXV0aEFuZ2xlOwogICAgIF9hY3RpdmVQb2ludHNbMF0uYWx0aXR1
ZGVBbmdsZSA9IE1fUElfMiAtIGFsdGl0dWRlQW5nbGU7CiAKLSAgICBSZXRhaW5QdHI8SU9ISURF
dmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpT
dHlsdXNFdmVudFRvdWNoZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBf
Y3JlYXRlSU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRUb3VjaGVkXSk7CiAgICAgW3NlbGYgX3Nl
bmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTY1NSw3ICs2NTUsNyBAQCAtICh2
b2lkKXN0eWx1c01vdmVUb1BvaW50OihDR1BvaW50KWxvY2F0aW9uIGF6aW11dGhBbmdsZTooQ0dG
bG9hdClhemltdXRoQW5nbGUgYQogICAgIF9hY3RpdmVQb2ludHNbMF0uYXppbXV0aEFuZ2xlID0g
TV9QSSAqIDIgLSBhemltdXRoQW5nbGU7CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRpdHVkZUFu
Z2xlID0gTV9QSV8yIC0gYWx0aXR1ZGVBbmdsZTsKIAotICAgIFJldGFpblB0cjxJT0hJREV2ZW50
UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1
c0V2ZW50TW92ZWRdKTsKKyAgICBhdXRvIGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRl
SU9ISURFdmVudFR5cGU6U3R5bHVzRXZlbnRNb3ZlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZl
bnQ6ZXZlbnRSZWYuZ2V0KCldOwogfQogCkBAIC02NjgsNyArNjY4LDcgQEAgLSAodm9pZClzdHls
dXNVcEF0UG9pbnQ6KENHUG9pbnQpbG9jYXRpb24KICAgICBfYWN0aXZlUG9pbnRzWzBdLmF6aW11
dGhBbmdsZSA9IDA7CiAgICAgX2FjdGl2ZVBvaW50c1swXS5hbHRpdHVkZUFuZ2xlID0gMDsKIAot
ICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2Ny
ZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TGlmdGVkXSk7CisgICAgYXV0byBldmVudFJl
ZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOlN0eWx1c0V2ZW50TGlmdGVk
XSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKQEAgLTEw
MjEsNyArMTAyMSw3IEBAIC0gKHZvaWQpZGlzcGF0Y2hFdmVudFdpdGhJbmZvOihOU0RpY3Rpb25h
cnkgKilldmVudEluZm8KIHsKICAgICBBU1NFUlQoW05TVGhyZWFkIGlzTWFpblRocmVhZF0pOwog
Ci0gICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihbc2VsZiBf
Y3JlYXRlSU9ISURFdmVudFdpdGhJbmZvOmV2ZW50SW5mb10pOworICAgIGF1dG8gZXZlbnRSZWYg
PSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50V2l0aEluZm86ZXZlbnRJbmZvXSk7CiAg
ICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CiB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5oIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKaW5kZXggMjhk
MDYwYzZkZmM0NzFhOTA1NDkwNjgzOTVjM2Q0MGY2YTljMDk2Yi4uODU0NjQ0NzY2ZDhiYzVhODE1
ZDI2N2U5YTdiYTRhMjA1ZDZlNjEyMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLmgKQEAgLTI1LDExICsyNSwxMSBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKICNpbXBvcnQgIlVJU2NyaXB0
Q29udHJvbGxlckNvY29hLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZsb2F0UG9pbnQ7
CiBjbGFzcyBGbG9hdFJlY3Q7CkBAIC0zNywxMyArMzcsMTQgQEAgY2xhc3MgRmxvYXRSZWN0Owog
CiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVUlTY3JpcHRDb250cm9sbGVySU9TIDogcHVibGlj
IFVJU2NyaXB0Q29udHJvbGxlckNvY29hIHsKK2NsYXNzIFVJU2NyaXB0Q29udHJvbGxlcklPUyBm
aW5hbCA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSB7CiBwdWJsaWM6CiAgICAgZXhw
bGljaXQgVUlTY3JpcHRDb250cm9sbGVySU9TKFVJU2NyaXB0Q29udGV4dCYgY29udGV4dCkKICAg
ICAgICAgOiBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYShjb250ZXh0KQogICAgIHsKICAgICB9CiAK
K3ByaXZhdGU6CiAgICAgdm9pZCB3YWl0Rm9yT3V0c3RhbmRpbmdDYWxsYmFja3MoKSBvdmVycmlk
ZTsKICAgICB2b2lkIGRvQWZ0ZXJQcmVzZW50YXRpb25VcGRhdGUoSlNWYWx1ZVJlZikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkb0FmdGVyTmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZShKU1ZhbHVl
UmVmKSBvdmVycmlkZTsKQEAgLTE1Niw3ICsxNTcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRE
aWRFbmRTY3JvbGxpbmdDYWxsYmFjayhKU1ZhbHVlUmVmKSBvdmVycmlkZTsKICAgICB2b2lkIGNs
ZWFyQWxsQ2FsbGJhY2tzKCkgb3ZlcnJpZGU7CiAKLXByaXZhdGU6CiAgICAgdm9pZCB3YWl0Rm9y
TW9kYWxUcmFuc2l0aW9uVG9GaW5pc2goKSBjb25zdDsKICAgICB2b2lkIHdhaXRGb3JTaW5nbGVU
YXBUb1Jlc2V0KCkgY29uc3Q7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RGb3JNZW51QWN0
aW9uKENGU3RyaW5nUmVmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
aW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQppbmRleCAxMzBjNDk3YzI0MGQ4MzhiYjRhZmZm
ZDIwNzMxNDE3NWE4M2RiYjI2Li43YWY2ZWNmNTA5ODVmMTVlZjQ3YzE5MThiNjVhMmViZGE2ZDI2
YTA4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRy
b2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250
cm9sbGVySU9TLm1tCkBAIC02OCwyNCArNjgsMTQgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqdG9O
U0RpY3Rpb25hcnkoQ0dSZWN0IHJlY3QpCiAgICAgfTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGFy
cmF5TGVuZ3RoKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBhcnJheSkKLXsKLSAg
ICBhdXRvIGxlbmd0aFN0cmluZyA9IGFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJsZW5ndGgiKSk7Ci0gICAgaWYgKGF1dG8gbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5KGNvbnRleHQsIGFycmF5LCBsZW5ndGhTdHJpbmcuZ2V0KCksIG51bGxwdHIpKQotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBs
ZW5ndGhWYWx1ZSwgbnVsbHB0cikpOwotICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMgVmVjdG9y
PFN0cmluZz4gcGFyc2VNb2RpZmllckFycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIGFycmF5VmFsdWUpCiB7CiAgICAgaWYgKCFhcnJheVZhbHVlKQogICAgICAgICByZXR1cm4g
eyB9OwogCiAgICAgLy8gVGhlIHZhbHVlIG1heSBlaXRoZXIgYmUgYSBzdHJpbmcgd2l0aCBhIHNp
bmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBvZiBtb2RpZmllcnMuCi0gICAgaWYgKEpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCBhcnJheVZhbHVlKSkgewotICAgICAgICBhdXRvIHN0cmluZyA9IHRv
V1RGU3RyaW5nKHRvV0soYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcnJheVZh
bHVlLCBudWxscHRyKSkpKTsKLSAgICAgICAgcmV0dXJuIHsgc3RyaW5nIH07Ci0gICAgfQorICAg
IGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgYXJyYXlWYWx1ZSkpCisgICAgICAgIHJldHVy
biB7IHRvV1RGU3RyaW5nKGNvbnRleHQsIGFycmF5VmFsdWUpIH07CiAKICAgICBpZiAoIUpTVmFs
dWVJc09iamVjdChjb250ZXh0LCBhcnJheVZhbHVlKSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAg
LTkzLDE2ICs4Myw4IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwYXJzZU1vZGlmaWVyQXJyYXko
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgYXJyYXlWCiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYXJyYXlMZW5ndGgoY29udGV4dCwgYXJyYXkpOwogICAgIFZlY3RvcjxTdHJpbmc+IG1v
ZGlmaWVyczsKICAgICBtb2RpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBK
U09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgJmV4Y2VwdGlvbik7
Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
YXV0byBzdHJpbmcgPSBhZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAm
ZXhjZXB0aW9uKSk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgbW9kaWZpZXJzLmFwcGVuZCh0b1dURlN0cmluZyh0b1dLKHN0cmluZy5nZXQo
KSkpKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQor
ICAgICAgICBtb2RpZmllcnMuYXBwZW5kKHRvV1RGU3RyaW5nKGNvbnRleHQsIEpTT2JqZWN0R2V0
UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGFycmF5LCBpLCBudWxscHRyKSkpOwogICAgIHJldHVy
biBtb2RpZmllcnM7CiB9CiAKQEAgLTUxNCwxMCArNDk2LDkgQEAgdm9pZCBVSVNjcmlwdENvbnRy
b2xsZXJJT1M6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJlS2V5Ym9hcmQoSlNTdHJpbmdSZWYg
Y2hhcmEKICAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250ZXh0LT5wcmVwYXJlRm9yQXN5
bmNUYXNrKGNhbGxiYWNrLCBDYWxsYmFja1R5cGVOb25QZXJzaXN0ZW50KTsKIAogICAgIC8vIEFz
c3VtZXMgdGhhdCB0aGUga2V5Ym9hcmQgaXMgYWxyZWFkeSBzaG93bi4KLSAgICBbW0hJREV2ZW50
R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlQcmVzczp0b1dURlN0cmluZyh0
b1dLKGNoYXJhY3RlcikpIGNvbXBsZXRpb25CbG9jazptYWtlQmxvY2tQdHIoW3RoaXMsIHN0cm9u
Z1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJRF0gewotICAgICAgICBpZiAoIW1fY29u
dGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9jb250ZXh0LT5hc3luY1Rhc2tD
b21wbGV0ZShjYWxsYmFja0lEKTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2
ZW50R2VuZXJhdG9yXSBrZXlQcmVzczp0b1dURlN0cmluZyhjaGFyYWN0ZXIpIGNvbXBsZXRpb25C
bG9jazptYWtlQmxvY2tQdHIoW3N0cm9uZ1RoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJ
RF0geworICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9jb250ZXh0KQorICAgICAgICAgICAgc3Ry
b25nVGhpcy0+bV9jb250ZXh0LT5hc3luY1Rhc2tDb21wbGV0ZShjYWxsYmFja0lEKTsKICAgICB9
KS5nZXQoKV07CiB9CiAKQEAgLTUzNCw3ICs1MTUsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxl
cklPUzo6cmF3S2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiB7CiAgICAgLy8gS2V5IGNhbiBiZSBl
aXRoZXIgYSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50IG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lh
bCBrZXkgKGUuZy4gImRvd25BcnJvdyIpLgogICAgIC8vIEhJREV2ZW50R2VuZXJhdG9yIGtub3dz
IGhvdyB0byBtYXAgdGhlc2Ugc3BlY2lhbCBrZXlzIHRvIHRoZSBhcHByb3ByaWF0ZSBrZXljb2Rl
LgotICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleURv
d246dG9XVEZTdHJpbmcodG9XSyhrZXkpKV07CisgICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFy
ZWRISURFdmVudEdlbmVyYXRvcl0ga2V5RG93bjp0b1dURlN0cmluZyhrZXkpXTsKICAgICBbW0hJ
REV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBzZW5kTWFya2VySElERXZl
bnRXaXRoQ29tcGxldGlvbkJsb2NrOl57IC8qIERvIG5vdGhpbmcgKi8gfV07CiB9CiAKQEAgLTU0
Miw3ICs1MjMsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6cmF3S2V5VXAoSlNTdHJp
bmdSZWYga2V5KQogewogICAgIC8vIEtleSBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIFVuaWNvZGUg
Y29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpYWwga2V5IChlLmcuICJkb3duQXJyb3ci
KS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93cyBob3cgdG8gbWFwIHRoZXNlIHNwZWNp
YWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29kZS4KLSAgICBbW0hJREV2ZW50R2VuZXJh
dG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlVcDp0b1dURlN0cmluZyh0b1dLKGtleSkp
XTsKKyAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBrZXlV
cDp0b1dURlN0cmluZyhrZXkpXTsKICAgICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2
ZW50R2VuZXJhdG9yXSBzZW5kTWFya2VySElERXZlbnRXaXRoQ29tcGxldGlvbkJsb2NrOl57IC8q
IERvIG5vdGhpbmcgKi8gfV07CiB9CiAKQEAgLTU1MCw3ICs1MzEsNyBAQCB2b2lkIFVJU2NyaXB0
Q29udHJvbGxlcklPUzo6a2V5RG93bihKU1N0cmluZ1JlZiBjaGFyYWN0ZXIsIEpTVmFsdWVSZWYg
bW9kaWZpZXJBcgogewogICAgIC8vIENoYXJhY3RlciBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIFVu
aWNvZGUgY29kZSBwb2ludCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpYWwga2V5IChlLmcuICJkb3du
QXJyb3ciKS4KICAgICAvLyBISURFdmVudEdlbmVyYXRvciBrbm93cyBob3cgdG8gbWFwIHRoZXNl
IHNwZWNpYWwga2V5cyB0byB0aGUgYXBwcm9wcmlhdGUga2V5Y29kZS4KLSAgICBTdHJpbmcgaW5w
dXRTdHJpbmcgPSB0b1dURlN0cmluZyh0b1dLKGNoYXJhY3RlcikpOworICAgIGF1dG8gaW5wdXRT
dHJpbmcgPSB0b1dURlN0cmluZyhjaGFyYWN0ZXIpOwogICAgIGF1dG8gbW9kaWZpZXJGbGFncyA9
IHBhcnNlTW9kaWZpZXJBcnJheShtX2NvbnRleHQtPmpzQ29udGV4dCgpLCBtb2RpZmllckFycmF5
KTsKIAogICAgIGZvciAoYXV0byYgbW9kaWZpZXJGbGFnIDogbW9kaWZpZXJGbGFncykKQEAgLTcy
Nyw3ICs3MDgsNyBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6YXBwbHlBdXRvY29ycmVj
dGlvbihKU1N0cmluZ1JlZiBuZXdTdHJpbmcsIEpTU3RyaW5nUgogICAgIHVuc2lnbmVkIGNhbGxi
YWNrSUQgPSBtX2NvbnRleHQtPnByZXBhcmVGb3JBc3luY1Rhc2soY2FsbGJhY2ssIENhbGxiYWNr
VHlwZU5vblBlcnNpc3RlbnQpOwogCiAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldyA9
IHRoaXMtPndlYlZpZXcoKTsKLSAgICBbd2ViVmlldyBhcHBseUF1dG9jb3JyZWN0aW9uOnRvV1RG
U3RyaW5nKHRvV0sobmV3U3RyaW5nKSkgdG9TdHJpbmc6dG9XVEZTdHJpbmcodG9XSyhvbGRTdHJp
bmcpKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKKyAgICBbd2ViVmlldyBhcHBseUF1dG9j
b3JyZWN0aW9uOnRvV1RGU3RyaW5nKG5ld1N0cmluZykgdG9TdHJpbmc6dG9XVEZTdHJpbmcob2xk
U3RyaW5nKSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKICAgICAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgbWFrZUJsb2NrUHRyKFt0aGlzLCBzdHJvbmdU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrSURdIHsKICAgICAgICAgICAgIC8vIGFwcGx5
QXV0b2NvcnJlY3Rpb24gY2FuIGNhbGwgaXRzIGNvbXBsZXRpb24gaGFuZGxlciBzeW5jaHJvbm91
c2x5LAogICAgICAgICAgICAgLy8gd2hpY2ggbWFrZXMgVUlTY3JpcHRDb250cm9sbGVyIHVuaGFw
cHkgKHNlZSBidWcgMTcyODg0KS4KQEAgLTExNTcsNyArMTEzOCw3IEBAIGJvb2wgVUlTY3JpcHRD
b250cm9sbGVySU9TOjppc1Nob3dpbmdEYXRhTGlzdFN1Z2dlc3Rpb25zKCkgY29uc3QKIAogdm9p
ZCBVSVNjcmlwdENvbnRyb2xsZXJJT1M6OnNldEtleWJvYXJkSW5wdXRNb2RlSWRlbnRpZmllcihK
U1N0cmluZ1JlZiBpZGVudGlmaWVyKQogewotICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRLZXlib2FyZElucHV0TW9kZUlkZW50aWZpZXIodG9XVEZTdHJpbmcodG9XSyhpZGVudGlm
aWVyKSkpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRLZXlib2FyZElucHV0
TW9kZUlkZW50aWZpZXIodG9XVEZTdHJpbmcoaWRlbnRpZmllcikpOwogfQogCiAvLyBGSVhNRTog
V3JpdGUgdGhpcyBpbiB0ZXJtcyBvZiBISURFdmVudEdlbmVyYXRvciBvbmNlIHdlIGtub3cgaG93
IHRvIHJlc2V0IGNhcHMgbG9jayBzdGF0ZQpAQCAtMTE3OCw3ICsxMTU5LDcgQEAgYm9vbCBVSVNj
cmlwdENvbnRyb2xsZXJJT1M6OmtleWJvYXJkSXNBdXRvbWF0aWNhbGx5U2hpZnRlZCgpIGNvbnN0
CiAKIEpTT2JqZWN0UmVmIFVJU2NyaXB0Q29udHJvbGxlcklPUzo6YXR0YWNobWVudEluZm8oSlNT
dHJpbmdSZWYganNBdHRhY2htZW50SWRlbnRpZmllcikKIHsKLSAgICBhdXRvIGF0dGFjaG1lbnRJ
ZGVudGlmaWVyID0gdG9XVEZTdHJpbmcodG9XSyhqc0F0dGFjaG1lbnRJZGVudGlmaWVyKSk7Cisg
ICAgYXV0byBhdHRhY2htZW50SWRlbnRpZmllciA9IHRvV1RGU3RyaW5nKGpzQXR0YWNobWVudElk
ZW50aWZpZXIpOwogICAgIF9XS0F0dGFjaG1lbnQgKmF0dGFjaG1lbnQgPSBbd2ViVmlldygpIF9h
dHRhY2htZW50Rm9ySWRlbnRpZmllcjphdHRhY2htZW50SWRlbnRpZmllcl07CiAgICAgX1dLQXR0
YWNobWVudEluZm8gKmF0dGFjaG1lbnRJbmZvID0gYXR0YWNobWVudC5pbmZvOwogCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9FdmVudFNlbmRlclByb3h5Lm1tIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvRXZlbnRTZW5kZXJQcm94eS5tbQppbmRleCAwNjcyYjU4
MWJmNjViNWFkOWEyYjg1ZmVhODYxNjQ4ZjIyM2ViNGM1Li4xMDI3Mjg4NDA4NGQyYzEwMjA4Y2Zh
MDcxNGYxYjEwYzVlZmMwYTBiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9FdmVudFNlbmRlclByb3h5Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL0V2
ZW50U2VuZGVyUHJveHkubW0KQEAgLTI3MiwyMCArMjcyLDEwIEBAIHN0YXRpYyBOU1RpbWVJbnRl
cnZhbCBhYnNvbHV0ZVRpbWVGb3JFdmVudFRpbWUoZG91YmxlIGN1cnJlbnRFdmVudFRpbWUpCiAK
IEV2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVzdENvbnRyb2xsZXIqIHRlc3RD
b250cm9sbGVyKQogICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0Q29udHJvbGxlcikKLSAgICAs
IG1fdGltZSgwKQotICAgICwgbV9wb3NpdGlvbigpCi0gICAgLCBtX2xlZnRNb3VzZUJ1dHRvbkRv
d24oZmFsc2UpCi0gICAgLCBtX2NsaWNrQ291bnQoMCkKLSAgICAsIG1fY2xpY2tUaW1lKDApCi0g
ICAgLCBtX2NsaWNrUG9zaXRpb24oKQotICAgICwgbV9jbGlja0J1dHRvbihrV0tFdmVudE1vdXNl
QnV0dG9uTm9CdXR0b24pCi0gICAgLCBldmVudE51bWJlcigwKQogewogfQogCi1FdmVudFNlbmRl
clByb3h5Ojp+RXZlbnRTZW5kZXJQcm94eSgpCi17Ci19CitFdmVudFNlbmRlclByb3h5Ojp+RXZl
bnRTZW5kZXJQcm94eSgpID0gZGVmYXVsdDsKIAogdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRh
dGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiB7CkBAIC0zOTQsNyArMzg0LDcgQEAg
c3RhdGljIHZvaWQgaGFuZGxlRm9yY2VFdmVudFN5bmNocm9ub3VzbHkoTlNFdmVudCAqZXZlbnQp
CiAKIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5OjpiZWdpblByZXNzdXJlRXZl
bnQoaW50IHN0YWdlKQogewotICAgIFJldGFpblB0cjxFdmVudFNlbmRlclN5bnRoZXRpY0V2ZW50
PiBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5bnRoZXRpY0V2ZW50IGFsbG9jXSBpbml0
UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0
aW9uLnkpCisgICAgYXV0byBldmVudCA9IGFkb3B0TlMoW1tFdmVudFNlbmRlclN5bnRoZXRpY0V2
ZW50IGFsbG9jXSBpbml0UHJlc3N1cmVFdmVudEF0TG9jYXRpb246TlNNYWtlUG9pbnQobV9wb3Np
dGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIGdsb2JhbExvY2F0aW9uOihbbV90ZXN0Q29u
dHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSBjb252ZXJ0UmVjdFRvU2Ny
ZWVuOk5TTWFrZVJlY3QobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnksIDEsIDEpXS5vcmlnaW4p
CiAgICAgICAgIHN0YWdlOnN0YWdlCiAgICAgICAgIHByZXNzdXJlOjAuNQpAQCAtNDA5LDcgKzM5
OSw3IEBAIFJldGFpblB0cjxOU0V2ZW50PiBFdmVudFNlbmRlclByb3h5OjpiZWdpblByZXNzdXJl
RXZlbnQoaW50IHN0YWdlKQogCiBSZXRhaW5QdHI8TlNFdmVudD4gRXZlbnRTZW5kZXJQcm94eTo6
cHJlc3N1cmVDaGFuZ2VFdmVudChpbnQgc3RhZ2UsIGZsb2F0IHByZXNzdXJlLCBFdmVudFNlbmRl
clByb3h5OjpQcmVzc3VyZUNoYW5nZURpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgUmV0YWlu
UHRyPEV2ZW50U2VuZGVyU3ludGhldGljRXZlbnQ+IGV2ZW50ID0gYWRvcHROUyhbW0V2ZW50U2Vu
ZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50QXRMb2NhdGlvbjpOU01h
a2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKKyAgICBhdXRvIGV2ZW50ID0gYWRv
cHROUyhbW0V2ZW50U2VuZGVyU3ludGhldGljRXZlbnQgYWxsb2NdIGluaXRQcmVzc3VyZUV2ZW50
QXRMb2NhdGlvbjpOU01ha2VQb2ludChtX3Bvc2l0aW9uLngsIG1fcG9zaXRpb24ueSkKICAgICAg
ICAgZ2xvYmFsTG9jYXRpb246KFttX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVdpbmRvdygpIGNvbnZlcnRSZWN0VG9TY3JlZW46TlNNYWtlUmVjdChtX3Bvc2l0aW9uLngs
IG1fcG9zaXRpb24ueSwgMSwgMSldLm9yaWdpbikKICAgICAgICAgc3RhZ2U6c3RhZ2UKICAgICAg
ICAgcHJlc3N1cmU6cHJlc3N1cmUKQEAgLTQzMSwxMCArNDIxLDEwIEBAIHZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6bW91c2VGb3JjZUNsaWNrKCkKIHsKICAgICBzZW5kTW91c2VEb3duVG9TdGFydFBy
ZXNzdXJlRXZlbnRzKCk7CiAKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9
IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcHJlRm9yY2VD
bGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246Oklu
Y3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBmb3JjZUNsaWNrID0gcHJlc3N1cmVD
aGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7Ci0gICAg
UmV0YWluUHRyPE5TRXZlbnQ+IHJlbGVhc2luZ1ByZXNzdXJlID0gcHJlc3N1cmVDaGFuZ2VFdmVu
dCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBiZWdp
blByZXNzdXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KDEpOworICAgIGF1dG8gcHJlRm9yY2VDbGlj
ayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3Jl
YXNpbmcpOworICAgIGF1dG8gZm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJl
c3N1cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gcmVsZWFzaW5nUHJl
c3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpE
ZWNyZWFzaW5nKTsKICAgICBOU0V2ZW50ICptb3VzZVVwID0gW05TRXZlbnQgbW91c2VFdmVudFdp
dGhUeXBlOk5TRXZlbnRUeXBlTGVmdE1vdXNlVXAKICAgICAgICAgbG9jYXRpb246TlNNYWtlUG9p
bnQobV9wb3NpdGlvbi54LCBtX3Bvc2l0aW9uLnkpCiAgICAgICAgIG1vZGlmaWVyRmxhZ3M6MApA
QCAtNDY4LDkgKzQ1OCw5IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c3RhcnRBbmRDYW5jZWxN
b3VzZUZvcmNlQ2xpY2soKQogewogICAgIHNlbmRNb3VzZURvd25Ub1N0YXJ0UHJlc3N1cmVFdmVu
dHMoKTsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBiZWdpblByZXNzdXJlID0gYmVnaW5QcmVz
c3VyZUV2ZW50KDEpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBpbmNyZWFzaW5nUHJlc3N1cmUg
PSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFz
aW5nKTsKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gcmVsZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3Vy
ZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpEZWNyZWFzaW5nKTsKKyAg
ICBhdXRvIGJlZ2luUHJlc3N1cmUgPSBiZWdpblByZXNzdXJlRXZlbnQoMSk7CisgICAgYXV0byBp
bmNyZWFzaW5nUHJlc3N1cmUgPSBwcmVzc3VyZUNoYW5nZUV2ZW50KDEsIFByZXNzdXJlQ2hhbmdl
RGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIHJlbGVhc2luZ1ByZXNzdXJlID0gcHJl
c3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7
CiAgICAgTlNFdmVudCAqbW91c2VVcCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0V2
ZW50VHlwZUxlZnRNb3VzZVVwCiAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KG1fcG9zaXRp
b24ueCwgbV9wb3NpdGlvbi55KQogICAgICAgICBtb2RpZmllckZsYWdzOjAKQEAgLTUwMyw5ICs0
OTMsOSBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlRm9yY2VEb3duKCkKIHsKICAgICBz
ZW5kTW91c2VEb3duVG9TdGFydFByZXNzdXJlRXZlbnRzKCk7CiAKLSAgICBSZXRhaW5QdHI8TlNF
dmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgxKTsKLSAgICBSZXRhaW5Q
dHI8TlNFdmVudD4gcHJlRm9yY2VDbGljayA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1
cmVDaGFuZ2VEaXJlY3Rpb246OkluY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBm
b3JjZU1vdXNlRG93biA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJl
Y3Rpb246OkluY3JlYXNpbmcpOworICAgIGF1dG8gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1
cmVFdmVudCgxKTsKKyAgICBhdXRvIHByZUZvcmNlQ2xpY2sgPSBwcmVzc3VyZUNoYW5nZUV2ZW50
KDEsIFByZXNzdXJlQ2hhbmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKKyAgICBhdXRvIGZvcmNl
TW91c2VEb3duID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgyLCBQcmVzc3VyZUNoYW5nZURpcmVjdGlv
bjo6SW5jcmVhc2luZyk7CiAKICAgICBOU1ZpZXcgKnRhcmdldFZpZXcgPSBbbV90ZXN0Q29udHJv
bGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkgaGl0VGVzdDpbYmVnaW5QcmVzc3Vy
ZSBsb2NhdGlvbkluV2luZG93XV07CiAgICAgdGFyZ2V0VmlldyA9IHRhcmdldFZpZXcgPyB0YXJn
ZXRWaWV3IDogbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7
CkBAIC01MjYsOSArNTE2LDkgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZUZvcmNlRG93
bigpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VGb3JjZVVwKCkKIHsKLSAgICBSZXRh
aW5QdHI8TlNFdmVudD4gYmVnaW5QcmVzc3VyZSA9IGJlZ2luUHJlc3N1cmVFdmVudCgyKTsKLSAg
ICBSZXRhaW5QdHI8TlNFdmVudD4gc3RhZ2VUd29FdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQo
MiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOwotICAgIFJldGFpblB0cjxO
U0V2ZW50PiBzdGFnZU9uZUV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudCgxLCBQcmVzc3VyZUNo
YW5nZURpcmVjdGlvbjo6RGVjcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNzdXJlID0gYmVn
aW5QcmVzc3VyZUV2ZW50KDIpOworICAgIGF1dG8gc3RhZ2VUd29FdmVudCA9IHByZXNzdXJlQ2hh
bmdlRXZlbnQoMiwgUHJlc3N1cmVDaGFuZ2VEaXJlY3Rpb246OkRlY3JlYXNpbmcpOworICAgIGF1
dG8gc3RhZ2VPbmVFdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoMSwgUHJlc3N1cmVDaGFuZ2VE
aXJlY3Rpb246OkRlY3JlYXNpbmcpOwogCiAgICAgLy8gU2luY2UgQXBwS2l0IGRvZXMgbm90IGlt
cGxlbWVudCBmb3JjZXVwL2Rvd24gYXMgbW91c2UgZXZlbnRzLCB3ZSBuZWVkIHRvIHNlbmQgdHdv
IHByZXNzdXJlIGV2ZW50cyB0byBkZXRlY3QKICAgICAvLyB0aGUgY2hhbmdlIGluIHN0YWdlIHRo
YXQgbWFya3MgdGhvc2UgbW9tZW50cy4KQEAgLTU1MSw4ICs1NDEsOCBAQCB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6Om1vdXNlRm9yY2VDaGFuZ2VkKGZsb2F0IGZvcmNlKQogewogICAgIGludCBzdGFn
ZSA9IGZvcmNlIDwgMSA/IDEgOiAyOwogICAgIGZsb2F0IHByZXNzdXJlID0gZm9yY2UgPCAxID8g
Zm9yY2UgOiBmb3JjZSAtIDE7Ci0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IGJlZ2luUHJlc3N1cmUg
PSBiZWdpblByZXNzdXJlRXZlbnQoc3RhZ2UpOwotICAgIFJldGFpblB0cjxOU0V2ZW50PiBwcmVz
c3VyZUNoYW5nZWRFdmVudCA9IHByZXNzdXJlQ2hhbmdlRXZlbnQoc3RhZ2UsIHByZXNzdXJlLCBQ
cmVzc3VyZUNoYW5nZURpcmVjdGlvbjo6SW5jcmVhc2luZyk7CisgICAgYXV0byBiZWdpblByZXNz
dXJlID0gYmVnaW5QcmVzc3VyZUV2ZW50KHN0YWdlKTsKKyAgICBhdXRvIHByZXNzdXJlQ2hhbmdl
ZEV2ZW50ID0gcHJlc3N1cmVDaGFuZ2VFdmVudChzdGFnZSwgcHJlc3N1cmUsIFByZXNzdXJlQ2hh
bmdlRGlyZWN0aW9uOjpJbmNyZWFzaW5nKTsKIAogICAgIE5TVmlldyAqdGFyZ2V0VmlldyA9IFtt
X3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSBoaXRUZXN0Olti
ZWdpblByZXNzdXJlIGxvY2F0aW9uSW5XaW5kb3ddXTsKICAgICB0YXJnZXRWaWV3ID0gdGFyZ2V0
VmlldyA/IHRhcmdldFZpZXcgOiBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVZpZXcoKTsKQEAgLTYxMSw4ICs2MDEsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6Omxl
YXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5
RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNpZ25l
ZCBrZXlMb2NhdGlvbikKIHsKLSAgICBOU1N0cmluZyogY2hhcmFjdGVyID0gW05TU3RyaW5nIHN0
cmluZ1dpdGhDU3RyaW5nOnRvU1REKGtleSkuY19zdHIoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmNvZGluZzpbTlNTdHJpbmcgZGVmYXVsdENTdHJpbmdFbmNvZGluZ11d
OworICAgIE5TU3RyaW5nKiBjaGFyYWN0ZXIgPSB0b1dURlN0cmluZyhrZXkpOwogCiAgICAgTlNT
dHJpbmcgKmV2ZW50Q2hhcmFjdGVyID0gY2hhcmFjdGVyOwogICAgIHVuc2lnbmVkIHNob3J0IGtl
eUNvZGUgPSAwOwpAQCAtODMyLDcgKzgyMSw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5
RG93bihXS1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCB1bnNpCiAK
IHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHkpCiB7Ci0g
ICAgUmV0YWluUHRyPENHRXZlbnRSZWY+IGNnU2Nyb2xsRXZlbnQgPSBhZG9wdENGKENHRXZlbnRD
cmVhdGVTY3JvbGxXaGVlbEV2ZW50MigwLCBrQ0dTY3JvbGxFdmVudFVuaXRMaW5lLCAyLCB5LCB4
LCAwKSk7CisgICAgYXV0byBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Ny
b2xsV2hlZWxFdmVudDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkpOwog
CiAgICAgLy8gU2V0IHRoZSBDR0V2ZW50IGxvY2F0aW9uIGluIGZsaXBwZWQgY29vcmRzIHJlbGF0
aXZlIHRvIHRoZSBmaXJzdCBzY3JlZW4sIHdoaWNoCiAgICAgLy8gY29tcGVuc2F0ZXMgZm9yIHRo
ZSBiZWhhdmlvciBvZiArW05TRXZlbnQgZXZlbnRXaXRoQ0dFdmVudDpdIHdoZW4gdGhlIGV2ZW50
IGhhcwpAQCAtODU5LDcgKzg0OCw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y29udGludW91
c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBib29sIHBhZ2VkKQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQgeCwg
aW50IHksIGludCBwaGFzZSwgaW50IG1vbWVudHVtKQogewotICAgIFJldGFpblB0cjxDR0V2ZW50
UmVmPiBjZ1Njcm9sbEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q3JlYXRlU2Nyb2xsV2hlZWxFdmVu
dDIoMCwga0NHU2Nyb2xsRXZlbnRVbml0TGluZSwgMiwgeSwgeCwgMCkpOworICAgIGF1dG8gY2dT
Y3JvbGxFdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENyZWF0ZVNjcm9sbFdoZWVsRXZlbnQyKDAsIGtD
R1Njcm9sbEV2ZW50VW5pdExpbmUsIDIsIHksIHgsIDApKTsKIAogICAgIC8vIFNldCB0aGUgQ0dF
dmVudCBsb2NhdGlvbiBpbiBmbGlwcGVkIGNvb3JkcyByZWxhdGl2ZSB0byB0aGUgZmlyc3Qgc2Ny
ZWVuLCB3aGljaAogICAgIC8vIGNvbXBlbnNhdGVzIGZvciB0aGUgYmVoYXZpb3Igb2YgK1tOU0V2
ZW50IGV2ZW50V2l0aENHRXZlbnQ6XSB3aGVuIHRoZSBldmVudCBoYXMKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQppbmRleCA2NDE3ODJjYTk3
ZTFkYWZiOTAwOTE5ZGIxOWIzNDc0YTU1NDM4OGU1Li41YTRlOTZiODFlYThjZGEwNmIzN2I0Njhl
NTg4NTllZjcxZWI0NmI4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9Q
bGF0Zm9ybVdlYlZpZXdNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxh
dGZvcm1XZWJWaWV3TWFjLm1tCkBAIC02NCw3ICs2NCw3IEBAIFBsYXRmb3JtV2ViVmlldzo6UGxh
dGZvcm1XZWJWaWV3KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24sIGNvbnN0
IFRlCiAgICAgaWYgKG1fb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUpCiAgICAgICAgIFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldFZhbHVlOkBZRVMgZm9yS2V5OkAi
V2ViS2l0MlVzZVJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhIl07CiAKLSAgICBSZXRhaW5QdHI8
V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2Nv
bmZpZ3VyYXRpb24gY29weV0pOworICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOwogICAgIFdLUHJlZmVyZW5jZXNTZXRUaHJlYWRlZFNj
cm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdlIFdLUHJlZmVyZW5jZXNSZWYpW2NvcGllZENvbmZpZ3Vy
YXRpb24gcHJlZmVyZW5jZXNdLCBtX29wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcpOwogCiAg
ICAgTlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIFRlc3RDb250cm9sbGVyOjp2aWV3V2lk
dGgsIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KaW5kZXggMTRiN2RjOWQwZjI0ZWMxMGU3OGFj
MmIwZTAzNjVhOWVhNjQ5YWIyNi4uYjIyMjg3MWNkMGEzOTE5ZTMzZWQ2MDZkMGY0NDE2ODg1Njkz
YTIwNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xs
ZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJN
YWMubW0KQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVD
b250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdAogICAgIGlm
ICghdGVzdC51cmxDb250YWlucygiY29udGVudGV4dGVuc2lvbnMvIikpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxDb3B5
Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGVzdC51cmwoKSkpOworICAgIGF1dG8gdGVzdFVS
TCA9IGFkb3B0Q0YoV0tVUkxDb3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGVzdC51cmwo
KSkpOwogICAgIE5TVVJMICpmaWx0ZXJVUkwgPSBbKF9fYnJpZGdlIE5TVVJMICopdGVzdFVSTC5n
ZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhFeHRlbnNpb246QCJqc29uIl07CiAKICAgICBfX2Jsb2Nr
IE5TU3RyaW5nICpjb250ZW50RXh0ZW5zaW9uU3RyaW5nOwpAQCAtMzcxLDE0ICszNzEsMTQgQEAg
c3RhdGljIE5TU2V0ICpzeXN0ZW1IaWRkZW5Gb250RmFtaWx5U2V0KCkKIAogc3RhdGljIFdLUmV0
YWluUHRyPFdLQXJyYXlSZWY+IGdlbmVyYXRlRm9udEFsbG93TGlzdCgpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlQXJyYXlSZWY+IHJlc3VsdCA9IGFkb3B0V0soV0tNdXRhYmxlQXJyYXlD
cmVhdGUoKSk7CisgICAgYXV0byByZXN1bHQgPSBhZG9wdFdLKFdLTXV0YWJsZUFycmF5Q3JlYXRl
KCkpOwogICAgIGZvciAoTlNTdHJpbmcgKmZvbnRGYW1pbHkgaW4gYWxsb3dlZEZvbnRGYW1pbHlT
ZXQoKSkgewogICAgICAgICBOU0FycmF5ICpmb250c0ZvckZhbWlseSA9IFtbTlNGb250TWFuYWdl
ciBzaGFyZWRGb250TWFuYWdlcl0gYXZhaWxhYmxlTWVtYmVyc09mRm9udEZhbWlseTpmb250RmFt
aWx5XTsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZhbWlseUluRm9udCA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW2ZvbnRGYW1pbHkgVVRGOFN0cmlu
Z10pKTsKKyAgICAgICAgYXV0byBmYW1pbHlJbkZvbnQgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKFtmb250RmFtaWx5IFVURjhTdHJpbmddKSk7CiAgICAgICAgIFdLQXJy
YXlBcHBlbmRJdGVtKHJlc3VsdC5nZXQoKSwgZmFtaWx5SW5Gb250LmdldCgpKTsKICAgICAgICAg
Zm9yIChOU0FycmF5ICpmb250SW5mbyBpbiBmb250c0ZvckZhbWlseSkgewogICAgICAgICAgICAg
Ly8gRm9udCBuYW1lIGlzIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgYXJyYXkuCi0gICAgICAgICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZm9udE5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKFtbZm9udEluZm8gb2JqZWN0QXRJbmRleDowXSBVVEY4U3RyaW5n
XSkpOworICAgICAgICAgICAgYXV0byBmb250TmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoW1tmb250SW5mbyBvYmplY3RBdEluZGV4OjBdIFVURjhTdHJpbmddKSk7
CiAgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShyZXN1bHQuZ2V0KCksIGZvbnROYW1lLmdl
dCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKICAgICAvLyBUZXN0aW5nIHVzZXMg
YSBwcml2YXRlIHNlc3Npb24sIHdoaWNoIGlzIG1lbW9yeSBvbmx5LiBIb3dldmVyIGNyZWF0aW5n
IG9uZSBpbnN0YW50aWF0ZXMgYSBzaGFyZWQgTlNVUkxDYWNoZSwKICAgICAvLyBhbmQgaWYgd2Ug
aGF2ZW4ndCBjcmVhdGVkIG9uZSB5ZXQsIHRoZSBkZWZhdWx0IG9uZSB3aWxsIGJlIGNyZWF0ZWQg
b24gZGlzay4KICAgICAvLyBNYWtpbmcgdGhlIHNoYXJlZCBjYWNoZSBtZW1vcnktb25seSBhdm9p
ZHMgdG91Y2hpbmcgdGhlIGZpbGUgc3lzdGVtLgotICAgIFJldGFpblB0cjxOU1VSTENhY2hlPiBz
aGFyZWRDYWNoZSA9CisgICAgYXV0byBzaGFyZWRDYWNoZSA9CiAgICAgICAgIGFkb3B0TlMoW1tO
U1VSTENhY2hlIGFsbG9jXSBpbml0V2l0aE1lbW9yeUNhcGFjaXR5OjEwMjQgKiAxMDI0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tDYXBhY2l0eTowCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrUGF0aDpuaWxdKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5o
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKaW5k
ZXggMGVhYjg5NDllNmJlYmZlZTY1OTQ3NTg5YWZiOWU4ZDliOGJlMWVjNy4uMmQyZDFkNmI4NDZl
Njg3OGIwYjFlYmRjMTY2N2MxNzVlOTE1NjY1ZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLmgKQEAgLTMxLDEzICszMSwxNCBAQCBP
QkpDX0NMQVNTIFdLV2ViVmlldzsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIFVJU2NyaXB0
Q29udHJvbGxlck1hYyA6IHB1YmxpYyBVSVNjcmlwdENvbnRyb2xsZXJDb2NvYSB7CitjbGFzcyBV
SVNjcmlwdENvbnRyb2xsZXJNYWMgZmluYWwgOiBwdWJsaWMgVUlTY3JpcHRDb250cm9sbGVyQ29j
b2EgewogcHVibGljOgogICAgIGV4cGxpY2l0IFVJU2NyaXB0Q29udHJvbGxlck1hYyhVSVNjcmlw
dENvbnRleHQmIGNvbnRleHQpCiAgICAgICAgIDogVUlTY3JpcHRDb250cm9sbGVyQ29jb2EoY29u
dGV4dCkKICAgICB7CiAgICAgfQogCitwcml2YXRlOgogICAgIHZvaWQgcmVwbGFjZVRleHRBdFJh
bmdlKEpTU3RyaW5nUmVmLCBpbnQsIGludCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB6b29tVG9TY2Fs
ZShkb3VibGUsIEpTVmFsdWVSZWYpIG92ZXJyaWRlOwogICAgIGRvdWJsZSB6b29tU2NhbGUoKSBj
b25zdCBvdmVycmlkZTsKQEAgLTYyLDcgKzYzLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBhY3Rp
dmF0ZUF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpTVmFsdWVSZWYgY2FsbGJhY2spIG92ZXJyaWRl
OwogCi1wcml2YXRlOgogICAgIE5TVGFibGVWaWV3ICpkYXRhTGlzdFN1Z2dlc3Rpb25zVGFibGVW
aWV3KCkgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9V
SVNjcmlwdENvbnRyb2xsZXJNYWMubW0KaW5kZXggY2QxMTMyOWE2NTQxZDdiNGViNzdkN2VjMTQ2
ODhlOTkyMWYyN2M1My4uYjVjYjUxODE1MDU5ZTdhMDkzYTE0MjM5OTFlODkxN2UzZWQzMDkwOCAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVy
TWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxl
ck1hYy5tbQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyTWFjOjpj
b21wbGV0ZUJhY2tTd2lwZShKU1ZhbHVlUmVmIGNhbGxiYWNrKQogCiB2b2lkIFVJU2NyaXB0Q29u
dHJvbGxlck1hYzo6cGxheUJhY2tFdmVudFN0cmVhbShKU1N0cmluZ1JlZiBldmVudFN0cmVhbSwg
SlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0cmVh
bSA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXZl
bnRTdHJlYW0pKTsKKyAgICBhdXRvIHN0cmVhbSA9IGFkb3B0Q0YoSlNTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXZlbnRTdHJlYW0pKTsKICAgICBwbGF5QmFja0V2ZW50
cyh3ZWJWaWV3KCksIG1fY29udGV4dCwgKF9fYnJpZGdlIE5TU3RyaW5nICopc3RyZWFtLmdldCgp
LCBjYWxsYmFjayk7CiB9CiAK
</data>
<flag name="review"
          id="425788"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>